description: "基于 ctx.fs 的独立 str_replace_editor 工具:供为 agent(智能体)组合 Claude Code 风格文件编辑能力的用户与维护者使用。"
English | 中文
dsh-tool-str-replace-editor 提供基于 ctx.fs 的独立面向模型 str_replace_editor 工具:view 显示带行号的文件内容或浅层目录列表,create 创建新文件,str_replace 应用唯一的字面量替换,insert 在选定的边界处插入行。它可以与持久 Bash、一次性 Bash、沙箱 Bash 或其他终端接口组合。修改操作遵守与 fs 家族其余部分相同的编辑前读取策略与沙箱围栏,具体由所挂载的后端与策略插件强制执行。当部署需要 Claude Code 风格、使用绝对路径的单一编辑器工具时选择它;dsh-tool-fs 包提供替代的 read/write/edit 套件。
当模型应通过熟悉的 view/create/str_replace/insert 命令词汇在绝对路径上编辑文件时,把工具与 ctx.fs 后端(以及需要防护变更时的策略插件)一起挂载。
一个后端、可选地加策略插件,然后是工具;编辑器可与任何终端接口组合。
- name: '@deepseek-ai/dsh-fs-local'
- name: '@deepseek-ai/dsh-fs-observation-policy'
- name: '@deepseek-ai/dsh-tool-str-replace-editor'
| 键 | 默认值 | 含义 |
|---|---|---|
maxOutputChars |
16000 |
文件和目录查看结果保留的前缀字符数 |
description |
Custom editing tool for viewing, creating and editing files(多行) |
面向模型的工具描述 |
view 返回从 1 开始编号的文件内容(保留制表符,因此显示的文本仍可作为有效的字面量替换输入)或忽略隐藏、依赖与 Python 缓存条目的两层目录列表。create 创建新文件,并拒绝覆盖现有文件。选定命令不使用的专用字段可以包含 null 占位符;必填字段仍保持必填,view_range: null 选择完整视图,str_replace.new_str: null 会被拒绝,因此删除内容必须省略该字段。str_replace 要求字面量唯一匹配,错误只使用公开的 old_str 词汇;insert 遵循所选的零基插入边界,不会隐式补尾换行。修改操作会保留请求编辑范围之外的制表符。
view、str_replace 或 insert 发生元数据未命中时,工具会在返回 FS_NOT_FOUND 前记录确认缺失,因此后续 create 可以通过已挂载策略的防护创建流程恢复外部删除的路径;缺失状态绝不会授权 str_replace 或 insert。防护变更继承策略插件的错误码与恢复指令——FS_NOT_OBSERVED(先读取文件再重试)、FS_STALE_VERSION(先重新读取再重试)——沙箱拒绝则表现为 [sandbox: file access denied under <mode> mode] 标记。路径必须是绝对路径;相对路径会被拒绝并给出提示。
当包级约定不够用时阅读以下页面。它们从工具逐步进入它所组合的约定、策略与后端。
ctx.fs 约定。read/write/edit 工具套件。fs/* 事件防护变更的策略插件。生成的 str_replace_editor schema,包含配置的 description。本插件不贡献独立系统提示词段。
str_replace_editor 可见时产生固定的 schema 成本。
配置的描述与 schema 不变时前缀稳定。
查看操作返回带行号文本或浅层目录列表。调用会提供文件位置,创建/替换调用还会向展示层提供 diff 卡片。修改操作返回简洁确认。长查看结果保留前缀并追加截断提示。
随数据变化,并受 maxOutputChars 与固定截断提示约束。
工具结果以追加方式位于可复用请求前缀之后。
这些限制说明编辑器工具何时不合适,或何时需要特别的运维注意。它们是当前包约束,不是通用编辑器对比或任务积压。
str_replace 刻意拒绝零匹配或多匹配——它没有 replace_all 参数。fs/write-intent 或 fs/edit-intent 解析当前会话的沙箱策略,并把强制执行委托给已挂载的文件系统与策略插件,因此未挂载它们的部署会得到无条件变更。运行时不变式: 不发布伴生入口。工具适配器不持有独立持久状态;文件系统修改关系属于提供方与策略插件。