codeam-cli 2.60.24 → 2.60.26

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,16 @@ 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.60.24] — 2026-07-09
8
+
9
+ ### Added
10
+
11
+ - **cli:** Coderabbit reviewer — link (OAuth + API key) + review relay wiring
12
+
13
+ ### Fixed
14
+
15
+ - **cli:** Show OS-correct install hint for kimi/cursor on Windows
16
+
7
17
  ## [2.60.23] — 2026-07-09
8
18
 
9
19
  ### Added
package/dist/index.js CHANGED
@@ -330,10 +330,14 @@ var AGENT_REGISTRY = {
330
330
  displayName: "CodeRabbit",
331
331
  binaryName: "coderabbit",
332
332
  enabled: true,
333
- // Backend registry is authoritative: CodeRabbit links via a real
334
- // API key only (no OAuth flow exists in api-v2).
335
- supportedAuthKinds: ["api_key"],
336
- preferredAuthKind: "api_key",
333
+ // CodeRabbit links via a CLI-driven LOOPBACK OAuth (`coderabbit auth
334
+ // login --agent`): the CLI captures the token and hands it to the vault
335
+ // through `linkFromCli` (method:'oauth'), same as the terminal handoff.
336
+ // `oauth_token` is preferred; a real API key is still accepted as a
337
+ // fallback. There is no backend PKCE provider — the loopback runs on the
338
+ // user's own machine, so linking is always CLI-mediated.
339
+ supportedAuthKinds: ["oauth_token", "api_key"],
340
+ preferredAuthKind: "oauth_token",
337
341
  headroomWrappable: false,
338
342
  // Legacy PTY runtime — no ACP adapter registered.
339
343
  acp: false
@@ -5680,7 +5684,7 @@ function readAnonId() {
5680
5684
  }
5681
5685
  function superProperties() {
5682
5686
  return {
5683
- cliVersion: true ? "2.60.24" : "0.0.0-dev",
5687
+ cliVersion: true ? "2.60.26" : "0.0.0-dev",
5684
5688
  nodeVersion: process.version,
5685
5689
  platform: process.platform,
5686
5690
  arch: process.arch,
@@ -5861,7 +5865,7 @@ var os4 = __toESM(require("os"));
5861
5865
  // package.json
5862
5866
  var package_default = {
5863
5867
  name: "codeam-cli",
5864
- version: "2.60.24",
5868
+ version: "2.60.26",
5865
5869
  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.",
5866
5870
  type: "commonjs",
5867
5871
  main: "dist/index.js",
@@ -6954,7 +6958,7 @@ var CommandRelayService = class {
6954
6958
  // fresh + clear the "CLI update available" banner after a self-update
6955
6959
  // (a codespace that reinstalls @latest reconnects via heartbeat, not
6956
6960
  // pair/reconnect). Older backends ignore the extra field.
6957
- ..."2.60.24" ? { ideVersion: "2.60.24" } : {}
6961
+ ..."2.60.26" ? { ideVersion: "2.60.26" } : {}
6958
6962
  }).then(() => log.trace("relay", `heartbeat ok online=${online}`)).catch((err) => log.trace("relay", `heartbeat failed online=${online}`, err));
6959
6963
  }
6960
6964
  /**
@@ -15637,7 +15641,7 @@ async function configureCoderabbit(input, deps = {}) {
15637
15641
  }
15638
15642
 
15639
15643
  // src/commands/host-agent.ts
15640
- var import_node_child_process22 = require("child_process");
15644
+ var import_node_child_process23 = require("child_process");
15641
15645
  var os35 = __toESM(require("os"));
15642
15646
  var fs41 = __toESM(require("fs"));
15643
15647
  var path43 = __toESM(require("path"));
@@ -16056,6 +16060,7 @@ async function prepareWorkspace(repoOrPath, deployId, cloneToken) {
16056
16060
  var fs35 = __toESM(require("fs"));
16057
16061
  var os31 = __toESM(require("os"));
16058
16062
  var path38 = __toESM(require("path"));
16063
+ var import_node_child_process17 = require("child_process");
16059
16064
  var PUBLIC_TO_INTERNAL_AGENT = {
16060
16065
  claude_code: "claude",
16061
16066
  claude: "claude",
@@ -16169,9 +16174,24 @@ var kimiProvisioner = {
16169
16174
  return { KIMI_API_KEY: auth.value };
16170
16175
  }
16171
16176
  credentialsFiles.forEach((f) => writeFile0600(f, auth.value));
16177
+ provisionKimiConfig(home);
16172
16178
  return {};
16173
16179
  }
16174
16180
  };
16181
+ function provisionKimiConfig(home) {
16182
+ try {
16183
+ const osStrat = createOsStrategy();
16184
+ const binary = osStrat.findInPath("kimi");
16185
+ if (!binary) return;
16186
+ const launch = osStrat.buildLaunch(binary, ["login"]);
16187
+ (0, import_node_child_process17.spawnSync)(launch.cmd, launch.args, {
16188
+ stdio: "ignore",
16189
+ timeout: 6e4,
16190
+ env: { ...process.env, HOME: home, USERPROFILE: home }
16191
+ });
16192
+ } catch {
16193
+ }
16194
+ }
16175
16195
  var coderabbitProvisioner = {
16176
16196
  write(auth, home) {
16177
16197
  const dir = path38.join(home, ".coderabbit");
@@ -16222,7 +16242,7 @@ function provisionAgentCredentials(publicAgentId, auth, homeDir2 = os31.homedir(
16222
16242
  }
16223
16243
 
16224
16244
  // src/commands/host/git-tooling.ts
16225
- var import_node_child_process17 = require("child_process");
16245
+ var import_node_child_process18 = require("child_process");
16226
16246
  var fs36 = __toESM(require("fs"));
16227
16247
  var os32 = __toESM(require("os"));
16228
16248
  var path39 = __toESM(require("path"));
@@ -16336,7 +16356,7 @@ var defaultGitToolingRunner = {
16336
16356
  which(cmd) {
16337
16357
  try {
16338
16358
  const probe = process.platform === "win32" ? "where" : "which";
16339
- (0, import_node_child_process17.execFileSync)(probe, [cmd], { stdio: "ignore" });
16359
+ (0, import_node_child_process18.execFileSync)(probe, [cmd], { stdio: "ignore" });
16340
16360
  return true;
16341
16361
  } catch {
16342
16362
  return false;
@@ -16344,7 +16364,7 @@ var defaultGitToolingRunner = {
16344
16364
  },
16345
16365
  run(cmd, args2, opts = {}) {
16346
16366
  return new Promise((resolve7) => {
16347
- const child = (0, import_node_child_process17.spawn)(cmd, args2, {
16367
+ const child = (0, import_node_child_process18.spawn)(cmd, args2, {
16348
16368
  stdio: [opts.input !== void 0 ? "pipe" : "ignore", "ignore", "pipe"]
16349
16369
  });
16350
16370
  let stderr = "";
@@ -16498,12 +16518,12 @@ var HeadroomStatsReporter = class {
16498
16518
  };
16499
16519
 
16500
16520
  // src/commands/host/os-packages.ts
16501
- var import_node_child_process18 = require("child_process");
16521
+ var import_node_child_process19 = require("child_process");
16502
16522
  var PM_INSTALL_TIMEOUT_MS = 18e4;
16503
16523
  var defaultHeadroomRunner = {
16504
16524
  which(cmd) {
16505
16525
  try {
16506
- (0, import_node_child_process18.execFileSync)("which", [cmd], { stdio: "ignore" });
16526
+ (0, import_node_child_process19.execFileSync)("which", [cmd], { stdio: "ignore" });
16507
16527
  return true;
16508
16528
  } catch {
16509
16529
  return false;
@@ -16512,7 +16532,7 @@ var defaultHeadroomRunner = {
16512
16532
  run(cmd, args2, opts = {}) {
16513
16533
  return new Promise((resolve7) => {
16514
16534
  const spawnEnv = opts.env ?? process.env;
16515
- const child = (0, import_node_child_process18.spawn)(cmd, args2, { stdio: ["ignore", "pipe", "pipe"], env: spawnEnv });
16535
+ const child = (0, import_node_child_process19.spawn)(cmd, args2, { stdio: ["ignore", "pipe", "pipe"], env: spawnEnv });
16516
16536
  let stderrBuf = "";
16517
16537
  let stdoutBuf = "";
16518
16538
  let settled = false;
@@ -17019,14 +17039,14 @@ async function setupHeadroomForSelfHosted(agent, runner = defaultHeadroomRunner,
17019
17039
  }
17020
17040
 
17021
17041
  // src/commands/host/self-update.ts
17022
- var import_node_child_process20 = require("child_process");
17042
+ var import_node_child_process21 = require("child_process");
17023
17043
 
17024
17044
  // src/lib/updateNotifier.ts
17025
17045
  var fs39 = __toESM(require("fs"));
17026
17046
  var os34 = __toESM(require("os"));
17027
17047
  var path42 = __toESM(require("path"));
17028
17048
  var https6 = __toESM(require("https"));
17029
- var import_node_child_process19 = require("child_process");
17049
+ var import_node_child_process20 = require("child_process");
17030
17050
  var import_picocolors3 = __toESM(require("picocolors"));
17031
17051
  var PKG_NAME = "codeam-cli";
17032
17052
  var REGISTRY_URL = `https://registry.npmjs.org/${PKG_NAME}/latest`;
@@ -17120,7 +17140,7 @@ function notifyIfStale(currentVersion, latest) {
17120
17140
  }
17121
17141
  function isLinkedInstall() {
17122
17142
  try {
17123
- const root = (0, import_node_child_process19.execSync)("npm root -g", {
17143
+ const root = (0, import_node_child_process20.execSync)("npm root -g", {
17124
17144
  encoding: "utf8",
17125
17145
  stdio: ["ignore", "pipe", "ignore"],
17126
17146
  timeout: 2e3
@@ -17148,7 +17168,7 @@ function maybeAutoUpdate(currentVersion, latest) {
17148
17168
 
17149
17169
  `
17150
17170
  );
17151
- const install = (0, import_node_child_process19.spawnSync)("npm", ["install", "-g", `${PKG_NAME}@latest`], {
17171
+ const install = (0, import_node_child_process20.spawnSync)("npm", ["install", "-g", `${PKG_NAME}@latest`], {
17152
17172
  stdio: "inherit",
17153
17173
  env: process.env
17154
17174
  });
@@ -17169,7 +17189,7 @@ function maybeAutoUpdate(currentVersion, latest) {
17169
17189
  process.stderr.write(` ${import_picocolors3.default.green("\u2713")} Updated. Resuming session...
17170
17190
 
17171
17191
  `);
17172
- const child = (0, import_node_child_process19.spawnSync)("codeam", process.argv.slice(2), {
17192
+ const child = (0, import_node_child_process20.spawnSync)("codeam", process.argv.slice(2), {
17173
17193
  stdio: "inherit",
17174
17194
  env: process.env
17175
17195
  });
@@ -17179,7 +17199,7 @@ async function autoUpgradeBeforeCriticalCommand() {
17179
17199
  if (process.env.NODE_ENV === "test") return;
17180
17200
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
17181
17201
  if (process.env.CI) return;
17182
- const current = true ? "2.60.24" : null;
17202
+ const current = true ? "2.60.26" : null;
17183
17203
  if (!current) return;
17184
17204
  const cache = readCache();
17185
17205
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -17196,7 +17216,7 @@ function checkForUpdates() {
17196
17216
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
17197
17217
  if (process.env.CI) return;
17198
17218
  if (!process.stdout.isTTY) return;
17199
- const current = true ? "2.60.24" : null;
17219
+ const current = true ? "2.60.26" : null;
17200
17220
  if (!current) return;
17201
17221
  const cache = readCache();
17202
17222
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -17216,11 +17236,11 @@ var SELF_UPDATE_INTERVAL_MS = 60 * 60 * 1e3;
17216
17236
  var SELF_UPDATE_VIEW_TIMEOUT_MS = 3e4;
17217
17237
  var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
17218
17238
  function currentCliVersion() {
17219
- return true ? "2.60.24" : null;
17239
+ return true ? "2.60.26" : null;
17220
17240
  }
17221
17241
  function runCmd(cmd, args2, timeoutMs) {
17222
17242
  return new Promise((resolve7) => {
17223
- (0, import_node_child_process20.execFile)(cmd, args2, { timeout: timeoutMs }, (err, stdout, stderr) => {
17243
+ (0, import_node_child_process21.execFile)(cmd, args2, { timeout: timeoutMs }, (err, stdout, stderr) => {
17224
17244
  const code = err && typeof err.code === "number" ? err.code : err ? null : 0;
17225
17245
  resolve7({ code, stdout: stdout ?? "", stderr: stderr ?? "" });
17226
17246
  });
@@ -17282,11 +17302,11 @@ async function runSelfUpdate() {
17282
17302
  }
17283
17303
 
17284
17304
  // src/commands/host/teardown.ts
17285
- var import_node_child_process21 = require("child_process");
17305
+ var import_node_child_process22 = require("child_process");
17286
17306
  var fs40 = __toESM(require("fs"));
17287
17307
  var defaultDisableService = () => {
17288
17308
  try {
17289
- (0, import_node_child_process21.execFileSync)("systemctl", ["disable", "--now", "codeam-host-agent"], { stdio: "ignore" });
17309
+ (0, import_node_child_process22.execFileSync)("systemctl", ["disable", "--now", "codeam-host-agent"], { stdio: "ignore" });
17290
17310
  } catch {
17291
17311
  }
17292
17312
  };
@@ -17294,7 +17314,7 @@ var defaultTeardownHeadroom = () => {
17294
17314
  try {
17295
17315
  const kind = JSON.parse(fs40.readFileSync(headroomConfigPath(), "utf8")).agent;
17296
17316
  if (kind) {
17297
- (0, import_node_child_process21.execFileSync)("headroom", ["unwrap", kind], { stdio: "ignore", timeout: 15e3 });
17317
+ (0, import_node_child_process22.execFileSync)("headroom", ["unwrap", kind], { stdio: "ignore", timeout: 15e3 });
17298
17318
  }
17299
17319
  } catch {
17300
17320
  }
@@ -17452,7 +17472,7 @@ var CONTROL_AGENT_META = {
17452
17472
  headroomWrappable: false,
17453
17473
  acp: false
17454
17474
  };
17455
- var defaultSpawner = (env, cwd, args2 = []) => (0, import_node_child_process22.spawn)(process.execPath, [process.argv[1], "pair-auto", ...args2], {
17475
+ var defaultSpawner = (env, cwd, args2 = []) => (0, import_node_child_process23.spawn)(process.execPath, [process.argv[1], "pair-auto", ...args2], {
17456
17476
  cwd,
17457
17477
  env: { ...process.env, ...env },
17458
17478
  stdio: ["ignore", "pipe", "pipe"],
@@ -17932,7 +17952,7 @@ var HostAgentSupervisor = class {
17932
17952
  runAgentInstall(script) {
17933
17953
  return new Promise((resolve7) => {
17934
17954
  const home = process.env.HOME || os35.homedir();
17935
- const child = (0, import_node_child_process22.spawn)("sh", ["-c", script], {
17955
+ const child = (0, import_node_child_process23.spawn)("sh", ["-c", script], {
17936
17956
  env: { ...process.env, HOME: home },
17937
17957
  stdio: ["ignore", "pipe", "pipe"]
17938
17958
  });
@@ -18240,11 +18260,11 @@ function makeRealApplyBudgetDeps() {
18240
18260
  var import_child_process14 = require("child_process");
18241
18261
  var import_fs = require("fs");
18242
18262
  var import_promises = __toESM(require("fs/promises"));
18243
- var import_os8 = __toESM(require("os"));
18263
+ var import_os9 = __toESM(require("os"));
18244
18264
  var import_path4 = __toESM(require("path"));
18245
18265
  var import_promises2 = require("stream/promises");
18246
18266
  var import_which = __toESM(require("which"));
18247
- var CACHED_BINARY = import_path4.default.join(import_os8.default.homedir(), ".codeam", "bin", "cloudflared");
18267
+ var CACHED_BINARY = import_path4.default.join(import_os9.default.homedir(), ".codeam", "bin", "cloudflared");
18248
18268
  async function resolveCloudflared(opts = {}) {
18249
18269
  try {
18250
18270
  return await (0, import_which.default)("cloudflared");
@@ -18344,7 +18364,7 @@ function decodeTunnelToken(token) {
18344
18364
  }
18345
18365
  async function spawnNamedTunnel(bin, token, port) {
18346
18366
  const creds = decodeTunnelToken(token);
18347
- const credDir = import_path4.default.join(import_os8.default.homedir(), ".codeam");
18367
+ const credDir = import_path4.default.join(import_os9.default.homedir(), ".codeam");
18348
18368
  await import_promises.default.mkdir(credDir, { recursive: true });
18349
18369
  const credFile = import_path4.default.join(credDir, `tunnel-${creds.TunnelID}.json`);
18350
18370
  await import_promises.default.writeFile(credFile, JSON.stringify(creds), { mode: 384 });
@@ -22396,7 +22416,7 @@ async function pairAuto(args2) {
22396
22416
  }
22397
22417
 
22398
22418
  // src/services/headroom/wrap-launch.ts
22399
- var import_node_child_process23 = require("child_process");
22419
+ var import_node_child_process24 = require("child_process");
22400
22420
  function wrapWithHeadroom(launch, opts) {
22401
22421
  if (!opts.enabled || !opts.headroomPresent) return launch;
22402
22422
  return {
@@ -22409,7 +22429,7 @@ var _present;
22409
22429
  function headroomPresent() {
22410
22430
  if (_present !== void 0) return Promise.resolve(_present);
22411
22431
  return new Promise((resolve7) => {
22412
- (0, import_node_child_process23.execFile)("headroom", ["--version"], (err) => {
22432
+ (0, import_node_child_process24.execFile)("headroom", ["--version"], (err) => {
22413
22433
  _present = !err;
22414
22434
  resolve7(_present);
22415
22435
  });
@@ -22763,7 +22783,7 @@ var path59 = __toESM(require("path"));
22763
22783
 
22764
22784
  // src/agents/acp/agent-binary.ts
22765
22785
  var import_fs4 = __toESM(require("fs"));
22766
- var import_os10 = __toESM(require("os"));
22786
+ var import_os11 = __toESM(require("os"));
22767
22787
  var import_path8 = __toESM(require("path"));
22768
22788
  var import_child_process25 = require("child_process");
22769
22789
  function currentPlatformKey() {
@@ -22859,7 +22879,7 @@ function resolveCursorAgentBinary(deps = {}) {
22859
22879
  const exe = import_path8.default.win32.join(localAppData, "cursor-agent", "cursor-agent.exe");
22860
22880
  return existsSync26(exe) ? exe : null;
22861
22881
  }
22862
- const home = deps.homedir ?? import_os10.default.homedir();
22882
+ const home = deps.homedir ?? import_os11.default.homedir();
22863
22883
  const unix = import_path8.default.posix.join(home, ".local", "bin", "cursor-agent");
22864
22884
  return existsSync26(unix) ? unix : null;
22865
22885
  }
@@ -22933,7 +22953,7 @@ async function waitForAdapterModuleGraph(command2, args2, opts = {}) {
22933
22953
  }
22934
22954
 
22935
22955
  // src/agents/kimi/installer.ts
22936
- var import_node_child_process24 = require("child_process");
22956
+ var import_node_child_process25 = require("child_process");
22937
22957
  var import_node_os6 = require("os");
22938
22958
  var import_node_path6 = require("path");
22939
22959
  var INSTALL_URL2 = "https://code.kimi.com/kimi-code/install.sh";
@@ -22941,7 +22961,7 @@ function kimiBinDir() {
22941
22961
  return (0, import_node_path6.join)(process.env.KIMI_CODE_HOME || (0, import_node_path6.join)((0, import_node_os6.homedir)(), ".kimi-code"), "bin");
22942
22962
  }
22943
22963
  function kimiRuns() {
22944
- const r = (0, import_node_child_process24.spawnSync)("kimi", ["--version"], { stdio: "ignore", timeout: 15e3 });
22964
+ const r = (0, import_node_child_process25.spawnSync)("kimi", ["--version"], { stdio: "ignore", timeout: 15e3 });
22945
22965
  return !r.error && r.status === 0;
22946
22966
  }
22947
22967
  function augmentPath2() {
@@ -22951,7 +22971,7 @@ function augmentPath2() {
22951
22971
  }
22952
22972
  async function runInstaller2() {
22953
22973
  return new Promise((resolve7) => {
22954
- const proc = (0, import_node_child_process24.spawn)("sh", ["-c", `curl -fsSL ${INSTALL_URL2} | bash`], { stdio: "inherit" });
22974
+ const proc = (0, import_node_child_process25.spawn)("sh", ["-c", `curl -fsSL ${INSTALL_URL2} | bash`], { stdio: "inherit" });
22955
22975
  proc.on("close", (code) => resolve7(code === 0));
22956
22976
  proc.on("error", () => resolve7(false));
22957
22977
  });
@@ -23688,7 +23708,7 @@ var HistoryService = class _HistoryService {
23688
23708
  };
23689
23709
 
23690
23710
  // src/agents/acp/client.ts
23691
- var import_node_child_process25 = require("child_process");
23711
+ var import_node_child_process26 = require("child_process");
23692
23712
  var fs57 = __toESM(require("fs/promises"));
23693
23713
  var fsSync = __toESM(require("fs"));
23694
23714
  var os46 = __toESM(require("os"));
@@ -26292,7 +26312,7 @@ var AcpClient = class {
26292
26312
  "acpClient",
26293
26313
  `spawn cmd=${adapter.command} args=[${adapter.args.join(",")}] cwd=${cwd}`
26294
26314
  );
26295
- const child = (0, import_node_child_process25.spawn)(adapter.command, adapter.args, {
26315
+ const child = (0, import_node_child_process26.spawn)(adapter.command, adapter.args, {
26296
26316
  cwd,
26297
26317
  // extraEnv (e.g. CLAUDE_CODE_DISABLE_1M_CONTEXT=1 on an on-demand
26298
26318
  // re-spawn) layers over process.env; PATH stays last so the augmented
@@ -27676,7 +27696,7 @@ async function discoverRepos(workingDir, maxDepth = 4) {
27676
27696
  // src/services/turn-files/files-outbox.ts
27677
27697
  var fs60 = __toESM(require("fs/promises"));
27678
27698
  var path64 = __toESM(require("path"));
27679
- var import_os11 = require("os");
27699
+ var import_os12 = require("os");
27680
27700
  var HOME_OUTBOX_DIR = ".codeam/outbox";
27681
27701
  var MAX_AGE_MS = 24 * 60 * 60 * 1e3;
27682
27702
  var BACKOFF_STEPS_MS = [
@@ -27843,7 +27863,7 @@ function applyJitter(ms) {
27843
27863
  return Math.round(ms * factor);
27844
27864
  }
27845
27865
  function homeDir() {
27846
- return process.env.HOME ?? process.env.USERPROFILE ?? (0, import_os11.tmpdir)();
27866
+ return process.env.HOME ?? process.env.USERPROFILE ?? (0, import_os12.tmpdir)();
27847
27867
  }
27848
27868
 
27849
27869
  // src/services/turn-files/turn-file-aggregator.ts
@@ -34167,7 +34187,7 @@ function checkChokidar() {
34167
34187
  }
34168
34188
  async function doctor(args2 = []) {
34169
34189
  const json = args2.includes("--json");
34170
- const cliVersion = true ? "2.60.24" : "0.0.0-dev";
34190
+ const cliVersion = true ? "2.60.26" : "0.0.0-dev";
34171
34191
  const apiBase2 = resolveApiBaseUrl();
34172
34192
  const diagnosticId = (0, import_node_crypto12.randomUUID)();
34173
34193
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -34366,7 +34386,7 @@ async function completion(args2) {
34366
34386
  // src/commands/version.ts
34367
34387
  var import_picocolors15 = __toESM(require("picocolors"));
34368
34388
  function version2() {
34369
- const v = true ? "2.60.24" : "unknown";
34389
+ const v = true ? "2.60.26" : "unknown";
34370
34390
  console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
34371
34391
  }
34372
34392
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.60.24",
3
+ "version": "2.60.26",
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",