dsh-vscode-mode 0.7.0 → 0.9.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 (60) hide show
  1. package/README.md +37 -6
  2. package/assets/icon.svg +7 -0
  3. package/cordis.patch.yml +16 -0
  4. package/lib/client.js +2804 -300
  5. package/lib/client.js.map +1 -1
  6. package/lib/index.js +1975 -191
  7. package/lib/index.js.map +1 -1
  8. package/locale/en.json +4 -0
  9. package/locale/zh.json +4 -0
  10. package/package.json +4 -2
  11. package/src/ai/inline.ts +19 -2
  12. package/src/ai/svnTriage.ts +150 -0
  13. package/src/capture.ts +225 -51
  14. package/src/client/addToConversation.ts +203 -1
  15. package/src/client/compat.ts +134 -4
  16. package/src/client/imagePreview.ts +76 -2
  17. package/src/client/index.ts +65 -36
  18. package/src/client/monaco/lsp/lspClient.ts +46 -0
  19. package/src/client/monaco/lsp/providers.ts +245 -1
  20. package/src/client/nativeOpenStore.ts +91 -0
  21. package/src/client/officialSidebar.ts +11 -45
  22. package/src/client/outline/index.ts +1 -1
  23. package/src/client/pdf/pdfPanel.ts +18 -0
  24. package/src/client/pendingNav.ts +141 -0
  25. package/src/client/settingsContext.ts +6 -4
  26. package/src/client/sidebar/panels/FileExplorer.ts +2 -15
  27. package/src/client/sidebar/panels/SvnPanel.ts +682 -72
  28. package/src/client/sidebar/panels/index.ts +1 -1
  29. package/src/client/sidebar/panels/svnListBudget.ts +58 -0
  30. package/src/client/state/records.ts +7 -1
  31. package/src/client/styles/editor.css +47 -5
  32. package/src/client/svnStatus.ts +206 -1
  33. package/src/client/svnStore.ts +6 -1
  34. package/src/client/ui/AiSettings.ts +47 -14
  35. package/src/client/ui/DiffBox.ts +1 -1
  36. package/src/client/ui/DiffLauncher.ts +6 -4
  37. package/src/client/ui/EditorView.ts +149 -22
  38. package/src/client/ui/McpSettings.ts +30 -0
  39. package/src/client/ui/PerfSettings.ts +4 -1
  40. package/src/client/ui/SvnAiPlanDialog.ts +293 -0
  41. package/src/client/ui/icons.ts +91 -0
  42. package/src/compat.ts +26 -5
  43. package/src/dshVersion.ts +2 -1
  44. package/src/fileOpenSettings.ts +274 -49
  45. package/src/index.ts +18 -1
  46. package/src/lsp/client.ts +24 -0
  47. package/src/lsp/rpc.ts +57 -0
  48. package/src/lsp/server.ts +272 -2
  49. package/src/model.ts +2 -1
  50. package/src/perf.ts +90 -4
  51. package/src/remoteWorkspace.ts +177 -0
  52. package/src/routes.ts +13 -1
  53. package/src/rpc.ts +115 -39
  54. package/src/shared/ai.ts +12 -0
  55. package/src/shared/lsp.ts +79 -0
  56. package/src/shared/nativeOpen.ts +91 -0
  57. package/src/shared/rpc.ts +162 -2
  58. package/src/shared/svn.ts +296 -10
  59. package/src/shared/types.ts +5 -1
  60. package/src/svn.ts +235 -13
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  - 📝 **同屏编辑**:DSH 0.1.5+ 官方右侧 Sidebar,AI 对话与文件编辑同屏
7
7
  - 🔍 **差异审查**:Keep / Undo / 回滚 / 归档,状态持久化重启不丢
8
- - 🧠 **LSP 智能**:转到定义 / 查找引用 / Peek 多结果选择
8
+ - 🧠 **LSP 智能**:转到定义 / 查找引用 / Peek 多结果选择 / 智能补全(注释索引)/ 签名帮助
9
9
  - ⌨️ **命令面板**:`Ctrl+Shift+P`,19 条命令开箱即用,可编程扩展
10
10
 
11
11
  ## 目录
@@ -106,6 +106,12 @@
106
106
  `Ctrl+hover` 可导航标识符下划线提示。v0.4.2 起统一委托完整 Monaco 原生命令:
107
107
  **多结果弹 Peek 让用户选**,单结果直跳,取不到定义自动降级「转到引用」。
108
108
 
109
+ - **智能补全**:输入 `.` / `:` / `(` / `[` 自动弹出候选(`Ctrl+Space` 手动触发)。
110
+ EmmyLua 的注释索引(`---@class` / `---@field` / `---@type`)会被解析为真实的成员列表,
111
+ 即对 `---@class` 标注的实例打 `p.` 能列出注解声明的字段/方法;候选项带类型图标、
112
+ 弃用标记与片段展开(`${1:占位}`)。文档走 `completionItem/resolve` 惰性拉取,列表响应保持轻量。
113
+ - **签名帮助**:函数实参处(输入 `(` / `,`)显示参数签名并按当前实参高亮;
114
+ 多签名可切换。
109
115
  - 定义查找带降级链(definition → declaration → 引用推导);参数 / 局部变量
110
116
  (`this`、`pTarget` 这类)同样能跳到声明。
111
117
  - 相关踩坑与修复见 [常见问题](#常见问题) 第 1–4 条。
@@ -411,13 +417,13 @@ TortoiseSVN(`TortoiseProc.exe`)仅作 Windows 过渡增强:自研能力覆
411
417
 
412
418
  ```bash
413
419
  # ① Git 安装(clone + prepare 构建;推荐打固定 tag)
414
- dsh plugin --profile web add github:Lenonss/DSH_VsCodeMode#v0.7.0
420
+ dsh plugin --profile web add github:Lenonss/DSH_VsCodeMode#v0.9.0
415
421
 
416
422
  # ② npm 注册表(发布到 npm 后)
417
423
  dsh plugin --profile web add dsh-vscode-mode
418
424
 
419
425
  # ③ GitHub Release tgz 直装
420
- dsh plugin --profile web add https://github.com/Lenonss/DSH_VsCodeMode/releases/download/v0.7.0/dsh-vscode-mode-0.7.0.tgz
426
+ dsh plugin --profile web add https://github.com/Lenonss/DSH_VsCodeMode/releases/download/v0.9.0/dsh-vscode-mode-0.9.0.tgz
421
427
  ```
422
428
 
423
429
  > `dsh plugin ...` 是 pnpm 转发器:git 安装会克隆仓库、执行该包 `prepare` 脚本
@@ -498,7 +504,8 @@ bundles 层后重启 DSH 即自动把插件行挂进 loader 树。**不要**再
498
504
  - **代码片段**:`Ctrl+Shift+P` →「配置代码片段」编辑 `.code-snippets`;编辑代码
499
505
  时 `prefix` 自动 IntelliSense 补全,`Tab` / `Enter` 展开。
500
506
  - **LSP**:`F12` 转到定义(多结果弹 Peek 选择)、`Shift+F12` 查找引用、
501
- `Ctrl+点击` 导航;取不到定义自动降级「转到引用」。
507
+ `Ctrl+点击` 导航;取不到定义自动降级「转到引用」。补全随输入 `.` / `:` / `(` / `[`
508
+ 自动弹出(`Ctrl+Space` 手动触发,`Tab` / `Enter` 采纳),函数实参处显示签名帮助。
502
509
 
503
510
  ## 配置
504
511
 
@@ -577,7 +584,7 @@ src/
577
584
  ├── routes.ts Host webServer 路由(/edrv/rpc、/edrv/assets/*、/edrv/vendor/*)
578
585
  └── client/
579
586
  ├── index.ts Client 入口:slot 注册;官方/betterSidebar/中央页签三形态互斥分流
580
- ├── compat.ts ★ 设置桥三级降级(webUiSettings→settingsScope)、slot 安全注册
587
+ ├── compat.ts ★ 设置桥四级降级+晚到重试(configForms→webUiSettings→settingsScope)、slot 安全注册
581
588
  ├── officialSidebar.ts ★ 官方右侧 Sidebar 桥(DSH 0.1.5+,唯一维护面)
582
589
  ├── sidebarBridge.ts betterSidebar 桥(归档,仅旧版回退)
583
590
  ├── rpc.ts / events.ts / watchDecision.ts(外部改动同步纯逻辑)
@@ -614,7 +621,8 @@ pdf.js vendor + 图标 + launcher)、`skills/`(插件技能组)、`src/`
614
621
  + `conversation.input.dock`(id `edrv-diff-dock`,唯一差异栏)。内部路由 / slot /
615
622
  事件 / CSS 前缀沿用 `edrv-*`(防回归),包身份 `dsh-vscode-mode`。
616
623
  - **兼容层**(`src/compat.ts` + `src/client/compat.ts`):运行时探测
617
- `@deepseek-ai/dsh-mcp-client`、设置桥(`webUiSettings` → `settingsScope`)、
624
+ `@deepseek-ai/dsh-mcp-client`、设置桥(`configForms` 0.1.7+ → `webUiSettings` →
625
+ `settingsScope`,含 15×2s 晚到有界重试)、
618
626
  `/edrv` 路由前缀冲突与本插件重复装配(duplicate loader entry)护栏;
619
627
  `@deepseek-ai/dsh-settings` / `schemastery` 动态加载(缺失时插件仍可加载,
620
628
  设置持久化降级)。「VSCodeMode」设置页 →「兼容性」子 Tab 或 RPC `edrv.compat`
@@ -710,6 +718,29 @@ Keep All / Undo All 却是亮的。修复:单文件 Keep / Undo 覆盖冲突
710
718
  完整变更见 [GitHub Releases](https://github.com/Lenonss/DSH_VsCodeMode/releases)。
711
719
  近期关键版本:
712
720
 
721
+ - **v0.9.0**:**远端工作区差异审查(issue #7)+ SVN 变更 AI 智能分组**——① 支持
722
+ ssh remote 插件打开的**远端项目**做交互式差异审查:按工作区根 `.remote-ssh.json`
723
+ 识别镜像根(向上 ≤8 层,与官方 findMirrorRoot 同判据),agent 写远端后以 `node:fs`
724
+ **写穿本机镜像**(不走 ctx.fs 写桥,避免相同内容再推回远端的重复 SSH 往返),
725
+ 展示/决策链路对齐本地工作区;② **SVN 变更列表 AI 智能分组**:AI 对变更文件自动
726
+ 分组归类 + 方案弹窗(`SvnAiPlanDialog`)、单组条目预算防超长(`svnListBudget`)、
727
+ 对话内变更自动分组入列(`svnTriage`),SvnPanel/状态链路与徽标同步增强;
728
+ ③ **适配 DSH 0.1.7-alpha.2**:Config 全字段 `.volatile()`(否则设置页 entry 不下发、
729
+ 写入抛 `has no volatile fields`)+ `@deepseek-ai/schemastery` 移入 dependencies 钉
730
+ `~3.18.4` + 配置读点解引用 volatile 引用 + 兼容页「Config volatile 字段」行与告警;
731
+ ④ **修复 Ctrl+点击首开不定位(第三次回归)**:根因=并行改码触发 client HMR 热重载、
732
+ EditorView 重挂载销毁挂载级 pendingFocus → 新增 `window.__edrvPendingNav__`
733
+ 跨挂载交接槽(TTL 30s、落点才清)+ 落点前模型身份守卫;首开/交接注入/同文件/
734
+ 搜索入口四轮现场复测通过。
735
+ - **v0.8.0**:**DSH 0.1.7 兼容适配 + 文件树原生打开**——P0×3 修复(0.1.7 移除
736
+ `settingsScope` 致整客户端停等 → 设置桥四级探测 + 15×2s 晚到重试;`installSection`
737
+ 移除 → `forms` 策略 + `export const Config` 与 section schema 同源;0.1.7 图标改名
738
+ `Icon<Name>16→Regular` 致侧栏图标全灭 → `icons.ts` 跨版本出口 + 占位兜底);新能力:
739
+ 文件树原生打开(`nativeOpenExts` 可配置范围,默认=让位清单,claim `canOpen` 同步让位)、
740
+ 插件管理页 icon + `locale/` 双语声明、图片缩放(适应宽度默认/±10%/每页签记忆)与
741
+ PDF 百分比指示、perf 面板官方归档/置顶徽标、`edrv.readBinary` 二进制预览通道
742
+ (octet-stream + base64 自动回退)。设置体系迁移:settings.yaml 一次性导入 profile
743
+ Config,读写统一 `sectionOf/updateSection`(冲突重读重试)。
713
744
  - **v0.7.0**:**资源管理器右键菜单**——区分文件 / 文件夹 / 根空白区三套菜单:打开方式…
714
745
  (已注册打开器选择)、在文件资源管理器中显示、添加引用到对话、新建文件/文件夹
715
746
  (支持 `a/b.c` 嵌套)、在文件夹中查找(搜索面板目录过滤)、剪切·复制·粘贴(应用内
@@ -0,0 +1,7 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128" role="img" aria-label="dsh-vscode-mode">
2
+ <!-- dsh-vscode-mode 插件图标:深色圆角方块 + 浅色 </> 编辑器符号(VSCode 风格) -->
3
+ <rect x="8" y="8" width="112" height="112" rx="24" fill="#1e1e2e"/>
4
+ <path d="M46 44 L30 64 L46 84" fill="none" stroke="#7ee2b8" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
5
+ <path d="M82 44 L98 64 L82 84" fill="none" stroke="#7ee2b8" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
6
+ <path d="M70 40 L58 88" fill="none" stroke="#d7dce2" stroke-width="9" stroke-linecap="round"/>
7
+ </svg>
package/cordis.patch.yml CHANGED
@@ -16,6 +16,22 @@
16
16
  # imageDir: /path/to/icons
17
17
  # 注意:是覆盖(override),不是再 insert 一次同 id 的行,否则触发
18
18
  # duplicate loader entry id 启动失败。
19
+ #
20
+ # DSH 0.1.7 免重载配置字段(已实证,格式与本文件无关):插件在自己的 Config
21
+ # schema 字段上声明 `.volatile()`(如 `z.string().volatile()`,类型
22
+ # `import type { Volatile } from '@deepseek-ai/cordis'`),仅 volatile 字段的
23
+ # 变化由 Loader 就地提交(`ctx.on('loader/volatile-update')`),运行中的实例保留、
24
+ # 不重挂载;非 volatile 字段改动仍按原逻辑触发 reload(volatile 字段还要求位于
25
+ # 固定 object 路径,不得嵌套于 dict key / 外层 volatile 之内,app-boot 会校验)。
26
+ # 该声明落在插件源码的 schema 上,**不是 patch 文件字段**。
27
+ # ⚠️ 0.1.7 实测(2026-09-23,0.1.7-alpha.2 修复):volatile 不只是免重载——
28
+ # SettingsForms.describe 按 volatileForm 门槛下发 entry,**Config 全字段(12 个,
29
+ # 见 src/fileOpenSettings.ts buildSettingsSchema 的 { volatile: true } 模式)必须标记**,
30
+ # 漏标 = 本插件 ns 永不进 describe = 设置页「设置服务暂不可用」+ 写入抛
31
+ # has no volatile fields;本行 config 若新增字段,同样须在 Config schema 对应字段
32
+ # 加 `.volatile()` 才会免重载并出现在设置页。
33
+ # 另:0.1.7 起 `dsh.bundle.patch` 支持 `patch: string | string[]`(有序列表,
34
+ # 逐层施加),本包单文件写法保持兼容,无需改动。
19
35
  - insert:
20
36
  - id: dsh-vscode-mode
21
37
  name: 'dsh-vscode-mode'