perf(main): cache bootstrap transcript success checks

This commit is contained in:
777genius 2026-05-31 07:49:57 +03:00
parent 228ebd6454
commit fdc61d55cb

View file

@ -733,6 +733,7 @@ interface ParsedBootstrapTranscriptTailLine {
bootstrapFailureReason?: string | null; bootstrapFailureReason?: string | null;
bootstrapContextCandidateByTeam?: Map<string, boolean>; bootstrapContextCandidateByTeam?: Map<string, boolean>;
bootstrapContextMemberMatchByName?: Map<string, boolean>; bootstrapContextMemberMatchByName?: Map<string, boolean>;
bootstrapSuccessSourceByTeamMember?: Map<string, BootstrapTranscriptSuccessSource | null>;
} }
interface ParsedBootstrapTranscriptTailCacheEntry { interface ParsedBootstrapTranscriptTailCacheEntry {
@ -810,6 +811,30 @@ function getCachedBootstrapContextMemberMatchForLine(
return value; return value;
} }
function getCachedBootstrapSuccessSourceForLine(
line: ParsedBootstrapTranscriptTailLine,
normalizedText: string,
normalizedTeamName: string,
normalizedMemberName: string
): BootstrapTranscriptSuccessSource | null {
let sourceByTeamMember = line.bootstrapSuccessSourceByTeamMember;
if (!sourceByTeamMember) {
sourceByTeamMember = new Map<string, BootstrapTranscriptSuccessSource | null>();
line.bootstrapSuccessSourceByTeamMember = sourceByTeamMember;
}
const cacheKey = `${normalizedTeamName}\0${normalizedMemberName}`;
if (sourceByTeamMember.has(cacheKey)) {
return sourceByTeamMember.get(cacheKey) ?? null;
}
const source = getBootstrapTranscriptSuccessSourceFromNormalized(
normalizedText,
normalizedTeamName,
normalizedMemberName
);
sourceByTeamMember.set(cacheKey, source);
return source;
}
import type { import type {
ActiveToolCall, ActiveToolCall,
AgentActionMode, AgentActionMode,
@ -30646,7 +30671,8 @@ export class TeamProvisioningService {
outcome = { kind: 'failure', observedAt: candidate.observedAt, reason }; outcome = { kind: 'failure', observedAt: candidate.observedAt, reason };
break; break;
} }
const successSource = getBootstrapTranscriptSuccessSourceFromNormalized( const successSource = getCachedBootstrapSuccessSourceForLine(
cachedLine,
candidate.normalizedText, candidate.normalizedText,
normalizedTeamName, normalizedTeamName,
normalizedMemberName normalizedMemberName