Edit subagents

This commit is contained in:
Siddharth Ganesan
2026-02-26 15:53:58 -08:00
parent cc5e592c46
commit 9cc46ffa43
6 changed files with 19 additions and 3 deletions

View File

@@ -329,6 +329,7 @@ export async function applySseEvent(
const startData = asRecord(data.data)
const toolCallId = startData.tool_call_id as string | undefined
if (toolCallId) {
context.subAgentParentStack.push(toolCallId)
context.subAgentParentToolCallId = toolCallId
const { toolCallsById } = get()
const parentToolCall = toolCallsById[toolCallId]
@@ -343,6 +344,7 @@ export async function applySseEvent(
logger.info('[SSE] Subagent session started', {
subagent: data.subagent,
parentToolCallId: toolCallId,
depth: context.subAgentParentStack.length,
})
}
return true
@@ -371,7 +373,11 @@ export async function applySseEvent(
})
}
}
context.subAgentParentToolCallId = undefined
context.subAgentParentStack.pop()
context.subAgentParentToolCallId =
context.subAgentParentStack.length > 0
? context.subAgentParentStack[context.subAgentParentStack.length - 1]
: undefined
return true
}

View File

@@ -36,6 +36,7 @@ export interface StreamingContext {
wasAborted?: boolean
suppressContinueOption?: boolean
subAgentParentToolCallId?: string
subAgentParentStack: string[]
subAgentContent: Record<string, string>
subAgentToolCalls: Record<string, CopilotToolCall[]>
subAgentBlocks: Record<string, SubAgentContentBlock[]>

View File

@@ -37,6 +37,7 @@ describe('sse-handlers tool lifecycle', () => {
currentThinkingBlock: null,
isInThinkingBlock: false,
subAgentParentToolCallId: undefined,
subAgentParentStack: [],
subAgentContent: {},
subAgentToolCalls: {},
pendingContent: '',

View File

@@ -45,6 +45,7 @@ export function createStreamingContext(overrides?: Partial<StreamingContext>): S
currentThinkingBlock: null,
isInThinkingBlock: false,
subAgentParentToolCallId: undefined,
subAgentParentStack: [],
subAgentContent: {},
subAgentToolCalls: {},
pendingContent: '',
@@ -125,11 +126,12 @@ export async function runStreamLoop(
continue
}
// Standard subagent start/end handling.
// Standard subagent start/end handling (stack-based for nested agents).
if (normalizedEvent.type === 'subagent_start') {
const eventData = normalizedEvent.data as Record<string, unknown> | undefined
const toolCallId = eventData?.tool_call_id as string | undefined
if (toolCallId) {
context.subAgentParentStack.push(toolCallId)
context.subAgentParentToolCallId = toolCallId
context.subAgentContent[toolCallId] = ''
context.subAgentToolCalls[toolCallId] = []
@@ -138,7 +140,11 @@ export async function runStreamLoop(
}
if (normalizedEvent.type === 'subagent_end') {
context.subAgentParentToolCallId = undefined
context.subAgentParentStack.pop()
context.subAgentParentToolCallId =
context.subAgentParentStack.length > 0
? context.subAgentParentStack[context.subAgentParentStack.length - 1]
: undefined
continue
}

View File

@@ -76,6 +76,7 @@ export interface StreamingContext {
currentThinkingBlock: ContentBlock | null
isInThinkingBlock: boolean
subAgentParentToolCallId?: string
subAgentParentStack: string[]
subAgentContent: Record<string, string>
subAgentToolCalls: Record<string, ToolCallState[]>
pendingContent: string

View File

@@ -233,6 +233,7 @@ function createClientStreamingContext(messageId: string): ClientStreamingContext
designWorkflowContent: '',
pendingContent: '',
doneEventCount: 0,
subAgentParentStack: [],
subAgentContent: {},
subAgentToolCalls: {},
subAgentBlocks: {},