@sjawhar/pi-legion-envoy 1.24.0 → 1.24.1
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.
- package/dist/legion.js +29 -7
- package/package.json +1 -1
package/dist/legion.js
CHANGED
|
@@ -30665,6 +30665,30 @@ function createLegionDaemonClient(baseUrl, fetchFn = fetch, recovery) {
|
|
|
30665
30665
|
throw new LegionDaemonApiError("POST", path, response.status, responseBody);
|
|
30666
30666
|
return schema.parse(JSON.parse(responseBody));
|
|
30667
30667
|
};
|
|
30668
|
+
const recoveries = new Map;
|
|
30669
|
+
const secretAfterRefusal = async (active, sessionId, refusedSecret) => {
|
|
30670
|
+
let record = recoveries.get(sessionId);
|
|
30671
|
+
if (record === undefined) {
|
|
30672
|
+
record = {};
|
|
30673
|
+
recoveries.set(sessionId, record);
|
|
30674
|
+
}
|
|
30675
|
+
if (record.latestSecret !== undefined && record.latestSecret !== refusedSecret) {
|
|
30676
|
+
return record.latestSecret;
|
|
30677
|
+
}
|
|
30678
|
+
if (record.inFlight === undefined) {
|
|
30679
|
+
const current = record;
|
|
30680
|
+
const inFlight = postOnce(WORKER_SESSION_PATH, { sessionId, recoveryToken: active.recoveryToken(sessionId) }, LegionDaemonApi.WorkerSession.response).then((recovered) => {
|
|
30681
|
+
active.onRecovered?.(sessionId, recovered);
|
|
30682
|
+
current.latestSecret = recovered.secret;
|
|
30683
|
+
return recovered;
|
|
30684
|
+
}).finally(() => {
|
|
30685
|
+
if (current.inFlight === inFlight)
|
|
30686
|
+
current.inFlight = undefined;
|
|
30687
|
+
});
|
|
30688
|
+
record.inFlight = inFlight;
|
|
30689
|
+
}
|
|
30690
|
+
return (await record.inFlight).secret;
|
|
30691
|
+
};
|
|
30668
30692
|
const post = async (path, body, schema) => {
|
|
30669
30693
|
try {
|
|
30670
30694
|
return await postOnce(path, body, schema);
|
|
@@ -30673,12 +30697,8 @@ function createLegionDaemonClient(baseUrl, fetchFn = fetch, recovery) {
|
|
|
30673
30697
|
if (path === WORKER_SESSION_PATH || recovery === undefined || capability === undefined || !isInvalidSessionSecret(error)) {
|
|
30674
30698
|
throw error;
|
|
30675
30699
|
}
|
|
30676
|
-
const
|
|
30677
|
-
|
|
30678
|
-
recoveryToken: recovery.recoveryToken(capability.sessionId)
|
|
30679
|
-
}, LegionDaemonApi.WorkerSession.response);
|
|
30680
|
-
recovery.onRecovered?.(capability.sessionId, recovered);
|
|
30681
|
-
return await postOnce(path, { ...body, secret: recovered.secret }, schema);
|
|
30700
|
+
const secret = await secretAfterRefusal(recovery, capability.sessionId, capability.secret);
|
|
30701
|
+
return await postOnce(path, { ...body, secret }, schema);
|
|
30682
30702
|
}
|
|
30683
30703
|
};
|
|
30684
30704
|
const get = async (path, schema) => {
|
|
@@ -34845,8 +34865,9 @@ function legionExtension(pi) {
|
|
|
34845
34865
|
return subagentSession;
|
|
34846
34866
|
};
|
|
34847
34867
|
let phaseWorkerPane;
|
|
34868
|
+
let daemonClient;
|
|
34848
34869
|
const roleDaemon = () => {
|
|
34849
|
-
|
|
34870
|
+
daemonClient ??= createLegionDaemonClient(requiredEnvironment(process.env, "LEGION_DAEMON_URL"), fetch, {
|
|
34850
34871
|
recoveryToken: (sessionId) => {
|
|
34851
34872
|
if (capability !== undefined && sessionId === capability.sessionID) {
|
|
34852
34873
|
return requiredSecret(process.env, "LEGION_BOOT_TOKEN");
|
|
@@ -34863,6 +34884,7 @@ function legionExtension(pi) {
|
|
|
34863
34884
|
capability = { ...capability, secret: recovered.secret };
|
|
34864
34885
|
}
|
|
34865
34886
|
});
|
|
34887
|
+
return daemonClient;
|
|
34866
34888
|
};
|
|
34867
34889
|
const rerunReadyAfterRegain = async (endpoint, role, reason, call) => {
|
|
34868
34890
|
try {
|