codeam-cli 2.23.1 → 2.23.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,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.1] — 2026-05-25
8
+
9
+ ### Fixed
10
+
11
+ - **cli:** Payload.agentId — accept null, not just undefined (#189)
12
+
7
13
  ## [2.23.0] — 2026-05-25
8
14
 
9
15
  ### Added
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.1",
444
+ version: "2.23.2",
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",
@@ -5768,7 +5768,7 @@ function readAnonId() {
5768
5768
  }
5769
5769
  function superProperties() {
5770
5770
  return {
5771
- cliVersion: true ? "2.23.1" : "0.0.0-dev",
5771
+ cliVersion: true ? "2.23.2" : "0.0.0-dev",
5772
5772
  nodeVersion: process.version,
5773
5773
  platform: process.platform,
5774
5774
  arch: process.arch,
@@ -15452,7 +15452,7 @@ var applyFileReviewH = async (ctx, cmd, parsed) => {
15452
15452
  result
15453
15453
  );
15454
15454
  };
15455
- var requestLinkCredentialsH = async (ctx, _cmd, parsed) => {
15455
+ var requestLinkCredentialsH = (ctx, _cmd, parsed) => {
15456
15456
  const publicId = parsed.agentId;
15457
15457
  if (!publicId) return;
15458
15458
  if (!ctx.pluginAuthToken) {
@@ -15464,80 +15464,94 @@ var requestLinkCredentialsH = async (ctx, _cmd, parsed) => {
15464
15464
  log.trace("auto-link", `unknown / disabled agent: ${internalId}`);
15465
15465
  return;
15466
15466
  }
15467
- let linkCtx;
15468
- try {
15469
- linkCtx = buildLinkContext(internalId);
15470
- } catch (err) {
15471
- log.trace("auto-link", "buildLinkContext threw", err);
15472
- return;
15473
- }
15474
- const token = await linkCtx.locator.extract().catch((err) => {
15475
- log.trace("auto-link", `locator.extract failed for ${publicId}`, err);
15476
- return null;
15477
- });
15478
- if (!token) {
15479
- log.trace("auto-link", `no local ${linkCtx.displayName} credentials \u2014 skipping`);
15480
- return;
15481
- }
15482
- const result = await postLinkCredential({
15483
- agentId: publicId,
15484
- sessionId: ctx.sessionId,
15485
- pluginId: ctx.pluginId,
15486
- pluginAuthToken: ctx.pluginAuthToken,
15487
- method: token.method,
15488
- credential: token.credential
15489
- });
15490
- if (result.ok) {
15491
- log.trace("auto-link", `vaulted ${publicId} from ${token.source}`);
15492
- } else {
15493
- log.trace("auto-link", `upload failed (${result.status}): ${result.message}`);
15494
- }
15467
+ const pluginAuthToken = ctx.pluginAuthToken;
15468
+ void (async () => {
15469
+ let linkCtx;
15470
+ try {
15471
+ linkCtx = buildLinkContext(internalId);
15472
+ } catch (err) {
15473
+ log.trace("auto-link", "buildLinkContext threw", err);
15474
+ return;
15475
+ }
15476
+ const token = await linkCtx.locator.extract().catch((err) => {
15477
+ log.trace("auto-link", `locator.extract failed for ${publicId}`, err);
15478
+ return null;
15479
+ });
15480
+ if (!token) {
15481
+ log.trace("auto-link", `no local ${linkCtx.displayName} credentials \u2014 skipping`);
15482
+ return;
15483
+ }
15484
+ const result = await postLinkCredential({
15485
+ agentId: publicId,
15486
+ sessionId: ctx.sessionId,
15487
+ pluginId: ctx.pluginId,
15488
+ pluginAuthToken,
15489
+ method: token.method,
15490
+ credential: token.credential
15491
+ });
15492
+ if (result.ok) {
15493
+ log.trace("auto-link", `vaulted ${publicId} from ${token.source}`);
15494
+ } else {
15495
+ log.trace("auto-link", `upload failed (${result.status}): ${result.message}`);
15496
+ }
15497
+ })();
15495
15498
  };
15496
- var requestAiSummaryH = async (ctx, _cmd, parsed) => {
15499
+ var requestAiSummaryH = (ctx, _cmd, parsed) => {
15497
15500
  if (!ctx.pluginAuthToken) return;
15498
15501
  if (typeof ctx.runtime.generateOneShot !== "function") return;
15499
15502
  if (!parsed.prompt || !parsed.turnId || !parsed.stats) {
15500
15503
  log.trace("ai-summary", "missing prompt/turnId/stats \u2014 skipping");
15501
15504
  return;
15502
15505
  }
15503
- const text = await ctx.runtime.generateOneShot(parsed.prompt).catch((err) => {
15504
- log.trace("ai-summary", "generateOneShot threw", err);
15505
- return null;
15506
- });
15507
- if (!text) return;
15508
- await postAiResult({
15509
- sessionId: ctx.sessionId,
15510
- pluginId: ctx.pluginId,
15511
- pluginAuthToken: ctx.pluginAuthToken,
15512
- kind: "summary",
15513
- turnId: parsed.turnId,
15514
- summary: text,
15515
- stats: parsed.stats
15516
- });
15506
+ const prompt = parsed.prompt;
15507
+ const turnId = parsed.turnId;
15508
+ const stats = parsed.stats;
15509
+ const pluginAuthToken = ctx.pluginAuthToken;
15510
+ void (async () => {
15511
+ const text = await ctx.runtime.generateOneShot(prompt).catch((err) => {
15512
+ log.trace("ai-summary", "generateOneShot threw", err);
15513
+ return null;
15514
+ });
15515
+ if (!text) return;
15516
+ await postAiResult({
15517
+ sessionId: ctx.sessionId,
15518
+ pluginId: ctx.pluginId,
15519
+ pluginAuthToken,
15520
+ kind: "summary",
15521
+ turnId,
15522
+ summary: text,
15523
+ stats
15524
+ });
15525
+ })();
15517
15526
  };
15518
- var requestAiInsightH = async (ctx, _cmd, parsed) => {
15527
+ var requestAiInsightH = (ctx, _cmd, parsed) => {
15519
15528
  if (!ctx.pluginAuthToken) return;
15520
15529
  if (typeof ctx.runtime.generateOneShot !== "function") return;
15521
15530
  if (!parsed.prompt || !parsed.fileChangeId) {
15522
15531
  log.trace("ai-insight", "missing prompt/fileChangeId \u2014 skipping");
15523
15532
  return;
15524
15533
  }
15525
- const text = await ctx.runtime.generateOneShot(parsed.prompt).catch((err) => {
15526
- log.trace("ai-insight", "generateOneShot threw", err);
15527
- return null;
15528
- });
15529
- if (!text) return;
15530
- const { summary, reasoning, securityNote } = parseInsightText(text);
15531
- await postAiResult({
15532
- sessionId: ctx.sessionId,
15533
- pluginId: ctx.pluginId,
15534
- pluginAuthToken: ctx.pluginAuthToken,
15535
- kind: "insight",
15536
- fileChangeId: parsed.fileChangeId,
15537
- summary,
15538
- reasoning,
15539
- securityNote
15540
- });
15534
+ const prompt = parsed.prompt;
15535
+ const fileChangeId = parsed.fileChangeId;
15536
+ const pluginAuthToken = ctx.pluginAuthToken;
15537
+ void (async () => {
15538
+ const text = await ctx.runtime.generateOneShot(prompt).catch((err) => {
15539
+ log.trace("ai-insight", "generateOneShot threw", err);
15540
+ return null;
15541
+ });
15542
+ if (!text) return;
15543
+ const { summary, reasoning, securityNote } = parseInsightText(text);
15544
+ await postAiResult({
15545
+ sessionId: ctx.sessionId,
15546
+ pluginId: ctx.pluginId,
15547
+ pluginAuthToken,
15548
+ kind: "insight",
15549
+ fileChangeId,
15550
+ summary,
15551
+ reasoning,
15552
+ securityNote
15553
+ });
15554
+ })();
15541
15555
  };
15542
15556
  function parseInsightText(text) {
15543
15557
  const summaryMatch = text.match(/SUMMARY:\s*([\s\S]*?)(?=\n\s*(?:REASONING|SECURITY):|$)/i);
@@ -18290,7 +18304,7 @@ function checkChokidar() {
18290
18304
  }
18291
18305
  async function doctor(args2 = []) {
18292
18306
  const json = args2.includes("--json");
18293
- const cliVersion = true ? "2.23.1" : "0.0.0-dev";
18307
+ const cliVersion = true ? "2.23.2" : "0.0.0-dev";
18294
18308
  const apiBase = resolveApiBaseUrl();
18295
18309
  const diagnosticId = (0, import_node_crypto5.randomUUID)();
18296
18310
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -18489,7 +18503,7 @@ async function completion(args2) {
18489
18503
  // src/commands/version.ts
18490
18504
  var import_picocolors13 = __toESM(require("picocolors"));
18491
18505
  function version2() {
18492
- const v = true ? "2.23.1" : "unknown";
18506
+ const v = true ? "2.23.2" : "unknown";
18493
18507
  console.log(`${import_picocolors13.default.bold("codeam-cli")} ${import_picocolors13.default.cyan(v)}`);
18494
18508
  }
18495
18509
 
@@ -18717,7 +18731,7 @@ function checkForUpdates() {
18717
18731
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
18718
18732
  if (process.env.CI) return;
18719
18733
  if (!process.stdout.isTTY) return;
18720
- const current = true ? "2.23.1" : null;
18734
+ const current = true ? "2.23.2" : null;
18721
18735
  if (!current) return;
18722
18736
  const cache = readCache();
18723
18737
  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.1",
3
+ "version": "2.23.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",