meta(changelog): Update changelog for 11.1.0 - #24796
Merged
Merged
Conversation
…on mode (#24440) Stacked on #24437. When `reactComponentAnnotation._experimentalInjectIntoHtml` was set, annotation always went through Babel, even on Vite 8. This PR ports that mode to the fast walker, so every Rollup and Vite build now uses the fast path. The next step moves Webpack and the Next.js Turbopack loader over, and after that Babel can be removed. HTML mode finds components the same way as the normal mode. The difference is in how it handles JSX. It adds only `data-sentry-component`, and only to the first HTML elements below each component root, looking through fragments and component elements to find them. The port keeps two Babel quirks so the output stays the same: element names starting with `_` or `$` count as HTML elements, and anonymous classes get `data-sentry-component=""`. The new tests compare the walker with the Babel HTML plugin on both `@babel/parser` and `oxc-parser` output. Ref #24415
…Turbopack (#24448) Stacked on #24440. Webpack and the Next.js Turbopack loader still annotated React components with Babel. This PR moves them to the fast oxc-based path, so every bundler integration now uses it. Babel stays as the fallback when `oxc-parser` cannot load or cannot parse a file. The next PR in the stack removes that fallback. `createComponentNameAnnotateHooks` now tries the fast path first and uses Babel only when the fast path does not handle the file. Webpack, the Rollup and Vite plugins, and the Turbopack loader already call this function, so the Rollup plugin no longer needs its own fast-path setup. The fast path's source maps listed each annotated file by its base name only, which dropped the directory. That is the bug from #23561, which was fixed for the Babel path, and it would have come back for Webpack. The maps now keep the full path, so Rollup and Vite builds that use the fast path get full paths too. Ref #24415
…#24449) Stacked on #24448. Every bundler integration now annotates React components with the fast oxc-based path. This PR removes the Babel fallback from that path, so `@babel/core` is no longer a runtime dependency of `@sentry/bundler-plugins`. The `@sentry/bundler-plugins/babel-plugin` export stays, because the React Native SDK uses it with Metro. The plugin only imports Babel types and runs inside the user's own Babel. So `@babel/core` moves to `devDependencies` and becomes an optional peer dependency, and the export keeps working. Without the fallback, `oxc-parser` leaves a file it cannot parse unchanged, and the bundler reports the syntax error. If no parser can load, for example on a platform without an `oxc-parser` native binary, the plugin logs one warning and skips annotations. Fixes #24415
# Conflicts: # packages/bundler-plugins/package.json
Widens the tedious version range to `<21` so tedious 20.x gets instrumented. tedious 20 only drops support for Node < 22; the `Connection` methods and fields we use are unchanged. Adds a test that runs the tedious suite against v20. It only runs on Node 22+, because tedious 20 requires Node 22. Fixes #24643 Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
chore: Manually sync master into develop
This is an initial proposal for a minimal package README format that keeps detailed guidance in the docs, starting off with simplifying the NestJS SDK README. Once this is in, I'll get started on updating the remaining package README's. --------- Co-authored-by: GPT-6 <codex@openai.com>
similar to #24618 but for @sentry/hono Co-authored-by: GPT-6 <codex@openai.com>
similar to #24618 but for @sentry/solidstart --------- Co-authored-by: GPT-6 <codex@openai.com>
similar to #24618 but for @sentry/angular Co-authored-by: GPT-6 <codex@openai.com>
similar to #24618 but for @sentry/cloudflare Co-authored-by: GPT-6 <codex@openai.com>
similar to #24618 but for @sentry/react-router --------- Co-authored-by: GPT-6 <codex@openai.com>
similar to #24618 but for @sentry/astro --------- Co-authored-by: GPT-6 <codex@openai.com>
similar to #24618 but for @sentry/aws-serverless Co-authored-by: GPT-6 <codex@openai.com>
similar to #24618 but for @sentry/ember Co-authored-by: GPT-6 <codex@openai.com>
similar to #24618 but for @sentry/remix Co-authored-by: GPT-6 <codex@openai.com>
similar to #24618 but for @sentry/nextjs, @sentry/nuxt, @sentry/sveltekit, and @sentry/tanstackstart-react --------- Co-authored-by: GPT-6 <codex@openai.com>
similar to #24618 but for @sentry/browser, @sentry/react, @sentry/vue, @sentry/svelte, @sentry/solid, and @sentry/gatsby --------- Co-authored-by: GPT-6 <codex@openai.com>
similar to #24618 but for @sentry/node, @sentry/bun, @sentry/deno, and @sentry/google-cloud-serverless --------- Co-authored-by: GPT-6 <codex@openai.com>
similar to #24618 but for @sentry/effect, @sentry/elysia, and @sentry/wasm --------- Co-authored-by: GPT-6 <codex@openai.com>
similar to #24618 but for @sentry/core, @sentry/browser-utils, @sentry/server-utils, @sentry/vercel-edge, @sentry/server-runtime-injection, @sentry-internal/integration-shims, and @sentry-internal/replay-worker --------- Co-authored-by: GPT-6 <codex@openai.com>
similar to #24618 but for @sentry/replay, @sentry/replay-canvas, and @sentry/feedback Co-authored-by: GPT-6 <codex@openai.com>
similar to #24618 but for @sentry/nitro --------- Co-authored-by: GPT-6 <codex@openai.com>
Export `instrumentMistralAiClient` from the SvelteKit and Remix server entry points, matching their existing AI manual wrappers. Completes the wrapper exports for #24243. --------- Co-authored-by: GPT-6 <codex@openai.com>
Widens the amqplib range to `<3`. amqplib 2 only changes what `heartbeat: 0` means; the code we instrument is unchanged. Adds 2.x to the integration test matrix and relabels the old `v2` row, which actually ran 0.10.x, as `v0`. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Bumps conventions and uses the newly released attributes: - `BROWSER_WEB_VITAL_INP_TARGET`, - `BROWSER_WEB_VITAL_INP_INTERACTION_TYPE`, - `SENTRY_IS_LOCALHOST` and - `UI_RESOLVE` Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
similar to #24618 but for @sentry/opentelemetry --------- Co-authored-by: GPT-6 <codex@openai.com>
Our Turbopack loaders imported helpers from `@sentry/bundler-plugins/core`, which also loads the `sentry` CLI package. The loaders need only two small helpers, so this adds a separate internal entry point, `@sentry/bundler-plugins/loader-utils`, that exports just those and doesn't touch the CLI. This came up because the Next.js 16 canary build with Turbopack fails: Turbopack follows the loaders' imports into the CLI package and tries to compile one of its TypeScript type files (`index.d.cts`) as code. That's a bug on the Next.js side, but the loaders shouldn't pull in the CLI in the first place. Fixes #24650 Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
similar to #24618 but for @sentry/bundler-plugins, @sentry/typescript, @sentry/eslint-config-sdk, and @sentry/eslint-plugin-sdk --------- Co-authored-by: GPT-6 <codex@openai.com>
similar to #24618 but for @sentry/profiling-node and @sentry/node-native --------- Co-authored-by: GPT-6 <codex@openai.com>
## What `showReportDialog` accepts a new `onError` callback. The SDK calls it when the dialog cannot be shown: the dialog script fails to load, or there is no event ID. ## Why Ad blockers or network problems can block the dialog script, and there was no way to detect it. Apps can now tell users why the dialog did not open. Closes: #24765 --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Adds a `cloudflare-think` e2e app that records what a Think agent
produces with the SDK as it stands today, before any Think-specific code
exists. Same shape as `node-eve` and `cloudflare-mastra`.
The setup is the whole point: the worker imports no Sentry API at all.
```ts
// vite.config.mts
export default defineConfig({
plugins: [cloudflare(), sentryCloudflareVitePlugin()],
});
```
```ts
// src/index.ts
export class ThinkAgent extends Think<Env> {
getModel() { return openrouter('openai/gpt-4o-mini'); }
getSystemPrompt() { /* ... */ }
getTools() { /* get_weather, fail_now */ }
}
```
`sentryCloudflareVitePlugin()` detects `extends Think` and wraps the
export at build time, and `ai` publishes the telemetry
`vercelAIIntegration` already consumes. Options come from
`src/instrument.server.ts` by convention.
## What works today
Five checks, the same set the other AI apps cover:
1. **The gen_ai hierarchy.** `gen_ai.invoke_agent`, one
`gen_ai.generate_content` per step, and `gen_ai.execute_tool`, correctly
nested and all with origin `auto.vercelai.channel`. Token usage is right
per step and rolls up onto the agent span; prompts, tool arguments and
results, tool definitions and finish reasons are all present.
2. **Tool errors.** A throw becomes an issue with mechanism
`auto.vercelai.channel` and marks only its own span errored, leaving the
model calls `ok`.
3. **Manual spans.** A `Sentry.startSpan` raised inside a tool nests
under that tool's span, so Think runs tools inside the async context the
SDK opened.
4. **The provider request.** The outgoing model call joins the turn's
trace rather than running beside it.
5. **Other instrumented libraries.** `dataloader` spans land in the same
trace, so the orchestrion module transform reaches a bundled Think
worker with no `--import` bootstrap, unlike the Node apps.
## What does not
The provider HTTP call nests under `gen_ai.generate_content` on `ai` v7
but is a sibling of it on v4 to v6. That difference is ours: only v7's
native channel binds the model-call span into async context. Asserted
per lane so the gap is recorded rather than hidden.
The agent span is named from `this.constructor.name`, which the Vite
plugin's class rename currently mangles into `invoke_agent
__SENTRY_ORIGINAL_ThinkAgent__`. Not asserted here. A follow-up fixes it
and adds the assertion.
There is no `gen_ai.agent.name`, and none of the
`cloudflare.agents.turn.*` context Think supplies (agent id, Durable
Object conversation id, turn trigger, continuation) reaches a span.
Think sends all of it, as `runtimeContext` on v7 and
`experimental_telemetry.metadata` on v6, and neither subscriber reads
either field.
## Notes
`sentryTest.optional: true` keeps this in the optional matrix like
`node-eve`, since it makes real OpenRouter calls. The v6 lane rides
along as an `optionalVariants` entry rather than a second app.
`E2E_OPENROUTER_API_KEY` is already wired in `build.yml` from the eve
PR, so CI needs no change.
ref JS-3568
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
…ges (#24792) Turbopack runs webpack loaders in a separate process, once per matched file. Our orchestrion rule matched every server-side JS file, including all of `node_modules`. Large apps paid that cost for files the transform never touches. The reporter's build went from 2 minutes to a 45 minute Vercel timeout after upgrading to v11, where build-time instrumentation is on by default. The rule now has a `path` condition that only matches files inside instrumented packages. It matches `node_modules/<name>/` anywhere in the path, so hoisted, workspace, scoped and pnpm layouts all work. The loader already skipped every other file, so the set of transformed modules does not change. Next.js 16.0.0 already supports RegExp `path` conditions. The webpack path is unchanged. Webpack runs loaders in process, so the broad rule is cheap there. Fixes #24764 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
`McpServer` instances currently only produce spans when the user
manually calls `wrapMcpServerWithSentry`. This adds an `mcpServer`
integration (default, tracing) that wraps every `McpServer` at
construction through an orchestrion constructor hook, so no manual call
is needed.
Both SDK families are covered: `@modelcontextprotocol/server` (v2) —
whose `McpServer` lives in a content-hashed tsdown chunk, so it's
matched by a regex `filePath` with `className: 'McpServer'` as the real
selector, the same shape `mastra.ts` uses — and
`@modelcontextprotocol/sdk` (v1). The subscriber just hands the
constructed instance to the existing `wrapMcpServerWithSentry`, reusing
all of its transport/handler instrumentation rather than reimplementing
anything.
`wrapMcpServerWithSentry` stays fully supported. Re-wrapping an
already-wrapped instance never patches it twice, but capture options are
tracked per server (WeakMap): a later call fills in
`recordInputs`/`recordOutputs` left unset by an earlier wrap. So the
auto-wrap's defaults yield to a later manual override — a user can still
`wrapMcpServerWithSentry(server, { recordInputs: false })` to opt out —
while an explicit first wrap still wins. The transport reads these
options per message.
`mcpServerIntegration` is re-exported from the runtime packages that
surface the other tracing integrations (node, bun, deno, elysia, aws/gcp
serverless, astro), alongside `mastraIntegration`.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
andreiborza
force-pushed
the
prepare-release/11.1.0
branch
from
September 28, 2026 13:52
87af887 to
76df2a3
Compare
andreiborza
marked this pull request as ready for review
September 28, 2026 13:55
andreiborza
requested review from
JPeer264,
Lms24,
isaacs,
logaretm,
nicohrubec and
s1gr1d
and removed request for
a team
September 28, 2026 13:55
chargome
approved these changes
Sep 28, 2026
nicohrubec
approved these changes
Sep 28, 2026
Lms24
approved these changes
Sep 28, 2026
Contributor
size-limit report 📦
|
…ntegration (#24797) ## What The MCP server integration now uses the shared diagnostics channel wrappers, so its subscription stays alive on Bun. ## Why #24529 and #24632 merged at the same time, and the direct `node:diagnostics_channel` import now fails lint on `develop` and on the 11.1.0 release PR. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
andreiborza
force-pushed
the
prepare-release/11.1.0
branch
from
September 28, 2026 14:23
76df2a3 to
c977a05
Compare
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
andreiborza
force-pushed
the
prepare-release/11.1.0
branch
from
September 28, 2026 14:24
c977a05 to
816e546
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.