codeam-cli 2.39.57 → 2.39.59

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,28 @@ 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.39.58] — 2026-06-20
8
+
9
+ ### Added
10
+
11
+ - **host-agent:** Event-driven session lifecycle (off the heartbeat)
12
+
13
+ ### Fixed
14
+
15
+ - **host-agent:** Put SDK-bundled claude on PATH for `headroom init`
16
+
17
+ ## [2.39.57] — 2026-06-20
18
+
19
+ ### Added
20
+
21
+ - **host-agent:** Event-driven session lifecycle (off the heartbeat)
22
+
23
+ ## [2.39.56] — 2026-06-20
24
+
25
+ ### Added
26
+
27
+ - **cli:** Report supervised sessions in self-hosted heartbeat
28
+
7
29
  ## [2.39.55] — 2026-06-20
8
30
 
9
31
  ### Added
package/dist/index.js CHANGED
@@ -5388,7 +5388,7 @@ function readAnonId() {
5388
5388
  }
5389
5389
  function superProperties() {
5390
5390
  return {
5391
- cliVersion: true ? "2.39.57" : "0.0.0-dev",
5391
+ cliVersion: true ? "2.39.59" : "0.0.0-dev",
5392
5392
  nodeVersion: process.version,
5393
5393
  platform: process.platform,
5394
5394
  arch: process.arch,
@@ -5547,7 +5547,7 @@ var os4 = __toESM(require("os"));
5547
5547
  // package.json
5548
5548
  var package_default = {
5549
5549
  name: "codeam-cli",
5550
- version: "2.39.57",
5550
+ version: "2.39.59",
5551
5551
  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.",
5552
5552
  type: "commonjs",
5553
5553
  main: "dist/index.js",
@@ -11065,12 +11065,12 @@ function isAvailable() {
11065
11065
  }
11066
11066
  function augmentPath() {
11067
11067
  const dirs = probeInstallDirs();
11068
- const sep4 = path14.delimiter;
11068
+ const sep5 = path14.delimiter;
11069
11069
  const current = process.env.PATH ?? "";
11070
- const existing = new Set(current.split(sep4).filter(Boolean));
11070
+ const existing = new Set(current.split(sep5).filter(Boolean));
11071
11071
  const additions = dirs.filter((d3) => !existing.has(d3));
11072
11072
  if (additions.length === 0) return;
11073
- process.env.PATH = additions.join(sep4) + sep4 + current;
11073
+ process.env.PATH = additions.join(sep5) + sep5 + current;
11074
11074
  }
11075
11075
  function runInstaller() {
11076
11076
  const isWindows = process.platform === "win32";
@@ -17367,7 +17367,7 @@ function checkForUpdates() {
17367
17367
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
17368
17368
  if (process.env.CI) return;
17369
17369
  if (!process.stdout.isTTY) return;
17370
- const current = true ? "2.39.57" : null;
17370
+ const current = true ? "2.39.59" : null;
17371
17371
  if (!current) return;
17372
17372
  const cache = readCache();
17373
17373
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -17637,6 +17637,38 @@ function readHeadroomChildEnv() {
17637
17637
  return {};
17638
17638
  }
17639
17639
  }
17640
+ function bundledClaudeBinDir() {
17641
+ const roots = /* @__PURE__ */ new Set();
17642
+ let dir = __dirname;
17643
+ for (let i = 0; i < 6; i++) {
17644
+ roots.add(path45.join(dir, "node_modules"));
17645
+ const parent = path45.dirname(dir);
17646
+ if (parent === dir) break;
17647
+ dir = parent;
17648
+ }
17649
+ try {
17650
+ const main2 = require.resolve("@anthropic-ai/claude-agent-sdk");
17651
+ const marker = `${path45.sep}@anthropic-ai${path45.sep}`;
17652
+ const idx = main2.lastIndexOf(marker);
17653
+ if (idx !== -1) roots.add(main2.slice(0, idx));
17654
+ } catch {
17655
+ }
17656
+ for (const nm of roots) {
17657
+ const atAnthropic = path45.join(nm, "@anthropic-ai");
17658
+ let entries;
17659
+ try {
17660
+ entries = fs39.readdirSync(atAnthropic);
17661
+ } catch {
17662
+ continue;
17663
+ }
17664
+ for (const entry of entries) {
17665
+ if (!entry.startsWith("claude-agent-sdk-")) continue;
17666
+ const bin = path45.join(atAnthropic, entry, "claude");
17667
+ if (fs39.existsSync(bin)) return path45.dirname(bin);
17668
+ }
17669
+ }
17670
+ return null;
17671
+ }
17640
17672
  async function setupHeadroomForSelfHosted(agent, runner = defaultHeadroomRunner) {
17641
17673
  const PIP_PACKAGES = [
17642
17674
  "headroom-ai",
@@ -17693,8 +17725,18 @@ async function setupHeadroomForSelfHosted(agent, runner = defaultHeadroomRunner)
17693
17725
  return false;
17694
17726
  }
17695
17727
  const initKind = agentIdToHeadroomKind(agent);
17728
+ const initEnv = { ...process.env };
17729
+ if (initKind === "claude") {
17730
+ const claudeDir = bundledClaudeBinDir();
17731
+ if (claudeDir) {
17732
+ initEnv.PATH = `${claudeDir}${path45.delimiter}${process.env["PATH"] ?? ""}`;
17733
+ log.info("host-agent", `headroom init: bundled claude on PATH (${claudeDir})`);
17734
+ } else {
17735
+ log.warn("host-agent", "headroom init: bundled claude binary not found \u2014 init may fail");
17736
+ }
17737
+ }
17696
17738
  const initOk = await new Promise((resolve7) => {
17697
- (0, import_node_child_process13.execFile)("headroom", ["init", "--global", initKind], (initErr, stdout, stderr) => {
17739
+ (0, import_node_child_process13.execFile)("headroom", ["init", "--global", initKind], { env: initEnv }, (initErr, stdout, stderr) => {
17698
17740
  if (initErr) {
17699
17741
  const detail = (stderr || initErr.message).replace(/\n+$/g, "");
17700
17742
  log.warn("host-agent", `headroom init failed (best-effort): ${detail}`);
@@ -17727,7 +17769,7 @@ var defaultSpawner = (env, cwd, args2 = []) => (0, import_node_child_process13.s
17727
17769
  detached: false
17728
17770
  });
17729
17771
  function currentCliVersion() {
17730
- return true ? "2.39.57" : null;
17772
+ return true ? "2.39.59" : null;
17731
17773
  }
17732
17774
  function runCmd(cmd, args2, timeoutMs) {
17733
17775
  return new Promise((resolve7) => {
@@ -28279,7 +28321,7 @@ function checkChokidar() {
28279
28321
  }
28280
28322
  async function doctor(args2 = []) {
28281
28323
  const json = args2.includes("--json");
28282
- const cliVersion = true ? "2.39.57" : "0.0.0-dev";
28324
+ const cliVersion = true ? "2.39.59" : "0.0.0-dev";
28283
28325
  const apiBase2 = resolveApiBaseUrl();
28284
28326
  const diagnosticId = (0, import_node_crypto8.randomUUID)();
28285
28327
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -28478,7 +28520,7 @@ async function completion(args2) {
28478
28520
  // src/commands/version.ts
28479
28521
  var import_picocolors14 = __toESM(require("picocolors"));
28480
28522
  function version2() {
28481
- const v = true ? "2.39.57" : "unknown";
28523
+ const v = true ? "2.39.59" : "unknown";
28482
28524
  console.log(`${import_picocolors14.default.bold("codeam-cli")} ${import_picocolors14.default.cyan(v)}`);
28483
28525
  }
28484
28526
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.39.57",
3
+ "version": "2.39.59",
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",