codeam-cli 2.23.20 → 2.23.21

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.23.20] — 2026-05-30
8
+
9
+ ### Fixed
10
+
11
+ - **cli:** Claude selector — match `<n>.Label` (no space after the dot)
12
+
7
13
  ## [2.23.19] — 2026-05-30
8
14
 
9
15
  ### Fixed
package/dist/index.js CHANGED
@@ -441,7 +441,7 @@ var import_qrcode_terminal = __toESM(require("qrcode-terminal"));
441
441
  // package.json
442
442
  var package_default = {
443
443
  name: "codeam-cli",
444
- version: "2.23.20",
444
+ version: "2.23.21",
445
445
  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.",
446
446
  type: "commonjs",
447
447
  main: "dist/index.js",
@@ -5774,7 +5774,7 @@ function readAnonId() {
5774
5774
  }
5775
5775
  function superProperties() {
5776
5776
  return {
5777
- cliVersion: true ? "2.23.20" : "0.0.0-dev",
5777
+ cliVersion: true ? "2.23.21" : "0.0.0-dev",
5778
5778
  nodeVersion: process.version,
5779
5779
  platform: process.platform,
5780
5780
  arch: process.arch,
@@ -9674,6 +9674,22 @@ function detectSelector(lines) {
9674
9674
  currentIndex: 0
9675
9675
  };
9676
9676
  }
9677
+ function detectInputSuggestion(lines) {
9678
+ const hasIdleHint = lines.some((l) => /\?\s+for\s+shortcuts/i.test(l.trim()));
9679
+ if (!hasIdleHint) return null;
9680
+ if (lines.some((l) => /^[❯>]\s*\d+\./.test(l.trim()))) return null;
9681
+ for (const line of lines) {
9682
+ const t2 = line.trim();
9683
+ const m = t2.match(/^[❯>]\s+(\S.*)$/);
9684
+ if (!m) continue;
9685
+ if (/^\d+\.\s/.test(m[1])) continue;
9686
+ if (/^for\s/i.test(m[1])) continue;
9687
+ const text = m[1].trim();
9688
+ if (text.length === 0) return null;
9689
+ return text;
9690
+ }
9691
+ return null;
9692
+ }
9677
9693
  function detectListSelector(lines) {
9678
9694
  if (!lines.some((l) => /[↑↓].*navigate/i.test(l.trim()))) return null;
9679
9695
  if (lines.some((l) => /^❯\s*\d+\./.test(l.trim()))) return null;
@@ -9837,6 +9853,9 @@ var ClaudeRuntimeStrategy = class {
9837
9853
  detectStartupBanner(lines) {
9838
9854
  return detectStartupBanner(lines);
9839
9855
  }
9856
+ detectInputSuggestion(lines) {
9857
+ return detectInputSuggestion(lines);
9858
+ }
9840
9859
  credentialLocator() {
9841
9860
  return claudeCredentialLocator();
9842
9861
  }
@@ -11710,6 +11729,15 @@ var OutputService = class _OutputService {
11710
11729
  emitter;
11711
11730
  runtime;
11712
11731
  lastSentContent = "";
11732
+ /**
11733
+ * Tracks the most recent `input_suggestion` chunk we shipped so
11734
+ * we don't spam the backend with duplicate "ghost text" updates
11735
+ * on every tick. Claude redraws its prompt continuously while
11736
+ * idle, so without de-dup we'd push 10+ identical chunks per
11737
+ * second. Reset to `null` when the prompt area clears (the
11738
+ * suggestion was accepted / dismissed).
11739
+ */
11740
+ lastSentSuggestion = null;
11713
11741
  /**
11714
11742
  * Per-session latch — emits the agent's startup banner as a typed
11715
11743
  * `agent_banner` chunk exactly once, then strips the banner lines
@@ -12019,6 +12047,19 @@ var OutputService = class _OutputService {
12019
12047
  });
12020
12048
  }
12021
12049
  const contentStableMs = this.lastContentChangeAt > 0 ? now - this.lastContentChangeAt : 0;
12050
+ const suggestion = this.runtime.detectInputSuggestion?.(lines) ?? null;
12051
+ if (suggestion !== this.lastSentSuggestion) {
12052
+ this.lastSentSuggestion = suggestion;
12053
+ this.send(
12054
+ {
12055
+ type: "input_suggestion",
12056
+ content: suggestion ?? "",
12057
+ done: true
12058
+ },
12059
+ { critical: false }
12060
+ ).catch(() => {
12061
+ });
12062
+ }
12022
12063
  const readyPrompt = this.runtime.detectReadyPrompt?.(lines) ?? false;
12023
12064
  log.trace(
12024
12065
  "outputSvc",
@@ -18804,7 +18845,7 @@ function checkChokidar() {
18804
18845
  }
18805
18846
  async function doctor(args2 = []) {
18806
18847
  const json = args2.includes("--json");
18807
- const cliVersion = true ? "2.23.20" : "0.0.0-dev";
18848
+ const cliVersion = true ? "2.23.21" : "0.0.0-dev";
18808
18849
  const apiBase = resolveApiBaseUrl();
18809
18850
  const diagnosticId = (0, import_node_crypto5.randomUUID)();
18810
18851
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -19003,7 +19044,7 @@ async function completion(args2) {
19003
19044
  // src/commands/version.ts
19004
19045
  var import_picocolors13 = __toESM(require("picocolors"));
19005
19046
  function version2() {
19006
- const v = true ? "2.23.20" : "unknown";
19047
+ const v = true ? "2.23.21" : "unknown";
19007
19048
  console.log(`${import_picocolors13.default.bold("codeam-cli")} ${import_picocolors13.default.cyan(v)}`);
19008
19049
  }
19009
19050
 
@@ -19231,7 +19272,7 @@ function checkForUpdates() {
19231
19272
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
19232
19273
  if (process.env.CI) return;
19233
19274
  if (!process.stdout.isTTY) return;
19234
- const current = true ? "2.23.20" : null;
19275
+ const current = true ? "2.23.21" : null;
19235
19276
  if (!current) return;
19236
19277
  const cache = readCache();
19237
19278
  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.23.20",
3
+ "version": "2.23.21",
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",