Skip to content

Commit 8e31b03

Browse files
committed
Merge branch 'develop' into nh/rename-messages-attribute
2 parents 97620eb + 2de71df commit 8e31b03

68 files changed

Lines changed: 1531 additions & 813 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/skills/e2e/SKILL.md

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
---
2+
name: e2e
3+
description: Run E2E tests for Sentry JavaScript SDK test applications
4+
argument-hint: <test-app-name> [--variant <variant-name>]
5+
---
6+
7+
# E2E Test Runner Skill
8+
9+
This skill runs end-to-end tests for Sentry JavaScript SDK test applications. It ensures SDK packages are built before running tests.
10+
11+
## Input
12+
13+
The user provides a test application name and optionally a variant:
14+
15+
- `e2e-tests/test-applications/nextjs-app-dir` (full path)
16+
- `nextjs-app-dir` (just the app name)
17+
- `nextjs-app-dir --variant nextjs-15` (with variant)
18+
19+
## Workflow
20+
21+
### Step 1: Parse the Test Application Name
22+
23+
Extract the test app name from user input:
24+
25+
- Strip `e2e-tests/test-applications/` prefix if present
26+
- Extract variant flag if provided (e.g., `--variant nextjs-15`)
27+
- Store the clean app name (e.g., `nextjs-app-dir`)
28+
29+
### Step 2: Determine Which Packages Need Rebuilding
30+
31+
If the user recently edited files in `packages/*`, identify which packages were modified:
32+
33+
```bash
34+
# Check which packages have uncommitted changes (including untracked files)
35+
git status --porcelain | grep "^[ MARC?][ MD?] packages/" | cut -d'/' -f2 | sort -u
36+
```
37+
38+
For each modified package, rebuild its tarball:
39+
40+
```bash
41+
cd packages/<package-name>
42+
yarn build && yarn build:tarball
43+
cd ../..
44+
```
45+
46+
**Option C: User Specifies Packages**
47+
48+
If the user says "I changed @sentry/node" or similar, rebuild just that package:
49+
50+
```bash
51+
cd packages/node
52+
yarn build && yarn build:tarball
53+
cd ../..
54+
```
55+
56+
### Step 3: Verify Test Application Exists
57+
58+
Check that the test app exists:
59+
60+
```bash
61+
ls -d dev-packages/e2e-tests/test-applications/<app-name>
62+
```
63+
64+
If it doesn't exist, list available test apps:
65+
66+
```bash
67+
ls dev-packages/e2e-tests/test-applications/
68+
```
69+
70+
Ask the user which one they meant.
71+
72+
### Step 4: Run the E2E Test
73+
74+
Navigate to the e2e-tests directory and run the test:
75+
76+
```bash
77+
cd dev-packages/e2e-tests
78+
yarn test:run <app-name>
79+
```
80+
81+
If a variant was specified:
82+
83+
```bash
84+
cd dev-packages/e2e-tests
85+
yarn test:run <app-name> --variant <variant-name>
86+
```
87+
88+
### Step 5: Report Results
89+
90+
After the test completes, provide a summary:
91+
92+
**If tests passed:**
93+
94+
```
95+
✅ E2E tests passed for <app-name>
96+
97+
All tests completed successfully. Your SDK changes work correctly with this test application.
98+
```
99+
100+
**If tests failed:**
101+
102+
```
103+
❌ E2E tests failed for <app-name>
104+
105+
[Include relevant error output]
106+
```
107+
108+
**If package rebuild was needed:**
109+
110+
```
111+
📦 Rebuilt SDK packages: <list of packages>
112+
🧪 Running E2E tests for <app-name>...
113+
```
114+
115+
## Error Handling
116+
117+
- **No tarballs found**: Run `yarn build && yarn build:tarball` at repository root
118+
- **Test app not found**: List available apps and ask user to clarify
119+
- **Verdaccio not running**: Tests should start Verdaccio automatically, but if issues occur, check Docker
120+
- **Build failures**: Fix build errors before running tests
121+
122+
## Common Test Applications
123+
124+
Here are frequently tested applications:
125+
126+
- `nextjs-app-dir` - Next.js App Router
127+
- `nextjs-15` - Next.js 15.x
128+
- `react-create-hash-router` - React with React Router
129+
- `node-express-esm-loader` - Node.js Express with ESM
130+
- `sveltekit-2` - SvelteKit 2.x
131+
- `remix-2` - Remix 2.x
132+
- `nuxt-3` - Nuxt 3.x
133+
134+
To see all available test apps:
135+
136+
```bash
137+
ls dev-packages/e2e-tests/test-applications/
138+
```
139+
140+
## Example Workflows
141+
142+
### Example 1: After modifying @sentry/node
143+
144+
```bash
145+
# User: "Run e2e tests for node-express-esm-loader"
146+
147+
# Step 1: Detect recent changes to packages/node
148+
# Step 2: Rebuild the modified package
149+
cd packages/node
150+
yarn build && yarn build:tarball
151+
cd ../..
152+
153+
# Step 3: Run the test
154+
cd dev-packages/e2e-tests
155+
yarn test:run node-express-esm-loader
156+
```
157+
158+
### Example 2: First-time test run
159+
160+
```bash
161+
# User: "Run e2e tests for nextjs-app-dir"
162+
163+
# Step 1: Check for existing tarballs
164+
# Step 2: None found, build all packages
165+
yarn build && yarn build:tarball
166+
167+
# Step 3: Run the test
168+
cd dev-packages/e2e-tests
169+
yarn test:run nextjs-app-dir
170+
```
171+
172+
### Example 3: With variant
173+
174+
```bash
175+
# User: "Run e2e tests for nextjs-app-dir with nextjs-15 variant"
176+
177+
# Step 1: Rebuild if needed
178+
# Step 2: Run with variant
179+
cd dev-packages/e2e-tests
180+
yarn test:run nextjs-app-dir --variant nextjs-15
181+
```
182+
183+
## Tips
184+
185+
- **Always rebuild after SDK changes**: Tarballs contain the compiled SDK code
186+
- **Watch build output**: Build errors must be fixed before testing
187+
188+
## Integration with Development Workflow
189+
190+
This skill integrates with the standard SDK development workflow:
191+
192+
1. Make changes to SDK code in `packages/*`
193+
2. Run `/e2e <app-name>` to test your changes
194+
3. Fix any test failures
195+
196+
The skill automates the tedious parts of:
197+
198+
- Remembering to rebuild tarballs
199+
- Navigating to the correct directory
200+
- Running tests with the right flags

.size-limit.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -96,21 +96,21 @@ module.exports = [
9696
path: 'packages/browser/build/npm/esm/prod/index.js',
9797
import: createImport('init', 'feedbackIntegration'),
9898
gzip: true,
99-
limit: '42 KB',
99+
limit: '43 KB',
100100
},
101101
{
102102
name: '@sentry/browser (incl. sendFeedback)',
103103
path: 'packages/browser/build/npm/esm/prod/index.js',
104104
import: createImport('init', 'sendFeedback'),
105105
gzip: true,
106-
limit: '30 KB',
106+
limit: '31 KB',
107107
},
108108
{
109109
name: '@sentry/browser (incl. FeedbackAsync)',
110110
path: 'packages/browser/build/npm/esm/prod/index.js',
111111
import: createImport('init', 'feedbackAsyncIntegration'),
112112
gzip: true,
113-
limit: '35 KB',
113+
limit: '36 KB',
114114
},
115115
{
116116
name: '@sentry/browser (incl. Metrics)',
@@ -140,7 +140,7 @@ module.exports = [
140140
import: createImport('init', 'ErrorBoundary'),
141141
ignore: ['react/jsx-runtime'],
142142
gzip: true,
143-
limit: '27 KB',
143+
limit: '28 KB',
144144
},
145145
{
146146
name: '@sentry/react (incl. Tracing)',
@@ -208,7 +208,7 @@ module.exports = [
208208
name: 'CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics)',
209209
path: createCDNPath('bundle.tracing.replay.feedback.logs.metrics.min.js'),
210210
gzip: true,
211-
limit: '86 KB',
211+
limit: '87 KB',
212212
},
213213
// browser CDN bundles (non-gzipped)
214214
{
@@ -223,7 +223,7 @@ module.exports = [
223223
path: createCDNPath('bundle.tracing.min.js'),
224224
gzip: false,
225225
brotli: false,
226-
limit: '127 KB',
226+
limit: '128 KB',
227227
},
228228
{
229229
name: 'CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed',
@@ -278,7 +278,7 @@ module.exports = [
278278
import: createImport('init'),
279279
ignore: [...builtinModules, ...nodePrefixedBuiltinModules],
280280
gzip: true,
281-
limit: '52 KB',
281+
limit: '53 KB',
282282
},
283283
// Node SDK (ESM)
284284
{

CHANGELOG.md

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,26 @@
44

55
- "You miss 100 percent of the chances you don't take. — Wayne Gretzky" — Michael Scott
66

7-
Work in this release was contributed by @sebws. Thank you for your contribution!
7+
Work in this release was contributed by @sebws and @harshit078. Thank you for your contributions!
8+
9+
- **feat(core): Introduces a new `Sentry.setConversationId()` API to track multi turn AI conversations across API calls. ([#18909](https://github.com/getsentry/sentry-javascript/pull/18909))**
10+
11+
You can now set a conversation ID that will be automatically applied to spans within that scope. This allows you to link traces from the same conversation together.
12+
13+
```javascript
14+
import * as Sentry from '@sentry/node';
15+
16+
// Set conversation ID for all subsequent spans
17+
Sentry.setConversationId('conv_abc123');
18+
19+
// All AI spans will now include the gen_ai.conversation.id attribute
20+
await openai.chat.completions.create({...});
21+
```
22+
23+
This is particularly useful for tracking multiple AI API calls that are part of the same conversation, allowing you to analyze entire conversation flows in Sentry.
24+
The conversation ID is stored on the isolation scope and automatically applied to spans via the new `conversationIdIntegration`.
25+
26+
### Important Changes
827

928
- **feat(tanstackstart-react): Auto-instrument global middleware in `sentryTanstackStart` Vite plugin ([#18884](https://github.com/getsentry/sentry-javascript/pull/18844))**
1029

@@ -24,6 +43,8 @@ Work in this release was contributed by @sebws. Thank you for your contribution!
2443

2544
### Other Changes
2645

46+
- feat(deps): Bump OpenTelemetry instrumentations ([#18934](https://github.com/getsentry/sentry-javascript/pull/18934))
47+
2748
## 10.36.0
2849

2950
- feat(node): Add Prisma v7 support ([#18908](https://github.com/getsentry/sentry-javascript/pull/18908))

CLAUDE.md

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -145,17 +145,7 @@ Without this file, pnpm installs from the public npm registry instead of Verdacc
145145

146146
#### Running a Single E2E Test
147147

148-
```bash
149-
# Build packages first
150-
yarn build && yarn build:tarball
151-
152-
# Run a specific test app
153-
cd dev-packages/e2e-tests
154-
yarn test:run <app-name>
155-
156-
# Run with a specific variant (e.g., Next.js 15)
157-
yarn test:run <app-name> --variant <variant-name>
158-
```
148+
Run the e2e skill.
159149

160150
#### Common Pitfalls and Debugging
161151

dev-packages/browser-integration-tests/suites/public-api/debug/test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ sentryTest('logs debug messages correctly', async ({ getLocalTestUrl, page }) =>
2424
? [
2525
'Sentry Logger [log]: Integration installed: InboundFilters',
2626
'Sentry Logger [log]: Integration installed: FunctionToString',
27+
'Sentry Logger [log]: Integration installed: ConversationId',
2728
'Sentry Logger [log]: Integration installed: BrowserApiErrors',
2829
'Sentry Logger [log]: Integration installed: Breadcrumbs',
2930
'Sentry Logger [log]: Global Handler attached: onerror',

dev-packages/browser-integration-tests/suites/tracing/ai-providers/anthropic/test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ sentryTest('manual Anthropic instrumentation sends gen_ai transactions', async (
2020
const eventData = envelopeRequestParser(req);
2121

2222
// Verify it's a gen_ai transaction
23-
expect(eventData.transaction).toBe('messages claude-3-haiku-20240307');
24-
expect(eventData.contexts?.trace?.op).toBe('gen_ai.messages');
23+
expect(eventData.transaction).toBe('chat claude-3-haiku-20240307');
24+
expect(eventData.contexts?.trace?.op).toBe('gen_ai.chat');
2525
expect(eventData.contexts?.trace?.origin).toBe('auto.ai.anthropic');
2626
expect(eventData.contexts?.trace?.data).toMatchObject({
27-
'gen_ai.operation.name': 'messages',
27+
'gen_ai.operation.name': 'chat',
2828
'gen_ai.system': 'anthropic',
2929
'gen_ai.request.model': 'claude-3-haiku-20240307',
3030
'gen_ai.request.temperature': 0.7,

dev-packages/cloudflare-integration-tests/suites/tracing/anthropic-ai/test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ it('traces a basic message creation request', async ({ signal }) => {
2828
expect.arrayContaining([
2929
expect.objectContaining({
3030
data: expect.objectContaining({
31-
[GEN_AI_OPERATION_NAME_ATTRIBUTE]: 'messages',
32-
[SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'gen_ai.messages',
31+
[GEN_AI_OPERATION_NAME_ATTRIBUTE]: 'chat',
32+
[SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'gen_ai.chat',
3333
[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ai.anthropic',
3434
[GEN_AI_SYSTEM_ATTRIBUTE]: 'anthropic',
3535
[GEN_AI_REQUEST_MODEL_ATTRIBUTE]: 'claude-3-haiku-20240307',
@@ -39,8 +39,8 @@ it('traces a basic message creation request', async ({ signal }) => {
3939
[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE]: 10,
4040
[GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE]: 15,
4141
}),
42-
description: 'messages claude-3-haiku-20240307',
43-
op: 'gen_ai.messages',
42+
description: 'chat claude-3-haiku-20240307',
43+
op: 'gen_ai.chat',
4444
origin: 'auto.ai.anthropic',
4545
}),
4646
]),

dev-packages/cloudflare-integration-tests/suites/tracing/google-genai/test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ it('traces Google GenAI chat creation and message sending', async () => {
6262
// Third span - models.generateContent
6363
expect.objectContaining({
6464
data: expect.objectContaining({
65-
[GEN_AI_OPERATION_NAME_ATTRIBUTE]: 'models',
66-
[SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'gen_ai.models',
65+
[GEN_AI_OPERATION_NAME_ATTRIBUTE]: 'generate_content',
66+
[SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'gen_ai.generate_content',
6767
[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ai.google_genai',
6868
[GEN_AI_SYSTEM_ATTRIBUTE]: 'google_genai',
6969
[GEN_AI_REQUEST_MODEL_ATTRIBUTE]: 'gemini-1.5-flash',
@@ -74,8 +74,8 @@ it('traces Google GenAI chat creation and message sending', async () => {
7474
[GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE]: 12,
7575
[GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE]: 20,
7676
}),
77-
description: 'models gemini-1.5-flash',
78-
op: 'gen_ai.models',
77+
description: 'generate_content gemini-1.5-flash',
78+
op: 'gen_ai.generate_content',
7979
origin: 'auto.ai.google_genai',
8080
}),
8181
]),

0 commit comments

Comments
 (0)