-
-
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
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
Fields
Give feedbackNo fields configured for issues without a type.
Projects
Status
Waiting for: Product Owner