eve 0.47.3 → 0.47.6

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 (456) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/NOTICE +72 -0
  3. package/bin/eve.js +4 -0
  4. package/dist/src/cli/dev/tui/traces/trace-conversation.js +1 -1
  5. package/dist/src/cli/dev/tui/vercel-trusted-sources.js +1 -1
  6. package/dist/src/cli/invoke/result.d.ts +1 -1
  7. package/dist/src/compiled/.vendor-stamp.json +5 -5
  8. package/dist/src/compiled/@agentclientprotocol/sdk/index.js +29 -43
  9. package/dist/src/compiled/@ai-sdk/anthropic/index.js +4 -4
  10. package/dist/src/compiled/@ai-sdk/code-mode/LICENSE +13 -0
  11. package/dist/src/compiled/@ai-sdk/code-mode/_run.d.ts +1 -0
  12. package/dist/src/compiled/@ai-sdk/code-mode/index.d.ts +300 -0
  13. package/dist/src/compiled/@ai-sdk/code-mode/index.js +663 -0
  14. package/dist/src/compiled/@ai-sdk/google/index.js +6 -6
  15. package/dist/src/compiled/@ai-sdk/mcp/index.js +1 -1
  16. package/dist/src/compiled/@ai-sdk/openai/index.js +8 -8
  17. package/dist/src/compiled/@ai-sdk/provider/index.d.ts +6 -0
  18. package/dist/src/compiled/@ai-sdk/provider-utils/index.d.ts +50 -2
  19. package/dist/src/compiled/@modelcontextprotocol/server/index.js +36 -50
  20. package/dist/src/compiled/@opentelemetry/api/index.d.ts +37 -0
  21. package/dist/src/compiled/@photon-ai/chat-adapter-imessage/index.js +55 -55
  22. package/dist/src/compiled/@vercel/otel/index.d.ts +11 -0
  23. package/dist/src/compiled/@vercel/sandbox/index.js +3 -3
  24. package/dist/src/compiled/@vercel/sandbox-delete/index.js +3 -3
  25. package/dist/src/compiled/_chunks/client/errors-BLhNglBt.js +2 -0
  26. package/dist/src/compiled/_chunks/node/auth-BSKyPAEP.js +2 -0
  27. package/dist/src/compiled/_chunks/node/auth-YpKlwhP1.js +2 -0
  28. package/dist/src/compiled/_chunks/node/schemas-cFtr4EoN.js +50 -0
  29. package/dist/src/compiled/_chunks/node/xdg-app-paths-Buj3-Svl.js +1 -0
  30. package/dist/src/compiled/_chunks/workflow/dist-Cz-ffHKC.js +65 -0
  31. package/dist/src/compiled/zod/index.js +32 -45
  32. package/dist/src/compiled/zod-validation-error/index.js +1 -1
  33. package/dist/src/compiler/extension-compatibility.d.ts +7 -5
  34. package/dist/src/compiler/extension-compatibility.js +1 -1
  35. package/dist/src/compiler/manifest.d.ts +14 -2
  36. package/dist/src/compiler/manifest.js +1 -1
  37. package/dist/src/compiler/normalize-connection.d.ts +9 -2
  38. package/dist/src/compiler/normalize-connection.js +1 -1
  39. package/dist/src/compiler/normalize-manifest.js +1 -1
  40. package/dist/src/compiler/validate-artifact.js +1 -1
  41. package/dist/src/context/dynamic-connection-lifecycle.d.ts +9 -0
  42. package/dist/src/context/dynamic-connection-lifecycle.js +1 -0
  43. package/dist/src/context/keys.d.ts +3 -1
  44. package/dist/src/context/memory-tools.js +1 -1
  45. package/dist/src/context/providers/connection.js +1 -1
  46. package/dist/src/dynamic/definition.d.ts +6 -3
  47. package/dist/src/dynamic/definition.js +1 -1
  48. package/dist/src/execution/authorization-callback-match.js +1 -1
  49. package/dist/src/execution/cancelled-turn-message.d.ts +2 -0
  50. package/dist/src/execution/cancelled-turn-message.js +1 -0
  51. package/dist/src/execution/dispatch-workflow-runtime-actions-step.js +1 -1
  52. package/dist/src/execution/dynamic-connections.d.ts +9 -0
  53. package/dist/src/execution/dynamic-connections.js +1 -0
  54. package/dist/src/execution/eve-workflow-attributes.js +1 -1
  55. package/dist/src/execution/node-step.d.ts +2 -0
  56. package/dist/src/execution/node-step.js +1 -1
  57. package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
  58. package/dist/src/execution/tasks/parent/tool-execution.js +1 -1
  59. package/dist/src/execution/tools/connection-search.js +2 -2
  60. package/dist/src/execution/tools/load-skill.js +1 -1
  61. package/dist/src/execution/tools/subagent/local.js +1 -1
  62. package/dist/src/execution/turn-workflow.js +1 -1
  63. package/dist/src/execution/workflow-runtime.js +1 -1
  64. package/dist/src/execution/workflow-steps.js +1 -1
  65. package/dist/src/execution/workflow-trace-context.d.ts +3 -6
  66. package/dist/src/execution/workflow-trace-context.js +1 -1
  67. package/dist/src/harness/advertised-tools.d.ts +0 -5
  68. package/dist/src/harness/advertised-tools.js +1 -1
  69. package/dist/src/harness/authorization.d.ts +11 -4
  70. package/dist/src/harness/authorization.js +1 -1
  71. package/dist/src/harness/inline-tool-authorization.d.ts +13 -1
  72. package/dist/src/harness/inline-tool-authorization.js +1 -1
  73. package/dist/src/harness/input-extraction.js +1 -1
  74. package/dist/src/harness/model-call-error.js +1 -1
  75. package/dist/src/harness/semantic-errors/rule.d.ts +5 -2
  76. package/dist/src/harness/semantic-errors/rules/gateway.js +1 -1
  77. package/dist/src/harness/tool-loop.js +2 -2
  78. package/dist/src/harness/turn-tag-state.d.ts +1 -1
  79. package/dist/src/harness/types.d.ts +2 -2
  80. package/dist/src/harness/workflow-interrupt-state.d.ts +6 -0
  81. package/dist/src/harness/workflow-interrupt-state.js +1 -1
  82. package/dist/src/harness/workflow-lifecycle.d.ts +15 -5
  83. package/dist/src/harness/workflow-lifecycle.js +1 -1
  84. package/dist/src/harness/workflow-runtime-action-state.d.ts +2 -2
  85. package/dist/src/harness/workflow-runtime-action-state.js +1 -1
  86. package/dist/src/harness/workflow-sandbox.d.ts +1 -2
  87. package/dist/src/harness/workflow-sandbox.js +1 -1
  88. package/dist/src/harness/workflow-subagent-limit.d.ts +3 -13
  89. package/dist/src/harness/workflow-subagent-limit.js +1 -1
  90. package/dist/src/{harness → instrumentation}/ai-sdk-hook-bridge.d.ts +1 -1
  91. package/dist/src/instrumentation/ai-sdk-hook-bridge.js +1 -0
  92. package/dist/src/{harness/channel-delivery-instrumentation.d.ts → instrumentation/channel-delivery.d.ts} +5 -7
  93. package/dist/src/instrumentation/channel-delivery.js +1 -0
  94. package/dist/src/{harness/instrumentation → instrumentation}/config.d.ts +0 -10
  95. package/dist/src/instrumentation/config.js +1 -0
  96. package/dist/src/{harness/instrumentation → instrumentation}/content-policy.d.ts +1 -1
  97. package/dist/src/instrumentation/content-policy.js +1 -0
  98. package/dist/src/{harness/instrumentation → instrumentation}/content.d.ts +1 -1
  99. package/dist/src/{harness/instrumentation → instrumentation}/dispatch.d.ts +1 -1
  100. package/dist/src/instrumentation/dispatch.js +1 -0
  101. package/dist/src/{harness/instrumentation → instrumentation}/lifecycle.d.ts +26 -33
  102. package/dist/src/instrumentation/lifecycle.js +1 -0
  103. package/dist/src/{harness/instrumentation → instrumentation}/native-events.d.ts +1 -1
  104. package/dist/src/instrumentation/native-events.js +1 -0
  105. package/dist/src/{harness → instrumentation}/parent-lineage.d.ts +1 -1
  106. package/dist/src/{harness → instrumentation}/prepare-trace-context.d.ts +8 -5
  107. package/dist/src/instrumentation/prepare-trace-context.js +1 -0
  108. package/dist/src/instrumentation/provider.d.ts +13 -9
  109. package/dist/src/{harness/instrumentation → instrumentation}/providers.d.ts +1 -1
  110. package/dist/src/instrumentation/providers.js +1 -0
  111. package/dist/src/{harness/instrumentation → instrumentation}/runtime-context.d.ts +13 -2
  112. package/dist/src/instrumentation/runtime-context.js +1 -0
  113. package/dist/src/instrumentation/runtime.d.ts +100 -0
  114. package/dist/src/instrumentation/runtime.js +1 -0
  115. package/dist/src/{harness/instrumentation → instrumentation}/state.d.ts +2 -11
  116. package/dist/src/internal/application/compiled-artifacts.js +3 -3
  117. package/dist/src/internal/application/package.js +1 -1
  118. package/dist/src/internal/authored-definition/connection.js +1 -1
  119. package/dist/src/internal/instrumentation.d.ts +1 -1
  120. package/dist/src/internal/nitro/host/workflow-sandbox-runtime-plugin.js +1 -1
  121. package/dist/src/internal/nitro/routes/channel-request-instrumentation.d.ts +4 -6
  122. package/dist/src/internal/nitro/routes/channel-request-instrumentation.js +1 -1
  123. package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/lib/schemas.js +1 -1
  124. package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/models/aclaction.js +1 -1
  125. package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/models/sdkvalidationerror.js +1 -1
  126. package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/models/updateprojectblock.js +1 -1
  127. package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/models/updateprojectprojectsbranchmatcher.js +1 -1
  128. package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/types/primitives.js +1 -1
  129. package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/types/smartUnion.js +1 -1
  130. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/index.js +1 -0
  131. package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v3/ZodError.js +1 -1
  132. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v3/types.js +1 -0
  133. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/checks.js +1 -0
  134. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/deep-partial.js +1 -0
  135. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/errors.js +1 -0
  136. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/external.js +1 -0
  137. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/from-json-schema.js +1 -0
  138. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/in-out.js +1 -0
  139. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/iso.js +1 -0
  140. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/parse.js +1 -0
  141. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/schemas.js +1 -0
  142. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/api.js +1 -0
  143. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/checks.js +1 -0
  144. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/compile.js +2 -0
  145. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/core.js +1 -0
  146. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/doc.js +3 -0
  147. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/errors.js +2 -0
  148. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/index.js +1 -0
  149. package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v4/core/json-schema-generator.js +1 -1
  150. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/json-schema-processors.js +1 -0
  151. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/memoizer.js +1 -0
  152. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/parse.js +1 -0
  153. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/regexes.js +1 -0
  154. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/schemas.js +46 -0
  155. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/to-json-schema.js +3 -0
  156. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/util.js +1 -0
  157. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/versions.js +1 -0
  158. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/visit.js +1 -0
  159. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ar.js +1 -0
  160. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/az.js +1 -0
  161. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/be.js +1 -0
  162. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/bg.js +1 -0
  163. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/bn.js +1 -0
  164. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ca.js +1 -0
  165. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ckb.js +1 -0
  166. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/cs.js +1 -0
  167. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/da.js +1 -0
  168. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/de.js +1 -0
  169. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/el.js +1 -0
  170. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/en.js +1 -0
  171. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/eo.js +1 -0
  172. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/es.js +1 -0
  173. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/fa.js +1 -0
  174. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/fi.js +1 -0
  175. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/fr-CA.js +1 -0
  176. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/fr.js +1 -0
  177. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/gu.js +1 -0
  178. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/he.js +1 -0
  179. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/hi.js +1 -0
  180. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/hr.js +1 -0
  181. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/hu.js +1 -0
  182. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/hy.js +1 -0
  183. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/id.js +1 -0
  184. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/index.js +1 -0
  185. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/is.js +1 -0
  186. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/it.js +1 -0
  187. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ja.js +1 -0
  188. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ka.js +1 -0
  189. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/km.js +1 -0
  190. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/kn.js +1 -0
  191. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ko.js +1 -0
  192. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/lt.js +1 -0
  193. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/mk.js +1 -0
  194. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ms.js +1 -0
  195. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ne.js +1 -0
  196. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/nl.js +1 -0
  197. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/nn.js +1 -0
  198. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/no.js +1 -0
  199. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ota.js +1 -0
  200. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/pl.js +1 -0
  201. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ps.js +1 -0
  202. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/pt-BR.js +1 -0
  203. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/pt.js +1 -0
  204. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ro.js +1 -0
  205. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ru.js +1 -0
  206. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/sk.js +1 -0
  207. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/sl.js +1 -0
  208. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/sv.js +1 -0
  209. package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v4/locales/ta.js +1 -1
  210. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/th.js +1 -0
  211. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/tk.js +1 -0
  212. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/tr.js +1 -0
  213. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/uk.js +1 -0
  214. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ur.js +1 -0
  215. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/uz.js +1 -0
  216. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/vi.js +1 -0
  217. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/yo.js +1 -0
  218. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/zh-CN.js +1 -0
  219. package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/zh-TW.js +1 -0
  220. package/dist/src/packages/eve-catalog/src/index.js +1 -1
  221. package/dist/src/public/channels/slack/defaults.js +6 -3
  222. package/dist/src/public/channels/slack/index.d.ts +1 -1
  223. package/dist/src/public/channels/slack/interactions.d.ts +8 -5
  224. package/dist/src/public/channels/slack/interactions.js +1 -1
  225. package/dist/src/public/channels/slack/slackChannel.d.ts +66 -1
  226. package/dist/src/public/channels/slack/slash-command.d.ts +9 -0
  227. package/dist/src/public/channels/slack/slash-command.js +1 -0
  228. package/dist/src/public/connections/index.d.ts +2 -0
  229. package/dist/src/public/connections/index.js +1 -1
  230. package/dist/src/public/definitions/connections/dynamic.d.ts +23 -0
  231. package/dist/src/public/definitions/connections/dynamic.js +1 -0
  232. package/dist/src/public/definitions/connections/mcp.d.ts +8 -0
  233. package/dist/src/public/definitions/connections/openapi.d.ts +8 -0
  234. package/dist/src/public/definitions/connections/protocol.d.ts +6 -0
  235. package/dist/src/public/definitions/connections/protocol.js +1 -1
  236. package/dist/src/runtime/agent/mock-model-adapter.js +1 -1
  237. package/dist/src/runtime/connections/authorization-tokens.d.ts +11 -10
  238. package/dist/src/runtime/connections/instance-identity.d.ts +12 -0
  239. package/dist/src/runtime/connections/instance-identity.js +1 -0
  240. package/dist/src/runtime/connections/mcp-client.js +1 -1
  241. package/dist/src/runtime/connections/registry.d.ts +2 -0
  242. package/dist/src/runtime/connections/registry.js +1 -1
  243. package/dist/src/runtime/connections/scoped-authorization.d.ts +10 -6
  244. package/dist/src/runtime/connections/scoped-authorization.js +1 -1
  245. package/dist/src/runtime/resolve-agent.js +1 -1
  246. package/dist/src/runtime/resolve-connection.d.ts +5 -0
  247. package/dist/src/runtime/resolve-connection.js +1 -1
  248. package/dist/src/runtime/resolve-dynamic-connection.d.ts +5 -0
  249. package/dist/src/runtime/resolve-dynamic-connection.js +1 -0
  250. package/dist/src/runtime/types.d.ts +11 -0
  251. package/dist/src/services/dev-client/request-headers.js +1 -1
  252. package/dist/src/setup/flows/registry.js +1 -1
  253. package/dist/src/setup/integrations/discord/api.js +1 -1
  254. package/dist/src/setup/integrations/discord/connect.js +1 -1
  255. package/dist/src/setup/integrations/github/connect.js +1 -1
  256. package/dist/src/setup/integrations/linear/connect.js +1 -1
  257. package/dist/src/setup/integrations/linq/connect.js +1 -1
  258. package/dist/src/setup/integrations/photon/connect.js +1 -1
  259. package/dist/src/setup/project-resolution.js +1 -1
  260. package/dist/src/setup/scaffold/create/add-to-project.js +1 -1
  261. package/dist/src/setup/scaffold/create/extension.js +1 -1
  262. package/dist/src/setup/scaffold/create/project.js +2 -2
  263. package/dist/src/setup/scaffold/create/web-template.d.ts +1 -1
  264. package/dist/src/setup/scaffold/create/web-template.js +1 -1
  265. package/dist/src/setup/scaffold/update/web-options.js +1 -1
  266. package/dist/src/setup/slack-connect.js +1 -1
  267. package/dist/src/setup/vercel-api-failure.js +1 -1
  268. package/dist/src/setup/vercel-deployment.js +1 -1
  269. package/dist/src/setup/vercel-project-api.js +1 -1
  270. package/dist/src/setup/vercel-project-framework.js +1 -1
  271. package/dist/src/setup/vercel-project.js +0 -0
  272. package/dist/src/shared/input.js +1 -1
  273. package/dist/src/shared/trace-policy.d.ts +20 -0
  274. package/dist/src/shared/trace-policy.js +1 -0
  275. package/dist/src/shared/workflow-sandbox.d.ts +10 -5
  276. package/dist/src/shared/workflow-sandbox.js +1 -1
  277. package/dist/src/tracing/agent-action-instrumentation.d.ts +1 -1
  278. package/dist/src/tracing/agent-action-instrumentation.js +1 -1
  279. package/dist/src/tracing/agent-approval-instrumentation.d.ts +1 -1
  280. package/dist/src/tracing/agent-channel-delivery-instrumentation.d.ts +1 -1
  281. package/dist/src/tracing/agent-channel-delivery-instrumentation.js +1 -1
  282. package/dist/src/tracing/agent-otel-provider.d.ts +2 -2
  283. package/dist/src/tracing/agent-otel-provider.js +2 -2
  284. package/dist/src/tracing/agent-otel-runtime-context.d.ts +5 -0
  285. package/dist/src/tracing/agent-otel-runtime-context.js +1 -0
  286. package/dist/src/tracing/agent-otel-session-context.d.ts +1 -1
  287. package/dist/src/tracing/agent-otel-session-context.js +1 -1
  288. package/dist/src/tracing/agent-otel-usage.d.ts +4 -2
  289. package/dist/src/tracing/agent-otel-usage.js +1 -1
  290. package/dist/src/tracing/agent-span-id-generator.d.ts +1 -1
  291. package/dist/src/tracing/agent-tool-instrumentation.d.ts +1 -1
  292. package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
  293. package/dist/src/tracing/agent-trace-context-store.d.ts +3 -0
  294. package/dist/src/tracing/agent-trace-context-store.js +1 -1
  295. package/dist/src/tracing/agent-trace-context.d.ts +3 -0
  296. package/dist/src/tracing/agent-trace-context.js +1 -0
  297. package/dist/src/tracing/agent-trace-state.d.ts +8 -1
  298. package/dist/src/tracing/agent-trace-state.js +1 -1
  299. package/dist/src/tracing/install-instrumentation-runtime.d.ts +3 -2
  300. package/dist/src/tracing/install-instrumentation-runtime.js +1 -1
  301. package/dist/src/tracing/local-instrumentation-runtime.d.ts +1 -1
  302. package/dist/src/tracing/local-instrumentation-runtime.js +1 -1
  303. package/dist/src/tracing/local-trace-reader.d.ts +1 -0
  304. package/dist/src/tracing/local-trace-reader.js +1 -1
  305. package/dist/src/tracing/otel-declaration.d.ts +13 -16
  306. package/dist/src/tracing/otel-declaration.js +1 -1
  307. package/dist/src/tracing/otel-registration.js +1 -1
  308. package/dist/src/tracing/sampled-trace.d.ts +1 -14
  309. package/dist/src/tracing/sampled-trace.js +1 -1
  310. package/docs/channels/slack.mdx +25 -5
  311. package/docs/connections/overview.mdx +46 -2
  312. package/docs/extensions.md +2 -2
  313. package/docs/getting-started.mdx +1 -1
  314. package/docs/guides/dynamic-capabilities.md +91 -5
  315. package/docs/memory.md +7 -4
  316. package/docs/reference/cli.md +4 -4
  317. package/docs/reference/typescript-api.md +32 -23
  318. package/package.json +6 -5
  319. package/dist/src/compiled/_chunks/client/errors-C14fPFvs.js +0 -2
  320. package/dist/src/compiled/_chunks/node/auth-DpzFWvTn.js +0 -2
  321. package/dist/src/compiled/_chunks/node/auth-QgeX8nBM.js +0 -2
  322. package/dist/src/compiled/_chunks/node/compat-Dm2n85Mx.js +0 -1
  323. package/dist/src/compiled/_chunks/node/schemas-DtQwuPdM.js +0 -65
  324. package/dist/src/compiled/_chunks/node/xdg-app-paths-Bys8q02u.js +0 -1
  325. package/dist/src/compiled/_chunks/workflow/dist-eUxFublw.js +0 -77
  326. package/dist/src/compiled/experimental-ai-sdk-code-mode/LICENSE +0 -21
  327. package/dist/src/compiled/experimental-ai-sdk-code-mode/approval-continuation.d.ts +0 -71
  328. package/dist/src/compiled/experimental-ai-sdk-code-mode/approval.d.ts +0 -32
  329. package/dist/src/compiled/experimental-ai-sdk-code-mode/code-mode-tool.d.ts +0 -16
  330. package/dist/src/compiled/experimental-ai-sdk-code-mode/continuation-capability.d.ts +0 -44
  331. package/dist/src/compiled/experimental-ai-sdk-code-mode/errors.d.ts +0 -114
  332. package/dist/src/compiled/experimental-ai-sdk-code-mode/fetch-policy.d.ts +0 -21
  333. package/dist/src/compiled/experimental-ai-sdk-code-mode/host-interrupt.d.ts +0 -25
  334. package/dist/src/compiled/experimental-ai-sdk-code-mode/index.d.ts +0 -11
  335. package/dist/src/compiled/experimental-ai-sdk-code-mode/index.js +0 -419
  336. package/dist/src/compiled/experimental-ai-sdk-code-mode/interrupt-continuation.d.ts +0 -32
  337. package/dist/src/compiled/experimental-ai-sdk-code-mode/options.d.ts +0 -3
  338. package/dist/src/compiled/experimental-ai-sdk-code-mode/run-code-mode.d.ts +0 -12
  339. package/dist/src/compiled/experimental-ai-sdk-code-mode/runtime/guest-sources.d.ts +0 -3
  340. package/dist/src/compiled/experimental-ai-sdk-code-mode/runtime/manager.d.ts +0 -22
  341. package/dist/src/compiled/experimental-ai-sdk-code-mode/runtime/max-workers.d.ts +0 -20
  342. package/dist/src/compiled/experimental-ai-sdk-code-mode/runtime/protocol.d.ts +0 -60
  343. package/dist/src/compiled/experimental-ai-sdk-code-mode/runtime/worker-source.d.ts +0 -11
  344. package/dist/src/compiled/experimental-ai-sdk-code-mode/serialization.d.ts +0 -5
  345. package/dist/src/compiled/experimental-ai-sdk-code-mode/source-cache.d.ts +0 -11
  346. package/dist/src/compiled/experimental-ai-sdk-code-mode/telemetry.d.ts +0 -20
  347. package/dist/src/compiled/experimental-ai-sdk-code-mode/tool-invocation.d.ts +0 -24
  348. package/dist/src/compiled/experimental-ai-sdk-code-mode/tool-prompt.d.ts +0 -3
  349. package/dist/src/compiled/experimental-ai-sdk-code-mode/types.d.ts +0 -828
  350. package/dist/src/execution/subagent-usage-span.d.ts +0 -9
  351. package/dist/src/execution/subagent-usage-span.js +0 -1
  352. package/dist/src/harness/ai-sdk-hook-bridge.js +0 -1
  353. package/dist/src/harness/channel-delivery-instrumentation.js +0 -1
  354. package/dist/src/harness/instrumentation/config.js +0 -1
  355. package/dist/src/harness/instrumentation/content-policy.js +0 -1
  356. package/dist/src/harness/instrumentation/dispatch.js +0 -1
  357. package/dist/src/harness/instrumentation/lifecycle.js +0 -1
  358. package/dist/src/harness/instrumentation/native-events.js +0 -1
  359. package/dist/src/harness/instrumentation/providers.js +0 -1
  360. package/dist/src/harness/instrumentation/runtime-context.js +0 -1
  361. package/dist/src/harness/instrumentation/runtime.d.ts +0 -21
  362. package/dist/src/harness/instrumentation/runtime.js +0 -1
  363. package/dist/src/harness/prepare-trace-context.js +0 -1
  364. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/index.js +0 -1
  365. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v3/types.js +0 -1
  366. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/checks.js +0 -1
  367. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/errors.js +0 -1
  368. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.js +0 -1
  369. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/from-json-schema.js +0 -1
  370. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/iso.js +0 -1
  371. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/parse.js +0 -1
  372. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/schemas.js +0 -1
  373. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/api.js +0 -1
  374. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/checks.js +0 -1
  375. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/core.js +0 -1
  376. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/doc.js +0 -3
  377. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/errors.js +0 -2
  378. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/index.js +0 -1
  379. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/json-schema-processors.js +0 -1
  380. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/parse.js +0 -1
  381. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/regexes.js +0 -1
  382. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/schemas.js +0 -60
  383. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/to-json-schema.js +0 -3
  384. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/util.js +0 -1
  385. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/versions.js +0 -1
  386. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ar.js +0 -1
  387. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/az.js +0 -1
  388. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/be.js +0 -1
  389. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/bg.js +0 -1
  390. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ca.js +0 -1
  391. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/cs.js +0 -1
  392. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/da.js +0 -1
  393. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/de.js +0 -1
  394. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/el.js +0 -1
  395. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/en.js +0 -1
  396. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/eo.js +0 -1
  397. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/es.js +0 -1
  398. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fa.js +0 -1
  399. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fi.js +0 -1
  400. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fr-CA.js +0 -1
  401. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fr.js +0 -1
  402. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/he.js +0 -1
  403. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/hr.js +0 -1
  404. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/hu.js +0 -1
  405. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/hy.js +0 -1
  406. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/id.js +0 -1
  407. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/index.js +0 -1
  408. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/is.js +0 -1
  409. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/it.js +0 -1
  410. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ja.js +0 -1
  411. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ka.js +0 -1
  412. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/km.js +0 -1
  413. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ko.js +0 -1
  414. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/lt.js +0 -1
  415. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/mk.js +0 -1
  416. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ms.js +0 -1
  417. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/nl.js +0 -1
  418. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/no.js +0 -1
  419. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ota.js +0 -1
  420. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/pl.js +0 -1
  421. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ps.js +0 -1
  422. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/pt.js +0 -1
  423. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ro.js +0 -1
  424. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ru.js +0 -1
  425. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/sl.js +0 -1
  426. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/sv.js +0 -1
  427. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/th.js +0 -1
  428. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/tr.js +0 -1
  429. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/uk.js +0 -1
  430. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ur.js +0 -1
  431. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/uz.js +0 -1
  432. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/vi.js +0 -1
  433. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/yo.js +0 -1
  434. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/zh-CN.js +0 -1
  435. package/dist/src/node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/zh-TW.js +0 -1
  436. /package/dist/src/{harness → instrumentation}/ai-sdk-telemetry.d.ts +0 -0
  437. /package/dist/src/{harness → instrumentation}/ai-sdk-telemetry.js +0 -0
  438. /package/dist/src/{harness/instrumentation → instrumentation}/content.js +0 -0
  439. /package/dist/src/{harness → instrumentation}/parent-lineage.js +0 -0
  440. /package/dist/src/{harness/instrumentation → instrumentation}/setup-context.d.ts +0 -0
  441. /package/dist/src/{harness/instrumentation → instrumentation}/setup-context.js +0 -0
  442. /package/dist/src/{harness/instrumentation → instrumentation}/state.js +0 -0
  443. /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v3/errors.js +0 -0
  444. /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v3/external.js +0 -0
  445. /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v3/helpers/errorUtil.js +0 -0
  446. /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v3/helpers/parseUtil.js +0 -0
  447. /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v3/helpers/typeAliases.js +0 -0
  448. /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v3/helpers/util.js +0 -0
  449. /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v3/index.js +0 -0
  450. /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v3/locales/en.js +0 -0
  451. /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v4/classic/coerce.js +0 -0
  452. /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v4/classic/compat.js +0 -0
  453. /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v4/core/json-schema.js +0 -0
  454. /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v4/core/registries.js +0 -0
  455. /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v4/locales/kh.js +0 -0
  456. /package/dist/src/node_modules/.pnpm/{zod@4.4.3 → zod@4.5.4}/node_modules/zod/v4/locales/ua.js +0 -0
@@ -88,7 +88,7 @@ export declare const WEB_APP_TEMPLATE_PACKAGE_JSON: {
88
88
  readonly "tailwind-merge": "3.6.0";
89
89
  readonly tailwindcss: "4.3.0";
90
90
  readonly "use-stick-to-bottom": "1.1.4";
91
- readonly zod: "4.4.3";
91
+ readonly zod: "4.5.4";
92
92
  };
93
93
  readonly devDependencies: {
94
94
  readonly "@types/node": "26";
@@ -6080,4 +6080,4 @@ export const auth = betterAuth({
6080
6080
  },
6081
6081
  },
6082
6082
  });
6083
- `},WEB_APP_TEMPLATE_PACKAGE_JSON={scripts:{build:`next build`,"build:eve":`eve build`,dev:`next dev`,"dev:eve":`eve dev`,start:`next start`,"start:eve":`eve start`,typecheck:`tsc --noEmit -p tsconfig.json`},dependencies:{"@radix-ui/react-use-controllable-state":`1.2.2`,"@shikijs/core":`3.23.0`,"@shikijs/engine-javascript":`3.23.0`,"@shikijs/engine-oniguruma":`3.23.0`,"@streamdown/cjk":`1.0.3`,"@streamdown/code":`1.1.1`,"@streamdown/math":`1.0.2`,"@streamdown/mermaid":`1.0.2`,"@tailwindcss/postcss":`4.3.0`,"class-variance-authority":`0.7.1`,clsx:`2.1.1`,cmdk:`1.1.1`,"lucide-react":`1.16.0`,motion:`12.40.0`,nanoid:`5.1.11`,next:`16.3.0-preview.6`,"radix-ui":`1.4.3`,react:`19.2.6`,"react-dom":`19.2.6`,shiki:`3.23.0`,streamdown:`2.5.0`,"tailwind-merge":`3.6.0`,tailwindcss:`4.3.0`,"use-stick-to-bottom":`1.1.4`,zod:`4.4.3`},devDependencies:{"@types/node":`26`,"@types/react":`19.2.15`,"@types/react-dom":`19.2.3`,typescript:`6.0.3`}};export{WEB_APP_SIGN_IN_WITH_VERCEL_TEMPLATE_FILES,WEB_APP_TEMPLATE_FILES,WEB_APP_TEMPLATE_PACKAGE_JSON};
6083
+ `},WEB_APP_TEMPLATE_PACKAGE_JSON={scripts:{build:`next build`,"build:eve":`eve build`,dev:`next dev`,"dev:eve":`eve dev`,start:`next start`,"start:eve":`eve start`,typecheck:`tsc --noEmit -p tsconfig.json`},dependencies:{"@radix-ui/react-use-controllable-state":`1.2.2`,"@shikijs/core":`3.23.0`,"@shikijs/engine-javascript":`3.23.0`,"@shikijs/engine-oniguruma":`3.23.0`,"@streamdown/cjk":`1.0.3`,"@streamdown/code":`1.1.1`,"@streamdown/math":`1.0.2`,"@streamdown/mermaid":`1.0.2`,"@tailwindcss/postcss":`4.3.0`,"class-variance-authority":`0.7.1`,clsx:`2.1.1`,cmdk:`1.1.1`,"lucide-react":`1.16.0`,motion:`12.40.0`,nanoid:`5.1.11`,next:`16.3.0-preview.6`,"radix-ui":`1.4.3`,react:`19.2.6`,"react-dom":`19.2.6`,shiki:`3.23.0`,streamdown:`2.5.0`,"tailwind-merge":`3.6.0`,tailwindcss:`4.3.0`,"use-stick-to-bottom":`1.1.4`,zod:`4.5.4`},devDependencies:{"@types/node":`26`,"@types/react":`19.2.15`,"@types/react-dom":`19.2.3`,typescript:`6.0.3`}};export{WEB_APP_SIGN_IN_WITH_VERCEL_TEMPLATE_FILES,WEB_APP_TEMPLATE_FILES,WEB_APP_TEMPLATE_PACKAGE_JSON};
@@ -1 +1 @@
1
- import{DEFAULT_EVE_PACKAGE_CONTRACT}from"../create/project.js";function resolveWebPackageVersions(e,t){return{evePackage:e?.evePackage??DEFAULT_EVE_PACKAGE_CONTRACT,aiPackageVersion:e?.aiPackageVersion??`^7.0.58`,betterAuthPackageVersion:e?.betterAuthPackageVersion??`1.6.26`,nextPackageVersion:e?.nextPackageVersion??(t===`sign-in-with-vercel`?`16.3.0`:`16.3.0-preview.6`),reactPackageVersion:e?.reactPackageVersion??`19.2.6`,reactDomPackageVersion:e?.reactDomPackageVersion??`19.2.6`,streamdownPackageVersion:e?.streamdownPackageVersion??`2.5.0`,zodPackageVersion:e?.zodPackageVersion??`4.4.3`,typesReactPackageVersion:e?.typesReactPackageVersion??`19.2.15`,typesReactDomPackageVersion:e?.typesReactDomPackageVersion??`19.2.3`}}export{resolveWebPackageVersions};
1
+ import{DEFAULT_EVE_PACKAGE_CONTRACT}from"../create/project.js";function resolveWebPackageVersions(e,t){return{evePackage:e?.evePackage??DEFAULT_EVE_PACKAGE_CONTRACT,aiPackageVersion:e?.aiPackageVersion??`^7.0.82`,betterAuthPackageVersion:e?.betterAuthPackageVersion??`1.6.26`,nextPackageVersion:e?.nextPackageVersion??(t===`sign-in-with-vercel`?`16.3.0`:`16.3.0-preview.6`),reactPackageVersion:e?.reactPackageVersion??`19.2.6`,reactDomPackageVersion:e?.reactDomPackageVersion??`19.2.6`,streamdownPackageVersion:e?.streamdownPackageVersion??`2.5.0`,zodPackageVersion:e?.zodPackageVersion??`4.5.4`,typesReactPackageVersion:e?.typesReactPackageVersion??`19.2.15`,typesReactDomPackageVersion:e?.typesReactDomPackageVersion??`19.2.3`}}export{resolveWebPackageVersions};
@@ -1 +1 @@
1
- import{object,string}from"../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/schemas.js";import"../node_modules/.pnpm/zod@4.4.3/node_modules/zod/index.js";const NonEmptyStringSchema=string().min(1),SlackConnectorDetailsSchema=object({uid:NonEmptyStringSchema,id:NonEmptyStringSchema}).extend({data:object({appId:NonEmptyStringSchema.nullish(),slackTeam:object({id:NonEmptyStringSchema,name:NonEmptyStringSchema.nullish()}).nullish()}).nullish()});function parseSlackConnectorDetails(e){let t=SlackConnectorDetailsSchema.safeParse(e);if(!t.success)return;let{id:n,uid:i,data:a}=t.data,o={id:n,uid:i};if(a?.appId==null||a.slackTeam==null)return{ref:o};let s=new URL(`https://slack.com/app_redirect`);return s.searchParams.set(`app`,a.appId),s.searchParams.set(`team`,a.slackTeam.id),{ref:o,workspace:a.slackTeam.name==null?{workspaceUrl:s.href}:{workspaceUrl:s.href,workspaceName:a.slackTeam.name}}}function parseCreatedSlackConnector(e){let t=e.trim();if(!t)return;let n;try{n=JSON.parse(t)}catch{return}return parseSlackConnectorDetails(n)?.ref}function pickSlackConnector(e,t,n){if(t===void 0||typeof e!=`object`||!e)return;let r=e,i=r.connectors??r.clients;if(!Array.isArray(i))return;let a;for(let e of i){if(e.type!==`slack`||typeof e.uid!=`string`||typeof e.id!=`string`||!Array.isArray(e.projects)||!e.projects.some(e=>typeof e==`object`&&!!e&&e.id===t))continue;let r={uid:e.uid,id:e.id};if(n!==void 0&&r.uid===n)return r;let i=typeof e.createdAt==`number`?e.createdAt:0;(!a||i>a.createdAt)&&(a={ref:r,createdAt:i})}return a?.ref}function slackMessageDeepLink(e){let t=URL.parse(e);return t===null||!t.pathname.endsWith(`/app_redirect`)||!t.searchParams.has(`app`)||!t.searchParams.has(`team`)?e:(t.searchParams.set(`tab`,`messages`),t.href)}function parseSlackConnectors(e){if(typeof e!=`object`||!e)return[];let t=e,n=t.connectors??t.clients;if(!Array.isArray(n))return[];let r=[];for(let e of n){if(e.type!==`slack`||typeof e.uid!=`string`)continue;let t=Array.isArray(e.projects)?e.projects.map(e=>typeof e==`object`&&e?e.id:void 0).filter(e=>typeof e==`string`):[],n={uid:e.uid,projectIds:t,createdAt:typeof e.createdAt==`number`?e.createdAt:0};typeof e.id==`string`&&(n.id=e.id),r.push(n)}return r}export{parseCreatedSlackConnector,parseSlackConnectorDetails,parseSlackConnectors,pickSlackConnector,slackMessageDeepLink};
1
+ import{object,string}from"../node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/schemas.js";import"../node_modules/.pnpm/zod@4.5.4/node_modules/zod/index.js";const NonEmptyStringSchema=string().min(1),SlackConnectorDetailsSchema=object({uid:NonEmptyStringSchema,id:NonEmptyStringSchema}).extend({data:object({appId:NonEmptyStringSchema.nullish(),slackTeam:object({id:NonEmptyStringSchema,name:NonEmptyStringSchema.nullish()}).nullish()}).nullish()});function parseSlackConnectorDetails(e){let t=SlackConnectorDetailsSchema.safeParse(e);if(!t.success)return;let{id:n,uid:i,data:a}=t.data,o={id:n,uid:i};if(a?.appId==null||a.slackTeam==null)return{ref:o};let s=new URL(`https://slack.com/app_redirect`);return s.searchParams.set(`app`,a.appId),s.searchParams.set(`team`,a.slackTeam.id),{ref:o,workspace:a.slackTeam.name==null?{workspaceUrl:s.href}:{workspaceUrl:s.href,workspaceName:a.slackTeam.name}}}function parseCreatedSlackConnector(e){let t=e.trim();if(!t)return;let n;try{n=JSON.parse(t)}catch{return}return parseSlackConnectorDetails(n)?.ref}function pickSlackConnector(e,t,n){if(t===void 0||typeof e!=`object`||!e)return;let r=e,i=r.connectors??r.clients;if(!Array.isArray(i))return;let a;for(let e of i){if(e.type!==`slack`||typeof e.uid!=`string`||typeof e.id!=`string`||!Array.isArray(e.projects)||!e.projects.some(e=>typeof e==`object`&&!!e&&e.id===t))continue;let r={uid:e.uid,id:e.id};if(n!==void 0&&r.uid===n)return r;let i=typeof e.createdAt==`number`?e.createdAt:0;(!a||i>a.createdAt)&&(a={ref:r,createdAt:i})}return a?.ref}function slackMessageDeepLink(e){let t=URL.parse(e);return t===null||!t.pathname.endsWith(`/app_redirect`)||!t.searchParams.has(`app`)||!t.searchParams.has(`team`)?e:(t.searchParams.set(`tab`,`messages`),t.href)}function parseSlackConnectors(e){if(typeof e!=`object`||!e)return[];let t=e,n=t.connectors??t.clients;if(!Array.isArray(n))return[];let r=[];for(let e of n){if(e.type!==`slack`||typeof e.uid!=`string`)continue;let t=Array.isArray(e.projects)?e.projects.map(e=>typeof e==`object`&&e?e.id:void 0).filter(e=>typeof e==`string`):[],n={uid:e.uid,projectIds:t,createdAt:typeof e.createdAt==`number`?e.createdAt:0};typeof e.id==`string`&&(n.id=e.id),r.push(n)}return r}export{parseCreatedSlackConnector,parseSlackConnectorDetails,parseSlackConnectors,pickSlackConnector,slackMessageDeepLink};
@@ -1 +1 @@
1
- import{number,object,string,union}from"../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/schemas.js";import"../node_modules/.pnpm/zod@4.4.3/node_modules/zod/index.js";const VercelApiErrorSchema=object({error:object({code:union([string(),number()]).optional(),message:string().optional()}).optional()});function apiErrorFromStdout(e){try{let t=VercelApiErrorSchema.safeParse(JSON.parse(e));return t.success?t.data.error:void 0}catch{return}}function apiFailureText(e){let t=apiErrorFromStdout(e.stdout);return`${String(t?.code??``)} ${t?.message??``} ${e.stderr}`.toLowerCase()}function normalizeVercelApiResult(e){if(!e.ok)return e;let t=apiErrorFromStdout(e.stdout);if(t===void 0)return e;let n=t.message??(t.code===void 0?void 0:String(t.code));return{ok:!1,failure:{stdout:e.stdout,stderr:``,message:`Vercel API request failed${n===void 0?``:`: ${n}`}.`}}}function isNotFoundApiFailure(e){return/(^|\W)(404|not_found)(\W|$)|not found/.test(apiFailureText(e))}function isConflictApiFailure(e){return/(^|\W)(409|conflict)(\W|$)|already exists/.test(apiFailureText(e))}function isForbiddenApiFailure(e){return/(^|\W)(403|forbidden|not_authorized|team_unauthorized|sso|saml)(\W|$)|not authorized/.test(apiFailureText(e))}export{isConflictApiFailure,isForbiddenApiFailure,isNotFoundApiFailure,normalizeVercelApiResult};
1
+ import{number,object,string,union}from"../node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/schemas.js";import"../node_modules/.pnpm/zod@4.5.4/node_modules/zod/index.js";const VercelApiErrorSchema=object({error:object({code:union([string(),number()]).optional(),message:string().optional()}).optional()});function apiErrorFromStdout(e){try{let t=VercelApiErrorSchema.safeParse(JSON.parse(e));return t.success?t.data.error:void 0}catch{return}}function apiFailureText(e){let t=apiErrorFromStdout(e.stdout);return`${String(t?.code??``)} ${t?.message??``} ${e.stderr}`.toLowerCase()}function normalizeVercelApiResult(e){if(!e.ok)return e;let t=apiErrorFromStdout(e.stdout);if(t===void 0)return e;let n=t.message??(t.code===void 0?void 0:String(t.code));return{ok:!1,failure:{stdout:e.stdout,stderr:``,message:`Vercel API request failed${n===void 0?``:`: ${n}`}.`}}}function isNotFoundApiFailure(e){return/(^|\W)(404|not_found)(\W|$)|not found/.test(apiFailureText(e))}function isConflictApiFailure(e){return/(^|\W)(409|conflict)(\W|$)|already exists/.test(apiFailureText(e))}function isForbiddenApiFailure(e){return/(^|\W)(403|forbidden|not_authorized|team_unauthorized|sso|saml)(\W|$)|not authorized/.test(apiFailureText(e))}export{isConflictApiFailure,isForbiddenApiFailure,isNotFoundApiFailure,normalizeVercelApiResult};
@@ -1 +1 @@
1
- import{object,string}from"../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/schemas.js";import"../node_modules/.pnpm/zod@4.4.3/node_modules/zod/index.js";import{isForbiddenApiFailure,isNotFoundApiFailure,normalizeVercelApiResult}from"./vercel-api-failure.js";import{captureVercel}from"#setup/primitives/index.js";const VercelDeploymentSchema=object({ownerId:string().min(1),projectId:string().min(1),name:string().min(1),target:string().nullable().optional(),customEnvironment:object({slug:string().min(1)}).nullable().optional()}),verifiedVercelTargetBrand=Symbol(`VerifiedVercelTarget`),defaultDeps={captureVercel};function environmentForDeployment(e){return e.customEnvironment!==null&&e.customEnvironment!==void 0?e.customEnvironment.slug:e.target===`production`?`production`:`preview`}async function resolveVercelDeployment(e){let t={...defaultDeps,...e.deps},n=e.source,r=e.scope??n?.orgId,i=normalizeVercelApiResult(await t.captureVercel([`api`,`/v13/deployments/${encodeURIComponent(e.host)}`,...r===void 0?[]:[`--scope`,r],`--raw`],{cwd:e.workspaceRoot,nonInteractive:!0,signal:e.signal,timeoutMs:1e4}));if(!i.ok)return e.signal?.aborted===!0||i.failure.errno===`ABORT_ERR`?{kind:`cancelled`}:isNotFoundApiFailure(i.failure)?{kind:`not-found`}:isForbiddenApiFailure(i.failure)?{kind:`forbidden`}:{kind:`failed`,failure:{cause:`vercel`,failure:i.failure}};let a;try{a=JSON.parse(i.stdout)}catch{return{kind:`failed`,failure:{cause:`invalid-json`,message:`Vercel returned invalid deployment JSON.`}}}let o=VercelDeploymentSchema.safeParse(a);if(!o.success)return{kind:`failed`,failure:{cause:`invalid-shape`,message:`Vercel returned an invalid deployment response.`}};if(n!==void 0&&o.data.projectId!==n.projectId)return{kind:`project-mismatch`,expectedProjectId:n.projectId,actualProjectId:o.data.projectId};let s=`https://${new URL(`https://${e.host}`).host}`;return{kind:`resolved`,target:{[verifiedVercelTargetBrand]:!0,origin:s,deployment:{provider:`vercel`,ownerId:o.data.ownerId,projectId:o.data.projectId,projectName:o.data.name,environment:environmentForDeployment(o.data)}}}}export{resolveVercelDeployment};
1
+ import{object,string}from"../node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/schemas.js";import"../node_modules/.pnpm/zod@4.5.4/node_modules/zod/index.js";import{isForbiddenApiFailure,isNotFoundApiFailure,normalizeVercelApiResult}from"./vercel-api-failure.js";import{captureVercel}from"#setup/primitives/index.js";const VercelDeploymentSchema=object({ownerId:string().min(1),projectId:string().min(1),name:string().min(1),target:string().nullable().optional(),customEnvironment:object({slug:string().min(1)}).nullable().optional()}),verifiedVercelTargetBrand=Symbol(`VerifiedVercelTarget`),defaultDeps={captureVercel};function environmentForDeployment(e){return e.customEnvironment!==null&&e.customEnvironment!==void 0?e.customEnvironment.slug:e.target===`production`?`production`:`preview`}async function resolveVercelDeployment(e){let t={...defaultDeps,...e.deps},n=e.source,r=e.scope??n?.orgId,i=normalizeVercelApiResult(await t.captureVercel([`api`,`/v13/deployments/${encodeURIComponent(e.host)}`,...r===void 0?[]:[`--scope`,r],`--raw`],{cwd:e.workspaceRoot,nonInteractive:!0,signal:e.signal,timeoutMs:1e4}));if(!i.ok)return e.signal?.aborted===!0||i.failure.errno===`ABORT_ERR`?{kind:`cancelled`}:isNotFoundApiFailure(i.failure)?{kind:`not-found`}:isForbiddenApiFailure(i.failure)?{kind:`forbidden`}:{kind:`failed`,failure:{cause:`vercel`,failure:i.failure}};let a;try{a=JSON.parse(i.stdout)}catch{return{kind:`failed`,failure:{cause:`invalid-json`,message:`Vercel returned invalid deployment JSON.`}}}let o=VercelDeploymentSchema.safeParse(a);if(!o.success)return{kind:`failed`,failure:{cause:`invalid-shape`,message:`Vercel returned an invalid deployment response.`}};if(n!==void 0&&o.data.projectId!==n.projectId)return{kind:`project-mismatch`,expectedProjectId:n.projectId,actualProjectId:o.data.projectId};let s=`https://${new URL(`https://${e.host}`).host}`;return{kind:`resolved`,target:{[verifiedVercelTargetBrand]:!0,origin:s,deployment:{provider:`vercel`,ownerId:o.data.ownerId,projectId:o.data.projectId,projectName:o.data.name,environment:environmentForDeployment(o.data)}}}}export{resolveVercelDeployment};
@@ -1 +1 @@
1
- import{array,boolean,number,object,string}from"../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/schemas.js";import"../node_modules/.pnpm/zod@4.4.3/node_modules/zod/index.js";import{isForbiddenApiFailure}from"./vercel-api-failure.js";import{captureVercel}from"#setup/primitives/index.js";import{HumanActionRequiredError}from"#setup/human-action.js";const VERCEL_PROJECT_REQUEST_TIMEOUT_MS=15e3,VercelTeamListEntrySchema=object({name:string(),slug:string(),current:boolean()}),VercelProjectListEntrySchema=object({name:string(),id:string()}),VercelPaginationSchema=object({next:number().int().nonnegative().nullable().optional()}),VercelTeamPageSchema=object({teams:array(VercelTeamListEntrySchema),pagination:VercelPaginationSchema.optional()}).transform(e=>e.teams),VercelProjectPageSchema=object({projects:array(VercelProjectListEntrySchema),pagination:VercelPaginationSchema.optional()}).transform(e=>({items:e.projects,next:e.pagination?.next??void 0}));function parseVercelJson(e,t){try{return JSON.parse(e)}catch{throw Error(`Could not parse ${t} JSON from Vercel CLI output.`)}}function requireVercelTeamAccess(e){let t=e.stderr.trim();throw new HumanActionRequiredError({kind:`vercel-forbidden`,command:`vercel login`,reason:`Vercel denied access to this scope.${t?` ${t}`:``} Re-authenticate (for example to complete a team's SSO) or switch to a team you can access.`})}function isUnsupportedTeamListFailure(e){let t=`${e.stderr}\n${e.stdout}`;return/(?:unknown|unexpected|invalid).*(?:--format|--limit)/iu.test(t)}function requireVercelCliUpgrade(e){throw new HumanActionRequiredError({kind:`vercel-cli-upgrade`,command:`vercel upgrade`,reason:`The installed Vercel CLI does not support the team-list options eve needs. ${e.message} Upgrade it and retry.`})}async function captureTeamPage(e,t,n){let r=await captureVercel(n,{cwd:e,signal:t.signal});if(t.signal?.throwIfAborted(),!r.ok)throw isForbiddenApiFailure(r.failure)&&requireVercelTeamAccess(r.failure),isUnsupportedTeamListFailure(r.failure)&&requireVercelCliUpgrade(r.failure),Error(`Could not list Vercel teams. ${r.failure.message}`);return r.stdout}async function listTeams(e,t={}){let n=await captureTeamPage(e,t,[`teams`,`ls`,`--format`,`json`,`--limit`,`100`]),r=VercelTeamPageSchema.safeParse(parseVercelJson(n,`teams`));if(!r.success)throw Error(`Could not read teams from Vercel CLI JSON output.`);return r.data}async function fetchProjectPage(e,t,n){let r=[`project`,`ls`,`--format`,`json`,`--scope`,t];n.search!==void 0&&r.push(`--filter`,n.search),n.next!==void 0&&r.push(`--next`,String(n.next));let i=await captureVercel(r,{cwd:e,signal:n.signal,timeoutMs:VERCEL_PROJECT_REQUEST_TIMEOUT_MS});if(n.signal?.throwIfAborted(),!i.ok)throw isForbiddenApiFailure(i.failure)&&requireVercelTeamAccess(i.failure),Error(`Could not list Vercel projects in ${t}. ${i.failure.message}`);let s=VercelProjectPageSchema.safeParse(parseVercelJson(i.stdout,`projects`));if(!s.success)throw Error(`Could not read projects from Vercel CLI JSON output.`);return s.data}async function listRecentProjects(e,t,n={}){return(await fetchProjectPage(e,t,n)).items}function projectSearchRank(e,t){let n=e.name.toLowerCase(),r=t.toLowerCase();return n===r?0:n.startsWith(r)?1:2}function rankProjectSearchResults(e,t){let n=t.trim();return[...e].sort((e,t)=>projectSearchRank(e,n)-projectSearchRank(t,n))}async function searchProjects(e,t,n,r={}){let i=n.trim();if(i.length===0)throw Error(`Project search query cannot be empty.`);let a=await fetchProjectPage(e,t,{...r,search:i}),o=rankProjectSearchResults(a.items,i);return a.next===void 0?{projects:o}:{projects:o,next:a.next}}export{VERCEL_PROJECT_REQUEST_TIMEOUT_MS,listRecentProjects,listTeams,parseVercelJson,rankProjectSearchResults,requireVercelTeamAccess,searchProjects};
1
+ import{array,boolean,number,object,string}from"../node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/schemas.js";import"../node_modules/.pnpm/zod@4.5.4/node_modules/zod/index.js";import{isForbiddenApiFailure}from"./vercel-api-failure.js";import{captureVercel}from"#setup/primitives/index.js";import{HumanActionRequiredError}from"#setup/human-action.js";const VERCEL_PROJECT_REQUEST_TIMEOUT_MS=15e3,VercelTeamListEntrySchema=object({name:string(),slug:string(),current:boolean()}),VercelProjectListEntrySchema=object({name:string(),id:string()}),VercelPaginationSchema=object({next:number().int().nonnegative().nullable().optional()}),VercelTeamPageSchema=object({teams:array(VercelTeamListEntrySchema),pagination:VercelPaginationSchema.optional()}).transform(e=>e.teams),VercelProjectPageSchema=object({projects:array(VercelProjectListEntrySchema),pagination:VercelPaginationSchema.optional()}).transform(e=>({items:e.projects,next:e.pagination?.next??void 0}));function parseVercelJson(e,t){try{return JSON.parse(e)}catch{throw Error(`Could not parse ${t} JSON from Vercel CLI output.`)}}function requireVercelTeamAccess(e){let t=e.stderr.trim();throw new HumanActionRequiredError({kind:`vercel-forbidden`,command:`vercel login`,reason:`Vercel denied access to this scope.${t?` ${t}`:``} Re-authenticate (for example to complete a team's SSO) or switch to a team you can access.`})}function isUnsupportedTeamListFailure(e){let t=`${e.stderr}\n${e.stdout}`;return/(?:unknown|unexpected|invalid).*(?:--format|--limit)/iu.test(t)}function requireVercelCliUpgrade(e){throw new HumanActionRequiredError({kind:`vercel-cli-upgrade`,command:`vercel upgrade`,reason:`The installed Vercel CLI does not support the team-list options eve needs. ${e.message} Upgrade it and retry.`})}async function captureTeamPage(e,t,n){let r=await captureVercel(n,{cwd:e,signal:t.signal});if(t.signal?.throwIfAborted(),!r.ok)throw isForbiddenApiFailure(r.failure)&&requireVercelTeamAccess(r.failure),isUnsupportedTeamListFailure(r.failure)&&requireVercelCliUpgrade(r.failure),Error(`Could not list Vercel teams. ${r.failure.message}`);return r.stdout}async function listTeams(e,t={}){let n=await captureTeamPage(e,t,[`teams`,`ls`,`--format`,`json`,`--limit`,`100`]),r=VercelTeamPageSchema.safeParse(parseVercelJson(n,`teams`));if(!r.success)throw Error(`Could not read teams from Vercel CLI JSON output.`);return r.data}async function fetchProjectPage(e,t,n){let r=[`project`,`ls`,`--format`,`json`,`--scope`,t];n.search!==void 0&&r.push(`--filter`,n.search),n.next!==void 0&&r.push(`--next`,String(n.next));let i=await captureVercel(r,{cwd:e,signal:n.signal,timeoutMs:VERCEL_PROJECT_REQUEST_TIMEOUT_MS});if(n.signal?.throwIfAborted(),!i.ok)throw isForbiddenApiFailure(i.failure)&&requireVercelTeamAccess(i.failure),Error(`Could not list Vercel projects in ${t}. ${i.failure.message}`);let s=VercelProjectPageSchema.safeParse(parseVercelJson(i.stdout,`projects`));if(!s.success)throw Error(`Could not read projects from Vercel CLI JSON output.`);return s.data}async function listRecentProjects(e,t,n={}){return(await fetchProjectPage(e,t,n)).items}function projectSearchRank(e,t){let n=e.name.toLowerCase(),r=t.toLowerCase();return n===r?0:n.startsWith(r)?1:2}function rankProjectSearchResults(e,t){let n=t.trim();return[...e].sort((e,t)=>projectSearchRank(e,n)-projectSearchRank(t,n))}async function searchProjects(e,t,n,r={}){let i=n.trim();if(i.length===0)throw Error(`Project search query cannot be empty.`);let a=await fetchProjectPage(e,t,{...r,search:i}),o=rankProjectSearchResults(a.items,i);return a.next===void 0?{projects:o}:{projects:o,next:a.next}}export{VERCEL_PROJECT_REQUEST_TIMEOUT_MS,listRecentProjects,listTeams,parseVercelJson,rankProjectSearchResults,requireVercelTeamAccess,searchProjects};
@@ -1 +1 @@
1
- import{object,string}from"../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/schemas.js";import"../node_modules/.pnpm/zod@4.4.3/node_modules/zod/index.js";import{readProjectLink}from"./project-resolution.js";import{resolveVercelHostFrameworkPreset}from"./scaffold/update/channels.js";import"./scaffold/index.js";import{isForbiddenApiFailure,normalizeVercelApiResult}from"./vercel-api-failure.js";import{VERCEL_PROJECT_REQUEST_TIMEOUT_MS,parseVercelJson,requireVercelTeamAccess}from"./vercel-project-api.js";import*as fs from"node:fs/promises";import{extname,join}from"node:path";import{captureVercel}from"#setup/primitives/index.js";import"#setup/cli/index.js";const VercelProjectFrameworkSchema=object({framework:string().min(1).nullish()}),EVE_FRAMEWORK_INTEGRATIONS={nextjs:{label:`Next.js`,importSpecifier:`eve/next`},nuxt:{label:`Nuxt`,importSpecifier:`eve/nuxt`},nuxtjs:{label:`Nuxt`,importSpecifier:`eve/nuxt`},sveltekit:{label:`SvelteKit`,importSpecifier:`eve/sveltekit`}},FRAMEWORK_INTEGRATION_SOURCE_EXTENSIONS=new Set([`.cjs`,`.cts`,`.js`,`.json`,`.jsx`,`.mjs`,`.mts`,`.svelte`,`.ts`,`.tsx`,`.vue`]),FRAMEWORK_INTEGRATION_IGNORED_DIRECTORIES=new Set([`.eve`,`.git`,`.next`,`.nuxt`,`.output`,`.svelte-kit`,`.turbo`,`.vercel`,`build`,`coverage`,`dist`,`node_modules`]);function parseProjectFramework(e,t){let n=VercelProjectFrameworkSchema.safeParse(parseVercelJson(e,t));if(!n.success)throw Error(`Could not read Vercel project framework from ${t}.`);return n.data.framework??void 0}async function fetchProjectFramework(e,t,n,r){let s=normalizeVercelApiResult(await captureVercel([`api`,`/v9/projects/${n}`,`--scope`,t,`--raw`],{cwd:e,signal:r.signal,timeoutMs:VERCEL_PROJECT_REQUEST_TIMEOUT_MS}));if(s.ok)return parseProjectFramework(s.stdout,`project ${n}`);throw isForbiddenApiFailure(s.failure)&&requireVercelTeamAccess(s.failure),Error(`Could not inspect Vercel project "${n}". ${s.failure.message}`)}async function setProjectFramework(e,t,n,r,s,l){let u=normalizeVercelApiResult(await captureVercel([`api`,`/v9/projects/${n}`,`--scope`,t,`--method`,`PATCH`,`--raw-field`,`framework=${r}`,`--raw`],{cwd:e,onOutput:s,signal:l.signal,timeoutMs:VERCEL_PROJECT_REQUEST_TIMEOUT_MS}));if(!u.ok)throw isForbiddenApiFailure(u.failure)&&requireVercelTeamAccess(u.failure),Error(`Could not set Vercel project "${n}" framework to ${r}. ${u.failure.message}`)}async function confirmDetectedFramework(e,t,n){return await e.select({message:`Vercel detected ${n.label}. Is this project using ${n.importSpecifier}?`,options:[{value:!0,label:`Yes, keep ${t}`,hint:`Use this for a host app that integrates eve through ${n.importSpecifier}.`},{value:!1,label:`No, switch to eve`,hint:`Use this for a standalone eve agent.`}]})?`keep`:`switch-to-eve`}function sourceMentionsPackageSpecifier(e,t){return e.includes(`"${t}"`)||e.includes(`'${t}'`)||e.includes(`\`${t}\``)}async function directoryContainsPackageSpecifier(e,t){let n;try{n=await fs.readdir(e,{encoding:`utf8`,withFileTypes:!0})}catch{return!1}for(let r of n){let n=join(e,r.name);if(r.isDirectory()){if(FRAMEWORK_INTEGRATION_IGNORED_DIRECTORIES.has(r.name))continue;if(await directoryContainsPackageSpecifier(n,t))return!0;continue}if(!(!r.isFile()||!FRAMEWORK_INTEGRATION_SOURCE_EXTENSIONS.has(extname(r.name))))try{if(sourceMentionsPackageSpecifier(await fs.readFile(n,`utf8`),t))return!0}catch{continue}}return!1}async function detectFrameworkIntegrationImport(e,t){return directoryContainsPackageSpecifier(e,t)}async function resolveDetectedFrameworkAction(e,t,n,r){let i=EVE_FRAMEWORK_INTEGRATIONS[n];return i===void 0?`switch-to-eve`:await(r.detectFrameworkIntegrationImport??detectFrameworkIntegrationImport)(t,i.importSpecifier)?`keep`:r.headless?`switch-to-eve`:confirmDetectedFramework(e,n,i)}function frameworkPresetLabel(e){return EVE_FRAMEWORK_INTEGRATIONS[e]?.label??e}function describeError(e){return e instanceof Error?e.message:String(e)}async function syncHostFrameworkPreset(e,t,i,a){let o=await resolveVercelHostFrameworkPreset(t);if(o===void 0)return;let s=await readProjectLink(t);if(s===void 0)return;let c=frameworkPresetLabel(o),l;try{l=await fetchProjectFramework(t,s.orgId,s.projectId,a)}catch(t){if(a.signal?.aborted)throw t;e.log.warning(`Could not check this Vercel project's Framework Preset (${describeError(t)}). If it is not already ${c}, set it under Project Settings → Build and Deployment → Framework Settings before deploying.`);return}if(l===o)return;let u=l===void 0?void 0:frameworkPresetLabel(l),d=u===void 0?`had no Framework Preset set`:`was set to "${u}"`;try{await setProjectFramework(t,s.orgId,s.projectId,o,i,a)}catch(t){if(a.signal?.aborted)throw t;e.log.warning(`${describeError(t)} Set this Vercel project's Framework Preset to ${c} (Project Settings → Build and Deployment → Framework Settings) before deploying, or the deployment will not build your ${c} app.`);return}e.log.info(`This project uses ${c}, but its Vercel Framework Preset ${d}; switched it to ${c} so the deployment builds your app.`)}async function ensureCreatedProjectFramework(e,t,n,r,i,a){let o=await fetchProjectFramework(t,n,r,a);o!==`eve`&&(o===void 0?`switch-to-eve`:await resolveDetectedFrameworkAction(e,t,o,a))===`switch-to-eve`&&await setProjectFramework(t,n,r,`eve`,i,a)}export{ensureCreatedProjectFramework,syncHostFrameworkPreset};
1
+ import{object,string}from"../node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/schemas.js";import"../node_modules/.pnpm/zod@4.5.4/node_modules/zod/index.js";import{readProjectLink}from"./project-resolution.js";import{resolveVercelHostFrameworkPreset}from"./scaffold/update/channels.js";import"./scaffold/index.js";import{isForbiddenApiFailure,normalizeVercelApiResult}from"./vercel-api-failure.js";import{VERCEL_PROJECT_REQUEST_TIMEOUT_MS,parseVercelJson,requireVercelTeamAccess}from"./vercel-project-api.js";import*as fs from"node:fs/promises";import{extname,join}from"node:path";import{captureVercel}from"#setup/primitives/index.js";import"#setup/cli/index.js";const VercelProjectFrameworkSchema=object({framework:string().min(1).nullish()}),EVE_FRAMEWORK_INTEGRATIONS={nextjs:{label:`Next.js`,importSpecifier:`eve/next`},nuxt:{label:`Nuxt`,importSpecifier:`eve/nuxt`},nuxtjs:{label:`Nuxt`,importSpecifier:`eve/nuxt`},sveltekit:{label:`SvelteKit`,importSpecifier:`eve/sveltekit`}},FRAMEWORK_INTEGRATION_SOURCE_EXTENSIONS=new Set([`.cjs`,`.cts`,`.js`,`.json`,`.jsx`,`.mjs`,`.mts`,`.svelte`,`.ts`,`.tsx`,`.vue`]),FRAMEWORK_INTEGRATION_IGNORED_DIRECTORIES=new Set([`.eve`,`.git`,`.next`,`.nuxt`,`.output`,`.svelte-kit`,`.turbo`,`.vercel`,`build`,`coverage`,`dist`,`node_modules`]);function parseProjectFramework(e,t){let n=VercelProjectFrameworkSchema.safeParse(parseVercelJson(e,t));if(!n.success)throw Error(`Could not read Vercel project framework from ${t}.`);return n.data.framework??void 0}async function fetchProjectFramework(e,t,n,r){let s=normalizeVercelApiResult(await captureVercel([`api`,`/v9/projects/${n}`,`--scope`,t,`--raw`],{cwd:e,signal:r.signal,timeoutMs:VERCEL_PROJECT_REQUEST_TIMEOUT_MS}));if(s.ok)return parseProjectFramework(s.stdout,`project ${n}`);throw isForbiddenApiFailure(s.failure)&&requireVercelTeamAccess(s.failure),Error(`Could not inspect Vercel project "${n}". ${s.failure.message}`)}async function setProjectFramework(e,t,n,r,s,l){let u=normalizeVercelApiResult(await captureVercel([`api`,`/v9/projects/${n}`,`--scope`,t,`--method`,`PATCH`,`--raw-field`,`framework=${r}`,`--raw`],{cwd:e,onOutput:s,signal:l.signal,timeoutMs:VERCEL_PROJECT_REQUEST_TIMEOUT_MS}));if(!u.ok)throw isForbiddenApiFailure(u.failure)&&requireVercelTeamAccess(u.failure),Error(`Could not set Vercel project "${n}" framework to ${r}. ${u.failure.message}`)}async function confirmDetectedFramework(e,t,n){return await e.select({message:`Vercel detected ${n.label}. Is this project using ${n.importSpecifier}?`,options:[{value:!0,label:`Yes, keep ${t}`,hint:`Use this for a host app that integrates eve through ${n.importSpecifier}.`},{value:!1,label:`No, switch to eve`,hint:`Use this for a standalone eve agent.`}]})?`keep`:`switch-to-eve`}function sourceMentionsPackageSpecifier(e,t){return e.includes(`"${t}"`)||e.includes(`'${t}'`)||e.includes(`\`${t}\``)}async function directoryContainsPackageSpecifier(e,t){let n;try{n=await fs.readdir(e,{encoding:`utf8`,withFileTypes:!0})}catch{return!1}for(let r of n){let n=join(e,r.name);if(r.isDirectory()){if(FRAMEWORK_INTEGRATION_IGNORED_DIRECTORIES.has(r.name))continue;if(await directoryContainsPackageSpecifier(n,t))return!0;continue}if(!(!r.isFile()||!FRAMEWORK_INTEGRATION_SOURCE_EXTENSIONS.has(extname(r.name))))try{if(sourceMentionsPackageSpecifier(await fs.readFile(n,`utf8`),t))return!0}catch{continue}}return!1}async function detectFrameworkIntegrationImport(e,t){return directoryContainsPackageSpecifier(e,t)}async function resolveDetectedFrameworkAction(e,t,n,r){let i=EVE_FRAMEWORK_INTEGRATIONS[n];return i===void 0?`switch-to-eve`:await(r.detectFrameworkIntegrationImport??detectFrameworkIntegrationImport)(t,i.importSpecifier)?`keep`:r.headless?`switch-to-eve`:confirmDetectedFramework(e,n,i)}function frameworkPresetLabel(e){return EVE_FRAMEWORK_INTEGRATIONS[e]?.label??e}function describeError(e){return e instanceof Error?e.message:String(e)}async function syncHostFrameworkPreset(e,t,i,a){let o=await resolveVercelHostFrameworkPreset(t);if(o===void 0)return;let s=await readProjectLink(t);if(s===void 0)return;let c=frameworkPresetLabel(o),l;try{l=await fetchProjectFramework(t,s.orgId,s.projectId,a)}catch(t){if(a.signal?.aborted)throw t;e.log.warning(`Could not check this Vercel project's Framework Preset (${describeError(t)}). If it is not already ${c}, set it under Project Settings → Build and Deployment → Framework Settings before deploying.`);return}if(l===o)return;let u=l===void 0?void 0:frameworkPresetLabel(l),d=u===void 0?`had no Framework Preset set`:`was set to "${u}"`;try{await setProjectFramework(t,s.orgId,s.projectId,o,i,a)}catch(t){if(a.signal?.aborted)throw t;e.log.warning(`${describeError(t)} Set this Vercel project's Framework Preset to ${c} (Project Settings → Build and Deployment → Framework Settings) before deploying, or the deployment will not build your ${c} app.`);return}e.log.info(`This project uses ${c}, but its Vercel Framework Preset ${d}; switched it to ${c} so the deployment builds your app.`)}async function ensureCreatedProjectFramework(e,t,n,r,i,a){let o=await fetchProjectFramework(t,n,r,a);o!==`eve`&&(o===void 0?`switch-to-eve`:await resolveDetectedFrameworkAction(e,t,o,a))===`switch-to-eve`&&await setProjectFramework(t,n,r,`eve`,i,a)}export{ensureCreatedProjectFramework,syncHostFrameworkPreset};
Binary file
@@ -1 +1 @@
1
- import{z}from"#compiled/zod/index.js";import{runtimeToolCallActionRequestSchema}from"#shared/action-types.js";const inputOptionSchema=z.object({description:z.string().describe(`Optional additional context for this option.`).optional(),id:z.string().describe(`Stable identifier for the option.`),label:z.string().describe(`User-facing label for the option.`),style:z.enum([`primary`,`danger`,`default`]).describe(`Visual treatment hint for the option.`).optional()}).strict(),inputRequestKindSchema=z.enum([`question`,`session-limit`,`tool-approval`]),inputRequestSchema=z.object({action:runtimeToolCallActionRequestSchema,allowFreeform:z.boolean().describe(`Whether the user may answer with freeform text instead of selecting one of the provided options.`).optional(),display:z.enum([`confirmation`,`select`,`text`]).describe(`Rendering hint: the channel uses this to pick a UX treatment.`).optional(),kind:inputRequestKindSchema.describe(`Framework-owned request source used to resolve, route, and render the response.`),options:z.array(inputOptionSchema).describe(`Selectable answer options to present to the user.`).optional(),prompt:z.string().describe(`The prompt to present to the user.`),requestId:z.string().describe(`Stable identifier for this request.`)}).strict(),inputResponseSchema=z.object({optionId:z.string().optional(),requestId:z.string(),text:z.string().optional()}).strict();function parseInputResponse(e){return inputResponseSchema.parse(e)}function parseInputResponses(e){return inputResponseSchema.array().parse(e).map(e=>e)}function isInputRequest(e){return inputRequestSchema.safeParse(e).success}function isInputResponse(e){return inputResponseSchema.safeParse(e).success}export{inputOptionSchema,inputRequestKindSchema,inputRequestSchema,inputResponseSchema,isInputRequest,isInputResponse,parseInputResponse,parseInputResponses};
1
+ import{z}from"#compiled/zod/index.js";import{runtimeToolCallActionRequestSchema}from"#shared/action-types.js";const inputOptionSchema=z.object({description:z.string().describe(`Optional additional context for this option.`).optional(),id:z.string().describe(`Stable identifier for the option.`),label:z.string().describe(`User-facing label for the option.`),style:z.enum([`primary`,`danger`,`default`]).describe(`Visual treatment hint for the option.`).optional()}).strict(),inputRequestKindSchema=z.enum([`question`,`session-limit`,`tool-approval`]),inputRequestSchema=z.object({action:runtimeToolCallActionRequestSchema,allowFreeform:z.boolean().describe(`Whether the user may answer with freeform text instead of selecting one of the provided options.`).optional(),display:z.enum([`confirmation`,`select`,`text`]).describe(`Rendering hint: the channel uses this to pick a UX treatment.`).optional(),kind:inputRequestKindSchema.describe(`Framework-owned request source used to resolve, route, and render the response.`),options:z.array(inputOptionSchema).describe(`Selectable answer options to present to the user.`).optional(),prompt:z.string().describe(`The prompt to present to the user.`),requestId:z.string().describe(`Stable identifier for this request.`)}).strict(),inputResponseSchema=z.object({optionId:z.string().optional(),requestId:z.string(),text:z.string().optional()}).strict();function parseInputResponse(e){return inputResponseSchema.parse(e)}function parseInputResponses(e){return inputResponseSchema.array().parse(e).map(e=>e)}function isInputRequest(t){return z.validate(inputRequestSchema,t)}function isInputResponse(t){return z.validate(inputResponseSchema,t)}export{inputOptionSchema,inputRequestKindSchema,inputRequestSchema,inputResponseSchema,isInputRequest,isInputResponse,parseInputResponse,parseInputResponses};
@@ -0,0 +1,20 @@
1
+ import type { ChannelAudience } from "#shared/channel-audience.js";
2
+ import { type InstrumentationDecision } from "#shared/instrumentation-decision.js";
3
+ /** @deprecated Use `TraceCapturePolicy` to select directional content. */
4
+ export type InstrumentationCapture = "content" | "metadata";
5
+ export interface TraceCaptureContext {
6
+ readonly agentName: string;
7
+ readonly audience: ChannelAudience;
8
+ readonly channelType?: string;
9
+ }
10
+ export type TracePolicyDecision = {
11
+ readonly emit: false;
12
+ } | {
13
+ readonly emit: true;
14
+ readonly recordInputs: boolean;
15
+ readonly recordOutputs: boolean;
16
+ };
17
+ export type TraceCapturePolicy = (trace: TraceCaptureContext) => TracePolicyDecision | boolean;
18
+ export declare function legacyCaptureTracePolicy(capture: InstrumentationCapture | undefined): TraceCapturePolicy | undefined;
19
+ export declare function resolveTracePolicy(policy: TraceCapturePolicy | undefined, trace: TraceCaptureContext, onError?: (error: unknown) => void): InstrumentationDecision;
20
+ export declare function resolveTracePolicyDecision(decision: TracePolicyDecision | boolean, audience: ChannelAudience): InstrumentationDecision;
@@ -0,0 +1 @@
1
+ import{shouldCaptureInstrumentationContent}from"#shared/instrumentation-content.js";import{DROP_INSTRUMENTATION}from"#shared/instrumentation-decision.js";function legacyCaptureTracePolicy(e){if(e===void 0)return;let t=e===`content`;return()=>({emit:!0,recordInputs:t,recordOutputs:t})}function resolveTracePolicy(e,n,r){try{let t=e?.({agentName:n.agentName,audience:n.audience,channelType:n.channelType});return resolveTracePolicyDecision(t??{emit:!0,recordInputs:n.audience===`public`,recordOutputs:n.audience===`public`},n.audience)}catch(e){try{r?.(e)}catch{}return DROP_INSTRUMENTATION}}function resolveTracePolicyDecision(n,r){if(n===!1)return DROP_INSTRUMENTATION;if(n===!0){let t=shouldCaptureInstrumentationContent(r);return{action:`record`,recordInputs:t,recordOutputs:t}}return n.emit?{action:`record`,recordInputs:n.recordInputs,recordOutputs:n.recordOutputs}:DROP_INSTRUMENTATION}export{legacyCaptureTracePolicy,resolveTracePolicy,resolveTracePolicyDecision};
@@ -1,17 +1,21 @@
1
1
  import type { ToolSet } from "ai";
2
- import type * as CodeModeModule from "#compiled/experimental-ai-sdk-code-mode/index.js";
2
+ import type * as CodeModeModule from "#compiled/@ai-sdk/code-mode/index.js";
3
3
  /** Model-facing tool name for eve's dynamic subagent orchestration tool. */
4
4
  export declare const WORKFLOW_TOOL_NAME = "Workflow";
5
- type WorkflowSandboxModule = Pick<typeof CodeModeModule, "continueCodeModeInterrupt" | "createCodeModeTool" | "getCodeModeInterrupt" | "requestCodeModeInterrupt" | "unwrapCodeModeResult">;
5
+ type WorkflowSandboxModule = {
6
+ readonly continueCodeModeInterrupt: typeof CodeModeModule.experimental_continueCodeModeInterrupt;
7
+ readonly createCodeModeTool: typeof CodeModeModule.experimental_createCodeModeTool;
8
+ readonly getCodeModeInterrupt: typeof CodeModeModule.experimental_getCodeModeInterrupt;
9
+ readonly requestCodeModeInterrupt: typeof CodeModeModule.experimental_requestCodeModeInterrupt;
10
+ readonly unwrapCodeModeResult: typeof CodeModeModule.experimental_unwrapCodeModeResult;
11
+ };
6
12
  export type WorkflowSandboxInterrupt = CodeModeModule.CodeModeInterrupt;
7
- export type WorkflowSandboxLifecycle = NonNullable<CodeModeModule.CodeModeOptions["lifecycle"]>;
8
13
  export type WorkflowSandboxContinuationSecurity = CodeModeModule.CodeModeContinuationSecurityOptions;
9
14
  export declare function installWorkflowSandboxModule(module: WorkflowSandboxModule): void;
10
15
  export declare function createWorkflowSandboxTool(input: {
11
16
  readonly bridgeRequestLimit: number;
12
17
  readonly continuationSecurity: WorkflowSandboxContinuationSecurity;
13
18
  readonly hostTools: ToolSet;
14
- readonly lifecycle?: WorkflowSandboxLifecycle;
15
19
  }): Promise<ToolSet[string]>;
16
20
  export declare function requestWorkflowSandboxInterrupt(input: {
17
21
  readonly kind: string;
@@ -24,7 +28,6 @@ export declare function continueWorkflowSandboxInterrupt(input: {
24
28
  readonly bridgeRequestLimit: number;
25
29
  readonly continuationSecurity: WorkflowSandboxContinuationSecurity;
26
30
  readonly interrupt: WorkflowSandboxInterrupt;
27
- readonly lifecycle?: WorkflowSandboxLifecycle;
28
31
  readonly resolution: unknown;
29
32
  readonly tools: ToolSet;
30
33
  }): Promise<unknown>;
@@ -36,4 +39,6 @@ export declare function unwrapWorkflowSandboxResult(value: unknown, continuation
36
39
  readonly status: "interrupted";
37
40
  }>;
38
41
  export declare function readWorkflowSandboxResolution(options: unknown): unknown;
42
+ /** Reconstructs every unresolved interruption from the authenticated continuation. */
43
+ export declare function getWorkflowSandboxPendingInterrupts(interrupt: WorkflowSandboxInterrupt): WorkflowSandboxInterrupt[];
39
44
  export {};
@@ -1 +1 @@
1
- const WORKFLOW_TOOL_NAME=`Workflow`,WORKFLOW_SANDBOX_MODULE_KEY=Symbol.for(`eve.workflowSandbox.module`),WORKFLOW_SANDBOX_MODULE_SPECIFIER=[`#compiled`,`experimental-ai-sdk-code-mode`,`index.js`].join(`/`);let workflowSandboxModulePromise;function installWorkflowSandboxModule(e){globalThis[WORKFLOW_SANDBOX_MODULE_KEY]=e}async function createWorkflowSandboxTool(e){let{createCodeModeTool:t}=await loadWorkflowSandboxModule();return t(e.hostTools,createWorkflowSandboxOptions(e.bridgeRequestLimit,e.continuationSecurity,e.lifecycle))}async function requestWorkflowSandboxInterrupt(e){let{requestCodeModeInterrupt:t}=await loadWorkflowSandboxModule();return t(e)}async function getWorkflowSandboxInterrupt(e,t){let{getCodeModeInterrupt:n}=await loadWorkflowSandboxModule();return n(e,t)}async function continueWorkflowSandboxInterrupt(e){let{continueCodeModeInterrupt:t}=await loadWorkflowSandboxModule();return t({interrupt:e.interrupt,options:createWorkflowSandboxOptions(e.bridgeRequestLimit,e.continuationSecurity,e.lifecycle),resolution:e.resolution,tools:e.tools})}async function unwrapWorkflowSandboxResult(e,t){let{unwrapCodeModeResult:n}=await loadWorkflowSandboxModule();return n(e,t)}function readWorkflowSandboxResolution(e){if(typeof e!=`object`||!e)return;let t=e.codeModeInterrupt;if(!(typeof t!=`object`||!t))return t.resolution}function createWorkflowSandboxOptions(e,t,n){let r={continuationSecurity:t,executionPolicy:{maxBridgeRequests:e,maxInFlightBridgeRequests:e}};return n!==void 0&&(r.lifecycle=n),r}async function loadWorkflowSandboxModule(){let e=globalThis[WORKFLOW_SANDBOX_MODULE_KEY];return e===void 0?(workflowSandboxModulePromise??=importWorkflowSandboxModule(WORKFLOW_SANDBOX_MODULE_SPECIFIER),await workflowSandboxModulePromise):e}async function importWorkflowSandboxModule(e){return await import(e)}export{WORKFLOW_TOOL_NAME,continueWorkflowSandboxInterrupt,createWorkflowSandboxTool,getWorkflowSandboxInterrupt,installWorkflowSandboxModule,readWorkflowSandboxResolution,requestWorkflowSandboxInterrupt,unwrapWorkflowSandboxResult};
1
+ const WORKFLOW_TOOL_NAME=`Workflow`,WORKFLOW_SANDBOX_MODULE_KEY=Symbol.for(`eve.workflowSandbox.module`),WORKFLOW_SANDBOX_MODULE_SPECIFIER=[`#compiled`,`@ai-sdk`,`code-mode`,`index.js`].join(`/`);let workflowSandboxModulePromise;function installWorkflowSandboxModule(e){globalThis[WORKFLOW_SANDBOX_MODULE_KEY]=e}async function createWorkflowSandboxTool(e){let{createCodeModeTool:t}=await loadWorkflowSandboxModule();return t(e.hostTools,createWorkflowSandboxOptions(e.bridgeRequestLimit,e.continuationSecurity))}async function requestWorkflowSandboxInterrupt(e){let{requestCodeModeInterrupt:t}=await loadWorkflowSandboxModule();return t(e)}async function getWorkflowSandboxInterrupt(e,t){let{getCodeModeInterrupt:n}=await loadWorkflowSandboxModule();return n(e,t)}async function continueWorkflowSandboxInterrupt(e){let{continueCodeModeInterrupt:t}=await loadWorkflowSandboxModule();return t({interrupt:e.interrupt,options:createWorkflowSandboxOptions(e.bridgeRequestLimit,e.continuationSecurity),resolution:e.resolution,tools:e.tools})}async function unwrapWorkflowSandboxResult(e,t){let{unwrapCodeModeResult:n}=await loadWorkflowSandboxModule();return n(e,t)}function readWorkflowSandboxResolution(e){if(typeof e!=`object`||!e)return;let t=e.codeModeInterrupt;if(!(typeof t!=`object`||!t))return t.resolution}function getWorkflowSandboxPendingInterrupts(e){let t=e.continuation,n=new Set(t.resolutions.map(e=>e.runInterruptionId));return t.pendingInterruptions.flatMap(e=>n.has(e.runInterruptionId)?[]:[{continuation:t,input:e.input,interruptId:e.interruptId,outerToolCallId:t.outerToolCallId,payload:e.payload,toolCallId:e.toolCallId,toolName:e.toolName,type:`code-mode-interrupt`}])}function createWorkflowSandboxOptions(e,t){return{continuationSecurity:t,executionPolicy:{maxBridgeRequests:e,maxInFlightBridgeRequests:e}}}async function loadWorkflowSandboxModule(){let e=globalThis[WORKFLOW_SANDBOX_MODULE_KEY];return e===void 0?(workflowSandboxModulePromise??=importWorkflowSandboxModule(WORKFLOW_SANDBOX_MODULE_SPECIFIER),await workflowSandboxModulePromise):e}async function importWorkflowSandboxModule(e){let t=await import(e);return{continueCodeModeInterrupt:t.experimental_continueCodeModeInterrupt,createCodeModeTool:t.experimental_createCodeModeTool,getCodeModeInterrupt:t.experimental_getCodeModeInterrupt,requestCodeModeInterrupt:t.experimental_requestCodeModeInterrupt,unwrapCodeModeResult:t.experimental_unwrapCodeModeResult}}export{WORKFLOW_TOOL_NAME,continueWorkflowSandboxInterrupt,createWorkflowSandboxTool,getWorkflowSandboxInterrupt,getWorkflowSandboxPendingInterrupts,installWorkflowSandboxModule,readWorkflowSandboxResolution,requestWorkflowSandboxInterrupt,unwrapWorkflowSandboxResult};
@@ -1,5 +1,5 @@
1
1
  import { type Context, type SpanContext, type Tracer } from "#compiled/@opentelemetry/api/index.js";
2
- import type { InstrumentationActionStartedEvent, InstrumentationAttemptScope, InstrumentationProviderDefinition } from "#harness/instrumentation/lifecycle.js";
2
+ import type { InstrumentationActionStartedEvent, InstrumentationAttemptScope, InstrumentationProviderDefinition } from "#instrumentation/lifecycle.js";
3
3
  import type { AgentSpanIdGenerator } from "#tracing/agent-span-id-generator.js";
4
4
  import type { AgentTraceStateStore } from "#tracing/agent-trace-state.js";
5
5
  export interface AgentActionInstrumentation {
@@ -1 +1 @@
1
- import{normalizeChannelAudience}from"#shared/channel-audience.js";import{isSampledTrace}from"#tracing/sampled-trace.js";import{ROOT_CONTEXT,SpanStatusCode,trace}from"#compiled/@opentelemetry/api/index.js";import{actionIdempotencyKey,attemptIdempotencyKey}from"#harness/instrumentation/lifecycle.js";import{contentAttribute}from"#tracing/agent-otel-content.js";import{setAgentUsage}from"#tracing/agent-otel-usage.js";import{withChannelAudience}from"#tracing/channel-audience-context.js";function createAgentActionInstrumentation(n){let r=new Map,onStarted=async i=>{let a=await n.resolveTraceContext(i);if(a===void 0||!isSampledTrace(a))return;let c=await n.stateStore.getAction(i.idempotencyKey)??{attemptIndex:i.scope.attemptIndex,callId:i.callId,channelAudience:normalizeChannelAudience(i.scope.channelAudience),inputAttribute:n.recordInputs?contentAttribute(i.input,!1):void 0,kind:i.kind,name:i.name,parent:{spanId:n.idGenerator.deriveSpanId(attemptIdempotencyKey(i.scope)),traceFlags:a.traceFlags,traceId:a.traceId},rootSessionId:i.scope.rootSessionId??i.scope.sessionId,sessionId:i.scope.sessionId,spanId:n.idGenerator.deriveSpanId(`action:${i.idempotencyKey}`),startTimeMs:Date.now(),stepIndex:i.scope.stepIndex,turnId:i.scope.turnId};await n.stateStore.setAction(i.idempotencyKey,c);let l=r.get(i.scope.attemptId)??new Set;l.add(i.idempotencyKey),r.set(i.scope.attemptId,l)},onTerminal=async e=>{let t=await n.stateStore.getAction(e.idempotencyKey);if(t!==void 0)try{let r=startSpan(t);if(r.setAttribute(`agent.action.outcome`,e.outcome),e.type===`action.failed`)e.errorCode!==void 0&&(r.setAttribute(`agent.action.error.code`,e.errorCode),r.setAttribute(`error.type`,e.errorCode)),recordError(r,e.error);else if(e.output.type===`error`)recordError(r,e.output.error);else if(e.usage!==void 0&&setAgentUsage(r,e.usage),n.recordOutputs){let t=contentAttribute(e.output.output,!1);t!==void 0&&r.setAttribute(`gen_ai.tool.call.result`,t)}r.end(e.acceptedAtMs)}finally{await n.stateStore.deleteAction(e.idempotencyKey),forget(e.idempotencyKey)}},startSpan=e=>{let t=n.idGenerator.withSpanId(e.spanId,()=>n.tracer.startSpan(`agent.action`,{attributes:{"agent.action.call_id":e.callId,"agent.action.kind":e.kind,"agent.action.name":e.name,"agent.framework.name":`eve`,"agent.framework.version":n.frameworkVersion,"agent.session.id":e.sessionId,"agent.step.attempt":e.attemptIndex,"agent.step.index":e.stepIndex,"agent.turn.id":e.turnId},startTime:e.startTimeMs},contextFromActionState(e)));return e.inputAttribute!==void 0&&t.setAttribute(`gen_ai.tool.call.arguments`,e.inputAttribute),t};return{async contextFor(e,t,r){let i=actionIdempotencyKey(e,t,r),o=await n.stateStore.getAction(i);if(o!==void 0)return actionContext(o);let s=await n.stateStore.findAction(e,r);return s===void 0?void 0:actionContext(s)},deleteForSession:e=>n.stateStore.deleteActions(e),deleteForTurn:(e,t)=>n.stateStore.deleteActions(e,t),async failForAttempt(e,t){let i=r.get(e.attemptId);if(i!==void 0){r.delete(e.attemptId);for(let e of i){let r=await n.stateStore.getAction(e);if(r===void 0)continue;let i=startSpan(r);recordError(i,t),i.end(),await n.stateStore.deleteAction(e)}}},events:{"action.completed":onTerminal,"action.failed":onTerminal,"action.started":onStarted}};function forget(e){for(let[t,n]of r)n.delete(e),n.size===0&&r.delete(t)}}function actionContext(e){let t={isRemote:!1,spanId:e.spanId,traceFlags:e.parent.traceFlags,traceId:e.parent.traceId};return{context:withChannelAudience(trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext(t)),e.channelAudience),spanContext:t}}function contextFromActionState(e){return withChannelAudience(trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext({...e.parent,isRemote:!1})),e.channelAudience)}function recordError(e,t){t instanceof Error?(e.recordException(t),e.setStatus({code:SpanStatusCode.ERROR,message:t.message})):e.setStatus({code:SpanStatusCode.ERROR})}export{createAgentActionInstrumentation};
1
+ import{normalizeChannelAudience}from"#shared/channel-audience.js";import{isSampledTrace}from"#tracing/sampled-trace.js";import{ROOT_CONTEXT,SpanStatusCode,trace}from"#compiled/@opentelemetry/api/index.js";import{actionIdempotencyKey,attemptIdempotencyKey}from"#instrumentation/lifecycle.js";import{contentAttribute}from"#tracing/agent-otel-content.js";import{setAgentUsage}from"#tracing/agent-otel-usage.js";import{withChannelAudience}from"#tracing/channel-audience-context.js";function createAgentActionInstrumentation(n){let r=new Map,onStarted=async i=>{let a=await n.resolveTraceContext(i);if(a===void 0||!isSampledTrace(a))return;let c=await n.stateStore.getAction(i.idempotencyKey)??{attemptIndex:i.scope.attemptIndex,callId:i.callId,channelAudience:normalizeChannelAudience(i.scope.channelAudience),inputAttribute:n.recordInputs?contentAttribute(i.input,!1):void 0,kind:i.kind,name:i.name,parent:{spanId:n.idGenerator.deriveSpanId(attemptIdempotencyKey(i.scope)),traceFlags:a.traceFlags,traceId:a.traceId},rootSessionId:i.scope.rootSessionId??i.scope.sessionId,sessionId:i.scope.sessionId,spanId:n.idGenerator.deriveSpanId(`action:${i.idempotencyKey}`),startTimeMs:Date.now(),stepIndex:i.scope.stepIndex,turnId:i.scope.turnId};await n.stateStore.setAction(i.idempotencyKey,c);let l=r.get(i.scope.attemptId)??new Set;l.add(i.idempotencyKey),r.set(i.scope.attemptId,l)},onTerminal=async e=>{let t=await n.stateStore.getAction(e.idempotencyKey);if(t!==void 0)try{let r=startSpan(t);if(r.setAttribute(`agent.action.outcome`,e.outcome),e.type===`action.failed`)e.errorCode!==void 0&&(r.setAttribute(`agent.action.error.code`,e.errorCode),r.setAttribute(`error.type`,e.errorCode)),recordError(r,e.error);else if(e.output.type===`error`)recordError(r,e.output.error);else if(e.usage!==void 0&&setAgentUsage(r,e.usage,{includeGenAiDetails:!1}),n.recordOutputs){let t=contentAttribute(e.output.output,!1);t!==void 0&&r.setAttribute(`gen_ai.tool.call.result`,t)}r.end(e.acceptedAtMs)}finally{await n.stateStore.deleteAction(e.idempotencyKey),forget(e.idempotencyKey)}},startSpan=e=>{let t=n.idGenerator.withSpanId(e.spanId,()=>n.tracer.startSpan(`agent.action`,{attributes:{"agent.action.call_id":e.callId,"agent.action.kind":e.kind,"agent.action.name":e.name,"agent.framework.name":`eve`,"agent.framework.version":n.frameworkVersion,"agent.session.id":e.sessionId,"agent.step.attempt":e.attemptIndex,"agent.step.index":e.stepIndex,"agent.turn.id":e.turnId},startTime:e.startTimeMs},contextFromActionState(e)));return e.inputAttribute!==void 0&&t.setAttribute(`gen_ai.tool.call.arguments`,e.inputAttribute),t};return{async contextFor(e,t,r){let i=actionIdempotencyKey(e,t,r),o=await n.stateStore.getAction(i);if(o!==void 0)return actionContext(o);let s=await n.stateStore.findAction(e,r);return s===void 0?void 0:actionContext(s)},deleteForSession:e=>n.stateStore.deleteActions(e),deleteForTurn:(e,t)=>n.stateStore.deleteActions(e,t),async failForAttempt(e,t){let i=r.get(e.attemptId);if(i!==void 0){r.delete(e.attemptId);for(let e of i){let r=await n.stateStore.getAction(e);if(r===void 0)continue;let i=startSpan(r);recordError(i,t),i.end(),await n.stateStore.deleteAction(e)}}},events:{"action.completed":onTerminal,"action.failed":onTerminal,"action.started":onStarted}};function forget(e){for(let[t,n]of r)n.delete(e),n.size===0&&r.delete(t)}}function actionContext(e){let t={isRemote:!1,spanId:e.spanId,traceFlags:e.parent.traceFlags,traceId:e.parent.traceId};return{context:withChannelAudience(trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext(t)),e.channelAudience),spanContext:t}}function contextFromActionState(e){return withChannelAudience(trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext({...e.parent,isRemote:!1})),e.channelAudience)}function recordError(e,t){t instanceof Error?(e.recordException(t),e.setStatus({code:SpanStatusCode.ERROR,message:t.message})):e.setStatus({code:SpanStatusCode.ERROR})}export{createAgentActionInstrumentation};
@@ -1,5 +1,5 @@
1
1
  import { type Tracer } from "#compiled/@opentelemetry/api/index.js";
2
- import type { InstrumentationProviderDefinition } from "#harness/instrumentation/lifecycle.js";
2
+ import type { InstrumentationProviderDefinition } from "#instrumentation/lifecycle.js";
3
3
  import type { AgentActionContext } from "#tracing/agent-action-instrumentation.js";
4
4
  import type { AgentSpanIdGenerator } from "#tracing/agent-span-id-generator.js";
5
5
  /** Builds durable approval wait spans under their originating runtime action. */
@@ -1,5 +1,5 @@
1
1
  import { type Tracer } from "#compiled/@opentelemetry/api/index.js";
2
- import type { InstrumentationProviderDefinition, InstrumentationSessionStartedEvent } from "#harness/instrumentation/lifecycle.js";
2
+ import type { InstrumentationProviderDefinition, InstrumentationSessionStartedEvent } from "#instrumentation/lifecycle.js";
3
3
  import type { AgentSpanIdGenerator } from "#tracing/agent-span-id-generator.js";
4
4
  import type { AgentSessionTraceState, AgentTraceStateStore } from "#tracing/agent-trace-state.js";
5
5
  /** Builds durable channel delivery spans around the turn that consumes each request. */
@@ -1 +1 @@
1
- import{normalizeChannelAudience}from"#shared/channel-audience.js";import{isSampledTrace}from"#tracing/sampled-trace.js";import{ROOT_CONTEXT,SpanKind,SpanStatusCode,trace}from"#compiled/@opentelemetry/api/index.js";import{sessionIdempotencyKey}from"#harness/instrumentation/lifecycle.js";import{contentAttribute}from"#tracing/agent-otel-content.js";function createAgentChannelDeliveryInstrumentation(n){let onStarted=async(r,i)=>{let a=await n.ensureSessionContext({agentName:r.agentName,channelAudience:r.delivery.channelAudience,channelKind:r.delivery.channelKind,idempotencyKey:sessionIdempotencyKey(r.sessionId),parentTraceContext:r.parentTraceContext,rootSessionId:r.rootSessionId,sessionId:r.sessionId,traceSeed:r.traceSeed,type:`session.started`});if(!isSampledTrace(a.context))return;let c=n.recordInputs?contentAttribute(r.input,!1):void 0,l={channelAudience:normalizeChannelAudience(r.delivery.channelAudience),parent:{isRemote:a.context.isRemote??!1,spanId:a.context.spanId,traceFlags:a.context.traceFlags,traceId:a.context.traceId},spanId:n.idGenerator.deriveSpanId(`channel-delivery:${r.idempotencyKey}`),startTimeMs:Date.now()};c!==void 0&&(l.inputAttribute=c),r.delivery.requestTraceContext!==void 0&&(l.requestTraceContext={spanId:r.delivery.requestTraceContext.spanId,traceFlags:r.delivery.requestTraceContext.traceFlags,traceId:r.delivery.requestTraceContext.traceId}),i.state.set(l)},onTerminal=async(e,t)=>{let i=readState(t.state.get());if(i===void 0)return;let a=e.turnId===void 0?void 0:await n.stateStore.getTurn(e.sessionId,e.turnId),o=a===void 0?i.parent:{isRemote:a.parentIsRemote??!1,spanId:a.parentSpanId,traceFlags:a.context.traceFlags,traceId:a.context.traceId},s=a===void 0?i.startTimeMs:Math.max(i.startTimeMs,a.startTimeMs),c=i.requestTraceContext,l=n.idGenerator.withSpanId(i.spanId,()=>n.tracer.startSpan(`agent.channel.delivery`,{attributes:{"agent.channel.delivery.id":e.delivery.deliveryId,"agent.channel.delivery.outcome":e.outcome,"agent.channel.kind":e.delivery.channelKind,"agent.channel.name":e.delivery.channelName,"agent.channel.request.id":e.delivery.requestId,"agent.framework.name":`eve`,"agent.framework.version":n.frameworkVersion,"agent.name":e.agentName,"agent.session.id":e.sessionId,"agent.turn.id":e.turnId,"agent.turn.sequence":e.sequence},kind:SpanKind.CONSUMER,links:c===void 0?void 0:[{attributes:{"eve.link.type":`channel.request`},context:c}],startTime:s},contextFromSpanContext(o)));if(l.addEvent(`channel.delivery.started`,void 0,s),l.addEvent(e.type),i.inputAttribute!==void 0&&l.setAttribute(`agent.channel.delivery.input`,i.inputAttribute),e.outcome===`failed`){let t=e.errorCode??(e.error instanceof Error?e.error.name:`Error`);l.setAttribute(`error.type`,t),e.errorCode!==void 0&&l.setAttribute(`agent.channel.delivery.error.code`,e.errorCode),recordError(l,e.error)}l.end()};return{"channel.delivery.cancelled":onTerminal,"channel.delivery.completed":onTerminal,"channel.delivery.failed":onTerminal,"channel.delivery.started":onStarted}}function readState(t){if(!isRecord(t)||!isSpanContext(t.parent)||typeof t.spanId!=`string`||typeof t.startTimeMs!=`number`)return;let n=isSpanContext(t.requestTraceContext)?t.requestTraceContext:void 0;return{channelAudience:normalizeChannelAudience(t.channelAudience),inputAttribute:typeof t.inputAttribute==`string`?t.inputAttribute:void 0,parent:t.parent,requestTraceContext:n,spanId:t.spanId,startTimeMs:t.startTimeMs}}function isSpanContext(e){return isRecord(e)&&typeof e.spanId==`string`&&typeof e.traceFlags==`number`&&typeof e.traceId==`string`}function isRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function contextFromSpanContext(e){return trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext(e))}function recordError(e,t){t instanceof Error?(e.recordException(t),e.setStatus({code:SpanStatusCode.ERROR,message:t.message})):e.setStatus({code:SpanStatusCode.ERROR})}export{createAgentChannelDeliveryInstrumentation};
1
+ import{normalizeChannelAudience}from"#shared/channel-audience.js";import{isSampledTrace}from"#tracing/sampled-trace.js";import{ROOT_CONTEXT,SpanKind,SpanStatusCode,trace}from"#compiled/@opentelemetry/api/index.js";import{sessionIdempotencyKey}from"#instrumentation/lifecycle.js";import{contentAttribute}from"#tracing/agent-otel-content.js";function createAgentChannelDeliveryInstrumentation(n){let onStarted=async(r,i)=>{let a=await n.ensureSessionContext({agentName:r.agentName,channelAudience:r.delivery.channelAudience,channelKind:r.delivery.channelKind,idempotencyKey:sessionIdempotencyKey(r.sessionId),parentTraceContext:r.parentTraceContext,rootSessionId:r.rootSessionId,sessionId:r.sessionId,traceSeed:r.traceSeed,type:`session.started`});if(!isSampledTrace(a.context))return;let c=n.recordInputs?contentAttribute(r.input,!1):void 0,l={channelAudience:normalizeChannelAudience(r.delivery.channelAudience),parent:{isRemote:a.context.isRemote??!1,spanId:a.context.spanId,traceFlags:a.context.traceFlags,traceId:a.context.traceId},spanId:n.idGenerator.deriveSpanId(`channel-delivery:${r.idempotencyKey}`),startTimeMs:Date.now()};c!==void 0&&(l.inputAttribute=c),r.delivery.requestTraceContext!==void 0&&(l.requestTraceContext={spanId:r.delivery.requestTraceContext.spanId,traceFlags:r.delivery.requestTraceContext.traceFlags,traceId:r.delivery.requestTraceContext.traceId}),i.state.set(l)},onTerminal=async(e,t)=>{let i=readState(t.state.get());if(i===void 0)return;let a=e.turnId===void 0?void 0:await n.stateStore.getTurn(e.sessionId,e.turnId),o=a===void 0?i.startTimeMs:Math.max(i.startTimeMs,a.startTimeMs),s=i.requestTraceContext,c=n.idGenerator.withSpanId(i.spanId,()=>n.tracer.startSpan(`agent.channel.delivery`,{attributes:{"agent.channel.delivery.id":e.delivery.deliveryId,"agent.channel.delivery.outcome":e.outcome,"agent.channel.kind":e.delivery.channelKind,"agent.channel.name":e.delivery.channelName,"agent.channel.request.id":e.delivery.requestId,"agent.framework.name":`eve`,"agent.framework.version":n.frameworkVersion,"agent.name":e.agentName,"agent.session.id":e.sessionId,"agent.turn.id":e.turnId,"agent.turn.sequence":e.sequence},kind:SpanKind.CONSUMER,links:s===void 0?void 0:[{attributes:{"eve.link.type":`channel.request`},context:s}],startTime:o},contextFromSpanContext(i.parent)));if(c.addEvent(`channel.delivery.started`,void 0,o),c.addEvent(e.type),i.inputAttribute!==void 0&&c.setAttribute(`agent.channel.delivery.input`,i.inputAttribute),e.outcome===`failed`){let t=e.errorCode??(e.error instanceof Error?e.error.name:`Error`);c.setAttribute(`error.type`,t),e.errorCode!==void 0&&c.setAttribute(`agent.channel.delivery.error.code`,e.errorCode),recordError(c,e.error)}c.end(),a!==void 0&&e.turnId!==void 0&&a.parentSpanId===i.parent.spanId&&a.context.traceId===i.parent.traceId&&await n.stateStore.updateTurn(e.sessionId,e.turnId,e=>e.parentSpanId===i.parent.spanId&&e.context.traceId===i.parent.traceId?{...e,parentIsRemote:!1,parentSpanId:i.spanId}:e)};return{"channel.delivery.cancelled":onTerminal,"channel.delivery.completed":onTerminal,"channel.delivery.failed":onTerminal,"channel.delivery.started":onStarted}}function readState(t){if(!isRecord(t)||!isSpanContext(t.parent)||typeof t.spanId!=`string`||typeof t.startTimeMs!=`number`)return;let n=isSpanContext(t.requestTraceContext)?t.requestTraceContext:void 0;return{channelAudience:normalizeChannelAudience(t.channelAudience),inputAttribute:typeof t.inputAttribute==`string`?t.inputAttribute:void 0,parent:t.parent,requestTraceContext:n,spanId:t.spanId,startTimeMs:t.startTimeMs}}function isSpanContext(e){return isRecord(e)&&typeof e.spanId==`string`&&typeof e.traceFlags==`number`&&typeof e.traceId==`string`}function isRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function contextFromSpanContext(e){return trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext(e))}function recordError(e,t){t instanceof Error?(e.recordException(t),e.setStatus({code:SpanStatusCode.ERROR,message:t.message})):e.setStatus({code:SpanStatusCode.ERROR})}export{createAgentChannelDeliveryInstrumentation};
@@ -2,7 +2,7 @@ import { type Tracer } from "#compiled/@opentelemetry/api/index.js";
2
2
  import type { AgentTraceStateStore } from "#tracing/agent-trace-state.js";
3
3
  import type { AgentSpanIdGenerator } from "#tracing/agent-span-id-generator.js";
4
4
  import type { TraceCapturePolicy } from "#tracing/otel-declaration.js";
5
- import type { InstrumentationContextRunner, InstrumentationProviderDefinition, InstrumentationSessionStartedEvent, InstrumentationTraceSeed, InstrumentationTurnStartedEvent } from "#harness/instrumentation/lifecycle.js";
5
+ import type { InstrumentationContextRunner, InstrumentationProviderDefinition, InstrumentationSessionStartedEvent, InstrumentationTraceSeed, InstrumentationTurnStartedEvent } from "#instrumentation/lifecycle.js";
6
6
  export interface AgentOtelInstrumentationInput {
7
7
  /**
8
8
  * Whether to write model prompts and tool call inputs onto spans at all.
@@ -25,5 +25,5 @@ export interface AgentOtelInstrumentation {
25
25
  readonly prepareTurnTrace: (event: InstrumentationTurnStartedEvent) => Promise<InstrumentationTraceSeed>;
26
26
  readonly runInContext: InstrumentationContextRunner;
27
27
  }
28
- /** Creates OTel instrumentation for eve's structural `agent.*` convention. */
28
+ /** Creates OTel instrumentation for eve's structural and GenAI spans. */
29
29
  export declare function createAgentOtelInstrumentation(input: AgentOtelInstrumentationInput): AgentOtelInstrumentation;
@@ -1,2 +1,2 @@
1
- import{normalizeChannelAudience}from"#shared/channel-audience.js";import{contextStorage}from"#context/container.js";import{SessionTraceSeedKey}from"#context/keys.js";import{isSampledTrace,resolveTracePolicyDecision}from"#tracing/sampled-trace.js";import{ROOT_CONTEXT,SpanStatusCode,context,trace}from"#compiled/@opentelemetry/api/index.js";import{attemptIdempotencyKey}from"#harness/instrumentation/lifecycle.js";import{withoutInstrumentationContent}from"#harness/instrumentation/content.js";import{contentAttribute,genAiInputMessagesAttribute,genAiOutputMessagesAttribute,genAiSystemInstructionsAttribute,messagesContentAttribute,systemPromptAttribute,textContentAttribute,toolResultsContentAttribute}from"#tracing/agent-otel-content.js";import{setAgentUsage}from"#tracing/agent-otel-usage.js";import{withChannelAudience}from"#tracing/channel-audience-context.js";import{instrumentationEventForTraceDecision}from"#harness/instrumentation/content-policy.js";import{createAgentActionInstrumentation}from"#tracing/agent-action-instrumentation.js";import{createAgentApprovalInstrumentation}from"#tracing/agent-approval-instrumentation.js";import{createAgentChannelDeliveryInstrumentation}from"#tracing/agent-channel-delivery-instrumentation.js";import{createAgentToolInstrumentation}from"#tracing/agent-tool-instrumentation.js";import{createAgentOtelSessionContext}from"#tracing/agent-otel-session-context.js";import{suppressTracing}from"#tracing/suppress-tracing.js";function createAgentOtelInstrumentation(e){let a=e.recordInputs??!1,o=e.recordOutputs??!1,m=new WeakMap,h=new Map,g=new WeakMap,_=new WeakMap,v=createAgentActionInstrumentation({frameworkVersion:e.frameworkVersion,idGenerator:e.idGenerator,recordInputs:a,recordOutputs:o,resolveTraceContext:async t=>(await e.stateStore.getTurn(t.scope.sessionId,t.scope.turnId))?.context,stateStore:e.stateStore,tracer:e.tracer}),y=createAgentApprovalInstrumentation({actionContextFor:v.contextFor,frameworkVersion:e.frameworkVersion,idGenerator:e.idGenerator,tracer:e.tracer}),b=createAgentToolInstrumentation({actionContextFor:v.contextFor,idGenerator:e.idGenerator,recordInputs:a,recordOutputs:o,resolveFallback:e=>{let t=h.get(e.scope.attemptId)??e.scope,n=g.get(t)?.step;return n===void 0?void 0:{context:n.context,spanContext:n.span.spanContext()}},tracer:e.tracer}),{ensureSessionContext:x,prepareSessionTrace:S,prepareTurnTrace:C}=createAgentOtelSessionContext(e),projectEvent=async s=>{let c=await e.stateStore.getSession(sessionIdForEvent(s)),l=audienceForEvent(s,c?.channelAudience),d=`traceSeed`in s?s.traceSeed:void 0,f=contextStorage.getStore()?.get(SessionTraceSeedKey),p=d?.decision??f?.decision??c?.decision??(d===void 0?f===void 0?c===void 0?void 0:resolveTracePolicyDecision(isSampledTrace(c.context),l):resolveTracePolicyDecision(isSampledTrace(f),l):resolveTracePolicyDecision(isSampledTrace(d),l));return p===void 0?withoutInstrumentationContent(s):instrumentationEventForTraceDecision(s,p.action===`drop`?p:{action:`record`,recordInputs:a&&p.recordInputs,recordOutputs:o&&p.recordOutputs},l)},onSessionStarted=async e=>{await S(e)},onTurnStarted=async e=>{await C(e)},onStepStarted=async t=>{let n=await e.stateStore.getTurn(t.scope.sessionId,t.scope.turnId);if(n===void 0||!isSampledTrace(n.context))return;let i=withChannelAudience(contextFromSpanContext(n.context),t.scope.channelAudience),a=trace.getSpan(context.active())?.spanContext(),o=e.idGenerator.withSpanId(e.idGenerator.deriveSpanId(attemptIdempotencyKey(t.scope)),()=>e.tracer.startSpan(`agent.step`,{attributes:{"agent.session.id":t.scope.sessionId,"agent.framework.name":`eve`,"agent.framework.version":e.frameworkVersion,"agent.step.attempt":t.scope.attemptIndex,"agent.step.index":t.scope.stepIndex,"agent.turn.id":t.scope.turnId,"agent.name":t.scope.functionId,...runtimeContextAttributes(t.runtimeContext)},links:a===void 0||a.traceId===n.context.traceId?void 0:[{attributes:{"eve.link.type":`workflow.delivery`},context:a}]},i));o.addEvent(`step.started`);let u=trace.setSpan(i,o),d=t.operation.operationId,f=e.tracer.startSpan(d,{attributes:{"ai.operation.name":d,"ai.provider.name":t.operation.provider,"ai.request.model":t.operation.modelId,...runtimeContextAttributes(t.runtimeContext)}},u);g.set(t.scope,{operation:{context:trace.setSpan(u,f),name:d,span:f},step:{context:u,span:o}}),h.set(t.scope.attemptId,t.scope)},onStepTerminal=async e=>{let t=h.get(e.scope.attemptId)??e.scope;m.delete(t),drainOpenSpans({...e,scope:t}),b.drain(e.scope.attemptId,e.type===`step.attempt.failed`?{error:e.error}:void 0),e.type===`step.attempt.failed`&&await v.failForAttempt(t,e.error),h.delete(e.scope.attemptId);let n=g.get(t);n!==void 0&&(n.step.span.addEvent(e.type===`step.attempt.completed`?`step.completed`:`step.failed`),e.type===`step.attempt.failed`&&(recordError(n.operation.span,e.error),recordError(n.step.span,e.error)),n.operation.span.end(),n.step.span.end(),g.delete(t))},onTurnTerminal=async t=>{(t.type===`turn.cancelled`||t.type===`turn.failed`)&&await v.deleteForTurn(t.sessionId,t.turnId);let n=await e.stateStore.getTurn(t.sessionId,t.turnId);n!==void 0&&await e.stateStore.setTurn(t.sessionId,t.turnId,{...n,terminal:t.type===`turn.failed`?{error:t.error,type:t.type}:{type:t.type}})},onSessionTransition=async t=>{if(t.turnId!==void 0){let n=await e.stateStore.getTurn(t.sessionId,t.turnId);if(n!==void 0){let i=await e.stateStore.getSession(t.sessionId);if(isSampledTrace(n.context)){let r=e.idGenerator.withSpanId(n.context.spanId,()=>e.tracer.startSpan(`agent.turn`,{attributes:{"agent.framework.name":`eve`,"agent.framework.version":e.frameworkVersion,"agent.name":i?.agentName,"agent.session.id":t.sessionId,"agent.subagent.name":n.subagentName,"agent.turn.id":t.turnId,"agent.turn.sequence":n.sequence},startTime:n.startTimeMs},contextFromSpanContext({isRemote:n.parentIsRemote??!1,spanId:n.parentSpanId,traceFlags:n.context.traceFlags,traceId:n.context.traceId})));r.addEvent(`turn.started`,void 0,n.startTimeMs),n.terminal!==void 0&&(r.addEvent(n.terminal.type),n.terminal.type===`turn.failed`&&recordError(r,n.terminal.error)),r.end()}await e.stateStore.deleteTurn(t.sessionId,t.turnId)}}(t.type===`session.completed`||t.type===`session.failed`)&&(await v.deleteForSession(t.sessionId),await e.stateStore.deleteSession(t.sessionId))},onModelCallStarted=t=>{let n=g.get(t.scope);if(n===void 0)return;n.step.span.setAttribute(`agent.model.id`,t.model.modelId),n.step.span.setAttribute(`agent.model.provider`,t.model.provider);let r=e.tracer.startSpan(modelSpanName(t.model.modelId),{attributes:{"gen_ai.agent.name":t.scope.functionId,"gen_ai.operation.name":`chat`,"gen_ai.provider.name":t.model.provider,"gen_ai.request.model":t.model.modelId,...runtimeContextAttributes(t.runtimeContext)}},n.operation.context);if(a&&t.input!==void 0){let e=messagesContentAttribute(t.input.messages);e!==void 0&&r.setAttribute(`ai.prompt.messages`,e);let n=genAiInputMessagesAttribute(t.input.messages);n!==void 0&&r.setAttribute(`gen_ai.input.messages`,n);let i=systemPromptAttribute(t.input.instructions);i!==void 0&&r.setAttribute(`ai.prompt.system`,i);let a=genAiSystemInstructionsAttribute(t.input.instructions);a!==void 0&&r.setAttribute(`gen_ai.system_instructions`,a)}let i={context:trace.setSpan(n.operation.context,r),span:r};getExecutionContexts(t.scope).set(t.idempotencyKey,i.context),getSpanStates(_,t.scope).set(t.idempotencyKey,i)},onModelCallTerminal=e=>{m.get(e.scope)?.delete(e.idempotencyKey);let t=takeSpanState(_,e.scope,e.idempotencyKey);if(t!==void 0){if(e.type===`model.call.failed`)recordError(t.span,e.error);else{setAgentUsage(t.span,e.usage),t.span.setAttribute(`gen_ai.response.finish_reasons`,[e.finishReason]);let n=g.get(e.scope);if(n!==void 0&&setAgentUsage(n.step.span,e.usage),o){t.span.setAttribute(`ai.response.finish_reason`,e.finishReason);let n=e.content;if(n===void 0){t.span.end();return}let r=genAiOutputMessagesAttribute(n,e.finishReason);r!==void 0&&t.span.setAttribute(`gen_ai.output.messages`,r);let i=textContentAttribute(n.filter(e=>e.type===`reasoning`).map(e=>e.text).filter(e=>e.trim().length>0).join(`
2
- `));i!==void 0&&t.span.setAttribute(`ai.response.reasoning`,i);let a=textContentAttribute(n.filter(e=>e.type===`text`).map(e=>e.text).join(``));a!==void 0&&t.span.setAttribute(`ai.response.text`,a);let o=n.filter(e=>e.type===`tool-call`).map(e=>({callId:e.callId,input:e.input,toolName:e.toolName}));if(o.length>0){let e=contentAttribute(o,!1);e!==void 0&&t.span.setAttribute(`ai.response.tool_calls`,e)}let s=n.filter(e=>e.type===`tool-result`||e.type===`tool-error`).map(e=>e.type===`tool-result`?{callId:e.callId,input:e.input,output:e.output,toolName:e.toolName}:{callId:e.callId,error:errorText(e.error),input:e.input,toolName:e.toolName});if(s.length>0){let e=toolResultsContentAttribute(s);e!==void 0&&t.span.setAttribute(`ai.response.tool_results`,e)}}}t.span.end()}},w=createAgentChannelDeliveryInstrumentation({ensureSessionContext:x,frameworkVersion:e.frameworkVersion,idGenerator:e.idGenerator,recordInputs:a,stateStore:e.stateStore,tracer:e.tracer}),onStepMetadata=e=>{let t=g.get(e.scope);if(t===void 0)return;let n=readGatewayCost(e.providerMetadata);if(n!==void 0)for(let[e,r]of Object.entries(n))t.step.span.setAttribute(e,r)};return{hook:{capture:a||o?`content`:`metadata`,events:{...w,"action.completed":v.events[`action.completed`],"action.failed":v.events[`action.failed`],async"action.started"(e,t){await v.events[`action.started`](e,t),await b.actionStarted(e)},...y,"step.attempt.completed":onStepTerminal,"step.attempt.failed":onStepTerminal,"step.attempt.metadata":onStepMetadata,"step.attempt.started":onStepStarted,"model.call.completed":onModelCallTerminal,"model.call.failed":onModelCallTerminal,"model.call.started":onModelCallStarted,"session.completed":onSessionTransition,"session.failed":onSessionTransition,"session.started":onSessionStarted,"session.waiting":onSessionTransition,...b.events,"turn.cancelled":onTurnTerminal,"turn.completed":onTurnTerminal,"turn.failed":onTurnTerminal,"turn.started":onTurnStarted},name:`eve.otel`,projectEvent},prepareSessionTrace:S,prepareTurnTrace:C,async runInContext(t,n){let i=h.get(t.scope.attemptId)??t.scope,a=m.get(i),o=t.type===`model.call`?a?.get(t.idempotencyKey):b.contextFor(t.scope.attemptId,t.idempotencyKey);if(o===void 0){let n=await e.stateStore.getTurn(t.scope.sessionId,t.scope.turnId);n!==void 0&&(o=withChannelAudience(contextFromSpanContext(n.context),t.scope.channelAudience),isSampledTrace(n.context)||(o=suppressTracing(o)))}return o===void 0?n():context.with(o,n)}};function getExecutionContexts(e){let t=m.get(e);return t===void 0&&(t=new Map,m.set(e,t)),t}function drainOpenSpans(e){for(let t of _.get(e.scope)?.values()??[])e.type===`step.attempt.failed`&&recordError(t.span,e.error),t.span.end();_.delete(e.scope)}}function sessionIdForEvent(e){return`scope`in e?e.scope.sessionId:e.sessionId}function audienceForEvent(t,n){return`delivery`in t?normalizeChannelAudience(t.delivery.channelAudience):`scope`in t&&t.scope.channelAudience!==void 0?normalizeChannelAudience(t.scope.channelAudience):t.type===`session.started`?normalizeChannelAudience(t.channelAudience):normalizeChannelAudience(n)}function getSpanStates(e,t){let n=e.get(t);return n===void 0&&(n=new Map,e.set(t,n)),n}function takeSpanState(e,t,n){let r=e.get(t),i=r?.get(n);if(r!==void 0)return r.delete(n),r.size===0&&e.delete(t),i}function contextFromSpanContext(e){return trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext(e))}function readGatewayCost(e){let t=e.gateway;if(!isRecord(t))return;let n={},r=readUsd(t.cost);r!==void 0&&(n[`gen_ai.usage.cost`]=r);let i=readUsd(t.gatewayCost);i!==void 0&&(n[`gen_ai.usage.gateway_cost`]=i);let a=readUsd(t.inputInferenceCost);a!==void 0&&(n[`gen_ai.usage.input_cost`]=a);let o=readUsd(t.outputInferenceCost);return o!==void 0&&(n[`gen_ai.usage.output_cost`]=o),typeof t.generationId==`string`&&t.generationId.length>0&&(n[`gen_ai.generation.id`]=t.generationId),Object.keys(n).length===0?void 0:n}function readUsd(e){if(typeof e!=`string`)return;let t=Number(e);return Number.isFinite(t)?t:void 0}function isRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function modelSpanName(e){return`chat ${e}`}function runtimeContextAttributes(e){let t={};if(e===void 0)return t;for(let[n,r]of Object.entries(e))flattenContextAttribute(t,`ai.settings.context.${n}`,r);return t}function flattenContextAttribute(e,t,n){if(n!=null){if(typeof n==`string`||typeof n==`number`||typeof n==`boolean`){e[t]=n;return}if(Array.isArray(n)){let r=n.filter(e=>typeof e==`string`||typeof e==`number`||typeof e==`boolean`);if(r.length!==n.length||new Set(r.map(e=>typeof e)).size!==1)return;e[t]=r;return}if(typeof n==`object`)for(let[r,i]of Object.entries(n))flattenContextAttribute(e,`${t}.${r}`,i)}}function errorText(e){return e instanceof Error?e.message:e}function recordError(e,t){t instanceof Error?(e.recordException(t),e.setStatus({code:SpanStatusCode.ERROR,message:t.message})):e.setStatus({code:SpanStatusCode.ERROR})}export{createAgentOtelInstrumentation};
1
+ import{normalizeChannelAudience}from"#shared/channel-audience.js";import{contextStorage}from"#context/container.js";import{SessionTraceSeedKey}from"#context/keys.js";import{isSampledTrace,resolveTracePolicyDecision}from"#tracing/sampled-trace.js";import{ROOT_CONTEXT,SpanKind,SpanStatusCode,context,trace}from"#compiled/@opentelemetry/api/index.js";import{markAgentTraceContext}from"#tracing/agent-trace-context.js";import{attemptIdempotencyKey}from"#instrumentation/lifecycle.js";import{withoutInstrumentationContent}from"#instrumentation/content.js";import{contentAttribute,genAiInputMessagesAttribute,genAiOutputMessagesAttribute,genAiSystemInstructionsAttribute,messagesContentAttribute,systemPromptAttribute,textContentAttribute,toolResultsContentAttribute}from"#tracing/agent-otel-content.js";import{setAgentUsage}from"#tracing/agent-otel-usage.js";import{withChannelAudience}from"#tracing/channel-audience-context.js";import{instrumentationEventForTraceDecision}from"#instrumentation/content-policy.js";import{createAgentActionInstrumentation}from"#tracing/agent-action-instrumentation.js";import{createAgentApprovalInstrumentation}from"#tracing/agent-approval-instrumentation.js";import{createAgentChannelDeliveryInstrumentation}from"#tracing/agent-channel-delivery-instrumentation.js";import{createAgentToolInstrumentation}from"#tracing/agent-tool-instrumentation.js";import{runtimeContextAttributes}from"#tracing/agent-otel-runtime-context.js";import{createAgentOtelSessionContext}from"#tracing/agent-otel-session-context.js";import{suppressTracing}from"#tracing/suppress-tracing.js";function createAgentOtelInstrumentation(e){let a=e.recordInputs??!1,s=e.recordOutputs??!1,p=new WeakMap,m=new Map,h=new WeakMap,g=new WeakMap,_=createAgentActionInstrumentation({frameworkVersion:e.frameworkVersion,idGenerator:e.idGenerator,recordInputs:a,recordOutputs:s,resolveTraceContext:async t=>(await e.stateStore.getTurn(t.scope.sessionId,t.scope.turnId))?.context,stateStore:e.stateStore,tracer:e.tracer}),v=createAgentApprovalInstrumentation({actionContextFor:_.contextFor,frameworkVersion:e.frameworkVersion,idGenerator:e.idGenerator,tracer:e.tracer}),y=createAgentToolInstrumentation({actionContextFor:_.contextFor,idGenerator:e.idGenerator,recordInputs:a,recordOutputs:s,resolveFallback:e=>{let t=m.get(e.scope.attemptId)??e.scope,n=h.get(t);return n===void 0?void 0:{context:n.context,spanContext:n.span.spanContext()}},tracer:e.tracer}),{ensureSessionContext:b,prepareSessionTrace:x,prepareTurnTrace:S}=createAgentOtelSessionContext(e),projectEvent=async o=>{let c=await e.stateStore.getSession(sessionIdForEvent(o)),l=audienceForEvent(o,c?.channelAudience),u=`traceSeed`in o?o.traceSeed:void 0,d=contextStorage.getStore()?.get(SessionTraceSeedKey),f=u?.decision??d?.decision??c?.decision??(u===void 0?d===void 0?c===void 0?void 0:resolveTracePolicyDecision(isSampledTrace(c.context),l):resolveTracePolicyDecision(isSampledTrace(d),l):resolveTracePolicyDecision(isSampledTrace(u),l));return f===void 0?withoutInstrumentationContent(o):instrumentationEventForTraceDecision(o,f.action===`drop`?f:{action:`record`,recordInputs:a&&f.recordInputs,recordOutputs:s&&f.recordOutputs},l)},onSessionStarted=async e=>{await x(e)},onTurnStarted=async e=>{await S(e)},onStepStarted=async t=>{let n=await e.stateStore.getTurn(t.scope.sessionId,t.scope.turnId);if(n===void 0||!isSampledTrace(n.context))return;let i=withChannelAudience(contextFromSpanContext(n.context),t.scope.channelAudience),a=trace.getSpan(context.active())?.spanContext(),o=e.idGenerator.withSpanId(e.idGenerator.deriveSpanId(attemptIdempotencyKey(t.scope)),()=>e.tracer.startSpan(`agent.step`,{attributes:{"agent.session.id":t.scope.sessionId,"agent.framework.name":`eve`,"agent.framework.version":e.frameworkVersion,"agent.step.attempt":t.scope.attemptIndex,"agent.step.index":t.scope.stepIndex,"agent.turn.id":t.scope.turnId,"agent.name":t.scope.functionId,...runtimeContextAttributes(t.runtimeContext)},links:a===void 0||a.traceId===n.context.traceId?void 0:[{attributes:{"eve.link.type":`workflow.delivery`},context:a}]},i));o.addEvent(`step.started`);let s=trace.setSpan(i,o);h.set(t.scope,{context:s,span:o}),m.set(t.scope.attemptId,t.scope)},onStepTerminal=async e=>{let t=m.get(e.scope.attemptId)??e.scope;p.delete(t),drainOpenSpans({...e,scope:t}),y.drain(e.scope.attemptId,e.type===`step.attempt.failed`?{error:e.error}:void 0),e.type===`step.attempt.failed`&&await _.failForAttempt(t,e.error),m.delete(e.scope.attemptId);let n=h.get(t);n!==void 0&&(n.span.addEvent(e.type===`step.attempt.completed`?`step.completed`:`step.failed`),e.type===`step.attempt.failed`&&recordError(n.span,e.error),n.span.end(),h.delete(t))},onTurnTerminal=async t=>{(t.type===`turn.cancelled`||t.type===`turn.failed`)&&await _.deleteForTurn(t.sessionId,t.turnId),await e.stateStore.updateTurn(t.sessionId,t.turnId,e=>({...e,terminal:t.type===`turn.failed`?{error:t.error,type:t.type}:{type:t.type}}))},onSessionTransition=async t=>{if(t.turnId!==void 0){let n=await e.stateStore.getTurn(t.sessionId,t.turnId);if(n!==void 0){let i=await e.stateStore.getSession(t.sessionId);if(isSampledTrace(n.context)){let r=i?.agentName??n.subagentName,a=e.idGenerator.withSpanId(n.context.spanId,()=>e.tracer.startSpan(agentSpanName(r),{attributes:{"agent.framework.name":`eve`,"agent.framework.version":e.frameworkVersion,"agent.name":r,"agent.session.id":t.sessionId,"agent.subagent.name":n.subagentName,"agent.turn.id":t.turnId,"agent.turn.sequence":n.sequence,"gen_ai.agent.name":r,"gen_ai.conversation.id":t.sessionId,"gen_ai.operation.name":`invoke_agent`},kind:SpanKind.INTERNAL,startTime:n.startTimeMs},contextFromSpanContext({isRemote:n.parentIsRemote??!1,spanId:n.parentSpanId,traceFlags:n.context.traceFlags,traceId:n.context.traceId})));setAgentInvocationUsage(a,n.modelUsage),a.addEvent(`turn.started`,void 0,n.startTimeMs),n.terminal!==void 0&&(a.addEvent(n.terminal.type),n.terminal.type===`turn.failed`&&recordError(a,n.terminal.error)),a.end()}await e.stateStore.deleteTurn(t.sessionId,t.turnId)}}(t.type===`session.completed`||t.type===`session.failed`)&&(await _.deleteForSession(t.sessionId),await e.stateStore.deleteSession(t.sessionId))},onModelCallStarted=t=>{let n=h.get(t.scope);if(n===void 0)return;n.span.setAttribute(`agent.model.id`,t.model.modelId),n.span.setAttribute(`agent.model.provider`,t.model.provider);let r=e.tracer.startSpan(modelSpanName(t.model.modelId),{attributes:{"gen_ai.agent.name":t.scope.functionId,"gen_ai.operation.name":`chat`,"gen_ai.provider.name":t.model.provider,"gen_ai.request.model":t.model.modelId,...runtimeContextAttributes(t.runtimeContext)}},n.context);if(a&&t.input!==void 0){let e=messagesContentAttribute(t.input.messages);e!==void 0&&r.setAttribute(`ai.prompt.messages`,e);let n=genAiInputMessagesAttribute(t.input.messages);n!==void 0&&r.setAttribute(`gen_ai.input.messages`,n);let i=systemPromptAttribute(t.input.instructions);i!==void 0&&r.setAttribute(`ai.prompt.system`,i);let a=genAiSystemInstructionsAttribute(t.input.instructions);a!==void 0&&r.setAttribute(`gen_ai.system_instructions`,a)}let i={context:trace.setSpan(n.context,r),span:r};getExecutionContexts(t.scope).set(t.idempotencyKey,i.context),getSpanStates(g,t.scope).set(t.idempotencyKey,i)},onModelCallTerminal=async e=>{p.get(e.scope)?.delete(e.idempotencyKey);let t=takeSpanState(g,e.scope,e.idempotencyKey);if(t!==void 0){if(e.type===`model.call.failed`)recordError(t.span,e.error);else{await recordTurnUsage(e),setAgentUsage(t.span,e.usage),t.span.setAttribute(`gen_ai.response.finish_reasons`,[e.finishReason]);let n=h.get(e.scope);if(n!==void 0&&setAgentUsage(n.span,e.usage),s){t.span.setAttribute(`ai.response.finish_reason`,e.finishReason);let n=e.content;if(n===void 0){t.span.end();return}let r=genAiOutputMessagesAttribute(n,e.finishReason);r!==void 0&&t.span.setAttribute(`gen_ai.output.messages`,r);let i=textContentAttribute(n.filter(e=>e.type===`reasoning`).map(e=>e.text).filter(e=>e.trim().length>0).join(`
2
+ `));i!==void 0&&t.span.setAttribute(`ai.response.reasoning`,i);let a=textContentAttribute(n.filter(e=>e.type===`text`).map(e=>e.text).join(``));a!==void 0&&t.span.setAttribute(`ai.response.text`,a);let o=n.filter(e=>e.type===`tool-call`).map(e=>({callId:e.callId,input:e.input,toolName:e.toolName}));if(o.length>0){let e=contentAttribute(o,!1);e!==void 0&&t.span.setAttribute(`ai.response.tool_calls`,e)}let s=n.filter(e=>e.type===`tool-result`||e.type===`tool-error`).map(e=>e.type===`tool-result`?{callId:e.callId,input:e.input,output:e.output,toolName:e.toolName}:{callId:e.callId,error:errorText(e.error),input:e.input,toolName:e.toolName});if(s.length>0){let e=toolResultsContentAttribute(s);e!==void 0&&t.span.setAttribute(`ai.response.tool_results`,e)}}}t.span.end()}},recordTurnUsage=async t=>{t.usage.inputTokens===void 0&&t.usage.outputTokens===void 0||await e.stateStore.updateTurn(t.scope.sessionId,t.scope.turnId,e=>({...e,modelUsage:{inputTokens:t.usage.inputTokens===void 0?e.modelUsage?.inputTokens:(e.modelUsage?.inputTokens??0)+t.usage.inputTokens,outputTokens:t.usage.outputTokens===void 0?e.modelUsage?.outputTokens:(e.modelUsage?.outputTokens??0)+t.usage.outputTokens}}))},C=createAgentChannelDeliveryInstrumentation({ensureSessionContext:b,frameworkVersion:e.frameworkVersion,idGenerator:e.idGenerator,recordInputs:a,stateStore:e.stateStore,tracer:e.tracer}),onStepMetadata=e=>{let t=h.get(e.scope);if(t===void 0)return;let n=readGatewayCost(e.providerMetadata);if(n!==void 0)for(let[e,r]of Object.entries(n))t.span.setAttribute(e,r)};return{hook:{events:{...C,"action.completed":_.events[`action.completed`],"action.failed":_.events[`action.failed`],async"action.started"(e,t){await _.events[`action.started`](e,t),await y.actionStarted(e)},...v,"step.attempt.completed":onStepTerminal,"step.attempt.failed":onStepTerminal,"step.attempt.metadata":onStepMetadata,"step.attempt.started":onStepStarted,"model.call.completed":onModelCallTerminal,"model.call.failed":onModelCallTerminal,"model.call.started":onModelCallStarted,"session.completed":onSessionTransition,"session.failed":onSessionTransition,"session.started":onSessionStarted,"session.waiting":onSessionTransition,...y.events,"turn.cancelled":onTurnTerminal,"turn.completed":onTurnTerminal,"turn.failed":onTurnTerminal,"turn.started":onTurnStarted},name:`eve.otel`,projectEvent,tracePolicy:()=>({emit:!0,recordInputs:a,recordOutputs:s})},prepareSessionTrace:x,prepareTurnTrace:S,async runInContext(t,n){let i=m.get(t.scope.attemptId)??t.scope,a=p.get(i),o=t.type===`model.call`?a?.get(t.idempotencyKey):y.contextFor(t.scope.attemptId,t.idempotencyKey);if(o===void 0){let n=await e.stateStore.getTurn(t.scope.sessionId,t.scope.turnId);n!==void 0&&(o=withChannelAudience(contextFromSpanContext(n.context),t.scope.channelAudience),isSampledTrace(n.context)||(o=suppressTracing(o)))}return o===void 0?n():context.with(markAgentTraceContext(o),n)}};function getExecutionContexts(e){let t=p.get(e);return t===void 0&&(t=new Map,p.set(e,t)),t}function drainOpenSpans(e){for(let t of g.get(e.scope)?.values()??[])e.type===`step.attempt.failed`&&recordError(t.span,e.error),t.span.end();g.delete(e.scope)}}function sessionIdForEvent(e){return`scope`in e?e.scope.sessionId:e.sessionId}function audienceForEvent(t,n){return`delivery`in t?normalizeChannelAudience(t.delivery.channelAudience):`scope`in t&&t.scope.channelAudience!==void 0?normalizeChannelAudience(t.scope.channelAudience):t.type===`session.started`?normalizeChannelAudience(t.channelAudience):normalizeChannelAudience(n)}function getSpanStates(e,t){let n=e.get(t);return n===void 0&&(n=new Map,e.set(t,n)),n}function takeSpanState(e,t,n){let r=e.get(t),i=r?.get(n);if(r!==void 0)return r.delete(n),r.size===0&&e.delete(t),i}function contextFromSpanContext(e){return trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext(e))}function readGatewayCost(e){let t=e.gateway;if(!isRecord(t))return;let n={},r=readUsd(t.cost);r!==void 0&&(n[`gen_ai.usage.cost`]=r);let i=readUsd(t.gatewayCost);i!==void 0&&(n[`gen_ai.usage.gateway_cost`]=i);let a=readUsd(t.inputInferenceCost);a!==void 0&&(n[`gen_ai.usage.input_cost`]=a);let o=readUsd(t.outputInferenceCost);return o!==void 0&&(n[`gen_ai.usage.output_cost`]=o),typeof t.generationId==`string`&&t.generationId.length>0&&(n[`gen_ai.generation.id`]=t.generationId),Object.keys(n).length===0?void 0:n}function readUsd(e){if(typeof e!=`string`)return;let t=Number(e);return Number.isFinite(t)?t:void 0}function isRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function modelSpanName(e){return`chat ${e}`}function agentSpanName(e){return e===void 0?`invoke_agent`:`invoke_agent ${e}`}function setAgentInvocationUsage(e,t){t!==void 0&&(t.inputTokens!==void 0&&e.setAttribute(`gen_ai.usage.input_tokens`,t.inputTokens),t.outputTokens!==void 0&&e.setAttribute(`gen_ai.usage.output_tokens`,t.outputTokens))}function errorText(e){return e instanceof Error?e.message:e}function recordError(e,t){e.setAttribute(`error.type`,t instanceof Error?t.name||`Error`:`_OTHER`),t instanceof Error?(e.recordException(t),e.setStatus({code:SpanStatusCode.ERROR,message:t.message})):e.setStatus({code:SpanStatusCode.ERROR})}export{createAgentOtelInstrumentation};
@@ -0,0 +1,5 @@
1
+ type SpanAttributePrimitive = string | number | boolean;
2
+ type SpanAttributeValue = SpanAttributePrimitive | SpanAttributePrimitive[];
3
+ /** Flattens merged runtime context into AI SDK-compatible span attributes. */
4
+ export declare function runtimeContextAttributes(runtimeContext: Readonly<Record<string, unknown>> | undefined): Record<string, SpanAttributeValue>;
5
+ export {};
@@ -0,0 +1 @@
1
+ function runtimeContextAttributes(e){let t={};if(e===void 0)return t;for(let[n,r]of Object.entries(e))flattenContextAttribute(t,`ai.settings.context.${n}`,r);return t}function flattenContextAttribute(e,t,n){if(n!=null){if(typeof n==`string`||typeof n==`number`||typeof n==`boolean`){e[t]=n;return}if(Array.isArray(n)){let r=n.filter(e=>typeof e==`string`||typeof e==`number`||typeof e==`boolean`);if(r.length!==n.length||new Set(r.map(e=>typeof e)).size!==1)return;e[t]=r;return}if(typeof n==`object`)for(let[r,i]of Object.entries(n))flattenContextAttribute(e,`${t}.${r}`,i)}}export{runtimeContextAttributes};
@@ -1,5 +1,5 @@
1
1
  import type { Tracer } from "#compiled/@opentelemetry/api/index.js";
2
- import { type InstrumentationSessionStartedEvent, type InstrumentationTraceSeed, type InstrumentationTurnStartedEvent } from "#harness/instrumentation/lifecycle.js";
2
+ import { type InstrumentationSessionStartedEvent, type InstrumentationTraceSeed, type InstrumentationTurnStartedEvent } from "#instrumentation/lifecycle.js";
3
3
  import type { AgentSpanIdGenerator } from "#tracing/agent-span-id-generator.js";
4
4
  import type { TraceCapturePolicy } from "#tracing/otel-declaration.js";
5
5
  import type { AgentSessionTraceState, AgentTraceStateStore } from "#tracing/agent-trace-state.js";
@@ -1 +1 @@
1
- import{normalizeChannelAudience}from"#shared/channel-audience.js";import{isSampledTrace,resolveTracePolicy,resolveTracePolicyDecision}from"#tracing/sampled-trace.js";import{sessionIdempotencyKey}from"#harness/instrumentation/lifecycle.js";function createAgentOtelSessionContext(n){let openSessionTrace=e=>{if(e.traceSeed!==void 0){if(!isSampledTrace(e.traceSeed))return{isRemote:!1,spanId:e.traceSeed.spanId,traceFlags:0,traceId:e.traceSeed.traceId};let startSpan=()=>n.tracer.startSpan(`agent.session`,{attributes:{"agent.framework.name":`eve`,"agent.framework.version":n.frameworkVersion,"agent.channel.audience":e.channelAudience,"agent.name":e.agentName,"agent.session.id":e.sessionId,"agent.trace.schema.version":2},root:!0}),r=n.idGenerator.withSpanId(e.traceSeed.spanId,()=>n.idGenerator.withTraceId(e.traceSeed.traceId,startSpan));return r.addEvent(`session.started`),r.end(),r.spanContext()}if(e.traceDecision.action===`drop`)return{isRemote:!1,spanId:n.idGenerator.deriveSpanId(`session:${e.sessionId}`),traceFlags:0,traceId:n.idGenerator.generateTraceId()};let r=n.tracer.startSpan(`agent.session`,{attributes:{"agent.framework.name":`eve`,"agent.framework.version":n.frameworkVersion,"agent.channel.audience":e.channelAudience,"agent.name":e.agentName,"agent.session.id":e.sessionId,"agent.trace.schema.version":2},root:!0});return r.addEvent(`session.started`),r.end(),r.spanContext()},ensureSessionContext=async t=>{let r=await n.stateStore.getSession(t.sessionId);if(r===void 0){let i=normalizeChannelAudience(t.channelAudience),a=resolveSessionTraceDecision(t,i,n.tracePolicy);r={agentName:t.agentName,channelAudience:i,channelKind:t.channelKind,decision:a,context:t.parentTraceContext===void 0?openSessionTrace({agentName:t.agentName,channelAudience:i,channelType:t.channelType,rootSessionId:t.rootSessionId,sessionId:t.sessionId,traceDecision:a,traceSeed:t.traceSeed}):adoptedSpanContext(t.parentTraceContext),rootSessionId:t.rootSessionId},await n.stateStore.setSession(t.sessionId,r)}return r};return{ensureSessionContext,prepareSessionTrace:async e=>{let t=await ensureSessionContext(e);return portableSpanContext(t.context,t.decision)},prepareTurnTrace:async e=>{let t=await n.stateStore.getTurn(e.sessionId,e.turnId);if(t!==void 0)return{decision:(await n.stateStore.getSession(e.sessionId))?.decision,spanId:t.parentSpanId,traceFlags:t.context.traceFlags,traceId:t.context.traceId};let r=await ensureSessionContext({agentName:void 0,channelAudience:`unknown`,channelKind:void 0,idempotencyKey:sessionIdempotencyKey(e.sessionId),parentTraceContext:e.parentTraceContext,rootSessionId:e.rootSessionId,sessionId:e.sessionId,type:`session.started`}),a={isRemote:!1,spanId:n.idGenerator.deriveSpanId(`turn:${e.idempotencyKey}`),traceFlags:r.context.traceFlags,traceId:r.context.traceId};return await n.stateStore.setTurn(e.sessionId,e.turnId,{context:a,parentIsRemote:r.context.isRemote,parentSpanId:r.context.spanId,rootSessionId:e.rootSessionId,sequence:e.sequence,startTimeMs:Date.now(),subagentName:e.parentLineage?.subagentName}),portableSpanContext(r.context,r.decision)}}}function portableSpanContext(e,t){return{decision:t,spanId:e.spanId,traceFlags:e.traceFlags,traceId:e.traceId}}function adoptedSpanContext(e){return{isRemote:`isRemote`in e&&e.isRemote===!0,spanId:e.spanId,traceFlags:e.traceFlags,traceId:e.traceId}}function resolveSessionTraceDecision(e,i,a){return e.traceSeed?.decision===void 0?e.traceSeed===void 0?e.parentTraceContext===void 0?resolveTracePolicy(a,{agentName:e.agentName,audience:i,channelType:e.channelType}):resolveTracePolicyDecision(isSampledTrace(e.parentTraceContext),i):resolveTracePolicyDecision(isSampledTrace(e.traceSeed),i):e.traceSeed.decision}export{createAgentOtelSessionContext};
1
+ import{normalizeChannelAudience}from"#shared/channel-audience.js";import{isSampledTrace,resolveTracePolicy,resolveTracePolicyDecision}from"#tracing/sampled-trace.js";import{sessionIdempotencyKey}from"#instrumentation/lifecycle.js";function createAgentOtelSessionContext(n){let openSessionTrace=e=>{if(e.traceSeed!==void 0){if(!isSampledTrace(e.traceSeed))return{isRemote:!1,spanId:e.traceSeed.spanId,traceFlags:0,traceId:e.traceSeed.traceId};let startSpan=()=>n.tracer.startSpan(`agent.session`,{attributes:{"agent.framework.name":`eve`,"agent.framework.version":n.frameworkVersion,"agent.channel.audience":e.channelAudience,"agent.name":e.agentName,"agent.session.id":e.sessionId,"agent.trace.schema.version":3},root:!0}),r=n.idGenerator.withSpanId(e.traceSeed.spanId,()=>n.idGenerator.withTraceId(e.traceSeed.traceId,startSpan));return r.addEvent(`session.started`),r.end(),r.spanContext()}if(e.traceDecision.action===`drop`)return{isRemote:!1,spanId:n.idGenerator.deriveSpanId(`session:${e.sessionId}`),traceFlags:0,traceId:n.idGenerator.generateTraceId()};let r=n.tracer.startSpan(`agent.session`,{attributes:{"agent.framework.name":`eve`,"agent.framework.version":n.frameworkVersion,"agent.channel.audience":e.channelAudience,"agent.name":e.agentName,"agent.session.id":e.sessionId,"agent.trace.schema.version":3},root:!0});return r.addEvent(`session.started`),r.end(),r.spanContext()},ensureSessionContext=async t=>{let r=await n.stateStore.getSession(t.sessionId);if(r===void 0){let i=normalizeChannelAudience(t.channelAudience),a=resolveSessionTraceDecision(t,i,n.tracePolicy);r={agentName:t.agentName,channelAudience:i,channelKind:t.channelKind,decision:a,context:t.parentTraceContext===void 0?openSessionTrace({agentName:t.agentName,channelAudience:i,channelType:t.channelType,rootSessionId:t.rootSessionId,sessionId:t.sessionId,traceDecision:a,traceSeed:t.traceSeed}):adoptedSpanContext(t.parentTraceContext),rootSessionId:t.rootSessionId},await n.stateStore.setSession(t.sessionId,r)}return r};return{ensureSessionContext,prepareSessionTrace:async e=>{let t=await ensureSessionContext(e);return portableSpanContext(t.context,t.decision)},prepareTurnTrace:async e=>{let t=await n.stateStore.getTurn(e.sessionId,e.turnId);if(t!==void 0)return{decision:(await n.stateStore.getSession(e.sessionId))?.decision,spanId:t.parentSpanId,traceFlags:t.context.traceFlags,traceId:t.context.traceId};let r=await ensureSessionContext({agentName:e.agentName,channelAudience:`unknown`,channelKind:void 0,idempotencyKey:sessionIdempotencyKey(e.sessionId),parentTraceContext:e.parentTraceContext,rootSessionId:e.rootSessionId,sessionId:e.sessionId,type:`session.started`}),a={isRemote:!1,spanId:n.idGenerator.deriveSpanId(`turn:${e.idempotencyKey}`),traceFlags:r.context.traceFlags,traceId:r.context.traceId};return await n.stateStore.setTurn(e.sessionId,e.turnId,{context:a,parentIsRemote:r.context.isRemote,parentSpanId:r.context.spanId,rootSessionId:e.rootSessionId,sequence:e.sequence,startTimeMs:Date.now(),subagentName:e.parentLineage?.subagentName}),portableSpanContext(r.context,r.decision)}}}function portableSpanContext(e,t){return{decision:t,spanId:e.spanId,traceFlags:e.traceFlags,traceId:e.traceId}}function adoptedSpanContext(e){return{isRemote:`isRemote`in e&&e.isRemote===!0,spanId:e.spanId,traceFlags:e.traceFlags,traceId:e.traceId}}function resolveSessionTraceDecision(e,i,a){return e.traceSeed?.decision===void 0?e.traceSeed===void 0?e.parentTraceContext===void 0?e.agentName===void 0?a===void 0?resolveTracePolicyDecision(!0,i):{action:`drop`}:resolveTracePolicy(a,{agentName:e.agentName,audience:i,channelType:e.channelType}):resolveTracePolicyDecision(isSampledTrace(e.parentTraceContext),i):resolveTracePolicyDecision(isSampledTrace(e.traceSeed),i):e.traceSeed.decision}export{createAgentOtelSessionContext};
@@ -1,4 +1,6 @@
1
1
  import type { Span } from "#compiled/@opentelemetry/api/index.js";
2
- import type { InstrumentationUsage } from "#harness/instrumentation/lifecycle.js";
2
+ import type { InstrumentationUsage } from "#instrumentation/lifecycle.js";
3
3
  /** Applies eve's structural token usage attributes to an agent span. */
4
- export declare function setAgentUsage(span: Span, usage: InstrumentationUsage): void;
4
+ export declare function setAgentUsage(span: Span, usage: InstrumentationUsage, options?: {
5
+ readonly includeGenAiDetails?: boolean;
6
+ }): void;
@@ -1 +1 @@
1
- function setAgentUsage(e,t){t.inputTokens!==void 0&&e.setAttribute(`agent.usage.input_tokens`,t.inputTokens),t.outputTokens!==void 0&&e.setAttribute(`agent.usage.output_tokens`,t.outputTokens);let n=t.inputTokenDetails;n?.cacheReadTokens!==void 0&&e.setAttribute(`gen_ai.usage.cache_read.input_tokens`,n.cacheReadTokens),n?.cacheWriteTokens!==void 0&&e.setAttribute(`gen_ai.usage.cache_creation.input_tokens`,n.cacheWriteTokens)}export{setAgentUsage};
1
+ function setAgentUsage(e,t,n={}){t.inputTokens!==void 0&&e.setAttribute(`agent.usage.input_tokens`,t.inputTokens),t.outputTokens!==void 0&&e.setAttribute(`agent.usage.output_tokens`,t.outputTokens);let r=t.inputTokenDetails;r?.cacheReadTokens!==void 0&&(n.includeGenAiDetails===!1?e.setAttribute(`agent.usage.cache_read_tokens`,r.cacheReadTokens):e.setAttribute(`gen_ai.usage.cache_read.input_tokens`,r.cacheReadTokens)),r?.cacheWriteTokens!==void 0&&(n.includeGenAiDetails===!1?e.setAttribute(`agent.usage.cache_write_tokens`,r.cacheWriteTokens):e.setAttribute(`gen_ai.usage.cache_creation.input_tokens`,r.cacheWriteTokens))}export{setAgentUsage};
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Id generator shared by `registerOTel` and the agent OTel provider. A span
3
- * whose lifetime crosses durable worker boundaries (`agent.turn`) is emitted
3
+ * whose lifetime crosses durable worker boundaries (`invoke_agent`) is emitted
4
4
  * at its terminal; priming the next span id lets that span carry the
5
5
  * pre-allocated id its descendants already parented to.
6
6
  */
@@ -1,5 +1,5 @@
1
1
  import { type Context, type SpanContext, type Tracer } from "#compiled/@opentelemetry/api/index.js";
2
- import type { InstrumentationActionStartedEvent, InstrumentationToolCallStartedEvent, InstrumentationToolCallTerminalEvent } from "#harness/instrumentation/lifecycle.js";
2
+ import type { InstrumentationActionStartedEvent, InstrumentationToolCallStartedEvent, InstrumentationToolCallTerminalEvent } from "#instrumentation/lifecycle.js";
3
3
  import type { AgentSpanIdGenerator } from "#tracing/agent-span-id-generator.js";
4
4
  import type { AgentActionContext } from "#tracing/agent-action-instrumentation.js";
5
5
  export interface AgentToolInstrumentation {
@@ -1 +1 @@
1
- import{ROOT_CONTEXT,SpanStatusCode,trace}from"#compiled/@opentelemetry/api/index.js";import{actionIdempotencyKey}from"#harness/instrumentation/lifecycle.js";import{contentAttribute}from"#tracing/agent-otel-content.js";function createAgentToolInstrumentation(e){let t=new Map,n=new Map,onStarted=async t=>{let n=actionIdempotencyKey(t.scope.sessionId,t.scope.turnId,t.callId),i=e.resolveFallback(t),a=i===void 0?void 0:reserve(t,n,i),o=await e.actionContextFor(t.scope.sessionId,t.scope.turnId,t.callId);if(a===void 0){if(o===void 0)return;a=reserve(t,n,o)}o!==void 0&&startSpan(a,o.context)},onTerminal=async t=>{let r=n.get(t.scope.attemptId)?.get(t.idempotencyKey);if(r!==void 0){if(r.terminal=t,r.span===void 0){let t=await e.actionContextFor(r.event.scope.sessionId,r.event.scope.turnId,r.event.callId);t!==void 0&&startSpan(r,t.context)}finishIfReady(r)}};return{async actionStarted(n){let r=t.get(n.idempotencyKey);if(r===void 0||r.span!==void 0||r.finished===!0)return;let i=await e.actionContextFor(n.scope.sessionId,n.scope.turnId,n.callId);i!==void 0&&(startSpan(r,i.context),finishIfReady(r))},contextFor:(e,t)=>n.get(e)?.get(t)?.context,drain(e,t){let r=n.get(e);if(r!==void 0){for(let e of r.values())e.finished!==!0&&(e.span===void 0&&startSpan(e,e.fallbackParent),finish(e,t));n.delete(e)}},events:{"tool.call.completed":onTerminal,"tool.call.failed":onTerminal,"tool.call.started":onStarted}};function getAttemptStates(e){let t=n.get(e);return t===void 0&&(t=new Map,n.set(e,t)),t}function reserve(n,r,i){let a=e.idGenerator.deriveSpanId(`tool:${n.idempotencyKey}`),o={actionKey:r,attemptId:n.scope.attemptId,context:contextFromSpanContext({isRemote:!1,spanId:a,traceFlags:i.spanContext.traceFlags,traceId:i.spanContext.traceId}),event:n,fallbackParent:i.context,idempotencyKey:n.idempotencyKey,spanId:a,startTimeMs:Date.now()};return getAttemptStates(n.scope.attemptId).set(n.idempotencyKey,o),t.set(r,o),o}function startSpan(t,n){if(!(t.span!==void 0||t.finished===!0)&&(t.span=e.idGenerator.withSpanId(t.spanId,()=>e.tracer.startSpan(`ai.toolCall`,{attributes:toolAttributes(t.event),startTime:t.startTimeMs},n)),e.recordInputs)){let e=contentAttribute(t.event.input,!1);e!==void 0&&t.span.setAttribute(`gen_ai.tool.call.arguments`,e)}}function finishIfReady(e){e.span===void 0||e.terminal===void 0||finish(e)}function finish(r,a){let o=r.span;if(o===void 0||r.finished===!0)return;r.finished=!0;let s=r.terminal;if(a!==void 0)recordError(o,a.error);else if(s?.type===`tool.call.failed`)recordError(o,s.error);else if(s?.output.type===`error`)recordError(o,s.output.error);else if(s!==void 0&&e.recordOutputs){let e=contentAttribute(s.output.output,!1);e!==void 0&&o.setAttribute(`gen_ai.tool.call.result`,e)}o.end(),t.delete(r.actionKey);let c=n.get(r.attemptId);c?.delete(r.idempotencyKey),c?.size===0&&n.delete(r.attemptId)}}function toolAttributes(e){return{"gen_ai.operation.name":`execute_tool`,"gen_ai.tool.call.id":e.callId,"gen_ai.tool.name":e.toolName}}function contextFromSpanContext(t){return trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext(t))}function recordError(e,n){n instanceof Error?(e.recordException(n),e.setStatus({code:SpanStatusCode.ERROR,message:n.message})):e.setStatus({code:SpanStatusCode.ERROR})}export{createAgentToolInstrumentation};
1
+ import{ROOT_CONTEXT,SpanKind,SpanStatusCode,trace}from"#compiled/@opentelemetry/api/index.js";import{actionIdempotencyKey}from"#instrumentation/lifecycle.js";import{contentAttribute}from"#tracing/agent-otel-content.js";function createAgentToolInstrumentation(e){let n=new Map,r=new Map,onStarted=async t=>{let n=actionIdempotencyKey(t.scope.sessionId,t.scope.turnId,t.callId),r=e.resolveFallback(t),a=r===void 0?void 0:reserve(t,n,r),o=await e.actionContextFor(t.scope.sessionId,t.scope.turnId,t.callId);if(a===void 0){if(o===void 0)return;a=reserve(t,n,o)}o!==void 0&&startSpan(a,o.context)},onTerminal=async t=>{let n=r.get(t.scope.attemptId)?.get(t.idempotencyKey);if(n!==void 0){if(n.terminal=t,n.span===void 0){let t=await e.actionContextFor(n.event.scope.sessionId,n.event.scope.turnId,n.event.callId);t!==void 0&&startSpan(n,t.context)}finishIfReady(n)}};return{async actionStarted(t){let r=n.get(t.idempotencyKey);if(r===void 0||r.span!==void 0||r.finished===!0)return;let i=await e.actionContextFor(t.scope.sessionId,t.scope.turnId,t.callId);i!==void 0&&(startSpan(r,i.context),finishIfReady(r))},contextFor:(e,t)=>r.get(e)?.get(t)?.context,drain(e,t){let n=r.get(e);if(n!==void 0){for(let e of n.values())e.finished!==!0&&(e.span===void 0&&startSpan(e,e.fallbackParent),finish(e,t));r.delete(e)}},events:{"tool.call.completed":onTerminal,"tool.call.failed":onTerminal,"tool.call.started":onStarted}};function getAttemptStates(e){let t=r.get(e);return t===void 0&&(t=new Map,r.set(e,t)),t}function reserve(t,r,i){let a=e.idGenerator.deriveSpanId(`tool:${t.idempotencyKey}`),o={actionKey:r,attemptId:t.scope.attemptId,context:contextFromSpanContext({isRemote:!1,spanId:a,traceFlags:i.spanContext.traceFlags,traceId:i.spanContext.traceId}),event:t,fallbackParent:i.context,idempotencyKey:t.idempotencyKey,spanId:a,startTimeMs:Date.now()};return getAttemptStates(t.scope.attemptId).set(t.idempotencyKey,o),n.set(r,o),o}function startSpan(n,r){if(!(n.span!==void 0||n.finished===!0)&&(n.span=e.idGenerator.withSpanId(n.spanId,()=>e.tracer.startSpan(`execute_tool ${n.event.toolName}`,{attributes:toolAttributes(n.event),kind:SpanKind.INTERNAL,startTime:n.startTimeMs},r)),e.recordInputs)){let e=contentAttribute(n.event.input,!1);e!==void 0&&n.span.setAttribute(`gen_ai.tool.call.arguments`,e)}}function finishIfReady(e){e.span===void 0||e.terminal===void 0||finish(e)}function finish(t,i){let o=t.span;if(o===void 0||t.finished===!0)return;t.finished=!0;let s=t.terminal;if(i!==void 0)recordError(o,i.error);else if(s?.type===`tool.call.failed`)recordError(o,s.error);else if(s?.output.type===`error`)recordError(o,s.output.error);else if(s!==void 0&&e.recordOutputs){let e=contentAttribute(s.output.output,!1);e!==void 0&&o.setAttribute(`gen_ai.tool.call.result`,e)}o.end(),n.delete(t.actionKey);let c=r.get(t.attemptId);c?.delete(t.idempotencyKey),c?.size===0&&r.delete(t.attemptId)}}function toolAttributes(e){return{"gen_ai.operation.name":`execute_tool`,"gen_ai.tool.call.id":e.callId,"gen_ai.tool.name":e.toolName,"gen_ai.tool.type":`function`}}function contextFromSpanContext(t){return trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext(t))}function recordError(e,t){e.setAttribute(`error.type`,t instanceof Error?t.name||`Error`:`_OTHER`),t instanceof Error?(e.recordException(t),e.setStatus({code:SpanStatusCode.ERROR,message:t.message})):e.setStatus({code:SpanStatusCode.ERROR})}export{createAgentToolInstrumentation};
@@ -1,8 +1,10 @@
1
1
  import type { SessionTraceContext } from "#channel/types.js";
2
+ import type { ContextAccessor } from "#context/key.js";
2
3
  import type { AgentActionTraceState, AgentSessionTraceState, AgentTraceStateStore, AgentTurnTraceState } from "#tracing/agent-trace-state.js";
3
4
  import type { InstrumentationDecision } from "#shared/instrumentation-decision.js";
4
5
  /** Reads the decision already bound to a session in the current worker context. */
5
6
  export declare function readCurrentSessionTraceDecision(sessionId: string): InstrumentationDecision | undefined;
7
+ export declare function readSessionTraceDecision(context: ContextAccessor, sessionId: string): InstrumentationDecision | undefined;
6
8
  /** Keeps only framework trace state from an interrupted step's context changes. */
7
9
  export declare function preserveSerializedAgentTraceState(original: Record<string, unknown>, interrupted: Record<string, unknown>): Record<string, unknown>;
8
10
  /**
@@ -26,4 +28,5 @@ export declare class ContextAgentTraceStateStore implements AgentTraceStateStore
26
28
  setAction(idempotencyKey: string, value: AgentActionTraceState): void;
27
29
  setSession(sessionId: string, value: AgentSessionTraceState): void;
28
30
  setTurn(sessionId: string, turnId: string, value: AgentTurnTraceState): void;
31
+ updateTurn(sessionId: string, turnId: string, update: (state: AgentTurnTraceState) => AgentTurnTraceState): void;
29
32
  }
@@ -1 +1 @@
1
- import{normalizeChannelAudience}from"#shared/channel-audience.js";import{contextStorage,loadContext}from"#context/container.js";import{SessionTraceSeedKey}from"#context/keys.js";import{ContextKey}from"#context/key.js";const AgentTraceContextKey=new ContextKey(`eve.harness.agentTrace`,{codec:{deserialize:deserializeState,serialize:serializeState}});function readCurrentSessionTraceDecision(e){return contextStorage.getStore()?.get(AgentTraceContextKey)?.sessions[e]?.decision}function preserveSerializedAgentTraceState(e,t){let n=t[AgentTraceContextKey.name];return n===void 0?e:{...e,[AgentTraceContextKey.name]:n}}function readSessionTraceContext(e,t){let n=e[AgentTraceContextKey.name];if(n===void 0)return;let r=deserializeState(n).sessions[t];return r===void 0?void 0:withTraceDecision(e,r.context,r.decision)}function readActionTraceContext(e,t,n,r){let i=e[AgentTraceContextKey.name];if(i===void 0)return;let o=deserializeState(i),s=Object.values(o.actions).find(e=>e.sessionId===t&&e.turnId===n&&e.callId===r);if(s!==void 0)return withTraceDecision(e,{isRemote:!1,spanId:s.spanId,traceFlags:s.parent.traceFlags,traceId:s.parent.traceId},o.sessions[s.sessionId]?.decision)}function withTraceDecision(e,t,n){let i=e[SessionTraceSeedKey.name],a=n??i?.decision;return a===void 0?t:{...t,decision:a}}var ContextAgentTraceStateStore=class{deleteAction(e){updateState(t=>{let n={...t.actions};return delete n[e],{...t,actions:n}})}deleteActions(e,t){updateState(n=>{let r={...n.actions};for(let[n,i]of Object.entries(r))i.sessionId===e&&(t===void 0||i.turnId===t)&&delete r[n];return{...n,actions:r}})}deleteSession(e){updateState(t=>{let n={...t.sessions};return delete n[e],{...t,sessions:n}})}deleteTurn(e,t){updateState(n=>{let r={...n.turns};return delete r[turnKey(e,t)],{...n,turns:r}})}findAction(e,n){return Object.values(contextStorage.getStore()?.get(AgentTraceContextKey)?.actions??{}).find(t=>t.sessionId===e&&t.callId===n)}getAction(e){return contextStorage.getStore()?.get(AgentTraceContextKey)?.actions[e]}getSession(e){return contextStorage.getStore()?.get(AgentTraceContextKey)?.sessions[e]}getTurn(e,n){return contextStorage.getStore()?.get(AgentTraceContextKey)?.turns[turnKey(e,n)]}setAction(e,t){updateState(n=>({...n,actions:{...n.actions,[e]:t}}))}setSession(e,t){updateState(n=>({...n,sessions:{...n.sessions,[e]:t}}))}setTurn(e,t,n){updateState(r=>({...r,turns:{...r.turns,[turnKey(e,t)]:n}}))}};function updateState(e){loadContext().set(AgentTraceContextKey,t=>e(t??{actions:{},sessions:{},turns:{}}))}function turnKey(e,t){return`${e}\0${t}`}function serializeState(e){return{actions:e.actions,sessions:Object.fromEntries(Object.entries(e.sessions).map(([e,t])=>[e,{...t,context:serializeSpanContext(t.context)}])),turns:Object.fromEntries(Object.entries(e.turns).map(([e,t])=>[e,{...t,context:serializeSpanContext(t.context),terminal:t.terminal===void 0?void 0:t.terminal.type===`turn.failed`?{error:serializeError(t.terminal.error),type:t.terminal.type}:{type:t.terminal.type}}]))}}function deserializeState(t){return isRecord(t)?{actions:deserializeRecord(t.actions,deserializeAction),sessions:deserializeRecord(t.sessions,t=>{if(!(!isRecord(t)||!isSpanContext(t.context)))return{agentName:typeof t.agentName==`string`?t.agentName:void 0,channelAudience:normalizeChannelAudience(t.channelAudience),channelKind:typeof t.channelKind==`string`?t.channelKind:void 0,context:t.context,decision:deserializeInstrumentationDecision(t.decision),rootSessionId:typeof t.rootSessionId==`string`?t.rootSessionId:``}}),turns:deserializeRecord(t.turns,e=>{if(!(!isRecord(e)||!isSpanContext(e.context))&&!(typeof e.parentSpanId!=`string`||typeof e.startTimeMs!=`number`))return{context:e.context,parentIsRemote:typeof e.parentIsRemote==`boolean`?e.parentIsRemote:void 0,parentSpanId:e.parentSpanId,rootSessionId:typeof e.rootSessionId==`string`?e.rootSessionId:``,sequence:typeof e.sequence==`number`?e.sequence:0,startTimeMs:e.startTimeMs,subagentName:typeof e.subagentName==`string`?e.subagentName:void 0,terminal:deserializeTerminal(e.terminal)}})}:{actions:{},sessions:{},turns:{}}}function deserializeAction(t){if(!(!isRecord(t)||typeof t.attemptIndex!=`number`||typeof t.callId!=`string`||!isActionKind(t.kind)||typeof t.name!=`string`||!isSpanContext(t.parent)||typeof t.rootSessionId!=`string`||typeof t.sessionId!=`string`||typeof t.spanId!=`string`||typeof t.startTimeMs!=`number`||typeof t.stepIndex!=`number`||typeof t.turnId!=`string`))return{attemptIndex:t.attemptIndex,callId:t.callId,channelAudience:normalizeChannelAudience(t.channelAudience),inputAttribute:typeof t.inputAttribute==`string`?t.inputAttribute:void 0,kind:t.kind,name:t.name,parent:t.parent,rootSessionId:t.rootSessionId,sessionId:t.sessionId,spanId:t.spanId,startTimeMs:t.startTimeMs,stepIndex:t.stepIndex,turnId:t.turnId}}function isActionKind(e){return e===`load-skill`||e===`remote-agent-call`||e===`subagent-call`||e===`tool-call`}function deserializeRecord(e,t){if(!isRecord(e))return{};let n={};for(let[r,i]of Object.entries(e)){let e=t(i);e!==void 0&&(n[r]=e)}return n}function deserializeTerminal(e){if(!isRecord(e)||typeof e.type!=`string`)return;let t=e.type;if(isTurnTerminalType(t))return t===`turn.failed`?{error:deserializeError(e.error),type:t}:{type:t}}function serializeSpanContext(e){return{isRemote:e.isRemote,spanId:e.spanId,traceFlags:e.traceFlags,traceId:e.traceId}}function isSpanContext(e){return isRecord(e)&&typeof e.spanId==`string`&&typeof e.traceFlags==`number`&&typeof e.traceId==`string`}function serializeError(e){return e instanceof Error?{message:e.message,name:e.name,stack:e.stack}:void 0}function deserializeError(e){if(!isRecord(e)||typeof e.message!=`string`)return;let t=Error(e.message);return typeof e.name==`string`&&(t.name=e.name),typeof e.stack==`string`&&(t.stack=e.stack),t}function isTurnTerminalType(e){return e===`turn.cancelled`||e===`turn.completed`||e===`turn.failed`}function deserializeInstrumentationDecision(e){if(isRecord(e))return e.action===`drop`?{action:`drop`}:e.action===`record`&&typeof e.recordInputs==`boolean`&&typeof e.recordOutputs==`boolean`?{action:`record`,recordInputs:e.recordInputs,recordOutputs:e.recordOutputs}:void 0}function isRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}export{ContextAgentTraceStateStore,preserveSerializedAgentTraceState,readActionTraceContext,readCurrentSessionTraceDecision,readSessionTraceContext};
1
+ import{normalizeChannelAudience}from"#shared/channel-audience.js";import{contextStorage,loadContext}from"#context/container.js";import{SessionTraceSeedKey}from"#context/keys.js";import{ContextKey}from"#context/key.js";const AgentTraceContextKey=new ContextKey(`eve.harness.agentTrace`,{codec:{deserialize:deserializeState,serialize:serializeState}});function readCurrentSessionTraceDecision(e){let n=contextStorage.getStore();return n===void 0?void 0:readSessionTraceDecision(n,e)}function readSessionTraceDecision(e,t){return e.get(AgentTraceContextKey)?.sessions[t]?.decision}function preserveSerializedAgentTraceState(e,t){let n=t[AgentTraceContextKey.name];return n===void 0?e:{...e,[AgentTraceContextKey.name]:n}}function readSessionTraceContext(e,t){let n=e[AgentTraceContextKey.name];if(n===void 0)return;let r=deserializeState(n).sessions[t];return r===void 0?void 0:withTraceDecision(e,r.context,r.decision)}function readActionTraceContext(e,t,n,r){let i=e[AgentTraceContextKey.name];if(i===void 0)return;let o=deserializeState(i),s=Object.values(o.actions).find(e=>e.sessionId===t&&e.turnId===n&&e.callId===r);if(s!==void 0)return withTraceDecision(e,{isRemote:!1,spanId:s.spanId,traceFlags:s.parent.traceFlags,traceId:s.parent.traceId},o.sessions[s.sessionId]?.decision)}function withTraceDecision(e,t,n){let i=e[SessionTraceSeedKey.name],a=n??i?.decision;return a===void 0?t:{...t,decision:a}}var ContextAgentTraceStateStore=class{deleteAction(e){updateState(t=>{let n={...t.actions};return delete n[e],{...t,actions:n}})}deleteActions(e,t){updateState(n=>{let r={...n.actions};for(let[n,i]of Object.entries(r))i.sessionId===e&&(t===void 0||i.turnId===t)&&delete r[n];return{...n,actions:r}})}deleteSession(e){updateState(t=>{let n={...t.sessions};return delete n[e],{...t,sessions:n}})}deleteTurn(e,t){updateState(n=>{let r={...n.turns};return delete r[turnKey(e,t)],{...n,turns:r}})}findAction(e,n){return Object.values(contextStorage.getStore()?.get(AgentTraceContextKey)?.actions??{}).find(t=>t.sessionId===e&&t.callId===n)}getAction(e){return contextStorage.getStore()?.get(AgentTraceContextKey)?.actions[e]}getSession(e){return contextStorage.getStore()?.get(AgentTraceContextKey)?.sessions[e]}getTurn(e,n){return contextStorage.getStore()?.get(AgentTraceContextKey)?.turns[turnKey(e,n)]}setAction(e,t){updateState(n=>({...n,actions:{...n.actions,[e]:t}}))}setSession(e,t){updateState(n=>({...n,sessions:{...n.sessions,[e]:t}}))}setTurn(e,t,n){updateState(r=>({...r,turns:{...r.turns,[turnKey(e,t)]:n}}))}updateTurn(e,t,n){updateState(r=>{let i=turnKey(e,t),a=r.turns[i];return a===void 0?r:{...r,turns:{...r.turns,[i]:n(a)}}})}};function updateState(e){loadContext().set(AgentTraceContextKey,t=>e(t??{actions:{},sessions:{},turns:{}}))}function turnKey(e,t){return`${e}\0${t}`}function serializeState(e){return{actions:e.actions,sessions:Object.fromEntries(Object.entries(e.sessions).map(([e,t])=>[e,{...t,context:serializeSpanContext(t.context)}])),turns:Object.fromEntries(Object.entries(e.turns).map(([e,t])=>[e,{...t,context:serializeSpanContext(t.context),terminal:t.terminal===void 0?void 0:t.terminal.type===`turn.failed`?{error:serializeError(t.terminal.error),type:t.terminal.type}:{type:t.terminal.type}}]))}}function deserializeState(t){return isRecord(t)?{actions:deserializeRecord(t.actions,deserializeAction),sessions:deserializeRecord(t.sessions,t=>{if(!(!isRecord(t)||!isSpanContext(t.context)))return{agentName:typeof t.agentName==`string`?t.agentName:void 0,channelAudience:normalizeChannelAudience(t.channelAudience),channelKind:typeof t.channelKind==`string`?t.channelKind:void 0,context:t.context,decision:deserializeInstrumentationDecision(t.decision),rootSessionId:typeof t.rootSessionId==`string`?t.rootSessionId:``}}),turns:deserializeRecord(t.turns,e=>{if(!(!isRecord(e)||!isSpanContext(e.context))&&!(typeof e.parentSpanId!=`string`||typeof e.startTimeMs!=`number`))return{context:e.context,modelUsage:deserializeModelUsage(e.modelUsage),parentIsRemote:typeof e.parentIsRemote==`boolean`?e.parentIsRemote:void 0,parentSpanId:e.parentSpanId,rootSessionId:typeof e.rootSessionId==`string`?e.rootSessionId:``,sequence:typeof e.sequence==`number`?e.sequence:0,startTimeMs:e.startTimeMs,subagentName:typeof e.subagentName==`string`?e.subagentName:void 0,terminal:deserializeTerminal(e.terminal)}})}:{actions:{},sessions:{},turns:{}}}function deserializeModelUsage(e){if(!isRecord(e))return;let t=typeof e.inputTokens==`number`?e.inputTokens:void 0,n=typeof e.outputTokens==`number`?e.outputTokens:void 0;return t===void 0&&n===void 0?void 0:{inputTokens:t,outputTokens:n}}function deserializeAction(t){if(!(!isRecord(t)||typeof t.attemptIndex!=`number`||typeof t.callId!=`string`||!isActionKind(t.kind)||typeof t.name!=`string`||!isSpanContext(t.parent)||typeof t.rootSessionId!=`string`||typeof t.sessionId!=`string`||typeof t.spanId!=`string`||typeof t.startTimeMs!=`number`||typeof t.stepIndex!=`number`||typeof t.turnId!=`string`))return{attemptIndex:t.attemptIndex,callId:t.callId,channelAudience:normalizeChannelAudience(t.channelAudience),inputAttribute:typeof t.inputAttribute==`string`?t.inputAttribute:void 0,kind:t.kind,name:t.name,parent:t.parent,rootSessionId:t.rootSessionId,sessionId:t.sessionId,spanId:t.spanId,startTimeMs:t.startTimeMs,stepIndex:t.stepIndex,turnId:t.turnId}}function isActionKind(e){return e===`load-skill`||e===`remote-agent-call`||e===`subagent-call`||e===`tool-call`}function deserializeRecord(e,t){if(!isRecord(e))return{};let n={};for(let[r,i]of Object.entries(e)){let e=t(i);e!==void 0&&(n[r]=e)}return n}function deserializeTerminal(e){if(!isRecord(e)||typeof e.type!=`string`)return;let t=e.type;if(isTurnTerminalType(t))return t===`turn.failed`?{error:deserializeError(e.error),type:t}:{type:t}}function serializeSpanContext(e){return{isRemote:e.isRemote,spanId:e.spanId,traceFlags:e.traceFlags,traceId:e.traceId}}function isSpanContext(e){return isRecord(e)&&typeof e.spanId==`string`&&typeof e.traceFlags==`number`&&typeof e.traceId==`string`}function serializeError(e){return e instanceof Error?{message:e.message,name:e.name,stack:e.stack}:void 0}function deserializeError(e){if(!isRecord(e)||typeof e.message!=`string`)return;let t=Error(e.message);return typeof e.name==`string`&&(t.name=e.name),typeof e.stack==`string`&&(t.stack=e.stack),t}function isTurnTerminalType(e){return e===`turn.cancelled`||e===`turn.completed`||e===`turn.failed`}function deserializeInstrumentationDecision(e){if(isRecord(e))return e.action===`drop`?{action:`drop`}:e.action===`record`&&typeof e.recordInputs==`boolean`&&typeof e.recordOutputs==`boolean`?{action:`record`,recordInputs:e.recordInputs,recordOutputs:e.recordOutputs}:void 0}function isRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}export{ContextAgentTraceStateStore,preserveSerializedAgentTraceState,readActionTraceContext,readCurrentSessionTraceDecision,readSessionTraceContext,readSessionTraceDecision};
@@ -0,0 +1,3 @@
1
+ import { type Context } from "#compiled/@opentelemetry/api/index.js";
2
+ export declare function isAgentTraceContext(context: unknown): boolean;
3
+ export declare function markAgentTraceContext(context: Context): Context;
@@ -0,0 +1 @@
1
+ import{createContextKey}from"#compiled/@opentelemetry/api/index.js";const AGENT_TRACE_KEY=createContextKey(`eve.agent.trace`);function isAgentTraceContext(e){if(typeof e!=`object`||!e)return!1;let t=Reflect.get(e,`getValue`);return typeof t==`function`&&Reflect.apply(t,e,[AGENT_TRACE_KEY])===!0}function markAgentTraceContext(e){return e.setValue(AGENT_TRACE_KEY,!0)}export{isAgentTraceContext,markAgentTraceContext};
@@ -1,5 +1,5 @@
1
1
  import type { SpanContext } from "#compiled/@opentelemetry/api/index.js";
2
- import type { InstrumentationActionKind, InstrumentationTraceContext, InstrumentationTurnFailedEvent, InstrumentationTurnSettledEvent } from "#harness/instrumentation/lifecycle.js";
2
+ import type { InstrumentationActionKind, InstrumentationTraceContext, InstrumentationTurnFailedEvent, InstrumentationTurnSettledEvent } from "#instrumentation/lifecycle.js";
3
3
  import type { ChannelAudience } from "#shared/channel-audience.js";
4
4
  import type { InstrumentationDecision } from "#shared/instrumentation-decision.js";
5
5
  export interface AgentSessionTraceState {
@@ -12,6 +12,10 @@ export interface AgentSessionTraceState {
12
12
  }
13
13
  export interface AgentTurnTraceState {
14
14
  readonly context: SpanContext;
15
+ readonly modelUsage?: {
16
+ readonly inputTokens?: number;
17
+ readonly outputTokens?: number;
18
+ };
15
19
  readonly parentIsRemote?: boolean;
16
20
  readonly parentSpanId: string;
17
21
  readonly rootSessionId: string;
@@ -53,6 +57,8 @@ export interface AgentTraceStateStore {
53
57
  setAction(idempotencyKey: string, state: AgentActionTraceState): void | PromiseLike<void>;
54
58
  setSession(sessionId: string, state: AgentSessionTraceState): void | PromiseLike<void>;
55
59
  setTurn(sessionId: string, turnId: string, state: AgentTurnTraceState): void | PromiseLike<void>;
60
+ /** Atomically updates an existing turn and does nothing after that turn is deleted. */
61
+ updateTurn(sessionId: string, turnId: string, update: (state: AgentTurnTraceState) => AgentTurnTraceState): void | PromiseLike<void>;
56
62
  }
57
63
  /** In-memory trace state used by tests and non-durable runtimes. */
58
64
  export declare class InMemoryAgentTraceStateStore implements AgentTraceStateStore {
@@ -68,5 +74,6 @@ export declare class InMemoryAgentTraceStateStore implements AgentTraceStateStor
68
74
  setAction(idempotencyKey: string, state: AgentActionTraceState): void;
69
75
  setSession(sessionId: string, state: AgentSessionTraceState): void;
70
76
  setTurn(sessionId: string, turnId: string, state: AgentTurnTraceState): void;
77
+ updateTurn(sessionId: string, turnId: string, update: (state: AgentTurnTraceState) => AgentTurnTraceState): void;
71
78
  }
72
79
  export declare function turnKey(sessionId: string, turnId: string): string;