前言¶
在 DSH Web 里和模型来回改需求时,经常有”指某句话有问题”的时刻。现有的做法通常是复制一段引文粘进输入框,手动加 > 前缀,再敲几句说明。引文一旦改错行、少了前缀,模型读不到上下文;等会话变长,想回指某条早期消息也只能靠整段复制。
下面介绍的插件就是把这件事流程化:选中文本、写一句批注,它会作为一枚 chip 附着在输入框里,随下一条消息一起发出,模型收到的是规范化的引文块,用户界面上看到的仍是紧凑的胶囊。
这是什么¶
dsh-inline-comment 是一个 DSH Web 客户端插件,由 proto-commons 维护,用于在会话里按选区创建批注。它只存在于客户端,没有 Host 侧的 service、tool 或 prompt,不改变 session 格式。
它解决的问题是:把”引用某句话 + 说明为什么改”从手工粘贴变成一次选区动作,并保证发出去的文本结构稳定、界面上不散落大段引文。
安装与启用¶
只面向已有 DSH profile(带 Web client)的环境。安装命令来自 README:
plugin_manager install_bundle
target: /path/to/dsh-inline-comment
target 指向本地 checkout 的绝对路径,例如 ~/protocom/dsh-inline-comment。安装后需要重载 Web 窗口;只有在客户端 bundle revision 没有刷新时才需要完整重启 DSH。
使用流程¶
- 在会话任意文本上拖选(消息、回复、工具输出都可以),松开后在选区旁出现
Annotate胶囊。 - 点击胶囊,在卡片里写批注,按
Enter(或⌘/Ctrl+Enter)提交。引文被固定在卡片中,消息发送后 chip 保留;Shift+Enter换行,Esc取消。 - chip 追加在输入框末尾,光标跟在其后;
Backspace会整枚删除。悬停或点击 chip 可以回看引文与批注。 - 发送后,模型收到的文本是:
> the selected sentence (up to 320 characters)
>
> Annotation: why it needs to change
配置项¶
| 设置 | 默认值 | 位置 |
|---|---|---|
| 提交快捷键 | Enter 提交,Shift+Enter 换行 |
Settings → General → Comment shortcut |
| 备选方案 | ⌘/Ctrl+Enter 提交,Enter 换行 |
同一行 |
| 引文上限 | 320 字符 | MAX_QUOTE in client.js |
| 批注上限 | 4000 字符 | MAX_COMMENT in client.js |
快捷键偏好存在浏览器 localStorage["dsh.inline-comment.submit-mode"](enter 或 mod),切换后立即生效。
实现方式¶
插件在客户端的几个扩展点上挂载:
| 界面元素 | 扩展点 |
|---|---|
| 浮动胶囊、编辑卡片、预览卡片 | shell.overlay |
Composer 桥接(inputActions、useInput) |
conversation.input.overlay |
| 真实的引用 chip | session 级 slash/input-insert-reference + inputTriggers source |
| 已发送消息上的 chip | uiConversation.userText rule + conversation.user.text.node |
| 快捷键行 | settings.general.item |
批注追加到草稿末尾的流程是:先算出草稿末尾的 detect offset(引用 chip 记一个字符,命令 chip 按 claim.token),再走 @file 选择器同款的引用 chip 路径插入。chip 的 ref 里以 base64url JSON 存引文和批注,因此草稿能被保存、预览并在重载后恢复。发送时插件的序列化器把 chip 展开成引文块,渲染时由 user-text rule 重新识别为胶囊。
项目结构上,client.js 承担 UI、chip 来源、已发送消息规则和设置行;index.js 是 Host 侧空操作;cordis.patch.yml 是 bundle 插入行。因为 profile 以链接方式安装该目录,改 client.js 没有构建步骤,编辑后用 node --check client.js 检查语法,再重载 Web 窗口即可;若修改不生效,重启 DSH 以重建客户端 bundle。README 里的预览图是设计稿(设计 mock),不是实际会话截图,实际渲染跟随宿主主题。
适用场景与注意¶
适合在 DSH Web 长会话中需要频繁指出具体句子问题、希望批注跟着消息走而不污染气泡的开发者。插件是纯客户端实现,不依赖额外运行时,界面文案随客户端 locale 在 zh / en 之间切换,零配置。
需要留意几点:插件基于随 0.2.1-rc.5 附带的 DSH 桌面客户端构建,仅在客户端生效;chip 复用 composer 的 reference-chip 外壳(appearance: file),并用 scoped CSS 规则隐藏文件图标,若宿主改了该 DOM,chip 会退回文件图标,功能仍可用。已发送消息的识别是文本级别的:任何手写的 > quote + > 批注:… 块都会被渲染成 chip,这是有意为之,和 @file 提及的识别方式一致。另一个限制是:如果草稿里还带着批注 chip 就卸载插件,那份草稿会发不出去,需要先删掉 chip。引文在进入 chip 前截断到 320 字符,批注截断到 4000 字符。
插件运行时使用当前 DSH 进程的权限,安装前建议先检查 client.js、index.js、cordis.patch.yml 等源码与 MIT 许可证。它是社区目录中的第三方插件,与 DeepSeek / 幻方无官方从属关系。
小结¶
dsh-inline-comment 把会话里的引用批注压缩成一次选区动作,chip 在输入框、已发送消息和悬停预览三处保持一致,模型侧拿到的仍是可读的引文块。目录页在 https://www.skillhub.cn/plugins/proto-commons/dsh-inline-comment ,源码在 https://github.com/proto-commons/dsh-inline-comment 。