An0range
dsh-plugins
个人维护的 DeepSeek Harness(DSH)动态 Cordis 插件集合:选段批示与追问(anno)、布局命名检查器(linsp)。
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 14, 2026
- Updated
- Aug 14, 2026
Introduction
DSH 插件集合(dsh-plugins)
🌐 English | 中文
个人维护的 DSH(DeepSeek Harness) 动态 Cordis 插件集合——每个插件一个子目录,
各带自己的 README;跨插件的开发踩坑记录集中在 PITFALLS.md。当前收录:
| 目录 | 插件 | 最新版本 | 职责 |
|---|---|---|---|
anno/ | 选段批示与追问 | v2.5.0 | 选中文本 → 右键「选段批示」→ 批示卡片(⚡追问到可配置模型的子会话并回贴报告 / 加入批示队列并批量注入输入框) |
linsp/ | 布局命名检查器 | v2.6.0 | 全局快捷键进入命名模式:hover 高亮、点击复制「分区名·元素名 + XPath/getByRole」,用于向 AI 精确描述界面位置 |
为什么需要这两个插件
anno(选段批示与追问):AI 的长回复动辄几十屏。阅读时你想"这里记一笔""这句没懂、想立刻问一句",
但打断主对话去打字会丢失阅读位置,把追问发进主会话又会污染上下文。
anno 给出两条不打断的通道——右键把选中文本+批示暂存为队列(A1 A2 …),
或一键派发到独立子会话用指定模型追问(/btw 的平替),完成后回复才贴回对话。
核心价值:阅读心流不被破坏,主会话上下文不被污染。
linsp(布局命名检查器):改造 DSH 前端、或向 AI 反馈界面问题时,最难的是 "我指的是哪个东西"。截图会过时、文字描述会歧义。linsp 让你 hover 任意元素、 一键复制「分区名 · 元素名 + XPath/getByRole」这种精确坐标,粘贴给 AI 即可被 无歧义地理解。核心价值:人与 AI 之间共享一套界面元素命名语言。
界面速览
02/05 图中的红框是文档标注(截图时叠加的示意图框),不是插件 UI。
| 截图 | 说明 |
|---|---|
![]() | DSH 界面全貌:插件不新增常驻面板,只以输入区两个小按钮(见 02)与右键菜单的形式存在 |
![]() | 输入区入口:红框内为「布局」(linsp)与「划词」(anno)两个按钮 |
![]() | 选中文本 → 右键菜单:复制 / 选段批示 |
![]() | 批示卡片:⚡ 追问(派发独立子会话、用指定模型)/ + 加入队列 |
![]() | 批示队列条(红框):【A1】… 一行一条,一键注入输入框 |
![]() | 设置 → 插件 → 选段批示与追问:划词触发开关、追问模型选择 |
![]() | 设置 → 插件 → 布局命名检查器:复制内容勾选、全局快捷键 |
![]() | 命名模式:hover 高亮 + 「分区名·元素名」名牌,点击即复制 |
节制哲学(设计原则,欢迎 review)
- 一个插件只做一件事:anno 管"选段→批示/追问",linsp 管"看布局"; hover 命名曾内置在 anno 里,后拆分为独立插件——克制是特性,不是缺陷。
- 绝不打扰主会话:追问走子会话而非注入输入框;派发失败只弹 toast 提示, 绝不偷偷内联提交。
- 触发保持克制:主触发是显式的右键菜单;划词直触发默认关闭,是可选项。
- 不越权、不偷写:只写自己声明的位置;诊断/调试设施不进发布版。
- 能回退:每个版本是不可变包,旧版本永远可回滚(版本历史见下)。
安装(在 DSH 中使用)
动态插件没有 npm 分发渠道,安装 = 把两个 *.js 文件内容分别粘贴进
cordis_define 的 code.host / code.client,然后 cordis_run。
cordis_define({ plugin: {kind:'new', idPrefix:'annos'}, name:'选段批示与追问 v2.5.0',
purpose:'…', code: { host: <anno/host.js 内容>, client: <anno/client.js 内容> } })
→ cordis_run(pluginId, packageId, 'run')
注意:
- 每个
*.js文件内容是函数体(以return { apply(ctx) { … } }结尾),不要在外面再包函数。 - 插件随 Harness 进程存活;进程重启后需重新 define/run(或做成 Agent 预设随会话挂载)。
- 更新插件时用
cordis_define(kind:'existing')追加新包,再用cordis_run(mode:'update')切换。
已知边界(踩坑记录)
开发/移植者请看 PITFALLS.md——沙箱限制、子代理 provider、
reportFrom 约束、两层沙箱、z-index 堆叠、监听器叠加等 10 条坑都在那里,每条带
版本状态标签与设计因果。
设置持久化
两插件均以 localStorage 为设置来源(插件更新不丢失):
anno.settings.v1→{ quickTrigger: boolean }linsp.settings.v1→{ parts:{region,kind,snippet,xpath,role}, shortcut, hoverThrough }
版本历史
anno:v1.0.0 → v1.5.0 → v1.6.0 → v1.6.4 → v1.7.2 → v1.8.0(one-shot 子会话尝试)→ v1.9.0(路线有误,勿用)→ v2.0.0 → v2.1.0 → v2.2.0(continuable 子会话)→ v2.3.0(追问模型可配置)→ v2.4.0(修复回复提取)→ v2.4.1 → v2.5.0(发布版)
linsp:v1.0.0 → v2.0.0 → v2.1.1 → v2.2.0 → v2.3.0 → v2.4.0 → v2.5.0 → v2.6.0(发布版)
动态插件的不可变包在每个 Harness 进程内独立编号(pkg-N),跨部署不通用,故不在此列出。
许可证
MIT © An0range







