@agent-relay/factory 0.1.54 → 0.1.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/orchestrator/factory.ts"],"names":[],"mappings":"AAIA,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAK1E,OAAO,KAAK,EAMV,WAAW,EASX,WAAW,EAMZ,MAAM,UAAU,CAAA;AAkCjB,OAAO,KAAK,EACV,cAAc,EACd,OAAO,EACP,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,mBAAmB,EAEnB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EAGnB,QAAQ,EACR,eAAe,EACf,WAAW,EAGX,cAAc,EAEf,MAAM,UAAU,CAAA;AA4BjB,KAAK,YAAY,GAAG,cAAc,GAAG,YAAY,GAAG,YAAY,GAAG,oBAAoB,GAAG,OAAO,CAAA;AACjG,KAAK,QAAQ,GAAG,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/orchestrator/factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -6060,8 +6060,10 @@ export class FactoryLoop {
|
|
|
6060
6060
|
await this.#recordPendingBabysitterWake(state);
|
|
6061
6061
|
}
|
|
6062
6062
|
this.#babysitterWakeStates.set(babysitterWakeKey(record.issue, ref), state);
|
|
6063
|
-
if (state.kinds.size > 0
|
|
6063
|
+
if (state.kinds.size > 0 &&
|
|
6064
|
+
!await this.#suspendBabysitterWakeForHuman(state)) {
|
|
6064
6065
|
this.#scheduleBabysitterWake(state, BABYSITTER_EVENT_COALESCE_MS);
|
|
6066
|
+
}
|
|
6065
6067
|
}
|
|
6066
6068
|
await this.#persistBabysitterSession(record.issue, ref, tracked, ownershipKey);
|
|
6067
6069
|
}
|
|
@@ -8522,6 +8524,8 @@ export class FactoryLoop {
|
|
|
8522
8524
|
babysitter: ref.agentName,
|
|
8523
8525
|
kinds: [...state.kinds],
|
|
8524
8526
|
});
|
|
8527
|
+
if (await this.#suspendBabysitterWakeForHuman(state))
|
|
8528
|
+
return true;
|
|
8525
8529
|
if (state.deferredSubmitTargets || state.inFlight || this.#babysitterCriticalAgents.has(state.agentName)) {
|
|
8526
8530
|
this.#increment('babysitterEventWakesDeferred');
|
|
8527
8531
|
return true;
|
|
@@ -8567,8 +8571,44 @@ export class FactoryLoop {
|
|
|
8567
8571
|
...(ref.pendingDeliveryClaims?.length ? { pendingDeliveryClaims: structuredClone(ref.pendingDeliveryClaims) } : {}),
|
|
8568
8572
|
});
|
|
8569
8573
|
}
|
|
8574
|
+
async #suspendBabysitterWakeForHuman(state) {
|
|
8575
|
+
const key = issueKey(state.issue);
|
|
8576
|
+
const [lifecycle, clarification] = await Promise.all([
|
|
8577
|
+
this.#usesDurableDispatchLifecycle()
|
|
8578
|
+
? this.#state.getDispatchLifecycle(this.#workspaceId, key)
|
|
8579
|
+
: undefined,
|
|
8580
|
+
this.#state.getWaitingClarification(this.#workspaceId, key),
|
|
8581
|
+
]);
|
|
8582
|
+
// parkedAtMs is the durable release fence for local/non-lifecycle fleets.
|
|
8583
|
+
// Once a lifecycle exists it is authoritative, because clarification
|
|
8584
|
+
// resume promotes it before the saved agent sessions are restored.
|
|
8585
|
+
const waitingForHuman = lifecycle
|
|
8586
|
+
? lifecycle.phase === 'waiting-for-human'
|
|
8587
|
+
: clarification?.parkedAtMs !== undefined;
|
|
8588
|
+
if (!waitingForHuman) {
|
|
8589
|
+
state.suspendedForHuman = false;
|
|
8590
|
+
return false;
|
|
8591
|
+
}
|
|
8592
|
+
if (!state.suspendedForHuman) {
|
|
8593
|
+
state.suspendedForHuman = true;
|
|
8594
|
+
this.#increment('babysitterEventWakesDeferredWaitingForHuman');
|
|
8595
|
+
this.#logger.debug?.('[factory] suspended babysitter PR event wake while waiting for human clarification', {
|
|
8596
|
+
issue: state.issue.key,
|
|
8597
|
+
repo: state.repo,
|
|
8598
|
+
prNumber: state.prNumber,
|
|
8599
|
+
babysitter: state.agentName,
|
|
8600
|
+
kinds: [...state.kinds].sort(compareBabysitterWakeKinds),
|
|
8601
|
+
});
|
|
8602
|
+
}
|
|
8603
|
+
return true;
|
|
8604
|
+
}
|
|
8570
8605
|
#scheduleBabysitterWake(state, delayMs) {
|
|
8571
|
-
if (state.timer ||
|
|
8606
|
+
if (state.timer ||
|
|
8607
|
+
state.inFlight ||
|
|
8608
|
+
state.deferredSubmitTargets ||
|
|
8609
|
+
state.suspendedForHuman ||
|
|
8610
|
+
state.cancelled ||
|
|
8611
|
+
this.#stopping)
|
|
8572
8612
|
return;
|
|
8573
8613
|
state.timer = setTimeout(() => {
|
|
8574
8614
|
state.timer = undefined;
|
|
@@ -8578,7 +8618,10 @@ export class FactoryLoop {
|
|
|
8578
8618
|
state.inFlight = undefined;
|
|
8579
8619
|
if (this.#stopping)
|
|
8580
8620
|
return;
|
|
8581
|
-
if (state.kinds.size > 0 &&
|
|
8621
|
+
if (state.kinds.size > 0 &&
|
|
8622
|
+
!state.deferredSubmitTargets &&
|
|
8623
|
+
!state.suspendedForHuman &&
|
|
8624
|
+
!this.#babysitterCriticalAgents.has(state.agentName)) {
|
|
8582
8625
|
const delayMs = state.nextDelayMs ?? BABYSITTER_EVENT_COALESCE_MS;
|
|
8583
8626
|
state.nextDelayMs = undefined;
|
|
8584
8627
|
this.#scheduleBabysitterWake(state, delayMs);
|
|
@@ -8605,6 +8648,8 @@ export class FactoryLoop {
|
|
|
8605
8648
|
this.#increment('babysitterEventWakesCancelledNonOwner');
|
|
8606
8649
|
return;
|
|
8607
8650
|
}
|
|
8651
|
+
if (await this.#suspendBabysitterWakeForHuman(state))
|
|
8652
|
+
return;
|
|
8608
8653
|
if (this.#babysitterCriticalAgents.has(state.agentName)) {
|
|
8609
8654
|
this.#increment('babysitterEventWakesDeferredCritical');
|
|
8610
8655
|
return;
|
|
@@ -8785,6 +8830,8 @@ export class FactoryLoop {
|
|
|
8785
8830
|
for (const state of this.#babysitterWakeStates.values()) {
|
|
8786
8831
|
if (state.agentName !== agentName)
|
|
8787
8832
|
continue;
|
|
8833
|
+
if (await this.#suspendBabysitterWakeForHuman(state))
|
|
8834
|
+
continue;
|
|
8788
8835
|
if (state.deferredSubmitTargets) {
|
|
8789
8836
|
const targets = state.deferredSubmitTargets;
|
|
8790
8837
|
state.deferredSubmitTargets = undefined;
|
|
@@ -11171,8 +11218,10 @@ export class FactoryLoop {
|
|
|
11171
11218
|
batch.recordSpawn(record, tracked.spec, invocationId, result);
|
|
11172
11219
|
await this.#saveDispatchLifecycle(record, 'dispatching');
|
|
11173
11220
|
const live = record.agents.get(result.name);
|
|
11174
|
-
if (live)
|
|
11221
|
+
if (live) {
|
|
11175
11222
|
resumed.push([result.name, live]);
|
|
11223
|
+
await this.#retargetBabysitterAgent(record, parked.name, live);
|
|
11224
|
+
}
|
|
11176
11225
|
this.#assertClarificationWakeRunning();
|
|
11177
11226
|
await renewLease();
|
|
11178
11227
|
}
|