codeam-cli 2.23.28 → 2.23.30
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 +18 -0
- package/dist/index.js +61 -18
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,24 @@ 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.29] — 2026-05-30
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **cli:** DetectInputSuggestion skips Claude TUI box borders
|
|
12
|
+
|
|
13
|
+
## [2.23.28] — 2026-05-30
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- **cli:** Gate idle-suggestion seed on per-agent opt-in
|
|
18
|
+
|
|
19
|
+
## [2.23.27] — 2026-05-30
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- **cli:** Seed idle-suggestion detector with the established screen
|
|
24
|
+
|
|
7
25
|
## [2.23.26] — 2026-05-30
|
|
8
26
|
|
|
9
27
|
### Chore
|
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.30",
|
|
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.30" : "0.0.0-dev",
|
|
5778
5778
|
nodeVersion: process.version,
|
|
5779
5779
|
platform: process.platform,
|
|
5780
5780
|
arch: process.arch,
|
|
@@ -9697,10 +9697,11 @@ function detectInputSuggestion(lines) {
|
|
|
9697
9697
|
}
|
|
9698
9698
|
if (hintIdx === -1) return null;
|
|
9699
9699
|
if (lines.some((l) => /^[❯>]\s*\d+\./.test(l.trim()))) return null;
|
|
9700
|
-
const windowStart = Math.max(0, hintIdx -
|
|
9700
|
+
const windowStart = Math.max(0, hintIdx - 5);
|
|
9701
9701
|
for (let i = hintIdx - 1; i >= windowStart; i--) {
|
|
9702
9702
|
const t2 = lines[i].trim();
|
|
9703
9703
|
if (!t2) continue;
|
|
9704
|
+
if (/^[─━═│┌┐└┘├┤┬┴┼]+$/u.test(t2)) continue;
|
|
9704
9705
|
const m = t2.match(/^[❯>]\s+(\S.*)$/);
|
|
9705
9706
|
if (!m) return null;
|
|
9706
9707
|
if (/^\d+\.\s/.test(m[1])) return null;
|
|
@@ -15892,10 +15893,19 @@ var requestLinkCredentialsH = (ctx, _cmd, parsed) => {
|
|
|
15892
15893
|
})();
|
|
15893
15894
|
};
|
|
15894
15895
|
var requestAiSummaryH = (ctx, _cmd, parsed) => {
|
|
15895
|
-
if (!ctx.pluginAuthToken)
|
|
15896
|
-
|
|
15896
|
+
if (!ctx.pluginAuthToken) {
|
|
15897
|
+
log.info("ai-summary", "no pluginAuthToken \u2014 skipping");
|
|
15898
|
+
return;
|
|
15899
|
+
}
|
|
15900
|
+
if (typeof ctx.runtime.generateOneShot !== "function") {
|
|
15901
|
+
log.info("ai-summary", `runtime ${ctx.runtime.id} has no generateOneShot \u2014 skipping`);
|
|
15902
|
+
return;
|
|
15903
|
+
}
|
|
15897
15904
|
if (!parsed.prompt || !parsed.turnId || !parsed.stats) {
|
|
15898
|
-
log.
|
|
15905
|
+
log.info(
|
|
15906
|
+
"ai-summary",
|
|
15907
|
+
`missing fields \u2014 prompt=${!!parsed.prompt} turnId=${!!parsed.turnId} stats=${!!parsed.stats}`
|
|
15908
|
+
);
|
|
15899
15909
|
return;
|
|
15900
15910
|
}
|
|
15901
15911
|
const prompt = parsed.prompt;
|
|
@@ -15903,12 +15913,19 @@ var requestAiSummaryH = (ctx, _cmd, parsed) => {
|
|
|
15903
15913
|
const stats = parsed.stats;
|
|
15904
15914
|
const pluginAuthToken = ctx.pluginAuthToken;
|
|
15905
15915
|
void (async () => {
|
|
15916
|
+
log.info("ai-summary", `generateOneShot start turnId=${turnId} promptLen=${prompt.length}`);
|
|
15917
|
+
const startedAt = Date.now();
|
|
15906
15918
|
const text = await ctx.runtime.generateOneShot(prompt).catch((err) => {
|
|
15907
|
-
log.
|
|
15919
|
+
log.info("ai-summary", `generateOneShot threw: ${String(err)}`);
|
|
15908
15920
|
return null;
|
|
15909
15921
|
});
|
|
15910
|
-
|
|
15911
|
-
|
|
15922
|
+
const tookMs = Date.now() - startedAt;
|
|
15923
|
+
if (!text) {
|
|
15924
|
+
log.info("ai-summary", `generateOneShot returned null after ${tookMs}ms \u2014 skipping POST`);
|
|
15925
|
+
return;
|
|
15926
|
+
}
|
|
15927
|
+
log.info("ai-summary", `generateOneShot ok turnId=${turnId} took=${tookMs}ms textLen=${text.length}`);
|
|
15928
|
+
const result = await postAiResult({
|
|
15912
15929
|
sessionId: ctx.sessionId,
|
|
15913
15930
|
pluginId: ctx.pluginId,
|
|
15914
15931
|
pluginAuthToken,
|
|
@@ -15917,26 +15934,47 @@ var requestAiSummaryH = (ctx, _cmd, parsed) => {
|
|
|
15917
15934
|
summary: text,
|
|
15918
15935
|
stats
|
|
15919
15936
|
});
|
|
15937
|
+
if (result.ok) {
|
|
15938
|
+
log.info("ai-summary", `postAiResult ok turnId=${turnId}`);
|
|
15939
|
+
} else {
|
|
15940
|
+
log.info("ai-summary", `postAiResult failed status=${result.status} msg=${result.message}`);
|
|
15941
|
+
}
|
|
15920
15942
|
})();
|
|
15921
15943
|
};
|
|
15922
15944
|
var requestAiInsightH = (ctx, _cmd, parsed) => {
|
|
15923
|
-
if (!ctx.pluginAuthToken)
|
|
15924
|
-
|
|
15945
|
+
if (!ctx.pluginAuthToken) {
|
|
15946
|
+
log.info("ai-insight", "no pluginAuthToken \u2014 skipping");
|
|
15947
|
+
return;
|
|
15948
|
+
}
|
|
15949
|
+
if (typeof ctx.runtime.generateOneShot !== "function") {
|
|
15950
|
+
log.info("ai-insight", `runtime ${ctx.runtime.id} has no generateOneShot \u2014 skipping`);
|
|
15951
|
+
return;
|
|
15952
|
+
}
|
|
15925
15953
|
if (!parsed.prompt || !parsed.fileChangeId) {
|
|
15926
|
-
log.
|
|
15954
|
+
log.info(
|
|
15955
|
+
"ai-insight",
|
|
15956
|
+
`missing fields \u2014 prompt=${!!parsed.prompt} fileChangeId=${!!parsed.fileChangeId}`
|
|
15957
|
+
);
|
|
15927
15958
|
return;
|
|
15928
15959
|
}
|
|
15929
15960
|
const prompt = parsed.prompt;
|
|
15930
15961
|
const fileChangeId = parsed.fileChangeId;
|
|
15931
15962
|
const pluginAuthToken = ctx.pluginAuthToken;
|
|
15932
15963
|
void (async () => {
|
|
15964
|
+
log.info("ai-insight", `generateOneShot start fileChangeId=${fileChangeId} promptLen=${prompt.length}`);
|
|
15965
|
+
const startedAt = Date.now();
|
|
15933
15966
|
const text = await ctx.runtime.generateOneShot(prompt).catch((err) => {
|
|
15934
|
-
log.
|
|
15967
|
+
log.info("ai-insight", `generateOneShot threw: ${String(err)}`);
|
|
15935
15968
|
return null;
|
|
15936
15969
|
});
|
|
15937
|
-
|
|
15970
|
+
const tookMs = Date.now() - startedAt;
|
|
15971
|
+
if (!text) {
|
|
15972
|
+
log.info("ai-insight", `generateOneShot returned null after ${tookMs}ms \u2014 skipping POST`);
|
|
15973
|
+
return;
|
|
15974
|
+
}
|
|
15975
|
+
log.info("ai-insight", `generateOneShot ok fileChangeId=${fileChangeId} took=${tookMs}ms textLen=${text.length}`);
|
|
15938
15976
|
const { summary, reasoning, securityNote } = parseInsightText(text);
|
|
15939
|
-
await postAiResult({
|
|
15977
|
+
const result = await postAiResult({
|
|
15940
15978
|
sessionId: ctx.sessionId,
|
|
15941
15979
|
pluginId: ctx.pluginId,
|
|
15942
15980
|
pluginAuthToken,
|
|
@@ -15946,6 +15984,11 @@ var requestAiInsightH = (ctx, _cmd, parsed) => {
|
|
|
15946
15984
|
reasoning,
|
|
15947
15985
|
securityNote
|
|
15948
15986
|
});
|
|
15987
|
+
if (result.ok) {
|
|
15988
|
+
log.info("ai-insight", `postAiResult ok fileChangeId=${fileChangeId}`);
|
|
15989
|
+
} else {
|
|
15990
|
+
log.info("ai-insight", `postAiResult failed status=${result.status} msg=${result.message}`);
|
|
15991
|
+
}
|
|
15949
15992
|
})();
|
|
15950
15993
|
};
|
|
15951
15994
|
function parseInsightText(text) {
|
|
@@ -18916,7 +18959,7 @@ function checkChokidar() {
|
|
|
18916
18959
|
}
|
|
18917
18960
|
async function doctor(args2 = []) {
|
|
18918
18961
|
const json = args2.includes("--json");
|
|
18919
|
-
const cliVersion = true ? "2.23.
|
|
18962
|
+
const cliVersion = true ? "2.23.30" : "0.0.0-dev";
|
|
18920
18963
|
const apiBase = resolveApiBaseUrl();
|
|
18921
18964
|
const diagnosticId = (0, import_node_crypto6.randomUUID)();
|
|
18922
18965
|
log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
|
|
@@ -19115,7 +19158,7 @@ async function completion(args2) {
|
|
|
19115
19158
|
// src/commands/version.ts
|
|
19116
19159
|
var import_picocolors13 = __toESM(require("picocolors"));
|
|
19117
19160
|
function version2() {
|
|
19118
|
-
const v = true ? "2.23.
|
|
19161
|
+
const v = true ? "2.23.30" : "unknown";
|
|
19119
19162
|
console.log(`${import_picocolors13.default.bold("codeam-cli")} ${import_picocolors13.default.cyan(v)}`);
|
|
19120
19163
|
}
|
|
19121
19164
|
|
|
@@ -19343,7 +19386,7 @@ function checkForUpdates() {
|
|
|
19343
19386
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
19344
19387
|
if (process.env.CI) return;
|
|
19345
19388
|
if (!process.stdout.isTTY) return;
|
|
19346
|
-
const current = true ? "2.23.
|
|
19389
|
+
const current = true ? "2.23.30" : null;
|
|
19347
19390
|
if (!current) return;
|
|
19348
19391
|
const cache = readCache();
|
|
19349
19392
|
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.30",
|
|
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",
|