codeam-cli 2.75.37 → 2.75.38
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 +44 -17
- 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.75.37] — 2026-09-27
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **cli:** The review lists files, not new folders; skip sockets and beads state (#839)
|
|
12
|
+
|
|
7
13
|
## [2.75.36] — 2026-09-26
|
|
8
14
|
|
|
9
15
|
### Fixed
|
package/dist/index.js
CHANGED
|
@@ -10529,7 +10529,7 @@ function readAnonId() {
|
|
|
10529
10529
|
}
|
|
10530
10530
|
function superProperties() {
|
|
10531
10531
|
return {
|
|
10532
|
-
cliVersion: true ? "2.75.
|
|
10532
|
+
cliVersion: true ? "2.75.38" : "0.0.0-dev",
|
|
10533
10533
|
nodeVersion: process.version,
|
|
10534
10534
|
platform: process.platform,
|
|
10535
10535
|
arch: process.arch,
|
|
@@ -10771,7 +10771,7 @@ var http = __toESM(require("http"));
|
|
|
10771
10771
|
// package.json
|
|
10772
10772
|
var package_default = {
|
|
10773
10773
|
name: "codeam-cli",
|
|
10774
|
-
version: "2.75.
|
|
10774
|
+
version: "2.75.38",
|
|
10775
10775
|
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.",
|
|
10776
10776
|
type: "commonjs",
|
|
10777
10777
|
main: "dist/index.js",
|
|
@@ -12101,7 +12101,7 @@ var CommandRelayService = class _CommandRelayService {
|
|
|
12101
12101
|
// fresh + clear the "CLI update available" banner after a self-update
|
|
12102
12102
|
// (a codespace that reinstalls @latest reconnects via heartbeat, not
|
|
12103
12103
|
// pair/reconnect). Older backends ignore the extra field.
|
|
12104
|
-
..."2.75.
|
|
12104
|
+
..."2.75.38" ? { ideVersion: "2.75.38" } : {}
|
|
12105
12105
|
};
|
|
12106
12106
|
try {
|
|
12107
12107
|
const res = await _postJson(`${API_BASE2}/api/plugin/heartbeat`, body);
|
|
@@ -20458,14 +20458,14 @@ function defaultSdkDir() {
|
|
|
20458
20458
|
return resolveSdkDirViaRequire();
|
|
20459
20459
|
}
|
|
20460
20460
|
function resolveClaudeNativeBinary(deps = {}) {
|
|
20461
|
-
const
|
|
20461
|
+
const existsSync32 = deps.existsSync ?? import_fs.default.existsSync;
|
|
20462
20462
|
const platformKey = deps.platformKey ?? currentPlatformKey();
|
|
20463
20463
|
const sdkDir = deps.sdkDir !== void 0 ? deps.sdkDir : defaultSdkDir();
|
|
20464
20464
|
if (!sdkDir) return null;
|
|
20465
20465
|
const scopeDir = import_path4.default.dirname(sdkDir);
|
|
20466
20466
|
const binName = platformKey.startsWith("win32-") ? "claude.exe" : "claude";
|
|
20467
20467
|
const candidate = import_path4.default.join(scopeDir, `claude-agent-sdk-${platformKey}`, binName);
|
|
20468
|
-
return
|
|
20468
|
+
return existsSync32(candidate) ? candidate : null;
|
|
20469
20469
|
}
|
|
20470
20470
|
var realSleep = (ms) => new Promise((resolve12) => setTimeout(resolve12, ms));
|
|
20471
20471
|
async function waitForClaudeNativeBinary(opts = {}) {
|
|
@@ -20547,18 +20547,18 @@ function augmentUserLocalBinPaths(deps = {}) {
|
|
|
20547
20547
|
env.PATH = [...additions, ...parts].join(p2.delimiter);
|
|
20548
20548
|
}
|
|
20549
20549
|
function resolveCursorAgentBinary(deps = {}) {
|
|
20550
|
-
const
|
|
20550
|
+
const existsSync32 = deps.existsSync ?? import_fs.default.existsSync;
|
|
20551
20551
|
const platform3 = deps.platform ?? process.platform;
|
|
20552
20552
|
const env = deps.env ?? process.env;
|
|
20553
20553
|
if (platform3 === "win32") {
|
|
20554
20554
|
const localAppData = env.LOCALAPPDATA;
|
|
20555
20555
|
if (!localAppData) return null;
|
|
20556
20556
|
const exe = import_path4.default.win32.join(localAppData, "cursor-agent", "cursor-agent.exe");
|
|
20557
|
-
return
|
|
20557
|
+
return existsSync32(exe) ? exe : null;
|
|
20558
20558
|
}
|
|
20559
20559
|
const home = deps.homedir ?? import_os4.default.homedir();
|
|
20560
20560
|
const unix = import_path4.default.posix.join(home, ".local", "bin", "cursor-agent");
|
|
20561
|
-
return
|
|
20561
|
+
return existsSync32(unix) ? unix : null;
|
|
20562
20562
|
}
|
|
20563
20563
|
async function waitForCursorAgent(opts = {}) {
|
|
20564
20564
|
const timeoutMs = opts.timeoutMs ?? 18e4;
|
|
@@ -26214,7 +26214,14 @@ async function provisionBeads(opts = {}) {
|
|
|
26214
26214
|
"--shared-server",
|
|
26215
26215
|
"--skip-agents",
|
|
26216
26216
|
"--skip-hooks",
|
|
26217
|
-
"--non-interactive"
|
|
26217
|
+
"--non-interactive",
|
|
26218
|
+
// ⚠️ Without it `bd init` COMMITS ("bd init: initialize beads issue
|
|
26219
|
+
// tracking") on whatever branch the user's repo is on — verified with bd
|
|
26220
|
+
// 1.0.5 on a scratch repo, and seen on a fleet box's feature branch
|
|
26221
|
+
// (break-it 2026-09-24/26). Stealth keeps beads out of git: it only writes
|
|
26222
|
+
// `.git/info/exclude` (local, never committed); the global git config was
|
|
26223
|
+
// verified untouched.
|
|
26224
|
+
"--stealth"
|
|
26218
26225
|
]);
|
|
26219
26226
|
const alreadyInit = /already initialized|already exists/i.test(init.stderr + init.stdout);
|
|
26220
26227
|
if (init.code !== 0 && !alreadyInit) {
|
|
@@ -26222,6 +26229,8 @@ async function provisionBeads(opts = {}) {
|
|
|
26222
26229
|
return result;
|
|
26223
26230
|
}
|
|
26224
26231
|
result.initialized = true;
|
|
26232
|
+
const workdir = opts.cwd ?? process.cwd();
|
|
26233
|
+
ensureLocalGitExclude(findRepoRoot(workdir) ?? workdir, [".beads/", ".dolt/"]);
|
|
26225
26234
|
const server = await _provisionSeam.ensureSharedServer(bd);
|
|
26226
26235
|
result.serverUp = server.up;
|
|
26227
26236
|
if (!server.up) {
|
|
@@ -26264,7 +26273,8 @@ async function provisionBeads(opts = {}) {
|
|
|
26264
26273
|
// `git push` on a box without git-lfs (fleet box 2026-09-24).
|
|
26265
26274
|
"--skip-agents",
|
|
26266
26275
|
"--skip-hooks",
|
|
26267
|
-
"--non-interactive"
|
|
26276
|
+
"--non-interactive",
|
|
26277
|
+
"--stealth"
|
|
26268
26278
|
]);
|
|
26269
26279
|
if (mint.code !== 0) {
|
|
26270
26280
|
log.warn(
|
|
@@ -26335,6 +26345,23 @@ function dedupeRecipes(agents) {
|
|
|
26335
26345
|
}
|
|
26336
26346
|
return [...seen2];
|
|
26337
26347
|
}
|
|
26348
|
+
function ensureLocalGitExclude(cwd, patterns) {
|
|
26349
|
+
try {
|
|
26350
|
+
const gitDir = path54.join(cwd, ".git");
|
|
26351
|
+
if (!fs46.statSync(gitDir).isDirectory()) return;
|
|
26352
|
+
const file = path54.join(gitDir, "info", "exclude");
|
|
26353
|
+
fs46.mkdirSync(path54.dirname(file), { recursive: true });
|
|
26354
|
+
const current2 = fs46.existsSync(file) ? fs46.readFileSync(file, "utf8") : "";
|
|
26355
|
+
const have = new Set(current2.split(/\r?\n/).map((l) => l.trim()));
|
|
26356
|
+
const missing = patterns.filter((p2) => !have.has(p2));
|
|
26357
|
+
if (missing.length === 0) return;
|
|
26358
|
+
const prefix = current2.length > 0 && !current2.endsWith("\n") ? "\n" : "";
|
|
26359
|
+
fs46.appendFileSync(file, `${prefix}# CodeAgent: beads state stays local
|
|
26360
|
+
${missing.join("\n")}
|
|
26361
|
+
`);
|
|
26362
|
+
} catch {
|
|
26363
|
+
}
|
|
26364
|
+
}
|
|
26338
26365
|
|
|
26339
26366
|
// src/beads/watcher.ts
|
|
26340
26367
|
var crypto4 = __toESM(require("crypto"));
|
|
@@ -27620,7 +27647,7 @@ var STALE_STAGING_AGE_MS = CLI_UPDATE_INSTALL_TIMEOUT_MS;
|
|
|
27620
27647
|
function sweepStaleCliStagingDirs(nodeModulesDir, now = Date.now(), deps) {
|
|
27621
27648
|
if (!nodeModulesDir) return 0;
|
|
27622
27649
|
const readdirSync14 = deps?.readdirSync ?? fs51.readdirSync;
|
|
27623
|
-
const
|
|
27650
|
+
const statSync16 = deps?.statSync ?? fs51.statSync;
|
|
27624
27651
|
const rmSync10 = deps?.rmSync ?? fs51.rmSync;
|
|
27625
27652
|
let removed = 0;
|
|
27626
27653
|
let entries;
|
|
@@ -27633,7 +27660,7 @@ function sweepStaleCliStagingDirs(nodeModulesDir, now = Date.now(), deps) {
|
|
|
27633
27660
|
if (!/^\.codeam-cli-/.test(name)) continue;
|
|
27634
27661
|
const full = path59.join(nodeModulesDir, name);
|
|
27635
27662
|
try {
|
|
27636
|
-
const st3 =
|
|
27663
|
+
const st3 = statSync16(full);
|
|
27637
27664
|
if (now - st3.mtimeMs < STALE_STAGING_AGE_MS) continue;
|
|
27638
27665
|
rmSync10(full, { recursive: true, force: true });
|
|
27639
27666
|
removed++;
|
|
@@ -48808,7 +48835,7 @@ async function autoUpgradeBeforeCriticalCommand() {
|
|
|
48808
48835
|
if (process.env.NODE_ENV === "test") return;
|
|
48809
48836
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
48810
48837
|
if (process.env.CI) return;
|
|
48811
|
-
const current2 = true ? "2.75.
|
|
48838
|
+
const current2 = true ? "2.75.38" : null;
|
|
48812
48839
|
if (!current2) return;
|
|
48813
48840
|
const cache = readCache();
|
|
48814
48841
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -48825,7 +48852,7 @@ function checkForUpdates() {
|
|
|
48825
48852
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
48826
48853
|
if (process.env.CI) return;
|
|
48827
48854
|
if (!process.stdout.isTTY) return;
|
|
48828
|
-
const current2 = true ? "2.75.
|
|
48855
|
+
const current2 = true ? "2.75.38" : null;
|
|
48829
48856
|
if (!current2) return;
|
|
48830
48857
|
const cache = readCache();
|
|
48831
48858
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -48848,7 +48875,7 @@ var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
|
|
|
48848
48875
|
var SELF_UPDATE_LS_TIMEOUT_MS = 15e3;
|
|
48849
48876
|
var SUDO_PREFLIGHT_TIMEOUT_MS = 5e3;
|
|
48850
48877
|
function currentCliVersion() {
|
|
48851
|
-
return true ? "2.75.
|
|
48878
|
+
return true ? "2.75.38" : null;
|
|
48852
48879
|
}
|
|
48853
48880
|
async function installedVersion(deps) {
|
|
48854
48881
|
const ls = await deps.run(
|
|
@@ -50816,7 +50843,7 @@ function checkChokidar() {
|
|
|
50816
50843
|
}
|
|
50817
50844
|
async function doctor(args2 = []) {
|
|
50818
50845
|
const json = args2.includes("--json");
|
|
50819
|
-
const cliVersion = true ? "2.75.
|
|
50846
|
+
const cliVersion = true ? "2.75.38" : "0.0.0-dev";
|
|
50820
50847
|
const apiBase2 = resolveApiBaseUrl();
|
|
50821
50848
|
const diagnosticId = (0, import_node_crypto13.randomUUID)();
|
|
50822
50849
|
log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
|
|
@@ -51340,7 +51367,7 @@ async function mcpWarm(argv = [], opts = {}) {
|
|
|
51340
51367
|
// src/commands/version.ts
|
|
51341
51368
|
var import_picocolors15 = __toESM(require("picocolors"));
|
|
51342
51369
|
function version2() {
|
|
51343
|
-
const v = true ? "2.75.
|
|
51370
|
+
const v = true ? "2.75.38" : "unknown";
|
|
51344
51371
|
console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
|
|
51345
51372
|
}
|
|
51346
51373
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeam-cli",
|
|
3
|
-
"version": "2.75.
|
|
3
|
+
"version": "2.75.38",
|
|
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",
|