codeam-cli 2.75.22 → 2.75.23
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 +6 -0
- package/dist/index.js +31 -14
- package/package.json +1 -1
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.75.22] — 2026-09-25
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **cli:** House agents read the Agent Standard from their own config dir
|
|
12
|
+
|
|
7
13
|
## [2.75.21] — 2026-09-25
|
|
8
14
|
|
|
9
15
|
### Fixed
|
package/dist/index.js
CHANGED
|
@@ -10509,7 +10509,7 @@ function readAnonId() {
|
|
|
10509
10509
|
}
|
|
10510
10510
|
function superProperties() {
|
|
10511
10511
|
return {
|
|
10512
|
-
cliVersion: true ? "2.75.
|
|
10512
|
+
cliVersion: true ? "2.75.23" : "0.0.0-dev",
|
|
10513
10513
|
nodeVersion: process.version,
|
|
10514
10514
|
platform: process.platform,
|
|
10515
10515
|
arch: process.arch,
|
|
@@ -10751,7 +10751,7 @@ var http = __toESM(require("http"));
|
|
|
10751
10751
|
// package.json
|
|
10752
10752
|
var package_default = {
|
|
10753
10753
|
name: "codeam-cli",
|
|
10754
|
-
version: "2.75.
|
|
10754
|
+
version: "2.75.23",
|
|
10755
10755
|
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.",
|
|
10756
10756
|
type: "commonjs",
|
|
10757
10757
|
main: "dist/index.js",
|
|
@@ -12081,7 +12081,7 @@ var CommandRelayService = class _CommandRelayService {
|
|
|
12081
12081
|
// fresh + clear the "CLI update available" banner after a self-update
|
|
12082
12082
|
// (a codespace that reinstalls @latest reconnects via heartbeat, not
|
|
12083
12083
|
// pair/reconnect). Older backends ignore the extra field.
|
|
12084
|
-
..."2.75.
|
|
12084
|
+
..."2.75.23" ? { ideVersion: "2.75.23" } : {}
|
|
12085
12085
|
};
|
|
12086
12086
|
try {
|
|
12087
12087
|
const res = await _postJson(`${API_BASE2}/api/plugin/heartbeat`, body);
|
|
@@ -18038,6 +18038,7 @@ var ClaudeRuntimeStrategy = class {
|
|
|
18038
18038
|
const launch = buildClaudeLaunch(["-p", prompt], this.os);
|
|
18039
18039
|
if (!launch) return null;
|
|
18040
18040
|
return spawnAndCapture(launch.cmd, launch.args, {
|
|
18041
|
+
onStderr: opts?.onStderr,
|
|
18041
18042
|
cwd: opts?.cwd,
|
|
18042
18043
|
timeoutMs: opts?.timeoutMs
|
|
18043
18044
|
});
|
|
@@ -19124,6 +19125,7 @@ var CodexRuntimeStrategy = class {
|
|
|
19124
19125
|
if (!binary) return null;
|
|
19125
19126
|
const launch = this.os.buildLaunch(binary, ["exec", prompt]);
|
|
19126
19127
|
return spawnAndCapture(launch.cmd, launch.args, {
|
|
19128
|
+
onStderr: opts?.onStderr,
|
|
19127
19129
|
cwd: opts?.cwd,
|
|
19128
19130
|
timeoutMs: opts?.timeoutMs
|
|
19129
19131
|
});
|
|
@@ -20228,6 +20230,7 @@ var CursorRuntimeStrategy = class {
|
|
|
20228
20230
|
if (!binary) return null;
|
|
20229
20231
|
const launch = this.os.buildLaunch(binary, ["--print", "--force", "--trust", prompt]);
|
|
20230
20232
|
return spawnAndCapture(launch.cmd, launch.args, {
|
|
20233
|
+
onStderr: opts?.onStderr,
|
|
20231
20234
|
cwd: opts?.cwd,
|
|
20232
20235
|
timeoutMs: opts?.timeoutMs
|
|
20233
20236
|
});
|
|
@@ -21030,6 +21033,7 @@ var GeminiRuntimeStrategy = class {
|
|
|
21030
21033
|
if (!binary) return null;
|
|
21031
21034
|
const launch = this.os.buildLaunch(binary, ["--skip-trust", "-p", prompt]);
|
|
21032
21035
|
return spawnAndCapture(launch.cmd, launch.args, {
|
|
21036
|
+
onStderr: opts?.onStderr,
|
|
21033
21037
|
cwd: opts?.cwd,
|
|
21034
21038
|
timeoutMs: opts?.timeoutMs
|
|
21035
21039
|
});
|
|
@@ -21307,6 +21311,7 @@ var KimiRuntimeStrategy = class {
|
|
|
21307
21311
|
if (!binary) return null;
|
|
21308
21312
|
const launch = this.os.buildLaunch(binary, ["-p", prompt, "--output-format", "text"]);
|
|
21309
21313
|
return spawnAndCapture(launch.cmd, launch.args, {
|
|
21314
|
+
onStderr: opts?.onStderr,
|
|
21310
21315
|
cwd: opts?.cwd,
|
|
21311
21316
|
timeoutMs: opts?.timeoutMs
|
|
21312
21317
|
});
|
|
@@ -21426,6 +21431,7 @@ var OpencodeRuntimeStrategy = class {
|
|
|
21426
21431
|
if (!binary) return null;
|
|
21427
21432
|
const launch = this.os.buildLaunch(binary, ["run", prompt]);
|
|
21428
21433
|
return spawnAndCapture(launch.cmd, launch.args, {
|
|
21434
|
+
onStderr: opts?.onStderr,
|
|
21429
21435
|
cwd: opts?.cwd,
|
|
21430
21436
|
timeoutMs: opts?.timeoutMs
|
|
21431
21437
|
});
|
|
@@ -23335,6 +23341,13 @@ function parseCloudflaredUrl(stderr) {
|
|
|
23335
23341
|
const match = stderr.match(CLOUDFLARED_URL_RE);
|
|
23336
23342
|
return match ? match[0] : null;
|
|
23337
23343
|
}
|
|
23344
|
+
function describeOneShotAgentError(stderr) {
|
|
23345
|
+
const m = /API Error:\s*(\d{3})\s+([^\n]+)/i.exec(stderr);
|
|
23346
|
+
if (!m) return null;
|
|
23347
|
+
const detail = m[2].replace(/\{.*$/, "").trim().slice(0, 240);
|
|
23348
|
+
if (!detail) return null;
|
|
23349
|
+
return `Preview detection couldn't run \u2014 the agent answered ${m[1]}: ${detail}`;
|
|
23350
|
+
}
|
|
23338
23351
|
var RAW_EXCERPT_LIMIT = 1e3;
|
|
23339
23352
|
function describeDetectionFailure(raw) {
|
|
23340
23353
|
const text = raw?.trim() ?? "";
|
|
@@ -27616,15 +27629,19 @@ var emitPreviewEvent = (args2) => {
|
|
|
27616
27629
|
var PREVIEW_DETECT_TIMEOUT_MS = 12e4;
|
|
27617
27630
|
async function runDetectOneShot(generate, timeoutMs = PREVIEW_DETECT_TIMEOUT_MS) {
|
|
27618
27631
|
let timer;
|
|
27632
|
+
let stderr = "";
|
|
27633
|
+
const onStderr = (chunk) => {
|
|
27634
|
+
stderr = (stderr + chunk).slice(-4e3);
|
|
27635
|
+
};
|
|
27619
27636
|
const deadline = new Promise((resolve12) => {
|
|
27620
|
-
timer = setTimeout(() => resolve12({ raw: null, timedOut: true }), timeoutMs);
|
|
27637
|
+
timer = setTimeout(() => resolve12({ raw: null, timedOut: true, stderr }), timeoutMs);
|
|
27621
27638
|
timer.unref?.();
|
|
27622
27639
|
});
|
|
27623
|
-
const oneShot = generate(PREVIEW_DETECT_PROMPT, { timeoutMs }).then(
|
|
27624
|
-
(raw) => ({ raw, timedOut: false }),
|
|
27640
|
+
const oneShot = generate(PREVIEW_DETECT_PROMPT, { timeoutMs, onStderr }).then(
|
|
27641
|
+
(raw) => ({ raw, timedOut: false, stderr }),
|
|
27625
27642
|
(err) => {
|
|
27626
27643
|
log.info("preview", `detect: generateOneShot threw: ${String(err)}`);
|
|
27627
|
-
return { raw: null, timedOut: false };
|
|
27644
|
+
return { raw: null, timedOut: false, stderr };
|
|
27628
27645
|
}
|
|
27629
27646
|
);
|
|
27630
27647
|
try {
|
|
@@ -27675,7 +27692,7 @@ var requestPreviewDetectH = (ctx) => {
|
|
|
27675
27692
|
});
|
|
27676
27693
|
log.info("preview", "detect: invoking generateOneShot");
|
|
27677
27694
|
const startedAt = Date.now();
|
|
27678
|
-
const { raw, timedOut } = await runDetectOneShot(generateOneShot);
|
|
27695
|
+
const { raw, timedOut, stderr } = await runDetectOneShot(generateOneShot);
|
|
27679
27696
|
const tookMs = Date.now() - startedAt;
|
|
27680
27697
|
if (timedOut) {
|
|
27681
27698
|
log.info("preview", `detect: timed out after ${tookMs}ms \u2014 emitting preview_error`);
|
|
@@ -27709,7 +27726,7 @@ ${failure?.rawExcerpt ?? ""}`
|
|
|
27709
27726
|
stage: "detection",
|
|
27710
27727
|
// El mensaje sale del diagnostico: decir "JSON invalido" cuando el
|
|
27711
27728
|
// agente no contesto manda al usuario a mirar un JSON que no existe.
|
|
27712
|
-
message: failure?.message ?? "Agent returned invalid JSON. Try again, or add a .codeam/preview.json override."
|
|
27729
|
+
message: (failure?.reason === "no_output" ? describeOneShotAgentError(stderr) : null) ?? failure?.message ?? "Agent returned invalid JSON. Try again, or add a .codeam/preview.json override."
|
|
27713
27730
|
}
|
|
27714
27731
|
});
|
|
27715
27732
|
return;
|
|
@@ -47729,7 +47746,7 @@ async function autoUpgradeBeforeCriticalCommand() {
|
|
|
47729
47746
|
if (process.env.NODE_ENV === "test") return;
|
|
47730
47747
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
47731
47748
|
if (process.env.CI) return;
|
|
47732
|
-
const current2 = true ? "2.75.
|
|
47749
|
+
const current2 = true ? "2.75.23" : null;
|
|
47733
47750
|
if (!current2) return;
|
|
47734
47751
|
const cache = readCache();
|
|
47735
47752
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -47746,7 +47763,7 @@ function checkForUpdates() {
|
|
|
47746
47763
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
47747
47764
|
if (process.env.CI) return;
|
|
47748
47765
|
if (!process.stdout.isTTY) return;
|
|
47749
|
-
const current2 = true ? "2.75.
|
|
47766
|
+
const current2 = true ? "2.75.23" : null;
|
|
47750
47767
|
if (!current2) return;
|
|
47751
47768
|
const cache = readCache();
|
|
47752
47769
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -47769,7 +47786,7 @@ var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
|
|
|
47769
47786
|
var SELF_UPDATE_LS_TIMEOUT_MS = 15e3;
|
|
47770
47787
|
var SUDO_PREFLIGHT_TIMEOUT_MS = 5e3;
|
|
47771
47788
|
function currentCliVersion() {
|
|
47772
|
-
return true ? "2.75.
|
|
47789
|
+
return true ? "2.75.23" : null;
|
|
47773
47790
|
}
|
|
47774
47791
|
async function installedVersion(deps) {
|
|
47775
47792
|
const ls = await deps.run(
|
|
@@ -49655,7 +49672,7 @@ function checkChokidar() {
|
|
|
49655
49672
|
}
|
|
49656
49673
|
async function doctor(args2 = []) {
|
|
49657
49674
|
const json = args2.includes("--json");
|
|
49658
|
-
const cliVersion = true ? "2.75.
|
|
49675
|
+
const cliVersion = true ? "2.75.23" : "0.0.0-dev";
|
|
49659
49676
|
const apiBase2 = resolveApiBaseUrl();
|
|
49660
49677
|
const diagnosticId = (0, import_node_crypto12.randomUUID)();
|
|
49661
49678
|
log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
|
|
@@ -50179,7 +50196,7 @@ async function mcpWarm(argv = [], opts = {}) {
|
|
|
50179
50196
|
// src/commands/version.ts
|
|
50180
50197
|
var import_picocolors15 = __toESM(require("picocolors"));
|
|
50181
50198
|
function version2() {
|
|
50182
|
-
const v = true ? "2.75.
|
|
50199
|
+
const v = true ? "2.75.23" : "unknown";
|
|
50183
50200
|
console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
|
|
50184
50201
|
}
|
|
50185
50202
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeam-cli",
|
|
3
|
-
"version": "2.75.
|
|
3
|
+
"version": "2.75.23",
|
|
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",
|