codeam-cli 2.61.39 → 2.61.41

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,22 @@ 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.40] — 2026-07-25
8
+
9
+ ### CI
10
+
11
+ - **release:** Auto-refresh the wrapper-repo Codespaces prebuild on each release
12
+
13
+ ### Fixed
14
+
15
+ - **cli:** Host-agent supports concurrent multi-session (per-deploy daemon lock)
16
+
17
+ ## [2.61.39] — 2026-07-25
18
+
19
+ ### Performance
20
+
21
+ - **cli:** Un-gate the agent spawn from beads provisioning (codespace)
22
+
7
23
  ## [2.61.38] — 2026-07-24
8
24
 
9
25
  ### Fixed
package/dist/index.js CHANGED
@@ -6355,7 +6355,7 @@ function readAnonId() {
6355
6355
  }
6356
6356
  function superProperties() {
6357
6357
  return {
6358
- cliVersion: true ? "2.61.39" : "0.0.0-dev",
6358
+ cliVersion: true ? "2.61.41" : "0.0.0-dev",
6359
6359
  nodeVersion: process.version,
6360
6360
  platform: process.platform,
6361
6361
  arch: process.arch,
@@ -6536,7 +6536,7 @@ var os4 = __toESM(require("os"));
6536
6536
  // package.json
6537
6537
  var package_default = {
6538
6538
  name: "codeam-cli",
6539
- version: "2.61.39",
6539
+ version: "2.61.41",
6540
6540
  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.",
6541
6541
  type: "commonjs",
6542
6542
  main: "dist/index.js",
@@ -7707,7 +7707,7 @@ var CommandRelayService = class _CommandRelayService {
7707
7707
  // fresh + clear the "CLI update available" banner after a self-update
7708
7708
  // (a codespace that reinstalls @latest reconnects via heartbeat, not
7709
7709
  // pair/reconnect). Older backends ignore the extra field.
7710
- ..."2.61.39" ? { ideVersion: "2.61.39" } : {}
7710
+ ..."2.61.41" ? { ideVersion: "2.61.41" } : {}
7711
7711
  }).then(() => log.trace("relay", `heartbeat ok online=${online}`)).catch((err) => log.trace("relay", `heartbeat failed online=${online}`, err));
7712
7712
  }
7713
7713
  /**
@@ -18691,7 +18691,7 @@ async function autoUpgradeBeforeCriticalCommand() {
18691
18691
  if (process.env.NODE_ENV === "test") return;
18692
18692
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
18693
18693
  if (process.env.CI) return;
18694
- const current = true ? "2.61.39" : null;
18694
+ const current = true ? "2.61.41" : null;
18695
18695
  if (!current) return;
18696
18696
  const cache = readCache();
18697
18697
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -18708,7 +18708,7 @@ function checkForUpdates() {
18708
18708
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
18709
18709
  if (process.env.CI) return;
18710
18710
  if (!process.stdout.isTTY) return;
18711
- const current = true ? "2.61.39" : null;
18711
+ const current = true ? "2.61.41" : null;
18712
18712
  if (!current) return;
18713
18713
  const cache = readCache();
18714
18714
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -18728,7 +18728,7 @@ var SELF_UPDATE_INTERVAL_MS = 60 * 60 * 1e3;
18728
18728
  var SELF_UPDATE_VIEW_TIMEOUT_MS = 3e4;
18729
18729
  var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
18730
18730
  function currentCliVersion() {
18731
- return true ? "2.61.39" : null;
18731
+ return true ? "2.61.41" : null;
18732
18732
  }
18733
18733
  function runCmd(cmd, args2, timeoutMs) {
18734
18734
  return new Promise((resolve8) => {
@@ -19670,7 +19670,12 @@ var HostAgentSupervisor = class {
19670
19670
  API_TIMEOUT_MS: "3000000",
19671
19671
  CODEAM_AUTO_TOKEN: payload.autoPairToken
19672
19672
  };
19673
- const houseConfigDir = path46.join(os38.homedir(), ".codeam", "house-claude");
19673
+ const houseConfigDir = path46.join(
19674
+ os38.homedir(),
19675
+ ".codeam",
19676
+ "house-claude",
19677
+ payload.deployId
19678
+ );
19674
19679
  try {
19675
19680
  fs43.mkdirSync(houseConfigDir, { recursive: true, mode: 448 });
19676
19681
  } catch {
@@ -19686,6 +19691,7 @@ var HostAgentSupervisor = class {
19686
19691
  };
19687
19692
  }
19688
19693
  childEnv = { ...childEnv, CODEAM_AUTO_APPROVE: "1" };
19694
+ childEnv = { ...childEnv, CODEAM_HOST_AGENT_CHILD: "1" };
19689
19695
  if (payload.agentInstallScript) {
19690
19696
  report("installing", "installing agent CLI");
19691
19697
  await this.runAgentInstall(payload.agentInstallScript);
@@ -19812,6 +19818,13 @@ var HostAgentSupervisor = class {
19812
19818
  report("failed", detail ? `agent exited (${code}): ${detail}` : `agent exited (${code})`);
19813
19819
  }
19814
19820
  });
19821
+ proc.once("error", (err) => {
19822
+ const tracked = this.children.get(payload.deployId)?.proc === proc;
19823
+ if (tracked) this.children.delete(payload.deployId);
19824
+ if (tracked) {
19825
+ report("failed", `agent failed to start: ${err instanceof Error ? err.message : String(err)}`);
19826
+ }
19827
+ });
19815
19828
  } catch (err) {
19816
19829
  const message = err instanceof Error ? err.message : String(err);
19817
19830
  log.warn("host-agent", `deploy ${payload.deployId.slice(0, 8)} failed: ${message}`);
@@ -24671,7 +24684,7 @@ function acquireSingletonLock() {
24671
24684
  }
24672
24685
  async function pairAuto(args2) {
24673
24686
  installRelayCrashGuards();
24674
- if (!acquireSingletonLock()) {
24687
+ if (process.env.CODEAM_HOST_AGENT_CHILD !== "1" && !acquireSingletonLock()) {
24675
24688
  capture("pair_auto_deferred_singleton", {});
24676
24689
  console.log(" A codeam session is already running here \u2014 deferring to it.");
24677
24690
  return;
@@ -24688,7 +24701,7 @@ async function pairAuto(args2) {
24688
24701
  `agent "${claimed.agent}" is not supported in this codeam-cli version. Upgrade with 'npm i -g codeam-cli@latest'.`
24689
24702
  );
24690
24703
  }
24691
- addSession({
24704
+ const claimedSession = {
24692
24705
  id: claimed.sessionId,
24693
24706
  pluginId,
24694
24707
  userName: claimed.user.name,
@@ -24699,7 +24712,8 @@ async function pairAuto(args2) {
24699
24712
  // SEC crit1 (#813): persist so boot-time /reconnect proves possession.
24700
24713
  pollSecret,
24701
24714
  agent: claimed.agent
24702
- });
24715
+ };
24716
+ addSession(claimedSession);
24703
24717
  identifyUser({
24704
24718
  userId: claimed.user.email,
24705
24719
  email: claimed.user.email,
@@ -24738,7 +24752,7 @@ async function pairAuto(args2) {
24738
24752
  process.once("exit", () => {
24739
24753
  headroomReporter?.stop();
24740
24754
  });
24741
- await start();
24755
+ await start(void 0, claimedSession);
24742
24756
  }
24743
24757
 
24744
24758
  // src/services/headroom/wrap-launch.ts
@@ -35915,10 +35929,10 @@ function ensureClaudeOnboarded(cwd) {
35915
35929
  }
35916
35930
 
35917
35931
  // src/commands/start.ts
35918
- async function start(requestedAgent) {
35932
+ async function start(requestedAgent, presetSession) {
35919
35933
  installRelayCrashGuards();
35920
35934
  showIntro();
35921
- const session = requestedAgent ? getActiveSessionForAgent(requestedAgent) : getActiveSession();
35935
+ const session = presetSession ? presetSession : requestedAgent ? getActiveSessionForAgent(requestedAgent) : getActiveSession();
35922
35936
  if (!session) {
35923
35937
  if (requestedAgent) {
35924
35938
  const displayName = AGENT_REGISTRY[requestedAgent]?.displayName ?? requestedAgent;
@@ -38836,7 +38850,7 @@ function checkChokidar() {
38836
38850
  }
38837
38851
  async function doctor(args2 = []) {
38838
38852
  const json = args2.includes("--json");
38839
- const cliVersion = true ? "2.61.39" : "0.0.0-dev";
38853
+ const cliVersion = true ? "2.61.41" : "0.0.0-dev";
38840
38854
  const apiBase2 = resolveApiBaseUrl();
38841
38855
  const diagnosticId = (0, import_node_crypto13.randomUUID)();
38842
38856
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -39347,7 +39361,7 @@ async function mcpRun(args2) {
39347
39361
  // src/commands/version.ts
39348
39362
  var import_picocolors15 = __toESM(require("picocolors"));
39349
39363
  function version2() {
39350
- const v = true ? "2.61.39" : "unknown";
39364
+ const v = true ? "2.61.41" : "unknown";
39351
39365
  console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
39352
39366
  }
39353
39367
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.61.39",
3
+ "version": "2.61.41",
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",