codeam-cli 2.26.12 → 2.26.13
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 +100 -56
- 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.26.12] — 2026-06-04
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **cli:** Gate preview_ready on DNS resolution via c-ares + 1.1.1.1 (#249)
|
|
12
|
+
|
|
7
13
|
## [2.26.11] — 2026-06-03
|
|
8
14
|
|
|
9
15
|
### Added
|
package/dist/index.js
CHANGED
|
@@ -472,7 +472,7 @@ var import_qrcode_terminal = __toESM(require("qrcode-terminal"));
|
|
|
472
472
|
// package.json
|
|
473
473
|
var package_default = {
|
|
474
474
|
name: "codeam-cli",
|
|
475
|
-
version: "2.26.
|
|
475
|
+
version: "2.26.13",
|
|
476
476
|
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.",
|
|
477
477
|
type: "commonjs",
|
|
478
478
|
main: "dist/index.js",
|
|
@@ -1115,8 +1115,8 @@ function createGetModuleFromFilename(basePath = process.argv[1] ? (0, import_pat
|
|
|
1115
1115
|
return decodedFile;
|
|
1116
1116
|
};
|
|
1117
1117
|
}
|
|
1118
|
-
function normalizeWindowsPath(
|
|
1119
|
-
return
|
|
1118
|
+
function normalizeWindowsPath(path43) {
|
|
1119
|
+
return path43.replace(/^[A-Z]:/, "").replace(/\\/g, "/");
|
|
1120
1120
|
}
|
|
1121
1121
|
|
|
1122
1122
|
// ../../node_modules/@posthog/core/dist/featureFlagUtils.mjs
|
|
@@ -3596,9 +3596,9 @@ async function addSourceContext(frames) {
|
|
|
3596
3596
|
LRU_FILE_CONTENTS_CACHE.reduce();
|
|
3597
3597
|
return frames;
|
|
3598
3598
|
}
|
|
3599
|
-
function getContextLinesFromFile(
|
|
3599
|
+
function getContextLinesFromFile(path43, ranges, output) {
|
|
3600
3600
|
return new Promise((resolve5) => {
|
|
3601
|
-
const stream = (0, import_node_fs.createReadStream)(
|
|
3601
|
+
const stream = (0, import_node_fs.createReadStream)(path43);
|
|
3602
3602
|
const lineReaded = (0, import_node_readline.createInterface)({
|
|
3603
3603
|
input: stream
|
|
3604
3604
|
});
|
|
@@ -3613,7 +3613,7 @@ function getContextLinesFromFile(path42, ranges, output) {
|
|
|
3613
3613
|
let rangeStart = range[0];
|
|
3614
3614
|
let rangeEnd = range[1];
|
|
3615
3615
|
function onStreamError() {
|
|
3616
|
-
LRU_FILE_CONTENTS_FS_READ_FAILED.set(
|
|
3616
|
+
LRU_FILE_CONTENTS_FS_READ_FAILED.set(path43, 1);
|
|
3617
3617
|
lineReaded.close();
|
|
3618
3618
|
lineReaded.removeAllListeners();
|
|
3619
3619
|
destroyStreamAndResolve();
|
|
@@ -3674,8 +3674,8 @@ function clearLineContext(frame) {
|
|
|
3674
3674
|
delete frame.context_line;
|
|
3675
3675
|
delete frame.post_context;
|
|
3676
3676
|
}
|
|
3677
|
-
function shouldSkipContextLinesForFile(
|
|
3678
|
-
return
|
|
3677
|
+
function shouldSkipContextLinesForFile(path43) {
|
|
3678
|
+
return path43.startsWith("node:") || path43.endsWith(".min.js") || path43.endsWith(".min.cjs") || path43.endsWith(".min.mjs") || path43.startsWith("data:");
|
|
3679
3679
|
}
|
|
3680
3680
|
function shouldSkipContextLinesForFrame(frame) {
|
|
3681
3681
|
if (void 0 !== frame.lineno && frame.lineno > MAX_CONTEXTLINES_LINENO) return true;
|
|
@@ -5829,7 +5829,7 @@ function readAnonId() {
|
|
|
5829
5829
|
}
|
|
5830
5830
|
function superProperties() {
|
|
5831
5831
|
return {
|
|
5832
|
-
cliVersion: true ? "2.26.
|
|
5832
|
+
cliVersion: true ? "2.26.13" : "0.0.0-dev",
|
|
5833
5833
|
nodeVersion: process.version,
|
|
5834
5834
|
platform: process.platform,
|
|
5835
5835
|
arch: process.arch,
|
|
@@ -9901,13 +9901,13 @@ function detectStartupBanner(lines) {
|
|
|
9901
9901
|
while (artStart > 0 && BANNER_ART_RE.test(lines[artStart - 1])) artStart--;
|
|
9902
9902
|
if (metaIdx - artStart < 2) return null;
|
|
9903
9903
|
const pathLine = (lines[metaIdx + 1] ?? "").trim();
|
|
9904
|
-
const
|
|
9904
|
+
const path43 = pathLine && !BANNER_ART_RE.test(pathLine) ? pathLine : "";
|
|
9905
9905
|
return {
|
|
9906
9906
|
title: "",
|
|
9907
9907
|
subtitle: lines[metaIdx].trim(),
|
|
9908
|
-
path:
|
|
9908
|
+
path: path43,
|
|
9909
9909
|
startIdx: artStart,
|
|
9910
|
-
endIdx: metaIdx + (
|
|
9910
|
+
endIdx: metaIdx + (path43 ? 1 : 0)
|
|
9911
9911
|
};
|
|
9912
9912
|
}
|
|
9913
9913
|
|
|
@@ -11205,11 +11205,11 @@ function parseReview(stdout) {
|
|
|
11205
11205
|
for (const line of lines) {
|
|
11206
11206
|
const m = line.match(HUNK_LINE_RE);
|
|
11207
11207
|
if (!m) continue;
|
|
11208
|
-
const [,
|
|
11209
|
-
if (!
|
|
11208
|
+
const [, path43, lineNo, sevToken, message] = m;
|
|
11209
|
+
if (!path43 || !lineNo || !message) continue;
|
|
11210
11210
|
const cleanedMessage = message.trim().replace(/^[*-]\s+/, "");
|
|
11211
11211
|
hunks.push({
|
|
11212
|
-
path:
|
|
11212
|
+
path: path43.trim(),
|
|
11213
11213
|
line: Number(lineNo),
|
|
11214
11214
|
severity: sevToken ? SEVERITY_MAP[sevToken.toLowerCase()] : void 0,
|
|
11215
11215
|
message: cleanedMessage
|
|
@@ -13845,7 +13845,7 @@ function defaultRunGit(cwd, args2) {
|
|
|
13845
13845
|
});
|
|
13846
13846
|
}
|
|
13847
13847
|
async function discoverRepos(workingDir, maxDepth = 4) {
|
|
13848
|
-
const
|
|
13848
|
+
const fs34 = await import("fs/promises");
|
|
13849
13849
|
const out2 = [];
|
|
13850
13850
|
await walk(workingDir, 0);
|
|
13851
13851
|
return out2;
|
|
@@ -13853,7 +13853,7 @@ async function discoverRepos(workingDir, maxDepth = 4) {
|
|
|
13853
13853
|
if (depth > maxDepth) return;
|
|
13854
13854
|
let entries = [];
|
|
13855
13855
|
try {
|
|
13856
|
-
const dirents = await
|
|
13856
|
+
const dirents = await fs34.readdir(dir, { withFileTypes: true });
|
|
13857
13857
|
entries = dirents.filter((d3) => !d3.name.startsWith(".") || d3.name === ".git").map((d3) => ({ name: d3.name, isDirectory: d3.isDirectory() }));
|
|
13858
13858
|
} catch {
|
|
13859
13859
|
return;
|
|
@@ -14755,9 +14755,9 @@ function buildKeepAlive(ctx) {
|
|
|
14755
14755
|
}
|
|
14756
14756
|
|
|
14757
14757
|
// src/commands/start/handlers.ts
|
|
14758
|
-
var
|
|
14758
|
+
var fs30 = __toESM(require("fs"));
|
|
14759
14759
|
var os24 = __toESM(require("os"));
|
|
14760
|
-
var
|
|
14760
|
+
var path36 = __toESM(require("path"));
|
|
14761
14761
|
var import_crypto5 = require("crypto");
|
|
14762
14762
|
var import_child_process15 = require("child_process");
|
|
14763
14763
|
|
|
@@ -16281,6 +16281,24 @@ function parseExpoUrl(stdout) {
|
|
|
16281
16281
|
return match ? match[0] : null;
|
|
16282
16282
|
}
|
|
16283
16283
|
|
|
16284
|
+
// src/services/preview/setup-deps.ts
|
|
16285
|
+
var import_fs2 = __toESM(require("fs"));
|
|
16286
|
+
var import_path6 = __toESM(require("path"));
|
|
16287
|
+
function detectMissingNodeDeps(cwd) {
|
|
16288
|
+
if (!import_fs2.default.existsSync(import_path6.default.join(cwd, "package.json"))) return null;
|
|
16289
|
+
if (import_fs2.default.existsSync(import_path6.default.join(cwd, "node_modules"))) return null;
|
|
16290
|
+
if (import_fs2.default.existsSync(import_path6.default.join(cwd, "pnpm-lock.yaml"))) {
|
|
16291
|
+
return { cmd: "pnpm", args: ["install"] };
|
|
16292
|
+
}
|
|
16293
|
+
if (import_fs2.default.existsSync(import_path6.default.join(cwd, "yarn.lock"))) {
|
|
16294
|
+
return { cmd: "yarn", args: ["install"] };
|
|
16295
|
+
}
|
|
16296
|
+
if (import_fs2.default.existsSync(import_path6.default.join(cwd, "bun.lockb")) || import_fs2.default.existsSync(import_path6.default.join(cwd, "bun.lock"))) {
|
|
16297
|
+
return { cmd: "bun", args: ["install"] };
|
|
16298
|
+
}
|
|
16299
|
+
return { cmd: "npm", args: ["install"] };
|
|
16300
|
+
}
|
|
16301
|
+
|
|
16284
16302
|
// src/services/preview/index.ts
|
|
16285
16303
|
var activePreviews = /* @__PURE__ */ new Map();
|
|
16286
16304
|
function registerPreview(sessionId, preview) {
|
|
@@ -16326,7 +16344,7 @@ var pendingAttachmentFiles = /* @__PURE__ */ new Set();
|
|
|
16326
16344
|
function cleanupAttachmentTempFiles() {
|
|
16327
16345
|
for (const p2 of pendingAttachmentFiles) {
|
|
16328
16346
|
try {
|
|
16329
|
-
|
|
16347
|
+
fs30.unlinkSync(p2);
|
|
16330
16348
|
} catch {
|
|
16331
16349
|
}
|
|
16332
16350
|
}
|
|
@@ -16335,8 +16353,8 @@ function cleanupAttachmentTempFiles() {
|
|
|
16335
16353
|
function saveFilesTemp(files) {
|
|
16336
16354
|
return files.filter(({ base64 }) => base64 && base64.length > 0).map(({ filename, base64 }) => {
|
|
16337
16355
|
const safeName = filename.replace(/[^a-zA-Z0-9._-]/g, "_").slice(0, 80);
|
|
16338
|
-
const tmpPath =
|
|
16339
|
-
|
|
16356
|
+
const tmpPath = path36.join(os24.tmpdir(), `codeam-${(0, import_crypto5.randomUUID)()}-${safeName}`);
|
|
16357
|
+
fs30.writeFileSync(tmpPath, Buffer.from(base64, "base64"));
|
|
16340
16358
|
pendingAttachmentFiles.add(tmpPath);
|
|
16341
16359
|
return tmpPath;
|
|
16342
16360
|
});
|
|
@@ -16356,7 +16374,7 @@ var startTask = (ctx, _cmd, parsed) => {
|
|
|
16356
16374
|
setTimeout(() => {
|
|
16357
16375
|
for (const p2 of paths) {
|
|
16358
16376
|
try {
|
|
16359
|
-
|
|
16377
|
+
fs30.unlinkSync(p2);
|
|
16360
16378
|
} catch {
|
|
16361
16379
|
}
|
|
16362
16380
|
pendingAttachmentFiles.delete(p2);
|
|
@@ -16921,6 +16939,32 @@ var previewStartH = (ctx, _cmd, parsed) => {
|
|
|
16921
16939
|
payload: { framework: detection.framework, port: detection.port }
|
|
16922
16940
|
});
|
|
16923
16941
|
emitProgress("ENV_DETECTED", `${detection.framework}`);
|
|
16942
|
+
const missingDeps = detectMissingNodeDeps(process.cwd());
|
|
16943
|
+
if (missingDeps) {
|
|
16944
|
+
emitProgress(
|
|
16945
|
+
"SETUP_RUN",
|
|
16946
|
+
`${missingDeps.cmd} ${missingDeps.args.join(" ")} (pre-flight \u2014 node_modules missing)`
|
|
16947
|
+
);
|
|
16948
|
+
const exitCode = await runOnce(
|
|
16949
|
+
missingDeps.cmd,
|
|
16950
|
+
missingDeps.args,
|
|
16951
|
+
process.cwd(),
|
|
16952
|
+
detection.env
|
|
16953
|
+
);
|
|
16954
|
+
if (exitCode !== 0) {
|
|
16955
|
+
void postPreviewEvent({
|
|
16956
|
+
sessionId: ctx.sessionId,
|
|
16957
|
+
pluginId: ctx.pluginId,
|
|
16958
|
+
pluginAuthToken,
|
|
16959
|
+
type: "preview_error",
|
|
16960
|
+
payload: {
|
|
16961
|
+
stage: "spawn",
|
|
16962
|
+
message: `Dependency install failed (${missingDeps.cmd} ${missingDeps.args.join(" ")}, exit ${exitCode}). Run it manually in this project and try again.`
|
|
16963
|
+
}
|
|
16964
|
+
});
|
|
16965
|
+
return;
|
|
16966
|
+
}
|
|
16967
|
+
}
|
|
16924
16968
|
for (const setup of detection.setup_commands ?? []) {
|
|
16925
16969
|
emitProgress("SETUP_RUN", `${setup.cmd} ${setup.args.join(" ")}`);
|
|
16926
16970
|
const exitCode = await runOnce(setup.cmd, setup.args, process.cwd(), detection.env);
|
|
@@ -17636,7 +17680,7 @@ async function autoLinkAfterPair(opts) {
|
|
|
17636
17680
|
}
|
|
17637
17681
|
|
|
17638
17682
|
// src/commands/pair-auto.ts
|
|
17639
|
-
var
|
|
17683
|
+
var fs31 = __toESM(require("fs"));
|
|
17640
17684
|
var os25 = __toESM(require("os"));
|
|
17641
17685
|
var import_crypto7 = require("crypto");
|
|
17642
17686
|
|
|
@@ -17805,12 +17849,12 @@ function readTokenFromArgs(args2) {
|
|
|
17805
17849
|
}
|
|
17806
17850
|
const fileFlag = args2.find((a) => a.startsWith("--token-file="));
|
|
17807
17851
|
if (fileFlag) {
|
|
17808
|
-
const
|
|
17852
|
+
const path43 = fileFlag.slice("--token-file=".length);
|
|
17809
17853
|
try {
|
|
17810
|
-
const content =
|
|
17811
|
-
if (content.length === 0) fail(`--token-file ${
|
|
17854
|
+
const content = fs31.readFileSync(path43, "utf8").trim();
|
|
17855
|
+
if (content.length === 0) fail(`--token-file ${path43} is empty`);
|
|
17812
17856
|
try {
|
|
17813
|
-
|
|
17857
|
+
fs31.unlinkSync(path43);
|
|
17814
17858
|
} catch {
|
|
17815
17859
|
}
|
|
17816
17860
|
return content;
|
|
@@ -18076,7 +18120,7 @@ var import_picocolors10 = __toESM(require("picocolors"));
|
|
|
18076
18120
|
var import_child_process16 = require("child_process");
|
|
18077
18121
|
var import_util4 = require("util");
|
|
18078
18122
|
var import_picocolors8 = __toESM(require("picocolors"));
|
|
18079
|
-
var
|
|
18123
|
+
var path37 = __toESM(require("path"));
|
|
18080
18124
|
var execFileP5 = (0, import_util4.promisify)(import_child_process16.execFile);
|
|
18081
18125
|
var MAX_BUFFER = 8 * 1024 * 1024;
|
|
18082
18126
|
function resetStdinForChild() {
|
|
@@ -18565,7 +18609,7 @@ var GitHubCodespacesProvider = class {
|
|
|
18565
18609
|
});
|
|
18566
18610
|
}
|
|
18567
18611
|
async uploadFile(workspaceId, remotePath, contents, options = {}) {
|
|
18568
|
-
const remoteDir =
|
|
18612
|
+
const remoteDir = path37.posix.dirname(remotePath);
|
|
18569
18613
|
const parts = [
|
|
18570
18614
|
`mkdir -p ${shellQuote(remoteDir)}`,
|
|
18571
18615
|
`cat > ${shellQuote(remotePath)}`
|
|
@@ -18635,7 +18679,7 @@ function shellQuote(s) {
|
|
|
18635
18679
|
// src/services/providers/gitpod.ts
|
|
18636
18680
|
var import_child_process17 = require("child_process");
|
|
18637
18681
|
var import_util5 = require("util");
|
|
18638
|
-
var
|
|
18682
|
+
var path38 = __toESM(require("path"));
|
|
18639
18683
|
var import_picocolors9 = __toESM(require("picocolors"));
|
|
18640
18684
|
var execFileP6 = (0, import_util5.promisify)(import_child_process17.execFile);
|
|
18641
18685
|
var MAX_BUFFER2 = 8 * 1024 * 1024;
|
|
@@ -18875,7 +18919,7 @@ var GitpodProvider = class {
|
|
|
18875
18919
|
});
|
|
18876
18920
|
}
|
|
18877
18921
|
async uploadFile(workspaceId, remotePath, contents, options = {}) {
|
|
18878
|
-
const remoteDir =
|
|
18922
|
+
const remoteDir = path38.posix.dirname(remotePath);
|
|
18879
18923
|
const parts = [
|
|
18880
18924
|
`mkdir -p ${shellQuote2(remoteDir)}`,
|
|
18881
18925
|
`cat > ${shellQuote2(remotePath)}`
|
|
@@ -18911,7 +18955,7 @@ function shellQuote2(s) {
|
|
|
18911
18955
|
// src/services/providers/gitlab-workspaces.ts
|
|
18912
18956
|
var import_child_process18 = require("child_process");
|
|
18913
18957
|
var import_util6 = require("util");
|
|
18914
|
-
var
|
|
18958
|
+
var path39 = __toESM(require("path"));
|
|
18915
18959
|
var execFileP7 = (0, import_util6.promisify)(import_child_process18.execFile);
|
|
18916
18960
|
var MAX_BUFFER3 = 8 * 1024 * 1024;
|
|
18917
18961
|
var GITLAB_API_BASE = process.env.CODEAM_GITLAB_API_URL ?? "https://gitlab.com/api/v4";
|
|
@@ -19171,7 +19215,7 @@ Docs: https://docs.gitlab.com/ee/user/workspace/configuration.html`
|
|
|
19171
19215
|
}
|
|
19172
19216
|
async uploadFile(workspaceId, remotePath, contents, options = {}) {
|
|
19173
19217
|
const sshHost = process.env.CODEAM_GITLAB_SSH_HOST ?? "workspaces.gitlab.com";
|
|
19174
|
-
const remoteDir =
|
|
19218
|
+
const remoteDir = path39.posix.dirname(remotePath);
|
|
19175
19219
|
const parts = [`mkdir -p ${shellQuote3(remoteDir)}`, `cat > ${shellQuote3(remotePath)}`];
|
|
19176
19220
|
if (options.mode != null) {
|
|
19177
19221
|
parts.push(`chmod ${options.mode.toString(8)} ${shellQuote3(remotePath)}`);
|
|
@@ -19239,7 +19283,7 @@ function shellQuote3(s) {
|
|
|
19239
19283
|
// src/services/providers/railway.ts
|
|
19240
19284
|
var import_child_process19 = require("child_process");
|
|
19241
19285
|
var import_util7 = require("util");
|
|
19242
|
-
var
|
|
19286
|
+
var path40 = __toESM(require("path"));
|
|
19243
19287
|
var execFileP8 = (0, import_util7.promisify)(import_child_process19.execFile);
|
|
19244
19288
|
var MAX_BUFFER4 = 8 * 1024 * 1024;
|
|
19245
19289
|
function resetStdinForChild4() {
|
|
@@ -19475,7 +19519,7 @@ var RailwayProvider = class {
|
|
|
19475
19519
|
if (!projectId || !serviceId) {
|
|
19476
19520
|
throw new Error("Invalid Railway workspace id (expected projectId/serviceId).");
|
|
19477
19521
|
}
|
|
19478
|
-
const remoteDir =
|
|
19522
|
+
const remoteDir = path40.posix.dirname(remotePath);
|
|
19479
19523
|
const parts = [`mkdir -p ${shellQuote4(remoteDir)}`, `cat > ${shellQuote4(remotePath)}`];
|
|
19480
19524
|
if (options.mode != null) {
|
|
19481
19525
|
parts.push(`chmod ${options.mode.toString(8)} ${shellQuote4(remotePath)}`);
|
|
@@ -20018,8 +20062,8 @@ async function stopWorkspaceFromLocal(target) {
|
|
|
20018
20062
|
var import_node_dns = require("dns");
|
|
20019
20063
|
var import_node_util4 = require("util");
|
|
20020
20064
|
var import_node_crypto6 = require("crypto");
|
|
20021
|
-
var
|
|
20022
|
-
var
|
|
20065
|
+
var fs32 = __toESM(require("fs"));
|
|
20066
|
+
var path41 = __toESM(require("path"));
|
|
20023
20067
|
var import_picocolors12 = __toESM(require("picocolors"));
|
|
20024
20068
|
var dnsResolveP = (0, import_node_util4.promisify)(import_node_dns.resolve);
|
|
20025
20069
|
async function checkDns(apiBase) {
|
|
@@ -20075,13 +20119,13 @@ async function checkHealth(apiBase) {
|
|
|
20075
20119
|
}
|
|
20076
20120
|
}
|
|
20077
20121
|
function checkConfigDir() {
|
|
20078
|
-
const dir =
|
|
20122
|
+
const dir = path41.join(require("os").homedir(), ".codeam");
|
|
20079
20123
|
try {
|
|
20080
|
-
|
|
20081
|
-
const probe =
|
|
20082
|
-
|
|
20083
|
-
const read =
|
|
20084
|
-
|
|
20124
|
+
fs32.mkdirSync(dir, { recursive: true, mode: 448 });
|
|
20125
|
+
const probe = path41.join(dir, ".doctor-probe");
|
|
20126
|
+
fs32.writeFileSync(probe, "ok", { mode: 384 });
|
|
20127
|
+
const read = fs32.readFileSync(probe, "utf8");
|
|
20128
|
+
fs32.unlinkSync(probe);
|
|
20085
20129
|
if (read !== "ok") throw new Error("write/read round-trip mismatch");
|
|
20086
20130
|
return {
|
|
20087
20131
|
id: "config-dir",
|
|
@@ -20145,7 +20189,7 @@ function checkNodePty() {
|
|
|
20145
20189
|
detail: "not required on this platform"
|
|
20146
20190
|
};
|
|
20147
20191
|
}
|
|
20148
|
-
const vendoredPath =
|
|
20192
|
+
const vendoredPath = path41.join(__dirname, "vendor", "node-pty");
|
|
20149
20193
|
for (const target of [vendoredPath, "node-pty"]) {
|
|
20150
20194
|
try {
|
|
20151
20195
|
require(target);
|
|
@@ -20187,7 +20231,7 @@ function checkChokidar() {
|
|
|
20187
20231
|
}
|
|
20188
20232
|
async function doctor(args2 = []) {
|
|
20189
20233
|
const json = args2.includes("--json");
|
|
20190
|
-
const cliVersion = true ? "2.26.
|
|
20234
|
+
const cliVersion = true ? "2.26.13" : "0.0.0-dev";
|
|
20191
20235
|
const apiBase = resolveApiBaseUrl();
|
|
20192
20236
|
const diagnosticId = (0, import_node_crypto6.randomUUID)();
|
|
20193
20237
|
log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
|
|
@@ -20386,7 +20430,7 @@ async function completion(args2) {
|
|
|
20386
20430
|
// src/commands/version.ts
|
|
20387
20431
|
var import_picocolors13 = __toESM(require("picocolors"));
|
|
20388
20432
|
function version2() {
|
|
20389
|
-
const v = true ? "2.26.
|
|
20433
|
+
const v = true ? "2.26.13" : "unknown";
|
|
20390
20434
|
console.log(`${import_picocolors13.default.bold("codeam-cli")} ${import_picocolors13.default.cyan(v)}`);
|
|
20391
20435
|
}
|
|
20392
20436
|
|
|
@@ -20514,9 +20558,9 @@ function tryShowSubcommandHelp(cmd, args2) {
|
|
|
20514
20558
|
var _subcommandHelpKeys = Object.keys(HELPS);
|
|
20515
20559
|
|
|
20516
20560
|
// src/lib/updateNotifier.ts
|
|
20517
|
-
var
|
|
20561
|
+
var fs33 = __toESM(require("fs"));
|
|
20518
20562
|
var os26 = __toESM(require("os"));
|
|
20519
|
-
var
|
|
20563
|
+
var path42 = __toESM(require("path"));
|
|
20520
20564
|
var https7 = __toESM(require("https"));
|
|
20521
20565
|
var import_picocolors16 = __toESM(require("picocolors"));
|
|
20522
20566
|
var PKG_NAME = "codeam-cli";
|
|
@@ -20524,12 +20568,12 @@ var REGISTRY_URL = `https://registry.npmjs.org/${PKG_NAME}/latest`;
|
|
|
20524
20568
|
var TTL_MS = 24 * 60 * 60 * 1e3;
|
|
20525
20569
|
var REQUEST_TIMEOUT_MS = 1500;
|
|
20526
20570
|
function cachePath() {
|
|
20527
|
-
const dir =
|
|
20528
|
-
return
|
|
20571
|
+
const dir = path42.join(os26.homedir(), ".codeam");
|
|
20572
|
+
return path42.join(dir, "update-check.json");
|
|
20529
20573
|
}
|
|
20530
20574
|
function readCache() {
|
|
20531
20575
|
try {
|
|
20532
|
-
const raw =
|
|
20576
|
+
const raw = fs33.readFileSync(cachePath(), "utf8");
|
|
20533
20577
|
const parsed = JSON.parse(raw);
|
|
20534
20578
|
if (typeof parsed.fetchedAt !== "number" || typeof parsed.latest !== "string") return null;
|
|
20535
20579
|
return parsed;
|
|
@@ -20540,10 +20584,10 @@ function readCache() {
|
|
|
20540
20584
|
function writeCache(cache) {
|
|
20541
20585
|
try {
|
|
20542
20586
|
const file = cachePath();
|
|
20543
|
-
|
|
20587
|
+
fs33.mkdirSync(path42.dirname(file), { recursive: true });
|
|
20544
20588
|
const tmp = `${file}.${process.pid}.tmp`;
|
|
20545
|
-
|
|
20546
|
-
|
|
20589
|
+
fs33.writeFileSync(tmp, JSON.stringify(cache));
|
|
20590
|
+
fs33.renameSync(tmp, file);
|
|
20547
20591
|
} catch {
|
|
20548
20592
|
}
|
|
20549
20593
|
}
|
|
@@ -20614,7 +20658,7 @@ function checkForUpdates() {
|
|
|
20614
20658
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
20615
20659
|
if (process.env.CI) return;
|
|
20616
20660
|
if (!process.stdout.isTTY) return;
|
|
20617
|
-
const current = true ? "2.26.
|
|
20661
|
+
const current = true ? "2.26.13" : null;
|
|
20618
20662
|
if (!current) return;
|
|
20619
20663
|
const cache = readCache();
|
|
20620
20664
|
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.26.
|
|
3
|
+
"version": "2.26.13",
|
|
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",
|