fexp-file-explorer

左侧文件浏览器 (fexp)

English · 中文

GitHub Release License GitHub Stars Docs

DSH(DeepSeek Harness)动态 Cordis 插件:在左侧工作区浏览目录与文件。双入口(侧栏顶部「文件浏览」胶囊 + 会话标题栏「打开目录」按钮)→ 320px 滑出面板,自动定位当前工作区目录,点击目录进入、点击文件预览文本内容;工具栏可一键在系统资源管理器中打开当前目录,预览时可把文件引用添加到聊天输入框。

v1.5.0 起为静态 bundle 插件,随 profile 层栈自动加载——安装一次,每次启动 DSH 即自动生效,不再需要手动 define/run。

功能特性

界面预览

     
fexp 界面截图 1 fexp 界面截图 2 fexp 界面截图 3

快速开始

# 安装(静态 bundle, 推荐)
dsh plugin --profile web add fexp-file-explorer

本地未发布时用 file: 指向本仓库(注意路径不能含空格):

dsh plugin --profile web add file:/path/to/fexp-file-explorer

重启 dsh web 后插件即自动生效:侧栏顶部出现「文件浏览」胶囊按钮,会话标题栏出现「打开目录」按钮,无需手动 define/run。

使用说明

  1. 打开面板: 点击侧栏「文件浏览」或会话标题栏「打开目录」, 320px 面板从左侧滑出, 自动定位到当前工作区目录;
  2. 浏览: 点击目录进入下一级, 用工具栏「上一级 / 回到根目录 / 刷新」导航, 或点面包屑任意层级跳转;
  3. 预览文件: 点击文件在面板底部预览文本内容(默认 256KB 上限);
  4. 添加到聊天: 预览时点击「添加到聊天」, 文件引用 [文件名](绝对路径) 追加到输入框草稿, 编辑后发送;
  5. 在系统资源管理器中打开: 工具栏最右侧按钮, 一键打开当前浏览的目录(Windows 走 Invoke-Item)。

仓库内容

路径 说明
package.json + cordis.patch.yml + lib/ + client/ 静态 bundle(推荐):dsh plugin add 安装后随 DSH 启动自动加载
host-source.js + client-source.js 动态插件回退形态:无 bundle 能力的 profile 按下方流程加载
manifest.json 插件元数据 + 恢复定义参数(plugin/name/purpose/version)
LICENSE MIT 许可证
assets/ 界面预览截图(screenshot-1~3.png)
AGENTS.md 代理协作约定(重建流程/修改工作流/编码约定/版本管理)
README.md / README.en.md 中文 / English 文档

双形态说明

  静态 bundle(v1.5.0, 推荐) 动态插件(回退)
加载方式 dsh plugin add 装进 profile 层栈, 随 DSH 启动自动加载 每次 DSH 重启后需 cordis_define + cordis_run 手动注册
代码位置 lib/index.js(Host) + client/client.js(Client) host-source.js + client-source.js
适用场景 正常 profile(web 等) 无 bundle 能力的 profile

动态回退形态步骤:

  1. 让 agent 读取 host-source.jsclient-source.js;
  2. cordis_define:plugin: { kind:"new", idPrefix:"fexp" },name/purpose 取 manifest.json(purpose 含 CAPABILITIES: fs, rpc 声明),code.host / code.client 取两个源码文件的完整内容;
  3. cordis_run 激活;面板出现即成功。

动态形态不跨 DSH 进程存续,重启后需重新加载;静态 bundle 形态无此限制。

技术要点

安全与边界

版本历史

版本 说明
v1.5.1 修复「文件浏览」按钮遮挡工作区「搜索会话」搜索框: 点击工作区顶部搜索图标展开搜索框时, 固定定位的入口按钮正好叠在搜索框上挡住输入; TopToggle 用 MutationObserver 监听搜索按钮 aria-expanded 状态(搜索按钮展开时带 aria-expanded=”true” 且下一个兄弟元素为 input[type=text], 与会话行/分组折叠按钮可区分), 搜索框展开期间隐藏入口按钮、收起后自动恢复; Host 无改动, 纯 Client 能力, 安全审查持平 WARN(33/300)
v1.5.0 静态 bundle 化: package.json(dsh.bundle.patch + dsh.client.platform)+ cordis.patch.yml + lib/index.js(webServer 挂三个 JSON 路由)+ client/client.js(ModuleLoader 注册, host.call→fetch, styles→自建标签); 随 profile 层栈自动加载, 无需重启后手动 define/run; 动态形态源码保留为回退; 安全审查持平 WARN(33/300)
v1.4.0 图标整体改用 Google Material Icons 官方库(Apache 2.0): 实心填充风格小尺寸下清晰, 符合 Chrome/Android 大厂标准; 关闭面板=keyboard_double_arrow_left(« 与 VS Code 一致)、工作区=workspaces、根目录=home、上一级=arrow_upward、刷新=refresh、资源管理器=folder_open、关闭预览=close; svgIcon 改 fill=currentColor, 默认尺寸 14→16px; Host 无改动, 安全审查持平 WARN(33/300)
v1.3.0 图标改用 Lucide 官方图标库(lucide.dev, ISC 许可): 关闭面板=panel-left-close、当前工作区=briefcase、根目录=house、上一级=folder-up、刷新=refresh-cw、资源管理器打开=folder-open、关闭预览=x, 语义更直观(已被 v1.4.0 的 Material Icons 取代); Host 无改动
v1.2.3 修复「文件浏览」「打开目录」按钮浅色主题下文字看不清: 入口按钮改为 CSS 类并全部使用主题 CSS 变量(label-primary 文字 / bg-layer-1/2 背景 / brand-primary 激活态), 深浅色及任意主题自动适配保证对比, 补充 hover 反馈; Host 无改动
v1.2.2 修复「文件浏览」打开面板定位到上一个工作区目录: 面板加载 effect 的 path===null 守卫导致切换工作区后不重载; 新增 boundWs 工作区绑定, 打开面板/切换工作区时自动重定位到当前工作区目录, 双入口统一走 openPanelFor; Host 无改动
v1.2.1 修复「已添加」状态不合理: 按钮保持「添加到聊天」常显可用, 支持连续多次添加文件
v1.2.0 新增预览区「添加到聊天」按钮: 经 conversation.input.dock 隐藏桥捕获标准包 inputActions/useInput, 把文件引用追加到输入框草稿, 用户编辑后发送; 纯 Client 能力, 安全审查持平 WARN(33/300)
v1.1.0 新增「在系统资源管理器中打开」工具栏按钮: Client 走 DSH 原生 host.openPath(Windows Invoke-Item) 打开当前浏览目录; 无新增 Host RPC/能力, 安全审查持平 WARN(33/300)
v1.0.0 最终形态: 顶部「文件浏览」+ 标题栏「打开目录」双入口; 内联样式深色适配; 启动竞态修复(订阅自愈 + 默认宽栏)
(pkg-1~pkg-7) 演进过程: 侧栏底部按钮 → 顶部浮层 → 标签胶囊 → 内联样式可见性修复 → 移除底部按钮与诊断条

维护