codeam-cli 2.27.9 → 2.27.10
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 +26 -45
- 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.27.9] — 2026-06-06
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **cli:** ACP publishes to /api/commands/output (mobile's chat pipe)
|
|
12
|
+
|
|
7
13
|
## [2.27.8] — 2026-06-06
|
|
8
14
|
|
|
9
15
|
### Fixed
|
package/dist/index.js
CHANGED
|
@@ -498,7 +498,7 @@ var import_qrcode_terminal = __toESM(require("qrcode-terminal"));
|
|
|
498
498
|
// package.json
|
|
499
499
|
var package_default = {
|
|
500
500
|
name: "codeam-cli",
|
|
501
|
-
version: "2.27.
|
|
501
|
+
version: "2.27.10",
|
|
502
502
|
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.",
|
|
503
503
|
type: "commonjs",
|
|
504
504
|
main: "dist/index.js",
|
|
@@ -5873,7 +5873,7 @@ function readAnonId() {
|
|
|
5873
5873
|
}
|
|
5874
5874
|
function superProperties() {
|
|
5875
5875
|
return {
|
|
5876
|
-
cliVersion: true ? "2.27.
|
|
5876
|
+
cliVersion: true ? "2.27.10" : "0.0.0-dev",
|
|
5877
5877
|
nodeVersion: process.version,
|
|
5878
5878
|
platform: process.platform,
|
|
5879
5879
|
arch: process.arch,
|
|
@@ -12127,7 +12127,11 @@ var AcpClient = class {
|
|
|
12127
12127
|
mcpServers: []
|
|
12128
12128
|
});
|
|
12129
12129
|
this.sessionId = newSession.sessionId;
|
|
12130
|
-
|
|
12130
|
+
const newSessionMeta = newSession;
|
|
12131
|
+
log.info(
|
|
12132
|
+
"acpClient",
|
|
12133
|
+
`newSession \u2190 ok sessionId=${newSession.sessionId.slice(0, 8)} model=${newSessionMeta.currentModelId ?? "?"} tier=${newSessionMeta.currentServiceTier ?? "?"}`
|
|
12134
|
+
);
|
|
12131
12135
|
return { sessionId: newSession.sessionId, initialize };
|
|
12132
12136
|
}
|
|
12133
12137
|
/**
|
|
@@ -12154,15 +12158,15 @@ var AcpClient = class {
|
|
|
12154
12158
|
sessionId: this.sessionId,
|
|
12155
12159
|
prompt: [{ type: "text", text }]
|
|
12156
12160
|
});
|
|
12161
|
+
let timeoutId;
|
|
12157
12162
|
const timeout = new Promise((_resolve, reject) => {
|
|
12158
|
-
|
|
12163
|
+
timeoutId = setTimeout(() => {
|
|
12159
12164
|
reject(
|
|
12160
12165
|
new Error(
|
|
12161
12166
|
`ACP prompt timed out after ${PROMPT_TIMEOUT_MS / 1e3}s \u2014 adapter never responded. Likely the underlying agent's auth or network is misconfigured; check the adapter stderr lines above (acpAdapter tag) for the actual error.`
|
|
12162
12167
|
)
|
|
12163
12168
|
);
|
|
12164
12169
|
}, PROMPT_TIMEOUT_MS);
|
|
12165
|
-
void send.finally(() => clearTimeout(id));
|
|
12166
12170
|
});
|
|
12167
12171
|
try {
|
|
12168
12172
|
const result = await Promise.race([send, timeout]);
|
|
@@ -12177,6 +12181,8 @@ var AcpClient = class {
|
|
|
12177
12181
|
`prompt \u2190 failed elapsedMs=${Date.now() - t0} err=${err instanceof Error ? err.message : String(err)}`
|
|
12178
12182
|
);
|
|
12179
12183
|
throw err;
|
|
12184
|
+
} finally {
|
|
12185
|
+
if (timeoutId !== void 0) clearTimeout(timeoutId);
|
|
12180
12186
|
}
|
|
12181
12187
|
}
|
|
12182
12188
|
/**
|
|
@@ -12620,56 +12626,31 @@ var StreamingState = class {
|
|
|
12620
12626
|
this.publisher = publisher;
|
|
12621
12627
|
}
|
|
12622
12628
|
publisher;
|
|
12623
|
-
|
|
12629
|
+
text = "";
|
|
12624
12630
|
/**
|
|
12625
12631
|
* Boundary events emitted at the start of every turn so mobile
|
|
12626
12632
|
* wipes the previous reply and shows "Agent is typing…". Mirrors
|
|
12627
|
-
* the legacy `outputSvc.newTurn()
|
|
12628
|
-
* sends is implicit here (publishOutput retries on transient
|
|
12629
|
-
* failures so the boundary always lands).
|
|
12633
|
+
* the legacy `outputSvc.newTurn()`.
|
|
12630
12634
|
*/
|
|
12631
12635
|
async beginTurn() {
|
|
12632
|
-
this.
|
|
12636
|
+
this.text = "";
|
|
12633
12637
|
await this.publisher.publishOutput({ type: "clear" });
|
|
12634
12638
|
await this.publisher.publishOutput({ type: "new_turn", done: false });
|
|
12635
12639
|
}
|
|
12636
12640
|
append(delta) {
|
|
12637
|
-
|
|
12638
|
-
|
|
12639
|
-
|
|
12640
|
-
log.warn(
|
|
12641
|
-
"acpRunner",
|
|
12642
|
-
`chunk kind flip detected chunkId=${delta.chunkId.slice(0, 8)} from=${existing.kind} to=${delta.kind} \u2014 using new kind`
|
|
12643
|
-
);
|
|
12644
|
-
}
|
|
12645
|
-
this.open.set(delta.chunkId, { kind: delta.kind, content });
|
|
12646
|
-
void this.publisher.publishOutput({ type: "text", content, done: false });
|
|
12641
|
+
if (delta.kind !== "text") return;
|
|
12642
|
+
this.text += delta.delta;
|
|
12643
|
+
void this.publisher.publishOutput({ type: "text", content: this.text, done: false });
|
|
12647
12644
|
}
|
|
12648
12645
|
/**
|
|
12649
|
-
*
|
|
12650
|
-
*
|
|
12651
|
-
*
|
|
12652
|
-
*
|
|
12653
|
-
* Also emits an empty `{type:'text', content:'', done:true}` when
|
|
12654
|
-
* the turn produced no text at all (e.g. Claude responded with
|
|
12655
|
-
* tool calls only) so mobile doesn't sit on "Thinking…" forever
|
|
12656
|
-
* waiting for content that will never arrive.
|
|
12646
|
+
* Flip the chat out of "Thinking…" with one final cumulative
|
|
12647
|
+
* `done: true`. Idempotent — safe to call from happy + error +
|
|
12648
|
+
* adapter-exit paths.
|
|
12657
12649
|
*/
|
|
12658
12650
|
async closeAll() {
|
|
12659
|
-
|
|
12660
|
-
|
|
12661
|
-
|
|
12662
|
-
}
|
|
12663
|
-
const closing = Array.from(this.open.values());
|
|
12664
|
-
this.open.clear();
|
|
12665
|
-
for (let i = 0; i < closing.length; i += 1) {
|
|
12666
|
-
const isLast = i === closing.length - 1;
|
|
12667
|
-
await this.publisher.publishOutput({
|
|
12668
|
-
type: "text",
|
|
12669
|
-
content: closing[i].content,
|
|
12670
|
-
done: isLast
|
|
12671
|
-
});
|
|
12672
|
-
}
|
|
12651
|
+
const finalText = this.text;
|
|
12652
|
+
this.text = "";
|
|
12653
|
+
await this.publisher.publishOutput({ type: "text", content: finalText, done: true });
|
|
12673
12654
|
}
|
|
12674
12655
|
};
|
|
12675
12656
|
var ANSWER_POLL_MS = 1500;
|
|
@@ -21297,7 +21278,7 @@ function checkChokidar() {
|
|
|
21297
21278
|
}
|
|
21298
21279
|
async function doctor(args2 = []) {
|
|
21299
21280
|
const json = args2.includes("--json");
|
|
21300
|
-
const cliVersion = true ? "2.27.
|
|
21281
|
+
const cliVersion = true ? "2.27.10" : "0.0.0-dev";
|
|
21301
21282
|
const apiBase = resolveApiBaseUrl();
|
|
21302
21283
|
const diagnosticId = (0, import_node_crypto7.randomUUID)();
|
|
21303
21284
|
log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
|
|
@@ -21496,7 +21477,7 @@ async function completion(args2) {
|
|
|
21496
21477
|
// src/commands/version.ts
|
|
21497
21478
|
var import_picocolors13 = __toESM(require("picocolors"));
|
|
21498
21479
|
function version2() {
|
|
21499
|
-
const v = true ? "2.27.
|
|
21480
|
+
const v = true ? "2.27.10" : "unknown";
|
|
21500
21481
|
console.log(`${import_picocolors13.default.bold("codeam-cli")} ${import_picocolors13.default.cyan(v)}`);
|
|
21501
21482
|
}
|
|
21502
21483
|
|
|
@@ -21724,7 +21705,7 @@ function checkForUpdates() {
|
|
|
21724
21705
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
21725
21706
|
if (process.env.CI) return;
|
|
21726
21707
|
if (!process.stdout.isTTY) return;
|
|
21727
|
-
const current = true ? "2.27.
|
|
21708
|
+
const current = true ? "2.27.10" : null;
|
|
21728
21709
|
if (!current) return;
|
|
21729
21710
|
const cache = readCache();
|
|
21730
21711
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeam-cli",
|
|
3
|
-
"version": "2.27.
|
|
3
|
+
"version": "2.27.10",
|
|
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",
|