{"_id":"@daxu8972/dsh-file-manager","name":"@daxu8972/dsh-file-manager","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@daxu8972/dsh-file-manager","version":"0.1.0","description":"DSH 外置文件管理器插件：VSCode 风格项目文件树 + 文件增删改查（新建/重命名/删除/编辑/保存）+ 模型文件工具。","type":"module","main":"./lib/index.js","types":"./lib/types/index.d.ts","license":"MIT","keywords":["deepseek","dsh","plugin","file-manager","files","cordis"],"peerDependencies":{"@deepseek-ai/cordis":">=4.0.0-rc <5","@deepseek-ai/dsh-client-ui-slots":">=0.0.1-rc <2","@deepseek-ai/dsh-tools":">=0.0.1-rc <2","schemastery":"^3.18.0"},"peerDependenciesMeta":{"@deepseek-ai/dsh-client-ui-slots":{"optional":true},"@deepseek-ai/dsh-tools":{"optional":true},"@deepseek-ai/cordis":{"optional":true},"schemastery":{"optional":true}},"devDependencies":{"@codemirror/lang-css":"^6.3.1","@codemirror/lang-html":"^6.4.12","@codemirror/lang-javascript":"^6.2.5","@codemirror/lang-json":"^6.0.2","@codemirror/lang-markdown":"^6.5.2","@codemirror/lang-python":"^6.2.1","@codemirror/state":"^6.7.1","@codemirror/theme-one-dark":"^6.1.3","@codemirror/view":"^6.43.9","@types/node":"^24.13.3","@types/react":"^19.2.18","@uiw/react-codemirror":"^4.25.11","tsdown":"^0.22.14","typescript":"^5.9.0"},"scripts":{"build":"node scripts/build.cjs","build:client":"tsdown","typecheck":"tsc -p tsconfig.json --noEmit","prepack":"npm run build && npm run build:client"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-slots"],"platform":"web"}},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_id":"@daxu8972/dsh-file-manager@0.1.0","gitHead":"d4a5b3b8b849dd2386e5f05d712a0a2afd00ddd9","_nodeVersion":"22.20.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-aT22yXbwnL+MEaIIw2JsB4FAxbpzddADKmX3FCa2Tm6vdrm9g/FYpccpEKCpB+nbe2GVugjKH+i3xF3klOvOMw==","shasum":"89a39e1ef45cf5228769681370dca63e6adea0ba","tarball":"https://registry.npmjs.org/@daxu8972/dsh-file-manager/-/dsh-file-manager-0.1.0.tgz","fileCount":17,"unpackedSize":3839985,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCRV/cxfrHQ8+PSURYVEABvLGOPbfTR3aF2H+tfzDvVFAIhAMjsdXVqly+q+QtMqBhxbs4mQJayT6se/04yDrSSt5OW"}]},"_npmUser":{"name":"dadaxu8972","email":"daxu8972@gmail.com"},"directories":{},"maintainers":[{"name":"dadaxu8972","email":"daxu8972@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-file-manager_0.1.0_1787984196096_0.353458008645148"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-29T06:16:35.892Z","0.1.0":"2026-08-29T06:16:36.307Z","modified":"2026-08-29T06:16:36.595Z"},"maintainers":[{"name":"dadaxu8972","email":"daxu8972@gmail.com"}],"description":"DSH 外置文件管理器插件：VSCode 风格项目文件树 + 文件增删改查（新建/重命名/删除/编辑/保存）+ 模型文件工具。","keywords":["deepseek","dsh","plugin","file-manager","files","cordis"],"license":"MIT","readme":"# @daxu8972/dsh-file-manager\n\n> DSH 外置文件管理器插件 —— 在 DSH Web 界面里像 VSCode 一样浏览、创建、编辑、重命名、删除项目文件，同时给模型提供 `file_*` 工具。\n\n`hybrid` 形态：服务端注册文件工具（tree/read/write/mkdir/rename/delete）+ 客户端「文件」标签页。右侧编辑器基于 **CodeMirror 6**，提供行号、语法高亮、代码折叠、查找替换等轻量编辑体验。\n\n---\n\n## 特性\n\n| 能力 | 服务端工具 | 可视化面板 |\n|------|:---:|:---:|\n| 树状显示项目文件 | `file_tree` | ✅ 懒加载树 |\n| 查看文件内容 | `file_read` | ✅ CodeMirror 6 编辑器（行号/语法高亮） |\n| 新建文件 | `file_write`（创建或覆盖） | ✅ 「＋ 新建文件」 |\n| 编辑保存 | `file_write` | ✅ CodeMirror 6 + Ctrl/Cmd+S |\n| 新建文件夹 | `file_mkdir` | ✅ 「＋ 新建文件夹」 |\n| 重命名 / 移动 | `file_rename` | ✅ 行内重命名 |\n| 删除 | `file_delete` | ✅ hover 删除 + 二次确认 |\n| 全局搜索 | \\\file_search\\ | ✅ 搜索面板：按文件分组显示命中，点击可打开文件 |\\n| 对话区文件跳转 | — | ✅ 点击模型回复/产物中的文件路径，优先切到「文件」页打开 |\n\n**默认项目根目录**：取 DSH 当前打开的**工作区**目录（`ctx.workspaceRegistry`）。HTTP API 也可用 `?root=/abs/dir` 显式指定任意目录。\n\n**安全边界**：\n- 所有路径都解析到 root 内，`..` 越界和符号链接逃逸会被拒绝；\n- 不能删除项目根目录；\n- 二进制/超大文本文件（>4MB）不返回正文，避免浏览器被大文件拖垮；\n- 写操作（`file_write` / `file_mkdir` / `file_rename` / `file_delete`）是真实磁盘操作，请谨慎使用；模型工具的写操作可配合 DSH 的 `approval` / `permission` 策略做审批。\n\n---\n\n## 安装使用（快速上手）\n\n### 1. 安装插件\n\n注入器是最快的装配方式（免重启）：\n\n```\ndev_install_package {\"dir\": \"<本插件目录绝对路径>\"}\n```\n\n重启后由 profile 的 `bundles` 列表正常装配。详见下方「安装」小节。\n\n### 2. 打开文件面板\n\n1. 打开 DSH Web 界面（默认 `http://127.0.0.1:3080`）\n2. 进入一个会话，会话区域顶部会有一个**标签页环**（默认是「Chat」）\n3. 点旁边的 **「文件」** 标签页 —— 就是可视化面板了\n   > 若装完看不到文件标签，**刷新一下页面（F5）** 让浏览器加载最新 client bundle。\n\n### 3. 使用面板\n\n- **树状浏览**：左侧是项目文件树；点击目录箭头展开/折叠，目录内容按需懒加载（不预先扫全项目，`node_modules` 也不会拖慢首屏）\n- **编辑**：点击文件 → 右侧打开文本编辑器；修改后按 `Ctrl+S`（Mac 为 `Cmd+S`）或点「保存」\n- **新建文件/文件夹**：右上角按钮，输入相对当前目录的路径（如 `src/utils/helper.ts`）\n- **重命名**：hover 文件/目录行 → 点 ✎ → 输入新名称 → 回车提交（也可点树外取消）\n- **删除**：hover → 点 🗑 → 确认后删除（目录递归删除，不可逆）\n- **刷新**：重新拉取当前展开的目录和正在编辑的文件\n\n> 💡 对话区里模型回复或“产物”中的文件路径，点击后会**优先切到「文件」标签页**并在文件中展开/打开，不再走系统默认程序打开。\n\n### 4. 在对话里让模型用文件工具（可选）\n\n同一插件还注册了模型工具，你直接说：\n\n> “看看当前项目有哪些文件”　“读取 src/index.ts”　“新建一个 README.md 并写内容”　“把 a.txt 改名为 b.txt”　“删除 temp.txt”\n\nDSH 会用 `file_tree` / `file_read` / `file_write` / `file_mkdir` / `file_rename` / `file_delete` 执行。\n\n---\n\n## 安装\n\n### 方式 A：注入器（推荐，免重启）\n\n在 DSH 注入器环境里：\n\n```\ndev_install_package {\"dir\": \"<本插件目录绝对路径>\"}\n```\n\n`dev_install_package` 会：改 profile `package.json`（dependencies + bundles）→ 建 `node_modules` junction → `loader.create` 动态加载。重启后由 `bundles` 列表正常装配。\n\n### 方式 B：本地 tgz 安装\n\n```bash\nnpm pack\n# 得到 @daxu8972-dsh-file-manager-0.1.0.tgz\n```\n\n然后作为普通依赖塞进你的 DSH profile：\n\n```\ndev_install_package {\"dir\": \"<解压后的包目录>\"}\n# 或手动：把 tarball 里的 lib/ + package.json 放进 node_modules/@daxu8972/dsh-file-manager\n```\n\n### 方式 C：直接装配（重启常驻）\n\n```powershell\ndsh plugin --profile web add <本插件目录>\n```\n\n> 无论哪种方式，要求宿主 DSH 已装配 `dsh-tools`（工具）、`dsh-host-webserver` + `dsh-workspace`（面板 HTTP API）。这些是 DSH 自带插件，缺任意面板能力会优雅降级为「仅工具」。\n\n---\n\n## 开发 / 构建\n\n使用已安装的 `@deepseek-ai/dsh` 作为类型依赖来源（无需 DSH 源码 checkout）：\n\n```bash\nnpm install --legacy-peer-deps\nnpm run build          # server src/ → lib/\nnpm run build:client   # browser client → lib/client.js\n```\n\n> `scripts/build.cjs` 会从常见全局安装位置探测 `@deepseek-ai/dsh`，并把 `@deepseek-ai/dsh-tools`、`@deepseek-ai/cordis` 等以 junction 链到本地 `node_modules` 供编译。也可用 `--pkg <dsh-install-dir>` 或 `DSH_PKG` 显式指定。\n\n构建产物：\n\n```\nlib/index.js       # 插件入口（apply）\nlib/api.js         # HTTP /@daxu8972/dsh-file-manager/api\nlib/tools.js       # ctx.tools.register 文件工具\nlib/files.js       # 文件系统封装（CRUD + 树）\nlib/client.js      # 浏览器「文件」面板\n```\n\n---\n\n## 体系结构\n\n```\n浏览器（client.js）\n  └─ 文件标签页（conversation.view 槽）──fetch──▶ HTTP JSON API\n                                                    │\nDSH host（apply）\n  ├─ ctx.webServer.register('/@daxu8972/dsh-file-manager/api')\n  │     ├─ GET  /workspace   当前会话工作区\n  │     ├─ GET  /list        目录直系子项（?depth=N 可递归）\n  │     ├─ GET  /file        读取文件\n  │     └─ POST /file|directory|rename|delete\n  └─ ctx.tools.register(...) file_tree/file_read/file_write/file_mkdir/file_rename/file_delete\n```\n\n---\n\n## License\n\nMIT © 2026 daxu8972","readmeFilename":"README.md","_rev":"1-f822a4c2de46f3d8d371584777a0e4b0"}