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 +12 -0
- package/dist/index.js +46 -13
- package/package.json +1 -1
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.
|
|
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.
|
|
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.
|
|
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
|
|
13769
|
-
|
|
13770
|
-
|
|
13771
|
-
|
|
13772
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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",
|