add-ai-integration

bởi sentry

Thêm tích hợp nhà cung cấp AI mới vào Sentry JavaScript SDK. Sử dụng khi đóng góp một công cụ đo lường AI mới (OpenAI, Anthropic, Vercel AI, LangChain, v.v.)…

npx skills add https://github.com/getsentry/sentry-javascript --skill add-ai-integration

Adding a New AI Integration

Conventions First

Span ops and attributes are specified outside this repo. Never invent or hardcode either:

Derive the op with getGenAiSpanOp() from ai/core/utils.ts rather than picking one by hand. ai/core/gen-ai-attributes.ts is for gap-fillers only — keys with no @sentry/conventions equivalent — so check it last, not first.

Which Pattern

Does the SDK publish its own `diagnostics_channel` telemetry?
|- YES (ai >= 7) -> Pattern 1: Native tracing channel
+- NO -> Does the SDK expose callback/exporter hooks?
    |- YES (LangChain, Mastra) -> Pattern 3: Callback/Exporter
    +- NO (OpenAI, Anthropic, Google GenAI, ai < 7) -> Pattern 2: Orchestrion-injected channels
PatternUse whenReference
1 — Native tracing channelthe SDK publishes to diagnostics_channelintegrations/vercel-ai/vercel-ai-dc-subscriber.ts
2 — Orchestrion channelsthe SDK has no telemetry of its ownintegrations/openai.ts + orchestrion/config/openai.ts
3 — Callback/exporterthe SDK exposes hooks or an exporterai/langchain/, ai/mastra/ (exporter-shaped agent framework)

What the reference files won't tell you:

  • A provider can need two patterns at once: vercelAIIntegration subscribes to native ai:telemetry for ai >= 7 and runs orchestrion injection for v4-v6.
  • Pattern 1 subscribers are safe to register unconditionally — subscribing is a no-op on SDK versions that never publish.

Where The Code Goes

  • Instrumentation -> packages/server-utils/src/ai/{provider}/
  • Integration -> packages/server-utils/src/integrations/{provider}.ts
  • Runtime packages (node, cloudflare, bun, ...) re-export from @sentry/server-utils — they never define their own
  • Exception: Workers AI is client-wrapped in packages/cloudflare/src/instrumentations/worker/instrumentEnv.ts

Gotchas

  1. Detect streaming from the result shape — an async-iterable or the SDK's stream object — not from params.stream. Only the manual instrument{Provider}Client() API keys off params.stream === true.
  2. Never set streamed response attributes by hand. Accumulate into a StreamResponseState and call endStreamSpan() (ai/openai/streaming.ts for an async generator, ai/anthropic-ai/streaming.ts for a listener-based stream).
  3. Never truncate message payloads. Truncation was removed in v11 (#23045) and nothing downstream caps them; size limiting is server-side.
  4. Never roll child token usage up onto parent spans. Tree totals are computed product-side from the full span tree.
  5. Never read dataCollection.genAI directly. Gate input/output recording on resolveAIRecordingOptions().
  6. LangChain must be registered first in getTracingIntegrations(), so it can disable the provider integrations before they instrument.
  7. Set SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = 'auto.ai.{provider}' (alphanumerics, _, . only).

Checklist

  • Instrumentation in src/ai/, integration in src/integrations/, registered in getTracingIntegrations() (LangChain first)
  • Exported from packages/server-utils/src/index.ts, re-exported from the supported runtime packages
  • E2E tests in dev-packages/node-integration-tests/suites/tracing/{provider}/ (and cloudflare-integration-tests/ if supported)
  • Ops and attributes from @sentry/conventions, op derived via getGenAiSpanOp()
  • Recording gated on resolveAIRecordingOptions(); no truncation, no token rollup
  • JSDoc names the channels subscribed to, the supported SDK versions, and — for Pattern 2 — that it requires the Sentry runtime hook or bundler plugin
  • Patching happens only once the target package is imported (zero cost if unused)

When in doubt, follow the pattern of the most similar existing integration.

Thêm skills từ sentry

architecture-review
sentry
Đánh giá sức khỏe mã nguồn ở cấp độ nhân viên. Phát hiện các module nguyên khối, lỗi âm thầm, khoảng trống an toàn kiểu dữ liệu, lỗ hổng độ phủ kiểm thử và các vấn đề về thân thiện với LLM.
pi-agent-integration
sentry
Integrate `@mariozechner/pi-agent-core` as the agent abstraction inside another library or runtime. Use when implementing or refactoring Pi Agent wrappers,…
sentry-debug-issue
sentry
Gỡ lỗi và sửa một sự cố Sentry — tìm nó (bằng liên kết, ID hoặc tìm kiếm), lấy ngữ cảnh đầy đủ (stack trace, breadcrumbs, trace, logs), tùy chọn chạy Seer root-cause /…
sentry-svelte-sdk
sentry
Thiết lập đầy đủ Sentry SDK cho Svelte và SvelteKit. Sử dụng khi được yêu cầu "thêm Sentry vào Svelte", "thêm Sentry vào SvelteKit", "cài đặt @sentry/sveltekit", hoặc cấu hình…
sentry-svelte-sdk
sentry
Thiết lập đầy đủ Sentry SDK cho Svelte và SvelteKit. Sử dụng khi được yêu cầu "thêm Sentry vào Svelte", "thêm Sentry vào SvelteKit", "cài đặt @sentry/sveltekit", hoặc cấu hình…
skill-scanner
sentry
Quét kỹ năng tác nhân để tìm vấn đề bảo mật. Sử dụng khi được yêu cầu "quét một kỹ năng",
prompt-optimizer
sentry
Tạo, tối ưu hóa và cải tiến lặp lại các prompt cho agent, system prompt, developer prompt và các mẫu prompt có thể tái sử dụng. Sử dụng khi được yêu cầu cải thiện một…
commit
sentry
commit — một kỹ năng có thể cài đặt cho các tác nhân AI, được xuất bản bởi getsentry/sentry-docs.