Back to home@kezan31

dsh-copy-tool

Enhanced line-selection copy tool for DeepSeek Harness

Stars
0
Language
JavaScript
Created
Aug 26, 2026
Updated
Sep 9, 2026
GitHub repo

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 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)

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