@sjawhar/pi-legion 9.6.1 → 9.7.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 +46 -12
  2. package/package.json +2 -2
package/dist/legion.js CHANGED
@@ -15729,7 +15729,7 @@ function onEnvoyRoleRegained(listener) {
15729
15729
  // package.json
15730
15730
  var package_default = {
15731
15731
  name: "@sjawhar/pi-legion",
15732
- version: "9.6.1",
15732
+ version: "9.7.1",
15733
15733
  license: "Apache-2.0",
15734
15734
  type: "module",
15735
15735
  omp: {
@@ -15741,7 +15741,7 @@ var package_default = {
15741
15741
  ]
15742
15742
  },
15743
15743
  legion: {
15744
- daemonApiVersion: 23
15744
+ daemonApiVersion: 24
15745
15745
  },
15746
15746
  repository: {
15747
15747
  type: "git",
@@ -15889,7 +15889,8 @@ var legionClaimView = exports_external.strictObject({
15889
15889
  session: exports_external.string(),
15890
15890
  state: exports_external.enum(LEGION_CLAIM_STATES),
15891
15891
  locator: legionLocator.optional(),
15892
- capabilities: legionCapabilityReportView.optional()
15892
+ capabilities: legionCapabilityReportView.optional(),
15893
+ pluginContract: exports_external.number().int().nonnegative()
15893
15894
  });
15894
15895
  var legionPhaseView = exports_external.strictObject({
15895
15896
  claim: legionClaimView,
@@ -15954,7 +15955,8 @@ var legionControllerLocator = exports_external.strictObject({
15954
15955
  runtime: exports_external.enum(["tmux", "kubernetes"]),
15955
15956
  external: exports_external.literal(true),
15956
15957
  sessionId: nonEmptyString,
15957
- registeredAt: timestamp
15958
+ registeredAt: timestamp,
15959
+ pluginContract: exports_external.number().int().nonnegative()
15958
15960
  });
15959
15961
  var legionAgentSecretsLoginView = exports_external.strictObject({
15960
15962
  state: exports_external.string()
@@ -16045,7 +16047,8 @@ var LegionOperatorClaimResponse = exports_external.strictObject({
16045
16047
  uncertainStreak: exports_external.number().int().nonnegative(),
16046
16048
  pending: legionDeliveryView.optional(),
16047
16049
  suspendedBy: exports_external.enum(["unknown", "operator", "daemon", "exit"]).optional(),
16048
- suspensionHeld: exports_external.literal(true).optional()
16050
+ suspensionHeld: exports_external.literal(true).optional(),
16051
+ pluginContract: exports_external.number().int().nonnegative()
16049
16052
  });
16050
16053
  var LegionOperatorClaimsResponse = exports_external.strictObject({
16051
16054
  claims: exports_external.array(LegionOperatorClaimResponse)
@@ -16221,11 +16224,10 @@ function createLegionDaemonClient(baseUrl, fetchFn = fetch) {
16221
16224
  }
16222
16225
 
16223
16226
  // src/jj-attribution.ts
16224
- import { execFile as execFile2 } from "child_process";
16225
16227
  import { mkdir, rename, writeFile } from "fs/promises";
16226
16228
  import path4 from "path";
16227
- import { promisify as promisify2 } from "util";
16228
16229
  var UUID = "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}";
16230
+ var JJ_CONFIG_PATH_TIMEOUT_MS = 1e4;
16229
16231
  var TOP_LEVEL_TRANSCRIPT = new RegExp(`^\\d{4}-\\d{2}-\\d{2}T[\\d-]+Z_(${UUID})\\.jsonl$`);
16230
16232
  var ATTRIBUTION_OVERLAY = /^omp-attribution-.*\.toml$/;
16231
16233
  function sessionIdFromTranscript(sessionFile) {
@@ -16234,9 +16236,41 @@ function sessionIdFromTranscript(sessionFile) {
16234
16236
  function withoutOverlays(chain) {
16235
16237
  return chain.split(":").filter((entry) => entry && !ATTRIBUTION_OVERLAY.test(path4.basename(entry))).join(":");
16236
16238
  }
16237
- async function userConfigChain() {
16239
+ async function userConfigChain(timeoutMs = JJ_CONFIG_PATH_TIMEOUT_MS, env = process.env) {
16238
16240
  try {
16239
- const { stdout } = await promisify2(execFile2)("jj", ["config", "path", "--user"]);
16241
+ const child = Bun.spawn(["jj", "config", "path", "--user"], {
16242
+ detached: true,
16243
+ env,
16244
+ stdin: "ignore",
16245
+ stdout: "pipe",
16246
+ stderr: "pipe"
16247
+ });
16248
+ const killGroup = () => {
16249
+ try {
16250
+ process.kill(-child.pid, "SIGKILL");
16251
+ } catch {}
16252
+ };
16253
+ const exited = child.exited.finally(killGroup);
16254
+ const completed = Promise.all([
16255
+ exited,
16256
+ new Response(child.stdout).text(),
16257
+ new Response(child.stderr).text()
16258
+ ]);
16259
+ const stdout = await new Promise((resolve) => {
16260
+ const timer = setTimeout(() => {
16261
+ killGroup();
16262
+ resolve(undefined);
16263
+ }, timeoutMs);
16264
+ completed.then(([code, output]) => {
16265
+ clearTimeout(timer);
16266
+ resolve(code === 0 ? output : undefined);
16267
+ }, () => {
16268
+ clearTimeout(timer);
16269
+ resolve(undefined);
16270
+ });
16271
+ });
16272
+ if (stdout === undefined)
16273
+ return;
16240
16274
  const paths = stdout.split(`
16241
16275
  `).filter(Boolean);
16242
16276
  return paths.length > 0 ? paths.join(":") : undefined;
@@ -16479,15 +16513,15 @@ function createControllerSession(deps) {
16479
16513
  }
16480
16514
 
16481
16515
  // src/handoff-commit.ts
16482
- import { execFile as execFile3 } from "child_process";
16483
- import { promisify as promisify3 } from "util";
16516
+ import { execFile as execFile2 } from "child_process";
16517
+ import { promisify as promisify2 } from "util";
16484
16518
  var FILE_BACKED = {
16485
16519
  planning: { word: "plan", role: "planner" },
16486
16520
  implementing: { word: "implement", role: "implementer" },
16487
16521
  testing: { word: "test", role: "tester" },
16488
16522
  reviewing: { word: "review", role: "reviewer" }
16489
16523
  };
16490
- var execFileAsync2 = promisify3(execFile3);
16524
+ var execFileAsync2 = promisify2(execFile2);
16491
16525
  var pathJj = async (args, cwd) => {
16492
16526
  try {
16493
16527
  const { stdout } = await execFileAsync2("jj", ["-R", cwd, ...args], {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sjawhar/pi-legion",
3
- "version": "9.6.1",
3
+ "version": "9.7.1",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "omp": {
@@ -12,7 +12,7 @@
12
12
  ]
13
13
  },
14
14
  "legion": {
15
- "daemonApiVersion": 23
15
+ "daemonApiVersion": 24
16
16
  },
17
17
  "repository": {
18
18
  "type": "git",