选中回答段落加为注释,逐条写问题一起追问
28.8/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/gaoxuan566/dsh-annotation.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 15 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成dsh-annotation
给 DeepSeek Harness 的聊天界面加一层「划词提问」:选中助手回答里的一段文字 → 点浮出的「✏️ 加为注释」→ 这段文字被收进注释托盘,显示成「注释1」「注释2」……每条注释各有各的输入框,各写各的问题,最后一起发出去。
发出去的消息里,每条注释是一个带标签的引用块,紧跟它自己的问题,模型能准确看出哪段对应哪个疑问,不用你再复制粘贴。
一、用安装包安装(推荐,无需懂代码)
前提
- Windows,已装 DeepSeek Harness 桌面版(本文按默认的 desktop profile 写)。
- 不需要装 Node.js、不需要命令行经验,照着复制粘贴即可。
第 1 步:下载
点这里下载安装包(约 14 KB):
dsh-annotation-0.3.0.zip
也可以从 Releases 页面 手动选版本。
第 2 步:解压
右键 zip →「全部解压缩」。解压出来应该是:
dsh-annotation-0.3.0\
├─ install.ps1
├─ uninstall.ps1
├─ INSTALL.txt
└─ dsh-annotation\
一定要先解压再运行。直接在压缩包里双击 install.ps1 会找不到同目录的文件。
展开完整文档(README 剩余 1 节)
dsh-annotation
给 DeepSeek Harness 的聊天界面加一层「划词提问」:选中助手回答里的一段文字 → 点浮出的「✏️ 加为注释」→ 这段文字被收进注释托盘,显示成「注释1」「注释2」……每条注释各有各的输入框,各写各的问题,最后一起发出去。
发出去的消息里,每条注释是一个带标签的引用块,紧跟它自己的问题,模型能准确看出哪段对应哪个疑问,不用你再复制粘贴。
一、用安装包安装(推荐,无需懂代码)
前提
- Windows,已装 DeepSeek Harness 桌面版(本文按默认的 desktop profile 写)。
- 不需要装 Node.js、不需要命令行经验,照着复制粘贴即可。
第 1 步:下载
点这里下载安装包(约 14 KB):
dsh-annotation-0.3.0.zip
也可以从 Releases 页面 手动选版本。
第 2 步:解压
右键 zip →「全部解压缩」。解压出来应该是:
dsh-annotation-0.3.0\
├─ install.ps1
├─ uninstall.ps1
├─ INSTALL.txt
└─ dsh-annotation\
一定要先解压再运行。直接在压缩包里双击 install.ps1 会找不到同目录的文件。
第 3 步:运行安装脚本
1. 打开解压出来的文件夹;
2. 点一下窗口上方的地址栏,输入 powershell 后回车(会在当前目录打开 PowerShell);
3. 粘贴这一行并回车:
powershell -ExecutionPolicy Bypass -File .\install.ps1
(-ExecutionPolicy Bypass 只是让这一个脚本能跑,不改你系统的执行策略。)
成功的输出大致是:
backed up manifest -> C:\Users\<你>\.dsh\profiles\desktop\package.json.bak-before-annotation registered dsh-annotation in dsh.profile.bundles recorded dsh-annotation in dependencies (source: ...\dsh-annotation-0.3.0\dsh-annotation)
installed -> C:\Users\<你>\.dsh\profiles\desktop\node_modules\dsh-annotation
脚本只做四件事:备份 profile 清单、把插件目录复制进 node_modules、把 dsh-annotation 登记进 dsh.profile.bundles、在 dependencies 里记一条指向解压目录的 file: 依赖。它不改你的其他配置、不联网。
那行 file: 依赖是为了让应用把它算作"已安装",从而出现在插件 → 已安装插件列表里。解压出来的文件夹最好留着(挪走也能用,只是列表里那条的来源路径会失效)。
第 4 步:重启应用
完全退出 DeepSeek Harness(包括右下角托盘图标 → 退出),再重新打开。客户端模块清单只在启动时构建,光刷新页面不行。
第 5 步:验证
在任意一条回答里选中一段文字,鼠标松开后旁边应出现「✏️ 加为注释」胶囊。点它 → 托盘出现「注释1」和它的专属输入框。出现了就装好了。
另外,左边栏 插件 → 已安装插件 里应该能看到一张 dsh-annotation 卡片(0.3.0),说明应用也把它当成一个正式安装的插件。
装到别的 profile / 升级 / 卸载
其他 profile(默认是 %USERPROFILE%\.dsh\profiles\desktop) powershell -ExecutionPolicy Bypass -File .\install.ps1 -Profile "D:\my-dsh\profiles\work"
升级:下新版 zip,再跑一次 install.ps1 即可(最早那份备份不会被覆盖)
卸载:重启应用前运行 powershell -ExecutionPolicy Bypass -File .\uninstall.ps1
出问题怎么办
| 现象 | 处理 |
| 脚本报「禁止运行脚本」 | 用上面的 -ExecutionPolicy Bypass 写法,别直接双击 |
| 选字后没有胶囊 | 先确认第 4 步是"完全退出后重开";再看是否选在了输入框里(输入框内不触发) |
| 重启后整个界面异常 | 运行 uninstall.ps1 还原清单再重启,插件坏了也不会影响应用本身(host 半边是空实现) |
| 想确认是否装上 | 打开 <profile>\package.json,dsh.profile.bundles 末尾应有 "dsh-annotation" |
二、交互说明
- 在聊天区(回答、你的提问、工具输出)里选字,松开鼠标后出现胶囊按钮。
- 点胶囊 → 这段文字记为「注释N」,托盘展开并聚焦到这条注释的提问框。
- 托盘里每条注释一块:上面是「注释N ×」标签,下面是这条注释专属的问题输入框。
- 点标签文字 = 展开/收起这段原文(默认收起,悬停也能看到)。
- 点 × = 删除该条,后面的自动重编号,已写的问题保留。
- 每条都写好问题后「发送」才可用;缺哪条会提示「注释N 还没写问题」并跳到那一行。
- 输入框里 Enter 发送,Shift+Enter 换行。
- 点「收起 ✕」或按 Esc 收起托盘,注释和问题都保留,右下角留「✏️ 注释 N」小胶囊,点它重新展开。
- 「清空」丢掉所有注释和问题。
- 在输入框(composer)里选字不会触发;单条选区超过 1000 字会被截断。
发送出去的消息:
关于你上面的回答,我有几处不明白:
注释1 第一步里 det A 是怎么算出来的?
问题1:这里为什么要单独交代一句?
注释2 为什么拆行之后大部分项都是 0?
问题2:能再展开讲讲吗?
只有一条注释时,开头是「我有个疑问:」。
三、实现方式
3.1 它是什么
一个 DSH bundle,由两个半边组成:
dsh-annotation\
├─ package.json # 声明 dsh.bundle.patch 与 dsh.client.platform = "web" ├─ dsh.bundle.patch.yml # - insert: [{ id: annotation, name: dsh-annotation }] ├─ lib\index.js # host 半边:空 apply,只让 Loader 认识这个包 └─ lib\client.js # 浏览器半边:全部 UI 与发送逻辑(无第三方依赖)
package.json 关键字段:
{
"main": "./lib/index.js",
"exports": { ".": "./lib/index.js", "./client": "./lib/client.js", "./package.json": "./package.json" },
"dsh": {
"bundle": { "patch": "./dsh.bundle.patch.yml" },
"client": { "platform": "web" }
}
}
装配顺序:profile 的 dsh.profile.bundles 列出包名 → boot 读取每个包的 dsh.bundle.patch 生成 cordis 配置 → 带 dsh.client 的包再被 client-modules 收集,页面按 /plugins/<name>/client.js 加载浏览器半边。
3.2 为什么不用槽位(slot)
DSH 的槽位(如 conversation.chat.assistant-actions)能拿到 messageId,但拿不到那条消息的文本,也没有稳定 DOM 属性可回溯到「哪条消息的哪一段」。所以这里不做 React 组件、不占槽位,而是直接监听 DOM:
- 选区来自 window.getSelection(),天然跨回答、跨工具输出;
- 会话 id 从选区锚点的 closest('[data-conversation-session]') 取;
- UI 用 document.createElement + inline style 挂到 <body>,与 React 渲染互不干扰;
- 生命周期挂在 ctx.effect(...) 返回的清理函数里,插件卸载时移除所有监听与节点。
3.3 浏览器半边的代码结构
模块外壳(DSH 客户端模块格式):
window.__ModuleLoader__.load({
id: "dsh-annotation",
factory: (require) => {
function apply(ctx) { /* ... */ }
return (module.exports = { apply, inject: ["sessions"] });
},
});
inject 只依赖 sessions 服务。发送消息:
ctx.get("sessions").scope(sessionId).get("conversation").send(text);
要点:conversation 是 root 服务,但它的方法会绑定到调用方 ctx,所以必须从
sessions.scope(id) 拿 scope 版;直接 ctx.get("conversation").send() 会抛
conversation.send requires a session scope。
状态与拼装:
- items: [{ text, question }]、previewIndex、expanded、sessionId;
- buildMessage(items) 生成上文格式:首行按条数选「我有个疑问」/「我有几处不明白」,每条 注释N + > 引用块 + 空行 + 对应问题,引用按行加 >,超长截断;
- 发送前校验每条的 question,缺则 toast「注释N 还没写问题」并聚焦该行。
样式用 DSH 主题变量并给回退值,深浅色自动跟随:
--dsw-alias-bg-layer-2 / --dsw-alias-label-primary / --dsw-alias-label-secondary
--dsw-alias-border-l3 / --dsw-alias-state-business-primary / --dsw-elevation-prominent
--dsw-radius-lg / --dsw-font-family
3.4 开发与回归
改 lib/client.js 后刷新页面(Ctrl+R)就会加载新代码;改了 lib/index.js 或 package.json 才需要重启应用。
回归测试不发真实消息:用 fake DOM + vm.runInContext 直接跑 lib/client.js,断言选区 → 胶囊 → 托盘、逐行输入框、缺问题禁用发送、消息拼装顺序、删除重编号、预览、 Esc/徽章/清空、清理函数等 45 项。
四、手动安装(不用安装包)
安装 = 把包目录放进 profile 的 node_modules + 在 dsh.profile.bundles 登记包名。
1. 备份 <profile>\package.json;
2. 克隆本仓库到 <profile>\node_modules\dsh-annotation;
3. 编辑 <profile>\package.json,在 dsh.profile.bundles 末尾追加 "dsh-annotation" (UTF-8 无 BOM):
{ "dsh": { "profile": { "bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-annotation"] } } }
4. 完全退出并重开应用。
五、卸载
用 uninstall.ps1(优先还原安装时的备份),或手工把 bundles 里的 dsh-annotation 删掉并删除 <profile>\node_modules\dsh-annotation,然后重启应用。
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
gaoxuan566/dsh-annotation
选中回答段落加为注释,逐条写问题一起追问
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,344已汉化DSH
71.5
终端编码代理esengine/DeepSeek-Reasonix
· 指南 · ACP · 扩展开发 · 规格 · 官方网站 · Discord · QQ
★ 36,045已汉化DSH
71.2
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,202已汉化DSH
71.1
这是你的仓库?认领条目