codeam-cli 2.39.26 → 2.39.28

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,22 @@ 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.39.27] — 2026-06-17
8
+
9
+ ### Added
10
+
11
+ - **cli:** Run the managed house agent on self-hosted host deploys (#330) (#353)
12
+
13
+ ### Chore
14
+
15
+ - **deps:** Bump ACP adapters + resync lockfile (supersedes #324, #325) (#352)
16
+
17
+ ## [2.39.26] — 2026-06-17
18
+
19
+ ### Documentation
20
+
21
+ - **cli:** Document the self-hosted execution plane in the npm README (#351)
22
+
7
23
  ## [2.39.25] — 2026-06-17
8
24
 
9
25
  ### Added
package/dist/index.js CHANGED
@@ -498,7 +498,7 @@ var import_qrcode_terminal = __toESM(require("qrcode-terminal"));
498
498
  // package.json
499
499
  var package_default = {
500
500
  name: "codeam-cli",
501
- version: "2.39.26",
501
+ version: "2.39.28",
502
502
  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.",
503
503
  type: "commonjs",
504
504
  main: "dist/index.js",
@@ -568,8 +568,8 @@ var package_default = {
568
568
  node: ">=20.0.0"
569
569
  },
570
570
  dependencies: {
571
- "@agentclientprotocol/claude-agent-acp": "^0.42.0",
572
- "@agentclientprotocol/codex-acp": "^0.0.45",
571
+ "@agentclientprotocol/claude-agent-acp": "^0.47.0",
572
+ "@agentclientprotocol/codex-acp": "^0.0.46",
573
573
  "@agentclientprotocol/sdk": "^0.25.0",
574
574
  "@clack/prompts": "^1.2.0",
575
575
  chokidar: "^3.6.0",
@@ -5908,7 +5908,7 @@ function readAnonId() {
5908
5908
  }
5909
5909
  function superProperties() {
5910
5910
  return {
5911
- cliVersion: true ? "2.39.26" : "0.0.0-dev",
5911
+ cliVersion: true ? "2.39.28" : "0.0.0-dev",
5912
5912
  nodeVersion: process.version,
5913
5913
  platform: process.platform,
5914
5914
  arch: process.arch,
@@ -15279,6 +15279,11 @@ var startCommandSchema = import_zod.z.object({
15279
15279
  query: import_zod.z.string().max(256).optional(),
15280
15280
  message: import_zod.z.string().max(8e3).optional(),
15281
15281
  paths: import_zod.z.array(import_zod.z.string().max(4096)).optional(),
15282
+ // `show_install_command` — backend pushes the self-hosted install
15283
+ // one-liner the user copies onto their own box. DISPLAY-ONLY: the
15284
+ // CLI prints it to the terminal and never executes it. Bounded to
15285
+ // 8192 chars so a malformed payload can't flood the terminal.
15286
+ command: import_zod.z.string().min(1).max(8192).optional(),
15282
15287
  side: import_zod.z.enum(["ours", "theirs"]).optional(),
15283
15288
  limit: import_zod.z.number().int().min(1).max(500).optional(),
15284
15289
  // search_files options. `query` is the haystack/needle string,
@@ -18450,6 +18455,18 @@ var shutdownSession = async (ctx, cmd) => {
18450
18455
  ctx.relay.stop();
18451
18456
  process.exit(0);
18452
18457
  };
18458
+ var showInstallCommand = async (ctx, cmd, parsed) => {
18459
+ const command2 = parsed.command;
18460
+ if (!command2) {
18461
+ await ctx.relay.sendResult(cmd.id, "failed", { error: "Missing command" });
18462
+ return;
18463
+ }
18464
+ showInfo("CodeAgent \u2014 self-hosted install. Run this on your box:");
18465
+ showInfo("");
18466
+ showInfo(` ${command2}`);
18467
+ showInfo("");
18468
+ await ctx.relay.sendResult(cmd.id, "completed", {});
18469
+ };
18453
18470
  var readFile4 = async (ctx, cmd, parsed) => {
18454
18471
  if (!parsed.path) {
18455
18472
  await ctx.relay.sendResult(cmd.id, "failed", { error: "Missing path" });
@@ -19273,6 +19290,7 @@ var handlers = {
19273
19290
  set_keep_alive: setKeepAlive,
19274
19291
  session_terminated: sessionTerminated,
19275
19292
  shutdown_session: shutdownSession,
19293
+ show_install_command: showInstallCommand,
19276
19294
  read_file: readFile4,
19277
19295
  write_file: writeFile3,
19278
19296
  list_files: listFiles,
@@ -26442,8 +26460,18 @@ function provisionAgentCredentials(publicAgentId, auth, homeDir2 = os34.homedir(
26442
26460
 
26443
26461
  // src/commands/host-agent.ts
26444
26462
  var HEARTBEAT_INTERVAL_MS = 2e4;
26463
+ function isHouseProxy(v) {
26464
+ if (typeof v !== "object" || v === null) return false;
26465
+ const o = v;
26466
+ return typeof o.baseUrl === "string" && typeof o.token === "string" && typeof o.agentKind === "string";
26467
+ }
26445
26468
  function isDeployPayload(p2) {
26446
- return typeof p2.deployId === "string" && typeof p2.repoOrPath === "string" && typeof p2.agentId === "string" && typeof p2.sealedAgentAuth === "string" && typeof p2.autoPairToken === "string";
26469
+ if (typeof p2.deployId !== "string" || typeof p2.repoOrPath !== "string" || typeof p2.agentId !== "string" || typeof p2.autoPairToken !== "string") {
26470
+ return false;
26471
+ }
26472
+ const hasHouse = isHouseProxy(p2.houseProxy);
26473
+ const hasSealed = typeof p2.sealedAgentAuth === "string";
26474
+ return hasHouse || hasSealed;
26447
26475
  }
26448
26476
  function isStopPayload(p2) {
26449
26477
  return typeof p2.sessionId === "string";
@@ -26456,7 +26484,7 @@ var CONTROL_AGENT_META = {
26456
26484
  supportedAuthKinds: ["oauth_token"],
26457
26485
  preferredAuthKind: "oauth_token"
26458
26486
  };
26459
- var defaultSpawner = (env, cwd) => (0, import_node_child_process13.spawn)(process.execPath, [process.argv[1], "pair-auto"], {
26487
+ var defaultSpawner = (env, cwd, args2 = []) => (0, import_node_child_process13.spawn)(process.execPath, [process.argv[1], "pair-auto", ...args2], {
26460
26488
  cwd,
26461
26489
  env: { ...process.env, ...env },
26462
26490
  stdio: "ignore",
@@ -26556,13 +26584,31 @@ var HostAgentSupervisor = class {
26556
26584
  `deploy id=${payload.deployId.slice(0, 8)} agent=${payload.agentId} target=${payload.repoOrPath}`
26557
26585
  );
26558
26586
  const cwd = await prepareWorkspace(payload.repoOrPath, payload.deployId);
26559
- const auth = await this.resolveAgentAuth(this.identity, payload.sealedAgentAuth);
26560
- const credEnv = provisionAgentCredentials(payload.agentId, auth, void 0);
26561
- const childEnv = {
26562
- ...credEnv,
26563
- CODEAM_AUTO_TOKEN: payload.autoPairToken
26564
- };
26565
- const proc = this.spawnChild(childEnv, cwd);
26587
+ let childEnv;
26588
+ let extraArgs = [];
26589
+ if (payload.houseProxy) {
26590
+ const { baseUrl, token, agentKind } = payload.houseProxy;
26591
+ childEnv = {
26592
+ ANTHROPIC_BASE_URL: baseUrl,
26593
+ ANTHROPIC_AUTH_TOKEN: token,
26594
+ ANTHROPIC_MODEL: "MiniMax-M3",
26595
+ ANTHROPIC_DEFAULT_SONNET_MODEL: "MiniMax-M3",
26596
+ ANTHROPIC_DEFAULT_OPUS_MODEL: "MiniMax-M3",
26597
+ ANTHROPIC_DEFAULT_HAIKU_MODEL: "MiniMax-M3",
26598
+ CLAUDE_CODE_AUTO_COMPACT_WINDOW: "512000",
26599
+ API_TIMEOUT_MS: "3000000",
26600
+ CODEAM_AUTO_TOKEN: payload.autoPairToken
26601
+ };
26602
+ extraArgs = [`--agent=${agentKind || "claude"}`];
26603
+ } else {
26604
+ const auth = await this.resolveAgentAuth(this.identity, payload.sealedAgentAuth);
26605
+ const credEnv = provisionAgentCredentials(payload.agentId, auth, void 0);
26606
+ childEnv = {
26607
+ ...credEnv,
26608
+ CODEAM_AUTO_TOKEN: payload.autoPairToken
26609
+ };
26610
+ }
26611
+ const proc = this.spawnChild(childEnv, cwd, extraArgs);
26566
26612
  const child = { deployId: payload.deployId, sessionId: payload.deployId, proc };
26567
26613
  this.children.set(payload.deployId, child);
26568
26614
  proc.once("exit", () => {
@@ -26794,7 +26840,7 @@ function checkChokidar() {
26794
26840
  }
26795
26841
  async function doctor(args2 = []) {
26796
26842
  const json = args2.includes("--json");
26797
- const cliVersion = true ? "2.39.26" : "0.0.0-dev";
26843
+ const cliVersion = true ? "2.39.28" : "0.0.0-dev";
26798
26844
  const apiBase2 = resolveApiBaseUrl();
26799
26845
  const diagnosticId = (0, import_node_crypto8.randomUUID)();
26800
26846
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -26993,7 +27039,7 @@ async function completion(args2) {
26993
27039
  // src/commands/version.ts
26994
27040
  var import_picocolors13 = __toESM(require("picocolors"));
26995
27041
  function version2() {
26996
- const v = true ? "2.39.26" : "unknown";
27042
+ const v = true ? "2.39.28" : "unknown";
26997
27043
  console.log(`${import_picocolors13.default.bold("codeam-cli")} ${import_picocolors13.default.cyan(v)}`);
26998
27044
  }
26999
27045
 
@@ -27279,7 +27325,7 @@ function checkForUpdates() {
27279
27325
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
27280
27326
  if (process.env.CI) return;
27281
27327
  if (!process.stdout.isTTY) return;
27282
- const current = true ? "2.39.26" : null;
27328
+ const current = true ? "2.39.28" : null;
27283
27329
  if (!current) return;
27284
27330
  const cache = readCache();
27285
27331
  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.39.26",
3
+ "version": "2.39.28",
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",
@@ -70,8 +70,8 @@
70
70
  "node": ">=20.0.0"
71
71
  },
72
72
  "dependencies": {
73
- "@agentclientprotocol/claude-agent-acp": "^0.42.0",
74
- "@agentclientprotocol/codex-acp": "^0.0.45",
73
+ "@agentclientprotocol/claude-agent-acp": "^0.47.0",
74
+ "@agentclientprotocol/codex-acp": "^0.0.46",
75
75
  "@agentclientprotocol/sdk": "^0.25.0",
76
76
  "@clack/prompts": "^1.2.0",
77
77
  "chokidar": "^3.6.0",