前言¶
在 DeepSeek Harness(DSH)里和智能体协作时,经常要在对话和工作区文件、提交历史之间来回切换。Harness 自带会话侧栏与 remote.workspaceFiles 服务可以列目录、读文件,但若想在同一块界面里完成「浏览 → 查看/轻量编辑 → 对照 Git 历史 → 顺带开一个真实 shell」,往往仍要依赖多处入口或外部编辑器。
下面介绍的 dsh-code-viewer(社区目录名 kingzhoudk/dsh-code-viewer)是维护者 Kingzhoudk 发布的 客户端 类 DSH 插件:在 Web GUI 右侧栏增加 kind = code 的标签页 CodeIDE,布局与交互刻意贴近 VS Code 的代码侧栏,但 Git 侧保持只读,编辑能力限于可保存的文本查看器,不做暂存、提交与分支操作。
这是什么¶
- 仓库:Kingzhoudk/dsh-code-viewer
- 目录页:skillhub.cn 插件页
- 版本(
package.json):0.1.0 - 许可证:MIT
- DSH 引擎要求:
>=0.2.2-rc.1 <0.3.0
插件由 Host(index.js,提供 /plugins/code-viewer 下仓库读、写、Git 查询、资产路由)与 Client(client.js,右侧栏 UI、快捷键、引用桥接)组成。读文件走 Harness 按会话授权的 remote.workspaceFiles;保存与 Git 图谱等走插件 Host 路由。
界面与核心能力¶
面板顶部为「代码」标签,标题栏提供 [文件] [Git 图谱] [引用] [↻] 等入口;主体为左侧工作区文件树 + 右侧内容区,底部默认展开可收起的命令行分栏。
文件树与内容查看¶
- 左侧文件树:对会话工作区根目录 懒加载(
remote.workspaceFiles.list)。默认隐藏.git、node_modules、dist等目录,可用标题栏漏斗按钮显示;已修改/新增/删除/未跟踪文件分别带M/A/D/U角标。 - 右侧内容:
remote.workspaceFiles.read按行分页,单次最多 3,000 行,超出会提示截断;带行号、横向滚动与轻量语法着色,标题前显示 Material 风格文件图标。
语法着色与特例¶
- Python:三引号跨行、装饰器、
f"/rb'前缀、self/cls与内置名等单独着色。 - C++:独立关键字表、预处理行整行着色、常见
std名着色;.h按 C++ 处理。 - JSON:键值区分着色;默认 2 空格格式化 显示,标题栏可切「格式化 / 原始」;解析失败或格式化后超过 600 KB / 5000 行时保留原文;
.jsonc支持注释后再格式化。 - Markdown:默认 渲染(标题、强调、列表、引用、链接、围栏代码块等),代码块内仍按语言着色;标题栏可在「渲染 / 源码」间切换。
- 其余语言:README 列出 C/C++/C#/Java/Go/Rust 等长名单;按扩展名与
Dockerfile、Makefile、CMakeLists.txt等特殊文件名识别。
图标来自 Material Icon Theme 官方素材子集(MIT),以内联 data URL 渲染,不额外联网。
Git 图谱(只读)¶
展示全部分支的提交泳道图、分支/标签装饰、作者与时间。点击某次提交可进入该提交的 可点击改动文件列表,下方按「修改前 / 修改后」分栏对比选中文件,可返回图谱。插件 不 做 checkout、暂存、提交或分支切换。
命令行分栏¶
面板底部内嵌命令行,经 Harness 的 ctx.webTerminals 驱动 真实 shell(与自带终端标签共用 PTY 栈)。优先用内置 xterm.js(vendor/xterm.mjs,MIT)渲染;环境缺少 ResizeObserver/matchMedia 或资产加载失败时退回简易文本终端。收起分栏仅断开视图,shell 进程保留;标题栏可将会话转到 Harness 自带终端标签。
布局与引用¶
- 可拖拽分隔条:文件树与内容之间、内容与命令行之间可调宽度(树约 140px 起、命令行约 110px 起)。
- 一键引用:
Ctrl+L与Ctrl+Shift+L均绑定同一逻辑——面板未打开则打开并聚焦;已打开则把当前文件以@文件插入对话框;编辑器有选区时草稿带行号区间(@文件:12或@文件:12-20),并交还输入框焦点。
注意:浏览器通常占用Ctrl+L作为地址栏快捷键,Web 端实际可用Ctrl+Shift+L;桌面客户端两键均可。快捷键经 Harness 固定键动作注册,不受 Web 快捷键准入限制。
文案支持中/英,浅色/深色主题使用 --dsw-* 变量。
安装与启用¶
需要 DSH >=0.2.2-rc.1 <0.3.0。从 GitHub 安装:
dsh plugin add github:Kingzhoudk/dsh-code-viewer
# 等价的显式 git spec
dsh plugin add git+https://github.com/Kingzhoudk/dsh-code-viewer.git
也可在 Web 的 Plugins 页安装,或由 agent 调用 plugin_manager(action: install_bundle,target 为同一 spec)。本地开发可用:
dsh plugin add link:<本仓库绝对路径>
安装后 刷新页面:右侧栏 Guide 会出现 CodeIDE 入口,或按面板提示的快捷键打开(桌面端多为 Cmd/Ctrl+L,Web 端为 Cmd/Ctrl+Shift+L)。
插件以当前 DSH 进程权限运行;安装前建议阅读仓库源码与 MIT 许可证,并确认与所用 DSH 版本匹配。
典型用法¶
- 读工作区代码:打开 CodeIDE → 在文件树逐级展开(懒加载)→ 点选文件查看着色内容与行号。
- 轻量改文件并保存:在内容区编辑已有普通文本文件后保存;
POST /write带baseMtime时若磁盘 mtime 不一致会返回 409,避免静默覆盖。插件 不新建、不删除 文件,且 不改 Git 状态。 - 对照历史:切到 Git 图谱 → 点提交 → 在文件列表中切换 diff 分栏。
- 把上下文写进对话:在目标文件(或选区)上按 Web 端有效的
Ctrl+Shift+L(或桌面端Ctrl+L)插入@文件引用,继续在输入框里补充问题。 - 旁边跑命令:使用底部 xterm 分栏执行构建或测试;全屏 TUI(如
vim)在 xterm 路径下可用,退回文本渲染时 TUI 可能不完整。
若文件树报红「无法读取该目录」,面板会展示 Host 错误码原文并提供重试;可与右侧栏自带 Files 标签对照——若两者同样失败,问题多半在会话工作区解析而非本面板独有。
安全边界与已知限制¶
安全边界(README 摘要):
- Git 子进程仅允许
rev-parse、log、show、diff、status等固定参数查询;提交 hash 格式校验,单命令 8 秒超时、8 MiB 输出上限。 - 保存路径必须解析在工作区内(含软链 realpath),拒绝
.git/内部,body 上限 8 MiB;路由沿用会话 Cookie 校验(未认证 401,并拒绝跨站Origin)。
已知边界:
- 无多标签 IDE、无 Git 写操作;Markdown 渲染为轻量实现(不支持表格、脚注、任务列表勾选、图片加载等)。
- 文件树无全局递归搜索;大仓库根目录首次展开可能较慢。
- diff 对二进制文件仅显示
±。 - 与
@linxin666/dsh-client-ui-git-graph互不影响:后者面向空白会话分支切换与全屏图谱,本插件是右侧栏内独立只读图谱。
结尾¶
dsh-code-viewer 把 VS Code 风格的文件树、语法着色查看/保存、只读 Git 泳道图和真实 shell 分栏收进 Harness 右侧栏,适合需要在同一会话里快速读码、看历史、插 @文件 引用并随手跑命令的开发者。生态上 DSH 倡导「一切皆插件」;skillhub.cn 为社区目录,与 DeepSeek / 幻方无官方从属关系。源码与问题跟踪见 GitHub 仓库。