codeam-cli 2.60.60 → 2.60.62

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.61] — 2026-07-15
8
+
9
+ ### Added
10
+
11
+ - **shared:** Sentry full read+write scopes + --add-scopes on the MCP server
12
+
13
+ ## [2.60.60] — 2026-07-14
14
+
15
+ ### Added
16
+
17
+ - **shared:** Use Sentry's official mark for the integration catalog icon
18
+
7
19
  ## [2.60.59] — 2026-07-14
8
20
 
9
21
  ### Added
package/dist/index.js CHANGED
@@ -531,12 +531,25 @@ var INTEGRATION_REGISTRY = {
531
531
  enabled: true,
532
532
  auth: {
533
533
  kind: "oauth_redirect",
534
- // Sentry OAuth scopes for the MCP's read-first surface: read orgs /
535
- // projects / teams, read issues+events (the error→fix loop), and
536
- // read releases. `org:read` covers org+project discovery. No write
537
- // scopes in the MVP — writes (resolve/assign an issue) land with the
538
- // designed Approval-Gates phase, same as Jira's write path.
539
- scopes: ["org:read", "project:read", "team:read", "event:read", "project:releases"]
534
+ // FULL read+write across every Sentry resource the agent can read
535
+ // issues/events/projects AND act (resolve/assign issues, manage
536
+ // projects/teams/members, releases). `:write` implies `:read`. Admin
537
+ // (destructive org/member management) is deliberately NOT requested.
538
+ // ⚠️ Changing these requires the user to RE-LINK Sentry — the existing
539
+ // token only carries whatever scopes it was granted at link time.
540
+ scopes: [
541
+ "org:read",
542
+ "org:write",
543
+ "project:read",
544
+ "project:write",
545
+ "team:read",
546
+ "team:write",
547
+ "member:read",
548
+ "member:write",
549
+ "event:read",
550
+ "event:write",
551
+ "project:releases"
552
+ ]
540
553
  },
541
554
  delivery: {
542
555
  mcp: {
@@ -545,13 +558,57 @@ var INTEGRATION_REGISTRY = {
545
558
  // SENTRY_HOST (never argv — env only). Version PINNED; bump only
546
559
  // after re-verifying headless in the mcp-shim integration test.
547
560
  command: "npx",
548
- args: ["-y", "@sentry/mcp-server@0.18.0"],
561
+ // `--add-scopes` widens the server's default READ-ONLY tool surface to
562
+ // include the write tools our OAuth scopes now grant (resolve/assign
563
+ // issue, update project, etc.), so the agent exposes read AND write.
564
+ args: [
565
+ "-y",
566
+ "@sentry/mcp-server@0.18.0",
567
+ "--add-scopes=org:write,project:write,team:write,member:write,event:write"
568
+ ],
549
569
  envMapping: {
550
570
  SENTRY_ACCESS_TOKEN: "accessToken",
551
571
  SENTRY_HOST: "host"
552
572
  }
553
573
  }
554
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
+ }
555
612
  }
556
613
  };
557
614
  function getIntegration(id) {
@@ -5780,7 +5837,7 @@ function readAnonId() {
5780
5837
  }
5781
5838
  function superProperties() {
5782
5839
  return {
5783
- cliVersion: true ? "2.60.60" : "0.0.0-dev",
5840
+ cliVersion: true ? "2.60.62" : "0.0.0-dev",
5784
5841
  nodeVersion: process.version,
5785
5842
  platform: process.platform,
5786
5843
  arch: process.arch,
@@ -5961,7 +6018,7 @@ var os4 = __toESM(require("os"));
5961
6018
  // package.json
5962
6019
  var package_default = {
5963
6020
  name: "codeam-cli",
5964
- version: "2.60.60",
6021
+ version: "2.60.62",
5965
6022
  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.",
5966
6023
  type: "commonjs",
5967
6024
  main: "dist/index.js",
@@ -7070,7 +7127,7 @@ var CommandRelayService = class {
7070
7127
  // fresh + clear the "CLI update available" banner after a self-update
7071
7128
  // (a codespace that reinstalls @latest reconnects via heartbeat, not
7072
7129
  // pair/reconnect). Older backends ignore the extra field.
7073
- ..."2.60.60" ? { ideVersion: "2.60.60" } : {}
7130
+ ..."2.60.62" ? { ideVersion: "2.60.62" } : {}
7074
7131
  }).then(() => log.trace("relay", `heartbeat ok online=${online}`)).catch((err) => log.trace("relay", `heartbeat failed online=${online}`, err));
7075
7132
  }
7076
7133
  /**
@@ -17647,7 +17704,7 @@ async function autoUpgradeBeforeCriticalCommand() {
17647
17704
  if (process.env.NODE_ENV === "test") return;
17648
17705
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
17649
17706
  if (process.env.CI) return;
17650
- const current = true ? "2.60.60" : null;
17707
+ const current = true ? "2.60.62" : null;
17651
17708
  if (!current) return;
17652
17709
  const cache = readCache();
17653
17710
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -17664,7 +17721,7 @@ function checkForUpdates() {
17664
17721
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
17665
17722
  if (process.env.CI) return;
17666
17723
  if (!process.stdout.isTTY) return;
17667
- const current = true ? "2.60.60" : null;
17724
+ const current = true ? "2.60.62" : null;
17668
17725
  if (!current) return;
17669
17726
  const cache = readCache();
17670
17727
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -17684,7 +17741,7 @@ var SELF_UPDATE_INTERVAL_MS = 60 * 60 * 1e3;
17684
17741
  var SELF_UPDATE_VIEW_TIMEOUT_MS = 3e4;
17685
17742
  var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
17686
17743
  function currentCliVersion() {
17687
- return true ? "2.60.60" : null;
17744
+ return true ? "2.60.62" : null;
17688
17745
  }
17689
17746
  function runCmd(cmd, args2, timeoutMs) {
17690
17747
  return new Promise((resolve7) => {
@@ -35113,7 +35170,7 @@ function checkChokidar() {
35113
35170
  }
35114
35171
  async function doctor(args2 = []) {
35115
35172
  const json = args2.includes("--json");
35116
- const cliVersion = true ? "2.60.60" : "0.0.0-dev";
35173
+ const cliVersion = true ? "2.60.62" : "0.0.0-dev";
35117
35174
  const apiBase2 = resolveApiBaseUrl();
35118
35175
  const diagnosticId = (0, import_node_crypto12.randomUUID)();
35119
35176
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -35590,7 +35647,7 @@ async function mcpRun(args2) {
35590
35647
  // src/commands/version.ts
35591
35648
  var import_picocolors15 = __toESM(require("picocolors"));
35592
35649
  function version2() {
35593
- const v = true ? "2.60.60" : "unknown";
35650
+ const v = true ? "2.60.62" : "unknown";
35594
35651
  console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
35595
35652
  }
35596
35653
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.60.60",
3
+ "version": "2.60.62",
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",