codeam-cli 2.75.33 → 2.75.35
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 +12 -0
- package/dist/index.js +51 -16
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,18 @@ 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.34] — 2026-09-26
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **cli:** Host restart resumes a session saved without cwd by its session id (#832)
|
|
12
|
+
|
|
13
|
+
## [2.75.33] — 2026-09-26
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- **cli:** Keep a fresher Codex login; legacy hosts self-enrol their poll secret (#830)
|
|
18
|
+
|
|
7
19
|
## [2.75.32] — 2026-09-26
|
|
8
20
|
|
|
9
21
|
### Fixed
|
package/dist/index.js
CHANGED
|
@@ -1135,12 +1135,25 @@ var PUBLIC_TO_INTERNAL = {
|
|
|
1135
1135
|
"managed-codex": "claude",
|
|
1136
1136
|
"managed-claude": "claude"
|
|
1137
1137
|
};
|
|
1138
|
+
var INTERNAL_TO_PUBLIC = {
|
|
1139
|
+
claude: "claude_code",
|
|
1140
|
+
codex: "codex",
|
|
1141
|
+
cursor: "cursor",
|
|
1142
|
+
aider: "aider",
|
|
1143
|
+
coderabbit: "coderabbit",
|
|
1144
|
+
gemini: "gemini",
|
|
1145
|
+
kimi: "kimi",
|
|
1146
|
+
opencode: "opencode"
|
|
1147
|
+
};
|
|
1138
1148
|
function isPublicToInternalKey(v) {
|
|
1139
1149
|
return Object.prototype.hasOwnProperty.call(PUBLIC_TO_INTERNAL, v);
|
|
1140
1150
|
}
|
|
1141
1151
|
function publicToInternal(publicId) {
|
|
1142
1152
|
return isPublicToInternalKey(publicId) ? PUBLIC_TO_INTERNAL[publicId] : null;
|
|
1143
1153
|
}
|
|
1154
|
+
function internalToPublic(internal) {
|
|
1155
|
+
return INTERNAL_TO_PUBLIC[internal] ?? null;
|
|
1156
|
+
}
|
|
1144
1157
|
var TERMINAL_AGENT_PREFIX = "__terminal__:";
|
|
1145
1158
|
var AGENT_ID_ALIASES = {
|
|
1146
1159
|
claude_code: "claude",
|
|
@@ -10516,7 +10529,7 @@ function readAnonId() {
|
|
|
10516
10529
|
}
|
|
10517
10530
|
function superProperties() {
|
|
10518
10531
|
return {
|
|
10519
|
-
cliVersion: true ? "2.75.
|
|
10532
|
+
cliVersion: true ? "2.75.35" : "0.0.0-dev",
|
|
10520
10533
|
nodeVersion: process.version,
|
|
10521
10534
|
platform: process.platform,
|
|
10522
10535
|
arch: process.arch,
|
|
@@ -10758,7 +10771,7 @@ var http = __toESM(require("http"));
|
|
|
10758
10771
|
// package.json
|
|
10759
10772
|
var package_default = {
|
|
10760
10773
|
name: "codeam-cli",
|
|
10761
|
-
version: "2.75.
|
|
10774
|
+
version: "2.75.35",
|
|
10762
10775
|
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.",
|
|
10763
10776
|
type: "commonjs",
|
|
10764
10777
|
main: "dist/index.js",
|
|
@@ -12088,7 +12101,7 @@ var CommandRelayService = class _CommandRelayService {
|
|
|
12088
12101
|
// fresh + clear the "CLI update available" banner after a self-update
|
|
12089
12102
|
// (a codespace that reinstalls @latest reconnects via heartbeat, not
|
|
12090
12103
|
// pair/reconnect). Older backends ignore the extra field.
|
|
12091
|
-
..."2.75.
|
|
12104
|
+
..."2.75.35" ? { ideVersion: "2.75.35" } : {}
|
|
12092
12105
|
};
|
|
12093
12106
|
try {
|
|
12094
12107
|
const res = await _postJson(`${API_BASE2}/api/plugin/heartbeat`, body);
|
|
@@ -12161,10 +12174,12 @@ var CommandRelayService = class _CommandRelayService {
|
|
|
12161
12174
|
installed: true
|
|
12162
12175
|
}
|
|
12163
12176
|
];
|
|
12177
|
+
const linkedAgentId = this.linkedAgentIdProvider?.() ?? null;
|
|
12164
12178
|
_postJson(`${API_BASE2}/api/plugin/agents`, {
|
|
12165
12179
|
pluginId: this.pluginId,
|
|
12166
12180
|
agents,
|
|
12167
|
-
capabilities: { squad: true }
|
|
12181
|
+
capabilities: { squad: true },
|
|
12182
|
+
...linkedAgentId ? { linkedAgentId } : {}
|
|
12168
12183
|
}).then(() => {
|
|
12169
12184
|
this.agentsRegistered = true;
|
|
12170
12185
|
}).catch(() => {
|
|
@@ -12175,6 +12190,16 @@ var CommandRelayService = class _CommandRelayService {
|
|
|
12175
12190
|
* switch). Heartbeats pick the new id up on their next tick; call
|
|
12176
12191
|
* {@link reannounceAgents} to push the new `/api/plugin/agents` entry.
|
|
12177
12192
|
*/
|
|
12193
|
+
/**
|
|
12194
|
+
* The PUBLIC id of the agent really running (`managed-codex`, `claude_code`),
|
|
12195
|
+
* sent alongside the runtime-keyed `agents` list. The runtime id is `claude`
|
|
12196
|
+
* for every managed agent, so without this a session the host RESUMED on a
|
|
12197
|
+
* managed agent read as the user's own Claude in the app (owner, 2026-09-26).
|
|
12198
|
+
*/
|
|
12199
|
+
linkedAgentIdProvider = null;
|
|
12200
|
+
setLinkedAgentIdProvider(provider) {
|
|
12201
|
+
this.linkedAgentIdProvider = provider;
|
|
12202
|
+
}
|
|
12178
12203
|
setAgentMeta(meta) {
|
|
12179
12204
|
this.agentMeta = meta;
|
|
12180
12205
|
}
|
|
@@ -42858,6 +42883,11 @@ async function runAcpSession(opts) {
|
|
|
42858
42883
|
relay.reannounceAgents();
|
|
42859
42884
|
}
|
|
42860
42885
|
};
|
|
42886
|
+
relay.setLinkedAgentIdProvider(() => {
|
|
42887
|
+
if (houseActive) return isManagedProviderId(houseWireId) ? houseWireId : null;
|
|
42888
|
+
return internalToPublic(opts.agent);
|
|
42889
|
+
});
|
|
42890
|
+
relay.reannounceAgents();
|
|
42861
42891
|
const switchAgentForSession = async (rawAgentId) => {
|
|
42862
42892
|
const result = await performAgentSwitch(switchDeps, rawAgentId);
|
|
42863
42893
|
if (result.ok) refreshSquadRoster();
|
|
@@ -47855,12 +47885,13 @@ function sampleCpuTimes() {
|
|
|
47855
47885
|
}
|
|
47856
47886
|
return { idle, total };
|
|
47857
47887
|
}
|
|
47888
|
+
var MAX_REPORTED_LATENCY_MS = 6e4;
|
|
47858
47889
|
var MetricsCollector = class {
|
|
47859
47890
|
prevCpu = null;
|
|
47860
47891
|
lastLatencyMs = 0;
|
|
47861
47892
|
/** Record the measured round-trip of the heartbeat just sent. */
|
|
47862
47893
|
recordLatency(latencyMs) {
|
|
47863
|
-
this.lastLatencyMs = Math.max(0, Math.round(latencyMs));
|
|
47894
|
+
this.lastLatencyMs = Math.min(MAX_REPORTED_LATENCY_MS, Math.max(0, Math.round(latencyMs)));
|
|
47864
47895
|
}
|
|
47865
47896
|
cpuPct() {
|
|
47866
47897
|
const current2 = sampleCpuTimes();
|
|
@@ -48263,14 +48294,18 @@ function planSessionResume(records, max) {
|
|
|
48263
48294
|
const bound = Math.max(0, Math.floor(max));
|
|
48264
48295
|
return { resume: ordered.slice(0, bound), dropped: ordered.slice(bound) };
|
|
48265
48296
|
}
|
|
48266
|
-
function pickSavedSessionForWorkspace(sessions3, cwd) {
|
|
48297
|
+
function pickSavedSessionForWorkspace(sessions3, cwd, deployId) {
|
|
48267
48298
|
const target = path90.resolve(cwd);
|
|
48299
|
+
const reconnectable = (s) => !!s.pluginId && !!s.pollSecret && !!s.agent;
|
|
48268
48300
|
const matches = sessions3.filter(
|
|
48269
|
-
(s) => !!s.cwd && path90.resolve(s.cwd) === target &&
|
|
48301
|
+
(s) => !!s.cwd && path90.resolve(s.cwd) === target && reconnectable(s)
|
|
48270
48302
|
);
|
|
48271
|
-
if (matches.length
|
|
48272
|
-
|
|
48273
|
-
|
|
48303
|
+
if (matches.length > 0) {
|
|
48304
|
+
matches.sort((a, b) => b.pairedAt - a.pairedAt);
|
|
48305
|
+
return matches[0];
|
|
48306
|
+
}
|
|
48307
|
+
if (!deployId) return null;
|
|
48308
|
+
return sessions3.find((s) => !s.cwd && s.id === deployId && reconnectable(s)) ?? null;
|
|
48274
48309
|
}
|
|
48275
48310
|
|
|
48276
48311
|
// src/commands/host/git-tooling.ts
|
|
@@ -48710,7 +48745,7 @@ async function autoUpgradeBeforeCriticalCommand() {
|
|
|
48710
48745
|
if (process.env.NODE_ENV === "test") return;
|
|
48711
48746
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
48712
48747
|
if (process.env.CI) return;
|
|
48713
|
-
const current2 = true ? "2.75.
|
|
48748
|
+
const current2 = true ? "2.75.35" : null;
|
|
48714
48749
|
if (!current2) return;
|
|
48715
48750
|
const cache = readCache();
|
|
48716
48751
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -48727,7 +48762,7 @@ function checkForUpdates() {
|
|
|
48727
48762
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
48728
48763
|
if (process.env.CI) return;
|
|
48729
48764
|
if (!process.stdout.isTTY) return;
|
|
48730
|
-
const current2 = true ? "2.75.
|
|
48765
|
+
const current2 = true ? "2.75.35" : null;
|
|
48731
48766
|
if (!current2) return;
|
|
48732
48767
|
const cache = readCache();
|
|
48733
48768
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -48750,7 +48785,7 @@ var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
|
|
|
48750
48785
|
var SELF_UPDATE_LS_TIMEOUT_MS = 15e3;
|
|
48751
48786
|
var SUDO_PREFLIGHT_TIMEOUT_MS = 5e3;
|
|
48752
48787
|
function currentCliVersion() {
|
|
48753
|
-
return true ? "2.75.
|
|
48788
|
+
return true ? "2.75.35" : null;
|
|
48754
48789
|
}
|
|
48755
48790
|
async function installedVersion(deps) {
|
|
48756
48791
|
const ls = await deps.run(
|
|
@@ -50041,7 +50076,7 @@ var HostAgentSupervisor = class {
|
|
|
50041
50076
|
const saved = this.listSavedSessions();
|
|
50042
50077
|
let resumed = 0;
|
|
50043
50078
|
for (const rec of resume) {
|
|
50044
|
-
const session = pickSavedSessionForWorkspace(saved, rec.cwd);
|
|
50079
|
+
const session = pickSavedSessionForWorkspace(saved, rec.cwd, rec.deployId);
|
|
50045
50080
|
if (!session) {
|
|
50046
50081
|
log.warn(
|
|
50047
50082
|
"host-agent",
|
|
@@ -50715,7 +50750,7 @@ function checkChokidar() {
|
|
|
50715
50750
|
}
|
|
50716
50751
|
async function doctor(args2 = []) {
|
|
50717
50752
|
const json = args2.includes("--json");
|
|
50718
|
-
const cliVersion = true ? "2.75.
|
|
50753
|
+
const cliVersion = true ? "2.75.35" : "0.0.0-dev";
|
|
50719
50754
|
const apiBase2 = resolveApiBaseUrl();
|
|
50720
50755
|
const diagnosticId = (0, import_node_crypto13.randomUUID)();
|
|
50721
50756
|
log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
|
|
@@ -51239,7 +51274,7 @@ async function mcpWarm(argv = [], opts = {}) {
|
|
|
51239
51274
|
// src/commands/version.ts
|
|
51240
51275
|
var import_picocolors15 = __toESM(require("picocolors"));
|
|
51241
51276
|
function version2() {
|
|
51242
|
-
const v = true ? "2.75.
|
|
51277
|
+
const v = true ? "2.75.35" : "unknown";
|
|
51243
51278
|
console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
|
|
51244
51279
|
}
|
|
51245
51280
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeam-cli",
|
|
3
|
-
"version": "2.75.
|
|
3
|
+
"version": "2.75.35",
|
|
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",
|