codeam-cli 2.74.4 → 2.74.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 +32 -17
- package/package.json +2 -2
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.74.5] — 2026-09-04
|
|
8
|
+
|
|
9
|
+
### Chore
|
|
10
|
+
|
|
11
|
+
- **cli:** Bump @agentclientprotocol/claude-agent-acp 0.59.0 → 0.74.0 (Claude Code 2.1.257) (#711)
|
|
12
|
+
|
|
13
|
+
## [2.74.4] — 2026-09-04
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- **cli:** Transcript upload — size-bounded batches, 429-aware retry, one upload per conversation (#709)
|
|
18
|
+
|
|
7
19
|
## [2.74.3] — 2026-09-04
|
|
8
20
|
|
|
9
21
|
### Fixed
|
package/dist/index.js
CHANGED
|
@@ -8136,7 +8136,7 @@ function readAnonId() {
|
|
|
8136
8136
|
}
|
|
8137
8137
|
function superProperties() {
|
|
8138
8138
|
return {
|
|
8139
|
-
cliVersion: true ? "2.74.
|
|
8139
|
+
cliVersion: true ? "2.74.6" : "0.0.0-dev",
|
|
8140
8140
|
nodeVersion: process.version,
|
|
8141
8141
|
platform: process.platform,
|
|
8142
8142
|
arch: process.arch,
|
|
@@ -8378,7 +8378,7 @@ var http = __toESM(require("http"));
|
|
|
8378
8378
|
// package.json
|
|
8379
8379
|
var package_default = {
|
|
8380
8380
|
name: "codeam-cli",
|
|
8381
|
-
version: "2.74.
|
|
8381
|
+
version: "2.74.6",
|
|
8382
8382
|
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.",
|
|
8383
8383
|
type: "commonjs",
|
|
8384
8384
|
main: "dist/index.js",
|
|
@@ -8451,7 +8451,7 @@ var package_default = {
|
|
|
8451
8451
|
node: ">=22.0.0"
|
|
8452
8452
|
},
|
|
8453
8453
|
dependencies: {
|
|
8454
|
-
"@agentclientprotocol/claude-agent-acp": "0.
|
|
8454
|
+
"@agentclientprotocol/claude-agent-acp": "0.74.0",
|
|
8455
8455
|
"@agentclientprotocol/codex-acp": "1.1.4",
|
|
8456
8456
|
"@agentclientprotocol/sdk": "1.2.1",
|
|
8457
8457
|
"@clack/prompts": "^1.2.0",
|
|
@@ -9971,7 +9971,7 @@ var CommandRelayService = class _CommandRelayService {
|
|
|
9971
9971
|
// fresh + clear the "CLI update available" banner after a self-update
|
|
9972
9972
|
// (a codespace that reinstalls @latest reconnects via heartbeat, not
|
|
9973
9973
|
// pair/reconnect). Older backends ignore the extra field.
|
|
9974
|
-
..."2.74.
|
|
9974
|
+
..."2.74.6" ? { ideVersion: "2.74.6" } : {}
|
|
9975
9975
|
}).then(() => log.trace("relay", `heartbeat ok online=${online}`)).catch((err) => log.trace("relay", `heartbeat failed online=${online}`, err));
|
|
9976
9976
|
}
|
|
9977
9977
|
/**
|
|
@@ -22272,7 +22272,7 @@ async function autoUpgradeBeforeCriticalCommand() {
|
|
|
22272
22272
|
if (process.env.NODE_ENV === "test") return;
|
|
22273
22273
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
22274
22274
|
if (process.env.CI) return;
|
|
22275
|
-
const current2 = true ? "2.74.
|
|
22275
|
+
const current2 = true ? "2.74.6" : null;
|
|
22276
22276
|
if (!current2) return;
|
|
22277
22277
|
const cache = readCache();
|
|
22278
22278
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -22289,7 +22289,7 @@ function checkForUpdates() {
|
|
|
22289
22289
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
22290
22290
|
if (process.env.CI) return;
|
|
22291
22291
|
if (!process.stdout.isTTY) return;
|
|
22292
|
-
const current2 = true ? "2.74.
|
|
22292
|
+
const current2 = true ? "2.74.6" : null;
|
|
22293
22293
|
if (!current2) return;
|
|
22294
22294
|
const cache = readCache();
|
|
22295
22295
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -22312,7 +22312,7 @@ var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
|
|
|
22312
22312
|
var SELF_UPDATE_LS_TIMEOUT_MS = 15e3;
|
|
22313
22313
|
var SUDO_PREFLIGHT_TIMEOUT_MS = 5e3;
|
|
22314
22314
|
function currentCliVersion() {
|
|
22315
|
-
return true ? "2.74.
|
|
22315
|
+
return true ? "2.74.6" : null;
|
|
22316
22316
|
}
|
|
22317
22317
|
async function installedVersion(deps) {
|
|
22318
22318
|
const ls = await deps.run(
|
|
@@ -25032,10 +25032,20 @@ function parseCloudflaredUrl(stderr) {
|
|
|
25032
25032
|
const match = stderr.match(CLOUDFLARED_URL_RE);
|
|
25033
25033
|
return match ? match[0] : null;
|
|
25034
25034
|
}
|
|
25035
|
-
var
|
|
25036
|
-
|
|
25037
|
-
|
|
25038
|
-
|
|
25035
|
+
var EXPO_DEEP_LINK_RE = /exp:\/\/[^\s"'`)]+\.exp\.(?:direct|host)(?::\d+)?/;
|
|
25036
|
+
var EXPO_DEBUG_TUNNEL_RE = /Tunnel URL:\s*(https?:\/\/([^\s"'`)]+\.exp\.(?:direct|host)))/;
|
|
25037
|
+
function parseExpoUrl(output) {
|
|
25038
|
+
const direct = output.match(EXPO_DEEP_LINK_RE);
|
|
25039
|
+
if (direct) return direct[0];
|
|
25040
|
+
const dbg = output.match(EXPO_DEBUG_TUNNEL_RE);
|
|
25041
|
+
if (dbg) return `exp://${dbg[2]}`;
|
|
25042
|
+
return null;
|
|
25043
|
+
}
|
|
25044
|
+
var EXPO_TUNNEL_DEBUG_CHANNEL = "expo:start:server:ngrok";
|
|
25045
|
+
function expoTunnelDebugEnv(existing) {
|
|
25046
|
+
const cur = (existing ?? "").split(",").map((s) => s.trim()).filter(Boolean);
|
|
25047
|
+
if (!cur.includes(EXPO_TUNNEL_DEBUG_CHANNEL)) cur.push(EXPO_TUNNEL_DEBUG_CHANNEL);
|
|
25048
|
+
return { DEBUG: cur.join(",") };
|
|
25039
25049
|
}
|
|
25040
25050
|
var RAW_EXCERPT_LIMIT = 1e3;
|
|
25041
25051
|
function describeDetectionFailure(raw) {
|
|
@@ -26643,9 +26653,11 @@ async function startDevServer(ctx) {
|
|
|
26643
26653
|
await applyPreviewHostAllow(cwd);
|
|
26644
26654
|
const spawnable = normalizeDetectionForSpawn(detection, cwd);
|
|
26645
26655
|
emitProgress("BOOT_SEQUENCE", `${spawnable.command} ${spawnable.args.join(" ")}`);
|
|
26656
|
+
const isExpo = detection.framework === "Expo";
|
|
26657
|
+
const expoDebugEnv = isExpo && isExpoTunnelCommand(detection.command, detection.args ?? []) ? expoTunnelDebugEnv(spawnable.env?.DEBUG ?? process.env.DEBUG) : {};
|
|
26646
26658
|
const devServer = (0, import_child_process23.spawn)(spawnable.command, spawnable.args, {
|
|
26647
26659
|
cwd,
|
|
26648
|
-
env: { ...process.env, ...spawnable.env ?? {} },
|
|
26660
|
+
env: { ...process.env, ...spawnable.env ?? {}, ...expoDebugEnv },
|
|
26649
26661
|
stdio: ["ignore", "pipe", "pipe"],
|
|
26650
26662
|
// POSIX: lead a new process group so teardown can SIGTERM the whole
|
|
26651
26663
|
// tree. Dev servers fork worker children that bind the port; killing
|
|
@@ -26659,14 +26671,17 @@ async function startDevServer(ctx) {
|
|
|
26659
26671
|
emitProgress("WAITING_FOR_READY", detection.ready_pattern);
|
|
26660
26672
|
const expoUrlRef = { current: null };
|
|
26661
26673
|
let outputTail = "";
|
|
26662
|
-
const readyRe =
|
|
26674
|
+
const readyRe = isExpo ? new RegExp(
|
|
26675
|
+
`(?:${compileReadyPattern(detection.ready_pattern).source})|exp:\\/\\/[^\\s]+\\.exp\\.(?:direct|host)|Tunnel URL:`,
|
|
26676
|
+
"i"
|
|
26677
|
+
) : compileReadyPattern(detection.ready_pattern);
|
|
26663
26678
|
const isNextJs = /next/i.test(detection.framework);
|
|
26664
26679
|
const outcome = await waitForDevServerReady(devServer, readyRe, {
|
|
26665
26680
|
timeoutMs: 12e4,
|
|
26666
26681
|
onChunk: (s) => {
|
|
26667
26682
|
outputTail = (outputTail + s).slice(-16e3);
|
|
26668
|
-
if (!expoUrlRef.current &&
|
|
26669
|
-
expoUrlRef.current = parseExpoUrl(
|
|
26683
|
+
if (!expoUrlRef.current && isExpo) {
|
|
26684
|
+
expoUrlRef.current = parseExpoUrl(outputTail);
|
|
26670
26685
|
}
|
|
26671
26686
|
},
|
|
26672
26687
|
portProbe: isNextJs ? () => waitForPortListening(detection.port, { timeoutMs: 1e3, intervalMs: 250 }) : void 0
|
|
@@ -47525,7 +47540,7 @@ function checkChokidar() {
|
|
|
47525
47540
|
}
|
|
47526
47541
|
async function doctor(args2 = []) {
|
|
47527
47542
|
const json = args2.includes("--json");
|
|
47528
|
-
const cliVersion = true ? "2.74.
|
|
47543
|
+
const cliVersion = true ? "2.74.6" : "0.0.0-dev";
|
|
47529
47544
|
const apiBase2 = resolveApiBaseUrl();
|
|
47530
47545
|
const diagnosticId = (0, import_node_crypto13.randomUUID)();
|
|
47531
47546
|
log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
|
|
@@ -48049,7 +48064,7 @@ async function mcpWarm(argv = [], opts = {}) {
|
|
|
48049
48064
|
// src/commands/version.ts
|
|
48050
48065
|
var import_picocolors15 = __toESM(require("picocolors"));
|
|
48051
48066
|
function version2() {
|
|
48052
|
-
const v = true ? "2.74.
|
|
48067
|
+
const v = true ? "2.74.6" : "unknown";
|
|
48053
48068
|
console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
|
|
48054
48069
|
}
|
|
48055
48070
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeam-cli",
|
|
3
|
-
"version": "2.74.
|
|
3
|
+
"version": "2.74.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",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"node": ">=22.0.0"
|
|
74
74
|
},
|
|
75
75
|
"dependencies": {
|
|
76
|
-
"@agentclientprotocol/claude-agent-acp": "0.
|
|
76
|
+
"@agentclientprotocol/claude-agent-acp": "0.74.0",
|
|
77
77
|
"@agentclientprotocol/codex-acp": "1.1.4",
|
|
78
78
|
"@agentclientprotocol/sdk": "1.2.1",
|
|
79
79
|
"@clack/prompts": "^1.2.0",
|