codeam-cli 2.39.3 → 2.39.5

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.39.4] — 2026-06-12
8
+
9
+ ### Fixed
10
+
11
+ - **cli:** Retry transient bd spawn ETXTBSY (not just ENOENT) so beads provisions
12
+
13
+ ## [2.39.3] — 2026-06-12
14
+
15
+ ### Fixed
16
+
17
+ - **cli:** Singleton guard for pair-auto — prevent split-brain sessions (codeagent-qi4)
18
+
7
19
  ## [2.39.2] — 2026-06-12
8
20
 
9
21
  ### Added
package/dist/index.js CHANGED
@@ -498,7 +498,7 @@ var import_qrcode_terminal = __toESM(require("qrcode-terminal"));
498
498
  // package.json
499
499
  var package_default = {
500
500
  name: "codeam-cli",
501
- version: "2.39.3",
501
+ version: "2.39.5",
502
502
  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.",
503
503
  type: "commonjs",
504
504
  main: "dist/index.js",
@@ -5900,7 +5900,7 @@ function readAnonId() {
5900
5900
  }
5901
5901
  function superProperties() {
5902
5902
  return {
5903
- cliVersion: true ? "2.39.3" : "0.0.0-dev",
5903
+ cliVersion: true ? "2.39.5" : "0.0.0-dev",
5904
5904
  nodeVersion: process.version,
5905
5905
  platform: process.platform,
5906
5906
  arch: process.arch,
@@ -17598,8 +17598,9 @@ var BdAdapter = class {
17598
17598
  `bd ${args2.join(" ")} (cwd=${this.opts.cwd ?? process.cwd()}, shared-server)`
17599
17599
  );
17600
17600
  let res = await _spawnSeam.run(binary, args2, { cwd: this.opts.cwd, env });
17601
- for (let attempt = 1; attempt <= 3 && res.code === -1 && res.stderr.includes("ENOENT"); attempt++) {
17602
- log.info("beads", `bd ${args2[0]} spawn ENOENT (transient binary) \u2014 retry ${attempt}/3`);
17601
+ const TRANSIENT_SPAWN = /ENOENT|ETXTBSY/;
17602
+ for (let attempt = 1; attempt <= 5 && res.code === -1 && TRANSIENT_SPAWN.test(res.stderr); attempt++) {
17603
+ log.info("beads", `bd ${args2[0]} transient spawn failure (binary busy) \u2014 retry ${attempt}/5`);
17603
17604
  await _adapterSeam.sleep(750 * attempt);
17604
17605
  res = await _spawnSeam.run(binary, args2, { cwd: this.opts.cwd, env });
17605
17606
  }
@@ -18130,12 +18131,18 @@ var _linkSeam = {
18130
18131
  const pathDirs = (process.env.PATH ?? "").split(path39.delimiter).filter(Boolean);
18131
18132
  const home = _linkSeam.homedir();
18132
18133
  const localBin = home ? path39.join(home, ".local", "bin") : null;
18134
+ if (localBin) {
18135
+ try {
18136
+ _linkSeam.ensureDir(localBin);
18137
+ } catch {
18138
+ }
18139
+ }
18133
18140
  const candidates = [];
18141
+ if (localBin) candidates.push(localBin);
18134
18142
  try {
18135
18143
  candidates.push(path39.dirname(process.execPath));
18136
18144
  } catch {
18137
18145
  }
18138
- if (localBin) candidates.push(localBin);
18139
18146
  candidates.push("/usr/local/bin");
18140
18147
  const entry = process.argv[1];
18141
18148
  if (entry) {
@@ -26728,7 +26735,7 @@ function checkChokidar() {
26728
26735
  }
26729
26736
  async function doctor(args2 = []) {
26730
26737
  const json = args2.includes("--json");
26731
- const cliVersion = true ? "2.39.3" : "0.0.0-dev";
26738
+ const cliVersion = true ? "2.39.5" : "0.0.0-dev";
26732
26739
  const apiBase = resolveApiBaseUrl();
26733
26740
  const diagnosticId = (0, import_node_crypto8.randomUUID)();
26734
26741
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -26927,7 +26934,7 @@ async function completion(args2) {
26927
26934
  // src/commands/version.ts
26928
26935
  var import_picocolors13 = __toESM(require("picocolors"));
26929
26936
  function version2() {
26930
- const v = true ? "2.39.3" : "unknown";
26937
+ const v = true ? "2.39.5" : "unknown";
26931
26938
  console.log(`${import_picocolors13.default.bold("codeam-cli")} ${import_picocolors13.default.cyan(v)}`);
26932
26939
  }
26933
26940
 
@@ -27213,7 +27220,7 @@ function checkForUpdates() {
27213
27220
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
27214
27221
  if (process.env.CI) return;
27215
27222
  if (!process.stdout.isTTY) return;
27216
- const current = true ? "2.39.3" : null;
27223
+ const current = true ? "2.39.5" : null;
27217
27224
  if (!current) return;
27218
27225
  const cache = readCache();
27219
27226
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.39.3",
3
+ "version": "2.39.5",
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",