codeam-cli 2.23.29 → 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 +59 -17
- 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,
|
|
@@ -15893,10 +15893,19 @@ var requestLinkCredentialsH = (ctx, _cmd, parsed) => {
|
|
|
15893
15893
|
})();
|
|
15894
15894
|
};
|
|
15895
15895
|
var requestAiSummaryH = (ctx, _cmd, parsed) => {
|
|
15896
|
-
if (!ctx.pluginAuthToken)
|
|
15897
|
-
|
|
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
|
+
}
|
|
15898
15904
|
if (!parsed.prompt || !parsed.turnId || !parsed.stats) {
|
|
15899
|
-
log.
|
|
15905
|
+
log.info(
|
|
15906
|
+
"ai-summary",
|
|
15907
|
+
`missing fields \u2014 prompt=${!!parsed.prompt} turnId=${!!parsed.turnId} stats=${!!parsed.stats}`
|
|
15908
|
+
);
|
|
15900
15909
|
return;
|
|
15901
15910
|
}
|
|
15902
15911
|
const prompt = parsed.prompt;
|
|
@@ -15904,12 +15913,19 @@ var requestAiSummaryH = (ctx, _cmd, parsed) => {
|
|
|
15904
15913
|
const stats = parsed.stats;
|
|
15905
15914
|
const pluginAuthToken = ctx.pluginAuthToken;
|
|
15906
15915
|
void (async () => {
|
|
15916
|
+
log.info("ai-summary", `generateOneShot start turnId=${turnId} promptLen=${prompt.length}`);
|
|
15917
|
+
const startedAt = Date.now();
|
|
15907
15918
|
const text = await ctx.runtime.generateOneShot(prompt).catch((err) => {
|
|
15908
|
-
log.
|
|
15919
|
+
log.info("ai-summary", `generateOneShot threw: ${String(err)}`);
|
|
15909
15920
|
return null;
|
|
15910
15921
|
});
|
|
15911
|
-
|
|
15912
|
-
|
|
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({
|
|
15913
15929
|
sessionId: ctx.sessionId,
|
|
15914
15930
|
pluginId: ctx.pluginId,
|
|
15915
15931
|
pluginAuthToken,
|
|
@@ -15918,26 +15934,47 @@ var requestAiSummaryH = (ctx, _cmd, parsed) => {
|
|
|
15918
15934
|
summary: text,
|
|
15919
15935
|
stats
|
|
15920
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
|
+
}
|
|
15921
15942
|
})();
|
|
15922
15943
|
};
|
|
15923
15944
|
var requestAiInsightH = (ctx, _cmd, parsed) => {
|
|
15924
|
-
if (!ctx.pluginAuthToken)
|
|
15925
|
-
|
|
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
|
+
}
|
|
15926
15953
|
if (!parsed.prompt || !parsed.fileChangeId) {
|
|
15927
|
-
log.
|
|
15954
|
+
log.info(
|
|
15955
|
+
"ai-insight",
|
|
15956
|
+
`missing fields \u2014 prompt=${!!parsed.prompt} fileChangeId=${!!parsed.fileChangeId}`
|
|
15957
|
+
);
|
|
15928
15958
|
return;
|
|
15929
15959
|
}
|
|
15930
15960
|
const prompt = parsed.prompt;
|
|
15931
15961
|
const fileChangeId = parsed.fileChangeId;
|
|
15932
15962
|
const pluginAuthToken = ctx.pluginAuthToken;
|
|
15933
15963
|
void (async () => {
|
|
15964
|
+
log.info("ai-insight", `generateOneShot start fileChangeId=${fileChangeId} promptLen=${prompt.length}`);
|
|
15965
|
+
const startedAt = Date.now();
|
|
15934
15966
|
const text = await ctx.runtime.generateOneShot(prompt).catch((err) => {
|
|
15935
|
-
log.
|
|
15967
|
+
log.info("ai-insight", `generateOneShot threw: ${String(err)}`);
|
|
15936
15968
|
return null;
|
|
15937
15969
|
});
|
|
15938
|
-
|
|
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}`);
|
|
15939
15976
|
const { summary, reasoning, securityNote } = parseInsightText(text);
|
|
15940
|
-
await postAiResult({
|
|
15977
|
+
const result = await postAiResult({
|
|
15941
15978
|
sessionId: ctx.sessionId,
|
|
15942
15979
|
pluginId: ctx.pluginId,
|
|
15943
15980
|
pluginAuthToken,
|
|
@@ -15947,6 +15984,11 @@ var requestAiInsightH = (ctx, _cmd, parsed) => {
|
|
|
15947
15984
|
reasoning,
|
|
15948
15985
|
securityNote
|
|
15949
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
|
+
}
|
|
15950
15992
|
})();
|
|
15951
15993
|
};
|
|
15952
15994
|
function parseInsightText(text) {
|
|
@@ -18917,7 +18959,7 @@ function checkChokidar() {
|
|
|
18917
18959
|
}
|
|
18918
18960
|
async function doctor(args2 = []) {
|
|
18919
18961
|
const json = args2.includes("--json");
|
|
18920
|
-
const cliVersion = true ? "2.23.
|
|
18962
|
+
const cliVersion = true ? "2.23.30" : "0.0.0-dev";
|
|
18921
18963
|
const apiBase = resolveApiBaseUrl();
|
|
18922
18964
|
const diagnosticId = (0, import_node_crypto6.randomUUID)();
|
|
18923
18965
|
log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
|
|
@@ -19116,7 +19158,7 @@ async function completion(args2) {
|
|
|
19116
19158
|
// src/commands/version.ts
|
|
19117
19159
|
var import_picocolors13 = __toESM(require("picocolors"));
|
|
19118
19160
|
function version2() {
|
|
19119
|
-
const v = true ? "2.23.
|
|
19161
|
+
const v = true ? "2.23.30" : "unknown";
|
|
19120
19162
|
console.log(`${import_picocolors13.default.bold("codeam-cli")} ${import_picocolors13.default.cyan(v)}`);
|
|
19121
19163
|
}
|
|
19122
19164
|
|
|
@@ -19344,7 +19386,7 @@ function checkForUpdates() {
|
|
|
19344
19386
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
19345
19387
|
if (process.env.CI) return;
|
|
19346
19388
|
if (!process.stdout.isTTY) return;
|
|
19347
|
-
const current = true ? "2.23.
|
|
19389
|
+
const current = true ? "2.23.30" : null;
|
|
19348
19390
|
if (!current) return;
|
|
19349
19391
|
const cache = readCache();
|
|
19350
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",
|