文章

在 DeepSeek Harness 里装一个接近 IDE 的工作区面板(附安装命令)

· 12 分钟阅读 · 本文以中文撰写

2026 年 11 月 11 日,我给 DeepSeek Harness 写了一个工作区面板,先能看文件树。第二天就叠到接近 IDE:多标签、查找替换、Quick Open、Git 槽标记、符号面包屑。到 11 月 12 日发到 v1.8.10。

如果你也在 Harness 里跟模型对着改代码,最烦的往往是切窗口。改一行去另一个编辑器,搜全仓库再切回来,对话上下文还在闪。这篇先给你一条能马上用的安装命令,再讲这个面板为什么能在对话旁边做到接近 IDE。

dsh-workspace-ide 就是这个面板:装进 DeepSeek Harness 之后,在左侧打开工作区,浏览、搜索、看 Git、在文件里改和保存,都不必离开当前对话。

先装上,再看它长什么样

在 DeepSeek Harness 的会话里,用插件管理器安装 npm 上的包:

plugin_manager {
  action: "install_bundle",
  target: "dsh-workspace-ide"
}

也可以装 GitHub 仓库,或钉到某个发行包:

plugin_manager { action: "install_bundle", target: "echoVic/dsh-workspace-ide" }
plugin_manager { action: "install_bundle", target: "https://github.com/echoVic/dsh-workspace-ide/archive/refs/tags/v1.8.10.tar.gz" }

插件是按配置文件范围安装的,重启还在。返回里如果看到 application: "applied",说明它已经生效。客户端改动走 Harness 的热更新,Host 这一侧的改动要等下一次 Host 启动。

装好后,左侧栏会出现「工作区」,就在插件、定时任务、用量统计旁边。顶上三个图标切换文件、搜索、Git。右边的工作区选择器跟着当前正在看的会话走,你也可以手动挑一个,只对这次会话生效。

文件树加带行号的编辑器,状态栏和保存按钮都在,演示工作区是 aurora-dashboard

图 1:文件树和带行号的编辑器。截图来自项目 README 的合成演示工作区 aurora-dashboard,不是真实用户数据。

快捷键按你在 VS Code 里的肌肉记忆来就行:Ctrl/Cmd+P 快速打开,Ctrl/Cmd+F / H 查找和替换,Ctrl/Cmd+S 保存,Ctrl/Cmd+W 关标签,Ctrl/Cmd+Shift+O 跳到当前文件里的符号。

三个面:文件、搜索、Git

文件面是一个懒加载的目录树,中间是可调宽度的编辑区。打开的文件带语法高亮和行号,Git 改动会在槽里打标记。点面包屑可以往上走目录。软换行是 Alt+Z,跳到指定行是 Ctrl/Cmd+G。

多标签按文件开,每个标签自己保留草稿和光标。切走再切回来,没保存的改动还在。关掉一个有未保存内容的标签,会先问你要不要丢。

多标签编辑,脏标记和未保存提示

图 2:一个文件一个标签。脏标记只说明这个标签里还有没写入磁盘的草稿。

搜索面做全工作区文本搜索,可切换大小写、正则、整词,也能加包含过滤。命中按文件分组,高亮后一点就跳到那一行。

Git 面给出当前分支、领先或落后、已暂存 / 未暂存 / 未跟踪 / 冲突,以及带颜色的统一 diff。下面是提交历史,点进去能看这次提交的 diff。这个标签开着的时候,状态和日志会自己刷新:一次只跑一趟,最快 5 秒一次,扫描变慢会退让,窗口切到后台就暂停,重新聚焦会立刻拉一次。每次保存之后,槽里的 Git 标记也会更新。如果当前工作区还不是 Git 仓库,它会列出其他已经是仓库的工作区,点一下就能切过去。

编辑手感是怎么叠上去的

接近 IDE,关键是常用的那几下不必离开对话。把功能名写进更新日志,帮不上忙。

查找替换带匹配计数、上一个 / 下一个,以及大小写、整词、正则。所有命中会画在文字后面,你能一眼看到还会改到哪里。Quick Open 在本地对整个工作区文件索引做模糊子序列打分,不必等网络。当前文件里可以用「转到符号」跳到函数、类、类型、常量;Markdown 和 JSON 则跳到标题或键。标题上会显示你正处在哪个符号里,Alt+↑/↓ 可以在符号之间走。

Quick Open 面板,按模糊匹配列出工作区文件

图 3:Ctrl/Cmd+P 打开 Quick Open。匹配在本地打分,不经过一次额外的网络往返。

括号匹配、自动补对、智能缩进、缩进参考线和当前行高亮,都是为了让「敲回车、对一下括号」这些小动作跟在常用编辑器里一样。Cmd/Ctrl+/ 按语言切换注释,行注释或块注释都按这一种语言的规则来,可逆,保留缩进,空行不动。

Markdown 可以从文件头切换源码和预览,快捷键是 Cmd/Ctrl+Shift+V。预览用 React 元素拼出来,不往页面里灌 HTML。围栏代码块走同一套高亮,和当前主题一致。相对路径的图片按 Markdown 文件所在目录解析,再走 Host 上带鉴权的图片路由,所以 ![shot](public/hero.png) 能显示工作区里的真实文件。远程 https: 图片保持原地址;逃出工作区的路径会被拒绝。预览看的是当前草稿,没保存也能马上看到效果。

语法高亮是为这个面板写的一个小引擎,不附带 Shiki 或 Prism,浏览器这一半运行时仍然只依赖 react。Harness 报上来的常用语言都覆盖了;不认识的文件,以及超过 300 KB 的文件,会退回纯文本,免得渲染拖垮页面。编辑的时候,一层透明文字的 textarea 叠在高亮层上面,光标、选区、滚动和行号槽保持同步。

主题默认跟随 Harness 的亮色 / 暗色。你也可以改成 Dark+、Light+、One Dark Pro、Dracula、GitHub Dark、Solarized Light,只作用在这个面板里,选择记在 localStorage。

它怎么跟 Harness 分工

面板分两半。

左边是浏览器里的面板,右边是 Host 上九条带鉴权的路由;save 只能覆盖已有普通文件

图 4:浏览器负责手感,Host 负责读盘、搜索、Git 和保存。路径检查在 Host 这一侧完成。

浏览器这一半注册左侧栏图标和对应的主面板,只用 react、Harness 的主题变量,以及一份内置的中英词典。面板跟着当前会话的工作区走;如果运行环境里没有工作区钩子,会安全地退回,而不是把页面弄崩。

Host 这一半注册九条带鉴权的 fetch 路由:workspaces、list、files、file、image、search、git、save、ping。文件系统访问都要过路径检查,绝对路径、.. 逃逸、符号链接逃逸、不在已知工作区里的根,一律拒绝。除了 save 和 ping,全部只读。save 只能原子覆盖已经存在的普通文件,不能借保存新建一条路径,也不能写到工作区外面。ping 只往 $DSH_HOME/workspace-ide/status.jsonl 写一行诊断,用来证明这段代码确实跑过。Git 通过 child_process.execFile 执行,输出有上限;当前根不是仓库,是一个正常结果,不当成错误。

图片和 SVG 走单独的 Host 路由,按文件头校验类型,单次读取上限 8 MiB。栅格图在棋盘格背景上居中预览;SVG 可以在预览和源码之间切,改源码会马上反映到图上。

这些约束看起来严,其实是在给「对话旁边能改文件」托底。模型可以建议你改,你按 Ctrl/Cmd+S 写入的,仍然只是工作区里那份已经存在的文件。

装完用这张清单验收

把下面几件事当场做一遍,就能确认面板是不是按预期在干活:

  1. 左侧栏出现「工作区」,能看到当前会话的文件树。
  2. 打开一个已有的文本文件,改一行,Ctrl/Cmd+S 保存,再打开确认写进去了。
  3. Ctrl/Cmd+P 输入文件名的一段,能跳到这个文件。
  4. Ctrl/Cmd+F 在当前文件里查找,计数和全部命中高亮都在。
  5. 切到 Git 面,能看到当前分支和一份 diff;如果当前目录还不是仓库,能看到可切换的其他仓库。
  6. 打开一个带相对图片的 Markdown 文件,切到预览,工作区里的图能显示,工作区外的路径不会被加载。

如果你正在给别的 Agent 环境做类似的工作区面板,也可以把这六条当成最小清单:树、保存、快速打开、查找、Git、受路径约束的预览。少任何一条,用的时候都还是会想切回原来的编辑器。

材料与时效

本文以 2026-11-13 可读的公开材料为准,对应 dsh-workspace-ide v1.8.10:

  • 仓库 README 的功能说明、安装方式和 Host / Client 分工
  • CHANGELOG.md 里 11 月 11 日到 12 日的发版记录

我没有在文中把每一天的小版本逐条展开。截图来自项目自己生成的合成演示工作区,不是我这边真实仓库的画面。后续版本以 GitHub 仓库和 npm 上的 dsh-workspace-ide 为准。

继续阅读

相关文章

讨论

审核后公开 · 支持 Markdown

读到这里时加载讨论。