codeam-cli 2.73.2 → 2.73.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 +10 -0
- package/dist/index.js +41 -20
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,16 @@ 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.73.2] — 2026-09-02
|
|
8
|
+
|
|
9
|
+
### CI
|
|
10
|
+
|
|
11
|
+
- **release:** Publish the release notes to #changelog and Discussions (#680)
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
|
|
15
|
+
- **cli:** An MCP reprovision burst must not kill the session (#682)
|
|
16
|
+
|
|
7
17
|
## [2.73.1] — 2026-09-02
|
|
8
18
|
|
|
9
19
|
### Added
|
package/dist/index.js
CHANGED
|
@@ -8097,7 +8097,7 @@ function readAnonId() {
|
|
|
8097
8097
|
}
|
|
8098
8098
|
function superProperties() {
|
|
8099
8099
|
return {
|
|
8100
|
-
cliVersion: true ? "2.73.
|
|
8100
|
+
cliVersion: true ? "2.73.3" : "0.0.0-dev",
|
|
8101
8101
|
nodeVersion: process.version,
|
|
8102
8102
|
platform: process.platform,
|
|
8103
8103
|
arch: process.arch,
|
|
@@ -8339,7 +8339,7 @@ var http = __toESM(require("http"));
|
|
|
8339
8339
|
// package.json
|
|
8340
8340
|
var package_default = {
|
|
8341
8341
|
name: "codeam-cli",
|
|
8342
|
-
version: "2.73.
|
|
8342
|
+
version: "2.73.3",
|
|
8343
8343
|
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.",
|
|
8344
8344
|
type: "commonjs",
|
|
8345
8345
|
main: "dist/index.js",
|
|
@@ -9932,7 +9932,7 @@ var CommandRelayService = class _CommandRelayService {
|
|
|
9932
9932
|
// fresh + clear the "CLI update available" banner after a self-update
|
|
9933
9933
|
// (a codespace that reinstalls @latest reconnects via heartbeat, not
|
|
9934
9934
|
// pair/reconnect). Older backends ignore the extra field.
|
|
9935
|
-
..."2.73.
|
|
9935
|
+
..."2.73.3" ? { ideVersion: "2.73.3" } : {}
|
|
9936
9936
|
}).then(() => log.trace("relay", `heartbeat ok online=${online}`)).catch((err) => log.trace("relay", `heartbeat failed online=${online}`, err));
|
|
9937
9937
|
}
|
|
9938
9938
|
/**
|
|
@@ -22208,7 +22208,7 @@ async function autoUpgradeBeforeCriticalCommand() {
|
|
|
22208
22208
|
if (process.env.NODE_ENV === "test") return;
|
|
22209
22209
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
22210
22210
|
if (process.env.CI) return;
|
|
22211
|
-
const current2 = true ? "2.73.
|
|
22211
|
+
const current2 = true ? "2.73.3" : null;
|
|
22212
22212
|
if (!current2) return;
|
|
22213
22213
|
const cache = readCache();
|
|
22214
22214
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -22225,7 +22225,7 @@ function checkForUpdates() {
|
|
|
22225
22225
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
22226
22226
|
if (process.env.CI) return;
|
|
22227
22227
|
if (!process.stdout.isTTY) return;
|
|
22228
|
-
const current2 = true ? "2.73.
|
|
22228
|
+
const current2 = true ? "2.73.3" : null;
|
|
22229
22229
|
if (!current2) return;
|
|
22230
22230
|
const cache = readCache();
|
|
22231
22231
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -22248,7 +22248,7 @@ var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
|
|
|
22248
22248
|
var SELF_UPDATE_LS_TIMEOUT_MS = 15e3;
|
|
22249
22249
|
var SUDO_PREFLIGHT_TIMEOUT_MS = 5e3;
|
|
22250
22250
|
function currentCliVersion() {
|
|
22251
|
-
return true ? "2.73.
|
|
22251
|
+
return true ? "2.73.3" : null;
|
|
22252
22252
|
}
|
|
22253
22253
|
async function installedVersion(deps) {
|
|
22254
22254
|
const ls = await deps.run(
|
|
@@ -35684,6 +35684,7 @@ var CLIENT_CAPABILITIES = {
|
|
|
35684
35684
|
fs: { readTextFile: true, writeTextFile: true },
|
|
35685
35685
|
terminal: false
|
|
35686
35686
|
};
|
|
35687
|
+
var MCP_REPROVISION_DEBOUNCE_MS = 1e4;
|
|
35687
35688
|
var AcpClient = class {
|
|
35688
35689
|
constructor(opts) {
|
|
35689
35690
|
this.opts = opts;
|
|
@@ -35756,8 +35757,9 @@ var AcpClient = class {
|
|
|
35756
35757
|
/** True once a start has fully succeeded (handshake + session). Distinguishes
|
|
35757
35758
|
* "never started" (a programming error) from "the adapter died" (recoverable). */
|
|
35758
35759
|
startedOnce = false;
|
|
35759
|
-
mcpReprovisionQueued = false;
|
|
35760
35760
|
mcpReprovisionPending = null;
|
|
35761
|
+
mcpDebounceTimer = null;
|
|
35762
|
+
mcpDebounceWaiters = [];
|
|
35761
35763
|
/** Last few adapter stderr lines — so a startup failure surfaces the REAL
|
|
35762
35764
|
* cause (e.g. gemini's `IneligibleTierError`) instead of a bare timeout. */
|
|
35763
35765
|
recentStderr = [];
|
|
@@ -36268,19 +36270,30 @@ var AcpClient = class {
|
|
|
36268
36270
|
this.opts.mcpServers = servers;
|
|
36269
36271
|
if (!this.connection || !this.sessionId) return "deferred";
|
|
36270
36272
|
this.mcpReprovisionPending = servers;
|
|
36271
|
-
if (this.
|
|
36272
|
-
|
|
36273
|
-
|
|
36274
|
-
|
|
36273
|
+
if (this.mcpDebounceTimer) clearTimeout(this.mcpDebounceTimer);
|
|
36274
|
+
const settled = new Promise((resolve11) => {
|
|
36275
|
+
this.mcpDebounceWaiters.push(resolve11);
|
|
36276
|
+
});
|
|
36277
|
+
this.mcpDebounceTimer = setTimeout(() => {
|
|
36278
|
+
this.mcpDebounceTimer = null;
|
|
36275
36279
|
const latest = this.mcpReprovisionPending ?? servers;
|
|
36276
36280
|
this.mcpReprovisionPending = null;
|
|
36277
|
-
|
|
36278
|
-
|
|
36279
|
-
|
|
36280
|
-
|
|
36281
|
-
|
|
36282
|
-
|
|
36283
|
-
|
|
36281
|
+
const waiters = this.mcpDebounceWaiters;
|
|
36282
|
+
this.mcpDebounceWaiters = [];
|
|
36283
|
+
const run = this.promptChain.then(() => this.runReprovisionMcp(latest));
|
|
36284
|
+
this.promptChain = run.then(
|
|
36285
|
+
() => void 0,
|
|
36286
|
+
() => void 0
|
|
36287
|
+
);
|
|
36288
|
+
run.then(
|
|
36289
|
+
(result) => waiters.forEach((w3) => w3(result)),
|
|
36290
|
+
// `runReprovisionMcp` already swallows its own failures into
|
|
36291
|
+
// 'deferred'; this is the belt for anything the chain itself throws.
|
|
36292
|
+
() => waiters.forEach((w3) => w3("deferred"))
|
|
36293
|
+
);
|
|
36294
|
+
}, this.opts.mcpReprovisionDebounceMs ?? MCP_REPROVISION_DEBOUNCE_MS);
|
|
36295
|
+
this.mcpDebounceTimer.unref?.();
|
|
36296
|
+
return settled;
|
|
36284
36297
|
}
|
|
36285
36298
|
/** The actual respawn. Only ever called from {@link reprovisionMcp}'s queued
|
|
36286
36299
|
* slot, so it can assume no turn and no other respawn is running. */
|
|
@@ -36480,6 +36493,14 @@ var AcpClient = class {
|
|
|
36480
36493
|
*/
|
|
36481
36494
|
async stop() {
|
|
36482
36495
|
this.stopping = true;
|
|
36496
|
+
if (this.mcpDebounceTimer) {
|
|
36497
|
+
clearTimeout(this.mcpDebounceTimer);
|
|
36498
|
+
this.mcpDebounceTimer = null;
|
|
36499
|
+
this.mcpReprovisionPending = null;
|
|
36500
|
+
const waiters = this.mcpDebounceWaiters;
|
|
36501
|
+
this.mcpDebounceWaiters = [];
|
|
36502
|
+
waiters.forEach((w3) => w3("deferred"));
|
|
36503
|
+
}
|
|
36483
36504
|
const child = this.child;
|
|
36484
36505
|
if (!child) return;
|
|
36485
36506
|
this.child = null;
|
|
@@ -47065,7 +47086,7 @@ function checkChokidar() {
|
|
|
47065
47086
|
}
|
|
47066
47087
|
async function doctor(args2 = []) {
|
|
47067
47088
|
const json = args2.includes("--json");
|
|
47068
|
-
const cliVersion = true ? "2.73.
|
|
47089
|
+
const cliVersion = true ? "2.73.3" : "0.0.0-dev";
|
|
47069
47090
|
const apiBase2 = resolveApiBaseUrl();
|
|
47070
47091
|
const diagnosticId = (0, import_node_crypto13.randomUUID)();
|
|
47071
47092
|
log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
|
|
@@ -47456,7 +47477,7 @@ async function mcpRun(args2) {
|
|
|
47456
47477
|
// src/commands/version.ts
|
|
47457
47478
|
var import_picocolors15 = __toESM(require("picocolors"));
|
|
47458
47479
|
function version2() {
|
|
47459
|
-
const v = true ? "2.73.
|
|
47480
|
+
const v = true ? "2.73.3" : "unknown";
|
|
47460
47481
|
console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
|
|
47461
47482
|
}
|
|
47462
47483
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeam-cli",
|
|
3
|
-
"version": "2.73.
|
|
3
|
+
"version": "2.73.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",
|