Files
deepseek-harness/packages/subprocess/README.zh.md
Tianyi Cui f81fcccd93 refactor(subprocess): keep terminate() as the seam's only termination verb
Delete kill(signal?) from SubprocessHandle: consumers stop a process only
through terminate()'s tree-scoped SIGTERM→graceMs→SIGKILL escalation
(idempotent, also driven by the spec's abort signal, a no-op once the tree
is gone). The single-signal verb had exactly one consumer family —
lsp-local — and what it bought there was a private re-implementation of
the same escalation. The internal kill closure stays in spawn.ts as the
dispose ladder's tier primitive; terminate() now routes through it too.

lsp-local collapses onto the seam's escalation:
- LspConnection replaces its terminate()/kill() pair with one terminate()
  that delegates to handle.terminate(). Behavior change: the
  framing-failure path terminates instead of instant SIGKILL, so a
  misbehaving server now gets SIGTERM plus the killGraceMs window to
  flush before SIGKILL.
- ConnectionSpec.pipeDrainGraceMs becomes killGraceMs: one grace, the
  spawn spec's graceMs, drives both the escalation window and post-exit
  pipe draining (the provider already passed killGraceMs for it).
- LspInstance.forceTerminate() drops its hand-rolled bounded first wait
  (LSP_KILL_GRACE) and escalateProcessTree (deleted with its export and
  unit test): the seam's escalation already commits to SIGKILL after
  killGraceMs, so only the unbounded quiescence awaits stay load-bearing.

Tests: kill()-shaped spawn specs become terminate()-shaped or fold into
the terminate() suites (group-wide delivery; the settled no-op case was
already pinned by 'terminate() after the tree died'); tree-survivor
coverage is intact. A stderr-'inherit' disposition test completes the
stdout/stderr symmetry so the scoped subprocess+lsp coverage gate stands
alone instead of leaning on subagent-acp's cross-package runs.

Docs: SubprocessHandle type-equiv block, seam/impl/group READMEs, and the
consumer-migration Agent Note lose the kill(signal?) vocabulary (zh pairs
re-recorded); cordis api/services catalogs regenerated.
2026-07-27 04:41:04 +08:00

1.8 KiB
Raw Blame History

subprocess/:进程管理能力家族

English | 中文

spawn 受管子进程树的共用归属位置:完全显式的 spawn spec其 stdio 处置方式disposition为 Node 形状、按流划分原始管道、inherit、附带 spill 文件的有界尾部保留收集harness 中所有 spawn 调用方共用的那一份凭据清除;基于偏移量的增量读取;以进程树为范围、带 SIGTERM→宽限期→SIGKILL 升级的信号发送;以及协作式 dispose资源释放阶梯。命令默认值补全、shell 语义、deadline、协议分帧与呈现留在消费方bash 执行器LSP 主机ACPAgent Client Protocolsubagent 后端。参见进程管理器 seam Agent Noteagent 决策记录)

package ctx 键 角色
subprocess@deepseek-ai/dsh-subprocess ctx.subprocess seam 本体:抽象的 SubprocessService.spawn(spec)、完全显式且带按流划分 stdio 处置方式的 SubprocessSpawnSpecSubprocessHandle流、基于偏移量的读取器、terminate/waitForExit/dispose以及共享的凭据清除 + DSH_*/CollectedOutput 词汇
subprocess-local@deepseek-ai/dsh-subprocess-local 本地实现detached 进程树、按处置方式接线的流、附带有界私有 spill 文件的尾部保留截断、DSH_* 合并次序、带升级的进程树信号发送、dispose 阶梯,以及先终止再等待退出的 dispose

服务拥有跨消费方重载的进程存续期;消费方拥有一个进程的含义(一条 bash 命令、未来的非 shell 运行器)以及塑造它的每一项默认值。