codeam-cli 2.52.2 → 2.52.4
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 +36 -10
- 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.52.3] — 2026-06-30
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **cli:** Emit static quick-reply chips from ACP runner on normal turn end
|
|
12
|
+
|
|
13
|
+
## [2.52.2] — 2026-06-30
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- **acp:** Stop synthesising input_suggestion from the reply (echoed agent msg)
|
|
18
|
+
|
|
7
19
|
## [2.52.1] — 2026-06-29
|
|
8
20
|
|
|
9
21
|
### Fixed
|
package/dist/index.js
CHANGED
|
@@ -5397,7 +5397,7 @@ function readAnonId() {
|
|
|
5397
5397
|
}
|
|
5398
5398
|
function superProperties() {
|
|
5399
5399
|
return {
|
|
5400
|
-
cliVersion: true ? "2.52.
|
|
5400
|
+
cliVersion: true ? "2.52.4" : "0.0.0-dev",
|
|
5401
5401
|
nodeVersion: process.version,
|
|
5402
5402
|
platform: process.platform,
|
|
5403
5403
|
arch: process.arch,
|
|
@@ -5578,7 +5578,7 @@ var os4 = __toESM(require("os"));
|
|
|
5578
5578
|
// package.json
|
|
5579
5579
|
var package_default = {
|
|
5580
5580
|
name: "codeam-cli",
|
|
5581
|
-
version: "2.52.
|
|
5581
|
+
version: "2.52.4",
|
|
5582
5582
|
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.",
|
|
5583
5583
|
type: "commonjs",
|
|
5584
5584
|
main: "dist/index.js",
|
|
@@ -13920,13 +13920,26 @@ var path36 = __toESM(require("path"));
|
|
|
13920
13920
|
var import_node_fs5 = __toESM(require("fs"));
|
|
13921
13921
|
var import_node_os3 = __toESM(require("os"));
|
|
13922
13922
|
var import_node_child_process11 = require("child_process");
|
|
13923
|
+
var BROAD_WINDOWS_SIDS = [
|
|
13924
|
+
"*S-1-1-0",
|
|
13925
|
+
"*S-1-5-11",
|
|
13926
|
+
"*S-1-5-32-545",
|
|
13927
|
+
"*S-1-5-32-544",
|
|
13928
|
+
"*S-1-5-18"
|
|
13929
|
+
];
|
|
13923
13930
|
function restrictToOwner(filePath) {
|
|
13924
13931
|
try {
|
|
13925
13932
|
if (process.platform === "win32") {
|
|
13926
13933
|
const username = import_node_os3.default.userInfo().username;
|
|
13927
13934
|
(0, import_node_child_process11.execFileSync)(
|
|
13928
13935
|
"icacls",
|
|
13929
|
-
[
|
|
13936
|
+
[
|
|
13937
|
+
filePath,
|
|
13938
|
+
"/inheritance:r",
|
|
13939
|
+
"/grant:r",
|
|
13940
|
+
`${username}:F`,
|
|
13941
|
+
...BROAD_WINDOWS_SIDS.flatMap((sid) => ["/remove", sid])
|
|
13942
|
+
],
|
|
13930
13943
|
{ stdio: "ignore" }
|
|
13931
13944
|
);
|
|
13932
13945
|
} else {
|
|
@@ -14016,7 +14029,7 @@ function saveHostIdentity(identity) {
|
|
|
14016
14029
|
encoding: "utf8",
|
|
14017
14030
|
mode: 384
|
|
14018
14031
|
});
|
|
14019
|
-
|
|
14032
|
+
restrictToOwner(file);
|
|
14020
14033
|
}
|
|
14021
14034
|
var TERMINAL_ENROLL_CODES = /* @__PURE__ */ new Set(["ENROLL_TOKEN_EXPIRED", "ENROLL_TOKEN_INVALID"]);
|
|
14022
14035
|
var HostHttpError = class extends Error {
|
|
@@ -14863,7 +14876,7 @@ async function autoUpgradeBeforeCriticalCommand() {
|
|
|
14863
14876
|
if (process.env.NODE_ENV === "test") return;
|
|
14864
14877
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
14865
14878
|
if (process.env.CI) return;
|
|
14866
|
-
const current = true ? "2.52.
|
|
14879
|
+
const current = true ? "2.52.4" : null;
|
|
14867
14880
|
if (!current) return;
|
|
14868
14881
|
const cache = readCache();
|
|
14869
14882
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -14880,7 +14893,7 @@ function checkForUpdates() {
|
|
|
14880
14893
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
14881
14894
|
if (process.env.CI) return;
|
|
14882
14895
|
if (!process.stdout.isTTY) return;
|
|
14883
|
-
const current = true ? "2.52.
|
|
14896
|
+
const current = true ? "2.52.4" : null;
|
|
14884
14897
|
if (!current) return;
|
|
14885
14898
|
const cache = readCache();
|
|
14886
14899
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -15582,7 +15595,7 @@ var defaultSpawner = (env, cwd, args2 = []) => (0, import_node_child_process15.s
|
|
|
15582
15595
|
detached: false
|
|
15583
15596
|
});
|
|
15584
15597
|
function currentCliVersion() {
|
|
15585
|
-
return true ? "2.52.
|
|
15598
|
+
return true ? "2.52.4" : null;
|
|
15586
15599
|
}
|
|
15587
15600
|
function runCmd(cmd, args2, timeoutMs) {
|
|
15588
15601
|
return new Promise((resolve7) => {
|
|
@@ -19207,7 +19220,14 @@ var requestLinkCredentialsH = (ctx, _cmd, parsed) => {
|
|
|
19207
19220
|
pluginId: ctx.pluginId,
|
|
19208
19221
|
pluginAuthToken,
|
|
19209
19222
|
method: token.method,
|
|
19210
|
-
credential: token.credential
|
|
19223
|
+
credential: token.credential,
|
|
19224
|
+
// This handler ALWAYS rides the user's real paired session (the
|
|
19225
|
+
// backend pushed the request onto it), never a `codeam link`
|
|
19226
|
+
// throwaway. Omitting the flag made the backend delete the
|
|
19227
|
+
// session the user had just paired (2026-07-02 incident) — the
|
|
19228
|
+
// backend now also guards via its own auto-link Redis flag, but
|
|
19229
|
+
// the CLI must state the truth for older backends too.
|
|
19230
|
+
preserveSession: true
|
|
19211
19231
|
});
|
|
19212
19232
|
if (result.ok) {
|
|
19213
19233
|
log.trace("auto-link", `vaulted ${publicId} from ${token.source}`);
|
|
@@ -26331,6 +26351,7 @@ function replyIsCursorUpgradeRequired(finalText) {
|
|
|
26331
26351
|
}
|
|
26332
26352
|
var CURSOR_UPGRADE_MESSAGE = "\u26A1 **Cursor needs a paid plan to run the agent.**\n\nThe headless Cursor Agent requires Cursor **Pro** \u2014 your Free plan\u2019s included usage does NOT cover Agent runs, even with quota left. This is your Cursor account (not CodeAgent). Upgrade, then send your message again:\n\n[Upgrade to Cursor Pro \u2192](https://cursor.com/dashboard)";
|
|
26333
26353
|
var TURN_FAILURE_MESSAGE = "\u26A0\uFE0F **The agent hit an error and couldn\u2019t finish this turn.** Please send your message again.";
|
|
26354
|
+
var ACP_QUICK_REPLIES = ["Continue", "Yes, go ahead", "Explain"];
|
|
26334
26355
|
var PROVIDER_OUTAGE_RE = /overloaded_error|\boverloaded\b|service[ _]unavailable|temporarily[ _]unavailable|(?:api error|http|status)[:\s]+(?:529|503|502|504)\b|\b(?:529|503|502|504)\b[^\n]{0,40}(?:overload|unavailable|gateway|upstream|server error)|bad gateway|gateway time-?out|upstream (?:error|connect|timeout)/i;
|
|
26335
26356
|
function looksLikeProviderOutage(text) {
|
|
26336
26357
|
return PROVIDER_OUTAGE_RE.test(text);
|
|
@@ -26905,6 +26926,11 @@ async function handleCommand(cmd, client2, relay, acpSessionId, models, streamin
|
|
|
26905
26926
|
}
|
|
26906
26927
|
history.appendAgentReply(finalText);
|
|
26907
26928
|
void history.flush();
|
|
26929
|
+
void publisher.publishOutput({
|
|
26930
|
+
type: "input_suggestion",
|
|
26931
|
+
content: ACP_QUICK_REPLIES,
|
|
26932
|
+
done: true
|
|
26933
|
+
});
|
|
26908
26934
|
turnFiles.flushTurn().catch((err) => {
|
|
26909
26935
|
log.warn("acpRunner", `turnFiles.flushTurn failed: ${describeError(err)}`);
|
|
26910
26936
|
});
|
|
@@ -31181,7 +31207,7 @@ function checkChokidar() {
|
|
|
31181
31207
|
}
|
|
31182
31208
|
async function doctor(args2 = []) {
|
|
31183
31209
|
const json = args2.includes("--json");
|
|
31184
|
-
const cliVersion = true ? "2.52.
|
|
31210
|
+
const cliVersion = true ? "2.52.4" : "0.0.0-dev";
|
|
31185
31211
|
const apiBase2 = resolveApiBaseUrl();
|
|
31186
31212
|
const diagnosticId = (0, import_node_crypto8.randomUUID)();
|
|
31187
31213
|
log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
|
|
@@ -31380,7 +31406,7 @@ async function completion(args2) {
|
|
|
31380
31406
|
// src/commands/version.ts
|
|
31381
31407
|
var import_picocolors15 = __toESM(require("picocolors"));
|
|
31382
31408
|
function version2() {
|
|
31383
|
-
const v = true ? "2.52.
|
|
31409
|
+
const v = true ? "2.52.4" : "unknown";
|
|
31384
31410
|
console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
|
|
31385
31411
|
}
|
|
31386
31412
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeam-cli",
|
|
3
|
-
"version": "2.52.
|
|
3
|
+
"version": "2.52.4",
|
|
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",
|