dsh-sidecard-ask 1.5.1 → 1.7.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/CHANGELOG.md +65 -0
- package/README.md +34 -11
- package/client.js +791 -26
- package/index.js +183 -4
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,70 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.7.0
|
|
4
|
+
|
|
5
|
+
**主题:P0 交互提效——一键快捷动作、自定义动作模板、改问重试、代码块复制。**
|
|
6
|
+
|
|
7
|
+
- **一键快捷动作条(划词主路径 4 步 → 1 步)**:选中文字后,触发按钮旁直接出现
|
|
8
|
+
「解释 / 翻译 / 总结 / 润色 / 纠错」五个动作芯片,点击即跳过提问框、以预置问题
|
|
9
|
+
直接在侧边卡片发起作答;提问框顶部也有同一排芯片(`Alt+Q` 与"仅快捷键"用户同样可达)。
|
|
10
|
+
芯片 `title` 悬停展示完整问题指令与快捷键。
|
|
11
|
+
- **自定义动作模板**:新增配置项 `quickActions`(三层合并、随用户层持久化)。
|
|
12
|
+
设置页「快捷动作」区可启用/停用内置动作、为每个动作配独立快捷键、新增/删除自定义动作
|
|
13
|
+
(名称 + 问题指令 + 快捷键),问题指令支持 `{selection}` 占位符(内嵌选中正文;
|
|
14
|
+
不写占位符时原文按既有方式随问题附上)。内置 5 个动作的文案在客户端按界面语言解析,
|
|
15
|
+
配置与线协议保持语言中立。
|
|
16
|
+
- 宿主端新增**有界结构校验** `sanitizeQuickActions`:≤12 条、id 唯一且 ≤40 字符、
|
|
17
|
+
自定义动作名称 1–20 字 / 问题 1–500 字、快捷键 ≤40 字符;任何一条非法即**整表拒绝**
|
|
18
|
+
(`/config` 返回 `invalid-config`),不做半表保存。客户端保存前同样预检,
|
|
19
|
+
并检查动作快捷键之间、动作与主快捷键之间的冲突(大小写不敏感)。
|
|
20
|
+
- 每个动作的快捷键在页面 keydown 捕获阶段分发:主快捷键优先;在插件自己的输入框/编辑器中
|
|
21
|
+
不拦截任何快捷键;无选区时回退到最近一次触发候选(与主快捷键同语义)。
|
|
22
|
+
- **编辑问题后重新提问(改问重试)**:终态侧边卡片(已完成 / 失败 / 已停止)新增「改问」按钮,
|
|
23
|
+
就地编辑原问题后**重新生成当前这一轮**(不把旧问答压入 history,区别于"继续追问"的追加一轮);
|
|
24
|
+
原「重试」保留(原样重发,仅失败/停止态显示);空问题不触发。
|
|
25
|
+
- **代码块单独复制**:答案中的围栏代码块右上角新增复制按钮,复用既有剪贴板 API →
|
|
26
|
+
选区降级链与 toast 提示;`pre` 改为 `pre-wrap` 容器承载,代码文本与样式不变。
|
|
27
|
+
- 浮层/弹层样式新增 `.dsa-quickbar` / `.dsa-chip` / `.dsa-pre-wrap` / `.dsa-code-copy` /
|
|
28
|
+
`.dsa-qa-*`,并同步加入 Electron 窗口拖拽守卫(`-webkit-app-region:no-drag`)。
|
|
29
|
+
|
|
30
|
+
本机实测:verify 53 / contract 589 / float-placement 38 / smoke 181 = **861 项全部通过**
|
|
31
|
+
(较 1.6.0 的 577 项新增 284 项;含动作解析/占位符截断/快捷键冲突/宿主整表校验/
|
|
32
|
+
芯片与触发条渲染/quickAsk 与 retryEdit 端到端/代码块复制按钮/中英词典整表奇偶等用例)。
|
|
33
|
+
|
|
34
|
+
> 未验证(如实记录):浏览器与桌面 Electron 内的视觉观感与真实点按——本工作区无 GUI 自动化
|
|
35
|
+
> 接入运行实例,动作条换行/定位、芯片点击、代码块复制按钮、设置页编辑器需在真实页面按
|
|
36
|
+
> README 第九节路径人工确认;单测覆盖组件树与端到端数据流,替代不了观感验证。
|
|
37
|
+
|
|
38
|
+
## 1.6.0
|
|
39
|
+
|
|
40
|
+
**主题:最新版 DSH(0.2.1-alpha.2)适配 + 新旧包名共载时的单例护栏。**
|
|
41
|
+
|
|
42
|
+
十版本真机矩阵(隔离 DSH_HOME、真实安装启动、HTTP/探针双证据)发现并修复:
|
|
43
|
+
|
|
44
|
+
- **0.2.1-alpha.2 侧边作答引擎失效(真问题)**:该版本把 `subagents.start(provider, request)`
|
|
45
|
+
重构为受管激活 API `subagents.startActivation({provider, label, request, signal, delivery})`
|
|
46
|
+
(返回值由 `{id, localAgent, result, dispose}` 变为 `{childId, result, dispose}`)。
|
|
47
|
+
旧代码的能力门只认 `start()`,导致 provider 明明注册成功(spawn/fork)却自检显示
|
|
48
|
+
「侧边作答引擎:不可用」,侧答走降级。现按运行时方法面自动选择两代 API:新 API 用
|
|
49
|
+
`delivery: 'caller'` 保持"答案不进主对话"的旧语义,流式帧改由子会话 id 归因(新运行时不再
|
|
50
|
+
提供 live Agent 句柄)。0.1.5-rc.3~0.2.1-alpha.1 的调用路径保持不变。
|
|
51
|
+
- **新旧包名同时启用时双重触发(真问题)**:`dsh-selection-followup`(≤1.0.1 旧名)与
|
|
52
|
+
`dsh-sidecard-ask` 被同时装入一个 profile 时,选区旁叠出两个悬浮按钮,一次 Alt+Q 弹两个
|
|
53
|
+
提问框。现新增**页面内家族注册表**(`window.__dshSidecardFamily`):协作的副本按版本号选举
|
|
54
|
+
唯一领导者(同版本先加载者胜),落选副本保留设置页(显示停用说明横幅)但不挂载任何交互面、
|
|
55
|
+
不响应快捷键;无法协作的 1.0.x 旧版通过结构特征识别(无 owner 标记的 `dsa-layer`),
|
|
56
|
+
领导者注入一条样式规则隐藏其整个交互层,并提示卸载旧包。
|
|
57
|
+
- **data-slot 锚点自检结果不稳定(真问题)**:旧逻辑用"当前选区是否落在锚点链内"反推
|
|
58
|
+
"本版本是否支持锚点",选区落在直接挂 body 的节点(引导弹窗、第三方裸 DOM 面板)时会把
|
|
59
|
+
全局判定翻成"缺失",导致同一次自检两次结果不一致。改为构建级探测(全文档是否存在
|
|
60
|
+
`[data-slot]`),单个无锚点选区不再影响全局判定。
|
|
61
|
+
|
|
62
|
+
客户端自检上报新增 `family` 字段(leader/legacy/peers),宿主侧白名单做同样的长度裁剪。
|
|
63
|
+
|
|
64
|
+
本机实测:verify 53 / contract 323 / float-placement 38 / smoke 163 = **577 项全部通过**;
|
|
65
|
+
另在 0.2.0-rc.2 与 0.2.1-alpha.2 真机(headless)复核:两版引擎均可用、共载单实例、
|
|
66
|
+
锚点判定稳定、better-sidebar 0.25.0 承载面识别正常。
|
|
67
|
+
|
|
3
68
|
## 1.5.1
|
|
4
69
|
|
|
5
70
|
**主题:1.5.0 的发布收尾——把发布闸门补全,并把校验记录进版本号。**
|
package/README.md
CHANGED
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
|
|
43
43
|
| 路径 | 操作 | 期望结果 |
|
|
44
44
|
|---|---|---|
|
|
45
|
-
| **A. 就地追问(侧边卡片)** | 在聊天区选中一句话 →
|
|
45
|
+
| **A. 就地追问(侧边卡片)** | 在聊天区选中一句话 → 点浮出的按钮(或点旁边的「解释/翻译/总结/润色/纠错」芯片一键发起)→ 输入问题 → Enter | 右下角浮出卡片,答案逐字流出;卡片底部有「复制 / 继续追问 / 改问 / 关闭」,代码块右上角可单独复制 |
|
|
46
46
|
| **B. 主对话追问** | 选中 → 提问框里把「作答位置」切到**主对话** → Enter | 追问以引用块形式出现在主对话,答案由当前会话正常流式输出 |
|
|
47
47
|
| **C. 快捷键 + 降级** | 选中 → 按 `Alt+Q`(默认) | 直接弹出提问框;若侧边作答引擎不可用,卡片给出错误提示与「改到主对话」按钮 |
|
|
48
48
|
|
|
@@ -159,6 +159,7 @@ plugin_manager(action="install_bundle", target="D:\\Users\\34332\\AI\\dsh-sideca
|
|
|
159
159
|
| `sideTools` | `readonly` \| `inherit` | `readonly` | 侧边作答者的工具权限:只读白名单 / 继承当前会话 | 下一次提问 |
|
|
160
160
|
| `sideTimeoutMs` | 5000–3600000 | `180000` | 单次侧边作答超时 | 下一次提问 |
|
|
161
161
|
| `sideProvider` | 字符串 \| `auto` | `auto` | 指定子代理 provider(`auto` 优先 `spawn`) | 下一次提问 |
|
|
162
|
+
| `quickActions` | 动作数组(≤12 条) | 5 个内置动作 | **一键快捷动作**:选中后按钮旁的动作芯片。条目形如 `{id, enabled, shortcut}`;内置 id 为 `builtin:explain/translate/summarize/polish/fix`,自定义动作(非 `builtin:` 前缀)还需 `label`(≤20 字)与 `question`(≤500 字,可用 `{selection}` 内嵌选中正文)。设置页可视化编辑,用户层整表覆盖默认值 | 立即(快捷键下次按键生效) |
|
|
162
163
|
|
|
163
164
|
非法值会被拒绝(设置页报错、接口返回 `invalid-config`),并把被忽略的项列在 `/state` 的 `problems` 里——不会静默吞掉。
|
|
164
165
|
|
|
@@ -392,11 +393,27 @@ node tools/compat-probe.mjs --json tools/.cache/matrix.json
|
|
|
392
393
|
| 没有 `data-slot` 锚点 | 检测到选区但槽位路径为空 → 判定"区域锚点不可用",**停用区域过滤**(否则 `captureZones:chat` 会静默失效)并在设置页自检里标明 | `contract-test`:`shouldOffer(..., {anchors:false})` 断言放宽且返回 `zoneFiltering:'unavailable'` |
|
|
393
394
|
| 路由 kind 不被接受 | `prefix` 注册失败 → 退化为**逐方法精确路由**(`state/ask/cancel/config/reset`),处理器不变 | 前缀路由由 smoke 全流程覆盖;退化分支为纯 fallback(未在真机触发过) |
|
|
394
395
|
|
|
395
|
-
### 7.3
|
|
396
|
+
### 7.3 真机验证记录(1.6.0,2026-10-11)
|
|
397
|
+
|
|
398
|
+
1.6.0 把 §7.1/§7.2 的产物层证据升级为**真机证据**:最近 10 个发布版(0.1.5-rc.3 → 0.2.1-alpha.2,
|
|
399
|
+
按 npm 发布时间)全部在隔离 `DSH_HOME` 中真实安装、启动并读取运行时能力面;
|
|
400
|
+
0.2.0-rc.2(= npm `latest`)与 0.2.1-alpha.2(= npm `next`)另做无头浏览器真机验证。
|
|
401
|
+
|
|
402
|
+
- 0.1.5-rc.3 … 0.2.1-alpha.1:引擎可用,provider=spawn/fork,0 启动告警。
|
|
403
|
+
- **0.2.1-alpha.2:1.5.1 真机不可用 → 1.6.0 已修复**。该版本把子代理 API 从 `subagents.start(provider, request)`
|
|
404
|
+
重构为 `subagents.startActivation({provider, label, request, signal, delivery})`,1.5.1 的能力门只认旧方法
|
|
405
|
+
(provider 其实注册成功,自检却显示"不可用")。1.6.0 按运行时方法面自动选择两代 API,新 API 用
|
|
406
|
+
`delivery:'caller'` 保持"答案不进主对话",流式帧按子会话 id 归因。
|
|
407
|
+
- 更早的 0.1.2-rc.1 … 0.1.4 仍只有产物层证据(§7.1/§7.2 的降级分支仍保留,双 API 调度不改动旧路径)。
|
|
408
|
+
- 生态侧:25 个侧边卡片/侧边栏类插件做了产物扫描 + 4 组共载真机,localStorage 键 / 路由前缀 / tab kind /
|
|
409
|
+
patch id / 配置目录 / Alt+Q 零硬冲突;旧名包 `dsh-selection-followup@1.0.1` 共载时的双重触发由
|
|
410
|
+
1.6.0 的页面内家族单例选举解决。完整矩阵、复现脚本与截图见 `.compat-report/`。
|
|
411
|
+
|
|
412
|
+
### 7.4 更早版本仍未做真机验证的部分(如实标注)
|
|
396
413
|
|
|
397
414
|
- 上表所有 ✅/❌ 都是**包内容层面的证据**(字符串/签名存在于该版本的发布产物),不等于"插件在该版本上跑起来过"。
|
|
398
|
-
|
|
399
|
-
- 在 0.1.2-rc.1 … 0.1.
|
|
415
|
+
真机覆盖为 0.1.5-rc.3 → 0.2.1-alpha.2(1.6.0 实测)与 0.1.7-rc.2(§10.1 的历史实测)。
|
|
416
|
+
- 在 0.1.2-rc.1 … 0.1.4 这几个版本上,只验证了"所需 API 是否存在 + 插件有为缺失准备的分支",
|
|
400
417
|
**没有**在那些版本上安装并启动过插件。
|
|
401
418
|
- `inputActions` 作为会话槽位标准 prop:13 个版本的 `dsh-client-ui-conversation` 产物里都有该名字,
|
|
402
419
|
0.1.7-rc.2 的槽位目录也把它列为 `conversation.input.right` 的 standardProps;**更早版本是否真的把它下发给该槽位条目未验证**,
|
|
@@ -440,12 +457,16 @@ node tools/compat-probe.mjs --json tools/.cache/matrix.json
|
|
|
440
457
|
### A. 路径一:就地追问 → 侧边卡片流式作答
|
|
441
458
|
|
|
442
459
|
1. 在聊天区选中一句**非输入框内**的文本(例如助手消息里的半句话);
|
|
443
|
-
2.
|
|
444
|
-
|
|
460
|
+
2. 选区末端应浮出动作条:「💬 追问选中内容」按钮 + 「解释 / 翻译 / 总结 / 润色 / 纠错」芯片,
|
|
461
|
+
按钮带区域徽标(聊天区 / 任务区 / 跨区选择);**点任一芯片即跳过提问框直接在侧边卡片作答**;
|
|
462
|
+
3. 点主按钮后提问框出现(顶部同样有一排芯片),焦点在输入框,引文预览显示选中文本;
|
|
445
463
|
4. 输入问题按 Enter → 提问框关闭,右下角出现卡片,状态先为「作答中…」并**逐字增长**;
|
|
446
|
-
5.
|
|
447
|
-
6. 点「复制」→ 出现「已复制」提示;点「继续追问」→
|
|
464
|
+
5. 结束后状态变「已完成」;底部出现「改问 / 复制 / 继续追问 / 关闭」;答案里代码块的右上角有「⧉ 复制代码」;
|
|
465
|
+
6. 点「复制」→ 出现「已复制」提示;点「继续追问」→ 输入第二条问题(追加一轮),卡片内容**重置换行**后继续流式;
|
|
466
|
+
点「改问」→ 修改当前问题后**重新生成这一轮**(不追加历史);
|
|
448
467
|
7. 点「关闭」→ 卡片消失;若承载面是 better-sidebar/原生右侧栏,对应 tab 也应关闭。
|
|
468
|
+
7b. 设置页「快捷动作」区:可停用内置动作、给动作配快捷键(如 `Alt+T`)、添加自定义动作
|
|
469
|
+
(名称 + 问题指令,指令里可写 `{selection}`);配好后选中文字直接按快捷键等价于点芯片。
|
|
449
470
|
8. **浮层形态与位置(1.5.0)**:默认应是一个**一行高的胶囊**(状态 + 问题首句),点它才展开成完整卡片;
|
|
450
471
|
展开后标题栏右侧有「收起为胶囊」(⇥)与「隐藏浮层」(×)——隐藏后只剩一个带计数的圆点,点它恢复。
|
|
451
472
|
用 F12 选中浮层根节点(`[data-dsa-root]`)读两个值自检:
|
|
@@ -494,8 +515,8 @@ node test/smoke-test.mjs # 端到端:流式/截断/取消/持久化/失
|
|
|
494
515
|
```
|
|
495
516
|
|
|
496
517
|
四个脚本都以 `process.exitCode` 反映结果,失败会列出具体条目;测试会把 `DSH_HOME` 指向临时目录,不会污染真实配置。
|
|
497
|
-
当前规模(1.
|
|
498
|
-
smoke **
|
|
518
|
+
当前规模(1.7.0 本机实测,四项均 exit 0):verify **53** 项 + contract **589** 项 + float-placement **38** 项 +
|
|
519
|
+
smoke **181** 项 = **861 项全部通过**。
|
|
499
520
|
|
|
500
521
|
> 1.5.0 之前这里还放过 `tools/balance-check.mjs` 与 `tools/i18n-check.mjs` 两个「替代检查」。
|
|
501
522
|
> 它们已被**删除**:前者用「正则字面量 vs 除号」的启发式判断,把 8 个源文件全部误报为残损;
|
|
@@ -635,7 +656,9 @@ npm deprecate "<旧包名>@*" "Renamed to <新包名> - <原因>" # 旧名
|
|
|
635
656
|
1. **区域归类是启发式的**:`data-slot` 名称来自 harness 自己;其它插件若在自己的面板里不再经由槽位渲染,
|
|
636
657
|
该区域会被归为"其它区域"——用 `captureZones: auto` + `showInUnclassified: true`(默认)仍然可用,或改用 `captureZones` 限制。
|
|
637
658
|
本机实测能识别:`conversation.*`(聊天)、`rightbar` / `sidebar.right.*` / 名字含 task·todo·schedule·team·job·plan 的面板(任务)。
|
|
638
|
-
2.
|
|
659
|
+
2. **浏览器内的视觉与交互**:1.6.0 起用无头 Edge(Playwright,系统浏览器 `channel:'msedge'`)做真机验证,
|
|
660
|
+
脚本见 `.compat-report/scripts/`,截图见 `.compat-report/shots/`——选区浮按钮、Alt+Q 弹层、共载单实例、
|
|
661
|
+
引擎自检均已在 0.2.0-rc.2 与 0.2.1-alpha.2 上自动核对。桌面 Electron 的视觉观感仍只有 2026-09-30 的人工实测(§5.3)。
|
|
639
662
|
已做的保障是:只使用 `--dsw-alias-*` 主题令牌、只在槽位内渲染(`shell.overlay` / `settings.section` / `conversation.input.right`)、不写 `document.body`、不 import harness 客户端包。
|
|
640
663
|
2b. **1.5.0 的浮层改动:四个测试脚本已在本机实跑通过(各 exit 0),但页面里的观感仍未验证**:
|
|
641
664
|
写这个版本的前半段,本工作区的 shell 工具整体不可用(任何命令都返回
|