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:
@@ -330,6 +330,9 @@ export function apply(ctx: Context, config: Config): void {
|
||||
: outputValueText(value.output),
|
||||
}],
|
||||
},
|
||||
// Children never mutate the parent session; the one parent-owned write
|
||||
// (tasks.start) is a synchronous commutative insertion.
|
||||
isConcurrencySafe: () => true,
|
||||
async execute(args, exec) {
|
||||
const parent = exec.agent
|
||||
if (!parent) {
|
||||
|
||||
Reference in New Issue
Block a user