eve 0.78.0 → 0.79.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/src/approval/definition.d.ts +42 -0
  3. package/dist/src/cli/commands/trace-detail.d.ts +2 -2
  4. package/dist/src/cli/commands/trace-detail.js +1 -1
  5. package/dist/src/cli/commands/trace.d.ts +1 -1
  6. package/dist/src/cli/commands/trace.js +1 -1
  7. package/dist/src/cli/dev/tui/traces/trace-conversation.d.ts +1 -1
  8. package/dist/src/cli/dev/tui/traces/trace-conversation.js +1 -1
  9. package/dist/src/cli/dev/tui/traces/trace-store.d.ts +1 -1
  10. package/dist/src/cli/dev/tui/traces/trace-store.js +1 -1
  11. package/dist/src/cli/dev/tui/traces/trace-view.d.ts +1 -1
  12. package/dist/src/cli/dev/tui/traces/trace-view.js +1 -1
  13. package/dist/src/cli/dev/tui/traces/trace-viewer-state.d.ts +1 -1
  14. package/dist/src/compiled/.vendor-stamp.json +3 -1
  15. package/dist/src/compiled/@eve/tracing/adapters/agent-transport.d.ts +8 -0
  16. package/dist/src/compiled/@eve/tracing/adapters/ai-sdk-payload.d.ts +15 -0
  17. package/dist/src/compiled/@eve/tracing/adapters/ai-sdk-telemetry.d.ts +14 -0
  18. package/dist/src/{tracing/agent-span-id-generator.d.ts → compiled/@eve/tracing/adapters/otel-ids.d.ts} +1 -1
  19. package/dist/src/compiled/@eve/tracing/adapters/otel.d.ts +33 -0
  20. package/dist/src/{tracing/agent-otel-content.d.ts → compiled/@eve/tracing/adapters/serialization.d.ts} +9 -3
  21. package/dist/src/compiled/@eve/tracing/agent-tracing.d.ts +84 -0
  22. package/dist/src/compiled/@eve/tracing/ai-sdk.d.ts +7 -0
  23. package/dist/src/compiled/@eve/tracing/ai-sdk.js +1 -0
  24. package/dist/src/compiled/@eve/tracing/capture.d.ts +5 -0
  25. package/dist/src/compiled/@eve/tracing/core/activation.d.ts +3 -0
  26. package/dist/src/compiled/@eve/tracing/core/attributes.d.ts +14 -0
  27. package/dist/src/{tracing/content-attributes.d.ts → compiled/@eve/tracing/core/content-policy.d.ts} +1 -1
  28. package/dist/src/compiled/@eve/tracing/core/context.d.ts +3 -0
  29. package/dist/src/compiled/@eve/tracing/core/delegation.d.ts +13 -0
  30. package/dist/src/compiled/@eve/tracing/core/mcp.d.ts +24 -0
  31. package/dist/src/compiled/@eve/tracing/core/scopes.d.ts +59 -0
  32. package/dist/src/compiled/@eve/tracing/core/snapshot.d.ts +7 -0
  33. package/dist/src/compiled/@eve/tracing/core/span-kinds.d.ts +12 -0
  34. package/dist/src/compiled/@eve/tracing/core/types.d.ts +292 -0
  35. package/dist/src/compiled/@eve/tracing/core/writer.d.ts +15 -0
  36. package/dist/src/compiled/@eve/tracing/delegation.d.ts +2 -0
  37. package/dist/src/compiled/@eve/tracing/delegation.js +1 -0
  38. package/dist/src/compiled/@eve/tracing/index.d.ts +6 -0
  39. package/dist/src/compiled/@eve/tracing/index.js +1 -0
  40. package/dist/src/compiled/@eve/tracing/operations.d.ts +96 -0
  41. package/dist/src/compiled/@eve/tracing/otel.d.ts +12 -0
  42. package/dist/src/compiled/@eve/tracing/otel.js +1 -0
  43. package/dist/src/compiled/@opentelemetry/api/index.d.ts +4 -0
  44. package/dist/src/compiled/@workflow/world-vercel/index.js +7 -7
  45. package/dist/src/compiled/_chunks/workflow/delegation-BqhZ398D.js +1 -0
  46. package/dist/src/compiled/_chunks/workflow/mcp-CrGp4EC8.js +5 -0
  47. package/dist/src/compiler/extension-compatibility.d.ts +6 -6
  48. package/dist/src/compiler/extension-compatibility.js +1 -1
  49. package/dist/src/context/build-dynamic-tools.js +1 -1
  50. package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
  51. package/dist/src/evals/assertions/collector.d.ts +4 -1
  52. package/dist/src/evals/assertions/collector.js +1 -1
  53. package/dist/src/evals/context.js +1 -1
  54. package/dist/src/evals/index.d.ts +1 -1
  55. package/dist/src/evals/runner/artifacts.js +1 -1
  56. package/dist/src/evals/runner/reporters/assertion-diagnostics.js +2 -2
  57. package/dist/src/evals/runner/reporters/assertion-scores.d.ts +11 -2
  58. package/dist/src/evals/runner/reporters/assertion-scores.js +1 -1
  59. package/dist/src/evals/runner/reporters/braintrust.js +1 -1
  60. package/dist/src/evals/runner/reporters/console.js +1 -1
  61. package/dist/src/evals/runner/reporters/datadog.js +2 -2
  62. package/dist/src/evals/runner/reporters/junit.js +1 -1
  63. package/dist/src/evals/runner/verdict.d.ts +2 -2
  64. package/dist/src/evals/runner/verdict.js +1 -1
  65. package/dist/src/evals/types.d.ts +22 -6
  66. package/dist/src/eve-channel/index.js +1 -1
  67. package/dist/src/eve-channel/stream-headers.d.ts +1 -0
  68. package/dist/src/eve-channel/stream-headers.js +1 -0
  69. package/dist/src/execution/agent-sessions/context.d.ts +1 -1
  70. package/dist/src/execution/agent-sessions/context.js +1 -1
  71. package/dist/src/execution/agent-sessions/remote.js +1 -1
  72. package/dist/src/execution/agent-sessions/steps.js +1 -1
  73. package/dist/src/execution/cancelled-model-call-batch.js +1 -1
  74. package/dist/src/execution/catalog/connection-entry.js +1 -1
  75. package/dist/src/execution/dynamic-workflow/tool.js +1 -1
  76. package/dist/src/execution/eve-workflow-attributes.js +1 -1
  77. package/dist/src/execution/invoke-tool.d.ts +1 -1
  78. package/dist/src/execution/invoke-tool.js +1 -1
  79. package/dist/src/execution/session/turn-step.js +1 -1
  80. package/dist/src/execution/tools/agent-router-workflow.js +1 -1
  81. package/dist/src/execution/workflow-runtime.js +1 -1
  82. package/dist/src/harness/execute-tool.d.ts +2 -2
  83. package/dist/src/harness/input-extraction.js +1 -1
  84. package/dist/src/instrumentation/ai-sdk-hook-bridge.js +1 -1
  85. package/dist/src/instrumentation/dispatch.js +1 -1
  86. package/dist/src/instrumentation/memory.d.ts +1 -4
  87. package/dist/src/instrumentation/memory.js +1 -1
  88. package/dist/src/instrumentation/principal-summary.js +1 -1
  89. package/dist/src/instrumentation/providers.js +1 -1
  90. package/dist/src/instrumentation/runtime-context.d.ts +1 -1
  91. package/dist/src/instrumentation/runtime.d.ts +3 -3
  92. package/dist/src/instrumentation/runtime.js +1 -1
  93. package/dist/src/instrumentation/session-init.js +1 -1
  94. package/dist/src/internal/application/stamped-package-version.js +1 -1
  95. package/dist/src/internal/authored-definition/approval.d.ts +3 -1
  96. package/dist/src/internal/authored-definition/approval.js +1 -1
  97. package/dist/src/internal/authored-definition/schema-backed.js +1 -1
  98. package/dist/src/internal/logging.js +1 -1
  99. package/dist/src/internal/nitro/host/local-tracing-runtime-plugin.js +1 -1
  100. package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -1
  101. package/dist/src/internal/nitro/routes/channel-request-instrumentation.d.ts +10 -31
  102. package/dist/src/internal/nitro/routes/channel-request-instrumentation.js +1 -1
  103. package/dist/src/internal/nitro/routes/route-invoke-tool.d.ts +1 -1
  104. package/dist/src/internal/workflow-bundle/dynamic-tool-transform.js +1 -1
  105. package/dist/src/public/channels/slack/hitl.js +1 -1
  106. package/dist/src/public/definitions/approval.d.ts +1 -1
  107. package/dist/src/public/instrumentation/otel.d.ts +2 -2
  108. package/dist/src/public/instrumentation/otel.js +1 -1
  109. package/dist/src/public/tools/approval/index.d.ts +1 -1
  110. package/dist/src/runtime/connections/mcp-tracing.d.ts +10 -18
  111. package/dist/src/runtime/connections/mcp-tracing.js +1 -1
  112. package/dist/src/runtime/resolve-tool.js +1 -1
  113. package/dist/src/runtime/types.d.ts +2 -2
  114. package/dist/src/self-modification/extension/subagents/agent/tools/inspect_trace.d.ts +12 -12
  115. package/dist/src/self-modification/extension/subagents/agent/tools/inspect_trace.js +1 -1
  116. package/dist/src/self-modification/extension/subagents/agent/tools/search_traces.d.ts +1 -1
  117. package/dist/src/self-modification/extension/subagents/agent/tools/search_traces.js +1 -1
  118. package/dist/src/self-modification/extension/trace-inspection.d.ts +1 -1
  119. package/dist/src/self-modification/extension/trace-inspection.js +1 -1
  120. package/dist/src/setup/scaffold/create/project.js +1 -1
  121. package/dist/src/shared/trace-policy.d.ts +3 -0
  122. package/dist/src/shared/trace-policy.js +1 -1
  123. package/dist/src/tools/definition.d.ts +3 -3
  124. package/dist/src/tools/durable-callbacks.d.ts +5 -3
  125. package/dist/src/tools/durable-callbacks.js +1 -1
  126. package/dist/src/tools/dynamic.d.ts +2 -2
  127. package/dist/src/tools/provided/ask-question-workflow.js +1 -1
  128. package/dist/src/tools/provided/sleep-workflow.js +1 -1
  129. package/dist/src/tools/workflow-definition.d.ts +2 -2
  130. package/dist/src/tracing/eve/agent-approval-instrumentation.d.ts +8 -0
  131. package/dist/src/tracing/eve/agent-approval-instrumentation.js +1 -0
  132. package/dist/src/tracing/{agent-channel-delivery-instrumentation.d.ts → eve/agent-channel-delivery-instrumentation.d.ts} +1 -1
  133. package/dist/src/tracing/{agent-channel-delivery-instrumentation.js → eve/agent-channel-delivery-instrumentation.js} +1 -1
  134. package/dist/src/tracing/eve/agent-invocation-coordinator.js +1 -0
  135. package/dist/src/tracing/eve/agent-memory-instrumentation.d.ts +12 -0
  136. package/dist/src/tracing/eve/agent-memory-instrumentation.js +1 -0
  137. package/dist/src/tracing/{agent-otel-provider.d.ts → eve/agent-otel-provider.d.ts} +6 -8
  138. package/dist/src/tracing/eve/agent-otel-provider.js +1 -0
  139. package/dist/src/tracing/eve/agent-tool-instrumentation.d.ts +44 -0
  140. package/dist/src/tracing/eve/agent-tool-instrumentation.js +1 -0
  141. package/dist/src/tracing/{agent-trace-context-store.d.ts → eve/agent-trace-context-store.d.ts} +8 -16
  142. package/dist/src/tracing/eve/agent-trace-context-store.js +1 -0
  143. package/dist/src/tracing/eve/agent-trace-context.js +1 -0
  144. package/dist/src/tracing/eve/agent-trace-state.d.ts +75 -0
  145. package/dist/src/tracing/{batch-span-processor.d.ts → eve/batch-span-processor.d.ts} +5 -1
  146. package/dist/src/tracing/eve/batch-span-processor.js +1 -0
  147. package/dist/src/tracing/{content-span-processor.d.ts → eve/content-span-processor.d.ts} +1 -1
  148. package/dist/src/tracing/eve/content-span-processor.js +1 -0
  149. package/dist/src/tracing/eve/delegation.d.ts +20 -0
  150. package/dist/src/tracing/eve/delegation.js +1 -0
  151. package/dist/src/tracing/eve/gateway.d.ts +16 -0
  152. package/dist/src/tracing/eve/gateway.js +1 -0
  153. package/dist/src/tracing/{install-instrumentation-runtime.d.ts → eve/install-instrumentation-runtime.d.ts} +1 -1
  154. package/dist/src/tracing/eve/install-instrumentation-runtime.js +1 -0
  155. package/dist/src/tracing/eve/invoke-tool-span.js +1 -0
  156. package/dist/src/tracing/eve/mcp.d.ts +29 -0
  157. package/dist/src/tracing/eve/mcp.js +1 -0
  158. package/dist/src/tracing/eve/metadata.d.ts +7 -0
  159. package/dist/src/tracing/eve/metadata.js +1 -0
  160. package/dist/src/tracing/eve/operation-input.d.ts +30 -0
  161. package/dist/src/tracing/eve/operation-input.js +1 -0
  162. package/dist/src/tracing/eve/otel-configuration.d.ts +70 -0
  163. package/dist/src/tracing/eve/otel-configuration.js +1 -0
  164. package/dist/src/tracing/{otel-declaration.d.ts → eve/otel-declaration.d.ts} +4 -11
  165. package/dist/src/tracing/eve/otel-declaration.js +1 -0
  166. package/dist/src/tracing/{otel-registration.d.ts → eve/otel-registration.d.ts} +12 -5
  167. package/dist/src/tracing/eve/otel-registration.js +1 -0
  168. package/dist/src/tracing/eve/policy.d.ts +15 -0
  169. package/dist/src/tracing/eve/policy.js +1 -0
  170. package/dist/src/tracing/eve/profile.d.ts +7 -0
  171. package/dist/src/tracing/eve/profile.js +1 -0
  172. package/dist/src/tracing/eve/session.d.ts +27 -0
  173. package/dist/src/tracing/eve/session.js +1 -0
  174. package/dist/src/tracing/{vercel-runtime-span-exporter.d.ts → eve/vercel-runtime-span-exporter.d.ts} +1 -1
  175. package/dist/src/tracing/local/agent-trace-span-processor.js +1 -0
  176. package/dist/src/tracing/local/inspection.d.ts +15 -0
  177. package/dist/src/tracing/local/inspection.js +1 -0
  178. package/dist/src/tracing/{local-instrumentation-runtime.d.ts → local/instrumentation-runtime.d.ts} +1 -1
  179. package/dist/src/tracing/local/instrumentation-runtime.js +1 -0
  180. package/dist/src/tracing/{local-trace-analysis.d.ts → local/trace-analysis.d.ts} +2 -2
  181. package/dist/src/tracing/{local-trace-analysis.js → local/trace-analysis.js} +1 -1
  182. package/dist/src/tracing/{local-trace-operations.d.ts → local/trace-operations.d.ts} +1 -1
  183. package/dist/src/tracing/{local-trace-query.d.ts → local/trace-query.d.ts} +1 -1
  184. package/dist/src/tracing/local/trace-reader.js +1 -0
  185. package/dist/src/tracing/{local-trace-retention.js → local/trace-retention.js} +1 -1
  186. package/dist/src/tracing/{local-trace-span-processor.js → local/trace-span-processor.js} +1 -1
  187. package/dist/src/tracing/{local-trace-summary.d.ts → local/trace-summary.d.ts} +1 -1
  188. package/dist/src/tracing/local/trace-summary.js +1 -0
  189. package/dist/src/tracing/{local-traces.d.ts → local/traces.d.ts} +1 -1
  190. package/dist/src/tracing/local/traces.js +1 -0
  191. package/docs/connections/mcp.mdx +22 -1
  192. package/docs/evals/assertions.mdx +50 -3
  193. package/docs/evals/overview.mdx +2 -1
  194. package/docs/evals/reporters.mdx +3 -1
  195. package/docs/tools/human-in-the-loop.md +23 -1
  196. package/package.json +2 -1
  197. package/dist/src/tracing/agent-approval-instrumentation.d.ts +0 -11
  198. package/dist/src/tracing/agent-approval-instrumentation.js +0 -1
  199. package/dist/src/tracing/agent-invocation-coordinator.js +0 -1
  200. package/dist/src/tracing/agent-memory-instrumentation.d.ts +0 -16
  201. package/dist/src/tracing/agent-memory-instrumentation.js +0 -1
  202. package/dist/src/tracing/agent-otel-attributes.d.ts +0 -10
  203. package/dist/src/tracing/agent-otel-attributes.js +0 -1
  204. package/dist/src/tracing/agent-otel-content.js +0 -4
  205. package/dist/src/tracing/agent-otel-provider.js +0 -2
  206. package/dist/src/tracing/agent-otel-runtime-context.d.ts +0 -36
  207. package/dist/src/tracing/agent-otel-runtime-context.js +0 -1
  208. package/dist/src/tracing/agent-otel-session-context.d.ts +0 -22
  209. package/dist/src/tracing/agent-otel-session-context.js +0 -1
  210. package/dist/src/tracing/agent-otel-turn-state.d.ts +0 -6
  211. package/dist/src/tracing/agent-otel-turn-state.js +0 -1
  212. package/dist/src/tracing/agent-otel-usage.d.ts +0 -10
  213. package/dist/src/tracing/agent-otel-usage.js +0 -1
  214. package/dist/src/tracing/agent-span-contract.d.ts +0 -34
  215. package/dist/src/tracing/agent-span-contract.js +0 -1
  216. package/dist/src/tracing/agent-span-error.js +0 -1
  217. package/dist/src/tracing/agent-span-id-generator.js +0 -1
  218. package/dist/src/tracing/agent-span-naming.d.ts +0 -1
  219. package/dist/src/tracing/agent-span-naming.js +0 -1
  220. package/dist/src/tracing/agent-tool-instrumentation.d.ts +0 -40
  221. package/dist/src/tracing/agent-tool-instrumentation.js +0 -1
  222. package/dist/src/tracing/agent-tool-span-context.d.ts +0 -16
  223. package/dist/src/tracing/agent-tool-span-context.js +0 -1
  224. package/dist/src/tracing/agent-trace-context-codec.d.ts +0 -15
  225. package/dist/src/tracing/agent-trace-context-codec.js +0 -1
  226. package/dist/src/tracing/agent-trace-context-store.js +0 -1
  227. package/dist/src/tracing/agent-trace-context.js +0 -1
  228. package/dist/src/tracing/agent-trace-span-processor.js +0 -1
  229. package/dist/src/tracing/agent-trace-state.d.ts +0 -91
  230. package/dist/src/tracing/batch-span-processor.js +0 -1
  231. package/dist/src/tracing/bounded-error.d.ts +0 -1
  232. package/dist/src/tracing/bounded-error.js +0 -1
  233. package/dist/src/tracing/content-attributes.js +0 -1
  234. package/dist/src/tracing/content-span-processor.js +0 -1
  235. package/dist/src/tracing/error-content-context.d.ts +0 -3
  236. package/dist/src/tracing/error-content-context.js +0 -1
  237. package/dist/src/tracing/install-instrumentation-runtime.js +0 -1
  238. package/dist/src/tracing/invoke-tool-span.js +0 -1
  239. package/dist/src/tracing/local-instrumentation-runtime.js +0 -1
  240. package/dist/src/tracing/local-trace-reader.js +0 -1
  241. package/dist/src/tracing/local-trace-summary.js +0 -1
  242. package/dist/src/tracing/local-traces.js +0 -1
  243. package/dist/src/tracing/otel-declaration.js +0 -1
  244. package/dist/src/tracing/otel-registration.js +0 -1
  245. package/dist/src/tracing/sampled-trace.d.ts +0 -4
  246. package/dist/src/tracing/sampled-trace.js +0 -1
  247. package/dist/src/tracing/suppress-tracing.d.ts +0 -2
  248. package/dist/src/tracing/suppress-tracing.js +0 -1
  249. package/dist/src/tracing/telemetry-budget.d.ts +0 -3
  250. package/dist/src/tracing/telemetry-budget.js +0 -1
  251. /package/dist/src/{tracing/agent-span-error.d.ts → compiled/@eve/tracing/adapters/otel-error.d.ts} +0 -0
  252. /package/dist/src/tracing/{agent-invocation-coordinator.d.ts → eve/agent-invocation-coordinator.d.ts} +0 -0
  253. /package/dist/src/tracing/{agent-trace-context.d.ts → eve/agent-trace-context.d.ts} +0 -0
  254. /package/dist/src/tracing/{agent-trace-state.js → eve/agent-trace-state.js} +0 -0
  255. /package/dist/src/tracing/{channel-audience-context.d.ts → eve/channel-audience-context.d.ts} +0 -0
  256. /package/dist/src/tracing/{channel-audience-context.js → eve/channel-audience-context.js} +0 -0
  257. /package/dist/src/tracing/{conversation-context.d.ts → eve/conversation-context.d.ts} +0 -0
  258. /package/dist/src/tracing/{conversation-context.js → eve/conversation-context.js} +0 -0
  259. /package/dist/src/tracing/{invoke-tool-span.d.ts → eve/invoke-tool-span.d.ts} +0 -0
  260. /package/dist/src/tracing/{span-export-policy.d.ts → eve/span-export-policy.d.ts} +0 -0
  261. /package/dist/src/tracing/{span-export-policy.js → eve/span-export-policy.js} +0 -0
  262. /package/dist/src/tracing/{vercel-runtime-span-exporter.js → eve/vercel-runtime-span-exporter.js} +0 -0
  263. /package/dist/src/tracing/{agent-trace-span-processor.d.ts → local/agent-trace-span-processor.d.ts} +0 -0
  264. /package/dist/src/tracing/{local-trace-discovery-index.d.ts → local/trace-discovery-index.d.ts} +0 -0
  265. /package/dist/src/tracing/{local-trace-discovery-index.js → local/trace-discovery-index.js} +0 -0
  266. /package/dist/src/tracing/{local-trace-operations.js → local/trace-operations.js} +0 -0
  267. /package/dist/src/tracing/{local-trace-query.js → local/trace-query.js} +0 -0
  268. /package/dist/src/tracing/{local-trace-reader.d.ts → local/trace-reader.d.ts} +0 -0
  269. /package/dist/src/tracing/{local-trace-retention.d.ts → local/trace-retention.d.ts} +0 -0
  270. /package/dist/src/tracing/{local-trace-span-processor.d.ts → local/trace-span-processor.d.ts} +0 -0
@@ -1 +1 @@
1
- import{createLogger,formatError}from"#internal/logging.js";import{abandonInstrumentationState,instrumentationStateSlot,isInstrumentationStateAbandoned,releaseAllInstrumentationAttemptState,releaseAllInstrumentationState,releaseAllInstrumentationTurnState,takeInstrumentationActionScopes}from"#instrumentation/state.js";import{withInstrumentationDecision,withoutInstrumentationContent}from"#instrumentation/content.js";import{resolveTracePolicy}from"#shared/trace-policy.js";const log=createLogger(`harness.instrumentation-dispatch`);function createInstrumentationDispatcher(e,t){let n=t.handlerTimeoutMs??5e3,r=normalizeDispatchGroups(e),i=[...r.serialBefore,...r.parallel,...r.serialAfter],a=new Set;function forTrace(e){let t=new WeakMap,o=new Map(i.map(t=>[t,resolveTracePolicy(t.tracePolicy,e,e=>{a.has(t)||(a.add(t),log.warn(`instrumentation provider trace policy failed`,{error:formatError(e),provider:t.name}))})])),s=[...o.values()].some(e=>e.action===`record`&&e.recordInputs),c=[...o.values()].some(e=>e.action===`record`&&e.recordOutputs),l=s||c,publish=async e=>{let i=snapshotInstrumentationEvent(withInstrumentationDecision(e,{action:`record`,recordInputs:s,recordOutputs:c}),t,e),a=i.type===`session.completed`||i.type===`session.failed`,l=i.type===`turn.cancelled`||i.type===`turn.failed`;if(a||l){let e=takeInstrumentationActionScopes(i.sessionId,l?i.turnId:void 0),t=terminalActionFailure(i);for(let n of e)await publish({...t,idempotencyKey:n.idempotencyKey,scope:n.scope,type:`tool.call.failed`})}let u=new Map,visibleEvent=e=>{let t=o.get(e);if(t===void 0||t.action===`drop`)return withoutInstrumentationContent(i);if(t.recordInputs&&t.recordOutputs)return i;let n=`${String(t.recordInputs)}:${String(t.recordOutputs)}`,r=u.get(n);return r===void 0&&(r=withInstrumentationDecision(i,t),u.set(n,r)),r},admitted=e=>o.get(e)?.action===`record`;try{try{for(let e of r.serialBefore)admitted(e)&&await dispatchToProvider(e,i,n,()=>visibleEvent(e));let e=r.parallel.filter(admitted);if(e.length===1){let t=e[0];await dispatchToProvider(t,i,n,()=>visibleEvent(t))}else if(e.length>1){let t=(await Promise.allSettled(e.map(e=>dispatchToProvider(e,i,n,()=>visibleEvent(e))))).find(e=>e.status===`rejected`);if(t!==void 0)throw t.reason}}finally{for(let e of r.serialAfter)admitted(e)&&await dispatchToProvider(e,i,n,()=>visibleEvent(e))}}finally{releaseTerminalState(i)}};return{capturesContent:l,capturesInputs:s,capturesOutputs:c,forTrace,publish}}let o=!1;return{capturesContent:!1,forTrace,async publish(e){o||(o=!0,log.debug(`instrumentation event published without trace binding`,{eventType:e.type}))}}}function snapshotInstrumentationEvent(e,t,n){let r=t.get(n);if(r!==void 0)return r;let i=snapshotPlainValue(e,t);return t.set(n,i),i}function snapshotPlainValue(e,t){if(Array.isArray(e)){let n=t.get(e);if(n!==void 0)return n;let r=[];t.set(e,r);for(let n of e)r.push(snapshotPlainValue(n,t));return Object.freeze(r)}if(typeof e!=`object`||!e)return e;let n;try{n=Object.getPrototypeOf(e)}catch{return e}if(n!==Object.prototype&&n!==null)return e;let r=t.get(e);if(r!==void 0)return r;let i={};t.set(e,i);for(let[n,r]of Object.entries(e))i[n]=snapshotPlainValue(r,t);return Object.freeze(i)}function normalizeDispatchGroups(e){if(!Array.isArray(e)){let t=e;return{parallel:t.parallel??[],serialAfter:t.serialAfter??[],serialBefore:t.serialBefore??[]}}return{parallel:[],serialAfter:[],serialBefore:e.map((e,t)=>({...e,name:e.name??`provider-${String(t)}`}))}}async function dispatchToProvider(e,t,n,r){let i=t.type.endsWith(`.started`)||t.type===`input.requested`,a=stateOwner(t),o=e.name,s=e.stateNamespace??o;if(isInstrumentationStateAbandoned(s,t.idempotencyKey))return;let c=e.events?.[t.type];if(c===void 0)return;let l=instrumentationStateSlot(s,t.idempotencyKey,a);try{await withTimeout(async()=>{let t=r();await c(e.projectEvent===void 0?t:await e.projectEvent(t),{state:l})},n,()=>{l.revoke(),i&&abandonInstrumentationState(s,t.idempotencyKey,a)})||log.warn(`instrumentation provider timed out`,{boundary:t.type,provider:o,timeoutMs:n})}catch(e){log.warn(`instrumentation provider failed`,{boundary:t.type,error:formatError(e),provider:o})}finally{l.revoke()}}async function withTimeout(e,t,n){let r;try{return await Promise.race([Promise.resolve(e()).then(()=>!0),new Promise(e=>{r=setTimeout(()=>{n(),e(!1)},t)})])}finally{clearTimeout(r)}}function stateOwner(e){return e.type===`channel.delivery.started`||e.type===`channel.delivery.cancelled`||e.type===`channel.delivery.completed`||e.type===`channel.delivery.failed`||e.type===`memory.operation.started`||e.type===`memory.operation.completed`||e.type===`memory.operation.failed`?{sessionId:e.sessionId,turnId:e.turnId}:`scope`in e?e.type.startsWith(`tool.call.`)||e.type.startsWith(`input.`)?{sessionId:e.scope.sessionId,turnId:e.scope.turnId}:e.type.startsWith(`model.call.`)||e.type.startsWith(`step.attempt.`)?{attemptId:e.scope.attemptId}:{}:{}}function releaseTerminalState(e){isTerminal(e.type)&&releaseAllInstrumentationState(e.idempotencyKey),(e.type===`step.attempt.completed`||e.type===`step.attempt.failed`)&&releaseAllInstrumentationAttemptState(e.scope.attemptId),(e.type===`session.completed`||e.type===`session.failed`)&&releaseAllInstrumentationTurnState(e.sessionId),(e.type===`turn.cancelled`||e.type===`turn.failed`)&&releaseAllInstrumentationTurnState(e.sessionId,e.turnId)}function terminalActionFailure(e){return e.type===`session.failed`||e.type===`turn.failed`?{error:e.error,outcome:`failed`}:e.type===`turn.cancelled`?{error:Error(`The action was cancelled with its turn.`),errorCode:`ACTION_CANCELLED`,outcome:`cancelled`}:{error:Error(`The session completed before the action settled.`),errorCode:`ACTION_ABANDONED`,outcome:`abandoned`}}function isTerminal(e){return e.endsWith(`.completed`)||e.endsWith(`.failed`)||e.endsWith(`.cancelled`)||e===`input.resolved`}export{createInstrumentationDispatcher};
1
+ import{createLogger,formatError}from"#internal/logging.js";import{abandonInstrumentationState,instrumentationStateSlot,isInstrumentationStateAbandoned,releaseAllInstrumentationAttemptState,releaseAllInstrumentationState,releaseAllInstrumentationTurnState,takeInstrumentationActionScopes}from"#instrumentation/state.js";import{resolveTracePolicy}from"#shared/trace-policy.js";import{withInstrumentationDecision,withoutInstrumentationContent}from"#instrumentation/content.js";const log=createLogger(`harness.instrumentation-dispatch`);function createInstrumentationDispatcher(e,t){let n=t.handlerTimeoutMs??5e3,r=normalizeDispatchGroups(e),i=[...r.serialBefore,...r.parallel,...r.serialAfter],a=new Set;function forTrace(e){let t=new WeakMap,o=new Map(i.map(t=>[t,resolveTracePolicy(t.tracePolicy,e,e=>{a.has(t)||(a.add(t),log.warn(`instrumentation provider trace policy failed`,{error:formatError(e),provider:t.name}))})])),s=[...o.values()].some(e=>e.action===`record`&&e.recordInputs),c=[...o.values()].some(e=>e.action===`record`&&e.recordOutputs),l=s||c,publish=async e=>{let i=snapshotInstrumentationEvent(withInstrumentationDecision(e,{action:`record`,recordInputs:s,recordOutputs:c}),t,e),a=i.type===`session.completed`||i.type===`session.failed`,l=i.type===`turn.cancelled`||i.type===`turn.failed`;if(a||l){let e=takeInstrumentationActionScopes(i.sessionId,l?i.turnId:void 0),t=terminalActionFailure(i);for(let n of e)await publish({...t,idempotencyKey:n.idempotencyKey,scope:n.scope,type:`tool.call.failed`})}let u=new Map,visibleEvent=e=>{let t=o.get(e);if(t===void 0||t.action===`drop`)return withoutInstrumentationContent(i);if(t.recordInputs&&t.recordOutputs)return i;let n=`${String(t.recordInputs)}:${String(t.recordOutputs)}`,r=u.get(n);return r===void 0&&(r=withInstrumentationDecision(i,t),u.set(n,r)),r},admitted=e=>o.get(e)?.action===`record`;try{try{for(let e of r.serialBefore)admitted(e)&&await dispatchToProvider(e,i,n,()=>visibleEvent(e));let e=r.parallel.filter(admitted);if(e.length===1){let t=e[0];await dispatchToProvider(t,i,n,()=>visibleEvent(t))}else if(e.length>1){let t=(await Promise.allSettled(e.map(e=>dispatchToProvider(e,i,n,()=>visibleEvent(e))))).find(e=>e.status===`rejected`);if(t!==void 0)throw t.reason}}finally{for(let e of r.serialAfter)admitted(e)&&await dispatchToProvider(e,i,n,()=>visibleEvent(e))}}finally{releaseTerminalState(i)}};return{capturesContent:l,capturesInputs:s,capturesOutputs:c,forTrace,publish}}let o=!1;return{capturesContent:!1,forTrace,async publish(e){o||(o=!0,log.debug(`instrumentation event published without trace binding`,{eventType:e.type}))}}}function snapshotInstrumentationEvent(e,t,n){let r=t.get(n);if(r!==void 0)return r;let i=snapshotPlainValue(e,t);return t.set(n,i),i}function snapshotPlainValue(e,t){if(Array.isArray(e)){let n=t.get(e);if(n!==void 0)return n;let r=[];t.set(e,r);for(let n of e)r.push(snapshotPlainValue(n,t));return Object.freeze(r)}if(typeof e!=`object`||!e)return e;let n;try{n=Object.getPrototypeOf(e)}catch{return e}if(n!==Object.prototype&&n!==null)return e;let r=t.get(e);if(r!==void 0)return r;let i={};t.set(e,i);for(let[n,r]of Object.entries(e))i[n]=snapshotPlainValue(r,t);return Object.freeze(i)}function normalizeDispatchGroups(e){if(!Array.isArray(e)){let t=e;return{parallel:t.parallel??[],serialAfter:t.serialAfter??[],serialBefore:t.serialBefore??[]}}return{parallel:[],serialAfter:[],serialBefore:e.map((e,t)=>({...e,name:e.name??`provider-${String(t)}`}))}}async function dispatchToProvider(e,t,n,r){let i=t.type.endsWith(`.started`)||t.type===`input.requested`,a=stateOwner(t),o=e.name,s=e.stateNamespace??o;if(isInstrumentationStateAbandoned(s,t.idempotencyKey))return;let c=e.events?.[t.type];if(c===void 0)return;let l=instrumentationStateSlot(s,t.idempotencyKey,a);try{await withTimeout(async()=>{let t=r();await c(e.projectEvent===void 0?t:await e.projectEvent(t),{state:l})},n,()=>{l.revoke(),i&&abandonInstrumentationState(s,t.idempotencyKey,a)})||log.warn(`instrumentation provider timed out`,{boundary:t.type,provider:o,timeoutMs:n})}catch(e){log.warn(`instrumentation provider failed`,{boundary:t.type,error:formatError(e),provider:o})}finally{l.revoke()}}async function withTimeout(e,t,n){let r;try{return await Promise.race([Promise.resolve(e()).then(()=>!0),new Promise(e=>{r=setTimeout(()=>{n(),e(!1)},t)})])}finally{clearTimeout(r)}}function stateOwner(e){return e.type===`channel.delivery.started`||e.type===`channel.delivery.cancelled`||e.type===`channel.delivery.completed`||e.type===`channel.delivery.failed`||e.type===`memory.operation.started`||e.type===`memory.operation.completed`||e.type===`memory.operation.failed`?{sessionId:e.sessionId,turnId:e.turnId}:`scope`in e?e.type.startsWith(`tool.call.`)||e.type.startsWith(`input.`)?{sessionId:e.scope.sessionId,turnId:e.scope.turnId}:e.type.startsWith(`model.call.`)||e.type.startsWith(`step.attempt.`)?{attemptId:e.scope.attemptId}:{}:{}}function releaseTerminalState(e){isTerminal(e.type)&&releaseAllInstrumentationState(e.idempotencyKey),(e.type===`step.attempt.completed`||e.type===`step.attempt.failed`)&&releaseAllInstrumentationAttemptState(e.scope.attemptId),(e.type===`session.completed`||e.type===`session.failed`)&&releaseAllInstrumentationTurnState(e.sessionId),(e.type===`turn.cancelled`||e.type===`turn.failed`)&&releaseAllInstrumentationTurnState(e.sessionId,e.turnId)}function terminalActionFailure(e){return e.type===`session.failed`||e.type===`turn.failed`?{error:e.error,outcome:`failed`}:e.type===`turn.cancelled`?{error:Error(`The action was cancelled with its turn.`),errorCode:`ACTION_CANCELLED`,outcome:`cancelled`}:{error:Error(`The session completed before the action settled.`),errorCode:`ACTION_ABANDONED`,outcome:`abandoned`}}function isTerminal(e){return e.endsWith(`.completed`)||e.endsWith(`.failed`)||e.endsWith(`.cancelled`)||e===`input.resolved`}export{createInstrumentationDispatcher};
@@ -45,10 +45,7 @@ export interface InstrumentationMemoryOperationFailedEvent extends Instrumentati
45
45
  readonly error?: unknown;
46
46
  }
47
47
  export type InstrumentationMemoryOperationTerminalEvent = InstrumentationMemoryOperationCompletedEvent | InstrumentationMemoryOperationFailedEvent;
48
- export interface InstrumentationMemoryExecutionOperation {
49
- readonly idempotencyKey: string;
50
- readonly sessionId: string;
51
- readonly turnId?: string;
48
+ export interface InstrumentationMemoryExecutionOperation extends InstrumentationMemoryOperationEvent {
52
49
  readonly type: "memory.operation";
53
50
  }
54
51
  /** The terminal details a memory operation reports to instrumentation. */
@@ -1 +1 @@
1
- function createMemoryInstrumentation(e){return{async execute(t,n){let{hooks:r,rootSessionId:i,traceSessionId:a}=e.resolveContext(),o={...t,rootSessionId:i,traceSessionId:a,sessionId:e.sessionId};await r.publish({...o,type:`memory.operation.started`});try{let i=await e.runInContext({idempotencyKey:t.idempotencyKey,sessionId:e.sessionId,turnId:t.turnId,type:`memory.operation`},n);return await r.publish({...o,outputRecords:i.outputRecords,recordCount:i.recordCount,type:`memory.operation.completed`}),i.value}catch(e){throw await r.publish({...o,error:e,type:`memory.operation.failed`}),e}}}}async function instrumentMemoryOperation(e,t,n){return e===void 0?(await n()).value:await e.execute(typeof t==`function`?t():t,n)}export{createMemoryInstrumentation,instrumentMemoryOperation};
1
+ function createMemoryInstrumentation(e){return{async execute(t,n){let{hooks:r,rootSessionId:i,traceSessionId:a}=e.resolveContext(),o={...t,rootSessionId:i,traceSessionId:a,sessionId:e.sessionId};await r.publish({...o,type:`memory.operation.started`});try{let t=await e.runInContext({...o,type:`memory.operation`},n);return await r.publish({...o,outputRecords:t.outputRecords,recordCount:t.recordCount,type:`memory.operation.completed`}),t.value}catch(e){throw await r.publish({...o,error:e,type:`memory.operation.failed`}),e}}}}async function instrumentMemoryOperation(e,t,n){return e===void 0?(await n()).value:await e.execute(typeof t==`function`?t():t,n)}export{createMemoryInstrumentation,instrumentMemoryOperation};
@@ -1 +1 @@
1
- import{AuthKey,InitiatorAuthKey}from"#context/keys.js";import{shouldCaptureInstrumentationContent}from"#shared/instrumentation-content.js";import{isInstrumentationPrincipalType}from"#instrumentation/lifecycle.js";import{resolveTracePolicyDecision}from"#shared/trace-policy.js";import{boundedPrincipalId}from"#tracing/telemetry-budget.js";function summarizeInstrumentationPrincipal(e,t){if(e===void 0)return;if(e===null)return{type:`none`};let n=isInstrumentationPrincipalType(e.principalType)&&e.principalType!==`none`?e.principalType:`other`,r=shouldCaptureInstrumentationContent(t)?boundedPrincipalId(e.principalId):void 0;return r===void 0?{type:n}:{id:r,type:n}}function applyPrincipalTraceDecision(e,t){if(e!==void 0)return e.type!==`none`&&t?.action===`record`&&t.recordInputs&&t.recordOutputs?e:{type:e.type}}function readInstrumentationPrincipals(e,t,n=resolveTracePolicyDecision(!0,t)){return{currentPrincipal:applyPrincipalTraceDecision(summarizeInstrumentationPrincipal(e.get(AuthKey),t),n),initiatorPrincipal:applyPrincipalTraceDecision(summarizeInstrumentationPrincipal(e.get(InitiatorAuthKey),t),n)}}export{applyPrincipalTraceDecision,readInstrumentationPrincipals,summarizeInstrumentationPrincipal};
1
+ import{AuthKey,InitiatorAuthKey}from"#context/keys.js";import{shouldCaptureInstrumentationContent}from"#shared/instrumentation-content.js";import{resolveTracePolicyDecision}from"#shared/trace-policy.js";import{isInstrumentationPrincipalType}from"#instrumentation/lifecycle.js";import{boundedPrincipalId}from"#compiled/@eve/tracing/otel.js";function summarizeInstrumentationPrincipal(e,t){if(e===void 0)return;if(e===null)return{type:`none`};let n=isInstrumentationPrincipalType(e.principalType)&&e.principalType!==`none`?e.principalType:`other`,r=shouldCaptureInstrumentationContent(t)?boundedPrincipalId(e.principalId):void 0;return r===void 0?{type:n}:{id:r,type:n}}function applyPrincipalTraceDecision(e,t){if(e!==void 0)return e.type!==`none`&&t?.action===`record`&&t.recordInputs&&t.recordOutputs?e:{type:e.type}}function readInstrumentationPrincipals(e,t,n=resolveTracePolicyDecision(!0,t)){return{currentPrincipal:applyPrincipalTraceDecision(summarizeInstrumentationPrincipal(e.get(AuthKey),t),n),initiatorPrincipal:applyPrincipalTraceDecision(summarizeInstrumentationPrincipal(e.get(InitiatorAuthKey),t),n)}}export{applyPrincipalTraceDecision,readInstrumentationPrincipals,summarizeInstrumentationPrincipal};
@@ -1 +1 @@
1
- import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{getInstrumentationRuntime}from"#instrumentation/runtime.js";import{DEVELOPMENT_WORKER_APP_ROOT_ENV}from"#internal/workflow/development-world-protocol.js";import{createInstrumentationSetupContext}from"#instrumentation/setup-context.js";import{agentRuns,localTraces}from"#public/instrumentation/otel.js";import{installInstrumentationRuntime}from"#tracing/install-instrumentation-runtime.js";import{collectOtelPipeline}from"#tracing/otel-declaration.js";import{isInstrumentationDisabled,isInstrumentationProvider}from"#public/instrumentation/provider.js";const INSTRUMENTATION_PROVIDERS_GLOBAL_KEY=Symbol.for(`eve.harness-instrumentation-providers`),globalContainer=globalThis;function providerRegistry(){let e=globalContainer[INSTRUMENTATION_PROVIDERS_GLOBAL_KEY];if(e!==void 0)return e;let t=new Map;return globalContainer[INSTRUMENTATION_PROVIDERS_GLOBAL_KEY]=t,t}function seedInstrumentationProviders(){let e=providerRegistry();(process.env.VERCEL_ENV===`preview`||process.env.VERCEL_ENV===`production`)&&e.set(`agent-runs`,agentRuns()),process.env[DEVELOPMENT_WORKER_APP_ROOT_ENV]!==void 0&&e.set(`local`,localTraces())}async function registerInstrumentationProvider(e){if(isInstrumentationDisabled(e.value)){providerRegistry().delete(e.slot);return}if(!isInstrumentationProvider(e.value))throw Error(`The default export of "instrumentation/${e.slot}" is not an instrumentation provider. Return the result of \`defineInstrumentation\` or \`disableInstrumentation\` from it.`);if(Object.hasOwn(e.value,`capture`))throw Error(`The instrumentation provider "instrumentation/${e.slot}" no longer supports \`capture\`. Use \`tracePolicy\` to configure content capture.`);providerRegistry().set(e.slot,e.value),await e.value.setup?.(createInstrumentationSetupContext(e.agentName))}function getInstrumentationProviders(){return[...providerRegistry()].sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>({provider:t,slot:e}))}function finalizeInstrumentationProviders(e){let t=getInstrumentationProviders(),n=t.map(toProviderDefinition),r=collectOtelPipeline(t.map(e=>e.provider));return installInstrumentationRuntime({collected:r,frameworkVersion:resolveInstalledPackageInfo().version,providers:n,runtimeContextResolvers:r.runtimeContextResolvers,serviceName:e.serviceName})}async function shutdownInstrumentationProviders(){await getInstrumentationRuntime()?.shutdown()}function toProviderDefinition(e){return{events:e.provider.events,flush:e.provider.flush,name:e.slot,shutdown:e.provider.shutdown,stateNamespace:`authored:${e.slot}`,tracePolicy:e.provider.tracePolicy}}export{finalizeInstrumentationProviders,getInstrumentationProviders,registerInstrumentationProvider,seedInstrumentationProviders,shutdownInstrumentationProviders};
1
+ import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{getInstrumentationRuntime}from"#instrumentation/runtime.js";import{DEVELOPMENT_WORKER_APP_ROOT_ENV}from"#internal/workflow/development-world-protocol.js";import{createInstrumentationSetupContext}from"#instrumentation/setup-context.js";import{agentRuns,localTraces}from"#public/instrumentation/otel.js";import{installInstrumentationRuntime}from"#tracing/eve/install-instrumentation-runtime.js";import{collectOtelPipeline}from"#tracing/eve/otel-declaration.js";import{isInstrumentationDisabled,isInstrumentationProvider}from"#public/instrumentation/provider.js";const INSTRUMENTATION_PROVIDERS_GLOBAL_KEY=Symbol.for(`eve.harness-instrumentation-providers`),globalContainer=globalThis;function providerRegistry(){let e=globalContainer[INSTRUMENTATION_PROVIDERS_GLOBAL_KEY];if(e!==void 0)return e;let t=new Map;return globalContainer[INSTRUMENTATION_PROVIDERS_GLOBAL_KEY]=t,t}function seedInstrumentationProviders(){let e=providerRegistry();(process.env.VERCEL_ENV===`preview`||process.env.VERCEL_ENV===`production`)&&e.set(`agent-runs`,agentRuns()),process.env[DEVELOPMENT_WORKER_APP_ROOT_ENV]!==void 0&&e.set(`local`,localTraces())}async function registerInstrumentationProvider(e){if(isInstrumentationDisabled(e.value)){providerRegistry().delete(e.slot);return}if(!isInstrumentationProvider(e.value))throw Error(`The default export of "instrumentation/${e.slot}" is not an instrumentation provider. Return the result of \`defineInstrumentation\` or \`disableInstrumentation\` from it.`);if(Object.hasOwn(e.value,`capture`))throw Error(`The instrumentation provider "instrumentation/${e.slot}" no longer supports \`capture\`. Use \`tracePolicy\` to configure content capture.`);providerRegistry().set(e.slot,e.value),await e.value.setup?.(createInstrumentationSetupContext(e.agentName))}function getInstrumentationProviders(){return[...providerRegistry()].sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>({provider:t,slot:e}))}function finalizeInstrumentationProviders(e){let t=getInstrumentationProviders(),n=t.map(toProviderDefinition),r=collectOtelPipeline(t.map(e=>e.provider));return installInstrumentationRuntime({collected:r,frameworkVersion:resolveInstalledPackageInfo().version,providers:n,runtimeContextResolvers:r.runtimeContextResolvers,serviceName:e.serviceName})}async function shutdownInstrumentationProviders(){await getInstrumentationRuntime()?.shutdown()}function toProviderDefinition(e){return{events:e.provider.events,flush:e.provider.flush,name:e.slot,shutdown:e.provider.shutdown,stateNamespace:`authored:${e.slot}`,tracePolicy:e.provider.tracePolicy}}export{finalizeInstrumentationProviders,getInstrumentationProviders,registerInstrumentationProvider,seedInstrumentationProviders,shutdownInstrumentationProviders};
@@ -3,7 +3,7 @@ import type { ChannelInstrumentationProjection, SessionAuthContext, SessionParen
3
3
  import type { AlsContext } from "#context/container.js";
4
4
  import type { TurnPosition } from "#harness/session-machine/view.js";
5
5
  import type { HarnessSession } from "#harness/types.js";
6
- import type { RuntimeContextResolver } from "#tracing/otel-declaration.js";
6
+ import type { RuntimeContextResolver } from "#tracing/eve/otel-declaration.js";
7
7
  export interface BuildTelemetryRuntimeContextInput {
8
8
  readonly capturesContent: boolean;
9
9
  readonly context?: InstrumentationRuntimeContextSnapshot;
@@ -7,11 +7,11 @@ import type { HandleEventFn } from "#harness/types.js";
7
7
  import { type ChannelDeliveryStartInstrumentation, type ChannelDeliveryTerminalInstrumentation } from "#instrumentation/channel-delivery.js";
8
8
  import { type PrepareTurnTraceContextInput } from "#instrumentation/prepare-trace-context.js";
9
9
  import type { RuntimeTraceContext } from "#protocol/message.js";
10
- import type { OtelHarnessSettings, RuntimeContextResolver } from "#tracing/otel-declaration.js";
11
- import { AgentSpanIdGenerator } from "#tracing/agent-span-id-generator.js";
10
+ import type { OtelHarnessSettings, RuntimeContextResolver } from "#tracing/eve/otel-declaration.js";
11
+ import { AgentSpanIdGenerator } from "#compiled/@eve/tracing/index.js";
12
12
  import { type ContextContainer } from "#context/container.js";
13
13
  import { type MemoryInstrumentation } from "#instrumentation/memory.js";
14
- import type { AgentSamplingOperation } from "#tracing/agent-span-contract.js";
14
+ import type { SamplingOperation as AgentSamplingOperation } from "#tracing/eve/otel-registration.js";
15
15
  import { getInstrumentationRuntime, registerInstrumentationRuntime } from "#instrumentation/runtime-global.js";
16
16
  import { initializeSessionInstrumentation } from "#instrumentation/session-init.js";
17
17
  export { getInstrumentationRuntime, registerInstrumentationRuntime };
@@ -1 +1 @@
1
- import{ensureAiSdkWarningLogger}from"#instrumentation/ai-sdk-warnings.js";import{recordErrorOnSpan}from"#internal/logging.js";import{applyLiveDeliveryAudienceCeiling}from"#shared/forwarded-trace-policy.js";import{contextStorage}from"#context/container.js";import{ConversationIdKey,ParentSessionKey}from"#context/keys.js";import{createMemoryInstrumentation}from"#instrumentation/memory.js";import{readConversationId}from"#shared/conversation-identity.js";import{findInstrumentationActionScopeForCall}from"#instrumentation/state.js";import{readSessionTraceDecision}from"#tracing/agent-trace-context-store.js";import{resolveTraceRootSessionId}from"#shared/trace-root.js";import{shouldCaptureInstrumentationContent}from"#shared/instrumentation-content.js";import{isSampledTrace,resolveTracePolicy,resolveTracePolicyDecision}from"#tracing/sampled-trace.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{attemptIdempotencyKey,toolCallIdempotencyKey}from"#instrumentation/lifecycle.js";import{instrumentChannelDelivery}from"#instrumentation/channel-delivery.js";import{buildTelemetryRuntimeContext,snapshotInstrumentationRuntimeContext}from"#instrumentation/runtime-context.js";import{ensureOtelIntegration,getRegisteredTelemetryIntegrations}from"#instrumentation/ai-sdk-telemetry.js";import{createAiSdkHookBridge}from"#instrumentation/ai-sdk-hook-bridge.js";import{createInstrumentationHandleEvent,publishInputResolutions}from"#instrumentation/native-events.js";import{prepareTurnTraceContext}from"#instrumentation/prepare-trace-context.js";import"#tracing/agent-span-id-generator.js";import{withErrorContent}from"#tracing/error-content-context.js";import{readInstrumentationSessionContext}from"#instrumentation/session-context.js";import{readInstrumentationDecision}from"#shared/instrumentation-decision.js";import{getInstrumentationRuntime,registerInstrumentationRuntime}from"#instrumentation/runtime-global.js";import{initializeSessionInstrumentation}from"#instrumentation/session-init.js";const TURN_TRACE_STATE_KEY=`eve.harness.turnTrace`;function bindInstrumentationRuntime(e,t,n){let r={...n,traceSessionId:resolveTraceRootSessionId(t,n.sessionId)};if(readConversationId(t.get(ConversationIdKey))===void 0&&t.set(ConversationIdKey,t.get(ParentSessionKey)?.rootSessionId??r.rootSessionId),e===void 0)return;let i=e.hooks,a=r.traceSessionId,readSessionContext=()=>{let e=readInstrumentationSessionContext(contextStorage.getStore()??t);return{...e,rootSessionId:e.parent?.rootSessionId??r.rootSessionId,traceSessionId:a}},bindHooks=e=>i.forTrace?.({agentName:r.agentName,...e.conversation})??i,captureExecutionRuntime=()=>{let t=e.otelSettings,n=e.ownsAgentSpans===!0;return t!==void 0&&!n&&ensureOtelIntegration(),{ownsAgentSpans:n,otelSettings:t,runtimeContextResolvers:e.runtimeContextResolvers,tracer:t===void 0?void 0:trace.getTracer(`eve`)}},preparePreamble=(t,n)=>prepareTurnTraceContext({...t,instrumentation:e,principals:n.principals,session:{agentName:r.agentName,channelAudience:n.conversation.audience,channelKind:n.conversation.channel.kind,channelType:n.instrumentation?.channelType,parentLineage:n.parentLineage,parentTraceContext:n.parentTraceContext,rootSessionId:n.rootSessionId,traceSessionId:n.traceSessionId,scheduleId:n.scheduleId,sessionId:r.sessionId,title:n.title,traceSeed:n.traceSeed}}),o=e.memoryOperations===!0?createMemoryInstrumentation({resolveContext:()=>{let e=readSessionContext();return{hooks:bindHooks(e),rootSessionId:e.rootSessionId,traceSessionId:e.traceSessionId}},runInContext:e.runInContext,sessionId:r.sessionId}):void 0;return{async instrumentTaskToolCall(t){let n=findInstrumentationActionScopeForCall(r.sessionId,t.callId);if(n===void 0)return;let i=bindHooks(readSessionContext()),a=n.scope,o=toolCallIdempotencyKey(a,t.callId,0);await e.runInContext({type:`tool.call`,callId:t.callId,idempotencyKey:o,scope:a,toolName:t.toolName,startedAtMs:t.startedAtMs,frameworkTool:!0,input:i.capturesInputs??i.capturesContent?t.input:void 0,completedAtMs:t.completedAtMs,failed:t.failed},()=>Promise.resolve())},createHandleEvent:e=>{let t=readSessionContext();return createInstrumentationHandleEvent({agentName:r.agentName,channelKind:t.conversation.channel.kind,handleEvent:e.handleEvent,hooks:bindHooks(t),rootSessionId:t.rootSessionId,traceSessionId:t.traceSessionId,parentLineage:t.parentLineage,parentTraceContext:t.parentTraceContext,scheduleId:t.scheduleId,sessionId:r.sessionId,title:t.title,turnId:e.turnId})},flush:e.forceFlush,instrumentChannelDelivery:e=>{let t=readSessionContext();return`delivery`in e?instrumentChannelDelivery({...e,hooks:i,policyAgentName:r.agentName,traceSessionId:t.traceSessionId}):instrumentChannelDelivery({...e,hooks:i})},memory:o,prepareExecution:()=>{let t=captureExecutionRuntime();return{installAiSdkWarningLogger:ensureAiSdkWarningLogger,runStep:async(n,i)=>{let a=readSessionContext(),o=bindHooks(a),s=t.otelSettings,c=resolveStepInstrumentationDecision(s,r.agentName,a.conversation,a.traceSeed,readSessionTraceDecision(a.context,r.sessionId)),l=t.tracer,u={"eve.environment":n.environment,"eve.session.id":n.session.sessionId,"eve.version":n.eveVersion},d=s?.functionId??r.agentName;d&&(u[`ai.telemetry.functionId`]=d);let f=l!==void 0&&!t.ownsAgentSpans&&c?.action!==`drop`&&n.hasInput?l.startSpan(`ai.eve.turn`,{attributes:u}):void 0,p=f?.spanContext(),m=p===void 0?n.session:{...n.session,state:{...n.session.state,[TURN_TRACE_STATE_KEY]:{spanId:p.spanId,traceFlags:p.traceFlags,traceId:p.traceId}}},h=f===void 0?void 0:trace.setSpan(context.active(),f);if(h===void 0&&l!==void 0){let e=n.session.state?.[TURN_TRACE_STATE_KEY];e!==void 0&&(h=trace.setSpan(context.active(),trace.wrapSpanContext({...e,isRemote:!0})))}let g=readSessionContext(),_=snapshotInstrumentationRuntimeContext(g.context),v=g.conversation,y=v.audience,b=shouldCaptureInstrumentationContent(v),x=c===void 0?c:applyLiveDeliveryAudienceCeiling(c,y,g.forwardedTracePolicy,v.environment),S=x===void 0?b:x.action===`record`&&x.recordInputs,C=c?.action===`drop`,w={recordInputs:!C&&(x?.action===`record`?x.recordInputs:b)&&(s?.recordInputs??!1),recordOutputs:!C&&(x?.action===`record`?x.recordOutputs:b)&&(s?.recordOutputs??!1)},telemetry=e=>{if(s===void 0&&e.bridgeIntegration===void 0)return;let n={};for(let t of Object.keys(e.runtimeContext??{}))n[t]=!0;let i=s!==void 0&&!(w.recordInputs&&w.recordOutputs),integrations=()=>getRegisteredTelemetryIntegrations({...t.ownsAgentSpans?{excludeEveOtelIntegration:!0}:void 0,sanitizeEveOtelErrors:i});return{functionId:s?.functionId??r.agentName,includeRuntimeContext:n,integrations:e.bridgeIntegration===void 0?i?[...integrations()]:void 0:[e.bridgeIntegration,...integrations()],isEnabled:!0,recordInputs:w.recordInputs,recordOutputs:w.recordOutputs}},run=()=>i({createHandleEvent:e=>createInstrumentationHandleEvent({...e,agentName:r.agentName,channelAudience:y,channelKind:v.channel.kind,hooks:o,parentLineage:g.parentLineage,parentTraceContext:g.parentTraceContext,rootSessionId:g.rootSessionId,traceSessionId:g.traceSessionId,scheduleId:g.scheduleId,sessionId:r.sessionId,title:g.title}),prepareAttempt:t=>{let n={attemptId:`${r.sessionId}:${t.turnId}:${t.stepIndex}:${t.attemptIndex}`,attemptIndex:t.attemptIndex,channelAudience:y,functionId:s?.functionId??r.agentName,rootSessionId:g.rootSessionId,traceSessionId:g.traceSessionId,sessionId:r.sessionId,stepIndex:t.stepIndex,turnId:t.turnId},i=createAiSdkHookBridge(n,o,e.runInContext,t.runtimeContext,t.isFrameworkTool);return{complete:()=>o.publish({idempotencyKey:attemptIdempotencyKey(n),scope:n,type:`step.attempt.completed`}),fail:e=>o.publish({error:e,idempotencyKey:attemptIdempotencyKey(n),scope:n,type:`step.attempt.failed`}),scope:n,telemetry:telemetry({bridgeIntegration:i,runtimeContext:t.runtimeContext})}},preparePreamble:e=>preparePreamble(e,g),publishInputResolutions:e=>publishInputResolutions({...e,hooks:o}),recordError:e=>{f!==void 0&&recordErrorOnSpan(f,e)},resolveRuntimeContext:e=>buildTelemetryRuntimeContext({...e,capturesContent:S,context:_,providerResolvers:t.runtimeContextResolvers}),session:m,setTurnId:e=>f?.setAttribute(`eve.turn.id`,e),telemetry:()=>telemetry({}),traceContext:p===void 0||!isValidSpanContext(p)?void 0:{spanId:p.spanId,traceFlags:p.traceFlags,traceId:p.traceId}});try{return await context.with(withErrorContent(h??context.active(),w.recordOutputs),run)}finally{f?.end(),f=void 0}}}},preparePreamble:e=>preparePreamble(e,readSessionContext())}}function bindSessionInstrumentation(e){let t={agentName:e.agentName,rootSessionId:e.rootSessionId,traceSessionId:resolveTraceRootSessionId(e.ctx,e.sessionId),sessionId:e.sessionId};return bindInstrumentationRuntime(getInstrumentationRuntime(),e.ctx,t)}function resolveStepInstrumentationDecision(e,t,n,r,i){if(e!==void 0)return r?.decision===void 0?i===void 0?r===void 0?resolveTracePolicy(e.tracePolicy,{agentName:t,...n}):resolveTracePolicyDecision(isSampledTrace(r),n):i:readInstrumentationDecision(r.decision)}function isValidSpanContext(e){return/^[0-9a-f]{32}$/u.test(e.traceId)&&e.traceId!==`00000000000000000000000000000000`&&/^[0-9a-f]{16}$/u.test(e.spanId)&&e.spanId!==`0000000000000000`}export{bindInstrumentationRuntime,bindSessionInstrumentation,getInstrumentationRuntime,initializeSessionInstrumentation,registerInstrumentationRuntime};
1
+ import{ensureAiSdkWarningLogger}from"#instrumentation/ai-sdk-warnings.js";import{recordErrorOnSpan}from"#internal/logging.js";import{applyLiveDeliveryAudienceCeiling}from"#shared/forwarded-trace-policy.js";import{contextStorage}from"#context/container.js";import{ConversationIdKey,ParentSessionKey}from"#context/keys.js";import{createMemoryInstrumentation}from"#instrumentation/memory.js";import{readConversationId}from"#shared/conversation-identity.js";import{findInstrumentationActionScopeForCall}from"#instrumentation/state.js";import{readSessionTraceDecision}from"#tracing/eve/agent-trace-context-store.js";import{resolveTraceRootSessionId}from"#shared/trace-root.js";import{shouldCaptureInstrumentationContent}from"#shared/instrumentation-content.js";import{isSampledTrace,resolveTracePolicy,resolveTracePolicyDecision}from"#shared/trace-policy.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{attemptIdempotencyKey,toolCallIdempotencyKey}from"#instrumentation/lifecycle.js";import{instrumentChannelDelivery}from"#instrumentation/channel-delivery.js";import{withCapture}from"#compiled/@eve/tracing/otel.js";import{buildTelemetryRuntimeContext,snapshotInstrumentationRuntimeContext}from"#instrumentation/runtime-context.js";import{ensureOtelIntegration,getRegisteredTelemetryIntegrations}from"#instrumentation/ai-sdk-telemetry.js";import{createAiSdkHookBridge}from"#instrumentation/ai-sdk-hook-bridge.js";import{createInstrumentationHandleEvent,publishInputResolutions}from"#instrumentation/native-events.js";import{prepareTurnTraceContext}from"#instrumentation/prepare-trace-context.js";import"#compiled/@eve/tracing/index.js";import{readInstrumentationSessionContext}from"#instrumentation/session-context.js";import{readInstrumentationDecision}from"#shared/instrumentation-decision.js";import{getInstrumentationRuntime,registerInstrumentationRuntime}from"#instrumentation/runtime-global.js";import{initializeSessionInstrumentation}from"#instrumentation/session-init.js";const TURN_TRACE_STATE_KEY=`eve.harness.turnTrace`;function bindInstrumentationRuntime(e,t,n){let r={...n,traceSessionId:resolveTraceRootSessionId(t,n.sessionId)};if(readConversationId(t.get(ConversationIdKey))===void 0&&t.set(ConversationIdKey,t.get(ParentSessionKey)?.rootSessionId??r.rootSessionId),e===void 0)return;let i=e.hooks,a=r.traceSessionId,readSessionContext=()=>{let e=readInstrumentationSessionContext(contextStorage.getStore()??t);return{...e,rootSessionId:e.parent?.rootSessionId??r.rootSessionId,traceSessionId:a}},bindHooks=e=>i.forTrace?.({agentName:r.agentName,...e.conversation})??i,captureExecutionRuntime=()=>{let t=e.otelSettings,n=e.ownsAgentSpans===!0;return t!==void 0&&!n&&ensureOtelIntegration(),{ownsAgentSpans:n,otelSettings:t,runtimeContextResolvers:e.runtimeContextResolvers,tracer:t===void 0?void 0:trace.getTracer(`eve`)}},preparePreamble=(t,n)=>prepareTurnTraceContext({...t,instrumentation:e,principals:n.principals,session:{agentName:r.agentName,channelAudience:n.conversation.audience,channelKind:n.conversation.channel.kind,channelType:n.instrumentation?.channelType,parentLineage:n.parentLineage,parentTraceContext:n.parentTraceContext,rootSessionId:n.rootSessionId,traceSessionId:n.traceSessionId,scheduleId:n.scheduleId,sessionId:r.sessionId,title:n.title,traceSeed:n.traceSeed}}),o=e.memoryOperations===!0?createMemoryInstrumentation({resolveContext:()=>{let e=readSessionContext();return{hooks:bindHooks(e),rootSessionId:e.rootSessionId,traceSessionId:e.traceSessionId}},runInContext:e.runInContext,sessionId:r.sessionId}):void 0;return{async instrumentTaskToolCall(t){let n=findInstrumentationActionScopeForCall(r.sessionId,t.callId);if(n===void 0)return;let i=bindHooks(readSessionContext()),a=n.scope,o=toolCallIdempotencyKey(a,t.callId,0);await e.runInContext({type:`tool.call`,callId:t.callId,idempotencyKey:o,scope:a,toolName:t.toolName,startedAtMs:t.startedAtMs,frameworkTool:!0,input:i.capturesInputs??i.capturesContent?t.input:void 0,completedAtMs:t.completedAtMs,failed:t.failed},()=>Promise.resolve())},createHandleEvent:e=>{let t=readSessionContext();return createInstrumentationHandleEvent({agentName:r.agentName,channelKind:t.conversation.channel.kind,handleEvent:e.handleEvent,hooks:bindHooks(t),rootSessionId:t.rootSessionId,traceSessionId:t.traceSessionId,parentLineage:t.parentLineage,parentTraceContext:t.parentTraceContext,scheduleId:t.scheduleId,sessionId:r.sessionId,title:t.title,turnId:e.turnId})},flush:e.forceFlush,instrumentChannelDelivery:e=>{let t=readSessionContext();return`delivery`in e?instrumentChannelDelivery({...e,hooks:i,policyAgentName:r.agentName,traceSessionId:t.traceSessionId}):instrumentChannelDelivery({...e,hooks:i})},memory:o,prepareExecution:()=>{let t=captureExecutionRuntime();return{installAiSdkWarningLogger:ensureAiSdkWarningLogger,runStep:async(n,i)=>{let a=readSessionContext(),o=bindHooks(a),s=t.otelSettings,c=resolveStepInstrumentationDecision(s,r.agentName,a.conversation,a.traceSeed,readSessionTraceDecision(a.context,r.sessionId)),l=t.tracer,u={"eve.environment":n.environment,"eve.session.id":n.session.sessionId,"eve.version":n.eveVersion},d=s?.functionId??r.agentName;d&&(u[`ai.telemetry.functionId`]=d);let f=l!==void 0&&!t.ownsAgentSpans&&c?.action!==`drop`&&n.hasInput?l.startSpan(`ai.eve.turn`,{attributes:u}):void 0,p=f?.spanContext(),m=p===void 0?n.session:{...n.session,state:{...n.session.state,[TURN_TRACE_STATE_KEY]:{spanId:p.spanId,traceFlags:p.traceFlags,traceId:p.traceId}}},h=f===void 0?void 0:trace.setSpan(context.active(),f);if(h===void 0&&l!==void 0){let e=n.session.state?.[TURN_TRACE_STATE_KEY];e!==void 0&&(h=trace.setSpan(context.active(),trace.wrapSpanContext({...e,isRemote:!0})))}let g=readSessionContext(),_=snapshotInstrumentationRuntimeContext(g.context),v=g.conversation,y=v.audience,b=shouldCaptureInstrumentationContent(v),x=c===void 0?c:applyLiveDeliveryAudienceCeiling(c,y,g.forwardedTracePolicy,v.environment),S=x===void 0?b:x.action===`record`&&x.recordInputs,C=c?.action===`drop`,w={recordInputs:!C&&(x?.action===`record`?x.recordInputs:b)&&(s?.recordInputs??!1),recordOutputs:!C&&(x?.action===`record`?x.recordOutputs:b)&&(s?.recordOutputs??!1)},telemetry=e=>{if(s===void 0&&e.bridgeIntegration===void 0)return;let n={};for(let t of Object.keys(e.runtimeContext??{}))n[t]=!0;let i=s!==void 0&&!(w.recordInputs&&w.recordOutputs),integrations=()=>getRegisteredTelemetryIntegrations({...t.ownsAgentSpans?{excludeEveOtelIntegration:!0}:void 0,sanitizeEveOtelErrors:i});return{functionId:s?.functionId??r.agentName,includeRuntimeContext:n,integrations:e.bridgeIntegration===void 0?i?[...integrations()]:void 0:[e.bridgeIntegration,...integrations()],isEnabled:!0,recordInputs:w.recordInputs,recordOutputs:w.recordOutputs}},run=()=>i({createHandleEvent:e=>createInstrumentationHandleEvent({...e,agentName:r.agentName,channelAudience:y,channelKind:v.channel.kind,hooks:o,parentLineage:g.parentLineage,parentTraceContext:g.parentTraceContext,rootSessionId:g.rootSessionId,traceSessionId:g.traceSessionId,scheduleId:g.scheduleId,sessionId:r.sessionId,title:g.title}),prepareAttempt:t=>{let n={attemptId:`${r.sessionId}:${t.turnId}:${t.stepIndex}:${t.attemptIndex}`,attemptIndex:t.attemptIndex,channelAudience:y,functionId:s?.functionId??r.agentName,rootSessionId:g.rootSessionId,traceSessionId:g.traceSessionId,sessionId:r.sessionId,stepIndex:t.stepIndex,turnId:t.turnId},i=createAiSdkHookBridge(n,o,e.runInContext,t.runtimeContext,t.isFrameworkTool);return{complete:()=>o.publish({idempotencyKey:attemptIdempotencyKey(n),scope:n,type:`step.attempt.completed`}),fail:e=>o.publish({error:e,idempotencyKey:attemptIdempotencyKey(n),scope:n,type:`step.attempt.failed`}),scope:n,telemetry:telemetry({bridgeIntegration:i,runtimeContext:t.runtimeContext})}},preparePreamble:e=>preparePreamble(e,g),publishInputResolutions:e=>publishInputResolutions({...e,hooks:o}),recordError:e=>{f!==void 0&&recordErrorOnSpan(f,e)},resolveRuntimeContext:e=>buildTelemetryRuntimeContext({...e,capturesContent:S,context:_,providerResolvers:t.runtimeContextResolvers}),session:m,setTurnId:e=>f?.setAttribute(`eve.turn.id`,e),telemetry:()=>telemetry({}),traceContext:p===void 0||!isValidSpanContext(p)?void 0:{spanId:p.spanId,traceFlags:p.traceFlags,traceId:p.traceId}});try{return await context.with(withCapture(h??context.active(),{emit:!0,recordInputs:w.recordInputs,recordOutputs:w.recordOutputs}),run)}finally{f?.end(),f=void 0}}}},preparePreamble:e=>preparePreamble(e,readSessionContext())}}function bindSessionInstrumentation(e){let t={agentName:e.agentName,rootSessionId:e.rootSessionId,traceSessionId:resolveTraceRootSessionId(e.ctx,e.sessionId),sessionId:e.sessionId};return bindInstrumentationRuntime(getInstrumentationRuntime(),e.ctx,t)}function resolveStepInstrumentationDecision(e,t,n,r,i){if(e!==void 0)return r?.decision===void 0?i===void 0?r===void 0?resolveTracePolicy(e.tracePolicy,{agentName:t,...n}):resolveTracePolicyDecision(isSampledTrace(r),n):i:readInstrumentationDecision(r.decision)}function isValidSpanContext(e){return/^[0-9a-f]{32}$/u.test(e.traceId)&&e.traceId!==`00000000000000000000000000000000`&&/^[0-9a-f]{16}$/u.test(e.spanId)&&e.spanId!==`0000000000000000`}export{bindInstrumentationRuntime,bindSessionInstrumentation,getInstrumentationRuntime,initializeSessionInstrumentation,registerInstrumentationRuntime};
@@ -1 +1 @@
1
- import{createLogger}from"#internal/logging.js";import{ConversationContextKey,resolveConversationContext}from"#shared/conversation-context.js";import{formatTraceContentCeiling,readForwardedTraceAssertion,traceContentCeilingToDecision}from"#shared/forwarded-trace-policy.js";import{AuthKey,ChannelInstrumentationKey,OtelTraceEnabledKey,ParentTraceContextKey,SessionTraceSeedKey}from"#context/keys.js";import{resolveInstrumentationEnvironment}from"#internal/application/dev-environment.js";import{isSampledTrace,resolveTracePolicy,resolveTracePolicyDecision}from"#tracing/sampled-trace.js";import{AgentSpanIdGenerator}from"#tracing/agent-span-id-generator.js";import{intersectInstrumentationDecisions,readInstrumentationDecision}from"#shared/instrumentation-decision.js";import{getInstrumentationRuntime}from"#instrumentation/runtime-global.js";const log=createLogger(`instrumentation.session-init`);function initializeSessionInstrumentation(e){let t=getInstrumentationRuntime(),n=e.ctx.get(ParentTraceContextKey),r=readForwardedTraceAssertion(n?.forwardedTracePolicy),i=e.ctx.get(ConversationContextKey),a=resolveConversationContext(i,{channelKind:e.ctx.get(ChannelInstrumentationKey)?.kind,environment:resolveInstrumentationEnvironment(),forwardedTracePolicy:r,principalType:e.ctx.get(AuthKey)?.principalType},{forwardedOverridesStored:!0}),o=allocateSessionTraceSeed({agentName:e.agentName,conversation:a,channelType:e.ctx.get(ChannelInstrumentationKey)?.channelType,forwardedTracePolicy:r,parentTraceContext:n,runtime:t});if(o!==void 0&&(e.ctx.set(SessionTraceSeedKey,o),r!==void 0&&log.info(`resolved forwarded trace policy`,{ceilingEffective:o.decision?.action===`record`?formatTraceContentCeiling(o.decision):`drop`,ceilingIn:formatTraceContentCeiling(r.ceiling),originAudience:r.originAudience}),r!==void 0&&n!==void 0)){let t={...n,decision:o.decision,traceFlags:o.traceFlags};delete t.forwardedTracePolicy,e.ctx.set(ParentTraceContextKey,t)}e.ctx.set(OtelTraceEnabledKey,t?.prepareSessionTrace!==void 0)}function allocateSessionTraceSeed(e){let localDecision=()=>resolveTracePolicy(e.runtime?.otelSettings?.tracePolicy,{agentName:e.agentName,...e.conversation});if(e.parentTraceContext!==void 0){let t=e.forwardedTracePolicy?traceContentCeilingToDecision(e.forwardedTracePolicy.ceiling):void 0,n=readInstrumentationDecision(e.parentTraceContext.decision),r=isSampledTrace(e.parentTraceContext)?t?n===void 0?t:intersectInstrumentationDecisions(t,n):n??resolveTracePolicyDecision(isSampledTrace(e.parentTraceContext),e.conversation):{action:`drop`},i=`isRemote`in e.parentTraceContext&&e.parentTraceContext.isRemote===!0,a=e.forwardedTracePolicy||i?intersectInstrumentationDecisions(r,localDecision()):r,o=e.runtime?.idGenerator??new AgentSpanIdGenerator;return{decision:a,...e.forwardedTracePolicy===void 0?void 0:{forwardedTracePolicy:e.forwardedTracePolicy},spanId:o.allocateSpanId(),traceFlags:a.action===`drop`?0:e.parentTraceContext.traceFlags,traceId:i?o.generateTraceId():e.parentTraceContext.traceId}}if(e.runtime?.prepareSessionTrace===void 0||e.runtime.idGenerator===void 0)return;let t=localDecision(),n=e.runtime.idGenerator.generateTraceId(),r=t.action===`record`;return{decision:t,spanId:e.runtime.idGenerator.allocateSpanId(),traceFlags:+!!r,traceId:n}}export{initializeSessionInstrumentation};
1
+ import{createLogger}from"#internal/logging.js";import{ConversationContextKey,resolveConversationContext}from"#shared/conversation-context.js";import{formatTraceContentCeiling,readForwardedTraceAssertion,traceContentCeilingToDecision}from"#shared/forwarded-trace-policy.js";import{AuthKey,ChannelInstrumentationKey,OtelTraceEnabledKey,ParentTraceContextKey,SessionTraceSeedKey}from"#context/keys.js";import{resolveInstrumentationEnvironment}from"#internal/application/dev-environment.js";import{isSampledTrace,resolveTracePolicy,resolveTracePolicyDecision}from"#shared/trace-policy.js";import{AgentSpanIdGenerator}from"#compiled/@eve/tracing/index.js";import{intersectInstrumentationDecisions,readInstrumentationDecision}from"#shared/instrumentation-decision.js";import{getInstrumentationRuntime}from"#instrumentation/runtime-global.js";const log=createLogger(`instrumentation.session-init`);function initializeSessionInstrumentation(e){let t=getInstrumentationRuntime(),n=e.ctx.get(ParentTraceContextKey),r=readForwardedTraceAssertion(n?.forwardedTracePolicy),i=e.ctx.get(ConversationContextKey),a=resolveConversationContext(i,{channelKind:e.ctx.get(ChannelInstrumentationKey)?.kind,environment:resolveInstrumentationEnvironment(),forwardedTracePolicy:r,principalType:e.ctx.get(AuthKey)?.principalType},{forwardedOverridesStored:!0}),o=allocateSessionTraceSeed({agentName:e.agentName,conversation:a,channelType:e.ctx.get(ChannelInstrumentationKey)?.channelType,forwardedTracePolicy:r,parentTraceContext:n,runtime:t});if(o!==void 0&&(e.ctx.set(SessionTraceSeedKey,o),r!==void 0&&log.info(`resolved forwarded trace policy`,{ceilingEffective:o.decision?.action===`record`?formatTraceContentCeiling(o.decision):`drop`,ceilingIn:formatTraceContentCeiling(r.ceiling),originAudience:r.originAudience}),r!==void 0&&n!==void 0)){let t={...n,decision:o.decision,traceFlags:o.traceFlags};delete t.forwardedTracePolicy,e.ctx.set(ParentTraceContextKey,t)}e.ctx.set(OtelTraceEnabledKey,t?.prepareSessionTrace!==void 0)}function allocateSessionTraceSeed(e){let localDecision=()=>resolveTracePolicy(e.runtime?.otelSettings?.tracePolicy,{agentName:e.agentName,...e.conversation});if(e.parentTraceContext!==void 0){let t=e.forwardedTracePolicy?traceContentCeilingToDecision(e.forwardedTracePolicy.ceiling):void 0,n=readInstrumentationDecision(e.parentTraceContext.decision),r=isSampledTrace(e.parentTraceContext)?t?n===void 0?t:intersectInstrumentationDecisions(t,n):n??resolveTracePolicyDecision(isSampledTrace(e.parentTraceContext),e.conversation):{action:`drop`},i=`isRemote`in e.parentTraceContext&&e.parentTraceContext.isRemote===!0,a=e.forwardedTracePolicy||i?intersectInstrumentationDecisions(r,localDecision()):r,o=e.runtime?.idGenerator??new AgentSpanIdGenerator;return{decision:a,...e.forwardedTracePolicy===void 0?void 0:{forwardedTracePolicy:e.forwardedTracePolicy},spanId:o.allocateSpanId(),traceFlags:a.action===`drop`?0:e.parentTraceContext.traceFlags,traceId:i?o.generateTraceId():e.parentTraceContext.traceId}}if(e.runtime?.prepareSessionTrace===void 0||e.runtime.idGenerator===void 0)return;let t=localDecision(),n=e.runtime.idGenerator.generateTraceId(),r=t.action===`record`;return{decision:t,spanId:e.runtime.idGenerator.allocateSpanId(),traceFlags:+!!r,traceId:n}}export{initializeSessionInstrumentation};
@@ -1 +1 @@
1
- const STAMPED_PACKAGE_VERSION=`0.78.0`;function readStampedPackageVersion(){return STAMPED_PACKAGE_VERSION.startsWith(`__`)?void 0:STAMPED_PACKAGE_VERSION}export{readStampedPackageVersion};
1
+ const STAMPED_PACKAGE_VERSION=`0.79.0`;function readStampedPackageVersion(){return STAMPED_PACKAGE_VERSION.startsWith(`__`)?void 0:STAMPED_PACKAGE_VERSION}export{readStampedPackageVersion};
@@ -1,3 +1,5 @@
1
- import type { Approval } from "#approval/definition.js";
1
+ import type { Approval, ToolApproval } from "#approval/definition.js";
2
2
  /** Validates the function shorthand or explicit request/response approval shape. */
3
3
  export declare function normalizeApproval(value: unknown, message: string): Approval;
4
+ /** Validates a tool approval, including its optional presentation prompt. */
5
+ export declare function normalizeToolApproval(value: unknown, message: string): ToolApproval;
@@ -1 +1 @@
1
- import{expectFunction,expectObjectRecord,expectOnlyKnownKeys}from"#internal/authored-module.js";function normalizeApproval(e,t){if(typeof e==`function`)return e;let n=expectObjectRecord(e,t);expectOnlyKnownKeys(n,[`request`,`response`],t);let r=expectFunction(n.request,t);return n.response===void 0?{request:r}:{request:r,response:expectFunction(n.response,t)}}export{normalizeApproval};
1
+ import{expectFunction,expectObjectRecord,expectOnlyKnownKeys}from"#internal/authored-module.js";function normalizeApproval(e,t){if(typeof e==`function`)return e;let n=expectObjectRecord(e,t);return expectOnlyKnownKeys(n,[`request`,`response`],t),{request:expectFunction(n.request,t),response:n.response===void 0?void 0:expectFunction(n.response,t)}}function normalizeToolApproval(e,t){if(typeof e==`function`)return e;let n=expectObjectRecord(e,t);return expectOnlyKnownKeys(n,[`request`,`prompt`,`response`],t),{request:expectFunction(n.request,t),prompt:n.prompt===void 0?void 0:expectFunction(n.prompt,t),response:n.response===void 0?void 0:expectFunction(n.response,t)}}export{normalizeApproval,normalizeToolApproval};
@@ -1 +1 @@
1
- import{isObject}from"#shared/guards.js";import{expectBoolean,expectFunction,expectObjectRecord,expectOnlyKnownKeys,expectString}from"#internal/authored-module.js";import{UNSPECIFIED_INPUT_SCHEMA,serializeInputSchema,serializeModelInputSchema,serializeOutputSchema,toInputSchema}from"#tools/schema.js";import{WEB_SEARCH_FALLBACK_PROVIDERS,WEB_SEARCH_PROVIDERS}from"#shared/web-search.js";import{readWorkflowFunctionId}from"#internal/workflow/reference.js";import{assertResolverOnlyDynamicSentinel,isDynamicSentinel}from"#dynamic/definition.js";import{isWorkflowToolDefinition,readWorkflowToolEntryPoints}from"#tools/workflow-definition.js";import{shouldRebindDynamicCallbacks}from"#internal/dynamic-tool-rebind.js";import{isDisabledToolSentinel}from"#tools/definition.js";import{TASK_ID_INPUT,withTaskIdSchema}from"#execution/tasks/task-id-input.js";import{normalizeApproval}from"#internal/authored-definition/approval.js";import{isWebSearchToolDefinition}from"#tools/provided/web-search.js";import{readToolBehavior}from"#tools/behavior.js";import{readWorkflowProgramOptions}from"#tools/workflow-program-input.js";function normalizeToolDefinition(e,t){if(isDynamicSentinel(e))return assertResolverOnlyDynamicSentinel(e,t),{kind:`dynamic-tool`,eventNames:Object.keys(e.events),rebindMissingCallbacks:shouldRebindDynamicCallbacks(e)};if(isDisabledToolSentinel(e))return{kind:`disabled`};if(isWebSearchToolDefinition(e)){let n=expectObjectRecord(e,t);if(n.deferred!==void 0)throw Error(`${t} Provider tools can't be deferred: the provider has to see their definition. Remove "deferred".`);expectOnlyKnownKeys(n,[`fallback`,`kind`,`provider`],t);let r=expectOneOf(n.provider,WEB_SEARCH_PROVIDERS,`provider`,t);if(n.fallback===void 0)return{kind:`web-search-tool`,selection:{provider:r}};if(r!==`native`)throw Error(`${t} "fallback" applies only to provider "native"; provider "${r}" serves every AI Gateway model.`);return{kind:`web-search-tool`,selection:{fallback:expectOneOf(n.fallback,WEB_SEARCH_FALLBACK_PROVIDERS,`fallback`,t),provider:r}}}let n=expectObjectRecord(e,t),r=isWorkflowToolDefinition(e)?readCompiledWorkflowEntry(n,t):void 0;if(r===void 0&&readWorkflowFunctionId(n.execute)!==void 0)throw Error(`${t} Workflow executors require defineWorkflowTool() from "eve/tools". Replace defineTool() or the bare tool object with defineWorkflowTool().`);if(r!==void 0&&n.endsTurn!==void 0)throw Error(`${t} "endsTurn" is not supported on defineWorkflowTool(). Workflow tools resume the turn when they finish; use defineTool() for a tool that ends the turn.`);expectOnlyKnownKeys(n,[`availableInSubagents`,`deferred`,`endsTurn`,`label`,`auth`,`description`,`execute`,`inputSchema`,`approval`,`approvalKey`,`outputSchema`,`toModelOutput`,...r===void 0?[]:[r.entryPoint]],t);let i=n.inputSchema===void 0?null:serializeInputSchema(n.inputSchema);r?.entryPoint===`serve`&&assertNoOwnTaskIdInput(i,t);let a=serializeOutputSchema(n.outputSchema),o=readToolBehavior(e),s=readWorkflowProgramOptions(e),c=r!==void 0||n.execute!==void 0;!c&&o?.handling?.kind!==`dispatch`&&expectFunction(n.execute,t);let l={availableInSubagents:n.availableInSubagents===void 0?void 0:expectBoolean(n.availableInSubagents,t),deferred:n.deferred===void 0?void 0:expectBoolean(n.deferred,t),description:expectString(n.description,t),endsTurn:n.endsTurn===void 0||typeof n.endsTurn==`boolean`?n.endsTurn:expectFunction(n.endsTurn,t),hasApproval:n.approval!==void 0,hasExecute:c,hasModelOutputProjection:n.toModelOutput!==void 0,inputSchema:i,modelInputSchema:modelInputSchemaOf(n.inputSchema,r?.entryPoint===`serve`||o?.handling?.kind===`dispatch`)};if(o!==void 0&&(l.behavior=o),s!==void 0&&(l.workflowProgram=s),r===void 0?c&&(l.execute=expectFunction(n.execute,t)):l.workflow=r,a!==void 0&&(l.outputSchema=a),n.label!==void 0){let e=expectObjectRecord(n.label,t);expectOnlyKnownKeys(e,[`start`,`complete`,`delta`],t),expectFunction(e.start,t),e.complete!==void 0&&expectFunction(e.complete,t),e.delta!==void 0&&expectFunction(e.delta,t)}if(n.approval!==void 0&&normalizeApproval(n.approval,t),n.approvalKey!==void 0&&expectFunction(n.approvalKey,t),n.toModelOutput!==void 0&&expectFunction(n.toModelOutput,t),n.auth!==void 0){let e=expectObjectRecord(n.auth,t);expectFunction(e.getToken,t)}return{kind:`tool`,definition:l}}function readCompiledWorkflowEntry(e,t){let[n]=readWorkflowToolEntryPoints(e),r=n===void 0?void 0:readWorkflowFunctionId(e[n]);if(n===void 0||r===void 0)throw Error(`${t} defineWorkflowTool() requires a compiled workflow executor. Start execute, task, or serve with "use workflow" and export defineWorkflowTool() as the default export of a static tool module.`);return{entryPoint:n,workflowId:r}}function modelInputSchemaOf(e,t){let n=toInputSchema(e)??UNSPECIFIED_INPUT_SCHEMA;return serializeModelInputSchema(t?withTaskIdSchema(n):n)}function assertNoOwnTaskIdInput(e,t){let n=e?.properties;if(isObject(n)&&TASK_ID_INPUT in n)throw Error(`${t} inputSchema declares "${TASK_ID_INPUT}", which eve adds to a serve tool's model input to send a call to a running task. Rename the field.`)}function expectOneOf(e,t,n,r){let i=expectString(e,r);if(!t.includes(i))throw Error(`${r} Expected "${n}" to be one of: ${t.join(`, `)}.`);return i}export{normalizeToolDefinition};
1
+ import{isObject}from"#shared/guards.js";import{expectBoolean,expectFunction,expectObjectRecord,expectOnlyKnownKeys,expectString}from"#internal/authored-module.js";import{UNSPECIFIED_INPUT_SCHEMA,serializeInputSchema,serializeModelInputSchema,serializeOutputSchema,toInputSchema}from"#tools/schema.js";import{WEB_SEARCH_FALLBACK_PROVIDERS,WEB_SEARCH_PROVIDERS}from"#shared/web-search.js";import{readWorkflowFunctionId}from"#internal/workflow/reference.js";import{assertResolverOnlyDynamicSentinel,isDynamicSentinel}from"#dynamic/definition.js";import{isWorkflowToolDefinition,readWorkflowToolEntryPoints}from"#tools/workflow-definition.js";import{shouldRebindDynamicCallbacks}from"#internal/dynamic-tool-rebind.js";import{isDisabledToolSentinel}from"#tools/definition.js";import{TASK_ID_INPUT,withTaskIdSchema}from"#execution/tasks/task-id-input.js";import{normalizeToolApproval}from"#internal/authored-definition/approval.js";import{isWebSearchToolDefinition}from"#tools/provided/web-search.js";import{readToolBehavior}from"#tools/behavior.js";import{readWorkflowProgramOptions}from"#tools/workflow-program-input.js";function normalizeToolDefinition(e,t){if(isDynamicSentinel(e))return assertResolverOnlyDynamicSentinel(e,t),{kind:`dynamic-tool`,eventNames:Object.keys(e.events),rebindMissingCallbacks:shouldRebindDynamicCallbacks(e)};if(isDisabledToolSentinel(e))return{kind:`disabled`};if(isWebSearchToolDefinition(e)){let n=expectObjectRecord(e,t);if(n.deferred!==void 0)throw Error(`${t} Provider tools can't be deferred: the provider has to see their definition. Remove "deferred".`);expectOnlyKnownKeys(n,[`fallback`,`kind`,`provider`],t);let r=expectOneOf(n.provider,WEB_SEARCH_PROVIDERS,`provider`,t);if(n.fallback===void 0)return{kind:`web-search-tool`,selection:{provider:r}};if(r!==`native`)throw Error(`${t} "fallback" applies only to provider "native"; provider "${r}" serves every AI Gateway model.`);return{kind:`web-search-tool`,selection:{fallback:expectOneOf(n.fallback,WEB_SEARCH_FALLBACK_PROVIDERS,`fallback`,t),provider:r}}}let n=expectObjectRecord(e,t),r=isWorkflowToolDefinition(e)?readCompiledWorkflowEntry(n,t):void 0;if(r===void 0&&readWorkflowFunctionId(n.execute)!==void 0)throw Error(`${t} Workflow executors require defineWorkflowTool() from "eve/tools". Replace defineTool() or the bare tool object with defineWorkflowTool().`);if(r!==void 0&&n.endsTurn!==void 0)throw Error(`${t} "endsTurn" is not supported on defineWorkflowTool(). Workflow tools resume the turn when they finish; use defineTool() for a tool that ends the turn.`);expectOnlyKnownKeys(n,[`availableInSubagents`,`deferred`,`endsTurn`,`label`,`auth`,`description`,`execute`,`inputSchema`,`approval`,`approvalKey`,`outputSchema`,`toModelOutput`,...r===void 0?[]:[r.entryPoint]],t);let i=n.inputSchema===void 0?null:serializeInputSchema(n.inputSchema);r?.entryPoint===`serve`&&assertNoOwnTaskIdInput(i,t);let a=serializeOutputSchema(n.outputSchema),o=readToolBehavior(e),s=readWorkflowProgramOptions(e),c=r!==void 0||n.execute!==void 0;!c&&o?.handling?.kind!==`dispatch`&&expectFunction(n.execute,t);let l={availableInSubagents:n.availableInSubagents===void 0?void 0:expectBoolean(n.availableInSubagents,t),deferred:n.deferred===void 0?void 0:expectBoolean(n.deferred,t),description:expectString(n.description,t),endsTurn:n.endsTurn===void 0||typeof n.endsTurn==`boolean`?n.endsTurn:expectFunction(n.endsTurn,t),hasApproval:n.approval!==void 0,hasExecute:c,hasModelOutputProjection:n.toModelOutput!==void 0,inputSchema:i,modelInputSchema:modelInputSchemaOf(n.inputSchema,r?.entryPoint===`serve`||o?.handling?.kind===`dispatch`)};if(o!==void 0&&(l.behavior=o),s!==void 0&&(l.workflowProgram=s),r===void 0?c&&(l.execute=expectFunction(n.execute,t)):l.workflow=r,a!==void 0&&(l.outputSchema=a),n.label!==void 0){let e=expectObjectRecord(n.label,t);expectOnlyKnownKeys(e,[`start`,`complete`,`delta`],t),expectFunction(e.start,t),e.complete!==void 0&&expectFunction(e.complete,t),e.delta!==void 0&&expectFunction(e.delta,t)}if(n.approval!==void 0&&normalizeToolApproval(n.approval,t),n.approvalKey!==void 0&&expectFunction(n.approvalKey,t),n.toModelOutput!==void 0&&expectFunction(n.toModelOutput,t),n.auth!==void 0){let e=expectObjectRecord(n.auth,t);expectFunction(e.getToken,t)}return{kind:`tool`,definition:l}}function readCompiledWorkflowEntry(e,t){let[n]=readWorkflowToolEntryPoints(e),r=n===void 0?void 0:readWorkflowFunctionId(e[n]);if(n===void 0||r===void 0)throw Error(`${t} defineWorkflowTool() requires a compiled workflow executor. Start execute, task, or serve with "use workflow" and export defineWorkflowTool() as the default export of a static tool module.`);return{entryPoint:n,workflowId:r}}function modelInputSchemaOf(e,t){let n=toInputSchema(e)??UNSPECIFIED_INPUT_SCHEMA;return serializeModelInputSchema(t?withTaskIdSchema(n):n)}function assertNoOwnTaskIdInput(e,t){let n=e?.properties;if(isObject(n)&&TASK_ID_INPUT in n)throw Error(`${t} inputSchema declares "${TASK_ID_INPUT}", which eve adds to a serve tool's model input to send a call to a running task. Rename the field.`)}function expectOneOf(e,t,n,r){let i=expectString(e,r);if(!t.includes(i))throw Error(`${r} Expected "${n}" to be one of: ${t.join(`, `)}.`);return i}export{normalizeToolDefinition};
@@ -1 +1 @@
1
- import{isNonEmptyString,isObject}from"#shared/guards.js";import{inspect}from"node:util";import{SpanStatusCode,trace}from"#compiled/@opentelemetry/api/index.js";import{truncateTelemetryText}from"#tracing/telemetry-budget.js";import{capturesErrorContent}from"#tracing/error-content-context.js";import{getErrorMessage}from"#compiled/@ai-sdk/provider/index.js";const LEVEL_SEVERITY={debug:10,info:20,warn:30,error:40};function createLogger(e){return{debug(t,n){write(`debug`,e,t,n)},info(t,n){write(`info`,e,t,n)},warn(t,n){write(`warn`,e,t,n)},error(t,n){write(`error`,e,t,n),recordOnActiveSpan(t,n)}}}function logError(e,t,n,r){let i=formatError(n);return e.error(t,{...r,error:i}),typeof i.errorId==`string`?i.errorId:createErrorId()}function createErrorId(){return crypto.randomUUID()}function formatError(e,t){let n={errorId:t??createErrorId(),message:extractErrorMessage(e)},r=extractErrorName(e);return r!==void 0&&(n.name=r),n.detail=inspectError(e),n}function extractErrorName(e){if(e instanceof Error)return e.name===`Error`?void 0:e.name;if(isObject(e)&&isNonEmptyString(e.name)&&e.name!==`Error`)return e.name}function extractErrorMessage(e){return isObject(e)&&!(e instanceof Error)&&typeof e.message==`string`?e.message:getErrorMessage(e)}function extractErrorId(e){if(isObject(e))return isNonEmptyString(e.errorId)?e.errorId:void 0}function formatErrorHint(e){let t=isObject(e.details)?e.details.name:void 0,n=isNonEmptyString(t)?t:void 0,r=typeof e.message==`string`?e.message.trim():``;return n&&r.length>0?` (${n}: ${truncateForDisplay(r)})`:n?` (${n})`:r.length>0?` (${truncateForDisplay(r)})`:``}function truncateForDisplay(e,t=160){return e.length<=t?e:`${e.slice(0,t-1).trimEnd()}…`}function recordErrorOnSpan(e,t){if(!capturesErrorContent()){e.setStatus({code:SpanStatusCode.ERROR});return}let n=truncateTelemetryText(t instanceof Error?t.message:getErrorMessage(t),4096),r=t instanceof Error?truncateTelemetryText(t.name,128):`Error`;e.setStatus({code:SpanStatusCode.ERROR,message:n}),e.recordException({message:n,name:r,stack:inspectError(t)})}function resolveThreshold(){let e=process.env.EVE_LOG_LEVEL?.toLowerCase();return e===`debug`||e===`info`||e===`warn`||e===`error`?LEVEL_SEVERITY[e]:LEVEL_SEVERITY.info}function isLogLevelEnabled(e){return LEVEL_SEVERITY[e]>=resolveThreshold()}let logRecordSubscriber;function setLogRecordSubscriber(e){logRecordSubscriber=e}function write(e,t,n,r){if(LEVEL_SEVERITY[e]<resolveThreshold())return;let i=logRecordSubscriber;if(i!==void 0)try{i(r===void 0?{level:e,namespace:t,message:n}:{level:e,namespace:t,message:n,fields:renderFields(r)});return}catch{}let a=e===`error`?console.error:e===`warn`?console.warn:console.log,o=`[eve:${t}] ${n}`;if(r===void 0){a(o);return}a(o,renderFields(r))}function renderFields(e){let t={};for(let[n,r]of Object.entries(e))if(r!==void 0){if(r instanceof Error){t[n]=formatError(r);continue}t[n]=r}return t}function recordOnActiveSpan(e,t){let n=trace.getActiveSpan();if(n===void 0)return;let r=t?.error;if(!capturesErrorContent()){(r instanceof Error||isFormattedError(r))&&n.setStatus({code:SpanStatusCode.ERROR});return}if(r instanceof Error){recordErrorOnSpan(n,r);return}if(isFormattedError(r)){let e=truncateTelemetryText(r.message,4096);n.setStatus({code:SpanStatusCode.ERROR,message:e}),n.recordException({message:e,name:typeof r.name==`string`?truncateTelemetryText(r.name,128):`Error`,stack:typeof r.detail==`string`?truncateTelemetryText(r.detail,8192):void 0});return}n.addEvent(e,t?renderFields(t):void 0)}function isFormattedError(e){return isObject(e)&&typeof e.errorId==`string`&&typeof e.message==`string`}function inspectError(e){return truncate(inspect(e,{breakLength:1/0,compact:!1,depth:10,maxStringLength:8192}),16384)}function truncate(e,t){if(Buffer.byteLength(e,`utf8`)<=t)return e;let n=e.slice(0,t);for(;Buffer.byteLength(n,`utf8`)>t&&n.length>0;)n=n.slice(0,-1);return`${n}<…truncated>`}export{createErrorId,createLogger,extractErrorId,formatError,formatErrorHint,inspectError,isLogLevelEnabled,logError,recordErrorOnSpan,setLogRecordSubscriber};
1
+ import{isNonEmptyString,isObject}from"#shared/guards.js";import{inspect}from"node:util";import{SpanStatusCode,trace}from"#compiled/@opentelemetry/api/index.js";import{truncateTelemetryText}from"#compiled/@eve/tracing/otel.js";import{currentCapture}from"#compiled/@eve/tracing/index.js";import{getErrorMessage}from"#compiled/@ai-sdk/provider/index.js";const LEVEL_SEVERITY={debug:10,info:20,warn:30,error:40};function createLogger(e){return{debug(t,n){write(`debug`,e,t,n)},info(t,n){write(`info`,e,t,n)},warn(t,n){write(`warn`,e,t,n)},error(t,n){write(`error`,e,t,n),recordOnActiveSpan(t,n)}}}function logError(e,t,n,r){let i=formatError(n);return e.error(t,{...r,error:i}),typeof i.errorId==`string`?i.errorId:createErrorId()}function createErrorId(){return crypto.randomUUID()}function formatError(e,t){let n={errorId:t??createErrorId(),message:extractErrorMessage(e)},r=extractErrorName(e);return r!==void 0&&(n.name=r),n.detail=inspectError(e),n}function extractErrorName(e){if(e instanceof Error)return e.name===`Error`?void 0:e.name;if(isObject(e)&&isNonEmptyString(e.name)&&e.name!==`Error`)return e.name}function extractErrorMessage(e){return isObject(e)&&!(e instanceof Error)&&typeof e.message==`string`?e.message:getErrorMessage(e)}function extractErrorId(e){if(isObject(e))return isNonEmptyString(e.errorId)?e.errorId:void 0}function formatErrorHint(e){let t=isObject(e.details)?e.details.name:void 0,n=isNonEmptyString(t)?t:void 0,r=typeof e.message==`string`?e.message.trim():``;return n&&r.length>0?` (${n}: ${truncateForDisplay(r)})`:n?` (${n})`:r.length>0?` (${truncateForDisplay(r)})`:``}function truncateForDisplay(e,t=160){return e.length<=t?e:`${e.slice(0,t-1).trimEnd()}…`}function recordErrorOnSpan(e,t){if(currentCapture()?.recordOutputs===!1){e.setStatus({code:SpanStatusCode.ERROR});return}let n=truncateTelemetryText(t instanceof Error?t.message:getErrorMessage(t),4096),r=t instanceof Error?truncateTelemetryText(t.name,128):`Error`;e.setStatus({code:SpanStatusCode.ERROR,message:n}),e.recordException({message:n,name:r,stack:inspectError(t)})}function resolveThreshold(){let e=process.env.EVE_LOG_LEVEL?.toLowerCase();return e===`debug`||e===`info`||e===`warn`||e===`error`?LEVEL_SEVERITY[e]:LEVEL_SEVERITY.info}function isLogLevelEnabled(e){return LEVEL_SEVERITY[e]>=resolveThreshold()}let logRecordSubscriber;function setLogRecordSubscriber(e){logRecordSubscriber=e}function write(e,t,n,r){if(LEVEL_SEVERITY[e]<resolveThreshold())return;let i=logRecordSubscriber;if(i!==void 0)try{i(r===void 0?{level:e,namespace:t,message:n}:{level:e,namespace:t,message:n,fields:renderFields(r)});return}catch{}let a=e===`error`?console.error:e===`warn`?console.warn:console.log,o=`[eve:${t}] ${n}`;if(r===void 0){a(o);return}a(o,renderFields(r))}function renderFields(e){let t={};for(let[n,r]of Object.entries(e))if(r!==void 0){if(r instanceof Error){t[n]=formatError(r);continue}t[n]=r}return t}function recordOnActiveSpan(e,t){let n=trace.getActiveSpan();if(n===void 0)return;let r=t?.error;if(currentCapture()?.recordOutputs===!1){(r instanceof Error||isFormattedError(r))&&n.setStatus({code:SpanStatusCode.ERROR});return}if(r instanceof Error){recordErrorOnSpan(n,r);return}if(isFormattedError(r)){let e=truncateTelemetryText(r.message,4096);n.setStatus({code:SpanStatusCode.ERROR,message:e}),n.recordException({message:e,name:typeof r.name==`string`?truncateTelemetryText(r.name,128):`Error`,stack:typeof r.detail==`string`?truncateTelemetryText(r.detail,8192):void 0});return}n.addEvent(e,t?renderFields(t):void 0)}function isFormattedError(e){return isObject(e)&&typeof e.errorId==`string`&&typeof e.message==`string`}function inspectError(e){return truncate(inspect(e,{breakLength:1/0,compact:!1,depth:10,maxStringLength:8192}),16384)}function truncate(e,t){if(Buffer.byteLength(e,`utf8`)<=t)return e;let n=e.slice(0,t);for(;Buffer.byteLength(n,`utf8`)>t&&n.length>0;)n=n.slice(0,-1);return`${n}<…truncated>`}export{createErrorId,createLogger,extractErrorId,formatError,formatErrorHint,inspectError,isLogLevelEnabled,logError,recordErrorOnSpan,setLogRecordSubscriber};
@@ -1 +1 @@
1
- import{basename}from"node:path";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{DEVELOPMENT_WORKER_APP_ROOT_ENV}from"#internal/workflow/development-world-protocol.js";import{installLocalInstrumentationRuntime}from"#tracing/local-instrumentation-runtime.js";const appRoot=process.env[DEVELOPMENT_WORKER_APP_ROOT_ENV];if(appRoot===void 0)throw Error(`${DEVELOPMENT_WORKER_APP_ROOT_ENV} is required for local tracing.`);const runtime=installLocalInstrumentationRuntime({appRoot,frameworkVersion:resolveInstalledPackageInfo().version,serviceName:basename(appRoot)});function installLocalTracingRuntimePlugin(e){e?.hooks?.hook(`close`,()=>runtime.shutdown())}export{installLocalTracingRuntimePlugin as default};
1
+ import{basename}from"node:path";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{DEVELOPMENT_WORKER_APP_ROOT_ENV}from"#internal/workflow/development-world-protocol.js";import{installLocalInstrumentationRuntime}from"#tracing/local/instrumentation-runtime.js";const appRoot=process.env[DEVELOPMENT_WORKER_APP_ROOT_ENV];if(appRoot===void 0)throw Error(`${DEVELOPMENT_WORKER_APP_ROOT_ENV} is required for local tracing.`);const runtime=installLocalInstrumentationRuntime({appRoot,frameworkVersion:resolveInstalledPackageInfo().version,serviceName:basename(appRoot)});function installLocalTracingRuntimePlugin(e){e?.hooks?.hook(`close`,()=>runtime.shutdown())}export{installLocalTracingRuntimePlugin as default};
@@ -1 +1 @@
1
- import{createAttachSessionFn}from"#channel/session.js";import{createLogger,logError}from"#internal/logging.js";import{createChannelDeliveryMetadata}from"#channel/delivery-metadata.js";import{createChannelOperations}from"#channel/channel-operations.js";import{getChannelInstrumentationKind}from"#channel/compiled-channel.js";import{createCrossChannelToFn,toCrossChannelTargets}from"#channel/cross-channel-receive.js";import{readVercelProjectLink}from"#internal/vercel/project-link.js";import{getWorld}from"#internal/workflow/runtime.js";import{attachAgentInfoRouteResponse,attachHomeRouteMetadata,attachRemoteAgentStreamHeadersResolver,attachRouteChannelName,attachRouteSessionCreator,attachSkillFileSource}from"#internal/nitro/routes/channel-route-context.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{DEVELOPMENT_WORKFLOW_SECRET_ENV}from"#internal/workflow/development-world-protocol.js";import{readTrustedDevelopmentClientAddress}from"#internal/nitro/dev-client-address.js";import{resolveNitroCompiledArtifactsSource}from"#internal/nitro/routes/runtime-artifacts.js";import{withLocalDevRequestScope}from"#runtime/local-dev-capability.js";import{createAgentDescriptionRouteArgs}from"#channel/agent-description.js";import{traceChannelRequest}from"#internal/nitro/routes/channel-request-instrumentation.js";import{resolveNitroChannelRuntimeBundle}from"#internal/nitro/routes/runtime-stack.js";import{createRouteInvokeTool}from"#internal/nitro/routes/route-invoke-tool.js";import{withVercelOidcProjectResolver}from"#channel/auth/vercel-oidc-project.js";const log=createLogger(`channel.dispatch`);async function dispatchChannelRequest(e,t,n){return await traceChannelRequest({request:e.req,routeKey:t},async r=>{let i=r?.spanContext()??trace.getSpan(context.active())?.spanContext(),a=await resolveNitroChannelRuntimeBundle(n),o=a.channels.find(e=>`${e.method.toUpperCase()} ${e.urlPath}`===t);if(o===void 0)return Response.json({error:`No matching channel for this request.`,ok:!1},{status:404});r?.setAttribute(`eve.channel.name`,o.name);let s=getChannelInstrumentationKind(o.definition)??o.adapter?.kind;s!==void 0&&r?.setAttribute(`eve.channel.kind`,s);let c=await buildRouteArgs(e,a,o.name,s??`channel`,n,i),l;try{l=await withDevelopmentVercelOidcContext(n,e.req,async()=>{if(o.handler)return await o.handler(e.req,c.args);let t={waitUntil:c.args.waitUntil,params:c.args.params,requestIp:c.args.requestIp};return await o.fetch(e.req,t)})}catch(n){let r=logError(log,`channel handler threw`,n,{routeKey:t,channel:o.name});return flushBackgroundTasks(e,c.backgroundTasks,t,o.name),Response.json({error:`Channel handler failed.`,errorId:r,ok:!1},{status:500})}return flushBackgroundTasks(e,c.backgroundTasks,t,o.name),l})}async function dispatchChannelWebSocketRequest(e,t,n){let r=await resolveNitroChannelRuntimeBundle(n),i=r.channels.find(e=>`${e.method.toUpperCase()} ${e.urlPath}`===t);if(i===void 0||i.websocket===void 0)return rejectWebSocketUpgrade({error:`No matching websocket channel for this request.`,ok:!1},404);let a=i.websocket,o=getChannelInstrumentationKind(i.definition)??i.adapter?.kind??`channel`,s=await buildRouteArgs(e,r,i.name,o,n,void 0);try{let r=await withDevelopmentVercelOidcContext(n,e.req,async()=>await a(e.req,s.args));return flushBackgroundTasks(e,s.backgroundTasks,t,i.name),r}catch(n){let r=logError(log,`channel websocket handler threw`,n,{routeKey:t,channel:i.name});return flushBackgroundTasks(e,s.backgroundTasks,t,i.name),rejectWebSocketUpgrade({error:`Channel websocket handler failed.`,errorId:r,ok:!1},500)}}async function withDevelopmentVercelOidcContext(e,t,n){return e.kind===`development`?await withLocalDevRequestScope(t,async()=>await withVercelOidcProjectResolver({request:t,resolveCurrentProject:async()=>{let t=await readVercelProjectLink(e.appRoot);return t===void 0?void 0:{environment:`development`,projectId:t.projectId}}},n)):await n()}async function buildRouteArgs(e,t,n,r,i,a){let o=readVercelRequestId(e.req.headers),s=extractRequestIp(e,i),c=[],l=e.context.params??{},u={};for(let[e,t]of Object.entries(l))u[e]=decodeURIComponent(t);let waitUntil=e=>{c.push(e)},d=t.channels.find(e=>e.name===n),f=d?.adapter??{kind:`channel`},p={acceptedDeploymentId:await resolveAcceptedDeploymentId(i),channelKind:r,channelName:n,requestId:o,requestTraceContext:a===void 0?void 0:{spanId:a.spanId,traceFlags:a.traceFlags,traceId:a.traceId}},m=createChannelOperations({adapter:f,channelName:n,metadata:p,runtime:t.runtime,turnPolicy:d?.turnPolicy}),h=createAttachSessionFn(t.runtime,{...p,turnPolicy:d?.turnPolicy}),g=createCrossChannelToFn(t.runtime,toCrossChannelTargets(t.channels)),_=createAgentDescriptionRouteArgs(()=>resolveNitroCompiledArtifactsSource(i)),v=attachRouteSessionCreator(attachHomeRouteMetadata(attachRouteChannelName(attachAgentInfoRouteResponse({attachSession:h,...m,..._.args,invokeTool:createRouteInvokeTool({agentName:t.agentName,config:i,origin:{adapter:f,agentName:t.agentName,channelName:n},requestUrl:e.req.url}),params:u,requestIp:s,to:g,waitUntil},async()=>{let{handleAgentInfoRequest:e}=await import(`#internal/nitro/routes/info.js`);return await e(i)}),n),{agentName:t.agentName}),async e=>await t.runtime.createSession({...e,adapter:f,channelName:n,continuationToken:e.continuationToken===void 0?void 0:`${n}:${e.continuationToken}`,delivery:createChannelDeliveryMetadata(p),requestId:o}));return attachSkillFileSource(v,_.skillFiles),t.resolveRemoteAgentStreamHeaders!==void 0&&attachRemoteAgentStreamHeadersResolver(v,t.resolveRemoteAgentStreamHeaders),{args:v,backgroundTasks:c}}async function resolveAcceptedDeploymentId(e){let t=process.env.VERCEL_DEPLOYMENT_ID?.trim();if(t!==void 0&&t.length>0)return validateDeploymentId(t);if(e.kind!==`development`||process.env[DEVELOPMENT_WORKFLOW_SECRET_ENV]!==void 0)return validateDeploymentId(await(await getWorld()).getDeploymentId())}function validateDeploymentId(e){if(e.length===0||e===`latest`)throw Error(`Channel ingress could not resolve an exact deployment id.`);return e}function readVercelRequestId(e){let t=e.get(`x-vercel-id`)?.trim();return t===``?void 0:t}function rejectWebSocketUpgrade(e,t){return{upgrade(){throw Response.json(e,{status:t})}}}function flushBackgroundTasks(e,t,n,r){t.length!==0&&e.waitUntil(Promise.allSettled(t).then(e=>{for(let t of e)t.status===`rejected`&&logError(log,`channel background task failed`,t.reason,{routeKey:n,channel:r})}))}function extractRequestIp(e,t){if(t.kind===`development`){let t=readTrustedDevelopmentClientAddress(e.req.headers,process.env[DEVELOPMENT_WORKFLOW_SECRET_ENV]);if(t!==void 0)return t}return extractSocketIp(e)}function extractSocketIp(e){let t=e.req.ip;return typeof t==`string`&&t.length>0?t:null}export{dispatchChannelRequest,dispatchChannelWebSocketRequest};
1
+ import{createAttachSessionFn}from"#channel/session.js";import{createLogger,logError}from"#internal/logging.js";import{createChannelDeliveryMetadata}from"#channel/delivery-metadata.js";import{createChannelOperations}from"#channel/channel-operations.js";import{getChannelInstrumentationKind}from"#channel/compiled-channel.js";import{createCrossChannelToFn,toCrossChannelTargets}from"#channel/cross-channel-receive.js";import{readVercelProjectLink}from"#internal/vercel/project-link.js";import{getWorld}from"#internal/workflow/runtime.js";import{attachAgentInfoRouteResponse,attachHomeRouteMetadata,attachRemoteAgentStreamHeadersResolver,attachRouteChannelName,attachRouteSessionCreator,attachSkillFileSource}from"#internal/nitro/routes/channel-route-context.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{DEVELOPMENT_WORKFLOW_SECRET_ENV}from"#internal/workflow/development-world-protocol.js";import{readTrustedDevelopmentClientAddress}from"#internal/nitro/dev-client-address.js";import{resolveNitroCompiledArtifactsSource}from"#internal/nitro/routes/runtime-artifacts.js";import{withLocalDevRequestScope}from"#runtime/local-dev-capability.js";import{createAgentDescriptionRouteArgs}from"#channel/agent-description.js";import{traceChannelRequest}from"#internal/nitro/routes/channel-request-instrumentation.js";import{resolveNitroChannelRuntimeBundle}from"#internal/nitro/routes/runtime-stack.js";import{createRouteInvokeTool}from"#internal/nitro/routes/route-invoke-tool.js";import{withVercelOidcProjectResolver}from"#channel/auth/vercel-oidc-project.js";const log=createLogger(`channel.dispatch`);async function dispatchChannelRequest(e,t,n){return await traceChannelRequest({request:e.req,routeKey:t},async r=>{let i=r?.reference??trace.getSpan(context.active())?.spanContext(),a=await resolveNitroChannelRuntimeBundle(n),o=a.channels.find(e=>`${e.method.toUpperCase()} ${e.urlPath}`===t);if(o===void 0)return Response.json({error:`No matching channel for this request.`,ok:!1},{status:404});r?.channel({channelName:o.name});let s=getChannelInstrumentationKind(o.definition)??o.adapter?.kind;s!==void 0&&r?.channel({channelKind:s});let c=await buildRouteArgs(e,a,o.name,s??`channel`,n,i),l;try{l=await withDevelopmentVercelOidcContext(n,e.req,async()=>{if(o.handler)return await o.handler(e.req,c.args);let t={waitUntil:c.args.waitUntil,params:c.args.params,requestIp:c.args.requestIp};return await o.fetch(e.req,t)})}catch(n){let r=logError(log,`channel handler threw`,n,{routeKey:t,channel:o.name});return flushBackgroundTasks(e,c.backgroundTasks,t,o.name),Response.json({error:`Channel handler failed.`,errorId:r,ok:!1},{status:500})}return flushBackgroundTasks(e,c.backgroundTasks,t,o.name),l})}async function dispatchChannelWebSocketRequest(e,t,n){let r=await resolveNitroChannelRuntimeBundle(n),i=r.channels.find(e=>`${e.method.toUpperCase()} ${e.urlPath}`===t);if(i===void 0||i.websocket===void 0)return rejectWebSocketUpgrade({error:`No matching websocket channel for this request.`,ok:!1},404);let a=i.websocket,o=getChannelInstrumentationKind(i.definition)??i.adapter?.kind??`channel`,s=await buildRouteArgs(e,r,i.name,o,n,void 0);try{let r=await withDevelopmentVercelOidcContext(n,e.req,async()=>await a(e.req,s.args));return flushBackgroundTasks(e,s.backgroundTasks,t,i.name),r}catch(n){let r=logError(log,`channel websocket handler threw`,n,{routeKey:t,channel:i.name});return flushBackgroundTasks(e,s.backgroundTasks,t,i.name),rejectWebSocketUpgrade({error:`Channel websocket handler failed.`,errorId:r,ok:!1},500)}}async function withDevelopmentVercelOidcContext(e,t,n){return e.kind===`development`?await withLocalDevRequestScope(t,async()=>await withVercelOidcProjectResolver({request:t,resolveCurrentProject:async()=>{let t=await readVercelProjectLink(e.appRoot);return t===void 0?void 0:{environment:`development`,projectId:t.projectId}}},n)):await n()}async function buildRouteArgs(e,t,n,r,i,a){let o=readVercelRequestId(e.req.headers),s=extractRequestIp(e,i),c=[],l=e.context.params??{},u={};for(let[e,t]of Object.entries(l))u[e]=decodeURIComponent(t);let waitUntil=e=>{c.push(e)},d=t.channels.find(e=>e.name===n),f=d?.adapter??{kind:`channel`},p={acceptedDeploymentId:await resolveAcceptedDeploymentId(i),channelKind:r,channelName:n,requestId:o,requestTraceContext:a===void 0?void 0:{spanId:a.spanId,traceFlags:a.traceFlags,traceId:a.traceId}},m=createChannelOperations({adapter:f,channelName:n,metadata:p,runtime:t.runtime,turnPolicy:d?.turnPolicy}),h=createAttachSessionFn(t.runtime,{...p,turnPolicy:d?.turnPolicy}),g=createCrossChannelToFn(t.runtime,toCrossChannelTargets(t.channels)),_=createAgentDescriptionRouteArgs(()=>resolveNitroCompiledArtifactsSource(i)),v=attachRouteSessionCreator(attachHomeRouteMetadata(attachRouteChannelName(attachAgentInfoRouteResponse({attachSession:h,...m,..._.args,invokeTool:createRouteInvokeTool({agentName:t.agentName,config:i,origin:{adapter:f,agentName:t.agentName,channelName:n},requestUrl:e.req.url}),params:u,requestIp:s,to:g,waitUntil},async()=>{let{handleAgentInfoRequest:e}=await import(`#internal/nitro/routes/info.js`);return await e(i)}),n),{agentName:t.agentName}),async e=>await t.runtime.createSession({...e,adapter:f,channelName:n,continuationToken:e.continuationToken===void 0?void 0:`${n}:${e.continuationToken}`,delivery:createChannelDeliveryMetadata(p),requestId:o}));return attachSkillFileSource(v,_.skillFiles),t.resolveRemoteAgentStreamHeaders!==void 0&&attachRemoteAgentStreamHeadersResolver(v,t.resolveRemoteAgentStreamHeaders),{args:v,backgroundTasks:c}}async function resolveAcceptedDeploymentId(e){let t=process.env.VERCEL_DEPLOYMENT_ID?.trim();if(t!==void 0&&t.length>0)return validateDeploymentId(t);if(e.kind!==`development`||process.env[DEVELOPMENT_WORKFLOW_SECRET_ENV]!==void 0)return validateDeploymentId(await(await getWorld()).getDeploymentId())}function validateDeploymentId(e){if(e.length===0||e===`latest`)throw Error(`Channel ingress could not resolve an exact deployment id.`);return e}function readVercelRequestId(e){let t=e.get(`x-vercel-id`)?.trim();return t===``?void 0:t}function rejectWebSocketUpgrade(e,t){return{upgrade(){throw Response.json(e,{status:t})}}}function flushBackgroundTasks(e,t,n,r){t.length!==0&&e.waitUntil(Promise.allSettled(t).then(e=>{for(let t of e)t.status===`rejected`&&logError(log,`channel background task failed`,t.reason,{routeKey:n,channel:r})}))}function extractRequestIp(e,t){if(t.kind===`development`){let t=readTrustedDevelopmentClientAddress(e.req.headers,process.env[DEVELOPMENT_WORKFLOW_SECRET_ENV]);if(t!==void 0)return t}return extractSocketIp(e)}function extractSocketIp(e){let t=e.req.ip;return typeof t==`string`&&t.length>0?t:null}export{dispatchChannelRequest,dispatchChannelWebSocketRequest};
@@ -1,33 +1,12 @@
1
- import { type Span } from "#compiled/@opentelemetry/api/index.js";
2
- /** Inputs for {@link traceChannelRequest}. */
3
- interface TraceChannelRequestInput {
1
+ export interface ChannelRequestTrace {
2
+ readonly reference: import("@opentelemetry/api").SpanContext;
3
+ channel(input: {
4
+ channelName?: string;
5
+ channelKind?: string;
6
+ }): void;
7
+ }
8
+ /** The request lifetime ends at handler return, not response-body consumption. */
9
+ export declare function traceChannelRequest<T extends Response>(input: {
4
10
  readonly request: Request;
5
11
  readonly routeKey: string;
6
- }
7
- /**
8
- * Wraps one inbound channel HTTP request in an OTel `SERVER` span.
9
- *
10
- * The span is named for the low-cardinality registered `routeKey`
11
- * (`"POST /eve/v1/session/:sessionId"`), never the concrete URL, while the
12
- * `http.route` attribute carries only the path template and
13
- * `http.request.method` carries the method. It starts from context extracted
14
- * off the incoming request headers so an upstream `traceparent` becomes its
15
- * parent and nested channel operations become its descendants.
16
- *
17
- * The handler runs inside the span's active context. When it returns, the
18
- * response status is recorded and a `>= 500` status marks the span as an
19
- * error. A thrown handler marks failure status and is rethrown; request
20
- * spans never record exception content. The span always ends in `finally`, without
21
- * waiting for `event.waitUntil()` work or streamed response bodies.
22
- *
23
- * Emitting these spans is opt-in: unless authored instrumentation enables it
24
- * via `traceChannelRequests: true`, the handler runs with no span (`undefined`)
25
- * and performs no header extraction. The channel dispatcher can still use an
26
- * already-active platform span for the activation's cross-trace link.
27
- *
28
- * This is observability-only: it never changes the response and performs no
29
- * synchronous span export in the request path, adding only minimal in-process
30
- * tracing overhead.
31
- */
32
- export declare function traceChannelRequest<T extends Response>(input: TraceChannelRequestInput, handler: (span: Span | undefined) => Promise<T>): Promise<T>;
33
- export {};
12
+ }, handler: (operation: ChannelRequestTrace | undefined) => Promise<T>): Promise<T>;
@@ -1 +1 @@
1
- import{AGENT_SPAN_NAMES}from"#tracing/agent-span-contract.js";import{SpanKind,SpanStatusCode,context,propagation,trace}from"#compiled/@opentelemetry/api/index.js";import{getInstrumentationRuntime}from"#instrumentation/runtime.js";import{markAgentTraceContext}from"#tracing/agent-trace-context.js";import{withErrorContent}from"#tracing/error-content-context.js";import{agentSpanNamingAttributes}from"#tracing/agent-span-naming.js";const headersGetter={get(e,t){return e.get(t)??void 0},keys(e){return[...e.keys()]}};async function traceChannelRequest(e,t){if(getInstrumentationRuntime()?.otelSettings?.traceChannelRequests!==!0)return await t(void 0);let{request:n,routeKey:r}=e,i=propagation.extract(context.active(),n.headers,headersGetter),a=AGENT_SPAN_NAMES.channelRequest,o=trace.getTracer(`eve.channel`).startSpan(a,{attributes:{...baseAttributes(n,r),...a===`agent.channel.request`?agentSpanNamingAttributes(a):void 0},kind:SpanKind.SERVER},i),s=markAgentTraceContext(withErrorContent(trace.setSpan(i,o),!1));try{let e=await context.with(s,()=>t(o));return o.setAttribute(`http.response.status_code`,e.status),e.status>=500&&o.setStatus({code:SpanStatusCode.ERROR}),e}catch(e){throw o.setStatus({code:SpanStatusCode.ERROR}),e}finally{o.end()}}function baseAttributes(e,t){let n={"http.request.method":e.method,"http.route":routeTemplate(t)},r=parseRequestUrl(e.url);return r!==void 0&&(n[`url.scheme`]=r.protocol.replace(/:$/,``),n[`server.address`]=r.hostname),n}function routeTemplate(e){let t=e.indexOf(` `);return t===-1?e:e.slice(t+1)}function parseRequestUrl(e){try{return new URL(e)}catch{return}}export{traceChannelRequest};
1
+ import{SpanKind,SpanStatusCode,context,propagation,trace}from"#compiled/@opentelemetry/api/index.js";import{getInstrumentationRuntime}from"#instrumentation/runtime.js";import{markAgentTraceContext}from"#tracing/eve/agent-trace-context.js";import{withErrorContent}from"#compiled/@eve/tracing/otel.js";const headersGetter={get:(e,t)=>e.get(t)??void 0,keys:e=>[...e.keys()]};async function traceChannelRequest(e,t){if(getInstrumentationRuntime()?.otelSettings?.traceChannelRequests!==!0)return t(void 0);let{request:n,routeKey:r}=e,i=propagation.extract(context.active(),n.headers,headersGetter),a=r.indexOf(` `),o;try{o=new URL(n.url)}catch{}let s=trace.getTracer(`eve.channel`).startSpan(`agent.channel.request`,{kind:SpanKind.SERVER,attributes:{"operation.name":`agent.channel.request`,"resource.name":`agent.channel.request`,"http.request.method":n.method,"http.route":a===-1?r:r.slice(a+1),"url.scheme":o?.protocol.replace(/:$/,``),"server.address":o?.hostname}},i),c={reference:s.spanContext(),channel(e){e.channelName!==void 0&&s.setAttribute(`agent.channel.name`,e.channelName),e.channelName!==void 0&&s.setAttribute(`eve.channel.name`,e.channelName),e.channelKind!==void 0&&s.setAttribute(`agent.channel.kind`,e.channelKind),e.channelKind!==void 0&&s.setAttribute(`eve.channel.kind`,e.channelKind)}};try{let e=await context.with(markAgentTraceContext(withErrorContent(trace.setSpan(i,s),!1)),()=>t(c));return s.setAttribute(`http.response.status_code`,e.status),e.status>=500&&s.setStatus({code:SpanStatusCode.ERROR}),e}catch(e){throw s.setStatus({code:SpanStatusCode.ERROR}),e}finally{s.end()}}export{traceChannelRequest};
@@ -2,7 +2,7 @@ import type { InvokeToolFn } from "#channel/invoke-tool.js";
2
2
  import { type InvokeToolRuntime } from "#execution/invoke-tool.js";
3
3
  import { type NitroArtifactsConfig } from "#internal/nitro/routes/runtime-artifacts.js";
4
4
  import type { RuntimeCompiledArtifactsSource } from "#runtime/compiled-artifacts-source.js";
5
- import type { InvokeToolTraceOrigin } from "#tracing/invoke-tool-span.js";
5
+ import type { InvokeToolTraceOrigin } from "#tracing/eve/invoke-tool-span.js";
6
6
  /**
7
7
  * Builds the route's `invokeTool`. The agent's static tools and sandbox load on
8
8
  * the first call, so routes that never invoke a tool pay nothing.
@@ -1,3 +1,3 @@
1
- import{parseWithNitroRolldownAst}from"#internal/bundler/nitro-rolldown.js";import{collectFreeVariables,collectPatternNames,extractParamNames,findEveImportAliases,findProperty,isAstNode,isFunction,readDefinerName,walkNode}from"#internal/workflow-bundle/dynamic-tool-ast-references.js";async function transformDynamicToolExecute(e,t,n=NO_WORKFLOW_FUNCTIONS){if(!t.includes(`defineTool`)&&!t.includes(`defineWorkflowTool`))return null;let r=await parseWithNitroRolldownAst(e,t),i=findEveImportAliases(r,[`defineTool`,`defineWorkflowTool`]);if(i.size===0)return null;let a=[];return walkForCallbacks(t,r,a,[],{defineToolAliases:i,workflowFunctions:n,durableSchemaAliases:findEveImportAliases(r,[`defineDurableSchema`])}),a.length===0?null:applyTransform(t,a)}const NO_WORKFLOW_FUNCTIONS=new Set;function walkForCallbacks(e,t,n,r,i){if(t){if(isFunction(t)){let a=t.body;if(!a)return;walkForCallbacks(e,a,n,[...r,{params:extractParamNames(t),vars:collectScopeVarDeclarations(a)}],i);return}if(t.type===`CallExpression`&&i.defineToolAliases.has(readDefinerName(t.callee)??``)&&t.arguments?.length===1&&t.arguments[0]?.type===`ObjectExpression`){collectToolCallbacks(e,t.arguments[0],n,r,i);return}for(let a of Object.values(t))if(Array.isArray(a))for(let t of a)isAstNode(t)&&walkForCallbacks(e,t,n,r,i);else isAstNode(a)&&walkForCallbacks(e,a,n,r,i)}}function isWorkflowExecute(e,t){let n=e?.value;return n?.type===`Identifier`&&n.name!==void 0&&t.workflowFunctions.has(n.name)}function collectToolCallbacks(e,t,n,r,i){let a=findProperty(t,`execute`);isWorkflowExecute(a,i)||collectCallbackProperty(e,a,`execute`,`execute`,n,r),collectCallbackProperty(e,findProperty(t,`approvalKey`),`approvalKey`,`approvalKey`,n,r);let o=findProperty(t,`label`)?.value;o?.type===`ObjectExpression`&&(collectCallbackProperty(e,findProperty(o,`start`),`labelStart`,`start`,n,r),collectCallbackProperty(e,findProperty(o,`complete`),`labelComplete`,`complete`,n,r),collectCallbackProperty(e,findProperty(o,`delta`),`labelDelta`,`delta`,n,r)),collectCallbackProperty(e,findProperty(t,`toModelOutput`),`toModelOutput`,`toModelOutput`,n,r);for(let a of[`inputSchema`,`outputSchema`]){let o=findProperty(t,a),s=o?.value;o?.start!==void 0&&o.end!==void 0&&s?.start!==void 0&&s.end!==void 0&&(s.type!==`ObjectExpression`||findProperty(s,`~standard`))&&(s.type!==`CallExpression`||s.callee?.name!==`__eveDefineDurableSchema`&&!i.durableSchemaAliases.has(readDefinerName(s.callee)??``))&&n.push({body:`{ return ${e.slice(s.start,s.end)}; }`,captureNode:s,isAsync:!1,isGenerator:!1,isReference:!1,nestedScopes:r,params:``,phase:a,propertyName:a,propEnd:o.end,propStart:o.start})}let s=findProperty(t,`approval`),c=s?.value;c?.type===`ObjectExpression`?(collectCallbackProperty(e,findProperty(c,`request`),`approvalRequest`,`request`,n,r),collectCallbackProperty(e,findProperty(c,`response`),`approvalResponse`,`response`,n,r)):collectCallbackProperty(e,s,`approvalRequest`,`approval`,n,r)}function collectCallbackProperty(e,t,n,r,i,a){if(t?.type!==`Property`||t.start===void 0||t.end===void 0)return;let o=t.value;if(o&&o.start!==void 0&&o.end!==void 0){if(isFunction(o)||t.method===!0){if(!o.body)return;i.push({body:extractFnBody(e,o),captureNode:o,isAsync:o.async===!0,isGenerator:o.generator===!0,isReference:!1,nestedScopes:a,params:extractFnParams(e,o),phase:n,propertyName:r,propEnd:t.end,propStart:t.start});return}o.type===`Identifier`&&i.push({body:`{ return ${e.slice(o.start,o.end)}(...__args); }`,captureNode:o,isAsync:!1,isGenerator:!1,isReference:!0,nestedScopes:a,params:`...__args`,phase:n,propertyName:r,propEnd:t.end,propStart:t.start})}}function applyTransform(e,t){let n=[],r=[];for(let[e,i]of t.entries()){let t=collectFreeVariables(i.captureNode),a=dedupeShadowed(i.nestedScopes.flatMap(e=>[...e.params,...e.vars])).filter(e=>t.has(e)),o=a.length>0?`{ ${a.join(`, `)} }`:`{}`,s=i.phase.replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`),c=i.phase===`execute`?`__eve_dynamic_exec_${e}`:`__eve_dynamic_${s}_${e}`,l=[a.length>0?o:`__vars`,i.params].filter(Boolean).join(`, `),u=i.body.slice(1,-1).trim(),d=i.isAsync?`async `:``,f=i.isGenerator?`*`:``;r.push(`${d}function${f} ${c}(${l}) {\n ${u}\n}`);let p=createLiveWrapper(i,c,o),m=i.phase===`inputSchema`||i.phase===`outputSchema`?`__eveDefineDurableSchema({ schema: ${c}, closure: ${o} })`:`__eveStampDynamicCallback(${p}, ${c}, ${o})`;n.push({end:i.propEnd,start:i.propStart,text:`${i.propertyName}: ${m}`})}let i=e;for(let e of n.sort((e,t)=>t.start-e.start))i=i.slice(0,e.start)+e.text+i.slice(e.end);return{code:`${[...t.some(e=>e.phase===`inputSchema`||e.phase===`outputSchema`)?[`import { defineDurableSchema as __eveDefineDurableSchema } from "eve/tools";`]:[],`var __eveDurableCallbackSym = Symbol.for("eve:durable-dynamic-callback");`,`function __eveStampDynamicCallback(callback, impl, closure) {`,` Object.defineProperty(callback, __eveDurableCallbackSym, { configurable: true, value: { callback: impl, closure } });`,` return callback;`,`}`].join(`
1
+ import{parseWithNitroRolldownAst}from"#internal/bundler/nitro-rolldown.js";import{collectFreeVariables,collectPatternNames,extractParamNames,findEveImportAliases,findProperty,isAstNode,isFunction,readDefinerName,walkNode}from"#internal/workflow-bundle/dynamic-tool-ast-references.js";async function transformDynamicToolExecute(e,t,n=NO_WORKFLOW_FUNCTIONS){if(!t.includes(`defineTool`)&&!t.includes(`defineWorkflowTool`))return null;let r=await parseWithNitroRolldownAst(e,t),i=findEveImportAliases(r,[`defineTool`,`defineWorkflowTool`]);if(i.size===0)return null;let a=[];return walkForCallbacks(t,r,a,[],{defineToolAliases:i,workflowFunctions:n,durableSchemaAliases:findEveImportAliases(r,[`defineDurableSchema`])}),a.length===0?null:applyTransform(t,a)}const NO_WORKFLOW_FUNCTIONS=new Set;function walkForCallbacks(e,t,n,r,i){if(t){if(isFunction(t)){let a=t.body;if(!a)return;walkForCallbacks(e,a,n,[...r,{params:extractParamNames(t),vars:collectScopeVarDeclarations(a)}],i);return}if(t.type===`CallExpression`&&i.defineToolAliases.has(readDefinerName(t.callee)??``)&&t.arguments?.length===1&&t.arguments[0]?.type===`ObjectExpression`){collectToolCallbacks(e,t.arguments[0],n,r,i);return}for(let a of Object.values(t))if(Array.isArray(a))for(let t of a)isAstNode(t)&&walkForCallbacks(e,t,n,r,i);else isAstNode(a)&&walkForCallbacks(e,a,n,r,i)}}function isWorkflowExecute(e,t){let n=e?.value;return n?.type===`Identifier`&&n.name!==void 0&&t.workflowFunctions.has(n.name)}function collectToolCallbacks(e,t,n,r,i){let a=findProperty(t,`execute`);isWorkflowExecute(a,i)||collectCallbackProperty(e,a,`execute`,`execute`,n,r),collectCallbackProperty(e,findProperty(t,`approvalKey`),`approvalKey`,`approvalKey`,n,r);let o=findProperty(t,`label`)?.value;o?.type===`ObjectExpression`&&(collectCallbackProperty(e,findProperty(o,`start`),`labelStart`,`start`,n,r),collectCallbackProperty(e,findProperty(o,`complete`),`labelComplete`,`complete`,n,r),collectCallbackProperty(e,findProperty(o,`delta`),`labelDelta`,`delta`,n,r)),collectCallbackProperty(e,findProperty(t,`toModelOutput`),`toModelOutput`,`toModelOutput`,n,r);for(let a of[`inputSchema`,`outputSchema`]){let o=findProperty(t,a),s=o?.value;o?.start!==void 0&&o.end!==void 0&&s?.start!==void 0&&s.end!==void 0&&(s.type!==`ObjectExpression`||findProperty(s,`~standard`))&&(s.type!==`CallExpression`||s.callee?.name!==`__eveDefineDurableSchema`&&!i.durableSchemaAliases.has(readDefinerName(s.callee)??``))&&n.push({body:`{ return ${e.slice(s.start,s.end)}; }`,captureNode:s,isAsync:!1,isGenerator:!1,isReference:!1,nestedScopes:r,params:``,phase:a,propertyName:a,propEnd:o.end,propStart:o.start})}let s=findProperty(t,`approval`),c=s?.value;c?.type===`ObjectExpression`?(collectCallbackProperty(e,findProperty(c,`request`),`approvalRequest`,`request`,n,r),collectCallbackProperty(e,findProperty(c,`prompt`),`approvalPrompt`,`prompt`,n,r),collectCallbackProperty(e,findProperty(c,`response`),`approvalResponse`,`response`,n,r)):collectCallbackProperty(e,s,`approvalRequest`,`approval`,n,r)}function collectCallbackProperty(e,t,n,r,i,a){if(t?.type!==`Property`||t.start===void 0||t.end===void 0)return;let o=t.value;if(o&&o.start!==void 0&&o.end!==void 0){if(isFunction(o)||t.method===!0){if(!o.body)return;i.push({body:extractFnBody(e,o),captureNode:o,isAsync:o.async===!0,isGenerator:o.generator===!0,isReference:!1,nestedScopes:a,params:extractFnParams(e,o),phase:n,propertyName:r,propEnd:t.end,propStart:t.start});return}o.type===`Identifier`&&i.push({body:`{ return ${e.slice(o.start,o.end)}(...__args); }`,captureNode:o,isAsync:!1,isGenerator:!1,isReference:!0,nestedScopes:a,params:`...__args`,phase:n,propertyName:r,propEnd:t.end,propStart:t.start})}}function applyTransform(e,t){let n=[],r=[];for(let[e,i]of t.entries()){let t=collectFreeVariables(i.captureNode),a=dedupeShadowed(i.nestedScopes.flatMap(e=>[...e.params,...e.vars])).filter(e=>t.has(e)),o=a.length>0?`{ ${a.join(`, `)} }`:`{}`,s=i.phase.replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`),c=i.phase===`execute`?`__eve_dynamic_exec_${e}`:`__eve_dynamic_${s}_${e}`,l=[a.length>0?o:`__vars`,i.params].filter(Boolean).join(`, `),u=i.body.slice(1,-1).trim(),d=i.isAsync?`async `:``,f=i.isGenerator?`*`:``;r.push(`${d}function${f} ${c}(${l}) {\n ${u}\n}`);let p=createLiveWrapper(i,c,o),m=i.phase===`inputSchema`||i.phase===`outputSchema`?`__eveDefineDurableSchema({ schema: ${c}, closure: ${o} })`:`__eveStampDynamicCallback(${p}, ${c}, ${o})`;n.push({end:i.propEnd,start:i.propStart,text:`${i.propertyName}: ${m}`})}let i=e;for(let e of n.sort((e,t)=>t.start-e.start))i=i.slice(0,e.start)+e.text+i.slice(e.end);return{code:`${[...t.some(e=>e.phase===`inputSchema`||e.phase===`outputSchema`)?[`import { defineDurableSchema as __eveDefineDurableSchema } from "eve/tools";`]:[],`var __eveDurableCallbackSym = Symbol.for("eve:durable-dynamic-callback");`,`function __eveStampDynamicCallback(callback, impl, closure) {`,` Object.defineProperty(callback, __eveDurableCallbackSym, { configurable: true, value: { callback: impl, closure } });`,` return callback;`,`}`].join(`
2
2
  `)}\n${i}\n\n${r.join(`
3
3
  `)}\n`}}function createLiveWrapper(e,t,n){if(e.isReference)return`(...__args) => ${t}(${n}, ...__args)`;let r=e.isAsync?`async `:``;return e.isGenerator?`${r}function* (...__args) { yield* ${t}(${n}, ...__args); }`:`${r}(...__args) => ${e.isAsync?`await `:``}${t}(${n}, ...__args)`}function dedupeShadowed(e){let t=new Set,n=[];for(let r=e.length-1;r>=0;r--){let i=e[r];t.has(i)||(t.add(i),n.unshift(i))}return n}function collectScopeVarDeclarations(e){let t=[];return walkNode(e,n=>n!==e&&isFunction(n)?!1:(n.type===`VariableDeclarator`&&collectPatternNames(n.id,t),n.type===`FunctionDeclaration`&&n.id?.name&&t.push(n.id.name),!0)),t}function extractFnParams(e,t){if(!t.params||t.params.length===0)return``;let n=t.params[0],r=t.params[t.params.length-1];return n.start===void 0||r.end===void 0?``:e.slice(n.start,r.end)}function extractFnBody(e,t){let n=t.body;if(!n||n.start===void 0||n.end===void 0)return`{}`;let r=e.slice(n.start,n.end);return t.type===`ArrowFunctionExpression`&&n.type!==`BlockStatement`?`{ return ${r}; }`:r}export{transformDynamicToolExecute};
@@ -1,4 +1,4 @@
1
- import{parseInputResponse}from"#shared/input.js";import{SLACK_SECTION_TEXT_MAX_LENGTH,truncateCardBodyText,truncateModalTitle,truncatePlainText,truncateSectionText}from"#public/channels/slack/limits.js";const HITL_ACTION_PREFIX=`eve_input:`,HITL_FREEFORM_ACTION_PREFIX=`eve_input_freeform:`,HITL_FREEFORM_MODAL_CALLBACK_ID=`eve_input_freeform_submit`,HITL_FREEFORM_MODAL_BLOCK_ID=`eve_freeform_block`,HITL_FREEFORM_MODAL_ACTION_ID=`eve_freeform_text`,HITL_ROUTE_PREFIX=`${HITL_ACTION_PREFIX}route:`,BUTTON_ACTION_ID_RE=/^(?:(?<kind>tool-approval):)?(?<requestId>.+):button:\d+$/u,TOOL_INPUT_SUFFIX="\n```",deriveHitlResponse=e=>decodeHitlResponse(e);function decodeHitlResponse(e){let t=decodeHitlActionId(e.actionId);if(t===null)return null;let n=e.selectedOptionValue??e.value;if(n===void 0||e.value!==void 0&&!t.button)return null;let r={response:parseInputResponse({optionId:n,requestId:t.requestId})};return t.kind!==void 0&&(r.kind=t.kind),t.route!==void 0&&(r.route=t.route),r}function splitEncodedRequest(e){return e.startsWith(`tool-approval:`)?{kind:`tool-approval`,requestId:e.slice(14)}:{requestId:e}}function isHitlAction(e){return e.startsWith(HITL_ACTION_PREFIX)}function decodeHitlActionId(e){if(!e.startsWith(`eve_input:`))return null;let t=e.slice(10),n;if(t.startsWith(`route:`)){t=t.slice(6);let e=t.indexOf(`:`),r=t.indexOf(`:`,e+1);if(e<=0||r<=e+1)return null;n={channelId:t.slice(0,e),threadTs:t.slice(e+1,r)},t=t.slice(r+1)}let r=BUTTON_ACTION_ID_RE.exec(t),i=splitEncodedRequest(r?.groups?.requestId??t);if(!i.requestId)return null;let a=r?.groups?.kind===`tool-approval`?`tool-approval`:i.kind,o={button:r!==null,requestId:i.requestId};return a!==void 0&&(o.kind=a),n!==void 0&&(o.route=n),o}function encodeHitlActionId(e,t){let n=`${e.kind===`tool-approval`?`tool-approval:`:``}${e.requestId}`;return t===void 0?`${HITL_ACTION_PREFIX}${n}`:`${HITL_ROUTE_PREFIX}${t.channelId}:${t.threadTs}:${n}`}function renderInputRequestBlocks(e,t){let n={text:{text:truncateSectionText(e.prompt),type:`mrkdwn`},type:`section`},r=renderInputRequestDetailBlocks(e),i=encodeHitlActionId(e,t),a=e.options,o=e.allowFreeform===!0||!a||a.length===0;if(a&&a.length>0&&e.display===`select`){let e=a.length<=6?{type:`radio_buttons`,action_id:i,options:a.map(buildOption)}:{type:`static_select`,action_id:i,options:a.map(buildOption),placeholder:{type:`plain_text`,text:`Choose an option`}};return[n,...r,{type:`actions`,elements:[e]}]}if(a&&a.length>0){let t=renderInputRequestCardBlock(e,i),n=renderToolInputContainerBlock(e);return n===void 0?[t]:[t,n]}if(o){let t=i.replace(HITL_ACTION_PREFIX,HITL_FREEFORM_ACTION_PREFIX);return[n,...r,{type:`actions`,elements:[{type:`button`,action_id:t,text:{type:`plain_text`,text:`Type your answer`},style:`primary`,value:e.requestId}]}]}return[n]}function renderInputRequestPostParts(e,t){let n=renderInputRequestBlocks(e,t),r=n[0];return!isApprovalRequest(e)||!isBlockType(r,`card`)||n.length===1?{controls:{blocks:n,text:formatInputRequestFallbackText(e)}}:{controls:{blocks:[r],text:e.prompt},details:{blocks:n.slice(1),text:formatInputRequestFallbackText(e)}}}function formatInputRequestFallbackText(e){let t=formatToolInputDetails(e);return t===void 0?e.prompt:`${e.prompt}\n${t}`}function buildFreeformModalView(e){let t=e.prompt?truncateModalTitle(e.prompt):`Your answer`,n=e.prompt?[{type:`section`,text:{type:`mrkdwn`,text:truncateSectionText(e.prompt)}}]:[];return{type:`modal`,callback_id:HITL_FREEFORM_MODAL_CALLBACK_ID,private_metadata:JSON.stringify(e.metadata),title:{type:`plain_text`,text:t},submit:{type:`plain_text`,text:`Submit`},close:{type:`plain_text`,text:`Cancel`},blocks:[...n,{type:`input`,block_id:HITL_FREEFORM_MODAL_BLOCK_ID,element:{type:`plain_text_input`,action_id:HITL_FREEFORM_MODAL_ACTION_ID,multiline:!0,placeholder:{type:`plain_text`,text:`Type your answer here...`}},label:{type:`plain_text`,text:`Answer`}}]}}function isFreeformAction(e){return e.startsWith(HITL_FREEFORM_ACTION_PREFIX)}function decodeFreeformHitlActionId(e){return isFreeformAction(e)?decodeHitlActionId(`${HITL_ACTION_PREFIX}${e.slice(19)}`):null}function buildCardButton(e,t,n){let r={type:`button`,text:{type:`plain_text`,text:truncatePlainText(e.label),emoji:!1},action_id:`${t}:button:${n}`,value:e.id};return(e.style===`primary`||e.style===`danger`)&&(r.style=e.style),r}function buildOption(e){let t={text:{text:truncatePlainText(e.label),type:`plain_text`},value:e.id},n=truncatePlainText(e.description);return n&&n.length>0&&(t.description={text:n,type:`plain_text`}),t}function renderInputRequestCardBlock(e,t){let n={type:`card`,body:{type:`mrkdwn`,text:truncateCardBodyText(`*${e.prompt}*`),verbatim:!1},actions:cardButtonOptions(e).map((e,n)=>buildCardButton(e,t,n))};return isApprovalRequest(e)&&(n.subtext={type:`mrkdwn`,text:`I've paused until someone approves or cancels.`}),n}function cardButtonOptions(e){let t=e.options??[];if(!isApprovalRequest(e))return t.map(toCardButtonOption);let n=t.find(e=>e.id===`approve`),r=t.find(e=>e.id===`cancel`);return!n||!r?t.map(toCardButtonOption):[{id:r.id,label:`Cancel`},{id:n.id,label:`Approve`,style:`primary`}]}function toCardButtonOption(e){let t={id:e.id,label:e.label};return e.style===`primary`||e.style===`danger`?{...t,style:e.style}:t}function buildAnsweredBlocks(e){let t=[];for(let n of e.promptBlocks)n!=null&&t.push(n);let n=truncateWithEllipsis(e.answerLabel,SLACK_SECTION_TEXT_MAX_LENGTH-20-1);return t.push({type:`section`,text:{type:`mrkdwn`,text:`:white_check_mark: *${n}*`}}),e.userId&&e.userId.length>0&&t.push({type:`context`,elements:[{type:`mrkdwn`,text:`Answered by <@${e.userId}>`}]}),t}function renderInputRequestDetailBlocks(e){let t=formatToolInputDetails(e);return t===void 0?[]:[{type:`section`,text:{type:`mrkdwn`,text:t}}]}function renderToolInputContainerBlock(e){let t=formatToolInputContainerText(e);if(t!==void 0)return{type:`container`,title:{type:`plain_text`,text:`Tool input`},is_collapsible:!0,default_collapsed:!1,child_blocks:[{type:`section`,text:{type:`mrkdwn`,text:t}}]}}function formatToolInputContainerText(e){if(!isApprovalRequest(e))return;let t=JSON.stringify(e.action.input,null,2);return t===`{}`?void 0:`\`\`\`
1
+ import{parseInputResponse}from"#shared/input.js";import{SLACK_SECTION_TEXT_MAX_LENGTH,truncateCardBodyText,truncateModalTitle,truncatePlainText,truncateSectionText}from"#public/channels/slack/limits.js";const HITL_ACTION_PREFIX=`eve_input:`,HITL_FREEFORM_ACTION_PREFIX=`eve_input_freeform:`,HITL_FREEFORM_MODAL_CALLBACK_ID=`eve_input_freeform_submit`,HITL_FREEFORM_MODAL_BLOCK_ID=`eve_freeform_block`,HITL_FREEFORM_MODAL_ACTION_ID=`eve_freeform_text`,HITL_ROUTE_PREFIX=`${HITL_ACTION_PREFIX}route:`,BUTTON_ACTION_ID_RE=/^(?:(?<kind>tool-approval):)?(?<requestId>.+):button:\d+$/u,TOOL_INPUT_SUFFIX="\n```",deriveHitlResponse=e=>decodeHitlResponse(e);function decodeHitlResponse(e){let t=decodeHitlActionId(e.actionId);if(t===null)return null;let n=e.selectedOptionValue??e.value;if(n===void 0||e.value!==void 0&&!t.button)return null;let r={response:parseInputResponse({optionId:n,requestId:t.requestId})};return t.kind!==void 0&&(r.kind=t.kind),t.route!==void 0&&(r.route=t.route),r}function splitEncodedRequest(e){return e.startsWith(`tool-approval:`)?{kind:`tool-approval`,requestId:e.slice(14)}:{requestId:e}}function isHitlAction(e){return e.startsWith(HITL_ACTION_PREFIX)}function decodeHitlActionId(e){if(!e.startsWith(`eve_input:`))return null;let t=e.slice(10),n;if(t.startsWith(`route:`)){t=t.slice(6);let e=t.indexOf(`:`),r=t.indexOf(`:`,e+1);if(e<=0||r<=e+1)return null;n={channelId:t.slice(0,e),threadTs:t.slice(e+1,r)},t=t.slice(r+1)}let r=BUTTON_ACTION_ID_RE.exec(t),i=splitEncodedRequest(r?.groups?.requestId??t);if(!i.requestId)return null;let a=r?.groups?.kind===`tool-approval`?`tool-approval`:i.kind,o={button:r!==null,requestId:i.requestId};return a!==void 0&&(o.kind=a),n!==void 0&&(o.route=n),o}function encodeHitlActionId(e,t){let n=`${e.kind===`tool-approval`?`tool-approval:`:``}${e.requestId}`;return t===void 0?`${HITL_ACTION_PREFIX}${n}`:`${HITL_ROUTE_PREFIX}${t.channelId}:${t.threadTs}:${n}`}function renderInputRequestBlocks(e,t){let n={text:{text:truncateSectionText(e.prompt),type:`mrkdwn`},type:`section`},r=renderInputRequestDetailBlocks(e),i=encodeHitlActionId(e,t),a=e.options,o=e.allowFreeform===!0||!a||a.length===0;if(a&&a.length>0&&e.display===`select`){let e=a.length<=6?{type:`radio_buttons`,action_id:i,options:a.map(buildOption)}:{type:`static_select`,action_id:i,options:a.map(buildOption),placeholder:{type:`plain_text`,text:`Choose an option`}};return[n,...r,{type:`actions`,elements:[e]}]}if(a&&a.length>0){let t=renderInputRequestCardBlock(e,i),n=renderToolInputContainerBlock(e);return n===void 0?[t]:[t,n]}if(o){let t=i.replace(HITL_ACTION_PREFIX,HITL_FREEFORM_ACTION_PREFIX);return[n,...r,{type:`actions`,elements:[{type:`button`,action_id:t,text:{type:`plain_text`,text:`Type your answer`},style:`primary`,value:e.requestId}]}]}return[n]}function renderInputRequestPostParts(e,t){let n=renderInputRequestBlocks(e,t),r=n[0];return!isApprovalRequest(e)||!isBlockType(r,`card`)||n.length===1?{controls:{blocks:n,text:formatInputRequestFallbackText(e)}}:{controls:{blocks:[r],text:e.prompt},details:{blocks:n.slice(1),text:formatInputRequestFallbackText(e)}}}function formatInputRequestFallbackText(e){let t=formatToolInputDetails(e);return t===void 0?e.prompt:`${e.prompt}\n${t}`}function buildFreeformModalView(e){let t=e.prompt?truncateModalTitle(e.prompt):`Your answer`,n=e.prompt?[{type:`section`,text:{type:`mrkdwn`,text:truncateSectionText(e.prompt)}}]:[];return{type:`modal`,callback_id:HITL_FREEFORM_MODAL_CALLBACK_ID,private_metadata:JSON.stringify(e.metadata),title:{type:`plain_text`,text:t},submit:{type:`plain_text`,text:`Submit`},close:{type:`plain_text`,text:`Cancel`},blocks:[...n,{type:`input`,block_id:HITL_FREEFORM_MODAL_BLOCK_ID,element:{type:`plain_text_input`,action_id:HITL_FREEFORM_MODAL_ACTION_ID,multiline:!0,placeholder:{type:`plain_text`,text:`Type your answer here...`}},label:{type:`plain_text`,text:`Answer`}}]}}function isFreeformAction(e){return e.startsWith(HITL_FREEFORM_ACTION_PREFIX)}function decodeFreeformHitlActionId(e){return isFreeformAction(e)?decodeHitlActionId(`${HITL_ACTION_PREFIX}${e.slice(19)}`):null}function buildCardButton(e,t,n){let r={type:`button`,text:{type:`plain_text`,text:truncatePlainText(e.label),emoji:!1},action_id:`${t}:button:${n}`,value:e.id};return(e.style===`primary`||e.style===`danger`)&&(r.style=e.style),r}function buildOption(e){let t={text:{text:truncatePlainText(e.label),type:`plain_text`},value:e.id},n=truncatePlainText(e.description);return n&&n.length>0&&(t.description={text:n,type:`plain_text`}),t}function renderInputRequestCardBlock(e,t){let n={type:`card`,body:{type:`mrkdwn`,text:truncateCardBodyText(`*${e.prompt}*`),verbatim:!1},actions:cardButtonOptions(e).map((e,n)=>buildCardButton(e,t,n))};return isApprovalRequest(e)&&(n.subtext={type:`mrkdwn`,text:`I've paused until someone approves or cancels.`}),n}function cardButtonOptions(e){let t=e.options??[];if(!isApprovalRequest(e))return t.map(toCardButtonOption);let n=t.find(e=>e.id===`approve`),r=t.find(e=>e.id===`cancel`);return!n||!r?t.map(toCardButtonOption):[{id:r.id,label:`Cancel`},{id:n.id,label:`Approve`,style:`primary`}]}function toCardButtonOption(e){let t={id:e.id,label:e.label};return e.style===`primary`||e.style===`danger`?{...t,style:e.style}:t}function buildAnsweredBlocks(e){let t=[];for(let n of e.promptBlocks)n!=null&&t.push(n);let n=truncateWithEllipsis(e.answerLabel,SLACK_SECTION_TEXT_MAX_LENGTH-20-1);return t.push({type:`section`,text:{type:`mrkdwn`,text:`:white_check_mark: *${n}*`}}),e.userId&&e.userId.length>0&&t.push({type:`context`,elements:[{type:`mrkdwn`,text:`Answered by <@${e.userId}>`}]}),t}function renderInputRequestDetailBlocks(e){let t=formatToolInputDetails(e);return t===void 0?[]:[{type:`section`,text:{type:`mrkdwn`,text:t}}]}function renderToolInputContainerBlock(e){let t=formatToolInputContainerText(e);if(t!==void 0)return{type:`container`,title:{type:`plain_text`,text:`Tool input`},is_collapsible:!0,default_collapsed:!0,child_blocks:[{type:`section`,text:{type:`mrkdwn`,text:t}}]}}function formatToolInputContainerText(e){if(!isApprovalRequest(e))return;let t=JSON.stringify(e.action.input,null,2);return t===`{}`?void 0:`\`\`\`
2
2
  ${truncateWithEllipsis(t,SLACK_SECTION_TEXT_MAX_LENGTH-4-4)}${TOOL_INPUT_SUFFIX}`}function formatToolInputDetails(e){if(!isApprovalRequest(e))return;let t=JSON.stringify(e.action.input,null,2);return t===`{}`?void 0:`*Tool input*
3
3
  \`\`\`
4
4
  ${truncateWithEllipsis(t,SLACK_SECTION_TEXT_MAX_LENGTH-17-4)}${TOOL_INPUT_SUFFIX}`}function truncateWithEllipsis(e,t){if(e.length<=t)return e;let n=Math.max(0,t-3);return`${e.slice(0,n).trimEnd()}...`}function isBlockType(e,t){return typeof e==`object`&&!!e&&e.type===t}function isApprovalRequest(e){return e.kind===`tool-approval`}export{HITL_ACTION_PREFIX,HITL_FREEFORM_ACTION_PREFIX,HITL_FREEFORM_MODAL_ACTION_ID,HITL_FREEFORM_MODAL_BLOCK_ID,HITL_FREEFORM_MODAL_CALLBACK_ID,buildAnsweredBlocks,buildFreeformModalView,decodeFreeformHitlActionId,decodeHitlActionId,decodeHitlResponse,deriveHitlResponse,formatInputRequestFallbackText,isFreeformAction,isHitlAction,renderInputRequestBlocks,renderInputRequestPostParts};
@@ -1,2 +1,2 @@
1
- export type { Approval, ApprovalConfiguration, ApprovalContext, ApprovalPolicy, ApprovalRequest, ApprovalResponse, ApprovalResponseAuth, ApprovalResponseContext, ApprovalResponseDecision, ApprovalResponsePolicy, ApprovalResponseSession, ApprovalStatus, } from "#approval/definition.js";
1
+ export type { Approval, ApprovalConfiguration, ApprovalContext, ApprovalPolicy, ApprovalPrompt, ApprovalPromptContext, ApprovalRequest, ApprovalResponse, ApprovalResponseAuth, ApprovalResponseContext, ApprovalResponseDecision, ApprovalResponsePolicy, ApprovalResponseSession, ApprovalStatus, ConnectionToolAnnotations, ToolApproval, ToolApprovalConfiguration, } from "#approval/definition.js";
2
2
  export { resolveApprovalPolicy } from "#approval/definition.js";
@@ -7,8 +7,8 @@
7
7
  *
8
8
  * Each destination is declared in its own path-named provider file.
9
9
  */
10
- import { type ManagedTraceOptions, type OtelIntegration } from "#tracing/otel-declaration.js";
11
- export { isOtelDeclaration, isOtelIntegration, otel, otelIntegration, type OtelDeclaration, type OtelIntegration, type OtelIntegrationOptions, type OtelOptions, type ManagedTraceOptions, type SpanAttributeDecision, type SpanExportAttributeValue, type SpanExportContext, type SpanExportDecision, type SpanExportPolicy, type TraceCaptureContext, type TraceCapturePolicy, type TracePolicyDecision, } from "#tracing/otel-declaration.js";
10
+ import { type ManagedTraceOptions, type OtelIntegration } from "#tracing/eve/otel-declaration.js";
11
+ export { isOtelDeclaration, isOtelIntegration, otel, otelIntegration, type OtelDeclaration, type OtelIntegration, type OtelIntegrationOptions, type OtelOptions, type ManagedTraceOptions, type SpanAttributeDecision, type SpanExportAttributeValue, type SpanExportContext, type SpanExportDecision, type SpanExportPolicy, type TraceCaptureContext, type TraceCapturePolicy, type TracePolicyDecision, } from "#tracing/eve/otel-declaration.js";
12
12
  export type { SpanExporter, SpanProcessor } from "#compiled/@vercel/otel/index.js";
13
13
  /**
14
14
  * Vercel Agent Runs, enabled by default in preview and production deployments.
@@ -1 +1 @@
1
- import{agentRunsIntegration,isOtelDeclaration,isOtelIntegration,managedOtelIntegration,otel,otelIntegration}from"#tracing/otel-declaration.js";import{createLocalTracesProcessor,resolveLocalTracesExportPolicy}from"#tracing/local-traces.js";function agentRuns(e={}){return agentRunsIntegration(e)}function localTraces(e={}){return managedOtelIntegration({...e,exportPolicy:resolveLocalTracesExportPolicy(e.exportPolicy),spanProcessors:[createLocalTracesProcessor()]})}export{agentRuns,isOtelDeclaration,isOtelIntegration,localTraces,otel,otelIntegration};
1
+ import{agentRunsIntegration,isOtelDeclaration,isOtelIntegration,managedOtelIntegration,otel,otelIntegration}from"#tracing/eve/otel-declaration.js";import{createLocalTracesProcessor,resolveLocalTracesExportPolicy}from"#tracing/local/traces.js";function agentRuns(e={}){return agentRunsIntegration(e)}function localTraces(e={}){return managedOtelIntegration({...e,exportPolicy:resolveLocalTracesExportPolicy(e.exportPolicy),spanProcessors:[createLocalTracesProcessor()]})}export{agentRuns,isOtelDeclaration,isOtelIntegration,localTraces,otel,otelIntegration};
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Per-tool approval helpers used inside `agent/tools/*.ts` files.
3
3
  */
4
- export type { Approval, ApprovalConfiguration, ApprovalContext, ApprovalPolicy, ApprovalRequest, ApprovalResponse, ApprovalResponseAuth, ApprovalResponseContext, ApprovalResponseDecision, ApprovalResponsePolicy, ApprovalResponseSession, ApprovalStatus, } from "#public/definitions/approval.js";
4
+ export type { Approval, ApprovalConfiguration, ApprovalContext, ApprovalPolicy, ApprovalPrompt, ApprovalPromptContext, ApprovalRequest, ApprovalResponse, ApprovalResponseAuth, ApprovalResponseContext, ApprovalResponseDecision, ApprovalResponsePolicy, ApprovalResponseSession, ApprovalStatus, ConnectionToolAnnotations, ToolApproval, ToolApprovalConfiguration, } from "#public/definitions/approval.js";
5
5
  export type { AutoApprovalOptions } from "#tools/approval/policies.js";
6
6
  export { always, auto, never, once } from "#tools/approval/policies.js";
@@ -1,22 +1,14 @@
1
- import { type Context } from "#compiled/@opentelemetry/api/index.js";
2
- export declare function createMcpTraceFetch(input: {
3
- readonly connectionName: string;
4
- readonly fetcher?: typeof fetch;
5
- readonly getActiveContext?: () => Context;
6
- readonly getProtocolVersion: () => string | undefined;
7
- readonly injectContext?: McpTraceContextInjector;
8
- }): typeof fetch;
1
+ import { createMcpTraceFetch as traceFetch } from "#tracing/eve/mcp.js";
2
+ export declare function createMcpTraceFetch(input: Parameters<typeof traceFetch>[0]): typeof fetch;
9
3
  export declare function withMcpToolsListSpan<T>(input: {
10
- readonly connectionName: string;
11
- readonly execute: () => Promise<T>;
12
- readonly protocolVersion?: string;
4
+ connectionName: string;
5
+ protocolVersion?: string;
6
+ execute: () => Promise<T>;
13
7
  }): Promise<T>;
14
8
  export declare function withMcpToolCallSpan<T>(input: {
15
- readonly arguments: unknown;
16
- readonly connectionName: string;
17
- readonly execute: () => Promise<T>;
18
- readonly protocolVersion?: string;
19
- readonly toolName: string;
9
+ connectionName: string;
10
+ protocolVersion?: string;
11
+ toolName: string;
12
+ arguments: unknown;
13
+ execute: () => Promise<T>;
20
14
  }): Promise<T>;
21
- type McpTraceContextInjector = (context: Context, carrier: Record<string, string>) => void;
22
- export {};
@@ -1 +1 @@
1
- import{isObject}from"#shared/guards.js";import{replaceBaggageMember}from"#protocol/baggage.js";import{SpanKind,context,createContextKey,propagation,trace}from"#compiled/@opentelemetry/api/index.js";import{truncateTelemetryText}from"#tracing/telemetry-budget.js";import{contentAttribute}from"#tracing/agent-otel-content.js";import{recordAgentSpanError}from"#tracing/agent-span-error.js";import{agentToolContentPolicy,agentToolSpanContext,annotateAgentToolSpan,recordAgentToolSpanError,withAgentToolSpanContext}from"#tracing/agent-tool-span-context.js";const MAX_MCP_TRACE_REQUEST_BYTES=1048576,MAX_MCP_TRACE_CONTEXT_BYTES=8192,utf8Encoder=new TextEncoder,EVE_TRACE_BAGGAGE_KEYS=[`eve.audience`,`eve.conversation.id`,`eve.parent_session`],traceContextSetter={set(e,t,n){e[t]=n}},MCP_METHOD_NAME_CONTEXT_KEY=createContextKey(`eve.mcp.method-name`);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),l=o.method===`tools/call`||mcpMethodName(s)===o.method;l&&annotateAgentToolSpan(mcpRequestAttributes({connectionName:e.connectionName,message:o,params:isObject(o.params)?o.params:{},protocolVersion:headerValue(a?.headers,`mcp-protocol-version`)??e.getProtocolVersion()}),s);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&&annotateAgentToolSpan({"mcp.session.id":truncateTelemetryText(e,512)},s)}return u}}function injectMcpTraceContext(e,t,n=injectOpenTelemetryTraceContext){if(!withinTraceRequestLimit(JSON.stringify(e))||e.params!==void 0&&!isObject(e.params))return;let r={};if(n(t,r),!withinTraceContextLimit(r))return;stripEveTraceBaggage(r);let i=isObject(e.params)?e.params:{},a=isObject(i._meta)?i._meta:{};return{...e,params:{...i,_meta:{...a,...r}}}}async function withMcpToolsListSpan(e){let t=context.active(),n=mcpRequestAttributes({connectionName:e.connectionName,method:`tools/list`,protocolVersion:e.protocolVersion}),r=trace.getTracer(`eve.mcp`).startSpan(`tools/list`,{attributes:n,kind:SpanKind.CLIENT},t),i=withMcpMethodName(withAgentToolSpanContext(trace.setSpan(t,r),{...agentToolContentPolicy(t),recordError:(e,t)=>recordAgentSpanError(r,e,t),setAttributes:e=>setSpanAttributes(r,e)}),`tools/list`);try{return await context.with(i,async()=>{try{return await e.execute()}catch(e){let t=jsonRpcErrorCode(e);throw t!==void 0&&annotateAgentToolSpan({"rpc.response.status_code":t},i),recordAgentToolSpanError(e,errorType(e,t),i),e}})}finally{r.end()}}async function withMcpToolCallSpan(e){let t=context.active(),n=agentToolSpanContext(t),r=agentToolContentPolicy(t);if(n?.setAttributes!==void 0)return annotateAgentToolSpan(mcpToolCallAttributes(e),t),await runMcpToolCall(e,t,void 0,r);let i=trace.getTracer(`eve.mcp`).startSpan(`tools/call ${truncateTelemetryText(e.toolName,128)}`,{attributes:mcpToolCallAttributes(e),kind:SpanKind.CLIENT},t),a=withMcpMethodName(withAgentToolSpanContext(trace.setSpan(t,i),{...r,recordError:(e,t)=>recordAgentSpanError(i,e,t),setAttributes:e=>setSpanAttributes(i,e)}),`tools/call`);try{return await context.with(a,()=>runMcpToolCall(e,a,i,r))}finally{i.end()}}function runMcpToolCall(e,t,n,r){if(n!==void 0&&r.recordInputs){let t=contentAttribute(e.arguments);t!==void 0&&n.setAttribute(`gen_ai.tool.call.arguments`,t)}return e.execute().then(e=>{if(isToolErrorResult(e)&&recordAgentToolSpanError(void 0,`tool_error`,t),n!==void 0&&r.recordOutputs){let t=contentAttribute(e);t!==void 0&&n.setAttribute(`gen_ai.tool.call.result`,t)}return e}).catch(e=>{let r=jsonRpcErrorCode(e);throw r!==void 0&&annotateAgentToolSpan({"rpc.response.status_code":r},t),n!==void 0&&recordAgentToolSpanError(e,errorType(e,r),t),e})}function mcpToolCallAttributes(e){return mcpRequestAttributes({connectionName:e.connectionName,method:`tools/call`,protocolVersion:e.protocolVersion,toolName:e.toolName})}function mcpRequestAttributes(e){let t=e.method??e.message?.method,n=e.params??(isObject(e.message?.params)?e.message.params:{}),r={"eve.connection.name":e.connectionName,"mcp.method.name":t??`unknown`,"network.protocol.name":`http`,"network.transport":`tcp`},i=e.toolName??(typeof n.name==`string`?n.name:void 0);t===`tools/call`&&(r[`gen_ai.operation.name`]=`execute_tool`,i!==void 0&&(r[`gen_ai.tool.name`]=i));let a=e.message?.id;(typeof a==`number`||typeof a==`string`)&&(r[`jsonrpc.request.id`]=String(a));let o=n._meta,s=e.protocolVersion??(isObject(o)&&typeof o[`io.modelcontextprotocol/protocolVersion`]==`string`?o[`io.modelcontextprotocol/protocolVersion`]:void 0);return s!==void 0&&(r[`mcp.protocol.version`]=s),r}function injectOpenTelemetryTraceContext(e,t){propagation.inject(e,t,traceContextSetter)}function stripEveTraceBaggage(e){let t=e.baggage;if(t!==void 0){for(let e of EVE_TRACE_BAGGAGE_KEYS)t=replaceBaggageMember(t,e,void 0);t===void 0?delete e.baggage:e.baggage=t}}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}function setSpanAttributes(e,t){for(let[n,r]of Object.entries(t))r!==void 0&&e.setAttribute(n,r)}function withMcpMethodName(e,t){return e.setValue(MCP_METHOD_NAME_CONTEXT_KEY,t)}function mcpMethodName(e){let t=e.getValue(MCP_METHOD_NAME_CONTEXT_KEY);return typeof t==`string`?t:void 0}export{createMcpTraceFetch,withMcpToolCallSpan,withMcpToolsListSpan};
1
+ import{replaceBaggageMember}from"#protocol/baggage.js";import{createMcpTraceFetch as createMcpTraceFetch$1,createMcpTracing}from"#tracing/eve/mcp.js";function createMcpTraceFetch(e){return createMcpTraceFetch$1({...e,filterCarrier(e){let t=e.baggage;for(let e of[`eve.audience`,`eve.conversation.id`,`eve.parent_session`])t=replaceBaggageMember(t,e,void 0);t===void 0?delete e.baggage:e.baggage=t}})}function withMcpToolsListSpan(e){return createMcpTracing().list(e)}function withMcpToolCallSpan(e){return createMcpTracing().call(e)}export{createMcpTraceFetch,withMcpToolCallSpan,withMcpToolsListSpan};
@@ -1 +1 @@
1
- import{expectFunction,expectObjectRecord}from"#internal/authored-module.js";import{toErrorMessage}from"#shared/errors.js";import{isToolSchema,toInputSchema,toOutputSchema}from"#tools/schema.js";import{frameworkTool,isFrameworkTool}from"#tools/provided/framework-tool.js";import{registerDefinitionSource}from"#internal/authored-definition/source-identity.js";import{normalizeApproval}from"#internal/authored-definition/approval.js";import{createWorkflowProgramExecuteInput}from"#tools/workflow-program-input.js";import{ResolveAgentError,loadResolvedModuleExport}from"#runtime/resolve-helpers.js";async function resolveToolDefinition(e,t,n,r){if(!e.hasExecute){let t={availableInSubagents:e.availableInSubagents,behavior:e.behavior,deferred:e.deferred,description:e.description,inputSchema:toInputSchema(e.inputSchema),logicalPath:e.logicalPath,name:e.name,outputSchema:toOutputSchema(e.outputSchema),owner:r,sourceId:e.sourceId,sourceKind:`module`};return e.behavior?.handling?.kind===`provider-tool`?frameworkTool(t):t}try{let i=await loadResolvedModuleExport({definition:e,kindLabel:`tool`,moduleMap:t,nodeId:n}),a=expectObjectRecord(i,describe(e,`to return an object`));registerDefinitionSource(a,{kind:`tool`,logicalPath:e.logicalPath,name:e.name},`tool:${a.description}`);let o=e.behavior?.handling?.kind===`workflow-tool`?void 0:expectFunction(a.execute,describe(e,`to provide an execute function`)),s=isToolSchema(a.inputSchema)?a.inputSchema:toInputSchema(e.inputSchema),c=isToolSchema(a.outputSchema)?a.outputSchema:toOutputSchema(e.outputSchema),l=e.workflowProgram,u=l===void 0?void 0:e=>createWorkflowProgramExecuteInput(l,e),d={availableInSubagents:e.availableInSubagents,behavior:e.behavior,deferred:e.deferred,description:e.description,execute:o,executeInput:u,exportName:e.exportName,inputSchema:s,logicalPath:e.logicalPath,name:e.name,owner:r,outputSchema:c,sourceId:e.sourceId,sourceKind:`module`,...extractOptionalHooks(a,e)};return isFrameworkTool(a)?frameworkTool(d):d}catch(t){throw t instanceof ResolveAgentError?t:new ResolveAgentError(`Failed to attach the tool execute function from "${e.logicalPath}": ${toErrorMessage(t)}`,{logicalPath:e.logicalPath,sourceId:e.sourceId})}}function extractOptionalHooks(e,t){let n={};if(e.label!==void 0){let r=expectObjectRecord(e.label,describe(t,`to provide a valid label definition`));n.label={complete:r.complete===void 0?void 0:expectFunction(r.complete,describe(t,`to provide an label complete function`)),delta:r.delta===void 0?void 0:expectFunction(r.delta,describe(t,`to provide an label delta function`)),start:expectFunction(r.start,describe(t,`to provide a label start callback function`))}}return e.approval!==void 0&&(n.approval=normalizeApproval(e.approval,describe(t,`to provide a valid approval definition`))),e.approvalKey!==void 0&&(n.approvalKey=expectFunction(e.approvalKey,describe(t,`to provide an approvalKey function`))),e.endsTurn!==void 0&&(n.endsTurn=typeof e.endsTurn==`boolean`?e.endsTurn:expectFunction(e.endsTurn,describe(t,`to provide endsTurn as a boolean or a function`))),e.toModelOutput!==void 0&&(n.toModelOutput=expectFunction(e.toModelOutput,describe(t,`to provide a toModelOutput function`))),n}function describe(e,t){return`Expected the tool export "${e.exportName??`default`}" from "${e.logicalPath}" ${t}.`}export{resolveToolDefinition};
1
+ import{expectFunction,expectObjectRecord}from"#internal/authored-module.js";import{toErrorMessage}from"#shared/errors.js";import{isToolSchema,toInputSchema,toOutputSchema}from"#tools/schema.js";import{frameworkTool,isFrameworkTool}from"#tools/provided/framework-tool.js";import{registerDefinitionSource}from"#internal/authored-definition/source-identity.js";import{normalizeToolApproval}from"#internal/authored-definition/approval.js";import{createWorkflowProgramExecuteInput}from"#tools/workflow-program-input.js";import{ResolveAgentError,loadResolvedModuleExport}from"#runtime/resolve-helpers.js";async function resolveToolDefinition(e,t,n,r){if(!e.hasExecute){let t={availableInSubagents:e.availableInSubagents,behavior:e.behavior,deferred:e.deferred,description:e.description,inputSchema:toInputSchema(e.inputSchema),logicalPath:e.logicalPath,name:e.name,outputSchema:toOutputSchema(e.outputSchema),owner:r,sourceId:e.sourceId,sourceKind:`module`};return e.behavior?.handling?.kind===`provider-tool`?frameworkTool(t):t}try{let i=await loadResolvedModuleExport({definition:e,kindLabel:`tool`,moduleMap:t,nodeId:n}),a=expectObjectRecord(i,describe(e,`to return an object`));registerDefinitionSource(a,{kind:`tool`,logicalPath:e.logicalPath,name:e.name},`tool:${a.description}`);let o=e.behavior?.handling?.kind===`workflow-tool`?void 0:expectFunction(a.execute,describe(e,`to provide an execute function`)),s=isToolSchema(a.inputSchema)?a.inputSchema:toInputSchema(e.inputSchema),c=isToolSchema(a.outputSchema)?a.outputSchema:toOutputSchema(e.outputSchema),l=e.workflowProgram,u=l===void 0?void 0:e=>createWorkflowProgramExecuteInput(l,e),d={availableInSubagents:e.availableInSubagents,behavior:e.behavior,deferred:e.deferred,description:e.description,execute:o,executeInput:u,exportName:e.exportName,inputSchema:s,logicalPath:e.logicalPath,name:e.name,owner:r,outputSchema:c,sourceId:e.sourceId,sourceKind:`module`,...extractOptionalHooks(a,e)};return isFrameworkTool(a)?frameworkTool(d):d}catch(t){throw t instanceof ResolveAgentError?t:new ResolveAgentError(`Failed to attach the tool execute function from "${e.logicalPath}": ${toErrorMessage(t)}`,{logicalPath:e.logicalPath,sourceId:e.sourceId})}}function extractOptionalHooks(e,t){let n={};if(e.label!==void 0){let r=expectObjectRecord(e.label,describe(t,`to provide a valid label definition`));n.label={complete:r.complete===void 0?void 0:expectFunction(r.complete,describe(t,`to provide an label complete function`)),delta:r.delta===void 0?void 0:expectFunction(r.delta,describe(t,`to provide an label delta function`)),start:expectFunction(r.start,describe(t,`to provide a label start callback function`))}}return e.approval!==void 0&&(n.approval=normalizeToolApproval(e.approval,describe(t,`to provide a valid approval definition`))),e.approvalKey!==void 0&&(n.approvalKey=expectFunction(e.approvalKey,describe(t,`to provide an approvalKey function`))),e.endsTurn!==void 0&&(n.endsTurn=typeof e.endsTurn==`boolean`?e.endsTurn:expectFunction(e.endsTurn,describe(t,`to provide endsTurn as a boolean or a function`))),e.toModelOutput!==void 0&&(n.toModelOutput=expectFunction(e.toModelOutput,describe(t,`to provide a toModelOutput function`))),n}function describe(e,t){return`Expected the tool export "${e.exportName??`default`}" from "${e.logicalPath}" ${t}.`}export{resolveToolDefinition};
@@ -8,7 +8,7 @@ import type { ChannelRouteMethod, RouteContext } from "#public/definitions/chann
8
8
  import type { RouteHandler, WebSocketRouteHandler } from "#channel/routes.js";
9
9
  import type { OutboundAuthFn } from "#public/agents/auth.js";
10
10
  import type { StreamEventHook } from "#public/definitions/hook.js";
11
- import type { Approval } from "#approval/definition.js";
11
+ import type { Approval, ToolApproval } from "#approval/definition.js";
12
12
  import type { ToolModelOutput } from "#tools/definition.js";
13
13
  import type { ConnectionToolCallDefinition } from "#public/definitions/connections/tool-call.js";
14
14
  import type { AuthorizationDefinition, ConnectionAuthResolver, ConnectionProtocol, HeadersDefinition, ToolFilterDefinition } from "#shared/connection-types.js";
@@ -144,7 +144,7 @@ export type ResolvedToolDefinition = Readonly<Omit<Optional<InternalToolDefiniti
144
144
  * approval is required before executing this tool. See
145
145
  * {@link Approval} for the shared callback contract.
146
146
  */
147
- readonly approval?: Approval;
147
+ readonly approval?: ToolApproval;
148
148
  /**
149
149
  * Optional function that derives a compound approval key from the tool
150
150
  * input. When present, the runtime records this key (instead of just