codeam-cli 2.73.5 → 2.73.7

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,18 @@ 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.73.6] — 2026-09-03
8
+
9
+ ### Fixed
10
+
11
+ - **cli:** AcpClient.stop() reaps the whole adapter tree, not just the adapter (#690)
12
+
13
+ ## [2.73.5] — 2026-09-03
14
+
15
+ ### Fixed
16
+
17
+ - **shared:** Postman's MCP server never installed — npm refuses it (#688)
18
+
7
19
  ## [2.73.4] — 2026-09-03
8
20
 
9
21
  ### Fixed
package/dist/index.js CHANGED
@@ -8116,7 +8116,7 @@ function readAnonId() {
8116
8116
  }
8117
8117
  function superProperties() {
8118
8118
  return {
8119
- cliVersion: true ? "2.73.5" : "0.0.0-dev",
8119
+ cliVersion: true ? "2.73.7" : "0.0.0-dev",
8120
8120
  nodeVersion: process.version,
8121
8121
  platform: process.platform,
8122
8122
  arch: process.arch,
@@ -8358,7 +8358,7 @@ var http = __toESM(require("http"));
8358
8358
  // package.json
8359
8359
  var package_default = {
8360
8360
  name: "codeam-cli",
8361
- version: "2.73.5",
8361
+ version: "2.73.7",
8362
8362
  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.",
8363
8363
  type: "commonjs",
8364
8364
  main: "dist/index.js",
@@ -9951,7 +9951,7 @@ var CommandRelayService = class _CommandRelayService {
9951
9951
  // fresh + clear the "CLI update available" banner after a self-update
9952
9952
  // (a codespace that reinstalls @latest reconnects via heartbeat, not
9953
9953
  // pair/reconnect). Older backends ignore the extra field.
9954
- ..."2.73.5" ? { ideVersion: "2.73.5" } : {}
9954
+ ..."2.73.7" ? { ideVersion: "2.73.7" } : {}
9955
9955
  }).then(() => log.trace("relay", `heartbeat ok online=${online}`)).catch((err) => log.trace("relay", `heartbeat failed online=${online}`, err));
9956
9956
  }
9957
9957
  /**
@@ -22227,7 +22227,7 @@ async function autoUpgradeBeforeCriticalCommand() {
22227
22227
  if (process.env.NODE_ENV === "test") return;
22228
22228
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
22229
22229
  if (process.env.CI) return;
22230
- const current2 = true ? "2.73.5" : null;
22230
+ const current2 = true ? "2.73.7" : null;
22231
22231
  if (!current2) return;
22232
22232
  const cache = readCache();
22233
22233
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -22244,7 +22244,7 @@ function checkForUpdates() {
22244
22244
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
22245
22245
  if (process.env.CI) return;
22246
22246
  if (!process.stdout.isTTY) return;
22247
- const current2 = true ? "2.73.5" : null;
22247
+ const current2 = true ? "2.73.7" : null;
22248
22248
  if (!current2) return;
22249
22249
  const cache = readCache();
22250
22250
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -22267,7 +22267,7 @@ var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
22267
22267
  var SELF_UPDATE_LS_TIMEOUT_MS = 15e3;
22268
22268
  var SUDO_PREFLIGHT_TIMEOUT_MS = 5e3;
22269
22269
  function currentCliVersion() {
22270
- return true ? "2.73.5" : null;
22270
+ return true ? "2.73.7" : null;
22271
22271
  }
22272
22272
  async function installedVersion(deps) {
22273
22273
  const ls = await deps.run(
@@ -35884,9 +35884,24 @@ var AcpClient = class {
35884
35884
  ...this.opts.extraEnv ?? {},
35885
35885
  PATH: augmentedPath
35886
35886
  },
35887
- stdio: ["pipe", "pipe", "pipe"]
35887
+ stdio: ["pipe", "pipe", "pipe"],
35888
+ // ⚠️ Own process group, so `stop()` can reap the WHOLE tree. The adapter
35889
+ // is only the top of it: it spawns the real `claude`, which spawns one
35890
+ // `codeam mcp-run` shim per integration, each of which spawns the
35891
+ // vendor's MCP server. Killing the adapter alone orphaned all of that —
35892
+ // see `stop()` for the incident. Windows has no process groups; there
35893
+ // the tree is reaped with `taskkill /T` instead.
35894
+ detached: process.platform !== "win32"
35888
35895
  });
35889
35896
  this.child = child;
35897
+ const pid = child.pid;
35898
+ if (pid && process.platform !== "win32") {
35899
+ const reapOnExit = () => {
35900
+ if (this.child === child) killQuiet(-pid, "SIGKILL");
35901
+ };
35902
+ process.once("exit", reapOnExit);
35903
+ child.once("exit", () => process.removeListener("exit", reapOnExit));
35904
+ }
35890
35905
  child.stderr?.setEncoding("utf8");
35891
35906
  child.stderr?.on("data", (chunk) => {
35892
35907
  for (const line of chunk.split(/\r?\n/)) {
@@ -36269,7 +36284,22 @@ var AcpClient = class {
36269
36284
  if (loadTimer) clearTimeout(loadTimer);
36270
36285
  this.opts.endLoadReplay?.();
36271
36286
  }
36287
+ const abandoned = this.sessionId;
36272
36288
  this.sessionId = sessionId;
36289
+ if (abandoned && abandoned !== sessionId) {
36290
+ try {
36291
+ await this.connection.closeSession({ sessionId: abandoned });
36292
+ log.info(
36293
+ "acpClient",
36294
+ `loadSession \u2014 closed the abandoned fresh session ${abandoned.slice(0, 8)}`
36295
+ );
36296
+ } catch (err) {
36297
+ log.warn(
36298
+ "acpClient",
36299
+ `loadSession \u2014 could not close abandoned session ${abandoned.slice(0, 8)}: ${err instanceof Error ? err.message : String(err)}`
36300
+ );
36301
+ }
36302
+ }
36273
36303
  if (loaded?.configOptions) this.captureModelConfig(loaded.configOptions);
36274
36304
  if (loaded?.modes !== void 0) this.captureModes(loaded.modes ?? null);
36275
36305
  log.info("acpClient", `loadSession \u2190 ok sessionId=${sessionId.slice(0, 8)}`);
@@ -36535,10 +36565,18 @@ var AcpClient = class {
36535
36565
  this.connection = null;
36536
36566
  this.sessionId = null;
36537
36567
  try {
36538
- child.kill("SIGTERM");
36568
+ const pid = child.pid;
36569
+ if (process.platform === "win32") {
36570
+ if (pid) (0, import_node_child_process29.spawnSync)("taskkill", ["/F", "/T", "/PID", String(pid)], { stdio: "ignore" });
36571
+ } else if (pid) {
36572
+ killQuiet(-pid, "SIGTERM");
36573
+ } else {
36574
+ child.kill("SIGTERM");
36575
+ }
36539
36576
  const grace = new Promise((resolve11) => {
36540
36577
  const t2 = setTimeout(() => {
36541
- killQuiet(child, "SIGKILL");
36578
+ if (process.platform !== "win32" && pid) killQuiet(-pid, "SIGKILL");
36579
+ else killQuiet(child, "SIGKILL");
36542
36580
  resolve11();
36543
36581
  }, 2e3);
36544
36582
  child.once("exit", () => {
@@ -47118,7 +47156,7 @@ function checkChokidar() {
47118
47156
  }
47119
47157
  async function doctor(args2 = []) {
47120
47158
  const json = args2.includes("--json");
47121
- const cliVersion = true ? "2.73.5" : "0.0.0-dev";
47159
+ const cliVersion = true ? "2.73.7" : "0.0.0-dev";
47122
47160
  const apiBase2 = resolveApiBaseUrl();
47123
47161
  const diagnosticId = (0, import_node_crypto13.randomUUID)();
47124
47162
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -47589,7 +47627,7 @@ async function mcpWarm(argv = []) {
47589
47627
  // src/commands/version.ts
47590
47628
  var import_picocolors15 = __toESM(require("picocolors"));
47591
47629
  function version2() {
47592
- const v = true ? "2.73.5" : "unknown";
47630
+ const v = true ? "2.73.7" : "unknown";
47593
47631
  console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
47594
47632
  }
47595
47633
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.73.5",
3
+ "version": "2.73.7",
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",