fix: avoid quadratic cliproxy usage hydration (#1537)

Replaces O(n^2) usage hydration in the cliproxy merge path with a linear lookup.
This commit is contained in:
Kai (Tam Nhu) Tran authored and GitHub committed 2026-06-15 22:48:11 -04:00
1 parent 21e2dc1c24
commit f74561fe9b
1 file changed
+8 -4
@@ -275,15 +275,19 @@ function hydrateProviderlessHistoryDetails(
existing: CliproxyUsageHistoryDetail[], existing: CliproxyUsageHistoryDetail[],
incoming: CliproxyUsageHistoryDetail[] incoming: CliproxyUsageHistoryDetail[]
): CliproxyUsageHistoryDetail[] { ): CliproxyUsageHistoryDetail[] {
if (!existing.some((detail) => !detail.provider)) return existing;
const incomingByProviderlessSignature = new Map<string, CliproxyUsageHistoryDetail[]>(); const incomingByProviderlessSignature = new Map<string, CliproxyUsageHistoryDetail[]>();
for (const detail of incoming) { for (const detail of incoming) {
if (!detail.provider) continue; if (!detail.provider) continue;
const signature = createProviderlessHistorySignature(detail); const signature = createProviderlessHistorySignature(detail);
incomingByProviderlessSignature.set(signature, [ const matches = incomingByProviderlessSignature.get(signature);
...(incomingByProviderlessSignature.get(signature) ?? []), if (matches) {
detail, matches.push(detail);
]); } else {
incomingByProviderlessSignature.set(signature, [detail]);
}
} }
return existing.map((detail) => { return existing.map((detail) => {