codeam-cli 2.60.61 → 2.60.63

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.60.62] — 2026-07-15
8
+
9
+ ### Added
10
+
11
+ - **shared:** Add Linear as a live Agent Toolkit integration
12
+
13
+ ## [2.60.61] — 2026-07-15
14
+
15
+ ### Added
16
+
17
+ - **shared:** Sentry full read+write scopes + --add-scopes on the MCP server
18
+
7
19
  ## [2.60.60] — 2026-07-14
8
20
 
9
21
  ### Added
package/dist/index.js CHANGED
@@ -572,6 +572,93 @@ var INTEGRATION_REGISTRY = {
572
572
  }
573
573
  }
574
574
  }
575
+ },
576
+ linear: {
577
+ id: "linear",
578
+ name: "Linear",
579
+ icon: "linear",
580
+ // LIVE — the Linear OAuth Application (Public + Confidential) is registered
581
+ // and LINEAR_OAUTH_CLIENT_ID/SECRET/REDIRECT_URI are in Secret Manager
582
+ // (prod+dev). The backend LinearOAuthProvider is config-gated (503 if env
583
+ // unset) so this is safe even mid-rollout before the secrets mount.
584
+ enabled: true,
585
+ auth: {
586
+ kind: "oauth_redirect",
587
+ // Linear's coarse scopes: `read` (all issues/projects/comments/cycles)
588
+ // + `write` (create/update issues, comments, state). `write` implies the
589
+ // create/update surface the agent's tools need. `admin` (destructive
590
+ // workspace management) is deliberately NOT requested. ⚠️ Changing these
591
+ // requires the user to RE-LINK Linear — the token only carries the scopes
592
+ // granted at link time. Linear expects a COMMA-separated `scope` param.
593
+ scopes: ["read", "write"]
594
+ },
595
+ delivery: {
596
+ mcp: {
597
+ // mcp-linear (stdio, @linear/sdk) in BYO-token headless mode: the OAuth
598
+ // access token is fed via LINEAR_API_KEY (env only, never argv) and the
599
+ // Linear GraphQL API accepts it as the Authorization header directly.
600
+ // Verified headless end-to-end (search_issues returned real issues) —
601
+ // the OFFICIAL remote MCP (mcp.linear.app) can't be used here because it
602
+ // forces its own interactive browser OAuth. Version PINNED; bump only
603
+ // after re-verifying headless. Tools: search/get/create/update issue +
604
+ // add comment (read + write).
605
+ command: "npx",
606
+ args: ["-y", "mcp-linear@0.1.8"],
607
+ envMapping: {
608
+ LINEAR_API_KEY: "accessToken"
609
+ }
610
+ }
611
+ }
612
+ },
613
+ slack: {
614
+ id: "slack",
615
+ name: "Slack",
616
+ icon: "slack",
617
+ // LIVE — the Slack app (OAuth v2, bot token) is registered and
618
+ // SLACK_OAUTH_CLIENT_ID/SECRET/REDIRECT_URI are in Secret Manager
619
+ // (prod+dev). The backend SlackOAuthProvider is config-gated (503 if env
620
+ // unset) so this is safe even mid-rollout before the secrets mount.
621
+ enabled: true,
622
+ auth: {
623
+ kind: "oauth_redirect",
624
+ // Slack Bot Token Scopes (OAuth v2). Read + write across channels,
625
+ // groups, DMs: list/read history, post messages, react. `scope` is
626
+ // COMMA-separated in the authorize URL. ⚠️ Changing these requires the
627
+ // user to RE-INSTALL the Slack app — the bot token only carries the
628
+ // scopes granted at install time. The bot can only read channels it's
629
+ // been invited to (standard Slack bot behavior).
630
+ scopes: [
631
+ "channels:read",
632
+ "channels:history",
633
+ "groups:read",
634
+ "groups:history",
635
+ "chat:write",
636
+ "reactions:read",
637
+ "reactions:write",
638
+ "users:read",
639
+ "im:read",
640
+ "im:history",
641
+ "mpim:read",
642
+ "mpim:history"
643
+ ]
644
+ },
645
+ delivery: {
646
+ mcp: {
647
+ // Slack's official reference MCP server (Node). BYO-token headless: the
648
+ // OAuth v2 bot token (xoxb-…) is fed via SLACK_BOT_TOKEN and the team
649
+ // id via SLACK_TEAM_ID (env only, never argv). The server sends the
650
+ // token as `Authorization: Bearer`. Version PINNED; bump only after
651
+ // re-verifying headless. Tools: list_channels, post_message,
652
+ // reply_to_thread, add_reaction, get_channel_history,
653
+ // get_thread_replies, get_users, get_user_profile (read + write).
654
+ command: "npx",
655
+ args: ["-y", "@modelcontextprotocol/server-slack@2025.4.25"],
656
+ envMapping: {
657
+ SLACK_BOT_TOKEN: "accessToken",
658
+ SLACK_TEAM_ID: "teamId"
659
+ }
660
+ }
661
+ }
575
662
  }
576
663
  };
577
664
  function getIntegration(id) {
@@ -5800,7 +5887,7 @@ function readAnonId() {
5800
5887
  }
5801
5888
  function superProperties() {
5802
5889
  return {
5803
- cliVersion: true ? "2.60.61" : "0.0.0-dev",
5890
+ cliVersion: true ? "2.60.63" : "0.0.0-dev",
5804
5891
  nodeVersion: process.version,
5805
5892
  platform: process.platform,
5806
5893
  arch: process.arch,
@@ -5981,7 +6068,7 @@ var os4 = __toESM(require("os"));
5981
6068
  // package.json
5982
6069
  var package_default = {
5983
6070
  name: "codeam-cli",
5984
- version: "2.60.61",
6071
+ version: "2.60.63",
5985
6072
  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.",
5986
6073
  type: "commonjs",
5987
6074
  main: "dist/index.js",
@@ -7090,7 +7177,7 @@ var CommandRelayService = class {
7090
7177
  // fresh + clear the "CLI update available" banner after a self-update
7091
7178
  // (a codespace that reinstalls @latest reconnects via heartbeat, not
7092
7179
  // pair/reconnect). Older backends ignore the extra field.
7093
- ..."2.60.61" ? { ideVersion: "2.60.61" } : {}
7180
+ ..."2.60.63" ? { ideVersion: "2.60.63" } : {}
7094
7181
  }).then(() => log.trace("relay", `heartbeat ok online=${online}`)).catch((err) => log.trace("relay", `heartbeat failed online=${online}`, err));
7095
7182
  }
7096
7183
  /**
@@ -17667,7 +17754,7 @@ async function autoUpgradeBeforeCriticalCommand() {
17667
17754
  if (process.env.NODE_ENV === "test") return;
17668
17755
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
17669
17756
  if (process.env.CI) return;
17670
- const current = true ? "2.60.61" : null;
17757
+ const current = true ? "2.60.63" : null;
17671
17758
  if (!current) return;
17672
17759
  const cache = readCache();
17673
17760
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -17684,7 +17771,7 @@ function checkForUpdates() {
17684
17771
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
17685
17772
  if (process.env.CI) return;
17686
17773
  if (!process.stdout.isTTY) return;
17687
- const current = true ? "2.60.61" : null;
17774
+ const current = true ? "2.60.63" : null;
17688
17775
  if (!current) return;
17689
17776
  const cache = readCache();
17690
17777
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -17704,7 +17791,7 @@ var SELF_UPDATE_INTERVAL_MS = 60 * 60 * 1e3;
17704
17791
  var SELF_UPDATE_VIEW_TIMEOUT_MS = 3e4;
17705
17792
  var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
17706
17793
  function currentCliVersion() {
17707
- return true ? "2.60.61" : null;
17794
+ return true ? "2.60.63" : null;
17708
17795
  }
17709
17796
  function runCmd(cmd, args2, timeoutMs) {
17710
17797
  return new Promise((resolve7) => {
@@ -35133,7 +35220,7 @@ function checkChokidar() {
35133
35220
  }
35134
35221
  async function doctor(args2 = []) {
35135
35222
  const json = args2.includes("--json");
35136
- const cliVersion = true ? "2.60.61" : "0.0.0-dev";
35223
+ const cliVersion = true ? "2.60.63" : "0.0.0-dev";
35137
35224
  const apiBase2 = resolveApiBaseUrl();
35138
35225
  const diagnosticId = (0, import_node_crypto12.randomUUID)();
35139
35226
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -35610,7 +35697,7 @@ async function mcpRun(args2) {
35610
35697
  // src/commands/version.ts
35611
35698
  var import_picocolors15 = __toESM(require("picocolors"));
35612
35699
  function version2() {
35613
- const v = true ? "2.60.61" : "unknown";
35700
+ const v = true ? "2.60.63" : "unknown";
35614
35701
  console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
35615
35702
  }
35616
35703
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.60.61",
3
+ "version": "2.60.63",
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",