codeam-cli 2.73.4 → 2.73.6
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 +12 -0
- package/dist/index.js +70 -15
- package/package.json +1 -1
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.5] — 2026-09-03
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **shared:** Postman's MCP server never installed — npm refuses it (#688)
|
|
12
|
+
|
|
13
|
+
## [2.73.4] — 2026-09-03
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- **cli:** MCP startup budget that fits our shim + stop the baton mirror replaying history as live turns (#686)
|
|
18
|
+
|
|
7
19
|
## [2.73.3] — 2026-09-02
|
|
8
20
|
|
|
9
21
|
### Fixed
|
package/dist/index.js
CHANGED
|
@@ -1872,8 +1872,27 @@ var INTEGRATION_REGISTRY = {
|
|
|
1872
1872
|
mcp: {
|
|
1873
1873
|
// Postman's OFFICIAL stdio MCP server (Node). BYO key via POSTMAN_API_KEY
|
|
1874
1874
|
// (env only). Version PINNED; bump only after re-verifying headless.
|
|
1875
|
+
//
|
|
1876
|
+
// ⚠️ `--ignore-scripts` IS LOAD-BEARING — without it this integration
|
|
1877
|
+
// does not work at all, on any box, and never did. The package declares
|
|
1878
|
+
// a `preinstall` guard of `npx only-allow pnpm`, so npm REFUSES to
|
|
1879
|
+
// install it:
|
|
1880
|
+
// info run @postman/postman-mcp-server@2.11.2 preinstall npx only-allow pnpm
|
|
1881
|
+
// info run @postman/postman-mcp-server@2.11.2 preinstall { code: 1 }
|
|
1882
|
+
// and `npx -y @postman/postman-mcp-server@2.11.2` exits 1 before the
|
|
1883
|
+
// server is ever reached — which the agent reports as
|
|
1884
|
+
// `Server "postman" is not connected`, indistinguishable from a slow
|
|
1885
|
+
// start (found while pre-warming the box image, 2026-09-03; the user's
|
|
1886
|
+
// report was "Postman: idem", alongside clickup/trello, whose cause was
|
|
1887
|
+
// entirely different).
|
|
1888
|
+
//
|
|
1889
|
+
// Skipping scripts is safe here: the guard is the only preinstall step
|
|
1890
|
+
// and the published tarball already ships the built
|
|
1891
|
+
// `dist/src/index.js` its `bin` points at. Verified on node:22-slim:
|
|
1892
|
+
// `npx -y <pkg>` → exit 1; `npx -y --ignore-scripts <pkg>` with a key in
|
|
1893
|
+
// the env → starts; and warmed once, the bin resolves offline.
|
|
1875
1894
|
command: "npx",
|
|
1876
|
-
args: ["-y", "@postman/postman-mcp-server@2.11.2"],
|
|
1895
|
+
args: ["-y", "--ignore-scripts", "@postman/postman-mcp-server@2.11.2"],
|
|
1877
1896
|
envMapping: {
|
|
1878
1897
|
POSTMAN_API_KEY: "accessToken"
|
|
1879
1898
|
}
|
|
@@ -8097,7 +8116,7 @@ function readAnonId() {
|
|
|
8097
8116
|
}
|
|
8098
8117
|
function superProperties() {
|
|
8099
8118
|
return {
|
|
8100
|
-
cliVersion: true ? "2.73.
|
|
8119
|
+
cliVersion: true ? "2.73.6" : "0.0.0-dev",
|
|
8101
8120
|
nodeVersion: process.version,
|
|
8102
8121
|
platform: process.platform,
|
|
8103
8122
|
arch: process.arch,
|
|
@@ -8339,7 +8358,7 @@ var http = __toESM(require("http"));
|
|
|
8339
8358
|
// package.json
|
|
8340
8359
|
var package_default = {
|
|
8341
8360
|
name: "codeam-cli",
|
|
8342
|
-
version: "2.73.
|
|
8361
|
+
version: "2.73.6",
|
|
8343
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.",
|
|
8344
8363
|
type: "commonjs",
|
|
8345
8364
|
main: "dist/index.js",
|
|
@@ -9932,7 +9951,7 @@ var CommandRelayService = class _CommandRelayService {
|
|
|
9932
9951
|
// fresh + clear the "CLI update available" banner after a self-update
|
|
9933
9952
|
// (a codespace that reinstalls @latest reconnects via heartbeat, not
|
|
9934
9953
|
// pair/reconnect). Older backends ignore the extra field.
|
|
9935
|
-
..."2.73.
|
|
9954
|
+
..."2.73.6" ? { ideVersion: "2.73.6" } : {}
|
|
9936
9955
|
}).then(() => log.trace("relay", `heartbeat ok online=${online}`)).catch((err) => log.trace("relay", `heartbeat failed online=${online}`, err));
|
|
9937
9956
|
}
|
|
9938
9957
|
/**
|
|
@@ -22208,7 +22227,7 @@ async function autoUpgradeBeforeCriticalCommand() {
|
|
|
22208
22227
|
if (process.env.NODE_ENV === "test") return;
|
|
22209
22228
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
22210
22229
|
if (process.env.CI) return;
|
|
22211
|
-
const current2 = true ? "2.73.
|
|
22230
|
+
const current2 = true ? "2.73.6" : null;
|
|
22212
22231
|
if (!current2) return;
|
|
22213
22232
|
const cache = readCache();
|
|
22214
22233
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -22225,7 +22244,7 @@ function checkForUpdates() {
|
|
|
22225
22244
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
22226
22245
|
if (process.env.CI) return;
|
|
22227
22246
|
if (!process.stdout.isTTY) return;
|
|
22228
|
-
const current2 = true ? "2.73.
|
|
22247
|
+
const current2 = true ? "2.73.6" : null;
|
|
22229
22248
|
if (!current2) return;
|
|
22230
22249
|
const cache = readCache();
|
|
22231
22250
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -22248,7 +22267,7 @@ var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
|
|
|
22248
22267
|
var SELF_UPDATE_LS_TIMEOUT_MS = 15e3;
|
|
22249
22268
|
var SUDO_PREFLIGHT_TIMEOUT_MS = 5e3;
|
|
22250
22269
|
function currentCliVersion() {
|
|
22251
|
-
return true ? "2.73.
|
|
22270
|
+
return true ? "2.73.6" : null;
|
|
22252
22271
|
}
|
|
22253
22272
|
async function installedVersion(deps) {
|
|
22254
22273
|
const ls = await deps.run(
|
|
@@ -35865,9 +35884,24 @@ var AcpClient = class {
|
|
|
35865
35884
|
...this.opts.extraEnv ?? {},
|
|
35866
35885
|
PATH: augmentedPath
|
|
35867
35886
|
},
|
|
35868
|
-
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"
|
|
35869
35895
|
});
|
|
35870
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
|
+
}
|
|
35871
35905
|
child.stderr?.setEncoding("utf8");
|
|
35872
35906
|
child.stderr?.on("data", (chunk) => {
|
|
35873
35907
|
for (const line of chunk.split(/\r?\n/)) {
|
|
@@ -36516,10 +36550,18 @@ var AcpClient = class {
|
|
|
36516
36550
|
this.connection = null;
|
|
36517
36551
|
this.sessionId = null;
|
|
36518
36552
|
try {
|
|
36519
|
-
child.
|
|
36553
|
+
const pid = child.pid;
|
|
36554
|
+
if (process.platform === "win32") {
|
|
36555
|
+
if (pid) (0, import_node_child_process29.spawnSync)("taskkill", ["/F", "/T", "/PID", String(pid)], { stdio: "ignore" });
|
|
36556
|
+
} else if (pid) {
|
|
36557
|
+
killQuiet(-pid, "SIGTERM");
|
|
36558
|
+
} else {
|
|
36559
|
+
child.kill("SIGTERM");
|
|
36560
|
+
}
|
|
36520
36561
|
const grace = new Promise((resolve11) => {
|
|
36521
36562
|
const t2 = setTimeout(() => {
|
|
36522
|
-
killQuiet(
|
|
36563
|
+
if (process.platform !== "win32" && pid) killQuiet(-pid, "SIGKILL");
|
|
36564
|
+
else killQuiet(child, "SIGKILL");
|
|
36523
36565
|
resolve11();
|
|
36524
36566
|
}, 2e3);
|
|
36525
36567
|
child.once("exit", () => {
|
|
@@ -47099,7 +47141,7 @@ function checkChokidar() {
|
|
|
47099
47141
|
}
|
|
47100
47142
|
async function doctor(args2 = []) {
|
|
47101
47143
|
const json = args2.includes("--json");
|
|
47102
|
-
const cliVersion = true ? "2.73.
|
|
47144
|
+
const cliVersion = true ? "2.73.6" : "0.0.0-dev";
|
|
47103
47145
|
const apiBase2 = resolveApiBaseUrl();
|
|
47104
47146
|
const diagnosticId = (0, import_node_crypto13.randomUUID)();
|
|
47105
47147
|
log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
|
|
@@ -47494,6 +47536,11 @@ function specOf(delivery) {
|
|
|
47494
47536
|
const spec = (delivery.args ?? []).find((a) => !a.startsWith("-"));
|
|
47495
47537
|
return spec ?? null;
|
|
47496
47538
|
}
|
|
47539
|
+
function launcherFlagsOf(delivery) {
|
|
47540
|
+
const args2 = delivery.args ?? [];
|
|
47541
|
+
const specIndex = args2.findIndex((a) => !a.startsWith("-"));
|
|
47542
|
+
return specIndex === -1 ? [...args2] : args2.slice(0, specIndex);
|
|
47543
|
+
}
|
|
47497
47544
|
function warmTargets() {
|
|
47498
47545
|
const bySpec = /* @__PURE__ */ new Map();
|
|
47499
47546
|
for (const integration of getEnabledIntegrations()) {
|
|
@@ -47502,14 +47549,20 @@ function warmTargets() {
|
|
|
47502
47549
|
const spec = specOf(delivery);
|
|
47503
47550
|
if (!spec) continue;
|
|
47504
47551
|
if (!bySpec.has(spec)) {
|
|
47505
|
-
bySpec.set(spec, {
|
|
47552
|
+
bySpec.set(spec, {
|
|
47553
|
+
id: integration.id,
|
|
47554
|
+
launcher: delivery.command,
|
|
47555
|
+
flags: launcherFlagsOf(delivery),
|
|
47556
|
+
spec
|
|
47557
|
+
});
|
|
47506
47558
|
}
|
|
47507
47559
|
}
|
|
47508
47560
|
return [...bySpec.values()];
|
|
47509
47561
|
}
|
|
47510
47562
|
function warmCommand(target) {
|
|
47511
47563
|
if (target.launcher === "npx") {
|
|
47512
|
-
|
|
47564
|
+
const extra = target.flags.filter((f) => f !== "-y");
|
|
47565
|
+
return { command: "npx", args: ["-y", ...extra, "--package", target.spec, "-c", "true"] };
|
|
47513
47566
|
}
|
|
47514
47567
|
if (target.launcher === "uvx") {
|
|
47515
47568
|
return { command: "uv", args: ["tool", "install", target.spec] };
|
|
@@ -47540,7 +47593,9 @@ async function mcpWarm(argv = []) {
|
|
|
47540
47593
|
result.warmed.push(target.spec);
|
|
47541
47594
|
console.log(` OK ${target.spec} (${secs}s)`);
|
|
47542
47595
|
} else {
|
|
47543
|
-
const
|
|
47596
|
+
const noise = /^npm (warn|notice)\b/;
|
|
47597
|
+
const lines = (run.stderr ?? "").split("\n").map((l) => l.trim()).filter((l) => l.length > 0 && !noise.test(l));
|
|
47598
|
+
const reason = run.error?.message ?? lines[lines.length - 1] ?? `exit ${String(run.status)} (no stderr)`;
|
|
47544
47599
|
result.failed.push({ spec: target.spec, reason });
|
|
47545
47600
|
console.log(` MISS ${target.spec} (${secs}s) \u2014 fetched at runtime instead: ${reason}`);
|
|
47546
47601
|
}
|
|
@@ -47557,7 +47612,7 @@ async function mcpWarm(argv = []) {
|
|
|
47557
47612
|
// src/commands/version.ts
|
|
47558
47613
|
var import_picocolors15 = __toESM(require("picocolors"));
|
|
47559
47614
|
function version2() {
|
|
47560
|
-
const v = true ? "2.73.
|
|
47615
|
+
const v = true ? "2.73.6" : "unknown";
|
|
47561
47616
|
console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
|
|
47562
47617
|
}
|
|
47563
47618
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeam-cli",
|
|
3
|
-
"version": "2.73.
|
|
3
|
+
"version": "2.73.6",
|
|
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",
|