选中对话片段在侧栏追问,答案不写入会话历史
30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/20 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Echo-moli/dsh-plugin-side-explain该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · other
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 14 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
发起外部网络请求
查看扫描证据(共 1 处,展示前 1 条)
- 发起网络请求lib/client.js:499
response = await fetch(ENDPOINT, {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
选中 DSH 对话里的任意一段,在右侧面板里追问;问答不写回会话历史,主对话不滚动。
README
由 DeepSeek 最新模型翻译生成dsh-plugin-side-explain
选中即问,答案在侧栏。 不写会话历史,不动阅读位置——长对话里最缺的那个对话框。
English · 中文
侧栏追问示意
示意图,非截图。左侧选中一段,右侧流式回答,主对话不动。
亮点
- 不写历史:侧栏问答只是一次模型调用,会话日志零写入。刷新或重启后它不存在——这是设计目标,不是副作用。
- 不动位置:回答在自己的浮层里滚动,主对话的滚动位置、语义锚点、轮次轨道都不受影响。
- 上下文仍是你的对话:模型看得到当前会话的历史(与主输入框同源),「上面那个方案」「你刚说的第二点」都能对上。
快速开始
1. 安装(需要 DSH 自带的 pnpm)
dsh plugin --profile desktop add github:Echo-moli/dsh-plugin-side-explain
2. 重启 DSH(插件清单只在启动时读取)
在对话正文里选中一段(≥6 字),按 Ctrl+C,右下角出现「解释这段?」,点「在侧栏解释」。
装不上?
展开完整文档(README 剩余 1 节)
dsh-plugin-side-explain
选中即问,答案在侧栏。 不写会话历史,不动阅读位置——长对话里最缺的那个对话框。
English · 中文
侧栏追问示意
示意图,非截图。左侧选中一段,右侧流式回答,主对话不动。
亮点
- 不写历史:侧栏问答只是一次模型调用,会话日志零写入。刷新或重启后它不存在——这是设计目标,不是副作用。
- 不动位置:回答在自己的浮层里滚动,主对话的滚动位置、语义锚点、轮次轨道都不受影响。
- 上下文仍是你的对话:模型看得到当前会话的历史(与主输入框同源),「上面那个方案」「你刚说的第二点」都能对上。
快速开始
1. 安装(需要 DSH 自带的 pnpm)
dsh plugin --profile desktop add github:Echo-moli/dsh-plugin-side-explain
2. 重启 DSH(插件清单只在启动时读取)
在对话正文里选中一段(≥6 字),按 Ctrl+C,右下角出现「解释这段?」,点「在侧栏解释」。
装不上?手动放置
$profile = "$env:USERPROFILE\.dsh\profiles\desktop" # web 版换成 profiles\web Copy-Item . "$profile\node_modules\dsh-plugin-side-explain" -Recurse -Force
在 $profile\cordis.patch.yml 末尾追加(先备份该文件):
- insert:
- id: ui-side-explain
name: dsh-plugin-side-explain
重启后到 设置 → 插件 → 插件列表 确认 dsh-plugin-side-explain 在列。
它解决的问题
长对话里遇到看不懂的一段,通常只有两条路:复制粘贴到输入框再发一条,或者放弃。
前者把问题插进主对话——越滚越长,上下文被稀释;而且长回答读完之后,想回到原来那一屏得手动滑回去。这个插件把「提问」搬出对话流:问题从侧栏发,答案在侧栏显示,主对话当作只读背景。
功能
| | 能力 | 说明 |
| 📋 | 选中即问 | 选中 ≥6 字 + Ctrl+C;不打断你本来要复制粘贴的动作 |
| ✏️ | 加要求 | 「加要求」只开面板、光标进输入框,写完回车再发(「只讲第二点」「举个反例」) |
| 📜 | 流式 Markdown | 标题、列表、粗体、行内代码、代码块、引用、链接,按聊天窗排版渲染 |
| 🔁 | 同面板追问 | 回答完成后按钮变「追问」,带着前几轮问答继续,仍不写会话 |
| ⏹️ | 可中断 | 生成中按钮变「停止」,只断这一次请求,面板保留 |
| 🔍 | 空正文诊断 | 模型没出正文时,报错写明收到哪些分片,便于定位 |
| 📦 | 零依赖 | 不引第三方库;宿主侧只用 ctx.webServer / ctx.llm |
使用
| 操作 | 结果 |
| 选中正文 ≥6 字 + Ctrl+C | 「解释这段?N 字 · 在侧栏解释 · 加要求」,6 秒内有效 |
| 点「在侧栏解释」 | 打开面板,按默认提示解释 |
| 点「加要求」 | 只开面板,光标进输入框,回车再发 |
| 回答后继续输入 | 追问,前几轮问答一并带上 |
| 生成中点「停止」 | 中断本次请求 |
| Esc / 「关闭」 | 收起面板,主对话位置不变 |
工作方式
同一个包,两处运行环境,中间只有一条 HTTP:
sequenceDiagram
autonumber
actor U as 你 participant C as 浏览器侧(页面) participant H as 宿主侧(Node 进程) participant M as 模型
U->>C: 选中正文 · Ctrl+C
C-->>U: 右下角「解释这段?」
U->>C: 点「在侧栏解释」 C->>H: POST /plugin-explain/stream H->>H: sessionController.page 读会话历史 H->>M: ctx.llm.stream(messages)
M-->>H: text-delta …
H-->>C: SSE
C-->>U: 面板流式渲染(主对话不动)
- 浏览器侧 lib/client.js:跑在页面里,监听 copy / Ctrl+C,用 [data-conversation-scroll]、[data-chat-turn]、[data-conversation-session] 定位选区与轮次;自己画提示条、面板和 Markdown。不复用应用内部的 Markdown 组件——它会动态加载 shiki / katex,在真实模块加载器里拿不到资源会在渲染期抛错。
- 宿主侧 lib/index.js:跑在 Node 进程里,注册 POST /plugin-explain/stream,读历史 → 拼 messages → ctx.llm.stream(...) → SSE 回推。
两处的区分看 package.json:main → 宿主侧,exports["./client"] → 浏览器侧,dsh.client 声明它要进浏览器名录。宿主侧是标准 ESM;浏览器侧由平台模块加载器投递(window.__ModuleLoader__.load({ id, factory })),内部只有同步 require,所以不能写 import。
上下文策略
| 来源 | 内容 | 上限 |
| 会话日志(首选) | sessionController.page 读当前会话的 user/assistant 消息,与主对话同源 | 200 条 / 12000 字 |
| 界面节选(兜底) | 从选中那轮往前数 6 轮,末轮以选区为中心取窗口 | 6000 字 |
| 追问线程 | 同一面板里的问答对 | 6 轮 |
三条设计约束
都不是「优化」,是不这么做就没有输出:
1. 首条必须是 user。历史按窗口截断后经常以 assistant 开头,服务商不报错、直接返回空(症状:finish×1,面板一个字都没有)。
2. 每轮都重新贴原文。只贴一次的话,追问的最后一条 user 里没有原文,模型会回「没看到需要解释的文本」。
3. 游标只能靠错误换。page() 必须传 throughSeq,但宿主没有公开「当前游标」的接口,sourceFor 也不是公开方法。这里先用越界值调用一次、从错误信息里取出真实游标,再读最后一页。
兼容性
| 项 | 说明 |
| DSH | 桌面版与 dsh --profile web 通用(同一份前端) |
| 验证环境 | DSH Web GUI(Electron 桌面壳),2026-10 构建 |
| 依赖 | 无运行时依赖;只需宿主提供 webServer 与 llm |
| Node | 用到 AbortSignal.timeout(Node 18+) |
安全说明
- /plugin-explain/stream 只监听回环地址,但没有额外鉴权:同一台机器上的其他程序也能调用它,读取你当前会话的上下文。多用户或共享机器上使用前请自行加一层校验。
- 插件不收集、不上报任何数据;只有一次发往你所选模型服务商的请求。
排错
| 现象 | 先看哪里 |
| 复制没反应 | 设置 → 插件 → 插件列表 是否有加载失败;Console 搜 selection-quote |
| 面板打开但没有文字 | 报错写「收到 N 个分片」;finish×1 通常意味着请求被判空 |
| 回答不带上下文 | 用下面的自检入口确认历史读到没有 |
| 「没有可用的模型服务商」 | 宿主侧 ctx.llm.listProviders() 为空,先配置模型 |
自检入口(只读,不调用模型):
curl -s -X POST http://127.0.0.1:<port>/plugin-explain/stream \
-H 'content-type: application/json' \
-d '{"text":"probe","sessionId":"session-...","debug":true}'
开发
没有构建步骤,lib/*.js 就是产物:
git clone https://github.com/Echo-moli/dsh-plugin-side-explain.git
npm run check # node --check lib/index.js && node --check lib/client.js
改完复制进配置档的 node_modules,重启窗口验证(客户端 bundle 只在启动时快照)。
路线
- [ ] 侧栏历史(本地持久化,默认关闭)
- [ ] 「另存为笔记」:把一段问答写进工作区 Markdown
- [ ] 图片 / 附件选区
- [ ] 上游:把选区浮动条做成 ui-chat 的正式 slot
贡献
Issue / PR 都欢迎,先看 CONTRIBUTING.md。版本变更见 CHANGELOG.md。
许可
MIT © Echo-moli预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Echo-moli/dsh-plugin-side-explain
选中对话片段在侧栏追问,答案不写入会话历史
相关插件 · 其他
模型破甲清洗HunYiSage/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 16,993已汉化DeepSeek 客户端
73
女娲蒸馏alchaincyf/nuwa-skill
输入名人名字,提炼其思维模型与决策方式供你调用
★ 37,308已汉化DSH
72
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 888已汉化DSH
71.6
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,269已汉化DSH
70.8
这是你的仓库?认领条目