New:Introducing Socket Scanning for VS Code Marketplace Extensions.Learn more →
Get Started

dsh-folder-tree

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

dsh-folder-tree

Folder tree plugin for DeepSeek Harness: render directory trees with depth control, ignore lists (node_modules/.git) and symlink-cycle protection, plus structure statistics by extension. Read-only, zero runtime dependencies.

latest
npmnpm
Version
0.2.0
Version published
Maintainers
1
Created
Source

dsh-folder-tree

DeepSeek Harness 目录树插件:以树形文本渲染目录结构(深度可控、glob 忽略规则、pattern 名称过滤、防符号链接环路),统计目录/文件数与扩展名分布,并对比两个目录的结构差异。子目录并发建树,只读、零运行时依赖。

  • 源码:https://github.com/geeklei/dsh-plugins/tree/main/dsh-folder-tree
  • npm:https://www.npmjs.com/package/dsh-folder-tree

安装

npm install dsh-folder-tree

使用说明

render_tree —— 渲染目录树

以树形文本展示目录结构,支持深度控制、忽略规则、pattern 名称过滤、仅显示目录、附带文件大小。

用户:看下这个项目长什么样

E:\dsh-plugins\dsh-folder-tree/
├── README.md
├── cordis.patch.yml
├── index.js
├── package.json
└── test-plugin.js

0 个目录,5 个文件(深度 ≤ 3)
忽略:node_modules, .git

带下钻与目录优先排序:

E:\projects\demo/
├── docs/
│   └── guide.md
├── src/
│   ├── sub/
│   ├── a.js
│   └── b.js
└── README.md

3 个目录,4 个文件(深度 ≤ 3)
忽略:node_modules, .git

参数:

参数说明
path目录路径,默认当前目录
depth最大下钻层数,默认 3,上限 10(根的直接子项为第 1 层)
ignore忽略规则,逗号分隔,支持 glob(* ? []),默认 node_modules,.git;对目录名与文件名同时生效;传空字符串表示不忽略
pattern名称过滤(v0.2,glob):仅渲染匹配条目;目录名命中则整个子树保留,未命中的目录作为容器行保留含匹配后代的枝干,无匹配的枝干整枝不渲染
dirs_only仅显示目录,默认 false
show_size在文件名后附带大小,默认 false
limit最多渲染的条目数,默认 200,上限 2000

tree_stats —— 目录结构统计

统计目录数、文件数、实际最大深度,并按扩展名给出文件数量与体积分布。

用户:这个目录里文件类型都是什么

目录:E:\projects\demo
目录数:3,文件数:5
最大深度:3(统计上限 3)

按扩展名分布(Top 10):
  .md              3 个       360 B
  .js              2 个       300 B

参数:path、depth(默认 3,上限 10)、ignore(默认 node_modules,.git,支持 glob)、top(扩展名展示条数,默认 10,上限 50)。

tree_compare —— 目录树对比(v0.2 新增)

对比两个目录(如模板 vs 实际、旧版本 vs 新版本)的结构差异,输出新增/删除的目录与文件明细及计数,相对路径统一用 / 分隔。

用户:这个新版本比旧版本多了哪些文件、少了哪些

tree_compare(before="D:\\old\\proj", after="E:\\proj", limit=20)
基准(before):D:\\old\\proj
目标(after):E:\\proj
对比深度:≤ 10;忽略:node_modules, .git
新增目录 1 个、新增文件 1 个、删除目录 1 个、删除文件 2 个

新增目录 1 个:
  src/newmod
新增文件 1 个:
  src/newmod/n.js
删除目录 1 个:
  docs
删除文件 2 个:
  docs/d.md
  src/b.js

未变化条目:5 个(未列出)

参数:

参数说明
before对比基准目录路径(必填)
after对比目标目录路径(必填)
depth对比深度(两侧一致),默认 10(上限),下限 1
ignore忽略规则,逗号分隔,支持 glob,默认 node_modules,.git
limit每类明细最多展示条数,默认 50,上限 500

典型场景

1. 快速了解项目结构

用户:这个仓库的目录结构是怎样的

render_tree 用默认 depth=3 一次看清主干;node_modules/.git 默认被忽略,输出干净。

2. 定位某个目录的位置

用户:组件都放在哪一层

render_tree 传 dirs_only=true,只看目录骨架,快速把握层级。

3. 排查体积异常的目录

用户:哪个子目录文件特别多

tree_stats 看目录/文件数,再配合 render_tree 的 show_size=true 定位大文件。

4. 交付前的目录体检

用户:打包前确认没把 node_modules 带进去

render_tree 传 ignore=(空)即可把被忽略的目录也显示出来,确认实际包含内容。

5. 只看某类文件的分布位置

用户:项目里所有 markdown 文件分布在哪些目录

render_tree 传 pattern="*.md",命中文件全部渲染,未命中的目录只保留含匹配后代的枝干,一眼看出分布。

6. 模板/升级前后的结构核对

用户:升级后多了哪些文件、丢了哪些文件

tree_compare(before=旧目录, after=新目录) 直接列出新增/删除的目录与文件,不用肉眼对比两棵树。

7. 技术栈分布速览

用户:这个项目主要是什么语言

tree_stats 的扩展名分布 Top N 直接给出文件类型构成。

安全边界

  • 只读:三个工具仅执行 readdir / stat / lstat,不创建、不修改、不删除任何文件;测试中含"调用后文件数不变"的只读性断言。
  • 符号链接一律跳过:目录扫描不跟随任何软链接/junction,从根源上杜绝环路死循环与越出指定目录范围的遍历(测试中以 junction 指回祖先目录验证)。
  • 深度与条目双重上限:depth 上限 10、limit 上限 2000、扫描条目上限 20 万,超出即截断并标注 ⚠,防止超大目录导致长时间占用。
  • 无权限静默降级:遇到无权限的子目录跳过,不中断整体渲染与统计。
  • 不读取文件内容:只读取目录项与文件元数据(名称、大小),不打开文件,不涉及敏感内容泄露。

其他插件集成说明

协作插件集成方式
dsh-fs-inspector一个看"长什么样"(folder-tree),一个看"多大"(fs-inspector),配合定位体积异常目录
dsh-file-search(二期 D10)先用 render_tree 摸清结构,再用 file-search 在目标目录做内容检索
dsh-table-render把 tree_stats 的扩展名分布整理为数据后渲染成对齐表格
dsh-file-manager-cli本插件负责"看"(只读渲染),实际移动/删除/重命名交给 file-manager-cli
dsh-workspace-journal把目录结构快照写入工作区日志,形成长期变化记录

版本说明

  • 0.2.0(2026-10-17):按 RoadMap v0.2 迭代。
    • render_tree 新增 pattern:glob 名称过滤,目录命中整枝保留、未命中目录作为容器行保留含匹配后代的枝干
    • 新增 tree_compare:对比两个目录的结构差异,输出新增/删除的目录与文件明细及计数(相对路径统一 / 分隔)
    • 忽略规则支持 glob(* / ? / []),对目录名与文件名同时生效
    • 大目录建树/统计并发化(并发度 8,结果与串行一致)
  • 0.1.0(2026-09-22):初始版本。
    • render_tree:树形渲染 + 深度控制 + 忽略名单 + 仅目录 + 大小标注 + 条目上限
    • tree_stats:目录/文件计数 + 最大深度 + 扩展名分布 Top N
    • 符号链接跳过(防环路)、无权限降级、只读保证

RoadMap

v0.2(已落地于 0.2.0)

  • render_tree 支持 pattern 过滤,只渲染匹配名称的条目
  • 新增 tree_compare:对比两次目录树快照,输出新增/删除的目录与文件
  • 忽略规则支持 glob 模式(当前仅按目录名精确匹配)
  • 大目录渲染并发化,缩短超大目录耗时

v0.3(展望)

  • 目录树快照落盘 + 变化趋势报告(与 workspace-journal 联动)
  • 输出格式可选(ascii / unicode / markdown 列表)
  • 结合 .gitignore 自动推导忽略名单

FAQ

Q:为什么默认忽略 node_modules 和 .git? 它们条目极多且通常不是结构查看的目标。需要时传 ignore=(空字符串)即可完整显示。

Q:depth 的计数从哪一层开始? 根的直接子项为第 1 层。depth=1 只显示根的一级内容,depth=3 显示到第三层。

Q:软链接指向的目录为什么没显示? 为避免环路死循环与越界遍历,扫描一律跳过符号链接/junction。这是刻意的安全取舍。

Q:渲染结果被截断(出现 ⚠)怎么办? 说明条目达到 limit 上限。可提高 limit、降低 depth,或缩小 path 范围分段查看。

Q:pattern 和 ignore 有什么区别? pattern 是“只看什么”(白名单式过滤,只影响渲染展示),ignore 是“不看什么”(黑名单式跳过,影响扫描范围,支持 glob)。两者可同时用。

Q:tree_compare 能对比同一目录的两个时间点吗? 当前版本对比两个目录(如备份 vs 现状)。同一目录的时点快照与趋势报告在 v0.3 的“目录树快照落盘”里规划。

Q:tree_stats 的"最大深度"和传入的 depth 有何区别? depth 是统计的深度上限;"最大深度"是实际统计到的最深层级,可能小于上限。

Q:能帮我删除或移动目录吗? 不能,本插件严格只读。文件操作请使用 dsh-file-manager-cli。

源码与发布地址

许可证

MIT

Keywords

dsh

FAQs

Package last updated on 17 Oct 2026

Related posts