dsh-vscode-mode 0.21.4 → 0.23.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.
Files changed (43) hide show
  1. package/README.md +52 -4
  2. package/lib/client.js +3442 -183
  3. package/lib/client.js.map +2 -2
  4. package/lib/index.js +3510 -222
  5. package/lib/index.js.map +1 -1
  6. package/package.json +1 -1
  7. package/src/client/index.ts +166 -0
  8. package/src/client/quickMenuHost.ts +46 -0
  9. package/src/client/quickMenuStore.ts +260 -0
  10. package/src/client/state/diffSummary.ts +52 -8
  11. package/src/client/styles/quickmenu.css +1049 -0
  12. package/src/client/ui/DiffLauncher.ts +1 -1
  13. package/src/client/ui/EditorView.ts +10 -2
  14. package/src/client/ui/OfficialDiffBar.tsx +1 -12
  15. package/src/client/ui/OfficialReview.ts +13 -3
  16. package/src/client/ui/QuickMenuDialog.tsx +835 -0
  17. package/src/client/ui/QuickMenuLauncher.tsx +792 -0
  18. package/src/client/ui/QuickMenuPickers.ts +577 -0
  19. package/src/client/ui/SidecarDiffBar.tsx +0 -22
  20. package/src/index.ts +9 -0
  21. package/src/missingReview.ts +36 -14
  22. package/src/paths.ts +10 -0
  23. package/src/pending/capture.ts +165 -0
  24. package/src/pending/decide.ts +213 -0
  25. package/src/pending/hunks.ts +241 -0
  26. package/src/pending/kernel.ts +233 -0
  27. package/src/pending/persist.ts +329 -0
  28. package/src/pending/store.ts +472 -0
  29. package/src/pending/vcs.ts +444 -0
  30. package/src/pendingCompat.ts +184 -0
  31. package/src/pendingRpc.ts +210 -0
  32. package/src/quickMenu.ts +269 -0
  33. package/src/reviewDb.ts +3 -0
  34. package/src/reviewRpc.ts +52 -1
  35. package/src/rpc.ts +66 -2
  36. package/src/shared/pathKey.ts +54 -0
  37. package/src/shared/pendingReview.ts +105 -0
  38. package/src/shared/quickMenu.ts +1009 -0
  39. package/src/shared/quickPick.ts +67 -0
  40. package/src/shared/rpc.ts +28 -0
  41. package/src/shared/skillCatalog.ts +60 -0
  42. package/src/skillCatalog.ts +138 -0
  43. package/src/store.ts +19 -0
package/README.md CHANGED
@@ -163,6 +163,50 @@ Host 优先采集官方 `workspaceChanges` 的轮次净差异;旧版逐工具
163
163
  > v0.20.1 已完成重启后真实 GUI 的文件/块级审查与安全拒绝验收。Keep All / Undo All
164
164
  > 已接入全部分页;批量 Undo 不是跨文件原子事务,遇冲突停止,已完成项不会自动恢复。
165
165
 
166
+ ### 6.1 累计基线待审(对齐 dsh-diff-approval)
167
+
168
+ 在保留现有面板的前提下,把待审内核换成**累计基线投影**:行为参考
169
+ [dsh-diff-approval](https://github.com/9087/dsh-diff-approval)(基线
170
+ `a661a7a31583057c8ba8bbeb73721a9b3ee0c57e`,MIT,Copyright (c) 2026 Wu Zhiwei),
171
+ 只借用语义与内核,不引入它的界面资产(Markdown 预览、并排视图、字体子集、悬浮卡片)。
172
+
173
+ - **一条目一文件**:每路径只有一条待审条目,`oldText` 是最早基线、`newText` 是最新内容。
174
+ 同文件多次写入按更新时间折叠,基线取较早来源、内容取较晚来源,`sessionIds` 取并集;
175
+ 于是 A→B→C 显示 A→C,A→B→A 折叠归零(严格字节相等,不做 BOM/换行归一化)。
176
+ - **创建身份**:`earlierVersion: 'none'` 表示基线是"文件不存在"。写入推进基线即结束创建
177
+ 身份(转为 `'file'`),此后再 Revert 是写回而不是删除。
178
+ - **判定粒度**:块、行区间、文件、全部。**Keep 只推进投影、零写盘**;Revert 才写回文件,
179
+ 新建条目整条 Revert 等于删除该文件。块身份由当前差异现场推导,不依赖落库状态。
180
+ - **判定安全**:Revert 走 `replaceIfVersion` 版本守卫并写后读回;内容与投影不一致、
181
+ 条目已解决、行区间歧义时拒绝并给出原因码(`revision-mismatch` / `diverged` /
182
+ `settled` / `unknown-block` / `no-block` / `ambiguous-block`)。
183
+ - **撤销/重做**:判定入 `pending_history`(游标模型,撤销后重做回到同一状态),
184
+ 幂等由 `operationId` 保证;决策栈跨重启保留(上游只在面板打开期间保留)。
185
+ - **差异来源**:`edit` / `write` 结果自带 before/after 直接采集;`str_replace_editor`
186
+ 结果只有成功消息,靠 `fs/edit-intent`、`fs/write-intent` 在写前取预像、`fs/observed`
187
+ 在写后取终像配对。可另外从版本库导入基线改动(git / svn / Perforce)。
188
+ - **外部改动**:已入列路径被外部改写时,新内容被吸收为最新待审内容并标记分歧,
189
+ 基线保持不动;文件缺失/读不到时条目转为 `missing`,不再参与写回。
190
+ - **判定入口**:差异直接画在编辑器里,块级 Keep/Undo 用行内药丸;文件级 Keep/Undo
191
+ 在差异栏上。详情面板与批注(含「让 AI 应答」)已移除——判定与保持/撤销只走这两处。
192
+
193
+ 与上游的有意偏差:
194
+
195
+ | 项 | 上游 | 本插件 | 原因 |
196
+ |---|---|---|---|
197
+ | 条目键 | 全局裸路径 | 工作区 + 路径 | 多工作区同名文件不能互相覆盖 |
198
+ | 文本存储 | 内存/全量 JSON | SQLite,有大小上限 | 大文件不拖垮 Host,超大只按时间戳比较 |
199
+ | Revert 写回 | 无条件写 | 版本守卫 + 写后读回 | provider 不具备跨进程原子 CAS |
200
+ | 撤销栈 | 仅面板打开期间 | 持久化到 SQLite | 重启后仍可撤销上次决定 |
201
+ | 界面 | 自带整套 UI | 复用现有面板 | 保留本插件视觉与交互 |
202
+ | Perforce | 支持 | 支持,但只有假 shell 单测 | 本机无 p4 客户端,无法真机验证 |
203
+ | 新建文件 Revert | 删除文件 | 删除文件(直接 `unlink`) | fs 抽象没有删除动作,已限制在工作区内 |
204
+
205
+ 数据与迁移:新增 `pending_*` 表,`SCHEMA_VERSION` 递增并用 `PRAGMA table_info` 判缺列后
206
+ `ALTER TABLE`,既有 `review_*` 事实表一概不动;首次改动前写 `.before-pending.bak` 备份;
207
+ 路径被待审投影接管后,旧 sidecar 写入口(`edrv.accept` / `edrv.reject` / `edrv.decideBatch`
208
+ / `edrv.missingDecide` 等)直接拒绝,避免双权威。
209
+
166
210
  ### 7. Monaco 离线分发
167
211
 
168
212
  `assets/vendor/monaco` AMD 构建随包发布,经 `/edrv/vendor/*` 前缀路由全离线可用。
@@ -477,7 +521,9 @@ DSH 每次启动监听随机端口,`http://127.0.0.1:<port>` 就是浏览器 o
477
521
 
478
522
  官方 `dsh plugin` 方式,三选一。下面以 `web` profile 为例;Desktop 或其他命名
479
523
  profile 请替换为实际目标,不要把示例目录当成当前运行 profile。升级前可阅读
480
- **v0.21.4** 的任务发送结果分类与诚实草稿降级:只有明确 accepted 才等待分析方案;unknown/submitted/cancelled 不另填草稿或重发,安全降级只填实际当前会话草稿并提示手动发送。旧 boolean 接口保留,legacy true 不等于受理。开发 link 客户端 rev458288ddb012 的真实公开入口与目标受理已验;完整 SVN 分析/方案投递因 `SetNamedSecurityInfoW failed (Win32 5)` 未完成,用户仅本批接受此缺口,不代表 Host 整体升级或当前实例已安装 npm 0.21.4。见 [0.21.4 发布说明](docs/release-0.21.4.md)。以下保留历史版本事实:
524
+ **v0.23.0** 的快捷菜单:编辑器内一个可拖动悬浮按钮,点开是自定义菜单树(组 / 按钮,最多 5 层),按钮可携带提示词并直接发送给 AI 或只填入输入框;配置存于 `<DSH_HOME>/dsh-vscode-mode/data/quick-menu.json`,带 `revision` 乐观锁与损坏降级;节点可限定生效工作区(默认全部),按钮可绑定技能与规则,发送时按当前会话可见性校验后只拼装通过的绑定。新增 `skills.list` 只读 RPC 枚举「全局技能 + 当前工作区技能」作为候选,配置界面的工作区、技能、规则全部改为下拉弹层/多选下拉,菜单设置重排为四段并统一按钮盒模型(修掉「导入 JSON」下移不居中)。本版**未做 GUI 真机验收**(本机 pnpm store 损坏、插件未部署),缺口已获用户接受,见 [0.23.0 发布说明](docs/release-0.23.0.md)。以下保留历史版本事实:
525
+ **v0.22.0** 的累计基线待审(非 UI 能力对齐 dsh-diff-approval):同一文件的多次编辑折叠成一条待审、基线保留最早内容,A→B→C 显示 A→C、A→B→A 自然归零;Keep 只推进基线不改磁盘,Revert 走版本守卫写回并读回校验,撤销/重做用游标模型跨重启保留;新增 `str_replace_editor` 预像配对、`fs/observed` 终像、已入列路径的外部改动吸收与缺失/不可读生命周期、git/svn/Perforce 基线导入,以及旧 sidecar 写入口对已接管路径的服务端拒绝。差异仍在编辑器内行内展示、块级 Keep/Undo 用药丸,文件级在差异栏;详情面板与批注(含「让 AI 应答」)本版移除。验收边界:p4 仅有假 shell 单测(本机无 Perforce 客户端),「让 AI 应答」随批注一并下线故不再验证;本版未在宿主上重启验收 GUI 全流程,见 [0.22.0 发布说明](docs/release-0.22.0.md)。以下保留历史版本事实:
526
+ **v0.21.4** 的任务发送结果分类与诚实草稿降级:只有明确 accepted 才等待分析方案;unknown/submitted/cancelled 不另填草稿或重发,安全降级只填实际当前会话草稿并提示手动发送。旧 boolean 接口保留,legacy true 不等于受理。开发 link 客户端 rev458288ddb012 的真实公开入口与目标受理已验;完整 SVN 分析/方案投递因 `SetNamedSecurityInfoW failed (Win32 5)` 未完成,用户仅本批接受此缺口,不代表 Host 整体升级或当前实例已安装 npm 0.21.4。见 [0.21.4 发布说明](docs/release-0.21.4.md)。保留以下历史版本事实:
481
527
  **v0.21.3** 的 MCP 初始化失败结果与安全收尾解耦:已进入 startup 的调用者在失败或截止时间到达时及时收到拒绝,不再等待旧资源收尾;旧 work/close 未确认完成前仍占冷启动名额、阻止同 key 重建,确认收尾后才开始冷却。首次偶发超时根因仍未知,排队和其他屏障仍可能无界;本版当前 Host/GUI 未部署未验证,用户仅本批接受官方实装隔离模块与 JS 套件替代验收,见 [0.21.3 发布说明](docs/release-0.21.3.md)。官方 bridge 隔离 fixture 同步迁移到当前公开 native 执行器及批调用契约,不代表生产执行器故障修复。以下为历史版本事实,不代表本版现场验收:
482
528
  **v0.21.2** 的新版 DSH 会话 Controller 与 MCP 公开工具目录适配:任务发送按目标会话持有生命周期,受理不明时不跨通道重发;文件范围引用的剪贴板与降级文本保留行区间;MCP 初始化失败增加脱敏持久化诊断。当前 Web Host 已完成真实 CodeGraph 调用,但首次连接偶发超时根因尚未证实,不宣称已修复,见 [0.21.2 发布说明](docs/release-0.21.2.md)。保留以下历史版本能力与验收边界:
483
529
  **v0.21.1** 修复缺失历史文件:按完整快照显示整文件删除,Keep 保留删除、Undo 安全恢复快照,预览只读且拒绝覆盖重新出现的文件;真实 GUI 验收缺口已明确保留,见 [0.21.1 发布说明](docs/release-0.21.1.md)。保留 **v0.21.0** 新增 XLSX 基础编辑与浏览器导出副本,原件不自动写回,高级应用通过官方 Host 打开;官方差异定位统一 BOM 与 LF/CRLF/混合行尾口径,并区分内容缺失和多处命中。定位修复不扩展 CRLF patch Undo 能力,目标官方记录 ↑/↓ 的真实点击验收仍保留缺口。保留 **v0.20.5** 跨 DSH 实例只读互通——桌面端与 Web 端各自运行独立宿主时,官方审查列表/详情与工作区只读接口改按持久化会话头的 cwd 解析,另一实例创建的会话也能只读打开官方差异栏,写入类接口仍要求本端活跃会话。保留 **v0.20.4** 统一两套差异栏外观——非官方记录栏角标由内部术语「侧车记录」改为「历史改动」,悬停说明 Keep 只标记已看过、不改写磁盘,Undo 逐项校验后写回,两者都不影响官方审查;官方元数据不可用时给出可读原因与重试按钮,不再静默降级;「会话没在当前端激活」由红色告警改为中性说明。保留 v0.20.3 修复官方差异全部无法定位时差异栏无提示、上下箭头静默禁用(显示「无可跳转」与失效原因,Keep 说明只标记已采纳、不改写磁盘,会话缺失等宿主错误改为可读提示)、v0.20.2 的 MCP 状态告警收敛与原生确认弹窗,以及 v0.20.1 的文件内差异展示、块级/文件级安全审查和跨分页批量操作。升级后重启 DSH 并刷新页面;持久化与回退边界见 [0.20.0 发布说明](docs/release-0.20.0.md);从 0.14.2 或更旧版本升级还须阅读
@@ -485,13 +531,13 @@ profile 请替换为实际目标,不要把示例目录当成当前运行 profi
485
531
 
486
532
  ```bash
487
533
  # ① Git 安装(clone + prepare 构建;推荐打固定 tag)
488
- dsh plugin --profile web add github:Lenonss/DSH_VsCodeMode#v0.21.4
534
+ dsh plugin --profile web add github:Lenonss/DSH_VsCodeMode#v0.23.0
489
535
 
490
536
  # ② npm 注册表(发布到 npm 后)
491
- dsh plugin --profile web add dsh-vscode-mode@0.21.4
537
+ dsh plugin --profile web add dsh-vscode-mode@0.23.0
492
538
 
493
539
  # ③ GitHub Release tgz 直装(Release asset 可用后)
494
- dsh plugin --profile web add https://github.com/Lenonss/DSH_VsCodeMode/releases/download/v0.21.4/dsh-vscode-mode-0.21.4.tgz
540
+ dsh plugin --profile web add https://github.com/Lenonss/DSH_VsCodeMode/releases/download/v0.23.0/dsh-vscode-mode-0.23.0.tgz
495
541
  ```
496
542
 
497
543
  > **DSH 版本政策(0.17.0 起)**:六项 DSH peer 仍统一声明为 `*`,另以
@@ -832,6 +878,8 @@ Keep All / Undo All 却是亮的。修复:单文件 Keep / Undo 覆盖冲突
832
878
  完整变更见 [GitHub Releases](https://github.com/Lenonss/DSH_VsCodeMode/releases)。
833
879
  近期关键版本:
834
880
 
881
+ - **v0.23.0**:新增快捷菜单——可拖动悬浮按钮 + 自定义菜单树(组/按钮,最多 5 层),按钮携带提示词并「直接发送给 AI」或「只填入输入框」;配置存 `<DSH_HOME>/dsh-vscode-mode/data/quick-menu.json`,带 `revision` 乐观锁、冲突重拉不覆盖、损坏降级。节点可限定工作区(默认全部、子节点继承),按钮可绑定技能与规则,发送时按会话可见性校验后只拼装通过的绑定(规则支持引用/内联)。新增 `skills.list` 只读 RPC 枚举全局技能 + 当前工作区技能;配置界面工作区改下拉弹层、技能/规则改分组多选下拉并移除手输技能名,菜单设置重排四段、统一按钮盒模型并修掉「导入 JSON」下移不居中。本版 GUI 未真机验收(pnpm store 损坏、插件未部署),缺口已获用户接受;发布不自动部署,升级后重启 DSH 并刷新页面。见 [发布说明](docs/release-0.23.0.md)。
882
+ - **v0.22.0**:新增累计基线待审——同文件多次编辑折叠成一条、基线保留最早内容(A→B→C 显示 A→C、A→B→A 归零);Keep 只推进基线不改磁盘,Revert 带版本守卫写回并读回,撤销/重做游标模型跨重启保留;补 `str_replace_editor` 预像配对、外部改动吸收与缺失生命周期、git/svn/Perforce 基线导入、旧入口服务端拒绝。差异仍在编辑器内行内展示,详情面板与批注(含「让 AI 应答」)移除。p4 仅假 shell 单测(本机无 Perforce 客户端),GUI 全流程未重启验收;发布不自动部署,升级后重启 DSH 并刷新页面。见 [发布说明](docs/release-0.22.0.md)。
835
883
  - **v0.21.4**:区分任务明确受理、拒绝、不明、仅提交与取消;只有 accepted 开始等待,unknown/submitted/cancelled 不另填草稿、重试或轮询。安全降级只填实际当前会话草稿并提示手动发送,缺详细 API 明确本次未自动发送;旧 boolean 兼容但 true 不等于受理。真实开发客户端公开按钮→目标受理已验,完整 SVN 分析/方案投递因 Win32 5 未验,用户仅本批接受;Host 未重启,不自动部署。见 [发布说明](docs/release-0.21.4.md)。
836
884
  - **v0.21.3**:MCP 初始化失败时分离调用者结果与安全收尾,已进入 startup 的调用者及时收到失败;旧 work/close 未完成仍占槽并阻止同 key 重建,清理失败不开放替代连接,收尾完成才开始冷却。不宣称解决首次偶发超时、gamma 排队或整体流程有界。当前 Host/GUI 未部署未验证,用户仅本批接受替代验收;不自动部署或重启。见 [发布说明](docs/release-0.21.3.md)。
837
885
  - **v0.21.2**:适配新版 DSH Session Controller 与 MCP 公开工具目录;固定目标任务发送持有会话直到完成或卸载,受理不明时不跨通道重发。范围文件引用的模型文本、剪贴板与纯文本降级保持一致。MCP 初始化失败记录阶段、耗时和脱敏错误链;迁移官方 native/PTC 执行器集成测试并增加可选真实 CodeGraph stdio 验证。当前 Web Host 真实工具调用已通过,首次连接偶发超时根因仍未证实;不自动部署或重启。见 [发布说明](docs/release-0.21.2.md)。