codeam-cli 2.60.18 → 2.60.19

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/index.js +88 -44
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -5680,7 +5680,7 @@ function readAnonId() {
5680
5680
  }
5681
5681
  function superProperties() {
5682
5682
  return {
5683
- cliVersion: true ? "2.60.18" : "0.0.0-dev",
5683
+ cliVersion: true ? "2.60.19" : "0.0.0-dev",
5684
5684
  nodeVersion: process.version,
5685
5685
  platform: process.platform,
5686
5686
  arch: process.arch,
@@ -5861,7 +5861,7 @@ var os4 = __toESM(require("os"));
5861
5861
  // package.json
5862
5862
  var package_default = {
5863
5863
  name: "codeam-cli",
5864
- version: "2.60.18",
5864
+ version: "2.60.19",
5865
5865
  description: "Workflow-continuity bridge for AI coding agents. Wrap Claude Code or Codex in a PTY and supervise, approve, and redirect the session from any device \u2014 async. The terminal companion for CodeAgent Mobile.",
5866
5866
  type: "commonjs",
5867
5867
  main: "dist/index.js",
@@ -6932,7 +6932,7 @@ var CommandRelayService = class {
6932
6932
  // fresh + clear the "CLI update available" banner after a self-update
6933
6933
  // (a codespace that reinstalls @latest reconnects via heartbeat, not
6934
6934
  // pair/reconnect). Older backends ignore the extra field.
6935
- ..."2.60.18" ? { ideVersion: "2.60.18" } : {}
6935
+ ..."2.60.19" ? { ideVersion: "2.60.19" } : {}
6936
6936
  }).then(() => log.trace("relay", `heartbeat ok online=${online}`)).catch((err) => log.trace("relay", `heartbeat failed online=${online}`, err));
6937
6937
  }
6938
6938
  /**
@@ -13601,6 +13601,8 @@ function detectCursorSelector(lines) {
13601
13601
  }
13602
13602
 
13603
13603
  // src/agents/cursor/runtime.ts
13604
+ var import_node_child_process10 = require("child_process");
13605
+ var UUID_RE = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i;
13604
13606
  var CURSOR_CONTEXT_WINDOW = 2e5;
13605
13607
  var CURSOR_MODELS = [
13606
13608
  { id: "cursor-default", label: "Cursor (auto)", contextWindow: CURSOR_CONTEXT_WINDOW },
@@ -13622,12 +13624,54 @@ var CursorRuntimeStrategy = class {
13622
13624
  'Cursor Agent CLI ("cursor-agent") is not on PATH.\n Install Cursor (https://cursor.com/), enable its CLI plugin,\n then run `codeam pair` again.'
13623
13625
  );
13624
13626
  }
13625
- return this.os.buildLaunch(binary);
13627
+ const sessionId = this.mintChatId(binary);
13628
+ if (sessionId) {
13629
+ const launch2 = this.os.buildLaunch(binary, ["--resume", sessionId]);
13630
+ return { cmd: launch2.cmd, args: launch2.args, sessionId };
13631
+ }
13632
+ const launch = this.os.buildLaunch(binary);
13633
+ return { cmd: launch.cmd, args: launch.args };
13634
+ }
13635
+ /**
13636
+ * Pre-create an empty, resumable Cursor chat and return its id, or null on any
13637
+ * failure. `cursor-agent create-chat` prints a bare UUID and exits 0 (verified
13638
+ * on cursor-agent 2026.06.24). Synchronous + bounded so prepareLaunch stays a
13639
+ * single deterministic step; a timeout/parse failure just disables pre-mint.
13640
+ */
13641
+ mintChatId(binary) {
13642
+ try {
13643
+ const r = (0, import_node_child_process10.spawnSync)(binary, ["create-chat"], {
13644
+ encoding: "utf8",
13645
+ timeout: 2e4,
13646
+ stdio: ["ignore", "pipe", "pipe"]
13647
+ });
13648
+ if (r.status !== 0 || r.error) {
13649
+ log.warn("cursor", `create-chat failed (status=${r.status}) \u2014 baton id pre-mint skipped`);
13650
+ return null;
13651
+ }
13652
+ const id = (r.stdout ?? "").match(UUID_RE)?.[0] ?? null;
13653
+ if (!id) log.warn("cursor", "create-chat produced no chat id \u2014 baton id pre-mint skipped");
13654
+ return id;
13655
+ } catch (err) {
13656
+ log.warn("cursor", `create-chat threw: ${err instanceof Error ? err.message : String(err)}`);
13657
+ return null;
13658
+ }
13626
13659
  }
13627
13660
  /** Cursor mirrors Claude's `--resume <id>` flag for session resume. */
13628
13661
  resumeLaunchArgs(sessionId, _opts) {
13629
13662
  return ["--resume", sessionId];
13630
13663
  }
13664
+ /**
13665
+ * Resume as a COMPLETE relaunch (mirrors Claude). The initial spawn already
13666
+ * carries `--resume <preMintedId>` from {@link prepareLaunch}, so appending
13667
+ * `resumeLaunchArgs` onto `initialLaunch.args` would emit a duplicate
13668
+ * `--resume … --resume …`. Rebuild a clean `--resume <id>` launch instead.
13669
+ */
13670
+ prepareResumeLaunch(sessionId, opts) {
13671
+ const binary = this.os.findInPath("cursor-agent") ?? this.meta.binaryName;
13672
+ const launch = this.os.buildLaunch(binary, this.resumeLaunchArgs(sessionId, opts));
13673
+ return { cmd: launch.cmd, args: launch.args };
13674
+ }
13631
13675
  resolveHistoryDir(cwd) {
13632
13676
  return resolveHistoryDir3(cwd);
13633
13677
  }
@@ -13714,7 +13758,7 @@ function getCurrentUsage4(_historyDir) {
13714
13758
  }
13715
13759
 
13716
13760
  // src/agents/aider/link.ts
13717
- var import_node_child_process10 = require("child_process");
13761
+ var import_node_child_process11 = require("child_process");
13718
13762
 
13719
13763
  // src/agents/aider/local-token.ts
13720
13764
  var fs26 = __toESM(require("fs"));
@@ -13772,7 +13816,7 @@ function aiderLoginLauncher(os49) {
13772
13816
  console.error(
13773
13817
  "\n Aider has no interactive login flow.\n Set ANTHROPIC_API_KEY or OPENAI_API_KEY in your shell,\n or re-run `codeam link aider --api-key=<your-key>`.\n"
13774
13818
  );
13775
- return (0, import_node_child_process10.spawn)(os49.id === "win32" ? "cmd.exe" : "sh", os49.id === "win32" ? ["/c", "exit", "0"] : ["-c", "exit 0"], {
13819
+ return (0, import_node_child_process11.spawn)(os49.id === "win32" ? "cmd.exe" : "sh", os49.id === "win32" ? ["/c", "exit", "0"] : ["-c", "exit 0"], {
13776
13820
  stdio: "ignore"
13777
13821
  });
13778
13822
  }
@@ -13916,7 +13960,7 @@ var AiderRuntimeStrategy = class {
13916
13960
  var import_node_crypto5 = require("crypto");
13917
13961
 
13918
13962
  // src/agents/gemini/link.ts
13919
- var import_node_child_process11 = require("child_process");
13963
+ var import_node_child_process12 = require("child_process");
13920
13964
 
13921
13965
  // src/agents/gemini/local-token.ts
13922
13966
  var fs27 = __toESM(require("fs"));
@@ -13981,7 +14025,7 @@ function geminiLoginLauncher() {
13981
14025
  return os49.findInPath("gemini") !== null;
13982
14026
  },
13983
14027
  launch() {
13984
- return (0, import_node_child_process11.spawn)("gemini", ["auth", "login"], { stdio: "inherit" });
14028
+ return (0, import_node_child_process12.spawn)("gemini", ["auth", "login"], { stdio: "inherit" });
13985
14029
  }
13986
14030
  };
13987
14031
  }
@@ -14277,7 +14321,7 @@ var GeminiRuntimeStrategy = class {
14277
14321
  };
14278
14322
 
14279
14323
  // src/agents/kimi/runtime.ts
14280
- var import_node_child_process12 = require("child_process");
14324
+ var import_node_child_process13 = require("child_process");
14281
14325
  var import_node_os3 = require("os");
14282
14326
  var import_node_path4 = require("path");
14283
14327
 
@@ -14567,7 +14611,7 @@ var KimiRuntimeStrategy = class {
14567
14611
  return createOsStrategy().findInPath("kimi") !== null;
14568
14612
  },
14569
14613
  launch() {
14570
- return (0, import_node_child_process12.spawn)("kimi", [], { stdio: "inherit" });
14614
+ return (0, import_node_child_process13.spawn)("kimi", [], { stdio: "inherit" });
14571
14615
  }
14572
14616
  };
14573
14617
  }
@@ -15000,7 +15044,7 @@ async function linkDryRunPreflight(ctx) {
15000
15044
  }
15001
15045
 
15002
15046
  // src/commands/host-agent.ts
15003
- var import_node_child_process20 = require("child_process");
15047
+ var import_node_child_process21 = require("child_process");
15004
15048
  var os34 = __toESM(require("os"));
15005
15049
  var fs40 = __toESM(require("fs"));
15006
15050
  var path42 = __toESM(require("path"));
@@ -15013,7 +15057,7 @@ var path35 = __toESM(require("path"));
15013
15057
  // src/lib/restrict-to-owner.ts
15014
15058
  var import_node_fs5 = __toESM(require("fs"));
15015
15059
  var import_node_os4 = __toESM(require("os"));
15016
- var import_node_child_process13 = require("child_process");
15060
+ var import_node_child_process14 = require("child_process");
15017
15061
  var BROAD_WINDOWS_SIDS = [
15018
15062
  "*S-1-1-0",
15019
15063
  "*S-1-5-11",
@@ -15025,7 +15069,7 @@ function restrictToOwner(filePath) {
15025
15069
  try {
15026
15070
  if (process.platform === "win32") {
15027
15071
  const username = import_node_os4.default.userInfo().username;
15028
- (0, import_node_child_process13.execFileSync)(
15072
+ (0, import_node_child_process14.execFileSync)(
15029
15073
  "icacls",
15030
15074
  [
15031
15075
  filePath,
@@ -15287,9 +15331,9 @@ async function reportDeployProgress(auth, deployId, step, message, sessionId) {
15287
15331
  var fs33 = __toESM(require("fs"));
15288
15332
  var os29 = __toESM(require("os"));
15289
15333
  var path36 = __toESM(require("path"));
15290
- var import_node_child_process14 = require("child_process");
15334
+ var import_node_child_process15 = require("child_process");
15291
15335
  var import_node_util4 = require("util");
15292
- var execFileP4 = (0, import_node_util4.promisify)(import_node_child_process14.execFile);
15336
+ var execFileP4 = (0, import_node_util4.promisify)(import_node_child_process15.execFile);
15293
15337
  function isAbsolutePathTarget(target) {
15294
15338
  return path36.isAbsolute(target);
15295
15339
  }
@@ -15559,7 +15603,7 @@ function provisionAgentCredentials(publicAgentId, auth, homeDir2 = os30.homedir(
15559
15603
  }
15560
15604
 
15561
15605
  // src/commands/host/git-tooling.ts
15562
- var import_node_child_process15 = require("child_process");
15606
+ var import_node_child_process16 = require("child_process");
15563
15607
  var fs35 = __toESM(require("fs"));
15564
15608
  var os31 = __toESM(require("os"));
15565
15609
  var path38 = __toESM(require("path"));
@@ -15673,7 +15717,7 @@ var defaultGitToolingRunner = {
15673
15717
  which(cmd) {
15674
15718
  try {
15675
15719
  const probe = process.platform === "win32" ? "where" : "which";
15676
- (0, import_node_child_process15.execFileSync)(probe, [cmd], { stdio: "ignore" });
15720
+ (0, import_node_child_process16.execFileSync)(probe, [cmd], { stdio: "ignore" });
15677
15721
  return true;
15678
15722
  } catch {
15679
15723
  return false;
@@ -15681,7 +15725,7 @@ var defaultGitToolingRunner = {
15681
15725
  },
15682
15726
  run(cmd, args2, opts = {}) {
15683
15727
  return new Promise((resolve7) => {
15684
- const child = (0, import_node_child_process15.spawn)(cmd, args2, {
15728
+ const child = (0, import_node_child_process16.spawn)(cmd, args2, {
15685
15729
  stdio: [opts.input !== void 0 ? "pipe" : "ignore", "ignore", "pipe"]
15686
15730
  });
15687
15731
  let stderr = "";
@@ -15835,12 +15879,12 @@ var HeadroomStatsReporter = class {
15835
15879
  };
15836
15880
 
15837
15881
  // src/commands/host/os-packages.ts
15838
- var import_node_child_process16 = require("child_process");
15882
+ var import_node_child_process17 = require("child_process");
15839
15883
  var PM_INSTALL_TIMEOUT_MS = 18e4;
15840
15884
  var defaultHeadroomRunner = {
15841
15885
  which(cmd) {
15842
15886
  try {
15843
- (0, import_node_child_process16.execFileSync)("which", [cmd], { stdio: "ignore" });
15887
+ (0, import_node_child_process17.execFileSync)("which", [cmd], { stdio: "ignore" });
15844
15888
  return true;
15845
15889
  } catch {
15846
15890
  return false;
@@ -15849,7 +15893,7 @@ var defaultHeadroomRunner = {
15849
15893
  run(cmd, args2, opts = {}) {
15850
15894
  return new Promise((resolve7) => {
15851
15895
  const spawnEnv = opts.env ?? process.env;
15852
- const child = (0, import_node_child_process16.spawn)(cmd, args2, { stdio: ["ignore", "pipe", "pipe"], env: spawnEnv });
15896
+ const child = (0, import_node_child_process17.spawn)(cmd, args2, { stdio: ["ignore", "pipe", "pipe"], env: spawnEnv });
15853
15897
  let stderrBuf = "";
15854
15898
  let stdoutBuf = "";
15855
15899
  let settled = false;
@@ -16356,14 +16400,14 @@ async function setupHeadroomForSelfHosted(agent, runner = defaultHeadroomRunner,
16356
16400
  }
16357
16401
 
16358
16402
  // src/commands/host/self-update.ts
16359
- var import_node_child_process18 = require("child_process");
16403
+ var import_node_child_process19 = require("child_process");
16360
16404
 
16361
16405
  // src/lib/updateNotifier.ts
16362
16406
  var fs38 = __toESM(require("fs"));
16363
16407
  var os33 = __toESM(require("os"));
16364
16408
  var path41 = __toESM(require("path"));
16365
16409
  var https6 = __toESM(require("https"));
16366
- var import_node_child_process17 = require("child_process");
16410
+ var import_node_child_process18 = require("child_process");
16367
16411
  var import_picocolors3 = __toESM(require("picocolors"));
16368
16412
  var PKG_NAME = "codeam-cli";
16369
16413
  var REGISTRY_URL = `https://registry.npmjs.org/${PKG_NAME}/latest`;
@@ -16457,7 +16501,7 @@ function notifyIfStale(currentVersion, latest) {
16457
16501
  }
16458
16502
  function isLinkedInstall() {
16459
16503
  try {
16460
- const root = (0, import_node_child_process17.execSync)("npm root -g", {
16504
+ const root = (0, import_node_child_process18.execSync)("npm root -g", {
16461
16505
  encoding: "utf8",
16462
16506
  stdio: ["ignore", "pipe", "ignore"],
16463
16507
  timeout: 2e3
@@ -16485,7 +16529,7 @@ function maybeAutoUpdate(currentVersion, latest) {
16485
16529
 
16486
16530
  `
16487
16531
  );
16488
- const install = (0, import_node_child_process17.spawnSync)("npm", ["install", "-g", `${PKG_NAME}@latest`], {
16532
+ const install = (0, import_node_child_process18.spawnSync)("npm", ["install", "-g", `${PKG_NAME}@latest`], {
16489
16533
  stdio: "inherit",
16490
16534
  env: process.env
16491
16535
  });
@@ -16506,7 +16550,7 @@ function maybeAutoUpdate(currentVersion, latest) {
16506
16550
  process.stderr.write(` ${import_picocolors3.default.green("\u2713")} Updated. Resuming session...
16507
16551
 
16508
16552
  `);
16509
- const child = (0, import_node_child_process17.spawnSync)("codeam", process.argv.slice(2), {
16553
+ const child = (0, import_node_child_process18.spawnSync)("codeam", process.argv.slice(2), {
16510
16554
  stdio: "inherit",
16511
16555
  env: process.env
16512
16556
  });
@@ -16516,7 +16560,7 @@ async function autoUpgradeBeforeCriticalCommand() {
16516
16560
  if (process.env.NODE_ENV === "test") return;
16517
16561
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
16518
16562
  if (process.env.CI) return;
16519
- const current = true ? "2.60.18" : null;
16563
+ const current = true ? "2.60.19" : null;
16520
16564
  if (!current) return;
16521
16565
  const cache = readCache();
16522
16566
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -16533,7 +16577,7 @@ function checkForUpdates() {
16533
16577
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
16534
16578
  if (process.env.CI) return;
16535
16579
  if (!process.stdout.isTTY) return;
16536
- const current = true ? "2.60.18" : null;
16580
+ const current = true ? "2.60.19" : null;
16537
16581
  if (!current) return;
16538
16582
  const cache = readCache();
16539
16583
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -16553,11 +16597,11 @@ var SELF_UPDATE_INTERVAL_MS = 60 * 60 * 1e3;
16553
16597
  var SELF_UPDATE_VIEW_TIMEOUT_MS = 3e4;
16554
16598
  var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
16555
16599
  function currentCliVersion() {
16556
- return true ? "2.60.18" : null;
16600
+ return true ? "2.60.19" : null;
16557
16601
  }
16558
16602
  function runCmd(cmd, args2, timeoutMs) {
16559
16603
  return new Promise((resolve7) => {
16560
- (0, import_node_child_process18.execFile)(cmd, args2, { timeout: timeoutMs }, (err, stdout, stderr) => {
16604
+ (0, import_node_child_process19.execFile)(cmd, args2, { timeout: timeoutMs }, (err, stdout, stderr) => {
16561
16605
  const code = err && typeof err.code === "number" ? err.code : err ? null : 0;
16562
16606
  resolve7({ code, stdout: stdout ?? "", stderr: stderr ?? "" });
16563
16607
  });
@@ -16619,11 +16663,11 @@ async function runSelfUpdate() {
16619
16663
  }
16620
16664
 
16621
16665
  // src/commands/host/teardown.ts
16622
- var import_node_child_process19 = require("child_process");
16666
+ var import_node_child_process20 = require("child_process");
16623
16667
  var fs39 = __toESM(require("fs"));
16624
16668
  var defaultDisableService = () => {
16625
16669
  try {
16626
- (0, import_node_child_process19.execFileSync)("systemctl", ["disable", "--now", "codeam-host-agent"], { stdio: "ignore" });
16670
+ (0, import_node_child_process20.execFileSync)("systemctl", ["disable", "--now", "codeam-host-agent"], { stdio: "ignore" });
16627
16671
  } catch {
16628
16672
  }
16629
16673
  };
@@ -16631,7 +16675,7 @@ var defaultTeardownHeadroom = () => {
16631
16675
  try {
16632
16676
  const kind = JSON.parse(fs39.readFileSync(headroomConfigPath(), "utf8")).agent;
16633
16677
  if (kind) {
16634
- (0, import_node_child_process19.execFileSync)("headroom", ["unwrap", kind], { stdio: "ignore", timeout: 15e3 });
16678
+ (0, import_node_child_process20.execFileSync)("headroom", ["unwrap", kind], { stdio: "ignore", timeout: 15e3 });
16635
16679
  }
16636
16680
  } catch {
16637
16681
  }
@@ -16789,7 +16833,7 @@ var CONTROL_AGENT_META = {
16789
16833
  headroomWrappable: false,
16790
16834
  acp: false
16791
16835
  };
16792
- var defaultSpawner = (env, cwd, args2 = []) => (0, import_node_child_process20.spawn)(process.execPath, [process.argv[1], "pair-auto", ...args2], {
16836
+ var defaultSpawner = (env, cwd, args2 = []) => (0, import_node_child_process21.spawn)(process.execPath, [process.argv[1], "pair-auto", ...args2], {
16793
16837
  cwd,
16794
16838
  env: { ...process.env, ...env },
16795
16839
  stdio: ["ignore", "pipe", "pipe"],
@@ -17269,7 +17313,7 @@ var HostAgentSupervisor = class {
17269
17313
  runAgentInstall(script) {
17270
17314
  return new Promise((resolve7) => {
17271
17315
  const home = process.env.HOME || os34.homedir();
17272
- const child = (0, import_node_child_process20.spawn)("sh", ["-c", script], {
17316
+ const child = (0, import_node_child_process21.spawn)("sh", ["-c", script], {
17273
17317
  env: { ...process.env, HOME: home },
17274
17318
  stdio: ["ignore", "pipe", "pipe"]
17275
17319
  });
@@ -21675,7 +21719,7 @@ async function pairAuto(args2) {
21675
21719
  }
21676
21720
 
21677
21721
  // src/services/headroom/wrap-launch.ts
21678
- var import_node_child_process21 = require("child_process");
21722
+ var import_node_child_process22 = require("child_process");
21679
21723
  function wrapWithHeadroom(launch, opts) {
21680
21724
  if (!opts.enabled || !opts.headroomPresent) return launch;
21681
21725
  return {
@@ -21688,7 +21732,7 @@ var _present;
21688
21732
  function headroomPresent() {
21689
21733
  if (_present !== void 0) return Promise.resolve(_present);
21690
21734
  return new Promise((resolve7) => {
21691
- (0, import_node_child_process21.execFile)("headroom", ["--version"], (err) => {
21735
+ (0, import_node_child_process22.execFile)("headroom", ["--version"], (err) => {
21692
21736
  _present = !err;
21693
21737
  resolve7(_present);
21694
21738
  });
@@ -22212,7 +22256,7 @@ async function waitForAdapterModuleGraph(command2, args2, opts = {}) {
22212
22256
  }
22213
22257
 
22214
22258
  // src/agents/kimi/installer.ts
22215
- var import_node_child_process22 = require("child_process");
22259
+ var import_node_child_process23 = require("child_process");
22216
22260
  var import_node_os6 = require("os");
22217
22261
  var import_node_path6 = require("path");
22218
22262
  var INSTALL_URL2 = "https://code.kimi.com/kimi-code/install.sh";
@@ -22220,7 +22264,7 @@ function kimiBinDir() {
22220
22264
  return (0, import_node_path6.join)(process.env.KIMI_CODE_HOME || (0, import_node_path6.join)((0, import_node_os6.homedir)(), ".kimi-code"), "bin");
22221
22265
  }
22222
22266
  function kimiRuns() {
22223
- const r = (0, import_node_child_process22.spawnSync)("kimi", ["--version"], { stdio: "ignore", timeout: 15e3 });
22267
+ const r = (0, import_node_child_process23.spawnSync)("kimi", ["--version"], { stdio: "ignore", timeout: 15e3 });
22224
22268
  return !r.error && r.status === 0;
22225
22269
  }
22226
22270
  function augmentPath2() {
@@ -22230,7 +22274,7 @@ function augmentPath2() {
22230
22274
  }
22231
22275
  async function runInstaller2() {
22232
22276
  return new Promise((resolve7) => {
22233
- const proc = (0, import_node_child_process22.spawn)("sh", ["-c", `curl -fsSL ${INSTALL_URL2} | bash`], { stdio: "inherit" });
22277
+ const proc = (0, import_node_child_process23.spawn)("sh", ["-c", `curl -fsSL ${INSTALL_URL2} | bash`], { stdio: "inherit" });
22234
22278
  proc.on("close", (code) => resolve7(code === 0));
22235
22279
  proc.on("error", () => resolve7(false));
22236
22280
  });
@@ -22967,7 +23011,7 @@ var HistoryService = class _HistoryService {
22967
23011
  };
22968
23012
 
22969
23013
  // src/agents/acp/client.ts
22970
- var import_node_child_process23 = require("child_process");
23014
+ var import_node_child_process24 = require("child_process");
22971
23015
  var fs56 = __toESM(require("fs/promises"));
22972
23016
  var fsSync = __toESM(require("fs"));
22973
23017
  var os45 = __toESM(require("os"));
@@ -25571,7 +25615,7 @@ var AcpClient = class {
25571
25615
  "acpClient",
25572
25616
  `spawn cmd=${adapter.command} args=[${adapter.args.join(",")}] cwd=${cwd}`
25573
25617
  );
25574
- const child = (0, import_node_child_process23.spawn)(adapter.command, adapter.args, {
25618
+ const child = (0, import_node_child_process24.spawn)(adapter.command, adapter.args, {
25575
25619
  cwd,
25576
25620
  // extraEnv (e.g. CLAUDE_CODE_DISABLE_1M_CONTEXT=1 on an on-demand
25577
25621
  // re-spawn) layers over process.env; PATH stays last so the augmented
@@ -33413,7 +33457,7 @@ function checkChokidar() {
33413
33457
  }
33414
33458
  async function doctor(args2 = []) {
33415
33459
  const json = args2.includes("--json");
33416
- const cliVersion = true ? "2.60.18" : "0.0.0-dev";
33460
+ const cliVersion = true ? "2.60.19" : "0.0.0-dev";
33417
33461
  const apiBase2 = resolveApiBaseUrl();
33418
33462
  const diagnosticId = (0, import_node_crypto11.randomUUID)();
33419
33463
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -33612,7 +33656,7 @@ async function completion(args2) {
33612
33656
  // src/commands/version.ts
33613
33657
  var import_picocolors15 = __toESM(require("picocolors"));
33614
33658
  function version2() {
33615
- const v = true ? "2.60.18" : "unknown";
33659
+ const v = true ? "2.60.19" : "unknown";
33616
33660
  console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
33617
33661
  }
33618
33662
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.60.18",
3
+ "version": "2.60.19",
4
4
  "description": "Workflow-continuity bridge for AI coding agents. Wrap Claude Code or Codex in a PTY and supervise, approve, and redirect the session from any device — async. The terminal companion for CodeAgent Mobile.",
5
5
  "type": "commonjs",
6
6
  "main": "dist/index.js",