dsh-vscode-mode 0.23.5 → 0.25.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 +125 -25
- package/lib/client.js +978 -63
- package/lib/client.js.map +2 -2
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
- package/src/client/downloadFile.ts +208 -0
- package/src/client/downloadPickerModel.ts +335 -0
- package/src/client/loadFailure.ts +84 -0
- package/src/client/monaco/loader.ts +9 -6
- package/src/client/pdf/pdfLoader.ts +10 -4
- package/src/client/rpc.ts +54 -10
- package/src/client/sidebar/menuItems.ts +27 -0
- package/src/client/styles/editor.css +24 -0
- package/src/client/ui/DiffBadge.ts +2 -2
- package/src/client/ui/DownloadPicker.ts +305 -0
- package/src/client/ui/EditorView.ts +2 -1
- package/src/shared/remoteChannel.ts +70 -0
- package/src/shared/rpc.ts +2 -2
package/README.md
CHANGED
|
@@ -1,13 +1,34 @@
|
|
|
1
1
|
# dsh-vscode-mode
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/dsh-vscode-mode)
|
|
4
|
+
[](https://github.com/Lenonss/DSH_VsCodeMode/releases)
|
|
5
|
+
[](https://github.com/Lenonss/DSH_VsCodeMode/actions/workflows/ci.yml)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
|
|
3
8
|
> DSH 上的**类 VSCode 编码体验**:Monaco 文件编辑器 + Agent 差异审查 + LSP 智能。
|
|
4
9
|
> 由 `@dsh-external/dsh-edit-review` 重构而来。
|
|
5
10
|
|
|
11
|
+

|
|
12
|
+
|
|
6
13
|
- 📝 **同屏编辑**:DSH 0.1.5+ 官方右侧 Sidebar,AI 对话与文件编辑同屏
|
|
7
14
|
- 🔍 **差异审查**:Keep / Undo / 回滚 / 归档,状态持久化重启不丢
|
|
8
15
|
- 🧠 **LSP 智能**:转到定义 / 查找引用 / Peek 多结果选择 / 智能补全(注释索引)/ 签名帮助
|
|
16
|
+
- 🐞 **断点调试**:DAP 桥通用化,行内断点、`.dsh/launch.json`、四段调试面板
|
|
9
17
|
- ⌨️ **命令面板**:`Ctrl+Shift+P`,19 条命令开箱即用,可编程扩展
|
|
10
18
|
|
|
19
|
+
**安装**:`npm i dsh-vscode-mode`(需 DSH 0.1.5+,装完重启 DSH)→ 详见[安装](#安装)。
|
|
20
|
+
|
|
21
|
+
**能力速览**
|
|
22
|
+
|
|
23
|
+
| 场景 | 你能得到什么 |
|
|
24
|
+
| --- | --- |
|
|
25
|
+
| 同屏编码 | 中央对话 + 右侧 Monaco,官方 Sidebar 多标签 / 分栏 / 浮出 / 全屏 |
|
|
26
|
+
| 审改动 | 行内红绿差异、累计基线待审、Keep / Undo / 回滚 / 归档,重启不丢 |
|
|
27
|
+
| 懂代码 | LSP:定义 / 引用 / Peek / 补全 / 签名帮助,按文件语言自动选后端 |
|
|
28
|
+
| 调问题 | DAP:断点、调用堆栈、变量、监视、调试控制台 REPL(Lua attach / .NET) |
|
|
29
|
+
| 管文件 | 活动栏 + 资源管理器 + 右键菜单 + 工作区搜索 + SVN 状态徽标 + 远程下载 |
|
|
30
|
+
| 看文档 | Markdown 预览、PDF 注释编辑、Excel 基础编辑与只读数据预览 |
|
|
31
|
+
|
|
11
32
|
## 目录
|
|
12
33
|
|
|
13
34
|
- [特性](#特性)
|
|
@@ -251,6 +272,10 @@ cmaps 支持中文渲染);工具条进入注释编辑:✎ 文本框 / 🖌
|
|
|
251
272
|
粘贴(剪贴板空时灰显)| 复制路径·复制相对路径 | 重命名…·永久删除 | SVN 组。
|
|
252
273
|
- 根空白区 = 文件夹菜单去掉全部「仅非根」项;参考图中本架构无法实现的条目
|
|
253
274
|
(在集成终端中打开 / 运行测试 / Build 等)不显示。
|
|
275
|
+
- **下载到本机**(仅远程访问时出现,落在「复制相对路径」与「重命名」之间):
|
|
276
|
+
文件直接下载原文件;文件夹与根空白区弹出确认框,按需懒加载展开目录树、
|
|
277
|
+
逐级勾选文件后逐个下载(不打包,勾选几个就下几个)。判定口径与页面的
|
|
278
|
+
远程通道一致(`channelPrefix()` 非空),本机回环页面不显示。
|
|
254
279
|
- 文件管理写操作走 `edrv.fsCreateFile / fsCreateDir / fsRename / fsDelete /
|
|
255
280
|
fsCopy / fsMove`(工作区边界 + 同名拒绝 + 名称校验),删除带确认;重命名 /
|
|
256
281
|
移动 / 删除与开着的页签自动同步(路径改写 / 关签)。剪切·复制·粘贴为应用内
|
|
@@ -336,7 +361,7 @@ DSH 启动回放 `~/.dsh/sessions` 全部会话(V8 展开约 10×,可能 OOM
|
|
|
336
361
|
- 治理原则:存量靠归档、增量靠压缩调优 + 短会话习惯 + 体积指示器;packChunks
|
|
337
362
|
(chunk 打包存储)为 DSH 默认开启,无需再配置。
|
|
338
363
|
|
|
339
|
-
### 14.
|
|
364
|
+
### 14. 外部改动自动同步(v0.4.4)
|
|
340
365
|
|
|
341
366
|
磁盘文件被外部改动(其他编辑器 / Unity / 脚本 / agent 工具 / 同步盘)后自动
|
|
342
367
|
跟进,不必手点 ⟳:
|
|
@@ -453,7 +478,7 @@ TortoiseSVN(`TortoiseProc.exe`)仅作 Windows 过渡增强:自研能力覆
|
|
|
453
478
|
|
|
454
479
|
> 说明:`plans/`(含对标蓝图与实测结论)为本地开发资料,不入库。
|
|
455
480
|
|
|
456
|
-
### 17. 断点调试(DAP
|
|
481
|
+
### 17. 断点调试(DAP,v0.6.0)
|
|
457
482
|
|
|
458
483
|
编辑器内断点调试(DAP 桥通用化:适配器由扩展清单 `contributes.debuggers` 驱动,
|
|
459
484
|
不限定语言;Lua 链路复用已装 emmylua 扩展适配器,**零游戏侧改动**):
|
|
@@ -517,29 +542,47 @@ DSH 每次启动监听随机端口,`http://127.0.0.1:<port>` 就是浏览器 o
|
|
|
517
542
|
`DSH_HOME/dsh-vscode-mode/logs/debug.<hashOf(cwd)>.log`(无会话期诊断落在
|
|
518
543
|
`debug.<hashOf('ui-state')>.log`)。
|
|
519
544
|
|
|
545
|
+
### 19. 远程访问兼容(经第三方远程访问插件访问)
|
|
546
|
+
|
|
547
|
+
宿主 `/edrv/*` 的准入是 `connection.requestRejection()`,**Host 围栏优先于登录态**:
|
|
548
|
+
只认 loopback、监听 bind IP 与 `trustedHosts`。远程设备访问时 `Host` 不符即 403,
|
|
549
|
+
与是否已经登录无关(401 才是登录失效)。第三方远程访问插件
|
|
550
|
+
(`@linxin666/dsh-remote-web-ui` 等)把 `/api/`、`/sidebar/`、`/git/`、`/pet/` 改写到它的
|
|
551
|
+
`/remote` 通道,`/edrv/` 不在白名单内,所以文件管理器 RPC 与 Monaco 静态资源全部直连
|
|
552
|
+
宿主被拒。
|
|
553
|
+
|
|
554
|
+
本插件按「通道前缀」适配(`src/shared/remoteChannel.ts`):
|
|
555
|
+
|
|
556
|
+
- **判定**:远程通道在 `<head>` 解析期安装座位对象 `__DSH_REMOTE_CHANNEL_BOOT__`;
|
|
557
|
+
存在即认为本页经远程通道访问,前缀取 `/remote`,否则为空串。
|
|
558
|
+
- **覆盖**:`/edrv/rpc`(业务 RPC 与二进制预览)、Monaco 的 `loader.js` / AMD 模块 /
|
|
559
|
+
`editor.main.css` / codicon 字体 / 语言 Worker(随 `paths.vs` 继承)、pdf.js 的
|
|
560
|
+
worker 与 cmaps、`/edrv/assets/*` 图片全部走 `transportUrl()`,`appUrl()` 继续负责
|
|
561
|
+
应用 base 与桌面 `dsh-app://` 协议,不硬编码主机或端口。
|
|
562
|
+
- **为什么不是 `/api/edrv`**:远程插件的补丁只改 fetch / EventSource / WebSocket 与
|
|
563
|
+
`<img|script|iframe>.src`,`<link rel=stylesheet>`、CSS `url()`、`new Worker`、
|
|
564
|
+
ESM `import` 都不经过补丁;服务端 `/remote/<内部路径>` 才是覆盖全资源类型的正式通道。
|
|
565
|
+
- **安全与兼容**:不新增路由、不改 `admitRoute`、不公开任何静态资源;`/remote` 门禁
|
|
566
|
+
仍要求已配对设备(其设备 cookie 同源携带),转发到回环后本插件的权限校验照常执行;
|
|
567
|
+
本地与桌面入口保持 `/edrv/*` 原样,未装远程插件时行为不变。
|
|
568
|
+
|
|
520
569
|
## 安装
|
|
521
570
|
|
|
522
571
|
官方 `dsh plugin` 方式,三选一。下面以 `web` profile 为例;Desktop 或其他命名
|
|
523
|
-
profile 请替换为实际目标,不要把示例目录当成当前运行 profile
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
**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)。以下保留历史版本事实:
|
|
528
|
-
**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)。保留以下历史版本事实:
|
|
529
|
-
**v0.21.3** 的 MCP 初始化失败结果与安全收尾解耦:已进入 startup 的调用者在失败或截止时间到达时及时收到拒绝,不再等待旧资源收尾;旧 work/close 未确认完成前仍占冷启动名额、阻止同 key 重建,确认收尾后才开始冷却。首次偶发超时根因仍未知,排队和其他屏障仍可能无界;本版当前 Host/GUI 未部署未验证,用户仅本批接受官方实装隔离模块与 JS 套件替代验收,见 [0.21.3 发布说明](docs/release-0.21.3.md)。官方 bridge 隔离 fixture 同步迁移到当前公开 native 执行器及批调用契约,不代表生产执行器故障修复。以下为历史版本事实,不代表本版现场验收:
|
|
530
|
-
**v0.21.2** 的新版 DSH 会话 Controller 与 MCP 公开工具目录适配:任务发送按目标会话持有生命周期,受理不明时不跨通道重发;文件范围引用的剪贴板与降级文本保留行区间;MCP 初始化失败增加脱敏持久化诊断。当前 Web Host 已完成真实 CodeGraph 调用,但首次连接偶发超时根因尚未证实,不宣称已修复,见 [0.21.2 发布说明](docs/release-0.21.2.md)。保留以下历史版本能力与验收边界:
|
|
531
|
-
**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 或更旧版本升级还须阅读
|
|
532
|
-
[0.14.3 数据迁移与回退说明](docs/release-0.14.3.md)。
|
|
572
|
+
profile 请替换为实际目标,不要把示例目录当成当前运行 profile。
|
|
573
|
+
|
|
574
|
+
> **升级须知**:近期版本的修复要点、验收缺口与回退边界见[更新日志](#更新日志);
|
|
575
|
+
> 从 0.14.2 或更旧版本升级还须阅读[0.14.3 数据迁移与回退说明](docs/release-0.14.3.md)。
|
|
533
576
|
|
|
534
577
|
```bash
|
|
535
578
|
# ① Git 安装(clone + prepare 构建;推荐打固定 tag)
|
|
536
|
-
dsh plugin --profile web add github:Lenonss/DSH_VsCodeMode#v0.
|
|
579
|
+
dsh plugin --profile web add github:Lenonss/DSH_VsCodeMode#v0.25.0
|
|
537
580
|
|
|
538
581
|
# ② npm 注册表(发布到 npm 后)
|
|
539
|
-
dsh plugin --profile web add dsh-vscode-mode@0.
|
|
582
|
+
dsh plugin --profile web add dsh-vscode-mode@0.25.0
|
|
540
583
|
|
|
541
584
|
# ③ GitHub Release tgz 直装(Release asset 可用后)
|
|
542
|
-
dsh plugin --profile web add https://github.com/Lenonss/DSH_VsCodeMode/releases/download/v0.
|
|
585
|
+
dsh plugin --profile web add https://github.com/Lenonss/DSH_VsCodeMode/releases/download/v0.25.0/dsh-vscode-mode-0.25.0.tgz
|
|
543
586
|
```
|
|
544
587
|
|
|
545
588
|
> **DSH 版本政策(0.17.0 起)**:六项 DSH peer 仍统一声明为 `*`,另以
|
|
@@ -666,15 +709,29 @@ v0.13.1 起插件不再自建录键界面(原独立「快捷键」设置页与
|
|
|
666
709
|
|
|
667
710
|
## 截图
|
|
668
711
|
|
|
669
|
-
|
|
712
|
+
> 以下截图取自 v0.23.5 的真实运行界面(DSH Web GUI + dsh-vscode-mode 右侧栏)。
|
|
713
|
+
|
|
714
|
+
### 同屏工作台
|
|
670
715
|
|
|
671
|
-
|
|
672
|
-
> 与中央 AI 对话同屏;差异条统一挂在对话输入框上方的原生 dock(编辑器未打开 =
|
|
673
|
-
> 「差异 N 个文件 · 查看下一个」,打开后 = 完整 Keep / Undo 操作条)。
|
|
716
|
+

|
|
674
717
|
|
|
675
|
-
|
|
718
|
+
> AI 对话(中央)与 Monaco 文件编辑器(右侧官方 Sidebar)同屏;页签带差异角标,
|
|
719
|
+
> 底部原生 dock 汇总「差异 N 个文件」并提供 Keep All / Undo All。编辑器打开时
|
|
720
|
+
> 面板区可收起(`Ctrl+B` 切换,图标列常显),把宽度全部让给代码。
|
|
676
721
|
|
|
677
|
-
|
|
722
|
+
### 命令面板
|
|
723
|
+
|
|
724
|
+

|
|
725
|
+
|
|
726
|
+
> `Ctrl+Shift+P` 打开命令面板,命令按类别分组并支持模糊搜索;命令既可来自扩展清单
|
|
727
|
+
> 注册,也可由插件通过 `edrv.executeCommand` 编程调用。
|
|
728
|
+
|
|
729
|
+
### 差异审查
|
|
730
|
+
|
|
731
|
+

|
|
732
|
+
|
|
733
|
+
> 资源管理器展开工作区文件树(带差异角标),编辑器用行内红绿高亮展示 Agent 改动,
|
|
734
|
+
> 底部 dock 可逐文件切换、Keep / Undo,并提示当前记录还有几个待审文件。
|
|
678
735
|
|
|
679
736
|
## 开发
|
|
680
737
|
|
|
@@ -720,7 +777,7 @@ Desktop 应沿用当前 `dsh-app:` 应用上下文,不拼接固定 `localhost`
|
|
|
720
777
|
```
|
|
721
778
|
src/
|
|
722
779
|
├── index.ts Host 入口:name/inject/apply(薄装配,含兼容性报告启动日志)
|
|
723
|
-
├── shared/ ★ 双面契约(禁 node/react):types/rpc/compat/mcp
|
|
780
|
+
├── shared/ ★ 双面契约(禁 node/react):types/rpc/compat/mcp + remoteChannel(远程通道前缀)
|
|
724
781
|
├── compat.ts ★ Host 兼容层:外部插件探测、路由/重复装配护栏、兼容性报告
|
|
725
782
|
├── devForm.ts Host 开发形态管理:link:/junction 切换(RPC vscode.devForm*)
|
|
726
783
|
├── model.ts Host 纯域逻辑(可单测):normalize/markDecision/summary/批次/归档
|
|
@@ -875,12 +932,53 @@ Keep All / Undo All 却是亮的。修复:单文件 Keep / Undo 覆盖冲突
|
|
|
875
932
|
技能名必须 kebab-case + `dsh-vscodemode-` 前缀(下划线非法),frontmatter 用
|
|
876
933
|
官方字段名(见[特性 12](#12-插件自带技能组v033))。
|
|
877
934
|
|
|
935
|
+
**8. 远程访问时文件管理器报「DSH 拒绝了当前页面的访问」、编辑器报「Monaco loader 加载失败」**
|
|
936
|
+
|
|
937
|
+
根因:宿主的 `/edrv/*` 路由准入走 `connection.requestRejection()`,其中 **Host 围栏
|
|
938
|
+
(`isTrustedApiRequest`)先于任何登录态校验**——只放行 loopback / 监听 bind IP /
|
|
939
|
+
声明过的 `trustedHosts`。手机、平板或隧道域名访问时 `Host` 既不是 loopback 也不在
|
|
940
|
+
白名单,因此**登录态再有效也一律 403**(`401` 才是登录失效)。远程访问插件
|
|
941
|
+
(`@linxin666/dsh-remote-web-ui`)只把 `/api/`、`/sidebar/`、`/git/`、`/pet/` 改写到
|
|
942
|
+
它自己的 `/remote` 通道,`/edrv/` 不在其中,于是 RPC、Monaco 的 loader/AMD 模块/CSS/
|
|
943
|
+
字体/Worker、pdf.js、预览图片全部直连宿主被拒。
|
|
944
|
+
|
|
945
|
+
修复(**纯客户端**,宿主路由与鉴权零改动):远程通道在 `<head>` 解析期会
|
|
946
|
+
安装 `window.__DSH_REMOTE_CHANNEL_BOOT__` 座位对象;检测到它时,插件把所有内部地址
|
|
947
|
+
(`/edrv/rpc`、`/edrv/vendor/*`、`/edrv/assets/*`)**统一前缀成 `/remote/edrv/...`**,
|
|
948
|
+
由远程插件的服务端 catch-all 代理回环转发——该代理带同源设备 cookie 并换用进程内凭据
|
|
949
|
+
重发到 `127.0.0.1`,于是我们的 Host 围栏与登录校验**照常执行且通过**;任何子资源类型
|
|
950
|
+
(`<link>`、CSS `url()`、`new Worker`、ESM `import`)都覆盖,不依赖主线程 fetch 补丁。
|
|
951
|
+
本地页面、桌面 `dsh-app://`、未装远程插件时前缀为空,行为与之前完全一致。
|
|
952
|
+
|
|
953
|
+
- 未做也不建议:把所有 `/edrv/` 硬改成 `/api/edrv/`(补丁不覆盖 `link.href`/Worker/模块
|
|
954
|
+
import,会留下半成品);公开 vendor 路由;要求手工配 `trustedHosts`。
|
|
955
|
+
- 诊断:加载失败会先 HEAD 探测真实状态码再给结论——403 指「宿主拒绝了当前页面」、
|
|
956
|
+
401 指登录态失效、404 指资源缺失、0 指请求没到宿主;远程通道 403 若是设备未配对,
|
|
957
|
+
会直接提示「远程访问设备尚未配对」。
|
|
958
|
+
|
|
878
959
|
## 更新日志
|
|
879
960
|
|
|
880
961
|
完整变更见 [GitHub Releases](https://github.com/Lenonss/DSH_VsCodeMode/releases)。
|
|
881
|
-
近期关键版本:
|
|
882
962
|
|
|
883
|
-
|
|
963
|
+
| 版本 | 要点 |
|
|
964
|
+
| --- | --- |
|
|
965
|
+
| v0.25.0 | 资源管理器右键「下载到本机」:远程访问时把工作区文件拉回浏览器所在机器 |
|
|
966
|
+
| v0.24.0 | 经第三方远程访问插件时,文件管理器与 Monaco 恢复可用;加载失败提示按状态区分 |
|
|
967
|
+
| v0.23.5 | 同一文件不再算成两条差异;新建文件按整文件新增渲染 |
|
|
968
|
+
| v0.23.4 | 计划卡「查看全文」直通编辑器,不再闪一下再关 |
|
|
969
|
+
| v0.23.3 | 已删除文件的差异条目不再卡死;重启后不再成串「采集不完整」 |
|
|
970
|
+
| v0.23.2 | 桌面端 Keep 点了没反应的问题修复 |
|
|
971
|
+
| v0.23.1 | Keep All / Undo All 在待审超过一页时不再中止 |
|
|
972
|
+
| v0.23.0 | 快捷菜单:可拖动悬浮按钮 + 自定义菜单树 |
|
|
973
|
+
|
|
974
|
+
<details>
|
|
975
|
+
<summary>完整版本记录(v0.25.0 → v0.1.5x,点击展开)</summary>
|
|
976
|
+
|
|
977
|
+
- **v0.25.0**:新增远程下载——经远程访问插件打开 DSH 时,工作区文件原本只能到远端机器上自己下载再传回,现在资源管理器右键菜单新增「下载到本机」(仅远程访问页可见,本机回环不出现):文件右键直接下载原文件;文件夹与根空白区弹出确认框,按需懒加载展开目录树、逐级勾选文件后逐个下载原文件(不打包)。取字节复用既有链路(`edrv.readBinary` 二进制直出,远程代理剥掉 `x-edrv-*` 时自动回落 `edrv.read` 的 base64 分支),点选的文件名与远端一致,超过 32MB 的文件在弹窗内标明并禁用、不静默失败;确认框复用 `ModalShell`(自动满足 `data-edrv-view` 浮层契约与 z-index 阶梯),目录整行可展开、点文件名也能勾选、加载失败行带重试。可见性判据与 v0.24.0 的远程通道同源(`src/shared/remoteChannel.ts` 新增 `isRemoteChannel()`,即 `channelPrefix()` 非空),非远程页面完全不出现该条目、打开菜单也不发请求。不新增 host 路由、不改鉴权、不动既有导出实现。验证:typecheck 0 error;全量 287 文件、3715 通过 + 22 跳过;`node --test tests/nativeOpen.test.mjs` 9/9;build 四 bundle 通过;本机 GUI 注入远程座位后冒烟:菜单出现且位置正确、单文件下载落盘名正确、根/文件夹弹窗展开 105 行、单选 1 / 全选已展开 82 / 清空 0、勾选 2 个文件逐个下载成功(`edrv.readBinary` ×2),干净刷新后控制台无新增报错;**真实远程设备(真插件 + 真配对)未验收,缺口保留**。见 [0.25.0 发布说明](docs/release-0.25.0.md)。
|
|
978
|
+
|
|
979
|
+
- **v0.24.0**:修复经第三方远程访问插件(如 `@linxin666/dsh-remote-web-ui`)访问 DSH Web GUI 时,文件管理器报「DSH 拒绝了当前页面的访问」、编辑器报「Monaco loader 加载失败」。根因在宿主准入顺序:`connection.requestRejection()` 先用 `isTrustedApiRequest` 判 Host/Origin,不属于回环、监听地址或 `trustedHosts` 就**直接 403**,根本不看登录态(401 才是认证失败),而本插件的 `/edrv/rpc` 与 `/edrv/vendor/**` 都不在远程插件的改写白名单里,于是 RPC、Monaco 的脚本/CSS/字体/Worker、pdf.js 模块 import 与角标图片全部直连宿主被拒。现按远程通道选路径前缀:`window.__DSH_REMOTE_CHANNEL_BOOT__` 存在(远程插件在 `<head>` 解析期安装的座位对象)时,所有插件内部路径改挂其已接管的 `/remote` catch-all(`/remote/edrv/...`),本地与桌面入口保持 `/edrv/...` 原样。新增 `src/shared/remoteChannel.ts`(`channelPrefix` / `transportPath` / `transportUrl`,仍经 `appUrl` 继承应用基址与 `dsh-app:`),RPC、二进制预览、Monaco 基址、pdf.js 基址与角标图片统一走它;**服务端零改动**,不新增路由、不取消鉴权、不读也不写任何凭据,`/remote` 门禁仍要求已配对设备。另新增 `src/client/loadFailure.ts`:加载失败先 HEAD 探测真实状态,403(Host 围栏)/401(登录失效)/404(资源或路由缺失)/0(请求未到达宿主)分别给不同提示,且只带 pathname 与状态码;设备未配对(403 `code:'unpaired'`)直接提示去配对,不再把所有 Monaco 失败都说成「检查资源是否完整」。验证:typecheck 0 error;全量 284 文件、3691 通过 + 22 跳过;`node --test tests/nativeOpen.test.mjs` 9/9;build 四 bundle 通过;本机 GUI 全链 200 并确认无 cookie 仍 401;远程通道用本地回环代理复刻转发语义后,138/138 请求落 `/remote/edrv/…`、目录/读/写/保存与 Monaco+Worker 全部通;**真机 + 真插件的配对门禁与 TLS 未验收(缺口保留)**。见 [0.24.0 发布说明](docs/release-0.24.0.md)。
|
|
980
|
+
- **v0.23.5**:修复差异栏把同一文件算成两条(差异文件数偏大)。待审条目存的是写入时的相对路径,官方导航用绝对身份,而 `mergedPage()` 与 `diffSummary` 的去重都只按 path 建覆盖集,相对路径的待审行压不掉绝对身份的官方行,于是同一文件同时留下待审行与官方汇总行;现两侧覆盖集都补入条目身份(与官方 identity 同源)。另修复本会话新建的文件被渲染成一堆修改块:累计基线保留「最早内容」,新建文件首次采集时磁盘已有会话自己的中间产物,基线因此非空,「新增 516 行」被切成若干 `-`/`+` 混合块,与官方整文件新增(`before=false`、`oldLines=0`)口径相反;现按每个文件在该会话内最早的官方记录判定整文件新增,命中时待审侧基线置空,列表与详情只出一块全加差异、增删计数等于整文件行数,`addedFiles()` 查询失败则回退旧口径。验证:typecheck 0 error;全量单测通过;`npm run build` 通过;本版未做 GUI 点按验收(缺口保留)。见 [0.23.5 发布说明](docs/release-0.23.5.md)。
|
|
981
|
+
- **v0.23.4**:修复桌面端点计划卡「查看全文」会先闪开一页官方计划预览、随即自动关闭。根因:官方卡片走 `ctx.sidebarRight.openResource(planAddress(callId))`,而本插件以 extension 优先级认领了 `dsh-resource://plan/**` 与 `dsh-resource://plan-review/**`,于是侧栏先按本插件类型建出一个页签(正文「正在打开计划预览…」),挂载后才把计划转进「文件编辑」、再把这个页签关掉——用户看到的就是这次建而即关。现由新增 `src/client/planDirect.ts` 在装配期包装 `sidebarRight.openResource`:只接管「2 段计划地址 + 会话为在屏会话」,正文依次取回顾卡片的 `params.planReview`、插件侧地址→正文缓存、可选 `resources.source()` 资源流(上限 1.5s),拿到正文后经 `requestOpen(..., { preview: true })` 直通本插件编辑器的只读计划页签,不再创建侧栏页签;非计划地址、跨会话与 subagent 5 段地址、正文不可得、编辑器 5s 未回执、以及服务对象只读导致包装赋值失败,一律回落原生 `openResource`,原「认领 + 挂载后转移」链路保留为后备。`openReceipt` 新增可选 `timeoutMs`,`planState` 新增有界(64 条)地址→正文缓存并由 live `exit_plan_mode` 写入。验证:typecheck 0 error;`tests/planDirect.test.ts`(新增 9 例)、`tests/planBridge.test.ts`(13)、`tests/planState.test.ts`(10)、`tests/openReceipt.test.ts`(9)四套 41/41;`npm run build` 双 bundle 通过(含客户端产物完整性校验);浏览器确认新 bundle 已加载且 Console 无「计划直通装配失败」;GUI 点按由用户在本机 Web 端手动复验后发布。见 [发布说明](docs/release-0.23.4.md)。
|
|
884
982
|
- **v0.23.3**:修复 issue #13(已删除文件的差异条目把人卡死)与 #12(重启后成串「采集不完整」)。①文件在磁盘上被删掉时,客户端申请整文件删除预览被「已有官方审查记录」拒绝,而拒绝只是一条普通 `Error`,于是落到通用加载失败分支——「文件加载失败:…」+ 进度钉在 0%、重试同错、标签页关不掉;`edrv.review.detail` 还把 Undo 不可用解释成「缺少可验证的原始字节」,而真实原因是文件已不在。现缺失文件预览的可预期拒绝带稳定码(`official-covered` / `official-decided` / `no-records` / `no-evidence` / `too-large`),客户端据此显示「文件已在磁盘删除(· 有官方待审改动)」终态:标题 + 原因 + 重试 / 关闭标签页,不再画 0% 进度条;官方待审记录在磁盘已删除时给出「Keep 按删除结案、Undo 需要读写该文件」的准确原因(Keep 语义不变,仍只写共享审查库),记录都已结案时提示可直接关闭;`!review` 的磁盘状态抖动改为最多重读 2 次后给终态,消除缺失↔重现的无限递归。v0.22.0 起 `hasOfficial()` 已用 `typeof path !== 'string'` 守卫堵掉把不透明 FsTarget 绑进 SQL 导致的 `Unknown named parameter 'targetKey'`,本版不再复现。②官方 `workspace/changes` 的 summary 只存在宿主内存里,插件启动补采原先无条件把历史事件全部入队,重启后每一轮都必然抛「summary 已失效或尚不可用」并写成不可修复的 `gap`(面板成串「轮次 N 采集不完整」);现补采先 `summary()` 探测再入队,失效事件只记一条汇总日志。验证:typecheck 与基线同为 37 个既有错误(`fflate/browser` 依赖缺失)、零新增;定向单测 111/111(含新增 `tests/deletedFileReview.test.ts` 5 例与 `tests/officialBackfill.test.ts` 2 例)、EditorView 相关 82/82;`npm run build` 四个 bundle 通过。见 [发布说明](docs/release-0.23.3.md)。
|
|
885
983
|
- **v0.23.2**:修复 Keep 在非活跃端(桌面端)点了没反应,两处成因。①`edrv.review.decide` 原先一律要求本端活跃会话,而能力位只按审查库推导,会话在另一实例时按钮亮着、点击后抛错被兜底成 HTTP 500。现按写入副作用区分:官方记录 Keep 只写共享审查库(`BEGIN IMMEDIATE` + 幂等键 + 版本 CAS),冷端放行;官方 Undo(校验证据并写回源文件)与待审投影条目(本机 JSON 无跨进程锁)仍限活跃端,返回可读跨端原因而非 500;详情新增 `capability.live`,冷端禁用 Undo 并说明、Keep 提示补「写入共享审查库,仍可执行」。②已结算待审投影的 `capability.keep` 恒为假,却因排在 `items[0]`、同路径官方待审行被历史过滤,把官方记录挤出差异栏(表现为「待审 0」+Keep 禁用+点击无反应);现 `pendingPageOf()` 剔除已结算投影,官方记录重新成为审查目标。另详情未加载时点 Keep 不再静默失败;打开文件时若某条官方记录的改动已全部不在当前文件中(无可定位差异且缓冲区干净),自动按 Keep 结案(只标记不写盘),差异栏不再显示「本记录 N 处改动均已不在当前文件中」;官方元数据首次载入期间差异栏显示 `—` 而非按历史记录报数,重启瞬间不再闪出几十条假待审。验证:typecheck 0 error、目标单测 57/57、build 通过、真实审查库探针确认首条回到官方记录且 `capability={keep:true,undo:true,live:true}`;桌面端 GUI 点按验收因重启后恢复的是另一个会话未完成,缺口保留。发布不自动部署,升级后重启 DSH 并刷新页面。见 [发布说明](docs/release-0.23.2.md)。
|
|
886
984
|
- **v0.23.1**:修复 Keep All / Undo All 在待审超过一页时必定中止——批量按钮原先复用分页接口并把每页的展示用计数当全量总数校验,官方待审 150 条时先报「待审记录在分页期间变化」或最终报「待审记录数量不完整」,实际 0 项被决策。现改为一次性完整快照(`edrv.review.list` 新增 `all: true`,服务端循环取全并与历史改动投影去重,`nextCursor: null`、`pending` 为真实总数),客户端单次取快照、校验唯一且仍待审后逐项决策;超过 2000 条明确拒绝并提示分批,途中变化仍整批中止不部分写入。差异栏浏览仍走原分页接口。本版未在重启后的 GUI 点按验证,缺口保留;发布不自动部署,升级后重启 DSH 并刷新页面。见 [发布说明](docs/release-0.23.1.md)。
|
|
@@ -1057,8 +1155,10 @@ Keep All / Undo All 却是亮的。修复:单文件 Keep / Undo 覆盖冲突
|
|
|
1057
1155
|
多选比较 / 区间 / Stop on copy / Include merged revisions / Statistics)、
|
|
1058
1156
|
并排差异(基线 / 版本间 / 与工作副本)、诊断日志查看器。
|
|
1059
1157
|
- **v0.4.x**:LSP 与 Monaco 系列修复(见[常见问题](#常见问题));外部改动自动
|
|
1060
|
-
|
|
1158
|
+
同步(v0.4.4)。
|
|
1061
1159
|
- **v0.3.x**:命令栏(v0.2.0)→ 代码片段 / 快捷引用(v0.3.0)→ 插件技能组
|
|
1062
1160
|
(v0.3.3)。
|
|
1063
1161
|
- **v0.1.5x**:官方侧边栏形态(v0.1.60 推荐)、PDF 浏览编辑(v0.1.55)、
|
|
1064
1162
|
系统集成(v0.1.53)、规则管理(v0.1.49 / 50)。
|
|
1163
|
+
|
|
1164
|
+
</details>
|