codeam-cli 2.43.0 → 2.43.2

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/CHANGELOG.md CHANGED
@@ -4,6 +4,31 @@ All notable changes to `codeam-cli` are documented here.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [2.43.1] — 2026-06-24
8
+
9
+ ### Fixed
10
+
11
+ - **cli:** 1M-context recovery must publish an awaiting-answer (the tappable button), not just a select_prompt chunk
12
+
13
+ ## [2.43.0] — 2026-06-24
14
+
15
+ ### Added
16
+
17
+ - **cli:** Classify the 1M-context usage-credits error
18
+ - **cli:** Persist per-session disable1mContext flag
19
+ - **cli:** AcpClient accepts extraEnv for the adapter spawn
20
+ - **cli:** OneMContextRecovery offer + decision helper
21
+ - **cli:** OneMContextRecovery offer + decision helper + DI recovery factory
22
+ - **cli:** On-demand 1M-context disable recovery — offer action, re-spawn ACP with the knob, auto-rerun
23
+
24
+ ### Changed
25
+
26
+ - **cli:** Move 1M-context classifier into oneMContextRecovery (break runner import cycle)
27
+
28
+ ### Documentation
29
+
30
+ - **meta:** Record agent-failure-messaging + heartbeat + credential rules (AGENTS.md + CLAUDE.md)
31
+
7
32
  ## [2.42.0] — 2026-06-24
8
33
 
9
34
  ### Added
package/dist/index.js CHANGED
@@ -5397,7 +5397,7 @@ function readAnonId() {
5397
5397
  }
5398
5398
  function superProperties() {
5399
5399
  return {
5400
- cliVersion: true ? "2.43.0" : "0.0.0-dev",
5400
+ cliVersion: true ? "2.43.2" : "0.0.0-dev",
5401
5401
  nodeVersion: process.version,
5402
5402
  platform: process.platform,
5403
5403
  arch: process.arch,
@@ -5578,7 +5578,7 @@ var os4 = __toESM(require("os"));
5578
5578
  // package.json
5579
5579
  var package_default = {
5580
5580
  name: "codeam-cli",
5581
- version: "2.43.0",
5581
+ version: "2.43.2",
5582
5582
  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.",
5583
5583
  type: "commonjs",
5584
5584
  main: "dist/index.js",
@@ -17361,15 +17361,25 @@ function writeFile0600(filePath, contents) {
17361
17361
  fs37.writeFileSync(filePath, contents, { encoding: "utf8", mode: 384 });
17362
17362
  fs37.chmodSync(filePath, 384);
17363
17363
  }
17364
+ function rmIfExists(filePath) {
17365
+ try {
17366
+ fs37.rmSync(filePath, { force: true });
17367
+ } catch {
17368
+ }
17369
+ }
17364
17370
  var claudeProvisioner = {
17365
17371
  write(auth, home) {
17372
+ const credentialsJson = path43.join(home, ".claude", ".credentials.json");
17366
17373
  if (auth.kind === "api_key") {
17374
+ rmIfExists(credentialsJson);
17367
17375
  return { ANTHROPIC_API_KEY: auth.value };
17368
17376
  }
17369
17377
  const value = auth.value.trim();
17370
17378
  const isJsonBlob = value.startsWith("{");
17371
17379
  if (isJsonBlob) {
17372
- writeFile0600(path43.join(home, ".claude", ".credentials.json"), value);
17380
+ writeFile0600(credentialsJson, value);
17381
+ } else {
17382
+ rmIfExists(credentialsJson);
17373
17383
  }
17374
17384
  const claudeJson = path43.join(home, ".claude.json");
17375
17385
  if (!fs37.existsSync(claudeJson)) {
@@ -17383,10 +17393,12 @@ var claudeProvisioner = {
17383
17393
  };
17384
17394
  var codexProvisioner = {
17385
17395
  write(auth, home) {
17396
+ const authJson = path43.join(home, ".codex", "auth.json");
17386
17397
  if (auth.kind === "api_key") {
17398
+ rmIfExists(authJson);
17387
17399
  return { OPENAI_API_KEY: auth.value };
17388
17400
  }
17389
- writeFile0600(path43.join(home, ".codex", "auth.json"), auth.value);
17401
+ writeFile0600(authJson, auth.value);
17390
17402
  return {};
17391
17403
  }
17392
17404
  };
@@ -17811,7 +17823,7 @@ async function autoUpgradeBeforeCriticalCommand() {
17811
17823
  if (process.env.NODE_ENV === "test") return;
17812
17824
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
17813
17825
  if (process.env.CI) return;
17814
- const current = true ? "2.43.0" : null;
17826
+ const current = true ? "2.43.2" : null;
17815
17827
  if (!current) return;
17816
17828
  const cache = readCache();
17817
17829
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -17828,7 +17840,7 @@ function checkForUpdates() {
17828
17840
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
17829
17841
  if (process.env.CI) return;
17830
17842
  if (!process.stdout.isTTY) return;
17831
- const current = true ? "2.43.0" : null;
17843
+ const current = true ? "2.43.2" : null;
17832
17844
  if (!current) return;
17833
17845
  const cache = readCache();
17834
17846
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -18266,7 +18278,7 @@ var defaultSpawner = (env, cwd, args2 = []) => (0, import_node_child_process14.s
18266
18278
  detached: false
18267
18279
  });
18268
18280
  function currentCliVersion() {
18269
- return true ? "2.43.0" : null;
18281
+ return true ? "2.43.2" : null;
18270
18282
  }
18271
18283
  function runCmd(cmd, args2, timeoutMs) {
18272
18284
  return new Promise((resolve7) => {
@@ -23464,6 +23476,7 @@ function createOneMRecovery(deps) {
23464
23476
  pending = { blocks };
23465
23477
  await deps.publishText(sp.question);
23466
23478
  await deps.publishSelectPrompt(sp.question, sp.options);
23479
+ await deps.publishAwaitingAnswer(sp.question, sp.options);
23467
23480
  deps.appendAgentReply(sp.question);
23468
23481
  deps.flushHistory();
23469
23482
  deps.log?.(`1M-context credits gate \u2014 recovery offered id=${commandId.slice(0, 8)}`);
@@ -23510,6 +23523,7 @@ function reconcileCumulative(existing, incoming) {
23510
23523
  }
23511
23524
 
23512
23525
  // src/agents/acp/onboarding.ts
23526
+ var import_child_process22 = require("child_process");
23513
23527
  var fs44 = __toESM(require("fs"));
23514
23528
  var os37 = __toESM(require("os"));
23515
23529
  var path51 = __toESM(require("path"));
@@ -23523,10 +23537,44 @@ var _onboardingSeam = {
23523
23537
  disabled: () => {
23524
23538
  const v = process.env.CODEAM_ONBOARDING_DISABLED;
23525
23539
  return !!v && v !== "0" && v.toLowerCase() !== "false";
23540
+ },
23541
+ /**
23542
+ * The `origin` remote URL for `cwd`, or null when there's no git repo /
23543
+ * remote. Seam so tests drive `resolveRepoName` without a real checkout.
23544
+ */
23545
+ gitRemoteUrl: (cwd) => {
23546
+ try {
23547
+ return (0, import_child_process22.execFileSync)("git", ["-C", cwd, "remote", "get-url", "origin"], {
23548
+ encoding: "utf8",
23549
+ stdio: ["ignore", "pipe", "ignore"],
23550
+ timeout: 2e3
23551
+ }).trim();
23552
+ } catch {
23553
+ return null;
23554
+ }
23526
23555
  }
23527
23556
  };
23557
+ function isUuid(s) {
23558
+ return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(s);
23559
+ }
23560
+ function repoNameFromRemoteUrl(url) {
23561
+ const m = url.trim().replace(/\.git$/, "").replace(/\/$/, "").match(/[/:]([^/]+)\/([^/]+)$/);
23562
+ return m ? m[2] : null;
23563
+ }
23564
+ function resolveRepoName(cwd) {
23565
+ if (cwd) {
23566
+ const url = _onboardingSeam.gitRemoteUrl(cwd);
23567
+ if (url) {
23568
+ const name = repoNameFromRemoteUrl(url);
23569
+ if (name) return name;
23570
+ }
23571
+ }
23572
+ const base = path51.basename(cwd || "");
23573
+ if (base && !isUuid(base)) return base;
23574
+ return "this project";
23575
+ }
23528
23576
  function buildOnboardingWelcome(cwd) {
23529
- const repo = path51.basename(cwd || "") || "this project";
23577
+ const repo = resolveRepoName(cwd);
23530
23578
  return [
23531
23579
  `Welcome to CodeAgent Mobile! \u{1F44B} You're now driving this agent from your phone \u2014 and it comes fully wired, zero setup:`,
23532
23580
  "",
@@ -23798,7 +23846,7 @@ function extractSelectPrompt(text) {
23798
23846
  var import_crypto5 = require("crypto");
23799
23847
 
23800
23848
  // src/services/turn-files/git-changeset.ts
23801
- var import_child_process22 = require("child_process");
23849
+ var import_child_process23 = require("child_process");
23802
23850
  var fs45 = __toESM(require("fs/promises"));
23803
23851
  var path52 = __toESM(require("path"));
23804
23852
  async function collectRepoChangeset(opts) {
@@ -23913,7 +23961,7 @@ function defaultRunGit(cwd, args2) {
23913
23961
  return new Promise((resolve7) => {
23914
23962
  let proc;
23915
23963
  try {
23916
- proc = (0, import_child_process22.spawn)("git", args2, { cwd, env: process.env });
23964
+ proc = (0, import_child_process23.spawn)("git", args2, { cwd, env: process.env });
23917
23965
  } catch {
23918
23966
  resolve7(null);
23919
23967
  return;
@@ -24953,6 +25001,10 @@ async function runAcpSession(opts) {
24953
25001
  currentIndex: 0,
24954
25002
  done: true
24955
25003
  }),
25004
+ // The button driver — mobile renders the tappable option from this
25005
+ // awaiting-answer event; the user's tap returns as a `select_option`
25006
+ // command, caught at the top of the select_option case by tryRecover.
25007
+ publishAwaitingAnswer: (prompt, options) => publisher.publishAwaitingAnswer({ questionId: (0, import_node_crypto7.randomUUID)(), prompt, options }),
24956
25008
  sendResult: (commandId, status2, result) => relay.sendResult(commandId, status2, result),
24957
25009
  appendAgentReply: (text) => history.appendAgentReply(text),
24958
25010
  flushHistory: () => void history.flush(),
@@ -27165,11 +27217,11 @@ async function logout() {
27165
27217
  var import_picocolors11 = __toESM(require("picocolors"));
27166
27218
 
27167
27219
  // src/services/providers/github-codespaces.ts
27168
- var import_child_process23 = require("child_process");
27220
+ var import_child_process24 = require("child_process");
27169
27221
  var import_util4 = require("util");
27170
27222
  var import_picocolors9 = __toESM(require("picocolors"));
27171
27223
  var path55 = __toESM(require("path"));
27172
- var execFileP6 = (0, import_util4.promisify)(import_child_process23.execFile);
27224
+ var execFileP6 = (0, import_util4.promisify)(import_child_process24.execFile);
27173
27225
  var MAX_BUFFER = 8 * 1024 * 1024;
27174
27226
  function resetStdinForChild() {
27175
27227
  if (process.stdin.isTTY) {
@@ -27213,7 +27265,7 @@ var GitHubCodespacesProvider = class {
27213
27265
  if (!isAuthed) {
27214
27266
  resetStdinForChild();
27215
27267
  await new Promise((resolve7, reject) => {
27216
- const proc = (0, import_child_process23.spawn)("gh", ["auth", "login", "-s", "codespace,repo,read:user"], {
27268
+ const proc = (0, import_child_process24.spawn)("gh", ["auth", "login", "-s", "codespace,repo,read:user"], {
27217
27269
  stdio: "inherit"
27218
27270
  });
27219
27271
  proc.on("exit", (code) => {
@@ -27247,7 +27299,7 @@ var GitHubCodespacesProvider = class {
27247
27299
  wt(noteLines.join("\n"), "One more permission needed");
27248
27300
  resetStdinForChild();
27249
27301
  const refreshCode = await new Promise((resolve7, reject) => {
27250
- const proc = (0, import_child_process23.spawn)(
27302
+ const proc = (0, import_child_process24.spawn)(
27251
27303
  "gh",
27252
27304
  ["auth", "refresh", "-h", "github.com", "-s", "codespace"],
27253
27305
  { stdio: "inherit" }
@@ -27397,7 +27449,7 @@ var GitHubCodespacesProvider = class {
27397
27449
  O2.step(`Installing gh via ${installCmd.describe}\u2026`);
27398
27450
  resetStdinForChild();
27399
27451
  const ok = await new Promise((resolve7) => {
27400
- const proc = (0, import_child_process23.spawn)(installCmd.exe, installCmd.args, { stdio: "inherit" });
27452
+ const proc = (0, import_child_process24.spawn)(installCmd.exe, installCmd.args, { stdio: "inherit" });
27401
27453
  proc.on("exit", (code) => resolve7(code === 0));
27402
27454
  proc.on("error", () => resolve7(false));
27403
27455
  });
@@ -27424,7 +27476,7 @@ var GitHubCodespacesProvider = class {
27424
27476
  );
27425
27477
  resetStdinForChild();
27426
27478
  await new Promise((resolve7, reject) => {
27427
- const proc = (0, import_child_process23.spawn)(
27479
+ const proc = (0, import_child_process24.spawn)(
27428
27480
  "gh",
27429
27481
  ["auth", "refresh", "-h", "github.com", "-s", "repo,read:org"],
27430
27482
  { stdio: "inherit" }
@@ -27602,7 +27654,7 @@ var GitHubCodespacesProvider = class {
27602
27654
  async streamCommand(workspaceId, command2) {
27603
27655
  resetStdinForChild();
27604
27656
  return new Promise((resolve7, reject) => {
27605
- const proc = (0, import_child_process23.spawn)(
27657
+ const proc = (0, import_child_process24.spawn)(
27606
27658
  "gh",
27607
27659
  ["codespace", "ssh", "-c", workspaceId, "--", "-tt", command2],
27608
27660
  { stdio: "inherit" }
@@ -27629,11 +27681,11 @@ var GitHubCodespacesProvider = class {
27629
27681
  `mkdir -p ${shellQuote(remoteDir)} && tar -xzf - -C ${shellQuote(remoteDir)}`
27630
27682
  ];
27631
27683
  await new Promise((resolve7, reject) => {
27632
- const tar = (0, import_child_process23.spawn)("tar", tarArgs, {
27684
+ const tar = (0, import_child_process24.spawn)("tar", tarArgs, {
27633
27685
  stdio: ["ignore", "pipe", "pipe"],
27634
27686
  env: tarEnv
27635
27687
  });
27636
- const ssh = (0, import_child_process23.spawn)("gh", sshArgs, {
27688
+ const ssh = (0, import_child_process24.spawn)("gh", sshArgs, {
27637
27689
  stdio: [tar.stdout, "pipe", "pipe"]
27638
27690
  });
27639
27691
  let tarErr = "";
@@ -27667,7 +27719,7 @@ var GitHubCodespacesProvider = class {
27667
27719
  }
27668
27720
  const cmd = parts.join(" && ");
27669
27721
  await new Promise((resolve7, reject) => {
27670
- const proc = (0, import_child_process23.spawn)(
27722
+ const proc = (0, import_child_process24.spawn)(
27671
27723
  "gh",
27672
27724
  ["codespace", "ssh", "-c", workspaceId, "--", cmd],
27673
27725
  { stdio: ["pipe", "pipe", "pipe"] }
@@ -27725,11 +27777,11 @@ function shellQuote(s) {
27725
27777
  }
27726
27778
 
27727
27779
  // src/services/providers/gitpod.ts
27728
- var import_child_process24 = require("child_process");
27780
+ var import_child_process25 = require("child_process");
27729
27781
  var import_util5 = require("util");
27730
27782
  var path56 = __toESM(require("path"));
27731
27783
  var import_picocolors10 = __toESM(require("picocolors"));
27732
- var execFileP7 = (0, import_util5.promisify)(import_child_process24.execFile);
27784
+ var execFileP7 = (0, import_util5.promisify)(import_child_process25.execFile);
27733
27785
  var MAX_BUFFER2 = 8 * 1024 * 1024;
27734
27786
  function resetStdinForChild2() {
27735
27787
  if (process.stdin.isTTY) {
@@ -27769,7 +27821,7 @@ var GitpodProvider = class {
27769
27821
  );
27770
27822
  resetStdinForChild2();
27771
27823
  await new Promise((resolve7, reject) => {
27772
- const proc = (0, import_child_process24.spawn)("gitpod", ["login"], { stdio: "inherit" });
27824
+ const proc = (0, import_child_process25.spawn)("gitpod", ["login"], { stdio: "inherit" });
27773
27825
  proc.on("exit", (code) => {
27774
27826
  if (code === 0) resolve7();
27775
27827
  else reject(new Error("gitpod login failed."));
@@ -27921,7 +27973,7 @@ var GitpodProvider = class {
27921
27973
  async streamCommand(workspaceId, command2) {
27922
27974
  resetStdinForChild2();
27923
27975
  return new Promise((resolve7, reject) => {
27924
- const proc = (0, import_child_process24.spawn)(
27976
+ const proc = (0, import_child_process25.spawn)(
27925
27977
  "gitpod",
27926
27978
  ["workspace", "ssh", workspaceId, "--", "-tt", command2],
27927
27979
  { stdio: "inherit" }
@@ -27941,11 +27993,11 @@ var GitpodProvider = class {
27941
27993
  const tarEnv = { ...process.env, COPYFILE_DISABLE: "1" };
27942
27994
  const remoteCmd = `mkdir -p ${shellQuote2(remoteDir)} && tar -xzf - -C ${shellQuote2(remoteDir)}`;
27943
27995
  await new Promise((resolve7, reject) => {
27944
- const tar = (0, import_child_process24.spawn)("tar", tarArgs, {
27996
+ const tar = (0, import_child_process25.spawn)("tar", tarArgs, {
27945
27997
  stdio: ["ignore", "pipe", "pipe"],
27946
27998
  env: tarEnv
27947
27999
  });
27948
- const ssh = (0, import_child_process24.spawn)(
28000
+ const ssh = (0, import_child_process25.spawn)(
27949
28001
  "gitpod",
27950
28002
  ["workspace", "ssh", workspaceId, "--", remoteCmd],
27951
28003
  { stdio: [tar.stdout, "pipe", "pipe"] }
@@ -27977,7 +28029,7 @@ var GitpodProvider = class {
27977
28029
  }
27978
28030
  const cmd = parts.join(" && ");
27979
28031
  await new Promise((resolve7, reject) => {
27980
- const proc = (0, import_child_process24.spawn)(
28032
+ const proc = (0, import_child_process25.spawn)(
27981
28033
  "gitpod",
27982
28034
  ["workspace", "ssh", workspaceId, "--", cmd],
27983
28035
  { stdio: ["pipe", "pipe", "pipe"] }
@@ -28001,10 +28053,10 @@ function shellQuote2(s) {
28001
28053
  }
28002
28054
 
28003
28055
  // src/services/providers/gitlab-workspaces.ts
28004
- var import_child_process25 = require("child_process");
28056
+ var import_child_process26 = require("child_process");
28005
28057
  var import_util6 = require("util");
28006
28058
  var path57 = __toESM(require("path"));
28007
- var execFileP8 = (0, import_util6.promisify)(import_child_process25.execFile);
28059
+ var execFileP8 = (0, import_util6.promisify)(import_child_process26.execFile);
28008
28060
  var MAX_BUFFER3 = 8 * 1024 * 1024;
28009
28061
  var GITLAB_API_BASE = process.env.CODEAM_GITLAB_API_URL ?? "https://gitlab.com/api/v4";
28010
28062
  function resetStdinForChild3() {
@@ -28046,7 +28098,7 @@ var GitLabWorkspacesProvider = class {
28046
28098
  );
28047
28099
  resetStdinForChild3();
28048
28100
  await new Promise((resolve7, reject) => {
28049
- const proc = (0, import_child_process25.spawn)(
28101
+ const proc = (0, import_child_process26.spawn)(
28050
28102
  "glab",
28051
28103
  ["auth", "login", "--scopes", "api,read_user,read_repository"],
28052
28104
  { stdio: "inherit" }
@@ -28218,7 +28270,7 @@ Docs: https://docs.gitlab.com/ee/user/workspace/configuration.html`
28218
28270
  const sshHost = process.env.CODEAM_GITLAB_SSH_HOST ?? "workspaces.gitlab.com";
28219
28271
  resetStdinForChild3();
28220
28272
  return new Promise((resolve7, reject) => {
28221
- const proc = (0, import_child_process25.spawn)(
28273
+ const proc = (0, import_child_process26.spawn)(
28222
28274
  "ssh",
28223
28275
  ["-tt", "-o", "StrictHostKeyChecking=accept-new", `${workspaceId}@${sshHost}`, command2],
28224
28276
  { stdio: "inherit" }
@@ -28239,8 +28291,8 @@ Docs: https://docs.gitlab.com/ee/user/workspace/configuration.html`
28239
28291
  const tarEnv = { ...process.env, COPYFILE_DISABLE: "1" };
28240
28292
  const remoteCmd = `mkdir -p ${shellQuote3(remoteDir)} && tar -xzf - -C ${shellQuote3(remoteDir)}`;
28241
28293
  await new Promise((resolve7, reject) => {
28242
- const tar = (0, import_child_process25.spawn)("tar", tarArgs, { stdio: ["ignore", "pipe", "pipe"], env: tarEnv });
28243
- const ssh = (0, import_child_process25.spawn)(
28294
+ const tar = (0, import_child_process26.spawn)("tar", tarArgs, { stdio: ["ignore", "pipe", "pipe"], env: tarEnv });
28295
+ const ssh = (0, import_child_process26.spawn)(
28244
28296
  "ssh",
28245
28297
  ["-o", "StrictHostKeyChecking=accept-new", `${workspaceId}@${sshHost}`, remoteCmd],
28246
28298
  { stdio: [tar.stdout, "pipe", "pipe"] }
@@ -28270,7 +28322,7 @@ Docs: https://docs.gitlab.com/ee/user/workspace/configuration.html`
28270
28322
  }
28271
28323
  const cmd = parts.join(" && ");
28272
28324
  await new Promise((resolve7, reject) => {
28273
- const proc = (0, import_child_process25.spawn)(
28325
+ const proc = (0, import_child_process26.spawn)(
28274
28326
  "ssh",
28275
28327
  ["-o", "StrictHostKeyChecking=accept-new", `${workspaceId}@${sshHost}`, cmd],
28276
28328
  { stdio: ["pipe", "pipe", "pipe"] }
@@ -28329,10 +28381,10 @@ function shellQuote3(s) {
28329
28381
  }
28330
28382
 
28331
28383
  // src/services/providers/railway.ts
28332
- var import_child_process26 = require("child_process");
28384
+ var import_child_process27 = require("child_process");
28333
28385
  var import_util7 = require("util");
28334
28386
  var path58 = __toESM(require("path"));
28335
- var execFileP9 = (0, import_util7.promisify)(import_child_process26.execFile);
28387
+ var execFileP9 = (0, import_util7.promisify)(import_child_process27.execFile);
28336
28388
  var MAX_BUFFER4 = 8 * 1024 * 1024;
28337
28389
  function resetStdinForChild4() {
28338
28390
  if (process.stdin.isTTY) {
@@ -28373,7 +28425,7 @@ var RailwayProvider = class {
28373
28425
  );
28374
28426
  resetStdinForChild4();
28375
28427
  await new Promise((resolve7, reject) => {
28376
- const proc = (0, import_child_process26.spawn)("railway", ["login"], { stdio: "inherit" });
28428
+ const proc = (0, import_child_process27.spawn)("railway", ["login"], { stdio: "inherit" });
28377
28429
  proc.on("exit", (code) => {
28378
28430
  if (code === 0) resolve7();
28379
28431
  else reject(new Error("railway login failed."));
@@ -28516,7 +28568,7 @@ var RailwayProvider = class {
28516
28568
  }
28517
28569
  resetStdinForChild4();
28518
28570
  return new Promise((resolve7, reject) => {
28519
- const proc = (0, import_child_process26.spawn)(
28571
+ const proc = (0, import_child_process27.spawn)(
28520
28572
  "railway",
28521
28573
  ["shell", "--project", projectId, "--service", serviceId, "--command", command2],
28522
28574
  { stdio: "inherit" }
@@ -28540,8 +28592,8 @@ var RailwayProvider = class {
28540
28592
  const tarEnv = { ...process.env, COPYFILE_DISABLE: "1" };
28541
28593
  const remoteCmd = `mkdir -p ${shellQuote4(remoteDir)} && tar -xzf - -C ${shellQuote4(remoteDir)}`;
28542
28594
  await new Promise((resolve7, reject) => {
28543
- const tar = (0, import_child_process26.spawn)("tar", tarArgs, { stdio: ["ignore", "pipe", "pipe"], env: tarEnv });
28544
- const sh = (0, import_child_process26.spawn)(
28595
+ const tar = (0, import_child_process27.spawn)("tar", tarArgs, { stdio: ["ignore", "pipe", "pipe"], env: tarEnv });
28596
+ const sh = (0, import_child_process27.spawn)(
28545
28597
  "railway",
28546
28598
  ["shell", "--project", projectId, "--service", serviceId, "--command", remoteCmd],
28547
28599
  { stdio: [tar.stdout, "pipe", "pipe"] }
@@ -28574,7 +28626,7 @@ var RailwayProvider = class {
28574
28626
  }
28575
28627
  const cmd = parts.join(" && ");
28576
28628
  await new Promise((resolve7, reject) => {
28577
- const proc = (0, import_child_process26.spawn)(
28629
+ const proc = (0, import_child_process27.spawn)(
28578
28630
  "railway",
28579
28631
  ["shell", "--project", projectId, "--service", serviceId, "--command", cmd],
28580
28632
  { stdio: ["pipe", "pipe", "pipe"] }
@@ -29324,7 +29376,7 @@ function checkChokidar() {
29324
29376
  }
29325
29377
  async function doctor(args2 = []) {
29326
29378
  const json = args2.includes("--json");
29327
- const cliVersion = true ? "2.43.0" : "0.0.0-dev";
29379
+ const cliVersion = true ? "2.43.2" : "0.0.0-dev";
29328
29380
  const apiBase2 = resolveApiBaseUrl();
29329
29381
  const diagnosticId = (0, import_node_crypto8.randomUUID)();
29330
29382
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -29523,7 +29575,7 @@ async function completion(args2) {
29523
29575
  // src/commands/version.ts
29524
29576
  var import_picocolors14 = __toESM(require("picocolors"));
29525
29577
  function version2() {
29526
- const v = true ? "2.43.0" : "unknown";
29578
+ const v = true ? "2.43.2" : "unknown";
29527
29579
  console.log(`${import_picocolors14.default.bold("codeam-cli")} ${import_picocolors14.default.cyan(v)}`);
29528
29580
  }
29529
29581
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.43.0",
3
+ "version": "2.43.2",
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",