codeam-cli 2.75.44 → 2.75.45
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 +6 -0
- package/dist/index.js +25 -17
- package/package.json +1 -1
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.75.44] — 2026-09-27
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **cli:** Host-agent comes back after a self-update on codespaces and fleet boxes (#854)
|
|
12
|
+
|
|
7
13
|
## [2.75.43] — 2026-09-27
|
|
8
14
|
|
|
9
15
|
### Fixed
|
package/dist/index.js
CHANGED
|
@@ -10577,7 +10577,7 @@ function readAnonId() {
|
|
|
10577
10577
|
}
|
|
10578
10578
|
function superProperties() {
|
|
10579
10579
|
return {
|
|
10580
|
-
cliVersion: true ? "2.75.
|
|
10580
|
+
cliVersion: true ? "2.75.45" : "0.0.0-dev",
|
|
10581
10581
|
nodeVersion: process.version,
|
|
10582
10582
|
platform: process.platform,
|
|
10583
10583
|
arch: process.arch,
|
|
@@ -10822,7 +10822,7 @@ var http = __toESM(require("http"));
|
|
|
10822
10822
|
// package.json
|
|
10823
10823
|
var package_default = {
|
|
10824
10824
|
name: "codeam-cli",
|
|
10825
|
-
version: "2.75.
|
|
10825
|
+
version: "2.75.45",
|
|
10826
10826
|
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.",
|
|
10827
10827
|
type: "commonjs",
|
|
10828
10828
|
main: "dist/index.js",
|
|
@@ -12156,7 +12156,7 @@ var CommandRelayService = class _CommandRelayService {
|
|
|
12156
12156
|
// fresh + clear the "CLI update available" banner after a self-update
|
|
12157
12157
|
// (a codespace that reinstalls @latest reconnects via heartbeat, not
|
|
12158
12158
|
// pair/reconnect). Older backends ignore the extra field.
|
|
12159
|
-
..."2.75.
|
|
12159
|
+
..."2.75.45" ? { ideVersion: "2.75.45" } : {}
|
|
12160
12160
|
};
|
|
12161
12161
|
try {
|
|
12162
12162
|
const res = await _postJson(`${API_BASE2}/api/plugin/heartbeat`, body);
|
|
@@ -48963,7 +48963,7 @@ async function autoUpgradeBeforeCriticalCommand() {
|
|
|
48963
48963
|
if (process.env.NODE_ENV === "test") return;
|
|
48964
48964
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
48965
48965
|
if (process.env.CI) return;
|
|
48966
|
-
const current2 = true ? "2.75.
|
|
48966
|
+
const current2 = true ? "2.75.45" : null;
|
|
48967
48967
|
if (!current2) return;
|
|
48968
48968
|
const cache = readCache();
|
|
48969
48969
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -48980,7 +48980,7 @@ function checkForUpdates() {
|
|
|
48980
48980
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
48981
48981
|
if (process.env.CI) return;
|
|
48982
48982
|
if (!process.stdout.isTTY) return;
|
|
48983
|
-
const current2 = true ? "2.75.
|
|
48983
|
+
const current2 = true ? "2.75.45" : null;
|
|
48984
48984
|
if (!current2) return;
|
|
48985
48985
|
const cache = readCache();
|
|
48986
48986
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -49003,7 +49003,7 @@ var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
|
|
|
49003
49003
|
var SELF_UPDATE_LS_TIMEOUT_MS = 15e3;
|
|
49004
49004
|
var SUDO_PREFLIGHT_TIMEOUT_MS = 5e3;
|
|
49005
49005
|
function currentCliVersion() {
|
|
49006
|
-
return true ? "2.75.
|
|
49006
|
+
return true ? "2.75.45" : null;
|
|
49007
49007
|
}
|
|
49008
49008
|
async function installedVersion(deps) {
|
|
49009
49009
|
const ls = await deps.run(
|
|
@@ -49447,6 +49447,7 @@ var HostAgentSupervisor = class {
|
|
|
49447
49447
|
signalTree;
|
|
49448
49448
|
/** Resumes waiting for a left-behind daemon to die (see replaceOrphanedDaemon). */
|
|
49449
49449
|
pendingOrphanReplacements = 0;
|
|
49450
|
+
replacingOrphanFor = /* @__PURE__ */ new Set();
|
|
49450
49451
|
/**
|
|
49451
49452
|
* Per-session resume bookkeeping (codeagent-v07a: N sessions resume on
|
|
49452
49453
|
* boot, each with its OWN bounded retries / exhaustion / re-probe throttle —
|
|
@@ -50318,7 +50319,7 @@ var HostAgentSupervisor = class {
|
|
|
50318
50319
|
const records = this.sessionStore.load();
|
|
50319
50320
|
if (records === null) {
|
|
50320
50321
|
const target = this.fallbackResumeTarget();
|
|
50321
|
-
if (target) this.
|
|
50322
|
+
if (target) this.resumeOne(target);
|
|
50322
50323
|
return;
|
|
50323
50324
|
}
|
|
50324
50325
|
if (records.length === 0) return;
|
|
@@ -50345,7 +50346,7 @@ var HostAgentSupervisor = class {
|
|
|
50345
50346
|
);
|
|
50346
50347
|
continue;
|
|
50347
50348
|
}
|
|
50348
|
-
this.
|
|
50349
|
+
this.resumeOne({ deployId: rec.deployId, cwd: rec.cwd, session, agent: rec.agent });
|
|
50349
50350
|
resumed += 1;
|
|
50350
50351
|
}
|
|
50351
50352
|
log.info(
|
|
@@ -50462,18 +50463,23 @@ var HostAgentSupervisor = class {
|
|
|
50462
50463
|
}
|
|
50463
50464
|
}
|
|
50464
50465
|
/**
|
|
50465
|
-
* Resume `target`
|
|
50466
|
-
*
|
|
50466
|
+
* Resume `target` (boot, `self_hosted_resume`, retry or re-probe) — first
|
|
50467
|
+
* retiring a daemon the PREVIOUS host-agent left holding the session, if
|
|
50468
|
+
* there is one. ⚠️ Every entry point must come through here: the v2.75.43
|
|
50469
|
+
* check sat on the boot path only, and the QA codespace's session came back
|
|
50470
|
+
* through `self_hosted_resume` instead, which deferred to the orphan again. Without this the resume child
|
|
50467
50471
|
* defers to that orphan (it holds the daemon lock and is alive), so the
|
|
50468
50472
|
* session keeps running the old code with dead stdio pipes — on 2.75.41 and
|
|
50469
50473
|
* older that wedged it offline for good (see `orphanedSupervisorDaemon`).
|
|
50470
50474
|
* Replacing it matches what systemd already does on a self-hosted box,
|
|
50471
50475
|
* where a unit restart kills the whole control group.
|
|
50472
50476
|
*/
|
|
50473
|
-
|
|
50477
|
+
resumeOne(target) {
|
|
50478
|
+
if (this.children.has(target.deployId)) return;
|
|
50479
|
+
if (this.replacingOrphanFor.has(target.deployId)) return;
|
|
50474
50480
|
const orphan = this.orphanedDaemonFor(target.session.id);
|
|
50475
50481
|
if (orphan === void 0) {
|
|
50476
|
-
this.
|
|
50482
|
+
this.spawnResume(target);
|
|
50477
50483
|
return;
|
|
50478
50484
|
}
|
|
50479
50485
|
log.warn(
|
|
@@ -50481,18 +50487,20 @@ var HostAgentSupervisor = class {
|
|
|
50481
50487
|
`resume: session ${target.session.id.slice(0, 8)} is held by pid ${orphan}, left behind by the previous host-agent \u2014 replacing it`
|
|
50482
50488
|
);
|
|
50483
50489
|
this.pendingOrphanReplacements += 1;
|
|
50490
|
+
this.replacingOrphanFor.add(target.deployId);
|
|
50484
50491
|
const tree = this.snapshotTree(orphan);
|
|
50485
50492
|
this.signalTree(tree.slice(0, 1), "SIGTERM");
|
|
50486
50493
|
setTimeout(() => {
|
|
50487
50494
|
this.signalTree(tree, "SIGKILL");
|
|
50488
50495
|
setTimeout(() => {
|
|
50489
50496
|
this.pendingOrphanReplacements -= 1;
|
|
50490
|
-
|
|
50497
|
+
this.replacingOrphanFor.delete(target.deployId);
|
|
50498
|
+
if (!this.stopped) this.spawnResume(target);
|
|
50491
50499
|
}, ORPHAN_KILL_SETTLE_MS);
|
|
50492
50500
|
}, ORPHAN_TERM_GRACE_MS);
|
|
50493
50501
|
}
|
|
50494
|
-
/** Spawn ONE resume child for `target
|
|
50495
|
-
|
|
50502
|
+
/** Spawn ONE resume child for `target`. Callers go through {@link resumeOne}. */
|
|
50503
|
+
spawnResume(target) {
|
|
50496
50504
|
const { session, deployId } = target;
|
|
50497
50505
|
if (this.children.has(deployId)) return;
|
|
50498
50506
|
const st3 = this.resumeStateFor(target);
|
|
@@ -51050,7 +51058,7 @@ function checkChokidar() {
|
|
|
51050
51058
|
}
|
|
51051
51059
|
async function doctor(args2 = []) {
|
|
51052
51060
|
const json = args2.includes("--json");
|
|
51053
|
-
const cliVersion = true ? "2.75.
|
|
51061
|
+
const cliVersion = true ? "2.75.45" : "0.0.0-dev";
|
|
51054
51062
|
const apiBase2 = resolveApiBaseUrl();
|
|
51055
51063
|
const diagnosticId = (0, import_node_crypto13.randomUUID)();
|
|
51056
51064
|
log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
|
|
@@ -51574,7 +51582,7 @@ async function mcpWarm(argv = [], opts = {}) {
|
|
|
51574
51582
|
// src/commands/version.ts
|
|
51575
51583
|
var import_picocolors15 = __toESM(require("picocolors"));
|
|
51576
51584
|
function version2() {
|
|
51577
|
-
const v = true ? "2.75.
|
|
51585
|
+
const v = true ? "2.75.45" : "unknown";
|
|
51578
51586
|
console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
|
|
51579
51587
|
}
|
|
51580
51588
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeam-cli",
|
|
3
|
-
"version": "2.75.
|
|
3
|
+
"version": "2.75.45",
|
|
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",
|