codeam-cli 2.75.16 → 2.75.17
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 +35 -10
- 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.16] — 2026-09-25
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **cli:** One-shots (Preview detect, summaries) run as the CURRENT agent, not the deploy one
|
|
12
|
+
|
|
7
13
|
## [2.75.15] — 2026-09-25
|
|
8
14
|
|
|
9
15
|
### Fixed
|
package/dist/index.js
CHANGED
|
@@ -10509,7 +10509,7 @@ function readAnonId() {
|
|
|
10509
10509
|
}
|
|
10510
10510
|
function superProperties() {
|
|
10511
10511
|
return {
|
|
10512
|
-
cliVersion: true ? "2.75.
|
|
10512
|
+
cliVersion: true ? "2.75.17" : "0.0.0-dev",
|
|
10513
10513
|
nodeVersion: process.version,
|
|
10514
10514
|
platform: process.platform,
|
|
10515
10515
|
arch: process.arch,
|
|
@@ -10751,7 +10751,7 @@ var http = __toESM(require("http"));
|
|
|
10751
10751
|
// package.json
|
|
10752
10752
|
var package_default = {
|
|
10753
10753
|
name: "codeam-cli",
|
|
10754
|
-
version: "2.75.
|
|
10754
|
+
version: "2.75.17",
|
|
10755
10755
|
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.",
|
|
10756
10756
|
type: "commonjs",
|
|
10757
10757
|
main: "dist/index.js",
|
|
@@ -12081,7 +12081,7 @@ var CommandRelayService = class _CommandRelayService {
|
|
|
12081
12081
|
// fresh + clear the "CLI update available" banner after a self-update
|
|
12082
12082
|
// (a codespace that reinstalls @latest reconnects via heartbeat, not
|
|
12083
12083
|
// pair/reconnect). Older backends ignore the extra field.
|
|
12084
|
-
..."2.75.
|
|
12084
|
+
..."2.75.17" ? { ideVersion: "2.75.17" } : {}
|
|
12085
12085
|
};
|
|
12086
12086
|
try {
|
|
12087
12087
|
const res = await _postJson(`${API_BASE2}/api/plugin/heartbeat`, body);
|
|
@@ -47616,7 +47616,7 @@ async function autoUpgradeBeforeCriticalCommand() {
|
|
|
47616
47616
|
if (process.env.NODE_ENV === "test") return;
|
|
47617
47617
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
47618
47618
|
if (process.env.CI) return;
|
|
47619
|
-
const current2 = true ? "2.75.
|
|
47619
|
+
const current2 = true ? "2.75.17" : null;
|
|
47620
47620
|
if (!current2) return;
|
|
47621
47621
|
const cache = readCache();
|
|
47622
47622
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -47633,7 +47633,7 @@ function checkForUpdates() {
|
|
|
47633
47633
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
47634
47634
|
if (process.env.CI) return;
|
|
47635
47635
|
if (!process.stdout.isTTY) return;
|
|
47636
|
-
const current2 = true ? "2.75.
|
|
47636
|
+
const current2 = true ? "2.75.17" : null;
|
|
47637
47637
|
if (!current2) return;
|
|
47638
47638
|
const cache = readCache();
|
|
47639
47639
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -47656,7 +47656,7 @@ var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
|
|
|
47656
47656
|
var SELF_UPDATE_LS_TIMEOUT_MS = 15e3;
|
|
47657
47657
|
var SUDO_PREFLIGHT_TIMEOUT_MS = 5e3;
|
|
47658
47658
|
function currentCliVersion() {
|
|
47659
|
-
return true ? "2.75.
|
|
47659
|
+
return true ? "2.75.17" : null;
|
|
47660
47660
|
}
|
|
47661
47661
|
async function installedVersion(deps) {
|
|
47662
47662
|
const ls = await deps.run(
|
|
@@ -47768,6 +47768,7 @@ var defaultDisableService = () => {
|
|
|
47768
47768
|
// src/commands/host-agent.ts
|
|
47769
47769
|
var HEARTBEAT_INTERVAL_MS = 2e4;
|
|
47770
47770
|
var RESUME_RETRY_BACKOFF_MS = [15e3, 3e4, 6e4, 12e4];
|
|
47771
|
+
var CRASH_RESPAWN_MIN_UPTIME_MS = 6e4;
|
|
47771
47772
|
var RESUME_REPROBE_INTERVAL_MS = 5 * 6e4;
|
|
47772
47773
|
var RESUME_HEALTHY_AFTER_MS = 10 * 6e4;
|
|
47773
47774
|
function isRefreshCredentialsPayload(p2) {
|
|
@@ -48846,8 +48847,9 @@ var HostAgentSupervisor = class {
|
|
|
48846
48847
|
proc.stdout?.on("data", appendTail);
|
|
48847
48848
|
proc.stderr?.on("data", appendTail);
|
|
48848
48849
|
report("agent_starting", "agent process started");
|
|
48849
|
-
proc.once("exit", (code) => {
|
|
48850
|
+
proc.once("exit", (code, signal) => {
|
|
48850
48851
|
const tracked = this.untrackChild(payload.deployId, proc);
|
|
48852
|
+
if (tracked && this.respawnCrashedChild(child, code, signal, tail)) return;
|
|
48851
48853
|
if (tracked) {
|
|
48852
48854
|
void reportSessionEvent(
|
|
48853
48855
|
{ hostId: this.identity.hostId, hostToken: this.identity.hostToken },
|
|
@@ -49008,11 +49010,15 @@ var HostAgentSupervisor = class {
|
|
|
49008
49010
|
proc.stdout?.on("data", appendTail);
|
|
49009
49011
|
proc.stderr?.on("data", appendTail);
|
|
49010
49012
|
proc.once("exit", (code, signal) => {
|
|
49011
|
-
this.untrackChild(deployId, proc);
|
|
49013
|
+
const tracked = this.untrackChild(deployId, proc);
|
|
49012
49014
|
if (typeof code === "number" && code !== 0) {
|
|
49013
49015
|
this.onResumeChildExit(target, code, tail.trim().slice(-300));
|
|
49014
49016
|
return;
|
|
49015
49017
|
}
|
|
49018
|
+
if (tracked && signal) {
|
|
49019
|
+
this.onResumeChildExit(target, 128 + (os62.constants.signals[signal] ?? 9), `signal ${signal}`);
|
|
49020
|
+
return;
|
|
49021
|
+
}
|
|
49016
49022
|
log.warn(
|
|
49017
49023
|
"host-agent",
|
|
49018
49024
|
`resumed session ${session.id.slice(0, 8)} exited ${signal ?? code ?? 0} without taking over \u2014 tail: ${tail.trim().slice(-300) || "(no output)"}`
|
|
@@ -49042,6 +49048,25 @@ var HostAgentSupervisor = class {
|
|
|
49042
49048
|
* ({@link resumeRecoveryTick}) so an externally-fixed cause heals without a
|
|
49043
49049
|
* manual restart.
|
|
49044
49050
|
*/
|
|
49051
|
+
/**
|
|
49052
|
+
* A deploy child that was UP (≥ {@link CRASH_RESPAWN_MIN_UPTIME_MS}) died on
|
|
49053
|
+
* its own → resume its paired session with the bounded retry path. Returns
|
|
49054
|
+
* false when it must be treated as before (early start failure, supervisor
|
|
49055
|
+
* stopping, or no saved paired session for that workspace).
|
|
49056
|
+
*/
|
|
49057
|
+
respawnCrashedChild(child, code, signal, tail) {
|
|
49058
|
+
if (this.stopped) return false;
|
|
49059
|
+
if (Date.now() - child.startedAt < CRASH_RESPAWN_MIN_UPTIME_MS) return false;
|
|
49060
|
+
const session = pickSavedSessionForWorkspace(this.listSavedSessions(), child.cwd);
|
|
49061
|
+
if (!session) return false;
|
|
49062
|
+
const exitCode = typeof code === "number" ? code : 128 + (signal ? os62.constants.signals[signal] ?? 9 : 9);
|
|
49063
|
+
log.warn(
|
|
49064
|
+
"host-agent",
|
|
49065
|
+
`session deploy=${child.deployId.slice(0, 8)} died (${signal ?? code}) after ${Math.round((Date.now() - child.startedAt) / 1e3)}s \u2014 respawning it (resume)`
|
|
49066
|
+
);
|
|
49067
|
+
this.onResumeChildExit({ deployId: child.deployId, cwd: child.cwd, session }, exitCode, tail.trim().slice(-300));
|
|
49068
|
+
return true;
|
|
49069
|
+
}
|
|
49045
49070
|
onResumeChildExit(target, code, detail) {
|
|
49046
49071
|
if (this.stopped) return;
|
|
49047
49072
|
const { session } = target;
|
|
@@ -49517,7 +49542,7 @@ function checkChokidar() {
|
|
|
49517
49542
|
}
|
|
49518
49543
|
async function doctor(args2 = []) {
|
|
49519
49544
|
const json = args2.includes("--json");
|
|
49520
|
-
const cliVersion = true ? "2.75.
|
|
49545
|
+
const cliVersion = true ? "2.75.17" : "0.0.0-dev";
|
|
49521
49546
|
const apiBase2 = resolveApiBaseUrl();
|
|
49522
49547
|
const diagnosticId = (0, import_node_crypto12.randomUUID)();
|
|
49523
49548
|
log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
|
|
@@ -50041,7 +50066,7 @@ async function mcpWarm(argv = [], opts = {}) {
|
|
|
50041
50066
|
// src/commands/version.ts
|
|
50042
50067
|
var import_picocolors15 = __toESM(require("picocolors"));
|
|
50043
50068
|
function version2() {
|
|
50044
|
-
const v = true ? "2.75.
|
|
50069
|
+
const v = true ? "2.75.17" : "unknown";
|
|
50045
50070
|
console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
|
|
50046
50071
|
}
|
|
50047
50072
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeam-cli",
|
|
3
|
-
"version": "2.75.
|
|
3
|
+
"version": "2.75.17",
|
|
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",
|