feat(subagent): sibling delegations are concurrency-safe

One assistant message carrying several subagent calls now overlaps them
under the rolling pool (maxParallelToolCalls) instead of serializing each
foreground delegation behind an exclusive barrier; results still commit
in model order.

tool-subagent declares isConcurrencySafe: () => true for every call form:
children work in their own sessions, a run never mutates the parent
session, and sibling workspace coordination already belongs to the model
for background, continuable, and workflow children. The former
serial-execution pin flips to a parallel pin plus a gated genuine-overlap
test, and the authored subagent-parallel snapshot pins the assembled
transcript (tool/call, tool/call, tool/result, tool/result) with
interchangeable twin children, which replay race-free under the existing
first-call binding and createdAt harvest ordering.

The provider seam now requires concurrent starts and continuable
preparations for distinct children to isolate operation-local state,
cancellation, settlement, and cleanup; a continuable gate test proves a
cancelled preparation leaves no Agent or durable Session while its
sibling persists independently.

Closes deepseek-harness/deepseek-harness#1489
This commit is contained in:
Hypatia May
2026-08-11 11:54:21 +08:00
parent 6d3cabf295
commit a26d03960a
25 changed files with 325 additions and 25 deletions
+6
View File
@@ -346,6 +346,12 @@ const SCENARIOS: Scenario[] = [
// parent's tool result must retain that assistant output and stop reason.
{ name: 'subagent-max-tokens-partial', hasModelTurn: true, recorded: false },
{ name: 'subagent-multi', hasModelTurn: true, recorded: true },
// Authored keyless replay: one assistant message carries two subagent calls
// and the parent log pins call/call/result/result instead of the serial
// interleaving. The twin delegations must stay identical: replay binds child
// scripts and harvest order nondeterministically across concurrent children
// (XXX(concurrent-subagents) in dsh-llm-replay).
{ name: 'subagent-parallel', hasModelTurn: true, recorded: false },
{ name: 'subagent-fork', hasModelTurn: true, recorded: true },
{ name: 'subagent-mixed', hasModelTurn: true, recorded: true },
// Authored continuable-subagent transcript: a background delegation returns