Bundle
dsh-chatgpt-pip
DSH 插件:ChatGPT 画中画小窗 + 把 ChatGPT 定稿计划回流到新 DSH 对话执行
- Source
- alaxrpg
- License
- MIT
- Updated
- Updated 6 days ago
Readme
# dsh-chatgpt-pip DSH(DeepSeek Harness)插件:在会话输入区左侧打开 ChatGPT 普通聊天小窗,并把已复制的 ChatGPT 计划回流到新 DSH 对话执行。 ## 安装 0.4.0 支持 DSH Lite 原生小窗(外壳 `WKUIDelegate` 承接 `window.open`)。安装经插件市场「更新」流程;或选择本插件目录手动 `file:` 安装后重启 DSH。重启并刷新 GUI 后,可在 boot 清单确认 `dsh-chatgpt-pip`,并确认 `/plugins/dsh-chatgpt-pip/client.js` 返回 200;资源 URL 的 `rev` 应等于当前 `client.js` sha1 前 12 位。 ## 双按钮位置 进入任一 DSH 会话后,两个动作显示在 `conversation.input.left`(会话输入区左侧): 1. 「打开 ChatGPT 小窗」在前; 2. 「执行已复制计划」在后。 两个按钮均使用纯线性 SVG,并提供 tooltip 与 `aria-label`;不使用 ChatGPT 商标图标。该槽位是 session scope,因此没有会话时不会显示,属于预期行为。 ## ChatGPT 小窗 点击「打开 ChatGPT 小窗」会以命名 popup 打开 `https://chatgpt.com/`: - 首次打开和需要重开时固定请求 520×760;不自动读取或记忆用户拖动后的尺寸。 - 当插件持有的 `WindowProxy` 可访问且未关闭时,只聚焦已有窗口,不导航,因而保留当前聊天页面。 - 5 秒防误开:小窗成功打开后 5 秒内重复点击只会提示「小窗已打开,请切换到该窗口」,不会再次打开新窗口;超过 5 秒后再次点击走同名重开逻辑。 - `chatgpt.com` 的 COOP 隔离可能让插件无法区分「窗口仍在但被隔离」与「窗口真的关闭」。此时插件用相同窗口名调用 `window.open` 尽力复用或重开,但不承诺绝对只有一个窗口。 - 在 **DSH Lite**(macOS 原生外壳)中,`window.open` 由外壳的 `WKUIDelegate` 承接为**原生小窗**(与 DSH 主窗共享登录态)。窗口已存在时外壳只聚焦并返回 nil,插件据此视为「已复用成功」而非拦截;仅在没有任何历史窗口时才提示弹窗被拦截。 ### 登录、个性化、历史与隐私 这里打开的是普通 ChatGPT 聊天,不是临时聊天。登录由浏览器 profile cookie 保存,因此小窗会使用该账户的 Memory、Custom Instructions 和人格设置;对话会进入账户历史,并可能按 ChatGPT 自身规则更新 Memory。 插件不读取、存储或传输 ChatGPT 凭据、Cookie、Memory、Custom Instructions、人格设置或页面 DOM,也不会通过 API 操作 ChatGPT。 ## 执行已复制计划 1. 在 ChatGPT 回复中复制定稿计划。 2. 回到已有 DSH 会话,点击输入区左侧的「执行已复制计划」。 3. 弹层会尝试读取剪贴板;读取失败时可直接在文本框手动粘贴。 4. 查看或编辑全文,核对字符数,并在「目标工作区」下拉中确认或切换到目标 workspace(选项显示工作区标题与路径,超出 48 字符的路径中间省略);空文本无法执行。 5. 按需切换来源说明开关。关闭时原文发送,不截断、不改写。 6. 点击「在新对话中执行」,插件创建或复用 blank DSH 会话,并把最终文本作为首条消息发送。 任何内容都只会在用户于弹层中显式确认后发送;不存在定时或后台自动注入路径。 ## 为什么不是 iframe? `chatgpt.com` 使用 `x-frame-options: SAMEORIGIN`,不能跨站 iframe 嵌入;其 `cross-origin-opener-policy: same-origin` 也会限制 opener 对 popup 状态的观察。因此插件采用命名 popup。在 DSH Lite 中该 popup 由原生外壳落地为独立小窗;在其他浏览器(Chrome/Safari)中则是普通命名标签页/窗口,并把窗口复用描述为尽力行为,而不是绝对保证。 ## 浏览器建议 推荐 Chrome。Safari 或权限拒绝可能导致自动读取剪贴板失败,此时手动粘贴通道仍可使用。 ## 故障排查 | 症状 | 处理 | | --- | --- | | 看不到两个按钮 | 先进入任一 DSH 会话;无会话时 session scope 动作不会显示。再强制刷新并核对 boot 清单与 client.js 200。 | | 点击小窗按钮提示弹窗被拦截 | 在普通浏览器地址栏允许当前 DSH 地址弹出窗口后重试。在 **DSH Lite** 中则需确认外壳已升级到带 `WKUIDelegate` 原生小窗的版本(0.x+);无任何历史窗口时才会提示拦截。 | | 再次点击后出现多个窗口 | 5 秒内重复点击只提示不重开;超过 5 秒后的同名重开是尽力行为,COOP 隔离下仍无法承诺绝对单窗。DSH Lite 原生小窗为单例,重复点击只聚焦。 | | 弹层显示工作区 UUID | 0.3.0 起下拉按工作区标题+路径展示;仍显示 UUID 说明该工作区没有标题且路径不可读,或列表快照未就绪。 | | 重开后尺寸不是上次拖动值 | 这是预期行为;首次和重开固定为 520×760,不自动记忆拖动尺寸。 | | 读不到剪贴板 | 直接在预览文本框手动粘贴。 | | 提示未找到 workspace | 先在 DSH 中打开或创建一个工作区。 | | 执行失败 | 根据弹层中的具体错误重试;仍失败时重启 DSH 后再试。 | ## 开发验证 ```bash node --check lib/index.js node --check lib/client.js node --test openspec validate native-popup-support --strict ``` ## License MIT © 2026 alaxrpg
Install
dsh plugin --profile web add github:alaxrpg/dsh-chatgpt-pip
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-chatgpt-pip from the hub
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.