[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71JPCK6Z5NT3G258NFKEJGG":3,"skill-same:01M71JPCK6Z5NT3G258NFKEJGG":74},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":22,"linkOnly":23,"markdownContent":24,"markdownBody":25,"frontMatter":26,"refName":29,"commitSha":30,"skillDirectory":5,"forksCount":31,"repositoryHtmlUrl":32,"repositoryHomepageUrl":6,"ownerHtmlUrl":33,"ownerBlogUrl":6,"ownerDescription":34,"updatedAt":35,"install":36,"resources":49},"01M71JPCK6Z5NT3G258NFKEJGG","目录树",null,"目录树技能 - 递归扫描给定目录，输出所有目录和文件的树状结构清单","FeatherHunter\u002FSKILLS","FeatherHunter","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F12967785?v=4","01M71JFD7JMNT8HWC3Y9JKMWGG","王辰浩","01M71JFD8DNYSPJPGX25Y4KX70",6,"MIT","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F目录树\u002FSKILL.md",[],[19,5,20,21],"目录","文件","文件导航","2026-11-10 10:12:30",false,"---\nname: 目录树\ndescription: 目录树技能 - 递归扫描给定目录，输出所有目录和文件的树状结构清单\ntags: [目录, 文件导航]\nversion: 3.2\n---\n\n# 目录树 · 技能文档\n\n生成的HTML风格必须符合：\n亮色单色背景 + 新禅意科技美学。\n\n**视觉规范（v3.2+）：**\n- 背景：纯净米白 `#f6f5f1`（单色，无渐变）\n- 墨烟：极淡墨灰横向云雾纹理（CSS `repeating-linear-gradient` 实现，不喧宾夺主）\n- 磨砂玻璃：`backdrop-filter: blur(10~20px)` + 1px 内嵌光晕边框\n- 中心几何体：单线条三角 + 同心圆（SVG thin-line）\n- 远山剪影：底部淡墨山影 SVG，opacity 0.5\n- 按钮微光：hover 时 `box-shadow: 0 0 10px rgba(100,140,180,0.1)`\n- 留白即呼吸：两栏布局，大量负空间\n\n**注：** 背景色为浅色，视觉方向与 v3.1 的深色背景不同，以本节规范为准。\n\n## 触发词\n\n- `目录树`\n- `目录导航`\n\n---\n\n## 核心功能\n\n### 1. 扫描给定目录\n\n递归扫描指定根目录，返回完整的目录和文件树结构。\n\n- 扫描所有层级（深度无限制）\n- 记录：name \u002F path \u002F is_dir \u002F size \u002F children[]\n- `.git` 目录只显示自身及其文件数量，不递归其内部内容\n\n### 2. 输出文件名命名规则\n\n输出路径：`docs\u002Fdirectory-tree\u002F`\n\n文件名 = 取根目录**最后两个有意义段**，用下划线连接：\n\n```\n\u002Fmnt\u002Fd\u002F2Study\u002FStudyNotes         → 2Study_StudyNotes.html\n\u002Fmnt\u002Fd\u002FWork\u002FProjects             → Work_Projects.html\n\u002Fmnt\u002Fd\u002F2Study\u002FStudyNotes\u002FSKILLS  → StudyNotes_SKILLS.html\nD:\\Work\\Projects                  → Work_Projects.html\n```\n\n规则：\n- 路径分隔符（\u002F、\\）→ 替换为 `_`\n- 盘符保留（如 `d_`、`D_`）\n- 特殊字符清理\n- 后缀为 `.html`\n\n### 3. 多根目录管理\n\n同一个根目录每次生成覆盖同名文件，不同根目录生成不同文件名，不会冲突。\n\n---\n\n## 输入确认流程\n\n```\nStep 1：读取环境变量 DIR_NAV_ROOT\n        → 有值 → 验证路径存在 → 直接使用\n\nStep 2：无环境变量 → 检查会话状态 current_root\n            → 有 → 直接使用\n            → 无 → 询问用户输入路径\n\nStep 3：用户输入路径 → 验证存在 → 存入会话状态\n```\n\n---\n\n## 强制 HTML 生成规则（所有生成任务必须遵守）\n\n### 规则1：默认全部折叠\n\n- **所有目录默认折叠**，包括根目录的第一层子目录\n- 用户点击才能展开\n- 不能有任何目录在页面加载时默认展开\n\n### 规则2：每项必有复制按钮\n\n- **每个目录和每个文件**右侧必须有「复制路径」按钮\n- 点击后复制该目录或文件的**绝对路径**\n- 路径格式,同时提供两个系统的：\n  - WSL 路径（以 `\u002Fmnt\u002F` 开头）→ 直接复制，如 `\u002Fmnt\u002Fd\u002F2Study\u002FStudyNotes\u002FSKILLS`\n  - Windows 路径（以 `D:\\` 等盘符开头）→ 保持原格式复制，如 `D:\\Work\\Projects`\n\n### 规则3：其他规范\n\n- 纯静态 HTML，无需服务器，双击即可打开\n- 无 emoji\n- 路径格式自动判断 WSL \u002F Windows\n\n### 规则4：必须使用tast-skill 和 ui-ux-pro-max-skill 这两个技能\n\n### 规则5：必须使用superpowers 技能 写代码\n\n### 规则6：顶级视觉风格\n\nneo-Zen 新禅意科技美学，单色米白背景——墨汁云烟极淡横向纹理在背景中缓慢弥散，银灰细线几何体（三角+同心圆）居于画面正中，纳米级细腻磨砂玻璃作为行级材质，古老书法笔触解构为极简导航线条与电路纹理的融合形态，远山剪影在底部淡入为朦胧的远红外热感成像，按钮点缀含蓄的冷调银蓝微光，留白即呼吸，侘寂残缺之美融入冷冽精密的科技理性，8K 高清，文化纵深与数字静谧交织\n\n---\n\n## 工作流程\n\n```\n用户：目录树\n    ↓\n确认根目录（环境变量 \u002F 会话状态 \u002F 用户输入）\n    ↓\n检测 docs\u002Fdirectory-tree\u002F 下是否已有对应文件\n    ↓\n有缓存 → 询问用户：「更新？还是打开已有文件？」\n         → 输入「更新」→ 重新扫描生成\n         → 输入其他 → 打开现有 HTML\n无缓存 → 直接生成\n    ↓\n生成完毕 → 告知用户文件路径\n```\n\n---\n\n## 生成脚本\n\n生成脚本位于同目录 `scripts\u002Fgenerate.py`，可直接运行：\n\n```bash\npython scripts\u002Fgenerate.py \"\u002Fmnt\u002Fd\u002F2Study\u002FStudyNotes\"\n```\n\n脚本目录结构：\n```\nSKILLS\u002F目录树\u002F\n├── SKILL.md              # 本文档\n├── generate.py          # 主生成脚本（see scripts\u002F）\n├── scripts\u002F\n│   ├── generate.py      # 主脚本\n│   └── .scan_record.json # 最近一次扫描记录（自动生成）\n└── example\u002F\n    └── 2Study_StudyNotes.html  # 完整样例（当前 StudyNotes 目录树）\n```\n\n---\n\n## 大数据目录优化技术（≥10 万条目）\n\n普通目录树对大目录（10 万级以上条目）有三大瓶颈：\n\n1. **Python `os.walk` \u002F `scandir` 在 WSL DrvFs 上极慢**（超时）\n2. **内存中构建完整 JSON 树 → 字符串拼接 → HTML 体积爆炸**（461MB）\n3. **一次性渲染所有 DOM 节点 → 浏览器卡死**\n\n### 解决思路：三层分离\n\n```\nStep 1: find 命令流式输出到文件（绕过 Python I\u002FO 瓶颈）\n         find [root] -not -path \"*\u002F.git\u002F*\" -printf \"%y|%p|%s|%h\\n\" > \u002Ftmp\u002Fdir-tree-raw.txt\n\nStep 2: Python 快速解析 raw 文件（不做路径操作，只字符串 split）\n         每行: kind|path|size|parent\n         取 name: rsplit(\"\u002F\", 1)\n\nStep 3: 树结构数据 zlib 压缩后 base64 嵌入 HTML（不参与 DOM）\n         顶层目录渲染为折叠状态 DOM\n         展开时 JS 从压缩数据动态解压渲染子节点（lazy render）\n```\n\n### 文件格式设计\n\n```\n# find 输出格式（每行一条目）\nd|\u002Fmnt\u002Fd\u002Froot\u002Fsubdir|4096|\u002Fmnt\u002Fd\u002Froot\nf|\u002Fmnt\u002Fd\u002Froot\u002Fsubdir\u002Ffile.txt|1234|\u002Fmnt\u002Fd\u002Froot\u002Fsubdir\n\n# 树结构压缩格式（dir 行，\\x00 分隔父子）\n\u002Fmnt\u002Fd\u002Froot\u002Fdir1\\x00child1\\x00child2\\x00...\n\u002Fmnt\u002Fd\u002Froot\u002Fdir1\u002Fsubdir\\x00...\n```\n\n### 压缩效果（实测 StudyNotes 目录）\n\n| 目录规模 | raw 树数据 | zlib 压缩后 | HTML 最终体积 |\n|---------|-----------|------------|--------------|\n| ~13 万条目 | ~59MB | ~3MB | **3.9MB** |\n| 旧方案（全 DOM 预渲染） | — | — | **461MB** |\n\n### 实现代码骨架\n\n**Step 1: find 输出到文件**\n```python\nimport subprocess\nwith open(\"\u002Ftmp\u002Fdir-tree-raw.txt\", \"wb\") as f:\n    subprocess.Popen([\n        \"find\", root,\n        \"-not\", \"-path\", \"*\u002F.git\u002F*\",\n        \"-printf\", \"%y|%p|%s|%h\\\\n\"\n    ], stdout=f).wait()\n```\n\n**Step 2: 快速解析（不做路径操作，只做字符串 split）**\n```python\nnodes = {}\nwith open(\"\u002Ftmp\u002Fdir-tree-raw.txt\", \"rb\") as f:\n    for raw in f:\n        parts = raw.decode().rstrip().split(\"|\")\n        kind, path, size = parts[0], parts[1], int(parts[2])\n        si = path.rfind(\"\u002F\")\n        name = path[si+1:]\n        nodes[path] = {\n            \"name\": name,\n            \"is_dir\": kind.lower() == \"d\",\n            \"size\": size,\n            \"children\": []\n        }\n\n# 构建 children 引用\nfor path in list(nodes):\n    pi = path.rfind(\"\u002F\")\n    parent = path[:pi]\n    if parent in nodes:\n        nodes[parent][\"children\"].append(path)\n```\n\n**Step 3: 树数据压缩嵌入**\n```python\nimport zlib, base64\n\ndir_lines = [\n    path + \"\\x00\" + \"\\x00\".join(n[\"children\"])\n    for path, n in nodes.items()\n    if n[\"is_dir\"] and n[\"children\"]\n]\nall_lines = \"\\n\".join(dir_lines)\ncompressed = zlib.compress(all_lines.encode(\"utf-8\"), level=6)\ncompressed_b64 = base64.b64encode(compressed).decode(\"ascii\")\n# HTML 中: window.__treeData = compressed_b64\n```\n\n**Step 4: 浏览器 JS 解压（pako）**\n```javascript\nconst bstr = atob(window.__treeData);\nconst buf = new Uint8Array(bstr.split(\"\").map(c => c.charCodeAt(0)));\nconst text = new TextDecoder().decode(pako.inflate(buf));\n\nconst treeIndex = {};\ntext.split(\"\\n\").forEach(line => {\n  const nullIdx = line.indexOf(\"\\x00\");\n  if (nullIdx \u003C 0) return;\n  const parent = line.slice(0, nullIdx);\n  const children = line.slice(nullIdx + 1).split(\"\\x00\").filter(Boolean);\n  treeIndex[parent] = children;\n});\n\n\n\u002F\u002F 展开时 lazy render 子节点\nfunction toggle(path) {\n  if (expanded.has(path)) { \u002F* collapse *\u002F }\n  else {\n    expanded.add(path);\n    const nested = item.querySelector(\".nl\");\n    if (!nested.innerHTML)\n      nested.innerHTML = renderChildren(treeIndex[path] || []);\n  }\n}\n```\n\n### CDN 依赖\n\n```html\n\u003Cscript src=\"https:\u002F\u002Fcdnjs.cloudflare.com\u002Fajax\u002Flibs\u002Fpako\u002F2.1.0\u002Fpako.min.js\">\u003C\u002Fscript>\n```\n\n> `pako` 是唯一外部依赖（zlib decompress），纯前端无需服务器。\n\n### 何时启用\n\n当 `find [root] -not -path \"*\u002F.git\u002F*\" | wc -l` 超过 **5 万条目**时，\n自动切换为压缩 lazy-render 模式。\n\n---\n\n## 输出结果\n\n每个生成任务返回：\n- 扫描到的总条目数（目录 + 文件）\n- 扫描耗时\n- HTML 文件路径\n- GitHub Pages 访问地址（如果已 push）\n\n\n---\n\n## 错误处理\n\n| 情况 | 处理 |\n|------|------|\n| 根目录路径无效 | 报错并重新询问 |\n| 目录无法访问 | 提示「无权限访问该目录」|\n| 空目录 | 正常返回空树结构 |\n| 扫描中断 | 返回已扫描的部分 + 警告 |","# 目录树 · 技能文档\n\n生成的HTML风格必须符合：\n亮色单色背景 + 新禅意科技美学。\n\n**视觉规范（v3.2+）：**\n- 背景：纯净米白 `#f6f5f1`（单色，无渐变）\n- 墨烟：极淡墨灰横向云雾纹理（CSS `repeating-linear-gradient` 实现，不喧宾夺主）\n- 磨砂玻璃：`backdrop-filter: blur(10~20px)` + 1px 内嵌光晕边框\n- 中心几何体：单线条三角 + 同心圆（SVG thin-line）\n- 远山剪影：底部淡墨山影 SVG，opacity 0.5\n- 按钮微光：hover 时 `box-shadow: 0 0 10px rgba(100,140,180,0.1)`\n- 留白即呼吸：两栏布局，大量负空间\n\n**注：** 背景色为浅色，视觉方向与 v3.1 的深色背景不同，以本节规范为准。\n\n## 触发词\n\n- `目录树`\n- `目录导航`\n\n---\n\n## 核心功能\n\n### 1. 扫描给定目录\n\n递归扫描指定根目录，返回完整的目录和文件树结构。\n\n- 扫描所有层级（深度无限制）\n- 记录：name \u002F path \u002F is_dir \u002F size \u002F children[]\n- `.git` 目录只显示自身及其文件数量，不递归其内部内容\n\n### 2. 输出文件名命名规则\n\n输出路径：`docs\u002Fdirectory-tree\u002F`\n\n文件名 = 取根目录**最后两个有意义段**，用下划线连接：\n\n```\n\u002Fmnt\u002Fd\u002F2Study\u002FStudyNotes         → 2Study_StudyNotes.html\n\u002Fmnt\u002Fd\u002FWork\u002FProjects             → Work_Projects.html\n\u002Fmnt\u002Fd\u002F2Study\u002FStudyNotes\u002FSKILLS  → StudyNotes_SKILLS.html\nD:\\Work\\Projects                  → Work_Projects.html\n```\n\n规则：\n- 路径分隔符（\u002F、\\）→ 替换为 `_`\n- 盘符保留（如 `d_`、`D_`）\n- 特殊字符清理\n- 后缀为 `.html`\n\n### 3. 多根目录管理\n\n同一个根目录每次生成覆盖同名文件，不同根目录生成不同文件名，不会冲突。\n\n---\n\n## 输入确认流程\n\n```\nStep 1：读取环境变量 DIR_NAV_ROOT\n        → 有值 → 验证路径存在 → 直接使用\n\nStep 2：无环境变量 → 检查会话状态 current_root\n            → 有 → 直接使用\n            → 无 → 询问用户输入路径\n\nStep 3：用户输入路径 → 验证存在 → 存入会话状态\n```\n\n---\n\n## 强制 HTML 生成规则（所有生成任务必须遵守）\n\n### 规则1：默认全部折叠\n\n- **所有目录默认折叠**，包括根目录的第一层子目录\n- 用户点击才能展开\n- 不能有任何目录在页面加载时默认展开\n\n### 规则2：每项必有复制按钮\n\n- **每个目录和每个文件**右侧必须有「复制路径」按钮\n- 点击后复制该目录或文件的**绝对路径**\n- 路径格式,同时提供两个系统的：\n  - WSL 路径（以 `\u002Fmnt\u002F` 开头）→ 直接复制，如 `\u002Fmnt\u002Fd\u002F2Study\u002FStudyNotes\u002FSKILLS`\n  - Windows 路径（以 `D:\\` 等盘符开头）→ 保持原格式复制，如 `D:\\Work\\Projects`\n\n### 规则3：其他规范\n\n- 纯静态 HTML，无需服务器，双击即可打开\n- 无 emoji\n- 路径格式自动判断 WSL \u002F Windows\n\n### 规则4：必须使用tast-skill 和 ui-ux-pro-max-skill 这两个技能\n\n### 规则5：必须使用superpowers 技能 写代码\n\n### 规则6：顶级视觉风格\n\nneo-Zen 新禅意科技美学，单色米白背景——墨汁云烟极淡横向纹理在背景中缓慢弥散，银灰细线几何体（三角+同心圆）居于画面正中，纳米级细腻磨砂玻璃作为行级材质，古老书法笔触解构为极简导航线条与电路纹理的融合形态，远山剪影在底部淡入为朦胧的远红外热感成像，按钮点缀含蓄的冷调银蓝微光，留白即呼吸，侘寂残缺之美融入冷冽精密的科技理性，8K 高清，文化纵深与数字静谧交织\n\n---\n\n## 工作流程\n\n```\n用户：目录树\n    ↓\n确认根目录（环境变量 \u002F 会话状态 \u002F 用户输入）\n    ↓\n检测 docs\u002Fdirectory-tree\u002F 下是否已有对应文件\n    ↓\n有缓存 → 询问用户：「更新？还是打开已有文件？」\n         → 输入「更新」→ 重新扫描生成\n         → 输入其他 → 打开现有 HTML\n无缓存 → 直接生成\n    ↓\n生成完毕 → 告知用户文件路径\n```\n\n---\n\n## 生成脚本\n\n生成脚本位于同目录 `scripts\u002Fgenerate.py`，可直接运行：\n\n```bash\npython scripts\u002Fgenerate.py \"\u002Fmnt\u002Fd\u002F2Study\u002FStudyNotes\"\n```\n\n脚本目录结构：\n```\nSKILLS\u002F目录树\u002F\n├── SKILL.md              # 本文档\n├── generate.py          # 主生成脚本（see scripts\u002F）\n├── scripts\u002F\n│   ├── generate.py      # 主脚本\n│   └── .scan_record.json # 最近一次扫描记录（自动生成）\n└── example\u002F\n    └── 2Study_StudyNotes.html  # 完整样例（当前 StudyNotes 目录树）\n```\n\n---\n\n## 大数据目录优化技术（≥10 万条目）\n\n普通目录树对大目录（10 万级以上条目）有三大瓶颈：\n\n1. **Python `os.walk` \u002F `scandir` 在 WSL DrvFs 上极慢**（超时）\n2. **内存中构建完整 JSON 树 → 字符串拼接 → HTML 体积爆炸**（461MB）\n3. **一次性渲染所有 DOM 节点 → 浏览器卡死**\n\n### 解决思路：三层分离\n\n```\nStep 1: find 命令流式输出到文件（绕过 Python I\u002FO 瓶颈）\n         find [root] -not -path \"*\u002F.git\u002F*\" -printf \"%y|%p|%s|%h\\n\" > \u002Ftmp\u002Fdir-tree-raw.txt\n\nStep 2: Python 快速解析 raw 文件（不做路径操作，只字符串 split）\n         每行: kind|path|size|parent\n         取 name: rsplit(\"\u002F\", 1)\n\nStep 3: 树结构数据 zlib 压缩后 base64 嵌入 HTML（不参与 DOM）\n         顶层目录渲染为折叠状态 DOM\n         展开时 JS 从压缩数据动态解压渲染子节点（lazy render）\n```\n\n### 文件格式设计\n\n```\n# find 输出格式（每行一条目）\nd|\u002Fmnt\u002Fd\u002Froot\u002Fsubdir|4096|\u002Fmnt\u002Fd\u002Froot\nf|\u002Fmnt\u002Fd\u002Froot\u002Fsubdir\u002Ffile.txt|1234|\u002Fmnt\u002Fd\u002Froot\u002Fsubdir\n\n# 树结构压缩格式（dir 行，\\x00 分隔父子）\n\u002Fmnt\u002Fd\u002Froot\u002Fdir1\\x00child1\\x00child2\\x00...\n\u002Fmnt\u002Fd\u002Froot\u002Fdir1\u002Fsubdir\\x00...\n```\n\n### 压缩效果（实测 StudyNotes 目录）\n\n| 目录规模 | raw 树数据 | zlib 压缩后 | HTML 最终体积 |\n|---------|-----------|------------|--------------|\n| ~13 万条目 | ~59MB | ~3MB | **3.9MB** |\n| 旧方案（全 DOM 预渲染） | — | — | **461MB** |\n\n### 实现代码骨架\n\n**Step 1: find 输出到文件**\n```python\nimport subprocess\nwith open(\"\u002Ftmp\u002Fdir-tree-raw.txt\", \"wb\") as f:\n    subprocess.Popen([\n        \"find\", root,\n        \"-not\", \"-path\", \"*\u002F.git\u002F*\",\n        \"-printf\", \"%y|%p|%s|%h\\\\n\"\n    ], stdout=f).wait()\n```\n\n**Step 2: 快速解析（不做路径操作，只做字符串 split）**\n```python\nnodes = {}\nwith open(\"\u002Ftmp\u002Fdir-tree-raw.txt\", \"rb\") as f:\n    for raw in f:\n        parts = raw.decode().rstrip().split(\"|\")\n        kind, path, size = parts[0], parts[1], int(parts[2])\n        si = path.rfind(\"\u002F\")\n        name = path[si+1:]\n        nodes[path] = {\n            \"name\": name,\n            \"is_dir\": kind.lower() == \"d\",\n            \"size\": size,\n            \"children\": []\n        }\n\n# 构建 children 引用\nfor path in list(nodes):\n    pi = path.rfind(\"\u002F\")\n    parent = path[:pi]\n    if parent in nodes:\n        nodes[parent][\"children\"].append(path)\n```\n\n**Step 3: 树数据压缩嵌入**\n```python\nimport zlib, base64\n\ndir_lines = [\n    path + \"\\x00\" + \"\\x00\".join(n[\"children\"])\n    for path, n in nodes.items()\n    if n[\"is_dir\"] and n[\"children\"]\n]\nall_lines = \"\\n\".join(dir_lines)\ncompressed = zlib.compress(all_lines.encode(\"utf-8\"), level=6)\ncompressed_b64 = base64.b64encode(compressed).decode(\"ascii\")\n# HTML 中: window.__treeData = compressed_b64\n```\n\n**Step 4: 浏览器 JS 解压（pako）**\n```javascript\nconst bstr = atob(window.__treeData);\nconst buf = new Uint8Array(bstr.split(\"\").map(c => c.charCodeAt(0)));\nconst text = new TextDecoder().decode(pako.inflate(buf));\n\nconst treeIndex = {};\ntext.split(\"\\n\").forEach(line => {\n  const nullIdx = line.indexOf(\"\\x00\");\n  if (nullIdx \u003C 0) return;\n  const parent = line.slice(0, nullIdx);\n  const children = line.slice(nullIdx + 1).split(\"\\x00\").filter(Boolean);\n  treeIndex[parent] = children;\n});\n\n\n\u002F\u002F 展开时 lazy render 子节点\nfunction toggle(path) {\n  if (expanded.has(path)) { \u002F* collapse *\u002F }\n  else {\n    expanded.add(path);\n    const nested = item.querySelector(\".nl\");\n    if (!nested.innerHTML)\n      nested.innerHTML = renderChildren(treeIndex[path] || []);\n  }\n}\n```\n\n### CDN 依赖\n\n```html\n\u003Cscript src=\"https:\u002F\u002Fcdnjs.cloudflare.com\u002Fajax\u002Flibs\u002Fpako\u002F2.1.0\u002Fpako.min.js\">\u003C\u002Fscript>\n```\n\n> `pako` 是唯一外部依赖（zlib decompress），纯前端无需服务器。\n\n### 何时启用\n\n当 `find [root] -not -path \"*\u002F.git\u002F*\" | wc -l` 超过 **5 万条目**时，\n自动切换为压缩 lazy-render 模式。\n\n---\n\n## 输出结果\n\n每个生成任务返回：\n- 扫描到的总条目数（目录 + 文件）\n- 扫描耗时\n- HTML 文件路径\n- GitHub Pages 访问地址（如果已 push）\n\n\n---\n\n## 错误处理\n\n| 情况 | 处理 |\n|------|------|\n| 根目录路径无效 | 报错并重新询问 |\n| 目录无法访问 | 提示「无权限访问该目录」|\n| 空目录 | 正常返回空树结构 |\n| 扫描中断 | 返回已扫描的部分 + 警告 |",{"name":5,"tags":27,"version":28,"description":7},[19,21],3.2,"main","5b2b73ce2fbb69cd70597cfbbf24c99bc9e94b4c",1,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS","https:\u002F\u002Fgithub.com\u002FFeatherHunter","The Boy, The Man, The Human.","2026-09-12 20:33:55",{"source":8,"skillName":5,"commands":37,"prompt":47,"zipAvailable":48},[38,41,44],{"tool":39,"command":40},"npx","npx skills add FeatherHunter\u002FSKILLS --skill \"目录树\"",{"tool":42,"command":43},"bunx","bunx skills add FeatherHunter\u002FSKILLS --skill \"目录树\"",{"tool":45,"command":46},"pnpm","pnpm dlx skills add FeatherHunter\u002FSKILLS --skill \"目录树\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F目录树\u002FSKILL.md",true,[50,56,62,66,70],{"path":51,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":54,"sourceHtmlUrl":55},"example\u002F2Study_StudyNotes.html","REFERENCE","参考文档",3279298,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F目录树\u002Fexample\u002F2Study_StudyNotes.html",{"path":57,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":60,"sourceHtmlUrl":61},"scripts\u002F.gitignore","SCRIPT","脚本",105,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F目录树\u002Fscripts\u002F.gitignore",{"path":63,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":64,"sourceHtmlUrl":65},"scripts\u002Fgenerate_v2.py",30248,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F目录树\u002Fscripts\u002Fgenerate_v2.py",{"path":67,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":68,"sourceHtmlUrl":69},"scripts\u002Fgenerate.py",31298,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F目录树\u002Fscripts\u002Fgenerate.py",{"path":71,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":72,"sourceHtmlUrl":73},"目录树.html",15510,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F目录树\u002F目录树.html",[75,95,104,113,123,129],{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":22},"01M71JPWVNC5JZ2FD4CSR3SZC1","饼干记账","记账技能。写入类:记支出、记收入、拍账单、批量录入、改记录、撤销、恢复、记报销、记退款、记借出、记借入、记收回、记偿还、记分期。查询类:查今天、查某天、查月、查区间、查分类、搜备注、查标签、查账户、查账本、查欠款、查待报销。分析类:看月度、看总览、看分类、看对比、看趋势、看大额、做统计、看洞察、看借贷。目标\u002F账户\u002F联动:设定预算、看预算、设定目标、看目标、新增账户、改账户、账户转账、看账户汇总、买东西联动、吃饭联动。**所有查询\u002F分析类唤醒词默认 invoke HTML 工作流**(scripts\u002Fbill_inject.py + templates),写入类保持文字回执。能力速查:说「饼干记账 HELP」\u002F「查帮助」\u002F「能做什么」。完整 70 个唤醒词见 references\u002F路由表.md","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F饼干记账\u002FSKILL.md",[],[77,82,83,84,85,86,87,88,89,90,91,92,93,94],"记账","支出","scripts","收入","账单","预算","文字","templates","invoke","统计","html","help","references",{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":101,"publishedAt":22},"01M71JPS100K4E2JN8R3B0F9NR","贴心助理","真实助手 - 主动分析用户状态，关心用户，提供帮助与提醒。不偷懒地联动所有技能，真正像个朋友一样陪伴。","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F贴心助理\u002FSKILL.md",[],[97,102,103],"陪伴","朋友",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":110,"publishedAt":22},"01M71JPPN0WZ1ARA081J0JDNPC","美团","安装美团旅游技能(meituan-travel)向导 - 检查 mtskills 商店并安装 meituan-travel","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F美团\u002FSKILL.md",[],[106,111,112],"meituan","travel",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":22},"01M71JPN921TSX62DXEFY1B8FJ","网易云音乐","安装网易云音乐 CLI 工具(@music163\u002Fncm-cli) - 通过 npm 全局安装","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F网易云音乐\u002FSKILL.md",[],[115,120,121,122],"工具","cli","npm",{"skillNo":124,"name":125,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":128,"publishedAt":22},"01M71JPF82PYTK0NYMJF8Y9E48","私家大厨","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002FSKILL.md",[],[125],{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":135,"publishedAt":22},"01M71JPADTYH476Q2M2CQ62WSD","百科采集","全网百科知识采集技能。 用户提及采集百科、指定领域、搜索百科、深度搜索、备用搜索、切换引擎、 生成百科、精简百科、扩展知识、百科评语、批量采集、迭代采集时触发。 支持22个预设领域的百科知识采集，Tavily\u002FMiniMax双引擎搜索。","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F百科采集\u002FSKILL.md",[],[131,136,137,138],"搜索","生成","tavily"]