codeam-cli 2.60.44 → 2.60.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 +23 -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.60.44] — 2026-07-10
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **cli:** Recover ACP adapter install-race crashes structurally, not by error-code list
|
|
12
|
+
|
|
7
13
|
## [2.60.43] — 2026-07-10
|
|
8
14
|
|
|
9
15
|
### Fixed
|
package/dist/index.js
CHANGED
|
@@ -5689,7 +5689,7 @@ function readAnonId() {
|
|
|
5689
5689
|
}
|
|
5690
5690
|
function superProperties() {
|
|
5691
5691
|
return {
|
|
5692
|
-
cliVersion: true ? "2.60.
|
|
5692
|
+
cliVersion: true ? "2.60.45" : "0.0.0-dev",
|
|
5693
5693
|
nodeVersion: process.version,
|
|
5694
5694
|
platform: process.platform,
|
|
5695
5695
|
arch: process.arch,
|
|
@@ -5870,7 +5870,7 @@ var os4 = __toESM(require("os"));
|
|
|
5870
5870
|
// package.json
|
|
5871
5871
|
var package_default = {
|
|
5872
5872
|
name: "codeam-cli",
|
|
5873
|
-
version: "2.60.
|
|
5873
|
+
version: "2.60.45",
|
|
5874
5874
|
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.",
|
|
5875
5875
|
type: "commonjs",
|
|
5876
5876
|
main: "dist/index.js",
|
|
@@ -6979,7 +6979,7 @@ var CommandRelayService = class {
|
|
|
6979
6979
|
// fresh + clear the "CLI update available" banner after a self-update
|
|
6980
6980
|
// (a codespace that reinstalls @latest reconnects via heartbeat, not
|
|
6981
6981
|
// pair/reconnect). Older backends ignore the extra field.
|
|
6982
|
-
..."2.60.
|
|
6982
|
+
..."2.60.45" ? { ideVersion: "2.60.45" } : {}
|
|
6983
6983
|
}).then(() => log.trace("relay", `heartbeat ok online=${online}`)).catch((err) => log.trace("relay", `heartbeat failed online=${online}`, err));
|
|
6984
6984
|
}
|
|
6985
6985
|
/**
|
|
@@ -17493,7 +17493,7 @@ async function autoUpgradeBeforeCriticalCommand() {
|
|
|
17493
17493
|
if (process.env.NODE_ENV === "test") return;
|
|
17494
17494
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
17495
17495
|
if (process.env.CI) return;
|
|
17496
|
-
const current = true ? "2.60.
|
|
17496
|
+
const current = true ? "2.60.45" : null;
|
|
17497
17497
|
if (!current) return;
|
|
17498
17498
|
const cache = readCache();
|
|
17499
17499
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -17510,7 +17510,7 @@ function checkForUpdates() {
|
|
|
17510
17510
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
17511
17511
|
if (process.env.CI) return;
|
|
17512
17512
|
if (!process.stdout.isTTY) return;
|
|
17513
|
-
const current = true ? "2.60.
|
|
17513
|
+
const current = true ? "2.60.45" : null;
|
|
17514
17514
|
if (!current) return;
|
|
17515
17515
|
const cache = readCache();
|
|
17516
17516
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -17530,7 +17530,7 @@ var SELF_UPDATE_INTERVAL_MS = 60 * 60 * 1e3;
|
|
|
17530
17530
|
var SELF_UPDATE_VIEW_TIMEOUT_MS = 3e4;
|
|
17531
17531
|
var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
|
|
17532
17532
|
function currentCliVersion() {
|
|
17533
|
-
return true ? "2.60.
|
|
17533
|
+
return true ? "2.60.45" : null;
|
|
17534
17534
|
}
|
|
17535
17535
|
function runCmd(cmd, args2, timeoutMs) {
|
|
17536
17536
|
return new Promise((resolve7) => {
|
|
@@ -27076,9 +27076,22 @@ var AcpClient = class {
|
|
|
27076
27076
|
}
|
|
27077
27077
|
if (u2.sessionUpdate === "tool_call_update" && (u2.status === "completed" || u2.status === "failed")) {
|
|
27078
27078
|
if (typeof u2.toolCallId === "string") this.pendingToolCalls.delete(u2.toolCallId);
|
|
27079
|
-
|
|
27079
|
+
this.rearmIdleIfIdle();
|
|
27080
27080
|
return;
|
|
27081
27081
|
}
|
|
27082
|
+
this.rearmIdleIfIdle();
|
|
27083
|
+
}
|
|
27084
|
+
/**
|
|
27085
|
+
* Re-arm the idle watchdog ONLY when the agent is genuinely idle — no tool
|
|
27086
|
+
* call in flight. A pending tool (a `yarn install` / build / test that runs
|
|
27087
|
+
* silently for minutes, emitting no `session/update`) is active work, NOT a
|
|
27088
|
+
* wedged adapter, so re-arming the 90s window over it would false-kill the
|
|
27089
|
+
* turn. Every re-arm MUST route through here so no path can accidentally arm
|
|
27090
|
+
* the watchdog while a tool is executing (the 2026-07-10 bug: the
|
|
27091
|
+
* auto-approve permission `finally` bumped unconditionally → a ~150s
|
|
27092
|
+
* `yarn install` tripped "ACP prompt idle for 90s").
|
|
27093
|
+
*/
|
|
27094
|
+
rearmIdleIfIdle() {
|
|
27082
27095
|
if (this.pendingToolCalls.size === 0) this.promptIdle?.bump();
|
|
27083
27096
|
}
|
|
27084
27097
|
// ─── Client surface (what the agent calls into) ───────────────────
|
|
@@ -27093,7 +27106,7 @@ var AcpClient = class {
|
|
|
27093
27106
|
try {
|
|
27094
27107
|
return await this.opts.onRequestPermission(params);
|
|
27095
27108
|
} finally {
|
|
27096
|
-
this.
|
|
27109
|
+
this.rearmIdleIfIdle();
|
|
27097
27110
|
}
|
|
27098
27111
|
},
|
|
27099
27112
|
readTextFile: async (params) => {
|
|
@@ -34678,7 +34691,7 @@ function checkChokidar() {
|
|
|
34678
34691
|
}
|
|
34679
34692
|
async function doctor(args2 = []) {
|
|
34680
34693
|
const json = args2.includes("--json");
|
|
34681
|
-
const cliVersion = true ? "2.60.
|
|
34694
|
+
const cliVersion = true ? "2.60.45" : "0.0.0-dev";
|
|
34682
34695
|
const apiBase2 = resolveApiBaseUrl();
|
|
34683
34696
|
const diagnosticId = (0, import_node_crypto12.randomUUID)();
|
|
34684
34697
|
log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
|
|
@@ -34877,7 +34890,7 @@ async function completion(args2) {
|
|
|
34877
34890
|
// src/commands/version.ts
|
|
34878
34891
|
var import_picocolors15 = __toESM(require("picocolors"));
|
|
34879
34892
|
function version2() {
|
|
34880
|
-
const v = true ? "2.60.
|
|
34893
|
+
const v = true ? "2.60.45" : "unknown";
|
|
34881
34894
|
console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
|
|
34882
34895
|
}
|
|
34883
34896
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeam-cli",
|
|
3
|
-
"version": "2.60.
|
|
3
|
+
"version": "2.60.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",
|