@@ -811,6 +811,7 @@ export async function trackEnhancedMetrics(deps: Pick<UsageAnalysisDeps, 'warn'>
811811 // Track edit scope and apply usage
812812 if ( request . response && Array . isArray ( request . response ) ) {
813813 for ( const resp of request . response ) {
814+ if ( ! resp ) { continue ; }
814815 if ( resp . kind === 'textEditGroup' && resp . uri ) {
815816 const filePath = resp . uri . path || JSON . stringify ( resp . uri ) ;
816817 editedFiles . add ( filePath ) ;
@@ -866,6 +867,7 @@ export async function trackEnhancedMetrics(deps: Pick<UsageAnalysisDeps, 'warn'>
866867 // Track edit scope and apply usage
867868 if ( request . response && Array . isArray ( request . response ) ) {
868869 for ( const resp of request . response ) {
870+ if ( ! resp ) { continue ; }
869871 if ( resp . kind === 'textEditGroup' && resp . uri ) {
870872 const filePath = resp . uri . path || JSON . stringify ( resp . uri ) ;
871873 editedFiles . add ( filePath ) ;
@@ -1258,6 +1260,7 @@ export async function analyzeSessionUsage(deps: UsageAnalysisDeps, sessionFile:
12581260 // Extract tool calls and MCP tools from request.response array
12591261 if ( request . response && Array . isArray ( request . response ) ) {
12601262 for ( const responseItem of request . response ) {
1263+ if ( ! responseItem ) { continue ; }
12611264 if ( responseItem . kind === 'toolInvocationSerialized' || responseItem . kind === 'prepareToolInvocation' ) {
12621265 const toolName = responseItem . toolId || responseItem . toolName || responseItem . invocationMessage ?. toolName || responseItem . toolSpecificData ?. kind || 'unknown' ;
12631266
@@ -1365,6 +1368,7 @@ export async function analyzeSessionUsage(deps: UsageAnalysisDeps, sessionFile:
13651368 // Extract tool calls from request.response array (when full request is added)
13661369 if ( request . response && Array . isArray ( request . response ) ) {
13671370 for ( const responseItem of request . response ) {
1371+ if ( ! responseItem ) { continue ; }
13681372 if ( responseItem . kind === 'toolInvocationSerialized' || responseItem . kind === 'prepareToolInvocation' ) {
13691373 analysis . toolCalls . total ++ ;
13701374 const toolName = responseItem . toolId || responseItem . toolName || responseItem . invocationMessage ?. toolName || responseItem . toolSpecificData ?. kind || 'unknown' ;
@@ -1378,6 +1382,7 @@ export async function analyzeSessionUsage(deps: UsageAnalysisDeps, sessionFile:
13781382 // Handle VS Code incremental format - tool invocations in responses
13791383 if ( event . kind === 2 && event . k ?. includes ( 'response' ) && Array . isArray ( event . v ) ) {
13801384 for ( const responseItem of event . v ) {
1385+ if ( ! responseItem ) { continue ; }
13811386 if ( responseItem . kind === 'toolInvocationSerialized' ) {
13821387 analysis . toolCalls . total ++ ;
13831388 const toolName = responseItem . toolId || responseItem . toolName || responseItem . invocationMessage ?. toolName || responseItem . toolSpecificData ?. kind || 'unknown' ;
@@ -1485,6 +1490,7 @@ export async function analyzeSessionUsage(deps: UsageAnalysisDeps, sessionFile:
14851490 // Analyze response for tool calls and MCP tools
14861491 if ( request . response && Array . isArray ( request . response ) ) {
14871492 for ( const responseItem of request . response ) {
1493+ if ( ! responseItem ) { continue ; }
14881494 // Detect tool invocations
14891495 if ( responseItem . kind === 'toolInvocationSerialized' ||
14901496 responseItem . kind === 'prepareToolInvocation' ) {
@@ -1698,7 +1704,7 @@ export async function getModelUsageFromSession(deps: Pick<UsageAnalysisDeps, 'wa
16981704 }
16991705 if ( request . response && Array . isArray ( request . response ) ) {
17001706 for ( const responseItem of request . response ) {
1701- if ( responseItem . value ) {
1707+ if ( responseItem ? .value ) {
17021708 modelUsage [ requestModel ] . outputTokens += estimateTokensFromText ( responseItem . value , requestModel , deps . tokenEstimators ) ;
17031709 }
17041710 }
@@ -1766,7 +1772,7 @@ export async function getModelUsageFromSession(deps: Pick<UsageAnalysisDeps, 'wa
17661772 // Estimate tokens from assistant response (output)
17671773 if ( request . response && Array . isArray ( request . response ) ) {
17681774 for ( const responseItem of request . response ) {
1769- if ( responseItem . value ) {
1775+ if ( responseItem ? .value ) {
17701776 const tokens = estimateTokensFromText ( responseItem . value , model , deps . tokenEstimators ) ;
17711777 modelUsage [ model ] . outputTokens += tokens ;
17721778 }
0 commit comments