Skip to content

Commit 1b3c15e

Browse files
authored
Merge branch 'develop' into timfish/fix/remove-dep
2 parents 5208cbe + d4098b3 commit 1b3c15e

92 files changed

Lines changed: 3206 additions & 925 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.

.agents/skills/track-framework-updates/SKILL.md

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,20 @@ For each release or RFC that plausibly needs SDK work, draft one concrete, actio
107107

108108
### Step 6: Write output artifacts
109109

110-
Produce **three files** in the skill's `output/` directory:
110+
The `collect_updates.py` script in Step 1 prints its output path, e.g.:
111111

112-
1. **`output/framework-updates-raw.json`** — already written by Step 1.
113-
2. **`output/framework-updates-digest.json`** — structured, machine-readable digest. Follow the schema in `assets/digest-schema.json`.
114-
3. **`output/framework-updates-digest.md`** — human-readable digest. Follow the structure in `assets/digest-template.md`:
115-
- Group by Client-Side / Server-Side / Meta-Framework.
112+
```
113+
Wrote /abs/path/to/.agents/skills/track-framework-updates/output/framework-updates-raw.json: ...
114+
```
115+
116+
Use that printed path to derive the output directory. All three files must be written to the **same directory** as `framework-updates-raw.json` — never relative paths like `output/` from the workspace root.
117+
118+
Produce **three files**:
119+
120+
1. The raw JSON was already written by Step 1 — no action needed.
121+
2. **`<output-dir>/framework-updates-digest.json`** — structured, machine-readable digest. Follow the schema in `assets/digest-schema.json`.
122+
3. **`<output-dir>/framework-updates-digest.md`** — human-readable digest. Follow the structure in `assets/digest-template.md`:
123+
- Group by Client-Side / Server-Side / Meta-Framework / Platform / Libraries.
116124
- Omit frameworks with no activity.
117125
- Include a "Run notes" section only if a fetcher reported errors.
118126

.agents/skills/track-framework-updates/assets/digest-schema.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
{
1515
"name": "React",
1616
"sentryPackages": ["@sentry/react"],
17-
"category": "client",
17+
"category": "client|server|meta-framework|platform|library",
1818
"releases": [
1919
{
2020
"tag": "v19.0.0",

.agents/skills/track-framework-updates/assets/digest-template.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ _Window: last <SINCE_DAYS> days · generated <GENERATED_AT>_
3939
4040
<!-- Same per-framework structure as Client-Side. Covers Node.js, Bun, Deno, Cloudflare Workers, AWS Lambda, Google Cloud. -->
4141
42+
## Libraries
43+
44+
<!-- Same per-framework structure as Client-Side. Covers state management (e.g. Pinia), loggers (e.g. Pino, Winston, Consola), validators (e.g. Zod), and other utility libraries the SDK instruments. -->
45+
4246
## Source coverage
4347
4448
⚠ The following SDK packages are **not tracked** in `sources.json`. Add an upstream framework entry or exclude them in `scripts/check_sources.py`:

.agents/skills/track-framework-updates/scripts/write_job_summary.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from __future__ import annotations
1212

1313
import json
14+
import os
1415
import sys
1516

1617

@@ -85,8 +86,20 @@ def main() -> int:
8586
digest = f.read().strip()
8687
if digest:
8788
lines.append(digest)
88-
except OSError:
89-
lines.append("_Digest file not found._")
89+
except OSError as e:
90+
lines.append(f"_Digest file not found: `{digest_path}` ({e})_")
91+
lines.append("")
92+
# List what is actually in the output dir to help diagnose path mismatches
93+
output_dir = os.path.dirname(os.path.abspath(digest_path))
94+
try:
95+
found = os.listdir(output_dir)
96+
if found:
97+
lines.append(f"Files present in `{output_dir}`:")
98+
lines.extend(f"- `{name}`" for name in sorted(found))
99+
else:
100+
lines.append(f"`{output_dir}` exists but is empty.")
101+
except OSError:
102+
lines.append(f"Output directory not found: `{output_dir}`")
90103

91104
# Run metrics at the bottom
92105
cost_str = (

.agents/skills/track-framework-updates/sources.json

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,17 @@
100100
},
101101
"rss": []
102102
},
103+
{
104+
"name": "Express",
105+
"sentryPackages": ["@sentry/node"],
106+
"category": "server",
107+
"github": {
108+
"repo": "expressjs/express",
109+
"discussions": false,
110+
"rfcsRepo": null
111+
},
112+
"rss": ["https://expressjs.com/feed.xml"]
113+
},
103114
{
104115
"name": "Elysia",
105116
"sentryPackages": ["@sentry/elysia"],
@@ -275,6 +286,61 @@
275286
"rfcsRepo": null
276287
},
277288
"rss": []
289+
},
290+
{
291+
"name": "Pinia",
292+
"sentryPackages": ["@sentry/vue", "@sentry/nuxt"],
293+
"category": "library",
294+
"github": {
295+
"repo": "vuejs/pinia",
296+
"discussions": false,
297+
"rfcsRepo": null
298+
},
299+
"rss": []
300+
},
301+
{
302+
"name": "Pino",
303+
"sentryPackages": ["@sentry/node"],
304+
"category": "library",
305+
"github": {
306+
"repo": "pinojs/pino",
307+
"discussions": false,
308+
"rfcsRepo": null
309+
},
310+
"rss": []
311+
},
312+
{
313+
"name": "Winston",
314+
"sentryPackages": ["@sentry/node"],
315+
"category": "library",
316+
"github": {
317+
"repo": "winstonjs/winston",
318+
"discussions": false,
319+
"rfcsRepo": null
320+
},
321+
"rss": []
322+
},
323+
{
324+
"name": "Consola",
325+
"sentryPackages": ["@sentry/core"],
326+
"category": "library",
327+
"github": {
328+
"repo": "unjs/consola",
329+
"discussions": false,
330+
"rfcsRepo": null
331+
},
332+
"rss": []
333+
},
334+
{
335+
"name": "Zod",
336+
"sentryPackages": ["@sentry/core"],
337+
"category": "library",
338+
"github": {
339+
"repo": "colinhacks/zod",
340+
"discussions": false,
341+
"rfcsRepo": null
342+
},
343+
"rss": []
278344
}
279345
]
280346
}

.oxlintrc.base.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,20 @@
147147
"no-param-reassign": "off"
148148
}
149149
},
150+
{
151+
"files": ["**/integrations/tracing-channel/aws-sdk/**/*.ts"],
152+
"rules": {
153+
"typescript/no-explicit-any": "off",
154+
"typescript/no-unsafe-member-access": "off"
155+
}
156+
},
157+
{
158+
"files": ["**/integrations/tracing-channel/aws-sdk/services/**/*.ts"],
159+
"rules": {
160+
"max-lines": "off",
161+
"complexity": "off"
162+
}
163+
},
150164
{
151165
"files": ["**/integrations/tracing/redis/vendored/**/*.ts"],
152166
"rules": {

.size-limit.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ module.exports = [
400400
import: createImport('init', 'experimentalUseDiagnosticsChannelInjection'),
401401
ignore: [...builtinModules, ...nodePrefixedBuiltinModules],
402402
gzip: true,
403-
limit: '145 KB',
403+
limit: '148 KB',
404404
disablePlugins: ['@size-limit/esbuild'],
405405
},
406406
{

dev-packages/cloudflare-integration-tests/package.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,17 @@
1515
},
1616
"dependencies": {
1717
"ai": "^6.0.0",
18+
"@anthropic-ai/sdk": "0.63.0",
19+
"@google/genai": "^1.20.0",
20+
"@langchain/core": "^0.3.80",
1821
"@langchain/langgraph": "^1.0.1",
22+
"@langchain/openai": "^0.5.0",
1923
"@prisma/adapter-d1": "6.15.0",
2024
"@prisma/client": "6.15.0",
2125
"@sentry/cloudflare": "10.66.0",
2226
"@sentry/hono": "10.66.0",
23-
"hono": "^4.12.25"
27+
"hono": "^4.12.25",
28+
"openai": "5.18.1"
2429
},
2530
"devDependencies": {
2631
"@cloudflare/workers-types": "^4.20260426.0",

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

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,27 @@
1+
import Anthropic from '@anthropic-ai/sdk';
12
import * as Sentry from '@sentry/cloudflare';
2-
import type { AnthropicAiClient } from '@sentry/core';
3-
import { MockAnthropic } from './mocks';
43

54
interface Env {
65
SENTRY_DSN: string;
76
}
87

9-
const mockClient = new MockAnthropic({
10-
apiKey: 'mock-api-key',
11-
});
8+
// Return a canned response so the `@anthropic-ai/sdk` runs on workerd without hitting the network.
9+
const mockFetch: typeof fetch = async () =>
10+
new Response(
11+
JSON.stringify({
12+
id: 'msg_mock123',
13+
type: 'message',
14+
role: 'assistant',
15+
model: 'claude-3-haiku-20240307',
16+
content: [{ type: 'text', text: 'Hello from Anthropic!' }],
17+
stop_reason: 'end_turn',
18+
stop_sequence: null,
19+
usage: { input_tokens: 10, output_tokens: 15 },
20+
}),
21+
{ status: 200, headers: { 'content-type': 'application/json' } },
22+
);
1223

13-
const client: AnthropicAiClient = Sentry.instrumentAnthropicAiClient(mockClient);
24+
const client = Sentry.instrumentAnthropicAiClient(new Anthropic({ apiKey: 'mock-api-key', fetch: mockFetch }));
1425

1526
export default Sentry.withSentry(
1627
(env: Env) => ({
@@ -20,7 +31,7 @@ export default Sentry.withSentry(
2031
}),
2132
{
2233
async fetch(_request, _env, _ctx) {
23-
const response = await client.messages?.create({
34+
const response = await client.messages.create({
2435
model: 'claude-3-haiku-20240307',
2536
messages: [{ role: 'user', content: 'What is the capital of France?' }],
2637
temperature: 0.7,

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

Lines changed: 0 additions & 68 deletions
This file was deleted.

0 commit comments

Comments
 (0)