(base: ExploreEntry[], next: ExploreEntry[])
| 290 | } |
| 291 | |
| 292 | function mergeExploreEntries(base: ExploreEntry[], next: ExploreEntry[]) { |
| 293 | const merged = [...base, ...next]; |
| 294 | const seen = new Set<string>(); |
| 295 | const deduped: ExploreEntry[] = []; |
| 296 | for (const entry of merged) { |
| 297 | const key = `${entry.kind}|${entry.label}|${entry.detail ?? ""}`; |
| 298 | if (seen.has(key)) { |
| 299 | continue; |
| 300 | } |
| 301 | seen.add(key); |
| 302 | deduped.push(entry); |
| 303 | } |
| 304 | return deduped; |
| 305 | } |
| 306 | |
| 307 | function summarizeCommandExecution(item: Extract<ConversationItem, { kind: "tool" }>) { |
| 308 | if (isFailedStatus(item.status)) { |
no outgoing calls
no test coverage detected