codeam-cli 2.12.3 → 2.12.5
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 +19 -0
- package/dist/index.js +35 -23
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,25 @@ 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.12.4] — 2026-05-14
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **cli:** Report the real agent id/name/icon to /api/plugin/agents
|
|
12
|
+
|
|
13
|
+
## [2.12.3] — 2026-05-14
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- **cli:** Drop the Codex bottom status footer + accept · as agent-reply prefix
|
|
18
|
+
|
|
19
|
+
## [2.12.2] — 2026-05-14
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- **cli:** Per-agent TUI parsers — Codex uses • for replies (same glyph as Claude tool calls)
|
|
24
|
+
- **cli,shared,vsc-plugin:** Move Claude TUI parsers out of shared into the Claude strategy
|
|
25
|
+
|
|
7
26
|
## [2.12.1] — 2026-05-14
|
|
8
27
|
|
|
9
28
|
### Fixed
|
package/dist/index.js
CHANGED
|
@@ -1682,7 +1682,7 @@ var import_qrcode_terminal = __toESM(require("qrcode-terminal"));
|
|
|
1682
1682
|
// package.json
|
|
1683
1683
|
var package_default = {
|
|
1684
1684
|
name: "codeam-cli",
|
|
1685
|
-
version: "2.12.
|
|
1685
|
+
version: "2.12.5",
|
|
1686
1686
|
description: "Remote control Claude Code (and other AI coding agents) from your mobile phone. Pair your device, send prompts, stream responses in real-time, and approve commands \u2014 from anywhere.",
|
|
1687
1687
|
type: "commonjs",
|
|
1688
1688
|
main: "dist/index.js",
|
|
@@ -2037,12 +2037,14 @@ var log = {
|
|
|
2037
2037
|
// src/services/command-relay.service.ts
|
|
2038
2038
|
var API_BASE2 = process.env.CODEAM_API_URL ?? "https://codeagent-mobile-api.vercel.app";
|
|
2039
2039
|
var CommandRelayService = class {
|
|
2040
|
-
constructor(pluginId, onCommand) {
|
|
2040
|
+
constructor(pluginId, onCommand, agentMeta) {
|
|
2041
2041
|
this.pluginId = pluginId;
|
|
2042
2042
|
this.onCommand = onCommand;
|
|
2043
|
+
this.agentMeta = agentMeta;
|
|
2043
2044
|
}
|
|
2044
2045
|
pluginId;
|
|
2045
2046
|
onCommand;
|
|
2047
|
+
agentMeta;
|
|
2046
2048
|
_running = false;
|
|
2047
2049
|
heartbeatTimer = null;
|
|
2048
2050
|
agentsTimer = null;
|
|
@@ -2229,9 +2231,11 @@ var CommandRelayService = class {
|
|
|
2229
2231
|
}).then(() => log.trace("relay", `heartbeat ok online=${online}`)).catch((err) => log.trace("relay", `heartbeat failed online=${online}`, err));
|
|
2230
2232
|
}
|
|
2231
2233
|
reportAgents() {
|
|
2234
|
+
const id = this.agentMeta?.id ?? "claude";
|
|
2235
|
+
const name = this.agentMeta?.displayName ?? "Claude Code";
|
|
2232
2236
|
_postJson(`${API_BASE2}/api/plugin/agents`, {
|
|
2233
2237
|
pluginId: this.pluginId,
|
|
2234
|
-
agents: [{ id
|
|
2238
|
+
agents: [{ id, name, icon: id, installed: true }]
|
|
2235
2239
|
}).then(() => {
|
|
2236
2240
|
this.agentsRegistered = true;
|
|
2237
2241
|
}).catch(() => {
|
|
@@ -5797,40 +5801,48 @@ function getCurrentUsage2(historyDir) {
|
|
|
5797
5801
|
|
|
5798
5802
|
// src/agents/codex/parsing.ts
|
|
5799
5803
|
var BOX_DRAW_RE = /^[╭─╮│╰╯]/u;
|
|
5804
|
+
var BULLET_CHARS = "\u2022\xB7\u2027\u2219\u22C5";
|
|
5805
|
+
var CODEX_AGENT_REPLY_RE = new RegExp(`^[${BULLET_CHARS}]\\s`, "u");
|
|
5806
|
+
var STRIP_BULLET_RE = new RegExp(`^(\\s*)[${BULLET_CHARS}]\\s`, "u");
|
|
5800
5807
|
var CODEX_USER_ECHO_RE = /^[›>]\s+\S/u;
|
|
5801
|
-
var CODEX_AGENT_REPLY_RE = /^[•·]\s/u;
|
|
5802
5808
|
var TIP_RE = /^\s*Tip:\s/i;
|
|
5803
5809
|
var LEARN_MORE_RE = /^\s*Learn more:\s/i;
|
|
5804
5810
|
var CODEX_STATUS_FOOTER_RE = /\bdefault\s+[·•]\s+\S+/i;
|
|
5811
|
+
var CODEAM_BANNER_RES = [
|
|
5812
|
+
// Bullet-prefixed banner entries (any role / launch label).
|
|
5813
|
+
new RegExp(`^[${BULLET_CHARS}]\\s+(Launching|Edgar|PRO|FREE|ENTERPRISE)\\b`, "i"),
|
|
5814
|
+
/^Paired\b/,
|
|
5815
|
+
/^codeam\b\s+v\d/,
|
|
5816
|
+
/^✓\s+Paired/,
|
|
5817
|
+
/^◇\s+Paired/
|
|
5818
|
+
];
|
|
5805
5819
|
function filterCodexChrome(lines) {
|
|
5806
5820
|
const out = [];
|
|
5807
|
-
let skipEchoContinuation = false;
|
|
5808
5821
|
for (const line of lines) {
|
|
5809
5822
|
const t2 = line.trimEnd();
|
|
5810
5823
|
const trimmed = t2.trimStart();
|
|
5811
|
-
if (!trimmed)
|
|
5812
|
-
skipEchoContinuation = false;
|
|
5813
|
-
continue;
|
|
5814
|
-
}
|
|
5824
|
+
if (!trimmed) continue;
|
|
5815
5825
|
if (BOX_DRAW_RE.test(trimmed)) continue;
|
|
5816
5826
|
if (/^OpenAI Codex\b/i.test(trimmed) || /^>_\s+OpenAI Codex\b/i.test(trimmed) || /^model:\s/i.test(trimmed) || /^directory:\s/i.test(trimmed)) continue;
|
|
5817
5827
|
if (TIP_RE.test(t2) || LEARN_MORE_RE.test(t2)) continue;
|
|
5818
|
-
if (CODEX_STATUS_FOOTER_RE.test(trimmed))
|
|
5819
|
-
|
|
5820
|
-
|
|
5821
|
-
}
|
|
5828
|
+
if (CODEX_STATUS_FOOTER_RE.test(trimmed)) continue;
|
|
5829
|
+
if (CODEAM_BANNER_RES.some((re2) => re2.test(trimmed))) continue;
|
|
5830
|
+
if (CODEX_USER_ECHO_RE.test(trimmed)) continue;
|
|
5822
5831
|
if (CODEX_AGENT_REPLY_RE.test(trimmed)) {
|
|
5823
|
-
|
|
5824
|
-
out.push(t2.replace(/^(\s*)[•·]\s/, "$1"));
|
|
5825
|
-
continue;
|
|
5826
|
-
}
|
|
5827
|
-
if (CODEX_USER_ECHO_RE.test(trimmed)) {
|
|
5828
|
-
skipEchoContinuation = true;
|
|
5832
|
+
out.push(t2.replace(STRIP_BULLET_RE, "$1"));
|
|
5829
5833
|
continue;
|
|
5830
5834
|
}
|
|
5831
|
-
if (skipEchoContinuation) continue;
|
|
5832
5835
|
out.push(t2);
|
|
5833
5836
|
}
|
|
5837
|
+
log.trace("codex-parse", `filterCodexChrome in=${lines.length} out=${out.length}`);
|
|
5838
|
+
if (process.env.CODEAM_DEBUG === "1") {
|
|
5839
|
+
const sampleIn = lines.slice(-40).map((l, i) => ` in[${i}] ${JSON.stringify(l)}`).join("\n");
|
|
5840
|
+
const sampleOut = out.map((l, i) => ` out[${i}] ${JSON.stringify(l)}`).join("\n");
|
|
5841
|
+
log.debug("codex-parse", `
|
|
5842
|
+
${sampleIn}
|
|
5843
|
+
---
|
|
5844
|
+
${sampleOut}`);
|
|
5845
|
+
}
|
|
5834
5846
|
return out;
|
|
5835
5847
|
}
|
|
5836
5848
|
function parseCodexChrome(_line) {
|
|
@@ -7852,7 +7864,7 @@ async function start() {
|
|
|
7852
7864
|
};
|
|
7853
7865
|
const relay = new CommandRelayService(pluginId, async (cmd) => {
|
|
7854
7866
|
await dispatchCommand(ctx, cmd);
|
|
7855
|
-
});
|
|
7867
|
+
}, runtime.meta);
|
|
7856
7868
|
ctx.relay = relay;
|
|
7857
7869
|
function sigintHandler() {
|
|
7858
7870
|
claude.kill();
|
|
@@ -10123,7 +10135,7 @@ async function stopWorkspaceFromLocal(target) {
|
|
|
10123
10135
|
// src/commands/version.ts
|
|
10124
10136
|
var import_picocolors11 = __toESM(require("picocolors"));
|
|
10125
10137
|
function version() {
|
|
10126
|
-
const v = true ? "2.12.
|
|
10138
|
+
const v = true ? "2.12.5" : "unknown";
|
|
10127
10139
|
console.log(`${import_picocolors11.default.bold("codeam-cli")} ${import_picocolors11.default.cyan(v)}`);
|
|
10128
10140
|
}
|
|
10129
10141
|
|
|
@@ -10258,7 +10270,7 @@ function checkForUpdates() {
|
|
|
10258
10270
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
10259
10271
|
if (process.env.CI) return;
|
|
10260
10272
|
if (!process.stdout.isTTY) return;
|
|
10261
|
-
const current = true ? "2.12.
|
|
10273
|
+
const current = true ? "2.12.5" : null;
|
|
10262
10274
|
if (!current) return;
|
|
10263
10275
|
const cache = readCache();
|
|
10264
10276
|
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.12.
|
|
3
|
+
"version": "2.12.5",
|
|
4
4
|
"description": "Remote control Claude Code (and other AI coding agents) from your mobile phone. Pair your device, send prompts, stream responses in real-time, and approve commands — from anywhere.",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "dist/index.js",
|