-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
instrumentDurableObjectWithSentry breaks @callable() RPC methods from Cloudflare Agents SDK #20099
Copy link
Copy link
Open
Labels
Description
Environment
@sentry/cloudflare: 10.46.0agents: 0.9.0 (Cloudflare Agents SDK)wrangler: 4.78.0
Description
instrumentDurableObjectWithSentry() wraps a Durable Object class in a way that breaks @callable() decorator metadata from the Cloudflare Agents SDK. The Agents SDK's RPC dispatcher cannot find callable methods on the wrapped class, returning "Method <name> is not callable" for any @callable() decorated method.
All @callable() methods on the class stop working after wrapping — this is not specific to any single method.
Relevant docs
@callable()decorator — Cloudflare Agents SDK — mechanism for exposing RPC methods on Durable Objects via WebSocketinstrumentDurableObjectWithSentry— Sentry docs — Sentry's DO wrapper
Reproduction
import { callable } from 'agents'
import { AIChatAgent } from '@cloudflare/ai-chat'
import * as Sentry from '@sentry/cloudflare'
class MyAgentBase extends AIChatAgent<Env, State> {
@callable()
async setMode(mode: string) { /* ... */ }
@callable()
async stopStream() { /* ... */ }
}
// ✅ Without wrapper — all @callable() methods work via RPC
export const MyAgent = MyAgentBase
// ❌ With wrapper — all @callable() methods return "not callable"
export const MyAgent = Sentry.instrumentDurableObjectWithSentry(
(env) => ({ dsn: '...' }),
MyAgentBase,
)Client-side (using Agents SDK useAgent):
Error: Method setMode is not callable
Expected
instrumentDurableObjectWithSentry should preserve @callable() metadata so the Agents SDK RPC dispatcher can discover decorated methods on the wrapped class.
Notes
- Standard DurableObject subclasses (non-Agents SDK) work fine with the wrapper
- The issue is specifically with the Agents SDK's
@callable()decorator which uses TC39 standard decorators (not TypeScript legacy decorators) to register methods for WebSocket RPC discovery - The wrapper likely needs to forward decorator metadata or prototype chain from the original class
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
Fields
Give feedbackNo fields configured for issues without a type.
Projects
Status
No status