/ utils / task / sdkProgress.ts
sdkProgress.ts
 1  import type { SdkWorkflowProgress } from '../../types/tools.js'
 2  import { enqueueSdkEvent } from '../sdkEventQueue.js'
 3  
 4  /**
 5   * Emit a `task_progress` SDK event. Shared by background agents (per tool_use
 6   * in runAsyncAgentLifecycle) and workflows (per flushProgress batch). Accepts
 7   * already-computed primitives so callers can derive them from their own state
 8   * shapes (ProgressTracker for agents, LocalWorkflowTaskState for workflows).
 9   */
10  export function emitTaskProgress(params: {
11    taskId: string
12    toolUseId: string | undefined
13    description: string
14    startTime: number
15    totalTokens: number
16    toolUses: number
17    lastToolName?: string
18    summary?: string
19    workflowProgress?: SdkWorkflowProgress[]
20  }): void {
21    enqueueSdkEvent({
22      type: 'system',
23      subtype: 'task_progress',
24      task_id: params.taskId,
25      tool_use_id: params.toolUseId,
26      description: params.description,
27      usage: {
28        total_tokens: params.totalTokens,
29        tool_uses: params.toolUses,
30        duration_ms: Date.now() - params.startTime,
31      },
32      last_tool_name: params.lastToolName,
33      summary: params.summary,
34      workflow_progress: params.workflowProgress,
35    })
36  }