codeam-cli 2.61.2 → 2.61.3

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,18 @@ 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.61.2] — 2026-07-16
8
+
9
+ ### Added
10
+
11
+ - **shared:** Add fleet_box_ready user event
12
+ - **cli:** Host_list_dir — read-only directory browse for the deploy path picker
13
+
14
+ ### Tests
15
+
16
+ - **cli:** Host_list_dir handler (lists dir + failed path via relay result)
17
+ - **cli:** Host_list_dir failed-path assertion is cross-platform (path.resolve normalizes on Windows)
18
+
7
19
  ## [2.61.1] — 2026-07-15
8
20
 
9
21
  ### Documentation
package/dist/index.js CHANGED
@@ -5975,7 +5975,7 @@ function readAnonId() {
5975
5975
  }
5976
5976
  function superProperties() {
5977
5977
  return {
5978
- cliVersion: true ? "2.61.2" : "0.0.0-dev",
5978
+ cliVersion: true ? "2.61.3" : "0.0.0-dev",
5979
5979
  nodeVersion: process.version,
5980
5980
  platform: process.platform,
5981
5981
  arch: process.arch,
@@ -6156,7 +6156,7 @@ var os4 = __toESM(require("os"));
6156
6156
  // package.json
6157
6157
  var package_default = {
6158
6158
  name: "codeam-cli",
6159
- version: "2.61.2",
6159
+ version: "2.61.3",
6160
6160
  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.",
6161
6161
  type: "commonjs",
6162
6162
  main: "dist/index.js",
@@ -7299,7 +7299,7 @@ var CommandRelayService = class _CommandRelayService {
7299
7299
  // fresh + clear the "CLI update available" banner after a self-update
7300
7300
  // (a codespace that reinstalls @latest reconnects via heartbeat, not
7301
7301
  // pair/reconnect). Older backends ignore the extra field.
7302
- ..."2.61.2" ? { ideVersion: "2.61.2" } : {}
7302
+ ..."2.61.3" ? { ideVersion: "2.61.3" } : {}
7303
7303
  }).then(() => log.trace("relay", `heartbeat ok online=${online}`)).catch((err) => log.trace("relay", `heartbeat failed online=${online}`, err));
7304
7304
  }
7305
7305
  /**
@@ -13765,11 +13765,29 @@ async function ensureCoderabbitInstalled(os53) {
13765
13765
  }
13766
13766
  console.log("\n CodeRabbit CLI not found \u2014 installing via the official script\u2026\n");
13767
13767
  const ok = await new Promise((resolve8) => {
13768
- const proc = (0, import_node_child_process6.spawn)("sh", ["-c", `curl -fsSL ${INSTALL_URL} | sh`], {
13769
- stdio: "inherit"
13770
- });
13771
- proc.on("close", (code) => resolve8(code === 0));
13772
- proc.on("error", () => resolve8(false));
13768
+ const INSTALL_TIMEOUT_MS2 = 15e4;
13769
+ const proc = (0, import_node_child_process6.spawn)(
13770
+ "sh",
13771
+ ["-c", `curl -fsSL --connect-timeout 15 --max-time 120 ${INSTALL_URL} | sh`],
13772
+ { stdio: "inherit" }
13773
+ );
13774
+ let settled = false;
13775
+ const finish = (v) => {
13776
+ if (settled) return;
13777
+ settled = true;
13778
+ clearTimeout(timer);
13779
+ resolve8(v);
13780
+ };
13781
+ const timer = setTimeout(() => {
13782
+ console.error("\n \u2717 CodeRabbit install timed out \u2014 check network egress and retry.\n");
13783
+ try {
13784
+ proc.kill("SIGKILL");
13785
+ } catch {
13786
+ }
13787
+ finish(false);
13788
+ }, INSTALL_TIMEOUT_MS2);
13789
+ proc.on("close", (code) => finish(code === 0));
13790
+ proc.on("error", () => finish(false));
13773
13791
  });
13774
13792
  if (!ok) return false;
13775
13793
  os53.augmentPath([`${os53.homeDir()}/.local/bin`, "/opt/homebrew/bin"]);
@@ -17882,7 +17900,7 @@ async function autoUpgradeBeforeCriticalCommand() {
17882
17900
  if (process.env.NODE_ENV === "test") return;
17883
17901
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
17884
17902
  if (process.env.CI) return;
17885
- const current = true ? "2.61.2" : null;
17903
+ const current = true ? "2.61.3" : null;
17886
17904
  if (!current) return;
17887
17905
  const cache = readCache();
17888
17906
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -17899,7 +17917,7 @@ function checkForUpdates() {
17899
17917
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
17900
17918
  if (process.env.CI) return;
17901
17919
  if (!process.stdout.isTTY) return;
17902
- const current = true ? "2.61.2" : null;
17920
+ const current = true ? "2.61.3" : null;
17903
17921
  if (!current) return;
17904
17922
  const cache = readCache();
17905
17923
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -17919,7 +17937,7 @@ var SELF_UPDATE_INTERVAL_MS = 60 * 60 * 1e3;
17919
17937
  var SELF_UPDATE_VIEW_TIMEOUT_MS = 3e4;
17920
17938
  var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
17921
17939
  function currentCliVersion() {
17922
- return true ? "2.61.2" : null;
17940
+ return true ? "2.61.3" : null;
17923
17941
  }
17924
17942
  function runCmd(cmd, args2, timeoutMs) {
17925
17943
  return new Promise((resolve8) => {
@@ -18636,6 +18654,14 @@ var HostAgentSupervisor = class {
18636
18654
  // not the generic "my-server" or the ugly container cuid.
18637
18655
  "-e",
18638
18656
  "CODEAM_HOST_LABEL=CodeAgent Box",
18657
+ // The enroll token above is a SINGLE-USE bootstrap, but it lives in the
18658
+ // container's fixed env — it can't be stripped after first boot like the
18659
+ // self-hosted systemd unit does. This flag tells `resolveHostIdentity`
18660
+ // that on a restart (docker restart / reboot / fleet_start_box wake) an
18661
+ // expired-token redeem is EXPECTED: resume from the sealed identity
18662
+ // instead of dying with "token expired". Not a secret → plain KEY=value.
18663
+ "-e",
18664
+ "CODEAM_ENROLL_EPHEMERAL=1",
18639
18665
  resolveFleetBoxImage()
18640
18666
  ];
18641
18667
  const res = await this.docker.run(args2, {
@@ -19023,6 +19049,13 @@ async function resolveHostIdentity(enrollToken) {
19023
19049
  return identity;
19024
19050
  } catch (err) {
19025
19051
  if (isTerminalEnrollError(err)) {
19052
+ if (existing && process.env.CODEAM_ENROLL_EPHEMERAL === "1") {
19053
+ log.info(
19054
+ "host-agent",
19055
+ "ephemeral enroll token expired on restart; resuming from sealed identity"
19056
+ );
19057
+ return existing;
19058
+ }
19026
19059
  throw new Error(
19027
19060
  "Enrollment token expired or invalid \u2014 generate a new one in the app (Settings \u203A Servers \u203A Add server). Tokens expire after 15 minutes and are single-use.",
19028
19061
  { cause: err }
@@ -35632,7 +35665,7 @@ function checkChokidar() {
35632
35665
  }
35633
35666
  async function doctor(args2 = []) {
35634
35667
  const json = args2.includes("--json");
35635
- const cliVersion = true ? "2.61.2" : "0.0.0-dev";
35668
+ const cliVersion = true ? "2.61.3" : "0.0.0-dev";
35636
35669
  const apiBase2 = resolveApiBaseUrl();
35637
35670
  const diagnosticId = (0, import_node_crypto12.randomUUID)();
35638
35671
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -36143,7 +36176,7 @@ async function mcpRun(args2) {
36143
36176
  // src/commands/version.ts
36144
36177
  var import_picocolors15 = __toESM(require("picocolors"));
36145
36178
  function version2() {
36146
- const v = true ? "2.61.2" : "unknown";
36179
+ const v = true ? "2.61.3" : "unknown";
36147
36180
  console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
36148
36181
  }
36149
36182
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.61.2",
3
+ "version": "2.61.3",
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",