deepseek-harness/packages/subprocess
Tianyi Cui a5446e3160 Merge master into fix/subprocess-password-scrub
# Conflicts:
#	packages/lsp/lsp-local/README.i18n.yaml
#	packages/subprocess/subprocess-local/README.i18n.yaml
#	packages/subprocess/subprocess-local/README.zh.md
2026-07-29 21:38:24 +08:00
..
subprocess Merge master into fix/subprocess-password-scrub 2026-07-29 21:38:24 +08:00
subprocess-local Merge master into fix/subprocess-password-scrub 2026-07-29 21:38:24 +08:00
README.i18n.yaml docs(i18n): record proofread README pairs 2026-07-29 15:30:44 +08:00
README.md refactor(subprocess): keep terminate() as the seam's only termination verb 2026-07-27 04:41:04 +08:00
README.zh.md docs(i18n): proofread README translations 141-160 2026-07-29 15:29:38 +08:00

subprocess/ — subprocess capability family

English | 中文

The shared home for spawning managed child-process trees: fully-specified spawn specs with Node-shaped per-stream stdio dispositions (raw pipes, inherit, bounded tail-keep collection with spill files), the one credential scrub every harness spawner uses, offset-based incremental reads, tree-scoped signalling with SIGTERM→grace→SIGKILL escalation, and the cooperative dispose ladder. Command defaulting, shell semantics, deadlines, protocol framing, and presentation stay with consumers — the bash executors, the LSP host, and the ACP subagent backend. See the subprocess seam Agent Note.

Package ctx key Role
subprocess (@deepseek-ai/dsh-subprocess) ctx.subprocess The seam: abstract SubprocessService.spawn(spec), the fully-explicit SubprocessSpawnSpec with per-stream stdio dispositions, SubprocessHandle (streams, offset-based readers, terminate/waitForExit/dispose), and the shared scrub + DSH_*/CollectedOutput vocabulary
subprocess-local (@deepseek-ai/dsh-subprocess-local) — The local implementation: detached process trees, per-disposition stream wiring, tail-keep truncation with bounded private spill files, the DSH_* merge order, tree signalling with escalation, the dispose ladder, and terminate-and-join disposal

The service owns process lifetime across consumer reloads; consumers own what a process means (a bash command, a future non-shell runner) and every default that shapes one.