codeam-cli 2.45.1 → 2.46.1

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,23 @@ 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.46.0] — 2026-06-26
8
+
9
+ ### Fixed
10
+
11
+ - **cli:** Route cursor over native ACP (cursor-agent acp) so CURSOR_API_KEY reaches it
12
+
13
+ ## [2.45.1] — 2026-06-25
14
+
15
+ ### Fixed
16
+
17
+ - **cli:** Map cursor to its own Headroom kind (self-hosted launched Claude)
18
+ - **cli:** Disable Headroom for unsupported agents (gemini ran as Claude)
19
+
20
+ ### Tests
21
+
22
+ - **cli:** Stub gh-tooling network ops in cloneToken deploy test (fix windows flake)
23
+
7
24
  ## [2.45.0] — 2026-06-25
8
25
 
9
26
  ### Added
package/dist/index.js CHANGED
@@ -5397,7 +5397,7 @@ function readAnonId() {
5397
5397
  }
5398
5398
  function superProperties() {
5399
5399
  return {
5400
- cliVersion: true ? "2.45.1" : "0.0.0-dev",
5400
+ cliVersion: true ? "2.46.1" : "0.0.0-dev",
5401
5401
  nodeVersion: process.version,
5402
5402
  platform: process.platform,
5403
5403
  arch: process.arch,
@@ -5578,7 +5578,7 @@ var os4 = __toESM(require("os"));
5578
5578
  // package.json
5579
5579
  var package_default = {
5580
5580
  name: "codeam-cli",
5581
- version: "2.45.1",
5581
+ version: "2.46.1",
5582
5582
  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.",
5583
5583
  type: "commonjs",
5584
5584
  main: "dist/index.js",
@@ -17478,8 +17478,10 @@ var geminiProvisioner = {
17478
17478
  }
17479
17479
  };
17480
17480
  var cursorProvisioner = {
17481
- write(auth, _home) {
17481
+ write(auth, home) {
17482
+ const authJson = path43.join(home, ".config", "cursor", "auth.json");
17482
17483
  if (auth.kind === "api_key") {
17484
+ rmIfExists(authJson);
17483
17485
  return { CURSOR_API_KEY: auth.value };
17484
17486
  }
17485
17487
  const value = auth.value.trim();
@@ -17493,10 +17495,11 @@ var cursorProvisioner = {
17493
17495
  if (typeof parsed !== "object" || parsed === null || typeof parsed["accessToken"] !== "string" || !parsed["accessToken"]) {
17494
17496
  throw new Error("cursor oauth_token: credential blob is missing a non-empty accessToken");
17495
17497
  }
17496
- const accessToken = parsed["accessToken"];
17497
- return { CURSOR_API_KEY: accessToken };
17498
+ writeFile0600(authJson, value);
17499
+ return {};
17498
17500
  }
17499
- return { CURSOR_API_KEY: value };
17501
+ writeFile0600(authJson, JSON.stringify({ accessToken: value }));
17502
+ return {};
17500
17503
  }
17501
17504
  };
17502
17505
  var PROVISIONERS = {
@@ -17922,7 +17925,7 @@ async function autoUpgradeBeforeCriticalCommand() {
17922
17925
  if (process.env.NODE_ENV === "test") return;
17923
17926
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
17924
17927
  if (process.env.CI) return;
17925
- const current = true ? "2.45.1" : null;
17928
+ const current = true ? "2.46.1" : null;
17926
17929
  if (!current) return;
17927
17930
  const cache = readCache();
17928
17931
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -17939,7 +17942,7 @@ function checkForUpdates() {
17939
17942
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
17940
17943
  if (process.env.CI) return;
17941
17944
  if (!process.stdout.isTTY) return;
17942
- const current = true ? "2.45.1" : null;
17945
+ const current = true ? "2.46.1" : null;
17943
17946
  if (!current) return;
17944
17947
  const cache = readCache();
17945
17948
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -18207,12 +18210,11 @@ function agentIdToHeadroomKind(agentId) {
18207
18210
  if (normalized.startsWith("claude")) return "claude";
18208
18211
  if (normalized.startsWith("codex")) return "codex";
18209
18212
  if (normalized.startsWith("copilot")) return "copilot";
18210
- if (normalized.startsWith("cursor")) return "cursor";
18211
18213
  return "claude";
18212
18214
  }
18213
18215
  function isHeadroomSupportedAgent(agentId) {
18214
18216
  const n = (agentId ?? "").toLowerCase().replace(/[_-]/g, "");
18215
- return n.startsWith("claude") || n.startsWith("codex") || n.startsWith("copilot") || n.startsWith("cursor");
18217
+ return n.startsWith("claude") || n.startsWith("codex") || n.startsWith("copilot");
18216
18218
  }
18217
18219
  function headroomConfigPath() {
18218
18220
  return path46.join(os33.homedir(), ".codeam", "headroom-config.json");
@@ -18382,7 +18384,7 @@ var defaultSpawner = (env, cwd, args2 = []) => (0, import_node_child_process14.s
18382
18384
  detached: false
18383
18385
  });
18384
18386
  function currentCliVersion() {
18385
- return true ? "2.45.1" : null;
18387
+ return true ? "2.46.1" : null;
18386
18388
  }
18387
18389
  function runCmd(cmd, args2, timeoutMs) {
18388
18390
  return new Promise((resolve7) => {
@@ -19741,28 +19743,22 @@ var REGISTRY = {
19741
19743
  requiresAgentBinary: "codex"
19742
19744
  };
19743
19745
  },
19744
- // Cursor is intentionally NOT bundled right now. The only published
19745
- // ACP adapter (`cursor-agent-acp@0.1.1`) still depends on the
19746
- // deprecated `@zed-industries/agent-client-protocol` SDK; pulling it
19747
- // back into the install would surface the deprecation warning to
19748
- // every user of `codeam-cli`. The community forks (`cursor-acp`,
19749
- // `fzx-cursor-acp`) use the current `@agentclientprotocol/sdk` but
19750
- // are single-maintainer with no security track record we trust to
19751
- // auto-bundle.
19746
+ // Cursor speaks ACP NATIVELY via `cursor-agent acp` ("Start the Cursor
19747
+ // Agent as an ACP server") — no npm adapter package needed, just the
19748
+ // user-installed `cursor-agent` binary. Same {@link AdapterSpec} shape as
19749
+ // gemini below. This is why we do NOT bundle the deprecated
19750
+ // `cursor-agent-acp@0.1.1` npm adapter (old `@zed-industries/...` SDK).
19752
19751
  //
19753
- // Re-add this entry the moment an `@agentclientprotocol/cursor-acp`
19754
- // ships under the official namespace, or upstream cursor-agent-acp
19755
- // publishes a release that uses the new SDK:
19756
- //
19757
- // cursor: () => {
19758
- // const bin = resolveBin('@agentclientprotocol/cursor-acp', 'cursor-acp');
19759
- // if (!bin) return null;
19760
- // return { command: process.execPath, args: [bin], requiresAgentBinary: 'cursor-agent' };
19761
- // },
19762
- //
19763
- // Until then `getAcpAdapter('cursor')` returns null and the dispatch
19764
- // in start.ts runs cursor over the legacy PTY runtime — same
19765
- // behaviour cursor users had before ACP was added.
19752
+ // Running cursor over ACP (not the legacy PTY runtime) is REQUIRED: the
19753
+ // ACP client spawns the adapter with `env: { ...process.env, ...extraEnv }`
19754
+ // so the provisioned `CURSOR_API_KEY` actually reaches cursor-agent — the
19755
+ // interactive PTY path left cursor unauthenticated. It also gives the typed
19756
+ // streaming (tool calls / subagents) the other ACP agents emit.
19757
+ cursor: () => ({
19758
+ command: "cursor-agent",
19759
+ args: ["acp"],
19760
+ requiresAgentBinary: "cursor-agent"
19761
+ }),
19766
19762
  // Gemini speaks ACP natively via `gemini --acp` — no npm adapter
19767
19763
  // package, just the user-installed `gemini` binary on PATH. Same
19768
19764
  // {@link AdapterSpec} shape; the only difference is `command` is
@@ -29713,7 +29709,7 @@ function checkChokidar() {
29713
29709
  }
29714
29710
  async function doctor(args2 = []) {
29715
29711
  const json = args2.includes("--json");
29716
- const cliVersion = true ? "2.45.1" : "0.0.0-dev";
29712
+ const cliVersion = true ? "2.46.1" : "0.0.0-dev";
29717
29713
  const apiBase2 = resolveApiBaseUrl();
29718
29714
  const diagnosticId = (0, import_node_crypto8.randomUUID)();
29719
29715
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -29912,7 +29908,7 @@ async function completion(args2) {
29912
29908
  // src/commands/version.ts
29913
29909
  var import_picocolors15 = __toESM(require("picocolors"));
29914
29910
  function version2() {
29915
- const v = true ? "2.45.1" : "unknown";
29911
+ const v = true ? "2.46.1" : "unknown";
29916
29912
  console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
29917
29913
  }
29918
29914
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.45.1",
3
+ "version": "2.46.1",
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",