dsh-term-dict
中文 | English
跨会话的术语字典:把「我们之间约定俗成的称谓」写进文本文件,某个词第一次出现时自动把它的口径注入模型上下文, 再配一个能看能改的设置面板和查/写/体检三条工具。
模型每开一个新会话都会忘掉「你说的 X 指什么」。术语字典把这件事存成文件:不靠记忆、不靠每轮重复解释, 写一次,之后会话里第一次用到这个词就自动带上口径。
它管什么
| 层 | 文件 | 收什么 |
|---|---|---|
| 通用 | $DSH_HOME/dict/general.md |
跨任务类型都成立的称谓 |
| 任务 | $DSH_HOME/dict/domains/<任务slug>.md |
只在本类任务里成立的称谓,含只对某个工作区成立的默认落点 |
一个任务一个文件,文件表头写一行 > 任务类型:中文任务名,面板和列表就按这个名字显示。
任务层可选绑定工作空间:表头写 > 工作空间:<路径片段>(可多行),会话的工作目录命中任一片段才参与匹配。
词条格式
## 词条名(别名:另一个叫法)
- 定义:一句话说清它是什么
- 默认指代:单独出现时默认优先指哪件事/哪份文件/哪条命令
- 边界:它不是什么
- 状态:已确认 / 部分确认 / 待观察 / 已废
- 备注:可选;撞名认哪条也写这里
除定义外都可选。别名写进标题括号里,查别名与查词条名等价。
三种类型由主字段推断,不写进文件:有定义=称谓型;只写默认指代=落点型;状态为已废=留档型。
工具
| 工具 | 用途 |
|---|---|
dict |
一个入口全包:action=lookup 查(不传 term 就列索引)/write 写词条/lint 体检/mute、unmute 把当前会话加进或移出「不灌注」名单 |
dict-lookup |
只查:列索引或给词条正文(含定义/默认指代/边界/别称/状态/备注),别名也命中 |
dict-write |
只写:增或改一条词条,写前留 .bak |
dict-lint |
只体检:空定义、缺状态、同层重名、别称冲突、跨层同名同义可删重、跨层同名异义缺排他性、名字只差一个字的疑似同词 |
查不到时给「疑似同一词」候选,不返回错误——没收录是正常结果。
自动激活
同一个会话里,某个词条的词条名或别称第一次出现时,把该条口径作为 runtime-context 注入模型上下文;
同一会话同一词条只注入一次,状态记在 $DSH_HOME/dict/.activation.json,重启或恢复会话后不重复注入。
- 生效时机:用户消息里的词在本次模型调用前生效;模型思考与输出里的词只能从下一步或下一轮生效(正在流式生成的那一段改不了)。
- 灌注范围:通用会话(没有模式或判不出模式)默认灌注。设置面板「高级设置 → 灌注的模式」会自动列出本机所有模式(带显示名与 id),勾上才在这些模式里灌注——新建的模式默认不灌,别的模式连字典工具都看不到;全不勾=只灌注通用会话。清单取不到时退回手填 id。
- 上限:默认单会话 64 条、整段 12000 字、单条不截断,都能在面板里改。
- 不灌注:面板里勾选本机工作空间(按路径子串匹配,勾上层目录会连带命中其子目录),也可手填其它路径片段(
skipWorkspaces);按会话 id 排除走skipSessions;输入栏「词条·注/禁」按钮管当前会话,任务层还能单独设「跟随/强制开/强制关」。
设置面板
设置 →「术语字典」,三块:
- 左栏:通用层与任务层名册,可新建任务层、改名、绑定工作空间。
- 右栏:「词条」视图点一条就地改字段;「原文」视图批量整理;底部显示文件与保存状态。
- 设置页:自动激活开关、三个注入上限、灌注的模式、不灌注的工作空间;「结构」页管模块与类型(模块是全局清单,类型是勾选组合),删模块先扫描影响、确认后 24 小时才动数据且可撤销。
本机路由(面板后端)
宿主半边注册 24 条本机路由,只接受回环地址;改数据的请求还要求同源(浏览器从别的站点发来的写请求直接 403)。 非浏览器来源(命令行、脚本)不带这些头,照旧放行。
| 分组 | 路由 |
|---|---|
| 层与词条 | GET /api/list、GET /api/read、POST /api/write、POST /api/rename、POST /api/create-layer、POST /api/workspace、GET /api/workspaces |
| 会话 | GET /api/session-state、POST /api/session-mute、POST /api/session-mute-clear、`GET |
| 结构 | GET /api/schema-scan、POST /api/schema/module-remove、POST /api/schema/module-cancel、POST /api/schema/module-add、POST /api/schema/module-def、POST /api/schema/type-enable、POST /api/schema/type-module、POST /api/schema/type-add、GET /api/schema/type-scan、POST /api/schema/type-remove、POST /api/schema/type-unremove |
| 设置 | `GET |
以上路径都挂在 /dsh-term-dict 前缀下。
数据放哪
$DSH_HOME/dict/:general.md、domains/<slug>.md、.settings.json(高级设置)、.activation.json(按会话记已激活词条与静音名单)。
字典文件是纯文本,可直接手改;改之前插件会留 .bak。卸载插件不会删这些文件,要清就手工删目录。
首次运行时通用层不存在,会预置两条词条(「词条(别名:词目)」「词典(别名:字典、术语字典)」,都是称谓型,模块齐全);已有字典不会被覆盖。
安装
dsh plugin --profile desktop add github:taoziliyouchong/dsh-term-dict
装完重启 DSH。用别的 profile 就把 desktop 换成你的 profile 名。
要求 DSH >= 0.2.2-rc.1;实测 0.2.2-rc.1,更高版本未验证。
开发
npm install
npm run build:client # 从 src/entry.jsx 重新生成 lib/client.js
npm run check:client # 已提交产物与源码一致
npm run check # 语法
npm run smoke # 结构 / 组合声明 / 宿主工具与路由 / 自动激活默认值 / 默认词条 / 客户端产物 / 环境残留 七关
lib/client.js 是提交进仓库的构建产物:从 GitHub 安装时不跑构建,缺了它面板不会出现。
打包要求:react、react/jsx-runtime、react-dom 保持 external(由 DSH 客户端模块表提供);
产物外壳 window.__ModuleLoader__.load({ id, factory }) 里的 id 必须等于包名。
源码:
src/entry.jsx—— 浏览器半边(面板、词条编辑、结构页、高级设置)src/term-text.js—— 词条文本的解析与渲染(面板与宿主同一套口径)index.js—— 宿主半边(四条工具、24 条本机路由、技能注册)activation.js—— 自动激活(扫描、状态、灌注上限、模式白名单)与首次运行的默认词条assets/general-default.md—— 首次运行写入通用层的默认词条(两条,都是称谓型,模块齐全)
已知限制
- 自动激活只认精确命中(词条名/别称),不做形近联想;形近候选要自己
lookup查。 - 任务层的词条只在工作空间匹配或会话覆盖时参与匹配;没写绑定的任务层对所有工作空间生效。
- 面板路由只接受本机回环地址:远程访问的 DSH 上,面板会读不到数据(返回 403)。
- 词条文件是纯文本、按二级标题分块,手改时标题必须是
## 词条名。
反馈
插件有问题,按这个顺序:
- 开 Issue:https://github.com/taoziliyouchong/dsh-term-dict/issues —— 能留痕、能搜历史;
- 急着问或不想开 Issue,QQ 号:2171960697(加好友请注明装的是哪个插件)。
反馈时带上:DSH 版本、插件版本、报错原文、截图。
许可
MIT
No comments yet. Be the first to write one.