dsh-copy-tool
Enhanced line-selection copy tool for DeepSeek Harness
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 26, 2026
- Updated
- Sep 9, 2026
Introduction
dsh-copy-tool
An enhanced line-selection copy plugin for DeepSeek Harness.
It addresses omissions and oversimplification when using the write tool to refactor large projects by speeding up refactoring calls, saving substantial tokens, and migrating modules while preserving their source-line content.
Features
- Copy individual 1-based lines or ranges to corresponding target lines
- Use arrays such as
[[633, 889]]or[633, [640, 645], 700]for bothlinesandtarget_lines - Strip common source indentation and add an explicit four-space
indentlevel - Preview a bounded unified diff with required
dry_run - Atomically create missing files with
writeText - Atomically edit existing files (including the source file) with
editText - Preserve untouched content and filesystem-native line endings
- Resolve paths relative to the current session workspace and respect its sandbox policy
Install
npm (recommended)
cd $env:USERPROFILE\.dsh\profiles\web
npm install dsh-copy-tool
Then add dsh-copy-tool to the dsh.profile.bundles array in package.json, and restart DSH Web.
dsh plugin command
dsh plugin --profile web add dsh-copy-tool
If the bundle list is not updated automatically, add dsh-copy-tool to dsh.profile.bundles in the profile's package.json manually, then restart DSH Web.
Usage
All parameters are required. Expanded lines and target_lines must select the same number of lines; each source line maps to the target line at the same position:
{
"source_file": "source.py",
"target_file": "module.py",
"lines": [[633, 644]],
"target_lines": [[1, 12]],
"indent": 0,
"dry_run": true
}
A line list can mix individual numbers and ranges:
{
"source_file": "source.py",
"target_file": "module.py",
"lines": [633, [640, 645], 700],
"target_lines": [1, [2, 7], 8],
"indent": 1,
"dry_run": false
}
Line numbers are 1-based. Source indentation common to all selected non-empty lines is removed, then indent * 4 spaces are added. Existing targets are edited in place while preserving untouched content; a missing target must use continuous target_lines beginning at 1 and is created as a new file. Use dry_run to inspect the diff before writing.
License
MIT