| 196 | } |
| 197 | |
| 198 | function compactToolState(part: ToolPart): ToolPart["state"] { |
| 199 | if (part.state.status === "pending") { |
| 200 | return { |
| 201 | status: "pending", |
| 202 | input: part.state.input, |
| 203 | raw: part.state.raw, |
| 204 | } |
| 205 | } |
| 206 | |
| 207 | if (part.state.status === "running") { |
| 208 | return { |
| 209 | status: "running", |
| 210 | input: part.state.input, |
| 211 | time: part.state.time, |
| 212 | ...(part.state.metadata ? { metadata: part.state.metadata } : {}), |
| 213 | ...(part.state.title ? { title: part.state.title } : {}), |
| 214 | } |
| 215 | } |
| 216 | |
| 217 | if (part.state.status === "completed") { |
| 218 | return { |
| 219 | status: "completed", |
| 220 | input: part.state.input, |
| 221 | output: part.state.output, |
| 222 | title: part.state.title, |
| 223 | metadata: part.state.metadata, |
| 224 | time: part.state.time, |
| 225 | } |
| 226 | } |
| 227 | |
| 228 | return { |
| 229 | status: "error", |
| 230 | input: part.state.input, |
| 231 | error: part.state.error, |
| 232 | time: part.state.time, |
| 233 | ...(part.state.metadata ? { metadata: part.state.metadata } : {}), |
| 234 | } |
| 235 | } |
| 236 | |
| 237 | function recent<T>(input: Iterable<T>, limit: number) { |
| 238 | const list = [...input] |