codeam-cli 2.75.30 → 2.75.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,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.30] — 2026-09-25
8
+
9
+ ### Fixed
10
+
11
+ - **cli:** Preview error log tail without terminal escape codes (#823)
12
+
7
13
  ## [2.75.29] — 2026-09-25
8
14
 
9
15
  ### Fixed
package/dist/index.js CHANGED
@@ -10516,7 +10516,7 @@ function readAnonId() {
10516
10516
  }
10517
10517
  function superProperties() {
10518
10518
  return {
10519
- cliVersion: true ? "2.75.30" : "0.0.0-dev",
10519
+ cliVersion: true ? "2.75.31" : "0.0.0-dev",
10520
10520
  nodeVersion: process.version,
10521
10521
  platform: process.platform,
10522
10522
  arch: process.arch,
@@ -10758,7 +10758,7 @@ var http = __toESM(require("http"));
10758
10758
  // package.json
10759
10759
  var package_default = {
10760
10760
  name: "codeam-cli",
10761
- version: "2.75.30",
10761
+ version: "2.75.31",
10762
10762
  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.",
10763
10763
  type: "commonjs",
10764
10764
  main: "dist/index.js",
@@ -12088,7 +12088,7 @@ var CommandRelayService = class _CommandRelayService {
12088
12088
  // fresh + clear the "CLI update available" banner after a self-update
12089
12089
  // (a codespace that reinstalls @latest reconnects via heartbeat, not
12090
12090
  // pair/reconnect). Older backends ignore the extra field.
12091
- ..."2.75.30" ? { ideVersion: "2.75.30" } : {}
12091
+ ..."2.75.31" ? { ideVersion: "2.75.31" } : {}
12092
12092
  };
12093
12093
  try {
12094
12094
  const res = await _postJson(`${API_BASE2}/api/plugin/heartbeat`, body);
@@ -23925,19 +23925,36 @@ function listScriptCandidates(root) {
23925
23925
  }
23926
23926
 
23927
23927
  // src/services/preview/prewarm-deps.ts
23928
+ var import_which2 = __toESM(require("which"));
23928
23929
  var inFlight = null;
23929
23930
  var PREWARM_INSTALL_TIMEOUT_MS = 5 * 6e4;
23930
23931
  function prewarmNodeDeps(cwd) {
23931
23932
  if (inFlight) return inFlight;
23932
23933
  const missing = detectMissingNodeDeps(cwd);
23933
- if (!missing || missing.cmd !== "npm") return Promise.resolve();
23934
+ if (!missing) return Promise.resolve();
23934
23935
  log.info("preview", `prewarm: installing deps (${missing.cmd} ${missing.args.join(" ")})`);
23935
23936
  const started = Date.now();
23936
- inFlight = runSetupCommand(missing.cmd, missing.args, cwd, void 0, {
23937
- timeoutMs: PREWARM_INSTALL_TIMEOUT_MS
23938
- }).then((r) => {
23937
+ inFlight = (async () => {
23938
+ if (missing.cmd === "yarn") {
23939
+ const ensured = await ensureYarnInstalled({
23940
+ hasYarn: async () => Boolean(await (0, import_which2.default)("yarn", { nothrow: true })),
23941
+ installYarn: async () => {
23942
+ const r2 = await runSetupCommand("npm", ["install", "-g", "yarn"], cwd, void 0, {
23943
+ timeoutMs: PREWARM_INSTALL_TIMEOUT_MS
23944
+ });
23945
+ return { ok: r2.status === "ok", code: r2.code };
23946
+ }
23947
+ });
23948
+ if (!ensured.ok) {
23949
+ log.info("preview", `prewarm: yarn unavailable (exit ${ensured.code}) \u2014 Preview will retry`);
23950
+ return;
23951
+ }
23952
+ }
23953
+ const r = await runSetupCommand(missing.cmd, missing.args, cwd, void 0, {
23954
+ timeoutMs: PREWARM_INSTALL_TIMEOUT_MS
23955
+ });
23939
23956
  log.info("preview", `prewarm: deps ${r.status} after ${Date.now() - started}ms`);
23940
- }).catch((err) => {
23957
+ })().catch((err) => {
23941
23958
  log.info("preview", `prewarm: deps install threw (${String(err)})`);
23942
23959
  }).finally(() => {
23943
23960
  inFlight = null;
@@ -24086,7 +24103,7 @@ function activePreviewSessionIds() {
24086
24103
  var import_child_process20 = require("child_process");
24087
24104
  var fs43 = __toESM(require("fs"));
24088
24105
  var path51 = __toESM(require("path"));
24089
- var import_which2 = __toESM(require("which"));
24106
+ var import_which3 = __toESM(require("which"));
24090
24107
 
24091
24108
  // src/services/project-env/index.ts
24092
24109
  var import_fs6 = require("fs");
@@ -25102,7 +25119,7 @@ async function provisionDeps(ctx) {
25102
25119
  if (missingDeps) {
25103
25120
  if (missingDeps.cmd === "yarn") {
25104
25121
  const ensured = await ensureYarnInstalled({
25105
- hasYarn: async () => Boolean(await (0, import_which2.default)("yarn", { nothrow: true })),
25122
+ hasYarn: async () => Boolean(await (0, import_which3.default)("yarn", { nothrow: true })),
25106
25123
  installYarn: async () => {
25107
25124
  emitProgress("SETUP_RUN", "installing yarn (not found on PATH) \u2014 npm install -g yarn");
25108
25125
  const r = await runSetupCommand(
@@ -48640,7 +48657,7 @@ async function autoUpgradeBeforeCriticalCommand() {
48640
48657
  if (process.env.NODE_ENV === "test") return;
48641
48658
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
48642
48659
  if (process.env.CI) return;
48643
- const current2 = true ? "2.75.30" : null;
48660
+ const current2 = true ? "2.75.31" : null;
48644
48661
  if (!current2) return;
48645
48662
  const cache = readCache();
48646
48663
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -48657,7 +48674,7 @@ function checkForUpdates() {
48657
48674
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
48658
48675
  if (process.env.CI) return;
48659
48676
  if (!process.stdout.isTTY) return;
48660
- const current2 = true ? "2.75.30" : null;
48677
+ const current2 = true ? "2.75.31" : null;
48661
48678
  if (!current2) return;
48662
48679
  const cache = readCache();
48663
48680
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -48680,7 +48697,7 @@ var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
48680
48697
  var SELF_UPDATE_LS_TIMEOUT_MS = 15e3;
48681
48698
  var SUDO_PREFLIGHT_TIMEOUT_MS = 5e3;
48682
48699
  function currentCliVersion() {
48683
- return true ? "2.75.30" : null;
48700
+ return true ? "2.75.31" : null;
48684
48701
  }
48685
48702
  async function installedVersion(deps) {
48686
48703
  const ls = await deps.run(
@@ -50645,7 +50662,7 @@ function checkChokidar() {
50645
50662
  }
50646
50663
  async function doctor(args2 = []) {
50647
50664
  const json = args2.includes("--json");
50648
- const cliVersion = true ? "2.75.30" : "0.0.0-dev";
50665
+ const cliVersion = true ? "2.75.31" : "0.0.0-dev";
50649
50666
  const apiBase2 = resolveApiBaseUrl();
50650
50667
  const diagnosticId = (0, import_node_crypto13.randomUUID)();
50651
50668
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -51169,7 +51186,7 @@ async function mcpWarm(argv = [], opts = {}) {
51169
51186
  // src/commands/version.ts
51170
51187
  var import_picocolors15 = __toESM(require("picocolors"));
51171
51188
  function version2() {
51172
- const v = true ? "2.75.30" : "unknown";
51189
+ const v = true ? "2.75.31" : "unknown";
51173
51190
  console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
51174
51191
  }
51175
51192
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.75.30",
3
+ "version": "2.75.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",