One editor family in general-purpose presets
通用 preset 只提供一套编辑工具
The `standard`, `code`, and `cordis` presets exposed both the `read`/`write`/`edit` filesystem tools and `str_replace_editor`. The two interfaces overlap for ordinary file inspection and editing, so every request carried an additional tool schema without adding a distinct default capability. The `minimal` preset has a different composition contract: its exact two-tool roster intentionally includes `str_replace_editor
English
Problem
The standard, code, and cordis presets exposed both the read/write/edit filesystem tools and str_replace_editor. The two interfaces overlap for ordinary file inspection and editing, so every request carried an additional tool schema without adding a distinct default capability. The minimal preset has a different composition contract: its exact two-tool roster intentionally includes str_replace_editor beside persistent bash.
Decision
The standard, code, and cordis preset configurations mount dsh-tool-fs and dsh-tool-fs-search, but do not mount dsh-tool-str-replace-editor. Code Mode therefore omits str_replace_editor from both its registry and generated SDK. The minimal preset continues to mount dsh-tool-str-replace-editor, and deployments or user-authored presets may still mount the plugin explicitly.
This decision narrows the preset roster rather than removing the tool package or its Python runtime support. The earlier shared-roster decision continues to own why surface-neutral tools live in preset composition; this note owns the editor exception.
Alternatives considered
Keep both editing interfaces in the general-purpose presets. Rejected because the overlapping model-visible schemas increase tool choice without supplying a separate default operation.
Remove str_replace_editor from every shipped composition. Rejected because the minimal preset intentionally exposes that schema as one of its two tools, and explicit deployments remain valid consumers of the standalone plugin.
Consequences
General-purpose agents use read, write, and edit for filesystem mutations, while the minimal agent retains str_replace_editor. Preset composition tests pin its absence from the standard roster, the Cordis roster, and the Code Mode SDK, while the minimal assertions continue to pin its presence.
中文
问题
standard、code 和 cordis preset 同时提供 read/write/edit 文件系统工具与 str_replace_editor。两套接口在常规文件查看和编辑上重叠,导致每次请求都携带额外的工具 schema,却没有增加独立的默认能力。minimal preset 具有不同的组合约定:它固定的双工具清单有意在持久 bash 之外提供 str_replace_editor。
决策
standard、code 和 cordis preset 配置挂载 dsh-tool-fs 与 dsh-tool-fs-search,但不挂载 dsh-tool-str-replace-editor。因此 Code Mode 的注册表和生成的 SDK 均不包含 str_replace_editor。minimal preset 继续挂载 dsh-tool-str-replace-editor,部署配置或用户自定义 preset 仍可显式挂载该插件。
此决策收窄 preset 工具清单,不移除工具包及其 Python 运行时支持。较早的共享清单决策继续说明与 surface 无关的工具为何归 preset 组合所有;本记录说明编辑器例外。
曾考虑的替代方案
在通用 preset 中保留两套编辑接口。 不予采用,因为重叠的模型可见 schema 增加了工具选择,却没有提供不同的默认操作。
从所有交付组合中移除 str_replace_editor。 不予采用,因为 minimal preset 有意将该 schema 作为两个工具之一,显式部署仍是该独立插件的有效消费方。
后果
通用 agent 使用 read、write 和 edit 完成文件系统修改,minimal agent 保留 str_replace_editor。preset 组合测试固定其不会出现在 standard 清单、Cordis 清单及 Code Mode SDK 中,同时 minimal 断言继续固定其存在。