codeam-cli 2.48.0 → 2.48.1

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,21 @@ 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.48.0] — 2026-06-26
8
+
9
+ ### Added
10
+
11
+ - **shared:** EnvVar wire type for env-config
12
+ - **cli:** Dotenv parse/serialize util for env-config
13
+ - **cli:** Accept env-config vars[] in startCommandSchema
14
+ - **cli:** Env_read handler
15
+ - **cli:** Env_write handler (validate + atomic write)
16
+ - **cli:** Preview_restart handler (kill + re-spawn from stored detection)
17
+
18
+ ### Changed
19
+
20
+ - **cli:** Store detection on ActivePreview + extract startPreviewFromDetection
21
+
7
22
  ## [2.47.1] — 2026-06-26
8
23
 
9
24
  ### Chore
package/dist/index.js CHANGED
@@ -5397,7 +5397,7 @@ function readAnonId() {
5397
5397
  }
5398
5398
  function superProperties() {
5399
5399
  return {
5400
- cliVersion: true ? "2.48.0" : "0.0.0-dev",
5400
+ cliVersion: true ? "2.48.1" : "0.0.0-dev",
5401
5401
  nodeVersion: process.version,
5402
5402
  platform: process.platform,
5403
5403
  arch: process.arch,
@@ -5578,7 +5578,7 @@ var os4 = __toESM(require("os"));
5578
5578
  // package.json
5579
5579
  var package_default = {
5580
5580
  name: "codeam-cli",
5581
- version: "2.48.0",
5581
+ version: "2.48.1",
5582
5582
  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.",
5583
5583
  type: "commonjs",
5584
5584
  main: "dist/index.js",
@@ -18137,7 +18137,7 @@ async function autoUpgradeBeforeCriticalCommand() {
18137
18137
  if (process.env.NODE_ENV === "test") return;
18138
18138
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
18139
18139
  if (process.env.CI) return;
18140
- const current = true ? "2.48.0" : null;
18140
+ const current = true ? "2.48.1" : null;
18141
18141
  if (!current) return;
18142
18142
  const cache = readCache();
18143
18143
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -18154,7 +18154,7 @@ function checkForUpdates() {
18154
18154
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
18155
18155
  if (process.env.CI) return;
18156
18156
  if (!process.stdout.isTTY) return;
18157
- const current = true ? "2.48.0" : null;
18157
+ const current = true ? "2.48.1" : null;
18158
18158
  if (!current) return;
18159
18159
  const cache = readCache();
18160
18160
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -18596,7 +18596,7 @@ var defaultSpawner = (env, cwd, args2 = []) => (0, import_node_child_process14.s
18596
18596
  detached: false
18597
18597
  });
18598
18598
  function currentCliVersion() {
18599
- return true ? "2.48.0" : null;
18599
+ return true ? "2.48.1" : null;
18600
18600
  }
18601
18601
  function runCmd(cmd, args2, timeoutMs) {
18602
18602
  return new Promise((resolve7) => {
@@ -25062,6 +25062,11 @@ var StreamingState = class {
25062
25062
  */
25063
25063
  async closeWithBubble(bubble) {
25064
25064
  this.text = "";
25065
+ for (const [chunkId, chunk] of this.streamingChunks) {
25066
+ if (chunk.kind === "text") {
25067
+ this.streamingChunks.set(chunkId, { kind: "text", content: bubble });
25068
+ }
25069
+ }
25065
25070
  await Promise.all([
25066
25071
  this.publisher.publishOutput({ type: "text", content: bubble, done: true }),
25067
25072
  this.flushStreamingChunks()
@@ -25735,10 +25740,11 @@ async function handleCommand(cmd, client2, relay, acpSessionId, models, streamin
25735
25740
  }
25736
25741
  } catch (err) {
25737
25742
  const hadText = streaming.getCurrentText().trim().length > 0;
25738
- await recoverFromFailedTurn(client2, streaming);
25739
25743
  const detail = describeError(err);
25740
25744
  log.warn("acpRunner", `prompt failed: ${detail}`);
25745
+ await cancelStuckTurn(client2);
25741
25746
  if (shouldOfferOneMRecovery({ detail, recentStderr: recentStderr.join("\n"), finalText: "" })) {
25747
+ await streaming.closeAll();
25742
25748
  await oneMRecovery.offer(cmd.id, blocks);
25743
25749
  return;
25744
25750
  }
@@ -25749,9 +25755,11 @@ async function handleCommand(cmd, client2, relay, acpSessionId, models, streamin
25749
25755
  agent: opts.agent
25750
25756
  });
25751
25757
  if (bubble) {
25752
- await publisher.publishOutput({ type: "text", content: bubble, done: true });
25758
+ await streaming.closeWithBubble(bubble);
25753
25759
  history.appendAgentReply(bubble);
25754
25760
  void history.flush();
25761
+ } else {
25762
+ await streaming.closeAll();
25755
25763
  }
25756
25764
  if (bubble === AUTH_FAILURE_MESSAGE) {
25757
25765
  void reportCredentialInvalid(opts);
@@ -26062,12 +26070,15 @@ function describeError(err) {
26062
26070
  return String(err);
26063
26071
  }
26064
26072
  async function recoverFromFailedTurn(client2, streaming) {
26073
+ await cancelStuckTurn(client2);
26074
+ await streaming.closeAll();
26075
+ }
26076
+ async function cancelStuckTurn(client2) {
26065
26077
  try {
26066
26078
  await client2.cancel();
26067
26079
  } catch (err) {
26068
26080
  log.warn("acpRunner", `post-failure cancel failed: ${describeError(err)}`);
26069
26081
  }
26070
- await streaming.closeAll();
26071
26082
  }
26072
26083
  function buildBannerSubtitle(agentId, acpSessionId, model, tier) {
26073
26084
  const meta = AGENT_REGISTRY[agentId];
@@ -29964,7 +29975,7 @@ function checkChokidar() {
29964
29975
  }
29965
29976
  async function doctor(args2 = []) {
29966
29977
  const json = args2.includes("--json");
29967
- const cliVersion = true ? "2.48.0" : "0.0.0-dev";
29978
+ const cliVersion = true ? "2.48.1" : "0.0.0-dev";
29968
29979
  const apiBase2 = resolveApiBaseUrl();
29969
29980
  const diagnosticId = (0, import_node_crypto8.randomUUID)();
29970
29981
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -30163,7 +30174,7 @@ async function completion(args2) {
30163
30174
  // src/commands/version.ts
30164
30175
  var import_picocolors15 = __toESM(require("picocolors"));
30165
30176
  function version2() {
30166
- const v = true ? "2.48.0" : "unknown";
30177
+ const v = true ? "2.48.1" : "unknown";
30167
30178
  console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
30168
30179
  }
30169
30180
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.48.0",
3
+ "version": "2.48.1",
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",