DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins

@playform/plugin-dsh-batch-edit

Plugin Dsh Batch Edit

The batch edit tool: a DeepSeek Harness plugin that turns files into PROCESSES held in state. One tool (batch_edit) opens a machine, inserts files into it, and runs the transition table (replace / insert-after / insert-before / remove-line / append / prep

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add @playform/plugin-dsh-batch-edit@0.2.1
READMECompatibilityVersions

Compatibility and provenance

Plugin Dsh Batch Edit is published as @playform/plugin-dsh-batch-edit and currently resolves to version 0.2.1. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
any
Release source
npm
Registry updated
11/4/2026

Versions

0.2.1stable
10/28/2026
0.2.0stable
10/25/2026
0.1.0stable
10/25/2026

Related plugins

Loading related plugins…

Latest
0.2.1
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
70.4 kB
Files
36
Surface
any
License
CC0-1.0
Source
npm
GitHub
★ 2
Weekly downloads
217
Security scan
✓ v0.2.1 scan passed
Last push
11/4/2026
View source ↗Project homepage ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in developer-tools.

Web App@deepseek-ai/dsh-web-appThe dsh browser-surface bundle: the web patch layer over dsh-base plus the runtime glue plugin (frontend dist serving, web-surface prompt, bash runtime variables, URL line)Sdk Minimal@deepseek-ai/dsh-sdk-minimalThe standalone minimal SDK profile bundle: JSON-RPC, one DeepSeek adapter, persistent shell, and JSONL sessionsSdk App@deepseek-ai/dsh-sdk-appThe dsh SDK profile bundle: stdio JSON-RPC serving and process lifecycle over dsh-baseExperimental Inspector@deepseek-ai/dsh-experimental-inspectorExperimental cross-realm CDP hub for Host debugging and Client Runtime inspection

README

@playform/plugin-dsh-batch-edit

v0.2.1 - UNPUBLISHED - plan: BATCH-EDIT-TOOL-FEATURE

The role

The batch edit engine serves the DeepSeek Harness plugin family (the Classic release).

It provides one tool, batch_edit, that turns files into processes held in state: you open a machine, insert files into it, and the files process like a state machine in one go.

Each file on the system is a process the harness holds (Process<File>), not inert bytes, which is the reversed view of the default UNIX file.

The philosophy and the research live in Documentation/Plans/BATCH-EDIT-TOOL-FEATURE.md and its granular subdocuments under Documentation/Plans/Batch-Edit-Tool/.

The surfaces

One tool, batch_edit, offers six actions: open, insert, remove, commit, state, and close.

There is no service and no event listener, because the writes go through the factory's write executor and the bash observer is the advisory interceptBash tag.

The machine (one tool, six actions)

ActionEffect
openDeclare the scope, insert files (paths or globs) as observed processes with their held version; the prepared schema (searches + ops) is validated fail-loud; misses are listed, never guessed
insertAdd files to an open machine mid-life (the lease stays)
removeDrop files from an open machine
commitRun the transition table in one go, through the factory's write executor - behind the D6 policy gate (see below)
stateRe-present the current state of every held file
closeClose the machine (in-flight processes settle first - nothing silently dropped)

The Process<File> states

observed -> running    (commit/insert/monitor dispatch)
running   -> done      (Factory.Write outcome + the fresh version)
running   -> errored   (outcome.error / intent denial)
running   -> halted    (deadline / stale version / machine pause)
halted    -> running   (agent resumes: action=commit on the same machine)
done      -> observed  (re-inserted for a next batch)
errored   -> observed  (agent corrects the op)
any       -> halted    (machine close with in-flight work: settle-first)

A held file touched externally between insert and commit halts with the stale reason, the machine stays open, and you resume it explicitly.

The transition table (one line per op)

file=<selector> search=<name> op=<MODE> [with=<TEXT>] [mode=first|all|<count>]

MODE is one of replace, insert-after, insert-before, remove-line, append, or prepend.

Searches are named at open: name=pattern (literal) or name=re:/pattern/flags (simple regex, the v1 scope).

Larger batches use the opfile escape hatch (a prepared file path, ingested line by line, with no schema limit).

The write path and the atomic gate

Every write goes through Factory.Write and nothing else: the explicit replaceIfVersion intent (the fresh-stat version guard), the govern actor marker so the event path skips the marked events, and the governed basenames (package.json, Cargo.toml) re-run through the factory's direct path exactly once per write.

The gate is all-or-nothing on the apply loop: a planning failure halts or errors that file alone, while a write failure stops the loop and returns the unwritten remainder to observed.

A commit exceeding the in-line deadline (capped at 120000, the composition contract) continues as one background job and returns the typed jobId, and the settle truth arrives through the jobs subscription and the next state presentation.

No plugin-owned timers exist anywhere.

The policy block (D6) - the apply gate

The config carries the shared per-action allowlist (policy: Policy(), composed from the factory's block), mapped to State.Allow:

actiondefaultactiondefault
readautowriteapprove
indexautocommitapprove
recordautospawnapprove
suggestautomessageauto

The commit action consults Decide(State.Allow, "write") before any plan or write.

The shipped default is write: approve, so an apply is refused with the byte-exact apply refused <id> (policy write=approve) line (in the ledger and as the thrown error): nothing is read or written, the machine stays open with its cells observed, and the batch waits for the user's approval through the existing approve binding (flip policy.write to auto, or approve the batch through the batch-decision hook).

With write: auto the commit proceeds exactly as described above.

The block is one volatile object (a policy flip is hot-editable), and a resolved pack's policy section overrides the defaults per action (the wiring is the next refinement).

The ledger (the contract, byte-stable)

machine opened <id> (<n> files, scope=<glob>)
inserted <file> at version <version>
transition running <file> op=<n>/<total>
transition applied <file> version <old> -> <new>
transition errored <file> <reason>
transition halted <file> <reason>
machine committed <id> (<applied> applied, <failed> failed, <halted> halted)
machine closed <id>
apply refused <id> (policy write=approve)

Plus the module-owned removed <file> line for the remove action.

The ledger file defaults to ~/.dsh/playform/plugin-dsh-batch-edit.log (one log per module).

The configuration

The plugin ships disabled (enabled: false, the IDLE-forever posture), and it enables only by an explicit ACTIVATE in the profile.

Every knob is volatile (hot-editable without remounting):

FieldDefaultMeaning
enabledfalseThe master switch
logtrueThe ledger switch (the factory's shared volatile cell)
logFile~/.dsh/playform/plugin-dsh-batch-edit.logThe module ledger
machinesPerAgent2Open machines per agent
opsPerCommit64Op lines per commit (overflow goes to opfile)
deadlineMs120000In-line commit deadline (1000..120000)
strictModefalseSearch-not-found errors vs skips
interceptBashfalseThe advisory bash intercept (v1: tags and records, never denies)
monitorChecksets[]Per-file check-set names (the live containers' vocabulary, labels in v1)
policy.*D6 defaultsThe per-action allowlist (the apply gate; see above)

The build and the tests

The build is pnpm prepublishOnly (Source/prepublishOnly.sh): the plugin build (ESM Target/, Test tree excluded), the Test build, the harness selfcheck, and the Test type-check.

The smoke folders are Commit-And-Ops, Machine-And-Contract, Observers-And-Waterfalls, and Policy-Defaults.

The plan

This is a Classic PoC (source complete; the smoke suite, the build pass, and the EffectTS twin are end-phase work, see Documentation/Plans/POC-BRIEF.md).

License

CC0-1.0.