@@ -20,10 +20,14 @@ import {
2020} from '../services/analytics/index.js'
2121import { accumulateUsage , updateUsage } from '../services/api/claude.js'
2222import { EMPTY_USAGE , type NonNullableUsage } from '@ant/model-provider'
23+ import type {
24+ BetaRawMessageDeltaEvent ,
25+ BetaRawMessageStreamEvent ,
26+ } from '@anthropic-ai/sdk/resources/beta/messages/messages.js'
2327import type { ToolUseContext } from '../Tool.js'
2428import type { AgentDefinition } from '@claude-code-best/builtin-tools/tools/AgentTool/loadAgentsDir.js'
2529import type { AgentId } from '../types/ids.js'
26- import type { Message } from '../types/message.js'
30+ import type { Message , StreamEvent } from '../types/message.js'
2731import { createChildAbortController } from './abortController.js'
2832import { logForDebugging } from './debug.js'
2933import { cloneFileStateCache } from './fileStateCache.js'
@@ -492,6 +496,24 @@ export function createSubagentContext(
492496 * })
493497 * ```
494498 */
499+
500+ type StreamEventMessage = StreamEvent & {
501+ type : 'stream_event'
502+ event : BetaRawMessageStreamEvent
503+ }
504+
505+ function isMessageDeltaStreamEvent (
506+ message : Message | StreamEvent ,
507+ ) : message is StreamEventMessage & { event : BetaRawMessageDeltaEvent } {
508+ return (
509+ message . type === 'stream_event' &&
510+ typeof ( message as StreamEventMessage ) . event === 'object' &&
511+ ( message as StreamEventMessage ) . event !== null &&
512+ 'type' in ( message as StreamEventMessage ) . event &&
513+ ( message as StreamEventMessage ) . event . type === 'message_delta'
514+ )
515+ }
516+
495517export async function runForkedAgent ( {
496518 promptMessages,
497519 cacheSafeParams,
@@ -562,15 +584,8 @@ export async function runForkedAgent({
562584 } ) ) {
563585 // Extract real usage from message_delta stream events (final usage per API call)
564586 if ( message . type === 'stream_event' ) {
565- if (
566- 'event' in message &&
567- ( message as any ) . event ?. type === 'message_delta' &&
568- ( message as any ) . event . usage
569- ) {
570- const turnUsage = updateUsage (
571- { ...EMPTY_USAGE } ,
572- ( message as any ) . event . usage ,
573- )
587+ if ( isMessageDeltaStreamEvent ( message ) ) {
588+ const turnUsage = updateUsage ( { ...EMPTY_USAGE } , message . event . usage )
574589 totalUsage = accumulateUsage ( totalUsage , turnUsage )
575590 }
576591 continue
0 commit comments