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 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.33" : "0.0.0-dev",
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.33",
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.33" ? { ideVersion: "2.75.33" } : {}
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 && !!s.pluginId && !!s.pollSecret && !!s.agent
48301
+ (s) => !!s.cwd && path90.resolve(s.cwd) === target && reconnectable(s)
48270
48302
  );
48271
- if (matches.length === 0) return null;
48272
- matches.sort((a, b) => b.pairedAt - a.pairedAt);
48273
- return matches[0];
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.33" : null;
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.33" : null;
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.33" : null;
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.33" : "0.0.0-dev";
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.33" : "unknown";
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.33",
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",