codeam-cli 2.12.5 → 2.12.7

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.12.6] — 2026-05-14
8
+
9
+ ### Fixed
10
+
11
+ - **cli:** Always-on info+ file logging so chunk-send outcomes survive without CODEAM_DEBUG
12
+
13
+ ## [2.12.5] — 2026-05-14
14
+
15
+ ### Fixed
16
+
17
+ - **cli:** Rewrite filterCodexChrome — drop the brittle skipEchoContinuation state machine
18
+
7
19
  ## [2.12.4] — 2026-05-14
8
20
 
9
21
  ### Fixed
package/dist/index.js CHANGED
@@ -1682,7 +1682,7 @@ var import_qrcode_terminal = __toESM(require("qrcode-terminal"));
1682
1682
  // package.json
1683
1683
  var package_default = {
1684
1684
  name: "codeam-cli",
1685
- version: "2.12.5",
1685
+ version: "2.12.7",
1686
1686
  description: "Remote control Claude Code (and other AI coding agents) from your mobile phone. Pair your device, send prompts, stream responses in real-time, and approve commands \u2014 from anywhere.",
1687
1687
  type: "commonjs",
1688
1688
  main: "dist/index.js",
@@ -1990,11 +1990,10 @@ function currentLevel() {
1990
1990
  const raw = (process.env.CODEAM_LOG ?? "error").toLowerCase();
1991
1991
  return LEVELS[raw] ?? LEVELS.error;
1992
1992
  }
1993
- var fileEnabled = process.env.CODEAM_DEBUG === "1" || process.env.CODEAM_LOG === "debug" || process.env.CODEAM_LOG === "trace";
1993
+ var verboseFileEnabled = process.env.CODEAM_DEBUG === "1" || process.env.CODEAM_LOG === "debug" || process.env.CODEAM_LOG === "trace";
1994
1994
  var debugFilePath = path2.join(os3.homedir(), ".codeam", "debug.log");
1995
1995
  var fileInitialized = false;
1996
1996
  function appendToFile(line) {
1997
- if (!fileEnabled) return;
1998
1997
  try {
1999
1998
  if (!fileInitialized) {
2000
1999
  fs2.mkdirSync(path2.dirname(debugFilePath), { recursive: true });
@@ -2012,14 +2011,15 @@ platform=${process.platform} node=${process.version} cwd=${process.cwd()}
2012
2011
  }
2013
2012
  }
2014
2013
  function emit(level, tag, msg, err) {
2015
- if (LEVELS[level] > currentLevel()) return;
2016
2014
  const detail = err instanceof Error ? `: ${err.message}` : err !== void 0 ? `: ${String(err)}` : "";
2017
2015
  const line = `[codeam:${level}] ${tag} \u2014 ${msg}${detail}
2018
2016
  `;
2019
- process.stderr.write(line);
2020
- if (LEVELS[level] >= LEVELS.debug) {
2017
+ if (LEVELS[level] <= LEVELS.info || verboseFileEnabled) {
2021
2018
  appendToFile(`${(/* @__PURE__ */ new Date()).toISOString()} ${line}`);
2022
2019
  }
2020
+ if (LEVELS[level] <= currentLevel()) {
2021
+ process.stderr.write(line);
2022
+ }
2023
2023
  }
2024
2024
  var log = {
2025
2025
  error: (tag, msg, err) => emit("error", tag, msg, err),
@@ -6125,28 +6125,33 @@ var ChunkEmitter = class {
6125
6125
  ...body
6126
6126
  });
6127
6127
  const maxRetries = opts.critical ? 3 : 0;
6128
- log.trace(
6128
+ const t0 = Date.now();
6129
+ log.info(
6129
6130
  "chunkEmitter",
6130
- `send type=${body.type ?? "(clear)"} bytes=${payload.length}`
6131
+ `send type=${body.type ?? "(clear)"} bytes=${payload.length} done=${body.done === true}`
6131
6132
  );
6132
6133
  return new Promise((resolve2) => {
6133
6134
  const attempt = (attemptsLeft) => {
6134
6135
  _transport2.post(this.url, this.headers, payload).then(({ statusCode, body: resBody }) => {
6136
+ const tookMs = Date.now() - t0;
6135
6137
  if (statusCode === 410 || statusCode === 404 && /SESSION_NOT_FOUND|SESSION_GONE/.test(resBody)) {
6136
6138
  process.stderr.write("[codeam] session was deleted/disconnected \u2014 stopping output stream.\n");
6139
+ log.info("chunkEmitter", `dead status=${statusCode} took=${tookMs}ms`);
6137
6140
  resolve2({ dead: true });
6138
6141
  return;
6139
6142
  }
6140
6143
  if (statusCode >= 400) {
6144
+ log.warn("chunkEmitter", `api-error status=${statusCode} took=${tookMs}ms body=${resBody.slice(0, 200)}`);
6141
6145
  process.stderr.write(`[codeam] output API error ${statusCode}: ${resBody}
6142
6146
  `);
6147
+ } else {
6148
+ log.info("chunkEmitter", `ok status=${statusCode} took=${tookMs}ms`);
6143
6149
  }
6144
- log.trace("chunkEmitter", `status=${statusCode}`);
6145
6150
  resolve2({ dead: false });
6146
6151
  }).catch((err) => {
6147
- log.trace(
6152
+ log.warn(
6148
6153
  "chunkEmitter",
6149
- `error retries-left=${attemptsLeft}`,
6154
+ `error retries-left=${attemptsLeft} took=${Date.now() - t0}ms`,
6150
6155
  err
6151
6156
  );
6152
6157
  if (attemptsLeft > 0) {
@@ -10135,7 +10140,7 @@ async function stopWorkspaceFromLocal(target) {
10135
10140
  // src/commands/version.ts
10136
10141
  var import_picocolors11 = __toESM(require("picocolors"));
10137
10142
  function version() {
10138
- const v = true ? "2.12.5" : "unknown";
10143
+ const v = true ? "2.12.7" : "unknown";
10139
10144
  console.log(`${import_picocolors11.default.bold("codeam-cli")} ${import_picocolors11.default.cyan(v)}`);
10140
10145
  }
10141
10146
 
@@ -10270,7 +10275,7 @@ function checkForUpdates() {
10270
10275
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
10271
10276
  if (process.env.CI) return;
10272
10277
  if (!process.stdout.isTTY) return;
10273
- const current = true ? "2.12.5" : null;
10278
+ const current = true ? "2.12.7" : null;
10274
10279
  if (!current) return;
10275
10280
  const cache = readCache();
10276
10281
  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.12.5",
3
+ "version": "2.12.7",
4
4
  "description": "Remote control Claude Code (and other AI coding agents) from your mobile phone. Pair your device, send prompts, stream responses in real-time, and approve commands — from anywhere.",
5
5
  "type": "commonjs",
6
6
  "main": "dist/index.js",