dsh-code-viewer:右侧栏 CodeIDE(文件树、编辑器与 Git 图)

前言

在 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 侧保持只读,编辑能力限于可保存的文本查看器,不做暂存、提交与分支操作。

这是什么

插件由 Host(index.js,提供 /plugins/code-viewer 下仓库读、写、Git 查询、资产路由)与 Client(client.js,右侧栏 UI、快捷键、引用桥接)组成。读文件走 Harness 按会话授权的 remote.workspaceFiles;保存与 Git 图谱等走插件 Host 路由。

界面与核心能力

面板顶部为「代码」标签,标题栏提供 [文件] [Git 图谱] [引用] [↻] 等入口;主体为左侧工作区文件树 + 右侧内容区,底部默认展开可收起的命令行分栏。

文件树与内容查看

  1. 左侧文件树:对会话工作区根目录 懒加载(remote.workspaceFiles.list)。默认隐藏 .git、node_modules、dist 等目录,可用标题栏漏斗按钮显示;已修改/新增/删除/未跟踪文件分别带 M/A/D/U 角标。
  2. 右侧内容: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 版本匹配。

典型用法

  1. 读工作区代码:打开 CodeIDE → 在文件树逐级展开(懒加载)→ 点选文件查看着色内容与行号。
  2. 轻量改文件并保存:在内容区编辑已有普通文本文件后保存;POST /write 带 baseMtime 时若磁盘 mtime 不一致会返回 409,避免静默覆盖。插件 不新建、不删除 文件,且 不改 Git 状态。
  3. 对照历史:切到 Git 图谱 → 点提交 → 在文件列表中切换 diff 分栏。
  4. 把上下文写进对话:在目标文件(或选区)上按 Web 端有效的 Ctrl+Shift+L(或桌面端 Ctrl+L)插入 @文件 引用,继续在输入框里补充问题。
  5. 旁边跑命令:使用底部 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 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye