codeam-cli 2.23.14 → 2.23.16
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 +13 -0
- package/dist/index.js +35 -22
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,19 @@ 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.23.14] — 2026-05-28
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **cli:** Pair-auto stays alive in heartbeat-only mode on CODEAM_SKIP_AGENT_LAUNCH
|
|
12
|
+
- **cli:** Pair-auto runs full infra-only loop (file watcher + IDE commands + heartbeat)
|
|
13
|
+
|
|
14
|
+
## [2.23.13] — 2026-05-28
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- **cli:** Pair-auto stays alive in heartbeat-only mode on CODEAM_SKIP_AGENT_LAUNCH
|
|
19
|
+
|
|
7
20
|
## [2.23.12] — 2026-05-27
|
|
8
21
|
|
|
9
22
|
### Fixed
|
package/dist/index.js
CHANGED
|
@@ -441,7 +441,7 @@ var import_qrcode_terminal = __toESM(require("qrcode-terminal"));
|
|
|
441
441
|
// package.json
|
|
442
442
|
var package_default = {
|
|
443
443
|
name: "codeam-cli",
|
|
444
|
-
version: "2.23.
|
|
444
|
+
version: "2.23.16",
|
|
445
445
|
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.",
|
|
446
446
|
type: "commonjs",
|
|
447
447
|
main: "dist/index.js",
|
|
@@ -5774,7 +5774,7 @@ function readAnonId() {
|
|
|
5774
5774
|
}
|
|
5775
5775
|
function superProperties() {
|
|
5776
5776
|
return {
|
|
5777
|
-
cliVersion: true ? "2.23.
|
|
5777
|
+
cliVersion: true ? "2.23.16" : "0.0.0-dev",
|
|
5778
5778
|
nodeVersion: process.version,
|
|
5779
5779
|
platform: process.platform,
|
|
5780
5780
|
arch: process.arch,
|
|
@@ -10300,36 +10300,36 @@ function wrapCodexCodeBlocks(lines) {
|
|
|
10300
10300
|
function parseCodexChrome(_line) {
|
|
10301
10301
|
return null;
|
|
10302
10302
|
}
|
|
10303
|
+
var CODEX_OPTION_RE = /^\s*([>›]\s+)?(\d+)\.\s+(.+)/;
|
|
10304
|
+
var CODEX_OPTION_START_RE = /^\s*(?:[>›]\s+)?\d+\.\s/;
|
|
10305
|
+
var CODEX_FOOTER_RE = /\bpress\s+enter\s+to\s+(?:confirm|continue|select)\b/i;
|
|
10303
10306
|
function detectCodexSelector(lines) {
|
|
10304
|
-
const hasConfirmTrailer = lines.some(
|
|
10305
|
-
(l) => /press\s+enter\s+to\s+confirm/i.test(l)
|
|
10306
|
-
);
|
|
10307
|
-
if (!hasConfirmTrailer) return null;
|
|
10308
10307
|
let optionStartIdx = -1;
|
|
10309
10308
|
for (let i = 0; i < lines.length; i++) {
|
|
10310
|
-
if (
|
|
10309
|
+
if (CODEX_OPTION_START_RE.test(lines[i])) {
|
|
10311
10310
|
optionStartIdx = i;
|
|
10312
10311
|
break;
|
|
10313
10312
|
}
|
|
10314
10313
|
}
|
|
10315
10314
|
if (optionStartIdx === -1) return null;
|
|
10316
|
-
const questionParts = [];
|
|
10317
|
-
for (let i = 0; i < optionStartIdx; i++) {
|
|
10318
|
-
const t2 = lines[i].trim();
|
|
10319
|
-
if (!t2) continue;
|
|
10320
|
-
if (/^[>›]\s*$/.test(t2)) continue;
|
|
10321
|
-
questionParts.push(t2);
|
|
10322
|
-
}
|
|
10323
|
-
const question = questionParts.join("\n").trim();
|
|
10324
10315
|
const optionLabels = /* @__PURE__ */ new Map();
|
|
10325
10316
|
let cursorIndex = 0;
|
|
10326
10317
|
let hasCursor = false;
|
|
10318
|
+
let footerAfterOptions = false;
|
|
10319
|
+
let lastOptionLineIdx = optionStartIdx;
|
|
10327
10320
|
for (let i = optionStartIdx; i < lines.length; i++) {
|
|
10328
|
-
const
|
|
10321
|
+
const raw = lines[i];
|
|
10322
|
+
const t2 = raw.trim();
|
|
10329
10323
|
if (!t2) continue;
|
|
10330
|
-
if (
|
|
10331
|
-
|
|
10332
|
-
|
|
10324
|
+
if (CODEX_FOOTER_RE.test(t2)) {
|
|
10325
|
+
footerAfterOptions = true;
|
|
10326
|
+
break;
|
|
10327
|
+
}
|
|
10328
|
+
const m = t2.match(CODEX_OPTION_RE);
|
|
10329
|
+
if (!m) {
|
|
10330
|
+
if (i - lastOptionLineIdx > 2) break;
|
|
10331
|
+
continue;
|
|
10332
|
+
}
|
|
10333
10333
|
const num = parseInt(m[2], 10);
|
|
10334
10334
|
if (!optionLabels.has(num)) {
|
|
10335
10335
|
optionLabels.set(num, m[3].trim());
|
|
@@ -10338,9 +10338,22 @@ function detectCodexSelector(lines) {
|
|
|
10338
10338
|
hasCursor = true;
|
|
10339
10339
|
}
|
|
10340
10340
|
}
|
|
10341
|
+
lastOptionLineIdx = i;
|
|
10341
10342
|
}
|
|
10342
10343
|
const keys = [...optionLabels.keys()].sort((a, b) => a - b);
|
|
10343
10344
|
if (keys.length < 2 || keys[0] !== 1) return null;
|
|
10345
|
+
const questionParts = [];
|
|
10346
|
+
for (let i = 0; i < optionStartIdx; i++) {
|
|
10347
|
+
const t2 = lines[i].trim();
|
|
10348
|
+
if (!t2) continue;
|
|
10349
|
+
if (/^[>›]\s*$/.test(t2)) continue;
|
|
10350
|
+
questionParts.push(t2);
|
|
10351
|
+
}
|
|
10352
|
+
const question = questionParts.join("\n").trim();
|
|
10353
|
+
const questionEndsWithQuery = /\?\s*$/.test(question);
|
|
10354
|
+
if (!hasCursor && !(questionEndsWithQuery && footerAfterOptions)) {
|
|
10355
|
+
return null;
|
|
10356
|
+
}
|
|
10344
10357
|
return {
|
|
10345
10358
|
question,
|
|
10346
10359
|
options: keys.map((k2) => optionLabels.get(k2)),
|
|
@@ -18720,7 +18733,7 @@ function checkChokidar() {
|
|
|
18720
18733
|
}
|
|
18721
18734
|
async function doctor(args2 = []) {
|
|
18722
18735
|
const json = args2.includes("--json");
|
|
18723
|
-
const cliVersion = true ? "2.23.
|
|
18736
|
+
const cliVersion = true ? "2.23.16" : "0.0.0-dev";
|
|
18724
18737
|
const apiBase = resolveApiBaseUrl();
|
|
18725
18738
|
const diagnosticId = (0, import_node_crypto5.randomUUID)();
|
|
18726
18739
|
log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
|
|
@@ -18919,7 +18932,7 @@ async function completion(args2) {
|
|
|
18919
18932
|
// src/commands/version.ts
|
|
18920
18933
|
var import_picocolors13 = __toESM(require("picocolors"));
|
|
18921
18934
|
function version2() {
|
|
18922
|
-
const v = true ? "2.23.
|
|
18935
|
+
const v = true ? "2.23.16" : "unknown";
|
|
18923
18936
|
console.log(`${import_picocolors13.default.bold("codeam-cli")} ${import_picocolors13.default.cyan(v)}`);
|
|
18924
18937
|
}
|
|
18925
18938
|
|
|
@@ -19147,7 +19160,7 @@ function checkForUpdates() {
|
|
|
19147
19160
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
19148
19161
|
if (process.env.CI) return;
|
|
19149
19162
|
if (!process.stdout.isTTY) return;
|
|
19150
|
-
const current = true ? "2.23.
|
|
19163
|
+
const current = true ? "2.23.16" : null;
|
|
19151
19164
|
if (!current) return;
|
|
19152
19165
|
const cache = readCache();
|
|
19153
19166
|
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.23.
|
|
3
|
+
"version": "2.23.16",
|
|
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",
|