fix(pi): single-flight managed extension materialization
This commit is contained in:
@@ -139,6 +139,7 @@ export class PiManagedExtensionHost {
|
||||
private readonly registrations = new Map<string, WorkerRegistrationRecord>();
|
||||
private readonly runBindings = new Map<string, string>();
|
||||
private readonly requestFlights = new Set<Promise<void>>();
|
||||
private readonly extensionMaterializations = new Map<string, Promise<string>>();
|
||||
private subagentBridge: PiExtensionSubagentBridge | undefined;
|
||||
private productTools: PiProductTools | undefined;
|
||||
private server: Server | null = null;
|
||||
@@ -183,7 +184,15 @@ export class PiManagedExtensionHost {
|
||||
}
|
||||
const bridgeUrl = await this.start();
|
||||
await mkdir(input.extensionsDir, { recursive: true });
|
||||
const extensionPath = await materializeMakelorePiExtension(input.extensionsDir);
|
||||
let materialization = this.extensionMaterializations.get(input.extensionsDir);
|
||||
if (!materialization) {
|
||||
materialization = materializeMakelorePiExtension(input.extensionsDir).catch((error) => {
|
||||
this.extensionMaterializations.delete(input.extensionsDir);
|
||||
throw error;
|
||||
});
|
||||
this.extensionMaterializations.set(input.extensionsDir, materialization);
|
||||
}
|
||||
const extensionPath = await materialization;
|
||||
const role = input.role ?? 'parent';
|
||||
if (role === 'child' && !input.runId?.trim()) {
|
||||
throw new Error('Child extension registration requires a parent run id');
|
||||
|
||||
Reference in New Issue
Block a user