@@ -174,15 +174,17 @@ private func logToolCall(_ name: String, _ arguments: Any) {
174174}
175175
176176/// Log tool result for debugging and track usage
177+ /// Note: This function is async to ensure tool tracking completes before streaming finishes
177178@inline ( __always)
178- private func logToolResult( _ name: String , arguments: String , _ result: String ) {
179+ private func logToolResult( _ name: String , arguments: String , _ result: String ) async {
179180 #if DEBUG
180181 let truncated = result. count > 200 ? String ( result. prefix ( 200 ) ) + " ... " : result
181182 toolLogger. debug ( " Tool ' \( name) ' returned: \( truncated) " )
182183 #endif
183184
184185 // Track tool usage for context stats (on MainActor)
185- Task { @MainActor in
186+ // Must await to ensure tracking completes before consumeExecutions() is called
187+ await MainActor . run {
186188 NativeToolUsageTracker . shared. recordToolCall ( name: name, arguments: arguments, result: result)
187189 }
188190}
@@ -239,7 +241,7 @@ struct AppleWeatherTool: Tool {
239241 let result = await safeToolExecution ( name) {
240242 return try await tool. execute ( arguments: jsonString)
241243 }
242- logToolResult ( name, arguments: jsonString, result)
244+ await logToolResult ( name, arguments: jsonString, result)
243245 return result
244246 }
245247}
@@ -279,7 +281,7 @@ struct AppleCalculatorTool: Tool {
279281 let result = await safeToolExecution ( name) {
280282 return try await tool. execute ( arguments: jsonString)
281283 }
282- logToolResult ( name, arguments: jsonString, result)
284+ await logToolResult ( name, arguments: jsonString, result)
283285 return result
284286 }
285287}
@@ -356,7 +358,7 @@ struct AppleCalendarTool: Tool {
356358 let result = await safeToolExecution ( name) {
357359 return try await tool. execute ( arguments: jsonString)
358360 }
359- logToolResult ( name, arguments: jsonString, result)
361+ await logToolResult ( name, arguments: jsonString, result)
360362 return result
361363 }
362364}
@@ -413,7 +415,7 @@ struct AppleContactsTool: Tool {
413415 let result = await safeToolExecution ( name) {
414416 return try await tool. execute ( arguments: jsonString)
415417 }
416- logToolResult ( name, arguments: jsonString, result)
418+ await logToolResult ( name, arguments: jsonString, result)
417419 return result
418420 }
419421}
@@ -486,7 +488,7 @@ struct AppleRemindersTool: Tool {
486488 let result = await safeToolExecution ( name) {
487489 return try await tool. execute ( arguments: jsonString)
488490 }
489- logToolResult ( name, arguments: jsonString, result)
491+ await logToolResult ( name, arguments: jsonString, result)
490492 return result
491493 }
492494}
@@ -526,7 +528,7 @@ struct AppleLocationTool: Tool {
526528 let result = await safeToolExecution ( name) {
527529 return try await tool. execute ( arguments: jsonString)
528530 }
529- logToolResult ( name, arguments: jsonString, result)
531+ await logToolResult ( name, arguments: jsonString, result)
530532 return result
531533 }
532534}
@@ -578,7 +580,7 @@ struct AppleWebFetchTool: Tool {
578580 let result = await safeToolExecution ( name) {
579581 return try await tool. execute ( arguments: jsonString)
580582 }
581- logToolResult ( name, arguments: jsonString, result)
583+ await logToolResult ( name, arguments: jsonString, result)
582584 return result
583585 }
584586}
@@ -618,7 +620,7 @@ struct AppleRememberTool: Tool {
618620 let result = await safeToolExecution ( name) {
619621 return try await tool. execute ( arguments: jsonString)
620622 }
621- logToolResult ( name, arguments: jsonString, result)
623+ await logToolResult ( name, arguments: jsonString, result)
622624 return result
623625 }
624626}
@@ -685,7 +687,7 @@ struct AppleImageAnalysisTool: Tool {
685687 let result = await safeToolExecution ( name) {
686688 return try await tool. execute ( arguments: jsonString)
687689 }
688- logToolResult ( name, arguments: jsonString, result)
690+ await logToolResult ( name, arguments: jsonString, result)
689691 return result
690692 }
691693}
0 commit comments