codeam-cli 2.27.13 → 2.27.15

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,18 @@ 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.27.13] — 2026-06-06
8
+
9
+ ### Added
10
+
11
+ - **cli:** Flip ACP default ON for agents with adapter
12
+
13
+ ## [2.27.12] — 2026-06-06
14
+
15
+ ### Added
16
+
17
+ - **cli:** ACP runner full command coverage + history + rich-bubble feed
18
+
7
19
  ## [2.27.11] — 2026-06-06
8
20
 
9
21
  ### Fixed
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.27.13",
501
+ version: "2.27.15",
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",
@@ -5873,7 +5873,7 @@ function readAnonId() {
5873
5873
  }
5874
5874
  function superProperties() {
5875
5875
  return {
5876
- cliVersion: true ? "2.27.13" : "0.0.0-dev",
5876
+ cliVersion: true ? "2.27.15" : "0.0.0-dev",
5877
5877
  nodeVersion: process.version,
5878
5878
  platform: process.platform,
5879
5879
  arch: process.arch,
@@ -14549,8 +14549,11 @@ var AcpClient = class {
14549
14549
  sessionId = null;
14550
14550
  /**
14551
14551
  * Spawn the adapter + perform the initial handshake (initialize
14552
- * → newSession). Returns the ACP-assigned sessionId so the
14553
- * caller can route subsequent prompts.
14552
+ * → newSession). Returns the ACP-assigned sessionId so the caller
14553
+ * can route subsequent prompts, plus optional model + tier that
14554
+ * some adapters (codex-acp today) surface on the newSession
14555
+ * response — used by the runner to enrich the welcome card
14556
+ * subtitle without an extra round-trip.
14554
14557
  */
14555
14558
  async start() {
14556
14559
  if (this.child) throw new Error("AcpClient already started");
@@ -14610,7 +14613,12 @@ var AcpClient = class {
14610
14613
  "acpClient",
14611
14614
  `newSession \u2190 ok sessionId=${newSession.sessionId.slice(0, 8)} model=${newSessionMeta.currentModelId ?? "?"} tier=${newSessionMeta.currentServiceTier ?? "?"}`
14612
14615
  );
14613
- return { sessionId: newSession.sessionId, initialize };
14616
+ return {
14617
+ sessionId: newSession.sessionId,
14618
+ initialize,
14619
+ model: newSessionMeta.currentModelId,
14620
+ tier: newSessionMeta.currentServiceTier
14621
+ };
14614
14622
  }
14615
14623
  /**
14616
14624
  * Send a user prompt to the active session. Returns the
@@ -18218,12 +18226,34 @@ async function runAcpSession(opts) {
18218
18226
  }
18219
18227
  });
18220
18228
  showInfo(`Starting ${opts.agent} via ACP adapter (${opts.adapter.requiresAgentBinary})\u2026`);
18221
- const { sessionId: acpSessionId, initialize } = await client2.start();
18229
+ const {
18230
+ sessionId: acpSessionId,
18231
+ initialize,
18232
+ model: handshakeModel,
18233
+ tier: handshakeTier
18234
+ } = await client2.start();
18222
18235
  log.trace(
18223
18236
  "acpRunner",
18224
18237
  `adapter handshake ok protocolVersion=${initialize.protocolVersion} sessionId=${acpSessionId.slice(0, 8)}`
18225
18238
  );
18226
18239
  showSuccess(`${opts.agent} online (ACP) \u2014 awaiting prompts from mobile.`);
18240
+ void publisher.publishOutput({
18241
+ type: "agent_banner",
18242
+ agentId: opts.agent,
18243
+ // Match the legacy "Welcome back!" copy the Claude PTY banner
18244
+ // detector used as title fallback — keeps the chat surface
18245
+ // visually identical to the PTY path on first connect.
18246
+ title: "Welcome back!",
18247
+ // Subtitle = "<display name> · <model>" when we know the model
18248
+ // (codex-acp returns `currentModelId` on newSession; claude /
18249
+ // gemini adapters omit it). Falls back to `<display name>`
18250
+ // alone so the card never renders with a dangling separator.
18251
+ subtitle: buildBannerSubtitle(opts.agent, acpSessionId, handshakeModel, handshakeTier),
18252
+ // The cwd — same field the legacy banner pulled from Claude's
18253
+ // footer line under the ASCII art.
18254
+ path: opts.cwd,
18255
+ done: true
18256
+ });
18227
18257
  const runtime = createInteractiveAgentStrategy(opts.agent, createOsStrategy());
18228
18258
  const models = await runtime.listModels();
18229
18259
  const history = new AcpHistory(publisher, { agent: opts.agent, acpSessionId });
@@ -18496,6 +18526,13 @@ function describeError(err) {
18496
18526
  if (err instanceof Error) return err.message;
18497
18527
  return String(err);
18498
18528
  }
18529
+ function buildBannerSubtitle(agentId, acpSessionId, model, tier) {
18530
+ const meta = AGENT_REGISTRY[agentId];
18531
+ const displayName = meta?.displayName ?? agentId;
18532
+ if (model && tier) return `${displayName} \xB7 ${model} \xB7 ${tier}`;
18533
+ if (model) return `${displayName} \xB7 ${model}`;
18534
+ return `${displayName} \xB7 ACP \xB7 ${acpSessionId.slice(0, 8)}`;
18535
+ }
18499
18536
  function buildLegacyContextForACP(opts, relay, runtime) {
18500
18537
  return {
18501
18538
  outputSvc: null,
@@ -24402,7 +24439,7 @@ function checkChokidar() {
24402
24439
  }
24403
24440
  async function doctor(args2 = []) {
24404
24441
  const json = args2.includes("--json");
24405
- const cliVersion = true ? "2.27.13" : "0.0.0-dev";
24442
+ const cliVersion = true ? "2.27.15" : "0.0.0-dev";
24406
24443
  const apiBase = resolveApiBaseUrl();
24407
24444
  const diagnosticId = (0, import_node_crypto8.randomUUID)();
24408
24445
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -24601,7 +24638,7 @@ async function completion(args2) {
24601
24638
  // src/commands/version.ts
24602
24639
  var import_picocolors13 = __toESM(require("picocolors"));
24603
24640
  function version2() {
24604
- const v = true ? "2.27.13" : "unknown";
24641
+ const v = true ? "2.27.15" : "unknown";
24605
24642
  console.log(`${import_picocolors13.default.bold("codeam-cli")} ${import_picocolors13.default.cyan(v)}`);
24606
24643
  }
24607
24644
 
@@ -24829,7 +24866,7 @@ function checkForUpdates() {
24829
24866
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
24830
24867
  if (process.env.CI) return;
24831
24868
  if (!process.stdout.isTTY) return;
24832
- const current = true ? "2.27.13" : null;
24869
+ const current = true ? "2.27.15" : null;
24833
24870
  if (!current) return;
24834
24871
  const cache = readCache();
24835
24872
  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.27.13",
3
+ "version": "2.27.15",
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",