fix: close Pi subagent review gaps
This commit is contained in:
@@ -116,6 +116,7 @@ export interface PiProcessLease {
|
||||
|
||||
interface PiProcessBudgetWaiter {
|
||||
signal?: AbortSignal;
|
||||
priority: 'normal' | 'child';
|
||||
resolve(lease: PiProcessLease): void;
|
||||
reject(error: Error): void;
|
||||
onAbort?: () => void;
|
||||
@@ -134,11 +135,19 @@ export class PiProcessBudget {
|
||||
get activeCount(): number { return this.active; }
|
||||
get waitingCount(): number { return this.waiters.length; }
|
||||
|
||||
acquire(signal?: AbortSignal): Promise<PiProcessLease> {
|
||||
acquire(
|
||||
signal?: AbortSignal,
|
||||
priority: 'normal' | 'child' = 'normal',
|
||||
): Promise<PiProcessLease> {
|
||||
if (signal?.aborted) return Promise.reject(new Error('Pi process budget acquisition cancelled'));
|
||||
if (this.active < this.maxProcesses) return Promise.resolve(this.issueLease());
|
||||
return new Promise<PiProcessLease>((resolve, reject) => {
|
||||
const waiter: PiProcessBudgetWaiter = { resolve, reject, ...(signal ? { signal } : {}) };
|
||||
const waiter: PiProcessBudgetWaiter = {
|
||||
resolve,
|
||||
reject,
|
||||
priority,
|
||||
...(signal ? { signal } : {}),
|
||||
};
|
||||
if (signal) {
|
||||
waiter.onAbort = () => {
|
||||
const index = this.waiters.indexOf(waiter);
|
||||
@@ -166,7 +175,9 @@ export class PiProcessBudget {
|
||||
|
||||
private advance(): void {
|
||||
while (this.active < this.maxProcesses && this.waiters.length > 0) {
|
||||
const waiter = this.waiters.shift() as PiProcessBudgetWaiter;
|
||||
const childIndex = this.waiters.findIndex(({ priority }) => priority === 'child');
|
||||
const [waiter] = this.waiters.splice(childIndex >= 0 ? childIndex : 0, 1);
|
||||
if (!waiter) return;
|
||||
if (waiter.onAbort && waiter.signal) {
|
||||
waiter.signal.removeEventListener('abort', waiter.onAbort);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user