🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

VS Code 助手 NEXTINDIE/DeepSeek-Harness-for-VS-Code

DeepSeek Harnessv0.0.1
NEXTINDIE12 天前有提交已提供中文文档扫描:高危

使用本扩展前:先在终端启动 DeepSeek Harness 服务端,扩展会在 VS Code 内连接它。

43.7/100
综合分
13
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/23 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查有告警:npm 同名包「dsh-vscode」归属 dushaobindoudou/dsh-vscode,装到的可能不是本插件。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add NEXTINDIE/DeepSeek-Harness-for-VS-Code
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · browser
装得上吗
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 12 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

npm 同名包「dsh-vscode」归属 dushaobindoudou/dsh-vscode,装到的可能不是本插件

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-vscode @ 0.0.1
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 15:47:22

🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0
🔴 扫描:高危尚无人工评估

静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。

命令参数由运行时变量拼接读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 80 处,展示前 74 条)
  • 删除本地文件
    plugins/dsh-git-rollback/lib/checkpoint.js:65
    rmSync(tmpIndex, { force: true });
  • 删除本地文件
    plugins/dsh-git-rollback/lib/checkpoint.js:66
    rmSync(`${tmpIndex}.lock`, { force: true });
  • 发起网络请求
    plugins/dsh-git-rollback/lib/client.js:47
    const res = await fetch(path, {
  • 执行外部命令来自配置/变量
    plugins/dsh-git-rollback/lib/git.js:34
    const child = spawn(gitBin, ["-c", "core.quotepath=false", ...args], { cwd, windowsHide: true, stdio: ["pipe", "pipe", "pipe"], env });
  • 删除本地文件
    plugins/dsh-git-rollback/lib/git.js:142
    rmSync(join(cwd, rel), { force: true });
  • 读取本地文件
    plugins/dsh-git-rollback/lib/git.js:151
    const raw = readFileSync(recordPath(cwd, sid), "utf8");
  • 写入本地文件
    plugins/dsh-git-rollback/lib/git.js:189
    mkdirSync(join(cwd, RECORD_DIR), { recursive: true });
  • 写入本地文件
    plugins/dsh-git-rollback/lib/git.js:190
    writeFileSync(recordPath(cwd, sid), JSON.stringify(record, null, 2), "utf8");
  • 删除本地文件
    plugins/dsh-git-rollback/lib/rollback.js:26
    rmSync(path, { force: true });
  • 删除本地文件
    plugins/dsh-git-rollback/lib/rollback.js:27
    rmSync(`${path}.lock`, { force: true });
  • 写入本地文件
    plugins/dsh-git-rollback/lib/rollback.js:261
    writeFileSync(patchFile, diff.stdout, "utf8");
  • 删除本地文件
    plugins/dsh-git-rollback/src/checkpoint.ts:76
    rmSync(tmpIndex, { force: true });
  • 删除本地文件
    plugins/dsh-git-rollback/src/checkpoint.ts:77
    rmSync(`${tmpIndex}.lock`, { force: true });
  • 执行外部命令来自配置/变量
    plugins/dsh-git-rollback/src/git.ts:57
    const child = spawn(gitBin, ["-c", "core.quotepath=false", ...args], { cwd, windowsHide: true, stdio: ["pipe", "pipe", "pipe"], env });
  • 删除本地文件
    plugins/dsh-git-rollback/src/git.ts:165
    rmSync(join(cwd, rel), { force: true });
  • 读取本地文件
    plugins/dsh-git-rollback/src/git.ts:174
    const raw = readFileSync(recordPath(cwd, sid), "utf8");
  • 写入本地文件
    plugins/dsh-git-rollback/src/git.ts:212
    mkdirSync(join(cwd, RECORD_DIR), { recursive: true });
  • 写入本地文件
    plugins/dsh-git-rollback/src/git.ts:213
    writeFileSync(recordPath(cwd, sid), JSON.stringify(record, null, 2), "utf8");
  • 删除本地文件
    plugins/dsh-git-rollback/src/rollback.ts:38
    rmSync(path, { force: true });
  • 删除本地文件
    plugins/dsh-git-rollback/src/rollback.ts:39
    rmSync(`${path}.lock`, { force: true });
  • 写入本地文件
    plugins/dsh-git-rollback/src/rollback.ts:273
    writeFileSync(patchFile, diff.stdout, "utf8");
  • 删除本地文件
    resources/dsh-git-rollback/lib/checkpoint.js:65
    rmSync(tmpIndex, { force: true });
  • 删除本地文件
    resources/dsh-git-rollback/lib/checkpoint.js:66
    rmSync(`${tmpIndex}.lock`, { force: true });
  • 发起网络请求
    resources/dsh-git-rollback/lib/client.js:47
    const res = await fetch(path, {
  • 执行外部命令来自配置/变量
    resources/dsh-git-rollback/lib/git.js:34
    const child = spawn(gitBin, ["-c", "core.quotepath=false", ...args], { cwd, windowsHide: true, stdio: ["pipe", "pipe", "pipe"], env });
  • 删除本地文件
    resources/dsh-git-rollback/lib/git.js:142
    rmSync(join(cwd, rel), { force: true });
  • 读取本地文件
    resources/dsh-git-rollback/lib/git.js:151
    const raw = readFileSync(recordPath(cwd, sid), "utf8");
  • 写入本地文件
    resources/dsh-git-rollback/lib/git.js:189
    mkdirSync(join(cwd, RECORD_DIR), { recursive: true });
  • 写入本地文件
    resources/dsh-git-rollback/lib/git.js:190
    writeFileSync(recordPath(cwd, sid), JSON.stringify(record, null, 2), "utf8");
  • 删除本地文件
    resources/dsh-git-rollback/lib/rollback.js:26
    rmSync(path, { force: true });
  • 删除本地文件
    resources/dsh-git-rollback/lib/rollback.js:27
    rmSync(`${path}.lock`, { force: true });
  • 写入本地文件
    resources/dsh-git-rollback/lib/rollback.js:261
    writeFileSync(patchFile, diff.stdout, "utf8");
  • 发起网络请求
    src/dsh/apiClient.ts:216
    const res = await fetch(authUrl, {
  • 发起网络请求
    src/dsh/apiClient.ts:243
    const res = await fetch(`${this.baseUrl}/api/${method}`, {
  • 发起网络请求
    src/dsh/apiClient.ts:317
    const res = await fetch(`${this.baseUrl}/api/host.describe`, {
  • 发起网络请求
    src/dsh/apiClient.ts:651
    const res = await fetch(`${this.baseUrl}/api/${endpoint}`, {
  • 发起网络请求
    src/dsh/apiClient.ts:688
    const res = await fetch(`${this.baseUrl}/api/${endpoint}`, {
  • 读取本地文件
    src/dsh/rollback.ts:91
    const raw = await readFile(recordFilePath(cwd, sessionId), "utf8");
  • 执行外部命令来自配置/变量
    src/dsh/rollback.ts:133
    execFile(
  • 读取本地文件
    src/dsh/rollback.ts:271
    if (existsSync(join(d, ".git"))) return d;
  • 读取本地文件
    src/dsh/rollbackInstall.ts:44
    const text = readFileSync(file, "utf8").replace(/^ FEFF/, "");
  • 读取本地文件
    src/dsh/rollbackInstall.ts:62
    const installedVersion = existsSync(join(targetDir, VERSION_FILE))
  • 读取本地文件
    src/dsh/rollbackInstall.ts:63
    ? readFileSync(join(targetDir, VERSION_FILE), "utf8").trim()
  • 删除本地文件递归
    src/dsh/rollbackInstall.ts:69
    rmSync(targetDir, { recursive: true, force: true });
  • 写入本地文件
    src/dsh/rollbackInstall.ts:70
    mkdirSync(join(targetDir, "lib"), { recursive: true });
  • 读取本地文件
    src/dsh/rollbackInstall.ts:71
    for (const file of readdirSync(join(bundledDir, "lib"))) {
  • 写入本地文件
    src/dsh/rollbackInstall.ts:72
    copyFileSync(join(bundledDir, "lib", file), join(targetDir, "lib", file));
  • 写入本地文件
    src/dsh/rollbackInstall.ts:74
    copyFileSync(join(bundledDir, "package.json"), join(targetDir, "package.json"));
  • 写入本地文件
    src/dsh/rollbackInstall.ts:75
    writeFileSync(join(targetDir, VERSION_FILE), bundledVersion || "0");
  • 读取本地文件
    src/dsh/rollbackInstall.ts:87
    if (!existsSync(join(profileDir, "cordis.patch.yml"))) {
  • 读取本地文件
    src/dsh/rollbackInstall.ts:96
    if (existsSync(serverModules)) targets.push(serverModules);
  • 写入本地文件
    src/dsh/rollbackInstall.ts:121
    writeFileSync(patchFile, trimmedEnd.slice(0, trimmedEnd.lastIndexOf("[]")) + block);
  • 写入本地文件
    src/dsh/rollbackInstall.ts:123
    writeFileSync(patchFile, trimmedEnd + "\n" + block);
  • 发起网络请求
    src/dsh/serverManager.ts:91
    const res = await fetch(this.cfg.url + "/", {
  • 删除本地文件
    src/dsh/serverManager.ts:162
    unlinkSync(logFile);
  • 执行外部命令来自配置/变量
    src/dsh/serverManager.ts:184
    this.child = spawn(launcher.node, [binJs, "web"], {
  • 执行外部命令运行时拼接
    src/dsh/serverManager.ts:192
    this.child = spawn(`${shellCommand(launcher.command, ["web"])} > "${logFile}" 2>&1`, {
  • 读取本地文件
    src/dsh/serverManager.ts:266
    const buf = readFileSync(file);
  • 读取本地文件
    src/dsh/serverManager.ts:288
    const text = readFileSync(logFile, "utf8");
  • 读取本地文件
    src/dsh/serverManager.ts:346
    if (!existsSync(npmCli)) continue;
  • 读取本地文件
    src/dsh/serverManager.ts:385
    return list.filter((p) => existsSync(p));
  • 执行外部命令来自配置/变量
    src/dsh/serverManager.ts:392
    const child = spawn(process.platform === "win32" ? "where.exe" : "which", [command], {
  • 读取本地文件
    src/dsh/serverManager.ts:412
    if (!force && existsSync(pkgJson)) {
  • 写入本地文件
    src/dsh/serverManager.ts:416
    mkdirSync(l.installDir, { recursive: true });
  • 执行外部命令来自配置/变量
    src/dsh/serverManager.ts:438
    child = spawn(
  • 读取本地文件
    src/dsh/serverManager.ts:450
    const ok = code === 0 && existsSync(pkgJson);
  • 删除本地文件
    src/dsh/serverManager.ts:472
    unlinkSync(logFile);
  • 执行外部命令来自配置/变量
    src/dsh/serverManager.ts:583
    const child = spawn(shellCommand(command, args), { shell: true, stdio: "ignore", windowsHide: true });
  • 执行外部命令来自配置/变量
    src/dsh/serverManager.ts:642
    const child = spawn(command, args, { shell: false, stdio: "ignore", windowsHide: true });
  • 执行外部命令来自配置/变量
    src/dsh/worktree.ts:23
    execFile(gitBin, args, { cwd, windowsHide: true, timeout: 5000 }, (error, stdout) => {
  • 写入剪贴板
    src/webview/channel.ts:1870
    await vscode.env.clipboard.writeText(msg.text);
  • 读取本地文件
    src/webview/channel.ts:2769
    this.cssCache = readFileSync(vscode.Uri.joinPath(this.ctx.extensionUri, "media", "chat.css").fsPath, "utf8");
  • 读取本地文件
    src/webview/cordisPanel.ts:203
    this.cssCache = readFileSync(vscode.Uri.joinPath(this.ctx.extensionUri, "media", "cordis.css").fsPath, "utf8");
  • 写入剪贴板
    src/webview/ui.ts:7815
    await navigator.clipboard.writeText(text);
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

4 张 · 点击查看大图

功能亮点

  • 连接Harness服务
  • @dsh聊天参与者
  • 按轮次Git回滚

DeepSeek Harness 的 VS Code 版:@dsh 聊天参与者、侧边栏与独立聊天、计划模式、目标、子代理、按轮次 Git 回滚、工作区/任务/设置面板、13 种语言界面。

README

由 DeepSeek 最新模型翻译生成
DeepSeek Harness for VS Code (dsh-vscode) 使用本扩展前:先在终端启动 DeepSeek Harness 服务端,扩展会在 VS Code 内连接它。 npx @deepseek-ai/dsh web 中文版 | 发布者:Jager · 最新版本:0.13.63 在 VS Code 里直接使用 DeepSeek Harness(dsh),与 ChatGPT / Copilot 并存:内置 @dsh 聊天参与者、辅助侧边栏 / 独立聊天窗口、工作区 / 任务 / 轨迹 / 设置面板、按轮次回滚 Git,以及多语言界面(简体中文 / 繁體中文 / English / 日本語 / 한국어 / Deutsch / Français / Español / Português / ไทย / Bahasa Indonesia / Türkçe / Русский / العربية —— 跟随 VS Code 显示语言,也可手动切换)。 DeepSeek Harness for VS Code 功能 - 内置聊天参与者 @dsh:在原生 Chat 面板(Ctrl+Alt+I)输入 @;流式回复,带工具调用与审批按钮;斜杠命令 /new、/session <ID>、/preset <name>。
展开完整文档(README 剩余 1 节)
DeepSeek Harness for VS Code (dsh-vscode)

使用本扩展前:先在终端启动 DeepSeek Harness 服务端,扩展会在 VS Code 内连接它。

npx @deepseek-ai/dsh web

中文版 | 发布者:Jager · 最新版本:0.13.63

在 VS Code 里直接使用 DeepSeek Harness(dsh),与 ChatGPT / Copilot 并存:内置 @dsh 聊天参与者、辅助侧边栏 / 独立聊天窗口、工作区 / 任务 / 轨迹 / 设置面板、按轮次回滚 Git,以及多语言界面(简体中文 / 繁體中文 / English / 日本語 / 한국어 / Deutsch / Français / Español / Português / ไทย / Bahasa Indonesia / Türkçe / Русский / العربية —— 跟随 VS Code 显示语言,也可手动切换)。

DeepSeek Harness for VS Code

功能

- 内置聊天参与者 @dsh:在原生 Chat 面板(Ctrl+Alt+I)输入 @;流式回复,带工具调用与审批按钮;斜杠命令 /new、/session <ID>、/preset <name>。
- 辅助侧边栏标签页:VS Code ≥ 1.106 时容器出现在辅助侧边栏(旧版本回退到活动栏)。
- 独立聊天窗口:DSH: Open Standalone Chat Window。
- 现代聊天界面:大圆角输入框、胶囊工具栏(思考深度 / 模型 / 预设 / 权限),输入框右上角、预设胶囊右侧有上下文用量环(与网页版一致:点击查看「已用上下文」、约用量 / 窗口读数,以及系统提示词 / 工具定义 / 对话的明细,用彩色分段条和各类别 token 数展示)。输入框下方有两个会话统计胶囊(与网页版一致):4 turns 285 steps · 267 tok/s(点击查看会话统计——LLM 耗时、工具耗时、平均 TTFT、输出 TPS)和 71M tok · 99.6% cache hit(点击查看 token 用量——精确总量、缓存命中、未缓存输入、缓存读/写、输出)。
- 上下文超限警告留在对话里(issue #19):上下文环在 75% 时变琥珀色、90% 时变红(此时面板提供一键压缩上下文);若发送时下一个请求会越过窗口的 90%,对话中会插入一张卡片,显示预计读数以及压缩上下文 / 切换模型。如果某一轮仍然失败——服务商以上下文长度错误拒绝,或模型以错误结束该轮、或触到输出上限——原因会写进对话对应位置,而不是只在 toast 里一闪而过,这样窗口更小的模型(MiniMax 及其他 pi-ai 路由)绝不会静默失败。
- 单条消息操作(极简线条图标):复制(双矩形图标)/ 分支(分叉线条图标;菜单:逆时针箭头「Rewind here」· 分叉图标「Branch from here」· 左上折返「Branch and rewind earlier」· 左上箭头「Back to main」)/ 点赞/点踩(线条图标;原生 messageFeedback,再点一次可撤销,旧会话回退到 /feedback 命令)/ 消息头部显示模型 · 思考耗时 · 每步 token。
- 回合页脚统计(对齐 web):一个 Usage 25.8K tok 胶囊(点击查看服务商/模型、缓存命中率、未缓存输入、缓存读/写、输出及推理占比),一个 Ran for 5m 57s 胶囊(点击查看回合总耗时、输出 TPS、首 token 时间),以及行末显示收尾消息的本地时钟(HH:mm,更早的日期显示 M/D HH:mm,跨年显示 Y-M-D HH:mm)。会话运行期间,较早回合的操作行和统计保持隐藏,悬停时淡入(只有已结束的最新回合始终显示)——即 web 的 data-actions-reveal 行为。
- 步骤时间线(对齐 web 的 ToolRow / ThinkRow):思考和工具调用在左侧轨道上渲染为单行过程行——思考 • <首行>(流式输出时展开,思考结束后折叠,手动切换状态保留)和 Read/Write/Pwsh/Grep • <人类可读摘要>,带状态圆点、运行中的扫光动画,点击后展开完整参数/结果(以及图片结果);每个事件到达时行实时出现,每段连续的行以一行 web 风格摘要收尾(1 command · read 1 file · searched 2 times),点击可折叠或展开该段,输入框上方的活动行显示当前执行的动作(工具标题 + 摘要),而不是笼统的标签。长 JSON 不再淹没整行。
- 交付文件卡片(对齐 web 的 present):模型交付的文件在回合末尾显示为卡片——文件名 + 描述、一个 Open 按钮(打开文件;受版本控制的文件则打开 HEAD→worktree 差异)和一个 ⋯ 菜单,含「Open with default app」和「Reveal in File Explorer」。
- 回合级 Git 回滚(每个助手回合上的 ↩ 按钮 + 分支菜单项):DSH 服务端插件 dsh-git-rollback 在每回合开始时,把工作区的 git 状态(已跟踪 + 未跟踪文件)快照到隐藏 ref(refs/dsh/checkpoints/<sid>,完全不污染你的分支历史),并记录到 .dsh/rollback 下;按钮把工作区恢复到该回合之前的状态。命令 /rollback [N]、/redo、/checkpoints 在网页命令面板和 VS Code 聊天里都能用(回滚是非破坏性的:先保存回滚前状态,/redo 可恢复,被忽略的文件永远不动)。每条消息的 ⋯/分支菜单还提供 「撤销本回合的文件改动」(先预览再确认的审查对话框,只回退该回合改过的文件——你自己的提交和 HEAD 保持不动)、「查看检查点」,以及「撤销本回合改动并从此处分叉」。网页聊天开箱即得同样的 Copilot 风格回合分隔线和浮动恢复对话框(插件 web 半部分,经 DSH client-modules 管线提供)。

撤销回合改动的审查对话框

带撤销 / 检查点 / 分支的消息操作
- 可折叠推理(默认隐藏)和每回合工具摘要(「本回合调用了 N 个工具」)。
- 交付物框:每回合产出的文件列在对话末尾,点击即可打开。
- 会话管理:⋯ 菜单支持分叉 / 重命名(标题预填)/ 归档。
- 目标:进度卡片 + 🎯 标签,可编辑 / 完成 / 清除。
- 限时(异步)提问(DSH 0.2.0+):带等待预算的问题会在卡片上显示实时倒计时胶囊;等待到期后智能体继续干活,卡片仍可作答(「等待已结束 · 你仍可稍后回答」),迟到的回复作为后续消息投递到同一会话。
- 待办面板(对齐网页 TodoPanel,停靠在输入框上方):清单图标 + 「待办」+ 按状态汇总,只列非零计数(「2 已完成 · 1 进行中 · 1 待处理」),可折叠列表,沿用网页的三种状态图标(绿色对勾圆环 / 旋转渐变圆环 / 虚线圆环)。
- 计划模式:/plan 之后出现 📝 标签,点击退出。
- 附件:自动附加当前编辑器文件(跟随编辑器切换)+ 添加文件/文件夹(分开的选择器);上下文注入模型,但折叠显示。
- 子代理:状态标签,附最近回复预览。
- 技能:可用技能列在 / 菜单里(官方 skill.list)。
- .claude / .codex / GitHub Copilot 目录:DSH 核心自动加载 CLAUDE.md / AGENTS.md;.claude/commands、.claude/skills、.codex/skills(SKILL.md)、.github/copilot-instructions.md、.github/instructions、.github/agents 和 .github/prompts 会列在 / 菜单里,可直接插入。
- 权限:只读 / 工作区写入 / 完全访问三档切换(官方 /permission 命令)。
- 跨项目会话:按文件夹划分 @dsh 会话;多根工作区跟随当前活动编辑器;dsh.participantSessionMode: global 可共用一个会话。
- 工作区浏览器(📁 按钮,对齐 web 端 Workspaces):会话按工作区分组;可添加 / 重命名 / 删除 / 重排工作区;每组内可调整会话顺序、归档会话;支持会话内容搜索(标题即时匹配 + 服务端内容搜索,索引关闭时回退到本地搜索);每行显示等待审批 / 计划评审 / 提问 / 运行中状态。
- 后台任务面板(⚙️ 按钮):当前会话的 bash / pwsh / 子代理任务,显示状态、耗时和详情,数据实时来自 session/jobs 帧。
- 自动化任务面板(⏰ 按钮,宿主侧 schedule/,DSH 0.1.7+):列出所有保留的提醒,含规则文本、下次触发时间与倒计时、启用 / 已结束状态,支持搜索和状态筛选;点开任务可看指令、频率、时区、关联会话(一键跳转)、上次投递及其投递记录(最新在前,支持分页),行内确认后即可删除。目录会随宿主的 schedule/changed 事件自动刷新;宿主禁用 schedule 插件时(0.1.7 默认如此),面板会给出提示,而不是报错。
- 自动化任务面板(⏰ 按钮,宿主侧 schedule/,DSH 0.1.7+):列出所有保留的提醒,含规则文本、下次触发时间与倒计时、启用 / 已结束状态,支持搜索和状态筛选;点开任务可看指令、频率、时区、关联会话(一键跳转)、上次投递及其投递记录(最新在前,支持分页),行内确认后即可删除。目录会随宿主的 schedule/changed 事件自动刷新;宿主禁用 schedule 插件时(0.1.7 默认如此),面板会给出提示,而不是报错。
- 轨迹视图(🧭 按钮,对齐 web 端 Trajectory):按轮次组织的事件账本(seq · 时间 · 类型 · 摘要 · token 用量),点击可展开完整事件 JSON,支持按类型筛选。顶部工具栏全部使用线性图标(工作区 / 后台任务 / 自动化任务 / 轨迹 / 设置 / 子代理目录),尺寸 15px;Cordis 插件按钮保留 🧩 emoji;活动栏 / 辅助侧边栏容器和聊天视图使用线性机器人标识(media/robot.svg,由 VS Code 按主题图标色做遮罩),颜色跟随主题图标色。
- 设置面板(⚙️ 按钮,与 web 端 Settings 对齐):常规设置(每个命名空间都有 schema 驱动的表单、重启徽标、按命名空间重置)、模型与服务商(服务商路由目录 + 模型目录 + 端点模型发现)、凭据管理(API key 设置/清除)、在仍暴露该能力的宿主上编写智能体预设 —— DSH 0.1.7 移除了预设编写端点,所以只有当 settings/canOpenAgentPresetDirectory 报告支持时,复制 / 打开目录 / 删除按钮才会出现,其余情况下预设是只读的组合文本。

设置面板

- 子代理会话:点击子代理 chip 打开它的对话记录;可继续的子代理接受提示词(subagent.prompt)和中断(subagent.interrupt)。
- 图片附件:🖼️ 添加图片(官方 image content-block 通道),发送和历史回放都支持。
- 排队消息操作:排队中的消息可以编辑 / 删除 / 转向(官方 session.updateQueue)。
- 目标创建:没有目标时,🎯 chip 会创建一个(goal.create,带 objective 和轮次上限)。
- 一键提交信息:Source Control 标题栏的 ✨ 按钮(DSH: Generate Commit Message)读取已暂存/未暂存的 git diff,在一个一次性会话里用轻量模型生成 Conventional Commits 风格的信息(会话立即归档,从不出现在会话列表里;默认用 flash 关键字匹配 DSH 模型目录 + 低 effort;可通过 dsh.commitModel / dsh.commitReasoningEffort 配置),把结果写进 SCM 输入框,超时或模型请求额外交互时自动取消。模型切换是临时的 —— 先记下你的默认模型和思考深度,生成结束后恢复;用完即弃的会话要等答案返回后才归档(DSH 0.1.7 会阻止已归档会话上的轮次)。
- i18n:简体中文 / 繁体中文 / 英语 / 日语 / 韩语 / 德语 / 法语 / 西班牙语 / 葡萄牙语 / 泰语 / 印尼语 / 土耳其语 / 俄语 / 阿拉伯语 —— 跟随 VS Code 显示语言,也可以通过 dsh.language / 设置面板的 🌐 区块就地切换。

安装

cd <this folder>
npm install
npm run package # outputs Releases/dsh-vscode-<version>.vsix

VS Code → 扩展 → … → Install from VSIX → 选 Releases\ 里的文件 → 重新加载。

前置条件:VS Code ≥ 1.90(内置 chat ≥ 1.95;次级侧边栏容器 ≥ 1.106);DSH 命令行或 npx 兜底;模型凭据已配置(与 dsh web 相同)。

用法亮点

- 发送快捷键可以就地配置:Settings → ⌨️ Sending & input(或 settings.json 里的 dsh.sendKey)可选 Enter(默认)、Ctrl+Enter 或 Shift+Enter 发送,另一个组合键则插入换行。输入框提示行上的胶囊按钮始终显示当前绑定,点击即可切换。运行中发送按钮(纸飞机线框图标)会变成停止按钮(方块线框图标),继续输入则变回发送按钮(排队发送)。
- ↑ / ↓ 召回之前的输入(像 shell 一样,功能请求 issue #20):光标在第一行开头(或单行输入框内)时按 ↑,可往回翻看你发送过的全部内容;按 ↓ 往前翻;在最新一条之后继续按 ↓,会恢复你开始翻看前正在输入的内容(按 Esc 效果相同)。编辑召回的内容会保留你的修改,不会被覆盖;方向键在多行文本里仍然移动光标;隐藏或重新加载视图后历史记录依然保留。
- / 按钮(左下角):命令菜单(plan / compact / goal / feedback / permission / skills / .claude)。多数条目会把命令插入输入框(按 Enter 执行);Compact context 会直接运行 /compact,对话里出现实时压缩行——压缩时显示扫掠动画,随后显示「Compacted N history items (~T tokens)」,摘要可展开,被压缩的范围折叠进这一行(自动压缩也会出现同样的行)。
- 旁边的 + 按钮:添加文件 / 添加文件夹;蓝色标签是自动附加的当前活动文件。
- 消息操作:点击分叉线图标打开分支/回退菜单——逆时针箭头「Rewind here」、分叉图标「Branch from here」、左上折返「Branch and rewind earlier」,git-rollback 插件启用时还有「Undo this turn's file changes」/「View checkpoints」;分支会话还会显示左上箭头「Back to main」。每条助手回复上的逆时针箭头(DSH 服务端插件启用时)会把工作区恢复到该轮之前的状态。
- 会话 ⋯ 菜单:fork / 重命名 / 复制会话 ID / 归档;右上角预设胶囊(仅新会话);右下角思考 / 模型胶囊。
- 支持 DSH 0.2.1:智能体用新的 working_directory 工具切换会话目录后,输入框提示行会显示工作目录胶囊(点击可展开文件夹);这次切换也会以一行提示的形式出现在对话记录里,而不是显示成用户气泡。等待中的定时问题在视图重载或切换会话后依然保留(从宿主机的 userQuestions 投影恢复),后台任务面板由新的 job/registered / job/settled 事件驱动(状态、退出码和耗时),如果宿主机只给这个连接授予有限权限,会如实报告,而不是用原始拒绝码让调用失败。内置的 dsh-git-rollback 插件声明了 engines.dsh、图标和 15 条语言条目,因此 DSH 的插件管理器会把它列为兼容,并显示本地化的标题和描述。
- 源代码管理标题栏:✨ 按钮根据当前 diff 生成 Conventional Commits 格式的消息,并填入 SCM 输入框(打开多个仓库时会出现选择器)。
- 上下文菜单:选中内容 → DSH: Send Selection to @dsh;文件 → DSH: Ask @dsh About This File。

配置

| 键 | 默认值 | 说明 |
| dsh.url | http://127.0.0.1:3080 | DSH Web 服务器 URL |
| dsh.autoStart | true | VS Code 启动时,如果服务器未运行,就启动 dsh web |
| dsh.command | dsh | 启动命令;找不到时回退到 npx |
| dsh.autoStartTimeoutSec | 60 | 自动启动超时(秒) |
| dsh.participantSessionMode | per-workspace | @dsh 会话范围:按项目 / 全局 |
| dsh.openPanelOnStartup | false | 启动时打开独立窗口 |
| dsh.defaultReasoningEffort | "" | 新会话的默认思考深度(off/high/max,取决于模型) |
| dsh.commitModel | deepseek-v4-flash | 生成提交消息所用的模型(从 DSH 模型目录解析;找不到时回退到会话当前模型) |
| dsh.commitReasoningEffort | low | 提交消息的推理强度(low = DeepSeek 模型上不思考,最快) |
| dsh.language | auto | 界面语言:auto / zh-cn / zh-tw / en / ja / ko / de / fr / es / pt / th / id / tr / ru / ar |
| dsh.installRollbackPlugin | true | 自动把回合级 Git 回滚服务器插件安装到 DSH Web 配置档(启用 /rollback、/redo、/checkpoints) |

回合级 Git 回滚设置

- 自动(默认):扩展自带 dsh-git-rollback 服务器插件(宿主机端 + Web 客户端两半),激活时安装到你的 DSH Web 配置档(~/.dsh/profiles/web),可重复执行,按版本跟踪。如果你的 DSH 服务器已在运行,扩展检测到插件尚未加载时,会提供一键重启。Web 客户端那一半会在下次服务器启动时由 DSH 客户端模块流水线自动加载——无需手动设置。
- 手动安装(Web 界面用户 / 其他配置档):在终端执行 dsh plugin --profile web add dsh-git-rollback(已发布到 npm),然后重启 dsh web。
- 前提条件:会话工作区必须是 Git 仓库;每轮对话开始时(turn/start)都会打快照,并通过 .dsh/rollback 记录和隐藏 ref(refs/dsh/checkpoints/<sessionId>)在服务器重启后依然保留。要关闭自动安装,设置 dsh.installRollbackPlugin: false。

故障排查

- 「This session is already in use」/ session/writer-held:一个 DSH 会话同一时间只能由一个实例写入。退出另一个占用该会话的实例(桌面应用、另一个 dsh web,或驱动同一服务器的第二个 VS Code 窗口),或者直接在 VS Code 里切换到别的会话——输入框上方的提示条随即消失,模型切换、重命名和发送都恢复正常。

- 什么都没显示 → 重新加载窗口;运行 DSH: Show Diagnostics;检查扩展运行时状态里有没有校验错误。
- 「No registered data provider」→ 运行 DSH: Repair Chat View (Reset View Locations) 或 Restart Extension Host。
- webview 里报 Service worker 错误 → VS Code 1.100.x 的平台 bug:升级 VS Code,或清空 %APPDATA%\Code\Service Worker\CacheStorage。
- 「agent preset is fixed」→ 已启动的会话不能切换预设;预设胶囊只对新会话显示。
- 未连接 → 运行 DSH: Start Server;检查 dsh.url。
- 服务器版本:本构建面向 DSH 0.1.5-rc.1,会协商改名后的附件参数,所以 0.1.2-rc.1 的服务器照样能用(命令、子代理提示词、流式输出);把服务器升到 0.1.5 还能额外获得实时流式帧、V3 会话日志和上下文明细投影。
- 服务器没有自动启动 → 扩展每 15 s 重试一次,服务器一就绪就连接;见「DeepSeek Harness」输出频道里的 [server] 日志。如果错误里提到 0xC0000142/EPERM,说明 VS Code 是从 DSH 会话或受限终端里启动的(子进程创建被拦截)——正常启动 VS Code,或把该会话的权限设为 danger-full-access。

开发

npm install
npm run typecheck
npm run build
npm run package # → Releases/

- 宿主:src/extension.ts、src/dsh/(API 客户端、服务器管理器、会话存储、聊天参与者、项目-会话映射、提交信息生成)。
- UI:src/webview/{channel,panel,window,ui}.ts + media/chat.css;图标 media/icon.png。
- 国际化:package.nls.json + package.nls.zh-cn/zh-tw/ja/ko/de/fr/es/pt/th/id/tr/ar.json,l10n/bundle.l10n.json + bundle.l10n.zh-cn/zh-tw/ja/ko/de/fr/es/pt/th/id/tr/ar.json,ui.ts 里的 EN_TEXT 字典 + src/webview/texts/.json。
- 服务端插件:源码放在 plugins/<name>/ 下(所有新增的 DSH 服务端插件都放这里);npm run build 负责编译,并通过 tools/sync-plugins.mjs 把打包产物同步到 resources/<name>/,供打包进 vsix。单元测试:cd plugins/<name> && npm test。

DeepSeek Harness for VS Code (dsh-vscode)

使用前请先启动 DSH Web 服务:先在命令行中执行以下命令,安装并启动 dsh web,之后才能在 VS Code 中使用本插件。

npx @deepseek-ai/dsh web

English version | 发布者:Jager · 最新版本:0.13.63

在 VS Code 中直接使用 DeepSeek Harness(dsh),像 ChatGPT / Copilot 一样融入 VS Code 聊天体系:内置聊天参与者 @dsh、辅助侧栏 / 独立聊天窗口、工作区 / 后台任务 / 轨迹 / 设置面板、回合级 Git 回退,以及多语言界面(简体中文 / 繁體中文 / English / 日本語 / 한국어 / Deutsch / Français / Español / Português / ไทย / Bahasa Indonesia / Türkçe / Русский / العربية,跟随 VS Code 显示语言或手动切换)。

功能总览

- 内置聊天参与者 @dsh:在 VS Code 原生 Chat 面板(Ctrl+Alt+I)输入 @ 选择 dsh;助手回复流式渲染,含工具调用与审批按钮;支持 /new、/session <ID>、/preset <名> 斜杠命令。
- 辅助侧栏子 tab:VS Code ≥ 1.106 时容器直接出现在辅助侧栏(与 ChatGPT 等并列);旧版本自动回退到活动栏图标。
- 独立聊天窗口:编辑器区 WebviewPanel,命令 DSH: 打开独立聊天窗口。
- 现代聊天界面:大号圆角输入框、胶囊工具栏(思考深度 / 模型 / 预设 / 权限),以及输入框右上角、预设胶囊右侧的上下文进度环(与网页端一致:点击展开「上下文已用」读数 ~已用 / 上限,以及 系统提示词 / 工具定义 / 对话消息 三段彩色构成与各自 token 数)。输入框下方是两枚会话统计胶囊(与网页端一致):4 轮 285 步 · 267 tok/s(点击展开 会话统计:模型用时 · 工具调用用时 · 首 token 平均 TTFT · 输出速度 TPS)与 71M tok · 缓存命中 99.6%(点击展开 Token 用量:精确总量 · 缓存命中 · 未缓存输入 · 缓存读取/写入 · 输出)。
- 上下文超限提示留在对话里(issue #19):进度环在 75% 转琥珀、90% 转红(此时面板内提供一键压缩上下文);当本次输入预计让上下文越过窗口 90% 时,发送前会在对话里落一张卡片,给出预计读数与压缩上下文 / 切换模型两个动作。若回合仍然失败 —— 提供方以上下文超限报错、回合以 error 结束、或达到输出上限 —— 原因都会写在该回合的对话位置,而不再只闪一条浮动提示;使用窗口较小的模型(MiniMax 等 pi-ai 路由)不会再「悄无声息地失败」。
- 消息操作条(每条回答下方,简约线条图标):复制(双层矩形图标)/ 分支(分叉线条图标,点击展开菜单:逆时针箭头"回退到此处" · 分叉图标"从此处新建分支" · 左上折线"分支并回退到更早位置" · 左上箭头"回到主线")/ 点赞、点踩(拇指线条图标;0.1.7 起走原生 messageFeedback,再点一次即撤销,旧会话回退到 /feedback 命令)/ 消息头显示模型名 · 思考耗时 · 本步 token 消耗。
- 回合尾统计(与网页端一致):用量 25.8K tok 胶囊(点击展开 提供方/模型 · 缓存命中率 · 未缓存输入 · 缓存读取/写入 · 输出(含推理占比))、用时 5分57秒 胶囊(点击展开 本轮总用时 · 输出速度 TPS · 首 token 用时 TTFT),最右侧显示收尾消息的本地时间(当天 HH:mm,更早 M月D日 HH:mm,跨年 Y年M月D日 HH:mm)。会话运行中,历史回合的操作条与统计默认隐藏、悬停该条消息才淡入(网页端 data-actions-reveal 同款),只有已结束的最新回合常显。
- 过程时间线(与网页端 ToolRow / ThinkRow 一致):思考与工具调用渲染为左侧导轨上的一行——思考 • <首行摘要>(流式期间展开,思考结束自动收起,手动开合会被保留)与 读取 / 写入 / Pwsh / Grep • <人类可读摘要>(状态点 + 运行中扫光),点击展开完整参数/结果(含图片结果);不再把整段 JSON 铺在行上。过程行随事件实时出现,每段末尾附一行网页端同款汇总(「执行了 1 条命令 · 读取了 1 个文件 · 搜索了 2 次」),点击即可折叠/展开该段;输入框上方的活动行同时说明当前动作(工具标题 + 摘要),不再是笼统的「执行工具…」。
- 交付文件卡(与网页端 present 一致):模型交付的文件在回合尾渲染为卡片——文件名 + 描述、打开 按钮(已跟踪文件直接打开 HEAD→工作区 diff)与 ⋯ 菜单(用默认应用打开 / 在资源管理器中显示)。
- 回合级 Git 回退(每条助手回答上的 ↩ 按钮 +「分支/回退」菜单项):DSH 服务端插件 dsh-git-rollback 在每个回合开始时,把工作区 git 状态(含未跟踪文件)快照到隐藏引用(refs/dsh/checkpoints/<sid>,用户分支历史零污染),并记录在 .dsh/rollback;点击按钮即可把工作区恢复到该回合之前的状态。/rollback [N]、/redo、/checkpoints 命令在 web 命令面板与 VS Code 聊天面板通用——回退非破坏性(先存保存点,/redo 可恢复,ignored 文件永不触碰)。每条消息的 ⋯/分支菜单另提供 「撤销本回合改动」(先预览后确认的审核弹窗,只反向应用该回合自身产生的文件改动——你自己的提交与 HEAD 完全不受影响)、「查看检查点」 与「撤销本回合变更并从此处新建分支」。网页端聊天开箱即用地获得同款 Copilot 风格回合分隔线与悬浮还原弹窗(插件 web 半区,经 DSH client-modules 管线分发)。

撤销本回合改动审核弹窗

消息操作菜单(撤销 / 检查点 / 分支)
- 思考过程折叠:💭 思考过程默认收起,点击展开;工具调用每轮折叠为一行摘要「本轮调用 N 个工具」。
- 产物文件框:每轮结束在对话末尾显示生成的文件列表,点击在编辑器中打开。
- 会话管理:会话下拉旁的 ⋯ 菜单支持 分叉 / 重命名(预填当前标题)/ 归档(仍保留在服务器)。
- 目标(goal):goal 进度卡(目标 · 阶段 · 轮次 · 进度条)+ 🎯 目标模式芯片,点击可 修改 / 完成 / 清除目标。
- 限时(异步)提问(DSH 0.2.0+):带等待时限的提问会在卡片上显示实时倒计时胶囊;等待到期后 Agent 先继续工作,卡片保留为「等待已结束 · 可稍后回答」,你的迟到回答会作为同一会话的后续消息送达。
- 任务清单(与网页端 TodoPanel 同款,停靠在输入框上方):清单图标 +「任务」+ 只列非零状态的进度摘要(如「2 已完成 · 1 进行中 · 1 待处理」),点击折叠/展开清单;三种状态图标与网页端一致(绿勾圆环 / 旋转渐变圆环 / 虚线圆环)。
- 计划模式:/ 命令菜单选「计划模式」后出现 📝 芯片,点击退出;plan/mode 状态实时同步。
- 附件:自动附加当前激活文件(跟随编辑器切换,蓝色芯片)+ 手动添加文件/文件夹(二选一菜单);发送时上下文注入模型,界面默认折叠为「📎 附件上下文」卡片,不展开文件内容。
- 子代理:对话底部显示子代理芯片(运行状态),点击查看最近回复。
- 技能:/ 菜单列出会话可用技能(官方 skill.list),点击插入提示词。
- .claude / .codex / GitHub Copilot 目录:CLAUDE.md / AGENTS.md 由 DSH 核心自动读取(菜单显示 ✅);.claude/commands 与 .claude/skills、.codex/skills(SKILL.md)、.github/copilot-instructions.md、.github/instructions、.github/agents、.github/prompts 均可在 / 菜单中查看并插入使用。
- 读写权限:权限胶囊切换只读 / 工作区可写 / 完全访问(危险),官方 /permission 命令。
- 跨项目会话:每项目(工作区文件夹)独立 @dsh 会话;多根工作区跟随活动编辑器;/session <ID> 显式切换;dsh.participantSessionMode: global 可全局共用。
- 工作区浏览器(📁 按钮,网页端 Workspace 对齐):按工作区分组显示会话;添加 / 重命名 / 删除 / 上移下移工作区,组内会话排序与归档;会话内容搜索(标题即时匹配 + 服务器内容搜索,后端索引禁用时自动回退本地匹配);会话行显示 等待审批 / 计划待审 / 等待回答 / 运行中 状态。
- 后台任务面板(⚙️ 按钮):当前会话的 bash / pwsh / 子代理等后台任务清单(状态 · 起止时间 · 耗时 · 明细),随 session/jobs 帧实时刷新。
- 自动化任务面板(⏰ 按钮,宿主侧 schedule/,需 DSH 0.1.7+):列出全部保留的提醒任务(规则文案 · 下次计划时间与倒计时 · 已开启/已结束),支持搜索与状态筛选;点开任务可看内容、提醒频率、时区、关联会话(一键跳转)、最近一次投递与其运行记录(新→旧分页),并可就地确认删除。目录随宿主 schedule/changed 事件自动刷新;宿主未启用定时任务插件(0.1.7 默认)时面板给出说明而不是报错。
- 自动化任务面板(⏰ 按钮,宿主侧 schedule/,需 DSH 0.1.7+):列出全部保留的提醒任务(规则文案 · 下次计划时间与倒计时 · 已开启/已结束),支持搜索与状态筛选;点开任务可看内容、提醒频率、时区、关联会话(一键跳转)、最近一次投递与其运行记录(新→旧分页),并可就地确认删除。目录随宿主 schedule/changed 事件自动刷新;宿主未启用定时任务插件(0.1.7 默认)时面板给出说明而不是报错。
- 轨迹视图(🧭 按钮,网页端 Trajectory 对齐):按回合组织的事件台账(序号 / 时间 / 类型 / 摘要 / token 用量),点击展开完整事件 JSON,支持类型筛选。头部工具栏统一为线条图标(工作区 / 后台任务 / 自动化任务 / 轨迹 / 设置 / 子代理目录),15px、跟随主题图标色;Cordis 插件按钮保留 🧩 emoji,活动栏 / 辅助侧栏容器与聊天视图改用线条机器人图标(media/robot.svg,由 VS Code 按主题图标色蒙版着色)。
- 设置面板(⚙️ 按钮,与网页端 Settings 对齐):常规设置(schema 驱动表单,覆盖全部命名空间,含「需重启」标注与命名空间重置)、模型与服务商(服务商路由目录 + 模型目录 + 发现模型端点探测)、凭据管理(API Key 写入 / 清除)、Agent 预设管理(在仍提供作者端点的宿主上,可查看组合文本 / 复制新预设 / 打开预设目录编辑 cordis.yml / 删除用户预设——DSH 0.1.7 移除了预设作者端点,此时按钮隐藏,预设只能查看组合文本)。

设置面板

- 子代理对话:点击子代理芯片打开完整记录;continuable 子代理可直接追问(subagent.prompt)与打断(subagent.interrupt)。
- 图片附件:🖼️ 添加图片(官方 image 内容块通道),发送与历史回放均支持。
- 排队消息操作:排队消息条可编辑 / 移除 / 插队(session.updateQueue 官方端点)。
- 目标创建:无目标时 🎯 芯片一键创建(goal.create,目标描述 + 最大轮数)。
- 一键生成提交信息:源代码管理(SCM)视图标题栏 ✨ 按钮(DSH: 生成提交信息),读取 git 暂存/未暂存 diff,在一次性会话(生成期间隐藏、结束后归档,不占用会话列表)中用轻量模型按 Conventional Commits 风格生成提交信息并写入 SCM 输入框;模型与思考深度可配置(dsh.commitModel 为关键字,默认 flash,按目录匹配 / dsh.commitReasoningEffort),超时或模型请求额外交互时自动取消。模型切换是临时的——先记录你的默认模型与思考深度,生成结束即恢复;一次性会话在拿到结果之后才归档(DSH 0.1.7 对已归档会话会直接 block 回合)。
- 多语言:扩展与聊天界面支持简体中文 / 繁體中文 / English / 日本語 / 한국어 / Deutsch / Français / Español / Português / ไทย / Bahasa Indonesia / Türkçe / Русский / العربية——跟随 VS Code 显示语言,或通过设置 dsh.language / 设置面板 🌐 就地切换。

安装

方式一:安装 .vsix(推荐)

cd <本目录>
npm install
npm run package # 生成 Releases/dsh-vscode-<版本>.vsix

VS Code 中:扩展 → … → 从 VSIX 安装 → 选择 Releases\ 下的 .vsix → 重载窗口。

方式二:开发模式(F5)

npm install
npm run watch

用 VS Code 打开本目录,按 F5 启动扩展开发宿主。

前置条件

- VS Code ≥ 1.90;内置聊天 @dsh 需要 ≥ 1.95;辅助侧栏容器需要 ≥ 1.106(旧版自动回退活动栏)。
- DSH CLI(dsh),或允许扩展用 npx --yes @deepseek-ai/dsh@latest 自动启动服务器。
- DSH 已配置模型凭证(与 dsh web 一致)。

使用

| 入口 | 说明 |
| 内置 Chat @dsh | 输入 @ 选 dsh;DSH: 打开内置聊天 (@dsh) 或状态栏 DSH 图标可自动填入 |
| 辅助侧栏 tab | 视图 → 外观 → Secondary Side Bar(Ctrl+Alt+B) |
| 独立窗口 | DSH: 打开独立聊天窗口 |
| SCM 提交按钮 | 源代码管理视图标题栏的 ✨ 按钮(DSH: 生成提交信息),多仓库时弹出选择 |

- 发送快捷键可在界面内直接选择:设置 →「⌨️ 发送与输入」(或 settings.json 里的 dsh.sendKey)可选 Enter(默认)/ Ctrl+Enter / Shift+Enter 发送,另一组合键换行;输入框提示行旁的胶囊始终显示当前键位,并可点击切换。运行中发送按钮(纸飞机线条图标)变为停止(方块线条图标),输入文字变回发送(消息排队)。
- ↑ / ↓ 调回之前发送过的输入(与终端一致,需求来自 issue #20):光标在首行行首(或单行输入)时按 ↑ 逐条回溯历史输入,↓ 前进;越过最新一条会恢复进入历史前正在编辑的草稿(Esc 同效)。调回后手动编辑的内容不会被覆盖;多行文本中方向键仍只移动光标;历史在视图隐藏 / 重载后仍保留。
- 左下角 / 按钮:命令菜单(计划模式 / 压缩上下文 / 设置目标 / 记录反馈 / 切换权限 / 技能 / .claude 命令与技能)。多数项插入命令到输入框(回车执行);压缩上下文点击即执行 /compact,对话内实时显示压缩行 —— 压缩中扫光,完成后显示「已压缩 N 条历史记录(约 T tokens)」且摘要可展开,被压缩的区间折叠进该行(自动压缩同样单列一行)。
- 左上角 + 按钮:添加文件 / 添加文件夹(二选一);附件行蓝色芯片为自动附加的激活文件(× 移除)。
- 消息操作条:点击分叉线条图标打开分支/回退菜单 —— 逆时针箭头「回退到此处」(去掉本条及之后)、分叉图标「从此处新建分支」(保留到此)、左上折线「分支并回退到更早位置」,以及 git-rollback 插件激活时的「撤销本回合改动 / 查看检查点」;分叉会话另有左上箭头「回到主线」。
- 会话 ⋯ 菜单:分叉 / 重命名 / 复制会话 ID / 归档;右上角「预设」胶囊(仅新会话显示);右下角「思考 / 模型」胶囊。
- 适配 DSH 0.2.1:智能体用新的 working_directory 工具切换会话目录后,输入框提示行会出现「工作目录」胶囊(点击在资源管理器中定位),对话里同时出现一行小字提示(不再被当成用户发言);待答的限时提问在重载视图或切换会话后依然保留(由宿主的 userQuestions 投影还原);后台任务面板改用新的 job/registered / job/settled 事件驱动(状态、退出码、耗时);若宿主只给本连接授予受限访问权限,会明确提示而不是抛出 remote-access/denied 原始错误码。随包分发的 dsh-git-rollback 插件补上了 engines.dsh、图标与 15 种语言的显示文案,DSH 插件管理里现在显示为「兼容」并带本地化标题/描述。
- 模式芯片:📝 计划模式(点击退出)、🎯 目标模式(点击管理目标)。
- 右键菜单:编辑器选中代码 → DSH: 发送选中代码到 @dsh;文件右键 → DSH: 向 @dsh 询问此文件。

配置

| 配置项 | 默认值 | 说明 |
| dsh.url | http://127.0.0.1:3080 | DSH Web 服务器地址(修改后需重载) |
| dsh.autoStart | true | VS Code 启动时若服务器未运行则自动启动 dsh web |
| dsh.command | dsh | 启动命令;找不到时回退 npx |
| dsh.autoStartTimeoutSec | 60 | 自动启动最长等待秒数 |
| dsh.participantSessionMode | per-workspace | @dsh 会话范围:每项目 / 全局 |
| dsh.openPanelOnStartup | false | 启动时自动打开独立聊天窗口 |

| dsh.defaultReasoningEffort | "" | 新会话默认思考深度(off/high/max 等,取决于模型) |
| dsh.commitModel | deepseek-v4-flash | 生成提交信息所用的模型(从 DSH 模型目录解析,找不到时回退当前模型) |
| dsh.commitReasoningEffort | low | 生成提交信息时的思考深度(DeepSeek 模型上 low 表示不开思考,最快) |
| dsh.language | auto | 界面语言:auto / zh-cn / zh-tw / en / ja / ko / de / fr / es / pt / th / id / tr / ru / ar |
| dsh.installRollbackPlugin | true | 自动把回合级 Git 回退服务端插件安装到 DSH web profile(启用 /rollback、/redo、/checkpoints) |

回合级 Git 回退的安装

- 自动(默认):扩展随包携带 dsh-git-rollback 服务端插件(host + 网页端 client 两半),激活时幂等安装到你的 DSH web profile(~/.dsh/profiles/web,带版本标记增量更新)。若 DSH 服务器已在运行,扩展检测到插件未加载时会提示一键重启(仅限本扩展启动的服务器)。网页端 client 半区在下次服务器启动时由 DSH client-modules 管线自动发现,无需手动配置。
- 手动(web 界面用户 / 其他 profile):终端执行 dsh plugin --profile web add dsh-git-rollback(已发布到 npm),然后重启 dsh web。
- 前提:会话工作区是 git 仓库;每个回合开始(turn/start)自动快照,重启服务器后检查点依然可用(记录在 .dsh/rollback + 隐藏引用 refs/dsh/checkpoints/<会话ID>)。可设置 dsh.installRollbackPlugin: false 关闭自动安装。

故障排查

- 「当前会话已被占用」/ session/writer-held:DSH 的会话同一时刻只允许一个实例写入。请退出已挂载该会话的另一端(桌面端、另一个 dsh web,或驱动同一服务器的另一个 VS Code 窗口),或在 VS Code 里直接换一个会话 —— 输入框上方的占用提示条会自动消失,切模型 / 重命名 / 发送即可恢复。

- 扩展没出现:确认已重载窗口;扩展面板查看运行时状态有无校验错误;命令面板执行 DSH: 显示诊断信息。
- 视图占位"没有已注册数据提供程序":执行 DSH: 修复聊天视图(重置视图位置),或命令面板 Restart Extension Host。
- Webview 报 Service Worker 错误:VS Code 1.100.x 平台缺陷,升级 VS Code 或清空 %APPDATA%\Code\Service Worker\CacheStorage。
- "agent preset is fixed":已开始的会话不可切换预设,预设胶囊只在新会话显示。
- 未连接:执行 DSH: 启动服务器;检查 dsh.url 端口。
- 服务器版本:本版本面向 DSH 0.1.5-rc.1,并会对改名的附件参数做协商,因此 0.1.2-rc.1 服务器同样可用(命令、子代理消息、流式输出);服务器升级到 0.1.5 后另有逐 token 流式帧、V3 会话日志与上下文构成投影。
- 启动时无法自动启动服务器:扩展会在 VS Code 启动时自动启动 dsh web(失败后每 15 秒重探,服务器上线即自动连接);具体失败原因见输出通道 "DeepSeek Harness" 的 [server] 日志。若报错含 0xC0000142/EPERM,说明 VS Code 是从 DSH 会话或受限终端启动的(子进程创建被拦截)——改用普通方式启动 VS Code,或把该会话权限调为 danger-full-access。

开发

npm install
npm run typecheck # 类型检查
npm run build # 构建
npm run package # 打包到 Releases/

- 宿主代码:src/extension.ts、src/dsh/(API 客户端 / 服务器管理 / 会话存储 / Chat Participant / 项目会话映射 / 提交信息生成)。
- 界面:src/webview/{channel,panel,window,ui}.ts + media/chat.css;图标 media/icon.png。
- 本地化:package.nls.json + package.nls.zh-cn/zh-tw/ja/ko/de/fr/es/pt/th/id/tr/ar.json(贡献点)、l10n/bundle.l10n.json + bundle.l10n.zh-cn/zh-tw/ja/ko/de/fr/es/pt/th/id/tr/ar.json(宿主运行时)、ui.ts 的 EN_TEXT 词典 + src/webview/texts/.json(Webview)。
- 服务端插件:源码统一放在 plugins/<name>/(以后所有新插件都建在此目录);npm run build 会自动编译并同步到 resources/<name>/(tools/sync-plugins.mjs)随 vsix 打包分发。插件单元测试:cd plugins/<name> && npm test。
预览分享卡片长什么样 ↓NEXTINDIE/DeepSeek-Harness-for-VS-Code
分享 · DeepSeek Harness Hub
NEXTINDIE/DeepSeek-Harness-for-VS-Code

使用本扩展前:先在终端启动 DeepSeek Harness 服务端,扩展会在 VS Code 内连接它。

回到顶部