- Início
- Plugins
- Melhorias de UI
- dsh-inline-comments
dsh-inline-comments
ruisenbai/dsh-inline-comments
Select text in a finished assistant reply to add numbered comments beside the quote; collect drafts and submit the batch through the official composer as one user message.
Instalar
dsh plugin --profile web add github:ruisenbai/dsh-inline-commentsREADME
DSH Inline Comments
包名:dsh-inline-comments
审阅一段很长的 AI 回复时,最麻烦的往往不是提出意见,而是反复复制原文、解释“我说的是哪一句”。DSH Inline Comments 让每条意见直接留在对应句子旁边:选中原文、就地写下注释、攒齐多条意见,再通过 DSH 官方输入框一次发送。
**交互来源说明:**本插件独立、非官方地复刻了 ChatGPT 的正文注释功能,并将这套体验带到 DeepSeek Harness。复制的是使用流程,不是 OpenAI 的源码、素材、API 或品牌;本项目与 OpenAI 无隶属或官方合作关系。
**兼容性提示:**项目要求 DeepSeek Harness
0.1.0-rc.7或更高的0.1.x预发布版本。DSH 仍处于预发布阶段。由于当前没有助手正文内部 Slot,本插件必须覆盖三个内置会话渲染器。升级 DSH 前请阅读兼容性说明。
界面预览
整个流程都留在对话里:选中原文、添加一条或多条编号注释、检查草稿,再从熟悉的 DSH 输入框发送。

选中真正想讨论的文字,浏览器原生选区仍然保留,随时可以复制。

趁上下文还在眼前,直接在原文旁写下意见。

发送前可以集中检查和调整所有本地草稿。

暂时不想使用注释时,可在通用设置中关闭功能,已有草稿不会丢失。

功能
- 在一条已完成的助手回复内选中文字后,弹出带“添加注释”和“复制”两个按钮的小浮条。蓝色选区保持不消失,随时可以按 Ctrl+C 复制;点击其它地方或按 Esc 浮条消失。
- 在选区旁直接显示紧凑输入框,右侧只有取消和保存图标。空内容点击外部会关闭;有内容点击外部会保持打开、显示红边并震动,直到选择一个图标操作。
- 输入停止 400ms 后自动保存编辑中内容并显示本地保存状态;刷新后可恢复,但不会因此变成已提交注释。
- 将两行注释记录分成“待附加”“确认结果/待重试”“权威队列”“已发送”四类,并复用 DSH 官方按钮、状态点、图标、Tooltip 和 Toast。
- 点击注释标题栏中的回形针切换附加状态,不展开也不立即发送;已附加时,未发送集合会随编辑、删除和新增实时变化。
- 官方输入框是唯一任务输入和发送入口。官方文本加注释,或只有注释,都会形成一条任务和一次模型执行。
- 对齐官方 Web 的助手正文流、思考过程折叠行、停止标记、输入区 Dock、图标按钮尺寸、表单字号、语义颜色、浮层表面和用户消息气泡,同时为“定位原文”保留最初的地图定位图标。
- 支持撤销最近一次草稿删除、导出当前 Session 恢复 JSON、清空未提交草稿,并显示本地存储占用。
- 保存完整原文、前后文选择器、助手消息 ID、事件序号、注释 ID 与提交 ID。
- 对代码记录语言与起止行;对表格记录起止行列。
- 选区重叠时合并到原有草稿,避免高亮堆叠歧义。
- 沿用官方输入框的提交策略;注释命令通过一条可幂等重试的排队用户消息入队。
- 使用不同的 DSH Toast 提示权威队列、持久发送和可重试失败;只有批次仍在已观测队列中时才显示撤回操作。
- 编号位于选区结束位置所在完整正文行之后;预留防溢出区域并保持升序,同时合并思考过程展开、视口、字体和缩放触发的布局测量。
- 点击数字编号后,编辑器出现在编号右侧而不是右上角;编辑已有草稿时提供可撤销的删除操作。
- 点击定位后,将数字编号所在的正文行垂直居中到真实会话或窗口滚动区域,并校正 CSS 缩放。
- 使用
localStorage恢复未发送草稿、编辑中内容和不可变重试记录。 - 用由提交 ID 派生的稳定消息 ID 去重网络中断后的重试。
- 只有模型明确返回对应注释 ID,状态才从“已发送”变为“已处理”。
- 浏览器不支持 CSS Custom Highlight API 时,仍保留编号标记和定位能力。
快速开始
从源码构建
git clone https://github.com/ruisenbai/dsh-inline-comments.git
cd dsh-inline-comments
corepack enable
pnpm install
pnpm verify
把构建后的目录安装到 Web Profile:
dsh plugin --profile web add .
dsh web --profile web
打开 DSH Web 页面,在一条已完成回复中选中文字,会出现带“添加注释”和“复制”的小浮条;选区保持可选,Ctrl+C 也能复制。点击“添加注释”打开紧凑输入框,填写意见后点击对号创建草稿,或点击叉号取消。草稿会出现在官方输入框上方;点击注释标题栏中的回形针,在官方输入框中填写可选任务文本,再使用官方 Enter 或发送按钮。官方文本为空时,也可以只发送已附加注释。
安装 GitHub Release
每个 v*.*.* 标签都会构建可安装 Tarball 并附加到 GitHub Release。下载后可以直接安装预构建包,无需执行仓库构建脚本:
gh release download v0.1.0 --repo ruisenbai/dsh-inline-comments --pattern '*.tgz'
dsh plugin --profile web add ./dsh-inline-comments-0.1.0.tgz
如果 Profile 明确允许这个可信包执行 prepare 构建,也可以安装固定标签的 Git 依赖:
dsh plugin --profile web add git+https://github.com/ruisenbai/dsh-inline-comments.git#v0.1.0
设置
通用设置中提供 DSH Inline Comments 开关。开关默认开启,并对当前浏览器 Profile 中的所有 Session 生效。关闭后恢复官方助手与用户消息渲染器,移除选区操作条、数字标记、注释列表、注释操作、隐藏传输视图和输入框附加状态,同时保留输入框中的可见文本。草稿、编辑中内容、Outbox 状态和已提交历史都不会删除;重新开启后会恢复。
开关值保存在当前 Origin 的 localStorage 键 dsh.inline-comments.enabled 中。
任务状态与发送方式
回形针有两种状态。未附加时,注释保持在浏览器本地并继续可编辑;已附加时,未发送集合会实时跟随编辑、删除和新增,直到官方输入框提交。提交事务会冻结一份不可变提交内容,只有在命令成功后才清空官方输入框,之后新增的注释归属于下一次任务。再次点击回形针会取消附加,不改动文本、光标或列表展开状态。
插件不会把传输已接受直接显示成已排队。只有 ConversationSnapshot.queue 包含稳定消息 ID 后才显示“已排队”Toast 和撤回操作;持久化 user/message 出现后改为“已发送”并移除撤回。失败的事务会保留官方输入框内容、附加状态、不可变提交内容和提交 ID,供稍后安全重试。
移除的插件内“整体要求”已有内容,会在第一次成功附加时一次性迁移进官方输入框;只有官方输入框接受附加后,插件存储中的旧值才会被清除。
当前 DSH 命令提交接口不透出官方输入框的图片 ID,因此输入框存在图片时无法附加注释;附加后再添加图片时,混合提交会被拒绝,且不会丢弃图片或注释草稿。
状态定义
- **草稿:**仅在浏览器中,可编辑。
- **已排队:**已进入 DSH Inbox,尚未写入模型历史。
- **已发送:**由持久化的注释
user/message事件重建。 - **已处理:**模型回复明确携带提交 ID 和注释 ID 后才设置。
插件不会根据等待时长、轮次结束或界面时序推测“已处理”。
配置
Bundle 会插入一个 dsh-inline-comments 行。可在当前 Profile Composition 中覆盖:
| 配置项 | 默认值 | 作用 |
|---|---|---|
commandName | inline_comments_submit | 浏览器到 Host 的内部传输命令名 |
maxPayloadBytes | 524288 | 解码后 JSON 批次上限;超限拒绝,绝不截断 |
maxAnnotationsPerSubmission | 100 | 单批注释数上限 |
warnSelectionChars | 12000 | 长选区需要额外确认的阈值 |
locateHistoryPages | 20 | 定位原文时最多加载的历史页数 |
Host 与 Client 共享同一个 Cordis 行配置,因此修改 commandName 时两端会保持一致。
隐私与持久化
未发送原文、评论、编辑中内容和重试记录保存在 dsh-inline-comments:v1:<session-id> 对应的 localStorage 中。当前键不存在时,会把 dsh-inline-annotations:v1:<session-id> 下的有效数据复制到当前键并删除旧键。可见存储键继续使用 v1,其中经过校验的数据值采用 storageVersion: 2,旧版值会在读取时迁移。用户通过官方输入框提交前不会发送到 Host 或模型。提交后,原文和评论会进入当前 Session 日志和模型上下文。插件不包含分析、遥测或外部网络客户端。详见隐私说明。
模型体验
- **提交前:**不产生 Prompt、Token 或 KV Cache 影响。
- **提交时:**写入一条标准用户消息,包含官方输入框文本、完整批次、稳定 ID、原文、评论和结构坐标。
- **处理确认:**消息要求模型在确实处理后返回一个列出注释 ID 的机器标记。Client 渲染前隐藏标记,但原始模型文本仍可重放。
- **Token:**成本随完整选区和评论增长;插件不做静默截断。超出字节限制会在入队前拒绝。
- **KV Cache:**Steer 或 Follow-up 与普通用户消息一样改变后续模型上下文。
开发
pnpm typecheck
pnpm lint
pnpm test
pnpm exec playwright install chromium
pnpm test:browser
pnpm test:coverage
pnpm build
pnpm verify:bundle
pnpm publint
pnpm pack
CI 会在 Node 22.19 与 24 上执行类型检查、Lint、单元测试、生产构建、Bundle 验证和 publint。Node 24 任务还会运行真实 Chromium 回归测试并创建包产物。更多信息见开发指南、架构和数据模型。
已知限制
- DSH 暂无助手 Markdown 内部 Slot。本插件以优先级
-100覆盖assistant-step、user与steering渲染单元;上游渲染器变化需要重新兼容验证。 - 未发送草稿只存在当前浏览器,不会跨设备同步;已发送批次可从 Session 日志恢复。
- 模型确认属于协作协议。模型遗漏或破坏标记时,状态保持“已发送”,不会猜测为“已处理”。
- 归档任务没有活跃输入框,无法附加注释;请在可编辑任务中创建注释。
- DSH 命令 Claim 不携带输入框图片 ID,因此图片与正文注释暂不能合并在一次提交中。
- CSS Custom Highlight 取决于浏览器支持;不支持时仍可使用编号标记和时间线定位。
- 一次选区必须位于同一条助手回复内,跨消息选区会被拒绝。
- DSH 暂无私有命令注册标记,因此经过严格校验的内部传输命令可能出现在斜杠命令目录中。
社区
项目采用 MIT License。