(
spanId: string,
metadata?: {
success?: boolean
error?: string
resultTokens?: number
},
)
| 725 | * End a tool execution span |
| 726 | */ |
| 727 | export function endToolPerfettoSpan( |
| 728 | spanId: string, |
| 729 | metadata?: { |
| 730 | success?: boolean |
| 731 | error?: string |
| 732 | resultTokens?: number |
| 733 | }, |
| 734 | ): void { |
| 735 | if (!isEnabled || !spanId) return |
| 736 | |
| 737 | const pending = pendingSpans.get(spanId) |
| 738 | if (!pending) return |
| 739 | |
| 740 | const endTime = getTimestamp() |
| 741 | const duration = endTime - pending.startTime |
| 742 | |
| 743 | const args = { |
| 744 | ...pending.args, |
| 745 | success: metadata?.success ?? true, |
| 746 | error: metadata?.error, |
| 747 | result_tokens: metadata?.resultTokens, |
| 748 | duration_ms: duration / 1000, |
| 749 | } |
| 750 | |
| 751 | // Emit end event |
| 752 | events.push({ |
| 753 | name: pending.name, |
| 754 | cat: pending.category, |
| 755 | ph: 'E', |
| 756 | ts: endTime, |
| 757 | pid: pending.agentInfo.processId, |
| 758 | tid: pending.agentInfo.threadId, |
| 759 | args, |
| 760 | }) |
| 761 | |
| 762 | pendingSpans.delete(spanId) |
| 763 | } |
| 764 | |
| 765 | /** |
| 766 | * Start a user input waiting span |
no test coverage detected