({
taskId,
executionMode,
agent,
workflowAbortController,
toolUseContext,
canUseTool,
parentMessage,
rootSetAppState,
}: {
taskId: string
executionMode: WorkflowExecutionMode
agent: ResolvedWorkflowAgent
workflowAbortController: AbortController
toolUseContext: ToolUseContext
canUseTool: Parameters<ToolDef<InputSchema, Output>['call']>[2]
parentMessage: Parameters<ToolDef<InputSchema, Output>['call']>[3]
rootSetAppState: (f: (prev: AppState) => AppState) => void
})
| 213 | } |
| 214 | |
| 215 | async function runWorkflowAgentTask({ |
| 216 | taskId, |
| 217 | executionMode, |
| 218 | agent, |
| 219 | workflowAbortController, |
| 220 | toolUseContext, |
| 221 | canUseTool, |
| 222 | parentMessage, |
| 223 | rootSetAppState, |
| 224 | }: { |
| 225 | taskId: string |
| 226 | executionMode: WorkflowExecutionMode |
| 227 | agent: ResolvedWorkflowAgent |
| 228 | workflowAbortController: AbortController |
| 229 | toolUseContext: ToolUseContext |
| 230 | canUseTool: Parameters<ToolDef<InputSchema, Output>['call']>[2] |
| 231 | parentMessage: Parameters<ToolDef<InputSchema, Output>['call']>[3] |
| 232 | rootSetAppState: (f: (prev: AppState) => AppState) => void |
| 233 | }): Promise<'completed' | 'failed' | 'killed'> { |
| 234 | if (workflowAbortController.signal.aborted) { |
| 235 | stopWorkflowAgent(taskId, agent.id, rootSetAppState, 'Workflow stopped') |
| 236 | return 'killed' |
| 237 | } |
| 238 | |
| 239 | const agentAbortController = createChildAbortController( |
| 240 | workflowAbortController, |
| 241 | ) |
| 242 | setWorkflowAgentController(taskId, agent.id, agentAbortController, rootSetAppState) |
| 243 | startWorkflowAgent(taskId, agent.id, rootSetAppState) |
| 244 | appendWorkflowLog( |
| 245 | taskId, |
| 246 | `Started ${agent.name} (${agent.agentType}) in ${executionMode} mode.`, |
| 247 | ) |
| 248 | |
| 249 | const workflowGetAppState = () => |
| 250 | getWorkflowAppState(toolUseContext.getAppState()) |
| 251 | const workflowToolUseContext = { |
| 252 | ...toolUseContext, |
| 253 | getAppState: workflowGetAppState, |
| 254 | } |
| 255 | const workflowAppState = workflowGetAppState() |
| 256 | const workerPermissionContext = { |
| 257 | ...workflowAppState.toolPermissionContext, |
| 258 | mode: |
| 259 | agent.selectedAgent.permissionMode ?? |
| 260 | workflowAppState.toolPermissionContext.mode, |
| 261 | } |
| 262 | const workerTools = assembleToolPool( |
| 263 | workerPermissionContext, |
| 264 | workflowAppState.mcp.tools, |
| 265 | ) |
| 266 | const tracker = createProgressTracker() |
| 267 | const resolveActivity = createActivityDescriptionResolver(workerTools) |
| 268 | const agentMessages: Parameters<typeof finalizeAgentTool>[0] = [] |
| 269 | const resolvedModel = getAgentModel( |
| 270 | agent.selectedAgent.model, |
| 271 | toolUseContext.options.mainLoopModel, |
| 272 | agent.model, |
no test coverage detected