@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.
Files changed (2) hide show
  1. package/dist/legion.js +29 -7
  2. 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 recovered = await postOnce(WORKER_SESSION_PATH, {
30677
- sessionId: capability.sessionId,
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
- return createLegionDaemonClient(requiredEnvironment(process.env, "LEGION_DAEMON_URL"), fetch, {
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 {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sjawhar/pi-legion-envoy",
3
- "version": "1.24.0",
3
+ "version": "1.24.1",
4
4
  "type": "module",
5
5
  "omp": {
6
6
  "extensions": [