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

文件面板 liooil/dsh-files-pane

DeepSeek Harnessv1.0.1
liooil55 天前有提交已提供中文文档扫描:未发现敏感能力

在会话标签页中浏览宿主机文件并就地阅读

29.3/100
综合分
0
GitHub 星标
29
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-files-pane
npm 源 · dsh-files-pane 的发布者账号已校验与本仓库一致

状态速览

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

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

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

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

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/22 19:20:39

安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

发起外部网络请求
查看扫描证据(共 1 处,展示前 1 条)
  • 发起网络请求
    client/client.js:273
    const response = await fetch('/dsh-files-pane/' + operation, {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

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

功能亮点

  • 浏览宿主机文件
  • 两栏目录导航
  • 就地阅读文件

DSH 网页图形界面里的浏览器内文件面板:一个「会话视图」标签,用来浏览宿主机上的文件并就地阅读。· DSH 网页「文件」视图标签:两栏目录导航 + 就地阅读文件

v1.0.12026-09-10
打包发布:行为不变。· 新增 dsh.bundle 清单和根目录 cordis.patch.yml,插件既能按名字挂载(dsh plugin add dsh-files-pane),也能从检出路径挂载。· 新增 MIT LICENSE 和面向 npm 的元数据,包不再是私有。· README:两种安装方式,以及不要同时从两个来源挂载同一个包的提醒。
v1.0.02026-09-10
首次公开发布。 DSH Web GUI 新增「会话视图」标签页(对话 / 轨迹 / 文件),直接浏览并就地读取主机上的文件,不再把路径交给原生桌面打开器——无头主机根本没法响应这种请求。 · 主机侧:两条同源 POST 路由(/dsh-files-pane/list、/dsh-files-pane/read),走部署自带的 fs 服务。 · 浏览器侧:一个手写的模块表 bundle——不用构建,零依赖。 · Markdown 和代码交给内置的 MarkdownText / CodeBlock 渲染;Markdown 里的相对图片从主机读取。 · 双栏目录导航,路径可编辑并支持 ~ 展开,合并式页头带 fish 风格缩写,列表可折叠,加载状态不白屏。 安装——克隆到 ~/.dsh/plugins/,再往配置档补丁里加一行;详见 README。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-files-pane 一个用于 DeepSeek Harness Web GUI 的浏览器内文件面板:一个会话视图标签页(对话 / 轨迹 / 文件),用于浏览宿主机上的文件并就地读取它们——而不是把路径交给原生桌面打开器,因为无头宿主机无法响应这种请求。 在 DSH 网页面板里内置一个「文件」视图标签:左侧两栏目录导航,右侧阅读文件内容。不改动主窗体,复用聊天窗自己的 Markdown 与代码渲染,点击会话里的任意文件即在其中打开。 为什么需要它 dsh web 运行在持有文件的机器上;浏览器通常不在那台机器上。点击对话中的文件 引用会调用 remote.session.openWorkspacePath,而在无头宿主机上这会启动 xdg-open 却什么也打不开。 本插件拦截那一次调用,改为在页面中渲染该文件。 功能特性 - 文件作为会话视图标签页 —— 与聊天和轨迹并列的第三个标签页,全宽,一次只显示一个视图。 没有浮动窗口,也不接管侧边栏。 - 从对话中点击直达 —— 工具卡片、@path 提及和产出文件标签都会在此打开,并自动为你选中该标签页。 - 聊天窗口自身的渲染器 —— Markdown 走内置的 MarkdownText,代码走内置的 shiki CodeBlock,因此两者的外观与对话中完全一致。
展开完整文档(README 剩余 1 节)
dsh-files-pane

一个用于 DeepSeek Harness Web GUI 的浏览器内文件面板:一个会话视图标签页(对话 / 轨迹 / 文件),用于浏览宿主机上的文件并就地读取它们——而不是把路径交给原生桌面打开器,因为无头宿主机无法响应这种请求。

在 DSH 网页面板里内置一个「文件」视图标签:左侧两栏目录导航,右侧阅读文件内容。不改动主窗体,复用聊天窗自己的 Markdown 与代码渲染,点击会话里的任意文件即在其中打开。

为什么需要它

dsh web 运行在持有文件的机器上;浏览器通常不在那台机器上。点击对话中的文件
引用会调用 remote.session.openWorkspacePath,而在无头宿主机上这会启动 xdg-open 却什么也打不开。
本插件拦截那一次调用,改为在页面中渲染该文件。

功能特性

- 文件作为会话视图标签页 —— 与聊天和轨迹并列的第三个标签页,全宽,一次只显示一个视图。
没有浮动窗口,也不接管侧边栏。
- 从对话中点击直达 —— 工具卡片、@path 提及和产出文件标签都会在此打开,并自动为你选中该标签页。
- 聊天窗口自身的渲染器 —— Markdown 走内置的 MarkdownText,代码走内置的 shiki CodeBlock,因此两者的外观与对话中完全一致。
- Markdown 中的相对图片 —— 会从宿主机读取并渲染在 Markdown 文本旁边(MarkdownText 本身只渲染 http(s) 图片)。
- 两栏导航 —— 当前目录旁边有一个父级栏(同级项,仅目录,当前项高亮),因此横向跳转无需先向上返回。
- 可编辑路径 —— 点击标题栏中的粗体名称,输入路径,按回车。~ 会被展开;文件路径会定位到其内容,目录路径会定位到其列表。
- 面向阅读的界面 —— 一行合并的标题栏(祖先路径 + 固定的当前名称,仅在整行会溢出时才采用 fish 风格的 ~ 和缩短),一个可将列表完全收起的折叠开关(跨重载记住),以及绝不会让它所替换的面板变空的加载反馈。
- 文本每个文件上限 400 KB,图片上限 4 MB;二进制文件会被提示而非直接倾倒。

安装

该包是纯 ESM,带有手写的浏览器 bundle:无需构建步骤,无依赖。

从检出安装 —— 克隆它,然后将其作为一行挂载到你的 profile 的 patch 层(~/.dsh/profiles//cordis.patch.yml):

git clone https://github.com/liooil/dsh-files-pane ~/.dsh/plugins/dsh-files-pane

- insert:
- id: files-pane
name: '/home//.dsh/plugins/dsh-files-pane/lib/index.js'

加载器接受类路径的条目名称,dsh-client-modules 会从它向上查找到本包的 package.json,以获取 dsh.client 声明和 ./client bundle。该 bundle 随后在 /plugins/dsh-files-pane/client.js 处提供服务。

作为包安装 —— 该仓库声明了 dsh.bundle 清单(cordis.patch.yml),因此已发布的副本可以直接按名称挂载:

dsh plugin add dsh-files-pane
⚠️ 二选一使用。同时从两个来源挂载同一个包会导致客户端模块扫描失败(resolves from multiple active Loader sources),因此在安装该包之前先删除本地路径那一行(反之亦然)。

更改插件集(包括这第一次挂载)会在下一次 dsh 启动时生效:

systemctl --user restart dsh # 或者你的主机所采用的任何监管方式

布局

| 路径 | 半边 | 负责 |
| lib/index.js | 主机端(Node) | 两个同源 POST 路由,/dsh-files-pane/list 和 /dsh-files-pane/read,通过部署自身的 fs 服务读取文件系统。 |
| client/client.js | 浏览器端 | View 标签页、头部操作、文件打开拦截,以及所有呈现。 |
| package.json | — | dsh.bundle 清单(可安装)、dsh.client 声明(platform: web),以及模块扫描器读取的 ./client 导出。 |
| cordis.patch.yml | — | 当此包作为包安装时,按名称挂载此包的 bundle 补丁。 |

浏览器半边是客户端模块表格式(window.__ModuleLoader__.load({id, factory}))的手写 bundle——与已发布的客户端包所采用的形态相同——因此它可以直接 require("react") 和 require("@deepseek-ai/dsh-client-ui-primitives")。

两个值得了解的接缝

两者都通过 Cordis 服务访问,且都能安全降级,但两者都足够内部化,值得记一笔:

- 打开标签页。 当前活动的 View 并不由某个服务拥有:会话头部和主体都从 conversation.session 槽 store(actions.setView)读取它。因此以编程方式选择此标签页的路径是 uiSession.adapter.resolve(sessionId) → slots.resolveStore(entry.store, binding) → store.actions.setView('files'),这与头部读取的是同一个按会话缓存的实例。如果未来版本重命名了其中任一环节,失败会被记录,插件会回退到手动切换标签页。
- 接管文件打开器。 remote.session.openWorkspacePath 在 Remote 命名空间服务上被替换(保存描述符,卸载时恢复),并以调用方期望的 Remote 信封 {ok, value} 作出响应。正是这一点让对话中的点击落到这里。

这两个主机路由位于 /api 之外(不涉及网关),因此它们自带防护:仅限 POST,外加 Origin/Host 同源检查。

开发

没有构建步骤:编辑 client/client.js 并重新加载。

- 仅浏览器半边 —— 让主机就地重新哈希 bundle,然后刷新页面:

ctx.get('clientModules').rebuilt('dsh-files-pane')

(一个调用此方法的微型 Cordis 插件就足够了;随后刷新页面即可获取新修订版本。)
- 主机半边或 package.json —— 重启 dsh。

客户端 HMR 驱动仅在 pnpm run dev:web 从检出目录重新构建 bundle 时才有用;此包是从其自身目录提供的,因此上述两步就是整个循环。
许可证

MIT — 参见 LICENSE。
预览分享卡片长什么样 ↓liooil/dsh-files-pane
分享 · DeepSeek Harness Hub
liooil/dsh-files-pane

在会话标签页中浏览宿主机文件并就地阅读

这是你的仓库?认领条目

回到顶部