@yfwu2020/dsh-selection-explain 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +306 -0
- package/cordis.patch.yml +31 -0
- package/lib/client.js +4904 -0
- package/lib/index.js +2292 -0
- package/lib/index.js.map +1 -0
- package/lib/types/index.d.ts +251 -0
- package/package.json +50 -0
- package/scripts/build.sh +102 -0
- package/scripts/dump-prompt.mjs +143 -0
- package/scripts/test-client.mjs +2486 -0
- package/scripts/test-filters.mjs +229 -0
- package/scripts/test-guard.mjs +48 -0
- package/scripts/test-transcript.mjs +78 -0
- package/skills/web-design/SKILL.md +74 -0
- package/src/client/index.js +4904 -0
- package/src/index.ts +2560 -0
package/README.md
ADDED
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
# dsh-selection-explain · 划词解读
|
|
2
|
+
|
|
3
|
+
> 在 [DSH](https://github.com/deepseek-ai) Web 界面里**选中任意文字**,就地得到**专业翻译** + **这段文字在当前上下文里到底是什么意思**,还能接着追问、或一键升格成正式会话。
|
|
4
|
+
|
|
5
|
+
[](https://github.com/yfwu2020/dsh-selection-explain/releases)
|
|
6
|
+
[](./package.json)
|
|
7
|
+
[](https://github.com/yfwu2020/dsh-selection-explain)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 它解决什么问题
|
|
12
|
+
|
|
13
|
+
读英文文档、看代码注释、翻聊天记录时,卡住的往往不是"这个词什么意思",而是**"它在这里什么意思"**:
|
|
14
|
+
|
|
15
|
+
- `commit` 是"提交"还是"承诺"?`stale closure` 在这个 bug 报告里指哪种闭包?
|
|
16
|
+
- 同事写的 "let's circle back on the migration" 到底在安排什么?
|
|
17
|
+
- 这段报错里的 `EADDRINUSE`,在当前这个项目里是端口冲突还是残留进程?
|
|
18
|
+
|
|
19
|
+
普通翻译工具只给词义,**不给语境**。这个插件把**选中文字 + 它周围的内容 + 当前会话的对话背景**一起喂给模型,所以答案能落到"这里"——并且它知道你是在读文档、读代码,还是在跟人对话。
|
|
20
|
+
|
|
21
|
+
## 功能
|
|
22
|
+
|
|
23
|
+
### 两段式:先快后深
|
|
24
|
+
|
|
25
|
+
点开面板**先只出翻译**(上下文窗口收窄到 8 条消息,首字最快);翻译出来后才出现 **`↓ 展开详解`**,点了才用完整会话背景(24 条消息)做深度解读。想要快就停在第一段,想要透就展开——**不强迫你为深度等首字**。
|
|
26
|
+
|
|
27
|
+
### 翻译:按选中内容的语言和形态自适应
|
|
28
|
+
|
|
29
|
+
不是无脑翻译,而是先判断这段文字是什么,只给对应的那一种:
|
|
30
|
+
|
|
31
|
+
| 选中内容 | 输出 |
|
|
32
|
+
| --- | --- |
|
|
33
|
+
| 中文句子(夹英文) | 中文部分**不翻译**,只把句中夹着的英文片段逐条译成中文 |
|
|
34
|
+
| 中文词 / 词组 | 列常用义项(每行一条) |
|
|
35
|
+
| 英文句子 / 词组 | 直接给中文译文 |
|
|
36
|
+
| 英文单词 | 逐个义项一行,**带音标** |
|
|
37
|
+
| 日 / 韩 / 法 / 德等其他语言 | 译成中文 |
|
|
38
|
+
|
|
39
|
+
最后固定给一条**结论条**:`> 在本句中:<它在这里的确切含义>`,面板里渲染成高亮条,一眼看到答案。
|
|
40
|
+
|
|
41
|
+
### 详解:讲透"在这里"的意思
|
|
42
|
+
|
|
43
|
+
- **先判断来源**:这段文字是真实内容,还是示例 / 测试用例 / 演示输出 / 引用别人的话?是后者就先点明(否则示例句会被当成真实陈述去解释)。
|
|
44
|
+
- **专业名词两层讲**:先给通用含义(本领域标准定义或全称),再说它在这段上下文里具体指什么。
|
|
45
|
+
- **讲透承接关系**:关键说法各指什么、承接了什么、能推出什么。
|
|
46
|
+
- **可以联网**:拿不准或是新出现的名词、缩写、产品名,会先搜索确认再解释,事实融进解释里,不罗列搜索过程。
|
|
47
|
+
|
|
48
|
+
### 选中代码 → 出注释
|
|
49
|
+
|
|
50
|
+
如果选中的是代码(在 `<pre>/<code>` 里,或文本特征像代码),首轮标题变成「**注释**」:整个回答是一个代码块,里面是**注释 + 原代码交替**的批注清单——每条语句**前面**一行该语言的注释符号(`//`、`#`、`--`、`<!--`…),原代码逐字不变。注释行弱化显示,一眼分得清哪行是代码、哪行是批注。缩进按原行起始列对齐,折行也不会跑到注释左边。
|
|
51
|
+
|
|
52
|
+
### 临时对话小窗
|
|
53
|
+
|
|
54
|
+
翻译一出来就能直接追问,不必先展开详解:
|
|
55
|
+
|
|
56
|
+
- 输入框 `Enter` 发送、`Shift+Enter` 换行(中文输入法确认候选词的 Enter 不会误发)。
|
|
57
|
+
- 回答流式出现,多轮上下文保留。
|
|
58
|
+
- 追问可以**联网查证**,但工具日志不进小窗——只给你模型消化后的结论。
|
|
59
|
+
- 生成中可以点**停止**打断;没有可用结果时给「重新生成」。
|
|
60
|
+
- 关掉面板**不会丢**:点右下角胶囊原样回来,不重新请求。
|
|
61
|
+
|
|
62
|
+
### 「最近聊过的」历史
|
|
63
|
+
|
|
64
|
+
面板头部 `🕘 最近` 打开独立浮层列表(贴面板侧边,空间不够自动翻到另一侧)。重划同一个词**直接回放上次的对话,一次模型都不调**。默认保留最近 20 个划词条目(每个条目含它自己的全部追问),LRU 淘汰,**升格过的条目不会被淘汰**。
|
|
65
|
+
|
|
66
|
+
历史落在 `~/.dsh/selection-explain/history.json`,**不建会话**——不污染你的会话列表。
|
|
67
|
+
|
|
68
|
+
### 升格为正式会话
|
|
69
|
+
|
|
70
|
+
面板头部 `↗ 升格` 把这次解读(选中文字 + 翻译 / 详解 + 全部追问)变成一个正式会话,建在**来源会话同一个项目下**。临时小窗聊出价值了,就把它变成正式的。
|
|
71
|
+
|
|
72
|
+
### 悬浮状态胶囊
|
|
73
|
+
|
|
74
|
+
右下角一枚胶囊显示"最近一次划词现在什么状态"(进行中报阶段和秒数、其余报结果),点一下回到那个小窗。它会自动贴到费用胶囊上方。
|
|
75
|
+
|
|
76
|
+
### 零依赖渲染
|
|
77
|
+
|
|
78
|
+
面板自带 Markdown 渲染器(段落、多级列表、小标题、表格、引用、代码块)和**语法高亮 tokenizer**(自研,零依赖):注释 / 字符串 / 数字 / 关键字 / 函数名 / 类型 / 标签 / 属性 / 变量 / 运算符分色,按围栏语言标记选规则。配色跟随**面板实际底色**判定,不是看系统偏好——所以 App 深色 + 系统浅色也不会出现深底配深字。文字对比度实测全部 ≥ WCAG AA 4.5。
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 安装
|
|
83
|
+
|
|
84
|
+
### 方式一:从 Release 安装(推荐)
|
|
85
|
+
|
|
86
|
+
每个 Release 都附了**构建好的 `.tgz`**(含 `lib/` 产物,装完即可用,无需 clone 源码):
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
# 下载最新 release 的安装包
|
|
90
|
+
curl -LO https://github.com/yfwu2020/dsh-selection-explain/releases/download/v0.1.0/yfwu2020-dsh-selection-explain-0.1.0.tgz
|
|
91
|
+
|
|
92
|
+
# 解包到插件目录
|
|
93
|
+
mkdir -p ~/.dsh/plugins/dsh-selection-explain
|
|
94
|
+
tar -xzf yfwu2020-dsh-selection-explain-0.1.0.tgz \
|
|
95
|
+
-C ~/.dsh/plugins/dsh-selection-explain --strip-components=1
|
|
96
|
+
|
|
97
|
+
# 装配到 profile(重启后由官方接管)
|
|
98
|
+
dsh plugin --profile web add ~/.dsh/plugins/dsh-selection-explain
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### 方式二:从源码安装
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
git clone git@github.com:yfwu2020/dsh-selection-explain.git
|
|
105
|
+
cd dsh-selection-explain
|
|
106
|
+
|
|
107
|
+
# 构建(自动探测 DSH 运行时;host 走 tsc,client 是手写 bundle 直接拷贝)
|
|
108
|
+
bash scripts/build.sh
|
|
109
|
+
|
|
110
|
+
# 装配
|
|
111
|
+
dsh plugin --profile web add .
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
> `scripts/build.sh` 会自动探测 DSH 运行时(`DSH_CHECKOUT` → PATH 上的 `dsh` → 常见 checkout → npx 缓存)。
|
|
115
|
+
> 探测不到时可以显式指定:`DSH_CHECKOUT=/path/to/dsh-harness bash scripts/build.sh`。
|
|
116
|
+
|
|
117
|
+
装好后**刷新页面**,选中文字试试。浏览器控制台会打印 `[dsh-selection-explain] 划词解读已就绪(选中文字试试)`。
|
|
118
|
+
|
|
119
|
+
### 卸载
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
dsh plugin --profile web remove @yfwu2020/dsh-selection-explain
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## 用法
|
|
128
|
+
|
|
129
|
+
| 动作 | 结果 |
|
|
130
|
+
| --- | --- |
|
|
131
|
+
| **鼠标划选** / `Shift` + 方向键 | 选区末端浮出 `✦ 解读` 药丸按钮(✦ 是图标,按钮文字是「解读」;输入框内的选择不触发,避免干扰打字) |
|
|
132
|
+
| 点击按钮 | 弹出面板:顶部是选中文字,正文是「翻译」卡片 |
|
|
133
|
+
| 点 `↓ 展开详解` | 加载完整会话背景,追加「详解」卡片 |
|
|
134
|
+
| 面板底部输入框 | 就这段文字继续追问(`Enter` 发送 / `Shift+Enter` 换行) |
|
|
135
|
+
| `🕘 最近` | 打开最近划过的列表,点一条调回那段对话 |
|
|
136
|
+
| `↗ 升格` | 把这次解读变成正式会话 |
|
|
137
|
+
| `✕` / `Esc` | 关闭面板(**任何时候都能关**,一次到位) |
|
|
138
|
+
| 右下角悬浮胶囊 | 点一下:关着就回到最近一次小窗,开着就收起(来回切换,不重新请求) |
|
|
139
|
+
|
|
140
|
+
**几个不别扭的细节:**
|
|
141
|
+
|
|
142
|
+
- **点面板外不会关闭面板**。答案留在原地,只有 `✕` / `Esc` / 右下角胶囊能收起——不会因为手滑点一下就得重新问。
|
|
143
|
+
- 关闭时**会中止正在飞的请求**,并记成「已停止」(不是失败);内容都留着,点胶囊回来还是原样。
|
|
144
|
+
- 拖动面板:抓头部即可拖动。
|
|
145
|
+
- 追问时消息区**贴底跟随**;你主动往上翻就不会被拽回去。
|
|
146
|
+
- `🕘 最近` 的列表点别处就收(不连带关面板),但 `Esc` 会把面板和它一起收。
|
|
147
|
+
|
|
148
|
+
### 调试钩子
|
|
149
|
+
|
|
150
|
+
浏览器控制台里可以直接驱动,方便验证渲染链路:
|
|
151
|
+
|
|
152
|
+
```js
|
|
153
|
+
window.__dshSelectionExplain.open('the migration ran long', 'Dev: the migration ran long, so we ship Wednesday.')
|
|
154
|
+
window.__dshSelectionExplain.state() // { phase, chars, model, sections }
|
|
155
|
+
window.__dshSelectionExplain.ping() // 当前模型路由与限制
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### HTTP 接口
|
|
159
|
+
|
|
160
|
+
host 半注册了同源路由,可以单独调用:
|
|
161
|
+
|
|
162
|
+
| 路由 | 说明 |
|
|
163
|
+
| --- | --- |
|
|
164
|
+
| `POST /selection-explain/api/analyze` | 选中文字 + 上下文 → **SSE 流式**返回翻译与详解 |
|
|
165
|
+
| `GET /selection-explain/api/ping` | 健康检查:当前模型路由、各阶段推理档位、限制 |
|
|
166
|
+
| `GET /selection-explain/api/models` | 可选模型列表(面板里的模型选择器用) |
|
|
167
|
+
| `GET/POST /selection-explain/api/history` | 小窗对话历史的读 / 写 / 删除 |
|
|
168
|
+
| `POST /selection-explain/api/promote` | 升格为正式会话 |
|
|
169
|
+
|
|
170
|
+
健康检查示例:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
curl -s http://127.0.0.1:3080/selection-explain/api/ping
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## 配置
|
|
179
|
+
|
|
180
|
+
配置写在 profile 的 `cordis.patch.yml` 里同 id 的行上(`dsh plugin add` 装好后,包自带的 `cordis.patch.yml` 里已有可改的样板):
|
|
181
|
+
|
|
182
|
+
```yaml
|
|
183
|
+
- insert:
|
|
184
|
+
- id: selection-explain
|
|
185
|
+
name: '@yfwu2020/dsh-selection-explain'
|
|
186
|
+
config:
|
|
187
|
+
reasoningEffort: high
|
|
188
|
+
sessionContextMaxMessages: 24
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
**下表默认值取自 `src/index.ts` 的 `Config` schema,也就是推荐值。** 不填即用默认。
|
|
192
|
+
|
|
193
|
+
### 模型与推理
|
|
194
|
+
|
|
195
|
+
| 字段 | 默认 | 说明 |
|
|
196
|
+
| --- | --- | --- |
|
|
197
|
+
| `provider` | `''` | 固定 provider 路由;留空 = 跟随「设置 → 默认模型」 |
|
|
198
|
+
| `model` | `''` | 固定 model id;留空 = 跟随默认模型 |
|
|
199
|
+
| `reasoningEffort` | `high` | **详解**阶段推理档位(`off` / `low` / `high` / `max`) |
|
|
200
|
+
| `translationReasoningEffort` | `low` | **首轮翻译**单独一档。这一轮只需挑英文片段,压低换首字速度 |
|
|
201
|
+
| `chatReasoningEffort` | `high` | **追问**档位(追问要准不要快;想更快可调 `low`) |
|
|
202
|
+
| `temperature` | `-1` | 采样温度。**`-1` = 不传**,交给供应商默认(与主会话一致);`0`~`2` 之间才真的传 |
|
|
203
|
+
| `maxTokens` | `0` | 单次输出上限(tokens)。**`0` = 不限制**。填正数可控成本 / 控时延 |
|
|
204
|
+
| `timeoutMs` | `300000` | 单次调用超时(含工具轮;客户端断开即中止上游) |
|
|
205
|
+
|
|
206
|
+
> 推理档位三档分开是有原因的:翻译不需要深度推理,详解需要。默认 `translationReasoningEffort: low` 让首字快、`reasoningEffort: high` 让详解细。
|
|
207
|
+
|
|
208
|
+
### 上下文与缓存
|
|
209
|
+
|
|
210
|
+
| 字段 | 默认 | 说明 |
|
|
211
|
+
| --- | --- | --- |
|
|
212
|
+
| `maxSelectionChars` | `4000` | 选中文字长度上限(超了不出现按钮,host 侧也会拦截并给出明确报错) |
|
|
213
|
+
| `maxContextChars` | `12000` | 局部上下文上限(选区前后各取一段窗口) |
|
|
214
|
+
| `sessionContext` | `true` | 是否注入当前会话的对话背景(判断指代与前提的关键) |
|
|
215
|
+
| `sessionContextFastMessages` | `8` | **首轮翻译**用的背景条数;越小首字越快 |
|
|
216
|
+
| `sessionContextMaxMessages` | `24` | **详解 / 追问**用的背景条数(自选中文字所在消息向上取) |
|
|
217
|
+
| `sessionContextMaxChars` | `0` | 会话背景字符上限;**`0` = 不限**(只按条数取窗口) |
|
|
218
|
+
| `resultCacheTtlMs` | `600000` | 共享结果缓存 TTL(毫秒);`0` = 关闭 |
|
|
219
|
+
| `historyMaxEntries` | `20` | 小窗对话历史保留多少个划词条目;`0` = 关闭历史 |
|
|
220
|
+
| `maxRequestsPerMinute` | `40` | 本地限流,防误触发刷爆额度 |
|
|
221
|
+
|
|
222
|
+
### 工具(联网 / 文件)
|
|
223
|
+
|
|
224
|
+
| 字段 | 默认 | 说明 |
|
|
225
|
+
| --- | --- | --- |
|
|
226
|
+
| `tools` | `true` | 是否允许解读过程调用工具 |
|
|
227
|
+
| `toolNames` | `advanced_search,platform_search,read,grep,glob` | 工具白名单(逗号分隔)。默认用 free-search 插件的搜索工具,支持多引擎、时间过滤、平台搜索 |
|
|
228
|
+
| `fallbackToolNames` | `web_search` | **备用**清单:只在首选里的联网工具一个都不在时才补进来(没装 free-search 时兜底) |
|
|
229
|
+
| `maxToolRounds` | `2` | 最多几轮工具调用(用完会补一轮不带工具的收尾,避免"转半天没回答") |
|
|
230
|
+
| `toolResultMaxChars` | `3000` | 单个工具结果注入模型前的字符上限 |
|
|
231
|
+
| `toolReadRoot` | `''` | 文件类工具(`read`/`grep`/`glob`)的读取边界:`''` = 会话工作目录,`'*'` = 不限制,其他 = 指定目录。越界在**执行前**被拒 |
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## 工作原理
|
|
236
|
+
|
|
237
|
+
```
|
|
238
|
+
浏览器(client half,挂在官方 shell.overlay 槽 —— 帧级浮层,不遮挡 App)
|
|
239
|
+
① 监听 selection(mouseup / Shift+方向键)→ 在选区末端定位浮标
|
|
240
|
+
② 点击后采集三段信息:
|
|
241
|
+
· 局部上下文:选区所在容器文本中,选区前后各 1500 字的窗口,【】标出选中部分
|
|
242
|
+
· 所在位置:容器类型(对话消息 / 代码块 / 表格 / 页面内容)+ 页面标题与地址
|
|
243
|
+
· 当前会话 id
|
|
244
|
+
③ POST /selection-explain/api/analyze → SSE 边收边渲染
|
|
245
|
+
↓
|
|
246
|
+
宿主(host half,进程内)
|
|
247
|
+
④ 解析模型路由:默认取「设置 → 默认模型」
|
|
248
|
+
⑤ 会话背景:按会话 id 读该会话的真实对话(工具调用 / 系统提示 / harness 注入内容全部剔除),
|
|
249
|
+
从最新往前取到预算上限,并把选中文字所在的那条标 ▶
|
|
250
|
+
⑥ 组两节提示词 → ctx.llm.stream(...) → text-delta 直接透传 SSE
|
|
251
|
+
(reasoning-delta 另走 thought 事件,只喂"正在想什么"那一行,不参与正文)
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
**几个设计取舍:**
|
|
255
|
+
|
|
256
|
+
- **不建会话**:小窗对话落在插件自己的 `history.json` 里。会话是重型对象,高频功能那样做只会堆死会话列表。
|
|
257
|
+
- **缓存 key 不含选中文字之后的内容**:否则主会话后面追加新消息时,同一个词的 key 就变了,表现为"找不着上次的小窗、又生成一个"。
|
|
258
|
+
- **上下文窗口锚定选中文字所在的那条消息**,向上取——不是简单取最近 N 条,这样"这个词在这段对话里什么意思"才有前提。
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## 自检与开发
|
|
263
|
+
|
|
264
|
+
```bash
|
|
265
|
+
npm run build # 构建(= bash scripts/build.sh)
|
|
266
|
+
npm test # 463 条断言(filters / client / transcript / guard)
|
|
267
|
+
npm run typecheck # tsc --noEmit
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
| 脚本 | 用途 |
|
|
271
|
+
| --- | --- |
|
|
272
|
+
| `scripts/test-client.mjs` | 无浏览器集成测试:真实 host 路由 + 最小 DOM 桩,覆盖槽注册 → 划词浮标 → 点击 → SSE 流式渲染 → 两节内容 → 清理 |
|
|
273
|
+
| `scripts/test-filters.mjs` | host 侧流式过滤器单测(思考泄漏、工具调用残渣等) |
|
|
274
|
+
| `scripts/test-transcript.mjs` | 会话背景窗口的离线测试(锚点 / 条数 / 不截断 / 噪音剔除 / 退化路径) |
|
|
275
|
+
| `scripts/test-guard.mjs` | 文件工具读取边界的路径校验 |
|
|
276
|
+
| `scripts/dump-prompt.mjs` | 打印实际注入的提示词(system + user + 各段尺寸),排查"模型到底看到了什么" |
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
# 看某次解读到底喂了什么
|
|
280
|
+
node scripts/dump-prompt.mjs <sessionId> "<选中文字>"
|
|
281
|
+
node scripts/dump-prompt.mjs --no-session "<选中文字>" # 不带会话背景的对照组
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
## 目录
|
|
285
|
+
|
|
286
|
+
```
|
|
287
|
+
src/index.ts host 半:SSE 路由 / 模型调用 / 提示词 / 会话背景 / 历史落盘 / 过滤器
|
|
288
|
+
src/client/index.js client 半:划词浮标 + 面板 + 渲染器(手写 ModuleLoader bundle,无打包器)
|
|
289
|
+
scripts/ build.sh + 4 个测试 + dump-prompt
|
|
290
|
+
skills/web-design/ 网页模式注入的设计规范(运行时读取)
|
|
291
|
+
docs/DEVELOPMENT.md 内部开发文档(实现细节 / 实测记录 / 踩坑)
|
|
292
|
+
docs/*.html UI 试验页(浮标动效 / 模型选择器 / 配色方案等)
|
|
293
|
+
cordis.patch.yml 官方装配用的 bundle patch
|
|
294
|
+
lib/ 构建产物(已 gitignore,克隆后需 npm run build)
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
## 已知限制
|
|
298
|
+
|
|
299
|
+
- 只覆盖**同源页面内**的选中文字;跨域 iframe(如内置浏览器标签页里的外部站点)内部的选择不触发。
|
|
300
|
+
- 面板**不跟随页面滚动**(滚动即收起浮标 / 面板),符合「划完即看」的一次性使用预期。
|
|
301
|
+
- 结论来自当前模型,专业领域术语请以人工判断为准。
|
|
302
|
+
- 依赖 DSH 的 `webServer` 与 `llm` 服务;宿主版本过旧可能不兼容(peerDependencies 见 `package.json`)。
|
|
303
|
+
|
|
304
|
+
## License
|
|
305
|
+
|
|
306
|
+
MIT
|
package/cordis.patch.yml
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# dsh-selection-explain bundle patch
|
|
2
|
+
#
|
|
3
|
+
# 本文件是包的 dsh.bundle.patch 层:官方 CLI 装配
|
|
4
|
+
# dsh plugin --profile <name> add @yfwu2020/dsh-selection-explain
|
|
5
|
+
# 会把本包加进 profile 的 dsh.profile.bundles,启动时合并下面的 insert 行——
|
|
6
|
+
# 无需手写 profile 的 cordis.patch.yml。运行时注入(dsh-super-injector 的
|
|
7
|
+
# dev_inject_plugin / dev_install_package)同样使用这一行语义。
|
|
8
|
+
#
|
|
9
|
+
# 可调参数(改 profile 的 cordis.patch.yml 里同 id 行即可覆盖):
|
|
10
|
+
# provider / model 固定模型路由;留空 = 跟随「默认模型」设置
|
|
11
|
+
# reasoningEffort 详解阶段的推理档位:off / low / high / max
|
|
12
|
+
# translationReasoningEffort 首轮「翻译」单独一档(默认 low);实测 low≈high 都要 8~11s,
|
|
13
|
+
# 只有 off 是 1.7s(不思考)——想秒出就改成 off
|
|
14
|
+
# chatReasoningEffort 追问档位(默认 high;想更快就调 low)
|
|
15
|
+
# historyMaxEntries 小窗对话历史保留多少个「划词条目」(默认 20,0 = 关闭);
|
|
16
|
+
# 每个条目内含它自己的全部追问轮次,升格过的不参与 LRU 淘汰
|
|
17
|
+
# maxSelectionChars 选中文字长度上限(默认 4000)
|
|
18
|
+
# maxContextChars 上下文长度上限(默认 12000)
|
|
19
|
+
# maxRequestsPerMinute 本地限流(默认 40)
|
|
20
|
+
# toolNames 工具白名单(默认 web_search,web_fetch,read,grep,glob)
|
|
21
|
+
# toolReadRoot 文件类工具(read/grep/glob)的读取边界:'' = 会话工作目录(默认),
|
|
22
|
+
# '*' = 不限制,其他 = 写死的某个目录。越界在**执行前**被拒
|
|
23
|
+
# tools 总开关(false = 完全不给工具)
|
|
24
|
+
- insert:
|
|
25
|
+
- id: selection-explain
|
|
26
|
+
name: '@yfwu2020/dsh-selection-explain'
|
|
27
|
+
config:
|
|
28
|
+
# 首字约 1.9s(实测,off 不思考);要更深可改 low / high / max
|
|
29
|
+
reasoningEffort: off
|
|
30
|
+
# 想再快:把背景窗口调小(少 prefill)
|
|
31
|
+
# sessionContextMaxMessages: 8
|