autotel-cloudflare 3.0.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/agents.d.ts +626 -123
  2. package/dist/agents.d.ts.map +1 -1
  3. package/dist/agents.js +260 -171
  4. package/dist/agents.js.map +1 -1
  5. package/package.json +8 -4
  6. package/src/actors/alarms.ts +0 -225
  7. package/src/actors/index.ts +0 -36
  8. package/src/actors/instrument-actor.test.ts +0 -179
  9. package/src/actors/instrument-actor.ts +0 -574
  10. package/src/actors/sockets.ts +0 -217
  11. package/src/actors/storage.ts +0 -263
  12. package/src/actors/traced-handler.ts +0 -300
  13. package/src/actors/types.ts +0 -98
  14. package/src/actors.ts +0 -50
  15. package/src/agents/index.ts +0 -42
  16. package/src/agents/otel-observability.test.ts +0 -336
  17. package/src/agents/otel-observability.ts +0 -474
  18. package/src/agents/types.ts +0 -167
  19. package/src/agents.ts +0 -76
  20. package/src/bindings/ai.test.ts +0 -170
  21. package/src/bindings/ai.ts +0 -73
  22. package/src/bindings/analytics-engine.test.ts +0 -175
  23. package/src/bindings/analytics-engine.ts +0 -78
  24. package/src/bindings/bindings-cache.test.ts +0 -80
  25. package/src/bindings/bindings-detection.test.ts +0 -235
  26. package/src/bindings/bindings-this-binding.test.ts +0 -294
  27. package/src/bindings/bindings.ts +0 -720
  28. package/src/bindings/browser-rendering.test.ts +0 -160
  29. package/src/bindings/browser-rendering.ts +0 -70
  30. package/src/bindings/common.ts +0 -84
  31. package/src/bindings/hyperdrive.test.ts +0 -176
  32. package/src/bindings/hyperdrive.ts +0 -74
  33. package/src/bindings/images.test.ts +0 -262
  34. package/src/bindings/images.ts +0 -182
  35. package/src/bindings/index.ts +0 -20
  36. package/src/bindings/queue-producer.test.ts +0 -224
  37. package/src/bindings/queue-producer.ts +0 -105
  38. package/src/bindings/rate-limiter.test.ts +0 -140
  39. package/src/bindings/rate-limiter.ts +0 -69
  40. package/src/bindings/vectorize.test.ts +0 -362
  41. package/src/bindings/vectorize.ts +0 -86
  42. package/src/bindings.ts +0 -6
  43. package/src/events.ts +0 -6
  44. package/src/execution-logger.test.ts +0 -127
  45. package/src/execution-logger.ts +0 -112
  46. package/src/global/cache.test.ts +0 -292
  47. package/src/global/cache.ts +0 -164
  48. package/src/global/fetch.test.ts +0 -399
  49. package/src/global/fetch.ts +0 -136
  50. package/src/global/index.ts +0 -7
  51. package/src/handlers/durable-objects.test.ts +0 -524
  52. package/src/handlers/durable-objects.ts +0 -250
  53. package/src/handlers/index.ts +0 -6
  54. package/src/handlers/workflows.test.ts +0 -411
  55. package/src/handlers/workflows.ts +0 -345
  56. package/src/handlers.ts +0 -6
  57. package/src/index.ts +0 -91
  58. package/src/logger.ts +0 -15
  59. package/src/native/native-tracing.test.ts +0 -54
  60. package/src/native/native-tracing.ts +0 -83
  61. package/src/native.ts +0 -12
  62. package/src/parse-error.ts +0 -1
  63. package/src/sampling.ts +0 -6
  64. package/src/testing.ts +0 -6
  65. package/src/wrappers/cf-attributes.test.ts +0 -334
  66. package/src/wrappers/define-worker-fetch.test.ts +0 -102
  67. package/src/wrappers/define-worker-fetch.ts +0 -71
  68. package/src/wrappers/index.ts +0 -13
  69. package/src/wrappers/instrument.integration.test.ts +0 -578
  70. package/src/wrappers/instrument.ts +0 -806
  71. package/src/wrappers/native-instrument.test.ts +0 -153
  72. package/src/wrappers/wrap-do.ts +0 -34
  73. package/src/wrappers/wrap-module.ts +0 -37
package/dist/agents.d.ts CHANGED
@@ -1,121 +1,668 @@
1
1
  import { ConfigurationOption } from "autotel-edge";
2
2
  import { Attributes } from "@opentelemetry/api";
3
3
 
4
- //#region src/agents/types.d.ts
4
+ //#region src/agents/base.d.ts
5
5
  /**
6
- * Base event structure from Agents SDK (mirrors agents/src/observability/base.ts)
6
+ * Base event structure for all Cloudflare Agents observability events.
7
7
  */
8
- interface BaseAgentEvent<T extends string, Payload extends Record<string, unknown> = Record<string, unknown>> {
8
+ type BaseEvent<T extends string, Payload extends Record<string, unknown> = Record<string, never>> = {
9
9
  type: T;
10
- /** Unique identifier for the event */
11
- id: string;
12
- /** Human-readable message for logging */
13
- displayMessage: string;
14
- /** Event payload with type-specific data */
15
- payload: Payload & Record<string, unknown>;
16
- /** Timestamp in milliseconds since epoch */
10
+ /**
11
+ * The class name of the agent that emitted this event
12
+ * (e.g. "MyChatAgent").
13
+ */
14
+ agent?: string;
15
+ /**
16
+ * The instance name (Durable Object ID name) of the agent.
17
+ */
18
+ name?: string;
19
+ /**
20
+ * Optional legacy fields accepted by the Cloudflare adapter so older
21
+ * examples can still be observed without reshaping the event.
22
+ */
23
+ id?: string;
24
+ displayMessage?: string;
25
+ payload: Payload;
17
26
  timestamp: number;
18
- }
27
+ };
28
+ //#endregion
29
+ //#region src/agents/agent.d.ts
19
30
  /**
20
- * Agent-specific observability events
31
+ * Agent-specific observability events.
21
32
  */
22
- type AgentObservabilityEvent = BaseAgentEvent<'state:update', Record<string, unknown>> | BaseAgentEvent<'rpc', {
33
+ type AgentObservabilityEvent = BaseEvent<'state:update'> | BaseEvent<'rpc', {
23
34
  method: string;
24
35
  streaming?: boolean;
25
- }> | BaseAgentEvent<'message:request' | 'message:response', Record<string, unknown>> | BaseAgentEvent<'message:clear'> | BaseAgentEvent<'schedule:create' | 'schedule:execute' | 'schedule:cancel', {
36
+ }> | BaseEvent<'rpc:error', {
37
+ method: string;
38
+ error: string;
39
+ }> | BaseEvent<'message:request'> | BaseEvent<'message:response'> | BaseEvent<'message:clear'> | BaseEvent<'message:cancel', {
40
+ requestId: string;
41
+ }> | BaseEvent<'message:error', {
42
+ error: string;
43
+ }> | BaseEvent<'tool:result', {
44
+ toolCallId: string;
45
+ toolName: string;
46
+ }> | BaseEvent<'tool:approval', {
47
+ toolCallId: string;
48
+ approved: boolean;
49
+ }> | BaseEvent<'schedule:create', {
50
+ callback: string;
51
+ id: string;
52
+ }> | BaseEvent<'schedule:execute', {
53
+ callback: string;
54
+ id: string;
55
+ }> | BaseEvent<'schedule:cancel', {
56
+ callback: string;
57
+ id: string;
58
+ }> | BaseEvent<'schedule:retry', {
59
+ callback: string;
60
+ id: string;
61
+ attempt: number;
62
+ maxAttempts: number;
63
+ }> | BaseEvent<'schedule:error', {
64
+ callback: string;
65
+ id: string;
66
+ error: string;
67
+ attempts: number;
68
+ }> | BaseEvent<'schedule:duplicate_warning', {
69
+ callback: string;
70
+ count: number;
71
+ type: string;
72
+ }> | BaseEvent<'queue:create', {
73
+ callback: string;
74
+ id: string;
75
+ }> | BaseEvent<'queue:retry', {
76
+ callback: string;
77
+ id: string;
78
+ attempt: number;
79
+ maxAttempts: number;
80
+ }> | BaseEvent<'queue:error', {
26
81
  callback: string;
27
82
  id: string;
28
- }> | BaseAgentEvent<'destroy'> | BaseAgentEvent<'connect', {
83
+ error: string;
84
+ attempts: number;
85
+ }> | BaseEvent<'submission:create', {
86
+ submissionId: string;
87
+ requestId?: string;
88
+ idempotencyKey?: string;
89
+ }> | BaseEvent<'submission:status', {
90
+ submissionId: string;
91
+ requestId?: string;
92
+ status: string;
93
+ }> | BaseEvent<'submission:error', {
94
+ submissionId: string;
95
+ requestId?: string;
96
+ error: string;
97
+ }> | BaseEvent<'fiber:run:started', {
98
+ fiberId: string;
99
+ fiberName: string;
100
+ managed?: boolean;
101
+ }> | BaseEvent<'fiber:run:completed', {
102
+ fiberId: string;
103
+ fiberName: string;
104
+ elapsedMs?: number;
105
+ managed?: boolean;
106
+ }> | BaseEvent<'fiber:run:failed', {
107
+ fiberId: string;
108
+ fiberName: string;
109
+ error: string;
110
+ elapsedMs?: number;
111
+ managed?: boolean;
112
+ }> | BaseEvent<'fiber:run:interrupted', {
113
+ fiberId: string;
114
+ fiberName: string;
115
+ elapsedMs?: number;
116
+ managed?: boolean;
117
+ recoveryReason: 'interrupted';
118
+ }> | BaseEvent<'fiber:recovery:detected', {
119
+ fiberId: string;
120
+ fiberName: string;
121
+ elapsedMs?: number;
122
+ managed?: boolean;
123
+ recoveryReason: 'interrupted';
124
+ }> | BaseEvent<'fiber:recovery:attempt', {
125
+ fiberId: string;
126
+ fiberName: string;
127
+ managed?: boolean;
128
+ recoveryReason: 'interrupted';
129
+ }> | BaseEvent<'fiber:recovery:handled', {
130
+ fiberId: string;
131
+ fiberName: string;
132
+ status?: string;
133
+ elapsedMs?: number;
134
+ managed?: boolean;
135
+ }> | BaseEvent<'fiber:recovery:skipped', {
136
+ fiberId: string;
137
+ fiberName: string;
138
+ reason: string;
139
+ elapsedMs?: number;
140
+ managed?: boolean;
141
+ }> | BaseEvent<'fiber:recovery:failed', {
142
+ fiberId: string;
143
+ fiberName: string;
144
+ error: string;
145
+ elapsedMs?: number;
146
+ reason?: string;
147
+ }> | BaseEvent<'chat:request:failed', {
148
+ requestId?: string;
149
+ stage: 'parse' | 'persist' | 'turn' | 'stream' | 'recovery' | 'transcript';
150
+ messagesPersisted?: boolean;
151
+ error: string;
152
+ }> | BaseEvent<'chat:recovery:detected', {
153
+ incidentId: string;
154
+ requestId: string;
155
+ attempt: number;
156
+ maxAttempts: number;
157
+ recoveryKind: 'retry' | 'continue';
158
+ }> | BaseEvent<'chat:recovery:scheduled', {
159
+ incidentId: string;
160
+ requestId: string;
161
+ attempt: number;
162
+ maxAttempts: number;
163
+ recoveryKind: 'retry' | 'continue';
164
+ }> | BaseEvent<'chat:recovery:attempt', {
165
+ incidentId: string;
166
+ requestId: string;
167
+ attempt: number;
168
+ maxAttempts: number;
169
+ recoveryKind: 'retry' | 'continue';
170
+ }> | BaseEvent<'chat:recovery:completed', {
171
+ incidentId: string;
172
+ requestId: string;
173
+ attempt: number;
174
+ maxAttempts: number;
175
+ recoveryKind: 'retry' | 'continue';
176
+ }> | BaseEvent<'chat:recovery:skipped', {
177
+ incidentId: string;
178
+ requestId: string;
179
+ attempt: number;
180
+ maxAttempts: number;
181
+ recoveryKind: 'retry' | 'continue';
182
+ reason?: string;
183
+ }> | BaseEvent<'chat:recovery:exhausted', {
184
+ incidentId: string;
185
+ requestId: string;
186
+ attempt: number;
187
+ maxAttempts: number;
188
+ recoveryKind: 'retry' | 'continue';
189
+ reason: string;
190
+ }> | BaseEvent<'chat:recovery:failed', {
191
+ incidentId: string;
192
+ requestId: string;
193
+ attempt: number;
194
+ maxAttempts: number;
195
+ recoveryKind: 'retry' | 'continue';
196
+ reason?: string;
197
+ }> | BaseEvent<'chat:transcript:repaired', {
198
+ requestId?: string;
199
+ removedToolCalls: number;
200
+ normalizedInputs: number;
201
+ toolCallIds?: string[];
202
+ }> | BaseEvent<'chat:onstart:degraded', {
203
+ step: 'transcript-hydration' | 'scheduled-task-reconcile' | 'durable-work-recovery';
204
+ error: string;
205
+ }> | BaseEvent<'chat:hydration:windowed', {
206
+ totalContentBytes: number;
207
+ budgetBytes: number;
208
+ hydratedMessages: number;
209
+ }> | BaseEvent<'chat:media:evicted', {
210
+ messages: number;
211
+ parts: number;
212
+ bytes: number;
213
+ externalizedBytes: number;
214
+ }> | BaseEvent<'chat:stream:stalled', {
215
+ requestId: string;
216
+ timeoutMs: number;
217
+ }> | BaseEvent<'chat:context:compacted', {
218
+ reason: 'proactive' | 'reactive';
219
+ shortened: boolean;
220
+ requestId?: string;
221
+ attempt?: number;
222
+ }> | BaseEvent<'agent_tool:recovery:begin', {
223
+ runCount: number;
224
+ totalTimeoutMs?: number;
225
+ }> | BaseEvent<'agent_tool:recovery:row', {
226
+ runId: string;
227
+ agentType: string;
228
+ status: string;
229
+ reason?: string;
230
+ elapsedMs?: number;
231
+ }> | BaseEvent<'agent_tool:recovery:deadline', {
232
+ runId: string;
233
+ agentType: string;
234
+ elapsedMs?: number;
235
+ }> | BaseEvent<'agent_tool:recovery:reattach', {
236
+ runId: string;
237
+ agentType: string;
238
+ budgetMs: number;
239
+ }> | BaseEvent<'agent_tool:recovery:complete', {
240
+ runCount: number;
241
+ elapsedMs?: number;
242
+ }> | BaseEvent<'agent_tool:recovery:failed', {
243
+ error: string;
244
+ }> | BaseEvent<'destroy'> | BaseEvent<'connect', {
29
245
  connectionId: string;
246
+ }> | BaseEvent<'disconnect', {
247
+ connectionId: string;
248
+ code: number;
249
+ reason: string;
250
+ }> | BaseEvent<'email:receive', {
251
+ from: string;
252
+ to: string;
253
+ subject?: string;
254
+ }> | BaseEvent<'email:reply', {
255
+ from: string;
256
+ to: string;
257
+ subject?: string;
258
+ }> | BaseEvent<'email:send', {
259
+ from: string;
260
+ to: string | string[];
261
+ subject: string;
262
+ }> | BaseEvent<'workflow:start', {
263
+ workflowId: string;
264
+ workflowName?: string;
265
+ }> | BaseEvent<'workflow:event', {
266
+ workflowId: string;
267
+ eventType?: string;
268
+ }> | BaseEvent<'workflow:approved', {
269
+ workflowId: string;
270
+ reason?: string;
271
+ }> | BaseEvent<'workflow:rejected', {
272
+ workflowId: string;
273
+ reason?: string;
274
+ }> | BaseEvent<'workflow:terminated', {
275
+ workflowId: string;
276
+ workflowName?: string;
277
+ }> | BaseEvent<'workflow:paused', {
278
+ workflowId: string;
279
+ workflowName?: string;
280
+ }> | BaseEvent<'workflow:resumed', {
281
+ workflowId: string;
282
+ workflowName?: string;
283
+ }> | BaseEvent<'workflow:restarted', {
284
+ workflowId: string;
285
+ workflowName?: string;
30
286
  }>;
287
+ //#endregion
288
+ //#region src/agents/mcp.d.ts
31
289
  /**
32
- * MCP-specific observability events
290
+ * MCP-specific observability events.
33
291
  */
34
- type MCPObservabilityEvent = BaseAgentEvent<'mcp:client:preconnect', {
292
+ type MCPObservabilityEvent = BaseEvent<'mcp:client:preconnect', {
35
293
  serverId: string;
36
- }> | BaseAgentEvent<'mcp:client:connect', {
294
+ }> | BaseEvent<'mcp:client:connect', {
37
295
  url: string;
38
296
  transport: string;
39
297
  state: string;
40
298
  error?: string;
41
- }> | BaseAgentEvent<'mcp:client:authorize', {
299
+ }> | BaseEvent<'mcp:client:authorize', {
42
300
  serverId: string;
43
301
  authUrl: string;
44
302
  clientId?: string;
45
- }> | BaseAgentEvent<'mcp:client:discover', Record<string, unknown>>;
46
- /**
47
- * Union of all observability event types
48
- */
303
+ }> | BaseEvent<'mcp:client:discover', {
304
+ url?: string;
305
+ state?: string;
306
+ error?: string;
307
+ capability?: string;
308
+ }> | BaseEvent<'mcp:client:close', {
309
+ url: string;
310
+ transport?: string;
311
+ state: string;
312
+ error?: string;
313
+ phase?: 'terminate-session' | 'client-close';
314
+ }>;
315
+ //#endregion
316
+ //#region src/agents/observability.d.ts
49
317
  type ObservabilityEvent = AgentObservabilityEvent | MCPObservabilityEvent;
50
- /**
51
- * Observability interface from Agents SDK
52
- */
53
318
  interface Observability {
54
- /**
55
- * Emit an event for the Agent's observability implementation to handle.
56
- * @param event - The event to emit
57
- * @param ctx - The execution context of the invocation (optional)
58
- */
59
- emit(event: ObservabilityEvent, ctx?: DurableObjectState): void;
319
+ emit(event: ObservabilityEvent, ctx?: DurableObjectState | ExecutionContext): void;
60
320
  }
61
- /**
62
- * Agent-specific instrumentation options
63
- */
321
+ type ChannelEventMap = {
322
+ state: Extract<ObservabilityEvent, {
323
+ type: `state:${string}`;
324
+ }>;
325
+ rpc: Extract<ObservabilityEvent, {
326
+ type: 'rpc' | `rpc:${string}`;
327
+ }>;
328
+ message: Extract<ObservabilityEvent, {
329
+ type: `message:${string}` | `tool:${string}` | `submission:${string}`;
330
+ }>;
331
+ chat: Exclude<Extract<ObservabilityEvent, {
332
+ type: `chat:${string}`;
333
+ }>, {
334
+ type: `chat:transcript:${string}`;
335
+ }>;
336
+ transcript: Extract<ObservabilityEvent, {
337
+ type: `transcript:${string}` | `chat:transcript:${string}`;
338
+ }>;
339
+ fiber: Extract<ObservabilityEvent, {
340
+ type: `fiber:${string}`;
341
+ }>;
342
+ agentTool: Extract<ObservabilityEvent, {
343
+ type: `agent_tool:${string}`;
344
+ }>;
345
+ schedule: Extract<ObservabilityEvent, {
346
+ type: `schedule:${string}` | `queue:${string}`;
347
+ }>;
348
+ lifecycle: Extract<ObservabilityEvent, {
349
+ type: 'connect' | 'disconnect' | 'destroy';
350
+ }>;
351
+ workflow: Extract<ObservabilityEvent, {
352
+ type: `workflow:${string}`;
353
+ }>;
354
+ mcp: Extract<ObservabilityEvent, {
355
+ type: `mcp:${string}`;
356
+ }>;
357
+ email: Extract<ObservabilityEvent, {
358
+ type: `email:${string}`;
359
+ }>;
360
+ };
361
+ interface ObservabilityChannel<TEvent extends ObservabilityEvent = ObservabilityEvent> {
362
+ name: string;
363
+ publish(event: TEvent): void;
364
+ }
365
+ declare const channels: {
366
+ readonly state: ObservabilityChannel<BaseEvent<"state:update">>;
367
+ readonly rpc: ObservabilityChannel<BaseEvent<"rpc", {
368
+ method: string;
369
+ streaming?: boolean;
370
+ }> | BaseEvent<"rpc:error", {
371
+ method: string;
372
+ error: string;
373
+ }>>;
374
+ readonly message: ObservabilityChannel<BaseEvent<"message:request"> | BaseEvent<"message:response"> | BaseEvent<"message:clear"> | BaseEvent<"message:cancel", {
375
+ requestId: string;
376
+ }> | BaseEvent<"message:error", {
377
+ error: string;
378
+ }> | BaseEvent<"tool:result", {
379
+ toolCallId: string;
380
+ toolName: string;
381
+ }> | BaseEvent<"tool:approval", {
382
+ toolCallId: string;
383
+ approved: boolean;
384
+ }> | BaseEvent<"submission:create", {
385
+ submissionId: string;
386
+ requestId?: string;
387
+ idempotencyKey?: string;
388
+ }> | BaseEvent<"submission:status", {
389
+ submissionId: string;
390
+ requestId?: string;
391
+ status: string;
392
+ }> | BaseEvent<"submission:error", {
393
+ submissionId: string;
394
+ requestId?: string;
395
+ error: string;
396
+ }>>;
397
+ readonly chat: ObservabilityChannel<BaseEvent<"chat:request:failed", {
398
+ requestId?: string;
399
+ stage: "parse" | "persist" | "turn" | "stream" | "recovery" | "transcript";
400
+ messagesPersisted?: boolean;
401
+ error: string;
402
+ }> | BaseEvent<"chat:recovery:detected", {
403
+ incidentId: string;
404
+ requestId: string;
405
+ attempt: number;
406
+ maxAttempts: number;
407
+ recoveryKind: "retry" | "continue";
408
+ }> | BaseEvent<"chat:recovery:scheduled", {
409
+ incidentId: string;
410
+ requestId: string;
411
+ attempt: number;
412
+ maxAttempts: number;
413
+ recoveryKind: "retry" | "continue";
414
+ }> | BaseEvent<"chat:recovery:attempt", {
415
+ incidentId: string;
416
+ requestId: string;
417
+ attempt: number;
418
+ maxAttempts: number;
419
+ recoveryKind: "retry" | "continue";
420
+ }> | BaseEvent<"chat:recovery:completed", {
421
+ incidentId: string;
422
+ requestId: string;
423
+ attempt: number;
424
+ maxAttempts: number;
425
+ recoveryKind: "retry" | "continue";
426
+ }> | BaseEvent<"chat:recovery:skipped", {
427
+ incidentId: string;
428
+ requestId: string;
429
+ attempt: number;
430
+ maxAttempts: number;
431
+ recoveryKind: "retry" | "continue";
432
+ reason?: string;
433
+ }> | BaseEvent<"chat:recovery:exhausted", {
434
+ incidentId: string;
435
+ requestId: string;
436
+ attempt: number;
437
+ maxAttempts: number;
438
+ recoveryKind: "retry" | "continue";
439
+ reason: string;
440
+ }> | BaseEvent<"chat:recovery:failed", {
441
+ incidentId: string;
442
+ requestId: string;
443
+ attempt: number;
444
+ maxAttempts: number;
445
+ recoveryKind: "retry" | "continue";
446
+ reason?: string;
447
+ }> | BaseEvent<"chat:onstart:degraded", {
448
+ step: "transcript-hydration" | "scheduled-task-reconcile" | "durable-work-recovery";
449
+ error: string;
450
+ }> | BaseEvent<"chat:hydration:windowed", {
451
+ totalContentBytes: number;
452
+ budgetBytes: number;
453
+ hydratedMessages: number;
454
+ }> | BaseEvent<"chat:media:evicted", {
455
+ messages: number;
456
+ parts: number;
457
+ bytes: number;
458
+ externalizedBytes: number;
459
+ }> | BaseEvent<"chat:stream:stalled", {
460
+ requestId: string;
461
+ timeoutMs: number;
462
+ }> | BaseEvent<"chat:context:compacted", {
463
+ reason: "proactive" | "reactive";
464
+ shortened: boolean;
465
+ requestId?: string;
466
+ attempt?: number;
467
+ }>>;
468
+ readonly transcript: ObservabilityChannel<BaseEvent<"chat:transcript:repaired", {
469
+ requestId?: string;
470
+ removedToolCalls: number;
471
+ normalizedInputs: number;
472
+ toolCallIds?: string[];
473
+ }>>;
474
+ readonly fiber: ObservabilityChannel<BaseEvent<"fiber:run:started", {
475
+ fiberId: string;
476
+ fiberName: string;
477
+ managed?: boolean;
478
+ }> | BaseEvent<"fiber:run:completed", {
479
+ fiberId: string;
480
+ fiberName: string;
481
+ elapsedMs?: number;
482
+ managed?: boolean;
483
+ }> | BaseEvent<"fiber:run:failed", {
484
+ fiberId: string;
485
+ fiberName: string;
486
+ error: string;
487
+ elapsedMs?: number;
488
+ managed?: boolean;
489
+ }> | BaseEvent<"fiber:run:interrupted", {
490
+ fiberId: string;
491
+ fiberName: string;
492
+ elapsedMs?: number;
493
+ managed?: boolean;
494
+ recoveryReason: "interrupted";
495
+ }> | BaseEvent<"fiber:recovery:detected", {
496
+ fiberId: string;
497
+ fiberName: string;
498
+ elapsedMs?: number;
499
+ managed?: boolean;
500
+ recoveryReason: "interrupted";
501
+ }> | BaseEvent<"fiber:recovery:attempt", {
502
+ fiberId: string;
503
+ fiberName: string;
504
+ managed?: boolean;
505
+ recoveryReason: "interrupted";
506
+ }> | BaseEvent<"fiber:recovery:handled", {
507
+ fiberId: string;
508
+ fiberName: string;
509
+ status?: string;
510
+ elapsedMs?: number;
511
+ managed?: boolean;
512
+ }> | BaseEvent<"fiber:recovery:skipped", {
513
+ fiberId: string;
514
+ fiberName: string;
515
+ reason: string;
516
+ elapsedMs?: number;
517
+ managed?: boolean;
518
+ }> | BaseEvent<"fiber:recovery:failed", {
519
+ fiberId: string;
520
+ fiberName: string;
521
+ error: string;
522
+ elapsedMs?: number;
523
+ reason?: string;
524
+ }>>;
525
+ readonly agentTool: ObservabilityChannel<BaseEvent<"agent_tool:recovery:begin", {
526
+ runCount: number;
527
+ totalTimeoutMs?: number;
528
+ }> | BaseEvent<"agent_tool:recovery:row", {
529
+ runId: string;
530
+ agentType: string;
531
+ status: string;
532
+ reason?: string;
533
+ elapsedMs?: number;
534
+ }> | BaseEvent<"agent_tool:recovery:deadline", {
535
+ runId: string;
536
+ agentType: string;
537
+ elapsedMs?: number;
538
+ }> | BaseEvent<"agent_tool:recovery:reattach", {
539
+ runId: string;
540
+ agentType: string;
541
+ budgetMs: number;
542
+ }> | BaseEvent<"agent_tool:recovery:complete", {
543
+ runCount: number;
544
+ elapsedMs?: number;
545
+ }> | BaseEvent<"agent_tool:recovery:failed", {
546
+ error: string;
547
+ }>>;
548
+ readonly schedule: ObservabilityChannel<BaseEvent<"schedule:create", {
549
+ callback: string;
550
+ id: string;
551
+ }> | BaseEvent<"schedule:execute", {
552
+ callback: string;
553
+ id: string;
554
+ }> | BaseEvent<"schedule:cancel", {
555
+ callback: string;
556
+ id: string;
557
+ }> | BaseEvent<"schedule:retry", {
558
+ callback: string;
559
+ id: string;
560
+ attempt: number;
561
+ maxAttempts: number;
562
+ }> | BaseEvent<"schedule:error", {
563
+ callback: string;
564
+ id: string;
565
+ error: string;
566
+ attempts: number;
567
+ }> | BaseEvent<"schedule:duplicate_warning", {
568
+ callback: string;
569
+ count: number;
570
+ type: string;
571
+ }> | BaseEvent<"queue:create", {
572
+ callback: string;
573
+ id: string;
574
+ }> | BaseEvent<"queue:retry", {
575
+ callback: string;
576
+ id: string;
577
+ attempt: number;
578
+ maxAttempts: number;
579
+ }> | BaseEvent<"queue:error", {
580
+ callback: string;
581
+ id: string;
582
+ error: string;
583
+ attempts: number;
584
+ }>>;
585
+ readonly lifecycle: ObservabilityChannel<BaseEvent<"destroy"> | BaseEvent<"connect", {
586
+ connectionId: string;
587
+ }> | BaseEvent<"disconnect", {
588
+ connectionId: string;
589
+ code: number;
590
+ reason: string;
591
+ }>>;
592
+ readonly workflow: ObservabilityChannel<BaseEvent<"workflow:start", {
593
+ workflowId: string;
594
+ workflowName?: string;
595
+ }> | BaseEvent<"workflow:event", {
596
+ workflowId: string;
597
+ eventType?: string;
598
+ }> | BaseEvent<"workflow:approved", {
599
+ workflowId: string;
600
+ reason?: string;
601
+ }> | BaseEvent<"workflow:rejected", {
602
+ workflowId: string;
603
+ reason?: string;
604
+ }> | BaseEvent<"workflow:terminated", {
605
+ workflowId: string;
606
+ workflowName?: string;
607
+ }> | BaseEvent<"workflow:paused", {
608
+ workflowId: string;
609
+ workflowName?: string;
610
+ }> | BaseEvent<"workflow:resumed", {
611
+ workflowId: string;
612
+ workflowName?: string;
613
+ }> | BaseEvent<"workflow:restarted", {
614
+ workflowId: string;
615
+ workflowName?: string;
616
+ }>>;
617
+ readonly mcp: ObservabilityChannel<MCPObservabilityEvent>;
618
+ readonly email: ObservabilityChannel<BaseEvent<"email:receive", {
619
+ from: string;
620
+ to: string;
621
+ subject?: string;
622
+ }> | BaseEvent<"email:reply", {
623
+ from: string;
624
+ to: string;
625
+ subject?: string;
626
+ }> | BaseEvent<"email:send", {
627
+ from: string;
628
+ to: string | string[];
629
+ subject: string;
630
+ }>>;
631
+ };
632
+ declare const genericObservability: Observability;
633
+ declare function subscribe<K extends keyof ChannelEventMap>(channelKey: K, callback: (event: ChannelEventMap[K]) => void): () => void;
634
+ //#endregion
635
+ //#region src/agents/types.d.ts
636
+ type ObservabilityExecutionContext = DurableObjectState | ExecutionContext;
64
637
  interface AgentInstrumentationOptions {
65
- /**
66
- * Whether to create spans for RPC calls
67
- * @default true
68
- */
69
638
  traceRpc?: boolean;
70
- /**
71
- * Whether to create spans for schedule operations
72
- * @default true
73
- */
74
639
  traceSchedule?: boolean;
75
- /**
76
- * Whether to create spans for MCP operations
77
- * @default true
78
- */
640
+ traceQueue?: boolean;
641
+ traceSubmissions?: boolean;
79
642
  traceMcp?: boolean;
80
- /**
81
- * Whether to create spans for state updates
82
- * @default false (can be noisy)
83
- */
84
643
  traceStateUpdates?: boolean;
85
- /**
86
- * Whether to create spans for message events
87
- * @default true
88
- */
89
644
  traceMessages?: boolean;
90
- /**
91
- * Whether to create spans for connect/destroy lifecycle events
92
- * @default true
93
- */
94
645
  traceLifecycle?: boolean;
95
- /**
96
- * Custom attribute extractor for events
97
- */
646
+ traceChat?: boolean;
647
+ traceTranscripts?: boolean;
648
+ traceFibers?: boolean;
649
+ traceToolRecovery?: boolean;
650
+ traceWorkflow?: boolean;
651
+ traceEmail?: boolean;
98
652
  attributeExtractor?: (event: ObservabilityEvent) => Attributes;
99
- /**
100
- * Custom span name formatter
101
- */
102
653
  spanNameFormatter?: (event: ObservabilityEvent) => string;
103
654
  }
104
- /**
105
- * Configuration for OtelObservability
106
- */
107
655
  type OtelObservabilityConfig = ConfigurationOption & {
108
- /**
109
- * Agent-specific instrumentation options
110
- */
111
656
  agents?: AgentInstrumentationOptions;
112
657
  };
113
- /**
114
- * Semantic attributes for Agent spans
115
- */
116
658
  interface AgentSpanAttributes {
117
659
  'agent.event.type': string;
118
- 'agent.event.id': string;
660
+ 'agent.event.id'?: string;
661
+ 'agent.class'?: string;
662
+ 'agent.instance.name'?: string;
663
+ 'agent.display_message'?: string;
664
+ 'agent.framework'?: string;
665
+ 'gen_ai.agent.name'?: string;
119
666
  'agent.rpc.method'?: string;
120
667
  'agent.rpc.streaming'?: boolean;
121
668
  'agent.schedule.callback'?: string;
@@ -135,59 +682,15 @@ interface AgentSpanAttributes {
135
682
  * events into OpenTelemetry spans.
136
683
  */
137
684
  declare class OtelObservability implements Observability {
138
- private config;
139
- private options;
685
+ private readonly config;
686
+ private readonly options;
140
687
  private initialized;
141
688
  constructor(config: OtelObservabilityConfig);
142
- /**
143
- * Initialize the tracer provider (called lazily on first emit)
144
- */
145
689
  private initialize;
146
- /**
147
- * Emit an observability event
148
- *
149
- * Converts the event to an OpenTelemetry span based on the event type.
150
- */
151
- emit(event: ObservabilityEvent, ctx?: DurableObjectState): void;
690
+ emit(event: ObservabilityEvent, ctx?: ObservabilityExecutionContext): void;
152
691
  }
153
- /**
154
- * Create an OtelObservability instance
155
- *
156
- * @example
157
- * ```typescript
158
- * import { Agent } from 'agents'
159
- * import { createOtelObservability } from 'autotel-cloudflare/agents'
160
- *
161
- * class MyAgent extends Agent<Env> {
162
- * observability = createOtelObservability({
163
- * service: { name: 'my-agent' },
164
- * exporter: { url: env.OTLP_ENDPOINT }
165
- * })
166
- * }
167
- * ```
168
- */
169
692
  declare function createOtelObservability(config: OtelObservabilityConfig): OtelObservability;
170
- /**
171
- * Create an OtelObservability instance with environment-based config
172
- *
173
- * Use this when you need to access environment variables for configuration.
174
- *
175
- * @example
176
- * ```typescript
177
- * import { Agent } from 'agents'
178
- * import { createOtelObservabilityFromEnv } from 'autotel-cloudflare/agents'
179
- *
180
- * class MyAgent extends Agent<Env> {
181
- * observability?: OtelObservability
182
- *
183
- * constructor(state: DurableObjectState, env: Env) {
184
- * super(state, env)
185
- * this.observability = createOtelObservabilityFromEnv(env)
186
- * }
187
- * }
188
- * ```
189
- */
190
693
  declare function createOtelObservabilityFromEnv(env: Record<string, unknown>, options?: AgentInstrumentationOptions): OtelObservability;
191
694
  //#endregion
192
- export { type AgentInstrumentationOptions, type AgentObservabilityEvent, type AgentSpanAttributes, type MCPObservabilityEvent, type Observability, type ObservabilityEvent, OtelObservability, type OtelObservabilityConfig, createOtelObservability, createOtelObservabilityFromEnv };
695
+ export { type AgentInstrumentationOptions, type AgentObservabilityEvent, type AgentSpanAttributes, type BaseEvent, type ChannelEventMap, type MCPObservabilityEvent, type Observability, type ObservabilityEvent, OtelObservability, type OtelObservabilityConfig, channels, createOtelObservability, createOtelObservabilityFromEnv, genericObservability, subscribe };
193
696
  //# sourceMappingURL=agents.d.ts.map