adhdgofly-dsh-ext
Đã xác minhadhdgofly-dsh-ext · v0.1.6 · MIT · Giao diện web
ADHDGoFly POS highlighting for DeepSeek Harness Web: nouns green, verbs red, adjectives/adverbs purple, others gray, in rendered Markdown (conversation messages, deliverables, etc.)
Cài đặt
dsh plugin add adhdgofly-dsh-ext Xác nhận layer đã áp bằng dsh --profile default --dump-config — xem hướng dẫn cài plugin.
Mã nguồn
Phát hành lên npm mà không có repository công khai. Hãy kiểm tra nội dung package trước khi cài.
Thẻ
Tác giả
Readme
adhdgofly-dsh-ext
把 adhdgofly-ide-ext 的词性高亮机制搬进 DeepSeek Harness(DSH)Web 界面:在已渲染的 Markdown 内容区(对话消息、Deliverables 等)把名词染绿、动词染红、形容词/副词染紫、其他染灰,支持深/浅双色板、词性筛选即时开关、流式输出防抖与代码块豁免。
本插件是纯客户端 DOM 后处理插件(dsh.client 双面包),不改 DSH 源码;分词引擎与压缩词典来自 ADHDGoFly 生态(MIT),经 npx @deepseek-ai/dsh plugin --profile web add 一条命令安装。
功能
- 词性高亮:英文(含后缀词形还原)+ 中文(正向最大匹配),名词绿 / 动词红 / 形副紫 / 其他灰。
- 深/浅色板:跟随 DSH 主题(
theme服务),颜色与 adhdgofly-ide-ext 一致。 - 词性筛选:即时生效——文字保留、颜色移除(CSS 覆盖,无需重新分词)。
- 高亮样式:
color(文字变色,默认)/highlight(背景框 + 边框)。 - 流式兼容:
[data-streaming]消息流完前跳过,settle 后自动高亮;MutationObserver + 防抖 + 重入锁。 - 代码块豁免:
pre/code、.markdown-code-block、按钮/输入框/装饰区不参与高亮。 - 属性契约(v0.1.2):任何带
data-adhdgofly-highlight属性的元素自动被高亮(无需写入containers配置、无需重新加载)——openharness-reader的 Markdown 预览即用此契约接入;其他插件可照此联动。未带该属性的页面不受影响。 - 设置页(v0.1.3 双模式):配置面有两个并存入口——① Settings → ADHDGoFly 左侧分区(保留原位,老习惯不变);② Settings → 插件 → **「插件配置」**标签页里的 ADHDGoFly 卡片(rc.7 官方插件设置机制)。两者绑定同一个
adhdgoflysettings 命名空间(宿主侧 schema 持久化,loopback 下改任一处另一处自动同步);远程浏览器自动回退 localStorage。可在设置里用「设置入口 / Settings entry」选择只留一种(both/classic/plugin-card,刷新生效)。
安装
前置:本机已安装 DeepSeek Harness(DSH),且已初始化 web profile(npx @deepseek-ai/dsh web 跑过一次即可)。当前版本 0.1.5。
方式一:App 插件中心(推荐,无需命令行)
- 下载并安装 openharness 桌面 App:
- 打开 App,在左侧边栏进入「插件中心」;
- 在「特别推荐」里找到 adhdgofly-dsh-ext;
- 点击「安装」,等待安装完成——DSH 会自动重启并应用,无需手动操作;
- 重启后即可在 Web 设置里看到配置入口(见 §配置)。
方式二:命令行安装
# 1) 安装 DSH(首次)
npx @deepseek-ai/dsh web
# 2) 安装插件
npx @deepseek-ai/dsh plugin --profile web add adhdgofly-dsh-ext
# 若 pnpm ≥ 10 报 ERR_PNPM_ADDING_TO_ROOT,命令末尾加 -w:
npx @deepseek-ai/dsh plugin --profile web add -w adhdgofly-dsh-ext
⚠️ 命令行安装后必须重启 DSH 才生效
- 在正在运行的 DSH Web 终端按
Ctrl+C停止当前进程;- 重新启动:
npx @deepseek-ai/dsh web(若机器已把dsh装进 PATH,dsh web/dsh --profile web与之等价,任选其一)- 等 Web 界面重新打开后刷新浏览器页面。
不重启的话,正在运行的 DSH 进程的 boot 图里没有本插件,刷新页面也不会加载它。
npx @deepseek-ai/dsh plugin add 会:
- 在
~/.dsh/profiles/web里pnpm add本包; - 自动 reconcile:检测到
dsh.bundle声明,把adhdgofly-dsh-ext追加进dsh.profile.bundles,成为 profile 补丁层。
升级 / 卸载
# 升级到最新版(当前 0.1.5)
npx @deepseek-ai/dsh plugin --profile web update adhdgofly-dsh-ext
# 卸载
npx @deepseek-ai/dsh plugin --profile web remove adhdgofly-dsh-ext
- 命令行升级/卸载后,同样需要
Ctrl+C停止 →npx @deepseek-ai/dsh web重启 → 刷新浏览器。 - App 插件中心里升级/卸载会自动重启并应用。
本地开发安装(file: 符号链接,改代码无需重装)
# 在插件仓库目录或其父目录执行(file: 相对路径以调用目录为锚)
npx @deepseek-ai/dsh plugin --profile web add file:../adhdgofly-dsh-ext
file: 依赖是符号链接:客户端改动 npm run build 后刷新页面即可(DSH Web 无 HMR);patch / bundles 改动需重启 profile。安装后同样需要按上面的提醒重启一次才生效。
验证
npx @deepseek-ai/dsh --profile web --dump-config | grep -A3 adhdgofly # 合成树里应有插件行
# 浏览器 DevTools → Network 应能看到 /plugins/adhdgofly-dsh-ext/client.js 正常返回
说明:v0.1.3 起配置面走 rc.7 插件设置机制——host 半注册
adhdgoflysettings 命名空间(schemastery schema,row config 作为 base 层),client 半经ctx.settingsScope读取;loopback 下由宿主持久化,localStorage 仅作远程浏览器的回退缓存(见 §配置)。
公开发布(让其他用户安装)
本插件是标准的 DSH npm 插件包:dsh.bundle.patch 声明 + exports["./client"] 浏览器 bundle。推荐发布到 npm(DSH 官方同步开放 npm 插件生态),GitHub 仅作源码托管;从 GitHub 直接安装也可用,但需要额外配置(见下)。
方式一:发布到 npm(推荐)
前置:npm 账号已登录(npm login;未登录发布会报 E401),包名未被占用(npm view adhdgofly-dsh-ext 返回 404 即可用)。
npm run build:all # 1) 生成压缩词典 2) 构建 lib/(prepublishOnly 会自动执行)
npm test # jsdom 冒烟测试(prepublishOnly 会自动执行)
npm publish # 发布:自动跑 prepublishOnly(build:all + test)后再上传
- 发布内容由
files字段决定:lib/(host + client bundle)、dicts/(压缩词典)、cordis.patch.yml、README.md(LICENSE / package.json 自动包含),压缩后约 4.4MB。 - 升级版本:
npm version patch|minor|major && npm publish。 - 其他用户安装(见 §安装):App 插件中心「特别推荐」,或命令行
npx @deepseek-ai/dsh plugin --profile web add adhdgofly-dsh-ext(pnpm ≥ 10 报错时末尾加-w);升级用npx @deepseek-ai/dsh plugin --profile web update adhdgofly-dsh-ext。
方式二:从 GitHub 直接安装(备选)
npx @deepseek-ai/dsh plugin --profile web add github:你的用户名/adhdgofly-dsh-ext
# 或 git+https://github.com/你的用户名/adhdgofly-dsh-ext.git
注意:pnpm 默认阻止依赖的构建脚本(prepare),且本仓库 .gitignore 排除了 lib/ 与 dicts/ 构建产物。git 安装若要可用,二选一:
- 发布分支强制包含构建产物:
git add -f lib dicts(构建产物随源码提交,仓库体积约 +17MB); - 或包内增加
prepare构建脚本,并在安装方~/.dsh/profiles/web/pnpm-workspace.yaml的allowBuilds中放行本包(pnpm 会在安装时打印所需的精确配置项)。
因此日常发布以 npm 为主,GitHub 用于源码协作、issue 与版本标签。
配置
| 配置项 | 默认 | 说明 |
|---|---|---|
enabled |
true |
总开关 |
languages |
['en','zh'] |
启用词典语言 |
minWordLength |
2 |
最小词长 |
decorationStyle |
'color' |
color 变色 / highlight 背景框 |
posFilter |
['n','v','a','o'] |
词性筛选(n 名词 / v 动词 / a 形副 / o 其他) |
containers |
['[data-conversation-scroll]'] |
高亮根容器 CSS 选择器,可追加其他 Markdown 渲染区 |
三种改法(按优先级):
- 设置页(推荐,v0.1.3 双入口):Settings → ADHDGoFly 左侧分区 或 Settings → 插件 →「插件配置」的 ADHDGoFly 卡片。两者绑定同一个
adhdgofly命名空间,loopback 下由宿主持久化、互相同步;改动即时生效。 - 行 config(
~/.dsh/profiles/web/cordis.patch.yml按 id 覆盖整行):作为命名空间的 base 层,经ctx.settingsScope流入 client(rc.7 起生效)。 - 代码默认值:改
src/host/index.ts的SCHEMA默认值 与src/client/config.ts的DEFAULT_CONFIG后重新构建。
远程浏览器(非 loopback)说明:DSH 的 settings RPC 仅限 loopback,远程浏览器里设置不持久化、插件卡片不显示;此时高亮使用 localStorage 回退缓存(本地记忆)或内置默认。
开发循环
npm install
npm run build:all # 1) 生成压缩词典(读 adhdgofly-ide-ext 大词典)2) 构建 lib/
npm run typecheck
npm test # jsdom 冒烟测试(分词/代码块豁免/流式/色板/筛选)
IDE_EXT_ROOT环境变量可指向其他 adhdgofly-ide-ext 检出(默认/Users/burenweiye/Documents/GitHub/adhdgofly-ide-ext)。- 客户端改动:
npm run build→ 刷新页面(file: 依赖是符号链接,无需重装;DSH Web 无 HMR,见下)。 - patch / bundles 改动:重启 web profile。
- 注意:DSH Web 无客户端 HMR(
hmr行被disabled),client 改动 = 重新 build + 刷新。
构建产物
| 产物 | 说明 |
|---|---|
lib/client.js |
浏览器 bundle(window.__ModuleLoader__.load 格式),内嵌压缩词典,约 8MB 未压缩 |
lib/index.js |
host 半:注册 adhdgofly settings 命名空间(schemastery schema + base 层),ESM |
dicts/en.compact.json、dicts/zh.compact.json |
word → posKey('n'|'v'|'a'|'o'),构建期从 ide-ext 大词典生成,运行时只读压缩形态 |
架构
MarkdownText 渲染完成 → MutationObserver(防抖 400ms + 重入锁 + WeakMap 已处理文本)
→ 取目标容器文本节点(跳过 pre/code/.markdown-code-block/交互控件/[data-streaming])
→ 纯引擎 segmentMixed(内嵌压缩词典 + en 词形还原)→ matchSegments(长度/词性筛选)
→ 包 <span class="adhdgofly-hl" data-pos="n|v|a|o">
→ 注入/更新 #adhdgofly-style(配色 + decorationStyle + posFilter CSS 覆盖)
→ 主题变化(theme/change)→ 重渲染样式表,span 自动跟随
详见仓库根目录 000-adhdgofly-dsh-ext-plan.md(规划)与 001-adhdgofly-ide-ext-reference.md(移植参考)。
相关项目(ADHDGoFly 生态)
| 项目 | 说明 | 获取方式 |
|---|---|---|
| adhdgoflyplugin(浏览器扩展) | 浏览器任意网页的词性高亮 | Chrome 应用商店 · Edge 加载项 |
| adhdgofly-ide-ext | VS Code 扩展:编辑器内词性高亮 | GitHub |
| adhdgofly-dsh-ext(本插件) | DSH Web 界面词性高亮 | npx @deepseek-ai/dsh plugin --profile web add adhdgofly-dsh-ext |
许可与数据来源
- 代码:MIT(本仓库 + adhdgofly-ide-ext,同属 ADHDGoFly 生态)。
- 词典数据:源自 adhdgofly-ide-ext 内置词典(
dictionaries/EN_word.json、ZH_word.json,MIT 生态),其中英文词典来自 Princeton WordNet(WordNet License),中文词典来自 jieba 分词词库(MIT);经scripts/build-dicts.mjs压缩为dicts/*.compact.json随包分发,独立发布时请注明数据来源与生成脚本。
已知限制(v0.1.3)
- 高亮为渲染后 DOM 后处理:React 重渲染时高亮可能短暂重置(已用防抖/流式跳过/已处理文本跟踪缓解)。
- 不覆盖代码编辑器(DSH 无)、浏览器任意网页(那是 adhdgoflyplugin 浏览器扩展 / Edge 加载项 的职责)。
- 设置持久化:loopback 下由宿主 settings 持久化(跨浏览器/会话一致);远程浏览器(非 loopback)settings RPC 不生效,回退到浏览器 localStorage(跨浏览器不同步)。
我开发的 DSH 插件
我(zuoguyoupan2023)开发维护的一系列 DeepSeek Harness(dsh)插件,均可按需通过 App 插件中心「特别推荐」,或命令行 npx @deepseek-ai/dsh plugin --profile web add <name> 安装:
| 插件 | 作用 | GitHub 仓库 | 安装 |
|---|---|---|---|
| adhdgofly-dsh-ext | DSH Web 界面词性高亮(名绿/动红/形紫/其他灰) | zuoguyoupan2023/adhdgofly-dsh-ext | npx @deepseek-ai/dsh plugin --profile web add adhdgofly-dsh-ext |
| openharness-reader | 工作区文件浏览/编辑 + Markdown 预览 | zuoguyoupan2023/openharness-reader | npx @deepseek-ai/dsh plugin --profile web add openharness-reader |
| openharness-reply-in-cn | 强制模型用简体中文回复,侧边栏「中文回复」项 | zuoguyoupan2023/openharness-reply-in-cn | npx @deepseek-ai/dsh plugin --profile web add openharness-reply-in-cn |
| openharness-rule-for-dsh-plugin | 注入 DSH 插件开发的 CAN/SHOULD/MUST NOT 规范,侧边栏「插件开发规范」项 | zuoguyoupan2023/openharness-rule-for-dsh-plugin | npx @deepseek-ai/dsh plugin --profile web add openharness-rule-for-dsh-plugin |