dsh-input-assistant 0.0.0-stage → 0.1.3
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/LICENSE +21 -0
- package/README.md +183 -2
- package/cordis.patch.yml +3 -0
- package/docs/CHANGELOG-0.1.2.md +102 -0
- package/docs/evaluation.md +111 -0
- package/docs/references.md +39 -0
- package/docs/smoke-comparison.md +37 -0
- package/docs/validation.md +100 -0
- package/lib/browser/components.d.ts +11 -0
- package/lib/browser/controller.d.ts +144 -0
- package/lib/browser/dom.d.ts +29 -0
- package/lib/browser/floating.d.ts +21 -0
- package/lib/browser/index.d.ts +6 -0
- package/lib/browser/public.d.ts +2 -0
- package/lib/browser/runtime.d.ts +53 -0
- package/lib/browser/settings.d.ts +8 -0
- package/lib/browser/styles.d.ts +1 -0
- package/lib/client.js +1704 -0
- package/lib/client.meta.json +274 -0
- package/lib/core/config.d.ts +17 -0
- package/lib/core/context.d.ts +4 -0
- package/lib/core/diff.d.ts +6 -0
- package/lib/core/generation.d.ts +15 -0
- package/lib/core/index.d.ts +8 -0
- package/lib/core/protection.d.ts +19 -0
- package/lib/core/scheduler.d.ts +10 -0
- package/lib/core/snapshot.d.ts +2 -0
- package/lib/core/types.d.ts +81 -0
- package/lib/core.js +523 -0
- package/lib/core.js.map +7 -0
- package/lib/host/rpc.d.ts +29 -0
- package/lib/host/runtime.d.ts +26 -0
- package/lib/host/storage.d.ts +54 -0
- package/lib/host/transcript.d.ts +19 -0
- package/lib/index.d.ts +64 -0
- package/lib/index.js +869 -0
- package/lib/index.js.map +7 -0
- package/package.json +121 -3
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 dsh-input-assistant contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,184 @@
|
|
|
1
|
-
#
|
|
1
|
+
# DSH 输入助手
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://github.com/Somnus678/dsh-input-assistant/actions/workflows/ci.yml)
|
|
4
|
+
[](https://github.com/Somnus678/dsh-input-assistant/releases/tag/v0.1.3)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
[](https://github.com/deepseek-ai/deepseek-harness)
|
|
7
|
+
[](docs/validation.md)
|
|
8
|
+
|
|
9
|
+
[DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 的输入框增强插件:**提示词优化**、**下一句预测**、**输入续写**、**草稿暂存**。
|
|
10
|
+
|
|
11
|
+

|
|
12
|
+
|
|
13
|
+
## 功能
|
|
14
|
+
|
|
15
|
+
| 功能 | 说明 |
|
|
16
|
+
|---|---|
|
|
17
|
+
| **提示词优化** | 把草稿或选中文字改写成更准确、可发送的表达。三档强度(轻/标准/深度),显示逐词差异,一键撤销。 |
|
|
18
|
+
| **下一句预测** | 回复完成后预测你接下来可能说的话,以灰字提示,Tab 采纳,不发送。 |
|
|
19
|
+
| **输入续写** | 根据当前草稿预测后续内容,停顿时间与最小间隔可调。 |
|
|
20
|
+
| **草稿暂存** | 当前会话最多保留 3 份草稿,清空输入前自动保存,显式恢复。 |
|
|
21
|
+
|
|
22
|
+
深色与浅色主题均已适配:
|
|
23
|
+
|
|
24
|
+
| 浅色 | 深色 |
|
|
25
|
+
|---|---|
|
|
26
|
+
|  |  |
|
|
27
|
+
|
|
28
|
+
### 保护机制
|
|
29
|
+
|
|
30
|
+
改写时以下内容保持原样,模型无法篡改:
|
|
31
|
+
|
|
32
|
+
- 代码块(``` 和 ~~~)与行内代码
|
|
33
|
+
- URL 与盘符绝对路径(`C:\...`)
|
|
34
|
+
- 相对路径与文件名(`src/core/generation.ts`、`package.json`、`README.md`)
|
|
35
|
+
- 你显式锁定的片段
|
|
36
|
+
|
|
37
|
+
占位符被模型篡改、丢失或重复时,插件拒绝该结果并保留你的原稿。
|
|
38
|
+
|
|
39
|
+
### 失败不丢稿
|
|
40
|
+
|
|
41
|
+
优化、续写、预测在超时、取消、网络失败、模型空输出时都保留原稿,只给出提示。一次瞬时状态轮询失败不会中断正在进行的手动优化。
|
|
42
|
+
|
|
43
|
+
## 安装
|
|
44
|
+
|
|
45
|
+
需要 **Node.js >= 22.19** 和 **DSH `0.2.1-rc.2` 或 `0.2.1-rc.3`**。安装预构建 `.tgz` 不需要在本地编译 TypeScript。
|
|
46
|
+
|
|
47
|
+
一行命令直接从 GitHub Release 安装:
|
|
48
|
+
|
|
49
|
+
```powershell
|
|
50
|
+
dsh --version # 确认 0.2.1-rc.2 或 rc.3
|
|
51
|
+
dsh plugin --profile web add https://github.com/Somnus678/dsh-input-assistant/releases/download/v0.1.3/dsh-input-assistant-0.1.3.tgz
|
|
52
|
+
dsh --profile web --dump-config # 应看到 dsh-input-assistant 层
|
|
53
|
+
dsh --profile web
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
也可以先从 [Releases](https://github.com/Somnus678/dsh-input-assistant/releases) 手动下载 `dsh-input-assistant-0.1.3.tgz` 再本地安装:
|
|
57
|
+
|
|
58
|
+
```powershell
|
|
59
|
+
dsh plugin --profile web add ./dsh-input-assistant-0.1.3.tgz
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
官方桌面端使用自己的 `desktop` profile(默认 Windows 安装位置):
|
|
63
|
+
|
|
64
|
+
```powershell
|
|
65
|
+
$dsh = Join-Path $env:LOCALAPPDATA 'Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd'
|
|
66
|
+
& $dsh --version
|
|
67
|
+
& $dsh plugin --profile desktop add (Resolve-Path './dsh-input-assistant-0.1.3.tgz').Path
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
安装或升级后**完全退出并重新打开 DSH**,插件才会加载。
|
|
71
|
+
|
|
72
|
+
### 卸载
|
|
73
|
+
|
|
74
|
+
```powershell
|
|
75
|
+
dsh plugin --profile web remove dsh-input-assistant
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
同样需要重启对应实例。卸载**不会**清除插件保存的草稿与设置(存在宿主私有 storage 中)。
|
|
79
|
+
|
|
80
|
+
### 从源码构建
|
|
81
|
+
|
|
82
|
+
```powershell
|
|
83
|
+
git clone https://github.com/Somnus678/dsh-input-assistant.git
|
|
84
|
+
cd dsh-input-assistant
|
|
85
|
+
pnpm install
|
|
86
|
+
pnpm build
|
|
87
|
+
pnpm pack --pack-destination dist
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## 快速上手
|
|
91
|
+
|
|
92
|
+
1. 安装后重启 DSH,输入框右侧出现**「优化」按钮**。
|
|
93
|
+
2. 在输入框写入草稿,点「优化」或按快捷键,查看差异后决定**采纳**或**撤销**。
|
|
94
|
+
3. 左下角账号菜单 → **设置 → 输入助手**,可分别开关四个模块、调整强度与高级参数。
|
|
95
|
+
|
|
96
|
+
> **默认会调用模型。** `下一句预测` 和 `输入续写` 默认开启,会在你输入时自动发起请求。若只想手动使用优化功能或控制成本,请先在设置中关闭这两项。
|
|
97
|
+
|
|
98
|
+
## 设置项
|
|
99
|
+
|
|
100
|
+
| 设置 | 默认 | 范围 | 说明 |
|
|
101
|
+
|---|---|---|---|
|
|
102
|
+
| 提示词优化 | 开 | — | 是否显示优化入口 |
|
|
103
|
+
| 草稿暂存 | 开 | — | 清空输入前是否自动保存 |
|
|
104
|
+
| 下一句预测 | 开 | — | 回复后是否预测下一句 |
|
|
105
|
+
| 输入续写 | 开 | — | 输入时是否预测后续内容 |
|
|
106
|
+
| 优化强度 | 标准 | 轻/标准/深度 | 改写幅度 |
|
|
107
|
+
| 显示方式 | ghost | ghost/panel | 灰字或面板 |
|
|
108
|
+
| 续写停顿 `debounceMs` | 600 | 200–5000 | 停止输入多久后触发 |
|
|
109
|
+
| 最小间隔 `minIntervalMs` | 2000 | 500–30000 | 两次续写请求的最小间隔 |
|
|
110
|
+
| 固定辅助模型 | 跟随输入框 | — | 可指定 provider/model;留空则跟随输入框所选模型 |
|
|
111
|
+
|
|
112
|
+
### 各功能怎么用
|
|
113
|
+
|
|
114
|
+
**优化整稿或选区**:输入草稿后点「优化」,或用菜单/快捷键。结果以差异视图展示,逐处标出增删;点「采纳」写入输入框,点「撤销」或按一次 `Ctrl+Z` 恢复原文。
|
|
115
|
+
|
|
116
|
+
**下一句预测与输入续写**:预测结果以**灰字**显示在光标后。按 `Tab` 采纳,按 `Esc` 或继续输入忽略。采纳**不会**发送消息。
|
|
117
|
+
|
|
118
|
+
**暂存长草稿**:清空输入前,非空草稿会自动暂存到当前会话(最多 3 份)。从插件菜单可查看并显式恢复;切换会话、切换模型、断线重连后暂存仍在该会话下。
|
|
119
|
+
|
|
120
|
+
## 兼容性
|
|
121
|
+
|
|
122
|
+
| 项目 | 支持范围 |
|
|
123
|
+
|---|---|
|
|
124
|
+
| DSH | `0.2.1-rc.2` ~ `0.2.1-rc.3`(声明范围 `>=0.2.1-rc.2 <0.3.0-0`,两端均经全量测试验证) |
|
|
125
|
+
| Node.js | `>= 22.19` |
|
|
126
|
+
| 操作系统 | Windows x64(已验证);macOS/Linux 未验证 |
|
|
127
|
+
| 浏览器测试 | Microsoft Edge |
|
|
128
|
+
|
|
129
|
+
## 已知边界
|
|
130
|
+
|
|
131
|
+
**这个插件没有完成完整的效果评测。** 请据此判断是否适合你的场景:
|
|
132
|
+
|
|
133
|
+
- 60 条固定合成质量集尚未跑完真实模型评测,也没有独立人工语义标注,状态为 `not_evaluated`。
|
|
134
|
+
- 6 次真实模型小样本对照只能说明链路可用(2,807 tokens),**不能证明效果优于同类工具**。
|
|
135
|
+
- 中文 IME 候选组合、附件/引用组合、完整官方 Web 组合、其他插件组合、非 Windows x64 平台均未验证。
|
|
136
|
+
- 兼容声明范围 `0.2.1-rc.2` ~ `0.2.1-rc.3`;此范围外的版本未经测试,可能不兼容。
|
|
137
|
+
|
|
138
|
+
详见 [验收记录](docs/validation.md) 与 [低用量真实模型试验](docs/smoke-comparison.md)。
|
|
139
|
+
|
|
140
|
+
## 数据与隐私
|
|
141
|
+
|
|
142
|
+
- 不收集遥测,不上传使用数据。
|
|
143
|
+
- 草稿与设置存在宿主 DSH 的私有 storage。
|
|
144
|
+
- 模型调用走宿主已配置的提供商;插件不持有或记录 API key。
|
|
145
|
+
- 优化/预测/续写会把当前草稿与相关上下文发给模型提供商 —— 这是功能必需,请按你所用提供商的数据政策评估。
|
|
146
|
+
|
|
147
|
+
详见 [安全策略](SECURITY.md)。
|
|
148
|
+
|
|
149
|
+
## 开发
|
|
150
|
+
|
|
151
|
+
```powershell
|
|
152
|
+
pnpm install
|
|
153
|
+
pnpm typecheck # 类型检查
|
|
154
|
+
pnpm test # 121 条测试
|
|
155
|
+
pnpm build # 构建 lib/
|
|
156
|
+
pnpm test:package # 校验打包产物(需先 pack)
|
|
157
|
+
pnpm test:web # 真实 Edge 回归
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
贡献前请阅读 [贡献指南](CONTRIBUTING.md)。技术细节见 [0.1.2 修正记录](docs/CHANGELOG-0.1.2.md)。
|
|
161
|
+
|
|
162
|
+
### 持续集成
|
|
163
|
+
|
|
164
|
+
每次 push 和 PR 都会在 GitHub Actions 上自动运行 [`.github/workflows/ci.yml`](.github/workflows/ci.yml):
|
|
165
|
+
|
|
166
|
+
| Job | 环境 | 内容 |
|
|
167
|
+
|---|---|---|
|
|
168
|
+
| `test-windows` | `windows-latest` | **全量 121 条测试** + 真实 Edge 冒烟 + 构建可复现性校验 |
|
|
169
|
+
| `test-linux` | `ubuntu-latest` | 排除 Edge 专属渲染测试(116 条),验证核心/宿主/控制器无 Windows 假设 |
|
|
170
|
+
| `package` | `ubuntu-latest` | 打包内容审计:必需文件齐全,且不含研究资料、缓存或测试夹具 |
|
|
171
|
+
|
|
172
|
+
`test-windows` 是权威结果:`tests/browser-theme.test.ts` 和 `scripts/smoke-web.mjs` 使用
|
|
173
|
+
`chromium.launch({ channel: 'msedge' })` 驱动真实 Microsoft Edge 渲染已发布的 DSH 主题,
|
|
174
|
+
这两项在无 Edge 的 Linux 上无法运行,因此 Linux job 显式排除它们,覆盖由 Windows job 提供。
|
|
175
|
+
|
|
176
|
+
本地想复现 Linux job:
|
|
177
|
+
|
|
178
|
+
```powershell
|
|
179
|
+
pnpm vitest run --exclude 'tests/browser-theme.test.ts'
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## 许可证
|
|
183
|
+
|
|
184
|
+
[MIT](LICENSE)。第三方依赖与参考实现各自适用其原许可证,见 [公开参考与实现边界](docs/references.md)。
|
package/cordis.patch.yml
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# 0.1.2 修正记录
|
|
2
|
+
|
|
3
|
+
记录日期:2026 年 10 月 23 日(Asia/Shanghai)。
|
|
4
|
+
|
|
5
|
+
`0.1.2` 是 `0.1.1` 的缺陷修正版本,不新增用户可见功能。以下每条都先复现、再修复、再补回归用例。测试总数从 **105** 增至 **121**(12 个测试文件)。
|
|
6
|
+
|
|
7
|
+
## 修正清单
|
|
8
|
+
|
|
9
|
+
### 1. 相对路径与裸文件名不受保护(`src/core/protection.ts`)
|
|
10
|
+
|
|
11
|
+
**问题**:`0.1.1` 的路径保护正则只覆盖代码块、行内代码、URL、盘符绝对路径(`C:\…`、`D:/…`)和以 `./` `../` `/` 开头的路径。编码类草稿里最常见的裸相对路径完全不保护:
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
"修改 package.json 里的 scripts" => []
|
|
15
|
+
"看看 src/index.ts 的实现" => []
|
|
16
|
+
"不要改 src/a.ts" => []
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
更严重的是**部分保护**造成静默改写。`src/core/generation.ts` 只匹配到 `/core/generation.ts`,前面的 `src` 裸露在外:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
原稿 : 更新 src/core/generation.ts 的实现
|
|
23
|
+
masked: 更新 src⟪DSH_KEEP_0⟫ 的实现
|
|
24
|
+
模型把 src 改成 lib → 恢复成 lib/core/generation.ts ← 不报错,路径已错
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**修复**:新增四条规则——带扩展名的相对路径、无扩展名的深层相对路径、带已知扩展名的裸文件名、已知的无扩展名工程文件(`LICENSE`、`Makefile` 等)。扩展名用**闭集**而非形状猜测,避免把 `e.g.` 这类普通缩写误判成文件。
|
|
28
|
+
|
|
29
|
+
**验证**:`tests/core.test.ts` 新增 3 条用例,覆盖 6 种路径形态、`e.g.`/`i.e.` 不误保护、以及"目录部分不得裸露"的回归。core 用例 25 → 28。
|
|
30
|
+
|
|
31
|
+
### 2. 一次瞬时 status 轮询失败会静默杀死在途优化(`src/browser/controller.ts`)
|
|
32
|
+
|
|
33
|
+
**问题**:状态轮询每 900ms 一次。`refresh()` 的 `catch` 分支注释写着"失败的 status 读取不构成草稿/模型/回合变化的证据",但紧接着调用 `invalidate(false)`,而 `invalidate` 第一行就是 `cancelActive()`。实测:点"优化"→ 一次网络抖动 → 请求被 abort、按钮复位、**没有任何提示**,用户的操作无声消失。
|
|
34
|
+
|
|
35
|
+
**修复**:`invalidate` 增加 `cancelInFlight` 参数。瞬时 status 失败走 `invalidate(false, false)`:清掉自动建议缓存(灰字便宜且必须随连接失效而消失),但保留在途的手动优化。真正的状态变化路径仍完整取消。
|
|
36
|
+
|
|
37
|
+
**验证**:`tests/browser-controller.test.ts` 新增 1 条用例,断言失败轮询后 `busy` 仍为 `optimize`、请求 `signal.aborted === false`、随后正常完成并生成改动记录。controller 用例 35 → 36。
|
|
38
|
+
|
|
39
|
+
### 3. `debounceMs > 900` 时输入续写完全失效(`src/browser/controller.ts`)
|
|
40
|
+
|
|
41
|
+
**问题**:`driveSuggestions()` 第一行无条件 `clearTimer()`,末尾才重新 `setTimeout`。而它每 900ms 被状态轮询调用一次,于是**任何超过 900ms 的 debounce 定时器每 900ms 被清掉重建,永远等不到触发**。实测阈值是断崖式:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
debounce=899 → 1 次调用 debounce=901 → 0 次调用
|
|
45
|
+
debounce=900 → 1 次调用 debounce=2000/5000 → 0 次调用
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
设置页把"续写停顿"暴露为 **200–5000 ms**,也就是说用户按界面允许的范围调大停顿,续写功能会悄悄消失且没有任何提示。默认 600ms 在安全区,所以既有测试发现不了。
|
|
49
|
+
|
|
50
|
+
**修复**:记住已武装定时器对应的 cache key(`timerKey`)。`driveSuggestions()` 在各提前返回分支显式 `clearTimer()`;只有 key 变化时才重排定时器,key 未变则保留已武装的那个。
|
|
51
|
+
|
|
52
|
+
**验证**:新增 2 条用例——`debounceMs` 取 200/600/900/1000/2000/5000 时 20 次轮询后都恰好触发 1 次;以及草稿在定时器触发前变化时会正确重排并携带新草稿。controller 用例 36 → 43。
|
|
53
|
+
|
|
54
|
+
### 4. 存储中的未知配置键会锁死整个插件(`src/core/config.ts`、`src/host/storage.ts`)
|
|
55
|
+
|
|
56
|
+
**问题**:`resolveConfig` 对未知键直接抛 `CONFIG`,而设置是整份对象持久化的。版本漂移(新版本写入新键后用户降级,或记录被部分写入)会导致 `settings/get`、`status`、`generate`、`drafts/*` 全部失败,设置页也加载不出来,且**无法通过保存自愈**——`updateSettings` 把含坏键的旧对象再 merge 回去。
|
|
57
|
+
|
|
58
|
+
**修复**:拆成两个入口。`resolveConfig` 保持严格(插件自身 Cordis 配置与每次 `settings/set` 补丁,调用方写错必须报错);新增 `resolveStoredConfig` 用于**读取已存记录**——未知键忽略、单字段非法回退默认值、`provider`/`model` 半填对回退为跟随输入框。下一次成功保存会重写成干净记录。
|
|
59
|
+
|
|
60
|
+
**验证**:`tests/host-storage.test.ts` 新增 5 条用例:未知键不锁死、保存后坏键消失、逐字段回退、半填对丢弃、显式补丁仍严格。storage 用例 4 → 9。
|
|
61
|
+
|
|
62
|
+
### 5. 中文 diff 粒度过粗(`src/core/diff.ts`)
|
|
63
|
+
|
|
64
|
+
**问题**:分词正则把不含空格的整段中文当作一个 token,于是 `请解释缓存机制` → `请说明缓存机制` 被渲染成整短语删除 + 整短语插入,中文用户基本看不出改了什么。
|
|
65
|
+
|
|
66
|
+
**修复**:CJK 按码点切分,保留拉丁词/空白/标点的分组;同时先裁剪相同前后缀再做 DP,并保留超限时的降级路径(先句级,再整段替换),使最大长度草稿也不会卡住。
|
|
67
|
+
|
|
68
|
+
**验证**:现有 diff 用例(无损重建、emoji 代理对不拆分)继续通过;人工核对 `解释`→`说明`、`不要修改`→`保持现有` 已是词级粒度。
|
|
69
|
+
|
|
70
|
+
### 6. 无界集合与调度器语义(`src/browser/controller.ts`、`src/core/scheduler.ts`、`src/host/runtime.ts`)
|
|
71
|
+
|
|
72
|
+
- `exposed` 与 `nextTurns` 两个 Set 只增不减。加入 512 上限,与既有的 `completionCache` 64 上限保持一致。
|
|
73
|
+
- `settings/set` 原来调用 `scheduler.dispose()`,语义上是"销毁调度器"却当"取消在途"用。拆出 `cancelAll()` 表达真实意图并补注释说明为何设置变更要取消所有会话的在途请求。
|
|
74
|
+
|
|
75
|
+
## 未改变的边界
|
|
76
|
+
|
|
77
|
+
以下与 `0.1.1` 一致,没有因为本次修正而变化:
|
|
78
|
+
|
|
79
|
+
- 60 条固定合成质量集仍为 `not_evaluated`(0/60)。本次修正**没有**新增任何真实模型调用,也没有做人工语义标注。
|
|
80
|
+
- 6 次小样本对照结论不变:只能说明接线可用,不能证明同类领先。
|
|
81
|
+
- 未验证项仍是未验证:中文 IME 候选组合、附件/引用组合、完整官方 Web 组合、其他插件组合、非 Windows x64 平台。
|
|
82
|
+
- 本次修正未在官方桌面端重新做原生手测;相关证据仍是 `0.1.1` 时期记录,版本号与哈希需以新的 `verification.json` 为准。
|
|
83
|
+
|
|
84
|
+
## 复现命令
|
|
85
|
+
|
|
86
|
+
```powershell
|
|
87
|
+
# 类型检查与构建
|
|
88
|
+
node node_modules/typescript/bin/tsc --noEmit
|
|
89
|
+
node scripts/build.mjs
|
|
90
|
+
|
|
91
|
+
# 全部自动化测试(121 条)
|
|
92
|
+
node node_modules/vitest/vitest.mjs run
|
|
93
|
+
|
|
94
|
+
# 实际打包产物的 Loader 校验
|
|
95
|
+
node scripts/verify-package.mjs dist/dsh-input-assistant-0.1.2.tgz
|
|
96
|
+
|
|
97
|
+
# 真实 Edge 中的编辑器回归
|
|
98
|
+
node scripts/smoke-web.mjs
|
|
99
|
+
|
|
100
|
+
# 评测集结构校验(0 次模型调用)
|
|
101
|
+
node scripts/evaluate.mjs validate
|
|
102
|
+
```
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# 离线模型质量评测
|
|
2
|
+
|
|
3
|
+
本项目提供 60 条由开发助手编写的固定合成案例,三种操作各 20 条。它们没有取自用户真实聊天,也不会被插件当作长期学习数据。
|
|
4
|
+
|
|
5
|
+
这套固定案例尚未经独立人工语义标注,当前只有结构及工具回归校验。少量真实模型接线试验记录在 [低用量真实模型试验](smoke-comparison.md),不能代替全套标注和质量验收。
|
|
6
|
+
|
|
7
|
+
`reference` 是可接受答案示例,**不作精确匹配评分,也不代表真实模型已经生成该结果**。语义上同样合理的其他表达可以通过人工评审。
|
|
8
|
+
|
|
9
|
+
## 数据与门槛
|
|
10
|
+
|
|
11
|
+
| 操作 | 样例构成 | 首版门槛 |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| `next` | 12 条明确后续、8 条歧义或自然收尾 | 明确组至少 10 条可用,歧义组至少 7 条正确弃权 |
|
|
14
|
+
| `complete` | 12 条适合续写、8 条无需继续 | 明确组至少 10 条可用且只补后缀,无需组至少 7 条弃权 |
|
|
15
|
+
| `optimize` | 20 条约束、语言及原文保护案例 | 全部完成语义评审;无实质新增任务或授权、重大约束丢失,保护片段不变 |
|
|
16
|
+
|
|
17
|
+
覆盖中文、英文、日文、韩文、混合语言、emoji、否定条件、最新纠正、路径、URL、命令、代码和材料内的伪指令。集合适合作为首版回归门槛,不能据此宣传普遍超过 Claude 或 Codex。
|
|
18
|
+
|
|
19
|
+
## 1. 验证并导出真实插件提示词
|
|
20
|
+
|
|
21
|
+
先构建,使评测使用与运行时相同的 `prepareGeneration`:
|
|
22
|
+
|
|
23
|
+
```powershell
|
|
24
|
+
pnpm build
|
|
25
|
+
node scripts/evaluate.mjs validate
|
|
26
|
+
node scripts/evaluate.mjs export --out evaluation/requests.jsonl
|
|
27
|
+
node scripts/evaluate.mjs template --out evaluation/results.template.jsonl
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
`export` 输出操作、输入快照、实际 `system` 与 `input` 文本及输出预算。它只生成文件,不发网络请求。将这些材料交给你已配置的模型评测环境运行,并记录提供商、精确模型 ID、推理档、运行日期和延迟。不要把凭据写入结果文件。
|
|
31
|
+
|
|
32
|
+
基线与候选必须使用相同模型及相同上下文、预算。比较现有插件策略时,另行保存所用基线代码版本、提示词和生成设置,避免只比较不同模型的输出。
|
|
33
|
+
|
|
34
|
+
## 2. 录入实际结果
|
|
35
|
+
|
|
36
|
+
结果支持 JSON 数组或 JSONL,每个 ID 一条。模板默认 `recorded:false`,即未运行,不能计为正确弃权。只有真实调用完成才改为 `true`。
|
|
37
|
+
|
|
38
|
+
直接收集插件最终文本时:
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{"id":"next-01","recorded":true,"text":"运行测试。","latencyMs":920,"inputTokens":1200,"outputTokens":6}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
`text:null` 表示真实生成后的正常弃权。没有记录、`recorded:false` 和真实弃权是三种不同状态。
|
|
45
|
+
|
|
46
|
+
如果收集的是模型原始输出,使用 `raw`,不要同时提供 `text`:
|
|
47
|
+
|
|
48
|
+
```json
|
|
49
|
+
{"id":"optimize-04","recorded":true,"raw":"检查 ⟪DSH_KEEP_0⟫ 中的问题并说明原因。","latencyMs":1300}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
评分工具会重新构造同一合成案例的保护映射,并通过真实 `finishGeneration` 校验、还原。占位符应以导出的输入为准,不能根据本说明示例猜测。生成失败不是正常弃权;应保留失败原因并重跑该项,不能将未得到结果的调用填作成功的空输出。
|
|
53
|
+
|
|
54
|
+
## 3. 人工语义评审
|
|
55
|
+
|
|
56
|
+
每条预期输出文本的案例至少评审这些维度,值为 `true`、`false` 或未评审的 `null`:
|
|
57
|
+
|
|
58
|
+
| 字段 | 判断标准 |
|
|
59
|
+
|---|---|
|
|
60
|
+
| `intentAligned` | 符合当前草稿及最新用户意图,没有回答成助手口吻或偏题 |
|
|
61
|
+
| `noUnsupportedRequirements` | 没有凭空新增功能、事实、选择、发布或执行授权 |
|
|
62
|
+
| `naturalUserVoice` | 对预测与续写,像用户会自然输入的话,并符合语言要求 |
|
|
63
|
+
| `constraintsPreserved` | 对优化,保留范围、否定条件、数值及先后顺序 |
|
|
64
|
+
| `editCharacters` | 可选:用户将候选改成可发送文本需要修改的字符数量 |
|
|
65
|
+
| `comment` | 可选:说明为何失败或需要怎样修改 |
|
|
66
|
+
|
|
67
|
+
例如在结果中加入:
|
|
68
|
+
|
|
69
|
+
```json
|
|
70
|
+
{"id":"next-01","recorded":true,"text":"运行测试。","human":{"intentAligned":true,"noUnsupportedRequirements":true,"naturalUserVoice":true,"editCharacters":0,"comment":"承接已要求但未完成的测试"}}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
自动检查覆盖长度、整句前缀重复、必要原文片段及弃权行为。它无法证明语义保真。即使所有机械检查通过,缺少必要人工评价时也只会得到 `incomplete`,不会得到 `passed`。
|
|
74
|
+
|
|
75
|
+
## 4. 匿名对照
|
|
76
|
+
|
|
77
|
+
候选与基线结果使用相同 ID。以下命令把实际最终 `text` 输出随机化为稳定的 A/B 标签:
|
|
78
|
+
|
|
79
|
+
```powershell
|
|
80
|
+
node scripts/evaluate.mjs compare --candidate evaluation/candidate.jsonl --baseline evaluation/baseline.jsonl --out evaluation/blind.jsonl
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
它生成:
|
|
84
|
+
|
|
85
|
+
- `blind.jsonl`:含题目、A/B 输出及空白评审字段,交给评审者。
|
|
86
|
+
- `blind.key.json`:候选/基线标签映射,由组织评测者单独保存,不交给评审者。
|
|
87
|
+
|
|
88
|
+
评审者填写 A、B 内的语义字段,可另填 `preferred` 为 `A`、`B` 或 `equal`。对照导出要求已经规范化的最终 `text`;原始模型占位输出应先经插件处理,不能直接作为读者可用结果比较。
|
|
89
|
+
|
|
90
|
+
## 5. 生成报告
|
|
91
|
+
|
|
92
|
+
```powershell
|
|
93
|
+
node scripts/evaluate.mjs score --candidate evaluation/candidate.jsonl --baseline evaluation/baseline.jsonl --reviews evaluation/blind.jsonl --key evaluation/blind.key.json --out evaluation/report.json
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
没有基线或匿名评审时,可只提供候选文件。完全没有模型结果时也可生成状态记录:
|
|
97
|
+
|
|
98
|
+
```powershell
|
|
99
|
+
node scripts/evaluate.mjs score --out evaluation/status.json
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
输出 JSON 和同名 Markdown,分别报告记录完成度、人工评审完成度、可用文本、正确弃权、结构失败、无根据新增要求、修改量以及有记录的 P50/P95 延迟。未提供延迟和 token 用量时不会估算或编造。加 `--strict` 会在尚未通过完整验收时返回非零退出码。
|
|
103
|
+
|
|
104
|
+
评分状态含义:
|
|
105
|
+
|
|
106
|
+
- `not_evaluated`:没有真实结果。
|
|
107
|
+
- `incomplete`:结果或人工语义评价未齐。
|
|
108
|
+
- `failed`:完整组未达到首版门槛。
|
|
109
|
+
- `passed`:全部案例和必要人工评价齐全,并达到门槛。
|
|
110
|
+
|
|
111
|
+
不要通过几乎总是不显示建议来抬高采纳率;预测可用率必须与弃权率和曝光覆盖率共同解释。60 条固定合成样例适合回归,不代表统计上覆盖所有真实任务。
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# 公开实现对照与来源
|
|
2
|
+
|
|
3
|
+
记录日期:2026 年 10 月 22 日。这里比较的是所列公开文档和指定插件版本,不是对所有产品功能的穷尽盘点。
|
|
4
|
+
|
|
5
|
+
## 能力与本插件的定位
|
|
6
|
+
|
|
7
|
+
| 公开参考 | 本次核实的能力 | 本插件采用的方向与区别 |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| PI 的 `pi-prompt-enhancement` | 独立模型请求改写草稿,一键回填,强调保留意图、语言和标识符 | 保留一键操作,另加当前会话上下文、选区处理、原文保护和差异还原;不复制其源代码或提示词 |
|
|
10
|
+
| Claude Code Prompt suggestions | 回复后根据会话,用相同模型作后台请求,建议可采纳为草稿 | 参考下一句建议的交互;本插件通过 DSH 已配置的模型独立生成 |
|
|
11
|
+
| Codex Composer Predictions | 根据当前会话建议下一条消息,Tab 采纳为可编辑草稿 | 参考采纳后可编辑、由用户发送的流程;不依赖 Codex 内部预测服务 |
|
|
12
|
+
| `studyzy/dsh-suggest-prompt` | DSH 回合后生成一句用户口吻建议,宿主存储及输入框灰字 | 参考公开接口使用方式;本插件把下一句和输入中续写纳入一个调度器,并允许有依据的追问和纠偏 |
|
|
13
|
+
| `fishcg/dsh-input-prediction` | DSH 输入续写及回复后候选建议 | 参考两种模式的使用场景;本插件采纳只写草稿,并共用优化、保护和版本守卫 |
|
|
14
|
+
| 本插件 | 优化、下一句、续写、当前会话草稿暂存 | 以同一输入流程解决组织表达、检查改动和保存长草稿的问题;质量仍需独立评测 |
|
|
15
|
+
|
|
16
|
+
这些差异是可检查的功能或策略差异,不等于准确率排名。比如更长历史和允许追问能覆盖更多场景,也可能引入额外噪声;必须把可用率、弃权率、错误新增要求和延迟一起评估。
|
|
17
|
+
|
|
18
|
+
## 公开源码与许可
|
|
19
|
+
|
|
20
|
+
- **本项目**:独立实现的源代码按 MIT 发布,见根目录 `LICENSE`。
|
|
21
|
+
- **PI 参考插件**:已核对 [`f04349ae...` 的 LICENSE](https://github.com/vastsa/pi-prompt-enhancement/blob/f04349ae6902d0d6be880cc19b20e68942d78721/LICENSE),使用 LGPL-3.0。其代码、原始提示词和构建产物未拷入本发行包,也不作为运行依赖。我们参考的是用户操作流程,实际提示词和实现另行编写。
|
|
22
|
+
- **DSH SDK**:通过官方已发布 SDK 的扩展接口集成,目标为 `0.2.1-rc.2`;运行时共享的 SDK、Cordis、React 保持外部引用。依赖仍适用其各自许可证,不能把本项目的 MIT 解释为替依赖重新授权。
|
|
23
|
+
- **社区参考插件**:`studyzy/dsh-suggest-prompt` 和 `fishcg/dsh-input-prediction` 的许可证均已核对为 MIT。它们是调研参考,不是本包依赖;本包不包含其插件构建产物。
|
|
24
|
+
- **Claude Code**:公开仓库的 [LICENSE.md](https://github.com/anthropics/claude-code/blob/main/LICENSE.md) 使用商业条款。仓库可访问不等于完整实现可按开源许可证移植。本项目没有复制其内部实现。
|
|
25
|
+
- **Codex**:公开 CLI、app-server 等组件的许可与桌面端预测功能的公开范围应分开判断。本项目不连接或复制其内部预测服务。
|
|
26
|
+
|
|
27
|
+
Claude Code 文档公开了后台请求、会话缓存及采纳行为;Codex 文档公开了基于当前会话的预测与 Tab 采纳行为。**本项目未取得这两款产品的完整内部预测提示词或生成链路。** 自行编写的提示词不应标注为官方原版,也不能承诺复现或超越其预测效果。
|
|
28
|
+
|
|
29
|
+
## 精确参考
|
|
30
|
+
|
|
31
|
+
- [DSH bundle 打包与安装说明](https://github.com/deepseek-ai/deepseek-harness/blob/687f282e8625c6b8d11ff58211a90524be2e4317/docs/user/develop/basic/publish.md)
|
|
32
|
+
- [DSH `0.2.1-rc.2` conversation 发布包元数据](https://registry.npmjs.org/@deepseek-ai%2Fdsh-client-ui-conversation/0.2.1-rc.2)
|
|
33
|
+
- [DSH 输入动作契约](https://github.com/deepseek-ai/deepseek-harness/blob/687f282e8625c6b8d11ff58211a90524be2e4317/packages/client/ui-conversation/src/client/contract/input.ts)
|
|
34
|
+
- [DSH 原生键盘仲裁](https://github.com/deepseek-ai/deepseek-harness/blob/687f282e8625c6b8d11ff58211a90524be2e4317/packages/client/ui-conversation/src/client/input/editor/keymap.ts)
|
|
35
|
+
- [PI 提示词增强参考实现](https://github.com/vastsa/pi-prompt-enhancement/blob/f04349ae6902d0d6be880cc19b20e68942d78721/main.js)
|
|
36
|
+
- [Claude Code Prompt suggestions](https://code.claude.com/docs/en/interactive-mode#prompt-suggestions)
|
|
37
|
+
- [Codex Composer Predictions](https://learn.chatgpt.com/docs/features/composer-predictions)
|
|
38
|
+
- [studyzy 建议生成参考实现](https://github.com/studyzy/dsh-suggest-prompt/blob/b02261d6a51bad0cd8c832b13d9def9e1e7b149e/src/generate.ts)及其 [MIT 许可](https://github.com/studyzy/dsh-suggest-prompt/blob/b02261d6a51bad0cd8c832b13d9def9e1e7b149e/LICENSE)
|
|
39
|
+
- [fishcg 输入预测参考实现](https://github.com/fishcg/dsh-input-prediction)及其 [MIT 许可](https://github.com/fishcg/dsh-input-prediction/blob/main/LICENSE)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# 低用量真实模型试验
|
|
2
|
+
|
|
3
|
+
日期:2026 年 10 月 22 日。此试验用于检查真实模型接线和观察少量输出,不是完整质量验收。
|
|
4
|
+
|
|
5
|
+
## 方法和用量
|
|
6
|
+
|
|
7
|
+
在当前官方 DSH Windows `0.2.1-rc.2` 宿主中,通过已有 `ctx.llm` 连接串行执行 6 次辅助请求。路线为 `deepseek-account / deepseek-flash`,目录显示 DeepSeek-V4.1-Flash;界面模型标记为 1017。六次均显式选择模型声明的最低推理档 `off`、temperature 0、输出上限 256 tokens,不自动重试,不创建 Agent,不写主会话事件。
|
|
8
|
+
|
|
9
|
+
三个操作各选一个合成案例,并与一个公开实现的提示词比较。候选使用实际已安装插件的提示词构造和输出校验。基线原提示词仅保存在不随发行分发的研究目录,通过同一模型请求;没有安装或执行基线插件,因此没有比较其完整 UI、调度或后处理。
|
|
10
|
+
|
|
11
|
+
此次模型试验发生在新增设置页及三级优化强度之前;候选核心 SHA-256 为 `02667fa4afc0342806e1aca3ecb33607276a430c8c523f26695c597ce08c3dd0`。最终版本的新强度策略只做了结构与保护回归,未逐档追加真实模型测量;本表不能作为三级强度效果的验收结果。
|
|
12
|
+
|
|
13
|
+
提供商记录的六次用量合计:输入 **2,706 tokens**(其中缓存读取 256)、输出 **101 tokens**,总计 **2,807 tokens**。另有一次通过实际桌面按钮发起的短草稿优化,已成功回填,但未单独采集其 token 用量;因此不能把 2,807 表述为本次所有操作的精确总用量。其余自动化、宿主和 UI 夹具均不调用付费模型。
|
|
14
|
+
|
|
15
|
+
## 观察
|
|
16
|
+
|
|
17
|
+
| 操作 | 合成场景 | 候选观察 | 基线观察 | 单次耗时,候选 / 基线 |
|
|
18
|
+
|---|---|---|---|---|
|
|
19
|
+
| 优化 | 简短、已经清晰的解释要求,禁止改文件或加功能,保护一个路径 | 保持原稿;路径占位映射完整恢复 | PI 调整措辞,保留约束和路径 | 626 / 1,075 ms |
|
|
20
|
+
| 下一句 | 用户要求解释两个概念,助手只解释了一个 | 建议继续询问尚未解释的概念 | studyzy 同样建议继续解释该概念 | 772 / 786 ms |
|
|
21
|
+
| 续写 | 已有前缀请求解释缓存失效 | 返回可直接追加的短后缀 | fishcg 返回可直接追加的较短后缀 | 578 / 862 ms |
|
|
22
|
+
|
|
23
|
+
基线版本及研究适配:
|
|
24
|
+
|
|
25
|
+
- [PI `f04349ae…`](https://github.com/vastsa/pi-prompt-enhancement/blob/f04349ae6902d0d6be880cc19b20e68942d78721/main.js):沿用其不带会话历史的优化流程;研究提示词没有纳入 MIT 发行包。
|
|
26
|
+
- [studyzy `b02261d6…`](https://github.com/studyzy/dsh-suggest-prompt/blob/b02261d6a51bad0cd8c832b13d9def9e1e7b149e/src/generate.ts):使用其默认系统提示词和本案例最近一轮交流。
|
|
27
|
+
- [fishcg `8145b9cf…`](https://github.com/fishcg/dsh-input-prediction/blob/8145b9cf33e07207f186029341e0b6b25eb1012e/lib/index.js):静态提取时风格区标题缺少括号内的语气提示,其余系统与续写指令保留。该处适配存在偏差,不能作为严格等价竞品测量;保留结果并修正构造器,没有为此额外重跑。
|
|
28
|
+
|
|
29
|
+
原始安全报告保留在开发工作区的临时证据目录(`.test-runtime/benchmark/`,已被 `.gitignore` 排除,不随仓库或安装包分发),其中含提示词版本、输出、结束原因、用量和耗时。研究材料不随安装包分发。
|
|
30
|
+
|
|
31
|
+
## 能说明什么
|
|
32
|
+
|
|
33
|
+
这三个案例中的候选输出符合基本操作要求,实际模型调用链能够工作。优化案例原稿已经清晰,保持原文也符合本插件策略;不能把“改写更多”直接算作优化更好。
|
|
34
|
+
|
|
35
|
+
**当前不能证明模型效果处于同类领先地位。** 每种操作只有一个案例,未覆盖歧义弃权、纠偏、长历史和多语言;下一句案例还与提示词示例相近,存在明显有利偏差。单次延迟也受缓存、网络和顺序影响。没有进行匿名多人语义评分,没有调用 Claude/Codex 的内部预测链路,也没有完成 60 条固定评测。
|
|
36
|
+
|
|
37
|
+
工程上可以核实的优势是功能整合、版本校验、保护片段、原生撤销和暂存恢复;这些提高可控性,不能代替意图符合率的证据。完整质量状态继续保持 `not_evaluated`,详见 [评测流程](evaluation.md) 和 [验收记录](validation.md)。
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# 验收记录
|
|
2
|
+
|
|
3
|
+
此文件记录实际执行证据,不把发布接口核对、模拟模型测试或参考答案当作真实模型验收。
|
|
4
|
+
|
|
5
|
+
记录日期:2026 年 10 月 22 日(Asia/Shanghai)。下表记录开发机上的实际执行证据;其中的 `.test-runtime/` 是本仓库的临时证据目录(已被 `.gitignore` 排除),公开仓库不包含这些文件,列出的路径用于说明证据来源与生成方式,读者可在本地运行对应命令复现。
|
|
6
|
+
|
|
7
|
+
`0.1.2` 的修正与新增证据见文末「0.1.2 修正复验」一节;`0.1.1` 时期的历史记录按原样保留,其中的测试计数(105)和版本号不再代表当前产物。
|
|
8
|
+
|
|
9
|
+
## 当前状态
|
|
10
|
+
|
|
11
|
+
| 检查 | 状态 | 证据或待办 |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| DSH 目标版本发布契约 | 已核对 | `0.2.1-rc.2` 官方 conversation、LLM 等发布包 |
|
|
14
|
+
| 60 条固定合成评测集 | 结构已校验,尚未经独立人工标注 | 由开发助手编写;optimize/next/complete 各 20 条,next、complete 各 8 条弃权案例 |
|
|
15
|
+
| 离线评分空结果处理 | 已执行 | `evaluation/status.json`:0/60,`not_evaluated`,0 次模型调用 |
|
|
16
|
+
| 评测脚本黑盒测试 | 8/8 通过 | `node node_modules/vitest/vitest.mjs run tests/evaluation.test.ts` |
|
|
17
|
+
| 实际提示词导出与后处理合同 | 已执行 | 60 条调用真实 `lib/core.js` 导出;保护与弃权往返、raw 评分导入通过,0 次模型调用 |
|
|
18
|
+
| 自动化测试 | 105/105 通过(`0.1.1` 时期);TypeScript 通过 | 12 个测试文件;含真实 Edge 主题/灰字、设置竞态、取消、存储、评测工具及实际安装包 Loader;命令输出 `pnpm test` 的输出 |
|
|
19
|
+
| 实际 `.tgz` 的官方 Loader 加载 | 已通过 | `scripts/verify-package.mjs` 验证实际打包产物;启用、禁用、再启用、卸载及保留显式暂存草稿均已覆盖 |
|
|
20
|
+
| 内置 CLI 隔离安装与移除 | 已通过 | `dsh plugin --profile <name> add <tgz>` 的隔离安装记录:隔离 `DSH_HOME` 中安装、配置层解析、remove 后依赖/层/链接清理;0 次模型请求,未改桌面 profile |
|
|
21
|
+
| Edge 中真实编辑器输入回归 | 已通过 | `pnpm test:web` 的输出:Microsoft Edge headless、真实 Lexical 与生产 React 控制器;0 次付费模型调用 |
|
|
22
|
+
| 完整官方 Web 应用组合回归 | 未单独标记通过 | 浏览器编辑器夹具通过不等于所有官方 Web 组合与其他插件组合已验证 |
|
|
23
|
+
| 官方桌面端安装与升级 | 已通过 | 最终版本 `0.1.1`,内置 CLI 安装;宿主/浏览器文件哈希与构建一致。首次热加载可用;本次升级完全退出并重启 DSH 后才载入新宿主实例 |
|
|
24
|
+
| 桌面真实宿主 Gateway 接口 | 已通过 | 最终 `node tests/support/run-desktop-probe.mjs` 生成的报告:加载 `0.1.1`、认证 Gateway 状态/草稿 CRUD/清理;0 次生成请求 |
|
|
25
|
+
| 官方桌面端原生输入回归 | 已列场景通过,未宣称全覆盖 | `node tests/support/run-desktop-probe.mjs` 的人工观察记录:中文/emoji、优化、diff、还原、暂存、追加、Tab 采纳及相关一次撤销通过;IME 与附件/引用等组合仍未全部手测 |
|
|
26
|
+
| DSH 设置专属页与模块开关 | 原生访问和保存通过 | 账号菜单 → 设置 → 输入助手;四开关、三档强度及高级设置可见,实际保存优化开关/深度强度后恢复标准配置;高级参数边界与失败由自动化覆盖 |
|
|
27
|
+
| 深色主题、裁剪与设置竞态修复 | 已通过 | 原生菜单颜色与顶部显示复验;真实 Edge 测试覆盖灰字/候选定位,受控回归覆盖失败不重试、旧状态不覆盖设置、关闭期间暂存不清空 |
|
|
28
|
+
| 原生灰字与 Tab | 已通过,0 付费请求 | 临时本地 adapter 精确返回固定后缀;正式插件与官方编辑器显示灰字、Tab 采纳且不发送、Ctrl+Z 一次撤销。`node tests/support/run-desktop-completion-fixture.mjs` 生成的完成标记 确认路由与设置已清理 |
|
|
29
|
+
| 原生测试暂存精确清理 | 已通过 | `node tests/support/run-desktop-model-probe.mjs` 的清理记录:删除 1 条精确匹配测试稿,剩余 0 条,未碰其他暂存 |
|
|
30
|
+
| 真实模型小样本对照 | 6 次已完成,非完整质量验收 | 输入 2,706 + 输出 101 = 2,807 tokens;每种操作仅 1 个案例、各候选/基线一次。另一次桌面优化用量未知;见 `docs/smoke-comparison.md` |
|
|
31
|
+
| 60 条完整真实模型质量评测 | 未执行 | `evaluation/status.json` 仍为 0/60、`not_evaluated`;不能报告整套准确率或优于竞品 |
|
|
32
|
+
|
|
33
|
+
发行包的自动预测与续写默认均开启;本次在当前机器安装时已将两个开关关闭,以避免测试期间顺带发生模型调用。设置可以由用户在插件菜单中显式开启。
|
|
34
|
+
|
|
35
|
+
观察记录中的 `themeFixReverified` 和 `cleanupCompleted` 均已为 true。临时 adapter、探针、测试暂存与自有 quiet 配置块已清理;输入框恢复原先空稿,自动两开关的持久设置保持关闭,人工优化与暂存开启、强度为标准。没有开启或更改 DSH 的开发者工具偏好。
|
|
36
|
+
|
|
37
|
+
本机包管理器曾复用同版本同路径的旧 `.tgz`,`--force` 也未更新实际文件。最终使用新的 `0.1.1` 文件名安装,并比对 `lib/index.js`、`lib/client.js` 哈希。升级后仍需完全退出并重新打开 DSH,不能把文件已更新等同于旧宿主实例已切换。
|
|
38
|
+
|
|
39
|
+
实现者在完成实际执行后更新本表并注明命令、日期和结果;失败与未执行应保留。
|
|
40
|
+
|
|
41
|
+
## 已执行的浏览器与桌面证据
|
|
42
|
+
|
|
43
|
+
Edge 夹具使用生产输入助手界面和控制器、真实 Lexical 编辑器,确认:优化回填后原生一次撤销恢复原文;改动查看和显式还原正常;暂存先保存再清空、仅经用户操作恢复;测量灰字后 Tab 插入正确。它使用测试模型输出,没有付费模型调用,记录中 `realDshDesktop:false`。
|
|
44
|
+
|
|
45
|
+
桌面探针运行在真正的 DeepSeek Harness 可执行进程中,核对加载服务确属已安装的 `dsh-input-assistant@0.1.0`。通过认证 Gateway 调用 `settings/get`、`status`、`drafts/list`、`drafts/save`、`drafts/delete` 和 `drafts/clear`,完成草稿持久化往返、单条删除、按会话隔离及清空。报告 `generatedRequests:0`,没有写入会话事件;探针结束后清除了测试草稿并拆除探针连接。该证据验证了真实宿主接线,尚不能替代生产编辑器的完整原生交互验收。
|
|
46
|
+
|
|
47
|
+
原生桌面操作使用可见的官方生产界面,没有向编辑器注入脚本:输入一条含中文和 emoji 的合成草稿,暂存后清空,一次 Ctrl+Z 精确恢复;显式追加暂存文字后,一次 Ctrl+Z 撤回追加;通过真实按钮调用辅助模型并回填,打开 diff,再还原原文。一次 Ctrl+Z 撤销还原,下一次 Ctrl+Z 撤销优化。验证完成后恢复起初的空草稿,并通过精确内容匹配清除测试暂存,保留用户其他数据。这些覆盖了已列出的操作;中文字符输入不等于已验证中文 IME 候选组合。
|
|
48
|
+
|
|
49
|
+
小样本使用 `deepseek-account / deepseek-flash`,6 次均记录为最低推理档 `off`、temperature 0、256 输出 token 上限。公开基线只是提示词研究适配,没有运行其完整插件。fishcg 的提取适配有一处语气提示偏差,报告保留了该限制;样例接近部分参考提示词示例,另有明显样本偏差。不能把这些结果解释为同类领先,完整 60 条结果与人工语义评分继续保持 `not_evaluated`。[完整小样本说明](smoke-comparison.md)
|
|
50
|
+
|
|
51
|
+
## 工程验收清单
|
|
52
|
+
|
|
53
|
+
- [x] 对实际分发 `.tgz` 使用官方 Loader 检查配置层及入口;同包安装到官方桌面 profile 并热加载。
|
|
54
|
+
- [x] Loader 生命周期及 CLI 隔离安装、配置解析和移除通过;桌面热加载和宿主接口另有实际记录。
|
|
55
|
+
- [ ] 整稿、选区、Tab 采纳、还原、暂存清空、追加及替换均只产生一次可撤销编辑。
|
|
56
|
+
- [ ] 中英文、emoji、多行文本的选区与范围准确。
|
|
57
|
+
- [ ] 输入、发送、新回合、切模型、切会话、断线、卸载后的迟到结果不会改写新稿。
|
|
58
|
+
- [ ] 中文输入法、`/` 与 `@` 原生菜单、Tab 焦点移动和已消费键事件互不抢占。
|
|
59
|
+
- [ ] 缩放、滚动、换行、输入框重挂后灰字定位正确;无法定位时隐藏。
|
|
60
|
+
- [ ] 普通附件原样保留;引用标签不被静默移除;不支持的范围有解释。
|
|
61
|
+
- [ ] 草稿保存失败不清空,三条上限、删除、重启恢复及会话隔离有效。
|
|
62
|
+
- [ ] 缺模型、超时、空输出、损坏保护映射及取消均保留原稿。
|
|
63
|
+
- [ ] 官方桌面端使用同一 `.tgz` 单独验证,不能用 Web 通过替代。
|
|
64
|
+
|
|
65
|
+
## 质量验收清单
|
|
66
|
+
|
|
67
|
+
- [ ] 保留准确的模型、提供商、推理档、预算和候选/基线版本。
|
|
68
|
+
- [ ] 60 条案例均有实际生成结果,失败项明确记录或重跑。
|
|
69
|
+
- [ ] 44 条预期文字结果均完成人工语义评审。
|
|
70
|
+
- [ ] 对照报告意图符合、无根据新增要求、弃权与延迟,而非只报告采纳率。
|
|
71
|
+
- [ ] 原文保护完整;重大约束丢失和新增实质任务或授权为零。
|
|
72
|
+
|
|
73
|
+
完整流程见 [质量评测说明](evaluation.md)。
|
|
74
|
+
|
|
75
|
+
## 0.1.2 修正复验
|
|
76
|
+
|
|
77
|
+
记录日期:2026 年 10 月 23 日(Asia/Shanghai)。逐条复现与修复说明见 [0.1.2 修正记录](CHANGELOG-0.1.2.md)。
|
|
78
|
+
|
|
79
|
+
| 检查 | 状态 | 证据 |
|
|
80
|
+
|---|---|---|
|
|
81
|
+
| TypeScript | 通过 | `node node_modules/typescript/bin/tsc --noEmit`,无输出 |
|
|
82
|
+
| 自动化测试 | **121/121 通过** | 12 个测试文件;`node node_modules/vitest/vitest.mjs run` |
|
|
83
|
+
| 实际 `.tgz` 的官方 Loader 加载 | 通过 | `node scripts/verify-package.mjs dist/dsh-input-assistant-0.1.2.tgz` |
|
|
84
|
+
| 真实 Edge 编辑器回归 | 通过 | `node scripts/smoke-web.mjs`:4 项断言,0 次付费模型调用 |
|
|
85
|
+
| 评测集结构 | 通过 | `node scripts/evaluate.mjs validate`:60 例,16 条弃权 |
|
|
86
|
+
| 构建可复现 | 通过 | 重新 `scripts/build.mjs` 后 `lib/` 与打包产物逐字节一致 |
|
|
87
|
+
| 归档校验 | 通过 | `verify-archive.mjs`:32,5xx 个普通文件全部通过大小与 SHA256 |
|
|
88
|
+
| 恢复脚本幂等 | 通过 | 第二次运行 `restore-windows.mjs` 报告 `restoredDirectories: 0`、`unchangedLinks: 2755`、`completed: true` |
|
|
89
|
+
| 恢复后可构建可测试 | 通过 | 从外层 ZIP 干净解压 → 随包 Node → `restore-windows` → `tsc` → 121 条测试全部通过 |
|
|
90
|
+
|
|
91
|
+
本次修正**没有**新增真实模型调用。以下状态与 `0.1.1` 一致,不因本次修正而改变:
|
|
92
|
+
|
|
93
|
+
- 60 条固定合成质量集仍为 `not_evaluated`(0/60),未做人工语义标注。
|
|
94
|
+
- 6 次小样本对照的结论不变,仍不能据此排名或宣称领先。
|
|
95
|
+
- 中文 IME 候选组合、附件/引用组合、完整官方 Web 组合、其他插件组合、非 Windows x64 平台仍未验证。
|
|
96
|
+
- 本次未在官方桌面端重新做原生手测;桌面端证据仍来自 `0.1.1` 时期,不能写成 `0.1.2` 已在新设备验收。
|
|
97
|
+
|
|
98
|
+
### 关于恢复脚本的更正
|
|
99
|
+
|
|
100
|
+
开发过程中曾把"恢复脚本在 `originallyMissing` 链接处失败"记为 `0.1.1` 的阻断性缺陷。复核确认该现象由**开发会话沙箱对工作区盘符的文件系统重定向**引起(junction 被写成 `\??\Global\…`,同一进程无法跟随),不属于归档或脚本缺陷:在普通用户路径(C 盘临时目录、随包 Node 24.19.0)上,`0.1.1` 原始归档的完整流程可正常完成,105 条测试全部通过。`0.1.2` 对恢复脚本的改动因此是**健壮性改进**(幂等、`--repair`、缺目标跳过、链接识别、创建兜底),不是对既有缺陷的修复。
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
|
|
2
|
+
import type { BrowserRuntime } from './runtime';
|
|
3
|
+
type RuntimeProps = {
|
|
4
|
+
runtime: BrowserRuntime;
|
|
5
|
+
};
|
|
6
|
+
type RightProps = PropsRuntime<'conversation.input.right'> & RuntimeProps;
|
|
7
|
+
type OverlayProps = PropsRuntime<'conversation.input.overlay'> & RuntimeProps;
|
|
8
|
+
/** The right slot owns input observation; the overlay only paints the same controller's state. */
|
|
9
|
+
export declare function AssistantRight({ runtime, sessionId, useInput, useSession, inputActions }: RightProps): import("react").JSX.Element;
|
|
10
|
+
export declare function AssistantOverlay({ runtime, sessionId }: OverlayProps): import("react").JSX.Element;
|
|
11
|
+
export {};
|