codeam-cli 2.23.30 → 2.23.31

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,16 @@ 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.23.30] — 2026-05-30
8
+
9
+ ### Chore
10
+
11
+ - **cli:** Info-level logging for AI summary/insight pipeline
12
+
13
+ ### Fixed
14
+
15
+ - **cli:** DetectInputSuggestion skips Claude TUI box borders
16
+
7
17
  ## [2.23.29] — 2026-05-30
8
18
 
9
19
  ### Fixed
package/dist/index.js CHANGED
@@ -441,7 +441,7 @@ var import_qrcode_terminal = __toESM(require("qrcode-terminal"));
441
441
  // package.json
442
442
  var package_default = {
443
443
  name: "codeam-cli",
444
- version: "2.23.30",
444
+ version: "2.23.31",
445
445
  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.",
446
446
  type: "commonjs",
447
447
  main: "dist/index.js",
@@ -5774,7 +5774,7 @@ function readAnonId() {
5774
5774
  }
5775
5775
  function superProperties() {
5776
5776
  return {
5777
- cliVersion: true ? "2.23.30" : "0.0.0-dev",
5777
+ cliVersion: true ? "2.23.31" : "0.0.0-dev",
5778
5778
  nodeVersion: process.version,
5779
5779
  platform: process.platform,
5780
5780
  arch: process.arch,
@@ -13611,6 +13611,28 @@ var TurnFileAggregator = class {
13611
13611
  repos = [];
13612
13612
  discovering = null;
13613
13613
  stopped = false;
13614
+ /**
13615
+ * Pre-pair worktree baseline. Captured lazily on the first
13616
+ * `flushTurn()` call by running the same `git status` / `git diff`
13617
+ * scan the regular flush uses, then stashing the result here
13618
+ * WITHOUT enqueuing the outbox. Every subsequent flush diff-checks
13619
+ * its entries against this map and only emits files that are
13620
+ * absent from the baseline OR whose `linesAdded` / `linesRemoved`
13621
+ * have moved.
13622
+ *
13623
+ * Why: the legacy first-flush behaviour shipped the entire dirty
13624
+ * worktree at session start, which attributed pre-existing
13625
+ * uncommitted edits to the brand-new sessionId (and confusingly
13626
+ * showed them on the new session's rail with zero hunks, because
13627
+ * the chokidar watcher never saw the changes — they happened
13628
+ * before the watcher booted). Capturing the baseline silently
13629
+ * keeps the rail honest: it now means "files THIS session changed".
13630
+ *
13631
+ * Key is `${repoPath}|${filePath}` so a sibling repo with the same
13632
+ * relative path doesn't collide with another one.
13633
+ */
13634
+ baselineByKey = /* @__PURE__ */ new Map();
13635
+ baselineCaptured = false;
13614
13636
  /** Stop the outbox scheduler. Idempotent. */
13615
13637
  stop() {
13616
13638
  this.stopped = true;
@@ -13642,11 +13664,28 @@ var TurnFileAggregator = class {
13642
13664
  const entries = await collectRepoChangeset(repo);
13643
13665
  if (entries) files.push(...entries);
13644
13666
  }
13645
- if (files.length === 0) {
13646
- log.trace("turnFiles", "no changes detected this turn \u2014 skipping POST");
13667
+ if (!this.baselineCaptured) {
13668
+ this.baselineByKey = new Map(files.map((f) => [baselineKey(f), f]));
13669
+ this.baselineCaptured = true;
13670
+ log.info(
13671
+ "turnFiles",
13672
+ `baseline captured: ${files.length} pre-pair file(s) \u2014 suppressing initial POST`
13673
+ );
13647
13674
  return;
13648
13675
  }
13649
- const chunks = chunkArray(files, MAX_BATCH_SIZE);
13676
+ const novel = files.filter((f) => {
13677
+ const base = this.baselineByKey.get(baselineKey(f));
13678
+ if (!base) return true;
13679
+ return base.linesAdded !== f.linesAdded || base.linesRemoved !== f.linesRemoved || base.fileStatus !== f.fileStatus;
13680
+ });
13681
+ if (novel.length === 0) {
13682
+ log.trace(
13683
+ "turnFiles",
13684
+ `flush matched baseline exactly \u2014 skipping POST (scanned=${files.length})`
13685
+ );
13686
+ return;
13687
+ }
13688
+ const chunks = chunkArray(novel, MAX_BATCH_SIZE);
13650
13689
  for (const chunk of chunks) {
13651
13690
  const entry = {
13652
13691
  turnId: (0, import_crypto2.randomUUID)(),
@@ -13711,6 +13750,9 @@ function chunkArray(arr, size) {
13711
13750
  }
13712
13751
  return out2;
13713
13752
  }
13753
+ function baselineKey(entry) {
13754
+ return `${entry.repoPath}|${entry.filePath}`;
13755
+ }
13714
13756
 
13715
13757
  // src/services/turn-files/repo-dirty-tracker.ts
13716
13758
  var RepoDirtyTracker = class {
@@ -18959,7 +19001,7 @@ function checkChokidar() {
18959
19001
  }
18960
19002
  async function doctor(args2 = []) {
18961
19003
  const json = args2.includes("--json");
18962
- const cliVersion = true ? "2.23.30" : "0.0.0-dev";
19004
+ const cliVersion = true ? "2.23.31" : "0.0.0-dev";
18963
19005
  const apiBase = resolveApiBaseUrl();
18964
19006
  const diagnosticId = (0, import_node_crypto6.randomUUID)();
18965
19007
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -19158,7 +19200,7 @@ async function completion(args2) {
19158
19200
  // src/commands/version.ts
19159
19201
  var import_picocolors13 = __toESM(require("picocolors"));
19160
19202
  function version2() {
19161
- const v = true ? "2.23.30" : "unknown";
19203
+ const v = true ? "2.23.31" : "unknown";
19162
19204
  console.log(`${import_picocolors13.default.bold("codeam-cli")} ${import_picocolors13.default.cyan(v)}`);
19163
19205
  }
19164
19206
 
@@ -19386,7 +19428,7 @@ function checkForUpdates() {
19386
19428
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
19387
19429
  if (process.env.CI) return;
19388
19430
  if (!process.stdout.isTTY) return;
19389
- const current = true ? "2.23.30" : null;
19431
+ const current = true ? "2.23.31" : null;
19390
19432
  if (!current) return;
19391
19433
  const cache = readCache();
19392
19434
  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.23.30",
3
+ "version": "2.23.31",
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",