codeam-cli 2.37.0 → 2.37.2

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.37.1] — 2026-06-11
8
+
9
+ ### Fixed
10
+
11
+ - **cli:** Persist ACP onboarding welcome to the conversation anchor
12
+
13
+ ## [2.37.0] — 2026-06-11
14
+
15
+ ### Added
16
+
17
+ - **cli:** Agent sends a first onboarding welcome on a fresh pair
18
+
7
19
  ## [2.36.5] — 2026-06-11
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.37.0",
501
+ version: "2.37.2",
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",
@@ -5900,7 +5900,7 @@ function readAnonId() {
5900
5900
  }
5901
5901
  function superProperties() {
5902
5902
  return {
5903
- cliVersion: true ? "2.37.0" : "0.0.0-dev",
5903
+ cliVersion: true ? "2.37.2" : "0.0.0-dev",
5904
5904
  nodeVersion: process.version,
5905
5905
  platform: process.platform,
5906
5906
  arch: process.arch,
@@ -15380,19 +15380,25 @@ function buildOnboardingPrompt(cwd) {
15380
15380
  "card. Take the initiative and write THEIR first message: a short, warm",
15381
15381
  "onboarding welcome that you (the agent) send proactively to invite them to start.",
15382
15382
  "",
15383
- "Write it for a phone screen \u2014 under ~110 words, friendly, easy to scan, a little",
15384
- "energy. Cover briefly, in your own words:",
15383
+ "Write it for a phone screen \u2014 aim ~160 words, friendly, easy to scan, a little",
15384
+ "energy. Cover briefly, in your own words (give the core features visibility):",
15385
15385
  "- Glad they spun up this session.",
15386
- "- Through CodeAgent Mobile, agents like you get native context, persistent",
15386
+ "- Through CodeAgent Mobile, agents like you get native repo context, persistent",
15387
15387
  " memory, and an issue tracker \u2014 powered by Beads on Dolt \u2014 out of the box, zero setup.",
15388
- "- They can drive you from their phone: live preview, rich visual output, a file viewer.",
15388
+ "- They can drive you from their phone, with real core features:",
15389
+ " \u2022 a full integrated IDE powered by Monaco \u2014 edit code, live preview, rich visual output (NOT just a file viewer);",
15390
+ " \u2022 Smart Composer \u2014 helps them craft and structure prompts;",
15391
+ " \u2022 Team Spaces \u2014 share this session with their team to collaborate, or hand a session to someone else.",
15392
+ "- Invite them to share feedback or report any issue via GitHub",
15393
+ " (https://github.com/edgar-durand/codeagent-mobile-clients/issues) or the Discord",
15394
+ " bugs channel (https://discord.gg/ADMKwGAB).",
15389
15395
  `- End with a SHORT, concrete invitation tied to THIS project (working dir: ${cwd},`,
15390
15396
  ` repo: "${repo}") \u2014 suggest 1\u20132 specific things you could help with here.`,
15391
15397
  "",
15392
15398
  "Rules: do NOT run any tools or shell commands \u2014 base the project hint only on the",
15393
15399
  'repo name/path above so your reply is instant. No preamble like "Sure" or "Of',
15394
15400
  'course" \u2014 start directly with the greeting. Use light markdown (one intro line +',
15395
- "a few bullets). Keep it tight."
15401
+ "a few bullets). Keep it tight despite the feature list."
15396
15402
  ].join("\n");
15397
15403
  }
15398
15404
  function maybeSendOnboardingWelcome(opts) {
@@ -15406,13 +15412,27 @@ function maybeSendOnboardingWelcome(opts) {
15406
15412
  return;
15407
15413
  }
15408
15414
  log.info("acpRunner", `sending first-pair onboarding welcome for session=${opts.sessionId.slice(0, 8)}`);
15409
- void opts.client.prompt(buildOnboardingPrompt(opts.cwd)).catch((err) => {
15415
+ void runOnboardingTurn(opts).catch((err) => {
15410
15416
  log.warn(
15411
15417
  "acpRunner",
15412
- `onboarding welcome prompt failed (non-fatal): ${err instanceof Error ? err.message : String(err)}`
15418
+ `onboarding welcome turn failed (non-fatal): ${err instanceof Error ? err.message : String(err)}`
15413
15419
  );
15414
15420
  });
15415
15421
  }
15422
+ async function runOnboardingTurn(opts) {
15423
+ const { client: client2, streaming, history, cwd } = opts;
15424
+ await streaming.beginTurn();
15425
+ try {
15426
+ await client2.prompt(buildOnboardingPrompt(cwd));
15427
+ const reply = streaming.getCurrentText();
15428
+ await streaming.closeAll();
15429
+ history.appendAgentInitiatedReply(reply);
15430
+ await history.flush();
15431
+ } catch (err) {
15432
+ await streaming.closeAll().catch(() => void 0);
15433
+ throw err;
15434
+ }
15435
+ }
15416
15436
 
15417
15437
  // src/agents/acp/promptEcho.ts
15418
15438
  var MAX_PROMPT_CHARS = 200;
@@ -21243,6 +21263,23 @@ var AcpHistory = class {
21243
21263
  timestamp: Date.now()
21244
21264
  });
21245
21265
  }
21266
+ /**
21267
+ * Record an agent-initiated reply that has NO preceding user prompt
21268
+ * — the first-pair onboarding welcome the agent sends on its own.
21269
+ * Seeds the RECENT summary from the reply itself (so {@link flush}
21270
+ * isn't skipped for lack of a user prompt) and appends ONLY the
21271
+ * agent message: the background instruction that produced this reply
21272
+ * must never surface as a user bubble on mobile.
21273
+ */
21274
+ appendAgentInitiatedReply(text) {
21275
+ const trimmed = text.trim();
21276
+ if (trimmed.length === 0) return;
21277
+ if (this.summary === null) {
21278
+ const oneLine = trimmed.replace(/\s+/g, " ");
21279
+ this.summary = oneLine.length > 120 ? oneLine.slice(0, 117) + "\u2026" : oneLine;
21280
+ }
21281
+ this.appendAgentReply(text);
21282
+ }
21246
21283
  /**
21247
21284
  * Push both the session list (RECENT entry) and the cumulative
21248
21285
  * conversation to the backend. Fire-and-forget — failures land in
@@ -21385,10 +21422,16 @@ async function runAcpSession(opts) {
21385
21422
  path: opts.cwd,
21386
21423
  done: true
21387
21424
  });
21388
- maybeSendOnboardingWelcome({ client: client2, sessionId: opts.sessionId, cwd: opts.cwd });
21389
21425
  const runtime = createInteractiveAgentStrategy(opts.agent, createOsStrategy());
21390
21426
  const models = await runtime.listModels();
21391
21427
  const history = new AcpHistory(publisher, { agent: opts.agent, acpSessionId });
21428
+ maybeSendOnboardingWelcome({
21429
+ client: client2,
21430
+ streaming,
21431
+ history,
21432
+ sessionId: opts.sessionId,
21433
+ cwd: opts.cwd
21434
+ });
21392
21435
  const turnFiles = new TurnFileAggregator({
21393
21436
  workingDir: opts.cwd,
21394
21437
  sessionId: opts.sessionId,
@@ -26559,7 +26602,7 @@ function checkChokidar() {
26559
26602
  }
26560
26603
  async function doctor(args2 = []) {
26561
26604
  const json = args2.includes("--json");
26562
- const cliVersion = true ? "2.37.0" : "0.0.0-dev";
26605
+ const cliVersion = true ? "2.37.2" : "0.0.0-dev";
26563
26606
  const apiBase = resolveApiBaseUrl();
26564
26607
  const diagnosticId = (0, import_node_crypto8.randomUUID)();
26565
26608
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -26758,7 +26801,7 @@ async function completion(args2) {
26758
26801
  // src/commands/version.ts
26759
26802
  var import_picocolors13 = __toESM(require("picocolors"));
26760
26803
  function version2() {
26761
- const v = true ? "2.37.0" : "unknown";
26804
+ const v = true ? "2.37.2" : "unknown";
26762
26805
  console.log(`${import_picocolors13.default.bold("codeam-cli")} ${import_picocolors13.default.cyan(v)}`);
26763
26806
  }
26764
26807
 
@@ -27044,7 +27087,7 @@ function checkForUpdates() {
27044
27087
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
27045
27088
  if (process.env.CI) return;
27046
27089
  if (!process.stdout.isTTY) return;
27047
- const current = true ? "2.37.0" : null;
27090
+ const current = true ? "2.37.2" : null;
27048
27091
  if (!current) return;
27049
27092
  const cache = readCache();
27050
27093
  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.37.0",
3
+ "version": "2.37.2",
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",