codeam-cli 2.75.20 → 2.75.21

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.75.20] — 2026-09-25
8
+
9
+ ### Fixed
10
+
11
+ - **cli:** Preview heals a committed host-allow shim instead of wrapping it
12
+
7
13
  ## [2.75.19] — 2026-09-25
8
14
 
9
15
  ### Fixed
package/dist/index.js CHANGED
@@ -10509,7 +10509,7 @@ function readAnonId() {
10509
10509
  }
10510
10510
  function superProperties() {
10511
10511
  return {
10512
- cliVersion: true ? "2.75.20" : "0.0.0-dev",
10512
+ cliVersion: true ? "2.75.21" : "0.0.0-dev",
10513
10513
  nodeVersion: process.version,
10514
10514
  platform: process.platform,
10515
10515
  arch: process.arch,
@@ -10751,7 +10751,7 @@ var http = __toESM(require("http"));
10751
10751
  // package.json
10752
10752
  var package_default = {
10753
10753
  name: "codeam-cli",
10754
- version: "2.75.20",
10754
+ version: "2.75.21",
10755
10755
  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.",
10756
10756
  type: "commonjs",
10757
10757
  main: "dist/index.js",
@@ -12081,7 +12081,7 @@ var CommandRelayService = class _CommandRelayService {
12081
12081
  // fresh + clear the "CLI update available" banner after a self-update
12082
12082
  // (a codespace that reinstalls @latest reconnects via heartbeat, not
12083
12083
  // pair/reconnect). Older backends ignore the extra field.
12084
- ..."2.75.20" ? { ideVersion: "2.75.20" } : {}
12084
+ ..."2.75.21" ? { ideVersion: "2.75.21" } : {}
12085
12085
  };
12086
12086
  try {
12087
12087
  const res = await _postJson(`${API_BASE2}/api/plugin/heartbeat`, body);
@@ -36711,11 +36711,30 @@ var import_node_crypto9 = require("crypto");
36711
36711
  var BD_PRIME_COMMAND_RE = /(?:^|[;&|]\s*)bd\s+prime\b/;
36712
36712
  var ToolCallTracker = class {
36713
36713
  bdPrimeIds = /* @__PURE__ */ new Set();
36714
+ /** Latest non-empty title per open call — see {@link lastTitle}. */
36715
+ titles = /* @__PURE__ */ new Map();
36714
36716
  /** Record a `tool_call` so its later `tool_call_update` can be recognised. */
36715
36717
  note(update) {
36716
- if (update.sessionUpdate !== "tool_call" || !update.toolCallId) return;
36718
+ if (!update.toolCallId) return;
36719
+ if (update.sessionUpdate !== "tool_call" && update.sessionUpdate !== "tool_call_update") return;
36720
+ const title = update.title?.trim();
36721
+ if (title) this.titles.set(update.toolCallId, title);
36722
+ if (update.sessionUpdate !== "tool_call") return;
36717
36723
  if (isBdPrimeInvocation(update)) this.bdPrimeIds.add(update.toolCallId);
36718
36724
  }
36725
+ /**
36726
+ * The call's most recent title, forgotten once read. claude-agent-acp opens
36727
+ * a Write as "Preparing file…", renames it in a non-terminal update
36728
+ * ("Write FOO.md"), then completes it with NO content and an EMPTY title —
36729
+ * the completion mapped to nothing and the phone showed "Preparing file…"
36730
+ * pending forever (break-it 2026-09-24, fleet box).
36731
+ */
36732
+ lastTitle(toolCallId) {
36733
+ if (!toolCallId) return null;
36734
+ const title = this.titles.get(toolCallId) ?? null;
36735
+ this.titles.delete(toolCallId);
36736
+ return title;
36737
+ }
36719
36738
  /** True when this tool call was `bd prime`; forgets terminal ids. */
36720
36739
  isBdPrime(toolCallId, terminal) {
36721
36740
  if (!toolCallId) return false;
@@ -36763,7 +36782,8 @@ function mapSessionUpdate(notification, tracker) {
36763
36782
  if (update.status !== "completed" && update.status !== "failed") {
36764
36783
  return [];
36765
36784
  }
36766
- const rawBody = describeToolCallUpdate(update);
36785
+ const remembered = tracker?.lastTitle(update.toolCallId) ?? null;
36786
+ const rawBody = describeToolCallUpdate(update) ?? remembered;
36767
36787
  if (!rawBody) return [];
36768
36788
  const body = update.status === "completed" && tracker?.isBdPrime(update.toolCallId, true) ? bdPrimeResultSummary(rawBody) : rawBody;
36769
36789
  const prefix = update.status === "failed" ? "[failed] " : "";
@@ -47698,7 +47718,7 @@ async function autoUpgradeBeforeCriticalCommand() {
47698
47718
  if (process.env.NODE_ENV === "test") return;
47699
47719
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
47700
47720
  if (process.env.CI) return;
47701
- const current2 = true ? "2.75.20" : null;
47721
+ const current2 = true ? "2.75.21" : null;
47702
47722
  if (!current2) return;
47703
47723
  const cache = readCache();
47704
47724
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -47715,7 +47735,7 @@ function checkForUpdates() {
47715
47735
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
47716
47736
  if (process.env.CI) return;
47717
47737
  if (!process.stdout.isTTY) return;
47718
- const current2 = true ? "2.75.20" : null;
47738
+ const current2 = true ? "2.75.21" : null;
47719
47739
  if (!current2) return;
47720
47740
  const cache = readCache();
47721
47741
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -47738,7 +47758,7 @@ var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
47738
47758
  var SELF_UPDATE_LS_TIMEOUT_MS = 15e3;
47739
47759
  var SUDO_PREFLIGHT_TIMEOUT_MS = 5e3;
47740
47760
  function currentCliVersion() {
47741
- return true ? "2.75.20" : null;
47761
+ return true ? "2.75.21" : null;
47742
47762
  }
47743
47763
  async function installedVersion(deps) {
47744
47764
  const ls = await deps.run(
@@ -49624,7 +49644,7 @@ function checkChokidar() {
49624
49644
  }
49625
49645
  async function doctor(args2 = []) {
49626
49646
  const json = args2.includes("--json");
49627
- const cliVersion = true ? "2.75.20" : "0.0.0-dev";
49647
+ const cliVersion = true ? "2.75.21" : "0.0.0-dev";
49628
49648
  const apiBase2 = resolveApiBaseUrl();
49629
49649
  const diagnosticId = (0, import_node_crypto12.randomUUID)();
49630
49650
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -50148,7 +50168,7 @@ async function mcpWarm(argv = [], opts = {}) {
50148
50168
  // src/commands/version.ts
50149
50169
  var import_picocolors15 = __toESM(require("picocolors"));
50150
50170
  function version2() {
50151
- const v = true ? "2.75.20" : "unknown";
50171
+ const v = true ? "2.75.21" : "unknown";
50152
50172
  console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
50153
50173
  }
50154
50174
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.75.20",
3
+ "version": "2.75.21",
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",