codeam-cli 2.61.42 → 2.61.44

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,18 @@ 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.61.43] — 2026-07-25
8
+
9
+ ### Added
10
+
11
+ - **shared:** Discord comms integration — OAuth bot-invite, guildId discriminator
12
+
13
+ ## [2.61.42] — 2026-07-25
14
+
15
+ ### Added
16
+
17
+ - **cli:** Host-agent deploy supports a specific branch/ref
18
+
7
19
  ## [2.61.41] — 2026-07-25
8
20
 
9
21
  ### Fixed
package/dist/index.js CHANGED
@@ -780,12 +780,79 @@ var INTEGRATION_REGISTRY = {
780
780
  name: "Discord",
781
781
  icon: "discord",
782
782
  category: "comms",
783
- // COMING SOON placeholder catalog entry (no OAuth provider / MCP yet). The
784
- // agent will post review pings + read channels over the Discord API once the
785
- // provider lands. `enabled:false` dimmed "coming soon" tile.
786
- enabled: false,
787
- auth: { kind: "oauth_redirect" },
788
- delivery: {}
783
+ // LIVEthe DiscordOAuthProvider + DISCORD_* secrets (client id/secret,
784
+ // bot token, per-env redirect) are registered; the backend provider is
785
+ // config-gated (503 if env unset). Follows the SLACK pattern (OAuth redirect, zero friction),
786
+ // EXCEPT Discord OAuth gives no per-install token: the user's `bot`-scope
787
+ // authorize INVITES the app's single bot into their guild, and we store the
788
+ // returned guild id as the per-user credential. The broker injects the app's
789
+ // BOT token as `accessToken` (from config), so `DISCORD_TOKEN` = that bot
790
+ // token and `DISCORD_GUILD_ID` = the user's guild.
791
+ enabled: true,
792
+ auth: {
793
+ kind: "oauth_redirect",
794
+ // `bot` invites the app's bot into the user's guild (Guild Install);
795
+ // `guilds` lets the exchange read the guild name for display. The bot's
796
+ // channel permissions (View Channels + Read Message History + Send
797
+ // Messages + Send Messages in Threads) are set on the app's bot, NOT here.
798
+ // ⚠️ The app's bot MUST have the Message Content privileged intent enabled
799
+ // or read_messages returns empty content.
800
+ scopes: ["bot", "guilds"]
801
+ },
802
+ delivery: {
803
+ mcp: {
804
+ // mcp-discord (barryyip0625) — Node stdio, BYO bot token headless via the
805
+ // DISCORD_TOKEN env (never argv). Version PINNED; bump only after
806
+ // re-verifying headless. Tools: list/read channels + messages, send
807
+ // message, reply in thread, add reaction. `DISCORD_GUILD_ID` scopes it to
808
+ // the user's invited guild.
809
+ command: "npx",
810
+ args: ["-y", "mcp-discord@1.3.4"],
811
+ envMapping: {
812
+ DISCORD_TOKEN: "accessToken",
813
+ DISCORD_GUILD_ID: "guildId"
814
+ }
815
+ }
816
+ }
817
+ },
818
+ resend: {
819
+ id: "resend",
820
+ name: "Resend",
821
+ icon: "resend",
822
+ category: "comms",
823
+ // LIVE — api_key (like Azure DevOps): the user pastes a Resend API key
824
+ // (`re_…`); Resend has NO OAuth, so there's no OAuth app / GSM secret /
825
+ // config-gated 503 — a backend VALIDATOR proves the key against the Resend
826
+ // API and vaults it. ⚠️ SEND-ONLY email → `sendOnly: true` keeps it OUT of
827
+ // From-Conversation (comms conversation sources need readable threads; Resend
828
+ // has none) while still being a linkable comms tool the agent uses via MCP.
829
+ enabled: true,
830
+ sendOnly: true,
831
+ auth: {
832
+ kind: "api_key",
833
+ fields: [
834
+ {
835
+ key: "accessToken",
836
+ label: "API Key",
837
+ placeholder: "re_xxxxxxxxxxxxxxxx",
838
+ secret: true,
839
+ help: 'Create in Resend \u2192 API Keys (https://resend.com/api-keys). "Sending access" is enough.'
840
+ }
841
+ ]
842
+ },
843
+ delivery: {
844
+ mcp: {
845
+ // The OFFICIAL resend-mcp (Node) in BYO-token mode: the API key is fed
846
+ // via RESEND_API_KEY (env only, never argv). Version PINNED; bump only
847
+ // after re-verifying headless. Tools: send email + contacts/broadcasts/
848
+ // domains.
849
+ command: "npx",
850
+ args: ["-y", "resend-mcp@2.6.1"],
851
+ envMapping: {
852
+ RESEND_API_KEY: "accessToken"
853
+ }
854
+ }
855
+ }
789
856
  },
790
857
  notion: {
791
858
  id: "notion",
@@ -6355,7 +6422,7 @@ function readAnonId() {
6355
6422
  }
6356
6423
  function superProperties() {
6357
6424
  return {
6358
- cliVersion: true ? "2.61.42" : "0.0.0-dev",
6425
+ cliVersion: true ? "2.61.44" : "0.0.0-dev",
6359
6426
  nodeVersion: process.version,
6360
6427
  platform: process.platform,
6361
6428
  arch: process.arch,
@@ -6536,7 +6603,7 @@ var os4 = __toESM(require("os"));
6536
6603
  // package.json
6537
6604
  var package_default = {
6538
6605
  name: "codeam-cli",
6539
- version: "2.61.42",
6606
+ version: "2.61.44",
6540
6607
  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.",
6541
6608
  type: "commonjs",
6542
6609
  main: "dist/index.js",
@@ -7707,7 +7774,7 @@ var CommandRelayService = class _CommandRelayService {
7707
7774
  // fresh + clear the "CLI update available" banner after a self-update
7708
7775
  // (a codespace that reinstalls @latest reconnects via heartbeat, not
7709
7776
  // pair/reconnect). Older backends ignore the extra field.
7710
- ..."2.61.42" ? { ideVersion: "2.61.42" } : {}
7777
+ ..."2.61.44" ? { ideVersion: "2.61.44" } : {}
7711
7778
  }).then(() => log.trace("relay", `heartbeat ok online=${online}`)).catch((err) => log.trace("relay", `heartbeat failed online=${online}`, err));
7712
7779
  }
7713
7780
  /**
@@ -18692,7 +18759,7 @@ async function autoUpgradeBeforeCriticalCommand() {
18692
18759
  if (process.env.NODE_ENV === "test") return;
18693
18760
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
18694
18761
  if (process.env.CI) return;
18695
- const current = true ? "2.61.42" : null;
18762
+ const current = true ? "2.61.44" : null;
18696
18763
  if (!current) return;
18697
18764
  const cache = readCache();
18698
18765
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -18709,7 +18776,7 @@ function checkForUpdates() {
18709
18776
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
18710
18777
  if (process.env.CI) return;
18711
18778
  if (!process.stdout.isTTY) return;
18712
- const current = true ? "2.61.42" : null;
18779
+ const current = true ? "2.61.44" : null;
18713
18780
  if (!current) return;
18714
18781
  const cache = readCache();
18715
18782
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -18729,7 +18796,7 @@ var SELF_UPDATE_INTERVAL_MS = 60 * 60 * 1e3;
18729
18796
  var SELF_UPDATE_VIEW_TIMEOUT_MS = 3e4;
18730
18797
  var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
18731
18798
  function currentCliVersion() {
18732
- return true ? "2.61.42" : null;
18799
+ return true ? "2.61.44" : null;
18733
18800
  }
18734
18801
  function runCmd(cmd, args2, timeoutMs) {
18735
18802
  return new Promise((resolve8) => {
@@ -38855,7 +38922,7 @@ function checkChokidar() {
38855
38922
  }
38856
38923
  async function doctor(args2 = []) {
38857
38924
  const json = args2.includes("--json");
38858
- const cliVersion = true ? "2.61.42" : "0.0.0-dev";
38925
+ const cliVersion = true ? "2.61.44" : "0.0.0-dev";
38859
38926
  const apiBase2 = resolveApiBaseUrl();
38860
38927
  const diagnosticId = (0, import_node_crypto13.randomUUID)();
38861
38928
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -39366,7 +39433,7 @@ async function mcpRun(args2) {
39366
39433
  // src/commands/version.ts
39367
39434
  var import_picocolors15 = __toESM(require("picocolors"));
39368
39435
  function version2() {
39369
- const v = true ? "2.61.42" : "unknown";
39436
+ const v = true ? "2.61.44" : "unknown";
39370
39437
  console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
39371
39438
  }
39372
39439
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.61.42",
3
+ "version": "2.61.44",
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",