codeam-cli 2.60.39 → 2.60.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,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.60.40] — 2026-07-10
8
+
9
+ ### Added
10
+
11
+ - **cli:** Include changed files (git numstat) in the CodeRabbit review result
12
+
13
+ ## [2.60.39] — 2026-07-10
14
+
15
+ ### Fixed
16
+
17
+ - **cli:** Emit an 'installing' phase on first CodeRabbit link
18
+
7
19
  ## [2.60.38] — 2026-07-10
8
20
 
9
21
  ### Fixed
package/dist/index.js CHANGED
@@ -5689,7 +5689,7 @@ function readAnonId() {
5689
5689
  }
5690
5690
  function superProperties() {
5691
5691
  return {
5692
- cliVersion: true ? "2.60.39" : "0.0.0-dev",
5692
+ cliVersion: true ? "2.60.41" : "0.0.0-dev",
5693
5693
  nodeVersion: process.version,
5694
5694
  platform: process.platform,
5695
5695
  arch: process.arch,
@@ -5870,7 +5870,7 @@ var os4 = __toESM(require("os"));
5870
5870
  // package.json
5871
5871
  var package_default = {
5872
5872
  name: "codeam-cli",
5873
- version: "2.60.39",
5873
+ version: "2.60.41",
5874
5874
  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.",
5875
5875
  type: "commonjs",
5876
5876
  main: "dist/index.js",
@@ -6963,7 +6963,7 @@ var CommandRelayService = class {
6963
6963
  // fresh + clear the "CLI update available" banner after a self-update
6964
6964
  // (a codespace that reinstalls @latest reconnects via heartbeat, not
6965
6965
  // pair/reconnect). Older backends ignore the extra field.
6966
- ..."2.60.39" ? { ideVersion: "2.60.39" } : {}
6966
+ ..."2.60.41" ? { ideVersion: "2.60.41" } : {}
6967
6967
  }).then(() => log.trace("relay", `heartbeat ok online=${online}`)).catch((err) => log.trace("relay", `heartbeat failed online=${online}`, err));
6968
6968
  }
6969
6969
  /**
@@ -15721,6 +15721,45 @@ function defaultLoginWithApiKey(key) {
15721
15721
  if (r.status !== 0) return { ok: false, error: out2.trim() || "API key authentication failed" };
15722
15722
  return { ok: true };
15723
15723
  }
15724
+ function collectChangedFiles(cwd) {
15725
+ const run = (args2) => {
15726
+ try {
15727
+ const r = (0, import_node_child_process15.spawnSync)("git", args2, { cwd, encoding: "utf8", timeout: 1e4 });
15728
+ return r.status === 0 && typeof r.stdout === "string" ? r.stdout : "";
15729
+ } catch {
15730
+ return "";
15731
+ }
15732
+ };
15733
+ const STATUS = {
15734
+ A: "added",
15735
+ M: "modified",
15736
+ D: "deleted",
15737
+ R: "renamed"
15738
+ };
15739
+ const byPath = /* @__PURE__ */ new Map();
15740
+ for (const line of run(["status", "--porcelain"]).split(/\r?\n/)) {
15741
+ if (!line.trim()) continue;
15742
+ const x = line[0];
15743
+ const y2 = line[1];
15744
+ let p2 = line.slice(3).trim();
15745
+ if (p2.includes(" -> ")) p2 = (p2.split(" -> ").pop() ?? p2).trim();
15746
+ if (p2.startsWith('"') && p2.endsWith('"')) p2 = p2.slice(1, -1);
15747
+ const code = x !== " " && x !== "?" ? x : y2 === "?" ? "?" : y2;
15748
+ const status2 = code === "?" ? "added" : STATUS[code] ?? "modified";
15749
+ byPath.set(p2, { path: p2, status: status2 });
15750
+ }
15751
+ for (const line of run(["--no-pager", "diff", "--numstat", "HEAD"]).split(/\r?\n/)) {
15752
+ const m = line.match(/^(\d+|-)\t(\d+|-)\t(.+)$/);
15753
+ if (!m) continue;
15754
+ let p2 = m[3];
15755
+ if (p2.includes(" => ")) p2 = p2.replace(/.*\{.*? => (.*?)\}.*/, "$1").replace(/.* => /, "");
15756
+ const cur = byPath.get(p2) ?? { path: p2, status: "modified" };
15757
+ cur.additions = m[1] === "-" ? void 0 : Number(m[1]);
15758
+ cur.deletions = m[2] === "-" ? void 0 : Number(m[2]);
15759
+ byPath.set(p2, cur);
15760
+ }
15761
+ return [...byPath.values()];
15762
+ }
15724
15763
  async function configureCoderabbit(input, deps = {}) {
15725
15764
  const os50 = deps.os ?? createOsStrategy();
15726
15765
  const ensureInstalled = deps.ensureInstalled ?? ensureCoderabbitInstalled;
@@ -15818,10 +15857,23 @@ async function configureCoderabbit(input, deps = {}) {
15818
15857
  }
15819
15858
  if (!deps.runReview) return { ...res, error: "No reviewer available" };
15820
15859
  const out2 = await deps.runReview(input.review ?? {});
15860
+ if (out2.exitCode === 124) {
15861
+ return {
15862
+ ...res,
15863
+ loggedIn: true,
15864
+ error: "CodeRabbit's review service didn't respond in time \u2014 this is usually a temporary CodeRabbit outage. Please try again."
15865
+ };
15866
+ }
15867
+ const files = collectChangedFiles(process.cwd());
15821
15868
  return {
15822
15869
  ...res,
15823
15870
  loggedIn: true,
15824
- review: { markdown: out2.markdown, hunks: out2.hunks, stats: out2.stats },
15871
+ review: {
15872
+ markdown: out2.markdown,
15873
+ hunks: out2.hunks,
15874
+ stats: out2.stats,
15875
+ ...files.length > 0 ? { files } : {}
15876
+ },
15825
15877
  ...out2.stats && typeof out2.stats.error === "string" ? { error: String(out2.stats.error) } : {}
15826
15878
  };
15827
15879
  }
@@ -17369,7 +17421,7 @@ async function autoUpgradeBeforeCriticalCommand() {
17369
17421
  if (process.env.NODE_ENV === "test") return;
17370
17422
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
17371
17423
  if (process.env.CI) return;
17372
- const current = true ? "2.60.39" : null;
17424
+ const current = true ? "2.60.41" : null;
17373
17425
  if (!current) return;
17374
17426
  const cache = readCache();
17375
17427
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -17386,7 +17438,7 @@ function checkForUpdates() {
17386
17438
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
17387
17439
  if (process.env.CI) return;
17388
17440
  if (!process.stdout.isTTY) return;
17389
- const current = true ? "2.60.39" : null;
17441
+ const current = true ? "2.60.41" : null;
17390
17442
  if (!current) return;
17391
17443
  const cache = readCache();
17392
17444
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -17406,7 +17458,7 @@ var SELF_UPDATE_INTERVAL_MS = 60 * 60 * 1e3;
17406
17458
  var SELF_UPDATE_VIEW_TIMEOUT_MS = 3e4;
17407
17459
  var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
17408
17460
  function currentCliVersion() {
17409
- return true ? "2.60.39" : null;
17461
+ return true ? "2.60.41" : null;
17410
17462
  }
17411
17463
  function runCmd(cmd, args2, timeoutMs) {
17412
17464
  return new Promise((resolve7) => {
@@ -34466,7 +34518,7 @@ function checkChokidar() {
34466
34518
  }
34467
34519
  async function doctor(args2 = []) {
34468
34520
  const json = args2.includes("--json");
34469
- const cliVersion = true ? "2.60.39" : "0.0.0-dev";
34521
+ const cliVersion = true ? "2.60.41" : "0.0.0-dev";
34470
34522
  const apiBase2 = resolveApiBaseUrl();
34471
34523
  const diagnosticId = (0, import_node_crypto12.randomUUID)();
34472
34524
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -34665,7 +34717,7 @@ async function completion(args2) {
34665
34717
  // src/commands/version.ts
34666
34718
  var import_picocolors15 = __toESM(require("picocolors"));
34667
34719
  function version2() {
34668
- const v = true ? "2.60.39" : "unknown";
34720
+ const v = true ? "2.60.41" : "unknown";
34669
34721
  console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
34670
34722
  }
34671
34723
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.60.39",
3
+ "version": "2.60.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",