codeam-cli 2.68.0 → 2.69.0

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.68.0] — 2026-08-29
8
+
9
+ ### Added
10
+
11
+ - **cli:** Inspector de preview — proxy inyector, script y E2E en navegador (#665)
12
+
7
13
  ## [2.67.6] — 2026-08-27
8
14
 
9
15
  ### Fixed
package/dist/index.js CHANGED
@@ -8081,7 +8081,7 @@ function readAnonId() {
8081
8081
  }
8082
8082
  function superProperties() {
8083
8083
  return {
8084
- cliVersion: true ? "2.68.0" : "0.0.0-dev",
8084
+ cliVersion: true ? "2.69.0" : "0.0.0-dev",
8085
8085
  nodeVersion: process.version,
8086
8086
  platform: process.platform,
8087
8087
  arch: process.arch,
@@ -8323,7 +8323,7 @@ var http = __toESM(require("http"));
8323
8323
  // package.json
8324
8324
  var package_default = {
8325
8325
  name: "codeam-cli",
8326
- version: "2.68.0",
8326
+ version: "2.69.0",
8327
8327
  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.",
8328
8328
  type: "commonjs",
8329
8329
  main: "dist/index.js",
@@ -9859,7 +9859,7 @@ var CommandRelayService = class _CommandRelayService {
9859
9859
  // fresh + clear the "CLI update available" banner after a self-update
9860
9860
  // (a codespace that reinstalls @latest reconnects via heartbeat, not
9861
9861
  // pair/reconnect). Older backends ignore the extra field.
9862
- ..."2.68.0" ? { ideVersion: "2.68.0" } : {}
9862
+ ..."2.69.0" ? { ideVersion: "2.69.0" } : {}
9863
9863
  }).then(() => log.trace("relay", `heartbeat ok online=${online}`)).catch((err) => log.trace("relay", `heartbeat failed online=${online}`, err));
9864
9864
  }
9865
9865
  /**
@@ -22118,7 +22118,7 @@ async function autoUpgradeBeforeCriticalCommand() {
22118
22118
  if (process.env.NODE_ENV === "test") return;
22119
22119
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
22120
22120
  if (process.env.CI) return;
22121
- const current2 = true ? "2.68.0" : null;
22121
+ const current2 = true ? "2.69.0" : null;
22122
22122
  if (!current2) return;
22123
22123
  const cache = readCache();
22124
22124
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -22135,7 +22135,7 @@ function checkForUpdates() {
22135
22135
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
22136
22136
  if (process.env.CI) return;
22137
22137
  if (!process.stdout.isTTY) return;
22138
- const current2 = true ? "2.68.0" : null;
22138
+ const current2 = true ? "2.69.0" : null;
22139
22139
  if (!current2) return;
22140
22140
  const cache = readCache();
22141
22141
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -22158,7 +22158,7 @@ var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
22158
22158
  var SELF_UPDATE_LS_TIMEOUT_MS = 15e3;
22159
22159
  var SUDO_PREFLIGHT_TIMEOUT_MS = 5e3;
22160
22160
  function currentCliVersion() {
22161
- return true ? "2.68.0" : null;
22161
+ return true ? "2.69.0" : null;
22162
22162
  }
22163
22163
  async function installedVersion(deps) {
22164
22164
  const ls = await deps.run(
@@ -25453,10 +25453,33 @@ function inspectorClientSource(opts) {
25453
25453
  return ALLOWED.indexOf(origin) !== -1;
25454
25454
  }
25455
25455
 
25456
+ // \xBFEstamos dentro del WebView de la app movil?
25457
+ //
25458
+ // \u26A0\uFE0F En un WebView el documento es de NIVEL SUPERIOR, asi que
25459
+ // \`window.parent === window\` y la via del iframe no existe: el script
25460
+ // hablaba solo, y en movil el inspector no devolvia nada. React Native
25461
+ // expone su propio canal, que es el unico que sale de ahi.
25462
+ function rnBridge() {
25463
+ return typeof window.ReactNativeWebView !== 'undefined' &&
25464
+ window.ReactNativeWebView &&
25465
+ typeof window.ReactNativeWebView.postMessage === 'function'
25466
+ ? window.ReactNativeWebView
25467
+ : null;
25468
+ }
25469
+
25456
25470
  function send(type, payload) {
25457
- if (!driver || window.parent === window) return;
25471
+ if (!driver) return;
25458
25472
  var msg = { source: CHANNEL, type: type };
25459
25473
  for (var k in payload) if (Object.prototype.hasOwnProperty.call(payload, k)) msg[k] = payload[k];
25474
+
25475
+ var rn = rnBridge();
25476
+ if (rn) {
25477
+ // El canal de RN transporta CADENAS, no objetos: pasarle el objeto
25478
+ // llega al otro lado como "[object Object]".
25479
+ rn.postMessage(JSON.stringify(msg));
25480
+ return;
25481
+ }
25482
+ if (window.parent === window) return;
25460
25483
  window.parent.postMessage(msg, driver);
25461
25484
  }
25462
25485
 
@@ -25603,6 +25626,25 @@ function inspectorClientSource(opts) {
25603
25626
  if (data.type === 'enable') enable(e.origin);
25604
25627
  else if (data.type === 'disable') disable();
25605
25628
  });
25629
+
25630
+ /**
25631
+ * La puerta para React Native, que no puede usar \`postMessage\`.
25632
+ *
25633
+ * \u26A0\uFE0F Aqui NO hay lista blanca de origenes, y no es un descuido: quien
25634
+ * llama esto es la app anfitriona sobre SU PROPIO WebView, via
25635
+ * \`injectJavaScript\` \u2014 no hay un tercero al que filtrar. La lista blanca
25636
+ * protege el caso del iframe, donde cualquier pagina puede embeber el
25637
+ * preview y mandar mensajes; ese caso sigue exactamente igual de cerrado.
25638
+ *
25639
+ * Solo se expone donde ese puente existe, para no dejar en una pagina
25640
+ * normal una funcion global que encienda el inspector sin permiso.
25641
+ */
25642
+ if (rnBridge()) {
25643
+ window.__codeamInspector = {
25644
+ enable: function () { enable('react-native'); },
25645
+ disable: disable,
25646
+ };
25647
+ }
25606
25648
  } catch (e) {
25607
25649
  // Pase lo que pase, la app del usuario sigue funcionando.
25608
25650
  }
@@ -46333,7 +46375,7 @@ function checkChokidar() {
46333
46375
  }
46334
46376
  async function doctor(args2 = []) {
46335
46377
  const json = args2.includes("--json");
46336
- const cliVersion = true ? "2.68.0" : "0.0.0-dev";
46378
+ const cliVersion = true ? "2.69.0" : "0.0.0-dev";
46337
46379
  const apiBase2 = resolveApiBaseUrl();
46338
46380
  const diagnosticId = (0, import_node_crypto13.randomUUID)();
46339
46381
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -46724,7 +46766,7 @@ async function mcpRun(args2) {
46724
46766
  // src/commands/version.ts
46725
46767
  var import_picocolors15 = __toESM(require("picocolors"));
46726
46768
  function version2() {
46727
- const v = true ? "2.68.0" : "unknown";
46769
+ const v = true ? "2.69.0" : "unknown";
46728
46770
  console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
46729
46771
  }
46730
46772
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.68.0",
3
+ "version": "2.69.0",
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",