DeepSeek Harness (DSH) 采用“一切皆插件”的架构。在 Web 界面中直接浏览本地文件是常见需求。fsviewer 接管了 DSH 原生的右侧详情栏,提供了一个 Codex 风格的文件树与预览工作区。
这是一个由 sunyuhuirong 维护的客户端插件。它为 DSH Web 提供了右侧栏的文件管理能力,包括目录树、文件预览和侧边聊天。
安装与配置¶
- 克隆插件源码到指定目录:
git clone https://github.com/sunyuhuirong/fsviewer.git YOUR_PLUGIN_PATH
- 编辑 DSH Web profile 的
package.json,添加依赖与配置:
{
"dependencies": {
"fsviewer": "link:YOUR_PLUGIN_PATH"
},
"dsh": {
"profile": {
"bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "fsviewer"]
}
}
}
- 进入 profile 目录并安装依赖:
cd ~/.dsh/profiles/web && pnpm install
- 重启
dsh web使配置生效。
核心功能¶
- 接管原生右栏:渲染在 DSH 原生
details列内(priority -10 影子注册),与布局/主题一致;插件停用后原生工具详情自动恢复。 - 目录树 + 文件列表:Host 路由真实列举目录与文件(含类型徽章、隐藏项标记),支持懒加载与名称筛选。
- 文件预览:Markdown 文件使用官方
MarkdownText渲染并支持源码切换;文本文件显示源码;二进制或超大文件给出提示并提供系统打开。 - 多文件页签:已打开文件以页签呈现,支持切换与关闭。
- 复制内容:预览区支持一键复制文件全文。
- 面包屑 + 智能默认根:默认根优先取当前会话工作目录(cwd),回退到最近 workspace;面包屑支持回退。
- 按工作区彻底隔离:页签、文件树展开状态、树栏开关与宽度、浏览器页签、侧边聊天(含历史)均按
workspaceId独立存储;切换工作区时整体切换面板并原地恢复状态。 - 会话文件引用改道:拦截
workspaces.openPath,会话内点击文件直接在本面板预览,而非弹出系统选择框。 - 明暗主题自适应:配色全部使用 DSH 主题变量。
典型用法¶
- 进入任一会话,点击顶部 Session log 导出按钮右边的「右侧栏」图标按钮,面板接管原生右侧
details栏并滑入。 - 右侧文件树栏:点击 ▸ 展开目录、点击目录名进入;筛选框按名称过滤;拖拽左缘调整树栏宽度(120–320px);点文件夹图标可收起/展开树栏。
- 文件预览:点击文件后,左侧预览区渲染内容。Markdown 文件可切换「查看源代码 / 渲染视图」;文本文件显示源码;二进制或超大文件提示并提供「⧉ 打开」用系统应用打开。
- 操作按钮:顶部「⧉ 打开」按钮用系统默认应用打开当前文件;「⤢」按钮在默认宽度(360px)与加宽(520px)间切换。
- 引用改道:在会话中点击文件引用(如工具产出的路径),会改道到本面板预览。
- 关闭面板:再次点击顶部按钮(或面板内「打开文件」伪页签的 ×)收起面板;切换会话时自动收起。
适用场景与注意¶
- 安全提示:Host 半边通过
/fsviewer-api路由直接使用 Nodefs读取本机任意绝对路径,无任何鉴权(与 DSH 原生 browse 目录后端同级)。请勿在多用户或网络暴露的环境中使用。 - 已知限制:
- 单目录最多列举 1000 项,超出截断。
- 文件预览上限 1MB,超出部分截断显示,不返回二进制内容。
- 「选择目录」走 DSH 原生目录选择器,其行为受 profile 的
directory-picker后端配置影响。
总结¶
fsviewer 解决了在 DSH Web 中直接管理本地文件的需求。它通过接管原生 UI 提供了沉浸式的文件浏览体验,并利用工作区隔离机制确保了多会话场景下的状态管理。