Bundle
fdtree
工作区文件树 + 实时红绿 Diff 面板(DeepSeek Harness web 插件)— workspace file tree with live red/green diff for dsh web.
- Source
- musclePatrickStar
- stars
- 1 stars
- License
- MIT
- Updated
- Updated 13 days ago
Readme
# DSH文件目录+diff插件
如果你和我一样不想为了一个目录树就安装大而全的 UI,这个插件或许可以帮到你
## 简述
在界面最右侧显示**工作区文件目录树**,点开文件后以**真嵌入布局**(四列占位:原生侧边栏|对话区|文件内容|文件树)展示内容与**实时红绿 Diff**(git 模式对比 HEAD,无 git 时对比会话基线,会话基线支持自定义),文件 Diff 支持 22 种语言的语法高亮。
## 功能
- **布局**:始终占列的四列形态(原生侧边栏|对话区|文件内容|文件树),非浮动;内容列默认收起,仅显示文件树
- 文件树:点文件展开内容区,多标签打开,内容/Diff 整合为单一视图:🟥 删除行、🟩 新增行、行号、`+N −N` 统计
- **模式自动切换**:工作区位于 git 仓库内(含父目录仓库)自动启用 git 模式;非仓库目录自动用基线模式;`git init` 后 15 秒内自动检测生效
- **git 模式**:与 `HEAD` 对比(git 原生 xdiff),目录树徽标实时显示改动/未跟踪/删除;`git commit` 后差异自动归零
- **基线模式**(无 git 仓库):与打开时快照对比,支持「📌 设基线」
- **打开终端**:右键目录树节点弹出菜单,可在宿主系统打开终端并自动定位(Windows:PowerShell / cmd;macOS:Terminal.app;Linux:桌面终端,无图形环境时明确报错),支持一键 cd 到选中目录,成功/失败均有横幅反馈
- 语法高亮:JS/TS、Python、JSON、Markdown、HTML、CSS、YAML、Shell、C/C++/C#/Java、Go、Rust、PHP、Ruby、Swift、Kotlin、SQL、PowerShell、Lua、Dockerfile、Makefile、.env
- 大文件优化:`FsVersion` 变更检测免重复读盘、大文件自动降载渲染
## 安装
**方式一:dsh plugin 命令安装**
```bash
# 在目标机器的 DSH web profile 中安装(自动 pnpm 安装 + 注册)
dsh plugin --profile web add "https://github.com/musclePatrickStar/fdtree.git"
# 或 SSH 方式(注意:必须用 git+ssh:// 完整格式,pnpm 不支持 git@github.com:xxx 简写)
dsh plugin --profile web add "git+ssh://git@github.com/musclePatrickStar/fdtree.git"
# 或本地路径
dsh plugin --profile web add "file:/path/to/fdtree"
```
> 如果是 fork 或自建镜像,把上面的仓库地址替换成你自己的即可。
## 更新
```bash
# 拉取仓库最新提交并重新解析安装(git 依赖按提交哈希锁定,必须 update 才会升级)
dsh plugin --profile web update fdtree
```
然后重启 dsh web(`dsh web`)。
> **为什么不是 `pnpm install`?** git 依赖的版本由锁文件中的提交哈希固定,普通 `install` 不会检测新提交;`update` 会重新解析到最新提交。
> 想固定到某个版本时,可手动把依赖改为 `"fdtree": "github:musclePatrickStar/fdtree#v0.1.3"`。
> Windows 上若遇到证书报错(schannel),先执行 `$env:GIT_SSL_NO_VERIFY='1'` 再运行 update。
**方式二:手动编辑**
1. 在 `$DSH_HOME/profiles/web/package.json` 的 `dependencies` 加一行:`"fdtree": "github:musclePatrickStar/fdtree"`(可锁定版本:`"fdtree": "github:musclePatrickStar/fdtree#v0.1.0"`);
2. 在 `dsh.profile.bundles` 数组末尾追加 `"fdtree"`;
3. 在 `$DSH_HOME/profiles/web` 下执行 `pnpm install`;
4. 重启 dsh web(`dsh web`)。左侧栏底部出现「文件树」按钮,右侧自动显示文件树面板。
> 插件包结构遵循 DSH 插件规范:`package.json` 的 `dsh.bundle.patch` + `dsh.client`、`cordis.patch.yml` 补丁插入、`lib/index.js` 宿主端、`client/client.js` 客户端 bundle(`__ModuleLoader__` 格式)。
## 卸载
```bash
dsh plugin --profile web remove fdtree
```
## 开发说明
- 宿主端:`lib/index.js`(ESM,Cordis 插件,经 `webServer` 注册 `/fdtree/rpc` HTTP JSON-RPC)
- 客户端:`client/client.js`(手写 `__ModuleLoader__` bundle,同源 `fetch` 调用宿主 RPC)
- 仓库根目录即插件包根目录:`lib/index.js` 宿主端、`client/client.js` 客户端 bundle、`cordis.patch.yml` 补丁、`package.json` 包定义(不含演示文件)。
## 安全说明
- **无外部网络请求**:客户端只通过同源 `fetch('/fdtree/rpc')` 与本机 DSH web 服务器通信,不连接任何外部域名;无遥测、无上报。
- **只读工作区**:插件只读取当前会话工作区内的文件(带路径越界检查),git 命令(`status`/`diff`/`branch`)仅在本地运行并受 DSH 沙箱策略约束,从不执行 `fetch`/`pull`/`push`。
- **会话隔离**:未绑定会话前,所有 RPC 一律拒绝(`NO_SESSION`),不会暴露任何路径或文件内容。
- **终端功能**:仅在用户显式右键点击时触发,目标目录被限制在工作区内。
- **数据本地化**:所有内容都在你自己的浏览器中渲染展示,不会发送到任何服务器。
- **安装即信任**:与所有包管理器一样,安装插件等同于执行插件作者代码。请仅从可信来源安装。
## License
MIT
Install
dsh plugin --profile web add github:musclePatrickStar/fdtree
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install fdtree from the hub
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.