codeam-cli 2.12.12 → 2.12.13

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,13 @@ 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.12.12] — 2026-05-14
8
+
9
+ ### Fixed
10
+
11
+ - **cli:** Codex-specific renderer with DECSTBM scroll-region support — captures full multi-paragraph replies
12
+ - **cli:** Inject Markdown ``` fences for Codex-emitted code blocks
13
+
7
14
  ## [2.12.11] — 2026-05-14
8
15
 
9
16
  ### Fixed
package/dist/index.js CHANGED
@@ -1682,7 +1682,7 @@ var import_qrcode_terminal = __toESM(require("qrcode-terminal"));
1682
1682
  // package.json
1683
1683
  var package_default = {
1684
1684
  name: "codeam-cli",
1685
- version: "2.12.12",
1685
+ version: "2.12.13",
1686
1686
  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.",
1687
1687
  type: "commonjs",
1688
1688
  main: "dist/index.js",
@@ -5849,6 +5849,37 @@ ${sampleOut}`);
5849
5849
  return wrapped;
5850
5850
  }
5851
5851
  var CODE_CHAR_RE = /[;{}]|=>|^\s*(?:import|public|private|static|class|function|interface|type|const|let|var|def|return|if|else|for|while)\b/;
5852
+ var DIFF_HUNK_RE = /^@@\s+-\d+(?:,\d+)?\s+\+\d+(?:,\d+)?\s+@@/;
5853
+ var DIFF_GIT_RE = /^diff\s+--git\s+/;
5854
+ var DIFF_OLD_RE = /^---\s+(?:a\/)?\S/;
5855
+ var DIFF_NEW_RE = /^\+\+\+\s+(?:b\/)?\S/;
5856
+ var COMMIT_HEAD_RE = /^\[[\w./@-]+\s+[0-9a-f]{7,40}\]\s+/;
5857
+ var COMMIT_STATS_RE = /\d+\s+files?\s+changed/;
5858
+ var PUSH_TO_RE = /^To\s+(?:https?:\/\/|git@)/;
5859
+ var PUSH_NEW_RE = /\[new branch\]\s+\S+\s*->\s*\S+/;
5860
+ var PUSH_UPDATE_RE = /^\s*[0-9a-f]{7,40}\.\.[0-9a-f]{7,40}\s+\S+\s*->\s*\S+/;
5861
+ var MERGE_UPD_RE = /^Updating\s+[0-9a-f]{7,40}\.\.[0-9a-f]{7,40}/;
5862
+ var MERGE_FF_RE = /^Fast-forward\s*$/;
5863
+ var PR_TITLE_RE = /^title:\s+\S/;
5864
+ var PR_STATE_RE = /^state:\s+(?:OPEN|CLOSED|MERGED|DRAFT)/i;
5865
+ var PR_URL_RE = /https?:\/\/github\.com\/[\w.-]+\/[\w.-]+\/pull\/\d+/;
5866
+ var PR_BANNER_RE = /^\s*[✓✔]?\s*Pull request created\s*$/i;
5867
+ function isStructuredBlock(block) {
5868
+ if (block.some((l) => DIFF_HUNK_RE.test(l))) return true;
5869
+ if (block.some((l) => DIFF_GIT_RE.test(l))) return true;
5870
+ if (block.some((l) => DIFF_OLD_RE.test(l)) && block.some((l) => DIFF_NEW_RE.test(l))) return true;
5871
+ if (block.some((l) => COMMIT_HEAD_RE.test(l))) return true;
5872
+ if (block.some((l) => COMMIT_STATS_RE.test(l))) return true;
5873
+ if (block.some((l) => PUSH_TO_RE.test(l))) return true;
5874
+ if (block.some((l) => PUSH_NEW_RE.test(l))) return true;
5875
+ if (block.some((l) => PUSH_UPDATE_RE.test(l))) return true;
5876
+ if (block.some((l) => MERGE_UPD_RE.test(l))) return true;
5877
+ if (block.some((l) => MERGE_FF_RE.test(l))) return true;
5878
+ if (block.some((l) => PR_TITLE_RE.test(l)) && block.some((l) => PR_STATE_RE.test(l))) return true;
5879
+ if (block.some((l) => PR_URL_RE.test(l))) return true;
5880
+ if (block.some((l) => PR_BANNER_RE.test(l))) return true;
5881
+ return false;
5882
+ }
5852
5883
  function inferLanguage(block) {
5853
5884
  const head = block.slice(0, 10).join("\n");
5854
5885
  if (/\bpublic\s+(?:static\s+)?(?:class|void|int|String)\b|System\.out\.println|\bjava\.util/.test(head)) return "java";
@@ -5861,6 +5892,9 @@ function inferLanguage(block) {
5861
5892
  return "";
5862
5893
  }
5863
5894
  function wrapCodexCodeBlocks(lines) {
5895
+ if (isStructuredBlock(lines)) {
5896
+ return lines;
5897
+ }
5864
5898
  const result = [];
5865
5899
  let i = 0;
5866
5900
  while (i < lines.length) {
@@ -5898,9 +5932,14 @@ function wrapCodexCodeBlocks(lines) {
5898
5932
  break;
5899
5933
  }
5900
5934
  const runLen = end - start2 + 1;
5901
- const codeShapedCount = lines.slice(start2, end + 1).filter((l) => CODE_CHAR_RE.test(l)).length;
5935
+ const body = lines.slice(start2, end + 1);
5936
+ if (isStructuredBlock(body)) {
5937
+ for (const l of body) result.push(l);
5938
+ i = end + 1;
5939
+ continue;
5940
+ }
5941
+ const codeShapedCount = body.filter((l) => CODE_CHAR_RE.test(l)).length;
5902
5942
  if (codeShapedCount >= 3) {
5903
- const body = lines.slice(start2, end + 1);
5904
5943
  const lang = inferLanguage(body);
5905
5944
  result.push("```" + lang);
5906
5945
  for (const l of body) result.push(l);
@@ -10385,7 +10424,7 @@ async function stopWorkspaceFromLocal(target) {
10385
10424
  // src/commands/version.ts
10386
10425
  var import_picocolors11 = __toESM(require("picocolors"));
10387
10426
  function version() {
10388
- const v = true ? "2.12.12" : "unknown";
10427
+ const v = true ? "2.12.13" : "unknown";
10389
10428
  console.log(`${import_picocolors11.default.bold("codeam-cli")} ${import_picocolors11.default.cyan(v)}`);
10390
10429
  }
10391
10430
 
@@ -10520,7 +10559,7 @@ function checkForUpdates() {
10520
10559
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
10521
10560
  if (process.env.CI) return;
10522
10561
  if (!process.stdout.isTTY) return;
10523
- const current = true ? "2.12.12" : null;
10562
+ const current = true ? "2.12.13" : null;
10524
10563
  if (!current) return;
10525
10564
  const cache = readCache();
10526
10565
  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.12.12",
3
+ "version": "2.12.13",
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",