deepseek-harness-vscode-plugin

by thelibrarymasyaf

1 工具与能力github收录于 08-23

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

安装

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

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

安装与环境配置指引、插件开发教程见 DSH 中文社区文档 ↗

安装即在你的机器上以你的权限运行第三方代码——它可读写文件、使用凭据、访问网络,DSH 的工具审批不会为插件代码加沙箱。「检测到 manifest」仅代表发现 dsh.bundle / dsh.plugin 清单,不构成兼容性或安全审查;安装前请审阅源码,不熟悉的插件先在不含密钥的环境试用。

README

目录

把官方 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 是独立项目,本仓库不包含它的源代码;其许可证与使用条款分别适用。

原始 README: https://github.com/TheLibraryMasyaf/DeepSeek-Harness-VSCode-Plugin/blob/main/README.md ↗