Tools & Capabilities

deepseek-harness-vscode-plugin

thelibrarymasyaf/deepseek-harness-vscode-plugin · ★ 0

thelibrarymasyaf

Integrates official DeepSeek Harness into a dedicated VS Code right sidebar with an editor context bridge rather than a simple embedded webpage.

README body is shown in Chinese.

License
MIT
Added
2026-08-23
Maintenance
active
Install kind
github

No manifest check is available; listing does not imply compatibility or security review.

安装

dsh plugin --profile web add github:thelibrarymasyaf/deepseek-harness-vscode-plugin

GitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试

For install and environment setup, plus plugin development tutorials, see DSH community docs ↗

README

Source README · body: zh · Read Chinese README

Table of contents
  1. 0.11.0 界面结构
  2. 功能
  3. 工作原理
  4. 安装
  5. 命令
  6. 更新策略
  7. 更新兼容边界
  8. 安全边界
  9. 开发

把官方 DeepSeek Harness(DSH)接入 VS Code 的独立右侧边栏,并提供真正的编辑器上下文桥接,而不是只在 Webview 中嵌入一个网页。

0.11.0 继续复用官方 DSH 会话与输入界面,同时通过独立的 DSH Client plugin 提供适合 VS Code 的单列嵌入布局、历史对话、全回复区原生复制、逐消息替换、对话模式与工作区迁移、持久归档、原生剪贴板粘贴、工作区同步和编辑器上下文集成。

0.11.0 界面结构

  • DSH 会话界面占满 VS Code Secondary Side Bar 的可用高度和宽度,外层不再保留额外的 Workspace、No active file、连接状态或 File/Selection/Problems 工具条。
  • DSH WebUI 原有的左侧导航在窄栏中即使折叠也会保留 56px rail。0.11.0 由专用 embed layout 直接提供单列 shell,不挂载这条 rail,而不是依赖易随上游构建变化的 CSS module 类名去隐藏 DOM。
  • 顶部使用一条 34px 的紧凑聊天栏:历史按钮用于展开最近对话;剪贴板按钮把系统剪贴板追加到当前草稿;新建按钮创建或打开当前 Workspace 的空白会话。
  • 空白会话默认显示最近 3 条历史;查看全部会在同一区域展开完整列表。历史按更新时间排序,点击后直接调用 DSH sessions.open() 切回原会话,不复制或另存聊天数据。
  • 每条历史右侧有归档按钮,调用 DSH 的持久归档接口;归档只从主历史隐藏会话,不删除会话日志。rc.6 尚未提供取消归档接口。
  • 每条纯文本用户 Prompt 右下角都有复制和铅笔按钮;复制通过 VS Code Clipboard API,铅笔会把原气泡就地切换成“取消 / 发送”编辑框。修改发送会从该消息之前创建替换分支、继承原会话名称、立即提交修改后的 Prompt,并自动归档旧会话,因此主历史中只保留修改后的同名会话。
  • 当前模式标签本身就是下拉框触发器:点击 标准模式 / PTC 模式 / 极简模式 等标签直接选择新模式,不再额外放置重复按钮;+ 菜单中也保留 切换当前对话模式。空白会话直接原地切换;已经开始的会话会创建指定 preset 的同名空白替代会话,成功打开后才归档旧会话。确认页会明确提示旧内容不会自动成为新会话上下文,旧日志仍可在归档中查看。
  • 当前工作区标签同样是下拉框触发器。空白会话会切换到目标 Workspace 的空白会话并迁移未发送草稿;已经开始的会话会把截至最后一个完整轮次的原始事件历史、标题、当前模式和未发送草稿迁移到目标 Workspace,再归档旧会话。被中断但未闭合的最后一轮不会迁移,运行中必须先停止。
  • Workspace 由 Extension Host 自动注册并连接,不再在 Webview 顶部额外堆叠状态行。
  • DSH 原生输入区的 + 菜单中提供 VS Code Context,可选择 Add Current File、Add Selection 或 Add Problems,内容会发送到发起操作的 DSH 会话草稿。
  • 同样的 File、Selection 和 Problems 操作仍可从 VS Code 编辑器右键菜单和命令面板调用;右键菜单会根据当前文件或选区显示适用操作。
  • VS Code view title 只保留紧凑图标;更新检查和日志位于 … 菜单,缺少 Key 时才显示剪贴板导入按钮。

0.11.0 的 Bridge 单元测试覆盖 Cmd/Ctrl+V 回退、官方代码块复制按钮、Agent 回复/Markdown/工具输出选区的 Cmd/Ctrl+C、右键复制、逐消息替换、同名重命名、模式切换、跨工作区历史迁移、草稿迁移、失败回滚、替代会话归档、按选区插入和 128 KiB 上限。发布后的 VS Code 窗口仍需在更新后执行一次 Developer: Reload Window 才会载入新扩展进程。

功能

  • 与 Codex 类似的 VS Code Secondary Side Bar(右侧边栏)
  • 全高单列嵌入布局,不显示 DSH 自带的左侧 rail,也不叠加插件自己的顶部上下文栏
  • Codex 风格的最近历史、查看全部、会话切换与新建对话入口
  • Cmd/Ctrl+V 在 iframe 不能取得剪贴板时自动回退到 VS Code Clipboard API;顶部同时提供可见的“从系统剪贴板粘贴”按钮
  • 每条纯文本用户 Prompt 都可原生复制;停止运行后可点击该消息右下角的铅笔,就地修改并以同名替换会话发送,旧会话自动归档
  • Agent 回复中的普通文本、Markdown、代码块和工具输出均可选中后按 Cmd/Ctrl+C;官方复制按钮以及选区右键“复制”也会统一交给 VS Code Clipboard API
  • 停止运行后可直接点击当前模式标签,选择标准、PTC、极简、Cordis 或自定义 preset;已开始的会话以同名空白会话替换,旧会话自动归档
  • 停止运行后可直接点击当前工作区标签切换 Workspace;已开始的会话会继承最后一个完整轮次以前的全部历史、标题、模式和未发送草稿
  • 历史列表支持持久归档,会话日志不会被删除
  • DSH 页面会跟随 VS Code 的浅色、深色和高对比主题,并同步当前主题的背景、文字、边框与强调色
  • 自动注册当前 VS Code 窗口中的本地工作区,并打开对应 DSH 会话
  • 从 DSH 原生 + 菜单、VS Code 编辑器右键菜单或命令面板,把当前文件、当前选区或当前文件的 Problems 添加到 DSH 输入草稿
  • 选区只在用户显式点击时读取,UTF-8 内容限制为 64 KiB
  • Problems 最多 100 条、128 KiB
  • 未配置 API Key 时先显示插件自己的设置遮罩,不再让用户误入 DSH 网页输入框
  • 主按钮通过 VS Code Clipboard API 直接导入系统剪贴板,全程不需要按 Cmd+V
  • 仍保留 VS Code 原生密码输入框作为手动备用入口
  • API Key 只存入 VS Code SecretStorage,通过环境变量传给 DSH;不会进入 Webview、消息桥或日志
  • 管理官方 @deepseek-ai/dsh 运行时,支持安全更新、兼容性冒烟测试和回滚
  • DSH 新增一般功能或调整 UI 时,插件会继续使用更新后的官方界面

工作原理

插件仍然运行官方 dsh web,但同时随 VSIX 携带一个独立的 DSH Client plugin:

  1. Extension Host 读取 VS Code 的 workspace、active editor、selection 和 diagnostics。
  2. DSH 通过 --patch 加载 @local/dsh-vscode-bridge。
  3. Bridge 使用专用 embed layout 组成单列 shell,通过 keyed slot 提供可复制、可就地编辑的用户消息,并通过 DSH Command UI 提供 VS Code Context。
  4. Bridge 调用 DSH 的 workspaces.create、workspaces.connectWorkspace、workspaces.archiveSession、sessions.open、sessions.fork、session.create、agentPreset.select 和 conversation.input 服务完成工作区、归档、分支、模式替换与发送。
  5. VS Code Webview 与 DSH iframe 之间通过带一次性 token、序号和来源校验的 postMessage 通信。

插件不按 CSS module 哈希、按钮文字或 DOM 层级注入隐藏规则;单列结构由 DSH 的插件与 slot 组合实现。因此,会话内容、输入框以及一般 UI 功能调整仍直接来自所安装的官方 DSH,不需要在扩展中重写一套聊天界面。

安装

  1. 在 VS Code 运行 Extensions: Install from VSIX…。
  2. 选择 dsh-vscode-sidebar-0.11.0.vsix。
  3. 点击右侧的 DeepSeek Harness 图标,或运行 DeepSeek Harness: Open DSH Sidebar。
  4. 先在来源应用复制 API Key,再点击 从系统剪贴板直接导入。插件会读取剪贴板、写入 SecretStorage、重启 DSH 并验证配置;不需要在任何输入框里粘贴。也可选择 手动输入。

首次启动会安装所选版本的官方 @deepseek-ai/dsh,因此可能需要几分钟。本机需要可用的 Node.js 和 npm。

命令

  • DeepSeek Harness: Open DSH Sidebar
  • DeepSeek Harness: Add Current File to DSH
  • DeepSeek Harness: Add Selection to DSH
  • DeepSeek Harness: Add Current File Problems to DSH
  • DeepSeek Harness: Enter API Key
  • DeepSeek Harness: Paste API Key from Clipboard
  • DSH: Start / Stop / Restart
  • DSH: Check for Updates
  • DSH: Roll Back Runtime
  • DSH: Open in Browser
  • DSH: Show Logs

编辑器右键菜单也提供 File、Selection 和 Problems 操作。

更新策略

默认 safeAuto:

  1. 将候选 DSH 安装到隔离的版本目录。
  2. 使用隔离的 DSH_HOME 启动候选版本。
  3. 验证 readiness、前端资源、boot manifest、VS Code bridge bundle 和 workspace RPC。
  4. 全部通过后才切换 active version,并保留上一版本用于回滚。

也可以把 dshSidebar.updateMode 设为 notify 或 manual,或通过 dshSidebar.managedVersion 固定版本。

更新兼容边界

普通的 DSH 功能增加、文案、主题和会话 UI 调整通常会由官方 WebUI 直接呈现。0.8.0 的自动适配并不是对任意上游改动的保证:插件仍依赖 DSH 的启动协议、boot manifest、Client plugin 注入机制,以及 workspace、session、conversation、theme、Command UI 和 layout/slot 契约。尤其是 root、conversation.chat.node、session list、rename、archive、fork 或 Command UI 的注册接口发生破坏性变化时,专用 embed layout、历史列表、Prompt 编辑与 VS Code Context 可能需要同步适配。

候选版本的隔离安装和兼容性检查用于阻止已能识别的启动、资源、bridge 或 workspace RPC 故障,但它不能替代所有真实 VS Code 布局与交互验证。更新后若出现空白页面、左 rail 重新出现、输入菜单缺少 VS Code Context,或上下文没有进入草稿:

  1. 在右侧栏标题的 … 中选择 DSH: Show Logs,也可从命令面板运行同名命令。
  2. 记录当前 DSH runtime 版本以及日志中的启动、bridge 或兼容性错误;日志按设计不包含 API Key 正文。
  3. 使用 DSH: Roll Back Runtime 回到上一已知可用版本,或将 dshSidebar.managedVersion 固定到已验证版本,再报告该布局/服务契约变化。

安全边界

  • DSH Web server 只绑定 127.0.0.1 和系统分配的随机端口。
  • 默认使用插件 globalStorage 下独立的 DSH_HOME,不会修改用户已有的全局 DSH profile。
  • API Key 不写入 settings、HTML、postMessage 或输出日志。
  • 工作区正文不会自动读取;文件内容只在显式添加选区时进入草稿。
  • Bridge 消息验证 iframe source、origin、一次性 token、递增序号、命令白名单和大小上限。
  • 普通 Prompt 的剪贴板文本只在用户按下粘贴快捷键或点击粘贴按钮后读取,最多 128 KiB;日志只记录固定结果状态,不记录正文、长度、前缀或哈希。
  • 逐消息编辑不会改写持久会话日志,而是从所选消息之前创建同名替换分支,发送成功后归档旧会话;旧日志仍保留在 DSH 的归档集合中。目前只允许编辑纯文本 Prompt,包含图片或其他内容块时不显示铅笔。
  • DSH 会锁定已开始会话的 Agent preset。模式切换因此只会对空白会话原地重组;已开始的会话会创建同名空白替代会话并归档旧会话,且不会暗中复制、摘要或注入旧对话内容。确认页会在执行前明确说明这一边界。
  • DSH 会把会话 cwd 固定在创建时。工作区切换不会改写旧会话,而是用 DSH 的原始事件 seed 创建目标 Workspace 下的同名替代会话,继承截至最后一个完整轮次的消息、工具事件、标题和当前 Agent preset,并迁移未发送草稿;旧会话在成功后归档。运行中或没有完整轮次时拒绝迁移,避免复制半截事件。
  • 消息复制正文只会在用户点击复制按钮、按下复制快捷键或选择右键“复制”后传给 VS Code Clipboard API,最多 128 KiB;日志不记录正文。

开发

npm install
npm run check
npm test
npm run package

生成的 0.11.0 VSIX 位于仓库内的 artifacts/dsh-vscode-sidebar-0.11.0.vsix(该目录不会提交到 Git)。

当前主要支持本地桌面 VS Code。Remote SSH、Dev Containers、WSL 和 Marketplace 签名尚未做端到端验证。

DeepSeek Harness 是独立项目,本仓库不包含它的源代码;其许可证与使用条款分别适用。