Bundle
dsh-copy-tool
Enhanced line-selection copy tool for DeepSeek Harness.
- Source
- kezan31
- License
- MIT
- Updated
- Updated 3 hours ago
Readme
# dsh-copy-tool
[中文说明](README.zh.md)
An enhanced line-selection copy plugin for [DeepSeek Harness](https://github.com/deepseek-ai/dsh).
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 both `lines` and `target_lines`
- Strip common source indentation and add an explicit four-space `indent` level
- 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)
```powershell
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
```powershell
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:
```json
{
"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:
```json
{
"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
Install
dsh plugin --profile web add github:kezan31/dsh-copy-tool
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-copy-tool from the hub
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.