dsh-vscode-mode 0.26.0 → 0.27.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 +23 -11
- package/lib/client.js +487 -35
- package/lib/client.js.map +2 -2
- package/lib/index.js +398 -183
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
- package/src/client/compatSummary.ts +4 -0
- package/src/client/contextMenusOfficial.ts +80 -0
- package/src/client/forgeBridge.ts +28 -0
- package/src/client/index.ts +18 -3
- package/src/client/monaco/lsp/lspClient.ts +25 -7
- package/src/client/officialSidebar.ts +15 -3
- package/src/client/sidebar/menuItems.ts +6 -0
- package/src/client/sidebar/panels/FileExplorer.ts +26 -1
- package/src/client/sidebar/types.ts +3 -0
- package/src/client/state/recordsFeed.ts +40 -3
- package/src/client/state/reviewFeed.ts +9 -2
- package/src/client/tabMenu.ts +5 -0
- package/src/client/ui/ClaimRouter.ts +11 -5
- package/src/client/ui/EditorPane.ts +9 -1
- package/src/client/ui/EditorView.ts +47 -10
- package/src/client/ui/OfficialSideTab.ts +13 -5
- package/src/pending/capture.ts +96 -47
- package/src/pending/store.ts +95 -57
- package/src/pendingCompat.ts +21 -29
- package/src/pendingRpc.ts +5 -6
- package/src/reviewCapture.ts +64 -23
- package/src/reviewEvidence.ts +1 -1
- package/src/reviewRpc.ts +6 -7
- package/src/toolTargets.ts +63 -0
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|

|
|
12
12
|
|
|
13
13
|
- 📝 **同屏编辑**:DSH 0.1.5+ 官方右侧 Sidebar,AI 对话与文件编辑同屏
|
|
14
|
-
- 🔍 **差异审查**:Keep / Undo / 回滚 /
|
|
14
|
+
- 🔍 **差异审查**:Keep / Undo / 回滚 / 归档,状态持久化重启不丢。同工作区内所有对话共享待审列表、统计与决定,来源对话仅用于追溯;不同工作区隔离。当前页操作后刷新,其他已打开页面通过约 5 秒轮询同步(后台页面恢复可见后刷新)。写操作仍要求本端活跃会话和原有权限。
|
|
15
15
|
- 🧠 **LSP 智能**:转到定义 / 查找引用 / Peek 多结果选择 / 智能补全(注释索引)/ 签名帮助
|
|
16
16
|
- 🐞 **断点调试**:DAP 桥通用化,行内断点、`.dsh/launch.json`、四段调试面板
|
|
17
17
|
- ⌨️ **命令面板**:`Ctrl+Shift+P`,19 条命令开箱即用,可编程扩展
|
|
@@ -198,14 +198,23 @@ Host 优先采集官方 `workspaceChanges` 的轮次净差异;旧版逐工具
|
|
|
198
198
|
身份(转为 `'file'`),此后再 Revert 是写回而不是删除。
|
|
199
199
|
- **判定粒度**:块、行区间、文件、全部。**Keep 只推进投影、零写盘**;Revert 才写回文件,
|
|
200
200
|
新建条目整条 Revert 等于删除该文件。块身份由当前差异现场推导,不依赖落库状态。
|
|
201
|
-
- **判定安全**:Revert
|
|
201
|
+
- **判定安全**:Revert 先按 `stat → read → stat` 确认内容和版本一致,再走
|
|
202
|
+
`replaceIfVersion` 并写后读回;缺失重建使用 `createIfAbsent`。新建文件回退通过
|
|
203
|
+
provider `deleteFile` 传递版本、取消信号和会话沙箱策略,旧 Host 缺能力时安全拒绝,
|
|
204
|
+
不回落宿主直删。读回失败不按缺失处理、不提交决定。内容与投影不一致、
|
|
202
205
|
条目已解决、行区间歧义时拒绝并给出原因码(`revision-mismatch` / `diverged` /
|
|
203
206
|
`settled` / `unknown-block` / `no-block` / `ambiguous-block`)。
|
|
204
207
|
- **撤销/重做**:判定入 `pending_history`(游标模型,撤销后重做回到同一状态),
|
|
205
208
|
幂等由 `operationId` 保证;决策栈跨重启保留(上游只在面板打开期间保留)。
|
|
206
|
-
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
+
- **差异来源**:对 `edit` / `write` / `str_replace_editor` 环绕工具执行读取真实前后字节;
|
|
210
|
+
`apply_patch` 通过可选官方解析器枚举全部源/移动目标,再逐目标独立取证。结果中的
|
|
211
|
+
`before:null` 不作为新建依据;部分成功只记录实际观测到的变化,unknown/畸形结果提供诊断。
|
|
212
|
+
缺少 raw byte 能力、二进制、无可信基线或超限时不伪造可撤记录。UTF-8 BOM 和行尾按字节保留。
|
|
213
|
+
可另外从版本库导入基线改动(git / svn / Perforce)。
|
|
214
|
+
- **采集诊断**:进程内按工作区最多 50 条、全局最多 500 条;会话/插件释放后清理,Host 重启不保留。
|
|
215
|
+
它不替代官方持久化采集完整性记录,也不绕过写回内容和 provider 原子版本守卫。
|
|
216
|
+
- **采集作用域**:写前冻结当前 `workingDirectory`、provider 与目标;写后读回完成才释放
|
|
217
|
+
同目标占用,卸载后不上报。只修正新采集,不自动搬迁历史目录归属错误的记录。
|
|
209
218
|
- **外部改动**:已入列路径被外部改写时,新内容被吸收为最新待审内容并标记分歧,
|
|
210
219
|
基线保持不动;文件缺失/读不到时条目转为 `missing`,不再参与写回。
|
|
211
220
|
- **判定入口**:差异直接画在编辑器里,块级 Keep/Undo 用行内药丸;文件级 Keep/Undo
|
|
@@ -217,11 +226,11 @@ Host 优先采集官方 `workspaceChanges` 的轮次净差异;旧版逐工具
|
|
|
217
226
|
|---|---|---|---|
|
|
218
227
|
| 条目键 | 全局裸路径 | 工作区 + 路径 | 多工作区同名文件不能互相覆盖 |
|
|
219
228
|
| 文本存储 | 内存/全量 JSON | SQLite,有大小上限 | 大文件不拖垮 Host,超大只按时间戳比较 |
|
|
220
|
-
| Revert 写回 | 无条件写 | 版本守卫 + 写后读回 | provider
|
|
229
|
+
| Revert 写回 | 无条件写 | 稳定快照 + provider 版本守卫 + 写后读回 | 原子守卫依赖 provider 契约,缺版本拒绝写入 |
|
|
221
230
|
| 撤销栈 | 仅面板打开期间 | 持久化到 SQLite | 重启后仍可撤销上次决定 |
|
|
222
231
|
| 界面 | 自带整套 UI | 复用现有面板 | 保留本插件视觉与交互 |
|
|
223
232
|
| Perforce | 支持 | 支持,但只有假 shell 单测 | 本机无 p4 客户端,无法真机验证 |
|
|
224
|
-
| 新建文件 Revert | 删除文件 |
|
|
233
|
+
| 新建文件 Revert | 删除文件 | provider 受控删除,内容与版本双检查 | 继承沙箱策略;旧 Host 缺删除能力时拒绝 |
|
|
225
234
|
|
|
226
235
|
数据与迁移:新增 `pending_*` 表,`SCHEMA_VERSION` 递增并用 `PRAGMA table_info` 判缺列后
|
|
227
236
|
`ALTER TABLE`,既有 `review_*` 事实表一概不动;首次改动前写 `.before-pending.bak` 备份;
|
|
@@ -578,13 +587,13 @@ profile 请替换为实际目标,不要把示例目录当成当前运行 profi
|
|
|
578
587
|
|
|
579
588
|
```bash
|
|
580
589
|
# ① Git 安装(clone + prepare 构建;推荐打固定 tag)
|
|
581
|
-
dsh plugin --profile web add github:Lenonss/DSH_VsCodeMode#v0.
|
|
590
|
+
dsh plugin --profile web add github:Lenonss/DSH_VsCodeMode#v0.27.0
|
|
582
591
|
|
|
583
592
|
# ② npm 注册表(发布到 npm 后)
|
|
584
|
-
dsh plugin --profile web add dsh-vscode-mode@0.
|
|
593
|
+
dsh plugin --profile web add dsh-vscode-mode@0.27.0
|
|
585
594
|
|
|
586
595
|
# ③ GitHub Release tgz 直装(Release asset 可用后)
|
|
587
|
-
dsh plugin --profile web add https://github.com/Lenonss/DSH_VsCodeMode/releases/download/v0.
|
|
596
|
+
dsh plugin --profile web add https://github.com/Lenonss/DSH_VsCodeMode/releases/download/v0.27.0/dsh-vscode-mode-0.27.0.tgz
|
|
588
597
|
```
|
|
589
598
|
|
|
590
599
|
> **DSH 版本政策(0.17.0 起)**:六项 DSH peer 仍统一声明为 `*`,另以
|
|
@@ -964,6 +973,7 @@ Keep All / Undo All 却是亮的。修复:单文件 Keep / Undo 覆盖冲突
|
|
|
964
973
|
|
|
965
974
|
| 版本 | 要点 |
|
|
966
975
|
| --- | --- |
|
|
976
|
+
| v0.27.0 | DSH alpha.3 官方菜单/Forge 导航/设置图标与能力诊断;多目标 patch 字节采集;回滚版本与会话策略守卫;工作区共享差异基线;隐藏轮询门控与导航隔离 |
|
|
967
977
|
| v0.26.0 | Keep All 改为单次批量(不再因单条过期/冷端条目整批中止,2N+1 次往返降到 2 次);差异审查旧通道遗留清理:待审接管的旧记录自动结案、守卫改会话作用域、失败原因不再被通用文案吞掉 |
|
|
968
978
|
| v0.25.1 | 下载到本机支持选择保存文件夹(目录选择器),按工作区相对路径写入 |
|
|
969
979
|
| v0.25.0 | 资源管理器右键「下载到本机」:远程访问时把工作区文件拉回浏览器所在机器 |
|
|
@@ -976,7 +986,9 @@ Keep All / Undo All 却是亮的。修复:单文件 Keep / Undo 覆盖冲突
|
|
|
976
986
|
| v0.23.0 | 快捷菜单:可拖动悬浮按钮 + 自定义菜单树 |
|
|
977
987
|
|
|
978
988
|
<details>
|
|
979
|
-
<summary>完整版本记录(v0.
|
|
989
|
+
<summary>完整版本记录(v0.27.0 → v0.1.5x,点击展开)</summary>
|
|
990
|
+
|
|
991
|
+
- **v0.27.0**:接入 DSH 0.2.2-alpha.3 官方共享菜单(树/页签、键盘入口、陈旧目标守卫、旧 Host 回退)、Forge 面板/本地变更导航(缺能力隐藏,不接管 PR 快照)、设置图标与能力诊断;apply_patch 多目标采集采用独立原始字节前后像,保留 BOM/行尾,不把结果 before:null 当作文件缺失。回滚使用 provider 原子版本与内容守卫,删除无直接文件系统兜底,修复累计待审入口漏传会话沙箱策略;差异按工作区共享基线及接管登记。展示轮询隐藏门控与单飞合并,LSP 旧会话结果隔离,导航补列及 owner/session 守卫。实机 write/edit → GUI Undo → 磁盘读回已通过。**已知缺口**:Undo 后当前已结算文件可能仍显示“待审”和超出总数的序号;真实 apply_patch 工具、Forge 已启用环境、真实后台请求与多会话完整矩阵尚未实测。缺口经维护者接受发布;不宣称完整端到端验收或 Console 零错误。
|
|
980
992
|
|
|
981
993
|
- **v0.26.0**:Keep All 从「逐条预检 + 逐条决策」改为**一次批量**,并且不再被单条基线问题整批阻断。原因有两层:一是往返次数与数据量——原实现先取一次快照,再为每条待审记录调一次 `edrv.review.detail`(每条带完整 diff 过桥)与一次 `edrv.review.decide`,一次 Keep All 等于 `2N + 1` 次 RPC;待审投影侧每条 detail/decide 内部又先 `loadEntries(cwd)` 把整表 old_text/new_text 全文读进内存再线性查找,N 条即 O(N²) 全文读。二是「一票否决」——预检期任一条处于冷端(会话在另一端活跃)、revision/seq 漂移、`settled`、`oversized`、有尚待核对的 Undo,或执行期任一条 decide 失败,整批立刻中止、其余一条不动。现新增宿主 RPC `edrv.review.keepAll`(只做 Keep):一次 `BEGIN IMMEDIATE` 内逐条 CAS,写入条件取**库内当前 revision**而非客户端快照值,因此快照漂移不再等于失败;`operationId = sha256(batchId|id|seq)` 保证同批重放幂等;不能保留的条目(冷端待审、已结案、`prepared` Undo、超限文本)只写进 `skipped` 并附原因,段级异常只写 `result.error`,另一段照常完成;超过 2000 条与原分页上限一致地拒绝。待审投影侧新增 `store.keepAll`:一次 `loadEntries` + 逐条 `decide`(Keep 零写盘)+ `persist.saveDecisions` 单事务带 revision CAS 落库,落库冲突只把该条移入 skipped;`saveEntry`/`saveBlocks`/`pushHistory` 抽出 `upsertEntry`/`writeBlocks`/`insertHistory` 共用,单条路径行为不变。客户端新增 `src/client/reviewKeepAll.ts`:guard → 快照(校验失败自动重试一次,自愈分页漂移)→ 一次批量 → 再 guard,正常仅 **2 次 RPC**。界面:状态栏「Keep All:已保留 X / Y,跳过 Z 条」,跳过明细用轻提示列前 3 条(`display:原因`)并汇总余量,跳过不算错误、条目仍留在列表可逐条处理;确认弹窗补一句跳过说明并保留「不改写文件」语义。**Undo All 完全不变**(仍逐条预检能力、遇冲突立即停止、精确报告已完成项),因为它会改写磁盘。验证:typecheck 0 error;定向单测 8 文件 67 例全过(`reviewKeepAll` 新增 7、`reviewDb` 12、`pendingStore` 20、`reviewRpc` 10 及 `reviewBatch`/`reviewAllConfirm`/`reviewFeed`/`reviewFlow`);新用例覆盖一次快照+一次批量、漂移重试一次、guard 先于快照、过期 revision 仍接受、同批重放幂等、`prepared` Undo 只挡自己、冷端官方照常完成而待审只 skip、空列表与超 2000 条拒绝。同版另一组修复针对差异审查的旧通道遗留问题(用户实报「Keep 了为什么还要被拦」与「1 处差异处理失败」):①被待审累计基线接管的路径,其旧 sidecar 记录由 host 自动结案(`retireCovered`,归档原因「已由待审累计基线接管,旧工具记录不再单独决策」),编辑器与差异列表不再渲染这些「看得见、点不动」的旧 hunk;②`legacyBlocked` 守卫改为**会话作用域**——只有本会话可见的待审接管才拦旧写入口,别的会话持有接管时本会话放行,消除「拦得住、看不见」的死锁;③客户端不再用「1 处差异处理失败(可能已被后续修改影响)」覆盖 host 真实原因,按 `error` 原样展示,会话未激活时改为「Keep/Undo 没有执行(记录未改动),在会话里发一条消息激活后重试」;④「历史改动」通道 Keep 成功后的状态文案改为「已标记为看过(未改动文件)」。覆盖登记同步改为按会话登记 + 整集重建(`trackPendingCover(cwd,path,covered,sessionId?)`/`setPendingCovers`/`pendingCovers(cwd,path,sessionId?)`),旧 2 参调用仍走工作区集合。验证:typecheck 0 error、全量 293 文件 3754 通过 + 22 跳过(`tests/dapFakeAdapter` 首发抖动,隔离重跑 7/7 绿)、build 四 bundle 通过;现场验收:live 会话下 `edrv.accept` 与 `edrv.decideBatch` 对受管路径返回守卫文案且零写盘、重启后自动结案已产生 895 批次 / 1096 条归档、被接管文件在差异栏只剩「待审」徽标而无「历史改动」。GUI 点按验收需重启 DSH 部署本版,本次未做;真实大工作区耗时未实测,速度结论来自 RPC 次数与数据层复杂度。见 [0.26.0 发布说明](docs/release-0.26.0.md)。
|
|
982
994
|
- **v0.25.1**:下载到本机支持选择保存位置——点「下载」先弹系统目录选择器(File System Access API:Chrome/Edge、https 或 localhost 安全上下文),选一次目标文件夹后,文件按**工作区相对路径**逐个写入(文件夹下载自动建子目录,仍不打包)。用户取消选择则整批中止并提示「已取消下载」;Firefox/Safari、局域网 http、或目录写入权限被拒时自动回落浏览器默认下载目录,并分别提示具体原因,不静默改语义。确认框底栏按钮改为「选择位置并下载 N 个文件」并加一行说明;选择器在用户手势的同步栈内触发,不依赖额外点击。验证:typecheck 0 error;全量 288 文件、3733 通过 + 22 跳过;build 四 bundle 通过;本机冒烟覆盖 4 条分支(取消 / 拒绝授权回落 / 选中目录按 `tests/officialBackfill.test.ts` 相对路径写 4328 B / 文件夹流程写 `.codegraph/.gitignore` 229 B)。见 [0.25.1 发布说明](docs/release-0.25.1.md)。
|