@quantiya/codevibe-codex-plugin 2.0.118 → 2.0.119

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.
@@ -9363,20 +9363,102 @@ var import_node_crypto34, import_json_freeze14, init_class_b_verify = __esm({
9363
9363
  }
9364
9364
  });
9365
9365
 
9366
+ // src/substrate/process-group-run.ts
9367
+ function runInOwnProcessGroup(argv, opts) {
9368
+ return new Promise((resolve35, reject) => {
9369
+ let child = (0, import_node_child_process12.spawn)(SH, ["-c", GROUP_LEADER_SCRIPT, argv[0], ...argv.slice(1)], {
9370
+ stdio: ["pipe", "pipe", "pipe", "pipe", "pipe"],
9371
+ detached: !0,
9372
+ windowsHide: !0,
9373
+ env: opts.env
9374
+ }), status = child.stdio[3], release = child.stdio[4], stdoutChunks = [], stderrChunks = [];
9375
+ child.stdout?.on("data", (c) => stdoutChunks.push(c)), child.stderr?.on("data", (c) => stderrChunks.push(c));
9376
+ let reported = null, pending2 = "", releaseGroup = () => {
9377
+ try {
9378
+ release?.end();
9379
+ } catch {
9380
+ }
9381
+ };
9382
+ status?.on("data", (c) => {
9383
+ pending2 += c.toString();
9384
+ let at = pending2.indexOf(`
9385
+ `);
9386
+ if (at < 0) return;
9387
+ let code = Number(pending2.slice(0, at).trim());
9388
+ reported = Number.isInteger(code) ? code : null, releaseGroup();
9389
+ }), status?.on("error", () => {
9390
+ }), release?.on?.("error", () => {
9391
+ });
9392
+ let exited = !1, timedOut = !1, timer;
9393
+ if (opts.timeoutMs !== void 0 && (timer = setTimeout(() => {
9394
+ if (timedOut = !0, !exited && child.exitCode === null && child.signalCode === null && child.pid !== void 0)
9395
+ try {
9396
+ process.kill(-child.pid, "SIGKILL");
9397
+ } catch {
9398
+ }
9399
+ releaseGroup();
9400
+ }, opts.timeoutMs)), child.on("exit", () => {
9401
+ exited = !0;
9402
+ }), child.on("error", (err) => {
9403
+ timer && clearTimeout(timer), reject(err);
9404
+ }), child.on("close", () => {
9405
+ timer && clearTimeout(timer), resolve35({
9406
+ // No exit status for a timed-out run (as before) or when the leader was ended before it could report.
9407
+ exitCode: timedOut ? null : reported,
9408
+ stdout: Buffer.concat(stdoutChunks).toString("utf8"),
9409
+ stderr: Buffer.concat(stderrChunks).toString("utf8")
9410
+ });
9411
+ }), opts.input !== void 0 && child.stdin)
9412
+ child.stdin.on("error", () => {
9413
+ }), child.stdin.write(opts.input, "utf8", () => {
9414
+ try {
9415
+ child.stdin?.end();
9416
+ } catch {
9417
+ }
9418
+ });
9419
+ else if (child.stdin)
9420
+ try {
9421
+ child.stdin.end();
9422
+ } catch {
9423
+ }
9424
+ });
9425
+ }
9426
+ var import_node_child_process12, SH, GROUP_LEADER_SCRIPT, init_process_group_run = __esm({
9427
+ "src/substrate/process-group-run.ts"() {
9428
+ "use strict";
9429
+ import_node_child_process12 = require("node:child_process"), SH = "/bin/sh", GROUP_LEADER_SCRIPT = [
9430
+ "exec 5<&0",
9431
+ "( exec 3>&- 5<&- </dev/null; read -r _ <&4; kill -s KILL 0 ) &",
9432
+ '"$0" "$@" <&5 3>&- 4>&- 5<&- &',
9433
+ "c=$!",
9434
+ "exec 5<&- 4>&-",
9435
+ 'wait "$c"',
9436
+ "s=$?",
9437
+ "trap '' PIPE",
9438
+ `printf '%s\\n' "$s" >&3 2>/dev/null`,
9439
+ "exec 3>&-",
9440
+ "wait"
9441
+ ].join(`
9442
+ `);
9443
+ }
9444
+ });
9445
+
9366
9446
  // src/substrate/command-runner.ts
9367
- var import_node_child_process12, ChildProcessCommandRunner, init_command_runner = __esm({
9447
+ var import_node_child_process13, ChildProcessCommandRunner, init_command_runner = __esm({
9368
9448
  "src/substrate/command-runner.ts"() {
9369
9449
  "use strict";
9370
- import_node_child_process12 = require("node:child_process");
9450
+ import_node_child_process13 = require("node:child_process");
9371
9451
  init_env_scrub();
9372
9452
  init_process_tree();
9453
+ init_process_group_run();
9373
9454
  ChildProcessCommandRunner = class {
9374
9455
  run(argv, opts = {}) {
9375
- return new Promise((resolve35, reject) => {
9376
- let child = (0, import_node_child_process12.spawn)(argv[0], argv.slice(1), {
9456
+ let env = scrubSearchApiKeys({ ...process.env });
9457
+ return process.platform !== "win32" && opts.timeoutMs !== void 0 ? runInOwnProcessGroup(argv, { ...opts, env }) : new Promise((resolve35, reject) => {
9458
+ let child = (0, import_node_child_process13.spawn)(argv[0], argv.slice(1), {
9377
9459
  stdio: ["pipe", "pipe", "pipe"],
9378
9460
  windowsHide: !0,
9379
- env: scrubSearchApiKeys({ ...process.env })
9461
+ env
9380
9462
  }), stdoutChunks = [], stderrChunks = [];
9381
9463
  child.stdout?.on("data", (c) => stdoutChunks.push(c)), child.stderr?.on("data", (c) => stderrChunks.push(c));
9382
9464
  let timer;
@@ -9421,7 +9503,7 @@ var import_node_child_process12, ChildProcessCommandRunner, init_command_runner
9421
9503
  workingDirAuthority: opts.cwdAuthority,
9422
9504
  launchPathAuthorities: opts.launchPathAuthorities,
9423
9505
  ...opts.descendantReap ? { descendantReap: opts.descendantReap } : {}
9424
- }) : (0, import_node_child_process12.spawn)(argv[0], argv.slice(1), spawnOptions), proc = child;
9506
+ }) : (0, import_node_child_process13.spawn)(argv[0], argv.slice(1), spawnOptions), proc = child;
9425
9507
  if (opts.relayChannel) {
9426
9508
  let channel = child.stdio[3];
9427
9509
  if (!channel) throw new Error("spawnLong: the relay channel (fd 3) was not created");
@@ -9593,7 +9675,7 @@ async function executeSpawnSweep(opts) {
9593
9675
  strandedMembers: [],
9594
9676
  recordSha256
9595
9677
  };
9596
- let timeoutMs = opts.timeoutMs ?? 1e4, readProcStat = opts.readProcStat ?? defaultReadProcStat, spawner = opts.spawnHelper ?? import_node_child_process15.default.spawn, invocationToken = import_node_crypto45.default.randomBytes(8).toString("hex");
9678
+ let timeoutMs = opts.timeoutMs ?? 1e4, readProcStat = opts.readProcStat ?? defaultReadProcStat, spawner = opts.spawnHelper ?? import_node_child_process16.default.spawn, invocationToken = import_node_crypto45.default.randomBytes(8).toString("hex");
9597
9679
  return new Promise((resolve35) => {
9598
9680
  let settled = !1, timer = null, initialStat = null, child;
9599
9681
  try {
@@ -9804,10 +9886,10 @@ async function executeSpawnSweep(opts) {
9804
9886
  });
9805
9887
  });
9806
9888
  }
9807
- var import_node_child_process15, import_node_crypto45, import_node_fs36, import_node_path4, activeSpawnSweeps, init_spawn_sweep = __esm({
9889
+ var import_node_child_process16, import_node_crypto45, import_node_fs36, import_node_path4, activeSpawnSweeps, init_spawn_sweep = __esm({
9808
9890
  "src/local-executor/spawn-sweep.ts"() {
9809
9891
  "use strict";
9810
- import_node_child_process15 = __toESM(require("node:child_process")), import_node_crypto45 = __toESM(require("node:crypto")), import_node_fs36 = __toESM(require("node:fs")), import_node_path4 = __toESM(require("node:path"));
9892
+ import_node_child_process16 = __toESM(require("node:child_process")), import_node_crypto45 = __toESM(require("node:crypto")), import_node_fs36 = __toESM(require("node:fs")), import_node_path4 = __toESM(require("node:path"));
9811
9893
  init_logger2();
9812
9894
  init_spawn_sweep_binary();
9813
9895
  activeSpawnSweeps = /* @__PURE__ */ new Map();
@@ -10153,14 +10235,14 @@ async function collectRepoStates(authority, knownRepos, options = {}) {
10153
10235
  );
10154
10236
  return Promise.all(clamped.map((r) => collectOne(r, gitExec, timeoutMs)));
10155
10237
  }
10156
- var import_node_child_process17, path95, GIT_TIMEOUT_MS, SCRUBBED_ENV, defaultGitExec, init_dirty_state_collector = __esm({
10238
+ var import_node_child_process18, path95, GIT_TIMEOUT_MS, SCRUBBED_ENV, defaultGitExec, init_dirty_state_collector = __esm({
10157
10239
  "src/continuation/dirty-state-collector.ts"() {
10158
10240
  "use strict";
10159
- import_node_child_process17 = require("node:child_process"), path95 = __toESM(require("node:path")), GIT_TIMEOUT_MS = 5e3, SCRUBBED_ENV = (() => {
10241
+ import_node_child_process18 = require("node:child_process"), path95 = __toESM(require("node:path")), GIT_TIMEOUT_MS = 5e3, SCRUBBED_ENV = (() => {
10160
10242
  let out = {};
10161
10243
  return process.env.PATH && (out.PATH = process.env.PATH), process.env.LANG && (out.LANG = process.env.LANG), process.env.LC_ALL && (out.LC_ALL = process.env.LC_ALL), out;
10162
10244
  })(), defaultGitExec = (args, options) => new Promise((resolve35, reject) => {
10163
- (0, import_node_child_process17.execFile)(
10245
+ (0, import_node_child_process18.execFile)(
10164
10246
  "git",
10165
10247
  args,
10166
10248
  {
@@ -18765,6 +18847,15 @@ var queries = {
18765
18847
  }
18766
18848
  `
18767
18849
  ),
18850
+ // Sign-out: drop this computer's public key so new sessions stop wrapping a key for it (iOS does the same).
18851
+ removeDeviceKey: (
18852
+ /* GraphQL */
18853
+ `
18854
+ mutation RemoveDeviceKey($deviceId: ID!) {
18855
+ removeDeviceKey(deviceId: $deviceId)
18856
+ }
18857
+ `
18858
+ ),
18768
18859
  grantSessionKey: (
18769
18860
  /* GraphQL */
18770
18861
  `
@@ -26983,8 +27074,8 @@ var AppSyncClient = class _AppSyncClient {
26983
27074
  /**
26984
27075
  * List user device keys
26985
27076
  */
26986
- async listUserDeviceKeys() {
26987
- return (await this.graphqlRequest(queries.listUserDeviceKeys, {})).data.listUserDeviceKeys || [];
27077
+ async listUserDeviceKeys(options = {}) {
27078
+ return (await this.graphqlRequest(queries.listUserDeviceKeys, {}, !1, void 0, options.expectedUserId)).data.listUserDeviceKeys || [];
26988
27079
  }
26989
27080
  /**
26990
27081
  * CP-1.b IMPL r4 H-2 — list BACKEND_SERVICE device keys per design
@@ -27015,6 +27106,10 @@ var AppSyncClient = class _AppSyncClient {
27015
27106
  let input = { deviceId, publicKey, platform: platform2, deviceName };
27016
27107
  await this.graphqlRequest(mutations.registerDeviceKey, { input }), logger.info("[AppSyncClient] Device key registered", { deviceId, platform: platform2 });
27017
27108
  }
27109
+ /** Sign-out de-registration transport, fenced to `expectedUserId` on every replay (logic: `auth/device-deregistration.ts`). */
27110
+ async removeDeviceKey(deviceId, expectedUserId) {
27111
+ return (await this.graphqlRequest(mutations.removeDeviceKey, { deviceId }, !1, void 0, expectedUserId))?.data?.removeDeviceKey === !0;
27112
+ }
27018
27113
  /**
27019
27114
  * Grant a session key to an additional device by appending a new
27020
27115
  * per-device wrapped key blob to the session's encryptedKeys array.
@@ -32681,7 +32776,7 @@ async function clearRetiredPlannerCache(userId, cacheRoot = process.env.CODEVIBE
32681
32776
  }
32682
32777
 
32683
32778
  // src/orchestration-shell/index.ts
32684
- var path113 = __toESM(require("path")), os55 = __toESM(require("os")), import_promises6 = require("node:fs/promises"), fs93 = __toESM(require("node:fs")), import_node_fs54 = require("node:fs"), import_node_child_process19 = require("node:child_process"), import_node_util3 = require("node:util"), import_node_async_hooks = require("node:async_hooks");
32779
+ var path113 = __toESM(require("path")), os55 = __toESM(require("os")), import_promises6 = require("node:fs/promises"), fs93 = __toESM(require("node:fs")), import_node_fs54 = require("node:fs"), import_node_child_process20 = require("node:child_process"), import_node_util3 = require("node:util"), import_node_async_hooks = require("node:async_hooks");
32685
32780
 
32686
32781
  // src/orchestration-shell/web/sanitize.ts
32687
32782
  function sanitizeForTerminal(input) {
@@ -47496,7 +47591,9 @@ var DockerHandle = class {
47496
47591
  try {
47497
47592
  runRes = await this.runner.run(runArgv);
47498
47593
  } catch (e) {
47499
- throw await this.rollback(sessionDir, forwarder, workdirLease), new SubstrateLaunchError(
47594
+ throw await this.runner.run(buildKillArgv(id5)).catch(() => {
47595
+ }), await this.runner.run(buildRmArgv(id5)).catch(() => {
47596
+ }), await this.rollback(sessionDir, forwarder, workdirLease), new SubstrateLaunchError(
47500
47597
  "docker",
47501
47598
  `container run failed to spawn: ${e.message}`,
47502
47599
  e
@@ -49175,7 +49272,7 @@ var path58 = __toESM(require("node:path"));
49175
49272
  init_anchored_fs();
49176
49273
 
49177
49274
  // src/local-executor/verification-gates/shell-runner.ts
49178
- var import_node_child_process13 = require("node:child_process");
49275
+ var import_node_child_process14 = require("node:child_process");
49179
49276
  init_bounded_output();
49180
49277
  init_process_tree();
49181
49278
  init_workspace_authority();
@@ -49185,7 +49282,7 @@ async function runShellCommand(args) {
49185
49282
  let now = args.nowMs ?? Date.now, startedAt = now();
49186
49283
  if (args.signal?.aborted)
49187
49284
  return { exitCode: -1, stdout: "", stderr: "verification gate aborted", durationMs: 0 };
49188
- let spawner = args.spawnFn ?? import_node_child_process13.spawn, workingDirAuthority = args.workingDirAuthority;
49285
+ let spawner = args.spawnFn ?? import_node_child_process14.spawn, workingDirAuthority = args.workingDirAuthority;
49189
49286
  if (workingDirAuthority) {
49190
49287
  if (assertWorkspaceRootAuthoritySchema(workingDirAuthority), workingDirAuthority.canonicalPath !== args.cwd)
49191
49288
  throw new Error("verification cwd authority is bound to a different path");
@@ -50771,7 +50868,7 @@ async function listBaselineShards(stateDir, shadowDir) {
50771
50868
  }
50772
50869
 
50773
50870
  // src/local-executor/shadow-volume-probe.ts
50774
- var import_node_child_process14 = require("node:child_process"), import_node_crypto39 = require("node:crypto"), import_node_fs32 = require("node:fs"), fs55 = __toESM(require("node:fs/promises")), path63 = __toESM(require("node:path")), PROBE_ENTRY_RE = /^\.codevibe-probe-[0-9a-f]{32}(?:\.(?:renamed|link))?$/;
50871
+ var import_node_child_process15 = require("node:child_process"), import_node_crypto39 = require("node:crypto"), import_node_fs32 = require("node:fs"), fs55 = __toESM(require("node:fs/promises")), path63 = __toESM(require("node:path")), PROBE_ENTRY_RE = /^\.codevibe-probe-[0-9a-f]{32}(?:\.(?:renamed|link))?$/;
50775
50872
  function newProbeEntryName() {
50776
50873
  return `.codevibe-probe-${(0, import_node_crypto39.randomBytes)(16).toString("hex")}`;
50777
50874
  }
@@ -50779,7 +50876,7 @@ async function bootIdentity(platform2 = process.platform) {
50779
50876
  if (platform2 === "linux") return (await fs55.readFile("/proc/sys/kernel/random/boot_id", "utf8")).trim();
50780
50877
  if (platform2 === "darwin")
50781
50878
  return new Promise((resolve35, reject) => {
50782
- (0, import_node_child_process14.execFile)("/usr/sbin/sysctl", ["-n", "kern.boottime"], (err, stdout) => {
50879
+ (0, import_node_child_process15.execFile)("/usr/sbin/sysctl", ["-n", "kern.boottime"], (err, stdout) => {
50783
50880
  err ? reject(err) : resolve35(stdout.trim());
50784
50881
  });
50785
50882
  });
@@ -62699,7 +62796,7 @@ var crypto26 = __toESM(require("node:crypto")), fs72 = __toESM(require("node:fs/
62699
62796
  init_logger2();
62700
62797
 
62701
62798
  // src/local-executor/worktree-merge.ts
62702
- var import_node_child_process16 = require("node:child_process"), crypto25 = __toESM(require("node:crypto")), fs71 = __toESM(require("node:fs/promises")), os39 = __toESM(require("node:os")), path85 = __toESM(require("node:path")), import_node_util = require("node:util");
62799
+ var import_node_child_process17 = require("node:child_process"), crypto25 = __toESM(require("node:crypto")), fs71 = __toESM(require("node:fs/promises")), os39 = __toESM(require("node:os")), path85 = __toESM(require("node:path")), import_node_util = require("node:util");
62703
62800
 
62704
62801
  // src/local-executor/git-lock-retry.ts
62705
62802
  var realSleep = (ms) => new Promise((resolve35) => setTimeout(resolve35, ms));
@@ -62735,7 +62832,7 @@ function withGitLockRetry(op, opts = {}) {
62735
62832
  // src/local-executor/worktree-merge.ts
62736
62833
  init_env_scrub();
62737
62834
  init_logger2();
62738
- var execFile8 = (0, import_node_util.promisify)(import_node_child_process16.execFile), GIT_MAXBUF = 64 * 1024 * 1024, MERGE_IMPL_ID = "git-host-v1", DETERMINISM_CONTRACT_ID = "ort+histogram+diff3+renames+dirrenames+indent", cachedMergeImplId;
62835
+ var execFile8 = (0, import_node_util.promisify)(import_node_child_process17.execFile), GIT_MAXBUF = 64 * 1024 * 1024, MERGE_IMPL_ID = "git-host-v1", DETERMINISM_CONTRACT_ID = "ort+histogram+diff3+renames+dirrenames+indent", cachedMergeImplId;
62739
62836
  async function resolveMergeImplId() {
62740
62837
  if (cachedMergeImplId !== void 0) return cachedMergeImplId;
62741
62838
  try {
@@ -62991,7 +63088,7 @@ async function pinnedGit(repoDir, args, opts = {}) {
62991
63088
  async function pinnedGitWithInput(repoDir, args, input, opts = {}) {
62992
63089
  let configPrefix = [...W2_HERMETIC_CONFIG, ...PINNED_GIT_CONFIG];
62993
63090
  return await new Promise((resolve35, reject) => {
62994
- let child = (0, import_node_child_process16.spawn)("git", ["-C", repoDir, ...configPrefix, ...args], {
63091
+ let child = (0, import_node_child_process17.spawn)("git", ["-C", repoDir, ...configPrefix, ...args], {
62995
63092
  env: sanitizeGitEnv(),
62996
63093
  stdio: ["pipe", "pipe", "pipe"]
62997
63094
  }), stdout = "", stderr = "", stdoutBytes = 0;
@@ -75544,7 +75641,7 @@ var import_node_crypto55 = require("node:crypto"), import_node_fs47 = require("n
75544
75641
  init_spawn_sweep_binary();
75545
75642
 
75546
75643
  // src/substrate/pasta-isolation-check.ts
75547
- var import_node_child_process18 = require("node:child_process"), import_node_crypto54 = require("node:crypto"), fs82 = __toESM(require("node:fs")), import_node_net2 = __toESM(require("node:net")), path101 = __toESM(require("node:path"));
75644
+ var import_node_child_process19 = require("node:child_process"), import_node_crypto54 = require("node:crypto"), fs82 = __toESM(require("node:fs")), import_node_net2 = __toESM(require("node:net")), path101 = __toESM(require("node:path"));
75548
75645
  init_logger2();
75549
75646
  init_pasta();
75550
75647
  function evaluateIsolation(e) {
@@ -75657,7 +75754,7 @@ async function runIsolationCheck(opts = {}) {
75657
75754
  ISOLATION_PROBE_SOURCE,
75658
75755
  JSON.stringify(ports)
75659
75756
  ], stdout = await new Promise((resolve35, reject) => {
75660
- let child = (0, import_node_child_process18.spawn)(argv[0], argv.slice(1), { stdio: ["ignore", "pipe", "pipe"] }), out = "", err = "", timer = setTimeout(() => {
75757
+ let child = (0, import_node_child_process19.spawn)(argv[0], argv.slice(1), { stdio: ["ignore", "pipe", "pipe"] }), out = "", err = "", timer = setTimeout(() => {
75661
75758
  child.kill("SIGKILL"), reject(new Error("isolation probe timed out"));
75662
75759
  }, opts.timeoutMs ?? 6e4);
75663
75760
  child.stdout.on("data", (d) => {
@@ -96665,7 +96762,7 @@ function resolveBrowseUrls(modelUrls, prompt) {
96665
96762
  let usable = modelUrls.filter(isWellFormedHttpUrl);
96666
96763
  return usable.length > 0 ? usable : void 0;
96667
96764
  }
96668
- var execFileAsync = (0, import_node_util3.promisify)(import_node_child_process19.execFile);
96765
+ var execFileAsync = (0, import_node_util3.promisify)(import_node_child_process20.execFile);
96669
96766
  function recordStartedTask(store, result, agent) {
96670
96767
  result.outcome !== void 0 && result.outcome !== "running" || store.dispatch({
96671
96768
  type: "TASK_LIFECYCLE",
@@ -107731,7 +107828,7 @@ async function engageWriteConfinedResolverSandbox(input) {
107731
107828
  }
107732
107829
 
107733
107830
  // src/substrate-launch/le-env-scrub.ts
107734
- var import_node_child_process20 = require("node:child_process"), LE_ENV_SCRUBBED_MARKER = "CODEVIBE_LE_ENV_SCRUBBED", CRED_KEY_PATTERNS = [
107831
+ var import_node_child_process21 = require("node:child_process"), LE_ENV_SCRUBBED_MARKER = "CODEVIBE_LE_ENV_SCRUBBED", CRED_KEY_PATTERNS = [
107735
107832
  /^ANTHROPIC_/i,
107736
107833
  /^OPENAI_/i,
107737
107834
  /^GOOGLE_/i,
@@ -107770,7 +107867,7 @@ function scrubLeEnvOrReexec(deps = {}) {
107770
107867
  throw new Error(
107771
107868
  `[le-env-scrub] Refusing to launch the Local Executor: the scrub marker (${LE_ENV_SCRUBBED_MARKER}) is set but credential-shaped env vars are still present (${scrubbedKeys.join(", ")}). A genuine re-exec'd child has NO credential-shaped vars; this indicates a spoofed marker or a broken scrub. Fail closed (CP-7 I1, A5 parent-procargs vector) \u2014 never launch the LE with a vendor credential in its exec-time procargs.`
107772
107869
  );
107773
- let spawnSyncFn = deps.spawnSyncFn ?? import_node_child_process20.spawnSync, execPath = deps.execPath ?? process.execPath, argv = deps.argv ?? process.argv.slice(1), cwd = deps.cwd ?? process.cwd(), scrubbedEnv = buildScrubbedLeEnv(env);
107870
+ let spawnSyncFn = deps.spawnSyncFn ?? import_node_child_process21.spawnSync, execPath = deps.execPath ?? process.execPath, argv = deps.argv ?? process.argv.slice(1), cwd = deps.cwd ?? process.cwd(), scrubbedEnv = buildScrubbedLeEnv(env);
107774
107871
  try {
107775
107872
  deps.onScrub?.(scrubbedKeys);
107776
107873
  } catch {
@@ -0,0 +1,8 @@
1
+ import type { CommandResult } from './types';
2
+ export declare const GROUP_LEADER_SCRIPT: string;
3
+ export interface GroupRunOptions {
4
+ timeoutMs?: number;
5
+ input?: string;
6
+ env: NodeJS.ProcessEnv;
7
+ }
8
+ export declare function runInOwnProcessGroup(argv: string[], opts: GroupRunOptions): Promise<CommandResult>;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quantiya/codevibe-core",
3
- "version": "2.0.102",
3
+ "version": "2.0.103",
4
4
  "description": "Core library for CodeVibe plugins - shared keychain, crypto, AppSync, and auth functionality",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quantiya/codevibe-codex-plugin",
3
- "version": "2.0.118",
3
+ "version": "2.0.119",
4
4
  "description": "Control OpenAI Codex CLI from your iPhone and Android — real-time sync, approve file edits, send prompts by voice. Part of CodeVibe.",
5
5
  "main": "dist/server.js",
6
6
  "codevibe": {
@@ -47,7 +47,7 @@
47
47
  "node": ">=22.0.0"
48
48
  },
49
49
  "dependencies": {
50
- "@quantiya/codevibe-core": "^2.0.102",
50
+ "@quantiya/codevibe-core": "^2.0.103",
51
51
  "@quantiya/quorum-core": "^1.0.1",
52
52
  "chokidar": "^4.0.0",
53
53
  "dotenv": "^16.6.1",