codeam-cli 2.39.48 → 2.39.49

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.39.48] — 2026-06-19
8
+
9
+ ### Fixed
10
+
11
+ - **cli:** Per-session daemon singleton — stop duplicate codeam daemons
12
+
7
13
  ## [2.39.47] — 2026-06-19
8
14
 
9
15
  ### Fixed
package/dist/index.js CHANGED
@@ -488,6 +488,27 @@ function makeConfig(baseDir) {
488
488
  }
489
489
  return { getConfig: getConfig2, ensurePluginId: ensurePluginId2, addSession: addSession2, removeSession: removeSession2, setActiveSession: setActiveSession2, getActiveSession: getActiveSession2, getActiveSessionForAgent: getActiveSessionForAgent2, clearAll: clearAll2, saveCliConfig: saveCliConfig2, loadCliConfig: loadCliConfig2 };
490
490
  }
491
+ var CODESPACE_ENV_KEYS = [
492
+ "PREVIEW_TUNNEL_TOKEN",
493
+ "PREVIEW_TUNNEL_HOSTNAME",
494
+ "HEADROOM_ENABLED",
495
+ "HEADROOM_AGENT",
496
+ "HEADROOM_SAVINGS_INGEST_URL"
497
+ ];
498
+ function loadCodespaceEnv() {
499
+ try {
500
+ const file = path.join(os.homedir(), ".codeam", "codespace-env.json");
501
+ if (!fs.existsSync(file)) return;
502
+ const raw = JSON.parse(fs.readFileSync(file, "utf-8"));
503
+ for (const key of CODESPACE_ENV_KEYS) {
504
+ const value = raw[key];
505
+ if (typeof value === "string" && value.length > 0 && process.env[key] === void 0) {
506
+ process.env[key] = value;
507
+ }
508
+ }
509
+ } catch {
510
+ }
511
+ }
491
512
  var _default = makeConfig();
492
513
  var { getConfig, ensurePluginId, addSession, removeSession, setActiveSession, getActiveSession, getActiveSessionForAgent, clearAll, saveCliConfig, loadCliConfig } = _default;
493
514
 
@@ -5367,7 +5388,7 @@ function readAnonId() {
5367
5388
  }
5368
5389
  function superProperties() {
5369
5390
  return {
5370
- cliVersion: true ? "2.39.48" : "0.0.0-dev",
5391
+ cliVersion: true ? "2.39.49" : "0.0.0-dev",
5371
5392
  nodeVersion: process.version,
5372
5393
  platform: process.platform,
5373
5394
  arch: process.arch,
@@ -5526,7 +5547,7 @@ var os4 = __toESM(require("os"));
5526
5547
  // package.json
5527
5548
  var package_default = {
5528
5549
  name: "codeam-cli",
5529
- version: "2.39.48",
5550
+ version: "2.39.49",
5530
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.",
5531
5552
  type: "commonjs",
5532
5553
  main: "dist/index.js",
@@ -24822,6 +24843,15 @@ async function start(requestedAgent) {
24822
24843
  "pluginAuth",
24823
24844
  `boot triple sessionId=${session.id} pluginId=${pluginId} tokenLen=${tokenForLog.length} tokenHead=${tokenForLog.slice(0, 12)} tokenTail=${tokenForLog.slice(-8)} mintedEqualsCached=${refreshed === session.pluginAuthToken}`
24824
24845
  );
24846
+ const headroomReporter = session.pluginAuthToken ? maybeStartHeadroomReporter({
24847
+ sessionId: session.id,
24848
+ pluginId,
24849
+ pluginAuthToken: session.pluginAuthToken,
24850
+ codespaceId: process.env["CODESPACE_NAME"] ?? session.id
24851
+ }) : null;
24852
+ process.once("exit", () => {
24853
+ headroomReporter?.stop();
24854
+ });
24825
24855
  if (process.env.CODESPACES === "true") ensureClaudeOnboarded();
24826
24856
  let beads = null;
24827
24857
  const getBeads = () => beads;
@@ -27534,7 +27564,7 @@ function checkChokidar() {
27534
27564
  }
27535
27565
  async function doctor(args2 = []) {
27536
27566
  const json = args2.includes("--json");
27537
- const cliVersion = true ? "2.39.48" : "0.0.0-dev";
27567
+ const cliVersion = true ? "2.39.49" : "0.0.0-dev";
27538
27568
  const apiBase2 = resolveApiBaseUrl();
27539
27569
  const diagnosticId = (0, import_node_crypto8.randomUUID)();
27540
27570
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -27733,7 +27763,7 @@ async function completion(args2) {
27733
27763
  // src/commands/version.ts
27734
27764
  var import_picocolors13 = __toESM(require("picocolors"));
27735
27765
  function version2() {
27736
- const v = true ? "2.39.48" : "unknown";
27766
+ const v = true ? "2.39.49" : "unknown";
27737
27767
  console.log(`${import_picocolors13.default.bold("codeam-cli")} ${import_picocolors13.default.cyan(v)}`);
27738
27768
  }
27739
27769
 
@@ -28019,7 +28049,7 @@ function checkForUpdates() {
28019
28049
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
28020
28050
  if (process.env.CI) return;
28021
28051
  if (!process.stdout.isTTY) return;
28022
- const current = true ? "2.39.48" : null;
28052
+ const current = true ? "2.39.49" : null;
28023
28053
  if (!current) return;
28024
28054
  const cache = readCache();
28025
28055
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -28058,6 +28088,7 @@ if (!process.env.HOME) {
28058
28088
  } catch {
28059
28089
  }
28060
28090
  }
28091
+ loadCodespaceEnv();
28061
28092
  var [, , command, ...args] = process.argv;
28062
28093
  async function main() {
28063
28094
  const isMetaCommand = command === "--version" || command === "-v" || command === "version" || command === "--help" || command === "-h" || command === "help";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.39.48",
3
+ "version": "2.39.49",
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",