codeam-cli 2.61.10 → 2.61.11
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 +27 -9
- 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.61.10] — 2026-07-16
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **cli:** Fleet box hardening — self-updatable image, fresh-pull creates, dead-container rm
|
|
12
|
+
|
|
7
13
|
## [2.61.9] — 2026-07-16
|
|
8
14
|
|
|
9
15
|
### Fixed
|
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.11" : "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.11",
|
|
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.11" ? { ideVersion: "2.61.11" } : {}
|
|
7303
7303
|
}).then(() => log.trace("relay", `heartbeat ok online=${online}`)).catch((err) => log.trace("relay", `heartbeat failed online=${online}`, err));
|
|
7304
7304
|
}
|
|
7305
7305
|
/**
|
|
@@ -17900,7 +17900,7 @@ async function autoUpgradeBeforeCriticalCommand() {
|
|
|
17900
17900
|
if (process.env.NODE_ENV === "test") return;
|
|
17901
17901
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
17902
17902
|
if (process.env.CI) return;
|
|
17903
|
-
const current = true ? "2.61.
|
|
17903
|
+
const current = true ? "2.61.11" : null;
|
|
17904
17904
|
if (!current) return;
|
|
17905
17905
|
const cache = readCache();
|
|
17906
17906
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -17917,7 +17917,7 @@ function checkForUpdates() {
|
|
|
17917
17917
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
17918
17918
|
if (process.env.CI) return;
|
|
17919
17919
|
if (!process.stdout.isTTY) return;
|
|
17920
|
-
const current = true ? "2.61.
|
|
17920
|
+
const current = true ? "2.61.11" : null;
|
|
17921
17921
|
if (!current) return;
|
|
17922
17922
|
const cache = readCache();
|
|
17923
17923
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -17937,7 +17937,7 @@ var SELF_UPDATE_INTERVAL_MS = 60 * 60 * 1e3;
|
|
|
17937
17937
|
var SELF_UPDATE_VIEW_TIMEOUT_MS = 3e4;
|
|
17938
17938
|
var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
|
|
17939
17939
|
function currentCliVersion() {
|
|
17940
|
-
return true ? "2.61.
|
|
17940
|
+
return true ? "2.61.11" : null;
|
|
17941
17941
|
}
|
|
17942
17942
|
function runCmd(cmd, args2, timeoutMs) {
|
|
17943
17943
|
return new Promise((resolve8) => {
|
|
@@ -24941,6 +24941,18 @@ var HistoryService = class _HistoryService {
|
|
|
24941
24941
|
}
|
|
24942
24942
|
/** Per-session JSONL mtime at the last upload — gates {@link uploadConversationIfChanged}. */
|
|
24943
24943
|
lastTranscriptMtimeMs = /* @__PURE__ */ new Map();
|
|
24944
|
+
/** Wall-clock of the last upload per session — drives the periodic
|
|
24945
|
+
* re-baseline below. */
|
|
24946
|
+
lastUploadWallMs = /* @__PURE__ */ new Map();
|
|
24947
|
+
/** The backend stores the conversation with a bounded TTL (24 h,
|
|
24948
|
+
* `WS_SESSION_TTL`). An IDLE session's JSONL never changes, so a pure
|
|
24949
|
+
* mtime gate would never re-ship and the backend copy would expire —
|
|
24950
|
+
* every later `get_conversation` → GET then returns EMPTY forever (the
|
|
24951
|
+
* 2026-07-16 "la sesión no carga" regression, second occurrence: the
|
|
24952
|
+
* first fix pushed at session START but nothing refreshed an idle
|
|
24953
|
+
* session past the TTL). Re-baseline at half the backend TTL so the
|
|
24954
|
+
* stored copy can never lapse while the session lives. */
|
|
24955
|
+
static REBASELINE_INTERVAL_MS = 12 * 60 * 60 * 1e3;
|
|
24944
24956
|
/**
|
|
24945
24957
|
* Upload a session's transcript when its JSONL changed since the last upload.
|
|
24946
24958
|
* Scales to long/heavy conversations: the ACP `get_conversation` handler is
|
|
@@ -24966,7 +24978,12 @@ var HistoryService = class _HistoryService {
|
|
|
24966
24978
|
} catch {
|
|
24967
24979
|
return false;
|
|
24968
24980
|
}
|
|
24969
|
-
|
|
24981
|
+
const now = Date.now();
|
|
24982
|
+
const staleBaseline = now - (this.lastUploadWallMs.get(sessionId) ?? 0) > _HistoryService.REBASELINE_INTERVAL_MS;
|
|
24983
|
+
if (!staleBaseline && this.lastTranscriptMtimeMs.get(sessionId) === mtimeMs) {
|
|
24984
|
+
return false;
|
|
24985
|
+
}
|
|
24986
|
+
if (staleBaseline) this.lastUploadedUuid.delete(sessionId);
|
|
24970
24987
|
let uploaded;
|
|
24971
24988
|
if (this.lastUploadedUuid.has(sessionId)) {
|
|
24972
24989
|
uploaded = await this.uploadDelta(sessionId) > 0;
|
|
@@ -24975,6 +24992,7 @@ var HistoryService = class _HistoryService {
|
|
|
24975
24992
|
uploaded = true;
|
|
24976
24993
|
}
|
|
24977
24994
|
this.lastTranscriptMtimeMs.set(sessionId, mtimeMs);
|
|
24995
|
+
this.lastUploadWallMs.set(sessionId, now);
|
|
24978
24996
|
return uploaded;
|
|
24979
24997
|
}
|
|
24980
24998
|
/**
|
|
@@ -37437,7 +37455,7 @@ function checkChokidar() {
|
|
|
37437
37455
|
}
|
|
37438
37456
|
async function doctor(args2 = []) {
|
|
37439
37457
|
const json = args2.includes("--json");
|
|
37440
|
-
const cliVersion = true ? "2.61.
|
|
37458
|
+
const cliVersion = true ? "2.61.11" : "0.0.0-dev";
|
|
37441
37459
|
const apiBase2 = resolveApiBaseUrl();
|
|
37442
37460
|
const diagnosticId = (0, import_node_crypto12.randomUUID)();
|
|
37443
37461
|
log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
|
|
@@ -37948,7 +37966,7 @@ async function mcpRun(args2) {
|
|
|
37948
37966
|
// src/commands/version.ts
|
|
37949
37967
|
var import_picocolors15 = __toESM(require("picocolors"));
|
|
37950
37968
|
function version2() {
|
|
37951
|
-
const v = true ? "2.61.
|
|
37969
|
+
const v = true ? "2.61.11" : "unknown";
|
|
37952
37970
|
console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
|
|
37953
37971
|
}
|
|
37954
37972
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeam-cli",
|
|
3
|
-
"version": "2.61.
|
|
3
|
+
"version": "2.61.11",
|
|
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",
|