codeam-cli 2.49.0 → 2.49.2

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,31 @@ 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.49.1] — 2026-06-27
8
+
9
+ ### Fixed
10
+
11
+ - **cli:** Resolve headroom agent from running session, not just payload
12
+
13
+ ## [2.49.0] — 2026-06-27
14
+
15
+ ### Added
16
+
17
+ - **cli:** Parameterize setupHeadroomForSelfHosted (extras + progress + config backup)
18
+ - **cli:** Headroom_configure handler + configure service + postHeadroomEvent
19
+
20
+ ### Fixed
21
+
22
+ - **cli:** Widen sendResult to unknown (drop unsafe casts) + guard agentId + unref stopProxy
23
+ - **cli:** Persistent-container disable phase + validated casts + exclude test driver
24
+ - **cli:** Headroom stopProxy survives missing pkill + procps in int-test image
25
+ - **cli:** Surface driver errors + bake headroom deps into int-test image
26
+ - **workflow:** Reuse prebuilt headroom image in int test + apt retry (no double build)
27
+
28
+ ### Tests
29
+
30
+ - **cli:** Real Docker integration test for Headroom on-demand enable/disable
31
+
7
32
  ## [2.48.1] — 2026-06-26
8
33
 
9
34
  ### Fixed
package/dist/index.js CHANGED
@@ -5397,7 +5397,7 @@ function readAnonId() {
5397
5397
  }
5398
5398
  function superProperties() {
5399
5399
  return {
5400
- cliVersion: true ? "2.49.0" : "0.0.0-dev",
5400
+ cliVersion: true ? "2.49.2" : "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.49.0",
5581
+ version: "2.49.2",
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",
@@ -14747,7 +14747,7 @@ async function autoUpgradeBeforeCriticalCommand() {
14747
14747
  if (process.env.NODE_ENV === "test") return;
14748
14748
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
14749
14749
  if (process.env.CI) return;
14750
- const current = true ? "2.49.0" : null;
14750
+ const current = true ? "2.49.2" : null;
14751
14751
  if (!current) return;
14752
14752
  const cache = readCache();
14753
14753
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -14764,7 +14764,7 @@ function checkForUpdates() {
14764
14764
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
14765
14765
  if (process.env.CI) return;
14766
14766
  if (!process.stdout.isTTY) return;
14767
- const current = true ? "2.49.0" : null;
14767
+ const current = true ? "2.49.2" : null;
14768
14768
  if (!current) return;
14769
14769
  const cache = readCache();
14770
14770
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -15259,7 +15259,7 @@ var defaultSpawner = (env, cwd, args2 = []) => (0, import_node_child_process14.s
15259
15259
  detached: false
15260
15260
  });
15261
15261
  function currentCliVersion() {
15262
- return true ? "2.49.0" : null;
15262
+ return true ? "2.49.2" : null;
15263
15263
  }
15264
15264
  function runCmd(cmd, args2, timeoutMs) {
15265
15265
  return new Promise((resolve7) => {
@@ -18181,7 +18181,7 @@ var headroomConfigureH = async (ctx, cmd, parsed) => {
18181
18181
  return;
18182
18182
  }
18183
18183
  const savingsIngestUrl = parsed.savingsIngestUrl;
18184
- let rawAgentId = typeof parsed.agentId === "string" ? parsed.agentId : "";
18184
+ let rawAgentId = ctx.agentId || (typeof parsed.agentId === "string" ? parsed.agentId : "");
18185
18185
  if (rawAgentId === "claude_code") rawAgentId = "claude";
18186
18186
  let configuredAgent = rawAgentId;
18187
18187
  if (!configuredAgent) {
@@ -19418,6 +19418,9 @@ async function startInfraOnly(agentId) {
19418
19418
  keepAliveCtx,
19419
19419
  pluginId,
19420
19420
  sessionId: session.id,
19421
+ // No-agent mode — there's no running agent to report. Headroom/agent
19422
+ // commands are filtered out by INFRA_ONLY_COMMAND_TYPES before dispatch.
19423
+ agentId: "",
19421
19424
  pluginAuthToken: session.pluginAuthToken ?? void 0
19422
19425
  };
19423
19426
  const relay = new CommandRelayService(
@@ -26315,6 +26318,11 @@ function buildLegacyContextForACP(opts, relay, runtime) {
26315
26318
  keepAliveCtx: null,
26316
26319
  pluginId: opts.pluginId,
26317
26320
  sessionId: opts.sessionId,
26321
+ // The running ACP agent (claude/codex/gemini/cursor). REQUIRED: headroom_configure
26322
+ // resolves the agent from ctx.agentId; without it the enable gate sees '' and
26323
+ // returns {supported:false} for a real Claude session (the `as unknown` cast
26324
+ // below previously hid this missing field from the type checker).
26325
+ agentId: opts.agent,
26318
26326
  pluginAuthToken: opts.pluginAuthToken
26319
26327
  };
26320
26328
  }
@@ -27573,6 +27581,7 @@ async function start(requestedAgent) {
27573
27581
  keepAliveCtx,
27574
27582
  pluginId,
27575
27583
  sessionId: session.id,
27584
+ agentId: session.agent,
27576
27585
  pluginAuthToken: session.pluginAuthToken ?? void 0
27577
27586
  };
27578
27587
  const relay = new CommandRelayService(pluginId, async (cmd) => {
@@ -30192,7 +30201,7 @@ function checkChokidar() {
30192
30201
  }
30193
30202
  async function doctor(args2 = []) {
30194
30203
  const json = args2.includes("--json");
30195
- const cliVersion = true ? "2.49.0" : "0.0.0-dev";
30204
+ const cliVersion = true ? "2.49.2" : "0.0.0-dev";
30196
30205
  const apiBase2 = resolveApiBaseUrl();
30197
30206
  const diagnosticId = (0, import_node_crypto8.randomUUID)();
30198
30207
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -30391,7 +30400,7 @@ async function completion(args2) {
30391
30400
  // src/commands/version.ts
30392
30401
  var import_picocolors15 = __toESM(require("picocolors"));
30393
30402
  function version2() {
30394
- const v = true ? "2.49.0" : "unknown";
30403
+ const v = true ? "2.49.2" : "unknown";
30395
30404
  console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
30396
30405
  }
30397
30406
 
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+
4
+ // src/postinstall.ts
5
+ var c = {
6
+ reset: "\x1B[0m",
7
+ bold: "\x1B[1m",
8
+ dim: "\x1B[2m",
9
+ green: "\x1B[32m",
10
+ cyan: "\x1B[36m",
11
+ violet: "\x1B[35m",
12
+ white: "\x1B[97m"
13
+ };
14
+ var lines = [
15
+ "",
16
+ ` ${c.violet}${c.bold}codeam-cli${c.reset} ${c.dim}\u2014 Claude Code remote control${c.reset}`,
17
+ "",
18
+ ` ${c.dim}1.${c.reset} Pair your phone:`,
19
+ ` ${c.cyan}codeam pair${c.reset}`,
20
+ "",
21
+ ` ${c.dim}2.${c.reset} Launch Claude Code with mobile control:`,
22
+ ` ${c.cyan}codeam${c.reset}`,
23
+ "",
24
+ ` ${c.dim}Other commands:${c.reset}`,
25
+ ` ${c.white}codeam sessions${c.reset} ${c.dim}list paired devices${c.reset}`,
26
+ ` ${c.white}codeam status${c.reset} ${c.dim}show connection info${c.reset}`,
27
+ ` ${c.white}codeam logout${c.reset} ${c.dim}remove all sessions${c.reset}`,
28
+ "",
29
+ ` ${c.dim}Requires Claude Code:${c.reset} ${c.green}npm install -g @anthropic-ai/claude-code${c.reset}`,
30
+ ` ${c.dim}Mobile app:${c.reset} ${c.green}https://www.codeagent-mobile.com${c.reset}`,
31
+ ""
32
+ ];
33
+ process.stdout.write(lines.join("\n") + "\n");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.49.0",
3
+ "version": "2.49.2",
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",