Skip to content

instrumentDurableObjectWithSentry breaks @callable() RPC methods from Cloudflare Agents SDK #20099

@alexander-zuev

Description

@alexander-zuev

Environment

  • @sentry/cloudflare: 10.46.0
  • agents: 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

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

Metadata

Metadata

Assignees

No one assigned
    No fields configured for issues without a type.

    Projects

    Status

    Waiting for: Product Owner

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions