@sjawhar/pi-legion-envoy 1.34.0 → 1.35.0

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/envoy.js CHANGED
@@ -30348,7 +30348,7 @@ var LegionDaemonApi = {
30348
30348
  queue: array(nonEmptyString)
30349
30349
  }),
30350
30350
  gates: record(string2(), stateGate),
30351
- controllerLocator: stateLocator.optional(),
30351
+ controllerLocator: stateTreeLocator.optional(),
30352
30352
  roles: record(string2(), stateRole),
30353
30353
  controllerPendingNotices: number2().int().nonnegative(),
30354
30354
  pendingStatusWrites: array(nonEmptyString),
@@ -30356,7 +30356,11 @@ var LegionDaemonApi = {
30356
30356
  })
30357
30357
  },
30358
30358
  ControllerReady: {
30359
- request: strictObject({ secret: nonEmptyString, sessionId: nonEmptyString }),
30359
+ request: strictObject({
30360
+ secret: nonEmptyString,
30361
+ sessionId: nonEmptyString,
30362
+ ompSessionFile: nonEmptyString.optional()
30363
+ }),
30360
30364
  response: object({})
30361
30365
  },
30362
30366
  ProcessStarted: {
@@ -30476,17 +30480,23 @@ var LegionDaemonApi = {
30476
30480
  response: object({})
30477
30481
  },
30478
30482
  Grant: {
30479
- request: strictObject({
30480
- tree: nonEmptyString,
30481
- issue: nonEmptyString,
30482
- sessionId: nonEmptyString,
30483
- secret: nonEmptyString
30484
- }),
30483
+ request: union([
30484
+ strictObject({
30485
+ sessionId: nonEmptyString,
30486
+ secret: nonEmptyString,
30487
+ tree: nonEmptyString,
30488
+ issue: nonEmptyString
30489
+ }),
30490
+ strictObject({ sessionId: nonEmptyString, secret: nonEmptyString })
30491
+ ]),
30485
30492
  response: object({ grantId: nonEmptyString, expiresAt: nonEmptyString })
30486
30493
  },
30487
30494
  GitHubToken: {
30488
- request: strictObject({ grantId: nonEmptyString }),
30495
+ request: strictObject({ grantId: nonEmptyString, merge: literal(true).optional() }),
30489
30496
  response: object({ token: nonEmptyString, appLogin: string2().endsWith("[bot]") })
30497
+ },
30498
+ GitCredential: {
30499
+ request: strictObject({ grantId: nonEmptyString })
30490
30500
  }
30491
30501
  };
30492
30502
  // ../contracts/src/repo.ts
@@ -33253,6 +33263,31 @@ function messageMetadata(input) {
33253
33263
  import { logger } from "@oh-my-pi/pi-utils";
33254
33264
  var import_nats = __toESM(require_mod4(), 1);
33255
33265
 
33266
+ // src/legion/role-claim-bridge.ts
33267
+ var LEGION_ROLE_CLAIM_BRIDGE = Symbol.for("legion.pi-envoy.role-claim-bridge");
33268
+ function legionRoleClaimBridge() {
33269
+ const store = globalThis;
33270
+ const bridge = store[LEGION_ROLE_CLAIM_BRIDGE];
33271
+ if (bridge)
33272
+ return bridge;
33273
+ const createdBridge = {
33274
+ instances: [],
33275
+ regained: undefined
33276
+ };
33277
+ store[LEGION_ROLE_CLAIM_BRIDGE] = createdBridge;
33278
+ return createdBridge;
33279
+ }
33280
+ async function claimEnvoyRole(sessionID, role, context) {
33281
+ const bridge = legionRoleClaimBridge();
33282
+ const instance = bridge.instances.findLast((candidate) => candidate.sessionID() === sessionID) ?? bridge.instances.at(-1);
33283
+ if (instance === undefined)
33284
+ throw new Error("Envoy has no bound instance for a role claim");
33285
+ await instance.claim(sessionID, role, context);
33286
+ }
33287
+ function onEnvoyRoleRegained(listener) {
33288
+ legionRoleClaimBridge().regained = listener;
33289
+ }
33290
+
33256
33291
  // src/tool-result.ts
33257
33292
  function toolSuccess(text, details = {}) {
33258
33293
  return { content: [{ type: "text", text }], details };
@@ -33334,25 +33369,6 @@ function isRoleClaimEntry(entry) {
33334
33369
  return false;
33335
33370
  return entry.data.role === null || typeof entry.data.role === "string";
33336
33371
  }
33337
- var LEGION_ROLE_CLAIM_BRIDGE = Symbol.for("legion.pi-envoy.role-claim-bridge");
33338
- function legionRoleClaimBridge() {
33339
- const store = globalThis;
33340
- let bridge = store[LEGION_ROLE_CLAIM_BRIDGE];
33341
- if (bridge === undefined) {
33342
- const ready = Promise.withResolvers();
33343
- bridge = { ready };
33344
- store[LEGION_ROLE_CLAIM_BRIDGE] = bridge;
33345
- }
33346
- return bridge;
33347
- }
33348
- async function claimEnvoyRole(sessionID, role, context) {
33349
- const bridge = legionRoleClaimBridge();
33350
- const claim = bridge.claim ?? await bridge.ready.promise;
33351
- await claim(sessionID, role, context);
33352
- }
33353
- function onEnvoyRoleRegained(listener) {
33354
- legionRoleClaimBridge().regained = listener;
33355
- }
33356
33372
  function resolveSkillsDirectory() {
33357
33373
  const moduleDirectory = dirname(fileURLToPath(import.meta.url));
33358
33374
  const candidates = [
@@ -33788,8 +33804,11 @@ function envoyExtension(pi) {
33788
33804
  await registerSession();
33789
33805
  await setEnvoyRole(role);
33790
33806
  };
33791
- bridge.claim = claim;
33792
- bridge.ready.resolve(claim);
33807
+ const claimInstance = {
33808
+ claim,
33809
+ sessionID: () => activeSessionContext?.sessionManager.getSessionId() ?? sessionID
33810
+ };
33811
+ bridge.instances.push(claimInstance);
33793
33812
  pi.on("session_start", async (_event, context) => {
33794
33813
  const previousSessionID = sessionID;
33795
33814
  restoreLocalSessionState(context);
@@ -33858,6 +33877,9 @@ function envoyExtension(pi) {
33858
33877
  pi.on("session_tree", (_event, context) => rebind(undefined, context));
33859
33878
  pi.on("session_shutdown", async () => {
33860
33879
  shuttingDown = true;
33880
+ const bound = bridge.instances.indexOf(claimInstance);
33881
+ if (bound !== -1)
33882
+ bridge.instances.splice(bound, 1);
33861
33883
  const deadline = Promise.withResolvers();
33862
33884
  const timer = setTimeout(deadline.resolve, 1000);
33863
33885
  try {
@@ -34126,7 +34148,5 @@ function topicsFor(parameters, fallback = []) {
34126
34148
  return expandSubscriptionTopics(value);
34127
34149
  }
34128
34150
  export {
34129
- claimEnvoyRole,
34130
- envoyExtension as default,
34131
- onEnvoyRoleRegained
34151
+ envoyExtension as default
34132
34152
  };