codeam-cli 2.5.0 → 2.5.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,12 @@ 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.4.39] — 2026-05-06
8
+
9
+ ### Added
10
+
11
+ - **cli:** Per-turn delta upload to keep canonical conversation fresh
12
+
7
13
  ## [2.4.37] — 2026-05-06
8
14
 
9
15
  ### Fixed
package/dist/index.js CHANGED
@@ -1477,7 +1477,7 @@ var import_qrcode_terminal = __toESM(require("qrcode-terminal"));
1477
1477
  // package.json
1478
1478
  var package_default = {
1479
1479
  name: "codeam-cli",
1480
- version: "2.5.0",
1480
+ version: "2.5.1",
1481
1481
  description: "Remote control Claude Code (and other AI coding agents) from your mobile phone. Pair your device, send prompts, stream responses in real-time, and approve commands \u2014 from anywhere.",
1482
1482
  type: "commonjs",
1483
1483
  main: "dist/index.js",
@@ -4490,8 +4490,14 @@ var ClaudeService = class {
4490
4490
  constructor(opts) {
4491
4491
  this.opts = opts;
4492
4492
  this.strategyOpts = {
4493
- onData: opts.onData ?? (() => {
4494
- }),
4493
+ onData: (d3) => {
4494
+ if (!this.claudeReady && d3.length > 0) {
4495
+ this.claudeReady = true;
4496
+ setTimeout(() => this.drainPending(), 250);
4497
+ }
4498
+ (opts.onData ?? (() => {
4499
+ }))(d3);
4500
+ },
4495
4501
  onExit: opts.onExit
4496
4502
  };
4497
4503
  }
@@ -4501,6 +4507,30 @@ var ClaudeService = class {
4501
4507
  // Methods called before spawn() (e.g. early kill/SIGINT) no-op safely.
4502
4508
  strategy = null;
4503
4509
  strategyOpts;
4510
+ /**
4511
+ * Set once the PTY emits its FIRST batch of output — proxy for
4512
+ * "Claude has rendered its input box and is ready to read keystrokes."
4513
+ * Before this, remote `sendCommand`s are buffered (`pendingInputs`)
4514
+ * and replayed in order on first data. Without this guard, the very
4515
+ * first prompt right after `codeam pair` on Windows lands while
4516
+ * Claude's React Ink tree is still mounting — the input bytes are
4517
+ * accepted by the PTY but never make it to the input field, and
4518
+ * the prompt silently vanishes.
4519
+ */
4520
+ claudeReady = false;
4521
+ pendingInputs = [];
4522
+ drainPending() {
4523
+ if (!this.strategy || this.pendingInputs.length === 0) return;
4524
+ const s = this.strategy;
4525
+ log.trace("claude", `drain pending=${this.pendingInputs.length}`);
4526
+ let offset = 0;
4527
+ for (const text of this.pendingInputs) {
4528
+ setTimeout(() => s.write(text), offset);
4529
+ setTimeout(() => s.write("\r"), offset + 50);
4530
+ offset += 200;
4531
+ }
4532
+ this.pendingInputs.length = 0;
4533
+ }
4504
4534
  async spawn() {
4505
4535
  let launch = buildClaudeLaunch();
4506
4536
  if (!launch) {
@@ -4569,6 +4599,11 @@ var ClaudeService = class {
4569
4599
  log.trace("claude", "sendCommand dropped (no strategy)");
4570
4600
  return;
4571
4601
  }
4602
+ if (!this.claudeReady) {
4603
+ log.trace("claude", `sendCommand buffered (not ready) text=${text.length}B`);
4604
+ this.pendingInputs.push(text);
4605
+ return;
4606
+ }
4572
4607
  const s = this.strategy;
4573
4608
  log.trace("claude", `sendCommand text=${text.length}B`);
4574
4609
  s.write(text);
@@ -6865,8 +6900,8 @@ async function start() {
6865
6900
  process.exit(0);
6866
6901
  }
6867
6902
  process.once("SIGINT", sigintHandler);
6868
- relay.start();
6869
6903
  await claude.spawn();
6904
+ relay.start();
6870
6905
  setTimeout(() => {
6871
6906
  historySvc.detectCurrentConversation();
6872
6907
  historySvc.load().catch(() => {
@@ -9193,7 +9228,7 @@ async function stopWorkspaceFromLocal(target) {
9193
9228
  // src/commands/version.ts
9194
9229
  var import_picocolors11 = __toESM(require("picocolors"));
9195
9230
  function version() {
9196
- const v = true ? "2.5.0" : "unknown";
9231
+ const v = true ? "2.5.1" : "unknown";
9197
9232
  console.log(`${import_picocolors11.default.bold("codeam-cli")} ${import_picocolors11.default.cyan(v)}`);
9198
9233
  }
9199
9234
 
@@ -9328,7 +9363,7 @@ function checkForUpdates() {
9328
9363
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
9329
9364
  if (process.env.CI) return;
9330
9365
  if (!process.stdout.isTTY) return;
9331
- const current = true ? "2.5.0" : null;
9366
+ const current = true ? "2.5.1" : null;
9332
9367
  if (!current) return;
9333
9368
  const cache = readCache();
9334
9369
  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.5.0",
3
+ "version": "2.5.1",
4
4
  "description": "Remote control Claude Code (and other AI coding agents) from your mobile phone. Pair your device, send prompts, stream responses in real-time, and approve commands — from anywhere.",
5
5
  "type": "commonjs",
6
6
  "main": "dist/index.js",