(part: unknown)
| 162 | } |
| 163 | |
| 164 | function parseToolCall(part: unknown): ParsedToolCall | null { |
| 165 | if (!isObject(part)) { |
| 166 | return null; |
| 167 | } |
| 168 | const record = part as Record<string, unknown>; |
| 169 | const name = getString(record.tool) || getString(record.name); |
| 170 | const callId = getString(record.callID) |
| 171 | || getString(record.callId) |
| 172 | || getString(record.id) |
| 173 | || getString(record.tool_call_id) |
| 174 | || getString(record.toolCallId); |
| 175 | if (!name || !callId) { |
| 176 | return null; |
| 177 | } |
| 178 | if (getString(record.type) === 'tool' && isObject(record.state)) { |
| 179 | const state = record.state as Record<string, unknown>; |
| 180 | const status = getString(state.status); |
| 181 | if (status !== 'pending' && status !== 'running') { |
| 182 | return null; |
| 183 | } |
| 184 | const input = parseMaybeJson(state.input ?? state.raw ?? record.input ?? record.args ?? record.arguments); |
| 185 | return { callId, name, input }; |
| 186 | } |
| 187 | const input = parseMaybeJson(record.input ?? record.args ?? record.arguments ?? record.raw); |
| 188 | return { callId, name, input }; |
| 189 | } |
| 190 | |
| 191 | function parseToolResult(part: unknown): ParsedToolResult | null { |
| 192 | if (!isObject(part)) { |
no test coverage detected