codeam-cli 2.67.0 → 2.67.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.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,16 @@ 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.67.0] — 2026-08-24
8
+
9
+ ### Added
10
+
11
+ - **cli:** Ask the backend for a named preview tunnel when the env has none
12
+
13
+ ### Fixed
14
+
15
+ - **cli:** Cap how long a self-update restart can be deferred
16
+
7
17
  ## [2.66.1] — 2026-08-24
8
18
 
9
19
  ### Fixed
package/dist/index.js CHANGED
@@ -8081,7 +8081,7 @@ function readAnonId() {
8081
8081
  }
8082
8082
  function superProperties() {
8083
8083
  return {
8084
- cliVersion: true ? "2.67.0" : "0.0.0-dev",
8084
+ cliVersion: true ? "2.67.1" : "0.0.0-dev",
8085
8085
  nodeVersion: process.version,
8086
8086
  platform: process.platform,
8087
8087
  arch: process.arch,
@@ -8323,7 +8323,7 @@ var http = __toESM(require("http"));
8323
8323
  // package.json
8324
8324
  var package_default = {
8325
8325
  name: "codeam-cli",
8326
- version: "2.67.0",
8326
+ version: "2.67.1",
8327
8327
  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.",
8328
8328
  type: "commonjs",
8329
8329
  main: "dist/index.js",
@@ -9855,7 +9855,7 @@ var CommandRelayService = class _CommandRelayService {
9855
9855
  // fresh + clear the "CLI update available" banner after a self-update
9856
9856
  // (a codespace that reinstalls @latest reconnects via heartbeat, not
9857
9857
  // pair/reconnect). Older backends ignore the extra field.
9858
- ..."2.67.0" ? { ideVersion: "2.67.0" } : {}
9858
+ ..."2.67.1" ? { ideVersion: "2.67.1" } : {}
9859
9859
  }).then(() => log.trace("relay", `heartbeat ok online=${online}`)).catch((err) => log.trace("relay", `heartbeat failed online=${online}`, err));
9860
9860
  }
9861
9861
  /**
@@ -22080,7 +22080,7 @@ async function autoUpgradeBeforeCriticalCommand() {
22080
22080
  if (process.env.NODE_ENV === "test") return;
22081
22081
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
22082
22082
  if (process.env.CI) return;
22083
- const current2 = true ? "2.67.0" : null;
22083
+ const current2 = true ? "2.67.1" : null;
22084
22084
  if (!current2) return;
22085
22085
  const cache = readCache();
22086
22086
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -22097,7 +22097,7 @@ function checkForUpdates() {
22097
22097
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
22098
22098
  if (process.env.CI) return;
22099
22099
  if (!process.stdout.isTTY) return;
22100
- const current2 = true ? "2.67.0" : null;
22100
+ const current2 = true ? "2.67.1" : null;
22101
22101
  if (!current2) return;
22102
22102
  const cache = readCache();
22103
22103
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -22120,7 +22120,7 @@ var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
22120
22120
  var SELF_UPDATE_LS_TIMEOUT_MS = 15e3;
22121
22121
  var SUDO_PREFLIGHT_TIMEOUT_MS = 5e3;
22122
22122
  function currentCliVersion() {
22123
- return true ? "2.67.0" : null;
22123
+ return true ? "2.67.1" : null;
22124
22124
  }
22125
22125
  async function installedVersion(deps) {
22126
22126
  const ls = await deps.run(
@@ -37436,8 +37436,14 @@ var HOUSE_AGENT_LIMIT_RE = /HOUSE_AGENT_CEILING|CodeAgent Cloud[^\n]{0,60}(?:usa
37436
37436
  function looksLikeHouseAgentLimit(text) {
37437
37437
  return HOUSE_AGENT_LIMIT_RE.test(text);
37438
37438
  }
37439
+ var LOCAL_PROXY_RE = /(?:127\.0\.0\.1|localhost|\[::1\]):\d+/i;
37440
+ var CONNECTION_ERROR_RE = /ECONNREFUSED|ECONNRESET|ETIMEDOUT|EHOSTUNREACH|socket hang up|fetch failed|network error|connection (?:refused|reset|closed)/i;
37441
+ function looksLikeLocalProxyUnavailable(text) {
37442
+ return LOCAL_PROXY_RE.test(text) && CONNECTION_ERROR_RE.test(text);
37443
+ }
37439
37444
  function looksLikeAuthFailure(text) {
37440
37445
  if (looksLikeHouseAgentLimit(text)) return false;
37446
+ if (looksLikeLocalProxyUnavailable(text)) return false;
37441
37447
  return AUTH_FAILURE_RE.test(text);
37442
37448
  }
37443
37449
  function replyIsAuthFailure(finalText) {
@@ -37455,7 +37461,14 @@ function houseAgentLimitMessage(text) {
37455
37461
  const canUpgrade = /upgrade to pro/i.test(text);
37456
37462
  return "\u{1F4CA} **You\u2019ve reached your daily CodeAgent Cloud limit.**\n\nThe free CodeAgent Cloud agent has a daily usage ceiling that resets at midnight UTC. This is a usage limit, not a problem with your login \u2014 re-authenticating won\u2019t change it. " + (canUpgrade ? "To keep going now, upgrade to **Pro** for a higher ceiling, or connect your own agent (Claude, Codex, \u2026) in **Profile \u203A Agents** to run without this limit." : "To keep going now, connect your own agent (Claude, Codex, \u2026) in **Profile \u203A Agents** to run without this limit, or wait for the reset.");
37457
37463
  }
37458
- var AUTH_FAILURE_MESSAGE = "\u{1F512} **Authentication failed \u2014 your agent credentials are invalid or expired (API 401).**\n\nTap [Re-authenticate this agent](codeam://reauth) to renew your credentials in Profile \u203A Agents, then send your message again.";
37464
+ var AUTH_FAILURE_MESSAGE = (
37465
+ // ⚠️ Do NOT name a status code here. This bubble fires for several
37466
+ // different failures, and the old hard-coded "(API 401)" told users the API
37467
+ // had answered 401 when it never had — it also sent a live investigation
37468
+ // hunting for 401s in proxy logs that were serving 200s throughout
37469
+ // (2026-08-24). Say what happened, not a number we did not see.
37470
+ "\u{1F512} **Authentication failed \u2014 your agent credentials are invalid or expired.**\n\nTap [Re-authenticate this agent](codeam://reauth) to renew your credentials in Profile \u203A Agents, then send your message again."
37471
+ );
37459
37472
  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)";
37460
37473
  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.";
37461
37474
  var TURN_FAILURE_MESSAGE = "\u26A0\uFE0F **The agent hit an error and couldn\u2019t finish this turn.** Please send your message again.";
@@ -37553,6 +37566,10 @@ async function reportCredentialInvalid(opts, fetchImpl = fetch) {
37553
37566
  pluginId: opts.pluginId,
37554
37567
  ...opts.reason ? { reason: opts.reason } : {}
37555
37568
  });
37569
+ log.info(
37570
+ "acpRunner",
37571
+ `credential-invalid \u2192 reporting agent=${opts.agent} reason=${opts.reason ?? "unspecified"}`
37572
+ );
37556
37573
  try {
37557
37574
  const makeHeaders = (token) => ({
37558
37575
  "Content-Type": "application/json",
@@ -37570,10 +37587,21 @@ async function reportCredentialInvalid(opts, fetchImpl = fetch) {
37570
37587
  opts.pollSecret
37571
37588
  );
37572
37589
  if (freshToken !== null) {
37573
- await fetchImpl(url2, { method: "POST", headers: makeHeaders(freshToken), body });
37590
+ const retried = await fetchImpl(url2, {
37591
+ method: "POST",
37592
+ headers: makeHeaders(freshToken),
37593
+ body
37594
+ });
37595
+ log.info("acpRunner", `credential-invalid \u2190 ${retried.status} (after token refresh)`);
37596
+ return;
37574
37597
  }
37575
37598
  }
37576
- } catch {
37599
+ log.info("acpRunner", `credential-invalid \u2190 ${response.status}`);
37600
+ } catch (err) {
37601
+ log.warn(
37602
+ "acpRunner",
37603
+ `credential-invalid \u2192 failed: ${err instanceof Error ? err.message : String(err)}`
37604
+ );
37577
37605
  }
37578
37606
  }
37579
37607
  async function postCredentialSync(opts, fetchImpl = fetch) {
@@ -45724,7 +45752,7 @@ function checkChokidar() {
45724
45752
  }
45725
45753
  async function doctor(args2 = []) {
45726
45754
  const json = args2.includes("--json");
45727
- const cliVersion = true ? "2.67.0" : "0.0.0-dev";
45755
+ const cliVersion = true ? "2.67.1" : "0.0.0-dev";
45728
45756
  const apiBase2 = resolveApiBaseUrl();
45729
45757
  const diagnosticId = (0, import_node_crypto13.randomUUID)();
45730
45758
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -46115,7 +46143,7 @@ async function mcpRun(args2) {
46115
46143
  // src/commands/version.ts
46116
46144
  var import_picocolors15 = __toESM(require("picocolors"));
46117
46145
  function version2() {
46118
- const v = true ? "2.67.0" : "unknown";
46146
+ const v = true ? "2.67.1" : "unknown";
46119
46147
  console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
46120
46148
  }
46121
46149
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.67.0",
3
+ "version": "2.67.1",
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",