description: "The standalone str_replace_editor tool over ctx.fs for users and maintainers composing Claude-Code-style file editing for agents."
English | 中文
dsh-tool-str-replace-editor provides a standalone model-facing str_replace_editor tool over ctx.fs: view shows numbered file content or a shallow directory listing, create makes a new file, str_replace applies a unique literal replacement, and insert adds lines at a chosen boundary. It is composable with persistent Bash, one-shot Bash, sandboxed Bash, or another terminal surface. Mutations obey the same read-before-edit policy and sandbox fence as the rest of the fs family, enforced by whichever backend and policy plugins are mounted. Choose it when a deployment wants the Claude-Code-style single editor tool with absolute paths; the dsh-tool-fs package provides the alternative read/write/edit suite.
Mount the tool alongside a ctx.fs backend (and, for guarded mutations, the policy plugin) when the model should edit files through the familiar view/create/str_replace/insert command vocabulary on absolute paths.
A backend, optionally the policy plugin, then the tool; the editor composes with any terminal surface.
- name: '@deepseek-ai/dsh-fs-local'
- name: '@deepseek-ai/dsh-fs-observation-policy'
- name: '@deepseek-ai/dsh-tool-str-replace-editor'
| Key | Default | Meaning |
|---|---|---|
maxOutputChars |
16000 |
Prefix characters retained for file and directory views |
description |
Custom editing tool for viewing, creating and editing files (multi-line) |
Model-facing tool description |
view returns one-based numbered file content (tabs preserved, so displayed text stays valid literal replacement input) or a two-level directory listing that omits hidden, dependency, and Python-cache entries. create makes a new file and refuses to overwrite an existing one. Command-specific fields may contain null placeholders when the selected command does not use them; required fields stay required, view_range: null selects the full view, and str_replace.new_str: null is rejected so deletion requires omission. str_replace requires one unique literal match, with errors reported in the public old_str vocabulary; insert follows the selected zero-based insertion boundary without adding an implicit trailing newline. Mutations preserve tabs outside the requested edit.
A metadata miss from view, str_replace, or insert records confirmed absence before returning FS_NOT_FOUND, so a later create can recover an externally deleted path through the mounted policy's guarded-create flow; absence never authorizes str_replace or insert. Guarded mutations inherit the policy plugin's codes and remedies — FS_NOT_OBSERVED (read the file, then retry), FS_STALE_VERSION (re-read, then retry) — and sandbox denials surface as the [sandbox: file access denied under <mode> mode] marker. Paths must be absolute; a relative path is refused with a hint.
Read these pages when the package-level contract is not enough. They move from the tool to the contract, policy, and backends it composes with.
ctx.fs contract this tool consumes.read/write/edit tool suite.fs/* events.The generated str_replace_editor schema, including the configured description. The plugin contributes no standalone system-prompt section.
Fixed schema cost while str_replace_editor is visible.
Prefix-stable while the configured description and schema remain unchanged.
Views return numbered text or a shallow directory listing. Calls expose file locations, and create/replace calls expose diff cards to presentation surfaces. Mutations return concise confirmations. Long views keep their prefix and append a clipping notice.
Data-dependent and bounded by maxOutputChars plus the fixed clipping notice.
Append-only tool results follow the reusable request prefix.
These limits define when the editor tool is a poor fit or needs special operational care. They are current package constraints, not a general editor comparison or a task backlog.
str_replace intentionally rejects zero or multiple matches — it has no replace_all argument.fs/write-intent or fs/edit-intent resolves the current session sandbox policy and delegates enforcement to the mounted filesystem and policy plugins, so a deployment without them gets unconditional mutations.Runtime invariant: No companion is published. The tool adapter owns no independent durable state; filesystem mutation relations stay with the provider and policy plugins.