codeam-cli 2.36.0 → 2.36.1

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,23 @@ 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.36.0] — 2026-06-11
8
+
9
+ ### Added
10
+
11
+ - **cli:** Per-OS dolt installer (install-dolt.ts)
12
+ - **cli:** Stable bd-safe prefix from projectKey (D16)
13
+ - **cli:** Shared dolt sql-server lifecycle (ensureSharedServer, D8)
14
+ - **cli:** Adapter runs in shared-server mode; correct stale embedded doc
15
+ - **cli:** Provision dolt + shared-server + per-prefix DB (D15-D17)
16
+ - **cli:** Export BEADS_DOLT_SHARED_SERVER to the agent (GAP 2, D15)
17
+ - **cli:** Harden dolt PATH resolution for codespaces
18
+ - **cli:** No-sudo dolt fallback (tarball -> ~/.local/bin) for locked-down containers
19
+
20
+ ### Fixed
21
+
22
+ - **cli:** Make dolt PATH resolution host-independent (Windows CI)
23
+
7
24
  ## [2.35.9] — 2026-06-10
8
25
 
9
26
  ### Fixed
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.36.0",
501
+ version: "2.36.1",
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.36.0" : "0.0.0-dev",
5903
+ cliVersion: true ? "2.36.1" : "0.0.0-dev",
5904
5904
  nodeVersion: process.version,
5905
5905
  platform: process.platform,
5906
5906
  arch: process.arch,
@@ -17800,21 +17800,44 @@ function ensureDoltResolvable(platform2 = process.platform) {
17800
17800
  var _doltInstallSpawnSeam = {
17801
17801
  run: _defaultDoltInstallSpawn
17802
17802
  };
17803
+ var DOLT_INSTALL_TIMEOUT_MS = 12e4;
17803
17804
  function _defaultDoltInstallSpawn(strategy) {
17804
17805
  return new Promise((resolve7) => {
17806
+ let settled = false;
17807
+ let timer;
17808
+ const finish = (r) => {
17809
+ if (settled) return;
17810
+ settled = true;
17811
+ if (timer) clearTimeout(timer);
17812
+ resolve7(r);
17813
+ };
17805
17814
  let proc;
17806
17815
  try {
17807
- proc = (0, import_child_process15.spawn)(strategy.command, strategy.args, { env: process.env });
17816
+ proc = (0, import_child_process15.spawn)(strategy.command, strategy.args, {
17817
+ env: process.env,
17818
+ stdio: ["ignore", "pipe", "pipe"]
17819
+ });
17808
17820
  } catch (err) {
17809
- resolve7({ ok: false, code: -1, stderr: err.message });
17821
+ finish({ ok: false, code: -1, stderr: err.message });
17810
17822
  return;
17811
17823
  }
17824
+ timer = setTimeout(() => {
17825
+ try {
17826
+ proc.kill("SIGKILL");
17827
+ } catch {
17828
+ }
17829
+ finish({
17830
+ ok: false,
17831
+ code: -1,
17832
+ stderr: `dolt install timed out after ${DOLT_INSTALL_TIMEOUT_MS}ms`
17833
+ });
17834
+ }, DOLT_INSTALL_TIMEOUT_MS);
17812
17835
  let stderr = "";
17813
17836
  proc.stderr?.on("data", (c2) => {
17814
17837
  stderr += c2.toString();
17815
17838
  });
17816
- proc.on("error", (err) => resolve7({ ok: false, code: -1, stderr: err.message }));
17817
- proc.on("close", (code) => resolve7({ ok: code === 0, code: code ?? -1, stderr }));
17839
+ proc.on("error", (err) => finish({ ok: false, code: -1, stderr: err.message }));
17840
+ proc.on("close", (code) => finish({ ok: code === 0, code: code ?? -1, stderr }));
17818
17841
  });
17819
17842
  }
17820
17843
  async function installDolt(platform2 = process.platform) {
@@ -18125,12 +18148,6 @@ async function provisionBeads(opts = {}) {
18125
18148
  return result;
18126
18149
  }
18127
18150
  result.doltAvailable = true;
18128
- const server = await _provisionSeam.ensureSharedServer(bd);
18129
- result.serverUp = server.up;
18130
- if (!server.up) {
18131
- log.warn("beads", "shared dolt sql-server not up \u2014 beads disabled this run");
18132
- return result;
18133
- }
18134
18151
  const { projectKey } = _provisionSeam.deriveProjectIdentity(opts.cwd);
18135
18152
  const prefix = prefixForProjectKey(projectKey);
18136
18153
  result.prefix = prefix;
@@ -18150,6 +18167,12 @@ async function provisionBeads(opts = {}) {
18150
18167
  return result;
18151
18168
  }
18152
18169
  result.initialized = true;
18170
+ const server = await _provisionSeam.ensureSharedServer(bd);
18171
+ result.serverUp = server.up;
18172
+ if (!server.up) {
18173
+ log.warn("beads", "shared dolt sql-server not up \u2014 beads disabled this run");
18174
+ return result;
18175
+ }
18153
18176
  const exp = await bd.run(["config", "set", "export.auto", "true"]);
18154
18177
  result.exportEnabled = exp.code === 0;
18155
18178
  result.agentsWired = await setupAgents(bd, opts.agents ?? []);
@@ -18452,8 +18475,8 @@ async function applyBeadsAction(action, deps) {
18452
18475
  async function startBeads(opts) {
18453
18476
  const adapter = new BdAdapter({ cwd: opts.cwd });
18454
18477
  const provision = await provisionBeads({ cwd: opts.cwd, adapter, agents: opts.agents });
18455
- if (!provision.bdAvailable || !provision.initialized) {
18456
- log.warn("beads", "home brain not provisioned \u2014 watcher not started this run");
18478
+ if (!provision.bdAvailable || !provision.initialized || !provision.serverUp) {
18479
+ log.warn("beads", "beads not fully provisioned \u2014 watcher not started this run");
18457
18480
  return null;
18458
18481
  }
18459
18482
  const watcher = new BeadsWatcher({
@@ -26451,7 +26474,7 @@ function checkChokidar() {
26451
26474
  }
26452
26475
  async function doctor(args2 = []) {
26453
26476
  const json = args2.includes("--json");
26454
- const cliVersion = true ? "2.36.0" : "0.0.0-dev";
26477
+ const cliVersion = true ? "2.36.1" : "0.0.0-dev";
26455
26478
  const apiBase = resolveApiBaseUrl();
26456
26479
  const diagnosticId = (0, import_node_crypto8.randomUUID)();
26457
26480
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -26650,7 +26673,7 @@ async function completion(args2) {
26650
26673
  // src/commands/version.ts
26651
26674
  var import_picocolors13 = __toESM(require("picocolors"));
26652
26675
  function version2() {
26653
- const v = true ? "2.36.0" : "unknown";
26676
+ const v = true ? "2.36.1" : "unknown";
26654
26677
  console.log(`${import_picocolors13.default.bold("codeam-cli")} ${import_picocolors13.default.cyan(v)}`);
26655
26678
  }
26656
26679
 
@@ -26936,7 +26959,7 @@ function checkForUpdates() {
26936
26959
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
26937
26960
  if (process.env.CI) return;
26938
26961
  if (!process.stdout.isTTY) return;
26939
- const current = true ? "2.36.0" : null;
26962
+ const current = true ? "2.36.1" : null;
26940
26963
  if (!current) return;
26941
26964
  const cache = readCache();
26942
26965
  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.36.0",
3
+ "version": "2.36.1",
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",