Skip to content
dsh.fish
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

  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source