codeam-cli 2.46.3 → 2.46.4

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,12 @@ 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.46.3] — 2026-06-26
8
+
9
+ ### Added
10
+
11
+ - **cli:** Detect Cursor plan paywall reply → actionable upgrade-link bubble
12
+
7
13
  ## [2.46.2] — 2026-06-26
8
14
 
9
15
  ### Added
package/dist/index.js CHANGED
@@ -5397,7 +5397,7 @@ function readAnonId() {
5397
5397
  }
5398
5398
  function superProperties() {
5399
5399
  return {
5400
- cliVersion: true ? "2.46.3" : "0.0.0-dev",
5400
+ cliVersion: true ? "2.46.4" : "0.0.0-dev",
5401
5401
  nodeVersion: process.version,
5402
5402
  platform: process.platform,
5403
5403
  arch: process.arch,
@@ -5578,7 +5578,7 @@ var os4 = __toESM(require("os"));
5578
5578
  // package.json
5579
5579
  var package_default = {
5580
5580
  name: "codeam-cli",
5581
- version: "2.46.3",
5581
+ version: "2.46.4",
5582
5582
  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.",
5583
5583
  type: "commonjs",
5584
5584
  main: "dist/index.js",
@@ -14895,29 +14895,54 @@ var _daemonSeam = {
14895
14895
  * `Dolt server: running`; down blocks say `Dolt server: not running`.
14896
14896
  * Match the affirmative form explicitly so "not running" can't false-positive.
14897
14897
  */
14898
- isRunning: (statusStdout) => /Dolt server:\s*running/i.test(statusStdout)
14898
+ isRunning: (statusStdout) => /Dolt server:\s*running/i.test(statusStdout),
14899
+ /**
14900
+ * Poll delay behind a seam so tests stub it to a no-op (no real timers).
14901
+ * Production uses a short fixed delay between status re-probes.
14902
+ */
14903
+ sleep: (ms) => new Promise((r) => setTimeout(r, ms))
14899
14904
  };
14900
- async function ensureSharedServer(adapter) {
14901
- const status2 = await adapter.run(["dolt", "status"]);
14902
- if (status2.code === 0 && _daemonSeam.isRunning(status2.stdout)) {
14905
+ var DEFAULTS = { startAttempts: 2, pollAttempts: 10, pollDelayMs: 500 };
14906
+ async function ensureSharedServer(adapter, options = {}) {
14907
+ const startAttempts = options.startAttempts ?? DEFAULTS.startAttempts;
14908
+ const pollAttempts = options.pollAttempts ?? DEFAULTS.pollAttempts;
14909
+ const pollDelayMs = options.pollDelayMs ?? DEFAULTS.pollDelayMs;
14910
+ const probe = async () => {
14911
+ const status2 = await adapter.run(["dolt", "status"]);
14912
+ return status2.code === 0 && _daemonSeam.isRunning(status2.stdout);
14913
+ };
14914
+ if (await probe()) {
14903
14915
  log.trace("beads", "shared dolt sql-server already running \u2014 reusing");
14904
14916
  return { up: true, started: false };
14905
14917
  }
14906
- log.info("beads", "shared dolt sql-server not running \u2014 starting (detached)");
14907
- const start2 = await adapter.run(["dolt", "start"]);
14908
- if (start2.code !== 0) {
14918
+ for (let attempt = 1; attempt <= startAttempts; attempt++) {
14919
+ log.info(
14920
+ "beads",
14921
+ `shared dolt sql-server not running \u2014 starting (detached), attempt ${attempt}/${startAttempts}`
14922
+ );
14923
+ const start2 = await adapter.run(["dolt", "start"]);
14924
+ if (start2.code !== 0) {
14925
+ log.warn(
14926
+ "beads",
14927
+ `bd dolt start failed (code=${start2.code}): ${start2.stderr.slice(0, 200)} \u2014 retrying`
14928
+ );
14929
+ if (attempt < startAttempts) await _daemonSeam.sleep(pollDelayMs);
14930
+ continue;
14931
+ }
14932
+ for (let poll = 1; poll <= pollAttempts; poll++) {
14933
+ if (await probe()) {
14934
+ log.info("beads", `shared dolt sql-server up after ${poll} status poll(s)`);
14935
+ return { up: true, started: true };
14936
+ }
14937
+ if (poll < pollAttempts) await _daemonSeam.sleep(pollDelayMs);
14938
+ }
14909
14939
  log.warn(
14910
14940
  "beads",
14911
- `bd dolt start failed (code=${start2.code}): ${start2.stderr.slice(0, 200)} \u2014 beads memory unavailable this run`
14941
+ `shared dolt sql-server not listening after ${pollAttempts} polls (start attempt ${attempt}/${startAttempts})`
14912
14942
  );
14913
- return { up: false, started: false };
14914
- }
14915
- const recheck = await adapter.run(["dolt", "status"]);
14916
- const up = recheck.code === 0 && _daemonSeam.isRunning(recheck.stdout);
14917
- if (!up) {
14918
- log.warn("beads", "shared dolt sql-server still not reachable after start \u2014 non-fatal");
14919
14943
  }
14920
- return { up, started: up };
14944
+ log.warn("beads", "shared dolt sql-server still not reachable after all retries \u2014 non-fatal");
14945
+ return { up: false, started: false };
14921
14946
  }
14922
14947
 
14923
14948
  // src/beads/project-key.ts
@@ -17943,7 +17968,7 @@ async function autoUpgradeBeforeCriticalCommand() {
17943
17968
  if (process.env.NODE_ENV === "test") return;
17944
17969
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
17945
17970
  if (process.env.CI) return;
17946
- const current = true ? "2.46.3" : null;
17971
+ const current = true ? "2.46.4" : null;
17947
17972
  if (!current) return;
17948
17973
  const cache = readCache();
17949
17974
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -17960,7 +17985,7 @@ function checkForUpdates() {
17960
17985
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
17961
17986
  if (process.env.CI) return;
17962
17987
  if (!process.stdout.isTTY) return;
17963
- const current = true ? "2.46.3" : null;
17988
+ const current = true ? "2.46.4" : null;
17964
17989
  if (!current) return;
17965
17990
  const cache = readCache();
17966
17991
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -18402,7 +18427,7 @@ var defaultSpawner = (env, cwd, args2 = []) => (0, import_node_child_process14.s
18402
18427
  detached: false
18403
18428
  });
18404
18429
  function currentCliVersion() {
18405
- return true ? "2.46.3" : null;
18430
+ return true ? "2.46.4" : null;
18406
18431
  }
18407
18432
  function runCmd(cmd, args2, timeoutMs) {
18408
18433
  return new Promise((resolve7) => {
@@ -29739,7 +29764,7 @@ function checkChokidar() {
29739
29764
  }
29740
29765
  async function doctor(args2 = []) {
29741
29766
  const json = args2.includes("--json");
29742
- const cliVersion = true ? "2.46.3" : "0.0.0-dev";
29767
+ const cliVersion = true ? "2.46.4" : "0.0.0-dev";
29743
29768
  const apiBase2 = resolveApiBaseUrl();
29744
29769
  const diagnosticId = (0, import_node_crypto8.randomUUID)();
29745
29770
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -29938,7 +29963,7 @@ async function completion(args2) {
29938
29963
  // src/commands/version.ts
29939
29964
  var import_picocolors15 = __toESM(require("picocolors"));
29940
29965
  function version2() {
29941
- const v = true ? "2.46.3" : "unknown";
29966
+ const v = true ? "2.46.4" : "unknown";
29942
29967
  console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
29943
29968
  }
29944
29969
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.46.3",
3
+ "version": "2.46.4",
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",