dsh-chatgpt-pip
DSH 插件:ChatGPT 画中画小窗 + 把 ChatGPT 定稿计划回流到新 DSH 对话执行
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 28, 2026
- Updated
- Aug 28, 2026
Introduction
dsh-chatgpt-pip
DSH(DeepSeek Harness)插件:ChatGPT 画中画小窗 + 把 ChatGPT 定稿计划回流到新 DSH 对话执行。
动机
ChatGPT Plus 会员的 Agent/API 类用法受 5 小时限额约束,而 web 聊天不限量。理想的日常工作流是:
- 在 ChatGPT web 里无限制地讨论、打磨执行计划;
- 把定稿计划交给本地 DSH agent 立即执行。
本插件把两个割裂的环境桥接起来:侧栏一键打开 ChatGPT 画中画小窗,会话头部一键把剪贴板中的计划文本注入新建的 DSH 对话——不再需要手动缩放浏览器标签、手动复制粘贴长文本。
安装
市场安装(推荐)
- 打开 DSH Web GUI 的插件市场;
- 搜索
dsh-chatgpt-pip并安装; - 重启 DSH 生效。
验证安装
- 强制刷新页面(macOS:
⌘⇧R)后,在浏览器 DevTools 的 Network 面板过滤plugins,boot 清单应出现dsh-chatgpt-pip行,且/plugins/dsh-chatgpt-pip/client.js请求返回 200; - DSH 侧栏底部出现「ChatGPT 画中画」入口即安装成功。
用法
入口一:ChatGPT 画中画小窗(侧栏底部)
- 点击 DSH 侧栏底部的「⊞ ChatGPT 画中画」入口(宽栏显示文字,窄栏仅显示图标);
- 浏览器打开(或聚焦已打开的)命名为
dsh-chatgpt-pip的 popup 小窗,加载https://chatgpt.com/; - 再次点击入口会复用并聚焦同一个窗口(不会重复开窗),并导航回
https://chatgpt.com/; - 小窗默认约 480×720、靠屏幕右侧;调整过的尺寸会被记忆(存于 localStorage),下次按记忆尺寸打开。
ChatGPT 登录态由你的浏览器自带;小窗内会话过期时按 ChatGPT 正常流程重新登录即可,本插件不接触任何凭据。
入口二:执行 ChatGPT 计划(会话头部)
- 在 ChatGPT 回复上点「Copy」复制计划文本;
- 点击 DSH 会话头部的「⇥ 执行 ChatGPT 计划」按钮,打开预览弹层;
- 弹层会尝试自动读取剪贴板(来源徽标显示「剪贴板」+ 前 80 字符预览);读不到时直接在文本框里
⌘V粘贴(徽标显示「手动粘贴」); - 在文本框中完整查看/编辑计划(实时字符计数;空文本时执行按钮禁用);
- 核对「目标工作区」名称正确;
- 按需切换「附加来源说明」开关(默认开启:在计划正文前附加一行说明,让 agent 明确文本性质;关闭则原文直发,均不截断);
- 点击「在新对话中执行」:插件在目标 workspace 创建新对话并把最终文本作为首条消息自动发送,本地 agent 立即开始执行,弹层自动关闭。
任何内容都只在点击「在新对话中执行」之后才发送——没有定时/后台自动注入路径。
为什么是 popup 小窗而不是 iframe?
chatgpt.com 的响应头实测返回:
x-frame-options: SAMEORIGIN(禁止一切跨站 iframe 嵌入)cross-origin-opener-policy: same-origin+ CORP
因此唯一可行的小窗形态是 window.open 命名 popup:复用浏览器登录态、不受嵌入限制。插件也不会以编程方式读取或操纵小窗内的页面内容(跨域隔离,技术上不可行也不必要)。
浏览器建议
推荐使用 Chrome:DSH GUI 是 secure context,Chrome 下弹层可自动读取剪贴板。Safari 不授予网页剪贴板读权限,弹层的「手动粘贴」通道仍可正常工作(直接 ⌘V)。
命名窗口复用说明:再次点击侧栏入口时,Chrome 会复用同一小窗并导航回
chatgpt.com首页;个别浏览器(如部分 Firefox 版本)在携带窗口特性参数时可能只聚焦而不重新导航——此时小窗停留在你最后浏览的位置,手动回到首页即可,功能不受影响。
故障排查
| 症状 | 处理 |
|---|---|
| 安装后看不到入口 | 强制刷新页面(⌘⇧R)清掉旧 boot 清单;确认 Network 面板中 /plugins/dsh-chatgpt-pip/client.js 返回 200 |
| 点击侧栏入口没反应/提示「弹窗被拦截」 | 浏览器拦截了 popup:在地址栏弹窗图标中选择「始终允许 127.0.0.1(或你的 DSH 地址)的弹出式窗口」,然后重试 |
| 弹层读不到剪贴板 | Safari 或权限拒绝属预期降级:直接在文本框 ⌘V 粘贴即可 |
| 弹窗能开但提示「未找到可用工作区」 | 先在 DSH 中打开或创建一个工作区,再执行计划 |
| 执行后弹层报错 | 错误信息会原样显示在弹层内(连接失败/会话不可用/注入失败),可点击重试;仍失败请重启 DSH 后重试 |
| 小窗尺寸没被记住 | 尺寸记忆存于 localStorage;隐私模式或存储被清理时按默认尺寸打开,属预期降级 |
开发
node --check lib/index.js # 语法检查(host 空实现)
node --check lib/client.js # 语法检查(client bundle)
node --test # 全量测试(node:vm 沙箱加载 client.js,无第三方依赖)
纯函数逻辑(窗口 features 拼装、尺寸记忆降级、计划文本规整、执行编排)全部内联在 lib/client.js 的 factory 内并经 exports.__internals 暴露,测试经 test/helpers/load-client.js 在 mock 沙箱中直接执行同一份源码(单一代码真源,无双份漂移)。
License
MIT © 2026 alaxrpg