codeam-cli 2.75.17 → 2.75.19

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 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.75.18] — 2026-09-25
8
+
9
+ ### Fixed
10
+
11
+ - **cli:** Skip bd bootstrap on an empty remote; agent must not repair beads
12
+ - **cli:** Beads mint must not write agent files or git hooks into the repo
13
+
14
+ ## [2.75.17] — 2026-09-25
15
+
16
+ ### Fixed
17
+
18
+ - **cli:** Host-agent respawns a session child that crashed after it was up
19
+
7
20
  ## [2.75.16] — 2026-09-25
8
21
 
9
22
  ### Fixed
package/dist/index.js CHANGED
@@ -10509,7 +10509,7 @@ function readAnonId() {
10509
10509
  }
10510
10510
  function superProperties() {
10511
10511
  return {
10512
- cliVersion: true ? "2.75.17" : "0.0.0-dev",
10512
+ cliVersion: true ? "2.75.19" : "0.0.0-dev",
10513
10513
  nodeVersion: process.version,
10514
10514
  platform: process.platform,
10515
10515
  arch: process.arch,
@@ -10751,7 +10751,7 @@ var http = __toESM(require("http"));
10751
10751
  // package.json
10752
10752
  var package_default = {
10753
10753
  name: "codeam-cli",
10754
- version: "2.75.17",
10754
+ version: "2.75.19",
10755
10755
  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.",
10756
10756
  type: "commonjs",
10757
10757
  main: "dist/index.js",
@@ -12081,7 +12081,7 @@ var CommandRelayService = class _CommandRelayService {
12081
12081
  // fresh + clear the "CLI update available" banner after a self-update
12082
12082
  // (a codespace that reinstalls @latest reconnects via heartbeat, not
12083
12083
  // pair/reconnect). Older backends ignore the extra field.
12084
- ..."2.75.17" ? { ideVersion: "2.75.17" } : {}
12084
+ ..."2.75.19" ? { ideVersion: "2.75.19" } : {}
12085
12085
  };
12086
12086
  try {
12087
12087
  const res = await _postJson(`${API_BASE2}/api/plugin/heartbeat`, body);
@@ -25634,8 +25634,25 @@ var _provisionSeam = {
25634
25634
  /** GAP 1 — symlink the resolved bd onto PATH for the agent's own shell. */
25635
25635
  linkBdOntoPath,
25636
25636
  /** Silence bd's `beads.role not configured` warning. */
25637
- setGitBeadsRole
25637
+ setGitBeadsRole,
25638
+ /** Does the project's git remote carry Dolt data (`refs/dolt/data`)? */
25639
+ remoteHasDoltData
25638
25640
  };
25641
+ function remoteHasDoltData(cwd) {
25642
+ try {
25643
+ const out2 = (0, import_child_process24.execFileSync)("git", ["ls-remote", "origin", "refs/dolt/data"], {
25644
+ cwd,
25645
+ encoding: "utf8",
25646
+ timeout: 1e4,
25647
+ stdio: ["ignore", "pipe", "ignore"],
25648
+ // Never block on a credential prompt in a headless box.
25649
+ env: { ...process.env, GIT_TERMINAL_PROMPT: "0" }
25650
+ });
25651
+ return out2.trim().length > 0;
25652
+ } catch {
25653
+ return null;
25654
+ }
25655
+ }
25639
25656
  var _linkSeam = {
25640
25657
  platform: () => process.platform,
25641
25658
  homedir: () => os33.homedir(),
@@ -25816,12 +25833,16 @@ async function provisionBeads(opts = {}) {
25816
25833
  "beads",
25817
25834
  `prefix DB '${prefix}' not reachable on shared server \u2014 self-healing via bd bootstrap`
25818
25835
  );
25819
- const boot = await bd.run(["bootstrap", "--non-interactive"]);
25820
- if (boot.code !== 0) {
25821
- log.warn(
25822
- "beads",
25823
- `bd bootstrap failed (code=${boot.code}): ${boot.stderr.slice(0, 200)} \u2014 prefix DB may be absent`
25824
- );
25836
+ if (_provisionSeam.remoteHasDoltData(opts.cwd) === false) {
25837
+ log.info("beads", "remote has no Dolt data \u2014 skipping bd bootstrap");
25838
+ } else {
25839
+ const boot = await bd.run(["bootstrap", "--non-interactive"]);
25840
+ if (boot.code !== 0) {
25841
+ log.warn(
25842
+ "beads",
25843
+ `bd bootstrap failed (code=${boot.code}): ${boot.stderr.slice(0, 200)} \u2014 prefix DB may be absent`
25844
+ );
25845
+ }
25825
25846
  }
25826
25847
  if (!await projectDbReachable(bd)) {
25827
25848
  log.info(
@@ -25836,6 +25857,12 @@ async function provisionBeads(opts = {}) {
25836
25857
  "--reinit-local",
25837
25858
  "--discard-remote",
25838
25859
  `--destroy-token=DESTROY-${prefix}`,
25860
+ // Same as Step 3: without these the mint wrote AGENTS.md/CLAUDE.md,
25861
+ // .codex/.cursor setup and set core.hooksPath to .beads/hooks in the
25862
+ // USER's repo — whose LFS-wrapped pre-push then blocked every
25863
+ // `git push` on a box without git-lfs (fleet box 2026-09-24).
25864
+ "--skip-agents",
25865
+ "--skip-hooks",
25839
25866
  "--non-interactive"
25840
25867
  ]);
25841
25868
  if (mint.code !== 0) {
@@ -42815,6 +42842,11 @@ This environment uses **bd (beads)** for issue/task tracking and persistent memo
42815
42842
  - Use \`bd remember "..."\` for persistent knowledge \u2014 do NOT use MEMORY.md files.
42816
42843
  - Run \`bd\` commands through your shell tool and summarize the outcome. Never
42817
42844
  paste \`bd\` commands or their raw output into your reply.
42845
+ - CodeAgent installs, starts and repairs beads \u2014 not you. If a \`bd\` command
42846
+ fails, carry on with the user's task without task tracking and try \`bd\`
42847
+ again later. Never run \`bd init\`, \`bd bootstrap\`, \`bd doctor --fix\` or
42848
+ \`dolt\` commands yourself: they race the provisioning and can wipe the
42849
+ project's issues.
42818
42850
  ${BEADS_HINT_MARKER}`;
42819
42851
  function ensureBeadsWorkflowHint(homeDir2 = os53.homedir()) {
42820
42852
  try {
@@ -47315,13 +47347,45 @@ async function ensureGhAuth(runner, ghCmd, token) {
47315
47347
  });
47316
47348
  if (login.code === 0) {
47317
47349
  log.info("host-agent", "gh authenticated with the linked GitHub token");
47350
+ } else if (/missing required scope/i.test(login.stderr) && writeGhHostsToken(token)) {
47351
+ log.info("host-agent", "gh authenticated via hosts.yml (token lacks read:org)");
47318
47352
  } else {
47319
- log.warn("host-agent", `gh auth login failed (code=${String(login.code)}) \u2014 gh unauthenticated`);
47353
+ log.warn(
47354
+ "host-agent",
47355
+ `gh auth login failed (code=${String(login.code)}): ${login.stderr.trim().slice(0, 200)} \u2014 gh unauthenticated`
47356
+ );
47320
47357
  }
47321
47358
  } catch (e) {
47322
47359
  log.warn("host-agent", `gh auth errored: ${e instanceof Error ? e.message : String(e)}`);
47323
47360
  }
47324
47361
  }
47362
+ function ghConfigDir() {
47363
+ if (process.env.GH_CONFIG_DIR) return process.env.GH_CONFIG_DIR;
47364
+ if (process.env.XDG_CONFIG_HOME) return path88.join(process.env.XDG_CONFIG_HOME, "gh");
47365
+ if (process.platform === "win32" && process.env.APPDATA) {
47366
+ return path88.join(process.env.APPDATA, "GitHub CLI");
47367
+ }
47368
+ return path88.join(os60.homedir(), ".config", "gh");
47369
+ }
47370
+ function writeGhHostsToken(token) {
47371
+ try {
47372
+ const dir = ghConfigDir();
47373
+ const file = path88.join(dir, "hosts.yml");
47374
+ if (fs75.existsSync(file)) return false;
47375
+ fs75.mkdirSync(dir, { recursive: true, mode: 448 });
47376
+ fs75.writeFileSync(
47377
+ file,
47378
+ `github.com:
47379
+ oauth_token: ${token}
47380
+ git_protocol: https
47381
+ `,
47382
+ { mode: 384, flag: "wx" }
47383
+ );
47384
+ return true;
47385
+ } catch {
47386
+ return false;
47387
+ }
47388
+ }
47325
47389
  var FALLBACK_GLAB_VERSION = "1.54.0";
47326
47390
  var GLAB_RELEASE_API = "https://gitlab.com/api/v4/projects/gitlab-org%2Fcli/releases/permalink/latest";
47327
47391
  async function resolveLatestGlabVersion() {
@@ -47616,7 +47680,7 @@ async function autoUpgradeBeforeCriticalCommand() {
47616
47680
  if (process.env.NODE_ENV === "test") return;
47617
47681
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
47618
47682
  if (process.env.CI) return;
47619
- const current2 = true ? "2.75.17" : null;
47683
+ const current2 = true ? "2.75.19" : null;
47620
47684
  if (!current2) return;
47621
47685
  const cache = readCache();
47622
47686
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -47633,7 +47697,7 @@ function checkForUpdates() {
47633
47697
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
47634
47698
  if (process.env.CI) return;
47635
47699
  if (!process.stdout.isTTY) return;
47636
- const current2 = true ? "2.75.17" : null;
47700
+ const current2 = true ? "2.75.19" : null;
47637
47701
  if (!current2) return;
47638
47702
  const cache = readCache();
47639
47703
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -47656,7 +47720,7 @@ var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
47656
47720
  var SELF_UPDATE_LS_TIMEOUT_MS = 15e3;
47657
47721
  var SUDO_PREFLIGHT_TIMEOUT_MS = 5e3;
47658
47722
  function currentCliVersion() {
47659
- return true ? "2.75.17" : null;
47723
+ return true ? "2.75.19" : null;
47660
47724
  }
47661
47725
  async function installedVersion(deps) {
47662
47726
  const ls = await deps.run(
@@ -49542,7 +49606,7 @@ function checkChokidar() {
49542
49606
  }
49543
49607
  async function doctor(args2 = []) {
49544
49608
  const json = args2.includes("--json");
49545
- const cliVersion = true ? "2.75.17" : "0.0.0-dev";
49609
+ const cliVersion = true ? "2.75.19" : "0.0.0-dev";
49546
49610
  const apiBase2 = resolveApiBaseUrl();
49547
49611
  const diagnosticId = (0, import_node_crypto12.randomUUID)();
49548
49612
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -50066,7 +50130,7 @@ async function mcpWarm(argv = [], opts = {}) {
50066
50130
  // src/commands/version.ts
50067
50131
  var import_picocolors15 = __toESM(require("picocolors"));
50068
50132
  function version2() {
50069
- const v = true ? "2.75.17" : "unknown";
50133
+ const v = true ? "2.75.19" : "unknown";
50070
50134
  console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
50071
50135
  }
50072
50136
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.75.17",
3
+ "version": "2.75.19",
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",