🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

精简文件工具 marya505/dsh-fs-compact

DeepSeek Harness
marya5058 天前有提交已提供中文文档扫描:未发现敏感能力

用紧凑纯文本读写搜索文件,节省对话 token

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/24 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add marya505/dsh-fs-compact
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · dev
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 8 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
dsh-fs-compact 给 DeepSeek Harness(DSH)用的省 token 文件系统工具:fs_read、fs_grep、fs_glob 和 fs_replace。输出是紧凑的纯文本,路径相对于会话 cwd,并带「先读后替换」保护。 非官方社区插件,与 DeepSeek 无隶属关系,也未获其背书。 工具 | 工具 | 用途 | | fs_read | 按 UTF-8 文本读取,输出带行号,默认 800 行,用 offset 续读;超过 8 MB 的文件走流式读取 | | fs_grep | 正则搜索(纯 JavaScript,无原生二进制);mode = files / content / count | | fs_glob | 支持 、、?、[a-z]、{a,b} 通配;返回相对 cwd 的路径 | | fs_replace | 全局正则替换,分两阶段校验,dryRun 可预览 | 设计取舍: - 输出纯文本,不带 JSON 外壳,也没有记账字段; - 路径每组只打印一次,相对会话 cwd; - 工具 schema 保持紧凑,让提示词更小; - 目标文件没先读过(或只读了一部分)时,fs_replace 会给出警告; - 不遍历 .git、node_modules、dist、target。 安装 要求 DSH >=0.2.1-rc.3。
展开完整文档(README 剩余 1 节)
dsh-fs-compact

给 DeepSeek Harness(DSH)用的省 token 文件系统工具:fs_read、fs_grep、fs_glob 和 fs_replace。输出是紧凑的纯文本,路径相对于会话 cwd,并带「先读后替换」保护。

非官方社区插件,与 DeepSeek 无隶属关系,也未获其背书。

工具

| 工具 | 用途 |
| fs_read | 按 UTF-8 文本读取,输出带行号,默认 800 行,用 offset 续读;超过 8 MB 的文件走流式读取 |
| fs_grep | 正则搜索(纯 JavaScript,无原生二进制);mode = files / content / count |
| fs_glob | 支持 、、?、[a-z]、{a,b} 通配;返回相对 cwd 的路径 |
| fs_replace | 全局正则替换,分两阶段校验,dryRun 可预览 |

设计取舍:

- 输出纯文本,不带 JSON 外壳,也没有记账字段;
- 路径每组只打印一次,相对会话 cwd;
- 工具 schema 保持紧凑,让提示词更小;
- 目标文件没先读过(或只读了一部分)时,fs_replace 会给出警告;
- 不遍历 .git、node_modules、dist、target。

安装

要求 DSH >=0.2.1-rc.3。

From GitHub — dsh plugin forwards its arguments to pnpm
dsh plugin --profile <profile> add "github:marya505/dsh-fs-compact"

Local development checkout
dsh plugin --profile <profile> add "file:<path-to-checkout>"

<profile> 是你用的 DSH 配置档,比如 desktop。如果 dsh 不在 PATH 里,就从 DSH 安装目录运行命令行,例如 <DSH install>/resources/runtime/cli/bin/dsh(Windows 上是 .cmd)。

更新。 pnpm 对 file: 依赖用硬链接,所以只跑 add 不会刷新已安装的本地检出:

dsh plugin --profile <profile> remove dsh-fs-compact
dsh plugin --profile <profile> add "file:<path-to-checkout>"

安装或更新后重启 DSH 桌面应用。

启用 / 禁用

以配置档 bundle 的形式启用。想关掉又不想卸载,就往 ~/.dsh/profiles/<profile>/cordis.patch.yml 里加:

- id: dsh-fs-compact
disabled: true

如果另一个已安装插件也提供文件工具,就禁用其中一套,免得模型拿到重叠的工具。

卸载

dsh plugin --profile <profile> remove dsh-fs-compact

然后重启 DSH。只想禁用不想卸载,用上面的 disabled: true 条目。

兼容性

- DSH >=0.2.1-rc.3(在 0.2.1-rc.3 上测试过)。
- 开发和测试需要 Node.js 20+。
- 纯 JavaScript;无原生二进制,无运行时依赖。

安全模型

- fs_read、fs_grep 和 fs_glob 只读。插件不发网络请求,也不启动进程。
- fs_replace 遵循调用时解析出的宿主沙箱策略:
- read-only 拒绝写入;
- workspace-write 只允许写工作区内和操作系统临时目录;
- danger-full-access 允许任意可写路径;
- 其他模式一律拒绝(失败即关闭)。
- 目录扫描跳过 .git、node_modules 和构建产物,跳过符号链接,并在 50,000 个文件 / 256 MB 处停止。
- fs_replace 在写入任何内容之前先校验每个目标(匹配数、文件大小、输出大小和策略);超限调用不会改动任何内容。

漏洞上报见 SECURITY.md。

语义

通配符。 模式匹配的是相对于所搜索 path 的路径。
不含 / 的模式也会匹配基名,所以 .js 保持递归,而 src/.js 是一层路径过滤。include、exclude 和 replace 的 glob 都用同一套实现。

替换字符串。 fs_replace 使用 String.replace,因此 $1(捕获组)、$&(整个匹配)、$<name>(命名组)和 $$(字面 $)都可用。想写字面美元符号时写 $$。

限制与失败行为。 fs_replace 先规划每个文件——统计匹配数、检查 maxReplacements、文件大小和沙箱策略——然后才写入。超限调用不改动任何内容,并会说明。单个写入失败会报告为 skipped,而不是中止整批(已写入的文件不会回滚)。

扫描。 扫描在 50,000 个文件或 256 MB 处停止,并会说明。符号链接跳过。输出上限为 24,000 字符;fs_grep 会报告因过大 / 不可读 / 二进制而跳过的文件。

为什么它是 bundle,而不是普通依赖

DSH 的插件列表只显示 配置档层:即 package.json 中带有 dsh.bundle.patch 的包。普通依赖只要有人插入仍会加载,但市场 UI 从不列出它(命令行甚至会警告 declares no dsh.bundle — installed as a plain dependency, not a profile layer)。

因此本包附带:

- package.json → dsh.bundle.patch: ./cordis.patch.yml
- cordis.patch.yml → 挂载插件的 insert 条目

执行 dsh plugin add 时,DSH 的 reconcile 步骤会应用该补丁,并把 dsh-fs-compact 追加到 dsh.profile.bundles,正是这一步让它作为已安装插件可见。

注册陷阱

ctx.tools.register() 要求 output: { schema, render }。省略
output.schema 会抛出 TypeError: tool "x" must declare output { schema, render },而如果这个抛出发生在 ctx.effect(...) 内部,它会被吞掉——提示词段落仍然出现,于是插件看起来*已安装,而它的工具一个都不存在。schema 必须与 execute 返回的值一致;本插件返回 { text: string }。

工具只在 ctx.inject(['tools']) 下注册。沙箱策略在调用时解析,所以缺少 sandboxPolicy 服务不会让工具悄悄消失。

开发

git clone https://github.com/marya505/dsh-fs-compact.git
cd dsh-fs-compact
node --test

测试套件针对 os.tmpdir() 夹具运行,覆盖读取分页/流式传输, grep 模式与上下文合并、glob 语义、替换原子性、策略 fail-closed 行为、错误码映射,以及注册入口。

License

MIT © 2026 marya505
预览分享卡片长什么样 ↓marya505/dsh-fs-compact
分享 · DeepSeek Harness Hub
marya505/dsh-fs-compact

用紧凑纯文本读写搜索文件,节省对话 token

回到顶部