dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
按会话保住输入框里的图片草稿:在浏览器本地留一份镜像,切回该对话或输入框重新挂载时经官方草稿通道放回去;消息一旦发出或你手动移除,就不再见它回来。
English | 简体中文
切走对话再回来,你刚粘进输入框的那张图还在。
往输入框贴一张截图,内核只把它当成随手贴的草稿附件——内存里的对象,字节要等你按发送才上传。它属于当前挂载的输入框,不属于这个对话。于是切到另一个对话再切回来(或者输入框因为任何原因重新挂载),你得到的是一个空输入框,和一张要重新截一次的图。
别的东西也补不回来:发送之前磁盘上没有这份副本。这个插件就是自己留一份(存在你的浏览器里),再通过官方通道还回去。
File(名字、类型、lastModified 都保留),交给 conversation.createDrafts + input.addAttachments。之后你发出去的是一份普通附件,和刚粘贴的没有任何区别。若 addAttachments 拒收,会把它刚创建的草稿释放掉。kind === "image" 的草稿:文件类草稿重新进 createDrafts 会让宿主重启一次上传。文档一律按宿主原有方式处理,不碰。| 部件 | 作用 |
|---|---|
conversation.input.dock 子组件(id draft-keeper、order 30) | 无界面组件:它的挂载本身就是「输入框活着」的信号。它订阅 input.state,对每次发布的状态快照作出反应。 |
| 捕获 | 附件 id 非空 → 用 conversation.resolveDraftAttachments 取到活的草稿,读每张图的字节,存 {name, type, lastModified, bytes};id 集合没变就跳过。 |
| 恢复 | id 为空、之前也没观察到过附件、且 state.phase === "plain" → 重建 File 并重新挂上。输入框正在处理发送时它保持安静;已经有附件时也不插手。 |
| 遗忘 | id 从非空变空 → 丢掉那一行。发出去了还是你删了,都不该再回来。 |
| 存储 | IndexedDB dsh-draft-keeper(store drafts,键 sessionId,行 {sessionId, records, updatedAt})加一层页内 Map。都按浏览器 profile、按会话隔离。 |
宿主半边(index.js)是一个空的 apply():它存在只是为了让这个 bundle 可安装,行为全在客户端半边。
curl -fsSL https://raw.githubusercontent.com/XWIDE/dsh-draft-keeper/main/install.sh | sh
桌面端(Windows)——桌面版不把 dsh 放进 PATH,上面那条在它身上跑不起来,用这条:
iwr https://raw.githubusercontent.com/XWIDE/dsh-draft-keeper/main/install.ps1 -useb | iex
它调用应用自带的插件操作入口(resources\app\lib\plugin-cli.js),只要 PowerShell 5.1 和装好的 DSH NEXT。卸载加 -Remove。
手动等价写法:
dsh plugin --profile web add git+https://github.com/XWIDE/dsh-draft-keeper.git
$exe = "$env:LOCALAPPDATA\Programs\DSH NEXT\DSH NEXT.exe"
& $exe --expose-internals "$((Get-Item $exe).Directory.FullName)\resources\app\lib\plugin-cli.js" desktop add github:XWIDE/dsh-draft-keeper
装完重启应用一次,让这个 bundle 进入宿主模块图:
dsh web:重启 dsh 进程,然后刷新页面。没有构建步骤、没有运行时依赖,源码安装直接可用,不会弹 allowBuilds 授权。
| dsh-draft-keeper | Harness | 说明 |
|---|---|---|
| 0.1.0 | 0.2.0-rc.2(实测) | 针对桌面端 0.2.0-rc.2 开发与测试;真实 profile 上验证过 install / start;uninstall / rollback 标为 unknown,因为这个版本上还没实际演练过。 |
宿主半边需要 Node.js 22.19+ 或 24+(与 harness CLI 一致的下限)。浏览器半边不声明任何 npm 依赖、也不钉任何官方 @deepseek-ai/* 包,因此宿主 roster 的版本漂移不会把安装带崩。
没有。没有界面、没有可配项:装上就干这一件事。
plain 阶段;这次挂载最多试 6 次。如果你在已有附件的情况下继续打字,它不会插手。粘贴的图片字节只存在本地——这个浏览器的 IndexedDB 里,按当时那个会话分键。不外发:没有宿主路由、没有网络请求、没有遥测。输入框附件一旦清空(发出或你删除),存的那一行立刻丢掉。
plain 阶段。只要输入框还挂着,它会继续重试,最多 6 次。node tests/harness.mjs # 18 项检查:捕获、恢复、遗忘、上限、阶段处理
测试跑在纯 Node 上、零依赖(假的输入框壳、假的 IndexedDB、假的 React)。
dsh plugin --profile web remove dsh-draft-keeper
想在浏览器站点数据里顺手清掉镜像也可以(IndexedDB 数据库 dsh-draft-keeper);它很小,而且草稿一清空自己就删。
MIT —— 见 LICENSE。
X-WIDE —— GitHub @XWIDE · B 站 374064919 · xiupk@sina.com.cn
有问题、想提需求,开 issue 就行。