{"_id":"@dsh-mixxed/dsh-client-ui-filesystem","_rev":"3-1dcbb56dff673d5eb3ebae5a8deb9379","name":"@dsh-mixxed/dsh-client-ui-filesystem","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.1":{"name":"@dsh-mixxed/dsh-client-ui-filesystem","version":"0.1.1","keywords":["dsh","plugin","deepseek","filesystem","suggestions"],"license":"Apache-2.0","_id":"@dsh-mixxed/dsh-client-ui-filesystem@0.1.1","maintainers":[{"name":"dragons96999","email":"dragons96999@163.com"}],"homepage":"https://github.com/dsh-mixxed/dsh-client-ui-filesystem#readme","bugs":{"url":"https://github.com/dsh-mixxed/dsh-client-ui-filesystem/issues"},"dsh":{"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-client-ui-slots"],"platform":"web"}},"dist":{"shasum":"45442d6d815b41abfe21392b45eb49bd5fce9fe5","tarball":"https://registry.npmjs.org/@dsh-mixxed/dsh-client-ui-filesystem/-/dsh-client-ui-filesystem-0.1.1.tgz","fileCount":8,"integrity":"sha512-dUUMjvdC1wefv/RSJO0OTDcXD5y05+0H+ZBmpJ2zBA/tGKxqToMfiwBka3R7c3QBBCDA5tNnuy8v8OPljoeH3w==","signatures":[{"sig":"MEUCIQCcuBnmB5eAZvQOHIgUfljr6ZQXBHu7gN+fiX6tFT4WhwIgSzobJSG9wHDZWPvSamYldkk1Xn7QGOEbtCs/HwURmKI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54418},"type":"module","exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"gitHead":"c3e2c72de213bd2c07ceda368982961f8709366e","scripts":{"pack":"npm pack","test":"vitest run","build":"node scripts/build.mjs","prepack":"npm run build","typecheck":"tsc -p tsconfig.json"},"_npmUser":{"name":"dragons96999","email":"dragons96999@163.com"},"repository":{"url":"git+https://github.com/dsh-mixxed/dsh-client-ui-filesystem.git","type":"git"},"_npmVersion":"11.9.0","description":"Out-of-tree dsh plugin: '@' project file/directory suggestions and plain-text references in the chat composer.","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^24.0.0","playwright-core":"^1.62.1","@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-fs":"0.1.0-rc.6","@deepseek-ai/dsh-session":"0.1.0-rc.6","@deepseek-ai/dsh-client-runtime":"0.1.0-rc.6","@deepseek-ai/dsh-host-webserver":"0.1.0-rc.6","@deepseek-ai/dsh-client-ui-slots":"0.1.0-rc.6","@deepseek-ai/dsh-client-ui-input-trigger":"0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-client-ui-filesystem_0.1.1_1786853664400_0.3152857790463397","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@dsh-mixxed/dsh-client-ui-filesystem","version":"0.1.2","keywords":["dsh","plugin","deepseek","filesystem","suggestions"],"license":"Apache-2.0","_id":"@dsh-mixxed/dsh-client-ui-filesystem@0.1.2","maintainers":[{"name":"dragons96999","email":"dragons96999@163.com"}],"homepage":"https://github.com/dsh-mixxed/dsh-client-ui-filesystem#readme","bugs":{"url":"https://github.com/dsh-mixxed/dsh-client-ui-filesystem/issues"},"dsh":{"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-client-ui-slots"],"platform":"web"}},"dist":{"shasum":"1d9dc83762f256e5efb615c809f86ab578dcb485","tarball":"https://registry.npmjs.org/@dsh-mixxed/dsh-client-ui-filesystem/-/dsh-client-ui-filesystem-0.1.2.tgz","fileCount":8,"integrity":"sha512-QcVzQXLLuSl23dzjP8rmRvr4RCVltAzubpE8FE/y2dAXVGWFOIys0mACptcn5dtxftCiu/WhTrSHbvgvxXQCAw==","signatures":[{"sig":"MEYCIQDKKXWGsUfwqc/sjwz9UdVyQvXqLP5lPkLIra2mhYxQ5QIhANx4U24Ucveam6NDgXYL9Q+EdWYMrO4eFUOD9WyTkN8i","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57827},"type":"module","exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"gitHead":"0795ab9eb5112384a61a1efd7307789fd5d74c55","scripts":{"pack":"npm pack","test":"vitest run","build":"node scripts/build.mjs","prepack":"npm run build","typecheck":"tsc -p tsconfig.json"},"_npmUser":{"name":"dragons96999","email":"dragons96999@163.com"},"repository":{"url":"git+https://github.com/dsh-mixxed/dsh-client-ui-filesystem.git","type":"git"},"_npmVersion":"11.9.0","description":"Out-of-tree dsh plugin: '@' project file/directory suggestions and plain-text references in the chat composer.","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","esbuild":"^0.25.0","typescript":"^5.7.2","@types/node":"^24.0.0","playwright-core":"^1.62.1","@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-fs":"0.1.0-rc.6","@deepseek-ai/dsh-session":"0.1.0-rc.6","@deepseek-ai/dsh-client-runtime":"0.1.0-rc.6","@deepseek-ai/dsh-host-webserver":"0.1.0-rc.6","@deepseek-ai/dsh-client-ui-slots":"0.1.0-rc.6","@deepseek-ai/dsh-client-ui-input-trigger":"0.1.0-rc.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-client-ui-filesystem_0.1.2_1786855083903_0.24258792526831785","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@dsh-mixxed/dsh-client-ui-filesystem","version":"0.1.3","description":"Out-of-tree dsh plugin: '@' project file/directory suggestions and plain-text references in the chat composer.","type":"module","license":"Apache-2.0","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/dsh-mixxed/dsh-client-ui-filesystem.git"},"keywords":["dsh","plugin","deepseek","filesystem","suggestions"],"exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json"},"dsh":{"client":{"platform":"web","inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-client-ui-slots"]},"bundle":{"patch":"./cordis.patch.yml"}},"scripts":{"build":"node scripts/build.mjs","prepack":"npm run build","typecheck":"tsc -p tsconfig.json","test":"vitest run","pack":"npm pack"},"devDependencies":{"@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-client-runtime":"0.1.0-rc.6","@deepseek-ai/dsh-client-ui-input-trigger":"0.1.0-rc.6","@deepseek-ai/dsh-client-ui-slots":"0.1.0-rc.6","@deepseek-ai/dsh-fs":"0.1.0-rc.6","@deepseek-ai/dsh-host-webserver":"0.1.0-rc.6","@deepseek-ai/dsh-session":"0.1.0-rc.6","@types/node":"^24.0.0","esbuild":"^0.25.0","playwright-core":"^1.62.1","typescript":"^5.7.2","vitest":"^3.0.0"},"gitHead":"0a0f8d82ef47b8814106ab3bfef224e2d139c700","_id":"@dsh-mixxed/dsh-client-ui-filesystem@0.1.3","bugs":{"url":"https://github.com/dsh-mixxed/dsh-client-ui-filesystem/issues"},"homepage":"https://github.com/dsh-mixxed/dsh-client-ui-filesystem#readme","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-vYtmrnTXvmHXsKeukOg7sMJLfWux8YecxF0peuyUnvoHaMMOuG0wnsC5Y3vsLrFEcozlr0iajHFQ9l3briFbqA==","shasum":"e051cf6026a3dbd5f46b6e2ae2598d27d03add0c","tarball":"https://registry.npmjs.org/@dsh-mixxed/dsh-client-ui-filesystem/-/dsh-client-ui-filesystem-0.1.3.tgz","fileCount":9,"unpackedSize":59605,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGP2g74yYFmg3CSqPhqe3W4l6APos08batuCfq588ZosAiEAtVNenCts8tzSban4Y4fIhyOLIuxA8LXYw6hEcSsD6uM="}]},"_npmUser":{"name":"dragons96999","email":"dragons96999@163.com"},"directories":{},"maintainers":[{"name":"dragons96999","email":"dragons96999@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-client-ui-filesystem_0.1.3_1786856068214_0.04552530806978328"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-16T04:14:24.263Z","modified":"2026-08-16T04:54:28.651Z","0.1.1":"2026-08-16T04:14:24.544Z","0.1.2":"2026-08-16T04:38:04.049Z","0.1.3":"2026-08-16T04:54:28.356Z"},"bugs":{"url":"https://github.com/dsh-mixxed/dsh-client-ui-filesystem/issues"},"license":"Apache-2.0","homepage":"https://github.com/dsh-mixxed/dsh-client-ui-filesystem#readme","keywords":["dsh","plugin","deepseek","filesystem","suggestions"],"repository":{"type":"git","url":"git+https://github.com/dsh-mixxed/dsh-client-ui-filesystem.git"},"description":"Out-of-tree dsh plugin: '@' project file/directory suggestions and plain-text references in the chat composer.","maintainers":[{"name":"dragons96999","email":"dragons96999@163.com"}],"readme":"# ui-filesystem\n\n[English](README.md) · **中文**\n\n一个 dsh 插件：在对话窗口输入 `@` 时，检索当前项目（会话工作目录）下的文件与子目录，选中后插入 `@路径` 引用，发送时 prompt 原样携带，模型可用自身 fs 工具读取。\n\n完全独立于 deepseek-harness 仓库的 out-of-tree 插件（harness 源码零改动）：与 ui-skill 的 `/` 走同一条 input-trigger 管线（与 ui-subagent 的 `@` 提及并存为第二个菜单分组），项目树通过插件自己的 HTTP 路由（`ctx.webServer`）提供。\n\n## 安装\n\n1. 从 npm 安装插件（已发布为 `@dsh-mixxed/dsh-client-ui-filesystem`）：\n\n   ```sh\n   dsh plugin --profile web add @dsh-mixxed/dsh-client-ui-filesystem\n   ```\n\n   包声明了 `dsh.bundle`（包内自带 `cordis.patch.yml`），因此 `dsh plugin add` 会自动把它追加进 profile 的 `dsh.profile.bundles` 层栈，下次启动自动挂载——**无需手动编辑 cordis.patch.yml**。\n\n   从旧版本（未声明 bundle）升级：请删除 `$DSH_HOME/profiles/<name>/cordis.patch.yml` 中旧的 `ui-filesystem` 挂载行——bundle 层现在会提供它，两者并存会挂载两次。\n\n2. **重启 profile**（新增插件的发现需要重启），打开任意会话，输入 `@` 即可看到 filesystem 分组。\n\n### 源码构建（开发 / 离线）\n\n```sh\npnpm install\npnpm run typecheck\npnpm test\npnpm run build\nnpm pack          # 生成 dsh-mixxed-dsh-client-ui-filesystem-<version>.tgz\ndsh plugin --profile web add ./dsh-mixxed-dsh-client-ui-filesystem-<version>.tgz\n```\n\n## 功能特性\n\n- **`@` 触发检索**：与 ui-skill 的 `/` 技能检索同一管线（`ui-input-trigger`），与 ui-subagent 的 `@` 提及并存（菜单中两个分组）。\n- **前缀匹配**：检索只匹配**文件/目录名（basename）前缀**，不匹配路径前缀——`@index` 命中 `src/index.ts` 与 `test/index.ts`，`@src/` 无结果（路径式查询不是本插件语义）。\n- **提示项 UI**：每个候选前显文件/目录名，后显相对路径（如 `index.ts  src/index.ts`）。\n- **引用**：选中后把 `@` token 替换为 `@相对路径 ` 字面量，发送时 prompt 原样携带，模型可用自身 fs 工具读取。\n- **按会话缓存**：每个会话只向 host 请求一次项目树，击键过滤在本地进行；`connection/reset` 后自动重建。\n- **有界遍历**：跳过 `node_modules` / `.git` / 隐藏项（可配置），默认最深 6 层、最多 2000 条；符号链接不列出。\n- **失败自动重试**：树请求失败（如实例刚重启、host 会话尚未就绪）会自动重试一次，菜单保持「正在加载…」状态，不会瞬间消失。\n\n## 使用提示（已知限制，harness 行为）\n\n- **`@` 的触发位置**：`@` 必须位于行首、空白或标点之后。中文汉字后直接跟 `@` 不会触发（如「请查看@index」无效；「请查看，@index」有效）——触发检测把汉字视为单词字符，该规则在 harness 的 `ui-input-trigger` 中，本插件按约定不改 harness。行内引用建议在 `@` 前加空格或标点。\n- **加载中状态**：项目树首次加载期间，菜单立即弹出并显示「正在加载…」文字行（菜单组件的既有行为，无动画；动画需改 harness 菜单组件，本插件不改）。\n- **无 chip 装饰**：`@路径` 在草稿中不渲染为 chip（装饰扫描只支持单词字符名，见 DESIGN.md §7.1）。\n- **菜单无分组标题**：harness 菜单会为每个源渲染一行原始名标题（`slash.menu` 字典由 harness 独占）；`@` 菜单只有本插件一个分组，插件注入一条 CSS 规则隐藏该标题行。\n- 已知限制详情：`DESIGN.md` §7。\n\n## 验证\n\n```sh\ndsh --profile <name> --dump-config | Select-String ui-filesystem\n```\n\n组合后的配置包含 `ui-filesystem` 行，且 `$DSH_HOME/profiles/<name>/package.json` 的 `dsh.profile.bundles` 中列出了 `@dsh-mixxed/dsh-client-ui-filesystem`（由 `dsh plugin add` 自动追加）。\n\n重启后：`@` 弹出 filesystem 分组（前名后路径）→ basename 前缀过滤 → 选中插入 `@路径 ` → 发送后模型可读该文件。\n\n## 配置（可选）\n\n在 profile 自己的 `cordis.patch.yml` 中调整遍历边界——用户层在 bundle 层之后应用，按 id 定位的补丁会覆盖 bundle 挂载行：\n\n```yaml\n- id: ui-filesystem\n  name: \"@dsh-mixxed/dsh-client-ui-filesystem\"\n  config:\n    maxDepth: 6          # 最大路径深度（默认 6）\n    maxEntries: 2000     # 总条目上限（默认 2000）\n    skipHidden: true     # 跳过点开头条目（默认 true）\n    skipPatterns:        # 按 basename 精确跳过的目录/文件（默认 node_modules、.git）\n      - node_modules\n      - .git\n```\n\n## 许可证\n\n[Apache-2.0](LICENSE)\n","readmeFilename":"README.zh.md"}