Files
deepseek-harness/packages/subagent/subagent-spawn
Tianyi Cui 3529b3c166 fix(scope): close final ownership races
Drain idle injection flushes before agent teardown, snapshot approval and subagent provider inputs, and gate subagent lifecycle events on real child readiness. Align the RFCs and generated contracts with the hardened behavior.
2026-07-12 00:31:46 +08:00
..

@deepseek-ai/dsh-subagent-spawn

The in-process spawn subagent backend: a SubagentProvider that runs each child as a fresh child Agent on the same cordis context (ctx.agents) — its own session, its own (or the parent's) model, zero inherited conversation. The cheapest transport, reusing the agent factory's quiescent AgentHandle teardown.

The run mechanics live in the shared @deepseek-ai/dsh-subagent-inprocess driver (startInProcessRun); this backend just passes no seed (a fresh child). The fork backend is an independent peer over the same driver — neither knows about the other.

What it does

start(request) delegates to startInProcessRun(ctx, request, {}) with no seed: a fresh child agent with the parent's cwd/parentSession lineage and (by default) the parent's model. The driver creates one run-owner fiber under parent.ctx; parent teardown, this provider's teardown, and manual disposal all converge there before child publication. Its run.started boundary resolves only after the fresh child is published, so subagent/start observers see a live registry entry. See the driver README for the full lifecycle (depth check, one-shot drive, result read, dispose).

Capabilities

{ outputSchema: true, depthLimit: true, toolFilter: true, persona: true }. It constructs the child, so it enforces a recursion cap and composes the child's persona, global-tool restriction, and structured runtime inside the agent-creation setup window. At apply it registers this one named provider on ctx.subagents; per-run contributions belong to each child's scope.

Config

Key Meaning
providerName Registry name on ctx.subagents (default spawn).