codeam-cli 2.53.1 → 2.53.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,12 @@ 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.53.1] — 2026-07-06
8
+
9
+ ### Fixed
10
+
11
+ - **cli:** Gate ACP adapter spawn on its JS module graph, not just its binary
12
+
7
13
  ## [2.53.0] — 2026-07-06
8
14
 
9
15
  ### 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.53.1" : "0.0.0-dev",
5400
+ cliVersion: true ? "2.53.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.53.1",
5581
+ version: "2.53.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",
@@ -6543,7 +6543,7 @@ var CommandRelayService = class {
6543
6543
  // fresh + clear the "CLI update available" banner after a self-update
6544
6544
  // (a codespace that reinstalls @latest reconnects via heartbeat, not
6545
6545
  // pair/reconnect). Older backends ignore the extra field.
6546
- ..."2.53.1" ? { ideVersion: "2.53.1" } : {}
6546
+ ..."2.53.2" ? { ideVersion: "2.53.2" } : {}
6547
6547
  }).then(() => log.trace("relay", `heartbeat ok online=${online}`)).catch((err) => log.trace("relay", `heartbeat failed online=${online}`, err));
6548
6548
  }
6549
6549
  /**
@@ -15023,7 +15023,7 @@ async function autoUpgradeBeforeCriticalCommand() {
15023
15023
  if (process.env.NODE_ENV === "test") return;
15024
15024
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
15025
15025
  if (process.env.CI) return;
15026
- const current = true ? "2.53.1" : null;
15026
+ const current = true ? "2.53.2" : null;
15027
15027
  if (!current) return;
15028
15028
  const cache = readCache();
15029
15029
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -15040,7 +15040,7 @@ function checkForUpdates() {
15040
15040
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
15041
15041
  if (process.env.CI) return;
15042
15042
  if (!process.stdout.isTTY) return;
15043
- const current = true ? "2.53.1" : null;
15043
+ const current = true ? "2.53.2" : null;
15044
15044
  if (!current) return;
15045
15045
  const cache = readCache();
15046
15046
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -15742,7 +15742,7 @@ var defaultSpawner = (env, cwd, args2 = []) => (0, import_node_child_process15.s
15742
15742
  detached: false
15743
15743
  });
15744
15744
  function currentCliVersion() {
15745
- return true ? "2.53.1" : null;
15745
+ return true ? "2.53.2" : null;
15746
15746
  }
15747
15747
  function runCmd(cmd, args2, timeoutMs) {
15748
15748
  return new Promise((resolve7) => {
@@ -16465,7 +16465,13 @@ async function configureHeadroom(action, ctx, deps) {
16465
16465
  return { enabled: false };
16466
16466
  }
16467
16467
  deps.persist({ enabled: true, agent: kind, ingestUrl: ctx.savingsIngestUrl });
16468
- deps.startReporter({ agent: kind, ingestUrl: ctx.savingsIngestUrl, pluginAuthToken: ctx.pluginAuthToken });
16468
+ if (ctx.pluginAuthToken) {
16469
+ deps.startReporter({
16470
+ agent: kind,
16471
+ ingestUrl: ctx.savingsIngestUrl,
16472
+ pluginAuthToken: ctx.pluginAuthToken
16473
+ });
16474
+ }
16469
16475
  deps.emit({ type: "headroom_status", state: "enabled" });
16470
16476
  return { enabled: true };
16471
16477
  }
@@ -26726,6 +26732,7 @@ function replyIsCursorUpgradeRequired(finalText) {
26726
26732
  return t2.includes("upgrade your plan to continue") || t2.includes("upgrade your plan") && t2.includes("continue");
26727
26733
  }
26728
26734
  var CURSOR_UPGRADE_MESSAGE = "\u26A1 **Cursor needs a paid plan to run the agent.**\n\nThe headless Cursor Agent requires Cursor **Pro** \u2014 your Free plan\u2019s included usage does NOT cover Agent runs, even with quota left. This is your Cursor account (not CodeAgent). Upgrade, then send your message again:\n\n[Upgrade to Cursor Pro \u2192](https://cursor.com/dashboard)";
26735
+ var ONE_M_CREDITS_MESSAGE = "\u{1F504} **Reconnect your Claude subscription to continue.**\n\nClaude requested 1M-context but your account doesn\u2019t have the usage credits for it on this credential. Reconnecting refreshes your subscription so the agent can keep going \u2014 disabling 1M context won\u2019t fix a credits gate.\n\nTap [Reconnect this agent](codeam://reauth) to reconnect your Claude subscription in Profile \u203A Agents, then send your message again.";
26729
26736
  var TURN_FAILURE_MESSAGE = "\u26A0\uFE0F **The agent hit an error and couldn\u2019t finish this turn.** Please send your message again.";
26730
26737
  var ACP_QUICK_REPLIES = ["Continue", "Yes, go ahead", "Explain"];
26731
26738
  var PROVIDER_OUTAGE_RE = /overloaded_error|\boverloaded\b|service[ _]unavailable|temporarily[ _]unavailable|(?:api error|http|status)[:\s]+(?:529|503|502|504)\b|\b(?:529|503|502|504)\b[^\n]{0,40}(?:overload|unavailable|gateway|upstream|server error)|bad gateway|gateway time-?out|upstream (?:error|connect|timeout)/i;
@@ -26825,6 +26832,9 @@ function failureBubble(opts) {
26825
26832
  if (looksLikeAuthFailure(opts.detail) || looksLikeAuthFailure(opts.recentStderr)) {
26826
26833
  return AUTH_FAILURE_MESSAGE;
26827
26834
  }
26835
+ if (looksLike1mContextCreditsError(opts.detail) || looksLike1mContextCreditsError(opts.recentStderr)) {
26836
+ return ONE_M_CREDITS_MESSAGE;
26837
+ }
26828
26838
  const budgetHaystack = `${opts.detail}
26829
26839
  ${opts.recentStderr}`;
26830
26840
  if (looksLikeBudgetExceeded(budgetHaystack)) {
@@ -27312,7 +27322,17 @@ async function handleCommand(cmd, client2, relay, acpSessionId, models, streamin
27312
27322
  log.info("acpRunner", `start_task \u2190 auth-failure-in-reply id=${cmd.id.slice(0, 8)}`);
27313
27323
  await relay.sendResult(cmd.id, "failed", { error: "agent reply reported auth failure" });
27314
27324
  } else if (shouldOfferOneMRecovery({ detail: "", recentStderr: recentStderr.join("\n"), finalText })) {
27315
- await oneMRecovery.offer(cmd.id, blocks);
27325
+ await streaming.closeWithBubble(ONE_M_CREDITS_MESSAGE);
27326
+ history.appendAgentReply(ONE_M_CREDITS_MESSAGE);
27327
+ void history.flush();
27328
+ turnFiles.flushTurn().catch((err) => {
27329
+ log.warn("acpRunner", `turnFiles.flushTurn failed: ${describeError(err)}`);
27330
+ });
27331
+ void reportCredentialInvalid(opts);
27332
+ log.info("acpRunner", `start_task \u2190 1m-credits-reconnect id=${cmd.id.slice(0, 8)}`);
27333
+ await relay.sendResult(cmd.id, "failed", {
27334
+ error: "agent reply reported 1M-context usage-credits gate"
27335
+ });
27316
27336
  } else {
27317
27337
  await streaming.closeTurnWithInteractiveDetection();
27318
27338
  const replyLine = formatAgentReplyLine(finalText);
@@ -27355,11 +27375,6 @@ ${recentStderr.join("\n")}`)
27355
27375
  ${recentStderr.join("\n")}`);
27356
27376
  return;
27357
27377
  }
27358
- if (shouldOfferOneMRecovery({ detail, recentStderr: recentStderr.join("\n"), finalText: "" })) {
27359
- await streaming.closeAll();
27360
- await oneMRecovery.offer(cmd.id, blocks);
27361
- return;
27362
- }
27363
27378
  const bubble = failureBubble({
27364
27379
  detail,
27365
27380
  recentStderr: recentStderr.join("\n"),
@@ -27373,7 +27388,7 @@ ${recentStderr.join("\n")}`);
27373
27388
  } else {
27374
27389
  await streaming.closeAll();
27375
27390
  }
27376
- if (bubble === AUTH_FAILURE_MESSAGE) {
27391
+ if (bubble === AUTH_FAILURE_MESSAGE || bubble === ONE_M_CREDITS_MESSAGE) {
27377
27392
  void reportCredentialInvalid(opts);
27378
27393
  }
27379
27394
  await relay.sendResult(cmd.id, "failed", { error: detail });
@@ -31609,7 +31624,7 @@ function checkChokidar() {
31609
31624
  }
31610
31625
  async function doctor(args2 = []) {
31611
31626
  const json = args2.includes("--json");
31612
- const cliVersion = true ? "2.53.1" : "0.0.0-dev";
31627
+ const cliVersion = true ? "2.53.2" : "0.0.0-dev";
31613
31628
  const apiBase2 = resolveApiBaseUrl();
31614
31629
  const diagnosticId = (0, import_node_crypto8.randomUUID)();
31615
31630
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -31808,7 +31823,7 @@ async function completion(args2) {
31808
31823
  // src/commands/version.ts
31809
31824
  var import_picocolors15 = __toESM(require("picocolors"));
31810
31825
  function version2() {
31811
- const v = true ? "2.53.1" : "unknown";
31826
+ const v = true ? "2.53.2" : "unknown";
31812
31827
  console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
31813
31828
  }
31814
31829
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.53.1",
3
+ "version": "2.53.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",