codeam-cli 2.75.11 → 2.75.12

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.11] — 2026-09-24
8
+
9
+ ### Fixed
10
+
11
+ - **cli:** Bound streaming-chunk snapshots under the API cap and coalesce big re-sends
12
+
7
13
  ## [2.75.10] — 2026-09-23
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.11" : "0.0.0-dev",
10512
+ cliVersion: true ? "2.75.12" : "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.11",
10754
+ version: "2.75.12",
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.11" ? { ideVersion: "2.75.11" } : {}
12084
+ ..."2.75.12" ? { ideVersion: "2.75.12" } : {}
12085
12085
  };
12086
12086
  try {
12087
12087
  const res = await _postJson(`${API_BASE2}/api/plugin/heartbeat`, body);
@@ -18511,6 +18511,9 @@ function resolveHistoryDir2(_cwd, homeOverride) {
18511
18511
  if (!import_node_fs3.default.existsSync(todayDir)) return null;
18512
18512
  return todayDir;
18513
18513
  }
18514
+ function isHeadlessOneShotMeta(meta) {
18515
+ return meta.source === "exec" || meta.originator === "codex_exec";
18516
+ }
18514
18517
  function parseLine(line) {
18515
18518
  try {
18516
18519
  const parsed = JSON.parse(line);
@@ -18790,6 +18793,7 @@ function newestRolloutIdSince(sessionsRoot, resolvedCwd, floorMs) {
18790
18793
  if (mtime < floorMs || mtime <= bestMtime) continue;
18791
18794
  let metaCwd;
18792
18795
  let metaId;
18796
+ let headlessOneShot = false;
18793
18797
  try {
18794
18798
  const raw = import_node_fs3.default.readFileSync(filePath, "utf8");
18795
18799
  for (const line of raw.split("\n")) {
@@ -18800,13 +18804,14 @@ function newestRolloutIdSince(sessionsRoot, resolvedCwd, floorMs) {
18800
18804
  const meta = rec.payload;
18801
18805
  metaCwd = typeof meta?.cwd === "string" ? meta.cwd : void 0;
18802
18806
  metaId = typeof meta?.id === "string" ? meta.id : void 0;
18807
+ headlessOneShot = meta !== void 0 && isHeadlessOneShotMeta(meta);
18803
18808
  }
18804
18809
  break;
18805
18810
  }
18806
18811
  } catch {
18807
18812
  continue;
18808
18813
  }
18809
- if (!metaId || !metaCwd) continue;
18814
+ if (!metaId || !metaCwd || headlessOneShot) continue;
18810
18815
  let resolvedMeta;
18811
18816
  try {
18812
18817
  resolvedMeta = import_node_fs3.default.realpathSync(metaCwd);
@@ -27496,6 +27501,26 @@ var emitPreviewEvent = (args2) => {
27496
27501
  payload: { ...args2.payload ?? {}, missingServices: missing }
27497
27502
  });
27498
27503
  };
27504
+ var PREVIEW_DETECT_TIMEOUT_MS = 12e4;
27505
+ async function runDetectOneShot(generate, timeoutMs = PREVIEW_DETECT_TIMEOUT_MS) {
27506
+ let timer;
27507
+ const deadline = new Promise((resolve11) => {
27508
+ timer = setTimeout(() => resolve11({ raw: null, timedOut: true }), timeoutMs);
27509
+ timer.unref?.();
27510
+ });
27511
+ const oneShot = generate(PREVIEW_DETECT_PROMPT, { timeoutMs }).then(
27512
+ (raw) => ({ raw, timedOut: false }),
27513
+ (err) => {
27514
+ log.info("preview", `detect: generateOneShot threw: ${String(err)}`);
27515
+ return { raw: null, timedOut: false };
27516
+ }
27517
+ );
27518
+ try {
27519
+ return await Promise.race([oneShot, deadline]);
27520
+ } finally {
27521
+ if (timer) clearTimeout(timer);
27522
+ }
27523
+ }
27499
27524
  var requestPreviewDetectH = (ctx) => {
27500
27525
  if (!ctx.pluginAuthToken) {
27501
27526
  log.info("preview", "no pluginAuthToken \u2014 skipping detect");
@@ -27516,6 +27541,7 @@ var requestPreviewDetectH = (ctx) => {
27516
27541
  return;
27517
27542
  }
27518
27543
  const pluginAuthToken = ctx.pluginAuthToken;
27544
+ const generateOneShot = ctx.runtime.generateOneShot.bind(ctx.runtime);
27519
27545
  void (async () => {
27520
27546
  const fromFile = await readPreviewConfig(process.cwd());
27521
27547
  if (fromFile) {
@@ -27537,11 +27563,22 @@ var requestPreviewDetectH = (ctx) => {
27537
27563
  });
27538
27564
  log.info("preview", "detect: invoking generateOneShot");
27539
27565
  const startedAt = Date.now();
27540
- const raw = await ctx.runtime.generateOneShot(PREVIEW_DETECT_PROMPT).catch((err) => {
27541
- log.info("preview", `detect: generateOneShot threw: ${String(err)}`);
27542
- return null;
27543
- });
27566
+ const { raw, timedOut } = await runDetectOneShot(generateOneShot);
27544
27567
  const tookMs = Date.now() - startedAt;
27568
+ if (timedOut) {
27569
+ log.info("preview", `detect: timed out after ${tookMs}ms \u2014 emitting preview_error`);
27570
+ emitPreviewEvent({
27571
+ sessionId: ctx.sessionId,
27572
+ pluginId: ctx.pluginId,
27573
+ pluginAuthToken,
27574
+ type: USER_EVENTS.PREVIEW_ERROR,
27575
+ payload: {
27576
+ stage: "detection",
27577
+ message: `Project detection timed out after ${Math.round(PREVIEW_DETECT_TIMEOUT_MS / 1e3)} s \u2014 the agent did not answer. Try again, or add a .codeam/preview.json override.`
27578
+ }
27579
+ });
27580
+ return;
27581
+ }
27545
27582
  const detection = safeParseDetection(raw);
27546
27583
  if (!detection) {
27547
27584
  const failure = describeDetectionFailure(raw);
@@ -27622,11 +27659,12 @@ function prewarmPreviewDetection(runtime) {
27622
27659
  if (previewPrewarmStarted) return;
27623
27660
  previewPrewarmStarted = true;
27624
27661
  if (typeof runtime.generateOneShot !== "function") return;
27662
+ const generateOneShot = runtime.generateOneShot.bind(runtime);
27625
27663
  void (async () => {
27626
27664
  try {
27627
27665
  const cwd = process.cwd();
27628
27666
  if (await readPreviewConfig(cwd)) return;
27629
- const raw = await runtime.generateOneShot(PREVIEW_DETECT_PROMPT).catch(() => null);
27667
+ const { raw } = await runDetectOneShot(generateOneShot);
27630
27668
  const detection = safeParseDetection(raw);
27631
27669
  if (!detection) {
27632
27670
  const failure = describeDetectionFailure(raw);
@@ -47114,7 +47152,7 @@ async function autoUpgradeBeforeCriticalCommand() {
47114
47152
  if (process.env.NODE_ENV === "test") return;
47115
47153
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
47116
47154
  if (process.env.CI) return;
47117
- const current2 = true ? "2.75.11" : null;
47155
+ const current2 = true ? "2.75.12" : null;
47118
47156
  if (!current2) return;
47119
47157
  const cache = readCache();
47120
47158
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -47131,7 +47169,7 @@ function checkForUpdates() {
47131
47169
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
47132
47170
  if (process.env.CI) return;
47133
47171
  if (!process.stdout.isTTY) return;
47134
- const current2 = true ? "2.75.11" : null;
47172
+ const current2 = true ? "2.75.12" : null;
47135
47173
  if (!current2) return;
47136
47174
  const cache = readCache();
47137
47175
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -47154,7 +47192,7 @@ var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
47154
47192
  var SELF_UPDATE_LS_TIMEOUT_MS = 15e3;
47155
47193
  var SUDO_PREFLIGHT_TIMEOUT_MS = 5e3;
47156
47194
  function currentCliVersion() {
47157
- return true ? "2.75.11" : null;
47195
+ return true ? "2.75.12" : null;
47158
47196
  }
47159
47197
  async function installedVersion(deps) {
47160
47198
  const ls = await deps.run(
@@ -48894,7 +48932,7 @@ function checkChokidar() {
48894
48932
  }
48895
48933
  async function doctor(args2 = []) {
48896
48934
  const json = args2.includes("--json");
48897
- const cliVersion = true ? "2.75.11" : "0.0.0-dev";
48935
+ const cliVersion = true ? "2.75.12" : "0.0.0-dev";
48898
48936
  const apiBase2 = resolveApiBaseUrl();
48899
48937
  const diagnosticId = (0, import_node_crypto12.randomUUID)();
48900
48938
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -49418,7 +49456,7 @@ async function mcpWarm(argv = [], opts = {}) {
49418
49456
  // src/commands/version.ts
49419
49457
  var import_picocolors15 = __toESM(require("picocolors"));
49420
49458
  function version2() {
49421
- const v = true ? "2.75.11" : "unknown";
49459
+ const v = true ? "2.75.12" : "unknown";
49422
49460
  console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
49423
49461
  }
49424
49462
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.75.11",
3
+ "version": "2.75.12",
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",