dsh-vscode-mode 0.11.0 → 0.13.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 (76) hide show
  1. package/README.md +158 -111
  2. package/assets/shell/dsh-open.cs +65 -149
  3. package/assets/shell/dsh-open.mjs +241 -0
  4. package/assets/shell/dsh-open.ps1 +28 -47
  5. package/assets/shell/dsh-open.sh +25 -66
  6. package/lib/client.js +13362 -11806
  7. package/lib/client.js.map +1 -1
  8. package/lib/index.js +4110 -2507
  9. package/lib/index.js.map +1 -1
  10. package/package.json +9 -8
  11. package/skills/dsh-vscodemode-mcp/SKILL.md +94 -132
  12. package/src/childEnv.ts +19 -0
  13. package/src/client/activePathStore.ts +28 -0
  14. package/src/client/addToConversation.ts +4 -2
  15. package/src/client/ai/inlineProvider.ts +1 -8
  16. package/src/client/commandBridge.ts +14 -42
  17. package/src/client/externalOpen.ts +40 -19
  18. package/src/client/index.ts +101 -18
  19. package/src/client/keybindings.ts +36 -73
  20. package/src/client/monaco/loader.ts +3 -1
  21. package/src/client/openFlow.ts +36 -28
  22. package/src/client/openReceipt.ts +64 -0
  23. package/src/client/panelCommands.ts +101 -0
  24. package/src/client/pdf/pdfLoader.ts +4 -2
  25. package/src/client/receiptState.ts +120 -0
  26. package/src/client/rpc.ts +30 -4
  27. package/src/client/shortcutRecorder.ts +161 -0
  28. package/src/client/shortcutsOfficial.ts +460 -0
  29. package/src/client/sidebar/panels/RulesPanel.ts +15 -11
  30. package/src/client/sidebarBridge.ts +7 -0
  31. package/src/client/ui/DiffBadge.ts +2 -1
  32. package/src/client/ui/EditorView.ts +246 -137
  33. package/src/client/ui/McpSettings.ts +10 -8
  34. package/src/client/ui/OfficialSideTab.ts +5 -2
  35. package/src/client/ui/QuickOpen.ts +16 -16
  36. package/src/client/ui/ShortcutSettings.ts +274 -0
  37. package/src/client/ui/commandCatalog.ts +39 -43
  38. package/src/client/useOpenReceipt.ts +128 -0
  39. package/src/compat.ts +5 -3
  40. package/src/dap/manager.ts +46 -13
  41. package/src/devForm.ts +252 -92
  42. package/src/externalHandoff.ts +93 -52
  43. package/src/fileOpenSettings.ts +4 -24
  44. package/src/hostImport.ts +19 -0
  45. package/src/httpGuard.ts +101 -0
  46. package/src/index.ts +106 -97
  47. package/src/integrate.ts +56 -50
  48. package/src/lsp/transport.ts +84 -127
  49. package/src/mcp.ts +58 -9
  50. package/src/mcpIsolation.ts +211 -102
  51. package/src/mcpProject.ts +220 -133
  52. package/src/mcpRuntime.ts +343 -0
  53. package/src/openBridge.ts +69 -0
  54. package/src/openInbox.ts +207 -0
  55. package/src/paths.ts +8 -5
  56. package/src/processTree.ts +63 -0
  57. package/src/reveal.ts +5 -3
  58. package/src/routes.ts +156 -154
  59. package/src/rpc.ts +14 -13
  60. package/src/rules.ts +100 -44
  61. package/src/shared/appUrl.ts +19 -0
  62. package/src/shared/externalOpen.ts +71 -0
  63. package/src/shared/integration.ts +2 -0
  64. package/src/shared/keybindings.ts +256 -0
  65. package/src/shared/mcp.ts +4 -1
  66. package/src/shared/rpc.ts +7 -4
  67. package/src/shared/rules.ts +9 -1
  68. package/src/shared/svn.ts +6 -8
  69. package/src/svnPlanTool.ts +51 -0
  70. package/src/unityBridge.ts +26 -3
  71. package/unity/com.dsh.editor/Editor/DshCodeEditor.cs +99 -203
  72. package/unity/com.dsh.editor/Editor/DshOpenWorker.cs +166 -0
  73. package/unity/com.dsh.editor/Editor/DshOpenWorker.cs.meta +2 -0
  74. package/unity/com.dsh.editor/README.md +16 -25
  75. package/unity/com.dsh.editor/package.json +2 -2
  76. package/src/client/ui/KeybindingsPanel.ts +0 -190
package/README.md CHANGED
@@ -44,8 +44,8 @@
44
44
  保存·全部关闭(`Ctrl+F4` 关当前)/ 复制路径·复制相对路径 / 在文件资源管理器
45
45
  (视图)中显示。关闭前未保存页签静默落盘;浏览器无法实现的条目(向右拆分 /
46
46
  新窗口)不提供。
47
- - **工作区搜索填充**:编辑器有选中时按 `Ctrl+Shift+F`,选中文本自动填入搜索框并
48
- 立即搜索(多行选区取首行;填入后全选,便于直接改写)。
47
+ - **工作区搜索填充**:编辑器有选中时执行「工作区搜索」(当前键位见官方快捷键目录),
48
+ 选中文本自动填入搜索框并立即搜索(多行选区取首行;填入后全选,便于直接改写)。
49
49
  - **Markdown 预览**(v0.5.3):打开 `.md` / `.markdown` 后,工具栏「预览」按钮、
50
50
  `Ctrl+Shift+V` 或命令栏「切换 Markdown 预览」切入 GFM 渲染(标题/列表/表格/代码块/
51
51
  引用/KaTeX),「以源码打开」切回编辑。渲染走官方 `MarkdownText` 原语,零新增依赖、
@@ -64,10 +64,11 @@
64
64
  命令 id 均可命中),`↑↓` 选择、`Enter` 执行、`Esc` 关闭,每行显示 命令名 /
65
65
  分类 / 当前键位;需要打开文件的命令在空编辑器时自动隐藏。
66
66
 
67
- - **单一数据源**:命令目录(`ui/commandCatalog`)同时驱动命令栏、快捷键设置页、
68
- 全局键位派发、Monaco 右键菜单——新增能力只需追加一条命令定义。
69
- - **开放注册表**:`window.__edrvCommands__` 暴露 `register()` 注册命令、
70
- `addRuntimeKeybinding()` 绑运行时键位(不落设置 schema)。
67
+ - **单一数据源**:命令目录(`ui/commandCatalog`)驱动命令栏和官方快捷键目录;
68
+ 设置 →「快捷键」可查看官方目录与编辑插件命令,绑定经 DSH 官方服务保存。旧版 DSH
69
+ 没有该服务时继续使用原有窗口按键派发,旧 `keybindings` 设置仍可生效。
70
+ - **开放注册表**:`window.__edrvCommands__` 暴露 `register()` 注册命令;插件
71
+ 不再提供独立的运行时键位注册,改用 DSH 官方 shortcuts 配置。
71
72
  - **开箱 20 条命令**:保存 / 快速打开 / 在文件浏览器中打开 / 显示所有命令 /
72
73
  切换侧边栏 / 工作区搜索 / 切换 Markdown 预览 / 后退·前进 / 上下页签 / 关闭当前页签 /
73
74
  上下编辑行 / 转到定义 / 查找引用 / 触发 AI 补全 / 配置代码片段 / 插入代码片段 /
@@ -165,8 +166,8 @@ cmaps 支持中文渲染);工具条进入注释编辑:✎ 文本框 / 🖌
165
166
  ### 9. 文件管理侧边栏(类 VSCode 活动栏 + 面板)
166
167
 
167
168
  编辑器内嵌活动栏 + 可拖拽调宽面板区;首期「资源管理器」= 懒加载目录树
168
- (展开实时读取、点文件打开、差异角标、活动文件高亮、`edrv:refresh` / 手动 ⟳、
169
- `Ctrl+B` 显隐并持久化),侧栏形态默认收起以节省面板宽度。
169
+ (展开实时读取、点文件打开、差异角标、活动文件高亮、`edrv:refresh` / 手动 ⟳,
170
+ 可通过命令栏切换显隐并持久化),侧栏形态默认收起以节省面板宽度。
170
171
 
171
172
  - 拖拽调宽下限 = 最小宽度(默认 300,设置 → VSCodeMode → 通用「编辑器」
172
173
  可调 180–560),拖拽低于最小宽度自动收起。
@@ -188,8 +189,12 @@ cmaps 支持中文渲染);工具条进入注释编辑:✎ 文本框 / 🖌
188
189
  ### 10. 规则管理(v0.1.49 / v0.1.50,参考 Codebuddy)
189
190
 
190
191
  活动栏「规则」面板,管理 Cursor / Codebuddy 式 `.mdc` 规则文件:「用户规则」
191
- (`~/.dsh/rules/`,全局生效)与「项目规则」(`<工作区>/.dsh/rules/`,随仓库
192
- 共享)双 Tab。
192
+ (当前 `DSH_HOME/rules/`,兼容系统用户主目录下的 `~/.dsh/rules/`)与「项目规则」
193
+ (`<工作区>/.dsh/rules/`,随仓库共享)双 Tab。`DSH_HOME` 未设置时默认
194
+ `~/.dsh`,两个用户目录相同则只读取一次。两处同名规则以当前 `DSH_HOME/rules/`
195
+ 为准(即使已停用也遮蔽旧规则);删除当前版本后旧目录版本会重新生效。
196
+ 新建写当前目录,编辑 / 启停 / 删除旧规则在旧目录原地进行,不自动搬迁;
197
+ 操作旧规则可能影响其他仍使用该目录的 DSH 安装。
193
198
 
194
199
  - 每条规则显示 文件名 / 相对路径 / 类型徽标(总是 = `alwaysApply`、自动 =
195
200
  `globs`、手动 = 仅索引)/ 描述;右侧常驻 编辑 / 删除 与滑动启用开关
@@ -204,8 +209,19 @@ cmaps 支持中文渲染);工具条进入注释编辑:✎ 文本框 / 🖌
204
209
  ### 11. MCP 可视化管理(设置 → VSCodeMode)
205
210
 
206
211
  子 Tab「我的 MCP」(profile 全局)+「项目 MCP」(各项目根 `.mcp.json`,
207
- 对齐 Claude Code / Cursor,随仓库共享):查看各项目连接状态 / 工具、添加
208
- (stdio / streamable-http)、刷新、启用 / 禁用、删除。工具全局生效。
212
+ 对齐 Claude Code / Cursor,随仓库共享):支持 stdio / streamable-http 的新增、
213
+ 刷新、启停、删除和运行状态查看。
214
+
215
+ - **项目作用域**(v0.13.0):工具、资源与服务器指令均按 agent 所属工作区隔离;
216
+ 跨工作区子会话不会因继承父 scope 而获得外项目 MCP。全局 MCP 保持全局可用。
217
+ - **实例与状态**:每个活动 agent、每个启用项目服务各有一个插件实例;没有活动
218
+ agent 时只保存配置(`configured`、实例数 0)。`instanceCount` 是挂载实例数,
219
+ `unverified` 表示没有公开连接状态证据,不能把 fiber ACTIVE 当成已连接。
220
+ 零工具可能是合法的纯资源服务器。
221
+ - **配置保护**:reconcile 尊重 `disabled`;读取/解析错误保留最后有效连接,
222
+ 不把不可读文件当成空配置。保存保留未知字段和未改动的脱敏凭据。
223
+
224
+ 完整配置、迁移与排错见随包 [MCP 技能](skills/dsh-vscodemode-mcp/SKILL.md)。
209
225
 
210
226
  ### 12. 插件自带技能组(v0.3.3)
211
227
 
@@ -269,85 +285,67 @@ DSH 启动回放 `~/.dsh/sessions` 全部会话(V8 展开约 10×,可能 OOM
269
285
  选择重新加载或用编辑器内容覆盖;冲突未处理期间自动保存被抑制。
270
286
  - 老 host(无该 RPC)自动降级为无同步、无护栏,不报错。
271
287
 
272
- ### 15. 系统集成(v0.1.53)
273
-
274
- 设置 → VSCodeMode → 通用 →「系统集成」卡片,两项能力:
275
-
276
- **① 文件管理器右键菜单**——一键把「在 DSH 文件编辑中打开」注册进系统:
277
- Windows 资源管理器三类入口 / Linux Nautilus + Dolphin / macOS Automator 配方;
278
- 插件卸载自动清理、更新自动恢复;点击经 launcher 打开默认浏览器深链,编辑器
279
- 直接打开所选文件;DSH 未运行时弹提示。
288
+ ### 15. 系统集成(v0.1.53;v0.13.0 更新打开链路)
280
289
 
281
- **② Unity 外部脚本编辑器**——内置 UPM 包 `com.dsh.editor`(参照
282
- com.unity.ide.traeCN 机制实现 `IExternalEditor` 虚拟安装,无需本地 exe),
283
- 设置页一键安装 / 更新为 Unity 内嵌包(复制到 `<项目>/Packages/com.dsh.editor`,
284
- 自动发现、不改 manifest.json);Unity Preferences → External Tools 选
285
- 「DSH 文件编辑」后,双击脚本 / Console 报错跳转即在浏览器打开对应文件与行列。
290
+ 设置 → VSCodeMode → 通用 →「系统集成」卡片提供文件管理器右键菜单与 Unity
291
+ 外部脚本编辑器。两者现在共用按 profile 隔离的本机私有 OPEN 请求/ACK 通道,
292
+ 无需向 launcher 或 Unity 提供 Host Cookie,也不依赖固定 HTTP 端口。
286
293
 
287
- **深链契约**(launcher / Unity 包 / client 三端共用):
288
-
289
- ```
290
- http://127.0.0.1:3080/?edrvOpen=1&edrvPaths=<enc1>[,<enc2>…][&edrvLine=N][&edrvColumn=M]
291
- ```
294
+ **① 文件管理器右键菜单**
292
295
 
293
- 每段路径独立 `encodeURIComponent`、逗号连接;client 解析后按下方「打开规则」
294
- 路由,处理完剥离参数防刷新重开,跨源 referrer 守卫防外部网页诱导。
296
+ - Windows 提供文件、目录、目录空白处三类入口;Linux 提供 Nautilus 脚本与
297
+ Dolphin 服务菜单;macOS 提供 Finder Automator 快速操作配方。
298
+ - **注册和移除必须由用户在设置页显式操作**。插件 reload/更新只升级已注册的
299
+ launcher 文件及配置,保留所选 profile;不会自动重注册或撤销系统菜单。
300
+ 卸载插件前如需清理菜单,请先点「移除注册」。
301
+ - Windows 优先使用编译后的 C# launcher,缺少编译器时回退 PowerShell;
302
+ POSIX 使用 Bash launcher。三个入口统一调用随包 `dsh-open.mjs` producer,
303
+ 从配置读取所选 profile、私有收件箱和运行程序。
304
+ - 已打开的客户端可以领取请求并就地打开。需要唤起时,Desktop 使用官方
305
+ `dsh://open` 入口,Web 使用用户选定的完整应用地址(含实际端口和部署子路径)。
306
+ **唤起窗口或领取请求本身不代表打开成功**。
295
307
 
296
- **打开规则(智能路由)**——按首路径类型分派(其余路径:文件进编辑器、
297
- 文件夹补引用):
308
+ **打开与回执规则**
298
309
 
299
- | 首路径 | 行为 |
310
+ | 阶段 | 行为 |
300
311
  |---|---|
301
- | 文件夹,在已注册工作区内 | 弹窗二选一:**使用最近的工作区**(跳转 + 新增对话 + 文件夹引用 + 编辑页)/ **新建工作区**;取消则中止 |
302
- | 文件夹,不在任何工作区 | 不弹窗,以该文件夹为根注册新工作区 + 新增对话 + 引用 + 编辑页 |
303
- | 文件,在已注册工作区内 | 有会话 → 打开最近对话 + 编辑器展开(行列透传);无会话 → 新建对话 + 文件引用 + 展开 |
304
- | 文件,不在任何工作区 | 打开最近一次对话 + 编辑器展开 |
305
- | 文件,无任何工作区 / 对话 | 以文件父目录注册工作区 + 新建对话 + 引用 + 编辑器打开 |
306
-
307
- **页面复用**:launcher 先向 host 投递待打开请求(`edrv.external.handoff`)——
308
- 已打开的 DSH 页面(3s 移交轮询)就地执行打开规则,**不重复开新页**;2s 未领取
309
- (页面刚关 / 后台节流)或无活跃页面时回退打开新页(URL 深链)。时序:等待会话 /
310
- 工作区列表就绪(≤15s);`sessions.create / workspaces.create` 为 DSH 官方服务
311
- 方法;引用插入轮询输入门面就绪(忙态自动降级纯文本)。
312
-
313
- **各平台注册细节**:
314
-
315
- - **Windows**:`assets/shell/dsh-open.cs` 复制到 `~/.dsh/dsh-vscode-mode/shell/`
316
- 并用 .NET Framework 4.x `csc.exe` 编译为 `dsh-open.exe`(WinExe 无闪窗;
317
- csc 缺失自动降级 `dsh-open.ps1`);写三类 HKCU 键
318
- `HKCU\Software\Classes\{\*,Directory,Directory\Background}\shell\DSHEditor`
319
- (显示名 + Icon `dsh-whale.ico` + command,首次注册前 `reg export` 备份)。
320
- 全部 reg/csc 调用走 host `subprocess.spawn` argv 数组(stdio `inherit`,
321
- 受管环境禁管道),无 shell 插值。
322
- - **Linux**(纯文件写入,无需管理员):Nautilus 右键脚本(`NAUTILUS_SCRIPT_SELECTED_FILE_PATHS`
323
- 多选)+ KDE Dolphin 服务菜单(`%F` 多选,兼容旧 `kservices5/ServiceMenus/`)。
324
- - **macOS**:Finder 菜单不做自动生成——设置页「复制 Automator 配方」按步骤创建
325
- 快速操作(约 1 分钟,脚本指向 `shell/dsh-open.sh`),创建后面板自动检测显示 ✓;
326
- 「移除注册」仅删除引用本插件 launcher 的 workflow。
327
- - **行为**:launcher 读同目录 `dsh-open.ini`(`base=` 深链基址,注册时按设置写入)
328
- → 探测端口(Windows TcpClient / POSIX curl,1s)→ 未运行弹提示(MessageBox /
329
- osascript / notify-send / zenity)→ 路径编码合并为一个 URL 交给默认浏览器
330
- (POSIX 侧 `LC_ALL=C` 逐字节 percent-encode,中文 / 空格 / 任意字符安全);
331
- 改「DSH 服务地址」后点「注册」刷新 ini。
332
- - **生命周期**:注册成功写 marker(`shell/registered.json`)→ 插件卸载 / reload
333
- 自动清理注册痕迹,重启 / 更新后自动恢复(开发态反复 reload 不丢注册);点
334
- 「移除注册」删除 marker,此后不再自动恢复;强杀进程跳过清理时残留键由下一次
335
- 启动的幂等重写与「移除注册」兜底。
336
- - RPC:`edrv.integration.status / register / unregister`。
337
-
338
- **Unity 包细节**:包源随插件分发于 `unity/com.dsh.editor/`(`package.json` +
339
- `Editor/DshCodeEditor.cs` + asmdef,`"unity": "2019.4"` 基线;虚拟安装
340
- `dsh-editor://vscode-mode`,`OpenProject` → `Application.OpenURL(深链)`,不生成
341
- csproj);**打开过滤**:仅文本 / 代码类扩展名(白名单 + `EditorSettings.projectGenerationUserExtensions`
342
- 用户自定义扩展)交 DSH 打开,其余返回 `false` 交还 Unity 原生(双击预制体进
343
- 预制体模式、双击场景开场景),对齐官方 `DefaultExternalCodeEditor` 行为;
344
- 安装 / 更新 = 整目录复制 / 替换为 `<项目>/Packages/com.dsh.editor`(目标已存在
345
- 且 name 不是 `com.dsh.editor` 时拒绝覆盖),Unity 已打开时切回窗口自动刷新;
346
- 卸载 = 删除该目录;手动兜底:Package Manager → Add package from disk 选
347
- `unity/com.dsh.editor`;登记清单存 `~/.dsh/dsh-vscode-mode/unity-projects.json`;
348
- RPC:`edrv.unity.list / add / remove / install`。
349
- 安全说明:深链可在编辑器中查看任意绝对路径文件(与用户手动打开等价);保存仍
350
- 受会话沙箱 `policyOf` 约束,工作区外保存被拒是预期行为。
312
+ | 投递 | producer 将带请求 id、目标 profile、路径和可选行列的 OPEN 请求写入当前用户私有队列 |
313
+ | 领取 | 客户端领取带 lease 的请求,按工作区/会话路由到文件编辑器 |
314
+ | 确认 | 只有目标路径对应的实际 Monaco model 或预览内容成功就绪,才提交匹配请求与 lease 的成功 ACK |
315
+ | 失败/超时 | 返回失败或未确认;不会把一个已展开的空页签视为成功 |
316
+
317
+ 请求按 profile 与请求身份匹配,队列内容受类型、大小、时效和本机权限检查约束;
318
+ producer 只承担「打开」请求,不是通用 RPC 代理。旧 `edrvOpen/edrvPaths` URL
319
+ 参数仍作为兼容入口保留,已不是 launcher 和 Unity 的当前主链。
320
+
321
+ 文件与目录仍按现有工作区路由:工作区内文件进入相应会话;无会话时可创建会话;
322
+ 目录根据是否位于已注册工作区内选择复用或新建。选择取消会结束该请求。行列定位
323
+ 与真正加载的目标文件绑定,避免切换文件时把其他 model 的内容当成完成证据。
324
+
325
+ **② Unity 外部脚本编辑器(内嵌包 `com.dsh.editor` 0.3.0)**
326
+
327
+ 1. 在设置卡片中选择 Unity 项目,执行安装/更新,将随包 UPM 目录复制到
328
+ `<项目>/Packages/com.dsh.editor`;无需修改项目 manifest。
329
+ 2. 首次安装会自动准备当前 profile 的独立 bridge,并写入本机项目提示
330
+ `<项目>/UserSettings/dsh-editor.ini`;**无需先注册系统右键菜单**。
331
+ 3. 在 Unity Preferences → External Tools 选择「DSH 文件编辑」。双击文本脚本、
332
+ Console 报错行列或使用打开项目入口,会通过统一 producer 等待 ACK。
333
+ 4. Unity 的「DSH 桥接配置」可填写绝对路径覆盖自动选择。优先级为:UI 显式覆盖 →
334
+ 项目 UserSettings 提示 → 提示缺失时的旧 shell 配置回退;损坏提示会报错,
335
+ 不会静默切换到另一个 profile。
336
+
337
+ UserSettings 提示包含本机 profile 路径,不适合作为团队共享配置。换机器或切换
338
+ profile 后应重新安装/更新桥接,或在 Unity UI 中显式指定对应 bridge 配置。
339
+
340
+ Unity 包保留文本/代码扩展名白名单与用户自定义扩展;Prefab、场景等资产仍交还
341
+ Unity 原生处理,不生成 csproj。Unity API 与 EditorPrefs 在主线程使用;后台任务
342
+ 负责 producer 与 IO。安装目标已有同名目录但不是本包时拒绝覆盖,卸载仅删除该包目录。
343
+
344
+ - 管理 RPC:`edrv.integration.status/register/unregister`、`edrv.unity.list/add/remove/install`。
345
+ - 保存文件仍遵循当前会话沙箱策略;外部打开成功不扩大文件写入权限。
346
+ - 当前验证边界:Windows 官方 Desktop 已完成隔离启动与侧栏挂载等检查;Unity
347
+ 仅有 C# 编译桩与 9 项 hint 探针,尚未执行真实 Unity EditMode。Linux/macOS
348
+ 尚无本轮现场验证。具体完成项与待验收项见 [0.13 发布说明](docs/release-0.13.0.md)。
351
349
 
352
350
  ### 16. SVN 集成(v0.5.0)
353
351
 
@@ -427,17 +425,19 @@ TortoiseSVN(`TortoiseProc.exe`)仅作 Windows 过渡增强:自研能力覆
427
425
 
428
426
  ## 安装
429
427
 
430
- 官方 `dsh plugin` 方式,三选一:
428
+ 官方 `dsh plugin` 方式,三选一。下面以 `web` profile 为例;Desktop 或其他命名
429
+ profile 请替换为实际目标,不要把示例目录当成当前运行 profile。升级前可阅读
430
+ [0.13.0 发布与迁移说明](docs/release-0.13.0.md)。
431
431
 
432
432
  ```bash
433
433
  # ① Git 安装(clone + prepare 构建;推荐打固定 tag)
434
- dsh plugin --profile web add github:Lenonss/DSH_VsCodeMode#v0.11.0
434
+ dsh plugin --profile web add github:Lenonss/DSH_VsCodeMode#v0.13.0
435
435
 
436
436
  # ② npm 注册表(发布到 npm 后)
437
437
  dsh plugin --profile web add dsh-vscode-mode
438
438
 
439
439
  # ③ GitHub Release tgz 直装
440
- dsh plugin --profile web add https://github.com/Lenonss/DSH_VsCodeMode/releases/download/v0.11.0/dsh-vscode-mode-0.11.0.tgz
440
+ dsh plugin --profile web add https://github.com/Lenonss/DSH_VsCodeMode/releases/download/v0.13.0/dsh-vscode-mode-0.13.0.tgz
441
441
  ```
442
442
 
443
443
  > `dsh plugin ...` 是 pnpm 转发器:git 安装会克隆仓库、执行该包 `prepare` 脚本
@@ -474,23 +474,26 @@ bundles 层后重启 DSH 即自动把插件行挂进 loader 树。**不要**再
474
474
 
475
475
  - **文件树**:资源管理器面板点击打开;**文件链接**(DSH 0.1.5+):聊天 / 文件树
476
476
  里的文件链接直达右侧栏编辑器(含行号定位)。
477
- - **快速打开**:`Ctrl+P`(QuickOpen)——`↑↓` 选择、`Enter` 打开高亮项、
478
- `Esc` 关闭,鼠标悬停与高亮同步。
477
+ - **快速打开**:执行插件 QuickOpen 命令(键位见「设置 → 快捷键」)——`↑↓` 选择、
478
+ `Enter` 打开高亮项、`Esc` 关闭,鼠标悬停与高亮同步;`Ctrl+P` 由官方文件切换使用。
479
479
  - **差异入口**:对话输入框上方 dock 的「差异 N 个文件 · 查看下一个」按钮。
480
480
 
481
481
  ### 快捷键速查
482
482
 
483
+ 以下是桌面端常见默认键位;Web / Linux 的浏览器或系统保留键可能不绑定。
484
+ 实际生效键位以「设置 → 快捷键」为准;旧版 DSH 无官方 shortcuts 时沿用原有键位。
485
+
483
486
  | 快捷键 | 功能 |
484
487
  |---|---|
485
- | `Ctrl+P` | 快速打开文件(QuickOpen) |
488
+ | `Ctrl+Alt+P`(桌面)/ `Ctrl+Alt+Shift+P`(Web Windows/macOS) | 插件快速打开文件(QuickOpen);`Ctrl+P` 由 DSH 官方文件切换使用 |
486
489
  | `Ctrl+Shift+P` / `F1` | 命令面板 |
487
490
  | `Ctrl+U` | 选中内容加为引用(Add Selection to Chat) |
488
491
  | `Ctrl+S` | 保存(另有 700ms 防抖自动保存) |
489
492
  | `Ctrl+F` / `Ctrl+G` | 查找 / 跳转行 |
490
493
  | `F12` / `Shift+F12` | 转到定义 / 查找所有引用 |
491
494
  | `Ctrl+点击` / `Ctrl+hover` | 引用导航 / 可导航标识符提示 |
492
- | `Ctrl+B` | 切换文件管理侧边栏 |
493
- | `Ctrl+Shift+F` | 工作区搜索(有选中则把选中文本填入搜索框) |
495
+ | 自定义键位 | 切换文件管理侧边栏(`Ctrl+B` 与 DSH 自身侧栏命令冲突,插件默认不绑定) |
496
+ | 以当前官方目录为准(Web 采用平台允许的组合) | 工作区搜索(有选中则填入搜索框);不保证所有平台都使用 `Ctrl+Shift+F` |
494
497
  | `Ctrl+Shift+V` | 切换 Markdown 预览(仅活动文件为 .md 时生效) |
495
498
  | `Ctrl+F4` | 关闭当前页签 |
496
499
  | `Alt+←` / `Alt+→` | 后退 / 前进(跨文件恢复焦点位置) |
@@ -523,6 +526,18 @@ bundles 层后重启 DSH 即自动把插件行挂进 loader 树。**不要**再
523
526
 
524
527
  ## 配置
525
528
 
529
+ 设置 →「快捷键」页:官方目录总览和插件快捷键录制、逐项恢复;编辑通过官方
530
+ shortcuts 服务持久化(Desktop:`userData/keybindings.json`;Web:
531
+ `localStorage` 的 `dsh.keybindings.v1`)。旧版插件 `keybindings` 配置的单候选自定义值
532
+ 按当前平台一次性尝试迁入官方存储;旧配置始终保留供其他平台及人工恢复,
533
+ 多候选、冲突、不支持或未绑定的旧值不会被部分迁入或删除。
534
+
535
+ v0.13.0 在 0.12 官方接管的基础上修正真实 `normalized` 绑定与物理 Control/Meta
536
+ 的转换;录制先进入官方 recording 状态,并在确认、取消、失败、失焦及卸载等退出
537
+ 路径收尾,避免原生快捷键拦截长期停用。首次打开命令面板/QuickOpen 等入口按当前
538
+ 会话 scope 路由,不要求编辑器先挂载。Web 工作区搜索使用官方当前平台允许的
539
+ 三修饰符组合,最终显示与冲突判断以官方目录为准。
540
+
526
541
  设置 →「VSCodeMode」页:
527
542
 
528
543
  | 分区 | 说明 |
@@ -561,21 +576,27 @@ npm pack # 产物 tgz(含 lib/assets/src/cordis.patch.yml)
561
576
 
562
577
  ### 开发形态(devForm)
563
578
 
564
- 开发 = profile 中以 `link:` 依赖 + junction 指向工作区的安装。设置 → 通用在开发
565
- 形态开启时显示「关闭开发形态」开关(切回正式版安装,重启生效);AI 后续开发时
566
- 可经 RPC 自动开启 / 关闭:
579
+ 开发形态 = 当前运行 profile 以 `link:` 依赖和链接入口指向源码目录。设置 → 通用
580
+ 可查看和切换形态;切换成功后需要重启 DSH 才能加载新的 Host 代码。
567
581
 
568
- ```bash
569
- # 读取当前形态(compat 报告亦含 devForm 字段)
570
- curl -s -X POST http://127.0.0.1:3080/edrv/rpc -H 'content-type: application/json' \
571
- -d '{"method":"vscode.devFormGet","args":{}}'
572
- # 开启开发形态(link 到工作区;path 必填,重启后生效)
573
- curl -s -X POST http://127.0.0.1:3080/edrv/rpc -H 'content-type: application/json' \
574
- -d '{"method":"vscode.devFormSet","args":{"enabled":true,"path":"D:/Work/ToolsDev/DeepSeekHarnessPlugin/packages/dsh-edit-review"}}'
575
- # 关闭开发形态(改回 ^<version> + 删 junction + pnpm install,重启后生效)
576
- curl -s -X POST http://127.0.0.1:3080/edrv/rpc -H 'content-type: application/json' \
577
- -d '{"method":"vscode.devFormSet","args":{"enabled":false}}'
578
- ```
582
+ - **定位当前 profile**:优先使用官方 `profileContext.dir`;旧宿主仅在依赖本插件的
583
+ profile 候选唯一时回退。服务信息无效或候选有歧义时拒绝切换,不猜测 `web` 目录。
584
+ - **失败恢复**:写入前备份 manifest、lockfile 和原安装入口;安装失败时恢复原内容
585
+ 与链接身份。若恢复本身失败,会保留备份位置供处理,不能宣称已经恢复成功。
586
+ - **开发目录校验**:要求绝对路径、正确包身份,且不位于被替换的 profile
587
+ `node_modules` 内;移除链接只处理链接本身,不递归删除源码。
588
+ - **运行程序**:有官方 `profileContext.packageManager` 时使用它提供的程序、参数和
589
+ 显式环境(含 Desktop 自带运行方式);旧宿主再回退 PATH。
590
+
591
+ 程序化调用继续使用插件已有 RPC,但须经当前已鉴权应用的同源通道;未携带有效
592
+ Host 身份的裸 HTTP/curl 请求不再是支持的接入方式。请求地址应保留应用子路径,
593
+ Desktop 应沿用当前 `dsh-app:` 应用上下文,不拼接固定 `localhost` 端口。
594
+
595
+ | 方法 | `args` | 行为 |
596
+ |---|---|---|
597
+ | `vscode.devFormGet` | `{}` | 读取当前形态,兼容性报告也包含 `devForm` |
598
+ | `vscode.devFormSet` | `{ "enabled": true, "path": "<源码绝对路径>" }` | 开启开发形态;按返回的 `restart` 重启 |
599
+ | `vscode.devFormSet` | `{ "enabled": false }` | 切回当前插件版本的正式依赖;按返回的 `restart` 重启 |
579
600
 
580
601
  ### 源码结构
581
602
 
@@ -623,8 +644,11 @@ pdf.js vendor + 图标 + launcher)、`skills/`(插件技能组)、`src/`
623
644
  - **持久化**:工作区旁车 `.dsh-edit-review.json`(version 2,按 cwd 分桶,写前
624
645
  合并,v1 自动迁移);归档 `.dsh-edit-review-archive.json`(按 path+batch
625
646
  合并批次,含每 hunk 决策与 before)。
626
- - **RPC**:静态包经 webServer 精确路由 `/edrv/rpc`,Client 同源 fetch,载荷形状
627
- 由 `shared/rpc` 类型化。
647
+ - **RPC 与资源路由**:`/edrv` 接口先经官方 `connection.requestRejection(req)`
648
+ 校验 Host 身份,认证能力缺失时拒绝请求。RPC 校验方法、JSON content-type、
649
+ envelope 和对象参数,同时检查 Content-Length 与实际读取字节上限;响应不缓存。
650
+ Client 按应用 document base 解析 RPC、资源与 vendor URL,保留反向代理子路径,
651
+ 支持 HTTP(S) 和 Desktop 的 `dsh-app:` 来源。
628
652
  - **批次 / 融合 / 归档**:每次新 edit/write 递增文件 batch,早于最新批次的未归档
629
653
  差异自动"融合"归档;每条差异处理完成立即单条归档;DiffLauncher「归档」页按
630
654
  批次浏览 + 回滚。
@@ -645,8 +669,15 @@ pdf.js vendor + 图标 + launcher)、`skills/`(插件技能组)、`src/`
645
669
  `client/` 加组件,其余模块零改动;`monaco/*` 是可复用的编辑器服务(资源树 /
646
670
  对比 / 诊断面板共用);`edrvSidebarPanels` 注册表承载后续面板(搜索 / 差异 /
647
671
  时间线),`edrv.listDir` 为通用目录树 API。
648
- - ⚠️ **Host 改动需重启 DSH 应用**(Node ESM 模块缓存);Client 经
649
- `dsh-client-hmr` 热重载。
672
+ - **Host 模块来源**:动态加载优先锚定运行中 DSH 的入口安装树;已解析模块的执行
673
+ 错误不会被旧开发依赖副本掩盖。本轮官方 Host 审计与现场基线是 `0.1.7-rc.2`,
674
+ 依赖声明、源码能力探测和现场验证是不同层次,详见 [版本适配矩阵](docs/version-adaptation.md)。
675
+ - **子进程环境与回收**:LSP/DAP 等共用环境清理,按变量名排除父环境中的
676
+ KEY/PASSWORD/SECRET/TOKEN 与 `DSH_*` 隐式信息;用户显式配置的环境仍会传递。
677
+ Windows 使用进程树终止,POSIX 使用独立进程组;回收是 best effort,不能保证
678
+ 清除主动脱离进程组或受系统权限限制的后代进程。
679
+ - **代码更新生效**:Host 改动需要重启 DSH;Client 需要重建产物并刷新原应用页面。
680
+ 只有对应开发构建 watcher 和 HMR 接收端同时工作时,才可依赖自动更新。
650
681
 
651
682
  ### CI(GitHub Actions)
652
683
 
@@ -732,6 +763,22 @@ Keep All / Undo All 却是亮的。修复:单文件 Keep / Undo 覆盖冲突
732
763
  完整变更见 [GitHub Releases](https://github.com/Lenonss/DSH_VsCodeMode/releases)。
733
764
  近期关键版本:
734
765
 
766
+ - **v0.13.0**:**Host 鉴权与 Desktop 适配、项目 MCP 三面隔离、外部打开回执**——
767
+ `/edrv` 路由接入官方认证与有界请求体读取,URL 保留应用子路径并支持 `dsh-app:`;
768
+ 项目 MCP 改为每 agent 挂载,隔离工具/资源/指令,新增配置态、未验证状态与实例数;
769
+ 开发形态切换使用实际 `profileContext` 并支持失败恢复;子进程环境清理与进程树
770
+ 回收收敛;在 **0.12 已有官方快捷键接管**上修复 normalized 绑定、录制收尾及
771
+ 按会话 scope 首开。C#/PowerShell/Bash launcher 与 Unity 0.3.0 共用私有
772
+ OPEN/lease ACK 链路,真正加载目标 model/预览后才确认;Unity 首装自动配置
773
+ profile bridge,无需注册 OS 菜单。迁移、部署、回滚和验证边界见
774
+ [0.13.0 发布说明](docs/release-0.13.0.md)。
775
+ - **v0.12.0**:**用户规则双目录兼容 + 官方快捷键接管**——用户规则同时读取
776
+ `DSH_HOME/rules/` 和 `~/.dsh/rules/`,同名以当前目录为准,旧规则原地管理,
777
+ 列表与提示词注入采用同一优先级;快捷键迁移到 DSH 官方 shortcuts 目录及独立设置页,
778
+ 支持跨平台默认键位、录制、冲突校验和旧配置迁移;插件 QuickOpen 改用
779
+ 桌面 `Ctrl+Alt+P` / Web Windows/macOS `Ctrl+Alt+Shift+P`(官方占用 `Ctrl+P`)。恢复插件键位只处理插件命令,
780
+ 旧键位配置为跨平台回退始终保留,多候选不做部分导入;没有官方服务的旧版 DSH
781
+ 仍使用原有键位派发。
735
782
  - **v0.11.0**:**原生 SVN 更新窗口(逐文件实时反馈)+ LSP 补全增强 + 设置文件就地打开**——① 「SVN 更新」
736
783
  从窄结果条升级为**插件内更新窗口**(`SvnUpdateDialog` + `svnUpdateJob`):任务启动窗口即出现,实时
737
784
  逐文件列表(虚拟化 + 仅贴近底部时自动跟随)、动作着色(A/U/D/G/C/E/R)、完成后汇总版本号 / 计数 /