eve 0.79.2 → 0.80.1

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 (184) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/src/compiled/.vendor-stamp.json +8 -8
  3. package/dist/src/compiled/@chat-adapter/slack/api.d.ts +6 -0
  4. package/dist/src/compiled/@chat-adapter/slack/api.js +1 -1
  5. package/dist/src/compiled/@chat-adapter/slack/blocks.js +1 -1
  6. package/dist/src/compiled/@chat-adapter/slack/format.js +1 -1
  7. package/dist/src/compiled/@chat-adapter/slack/index.d.ts +14 -8
  8. package/dist/src/compiled/@chat-adapter/slack/index.js +33 -32
  9. package/dist/src/compiled/@chat-adapter/twilio/index.d.ts +37 -1
  10. package/dist/src/compiled/@chat-adapter/twilio/index.js +2 -2
  11. package/dist/src/compiled/@linqapp/chat-sdk-adapter/index.js +1 -1
  12. package/dist/src/compiled/@photon-ai/chat-adapter-imessage/index.js +1 -1
  13. package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/adapters/ai-sdk-telemetry.d.ts +2 -2
  14. package/dist/src/compiled/{@eve/tracing/agent-tracing.d.ts → @vercel/agent-runs/agent-run.d.ts} +3 -3
  15. package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/index.d.ts +1 -1
  16. package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/index.js +1 -1
  17. package/dist/src/compiled/@vercel/connect/index.js +5 -5
  18. package/dist/src/compiled/@vercel/connect/token.d.ts +11 -1
  19. package/dist/src/compiled/@workflow/world-vercel/index.js +3 -3
  20. package/dist/src/compiled/_chunks/node/chunk-NBSLXVG3-Bt7pDfyn.js +12 -0
  21. package/dist/src/compiled/_chunks/node/dist-BKsV21Vu.js +6 -0
  22. package/dist/src/compiled/_chunks/node/dist-CO_n_hUa.js +98 -0
  23. package/dist/src/compiled/chat/index.js +1 -1
  24. package/dist/src/compiler/extension-compatibility.d.ts +6 -6
  25. package/dist/src/compiler/extension-compatibility.js +1 -1
  26. package/dist/src/compiler/manifest.d.ts +8 -4
  27. package/dist/src/compiler/manifest.js +1 -1
  28. package/dist/src/compiler/normalize-connection.js +1 -1
  29. package/dist/src/compiler/normalize-manifest.js +1 -1
  30. package/dist/src/context/schedule-collection-tools.js +1 -1
  31. package/dist/src/execution/catalog/connection-auth.d.ts +4 -2
  32. package/dist/src/execution/catalog/connection-auth.js +1 -1
  33. package/dist/src/execution/catalog/connection-entry.js +1 -1
  34. package/dist/src/execution/dynamic-workflow/tool.js +1 -1
  35. package/dist/src/execution/session/entry.js +1 -1
  36. package/dist/src/execution/session-event-stream.js +1 -1
  37. package/dist/src/execution/stable-workflow-names.d.ts +2 -0
  38. package/dist/src/execution/stable-workflow-names.js +1 -1
  39. package/dist/src/execution/tools/agent-router-workflow.js +1 -1
  40. package/dist/src/execution/web-fetch/execute.js +1 -1
  41. package/dist/src/execution/workflow-runtime.d.ts +6 -0
  42. package/dist/src/execution/workflow-runtime.js +1 -1
  43. package/dist/src/extensions/git/extension/extension.d.ts +3 -1
  44. package/dist/src/extensions/git/extension/extension.js +1 -1
  45. package/dist/src/extensions/git/extension/lib/gh-tool.js +1 -1
  46. package/dist/src/extensions/git/extension/lib/github-shell.d.ts +14 -0
  47. package/dist/src/extensions/git/extension/lib/github-shell.js +1 -1
  48. package/dist/src/harness/compaction/engine.js +2 -2
  49. package/dist/src/harness/compaction/prompt.d.ts +6 -0
  50. package/dist/src/harness/compaction/prompt.js +1 -1
  51. package/dist/src/harness/model-call/call.js +1 -1
  52. package/dist/src/harness/model-call/errors.d.ts +2 -2
  53. package/dist/src/harness/model-call/recovery.d.ts +2 -3
  54. package/dist/src/instrumentation/ai-sdk-hook-bridge.js +1 -1
  55. package/dist/src/instrumentation/principal-summary.js +1 -1
  56. package/dist/src/instrumentation/runtime.d.ts +1 -1
  57. package/dist/src/instrumentation/runtime.js +1 -1
  58. package/dist/src/instrumentation/session-init.d.ts +2 -1
  59. package/dist/src/instrumentation/session-init.js +1 -1
  60. package/dist/src/internal/application/stamped-package-version.js +1 -1
  61. package/dist/src/internal/authored-definition/connection.js +1 -1
  62. package/dist/src/internal/authored-definition/schedule-collection.js +1 -1
  63. package/dist/src/internal/authored-package-boundary.d.ts +4 -0
  64. package/dist/src/internal/authored-package-boundary.js +1 -1
  65. package/dist/src/internal/bundler/nitro-rolldown.d.ts +2 -2
  66. package/dist/src/internal/logging.js +1 -1
  67. package/dist/src/internal/nitro/host/application-route-registry.d.ts +7 -2
  68. package/dist/src/internal/nitro/host/application-route-registry.js +1 -1
  69. package/dist/src/internal/nitro/host/configure-nitro-routes.js +1 -1
  70. package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
  71. package/dist/src/internal/nitro/host/external-dependency-output-check-plugin.d.ts +23 -0
  72. package/dist/src/internal/nitro/host/external-dependency-output-check-plugin.js +3 -0
  73. package/dist/src/internal/nitro/routes/channel-request-instrumentation.d.ts +3 -1
  74. package/dist/src/internal/nitro/routes/channel-request-instrumentation.js +1 -1
  75. package/dist/src/internal/nitro/routes/connection-events.d.ts +5 -0
  76. package/dist/src/internal/nitro/routes/connection-events.js +1 -0
  77. package/dist/src/internal/workflow-bundle/builder.js +1 -1
  78. package/dist/src/internal/workflow-bundle/dynamic-tool-ast-references.js +1 -1
  79. package/dist/src/public/channels/slack/blocks.js +2 -2
  80. package/dist/src/public/connections/index.d.ts +1 -0
  81. package/dist/src/public/definitions/connections/events.d.ts +43 -0
  82. package/dist/src/public/definitions/connections/events.js +1 -0
  83. package/dist/src/public/definitions/connections/mcp.d.ts +3 -0
  84. package/dist/src/public/schedules/subscription.d.ts +4 -3
  85. package/dist/src/runtime/connections/events/actions.d.ts +17 -0
  86. package/dist/src/runtime/connections/events/actions.js +1 -0
  87. package/dist/src/runtime/connections/events/delivery.d.ts +10 -0
  88. package/dist/src/runtime/connections/events/delivery.js +1 -0
  89. package/dist/src/runtime/connections/events/dispatch-step.d.ts +20 -0
  90. package/dist/src/runtime/connections/events/dispatch-step.js +1 -0
  91. package/dist/src/runtime/connections/events/lifecycle-step.d.ts +42 -0
  92. package/dist/src/runtime/connections/events/lifecycle-step.js +1 -0
  93. package/dist/src/runtime/connections/events/owner.d.ts +38 -0
  94. package/dist/src/runtime/connections/events/owner.js +1 -0
  95. package/dist/src/runtime/connections/events/path.d.ts +4 -0
  96. package/dist/src/runtime/connections/events/path.js +1 -0
  97. package/dist/src/runtime/connections/events/state.d.ts +37 -0
  98. package/dist/src/runtime/connections/events/state.js +1 -0
  99. package/dist/src/runtime/connections/events/workflow.d.ts +28 -0
  100. package/dist/src/runtime/connections/events/workflow.js +1 -0
  101. package/dist/src/runtime/connections/mcp-client.d.ts +4 -2
  102. package/dist/src/runtime/connections/mcp-client.js +1 -1
  103. package/dist/src/runtime/connections/openapi-client.js +1 -1
  104. package/dist/src/runtime/connections/scoped-authorization.js +1 -1
  105. package/dist/src/runtime/resolve-connection.js +1 -1
  106. package/dist/src/runtime/schedules/collection-client.d.ts +0 -2
  107. package/dist/src/runtime/schedules/collection-client.js +1 -1
  108. package/dist/src/runtime/types.d.ts +11 -0
  109. package/dist/src/setup/scaffold/create/add-to-project.js +1 -1
  110. package/dist/src/setup/scaffold/create/project.js +2 -2
  111. package/dist/src/setup/scaffold/update/channels.js +1 -1
  112. package/dist/src/setup/scaffold/update/connections.js +2 -2
  113. package/dist/src/setup/scaffold/version-tokens.d.ts +1 -1
  114. package/dist/src/setup/scaffold/version-tokens.js +1 -1
  115. package/dist/src/shared/agent-definition.d.ts +12 -4
  116. package/dist/src/shared/connection-events.d.ts +84 -0
  117. package/dist/src/shared/connection-events.js +1 -0
  118. package/dist/src/shared/connection-types.d.ts +10 -0
  119. package/dist/src/shared/validate-authorization.js +1 -1
  120. package/dist/src/tools/provided/ask-question-workflow.js +1 -1
  121. package/dist/src/tools/provided/no-reply.d.ts +5 -0
  122. package/dist/src/tools/provided/sleep-workflow.js +1 -1
  123. package/dist/src/tracing/eve/agent-approval-instrumentation.d.ts +2 -2
  124. package/dist/src/tracing/eve/agent-channel-delivery-instrumentation.js +1 -1
  125. package/dist/src/tracing/eve/agent-memory-instrumentation.d.ts +2 -2
  126. package/dist/src/tracing/eve/agent-memory-instrumentation.js +1 -1
  127. package/dist/src/tracing/eve/agent-otel-provider.d.ts +1 -1
  128. package/dist/src/tracing/eve/agent-tool-instrumentation.d.ts +3 -3
  129. package/dist/src/tracing/eve/agent-trace-context.js +1 -1
  130. package/dist/src/tracing/eve/agent-trace-state.d.ts +1 -1
  131. package/dist/src/tracing/eve/connection-events.d.ts +25 -0
  132. package/dist/src/tracing/eve/connection-events.js +1 -0
  133. package/dist/src/tracing/eve/content-span-processor.js +1 -1
  134. package/dist/src/tracing/eve/delegation.js +1 -1
  135. package/dist/src/tracing/eve/gateway.d.ts +1 -1
  136. package/dist/src/tracing/eve/install-instrumentation-runtime.js +1 -1
  137. package/dist/src/tracing/eve/invoke-tool-span.js +1 -1
  138. package/dist/src/tracing/eve/mcp.d.ts +2 -1
  139. package/dist/src/tracing/eve/mcp.js +1 -1
  140. package/dist/src/tracing/eve/metadata.d.ts +1 -1
  141. package/dist/src/tracing/eve/operation-input.d.ts +2 -2
  142. package/dist/src/tracing/eve/operation-input.js +1 -1
  143. package/dist/src/tracing/eve/otel-declaration.d.ts +5 -0
  144. package/dist/src/tracing/eve/otel-registration.d.ts +2 -2
  145. package/dist/src/tracing/eve/otel-registration.js +1 -1
  146. package/dist/src/tracing/eve/profile.d.ts +1 -1
  147. package/dist/src/tracing/eve/session.d.ts +2 -2
  148. package/dist/src/tracing/local/trace-summary.js +1 -1
  149. package/docs/agent-config.md +38 -13
  150. package/docs/code-extension.mdx +28 -0
  151. package/docs/concepts/built-in-tools.md +2 -0
  152. package/docs/connections/mcp.mdx +105 -0
  153. package/docs/connections/openapi.mdx +2 -0
  154. package/docs/guides/instrumentation/otel.mdx +10 -0
  155. package/docs/sandbox/vercel.mdx +46 -0
  156. package/package.json +8 -8
  157. package/dist/src/compiled/_chunks/node/chunk-6QHBXN7B-gl4n6nmi.js +0 -12
  158. package/dist/src/compiled/_chunks/node/dist-DYDVZ-FS.js +0 -98
  159. package/dist/src/compiled/_chunks/node/dist-iEFkK9qw.js +0 -6
  160. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/adapters/agent-transport.d.ts +0 -0
  161. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/adapters/ai-sdk-payload.d.ts +0 -0
  162. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/adapters/otel-error.d.ts +0 -0
  163. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/adapters/otel-ids.d.ts +0 -0
  164. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/adapters/otel.d.ts +0 -0
  165. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/adapters/serialization.d.ts +0 -0
  166. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/ai-sdk.d.ts +0 -0
  167. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/ai-sdk.js +0 -0
  168. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/capture.d.ts +0 -0
  169. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/core/activation.d.ts +0 -0
  170. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/core/attributes.d.ts +0 -0
  171. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/core/content-policy.d.ts +0 -0
  172. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/core/context.d.ts +0 -0
  173. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/core/delegation.d.ts +0 -0
  174. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/core/mcp.d.ts +0 -0
  175. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/core/scopes.d.ts +0 -0
  176. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/core/snapshot.d.ts +0 -0
  177. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/core/span-kinds.d.ts +0 -0
  178. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/core/types.d.ts +0 -0
  179. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/core/writer.d.ts +0 -0
  180. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/delegation.d.ts +0 -0
  181. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/delegation.js +0 -0
  182. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/operations.d.ts +0 -0
  183. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/otel.d.ts +0 -0
  184. /package/dist/src/compiled/{@eve/tracing → @vercel/agent-runs}/otel.js +0 -0
@@ -0,0 +1,84 @@
1
+ import type { ConnectionPrincipal } from "#shared/connection-types.js";
2
+ import type { Experimental_ConnectionEvent } from "#public/definitions/connections/events.js";
3
+ export type EventJson = string | number | boolean | null | readonly EventJson[] | EventJsonObject;
4
+ export type EventJsonObject = {
5
+ [key: string]: EventJson | undefined;
6
+ };
7
+ export interface ManagedEventSubscription {
8
+ id: string;
9
+ name: string;
10
+ arguments: EventJsonObject;
11
+ status: "pending" | "active" | "needs_auth" | "stopped" | "expired" | "failed";
12
+ expiresAt: string | null;
13
+ cleanupStatus?: "pending" | "complete" | "exhausted";
14
+ }
15
+ export type ManagedEventSubscribeInput = {
16
+ name: string;
17
+ arguments: EventJsonObject;
18
+ context?: EventJsonObject;
19
+ idempotencyKey: string;
20
+ /** Application lifetime in milliseconds, or null until explicitly stopped. */
21
+ ttlMs: number | null;
22
+ options?: {
23
+ signal?: AbortSignal;
24
+ timeout?: number;
25
+ maxTotalTimeout?: number;
26
+ };
27
+ };
28
+ export interface ConnectionEventsAdapter {
29
+ subscribe(input: ManagedEventSubscribeInput): Promise<ManagedEventSubscription>;
30
+ getSubscription(input: {
31
+ id: string;
32
+ options?: {
33
+ timeout?: number;
34
+ };
35
+ }): Promise<ManagedEventSubscription>;
36
+ unsubscribe(input: {
37
+ id: string;
38
+ options?: {
39
+ timeout?: number;
40
+ };
41
+ }): Promise<ManagedEventSubscription>;
42
+ }
43
+ export type ConnectionEventDelivery = {
44
+ version: 1;
45
+ deliveryId: string;
46
+ subscriptionId: string;
47
+ source: {
48
+ type: "mcp";
49
+ connectorId: string;
50
+ };
51
+ context: Record<string, unknown>;
52
+ } & ({
53
+ event: Experimental_ConnectionEvent;
54
+ } | {
55
+ control: {
56
+ type: "gap";
57
+ cursor: string | null;
58
+ truncated?: true;
59
+ };
60
+ } | {
61
+ control: {
62
+ type: "terminated";
63
+ error: {
64
+ code: number;
65
+ message: string;
66
+ data?: unknown;
67
+ };
68
+ };
69
+ });
70
+ export interface ConnectionEventsBackend {
71
+ createAdapter(input: {
72
+ principal: ConnectionPrincipal;
73
+ connection: {
74
+ url: string;
75
+ };
76
+ destination: {
77
+ path: string;
78
+ };
79
+ }): Promise<ConnectionEventsAdapter>;
80
+ verify(request: Request, options: {
81
+ path: string;
82
+ }): Promise<ConnectionEventDelivery>;
83
+ }
84
+ export declare function readConnectionEventsBackend(value: unknown): ConnectionEventsBackend | undefined;
@@ -0,0 +1 @@
1
+ function readConnectionEventsBackend(e){if(e!==void 0){if(typeof e!=`object`||!e||!(`createAdapter`in e)||typeof e.createAdapter!=`function`||!(`verify`in e)||typeof e.verify!=`function`)throw TypeError(`Connect experimental_events must provide createAdapter and verify methods.`);return e}}export{readConnectionEventsBackend};
@@ -1,3 +1,4 @@
1
+ import type { ConnectionEventsBackend } from "#shared/connection-events.js";
1
2
  /**
2
3
  * Protocol-agnostic interfaces for the connection system.
3
4
  *
@@ -225,6 +226,7 @@ interface AuthorizationDefinitionBase {
225
226
  * Connect side.
226
227
  */
227
228
  readonly vercelConnect?: {
229
+ readonly experimental_events?: ConnectionEventsBackend;
228
230
  readonly connector: string;
229
231
  };
230
232
  /**
@@ -405,9 +407,17 @@ export interface ConnectionToolExecuteOptions {
405
407
  }
406
408
  /** A live client for a single connection. */
407
409
  export interface ConnectionClient {
410
+ /** eve-owned event actions, separate from remote protocol tools and their filters. */
411
+ readonly eventActions?: ConnectionEventActionHandler;
408
412
  close(): Promise<void>;
409
413
  connect(): Promise<unknown>;
410
414
  executeTool(toolName: string, args: unknown, options: ConnectionToolExecuteOptions): Promise<unknown>;
411
415
  getToolMetadata(): Promise<readonly ConnectionToolMetadata[]>;
412
416
  }
417
+ export interface ConnectionEventActionHandler {
418
+ ownsName(name: string): boolean;
419
+ metadata(): Promise<readonly ConnectionToolMetadata[]>;
420
+ recoveryMetadata(): readonly ConnectionToolMetadata[];
421
+ execute(name: string, args: unknown, options: ConnectionToolExecuteOptions): Promise<unknown>;
422
+ }
413
423
  export {};
@@ -1 +1 @@
1
- import{extractVercelConnectMetadata}from"#shared/vercel-connect-metadata.js";function validateAuthorizationSpec(e,t=`auth`){if(typeof e!=`object`||!e)return`The "${t}" field must be an object with a "getToken" method.`;let n=e;if(typeof n.getToken!=`function`)return`The "${t}.getToken" field must be a function returning Promise<{ token }>.`;let r=n.startAuthorization!==void 0,i=n.completeAuthorization!==void 0,a=n.credentialOwner!==void 0,o=n.principalType!==void 0;if(a&&o)return`The "${t}" field must not provide both "credentialOwner" and "principalType".`;let s=a?`credentialOwner`:`principalType`,c=a?n.credentialOwner:n.principalType;if(c!==void 0&&c!==`app`&&c!==`user`)return`The "${t}.${s}" field must be "app" or "user".`;if(r!==i)return`The "${t}" field must provide either both "startAuthorization" and "completeAuthorization" (interactive OAuth) or neither (getToken-only). Got only "${r?`startAuthorization`:`completeAuthorization`}".`;if(r&&typeof n.startAuthorization!=`function`)return`The "${t}.startAuthorization" field must be a function when provided.`;if(i&&typeof n.completeAuthorization!=`function`)return`The "${t}.completeAuthorization" field must be a function when provided.`;if(r&&a)return`The "${t}.credentialOwner" field is only supported by getToken-only authorization. Interactive authorization is restricted to "principalType": "user" in v1.`;if(r&&n.principalType!==`user`)return`Interactive authorization (startAuthorization + completeAuthorization) is restricted to "principalType": "user" in v1. App-level credentials must use a getToken-only definition.`;if(n.displayName!==void 0&&(typeof n.displayName!=`string`||n.displayName.length===0))return`The "${t}.displayName" field must be a non-empty string when provided.`}function normalizeAuthorizationSpec(e,t,n=`auth`){let r=validateAuthorizationSpec(e,n);if(r!==void 0)throw Error(`${t} ${r}`);let i=e,a=extractVercelConnectMetadata(i.vercelConnect),o=i.displayName,s=typeof i.evict==`function`?i.evict:void 0;if(i.startAuthorization!==void 0&&i.completeAuthorization!==void 0){let e={completeAuthorization:i.completeAuthorization,getToken:i.getToken,principalType:`user`,startAuthorization:i.startAuthorization};return a!==void 0&&(e={...e,vercelConnect:a}),o!==void 0&&(e={...e,displayName:o}),s!==void 0&&(e={...e,evict:s}),e}let c={getToken:i.getToken,principalType:i.credentialOwner??i.principalType??`app`};return a!==void 0&&(c={...c,vercelConnect:a}),o!==void 0&&(c={...c,displayName:o}),s!==void 0&&(c={...c,evict:s}),c}export{normalizeAuthorizationSpec,validateAuthorizationSpec};
1
+ import{extractVercelConnectMetadata}from"#shared/vercel-connect-metadata.js";import{readConnectionEventsBackend}from"#shared/connection-events.js";function validateAuthorizationSpec(e,t=`auth`){if(typeof e!=`object`||!e)return`The "${t}" field must be an object with a "getToken" method.`;let n=e;if(typeof n.getToken!=`function`)return`The "${t}.getToken" field must be a function returning Promise<{ token }>.`;let r=n.startAuthorization!==void 0,i=n.completeAuthorization!==void 0,a=n.credentialOwner!==void 0,o=n.principalType!==void 0;if(a&&o)return`The "${t}" field must not provide both "credentialOwner" and "principalType".`;let s=a?`credentialOwner`:`principalType`,c=a?n.credentialOwner:n.principalType;if(c!==void 0&&c!==`app`&&c!==`user`)return`The "${t}.${s}" field must be "app" or "user".`;if(r!==i)return`The "${t}" field must provide either both "startAuthorization" and "completeAuthorization" (interactive OAuth) or neither (getToken-only). Got only "${r?`startAuthorization`:`completeAuthorization`}".`;if(r&&typeof n.startAuthorization!=`function`)return`The "${t}.startAuthorization" field must be a function when provided.`;if(i&&typeof n.completeAuthorization!=`function`)return`The "${t}.completeAuthorization" field must be a function when provided.`;if(r&&a)return`The "${t}.credentialOwner" field is only supported by getToken-only authorization. Interactive authorization is restricted to "principalType": "user" in v1.`;if(r&&n.principalType!==`user`)return`Interactive authorization (startAuthorization + completeAuthorization) is restricted to "principalType": "user" in v1. App-level credentials must use a getToken-only definition.`;if(n.displayName!==void 0&&(typeof n.displayName!=`string`||n.displayName.length===0))return`The "${t}.displayName" field must be a non-empty string when provided.`}function normalizeAuthorizationSpec(e,t,n=`auth`){let r=validateAuthorizationSpec(e,n);if(r!==void 0)throw Error(`${t} ${r}`);let i=e,a=extractVercelConnectMetadata(i.vercelConnect),o=readConnectionEventsBackend(i.vercelConnect?.experimental_events),s=a;o!==void 0&&a!==void 0&&(s={...a,experimental_events:o});let c=i.displayName,l=typeof i.evict==`function`?i.evict:void 0;if(i.startAuthorization!==void 0&&i.completeAuthorization!==void 0){let e={completeAuthorization:i.completeAuthorization,getToken:i.getToken,principalType:`user`,startAuthorization:i.startAuthorization};return s!==void 0&&(e={...e,vercelConnect:s}),c!==void 0&&(e={...e,displayName:c}),l!==void 0&&(e={...e,evict:l}),e}let u={getToken:i.getToken,principalType:i.credentialOwner??i.principalType??`app`};return s!==void 0&&(u={...u,vercelConnect:s}),c!==void 0&&(u={...u,displayName:c}),l!==void 0&&(u={...u,evict:l}),u}export{normalizeAuthorizationSpec,validateAuthorizationSpec};
@@ -1 +1 @@
1
- async function executeAskQuestionTool(e,t){"use workflow";return toAskQuestionOutput(await t.ask(toAskQuestionRequest(e)))}function toAskQuestionRequest(e){let t=e.options?.map(e=>({description:e.description,id:e.label,label:e.label}));return{allowFreeform:!0,display:t===void 0?`text`:`select`,prompt:e.question,...t!==void 0&&{options:t}}}function toAskQuestionOutput(e){switch(e.status){case`answered`:return{answer:e.optionId??e.text??``,status:`answered`};case`cancelled`:return{interrupted:!0};case`unavailable`:return{status:`unavailable`}}}executeAskQuestionTool.workflowId=`workflow//eve@0.79.2//executeAskQuestionTool`;export{executeAskQuestionTool,toAskQuestionOutput,toAskQuestionRequest};
1
+ async function executeAskQuestionTool(e,t){"use workflow";return toAskQuestionOutput(await t.ask(toAskQuestionRequest(e)))}function toAskQuestionRequest(e){let t=e.options?.map(e=>({description:e.description,id:e.label,label:e.label}));return{allowFreeform:!0,display:t===void 0?`text`:`select`,prompt:e.question,...t!==void 0&&{options:t}}}function toAskQuestionOutput(e){switch(e.status){case`answered`:return{answer:e.optionId??e.text??``,status:`answered`};case`cancelled`:return{interrupted:!0};case`unavailable`:return{status:`unavailable`}}}executeAskQuestionTool.workflowId=`workflow//eve@0.80.1//executeAskQuestionTool`;export{executeAskQuestionTool,toAskQuestionOutput,toAskQuestionRequest};
@@ -15,5 +15,10 @@ export interface NoReplyToolInput {
15
15
  *
16
16
  * A turn that ends with `no_reply` completes without a final message, so
17
17
  * channels and schedules post nothing. Only root sessions receive it.
18
+ * A root session also accepts a model call returning no text with
19
+ * `finishReason: "stop"` without retry. Delegated sessions still retry empty
20
+ * replies and report a failure if recovery is exhausted.
21
+ * This tool records an explicit choice to stay quiet and an optional reason
22
+ * instead of relying on blank model output.
18
23
  */
19
24
  export declare function noReply(): ToolDefinition<NoReplyToolInput, string>;
@@ -1 +1 @@
1
- import{sleep}from"#compiled/@workflow/core/index.js";async function executeSleepTool(e,t){"use workflow";let n=new Promise(e=>t.abortSignal.addEventListener(`abort`,()=>e(`interrupted`),{once:!0})),r=sleep(Math.ceil(e.seconds*1e3)).then(()=>`elapsed`);return await Promise.race([r,n])===`elapsed`?{waitedSeconds:e.seconds}:{interrupted:!0}}executeSleepTool.workflowId=`workflow//eve@0.79.2//executeSleepTool`;export{executeSleepTool};
1
+ import{sleep}from"#compiled/@workflow/core/index.js";async function executeSleepTool(e,t){"use workflow";if(t.abortSignal.aborted)return{interrupted:!0};let n=new Promise(e=>t.abortSignal.addEventListener(`abort`,()=>e(`interrupted`),{once:!0})),r=sleep(Math.ceil(e.seconds*1e3)).then(()=>`elapsed`);return await Promise.race([r,n])===`elapsed`?{waitedSeconds:e.seconds}:{interrupted:!0}}executeSleepTool.workflowId=`workflow//eve@0.80.1//executeSleepTool`;export{executeSleepTool};
@@ -1,8 +1,8 @@
1
1
  import type { InstrumentationProviderDefinition } from "#instrumentation/lifecycle.js";
2
2
  import type { AgentActionTraceState } from "#tracing/eve/agent-trace-state.js";
3
- import type { AgentTracing } from "#compiled/@eve/tracing/index.js";
3
+ import type { AgentRun } from "#compiled/@vercel/agent-runs/index.js";
4
4
  /** Approval spans live under their tool call; hook state keeps only the locator. */
5
5
  export declare function createAgentApprovalInstrumentation(input: {
6
- readonly tracing: AgentTracing;
6
+ readonly tracing: AgentRun;
7
7
  readonly actionStateFor: (sessionId: string, turnId: string, callId: string) => Promise<AgentActionTraceState | undefined>;
8
8
  }): Pick<NonNullable<InstrumentationProviderDefinition["events"]>, "input.requested" | "input.resolved">;
@@ -1 +1 @@
1
- import{contextStorage}from"#context/container.js";import{ActiveChannelDeliveriesKey}from"#context/keys.js";import{isSampledTrace}from"#shared/trace-policy.js";import{contentAttribute}from"#compiled/@eve/tracing/otel.js";function createAgentChannelDeliveryInstrumentation(e){let onStarted=async(t,n)=>{let r=await e.stateStore.get(`session`,t.sessionId),i=(t.turnId===void 0||t.sequence===void 0?void 0:await e.stateStore.get(`turn`,JSON.stringify([t.sessionId,t.turnId])))?.context??r?.context;if(i===void 0||!isSampledTrace(i))return;let a=e.recordInputs?contentAttribute(t.input):void 0,o={};a!==void 0&&(o.inputAttribute=a),t.delivery.requestTraceContext!==void 0&&(o.requestTraceContext={spanId:t.delivery.requestTraceContext.spanId,traceFlags:t.delivery.requestTraceContext.traceFlags,traceId:t.delivery.requestTraceContext.traceId}),n.state.set(o)},onTerminal=async(t,n)=>{let r=readState(n.state.get());if(r===void 0||t.turnId===void 0)return;let i=await e.stateStore.get(`turn`,JSON.stringify([t.sessionId,t.turnId]));i!==void 0&&isSampledTrace(i.context)&&isOnlyActiveDelivery(t.sessionId,t.turnId,t.delivery.deliveryId)&&await e.stateStore.update(`turn`,JSON.stringify([t.sessionId,t.turnId]),e=>({...e,channelDelivery:{channelKind:t.delivery.channelKind,channelName:t.delivery.channelName,deliveryId:t.delivery.deliveryId,...r.inputAttribute===void 0?void 0:{inputAttribute:r.inputAttribute},...t.delivery.requestId===void 0?void 0:{requestId:t.delivery.requestId},...r.requestTraceContext===void 0?void 0:{requestTraceContext:r.requestTraceContext}}}))};return{"channel.delivery.cancelled":onTerminal,"channel.delivery.completed":onTerminal,"channel.delivery.failed":onTerminal,"channel.delivery.started":onStarted}}function isOnlyActiveDelivery(e,t,n){let r=contextStorage.getStore()?.get(ActiveChannelDeliveriesKey),i=r?.[0];return r?.length===1&&i?.sessionId===e&&i.turnId===t&&i.delivery.deliveryId===n}function readState(e){if(!isRecord(e))return;let t=isSpanContext(e.requestTraceContext)?e.requestTraceContext:void 0;return{inputAttribute:typeof e.inputAttribute==`string`?e.inputAttribute:void 0,requestTraceContext:t}}function isSpanContext(e){return isRecord(e)&&typeof e.spanId==`string`&&typeof e.traceFlags==`number`&&typeof e.traceId==`string`}function isRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}export{createAgentChannelDeliveryInstrumentation};
1
+ import{contextStorage}from"#context/container.js";import{ActiveChannelDeliveriesKey}from"#context/keys.js";import{isSampledTrace}from"#shared/trace-policy.js";import{contentAttribute}from"#compiled/@vercel/agent-runs/otel.js";function createAgentChannelDeliveryInstrumentation(e){let onStarted=async(t,n)=>{let r=await e.stateStore.get(`session`,t.sessionId),i=(t.turnId===void 0||t.sequence===void 0?void 0:await e.stateStore.get(`turn`,JSON.stringify([t.sessionId,t.turnId])))?.context??r?.context;if(i===void 0||!isSampledTrace(i))return;let a=e.recordInputs?contentAttribute(t.input):void 0,o={};a!==void 0&&(o.inputAttribute=a),t.delivery.requestTraceContext!==void 0&&(o.requestTraceContext={spanId:t.delivery.requestTraceContext.spanId,traceFlags:t.delivery.requestTraceContext.traceFlags,traceId:t.delivery.requestTraceContext.traceId}),n.state.set(o)},onTerminal=async(t,n)=>{let r=readState(n.state.get());if(r===void 0||t.turnId===void 0)return;let i=await e.stateStore.get(`turn`,JSON.stringify([t.sessionId,t.turnId]));i!==void 0&&isSampledTrace(i.context)&&isOnlyActiveDelivery(t.sessionId,t.turnId,t.delivery.deliveryId)&&await e.stateStore.update(`turn`,JSON.stringify([t.sessionId,t.turnId]),e=>({...e,channelDelivery:{channelKind:t.delivery.channelKind,channelName:t.delivery.channelName,deliveryId:t.delivery.deliveryId,...r.inputAttribute===void 0?void 0:{inputAttribute:r.inputAttribute},...t.delivery.requestId===void 0?void 0:{requestId:t.delivery.requestId},...r.requestTraceContext===void 0?void 0:{requestTraceContext:r.requestTraceContext}}}))};return{"channel.delivery.cancelled":onTerminal,"channel.delivery.completed":onTerminal,"channel.delivery.failed":onTerminal,"channel.delivery.started":onStarted}}function isOnlyActiveDelivery(e,t,n){let r=contextStorage.getStore()?.get(ActiveChannelDeliveriesKey),i=r?.[0];return r?.length===1&&i?.sessionId===e&&i.turnId===t&&i.delivery.deliveryId===n}function readState(e){if(!isRecord(e))return;let t=isSpanContext(e.requestTraceContext)?e.requestTraceContext:void 0;return{inputAttribute:typeof e.inputAttribute==`string`?e.inputAttribute:void 0,requestTraceContext:t}}function isSpanContext(e){return isRecord(e)&&typeof e.spanId==`string`&&typeof e.traceFlags==`number`&&typeof e.traceId==`string`}function isRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}export{createAgentChannelDeliveryInstrumentation};
@@ -1,9 +1,9 @@
1
1
  import type { InstrumentationMemoryExecutionOperation } from "#instrumentation/memory.js";
2
2
  import type { ConversationEnvironment } from "#shared/conversation-context.js";
3
3
  import type { AgentTraceStateStore } from "#tracing/eve/agent-trace-state.js";
4
- import { type AgentTracing } from "#compiled/@eve/tracing/index.js";
4
+ import { type AgentRun } from "#compiled/@vercel/agent-runs/index.js";
5
5
  export declare function createAgentMemoryInstrumentation(input: {
6
- tracing: AgentTracing;
6
+ tracing: AgentRun;
7
7
  environment: ConversationEnvironment;
8
8
  recordOutputs?: boolean;
9
9
  stateStore: AgentTraceStateStore;
@@ -1 +1 @@
1
- import{normalizeChannelAudience}from"#shared/channel-audience.js";import{applyLiveDeliveryAudienceCeiling,resolveForwardedTraceSeed}from"#shared/forwarded-trace-policy.js";import{contextStorage}from"#context/container.js";import{SessionTraceSeedKey}from"#context/keys.js";import{ROOT_CONTEXT,context,trace}from"#compiled/@opentelemetry/api/index.js";import{activeTraceOperation}from"#compiled/@eve/tracing/otel.js";import"#compiled/@eve/tracing/index.js";import{withChannelAudience}from"#tracing/eve/channel-audience-context.js";import{eveTurnIdentity}from"#tracing/eve/operation-input.js";function createAgentMemoryInstrumentation(e){return{async runInContext(t,n){let r=await e.stateStore.get(`session`,t.sessionId),i=t.turnId===void 0?void 0:await e.stateStore.get(`turn`,JSON.stringify([t.sessionId,t.turnId])),a=activeTraceOperation(),o=a?.reference??i?.context??r?.context;if(o===void 0)return await n();let s=a===void 0?withChannelAudience(trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext(o)),r?.channelAudience):context.active(),c=resolveForwardedTraceSeed(contextStorage.getStore()?.get(SessionTraceSeedKey)),l=c?.decision??r?.decision,u=l===void 0?void 0:applyLiveDeliveryAudienceCeiling(l,normalizeChannelAudience(r?.channelAudience),c?.forwardedTracePolicy,e.environment),d={emit:!!(o.traceFlags&1),recordInputs:u?.action===`record`&&u.recordInputs,recordOutputs:e.recordOutputs===!0&&u?.action===`record`&&u.recordOutputs},f={identity:eveTurnIdentity({...t,turnId:t.turnId??``}),parent:o,context:s,capture:d,phase:t.phase,slot:t.slot,storeId:t.storeId,describe(e){let t=e;return{recordCount:t.recordCount,records:t.outputRecords}}},p=e.tracing.memory;return t.operationName===`search_memory`?await p.search(f,n):await p.write(f,n)}}}export{createAgentMemoryInstrumentation};
1
+ import{normalizeChannelAudience}from"#shared/channel-audience.js";import{applyLiveDeliveryAudienceCeiling,resolveForwardedTraceSeed}from"#shared/forwarded-trace-policy.js";import{contextStorage}from"#context/container.js";import{SessionTraceSeedKey}from"#context/keys.js";import{ROOT_CONTEXT,context,trace}from"#compiled/@opentelemetry/api/index.js";import{activeTraceOperation}from"#compiled/@vercel/agent-runs/otel.js";import"#compiled/@vercel/agent-runs/index.js";import{withChannelAudience}from"#tracing/eve/channel-audience-context.js";import{eveTurnIdentity}from"#tracing/eve/operation-input.js";function createAgentMemoryInstrumentation(e){return{async runInContext(t,n){let r=await e.stateStore.get(`session`,t.sessionId),i=t.turnId===void 0?void 0:await e.stateStore.get(`turn`,JSON.stringify([t.sessionId,t.turnId])),a=activeTraceOperation(),o=a?.reference??i?.context??r?.context;if(o===void 0)return await n();let s=a===void 0?withChannelAudience(trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext(o)),r?.channelAudience):context.active(),c=resolveForwardedTraceSeed(contextStorage.getStore()?.get(SessionTraceSeedKey)),l=c?.decision??r?.decision,u=l===void 0?void 0:applyLiveDeliveryAudienceCeiling(l,normalizeChannelAudience(r?.channelAudience),c?.forwardedTracePolicy,e.environment),d={emit:!!(o.traceFlags&1),recordInputs:u?.action===`record`&&u.recordInputs,recordOutputs:e.recordOutputs===!0&&u?.action===`record`&&u.recordOutputs},f={identity:eveTurnIdentity({...t,turnId:t.turnId??``}),parent:o,context:s,capture:d,phase:t.phase,slot:t.slot,storeId:t.storeId,describe(e){let t=e;return{recordCount:t.recordCount,records:t.outputRecords}}},p=e.tracing.memory;return t.operationName===`search_memory`?await p.search(f,n):await p.write(f,n)}}}export{createAgentMemoryInstrumentation};
@@ -2,7 +2,7 @@ import type { AgentTraceStateStore } from "#tracing/eve/agent-trace-state.js";
2
2
  import type { TraceCapturePolicy } from "#tracing/eve/otel-declaration.js";
3
3
  import type { InstrumentationContextRunner, InstrumentationProviderDefinition, InstrumentationSessionStartedEvent, InstrumentationTraceSeed, InstrumentationTurnStartedEvent } from "#instrumentation/lifecycle.js";
4
4
  import type { ConversationEnvironment } from "#shared/conversation-context.js";
5
- import type { AgentSpanIdGenerator, AgentTelemetry } from "#compiled/@eve/tracing/index.js";
5
+ import type { AgentSpanIdGenerator, AgentTelemetry } from "#compiled/@vercel/agent-runs/index.js";
6
6
  export interface AgentOtelInstrumentationInput {
7
7
  /** Span output for eve's agent spans; its `ids` make turns durable across workers. */
8
8
  readonly telemetry: AgentTelemetry;
@@ -1,7 +1,7 @@
1
1
  import { type Context, type SpanContext } from "#compiled/@opentelemetry/api/index.js";
2
2
  import type { InstrumentationAttemptScope, InstrumentationExecutionOperation, InstrumentationToolCallStartedEvent, InstrumentationToolCallTerminalEvent } from "#instrumentation/lifecycle.js";
3
3
  import type { AgentActionTraceState, AgentTraceStateStore } from "#tracing/eve/agent-trace-state.js";
4
- import type { AgentTracing, AttemptOperation, CaptureDecision, ToolOperation } from "#compiled/@eve/tracing/index.js";
4
+ import type { AgentRun, AttemptOperation, CaptureDecision, ToolOperation } from "#compiled/@vercel/agent-runs/index.js";
5
5
  export interface AgentToolContext {
6
6
  readonly context: Context;
7
7
  readonly spanContext: SpanContext;
@@ -10,7 +10,7 @@ type ToolExecution = Extract<InstrumentationExecutionOperation, {
10
10
  type: "tool.call";
11
11
  }>;
12
12
  /** Finds an open tool call in its turn's trace tree, in this or a later process. */
13
- export declare function resumeTool(tracing: AgentTracing, state: AgentActionTraceState): Promise<ToolOperation | undefined>;
13
+ export declare function resumeTool(tracing: AgentRun, state: AgentActionTraceState): Promise<ToolOperation | undefined>;
14
14
  /**
15
15
  * One `execute_tool` span per call. eve's tool loop reports the durable
16
16
  * dispatch through `tool.call.*` events; the SDK reports the run through the
@@ -18,7 +18,7 @@ export declare function resumeTool(tracing: AgentTracing, state: AgentActionTrac
18
18
  * without a dispatch closes under its step when the step ends.
19
19
  */
20
20
  export declare function createAgentToolInstrumentation(input: {
21
- readonly tracing: AgentTracing;
21
+ readonly tracing: AgentRun;
22
22
  readonly attemptFor: (scope: InstrumentationAttemptScope) => Promise<AttemptOperation | undefined>;
23
23
  readonly stepFor: (scope: InstrumentationAttemptScope) => AttemptOperation | undefined;
24
24
  readonly recordInputs: boolean;
@@ -1 +1 @@
1
- import{createContextKey}from"#compiled/@opentelemetry/api/index.js";import{activeTraceOperation}from"#compiled/@eve/tracing/otel.js";const AGENT_TRACE_KEY=createContextKey(`eve.agent.trace`);function isAgentTraceContext(e){if(typeof e!=`object`||!e)return!1;if(activeTraceOperation(e)!==void 0)return!0;let t=Reflect.get(e,`getValue`);return typeof t==`function`&&Reflect.apply(t,e,[AGENT_TRACE_KEY])===!0}function markAgentTraceContext(e){return e.setValue(AGENT_TRACE_KEY,!0)}export{isAgentTraceContext,markAgentTraceContext};
1
+ import{createContextKey}from"#compiled/@opentelemetry/api/index.js";import{activeTraceOperation}from"#compiled/@vercel/agent-runs/otel.js";const AGENT_TRACE_KEY=createContextKey(`eve.agent.trace`);function isAgentTraceContext(e){if(typeof e!=`object`||!e)return!1;if(activeTraceOperation(e)!==void 0)return!0;let t=Reflect.get(e,`getValue`);return typeof t==`function`&&Reflect.apply(t,e,[AGENT_TRACE_KEY])===!0}function markAgentTraceContext(e){return e.setValue(AGENT_TRACE_KEY,!0)}export{isAgentTraceContext,markAgentTraceContext};
@@ -2,7 +2,7 @@ import type { SpanContext } from "#compiled/@opentelemetry/api/index.js";
2
2
  import type { InstrumentationParentLineage, InstrumentationPrincipalSummary } from "#instrumentation/lifecycle.js";
3
3
  import type { ChannelAudience } from "#shared/channel-audience.js";
4
4
  import type { InstrumentationDecision } from "#shared/instrumentation-decision.js";
5
- import type { TraceSnapshot } from "#compiled/@eve/tracing/index.js";
5
+ import type { TraceSnapshot } from "#compiled/@vercel/agent-runs/index.js";
6
6
  export interface AgentSessionTraceState {
7
7
  readonly traceSessionId: string;
8
8
  readonly channelAudience?: ChannelAudience;
@@ -0,0 +1,25 @@
1
+ import { type SpanContext } from "#compiled/@opentelemetry/api/index.js";
2
+ import { type AlsContext } from "#context/container.js";
3
+ /** Only carry a validated W3C identity across durable steps, never baggage or content policy. */
4
+ export declare function connectionEventTraceContext(value: unknown): SpanContext | undefined;
5
+ export declare function connectionEventAttributes(input: {
6
+ connectionName: string;
7
+ sessionId?: string;
8
+ subscriptionId?: string;
9
+ deliveryId?: string;
10
+ bindingId?: string;
11
+ }): Record<string, string>;
12
+ /** Preserve diagnostic categories without logging SDK request objects or provider response bodies. */
13
+ export declare function connectionEventError(error: unknown): Error;
14
+ type EventOperation = "catalog" | "subscribe" | "get" | "unsubscribe" | "onEvent" | "onGap" | "onTerminated";
15
+ /** No model turn is needed to restore a session's trace policy in a durable event step. */
16
+ export declare function withConnectionEventSpan<T>(input: {
17
+ ctx: AlsContext;
18
+ connectionName: string;
19
+ operation: EventOperation;
20
+ subscriptionId?: string;
21
+ deliveryId?: string;
22
+ bindingId?: string;
23
+ requestTraceContext?: SpanContext;
24
+ }, execute: (reference?: SpanContext) => Promise<T>): Promise<T>;
25
+ export {};
@@ -0,0 +1 @@
1
+ import{createLogger,logError}from"#internal/logging.js";import{contextStorage}from"#context/container.js";import{SessionIdKey}from"#context/keys.js";import{BundleKey}from"#runtime/sessions/runtime-context-keys.js";import{formatTraceparent}from"#protocol/traceparent.js";import{ContextAgentTraceStateStore}from"#tracing/eve/agent-trace-context-store.js";import{resolveTracePolicy}from"#shared/trace-policy.js";import{ROOT_CONTEXT,context,trace}from"#compiled/@opentelemetry/api/index.js";import{markAgentTraceContext}from"#tracing/eve/agent-trace-context.js";import{activeTraceOperation,truncateTelemetryText,withErrorContent}from"#compiled/@vercel/agent-runs/otel.js";import{otelTelemetry}from"#compiled/@vercel/agent-runs/index.js";import{readInstrumentationSessionContext}from"#instrumentation/session-context.js";import{getInstrumentationRuntime}from"#instrumentation/runtime-global.js";import{withChannelAudience}from"#tracing/eve/channel-audience-context.js";import{eveOutputMapping}from"#tracing/eve/profile.js";const log=createLogger(`connection.events`);function connectionEventTraceContext(e){if(typeof e!=`object`||!e)return;let{traceId:t,spanId:n,traceFlags:r}=e;if(typeof t!=`string`||typeof n!=`string`||r!==0&&r!==1)return;let i={traceId:t,spanId:n,traceFlags:r};return formatTraceparent(i)===void 0?void 0:i}function connectionEventAttributes(e){let t={};for(let[n,r]of Object.entries({"agent.connection.name":e.connectionName,"agent.run.id":e.sessionId,"connect.subscription.id":e.subscriptionId,"connect.delivery.id":e.deliveryId,"eve.connection.event.binding.id":e.bindingId}))r!==void 0&&(t[n]=truncateTelemetryText(r,256));return t}function connectionEventError(e){let t=Error(`Connection event operation failed`);if(e instanceof Error&&[`Error`,`TypeError`,`RangeError`,`SyntaxError`,`AbortError`,`TimeoutError`,`MCPClientError`].includes(e.name)&&(t.name=e.name),typeof e!=`object`||!e)return t;let n=e,r=n.code,i=n.statusCode??n.status,a=typeof r==`number`&&Number.isFinite(r)||typeof r==`string`&&[`invalid_delivery`,`verification_unavailable`,`configuration_error`,`ETIMEDOUT`,`ECONNRESET`,`ECONNREFUSED`,`ENOTFOUND`,`EAI_AGAIN`].includes(r)?r:void 0;return a!==void 0&&Object.assign(t,{code:a}),typeof i==`number`&&Number.isInteger(i)&&i>=100&&i<=599&&Object.assign(t,{statusCode:i}),t}async function withConnectionEventSpan(e,t){return contextStorage.run(e.ctx,async()=>{let n=getInstrumentationRuntime(),r=otelTelemetry({tracerName:`eve.connection.events`,mapping:eveOutputMapping()}),i=n?.otelSettings,a=e.ctx.require(SessionIdKey),o=connectionEventAttributes({...e,sessionId:a}),run=async n=>{try{return await t(n)}catch(t){throw logError(log,`connection event operation failed`,connectionEventError(t),{...o,operation:e.operation}),t}};if(i===void 0)return r.suppressed(()=>run());let s=new ContextAgentTraceStateStore().get(`session`,a),c=readInstrumentationSessionContext(e.ctx),l=c.traceSeed?.decision??s?.decision??resolveTracePolicy(i.tracePolicy,{...c.conversation,agentName:e.ctx.require(BundleKey).resolvedAgent.config?.name??`eve`}),u=activeTraceOperation(),d=connectionEventTraceContext(e.requestTraceContext)??u?.reference??s?.context;if(l.action===`drop`||u?.capture.emit===!1||c.traceSeed!==void 0&&!(c.traceSeed.traceFlags&1)||s!==void 0&&!(s.context.traceFlags&1)||d!==void 0&&!(d.traceFlags&1))return r.suppressed(()=>run());let f=d===void 0?context.active():trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext(d)),p=markAgentTraceContext(withErrorContent(withChannelAudience(f,c.audience),!1)),m=`agent.connection.event.${e.operation}`,h=r.startSpan({type:`step`,operationId:m,name:m,kind:e.operation.startsWith(`on`)?`CONSUMER`:`INTERNAL`,attributes:{...o,"operation.name":m,"resource.name":m}},{context:p});try{let t=await r.run({type:`step`,reference:h.reference,capture:{emit:!0,recordInputs:!1,recordOutputs:!1}},()=>run(connectionEventTraceContext(h.reference)),p);if([`subscribe`,`get`,`unsubscribe`].includes(e.operation)&&typeof t==`object`&&t){let e=t;typeof e.id==`string`&&h.setAttribute(`connect.subscription.id`,truncateTelemetryText(e.id,256)),typeof e.status==`string`&&[`pending`,`active`,`needs_auth`,`stopped`,`expired`,`failed`].includes(e.status)&&h.setAttribute(`connect.subscription.status`,e.status)}return h.setAttribute(`eve.connection.event.outcome`,`completed`),h.setStatus(`OK`),t}catch(e){throw h.setAttribute(`eve.connection.event.outcome`,`failed`),h.fail(void 0,`connection_event_error`),e}finally{h.end(),await n.forceFlush().catch(()=>log.warn(`flushing connection event traces failed`))}})}export{connectionEventAttributes,connectionEventError,connectionEventTraceContext,withConnectionEventSpan};
@@ -1 +1 @@
1
- import{normalizeChannelAudience}from"#shared/channel-audience.js";import{withoutDeclinedContent}from"#compiled/@eve/tracing/otel.js";import{hasConversationRelease}from"#tracing/local/traces.js";import{channelAudienceFromContext}from"#tracing/eve/channel-audience-context.js";import{normalizeSpanExportPolicies}from"#tracing/eve/span-export-policy.js";function contentFilteringProcessor(e,t){let n=normalizeSpanExportPolicies(t);if(n.length===0)return e;let r=e;for(let e of n.toReversed())r=policyFilteringProcessor(r,e);return r}function policyFilteringProcessor(e,t){let n=new WeakMap,r=new WeakSet,i={forceFlush:()=>e.forceFlush(),onEnd:i=>{if(typeof i!=`object`||!i)return;let a=facadeFor(i,t,n);if(r.has(i)||!a.exported){r.delete(i),n.delete(i);return}a.refresh();try{e.onEnd(a.value)}finally{n.delete(i)}},onStart:(i,a)=>{if(typeof i!=`object`||!i)return;let o=facadeFor(i,t,n,channelAudienceFromContext(a));if(!o.exported){r.add(i);return}e.onStart(o.value,a)},shutdown:()=>e.shutdown()};return hasConversationRelease(e)?{...i,releaseConversation:t=>e.releaseConversation(t)}:i}function facadeFor(e,t,n,r){let i=n.get(e);if(i!==void 0)return i;let a=spanExportContext(e,r),o=spanExportDecision(a,t),s={recordInputs:!o.redactInputs,recordOutputs:!o.redactOutputs},c={},l=[],u={},d=Object.create(Reflect.getPrototypeOf(e)),f=new Map,refresh=()=>{refreshAttributes(c,e,s,a,t),refreshEvents(l,e,s),refreshStatus(u,e,s)},p,readOriginal=t=>{let n=Reflect.get(e,t,e);if(typeof n!=`function`||t===`constructor`)return n;let r=f.get(t);if(r!==void 0)return r;let created=(...t)=>{let r=Reflect.apply(n,e,t);return refresh(),r===e?p:r};return f.set(t,created),created};Object.defineProperty(d,"attributes",{configurable:!0,enumerable:!0,value:c}),Object.defineProperty(d,"events",{configurable:!0,enumerable:!0,value:l}),Object.defineProperty(d,"status",{configurable:!0,enumerable:!0,value:u});for(let t of Reflect.ownKeys(e)){if(t===`attributes`||t===`events`||t===`status`)continue;let n=Reflect.getOwnPropertyDescriptor(e,t);Object.defineProperty(d,t,{configurable:!0,enumerable:n?.enumerable??!1,get:()=>readOriginal(t)})}p=new Proxy(d,{get:(e,t,n)=>Object.hasOwn(e,t)?Reflect.get(e,t,n):readOriginal(t)});let m={context:a,exported:o.exported,refresh,value:p};return m.refresh(),n.set(e,m),m}function refreshAttributes(e,t,n,r,i){for(let t of Object.keys(e))delete e[t];let a=t.attributes;if(typeof a!=`object`||!a)return;let o=withoutDeclinedContent(a,n)??a;for(let[t,n]of Object.entries(o)){let a=attributeDecision(i,{key:t,span:r,value:n});typeof a==`object`&&a&&(`emit`in a&&`replace`in a||(`replace`in a&&a.replace===!0?a.value!==void 0&&(e[t]=a.value):`emit`in a&&a.emit===!0&&(e[t]=n)))}}function spanExportContext(e,t=`unknown`){let n=e.attributes,r=typeof n==`object`&&n?n:{},i=[r[`agent.channel.audience`],r[`ai.settings.context.eve.channel.audience`]].filter(e=>e!==void 0).map(normalizeChannelAudience),a=i.length>0&&i.every(e=>e===i[0])?i[0]:i.length>0?`unknown`:t,o=e.spanContext?.(),s=typeof o==`object`&&o?o:{},c=e.name;return{attributes:r,audience:a,name:typeof c==`string`?c:``,spanId:typeof s.spanId==`string`?s.spanId:``,traceId:typeof s.traceId==`string`?s.traceId:``}}function spanExportDecision(e,t){let n;try{n=t.span?.(e)??{emit:!0}}catch{return{exported:!1,redactInputs:!1,redactOutputs:!1}}if(typeof n!=`object`||!n)return{exported:!1,redactInputs:!1,redactOutputs:!1};if(`emit`in n)return`redact`in n?{exported:!1,redactInputs:!1,redactOutputs:!1}:{exported:typeof n.emit==`boolean`&&n.emit,redactInputs:!1,redactOutputs:!1};if(n.redact!==!0)return{exported:!1,redactInputs:!1,redactOutputs:!1};let r=n.inputs===!0,i=n.outputs===!0;return!r&&!i?{exported:!1,redactInputs:!1,redactOutputs:!1}:{exported:!0,redactInputs:r,redactOutputs:i}}function attributeDecision(e,t){if(e?.attribute===void 0)return{emit:!0};try{return e.attribute(t)}catch{return{emit:!1}}}function refreshEvents(e,t,n){e.length=0;let r=t.events;if(Array.isArray(r)){if(n.recordOutputs){e.push(...r);return}for(let t of r){if(typeof t!=`object`||!t)continue;let n=t;n.name!==`exception`&&e.push({...n,attributes:void 0})}}}function refreshStatus(e,t,n){for(let t of Object.keys(e))delete e[t];let r=t.status;if(typeof r!=`object`||!r)return;let i=r;i.code!==void 0&&(e.code=i.code),n.recordOutputs&&i.message!==void 0&&(e.message=i.message)}export{contentFilteringProcessor};
1
+ import{normalizeChannelAudience}from"#shared/channel-audience.js";import{withoutDeclinedContent}from"#compiled/@vercel/agent-runs/otel.js";import{hasConversationRelease}from"#tracing/local/traces.js";import{channelAudienceFromContext}from"#tracing/eve/channel-audience-context.js";import{normalizeSpanExportPolicies}from"#tracing/eve/span-export-policy.js";function contentFilteringProcessor(e,t){let n=normalizeSpanExportPolicies(t);if(n.length===0)return e;let r=e;for(let e of n.toReversed())r=policyFilteringProcessor(r,e);return r}function policyFilteringProcessor(e,t){let n=new WeakMap,r=new WeakSet,i={forceFlush:()=>e.forceFlush(),onEnd:i=>{if(typeof i!=`object`||!i)return;let a=facadeFor(i,t,n);if(r.has(i)||!a.exported){r.delete(i),n.delete(i);return}a.refresh();try{e.onEnd(a.value)}finally{n.delete(i)}},onStart:(i,a)=>{if(typeof i!=`object`||!i)return;let o=facadeFor(i,t,n,channelAudienceFromContext(a));if(!o.exported){r.add(i);return}e.onStart(o.value,a)},shutdown:()=>e.shutdown()};return hasConversationRelease(e)?{...i,releaseConversation:t=>e.releaseConversation(t)}:i}function facadeFor(e,t,n,r){let i=n.get(e);if(i!==void 0)return i;let a=spanExportContext(e,r),o=spanExportDecision(a,t),s={recordInputs:!o.redactInputs,recordOutputs:!o.redactOutputs},c={},l=[],u={},d=Object.create(Reflect.getPrototypeOf(e)),f=new Map,refresh=()=>{refreshAttributes(c,e,s,a,t),refreshEvents(l,e,s),refreshStatus(u,e,s)},p,readOriginal=t=>{let n=Reflect.get(e,t,e);if(typeof n!=`function`||t===`constructor`)return n;let r=f.get(t);if(r!==void 0)return r;let created=(...t)=>{let r=Reflect.apply(n,e,t);return refresh(),r===e?p:r};return f.set(t,created),created};Object.defineProperty(d,"attributes",{configurable:!0,enumerable:!0,value:c}),Object.defineProperty(d,"events",{configurable:!0,enumerable:!0,value:l}),Object.defineProperty(d,"status",{configurable:!0,enumerable:!0,value:u});for(let t of Reflect.ownKeys(e)){if(t===`attributes`||t===`events`||t===`status`)continue;let n=Reflect.getOwnPropertyDescriptor(e,t);Object.defineProperty(d,t,{configurable:!0,enumerable:n?.enumerable??!1,get:()=>readOriginal(t)})}p=new Proxy(d,{get:(e,t,n)=>Object.hasOwn(e,t)?Reflect.get(e,t,n):readOriginal(t)});let m={context:a,exported:o.exported,refresh,value:p};return m.refresh(),n.set(e,m),m}function refreshAttributes(e,t,n,r,i){for(let t of Object.keys(e))delete e[t];let a=t.attributes;if(typeof a!=`object`||!a)return;let o=withoutDeclinedContent(a,n)??a;for(let[t,n]of Object.entries(o)){let a=attributeDecision(i,{key:t,span:r,value:n});typeof a==`object`&&a&&(`emit`in a&&`replace`in a||(`replace`in a&&a.replace===!0?a.value!==void 0&&(e[t]=a.value):`emit`in a&&a.emit===!0&&(e[t]=n)))}}function spanExportContext(e,t=`unknown`){let n=e.attributes,r=typeof n==`object`&&n?n:{},i=[r[`agent.channel.audience`],r[`ai.settings.context.eve.channel.audience`]].filter(e=>e!==void 0).map(normalizeChannelAudience),a=i.length>0&&i.every(e=>e===i[0])?i[0]:i.length>0?`unknown`:t,o=e.spanContext?.(),s=typeof o==`object`&&o?o:{},c=e.name;return{attributes:r,audience:a,name:typeof c==`string`?c:``,spanId:typeof s.spanId==`string`?s.spanId:``,traceId:typeof s.traceId==`string`?s.traceId:``}}function spanExportDecision(e,t){let n;try{n=t.span?.(e)??{emit:!0}}catch{return{exported:!1,redactInputs:!1,redactOutputs:!1}}if(typeof n!=`object`||!n)return{exported:!1,redactInputs:!1,redactOutputs:!1};if(`emit`in n)return`redact`in n?{exported:!1,redactInputs:!1,redactOutputs:!1}:{exported:typeof n.emit==`boolean`&&n.emit,redactInputs:!1,redactOutputs:!1};if(n.redact!==!0)return{exported:!1,redactInputs:!1,redactOutputs:!1};let r=n.inputs===!0,i=n.outputs===!0;return!r&&!i?{exported:!1,redactInputs:!1,redactOutputs:!1}:{exported:!0,redactInputs:r,redactOutputs:i}}function attributeDecision(e,t){if(e?.attribute===void 0)return{emit:!0};try{return e.attribute(t)}catch{return{emit:!1}}}function refreshEvents(e,t,n){e.length=0;let r=t.events;if(Array.isArray(r)){if(n.recordOutputs){e.push(...r);return}for(let t of r){if(typeof t!=`object`||!t)continue;let n=t;n.name!==`exception`&&e.push({...n,attributes:void 0})}}}function refreshStatus(e,t,n){for(let t of Object.keys(e))delete e[t];let r=t.status;if(typeof r!=`object`||!r)return;let i=r;i.code!==void 0&&(e.code=i.code),n.recordOutputs&&i.message!==void 0&&(e.message=i.message)}export{contentFilteringProcessor};
@@ -1 +1 @@
1
- import{readConversationBaggage}from"#tracing/eve/conversation-context.js";import{resolveConversationId}from"#shared/conversation-identity.js";import{intersectInstrumentationDecisions}from"#shared/instrumentation-decision.js";import{createAgentDelegationTransport}from"#compiled/@eve/tracing/delegation.js";const transport=createAgentDelegationTransport(),agentDelegation={fetch:transport.fetch,resume(e,t){let{context:n}=e,r=n.trace.parentTraceContext;if(r===void 0)return t();let i=r.decision;return transport.resume({caller:r,conversationId:n.trace.conversationId??resolveConversationId(n.parent.rootSessionId),parentRunId:n.parent.sessionId,parentCallId:n.parent.callId,agentName:e.agentName,capture:{emit:r.traceFlags===1&&i?.action!==`drop`,recordInputs:i?.action===`record`&&i.recordInputs,recordOutputs:i?.action===`record`&&i.recordOutputs}},t)},receive(e,t){return transport.receive(e.headers,t=>e.delegated&&e.trusted&&e.parent!==void 0&&t.parentRunId===e.parent.sessionId&&t.parentCallId===e.parent.callId&&e.callerTrace?.traceId===t.caller.traceId&&e.callerTrace.spanId===t.caller.spanId,n=>{let r=e.parentTraceContext,i=n?.capture.emit?{action:`record`,recordInputs:n.capture.recordInputs,recordOutputs:n.capture.recordOutputs}:{action:`drop`},a=n===void 0||r===void 0?r:{...r,decision:r.decision===void 0?i:intersectInstrumentationDecisions(r.decision,i),traceFlags:n.capture.emit?r.traceFlags:0};return t({conversationId:e.delegated?n?.conversationId??readConversationBaggage(e.headers.get(`baggage`)):void 0,parentTraceContext:a})})}};export{agentDelegation};
1
+ import{readConversationBaggage}from"#tracing/eve/conversation-context.js";import{resolveConversationId}from"#shared/conversation-identity.js";import{intersectInstrumentationDecisions}from"#shared/instrumentation-decision.js";import{createAgentDelegationTransport}from"#compiled/@vercel/agent-runs/delegation.js";const transport=createAgentDelegationTransport(),agentDelegation={fetch:transport.fetch,resume(e,t){let{context:n}=e,r=n.trace.parentTraceContext;if(r===void 0)return t();let i=r.decision;return transport.resume({caller:r,conversationId:n.trace.conversationId??resolveConversationId(n.parent.rootSessionId),parentRunId:n.parent.sessionId,parentCallId:n.parent.callId,agentName:e.agentName,capture:{emit:r.traceFlags===1&&i?.action!==`drop`,recordInputs:i?.action===`record`&&i.recordInputs,recordOutputs:i?.action===`record`&&i.recordOutputs}},t)},receive(e,t){return transport.receive(e.headers,t=>e.delegated&&e.trusted&&e.parent!==void 0&&t.parentRunId===e.parent.sessionId&&t.parentCallId===e.parent.callId&&e.callerTrace?.traceId===t.caller.traceId&&e.callerTrace.spanId===t.caller.spanId,n=>{let r=e.parentTraceContext,i=n?.capture.emit?{action:`record`,recordInputs:n.capture.recordInputs,recordOutputs:n.capture.recordOutputs}:{action:`drop`},a=n===void 0||r===void 0?r:{...r,decision:r.decision===void 0?i:intersectInstrumentationDecisions(r.decision,i),traceFlags:n.capture.emit?r.traceFlags:0};return t({conversationId:e.delegated?n?.conversationId??readConversationBaggage(e.headers.get(`baggage`)):void 0,parentTraceContext:a})})}};export{agentDelegation};
@@ -1,4 +1,4 @@
1
- import type { Attributes } from "#compiled/@eve/tracing/index.js";
1
+ import type { Attributes } from "#compiled/@vercel/agent-runs/index.js";
2
2
  export declare function createGatewayTraceContextHeaders(): Record<string, string> | undefined;
3
3
  /** Converts Gateway response metadata to cost data. */
4
4
  export declare function gatewayCostAttributes(input: {
@@ -1 +1 @@
1
- import{createLogger,formatError}from"#internal/logging.js";import{contextStorage}from"#context/container.js";import{ConversationIdKey}from"#context/keys.js";import{resolveInstrumentationEnvironment}from"#internal/application/dev-environment.js";import{readConversationId}from"#shared/conversation-identity.js";import{ContextAgentTraceStateStore}from"#tracing/eve/agent-trace-context-store.js";import{registerInstrumentationRuntime}from"#instrumentation/runtime.js";import{createInstrumentationHooks}from"#instrumentation/lifecycle.js";import{AgentSpanIdGenerator,otelTelemetry}from"#compiled/@eve/tracing/index.js";import{hasConversationRelease}from"#tracing/local/traces.js";import{createAgentOtelInstrumentation}from"#tracing/eve/agent-otel-provider.js";import{registerOtel}from"#tracing/eve/otel-registration.js";import{eveOutputMapping}from"#tracing/eve/profile.js";const log=createLogger(`tracing.install-instrumentation-runtime`);function installInstrumentationRuntime(e){let t=[],n=[],r,i,a,runInContext=(e,t)=>t(),o;if(e.collected.declared){r=registerOtel({serviceName:e.serviceName,otel:e.collected.configuration}),o=r.idGenerator;let s=createAgentOtelInstrumentation({environment:resolveInstrumentationEnvironment(),frameworkVersion:e.frameworkVersion,telemetry:otelTelemetry({provider:r.provider,tracerName:`eve.agent`,tracerVersion:e.frameworkVersion,idGenerator:o,samplesTrace:r.samplesTrace,mapping:eveOutputMapping()}),idGenerator:o,recordInputs:e.collected.settings.recordInputs,recordOutputs:e.collected.settings.recordOutputs,stateStore:new ContextAgentTraceStateStore,tracePolicy:e.collected.settings.tracePolicy});t.push({...s.hook,stateNamespace:`internal:otel`}),i=s.prepareSessionTrace,a=s.prepareTurnTrace,runInContext=s.runInContext;let c=e.collected.configuration.spanProcessors.filter(isSpanProcessor).filter(hasConversationRelease);c.length>0&&n.push(sessionReleaseProvider(c))}else o=new AgentSpanIdGenerator;let s=[...t,...e.providers,...n],c;return registerInstrumentationRuntime({forceFlush:async()=>{await settleAll(s.map(e=>()=>e.flush?.())),await settleAll(r===void 0?[]:[r.forceFlush])},hooks:createInstrumentationHooks({parallel:e.providers,serialAfter:n,serialBefore:t}),idGenerator:o,memoryOperations:r!==void 0||e.providers.some(hasMemoryOperationHandler),otelSettings:e.collected.declared?e.collected.settings:void 0,ownsAgentSpans:r!==void 0,prepareSessionTrace:i,prepareTurnTrace:a,runtimeContextResolvers:e.runtimeContextResolvers,runInContext,samplesTrace:r?.samplesTrace,shutdown:()=>(c??=(async()=>{await settleAll(s.map(e=>()=>e.shutdown?.())),await settleAll(r===void 0?[]:[r.shutdown])})(),c)})}function hasMemoryOperationHandler(e){return e.events?.[`memory.operation.started`]!==void 0||e.events?.[`memory.operation.completed`]!==void 0||e.events?.[`memory.operation.failed`]!==void 0}function isSpanProcessor(e){return e!==`auto`}function sessionReleaseProvider(e){let release=async t=>{let n=readConversationId(contextStorage.getStore()?.get(ConversationIdKey))??t.sessionId;n===t.sessionId&&await Promise.all(e.map(e=>e.releaseConversation(n)))};return{events:{"session.completed":release,"session.failed":release},name:`eve.conversation-release`,stateNamespace:`internal:conversation-release`}}async function settleAll(e){let t=await Promise.allSettled(e.map(async e=>e()));for(let e of t)e.status===`rejected`&&log.warn(`instrumentation drain failed`,{error:formatError(e.reason)})}export{installInstrumentationRuntime};
1
+ import{createLogger,formatError}from"#internal/logging.js";import{contextStorage}from"#context/container.js";import{ConversationIdKey}from"#context/keys.js";import{resolveInstrumentationEnvironment}from"#internal/application/dev-environment.js";import{readConversationId}from"#shared/conversation-identity.js";import{ContextAgentTraceStateStore}from"#tracing/eve/agent-trace-context-store.js";import{registerInstrumentationRuntime}from"#instrumentation/runtime.js";import{createInstrumentationHooks}from"#instrumentation/lifecycle.js";import{AgentSpanIdGenerator,otelTelemetry}from"#compiled/@vercel/agent-runs/index.js";import{hasConversationRelease}from"#tracing/local/traces.js";import{eveOutputMapping}from"#tracing/eve/profile.js";import{createAgentOtelInstrumentation}from"#tracing/eve/agent-otel-provider.js";import{registerOtel}from"#tracing/eve/otel-registration.js";const log=createLogger(`tracing.install-instrumentation-runtime`);function installInstrumentationRuntime(e){let t=[],n=[],r,i,a,runInContext=(e,t)=>t(),o;if(e.collected.declared){r=registerOtel({serviceName:e.serviceName,otel:e.collected.configuration}),o=r.idGenerator;let s=createAgentOtelInstrumentation({environment:resolveInstrumentationEnvironment(),frameworkVersion:e.frameworkVersion,telemetry:otelTelemetry({provider:r.provider,tracerName:`eve.agent`,tracerVersion:e.frameworkVersion,idGenerator:o,samplesTrace:r.samplesTrace,mapping:eveOutputMapping()}),idGenerator:o,recordInputs:e.collected.settings.recordInputs,recordOutputs:e.collected.settings.recordOutputs,stateStore:new ContextAgentTraceStateStore,tracePolicy:e.collected.settings.tracePolicy});t.push({...s.hook,stateNamespace:`internal:otel`}),i=s.prepareSessionTrace,a=s.prepareTurnTrace,runInContext=s.runInContext;let c=e.collected.configuration.spanProcessors.filter(isSpanProcessor).filter(hasConversationRelease);c.length>0&&n.push(sessionReleaseProvider(c))}else o=new AgentSpanIdGenerator;let s=[...t,...e.providers,...n],c;return registerInstrumentationRuntime({forceFlush:async()=>{await settleAll(s.map(e=>()=>e.flush?.())),await settleAll(r===void 0?[]:[r.forceFlush])},hooks:createInstrumentationHooks({parallel:e.providers,serialAfter:n,serialBefore:t}),idGenerator:o,memoryOperations:r!==void 0||e.providers.some(hasMemoryOperationHandler),otelSettings:e.collected.declared?e.collected.settings:void 0,ownsAgentSpans:r!==void 0,prepareSessionTrace:i,prepareTurnTrace:a,runtimeContextResolvers:e.runtimeContextResolvers,runInContext,samplesTrace:r?.samplesTrace,shutdown:()=>(c??=(async()=>{await settleAll(s.map(e=>()=>e.shutdown?.())),await settleAll(r===void 0?[]:[r.shutdown])})(),c)})}function hasMemoryOperationHandler(e){return e.events?.[`memory.operation.started`]!==void 0||e.events?.[`memory.operation.completed`]!==void 0||e.events?.[`memory.operation.failed`]!==void 0}function isSpanProcessor(e){return e!==`auto`}function sessionReleaseProvider(e){let release=async t=>{let n=readConversationId(contextStorage.getStore()?.get(ConversationIdKey))??t.sessionId;n===t.sessionId&&await Promise.all(e.map(e=>e.releaseConversation(n)))};return{events:{"session.completed":release,"session.failed":release},name:`eve.conversation-release`,stateNamespace:`internal:conversation-release`}}async function settleAll(e){let t=await Promise.allSettled(e.map(async e=>e()));for(let e of t)e.status===`rejected`&&log.warn(`instrumentation drain failed`,{error:formatError(e.reason)})}export{installInstrumentationRuntime};
@@ -1 +1 @@
1
- import{createLogger,formatError}from"#internal/logging.js";import{applyLiveDeliveryAudienceCeiling}from"#shared/forwarded-trace-policy.js";import{DIRECT_TOOL_CALL_ATTRIBUTE,DIRECT_TOOL_CALL_VALUE}from"#tracing/local/inspection.js";import{resolveInstrumentationEnvironment}from"#internal/application/dev-environment.js";import{operationConversationId}from"#tracing/eve/conversation-context.js";import{resolveTracePolicy}from"#shared/trace-policy.js";import{context}from"#compiled/@opentelemetry/api/index.js";import{buildConversationContext}from"#channel/conversation-context.js";import{markAgentTraceContext}from"#tracing/eve/agent-trace-context.js";import{toolCallIdempotencyKey}from"#instrumentation/lifecycle.js";import{contentAttribute,mcpLifecycle,withErrorContent}from"#compiled/@eve/tracing/otel.js";import{otelTelemetry}from"#compiled/@eve/tracing/index.js";import{getInstrumentationRuntime}from"#instrumentation/runtime-global.js";import{MCP_SERIALIZER}from"#tracing/eve/mcp.js";import{withChannelAudience}from"#tracing/eve/channel-audience-context.js";import{eveOutputMapping}from"#tracing/eve/profile.js";const log=createLogger(`invoke-tool`),agentTelemetry=()=>otelTelemetry({tracerName:`eve.agent`,mapping:eveOutputMapping()});async function withInvokeToolSpan(e,t){let n=withErrorContent(context.active(),!1);return await context.with(n,()=>traced(e,n,t))}async function traced(e,t,n){let r=getInstrumentationRuntime();if(r===void 0)return await n(silentObserver);let i=agentTelemetry(),a=buildConversationContext({adapter:e.origin?.adapter??{kind:`channel`},auth:e.auth,channelName:e.origin?.channelName},resolveInstrumentationEnvironment()),o=toolCallEvents(r.hooks.forTrace?.({agentName:e.agentName,...a})??r.hooks,{attemptId:e.callId,attemptIndex:0,channelAudience:a.audience,functionId:e.agentName,rootSessionId:e.sessionId,sessionId:e.sessionId,stepIndex:0,traceSessionId:e.sessionId,turnId:e.callId},e),s=r.otelSettings;if(s===void 0)return await n(o.observer(void 0));let c=resolveTracePolicy(s.tracePolicy,{agentName:e.agentName,...a},e=>log.warn(`tracePolicy threw; dropping the tool call's trace`,{error:formatError(e)}));if(c.action===`drop`)return await i.suppressed(()=>n(o.observer(void 0)));let l=applyLiveDeliveryAudienceCeiling({...c,recordInputs:s.recordInputs&&c.recordInputs,recordOutputs:s.recordOutputs&&c.recordOutputs},a.audience,void 0,a.environment),u=l.action===`record`&&l.recordInputs,d=l.action===`record`&&l.recordOutputs,f=`execute_tool ${e.toolName}`,p=withChannelAudience(t,a.audience),m={"agent.tool.is_framework":!1,"gen_ai.agent.name":e.agentName,"gen_ai.operation.name":`execute_tool`,"gen_ai.tool.call.id":e.callId,"gen_ai.tool.name":e.toolName,"gen_ai.tool.type":`function`,[DIRECT_TOOL_CALL_ATTRIBUTE]:DIRECT_TOOL_CALL_VALUE,"operation.name":`execute_tool`,"resource.name":f,"agent.run.id":e.sessionId,"agent.trace.schema.version":4,"gen_ai.conversation.id":operationConversationId({sessionId:e.sessionId})};process.env.VERCEL_ENV!==void 0&&(m[`vercel.session_id`]=e.sessionId),e.origin!==void 0&&(m[`eve.channel.kind`]=a.channel.kind,m[`eve.channel.name`]=e.origin.channelName);let h=i.startSpan({type:`tool`,operationId:e.callId,name:f,kind:`INTERNAL`,attributes:m},{context:p}),g={emit:!0,recordInputs:u,recordOutputs:d},_=markAgentTraceContext(withErrorContent(p,d)),v=mcpLifecycle({serializer:MCP_SERIALIZER,...g,write:e=>setDefined(h,e),error:(e,t)=>h.fail(d?e:void 0,t)}),y,b=o.observer({failedWith:e=>{y={error:e}},recordInputs:u,span:h});try{let e=await i.run({type:`tool`,reference:h.reference,capture:g,mcp:v},()=>n(b),_);if(h.setAttribute(`eve.tool.outcome`,e.status),e.status===`completed`&&d){let t=contentAttribute(e.output);t!==void 0&&h.setAttribute(`gen_ai.tool.call.result`,t)}return e.status===`invalid-input`?h.fail(void 0,e.status):e.status===`failed`&&h.fail(d?y?.error:void 0,y===void 0?e.status:void 0),e}catch(e){throw h.fail(d?e:void 0),e}finally{h.end(),await r.forceFlush().catch(e=>{log.warn(`flushing a tool call's trace failed`,{error:formatError(e)})})}}const silentObserver={executed:async()=>{},executing:async()=>{},failedWith:()=>{}};function toolCallEvents(e,t,n){let r=e.capturesInputs??e.capturesContent,i=e.capturesOutputs??e.capturesContent,a=toolCallIdempotencyKey(t,n.callId,0);return{observer(o){return{async executing(i){if(o?.recordInputs){let e=contentAttribute(i);e!==void 0&&o.span.setAttribute(`gen_ai.tool.call.arguments`,e)}await e.publish(Object.freeze({callId:n.callId,idempotencyKey:a,input:r?i:void 0,scope:t,toolName:n.toolName,type:`tool.call.started`}))},async executed(n){o?.span.setAttribute(`gen_ai.execute_tool.duration`,n.durationMs/1e3);let r=n.type===`result`?i?{output:n.output,type:`result`}:{type:`result`}:i?{error:n.error,type:`error`}:{type:`error`};await e.publish(Object.freeze({durationMs:n.durationMs,idempotencyKey:a,output:Object.freeze(r),scope:t,type:`tool.call.completed`,outcome:n.type===`result`?`completed`:`failed`}))},failedWith(e){o?.failedWith(e)}}}}}function setDefined(e,t){for(let[n,r]of Object.entries(t))r!==void 0&&e.setAttribute(n,r)}export{withInvokeToolSpan};
1
+ import{createLogger,formatError}from"#internal/logging.js";import{applyLiveDeliveryAudienceCeiling}from"#shared/forwarded-trace-policy.js";import{DIRECT_TOOL_CALL_ATTRIBUTE,DIRECT_TOOL_CALL_VALUE}from"#tracing/local/inspection.js";import{resolveInstrumentationEnvironment}from"#internal/application/dev-environment.js";import{operationConversationId}from"#tracing/eve/conversation-context.js";import{resolveTracePolicy}from"#shared/trace-policy.js";import{context}from"#compiled/@opentelemetry/api/index.js";import{buildConversationContext}from"#channel/conversation-context.js";import{markAgentTraceContext}from"#tracing/eve/agent-trace-context.js";import{toolCallIdempotencyKey}from"#instrumentation/lifecycle.js";import{contentAttribute,mcpLifecycle,withErrorContent}from"#compiled/@vercel/agent-runs/otel.js";import{otelTelemetry}from"#compiled/@vercel/agent-runs/index.js";import{getInstrumentationRuntime}from"#instrumentation/runtime-global.js";import{MCP_SERIALIZER}from"#tracing/eve/mcp.js";import{withChannelAudience}from"#tracing/eve/channel-audience-context.js";import{eveOutputMapping}from"#tracing/eve/profile.js";const log=createLogger(`invoke-tool`),agentTelemetry=()=>otelTelemetry({tracerName:`eve.agent`,mapping:eveOutputMapping()});async function withInvokeToolSpan(e,t){let n=withErrorContent(context.active(),!1);return await context.with(n,()=>traced(e,n,t))}async function traced(e,t,n){let r=getInstrumentationRuntime();if(r===void 0)return await n(silentObserver);let i=agentTelemetry(),a=buildConversationContext({adapter:e.origin?.adapter??{kind:`channel`},auth:e.auth,channelName:e.origin?.channelName},resolveInstrumentationEnvironment()),o=toolCallEvents(r.hooks.forTrace?.({agentName:e.agentName,...a})??r.hooks,{attemptId:e.callId,attemptIndex:0,channelAudience:a.audience,functionId:e.agentName,rootSessionId:e.sessionId,sessionId:e.sessionId,stepIndex:0,traceSessionId:e.sessionId,turnId:e.callId},e),s=r.otelSettings;if(s===void 0)return await n(o.observer(void 0));let c=resolveTracePolicy(s.tracePolicy,{agentName:e.agentName,...a},e=>log.warn(`tracePolicy threw; dropping the tool call's trace`,{error:formatError(e)}));if(c.action===`drop`)return await i.suppressed(()=>n(o.observer(void 0)));let l=applyLiveDeliveryAudienceCeiling({...c,recordInputs:s.recordInputs&&c.recordInputs,recordOutputs:s.recordOutputs&&c.recordOutputs},a.audience,void 0,a.environment),u=l.action===`record`&&l.recordInputs,d=l.action===`record`&&l.recordOutputs,f=`execute_tool ${e.toolName}`,p=withChannelAudience(t,a.audience),m={"agent.tool.is_framework":!1,"gen_ai.agent.name":e.agentName,"gen_ai.operation.name":`execute_tool`,"gen_ai.tool.call.id":e.callId,"gen_ai.tool.name":e.toolName,"gen_ai.tool.type":`function`,[DIRECT_TOOL_CALL_ATTRIBUTE]:DIRECT_TOOL_CALL_VALUE,"operation.name":`execute_tool`,"resource.name":f,"agent.run.id":e.sessionId,"agent.trace.schema.version":4,"gen_ai.conversation.id":operationConversationId({sessionId:e.sessionId})};process.env.VERCEL_ENV!==void 0&&(m[`vercel.session_id`]=e.sessionId),e.origin!==void 0&&(m[`eve.channel.kind`]=a.channel.kind,m[`eve.channel.name`]=e.origin.channelName);let h=i.startSpan({type:`tool`,operationId:e.callId,name:f,kind:`INTERNAL`,attributes:m},{context:p}),g={emit:!0,recordInputs:u,recordOutputs:d},_=markAgentTraceContext(withErrorContent(p,d)),v=mcpLifecycle({serializer:MCP_SERIALIZER,...g,write:e=>setDefined(h,e),error:(e,t)=>h.fail(d?e:void 0,t)}),y,b=o.observer({failedWith:e=>{y={error:e}},recordInputs:u,span:h});try{let e=await i.run({type:`tool`,reference:h.reference,capture:g,mcp:v},()=>n(b),_);if(h.setAttribute(`eve.tool.outcome`,e.status),e.status===`completed`&&d){let t=contentAttribute(e.output);t!==void 0&&h.setAttribute(`gen_ai.tool.call.result`,t)}return e.status===`invalid-input`?h.fail(void 0,e.status):e.status===`failed`&&h.fail(d?y?.error:void 0,y===void 0?e.status:void 0),e}catch(e){throw h.fail(d?e:void 0),e}finally{h.end(),await r.forceFlush().catch(e=>{log.warn(`flushing a tool call's trace failed`,{error:formatError(e)})})}}const silentObserver={executed:async()=>{},executing:async()=>{},failedWith:()=>{}};function toolCallEvents(e,t,n){let r=e.capturesInputs??e.capturesContent,i=e.capturesOutputs??e.capturesContent,a=toolCallIdempotencyKey(t,n.callId,0);return{observer(o){return{async executing(i){if(o?.recordInputs){let e=contentAttribute(i);e!==void 0&&o.span.setAttribute(`gen_ai.tool.call.arguments`,e)}await e.publish(Object.freeze({callId:n.callId,idempotencyKey:a,input:r?i:void 0,scope:t,toolName:n.toolName,type:`tool.call.started`}))},async executed(n){o?.span.setAttribute(`gen_ai.execute_tool.duration`,n.durationMs/1e3);let r=n.type===`result`?i?{output:n.output,type:`result`}:{type:`result`}:i?{error:n.error,type:`error`}:{type:`error`};await e.publish(Object.freeze({durationMs:n.durationMs,idempotencyKey:a,output:Object.freeze(r),scope:t,type:`tool.call.completed`,outcome:n.type===`result`?`completed`:`failed`}))},failedWith(e){o?.failedWith(e)}}}}}function setDefined(e,t){for(let[n,r]of Object.entries(t))r!==void 0&&e.setAttribute(n,r)}export{withInvokeToolSpan};
@@ -1,5 +1,5 @@
1
1
  import { type Context as OtelContext } from "#compiled/@opentelemetry/api/index.js";
2
- import { type ContentSerializer } from "#compiled/@eve/tracing/index.js";
2
+ import { type ContentSerializer } from "#compiled/@vercel/agent-runs/index.js";
3
3
  type Context = Pick<OtelContext, "getValue">;
4
4
  export declare function createMcpTraceFetch(input: {
5
5
  readonly connectionName: string;
@@ -13,6 +13,7 @@ export declare function createMcpTraceFetch(input: {
13
13
  export declare const MCP_SERIALIZER: ContentSerializer;
14
14
  export declare function createMcpTracing(): {
15
15
  list<T>(input: {
16
+ readonly method?: "tools/list" | "events/list";
16
17
  readonly connectionName: string;
17
18
  readonly execute: () => Promise<T>;
18
19
  readonly protocolVersion?: string;
@@ -1 +1 @@
1
- import{eveOutputMapping}from"./profile.js";import{context,propagation,trace}from"#compiled/@opentelemetry/api/index.js";import{activeTraceOperation,contentAttribute,mcpLifecycle,truncateTelemetryText}from"#compiled/@eve/tracing/otel.js";import{otelTelemetry}from"#compiled/@eve/tracing/index.js";function isObject(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const MAX_MCP_TRACE_REQUEST_BYTES=1048576,MAX_MCP_TRACE_CONTEXT_BYTES=8192,utf8Encoder=new TextEncoder,traceContextSetter={set(e,t,n){e[t]=n}};function createMcpTraceFetch(e){let t=e.fetcher??((e,t)=>globalThis.fetch(e,t)),n=e.getActiveContext??(()=>context.active()),r=e.injectContext??injectOpenTelemetryTraceContext;return async(i,a)=>{let o=readJsonRpcRequest(a?.body);if(o===void 0)return await t(i,a);let s=n(),c=injectMcpTraceContext(o,s,r,e.filterCarrier),l=o.method===`tools/call`||o.method===`tools/list`&&activeTraceOperation(s)?.type===`mcp`;l&&activeTraceOperation(s)?.mcp?.update(mcpRequestMetadata({connectionName:e.connectionName,message:o,params:isObject(o.params)?o.params:{},protocolVersion:headerValue(a?.headers,`mcp-protocol-version`)??e.getProtocolVersion()}));let u=await t(i,c===void 0?a:{...a,body:JSON.stringify(c)});if(l){let e=u.headers.get(`mcp-session-id`);e!==null&&activeTraceOperation(s)?.mcp?.update({sessionId:truncateTelemetryText(e,512)})}return u}}function injectMcpTraceContext(e,t,n=injectOpenTelemetryTraceContext,r){if(!withinTraceRequestLimit(JSON.stringify(e))||e.params!==void 0&&!isObject(e.params))return;let i={};if(n(t,i),!withinTraceContextLimit(i))return;r?.(i);let a=isObject(e.params)?e.params:{},o=isObject(a._meta)?a._meta:{};return{...e,params:{...a,_meta:{...o,...i}}}}const noContent=()=>void 0,MCP_SERIALIZER={json:contentAttribute,text:noContent,inputMessages:noContent,instructions:noContent,toolDefinitions:noContent,outputMessages:noContent,toolResults:noContent};function createMcpTracing(){let e=otelTelemetry({tracerName:`eve.mcp`,mapping:eveOutputMapping()});function start(t){let n=e.startSpan({type:`mcp`,operationId:`${t.connectionName}:${t.method}`,name:t.method===`tools/call`?`tools/call ${t.toolName??`unknown`}`:t.method,kind:`CLIENT`,parent:trace.getSpan(t.executionContext)?.spanContext(),attributes:{"agent.connection.name":t.connectionName,"mcp.method.name":t.method,"network.protocol.name":`http`,"network.transport":`tcp`,"mcp.protocol.version":t.protocolVersion,"gen_ai.operation.name":t.method===`tools/call`?`execute_tool`:void 0,"gen_ai.tool.name":t.toolName}},{context:t.executionContext}),r=mcpLifecycle({serializer:MCP_SERIALIZER,...t.capture,write(e){for(let[t,r]of Object.entries(e))r!==void 0&&n.setAttribute(t,r)},error:n.fail});return{...r,end:n.end,run(i){return e.run({type:`mcp`,reference:n.reference,capture:t.capture,mcp:r},i,t.executionContext)}}}return{async list(e){let t=context.active(),n=start({method:`tools/list`,connectionName:e.connectionName,protocolVersion:e.protocolVersion,executionContext:t,capture:activeTraceOperation()?.capture??{emit:!0,recordInputs:!1,recordOutputs:!1}});try{return await n.run(async()=>{try{return await e.execute()}catch(e){let t=jsonRpcErrorCode(e);throw t!==void 0&&n.update({statusCode:t}),n.error(e,errorType(e,t)),e}})}finally{n.end()}},async call(e){let t=context.active(),n=activeTraceOperation();if(n?.type===`tool`&&n.mcp!==void 0)return n.mcp.update({...e,method:`tools/call`}),await runMcpToolCall(e,void 0);let r=start({method:`tools/call`,connectionName:e.connectionName,toolName:truncateTelemetryText(e.toolName,128),protocolVersion:e.protocolVersion,executionContext:t,capture:n?.capture??{emit:!0,recordInputs:!1,recordOutputs:!1}});try{return await r.run(()=>runMcpToolCall(e,r))}finally{r.end()}}}}function runMcpToolCall(e,t){return t!==void 0&&t.arguments(e.arguments),e.execute().then(e=>(isToolErrorResult(e)&&activeTraceOperation()?.mcp?.error(void 0,`tool_error`),t!==void 0&&t.result(e),e)).catch(e=>{let n=jsonRpcErrorCode(e);throw n!==void 0&&activeTraceOperation()?.mcp?.update({statusCode:n}),t!==void 0&&activeTraceOperation()?.mcp?.error(e,errorType(e,n)),e})}function mcpRequestMetadata(e){let t=e.method??e.message?.method,n=e.params??(isObject(e.message?.params)?e.message.params:{}),r=e.toolName??(typeof n.name==`string`?n.name:void 0),i=e.message?.id,a=n._meta,o=e.protocolVersion??(isObject(a)&&typeof a[`io.modelcontextprotocol/protocolVersion`]==`string`?a[`io.modelcontextprotocol/protocolVersion`]:void 0);return{connectionName:e.connectionName,method:t??`unknown`,toolName:r,protocolVersion:o,requestId:typeof i==`number`||typeof i==`string`?String(i):void 0}}function injectOpenTelemetryTraceContext(e,t){propagation.inject(e,t,traceContextSetter)}function readJsonRpcRequest(e){if(typeof e==`string`&&withinTraceRequestLimit(e))try{let t=JSON.parse(e);return isObject(t)&&typeof t.method==`string`?t:void 0}catch{return}}function withinTraceRequestLimit(e){return e.length<=MAX_MCP_TRACE_REQUEST_BYTES&&utf8Encoder.encode(e).byteLength<=MAX_MCP_TRACE_REQUEST_BYTES}function withinTraceContextLimit(e){let t=0;for(let[n,r]of Object.entries(e))if(n.length+r.length>MAX_MCP_TRACE_CONTEXT_BYTES||(t+=utf8Encoder.encode(n).byteLength+utf8Encoder.encode(r).byteLength+2,t>MAX_MCP_TRACE_CONTEXT_BYTES))return!1;return t>0}function headerValue(e,t){if(e!==void 0)try{return new Headers(e).get(t)??void 0}catch{return}}function isToolErrorResult(e){return isObject(e)&&e.isError===!0}function jsonRpcErrorCode(e){if(!isObject(e))return;let t=e.code;return typeof t==`number`||typeof t==`string`?String(t):void 0}function errorType(e,t){return t===void 0?e instanceof Error?e.name||`Error`:void 0:t}export{MCP_SERIALIZER,createMcpTraceFetch,createMcpTracing};
1
+ import{eveOutputMapping}from"./profile.js";import{context,propagation,trace}from"#compiled/@opentelemetry/api/index.js";import{activeTraceOperation,contentAttribute,mcpLifecycle,truncateTelemetryText}from"#compiled/@vercel/agent-runs/otel.js";import{otelTelemetry}from"#compiled/@vercel/agent-runs/index.js";function isObject(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const MAX_MCP_TRACE_REQUEST_BYTES=1048576,MAX_MCP_TRACE_CONTEXT_BYTES=8192,utf8Encoder=new TextEncoder,traceContextSetter={set(e,t,n){e[t]=n}};function createMcpTraceFetch(e){let t=e.fetcher??((e,t)=>globalThis.fetch(e,t)),n=e.getActiveContext??(()=>context.active()),r=e.injectContext??injectOpenTelemetryTraceContext;return async(i,a)=>{let o=readJsonRpcRequest(a?.body);if(o===void 0)return await t(i,a);let s=n(),c=injectMcpTraceContext(o,s,r,e.filterCarrier),l=o.method===`tools/call`||(o.method===`tools/list`||o.method===`events/list`)&&activeTraceOperation(s)?.type===`mcp`;l&&activeTraceOperation(s)?.mcp?.update(mcpRequestMetadata({connectionName:e.connectionName,message:o,params:isObject(o.params)?o.params:{},protocolVersion:headerValue(a?.headers,`mcp-protocol-version`)??e.getProtocolVersion()}));let u=await t(i,c===void 0?a:{...a,body:JSON.stringify(c)});if(l){let e=u.headers.get(`mcp-session-id`);e!==null&&activeTraceOperation(s)?.mcp?.update({sessionId:truncateTelemetryText(e,512)})}return u}}function injectMcpTraceContext(e,t,n=injectOpenTelemetryTraceContext,r){if(!withinTraceRequestLimit(JSON.stringify(e))||e.params!==void 0&&!isObject(e.params))return;let i={};if(n(t,i),!withinTraceContextLimit(i))return;r?.(i);let a=isObject(e.params)?e.params:{},o=isObject(a._meta)?a._meta:{};return{...e,params:{...a,_meta:{...o,...i}}}}const noContent=()=>void 0,MCP_SERIALIZER={json:contentAttribute,text:noContent,inputMessages:noContent,instructions:noContent,toolDefinitions:noContent,outputMessages:noContent,toolResults:noContent};function createMcpTracing(){let e=otelTelemetry({tracerName:`eve.mcp`,mapping:eveOutputMapping()});function start(t){let n=e.startSpan({type:`mcp`,operationId:`${t.connectionName}:${t.method}`,name:t.method===`tools/call`?`tools/call ${t.toolName??`unknown`}`:t.method,kind:`CLIENT`,parent:trace.getSpan(t.executionContext)?.spanContext(),attributes:{"agent.connection.name":t.connectionName,"mcp.method.name":t.method,"network.protocol.name":`http`,"network.transport":`tcp`,"mcp.protocol.version":t.protocolVersion,"gen_ai.operation.name":t.method===`tools/call`?`execute_tool`:void 0,"gen_ai.tool.name":t.toolName}},{context:t.executionContext}),r=mcpLifecycle({serializer:MCP_SERIALIZER,...t.capture,write(e){for(let[t,r]of Object.entries(e))r!==void 0&&n.setAttribute(t,r)},error:n.fail});return{...r,end:n.end,run(i){return e.run({type:`mcp`,reference:n.reference,capture:t.capture,mcp:r},i,t.executionContext)}}}return{async list(e){let t=context.active(),n=start({method:e.method??`tools/list`,connectionName:e.connectionName,protocolVersion:e.protocolVersion,executionContext:t,capture:activeTraceOperation()?.capture??{emit:!0,recordInputs:!1,recordOutputs:!1}});try{return await n.run(async()=>{try{return await e.execute()}catch(e){let t=jsonRpcErrorCode(e);throw t!==void 0&&n.update({statusCode:t}),n.error(e,errorType(e,t)),e}})}finally{n.end()}},async call(e){let t=context.active(),n=activeTraceOperation();if(n?.type===`tool`&&n.mcp!==void 0)return n.mcp.update({...e,method:`tools/call`}),await runMcpToolCall(e,void 0);let r=start({method:`tools/call`,connectionName:e.connectionName,toolName:truncateTelemetryText(e.toolName,128),protocolVersion:e.protocolVersion,executionContext:t,capture:n?.capture??{emit:!0,recordInputs:!1,recordOutputs:!1}});try{return await r.run(()=>runMcpToolCall(e,r))}finally{r.end()}}}}function runMcpToolCall(e,t){return t!==void 0&&t.arguments(e.arguments),e.execute().then(e=>(isToolErrorResult(e)&&activeTraceOperation()?.mcp?.error(void 0,`tool_error`),t!==void 0&&t.result(e),e)).catch(e=>{let n=jsonRpcErrorCode(e);throw n!==void 0&&activeTraceOperation()?.mcp?.update({statusCode:n}),t!==void 0&&activeTraceOperation()?.mcp?.error(e,errorType(e,n)),e})}function mcpRequestMetadata(e){let t=e.method??e.message?.method,n=e.params??(isObject(e.message?.params)?e.message.params:{}),r=e.toolName??(typeof n.name==`string`?n.name:void 0),i=e.message?.id,a=n._meta,o=e.protocolVersion??(isObject(a)&&typeof a[`io.modelcontextprotocol/protocolVersion`]==`string`?a[`io.modelcontextprotocol/protocolVersion`]:void 0);return{connectionName:e.connectionName,method:t??`unknown`,toolName:r,protocolVersion:o,requestId:typeof i==`number`||typeof i==`string`?String(i):void 0}}function injectOpenTelemetryTraceContext(e,t){propagation.inject(e,t,traceContextSetter)}function readJsonRpcRequest(e){if(typeof e==`string`&&withinTraceRequestLimit(e))try{let t=JSON.parse(e);return isObject(t)&&typeof t.method==`string`?t:void 0}catch{return}}function withinTraceRequestLimit(e){return e.length<=MAX_MCP_TRACE_REQUEST_BYTES&&utf8Encoder.encode(e).byteLength<=MAX_MCP_TRACE_REQUEST_BYTES}function withinTraceContextLimit(e){let t=0;for(let[n,r]of Object.entries(e))if(n.length+r.length>MAX_MCP_TRACE_CONTEXT_BYTES||(t+=utf8Encoder.encode(n).byteLength+utf8Encoder.encode(r).byteLength+2,t>MAX_MCP_TRACE_CONTEXT_BYTES))return!1;return t>0}function headerValue(e,t){if(e!==void 0)try{return new Headers(e).get(t)??void 0}catch{return}}function isToolErrorResult(e){return isObject(e)&&e.isError===!0}function jsonRpcErrorCode(e){if(!isObject(e))return;let t=e.code;return typeof t==`number`||typeof t==`string`?String(t):void 0}function errorType(e,t){return t===void 0?e instanceof Error?e.name||`Error`:void 0:t}export{MCP_SERIALIZER,createMcpTraceFetch,createMcpTracing};
@@ -1,5 +1,5 @@
1
1
  import type { AgentSessionTraceState, AgentTurnTraceState } from "#tracing/eve/agent-trace-state.js";
2
- import type { TurnInput } from "#compiled/@eve/tracing/index.js";
2
+ import type { TurnInput } from "#compiled/@vercel/agent-runs/index.js";
3
3
  export declare function eveActivationMetadata(input: {
4
4
  readonly session?: AgentSessionTraceState;
5
5
  readonly turn: AgentTurnTraceState;
@@ -1,6 +1,6 @@
1
1
  import type { SpanContext } from "#compiled/@opentelemetry/api/index.js";
2
2
  import type { AgentTraceStateStore } from "#tracing/eve/agent-trace-state.js";
3
- import { type AgentTelemetry, type AgentTracing } from "#compiled/@eve/tracing/index.js";
3
+ import { type AgentTelemetry, type AgentRun } from "#compiled/@vercel/agent-runs/index.js";
4
4
  export declare function traceSessionIdOf(scope: {
5
5
  readonly traceSessionId?: string;
6
6
  readonly rootSessionId?: string;
@@ -27,4 +27,4 @@ export declare function eveCapture(reference: SpanContext | undefined): {
27
27
  export declare function createEveTracing(input: {
28
28
  readonly telemetry: AgentTelemetry;
29
29
  readonly stateStore: AgentTraceStateStore;
30
- }): AgentTracing;
30
+ }): AgentRun;
@@ -1 +1 @@
1
- import{resolveConversationId}from"#shared/conversation-identity.js";import{createAgentTracing}from"#compiled/@eve/tracing/index.js";function traceSessionIdOf(e){return e.traceSessionId??e.rootSessionId??e.sessionId}function checkpointContent(e){if(e!==void 0)try{return JSON.parse(e)}catch{return}}function eveTurnIdentity(e){return{conversationId:resolveConversationId(e.rootSessionId??e.sessionId),runId:e.sessionId,turnId:e.turnId}}function eveCapture(e){return{emit:!!((e?.traceFlags??1)&1),recordInputs:!0,recordOutputs:!0}}function createEveTracing(e){return createAgentTracing({telemetry:e.telemetry,checkpointer:{get:t=>e.stateStore.get(`checkpoint`,t),set:(t,n)=>e.stateStore.set(`checkpoint`,t,n),delete:t=>e.stateStore.delete(`checkpoint`,t)}})}export{checkpointContent,createEveTracing,eveCapture,eveTurnIdentity,traceSessionIdOf};
1
+ import{resolveConversationId}from"#shared/conversation-identity.js";import{createAgentRun}from"#compiled/@vercel/agent-runs/index.js";function traceSessionIdOf(e){return e.traceSessionId??e.rootSessionId??e.sessionId}function checkpointContent(e){if(e!==void 0)try{return JSON.parse(e)}catch{return}}function eveTurnIdentity(e){return{conversationId:resolveConversationId(e.rootSessionId??e.sessionId),runId:e.sessionId,turnId:e.turnId}}function eveCapture(e){return{emit:!!((e?.traceFlags??1)&1),recordInputs:!0,recordOutputs:!0}}function createEveTracing(e){return createAgentRun({telemetry:e.telemetry,checkpointer:{get:t=>e.stateStore.get(`checkpoint`,t),set:(t,n)=>e.stateStore.set(`checkpoint`,t,n),delete:t=>e.stateStore.delete(`checkpoint`,t)}})}export{checkpointContent,createEveTracing,eveCapture,eveTurnIdentity,traceSessionIdOf};
@@ -44,6 +44,11 @@ export interface OtelOptions {
44
44
  * lifecycle providers. The policy may be invoked more than once
45
45
  * while a new session is being prepared, so it must be deterministic for
46
46
  * consistent results.
47
+ * Unless `experimental.workflow.retention` is explicit, the session's
48
+ * resolved decision also selects Workflow retention: both content directions
49
+ * use the World's default; dropped traces or either excluded direction
50
+ * request deletion on completion. This also removes completed transcripts,
51
+ * but does not delete exported traces.
47
52
  */
48
53
  readonly tracePolicy?: TraceCapturePolicy;
49
54
  /**
@@ -1,7 +1,7 @@
1
1
  import { type TracerProvider } from "#compiled/@opentelemetry/api/index.js";
2
- import { AgentSpanIdGenerator } from "#compiled/@eve/tracing/index.js";
2
+ import { AgentSpanIdGenerator } from "#compiled/@vercel/agent-runs/index.js";
3
3
  import type { OtelConfiguration } from "./otel-configuration.js";
4
- import { type Attributes } from "#compiled/@eve/tracing/index.js";
4
+ import { type Attributes } from "#compiled/@vercel/agent-runs/index.js";
5
5
  export type SamplingOperation = {
6
6
  readonly name: string;
7
7
  readonly attributes?: Attributes;
@@ -1 +1 @@
1
- import{createRequire}from"node:module";import{conversationIdFromContext}from"#tracing/eve/conversation-context.js";import{SpanKind,context,metrics,propagation,trace}from"#compiled/@opentelemetry/api/index.js";import{invocationName}from"#compiled/@eve/tracing/otel.js";import{AgentSpanIdGenerator}from"#compiled/@eve/tracing/index.js";import{registerOTel}from"#compiled/@vercel/otel/index.js";const REGISTRATION_SPAN_NAME=`eve.otel.registration`,REPLAY_DEDUPLICATION_LIMIT=1e5,REPLAY_DEDUPLICATION_KEY=Symbol.for(`eve.otel.replay-deduplication`),require=createRequire(import.meta.url),replayDeduplicationGlobal=globalThis;var RegistrationMarkerPropagator=class{#e=!1;extract(e){return e}fields(){return[]}inject(){this.#e=!0}isInstalled(){return this.#e=!1,propagation.inject(context.active(),{},{set:()=>{}}),this.#e}},PrivateSpanFilteringProcessor=class{endedSpans;forwardedSpans=new Set;pendingByParent=new Map;pendingSpanCount=0;processors;startedSpans=new Set;constructor(e,t){this.processors=e,this.endedSpans=t}async forceFlush(){this.drainPendingSpans(),await Promise.all(this.processors.map(e=>e.forceFlush()))}onEnd(e){if(isRegistrationSpan(e))return;let t=spanIdentity(e);if(t!==void 0){if(this.endedSpans.has(t))return;if(this.endedSpans.size>=REPLAY_DEDUPLICATION_LIMIT){let e=this.endedSpans.values().next().value;e!==void 0&&this.endedSpans.delete(e)}this.endedSpans.add(t)}let n=parentIdentity(e);if(n!==void 0&&this.startedSpans.has(n)&&!this.forwardedSpans.has(n)){let t=this.pendingByParent.get(n)??[];t.push(e),this.pendingByParent.set(n,t),this.pendingSpanCount+=1,this.pendingSpanCount>1e4&&this.releaseOldestPendingParent();return}this.forward(e,t)}onStart(e,t){if(isRegistrationSpan(e))return;let n=conversationIdFromContext(t);n!==void 0&&e.attributes?.[`gen_ai.conversation.id`]===void 0&&e.setAttribute(`gen_ai.conversation.id`,n);let r=spanIdentity(e);r!==void 0&&addBounded(this.startedSpans,r);for(let n of this.processors)n.onStart(e,t)}async shutdown(){this.drainPendingSpans(),await Promise.all(this.processors.map(e=>e.shutdown()))}drainPendingSpans(){for(;this.pendingByParent.size>0;)this.releaseOldestPendingParent()}releaseOldestPendingParent(){let e=this.pendingByParent.keys().next().value;e!==void 0&&this.releaseChildren(e)}releaseChildren(e){let t=this.pendingByParent.get(e);if(t!==void 0){this.pendingByParent.delete(e),this.pendingSpanCount-=t.length;for(let e of t)this.forward(e,spanIdentity(e))}}forward(e,t){for(let t of this.processors)t.onEnd(e);t!==void 0&&(addBounded(this.forwardedSpans,t),this.releaseChildren(t))}};function registerOtelPipeline(e){let t=e.otel,n=captureOptionalPeerTracerProxy(),r=new AgentSpanIdGenerator,i=new RegistrationMarkerPropagator,a=privateSpanProcessors(t.spanProcessors),o={attributes:t.resource,autoDetectResources:!1,idGenerator:r,instrumentations:t.instrumentations??[],metricReaders:t.metricReaders,propagators:[...t.propagators??[`auto`],i],serviceName:e.serviceName,spanProcessors:a};registerOTel(t.sampler===void 0?o:{...o,traceSampler:t.sampler});let s=globalTracerUses(r),c=i.isInstalled();if((!s||!c)&&rollbackRegistration({ownsPropagator:c,ownsTracer:s}),!s)throw Error("eve could not register OpenTelemetry because another runtime already owns the global tracer provider. Remove the other `registerOTel` call, or move its exporters into eve's `otelIntegration({ spanProcessors: [...] })`.");if(!c)throw Error("eve could not register OpenTelemetry because another runtime already owns the global propagator. Remove the other global propagator registration and declare propagators through eve's `otel()` instead.");let l=runtimeTracerProvider();if(typeof l.forceFlush!=`function`||typeof l.shutdown!=`function`)throw rollbackRegistration({ownsPropagator:c,ownsTracer:s}),Error(`The registered OpenTelemetry tracer provider has no lifecycle methods.`);n?.setDelegate(l);let u=runtimeMeterProvider();return{provider:trace.getTracerProvider(),forceFlush:async()=>{await Promise.all([l.forceFlush(),u.forceFlush?.()])},idGenerator:r,samplesTrace:(e,t)=>samplerAdmitsTrace(r,e,t),shutdown:async()=>{disableInstrumentations(t.instrumentations),await Promise.all([l.shutdown(),u.shutdown?.()])}}}function privateSpanProcessors(e){let t=e.filter(isSpanProcessor);if(t.length===0)return[...e];let n=new PrivateSpanFilteringProcessor(t,replayDeduplicationRegistry()),r=[],i=!1;for(let t of e){if(!isSpanProcessor(t)){r.push(t);continue}i||(i=!0,r.push(n))}return r}function replayDeduplicationRegistry(){let e=replayDeduplicationGlobal[REPLAY_DEDUPLICATION_KEY];if(e!==void 0)return e;let t=new Set;return replayDeduplicationGlobal[REPLAY_DEDUPLICATION_KEY]=t,t}const registerOtel=registerOtelPipeline;function samplerAdmitsTrace(e,t,n={name:invocationName(void 0)}){return(e.withTraceId(t,()=>trace.getTracer(`eve.registration`).startSpan(n.name,{attributes:n.attributes,kind:SpanKind.INTERNAL,root:!0})).spanContext().traceFlags&1)==1}function rollbackRegistration(e){if(e.ownsPropagator&&propagation.disable(),!e.ownsTracer)return;let t=runtimeTracerProvider();if(typeof t.shutdown==`function`)try{t.shutdown().catch(()=>{})}catch{}trace.disable()}function runtimeTracerProvider(){let e=trace.getTracerProvider();return e.getDelegate?.()??e}function runtimeMeterProvider(){let e=metrics.getMeterProvider();return{forceFlush:typeof e?.forceFlush==`function`?()=>e.forceFlush():void 0,shutdown:typeof e?.shutdown==`function`?()=>e.shutdown():void 0}}function disableInstrumentations(e){for(let t of e??[]){let e=t?.disable;if(typeof e==`function`)try{e.call(t)}catch{}}}function globalTracerUses(e){let t=e.allocateSpanId();return e.withSpanId(t,()=>trace.getTracer(`eve.registration`).startSpan(REGISTRATION_SPAN_NAME)).spanContext().spanId===t}function isRegistrationSpan(e){return typeof e==`object`&&!!e&&(`name`in e&&e.name===REGISTRATION_SPAN_NAME||`instrumentationScope`in e&&e.instrumentationScope?.name===`eve.registration`)}function spanIdentity(e){if(typeof e!=`object`||!e||!(`spanContext`in e)||typeof e.spanContext!=`function`)return;let t=e.spanContext();return typeof t.traceId==`string`&&typeof t.spanId==`string`?`${t.traceId}:${t.spanId}`:void 0}function parentIdentity(e){if(typeof e!=`object`||!e||!(`parentSpanContext`in e))return;let t=e.parentSpanContext;return typeof t?.traceId==`string`&&typeof t.spanId==`string`?`${t.traceId}:${t.spanId}`:void 0}function addBounded(e,t){if(e.size>=REPLAY_DEDUPLICATION_LIMIT){let t=e.values().next().value;t!==void 0&&e.delete(t)}e.add(t)}function isSpanProcessor(e){return e!==`auto`}function captureOptionalPeerTracerProxy(){try{let e=require("@opentelemetry/api"),t=e.trace.getTracerProvider();return t instanceof e.ProxyTracerProvider?t:void 0}catch{return}}export{registerOtel,registerOtelPipeline};
1
+ import{createRequire}from"node:module";import{conversationIdFromContext}from"#tracing/eve/conversation-context.js";import{SpanKind,context,metrics,propagation,trace}from"#compiled/@opentelemetry/api/index.js";import{invocationName}from"#compiled/@vercel/agent-runs/otel.js";import{AgentSpanIdGenerator}from"#compiled/@vercel/agent-runs/index.js";import{registerOTel}from"#compiled/@vercel/otel/index.js";const REGISTRATION_SPAN_NAME=`eve.otel.registration`,REPLAY_DEDUPLICATION_LIMIT=1e5,REPLAY_DEDUPLICATION_KEY=Symbol.for(`eve.otel.replay-deduplication`),require=createRequire(import.meta.url),replayDeduplicationGlobal=globalThis;var RegistrationMarkerPropagator=class{#e=!1;extract(e){return e}fields(){return[]}inject(){this.#e=!0}isInstalled(){return this.#e=!1,propagation.inject(context.active(),{},{set:()=>{}}),this.#e}},PrivateSpanFilteringProcessor=class{endedSpans;forwardedSpans=new Set;pendingByParent=new Map;pendingSpanCount=0;processors;startedSpans=new Set;constructor(e,t){this.processors=e,this.endedSpans=t}async forceFlush(){this.drainPendingSpans(),await Promise.all(this.processors.map(e=>e.forceFlush()))}onEnd(e){if(isRegistrationSpan(e))return;let t=spanIdentity(e);if(t!==void 0){if(this.endedSpans.has(t))return;if(this.endedSpans.size>=REPLAY_DEDUPLICATION_LIMIT){let e=this.endedSpans.values().next().value;e!==void 0&&this.endedSpans.delete(e)}this.endedSpans.add(t)}let n=parentIdentity(e);if(n!==void 0&&this.startedSpans.has(n)&&!this.forwardedSpans.has(n)){let t=this.pendingByParent.get(n)??[];t.push(e),this.pendingByParent.set(n,t),this.pendingSpanCount+=1,this.pendingSpanCount>1e4&&this.releaseOldestPendingParent();return}this.forward(e,t)}onStart(e,t){if(isRegistrationSpan(e))return;let n=conversationIdFromContext(t);n!==void 0&&e.attributes?.[`gen_ai.conversation.id`]===void 0&&e.setAttribute(`gen_ai.conversation.id`,n);let r=spanIdentity(e);r!==void 0&&addBounded(this.startedSpans,r);for(let n of this.processors)n.onStart(e,t)}async shutdown(){this.drainPendingSpans(),await Promise.all(this.processors.map(e=>e.shutdown()))}drainPendingSpans(){for(;this.pendingByParent.size>0;)this.releaseOldestPendingParent()}releaseOldestPendingParent(){let e=this.pendingByParent.keys().next().value;e!==void 0&&this.releaseChildren(e)}releaseChildren(e){let t=this.pendingByParent.get(e);if(t!==void 0){this.pendingByParent.delete(e),this.pendingSpanCount-=t.length;for(let e of t)this.forward(e,spanIdentity(e))}}forward(e,t){for(let t of this.processors)t.onEnd(e);t!==void 0&&(addBounded(this.forwardedSpans,t),this.releaseChildren(t))}};function registerOtelPipeline(e){let t=e.otel,n=captureOptionalPeerTracerProxy(),r=new AgentSpanIdGenerator,i=new RegistrationMarkerPropagator,a=privateSpanProcessors(t.spanProcessors),o={attributes:t.resource,autoDetectResources:!1,idGenerator:r,instrumentations:t.instrumentations??[],metricReaders:t.metricReaders,propagators:[...t.propagators??[`auto`],i],serviceName:e.serviceName,spanProcessors:a};registerOTel(t.sampler===void 0?o:{...o,traceSampler:t.sampler});let s=globalTracerUses(r),c=i.isInstalled();if((!s||!c)&&rollbackRegistration({ownsPropagator:c,ownsTracer:s}),!s)throw Error("eve could not register OpenTelemetry because another runtime already owns the global tracer provider. Remove the other `registerOTel` call, or move its exporters into eve's `otelIntegration({ spanProcessors: [...] })`.");if(!c)throw Error("eve could not register OpenTelemetry because another runtime already owns the global propagator. Remove the other global propagator registration and declare propagators through eve's `otel()` instead.");let l=runtimeTracerProvider();if(typeof l.forceFlush!=`function`||typeof l.shutdown!=`function`)throw rollbackRegistration({ownsPropagator:c,ownsTracer:s}),Error(`The registered OpenTelemetry tracer provider has no lifecycle methods.`);n?.setDelegate(l);let u=runtimeMeterProvider();return{provider:trace.getTracerProvider(),forceFlush:async()=>{await Promise.all([l.forceFlush(),u.forceFlush?.()])},idGenerator:r,samplesTrace:(e,t)=>samplerAdmitsTrace(r,e,t),shutdown:async()=>{disableInstrumentations(t.instrumentations),await Promise.all([l.shutdown(),u.shutdown?.()])}}}function privateSpanProcessors(e){let t=e.filter(isSpanProcessor);if(t.length===0)return[...e];let n=new PrivateSpanFilteringProcessor(t,replayDeduplicationRegistry()),r=[],i=!1;for(let t of e){if(!isSpanProcessor(t)){r.push(t);continue}i||(i=!0,r.push(n))}return r}function replayDeduplicationRegistry(){let e=replayDeduplicationGlobal[REPLAY_DEDUPLICATION_KEY];if(e!==void 0)return e;let t=new Set;return replayDeduplicationGlobal[REPLAY_DEDUPLICATION_KEY]=t,t}const registerOtel=registerOtelPipeline;function samplerAdmitsTrace(e,t,n={name:invocationName(void 0)}){return(e.withTraceId(t,()=>trace.getTracer(`eve.registration`).startSpan(n.name,{attributes:n.attributes,kind:SpanKind.INTERNAL,root:!0})).spanContext().traceFlags&1)==1}function rollbackRegistration(e){if(e.ownsPropagator&&propagation.disable(),!e.ownsTracer)return;let t=runtimeTracerProvider();if(typeof t.shutdown==`function`)try{t.shutdown().catch(()=>{})}catch{}trace.disable()}function runtimeTracerProvider(){let e=trace.getTracerProvider();return e.getDelegate?.()??e}function runtimeMeterProvider(){let e=metrics.getMeterProvider();return{forceFlush:typeof e?.forceFlush==`function`?()=>e.forceFlush():void 0,shutdown:typeof e?.shutdown==`function`?()=>e.shutdown():void 0}}function disableInstrumentations(e){for(let t of e??[]){let e=t?.disable;if(typeof e==`function`)try{e.call(t)}catch{}}}function globalTracerUses(e){let t=e.allocateSpanId();return e.withSpanId(t,()=>trace.getTracer(`eve.registration`).startSpan(REGISTRATION_SPAN_NAME)).spanContext().spanId===t}function isRegistrationSpan(e){return typeof e==`object`&&!!e&&(`name`in e&&e.name===REGISTRATION_SPAN_NAME||`instrumentationScope`in e&&e.instrumentationScope?.name===`eve.registration`)}function spanIdentity(e){if(typeof e!=`object`||!e||!(`spanContext`in e)||typeof e.spanContext!=`function`)return;let t=e.spanContext();return typeof t.traceId==`string`&&typeof t.spanId==`string`?`${t.traceId}:${t.spanId}`:void 0}function parentIdentity(e){if(typeof e!=`object`||!e||!(`parentSpanContext`in e))return;let t=e.parentSpanContext;return typeof t?.traceId==`string`&&typeof t.spanId==`string`?`${t.traceId}:${t.spanId}`:void 0}function addBounded(e,t){if(e.size>=REPLAY_DEDUPLICATION_LIMIT){let t=e.values().next().value;t!==void 0&&e.delete(t)}e.add(t)}function isSpanProcessor(e){return e!==`auto`}function captureOptionalPeerTracerProxy(){try{let e=require("@opentelemetry/api"),t=e.trace.getTracerProvider();return t instanceof e.ProxyTracerProvider?t:void 0}catch{return}}export{registerOtel,registerOtelPipeline};
@@ -1,4 +1,4 @@
1
- import type { MappingContext, OutputMapping } from "#compiled/@eve/tracing/index.js";
1
+ import type { MappingContext, OutputMapping } from "#compiled/@vercel/agent-runs/index.js";
2
2
  export declare function eveOutputMapping(options?: {
3
3
  readonly resolve: (span: MappingContext) => {
4
4
  readonly traceSessionId?: string;
@@ -2,9 +2,9 @@ import { type InstrumentationSessionStartedEvent, type InstrumentationTraceSeed,
2
2
  import type { TraceCapturePolicy } from "#tracing/eve/otel-declaration.js";
3
3
  import type { AgentSessionTraceState, AgentTraceStateStore } from "#tracing/eve/agent-trace-state.js";
4
4
  import type { ConversationEnvironment } from "#shared/conversation-context.js";
5
- import type { AgentSpanIdGenerator, AgentTracing, ExecutionContext, TurnOperation } from "#compiled/@eve/tracing/index.js";
5
+ import type { AgentSpanIdGenerator, AgentRun, ExecutionContext, TurnOperation } from "#compiled/@vercel/agent-runs/index.js";
6
6
  interface EveSessionTracingInput {
7
- readonly tracing: AgentTracing;
7
+ readonly tracing: AgentRun;
8
8
  readonly idGenerator: AgentSpanIdGenerator;
9
9
  readonly environment: ConversationEnvironment;
10
10
  readonly frameworkVersion: string;
@@ -1 +1 @@
1
- import{localTraceOperations,traceModelName,traceSessionId,traceStringAttribute,traceToolName,uniqueLocalTraceSpans}from"#tracing/local/trace-operations.js";import{USAGE_FIELDS}from"#compiled/@eve/tracing/otel.js";function summarizeLocalTrace(e,t){let n=uniqueLocalTraceSpans(t),r=new Set,i=new Set,a=new Set,o=new Set,s=n[0]?.startTimeNs??0n,c=s,l=0,u=0,d,f=0,p=0,m=0;for(let e of n){if(e.startTimeNs<s&&(s=e.startTimeNs),e.endTimeNs>c&&(c=e.endTimeNs),add(r,traceModelName(e)),add(i,traceStringAttribute(e,`agent.name`)),add(a,traceStringAttribute(e,`gen_ai.conversation.id`)),add(o,traceSessionId(e)),e.statusCode===2&&(f+=1),e.name!==`agent.step`)continue;p+=numberAttribute(e,`agent.usage.input_tokens`)??0,m+=numberAttribute(e,`agent.usage.output_tokens`)??0,l+=numberAttribute(e,USAGE_FIELDS.cacheReadTokens)??numberAttribute(e,`gen_ai.usage.cache_read.input_tokens`)??0,u+=numberAttribute(e,USAGE_FIELDS.cacheWriteTokens)??numberAttribute(e,`gen_ai.usage.cache_creation.input_tokens`)??0;let t=localTraceSpanCostUsd(e);t!==void 0&&(d=(d??0)+t)}let h=new Set,g=0,_=0;for(let e of localTraceOperations(n))e.category===`model`&&(g+=1),e.category===`tool`&&(_+=1,add(h,traceToolName(e.span)));return{traceId:e,startedAt:new Date(Number(s/1000000n)).toISOString(),durationMs:Number(c-s)/1e6,spanCount:n.length,agentNames:[...i].sort(),conversationIds:[...a].sort(),sessionIds:[...o].sort(),models:[...r].sort(),toolNames:[...h].sort(),modelCalls:g,toolCalls:_,errorSpanCount:f,cacheReadTokens:l,cacheWriteTokens:u,costUsd:d,inputTokens:p,outputTokens:m}}function localTraceSpanCostUsd(e){return numberAttribute(e,`gen_ai.usage.gateway_cost`)??numberAttribute(e,`gen_ai.usage.cost`)}function numberAttribute(e,t){let n=e.attributes[t];if(typeof n==`number`)return Number.isFinite(n)&&n>=0?n:void 0;if(typeof n==`string`&&n.trim()!==``){let e=Number(n);return Number.isFinite(e)&&e>=0?e:void 0}}function add(e,t){t!==void 0&&e.add(t)}export{localTraceSpanCostUsd,summarizeLocalTrace};
1
+ import{localTraceOperations,traceModelName,traceSessionId,traceStringAttribute,traceToolName,uniqueLocalTraceSpans}from"#tracing/local/trace-operations.js";import{USAGE_FIELDS}from"#compiled/@vercel/agent-runs/otel.js";function summarizeLocalTrace(e,t){let n=uniqueLocalTraceSpans(t),r=new Set,i=new Set,a=new Set,o=new Set,s=n[0]?.startTimeNs??0n,c=s,l=0,u=0,d,f=0,p=0,m=0;for(let e of n){if(e.startTimeNs<s&&(s=e.startTimeNs),e.endTimeNs>c&&(c=e.endTimeNs),add(r,traceModelName(e)),add(i,traceStringAttribute(e,`agent.name`)),add(a,traceStringAttribute(e,`gen_ai.conversation.id`)),add(o,traceSessionId(e)),e.statusCode===2&&(f+=1),e.name!==`agent.step`)continue;p+=numberAttribute(e,`agent.usage.input_tokens`)??0,m+=numberAttribute(e,`agent.usage.output_tokens`)??0,l+=numberAttribute(e,USAGE_FIELDS.cacheReadTokens)??numberAttribute(e,`gen_ai.usage.cache_read.input_tokens`)??0,u+=numberAttribute(e,USAGE_FIELDS.cacheWriteTokens)??numberAttribute(e,`gen_ai.usage.cache_creation.input_tokens`)??0;let t=localTraceSpanCostUsd(e);t!==void 0&&(d=(d??0)+t)}let h=new Set,g=0,_=0;for(let e of localTraceOperations(n))e.category===`model`&&(g+=1),e.category===`tool`&&(_+=1,add(h,traceToolName(e.span)));return{traceId:e,startedAt:new Date(Number(s/1000000n)).toISOString(),durationMs:Number(c-s)/1e6,spanCount:n.length,agentNames:[...i].sort(),conversationIds:[...a].sort(),sessionIds:[...o].sort(),models:[...r].sort(),toolNames:[...h].sort(),modelCalls:g,toolCalls:_,errorSpanCount:f,cacheReadTokens:l,cacheWriteTokens:u,costUsd:d,inputTokens:p,outputTokens:m}}function localTraceSpanCostUsd(e){return numberAttribute(e,`gen_ai.usage.gateway_cost`)??numberAttribute(e,`gen_ai.usage.cost`)}function numberAttribute(e,t){let n=e.attributes[t];if(typeof n==`number`)return Number.isFinite(n)&&n>=0?n:void 0;if(typeof n==`string`&&n.trim()!==``){let e=Number(n);return Number.isFinite(e)&&e>=0?e:void 0}}function add(e,t){t!==void 0&&e.add(t)}export{localTraceSpanCostUsd,summarizeLocalTrace};