eve 0.56.0 → 0.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (559) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/dist/src/channel/adapter-context.d.ts +1 -1
  3. package/dist/src/channel/adapter.d.ts +2 -2
  4. package/dist/src/channel/channel-address.js +1 -1
  5. package/dist/src/channel/session.d.ts +4 -3
  6. package/dist/src/channel/session.js +1 -1
  7. package/dist/src/channel/types.d.ts +7 -4
  8. package/dist/src/chunks/{use-eve-agent-RUGSwq8b.js → use-eve-agent-C2APNCdP.js} +45 -12
  9. package/dist/src/chunks/{use-eve-agent-CMdMlS7Y.js → use-eve-agent-D0YnDLi_.js} +45 -12
  10. package/dist/src/cli/commands/init.d.ts +2 -6
  11. package/dist/src/cli/commands/init.js +1 -1
  12. package/dist/src/cli/commands/trace-detail.js +1 -1
  13. package/dist/src/cli/dev/environment.js +1 -1
  14. package/dist/src/cli/dev/run-interactive-ui.js +1 -1
  15. package/dist/src/cli/dev/tui/agent-header.js +1 -1
  16. package/dist/src/cli/dev/tui/blocks.d.ts +1 -6
  17. package/dist/src/cli/dev/tui/blocks.js +1 -1
  18. package/dist/src/cli/dev/tui/command-typeahead.js +1 -1
  19. package/dist/src/cli/dev/tui/message-queue.d.ts +11 -7
  20. package/dist/src/cli/dev/tui/message-queue.js +1 -1
  21. package/dist/src/cli/dev/tui/model-editor.d.ts +1 -1
  22. package/dist/src/cli/dev/tui/model-editor.js +1 -1
  23. package/dist/src/cli/dev/tui/prompt-command-handler.d.ts +0 -3
  24. package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -1
  25. package/dist/src/cli/dev/tui/prompt-commands.d.ts +1 -1
  26. package/dist/src/cli/dev/tui/prompt-commands.js +1 -1
  27. package/dist/src/cli/dev/tui/question-panel.js +1 -1
  28. package/dist/src/cli/dev/tui/remote-auth-result.js +1 -1
  29. package/dist/src/cli/dev/tui/remote-auth.js +1 -1
  30. package/dist/src/cli/dev/tui/remote-startup.d.ts +10 -0
  31. package/dist/src/cli/dev/tui/remote-startup.js +1 -0
  32. package/dist/src/cli/dev/tui/runner.d.ts +12 -18
  33. package/dist/src/cli/dev/tui/runner.js +3 -1
  34. package/dist/src/cli/dev/tui/setup-commands.d.ts +7 -13
  35. package/dist/src/cli/dev/tui/setup-commands.js +2 -2
  36. package/dist/src/cli/dev/tui/setup-issues.d.ts +1 -1
  37. package/dist/src/cli/dev/tui/setup-issues.js +1 -1
  38. package/dist/src/cli/dev/tui/setup-panel.d.ts +5 -17
  39. package/dist/src/cli/dev/tui/setup-panel.js +5 -6
  40. package/dist/src/cli/dev/tui/status-line.d.ts +1 -8
  41. package/dist/src/cli/dev/tui/status-line.js +1 -1
  42. package/dist/src/cli/dev/tui/steering-stream.d.ts +15 -0
  43. package/dist/src/cli/dev/tui/steering-stream.js +1 -0
  44. package/dist/src/cli/dev/tui/terminal-renderer.d.ts +3 -2
  45. package/dist/src/cli/dev/tui/terminal-renderer.js +12 -12
  46. package/dist/src/cli/dev/tui/test/mock-terminal.d.ts +2 -2
  47. package/dist/src/cli/dev/tui/test/mock-terminal.js +1 -1
  48. package/dist/src/cli/dev/tui/theme.d.ts +0 -2
  49. package/dist/src/cli/dev/tui/theme.js +1 -1
  50. package/dist/src/cli/dev/tui/vercel-status.d.ts +4 -2
  51. package/dist/src/cli/dev/tui/vercel-status.js +1 -1
  52. package/dist/src/cli/run.js +1 -1
  53. package/dist/src/cli/telemetry/index.d.ts +1 -1
  54. package/dist/src/cli/telemetry/index.js +1 -1
  55. package/dist/src/client/agent-info-schema.d.ts +2 -0
  56. package/dist/src/client/agent-info-schema.js +1 -1
  57. package/dist/src/client/eve-agent-store-state.d.ts +19 -0
  58. package/dist/src/client/eve-agent-store.js +1 -1
  59. package/dist/src/client/ndjson.d.ts +2 -0
  60. package/dist/src/client/ndjson.js +3 -3
  61. package/dist/src/client/open-stream.d.ts +1 -0
  62. package/dist/src/client/open-stream.js +1 -1
  63. package/dist/src/compiled/.vendor-stamp.json +1 -1
  64. package/dist/src/compiled/@workflow/core/index.js +2 -2
  65. package/dist/src/compiled/@workflow/core/private.js +1 -1
  66. package/dist/src/compiled/@workflow/core/runtime/helpers.js +1 -0
  67. package/dist/src/compiled/@workflow/core/runtime.js +2 -2
  68. package/dist/src/compiled/@workflow/core/serialization.js +1 -0
  69. package/dist/src/compiled/@workflow/core/workflow.js +1 -1
  70. package/dist/src/compiled/@workflow/world-local/index.js +5 -5
  71. package/dist/src/compiled/@workflow/world-vercel/index.js +2 -2
  72. package/dist/src/compiled/_chunks/workflow/attribute-changes-DTFAjP0J.js +6 -0
  73. package/dist/src/compiled/_chunks/workflow/{dist-PLkAQ-U7.js → dist-C5KCXSdI.js} +1 -1
  74. package/dist/src/compiled/_chunks/workflow/{frames-BvATzM2t.js → frames-DJw9L4rO.js} +3 -3
  75. package/dist/src/compiled/_chunks/workflow/global-DFW-hO6M.js +1 -0
  76. package/dist/src/compiled/_chunks/workflow/helpers-ClCA9Lmc.js +1 -0
  77. package/dist/src/compiled/_chunks/workflow/logger-D6vwIEf9.js +13 -0
  78. package/dist/src/compiled/_chunks/workflow/resume-hook-_baK8jaT.js +1 -0
  79. package/dist/src/compiled/_chunks/workflow/run-CRdL17z4.js +1 -0
  80. package/dist/src/compiled/_chunks/workflow/serialization-CWYPL4Eq.js +3 -0
  81. package/dist/src/compiled/_chunks/workflow/sleep-BL0kgJnT.js +1 -0
  82. package/dist/src/compiled/_chunks/workflow/wait-until-DyIt9lEx.js +1 -0
  83. package/dist/src/compiled/_chunks/workflow/{ws-transport-CVezyWwZ.js → ws-transport-Dl5FG4Sw.js} +1 -1
  84. package/dist/src/compiler/extension-compatibility.d.ts +15 -6
  85. package/dist/src/compiler/extension-compatibility.js +1 -1
  86. package/dist/src/context/dynamic-skill-lifecycle.js +1 -1
  87. package/dist/src/context/keys.d.ts +3 -1
  88. package/dist/src/context/keys.js +1 -1
  89. package/dist/src/eve-channel/index.js +1 -1
  90. package/dist/src/eve-channel/request.js +4 -3
  91. package/dist/src/execution/activity-cohort.js +1 -1
  92. package/dist/src/execution/activity-collector.js +1 -1
  93. package/dist/src/execution/authorization-callback-match.d.ts +2 -1
  94. package/dist/src/execution/authorization-callback-match.js +1 -1
  95. package/dist/src/execution/cancel-descendant-turns-step.js +1 -1
  96. package/dist/src/execution/cancel-indexed-session-tasks-step.js +1 -1
  97. package/dist/src/execution/cancelled-model-call-batch.d.ts +1 -1
  98. package/dist/src/execution/connections/callback-route.d.ts +1 -11
  99. package/dist/src/execution/connections/callback-route.js +1 -1
  100. package/dist/src/execution/continuation-conflict-step.d.ts +0 -1
  101. package/dist/src/execution/continuation-conflict-step.js +1 -1
  102. package/dist/src/execution/coordination-dispatch-shared.d.ts +1 -1
  103. package/dist/src/execution/coordination-dispatch-shared.js +1 -1
  104. package/dist/src/execution/create-session-step.d.ts +1 -1
  105. package/dist/src/execution/durable-session-store.d.ts +10 -48
  106. package/dist/src/execution/durable-session-store.js +1 -1
  107. package/dist/src/execution/dynamic-workflow/tool.js +1 -1
  108. package/dist/src/execution/eve-workflow-attributes.d.ts +0 -16
  109. package/dist/src/execution/eve-workflow-attributes.js +1 -1
  110. package/dist/src/execution/hook-ownership.d.ts +2 -4
  111. package/dist/src/execution/hook-ownership.js +1 -1
  112. package/dist/src/execution/legacy-session/authorization.d.ts +9 -0
  113. package/dist/src/execution/legacy-session/authorization.js +1 -0
  114. package/dist/src/execution/legacy-session/completion-step.d.ts +10 -0
  115. package/dist/src/execution/legacy-session/completion-step.js +1 -0
  116. package/dist/src/execution/legacy-session/inbox.d.ts +24 -0
  117. package/dist/src/execution/legacy-session/inbox.js +1 -0
  118. package/dist/src/execution/legacy-session/input.d.ts +19 -0
  119. package/dist/src/execution/legacy-session/input.js +1 -0
  120. package/dist/src/execution/legacy-session/interrupt-step.d.ts +3 -0
  121. package/dist/src/execution/legacy-session/interrupt-step.js +1 -0
  122. package/dist/src/execution/legacy-session/prepare-step.d.ts +24 -0
  123. package/dist/src/execution/legacy-session/prepare-step.js +1 -0
  124. package/dist/src/execution/legacy-session/snapshot.d.ts +12 -0
  125. package/dist/src/execution/legacy-session/snapshot.js +1 -0
  126. package/dist/src/execution/legacy-session/turn-workflow.d.ts +8 -0
  127. package/dist/src/execution/legacy-session/turn-workflow.js +1 -0
  128. package/dist/src/execution/model-call-batching.d.ts +1 -0
  129. package/dist/src/execution/model-call-batching.js +1 -1
  130. package/dist/src/execution/node-step.d.ts +1 -0
  131. package/dist/src/execution/node-step.js +1 -1
  132. package/dist/src/execution/proxied-deliver-step.d.ts +2 -20
  133. package/dist/src/execution/proxied-deliver-step.js +1 -1
  134. package/dist/src/execution/reconcile-session-continuation-token.d.ts +1 -1
  135. package/dist/src/execution/report-dropped-wire-payload-step.d.ts +1 -1
  136. package/dist/src/execution/route-child-delivery.d.ts +2 -2
  137. package/dist/src/execution/route-child-delivery.js +1 -1
  138. package/dist/src/execution/runtime-context.js +1 -1
  139. package/dist/src/execution/sandbox/bindings/eve-image.js +1 -1
  140. package/dist/src/execution/session/accepted-deployment.d.ts +3 -0
  141. package/dist/src/execution/session/accepted-deployment.js +1 -0
  142. package/dist/src/execution/session/admission.d.ts +38 -0
  143. package/dist/src/execution/session/admission.js +1 -0
  144. package/dist/src/execution/session/entry-input.d.ts +42 -0
  145. package/dist/src/execution/session/entry-input.js +1 -0
  146. package/dist/src/execution/session/entry.d.ts +13 -0
  147. package/dist/src/execution/session/entry.js +1 -0
  148. package/dist/src/execution/session/event-sink.d.ts +31 -0
  149. package/dist/src/execution/session/event-sink.js +1 -0
  150. package/dist/src/execution/session/finalization.d.ts +33 -0
  151. package/dist/src/execution/session/finalization.js +1 -0
  152. package/dist/src/execution/session/handoff-steps.d.ts +22 -0
  153. package/dist/src/execution/session/handoff-steps.js +1 -0
  154. package/dist/src/execution/session/handoff.d.ts +69 -0
  155. package/dist/src/execution/session/handoff.js +1 -0
  156. package/dist/src/execution/session/hook-tokens.d.ts +11 -0
  157. package/dist/src/execution/session/hook-tokens.js +1 -0
  158. package/dist/src/execution/session/input-queue.d.ts +72 -0
  159. package/dist/src/execution/session/input-queue.js +1 -0
  160. package/dist/src/execution/session/next-input.d.ts +32 -0
  161. package/dist/src/execution/session/next-input.js +1 -0
  162. package/dist/src/execution/{pending-turn-state.d.ts → session/pending-turn-state.d.ts} +0 -1
  163. package/dist/src/execution/{pending-turn-state.js → session/pending-turn-state.js} +1 -1
  164. package/dist/src/execution/session/program.d.ts +47 -0
  165. package/dist/src/execution/session/program.js +1 -0
  166. package/dist/src/execution/session/route-selected-delivery.d.ts +9 -0
  167. package/dist/src/execution/session/route-selected-delivery.js +1 -0
  168. package/dist/src/execution/session/state-cursor.d.ts +31 -0
  169. package/dist/src/execution/session/state-cursor.js +1 -0
  170. package/dist/src/execution/{session-timeout-control.d.ts → session/timeout-control.d.ts} +1 -1
  171. package/dist/src/execution/session/timeout-control.js +1 -0
  172. package/dist/src/execution/{session-timeout-steps.d.ts → session/timeout-steps.d.ts} +3 -2
  173. package/dist/src/execution/session/timeout-steps.js +1 -0
  174. package/dist/src/execution/{session-timeout-workflow.d.ts → session/timeout-workflow.d.ts} +3 -1
  175. package/dist/src/execution/session/timeout-workflow.js +1 -0
  176. package/dist/src/execution/session/timeout.d.ts +3 -0
  177. package/dist/src/execution/session/timeout.js +1 -0
  178. package/dist/src/execution/session/turn-step-result.d.ts +4 -0
  179. package/dist/src/execution/session/turn-step-result.js +1 -0
  180. package/dist/src/execution/session/turn-step-types.d.ts +68 -0
  181. package/dist/src/execution/session/turn-step-types.js +1 -0
  182. package/dist/src/execution/{workflow-steps.d.ts → session/turn-step.d.ts} +1 -2
  183. package/dist/src/execution/session/turn-step.js +1 -0
  184. package/dist/src/execution/session/turn.d.ts +31 -0
  185. package/dist/src/execution/session/turn.js +1 -0
  186. package/dist/src/execution/session-inbox/address.d.ts +21 -0
  187. package/dist/src/execution/session-inbox/address.js +1 -0
  188. package/dist/src/execution/session-inbox/inbox.d.ts +54 -0
  189. package/dist/src/execution/session-inbox/inbox.js +1 -0
  190. package/dist/src/execution/session-inbox/protocol.d.ts +10 -0
  191. package/dist/src/execution/session-inbox/protocol.js +1 -0
  192. package/dist/src/execution/session-inbox/release-step.d.ts +5 -0
  193. package/dist/src/execution/session-inbox/release-step.js +1 -0
  194. package/dist/src/execution/session-inbox/resume.d.ts +21 -0
  195. package/dist/src/execution/session-inbox/resume.js +1 -0
  196. package/dist/src/execution/{turn-workflow-tool-run.d.ts → session-workflow-tool-run.d.ts} +2 -2
  197. package/dist/src/execution/session-workflow-tool-run.js +1 -0
  198. package/dist/src/execution/settle-cancelled-turn-step.d.ts +2 -2
  199. package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
  200. package/dist/src/execution/skills/instructions.js +1 -1
  201. package/dist/src/execution/stable-workflow-names.d.ts +1 -1
  202. package/dist/src/execution/stable-workflow-names.js +1 -1
  203. package/dist/src/execution/task-input-response-route.js +1 -1
  204. package/dist/src/execution/tasks/child/steps.d.ts +1 -1
  205. package/dist/src/execution/tasks/child/steps.js +1 -1
  206. package/dist/src/execution/tasks/child/workflow.js +1 -1
  207. package/dist/src/execution/tasks/parent/delegate.js +1 -1
  208. package/dist/src/execution/tasks/parent/dispatch.js +1 -1
  209. package/dist/src/execution/tasks/parent/hitl-proxy-steps.js +1 -1
  210. package/dist/src/execution/tasks/parent/tool-execution.js +1 -1
  211. package/dist/src/execution/terminal-session-completion-step.d.ts +1 -1
  212. package/dist/src/execution/terminal-session-event.d.ts +1 -1
  213. package/dist/src/execution/terminal-session-event.js +1 -1
  214. package/dist/src/execution/terminal-session-failure-step.d.ts +1 -1
  215. package/dist/src/execution/terminal-session-failure-step.js +1 -1
  216. package/dist/src/execution/terminate-child-sessions-step.js +1 -1
  217. package/dist/src/execution/tools/sleep-workflow.js +1 -1
  218. package/dist/src/execution/tools/subagent/accept-event-step.js +1 -1
  219. package/dist/src/execution/tools/subagent/emit-called-step.d.ts +1 -1
  220. package/dist/src/execution/tools/subagent/emit-called-step.js +1 -1
  221. package/dist/src/execution/tools/subagent/invoke-agent.d.ts +1 -1
  222. package/dist/src/execution/tools/subagent/invoke-agent.js +1 -1
  223. package/dist/src/execution/tools/subagent/invoke-preparation.d.ts +6 -0
  224. package/dist/src/execution/tools/subagent/invoke-preparation.js +1 -1
  225. package/dist/src/execution/tools/subagent/invoke-step.js +1 -1
  226. package/dist/src/execution/tools/subagent/steer.d.ts +13 -0
  227. package/dist/src/execution/tools/subagent/steer.js +1 -0
  228. package/dist/src/execution/tools/subagent/task-agent-requests.d.ts +1 -1
  229. package/dist/src/execution/tools/subagent/task-agent-requests.js +1 -1
  230. package/dist/src/execution/tools/subagent/task-cancel.js +1 -1
  231. package/dist/src/execution/tools/workflow/ask.d.ts +0 -9
  232. package/dist/src/execution/tools/workflow/ask.js +1 -1
  233. package/dist/src/execution/tools/workflow/body.d.ts +0 -2
  234. package/dist/src/execution/tools/workflow/body.js +1 -1
  235. package/dist/src/execution/tools/workflow/emit-workflow-tool-run-report-step.d.ts +1 -1
  236. package/dist/src/execution/tools/workflow/emit-workflow-tool-run-report-step.js +1 -1
  237. package/dist/src/execution/tools/workflow/messages.d.ts +0 -1
  238. package/dist/src/execution/tools/workflow/messages.js +1 -1
  239. package/dist/src/execution/tools/workflow/owner.d.ts +3 -1
  240. package/dist/src/execution/tools/workflow/owner.js +1 -1
  241. package/dist/src/execution/tools/workflow/resume-hook-step.d.ts +1 -1
  242. package/dist/src/execution/tools/workflow/step-context.d.ts +0 -1
  243. package/dist/src/execution/tools/workflow/step-execution.js +1 -1
  244. package/dist/src/execution/tools/workflow/step.js +1 -1
  245. package/dist/src/execution/tools/workflow/workflow.js +1 -1
  246. package/dist/src/execution/workflow-runtime.d.ts +15 -18
  247. package/dist/src/execution/workflow-runtime.js +1 -1
  248. package/dist/src/harness/authorization.d.ts +5 -37
  249. package/dist/src/harness/authorization.js +1 -1
  250. package/dist/src/harness/compaction.js +1 -1
  251. package/dist/src/harness/coordination.js +1 -1
  252. package/dist/src/harness/emission-state.d.ts +1 -0
  253. package/dist/src/harness/emission.js +1 -1
  254. package/dist/src/harness/generation-steering.d.ts +22 -0
  255. package/dist/src/harness/generation-steering.js +1 -0
  256. package/dist/src/harness/messages.d.ts +1 -1
  257. package/dist/src/harness/messages.js +1 -1
  258. package/dist/src/harness/prompt-cache.js +1 -1
  259. package/dist/src/harness/proxy-input-requests.d.ts +1 -1
  260. package/dist/src/harness/proxy-input-requests.js +1 -1
  261. package/dist/src/harness/semantic-errors/rules/gateway.js +1 -1
  262. package/dist/src/harness/semantic-errors/signals.js +1 -1
  263. package/dist/src/harness/session-limit-enforcement.js +1 -1
  264. package/dist/src/harness/tool-loop.js +2 -2
  265. package/dist/src/harness/types.d.ts +2 -0
  266. package/dist/src/instrumentation/ai-sdk-hook-bridge.js +1 -1
  267. package/dist/src/instrumentation/channel-delivery.js +1 -1
  268. package/dist/src/instrumentation/lifecycle.d.ts +1 -0
  269. package/dist/src/instrumentation/native-events.js +1 -1
  270. package/dist/src/internal/application/compiled-artifacts.js +3 -2
  271. package/dist/src/internal/application/package.js +1 -1
  272. package/dist/src/internal/gateway.d.ts +1 -0
  273. package/dist/src/internal/gateway.js +1 -1
  274. package/dist/src/internal/model-auth/api-key.d.ts +7 -0
  275. package/dist/src/internal/model-auth/api-key.js +1 -0
  276. package/dist/src/internal/model-auth/available-models.d.ts +2 -0
  277. package/dist/src/internal/model-auth/available-models.js +1 -0
  278. package/dist/src/internal/model-auth/development-broker-client.d.ts +3 -0
  279. package/dist/src/internal/model-auth/development-broker-client.js +1 -0
  280. package/dist/src/internal/model-auth/development-broker-protocol.d.ts +12 -0
  281. package/dist/src/internal/model-auth/development-broker-protocol.js +1 -0
  282. package/dist/src/internal/model-auth/development-broker-server.d.ts +4 -0
  283. package/dist/src/internal/model-auth/development-broker-server.js +1 -0
  284. package/dist/src/internal/model-auth/gateway-credential.d.ts +2 -0
  285. package/dist/src/internal/model-auth/gateway-credential.js +1 -0
  286. package/dist/src/internal/model-auth/store.d.ts +16 -0
  287. package/dist/src/internal/model-auth/store.js +1 -0
  288. package/dist/src/internal/model-auth/transport.d.ts +6 -0
  289. package/dist/src/internal/model-auth/transport.js +1 -0
  290. package/dist/src/internal/model-auth/vercel-cli.d.ts +7 -0
  291. package/dist/src/internal/model-auth/vercel-cli.js +1 -0
  292. package/dist/src/internal/model-auth/vercel-team.d.ts +3 -0
  293. package/dist/src/internal/model-auth/vercel-team.js +1 -0
  294. package/dist/src/internal/model-auth/vercel.d.ts +13 -0
  295. package/dist/src/internal/model-auth/vercel.js +1 -0
  296. package/dist/src/internal/nitro/host/dev-authored-source-watcher.js +1 -1
  297. package/dist/src/internal/nitro/host/drained-nitro-dev-server.js +1 -1
  298. package/dist/src/internal/nitro/host/start-development-server.js +2 -2
  299. package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -1
  300. package/dist/src/internal/nitro/routes/info.js +1 -1
  301. package/dist/src/internal/resolve-model-endpoint-status.d.ts +2 -0
  302. package/dist/src/internal/resolve-model-endpoint-status.js +1 -1
  303. package/dist/src/internal/vercel/api-resource.d.ts +4 -0
  304. package/dist/src/internal/vercel/api-resource.js +1 -0
  305. package/dist/src/internal/vercel/eve-service-contribution.js +1 -1
  306. package/dist/src/internal/vercel/vercel-services-config.d.ts +2 -0
  307. package/dist/src/internal/vercel/vercel-services-config.js +1 -1
  308. package/dist/src/internal/workflow/development-world-client.js +1 -1
  309. package/dist/src/internal/workflow/development-world-server.js +1 -1
  310. package/dist/src/internal/workflow/local-world-delivery-timeouts.d.ts +1 -1
  311. package/dist/src/internal/workflow/runtime.d.ts +1 -6
  312. package/dist/src/internal/workflow/runtime.js +1 -1
  313. package/dist/src/internal/workflow/vercel-world-defaults.d.ts +4 -0
  314. package/dist/src/internal/workflow/vercel-world-defaults.js +1 -0
  315. package/dist/src/protocol/activity.js +1 -1
  316. package/dist/src/protocol/message.d.ts +8 -0
  317. package/dist/src/protocol/message.js +2 -2
  318. package/dist/src/protocol/routes.d.ts +0 -2
  319. package/dist/src/protocol/routes.js +1 -1
  320. package/dist/src/public/channels/discord/discordChannel.js +1 -1
  321. package/dist/src/public/channels/slack/slackChannel.js +1 -1
  322. package/dist/src/public/channels/teams/teamsChannel.js +1 -1
  323. package/dist/src/public/channels/telegram/telegramChannel.js +1 -1
  324. package/dist/src/public/definitions/channel.d.ts +1 -1
  325. package/dist/src/public/definitions/channel.js +1 -1
  326. package/dist/src/public/models/anthropic/index.d.ts +3 -0
  327. package/dist/src/public/models/anthropic/index.js +1 -0
  328. package/dist/src/public/models/openai/chatgpt/codex-app-server.js +1 -1
  329. package/dist/src/public/models/openai/chatgpt/credential-store.js +1 -1
  330. package/dist/src/public/models/openai/chatgpt/oauth.js +1 -1
  331. package/dist/src/public/models/openai/chatgpt/transport.js +1 -1
  332. package/dist/src/public/models/openai/index.d.ts +4 -2
  333. package/dist/src/public/models/openai/index.js +1 -1
  334. package/dist/src/public/sandbox/docker-sandbox.d.ts +1 -1
  335. package/dist/src/public/sandbox/microsandbox-sandbox.d.ts +1 -1
  336. package/dist/src/public/sandbox/vercel-sandbox.d.ts +1 -1
  337. package/dist/src/public/vercel/index.d.ts +2 -1
  338. package/dist/src/public/vercel/index.js +1 -1
  339. package/dist/src/runtime/agent/resolve-model.js +1 -1
  340. package/dist/src/runtime/prompt/compose.js +1 -1
  341. package/dist/src/runtime/tools/registry.js +1 -1
  342. package/dist/src/self-modification/agent.js +1 -1
  343. package/dist/src/self-modification/setup.d.ts +9 -3
  344. package/dist/src/self-modification/setup.js +2 -2
  345. package/dist/src/setup/cli/option-row.d.ts +2 -1
  346. package/dist/src/setup/cli/option-row.js +1 -1
  347. package/dist/src/setup/cli/prompt-ui.d.ts +2 -0
  348. package/dist/src/setup/cli/prompt-ui.js +1 -1
  349. package/dist/src/setup/cli/select-state.d.ts +1 -1
  350. package/dist/src/setup/cli/select-state.js +1 -1
  351. package/dist/src/setup/flows/chatgpt-auth.js +1 -1
  352. package/dist/src/setup/flows/deploy.d.ts +4 -9
  353. package/dist/src/setup/flows/deploy.js +1 -1
  354. package/dist/src/setup/flows/ensure-vercel-project.js +1 -1
  355. package/dist/src/setup/flows/install-vercel-cli.d.ts +2 -3
  356. package/dist/src/setup/flows/login.d.ts +3 -1
  357. package/dist/src/setup/flows/login.js +1 -1
  358. package/dist/src/setup/flows/model-login-connection.d.ts +36 -0
  359. package/dist/src/setup/flows/model-login-connection.js +1 -0
  360. package/dist/src/setup/flows/model-login-progress.d.ts +7 -0
  361. package/dist/src/setup/flows/model-login-progress.js +1 -0
  362. package/dist/src/setup/flows/model-login.d.ts +22 -0
  363. package/dist/src/setup/flows/model-login.js +1 -0
  364. package/dist/src/setup/flows/model-source-change.d.ts +7 -0
  365. package/dist/src/setup/flows/model-source-change.js +1 -1
  366. package/dist/src/setup/flows/model.d.ts +6 -24
  367. package/dist/src/setup/flows/model.js +1 -1
  368. package/dist/src/setup/flows/registry.d.ts +3 -19
  369. package/dist/src/setup/flows/registry.js +1 -1
  370. package/dist/src/setup/flows/vercel-model-login.d.ts +5 -0
  371. package/dist/src/setup/flows/vercel-model-login.js +1 -0
  372. package/dist/src/setup/integrations/self-modification/setup.d.ts +2 -0
  373. package/dist/src/setup/integrations/self-modification/setup.js +1 -1
  374. package/dist/src/setup/project-resolution.js +1 -1
  375. package/dist/src/setup/prompter.d.ts +3 -1
  376. package/dist/src/setup/provider-settings.d.ts +19 -6
  377. package/dist/src/setup/provider-settings.js +1 -1
  378. package/dist/src/setup/scaffold/create/project.js +1 -1
  379. package/dist/src/setup/vercel-project.js +0 -0
  380. package/dist/src/setup/with-spinner.d.ts +1 -1
  381. package/dist/src/setup/with-spinner.js +1 -1
  382. package/dist/src/shared/action-types.js +1 -1
  383. package/dist/src/shared/agent-definition.d.ts +6 -4
  384. package/dist/src/shared/chatgpt-model.d.ts +2 -2
  385. package/dist/src/shared/chatgpt-model.js +1 -1
  386. package/dist/src/shared/model-connection.d.ts +17 -0
  387. package/dist/src/shared/model-connection.js +1 -0
  388. package/dist/src/shared/model-endpoint-status.d.ts +2 -1
  389. package/dist/src/shared/model-helper.d.ts +26 -0
  390. package/dist/src/shared/model-helper.js +1 -0
  391. package/dist/src/shared/package-version.d.ts +2 -0
  392. package/dist/src/shared/package-version.js +1 -0
  393. package/dist/src/shared/vercel-services.d.ts +1 -0
  394. package/dist/src/shared/vercel-services.js +1 -1
  395. package/dist/src/source-change/agent-config-ast.d.ts +6 -0
  396. package/dist/src/source-change/agent-config-ast.js +1 -1
  397. package/dist/src/source-change/apply-model-selection.d.ts +3 -1
  398. package/dist/src/source-change/apply-model-selection.js +1 -2
  399. package/dist/src/source-change/static-source-change.js +1 -1
  400. package/dist/src/subagents/callback-route.js +1 -1
  401. package/dist/src/subagents/event-proxy-step.d.ts +3 -3
  402. package/dist/src/subagents/event-proxy-step.js +1 -1
  403. package/dist/src/subagents/handle-dispatch.d.ts +12 -2
  404. package/dist/src/subagents/handle-dispatch.js +1 -1
  405. package/dist/src/subagents/handles/operation-id.d.ts +1 -1
  406. package/dist/src/subagents/handles/query.d.ts +0 -6
  407. package/dist/src/subagents/handles/query.js +1 -1
  408. package/dist/src/subagents/handles/state-key.d.ts +1 -1
  409. package/dist/src/subagents/handles/store.d.ts +1 -1
  410. package/dist/src/subagents/handles/store.js +1 -1
  411. package/dist/src/subagents/hitl-proxy.d.ts +1 -1
  412. package/dist/src/subagents/parent-notification.d.ts +2 -2
  413. package/dist/src/subagents/parent-result.d.ts +1 -1
  414. package/dist/src/subagents/remote-dispatch.d.ts +1 -1
  415. package/dist/src/subagents/remote-dispatch.js +1 -1
  416. package/dist/src/subagents/start-local.js +1 -1
  417. package/dist/src/subagents/tool.js +1 -1
  418. package/dist/src/svelte/index.js +1 -1
  419. package/dist/src/svelte/use-eve-agent.js +1 -1
  420. package/dist/src/tasks/session-index.js +1 -1
  421. package/dist/src/tasks/types.d.ts +1 -1
  422. package/dist/src/tracing/agent-otel-provider.js +2 -2
  423. package/dist/src/tracing/agent-otel-usage.js +1 -1
  424. package/dist/src/tracing/agent-span-contract.d.ts +1 -0
  425. package/dist/src/tracing/agent-span-contract.js +1 -1
  426. package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
  427. package/dist/src/vue/index.js +1 -1
  428. package/dist/src/vue/use-eve-agent.js +1 -1
  429. package/docs/agent-config.md +22 -22
  430. package/docs/channels/chat-sdk.mdx +4 -2
  431. package/docs/channels/custom.mdx +16 -10
  432. package/docs/channels/eve.mdx +3 -1
  433. package/docs/channels/linq.mdx +1 -1
  434. package/docs/channels/overview.mdx +4 -2
  435. package/docs/channels/photon.mdx +4 -1
  436. package/docs/channels/slack.mdx +3 -1
  437. package/docs/concepts/execution-model-and-durability.mdx +62 -13
  438. package/docs/concepts/sessions-runs-and-streaming.md +14 -5
  439. package/docs/getting-started.mdx +7 -3
  440. package/docs/guides/deployment/vercel.mdx +1 -1
  441. package/docs/guides/dev-tui.md +54 -27
  442. package/docs/guides/frontend/overview.mdx +3 -1
  443. package/docs/guides/instrumentation/meta.json +1 -0
  444. package/docs/memory/custom-provider.md +1 -1
  445. package/docs/protocols/acp.md +1 -1
  446. package/docs/reference/cli.md +2 -2
  447. package/docs/reference/telemetry.md +1 -1
  448. package/docs/reference/typescript-api.md +12 -5
  449. package/docs/sandbox.mdx +3 -3
  450. package/docs/subagents/index.mdx +2 -2
  451. package/docs/tools/workflows.mdx +1 -1
  452. package/docs/tutorial/how-it-runs.mdx +1 -1
  453. package/package.json +6 -1
  454. package/dist/src/cli/commands/init-repl.d.ts +0 -80
  455. package/dist/src/cli/commands/init-repl.js +0 -1
  456. package/dist/src/cli/commands/init-self-modification.d.ts +0 -7
  457. package/dist/src/cli/commands/init-self-modification.js +0 -1
  458. package/dist/src/cli/dev/tui/prompt-placeholder.d.ts +0 -12
  459. package/dist/src/cli/dev/tui/prompt-placeholder.js +0 -1
  460. package/dist/src/cli/dev/tui/remote-auth-command.d.ts +0 -11
  461. package/dist/src/cli/dev/tui/remote-auth-command.js +0 -3
  462. package/dist/src/compiled/_chunks/workflow/attribute-changes-BAcgmlXp.js +0 -20
  463. package/dist/src/compiled/_chunks/workflow/private-CFJkQA7R.js +0 -1
  464. package/dist/src/compiled/_chunks/workflow/resume-hook-BEHe0Uut.js +0 -1
  465. package/dist/src/compiled/_chunks/workflow/run-ChHLjaCt.js +0 -1
  466. package/dist/src/compiled/_chunks/workflow/sleep-BB2HuVie.js +0 -1
  467. package/dist/src/execution/accepted-delivery-deployment.d.ts +0 -7
  468. package/dist/src/execution/accepted-delivery-deployment.js +0 -1
  469. package/dist/src/execution/dispatch-turn-step.d.ts +0 -5
  470. package/dist/src/execution/dispatch-turn-step.js +0 -1
  471. package/dist/src/execution/durable-session-migrations/chain.d.ts +0 -38
  472. package/dist/src/execution/durable-session-migrations/chain.js +0 -1
  473. package/dist/src/execution/durable-session-migrations/snapshot.d.ts +0 -6
  474. package/dist/src/execution/durable-session-migrations/snapshot.js +0 -1
  475. package/dist/src/execution/durable-session-migrations/turn-workflow-v0-to-v1.d.ts +0 -12
  476. package/dist/src/execution/durable-session-migrations/turn-workflow-v0-to-v1.js +0 -1
  477. package/dist/src/execution/durable-session-migrations/turn-workflow-v1-to-v2.d.ts +0 -2
  478. package/dist/src/execution/durable-session-migrations/turn-workflow-v1-to-v2.js +0 -1
  479. package/dist/src/execution/durable-session-migrations/turn-workflow.d.ts +0 -88
  480. package/dist/src/execution/durable-session-migrations/turn-workflow.js +0 -1
  481. package/dist/src/execution/forward-turn-cancellation-step.d.ts +0 -6
  482. package/dist/src/execution/forward-turn-cancellation-step.js +0 -1
  483. package/dist/src/execution/forward-turn-delivery-step.d.ts +0 -6
  484. package/dist/src/execution/forward-turn-delivery-step.js +0 -1
  485. package/dist/src/execution/inline-turn.d.ts +0 -31
  486. package/dist/src/execution/inline-turn.js +0 -1
  487. package/dist/src/execution/next-driver-action.d.ts +0 -85
  488. package/dist/src/execution/parked-delivery-wait.d.ts +0 -54
  489. package/dist/src/execution/parked-delivery-wait.js +0 -1
  490. package/dist/src/execution/session-command-inbox.d.ts +0 -52
  491. package/dist/src/execution/session-command-inbox.js +0 -1
  492. package/dist/src/execution/session-command-token.d.ts +0 -6
  493. package/dist/src/execution/session-command-token.js +0 -1
  494. package/dist/src/execution/session-state-cursor.d.ts +0 -25
  495. package/dist/src/execution/session-state-cursor.js +0 -1
  496. package/dist/src/execution/session-timeout-control.js +0 -1
  497. package/dist/src/execution/session-timeout-steps.js +0 -1
  498. package/dist/src/execution/session-timeout-workflow.js +0 -1
  499. package/dist/src/execution/session-timeout.d.ts +0 -2
  500. package/dist/src/execution/session-timeout.js +0 -1
  501. package/dist/src/execution/turn-cancellation-control.d.ts +0 -30
  502. package/dist/src/execution/turn-cancellation-control.js +0 -1
  503. package/dist/src/execution/turn-cancellation-token.d.ts +0 -10
  504. package/dist/src/execution/turn-cancellation-token.js +0 -1
  505. package/dist/src/execution/turn-control-protocol.d.ts +0 -36
  506. package/dist/src/execution/turn-control-protocol.js +0 -1
  507. package/dist/src/execution/turn-control-receiver.d.ts +0 -54
  508. package/dist/src/execution/turn-control-receiver.js +0 -1
  509. package/dist/src/execution/turn-dispatch.d.ts +0 -39
  510. package/dist/src/execution/turn-dispatch.js +0 -1
  511. package/dist/src/execution/turn-execution-cursor.d.ts +0 -49
  512. package/dist/src/execution/turn-execution-cursor.js +0 -1
  513. package/dist/src/execution/turn-workflow-tool-run.js +0 -1
  514. package/dist/src/execution/turn-workflow.d.ts +0 -13
  515. package/dist/src/execution/turn-workflow.js +0 -1
  516. package/dist/src/execution/wire/session-inbox-contract.d.ts +0 -38
  517. package/dist/src/execution/wire/session-inbox-contract.js +0 -1
  518. package/dist/src/execution/wire/session-inbox-encoder.d.ts +0 -47
  519. package/dist/src/execution/wire/session-inbox-encoder.js +0 -1
  520. package/dist/src/execution/wire/session-inbox-resume.d.ts +0 -12
  521. package/dist/src/execution/wire/session-inbox-resume.js +0 -1
  522. package/dist/src/execution/wire/session-inbox-wire.d.ts +0 -29
  523. package/dist/src/execution/wire/session-inbox-wire.js +0 -1
  524. package/dist/src/execution/wire/session-inbox-wire.v0.d.ts +0 -5
  525. package/dist/src/execution/wire/session-inbox-wire.v0.js +0 -1
  526. package/dist/src/execution/wire/session-inbox-wire.v1.d.ts +0 -237
  527. package/dist/src/execution/wire/session-inbox-wire.v1.js +0 -1
  528. package/dist/src/execution/wire/session-inbox-wire.v2-migration.d.ts +0 -2
  529. package/dist/src/execution/wire/session-inbox-wire.v2-migration.js +0 -1
  530. package/dist/src/execution/wire/session-inbox-wire.v2.d.ts +0 -478
  531. package/dist/src/execution/wire/session-inbox-wire.v2.js +0 -1
  532. package/dist/src/execution/wire/session-inbox-wire.v2.migration.d.ts +0 -3
  533. package/dist/src/execution/wire/session-inbox-wire.v2.migration.js +0 -1
  534. package/dist/src/execution/wire/session-inbox-wire.v3.d.ts +0 -480
  535. package/dist/src/execution/wire/session-inbox-wire.v3.js +0 -1
  536. package/dist/src/execution/wire/session-inbox-wire.v3.migration.d.ts +0 -3
  537. package/dist/src/execution/wire/session-inbox-wire.v3.migration.js +0 -1
  538. package/dist/src/execution/wire/session-inbox-wire.v4.d.ts +0 -267
  539. package/dist/src/execution/wire/session-inbox-wire.v4.js +0 -1
  540. package/dist/src/execution/wire/session-inbox-wire.v4.migration.d.ts +0 -3
  541. package/dist/src/execution/wire/session-inbox-wire.v4.migration.js +0 -1
  542. package/dist/src/execution/wire/session-inbox-wire.v5.d.ts +0 -341
  543. package/dist/src/execution/wire/session-inbox-wire.v5.js +0 -1
  544. package/dist/src/execution/wire/session-inbox-wire.v5.migration.d.ts +0 -3
  545. package/dist/src/execution/wire/session-inbox-wire.v5.migration.js +0 -1
  546. package/dist/src/execution/wire/session-inbox-wire.v6.d.ts +0 -341
  547. package/dist/src/execution/wire/session-inbox-wire.v6.js +0 -1
  548. package/dist/src/execution/wire/session-inbox-wire.v7.d.ts +0 -342
  549. package/dist/src/execution/wire/session-inbox-wire.v7.js +0 -1
  550. package/dist/src/execution/workflow-entry-crash.d.ts +0 -39
  551. package/dist/src/execution/workflow-entry-crash.js +0 -1
  552. package/dist/src/execution/workflow-entry-finalization.d.ts +0 -28
  553. package/dist/src/execution/workflow-entry-finalization.js +0 -1
  554. package/dist/src/execution/workflow-entry.d.ts +0 -37
  555. package/dist/src/execution/workflow-entry.js +0 -1
  556. package/dist/src/execution/workflow-steps.js +0 -1
  557. package/dist/src/subagents/handles/rebase.d.ts +0 -4
  558. package/dist/src/subagents/handles/rebase.js +0 -1
  559. /package/dist/src/{execution/next-driver-action.js → client/eve-agent-store-state.js} +0 -0
@@ -1 +1 @@
1
- import{createEveCallbackRoutePath}from"#protocol/routes.js";import{createLogger,logError}from"#internal/logging.js";import{createWorkflowRuntime}from"#execution/workflow-runtime.js";import{continueRemoteAgentSession,isAmbiguousRemoteAgentContinueError,isRetryableRemoteAgentContinueError,resolveRemoteAgentForAction}from"#subagents/remote-dispatch.js";import{AGENT_UNREACHABLE}from"#subagents/agent-handle-errors.js";import{createWorkflowCallbackUrl}from"#execution/workflow-callback-url.js";import{readTaskIdFromInboxToken}from"#tasks/task-inbox-token.js";import{isRuntimeNoActiveSessionError}from"#execution/runtime-errors.js";import{normalizeRequestedOutputSchema}from"#subagents/invocation.js";import{err,ok}from"#shared/result.js";const log=createLogger(`execution.agent-handle-dispatch`);function isAgentHandleAction(e){return e.kind===`subagent-call`||e.kind===`remote-agent-call`}async function dispatchToClaimedAgentAddress(e){return await dispatchToAgentAddress(e)}async function dispatchToAgentAddress(e){let{action:t,handle:n}=e,r=n.identity.id,i=await deliverToAgentAddress({activityObserver:e.activityObserver,action:t,address:n.address,auth:e.auth,bundle:e.bundle,identity:n.identity,parentToken:e.parentToken,taskId:e.taskId});if(!i.ok){let{cause:a,permanent:o}=i.error;return logError(log,`task agent delivery failed`,a,{agentId:r,callId:t.callId,nodeId:n.identity.nodeId,permanent:o,subagentName:n.identity.name}),{deliveryAmbiguous:i.error.deliveryAmbiguous,deliveryPermanent:o,kind:`error`,result:createAgentErrorResult({action:t,code:AGENT_UNREACHABLE,message:o?`Agent "${n.identity.name}" with id "${r}" is no longer reachable.`:`Agent "${n.identity.name}" with id "${r}" is temporarily unreachable. Try again.`}),session:e.currentSession}}return{address:n.address,callId:t.callId,kind:`called`,name:t.name,session:e.currentSession,toolName:n.identity.name}}async function deliverToAgentAddress(e){let{action:t,address:n,bundle:r,identity:i}=e;if(n.kind===`agent/remote`){let a;try{a=resolveRemoteAgentForAction({nodeId:i.nodeId,remoteAgentName:i.name,registry:r.subagentRegistry.subagentsByNodeId})}catch(e){return err({cause:e,deliveryAmbiguous:!1,permanent:!0})}try{await continueRemoteAgentSession({activityObserver:e.activityObserver,auth:e.auth,callback:{callId:t.callId,subagentName:i.name,taskId:e.taskId??readTaskIdFromInboxToken(e.parentToken),token:e.parentToken,url:createWorkflowCallbackUrl(n.callbackBaseUrl,createEveCallbackRoutePath(e.parentToken))},message:readSubagentMessage(t),outputSchema:normalizeRequestedOutputSchema(t.input.outputSchema),remote:{...a,url:n.url},sessionId:n.sessionId})}catch(e){return err({cause:e,deliveryAmbiguous:isAmbiguousRemoteAgentContinueError(e),permanent:!isRetryableRemoteAgentContinueError(e)})}return ok(void 0)}let a=createWorkflowRuntime({compiledArtifactsSource:r.compiledArtifactsSource,nodeId:i.nodeId});try{if((await a.dispatchSession({command:{auth:e.auth,caller:{activityObserver:e.activityObserver,callId:t.callId,replyTo:{kind:`hook`,token:e.parentToken},subagentName:i.name,taskId:e.taskId??readTaskIdFromInboxToken(e.parentToken)},kind:`send`,payload:{message:readSubagentMessage(t),outputSchema:normalizeRequestedOutputSchema(t.input.outputSchema)}},sessionId:n.sessionId})).status===`session_not_active`)return err({cause:Error(`Agent session "${n.sessionId}" is no longer active.`),deliveryAmbiguous:!1,permanent:!0})}catch(e){let t=isRuntimeNoActiveSessionError(e);return err({cause:e,deliveryAmbiguous:!t,permanent:t})}return ok(void 0)}function createAgentErrorResult(e){return{callId:e.action.callId,isError:!0,kind:`subagent-result`,origin:`dispatch`,output:{code:e.code,message:e.message},subagentName:e.action.kind===`remote-agent-call`?e.action.remoteAgentName:e.action.subagentName}}function readSubagentMessage(e){return typeof e.input.message==`string`?e.input.message:``}export{createAgentErrorResult,dispatchToClaimedAgentAddress,isAgentHandleAction};
1
+ import{createEveCallbackRoutePath}from"#protocol/routes.js";import{createLogger,logError}from"#internal/logging.js";import{createWorkflowRuntime}from"#execution/workflow-runtime.js";import{continueRemoteAgentSession,isAmbiguousRemoteAgentContinueError,isRetryableRemoteAgentContinueError,resolveRemoteAgentForAction}from"#subagents/remote-dispatch.js";import{AGENT_UNREACHABLE}from"#subagents/agent-handle-errors.js";import{createWorkflowCallbackUrl}from"#execution/workflow-callback-url.js";import{normalizeRequestedOutputSchema}from"#subagents/invocation.js";import{readTaskIdFromInboxToken}from"#tasks/task-inbox-token.js";import{isRuntimeNoActiveSessionError}from"#execution/runtime-errors.js";import{err,ok}from"#shared/result.js";const log=createLogger(`execution.agent-handle-dispatch`);function isAgentHandleAction(e){return e.kind===`subagent-call`||e.kind===`remote-agent-call`}async function dispatchToClaimedAgentAddress(e){let{action:t,handle:n}=e,r=n.identity.id,i=await deliverToAgentAddress({activityObserver:e.activityObserver,action:t,address:n.address,auth:e.auth,bundle:e.bundle,identity:n.identity,reply:e.reply});if(!i.ok){let{cause:a,permanent:o}=i.error;return logError(log,`task agent delivery failed`,a,{agentId:r,callId:t.callId,nodeId:n.identity.nodeId,permanent:o,subagentName:n.identity.name}),{deliveryAmbiguous:i.error.deliveryAmbiguous,deliveryPermanent:o,kind:`error`,result:createAgentErrorResult({action:t,code:AGENT_UNREACHABLE,message:o?`Agent "${n.identity.name}" with id "${r}" is no longer reachable.`:`Agent "${n.identity.name}" with id "${r}" is temporarily unreachable. Try again.`}),session:e.currentSession}}return{address:n.address,callId:t.callId,kind:`called`,name:t.name,session:e.currentSession,toolName:n.identity.name}}async function deliverToAgentAddress(e){let{action:t,address:n,bundle:r,identity:i,reply:a}=e,o=a.kind===`reply`?a.taskId??readTaskIdFromInboxToken(a.parentToken):void 0;if(n.kind===`agent/remote`){let s;try{s=resolveRemoteAgentForAction({nodeId:i.nodeId,remoteAgentName:i.name,registry:r.subagentRegistry.subagentsByNodeId})}catch(e){return err({cause:e,deliveryAmbiguous:!1,permanent:!0})}try{await continueRemoteAgentSession({activityObserver:e.activityObserver,auth:e.auth,callback:a.kind===`steer`?void 0:{callId:t.callId,subagentName:i.name,taskId:o,token:a.parentToken,url:createWorkflowCallbackUrl(n.callbackBaseUrl,createEveCallbackRoutePath(a.parentToken))},message:readSubagentMessage(t),outputSchema:normalizeRequestedOutputSchema(t.input.outputSchema),remote:{...s,url:n.url},sessionId:n.sessionId})}catch(e){return err({cause:e,deliveryAmbiguous:isAmbiguousRemoteAgentContinueError(e),permanent:!isRetryableRemoteAgentContinueError(e)})}return ok(void 0)}let s=createWorkflowRuntime({compiledArtifactsSource:r.compiledArtifactsSource,nodeId:i.nodeId});try{if((await s.dispatchSession({command:{auth:e.auth,caller:a.kind===`steer`?void 0:{activityObserver:e.activityObserver,callId:t.callId,replyTo:{kind:`hook`,token:a.parentToken},subagentName:i.name,taskId:o},kind:`send`,payload:{message:readSubagentMessage(t),outputSchema:normalizeRequestedOutputSchema(t.input.outputSchema)}},sessionId:n.sessionId})).status===`session_not_active`)return err({cause:Error(`Agent session "${n.sessionId}" is no longer active.`),deliveryAmbiguous:!1,permanent:!0})}catch(e){let t=isRuntimeNoActiveSessionError(e);return err({cause:e,deliveryAmbiguous:!t,permanent:t})}return ok(void 0)}function createAgentErrorResult(e){return{callId:e.action.callId,isError:!0,kind:`subagent-result`,origin:`dispatch`,output:{code:e.code,message:e.message},subagentName:e.action.kind===`remote-agent-call`?e.action.remoteAgentName:e.action.subagentName}}function readSubagentMessage(e){return typeof e.input.message==`string`?e.input.message:``}export{createAgentErrorResult,dispatchToClaimedAgentAddress,isAgentHandleAction};
@@ -4,7 +4,7 @@
4
4
  * the same call produces the same operation.
5
5
  *
6
6
  * Lives apart from the handle store because it needs `node:crypto`: the
7
- * store module is bundled into the workflow driver body (which rejects
7
+ * store module is bundled into the session owner body (which rejects
8
8
  * Node.js builtins), while operation ids are only ever minted inside
9
9
  * dispatch steps.
10
10
  */
@@ -5,12 +5,6 @@ import type { SessionStateMap } from "#harness/types.js";
5
5
  export type RunningAgentHandle = Extract<TurnOwnedAgentHandle, {
6
6
  phase: "running";
7
7
  }>;
8
- /** Preserves driver-owned task leases when a concurrent turn returns an older snapshot. */
9
- export declare function mergeTaskOwnedAgentHandlesIntoTurnState(input: {
10
- readonly baseState: SessionStateMap | undefined;
11
- readonly driverState: SessionStateMap | undefined;
12
- readonly turnState: SessionStateMap | undefined;
13
- }): SessionStateMap | undefined;
14
8
  /**
15
9
  * Finds the running agent handle a child-produced result must settle: the
16
10
  * handle whose recorded operation carries the result's callId.
@@ -1 +1 @@
1
- import{AGENT_HANDLES_STATE_KEY}from"#subagents/handles/state-key.js";function readAgentHandles(e){let t=e?.[AGENT_HANDLES_STATE_KEY];if(t===void 0)return[];let n=t.handles;return Array.isArray(n)?n:[]}function mergeTaskOwnedAgentHandlesIntoTurnState(e){let t=new Map(readAgentHandles(e.baseState).map(e=>[e.identity.id,e])),n=new Map(readAgentHandles(e.driverState).map(e=>[e.identity.id,e])),r=new Set([...t.keys(),...n.keys()]);for(let e of r)handlesEqual(t.get(e),n.get(e))&&r.delete(e);if(r.size===0)return e.turnState;let i=[];for(let a of readAgentHandles(e.turnState)){if(!r.has(a.identity.id)){i.push(a);continue}let e=n.get(a.identity.id);if(!handlesEqual(a,t.get(a.identity.id))&&!handlesEqual(a,e))throw Error(`Agent handle "${a.identity.id}" changed ownership while its turn was running.`);e!==void 0&&i.push(e),r.delete(a.identity.id)}for(let e of r){let t=n.get(e);t!==void 0&&i.push(t)}return{...e.turnState,[AGENT_HANDLES_STATE_KEY]:{handles:i}}}function handlesEqual(e,t){if(e===t)return!0;if(e===void 0||t===void 0)return!1;let n=Object.keys(e),r=Object.keys(t);return n.length===r.length&&n.every(n=>valuesEqual(Reflect.get(e,n),Reflect.get(t,n)))}function valuesEqual(e,t){if(e===t)return!0;if(typeof e!=`object`||!e||typeof t!=`object`||!t)return!1;let n=Object.keys(e),r=Object.keys(t);return n.length===r.length&&n.every(n=>valuesEqual(Reflect.get(e,n),Reflect.get(t,n)))}function findRunningAgentHandle(e,t){return readAgentHandles(e).find(e=>e.phase===`running`&&e.operation.callId===t.callId)}function isResultBoundToRunningHandle(e,t){return t.kind!==`subagent-result`||t.origin===`dispatch`||t.backgroundTask!==void 0||findRunningAgentHandle(e,{callId:t.callId})!==void 0}function isInboxSubagentResultFromRunningHandle(e,t){return findRunningAgentHandle(e,{callId:t.callId})!==void 0}export{findRunningAgentHandle,isInboxSubagentResultFromRunningHandle,isResultBoundToRunningHandle,mergeTaskOwnedAgentHandlesIntoTurnState};
1
+ import{AGENT_HANDLES_STATE_KEY}from"#subagents/handles/state-key.js";function readAgentHandles(e){let t=e?.[AGENT_HANDLES_STATE_KEY];if(t===void 0)return[];let n=t.handles;return Array.isArray(n)?n:[]}function findRunningAgentHandle(e,t){return readAgentHandles(e).find(e=>e.phase===`running`&&e.operation.callId===t.callId)}function isResultBoundToRunningHandle(e,t){return t.kind!==`subagent-result`||t.origin===`dispatch`||t.backgroundTask!==void 0||findRunningAgentHandle(e,{callId:t.callId})!==void 0}function isInboxSubagentResultFromRunningHandle(e,t){return findRunningAgentHandle(e,{callId:t.callId})!==void 0}export{findRunningAgentHandle,isInboxSubagentResultFromRunningHandle,isResultBoundToRunningHandle};
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Session-state key for delegated agent handles.
3
3
  *
4
- * Lives apart from the store so schema-free readers (the workflow driver's
4
+ * Lives apart from the store so schema-free readers (the session owner's
5
5
  * handle query) can import the key without pulling the zod-backed store
6
6
  * module into their bundle.
7
7
  */
@@ -196,7 +196,7 @@ export declare function formatAgentStatus(output: unknown): string;
196
196
  * Validates one agent handle store about to be persisted, returning the
197
197
  * parsed value. Throws instead of writing an invalid store: transitions run
198
198
  * this on every write, which is the invariant that lets the schema-free
199
- * driver-side reader (`query.ts`) trust stored values without revalidating.
199
+ * owner-side reader (`query.ts`) trust stored values without revalidating.
200
200
  */
201
201
  export declare function assertPersistableAgentHandleStore(store: AgentHandleStore): AgentHandleStore;
202
202
  /** Parses one complete command before the session inbox routes it to the handle store. */
@@ -1 +1 @@
1
- import{AGENT_HANDLES_STATE_KEY}from"./state-key.js";import{z}from"#compiled/zod/index.js";const EMPTY_AGENT_HANDLE_STORE={handles:[]},nonEmptyString=z.string().min(1),identitySchema=z.strictObject({id:nonEmptyString,name:nonEmptyString,nodeId:nonEmptyString}),startOperationSchema=z.strictObject({callId:nonEmptyString,id:nonEmptyString,kind:z.literal(`start`),parentTurnId:nonEmptyString}),continueOperationSchema=z.strictObject({callId:nonEmptyString,id:nonEmptyString,kind:z.literal(`continue`),parentTurnId:nonEmptyString,previousStatus:z.string().max(120)}),startTargetSchema=z.discriminatedUnion(`kind`,[z.strictObject({continuationToken:nonEmptyString,kind:z.literal(`agent/local`)}),z.strictObject({continuationToken:nonEmptyString,kind:z.literal(`agent/self`)}),z.strictObject({callbackBaseUrl:z.url(),credentialResolver:z.strictObject({resolverId:nonEmptyString.optional()}).optional(),kind:z.literal(`agent/remote`),url:z.url()})]),addressSchema=z.discriminatedUnion(`kind`,[z.strictObject({continuationToken:nonEmptyString,kind:z.literal(`agent/local`),sessionId:nonEmptyString}),z.strictObject({continuationToken:nonEmptyString,kind:z.literal(`agent/self`),sessionId:nonEmptyString}),z.strictObject({callbackBaseUrl:z.url(),credentialResolver:z.strictObject({resolverId:nonEmptyString.optional()}).optional(),kind:z.literal(`agent/remote`),sessionId:nonEmptyString,url:z.url()})]),agentHandleStoreCommandSchema=z.discriminatedUnion(`kind`,[z.strictObject({kind:z.literal(`read`)}),z.strictObject({identity:identitySchema,callId:nonEmptyString.optional(),kind:z.literal(`reserve`),operationId:nonEmptyString,ownerId:nonEmptyString}),z.strictObject({address:addressSchema,kind:z.literal(`confirm`),operationId:nonEmptyString,ownerId:nonEmptyString}),z.strictObject({agentId:nonEmptyString,callId:nonEmptyString.optional(),expectedTarget:z.enum([`local`,`remote`]),invokedName:nonEmptyString,kind:z.literal(`claim`),operationId:nonEmptyString,ownerId:nonEmptyString}),z.strictObject({agentId:nonEmptyString,kind:z.literal(`remove`),ownerId:nonEmptyString}),z.strictObject({kind:z.literal(`release-owner`),ownerId:nonEmptyString})]),turnOwnedAgentHandleSchema=z.discriminatedUnion(`phase`,[z.strictObject({identity:identitySchema,operation:startOperationSchema,phase:z.literal(`starting`),target:startTargetSchema}),z.strictObject({address:addressSchema,identity:identitySchema,operation:z.discriminatedUnion(`kind`,[startOperationSchema,continueOperationSchema]),phase:z.literal(`running`)}),z.strictObject({address:addressSchema,identity:identitySchema,lastStatus:z.string().max(120),phase:z.literal(`parked`)})]),taskOwnedAgentHandleSchema=z.discriminatedUnion(`phase`,[z.strictObject({callId:nonEmptyString.optional(),identity:identitySchema,operationId:nonEmptyString,phase:z.literal(`reserved`),ownerId:nonEmptyString}),z.strictObject({address:addressSchema,callId:nonEmptyString.optional(),identity:identitySchema,operationId:nonEmptyString,phase:z.literal(`claimed`),ownerId:nonEmptyString}),z.strictObject({address:addressSchema,identity:identitySchema,phase:z.literal(`available`)})]),agentHandleSchema=z.union([turnOwnedAgentHandleSchema,taskOwnedAgentHandleSchema]),agentHandleStoreSchema=z.strictObject({handles:z.array(agentHandleSchema)}).refine(e=>new Set(e.handles.map(e=>e.identity.id)).size===e.handles.length,{message:`Agent handle ids must be unique.`});function deriveAgentId(e,t){return`ag_${e}:${t.slice(0,12)}`}function formatAgentStatus(e){return(typeof e==`string`?e:JSON.stringify(e)??``).replaceAll(/\s+/g,` `).trim().slice(0,120)}function assertPersistableAgentHandleStore(e){let t=agentHandleStoreSchema.safeParse(e);if(!t.success)throw Error(`Refusing to persist a corrupt agent handle store: ${t.error.message}`);return t.data}function parseAgentHandleStoreCommand(e){let t=agentHandleStoreCommandSchema.safeParse(e);return t.success?t.data:void 0}function getAgentHandleStore(e){let t=e?.[AGENT_HANDLES_STATE_KEY];if(t===void 0)return;let n=agentHandleStoreSchema.safeParse(t);if(!n.success)throw Error(`Corrupt agent handle store under session state key "${AGENT_HANDLES_STATE_KEY}": ${n.error.message}`);return n.data}function setAgentHandleStore(e,t){return{...e,[AGENT_HANDLES_STATE_KEY]:assertPersistableAgentHandleStore(t)}}function writeHandles(e,t){return{...e,state:setAgentHandleStore(e.state,{handles:t})}}export{AGENT_HANDLES_STATE_KEY,EMPTY_AGENT_HANDLE_STORE,assertPersistableAgentHandleStore,deriveAgentId,formatAgentStatus,getAgentHandleStore,parseAgentHandleStoreCommand,setAgentHandleStore,writeHandles};
1
+ import{AGENT_HANDLES_STATE_KEY}from"./state-key.js";import{z}from"#compiled/zod/index.js";const EMPTY_AGENT_HANDLE_STORE={handles:[]},nonEmptyString=z.string().min(1),identitySchema=z.looseObject({id:nonEmptyString,name:nonEmptyString,nodeId:nonEmptyString}),startOperationSchema=z.looseObject({callId:nonEmptyString,id:nonEmptyString,kind:z.literal(`start`),parentTurnId:nonEmptyString}),continueOperationSchema=z.looseObject({callId:nonEmptyString,id:nonEmptyString,kind:z.literal(`continue`),parentTurnId:nonEmptyString,previousStatus:z.string().max(120)}),startTargetSchema=z.discriminatedUnion(`kind`,[z.looseObject({continuationToken:nonEmptyString,kind:z.literal(`agent/local`)}),z.looseObject({continuationToken:nonEmptyString,kind:z.literal(`agent/self`)}),z.looseObject({callbackBaseUrl:z.url(),credentialResolver:z.looseObject({resolverId:nonEmptyString.optional()}).optional(),kind:z.literal(`agent/remote`),url:z.url()})]),addressSchema=z.discriminatedUnion(`kind`,[z.looseObject({continuationToken:nonEmptyString,kind:z.literal(`agent/local`),sessionId:nonEmptyString}),z.looseObject({continuationToken:nonEmptyString,kind:z.literal(`agent/self`),sessionId:nonEmptyString}),z.looseObject({callbackBaseUrl:z.url(),credentialResolver:z.looseObject({resolverId:nonEmptyString.optional()}).optional(),kind:z.literal(`agent/remote`),sessionId:nonEmptyString,url:z.url()})]),agentHandleStoreCommandSchema=z.discriminatedUnion(`kind`,[z.strictObject({kind:z.literal(`read`)}),z.strictObject({identity:identitySchema,callId:nonEmptyString.optional(),kind:z.literal(`reserve`),operationId:nonEmptyString,ownerId:nonEmptyString}),z.strictObject({address:addressSchema,kind:z.literal(`confirm`),operationId:nonEmptyString,ownerId:nonEmptyString}),z.strictObject({agentId:nonEmptyString,callId:nonEmptyString.optional(),expectedTarget:z.enum([`local`,`remote`]),invokedName:nonEmptyString,kind:z.literal(`claim`),operationId:nonEmptyString,ownerId:nonEmptyString}),z.strictObject({agentId:nonEmptyString,kind:z.literal(`remove`),ownerId:nonEmptyString}),z.strictObject({kind:z.literal(`release-owner`),ownerId:nonEmptyString})]),turnOwnedAgentHandleSchema=z.discriminatedUnion(`phase`,[z.looseObject({identity:identitySchema,operation:startOperationSchema,phase:z.literal(`starting`),target:startTargetSchema}),z.looseObject({address:addressSchema,identity:identitySchema,operation:z.discriminatedUnion(`kind`,[startOperationSchema,continueOperationSchema]),phase:z.literal(`running`)}),z.looseObject({address:addressSchema,identity:identitySchema,lastStatus:z.string().max(120),phase:z.literal(`parked`)})]),taskOwnedAgentHandleSchema=z.discriminatedUnion(`phase`,[z.looseObject({callId:nonEmptyString.optional(),identity:identitySchema,operationId:nonEmptyString,phase:z.literal(`reserved`),ownerId:nonEmptyString}),z.looseObject({address:addressSchema,callId:nonEmptyString.optional(),identity:identitySchema,operationId:nonEmptyString,phase:z.literal(`claimed`),ownerId:nonEmptyString}),z.looseObject({address:addressSchema,identity:identitySchema,phase:z.literal(`available`)})]),agentHandleSchema=z.union([turnOwnedAgentHandleSchema,taskOwnedAgentHandleSchema]),agentHandleStoreSchema=z.looseObject({handles:z.array(agentHandleSchema)}).refine(e=>new Set(e.handles.map(e=>e.identity.id)).size===e.handles.length,{message:`Agent handle ids must be unique.`});function deriveAgentId(e,t){return`ag_${e}:${t.slice(0,12)}`}function formatAgentStatus(e){return(typeof e==`string`?e:JSON.stringify(e)??``).replaceAll(/\s+/g,` `).trim().slice(0,120)}function assertPersistableAgentHandleStore(e){let t=agentHandleStoreSchema.safeParse(e);if(!t.success)throw Error(`Refusing to persist a corrupt agent handle store: ${t.error.message}`);return t.data}function parseAgentHandleStoreCommand(e){let t=agentHandleStoreCommandSchema.safeParse(e);return t.success?t.data:void 0}function getAgentHandleStore(e){let t=e?.[AGENT_HANDLES_STATE_KEY];if(t===void 0)return;let n=agentHandleStoreSchema.safeParse(t);if(!n.success)throw Error(`Corrupt agent handle store under session state key "${AGENT_HANDLES_STATE_KEY}": ${n.error.message}`);return n.data}function setAgentHandleStore(e,t){return{...e,[AGENT_HANDLES_STATE_KEY]:assertPersistableAgentHandleStore(t)}}function writeHandles(e,t){return{...e,state:setAgentHandleStore(e.state,{handles:t})}}export{AGENT_HANDLES_STATE_KEY,EMPTY_AGENT_HANDLE_STORE,assertPersistableAgentHandleStore,deriveAgentId,formatAgentStatus,getAgentHandleStore,parseAgentHandleStoreCommand,setAgentHandleStore,writeHandles};
@@ -1,4 +1,4 @@
1
- import type { SessionInboxAddress } from "#execution/wire/session-inbox-contract.js";
1
+ import type { SessionInboxAddress } from "#execution/session-inbox/address.js";
2
2
  import type { DeliverPayload, SubagentInputRequestHookPayload } from "#channel/types.js";
3
3
  import type { AnswerHookRoute, ProxyInputRequest } from "#harness/proxy-input-requests.js";
4
4
  import type { HarnessEmitFn, HarnessSession, SessionStateMap } from "#harness/types.js";
@@ -7,7 +7,7 @@ import type { RuntimeSubagentChildResult } from "#shared/action-types.js";
7
7
  import type { AgentTurnOutcome } from "#shared/agent-turn-outcome.js";
8
8
  import type { TokenUsage } from "#shared/token-usage.js";
9
9
  /**
10
- * Resumes the parent driver's hook with a delegated subagent result.
10
+ * Resumes the parent owner's hook with a delegated subagent result.
11
11
  * No-op for root sessions.
12
12
  *
13
13
  * `usage` — the completed child's session-total token spend — is
@@ -19,7 +19,7 @@ export declare function notifyDelegatedParentStep(input: {
19
19
  readonly serializedContext: Record<string, unknown>;
20
20
  readonly usage?: TokenUsage;
21
21
  }): Promise<void>;
22
- /** Settled turn payload forwarded from the driver to the caller. */
22
+ /** Settled turn payload forwarded from the owner to the caller. */
23
23
  export interface SettledTurnNotification {
24
24
  readonly output: unknown;
25
25
  readonly isError?: boolean;
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Pure helpers that project a delegated subagent's terminal output
3
- * into the runtime-action result shape its parent driver expects.
3
+ * into the runtime-action result shape its parent owner expects.
4
4
  * Lives in its own (non-directive) file to escape the workflow
5
5
  * step-proxy transform.
6
6
  */
@@ -39,7 +39,7 @@ export declare function continueRemoteAgentSession(input: {
39
39
  readonly activityObserver?: ActivityObserverConfig;
40
40
  /** The dispatching turn's session principal, forwarded when `remote.forwardPrincipal` is set. */
41
41
  readonly auth: SessionAuthContext | null;
42
- readonly callback: {
42
+ readonly callback?: {
43
43
  readonly callId: string;
44
44
  readonly subagentName: string;
45
45
  readonly taskId?: string;
@@ -1 +1 @@
1
- import{z}from"#compiled/zod/index.js";import{createEveCallbackRoutePath,createEveSessionCancelRoutePath,createEveSessionResetRoutePath,createEveSessionRoutePath}from"#protocol/routes.js";import{decisionToTraceContentCeiling}from"#shared/forwarded-trace-policy.js";import{expectFunction,expectObjectRecord}from"#internal/authored-module.js";import{CancelTurnResponseSchema}from"#protocol/cancel-turn.js";import{ResetResponseSchema}from"#protocol/reset-session.js";import{formatTraceparent,writeAgentDispatchTracestate}from"#protocol/traceparent.js";import{writeForwardedAudienceBaggage,writeForwardedParentSessionBaggage}from"#protocol/baggage.js";import{writeConversationBaggage}from"#tracing/conversation-context.js";import{createWorkflowCallbackUrl}from"#execution/workflow-callback-url.js";import{readTaskIdFromInboxToken}from"#tasks/task-inbox-token.js";import{formatSubagentInput,normalizeRequestedOutputSchema}from"#subagents/invocation.js";import{AgentHandleError}from"#protocol/agent-handle-error.js";import{createRemoteAgentRouteUrl}from"#subagents/remote-route-url.js";const CreateSessionResponseSchema=z.object({ok:z.literal(!0),sessionId:z.string().min(1),status:z.literal(`accepted`)});var RemoteAgentCancelRequestError=class extends Error{retryable;constructor(e,t){super(e),this.name=`RemoteAgentCancelRequestError`,this.retryable=t.retryable}};async function startRemoteAgentSession(e){let t=e.parent?.continuationToken??e.session.continuationToken;if(!t)throw Error(`Cannot dispatch remote agent without a parent continuation token.`);if(!e.callbackBaseUrl)throw Error(`Cannot dispatch remote agent without a callback base URL.`);let n=buildForwardedPrincipalField(e),r={capabilities:{},callback:{callId:e.action.callId,subagentName:e.action.remoteAgentName,taskId:e.taskId??readTaskIdFromInboxToken(t),token:t,url:createWorkflowCallbackUrl(e.callbackBaseUrl,createEveCallbackRoutePath(t))},message:formatRemoteAgentCallInputMessage({action:e.action,remote:e.remote}),mode:`conversation`,outputSchema:normalizeRequestedOutputSchema(e.action.input.outputSchema)??e.remote.outputSchema};e.activityObserver!==void 0&&(r.activityObserver=e.activityObserver),n!==void 0&&(r.forwardedPrincipal=n),e.operationId!==void 0&&(r.operationId=e.operationId);let i=await resolveRemoteAgentRequestHeaders(e.remote),a=formatTraceparent(e.parent?.traceContext);a!==void 0&&setHeader(i,`traceparent`,a),setHeader(i,`tracestate`,writeAgentDispatchTracestate(readHeader(i,`tracestate`),e.parent?.traceContext));let o=writeForwardedAudienceBaggage(readHeader(i,`baggage`),buildForwardedTraceAssertion({forwardedPrincipal:n,originAudience:e.originAudience,parentTraceContext:e.parent?.traceContext,traceparent:a})),s=writeConversationBaggage(o,e.parent?.conversationId);setHeader(i,`baggage`,writeForwardedParentSessionBaggage(s,e.parent?.lineage));let c=await fetch(createRemoteAgentSessionUrl(e.remote),{body:JSON.stringify(r),headers:{"content-type":`application/json`,...i},method:`POST`});if(!c.ok)throw Error(`Remote agent "${e.action.remoteAgentName}" create-session request failed with HTTP ${c.status}.`);let l;try{l=await c.json()}catch{throw Error(`Remote agent "${e.action.remoteAgentName}" create-session response was not valid JSON.`)}let u=CreateSessionResponseSchema.safeParse(l);if(!u.success)throw Error(`Remote agent "${e.action.remoteAgentName}" create-session response was invalid.`);return{sessionId:u.data.sessionId}}function buildForwardedTraceAssertion(e){let t=decisionToTraceContentCeiling(e.parentTraceContext?.decision);if(e.forwardedPrincipal!==void 0&&e.parentTraceContext!==void 0&&(e.parentTraceContext.traceFlags&1)==1&&e.traceparent!==void 0&&t!==void 0)return{ceiling:t,originAudience:e.originAudience??`unknown`}}async function continueRemoteAgentSession(e){let t=buildForwardedPrincipalField(e),n={activityObserver:e.activityObserver,callback:e.callback,message:e.message,outputSchema:e.outputSchema};t!==void 0&&(n.forwardedPrincipal=t);let r=await fetch(createRemoteAgentContinueUrl(e.remote,e.sessionId),{body:JSON.stringify(n),headers:{"content-type":`application/json`,...await resolveRemoteAgentRequestHeaders(e.remote)},method:`POST`});if(!r.ok){let n=await readRemoteAgentErrorCode(r),i=r.status===404||n===AgentHandleError.SessionNotResumable.code,a=r.status===400&&t!==void 0?` The receiver may support forwarded principals only on session creation; upgrade it before retrying.`:``;throw new RemoteAgentContinueRequestError(`Remote agent "${e.remote.name}" continue-session request failed${i?` permanently`:``} with HTTP ${r.status}.${a}`,{deliveryAmbiguous:isAmbiguousRemoteContinueStatus(r.status),retryable:!i})}}var RemoteAgentContinueRequestError=class extends Error{deliveryAmbiguous;retryable;constructor(e,t){super(e),this.name=`RemoteAgentContinueRequestError`,this.deliveryAmbiguous=t.deliveryAmbiguous,this.retryable=t.retryable}};function isRetryableRemoteAgentContinueError(e){return!(e instanceof RemoteAgentContinueRequestError)||e.retryable}function isAmbiguousRemoteAgentContinueError(e){return!(e instanceof RemoteAgentContinueRequestError)||e.deliveryAmbiguous}function isAmbiguousRemoteContinueStatus(e){return e===408||e===425||e>=500}async function readRemoteAgentErrorCode(e){let t;try{t=await e.json()}catch{return}if(typeof t!=`object`||!t)return;let n=Reflect.get(t,`code`);return typeof n==`string`?n:void 0}function buildForwardedPrincipalField(e){if(e.remote.forwardPrincipal!==!0||e.auth===null||e.auth===void 0)return;let t={current:e.auth};return e.initiatorAuth!==null&&e.initiatorAuth!==void 0&&(t.initiator=e.initiatorAuth),t}async function cancelRemoteAgentTurn(e){let t=e.headers??await resolveRemoteAgentRequestHeaders(e.remote),n=await fetch(createRemoteAgentCancelTurnUrl(e.remote,e.sessionId),{body:e.turnId===void 0&&e.taskId===void 0?void 0:JSON.stringify({taskId:e.taskId,turnId:e.turnId}),headers:t,method:`POST`});if(!n.ok)throw new RemoteAgentCancelRequestError(`Remote agent "${e.remote.name}" cancel-turn request failed with HTTP ${n.status}.`,{retryable:isRetryableRemoteCancelStatus(n.status)});let r;try{r=await n.json()}catch{throw new RemoteAgentCancelRequestError(`Remote agent "${e.remote.name}" cancel-turn response was not valid JSON.`,{retryable:!1})}let i=CancelTurnResponseSchema.safeParse(r);if(!i.success||i.data.status===`accepted`&&i.data.sessionId!==e.sessionId)throw new RemoteAgentCancelRequestError(`Remote agent "${e.remote.name}" cancel-turn response was invalid.`,{retryable:!1});return i.data.status===`accepted`?{sessionId:i.data.sessionId,status:`accepted`}:{status:`no_active_turn`}}function readHeader(e,t){let n=Object.keys(e).find(e=>e.toLowerCase()===t);return n===void 0?void 0:e[n]}function setHeader(e,t,n){for(let n of Object.keys(e))n.toLowerCase()===t&&delete e[n];n!==void 0&&(e[t]=n)}async function resetRemoteAgentSession(e){let t=e.headers??await resolveRemoteAgentRequestHeaders(e.remote),n=await fetch(createRemoteAgentRouteUrl(e.remote.url,createEveSessionResetRoutePath(e.sessionId)),{body:JSON.stringify({reason:`Parent session ended`}),headers:{"content-type":`application/json`,...t},method:`POST`});if(!n.ok)throw Error(`Remote agent "${e.remote.name}" reset-session request failed with HTTP ${n.status}.`);let r=ResetResponseSchema.safeParse(await n.json());if(!r.success||r.data.status===`reset`&&r.data.previousSessionId!==e.sessionId)throw Error(`Remote agent "${e.remote.name}" reset-session response was invalid.`);return r.data}function isRetryableRemoteAgentCancelError(e){return!(e instanceof RemoteAgentCancelRequestError)||e.retryable}function resolveRemoteAgentForAction(e){let t=e.registry.get(e.nodeId)?.definition;if(e.dynamicRemoteAgent!==void 0){if(t===void 0)throw Error(`Missing remote agent "${e.remoteAgentName}" in runtime registry.`);let n=resolveDynamicRemoteAgentCredentials(e.dynamicRemoteAgent),r=e.dynamicRemoteAgent,i={description:r.description,kind:`remote`,logicalPath:t.logicalPath,name:e.remoteAgentName,nodeId:e.nodeId,outputSchema:r.outputSchema,path:r.path,sourceId:t.sourceId,sourceKind:`module`,url:r.url};return r.forwardPrincipal!==void 0&&(i.forwardPrincipal=r.forwardPrincipal),n.auth!==void 0&&(i.auth=n.auth),n.headers!==void 0&&(i.headers=n.headers),i}if(t?.kind!==`remote`)throw Error(`Missing remote agent "${e.remoteAgentName}" in runtime registry.`);return t}async function resolveRemoteAgentStreamHeaders(e){if(e.resolverId===void 0)return{};let t=new Set([e.bundle.graph.root,...e.bundle.graph.nodesByNodeId.values()]);for(let n of t){let t=n.subagentRegistry.subagentsByNodeId.get(e.resolverId)?.definition;if(t!==void 0){if(t.kind!==`remote`||t.name!==e.name||t.url!==e.url)throw Error(`Remote child stream resolver does not match the authored remote agent.`);return await resolveRemoteAgentRequestHeaders(t)}}return await resolveRemoteAgentRequestHeaders(resolveDynamicRemoteAgentCredentials({credentialsStepId:e.resolverId,description:``,path:``,url:e.url}))}function resolveDynamicRemoteAgentCredentials(e){if(e.credentialsStepId===void 0)return{};let t=getStepRegistry().get(e.credentialsStepId);if(t===void 0)throw Error(`Dynamic remote subagent credentials function "${e.credentialsStepId}" is not registered.`);let n=expectObjectRecord(t(),`Dynamic remote subagent credentials are invalid.`),r={};return n.auth!==void 0&&(r.auth=expectFunction(n.auth,`Dynamic remote subagent auth is invalid.`)),n.headers!==void 0&&(r.headers=resolveDynamicRemoteAgentHeaders(n.headers)),r}function resolveDynamicRemoteAgentHeaders(e){if(typeof e==`function`)return e;let t=expectObjectRecord(e,`Dynamic remote subagent headers are invalid.`);for(let e of Object.values(t))if(typeof e!=`string`)throw Error(`Dynamic remote subagent headers are invalid.`);return t}function getStepRegistry(){let e=Symbol.for(`@workflow/core//registeredSteps`),t=globalThis,n=t[e];return n===void 0&&(n=new Map,t[e]=n),n}function createRemoteAgentSessionUrl(e){return createRemoteAgentRouteUrl(e.url,e.path)}function createRemoteAgentCancelTurnUrl(e,t){return createRemoteAgentRouteUrl(e.url,createEveSessionCancelRoutePath(t))}function createRemoteAgentContinueUrl(e,t){return createRemoteAgentRouteUrl(e.url,createEveSessionRoutePath(t))}function isRetryableRemoteCancelStatus(e){return e===408||e===425||e===429||e>=500}async function resolveRemoteAgentRequestHeaders(e){let t={};return e.headers!==void 0&&Object.assign(t,typeof e.headers==`function`?await e.headers():e.headers),e.auth!==void 0&&Object.assign(t,(await e.auth()).headers),t}function formatRemoteAgentCallInputMessage(e){let t=typeof e.action.input.message==`string`?e.action.input.message:``;return formatSubagentInput({description:e.remote.description,message:t,name:e.action.remoteAgentName,type:`remote`}).message}export{RemoteAgentContinueRequestError,cancelRemoteAgentTurn,continueRemoteAgentSession,isAmbiguousRemoteAgentContinueError,isRetryableRemoteAgentCancelError,isRetryableRemoteAgentContinueError,resetRemoteAgentSession,resolveRemoteAgentForAction,resolveRemoteAgentStreamHeaders,startRemoteAgentSession};
1
+ import{z}from"#compiled/zod/index.js";import{createEveCallbackRoutePath,createEveSessionCancelRoutePath,createEveSessionResetRoutePath,createEveSessionRoutePath}from"#protocol/routes.js";import{decisionToTraceContentCeiling}from"#shared/forwarded-trace-policy.js";import{expectFunction,expectObjectRecord}from"#internal/authored-module.js";import{CancelTurnResponseSchema}from"#protocol/cancel-turn.js";import{ResetResponseSchema}from"#protocol/reset-session.js";import{formatTraceparent,writeAgentDispatchTracestate}from"#protocol/traceparent.js";import{writeForwardedAudienceBaggage,writeForwardedParentSessionBaggage}from"#protocol/baggage.js";import{writeConversationBaggage}from"#tracing/conversation-context.js";import{createWorkflowCallbackUrl}from"#execution/workflow-callback-url.js";import{formatSubagentInput,normalizeRequestedOutputSchema}from"#subagents/invocation.js";import{readTaskIdFromInboxToken}from"#tasks/task-inbox-token.js";import{AgentHandleError}from"#protocol/agent-handle-error.js";import{createRemoteAgentRouteUrl}from"#subagents/remote-route-url.js";const CreateSessionResponseSchema=z.object({ok:z.literal(!0),sessionId:z.string().min(1),status:z.literal(`accepted`)});var RemoteAgentCancelRequestError=class extends Error{retryable;constructor(e,t){super(e),this.name=`RemoteAgentCancelRequestError`,this.retryable=t.retryable}};async function startRemoteAgentSession(e){let t=e.parent?.continuationToken??e.session.continuationToken;if(!t)throw Error(`Cannot dispatch remote agent without a parent continuation token.`);if(!e.callbackBaseUrl)throw Error(`Cannot dispatch remote agent without a callback base URL.`);let n=buildForwardedPrincipalField(e),r={capabilities:{},callback:{callId:e.action.callId,subagentName:e.action.remoteAgentName,taskId:e.taskId??readTaskIdFromInboxToken(t),token:t,url:createWorkflowCallbackUrl(e.callbackBaseUrl,createEveCallbackRoutePath(t))},message:formatRemoteAgentCallInputMessage({action:e.action,remote:e.remote}),mode:`conversation`,outputSchema:normalizeRequestedOutputSchema(e.action.input.outputSchema)??e.remote.outputSchema};e.activityObserver!==void 0&&(r.activityObserver=e.activityObserver),n!==void 0&&(r.forwardedPrincipal=n),e.operationId!==void 0&&(r.operationId=e.operationId);let i=await resolveRemoteAgentRequestHeaders(e.remote),a=formatTraceparent(e.parent?.traceContext);a!==void 0&&setHeader(i,`traceparent`,a),setHeader(i,`tracestate`,writeAgentDispatchTracestate(readHeader(i,`tracestate`),e.parent?.traceContext));let o=writeForwardedAudienceBaggage(readHeader(i,`baggage`),buildForwardedTraceAssertion({forwardedPrincipal:n,originAudience:e.originAudience,parentTraceContext:e.parent?.traceContext,traceparent:a})),s=writeConversationBaggage(o,e.parent?.conversationId);setHeader(i,`baggage`,writeForwardedParentSessionBaggage(s,e.parent?.lineage));let c=await fetch(createRemoteAgentSessionUrl(e.remote),{body:JSON.stringify(r),headers:{"content-type":`application/json`,...i},method:`POST`});if(!c.ok)throw Error(`Remote agent "${e.action.remoteAgentName}" create-session request failed with HTTP ${c.status}.`);let l;try{l=await c.json()}catch{throw Error(`Remote agent "${e.action.remoteAgentName}" create-session response was not valid JSON.`)}let u=CreateSessionResponseSchema.safeParse(l);if(!u.success)throw Error(`Remote agent "${e.action.remoteAgentName}" create-session response was invalid.`);return{sessionId:u.data.sessionId}}function buildForwardedTraceAssertion(e){let t=decisionToTraceContentCeiling(e.parentTraceContext?.decision);if(e.forwardedPrincipal!==void 0&&e.parentTraceContext!==void 0&&(e.parentTraceContext.traceFlags&1)==1&&e.traceparent!==void 0&&t!==void 0)return{ceiling:t,originAudience:e.originAudience??`unknown`}}async function continueRemoteAgentSession(e){let t=buildForwardedPrincipalField(e),n={activityObserver:e.activityObserver,callback:e.callback,message:e.message,outputSchema:e.outputSchema};t!==void 0&&(n.forwardedPrincipal=t);let r=await fetch(createRemoteAgentContinueUrl(e.remote,e.sessionId),{body:JSON.stringify(n),headers:{"content-type":`application/json`,...await resolveRemoteAgentRequestHeaders(e.remote)},method:`POST`});if(!r.ok){let n=await readRemoteAgentErrorCode(r),i=r.status===404||n===AgentHandleError.SessionNotResumable.code,a=r.status===400&&t!==void 0?` The receiver may support forwarded principals only on session creation; upgrade it before retrying.`:``;throw new RemoteAgentContinueRequestError(`Remote agent "${e.remote.name}" continue-session request failed${i?` permanently`:``} with HTTP ${r.status}.${a}`,{deliveryAmbiguous:isAmbiguousRemoteContinueStatus(r.status),retryable:!i})}}var RemoteAgentContinueRequestError=class extends Error{deliveryAmbiguous;retryable;constructor(e,t){super(e),this.name=`RemoteAgentContinueRequestError`,this.deliveryAmbiguous=t.deliveryAmbiguous,this.retryable=t.retryable}};function isRetryableRemoteAgentContinueError(e){return!(e instanceof RemoteAgentContinueRequestError)||e.retryable}function isAmbiguousRemoteAgentContinueError(e){return!(e instanceof RemoteAgentContinueRequestError)||e.deliveryAmbiguous}function isAmbiguousRemoteContinueStatus(e){return e===408||e===425||e>=500}async function readRemoteAgentErrorCode(e){let t;try{t=await e.json()}catch{return}if(typeof t!=`object`||!t)return;let n=Reflect.get(t,`code`);return typeof n==`string`?n:void 0}function buildForwardedPrincipalField(e){if(e.remote.forwardPrincipal!==!0||e.auth===null||e.auth===void 0)return;let t={current:e.auth};return e.initiatorAuth!==null&&e.initiatorAuth!==void 0&&(t.initiator=e.initiatorAuth),t}async function cancelRemoteAgentTurn(e){let t=e.headers??await resolveRemoteAgentRequestHeaders(e.remote),n=await fetch(createRemoteAgentCancelTurnUrl(e.remote,e.sessionId),{body:e.turnId===void 0&&e.taskId===void 0?void 0:JSON.stringify({taskId:e.taskId,turnId:e.turnId}),headers:t,method:`POST`});if(!n.ok)throw new RemoteAgentCancelRequestError(`Remote agent "${e.remote.name}" cancel-turn request failed with HTTP ${n.status}.`,{retryable:isRetryableRemoteCancelStatus(n.status)});let r;try{r=await n.json()}catch{throw new RemoteAgentCancelRequestError(`Remote agent "${e.remote.name}" cancel-turn response was not valid JSON.`,{retryable:!1})}let i=CancelTurnResponseSchema.safeParse(r);if(!i.success||i.data.status===`accepted`&&i.data.sessionId!==e.sessionId)throw new RemoteAgentCancelRequestError(`Remote agent "${e.remote.name}" cancel-turn response was invalid.`,{retryable:!1});return i.data.status===`accepted`?{sessionId:i.data.sessionId,status:`accepted`}:{status:`no_active_turn`}}function readHeader(e,t){let n=Object.keys(e).find(e=>e.toLowerCase()===t);return n===void 0?void 0:e[n]}function setHeader(e,t,n){for(let n of Object.keys(e))n.toLowerCase()===t&&delete e[n];n!==void 0&&(e[t]=n)}async function resetRemoteAgentSession(e){let t=e.headers??await resolveRemoteAgentRequestHeaders(e.remote),n=await fetch(createRemoteAgentRouteUrl(e.remote.url,createEveSessionResetRoutePath(e.sessionId)),{body:JSON.stringify({reason:`Parent session ended`}),headers:{"content-type":`application/json`,...t},method:`POST`});if(!n.ok)throw Error(`Remote agent "${e.remote.name}" reset-session request failed with HTTP ${n.status}.`);let r=ResetResponseSchema.safeParse(await n.json());if(!r.success||r.data.status===`reset`&&r.data.previousSessionId!==e.sessionId)throw Error(`Remote agent "${e.remote.name}" reset-session response was invalid.`);return r.data}function isRetryableRemoteAgentCancelError(e){return!(e instanceof RemoteAgentCancelRequestError)||e.retryable}function resolveRemoteAgentForAction(e){let t=e.registry.get(e.nodeId)?.definition;if(e.dynamicRemoteAgent!==void 0){if(t===void 0)throw Error(`Missing remote agent "${e.remoteAgentName}" in runtime registry.`);let n=resolveDynamicRemoteAgentCredentials(e.dynamicRemoteAgent),r=e.dynamicRemoteAgent,i={description:r.description,kind:`remote`,logicalPath:t.logicalPath,name:e.remoteAgentName,nodeId:e.nodeId,outputSchema:r.outputSchema,path:r.path,sourceId:t.sourceId,sourceKind:`module`,url:r.url};return r.forwardPrincipal!==void 0&&(i.forwardPrincipal=r.forwardPrincipal),n.auth!==void 0&&(i.auth=n.auth),n.headers!==void 0&&(i.headers=n.headers),i}if(t?.kind!==`remote`)throw Error(`Missing remote agent "${e.remoteAgentName}" in runtime registry.`);return t}async function resolveRemoteAgentStreamHeaders(e){if(e.resolverId===void 0)return{};let t=new Set([e.bundle.graph.root,...e.bundle.graph.nodesByNodeId.values()]);for(let n of t){let t=n.subagentRegistry.subagentsByNodeId.get(e.resolverId)?.definition;if(t!==void 0){if(t.kind!==`remote`||t.name!==e.name||t.url!==e.url)throw Error(`Remote child stream resolver does not match the authored remote agent.`);return await resolveRemoteAgentRequestHeaders(t)}}return await resolveRemoteAgentRequestHeaders(resolveDynamicRemoteAgentCredentials({credentialsStepId:e.resolverId,description:``,path:``,url:e.url}))}function resolveDynamicRemoteAgentCredentials(e){if(e.credentialsStepId===void 0)return{};let t=getStepRegistry().get(e.credentialsStepId);if(t===void 0)throw Error(`Dynamic remote subagent credentials function "${e.credentialsStepId}" is not registered.`);let n=expectObjectRecord(t(),`Dynamic remote subagent credentials are invalid.`),r={};return n.auth!==void 0&&(r.auth=expectFunction(n.auth,`Dynamic remote subagent auth is invalid.`)),n.headers!==void 0&&(r.headers=resolveDynamicRemoteAgentHeaders(n.headers)),r}function resolveDynamicRemoteAgentHeaders(e){if(typeof e==`function`)return e;let t=expectObjectRecord(e,`Dynamic remote subagent headers are invalid.`);for(let e of Object.values(t))if(typeof e!=`string`)throw Error(`Dynamic remote subagent headers are invalid.`);return t}function getStepRegistry(){let e=Symbol.for(`@workflow/core//registeredSteps`),t=globalThis,n=t[e];return n===void 0&&(n=new Map,t[e]=n),n}function createRemoteAgentSessionUrl(e){return createRemoteAgentRouteUrl(e.url,e.path)}function createRemoteAgentCancelTurnUrl(e,t){return createRemoteAgentRouteUrl(e.url,createEveSessionCancelRoutePath(t))}function createRemoteAgentContinueUrl(e,t){return createRemoteAgentRouteUrl(e.url,createEveSessionRoutePath(t))}function isRetryableRemoteCancelStatus(e){return e===408||e===425||e===429||e>=500}async function resolveRemoteAgentRequestHeaders(e){let t={};return e.headers!==void 0&&Object.assign(t,typeof e.headers==`function`?await e.headers():e.headers),e.auth!==void 0&&Object.assign(t,(await e.auth()).headers),t}function formatRemoteAgentCallInputMessage(e){let t=typeof e.action.input.message==`string`?e.action.input.message:``;return formatSubagentInput({description:e.remote.description,message:t,name:e.action.remoteAgentName,type:`remote`}).message}export{RemoteAgentContinueRequestError,cancelRemoteAgentTurn,continueRemoteAgentSession,isAmbiguousRemoteAgentContinueError,isRetryableRemoteAgentCancelError,isRetryableRemoteAgentContinueError,resetRemoteAgentSession,resolveRemoteAgentForAction,resolveRemoteAgentStreamHeaders,startRemoteAgentSession};
@@ -1 +1 @@
1
- import{createLogger,logError}from"#internal/logging.js";import{ContextContainer,contextStorage}from"#context/container.js";import{toErrorMessage}from"#shared/errors.js";import{createWorkflowRuntime,waitForCommandHookOwner}from"#execution/workflow-runtime.js";import{buildSubagentRunInput}from"#subagents/tool.js";import{SUBAGENT_START_FAILED}from"#subagents/agent-handle-errors.js";const log=createLogger(`execution.subagent-start-local`);async function startLocalSubagent(e){let{action:t,source:n}=e,r=createWorkflowRuntime({compiledArtifactsSource:e.bundle.compiledArtifactsSource,dynamicSubagentAgentConfig:e.dynamicSubagentAgentConfig,nodeId:t.nodeId}),{childContinuationToken:i,runInput:a}=buildSubagentRunInput({action:t,auth:e.auth,capabilities:e.capabilities,channelMetadata:e.channelMetadata,inheritedConversation:e.inheritedConversation,fanoutSize:e.fanoutSize,initiatorAuth:e.initiatorAuth,graph:e.bundle.graph,parent:e.parent,activityObserver:e.activityObserver,sandboxSessionId:e.sandboxSessionId,session:e.session,selfAgent:n.type===`runtime`,source:n,taskId:e.taskId}),o=n.type===`runtime`?`agent/self`:`agent/local`,s;try{await contextStorage.run(new ContextContainer({localDevRequest:e.localDevRequest}),()=>r.createSession(a)),s=(await waitForCommandHookOwner(i)).runId}catch(n){return logError(log,`local subagent start failed`,n,{callId:t.callId,nodeId:t.nodeId,subagentName:t.subagentName}),{kind:`error`,result:{callId:t.callId,isError:!0,kind:`subagent-result`,origin:`dispatch`,output:{code:SUBAGENT_START_FAILED,message:toErrorMessage(n)},subagentName:t.subagentName},session:e.currentSession}}return{address:{continuationToken:i,kind:o,sessionId:s},callId:t.callId,kind:`called`,name:t.name,session:e.currentSession,toolName:t.subagentName}}export{startLocalSubagent};
1
+ import{createLogger,logError}from"#internal/logging.js";import{sessionInboxHookToken}from"#execution/session-inbox/address.js";import{ContextContainer,contextStorage}from"#context/container.js";import{toErrorMessage}from"#shared/errors.js";import{createWorkflowRuntime,waitForCommandHookOwner}from"#execution/workflow-runtime.js";import{buildSubagentRunInput}from"#subagents/tool.js";import{SUBAGENT_START_FAILED}from"#subagents/agent-handle-errors.js";const log=createLogger(`execution.subagent-start-local`);async function startLocalSubagent(e){let{action:t,source:n}=e,r=createWorkflowRuntime({compiledArtifactsSource:e.bundle.compiledArtifactsSource,dynamicSubagentAgentConfig:e.dynamicSubagentAgentConfig,nodeId:t.nodeId}),{childContinuationToken:i,runInput:a}=buildSubagentRunInput({action:t,auth:e.auth,capabilities:e.capabilities,channelMetadata:e.channelMetadata,inheritedConversation:e.inheritedConversation,fanoutSize:e.fanoutSize,initiatorAuth:e.initiatorAuth,graph:e.bundle.graph,parent:e.parent,activityObserver:e.activityObserver,sandboxSessionId:e.sandboxSessionId,session:e.session,selfAgent:n.type===`runtime`,source:n,taskId:e.taskId}),o=n.type===`runtime`?`agent/self`:`agent/local`,s;try{await contextStorage.run(new ContextContainer({localDevRequest:e.localDevRequest}),()=>r.createSession(a)),s=(await waitForCommandHookOwner(sessionInboxHookToken(i))).runId}catch(n){return logError(log,`local subagent start failed`,n,{callId:t.callId,nodeId:t.nodeId,subagentName:t.subagentName}),{kind:`error`,result:{callId:t.callId,isError:!0,kind:`subagent-result`,origin:`dispatch`,output:{code:SUBAGENT_START_FAILED,message:toErrorMessage(n)},subagentName:t.subagentName},session:e.currentSession}}return{address:{continuationToken:i,kind:o,sessionId:s},callId:t.callId,kind:`called`,name:t.name,session:e.currentSession,toolName:t.subagentName}}export{startLocalSubagent};
@@ -1 +1 @@
1
- import{mintSubagentContinuationToken}from"#execution/session.js";import{SUBAGENT_ADAPTER_KIND}from"#subagents/adapter-state.js";import{formatSubagentInput,normalizeRequestedOutputSchema}from"#subagents/invocation.js";import{resolveRemainingSessionTokenLimits}from"#subagents/token-budget.js";function buildSubagentRunInput(e){let{action:t,auth:n,capabilities:r,channelMetadata:i,inheritedConversation:a,initiatorAuth:o,session:s,source:c}=e,l=mintSubagentContinuationToken(`${s.sessionId}:${t.callId}`),u=resolveRemainingSessionTokenLimits(s,e.fanoutSize),d=normalizeRequestedOutputSchema(t.input.outputSchema),f={callId:t.callId,parentContinuationToken:e.parent.continuationToken??s.continuationToken,parentSessionId:s.sessionId,subagentName:t.subagentName};e.taskId!==void 0&&(f.taskId=e.taskId),(e.graph?.nodesByNodeId.get(t.nodeId)?.sandboxRegistry.sandbox?.definition.inheritsParent===!0||e.selfAgent)&&(s.sandboxState!==void 0&&(f.parentSandboxState=s.sandboxState),f.sandboxSessionId=e.sandboxSessionId??s.sessionId);let p={adapter:{kind:SUBAGENT_ADAPTER_KIND,state:f},auth:n,capabilities:r,channelMetadata:i,inheritedConversation:a,continuationToken:l,initiatorAuth:o,input:{message:formatSubagentCallInputMessage({action:t,source:c}),outputSchema:d??c.outputSchema},limits:u,mode:`conversation`,conversationId:e.parent.conversationId,parent:e.parent.lineage,parentTraceContext:e.parent.traceContext,activityObserver:e.activityObserver};return e.taskId!==void 0&&(p.taskId=e.taskId),{childContinuationToken:l,runInput:p}}function formatSubagentCallInputMessage(e){let{message:t}=e.action.input;switch(e.source.type){case`local`:return formatSubagentInput({description:e.source.description,message:t,name:e.action.subagentName,type:`local`}).message;case`runtime`:return formatSubagentInput({message:t,name:e.action.subagentName,type:`runtime`}).message;default:return e.source}}export{buildSubagentRunInput};
1
+ import{mintSubagentContinuationToken}from"#execution/session.js";import{formatSubagentInput,normalizeRequestedOutputSchema}from"#subagents/invocation.js";import{SUBAGENT_ADAPTER_KIND}from"#subagents/adapter-state.js";import{resolveRemainingSessionTokenLimits}from"#subagents/token-budget.js";function buildSubagentRunInput(e){let{action:t,auth:n,capabilities:r,channelMetadata:i,inheritedConversation:a,initiatorAuth:o,session:s,source:c}=e,l=mintSubagentContinuationToken(`${s.sessionId}:${t.callId}`),u=resolveRemainingSessionTokenLimits(s,e.fanoutSize),d=normalizeRequestedOutputSchema(t.input.outputSchema),f={callId:t.callId,parentContinuationToken:e.parent.continuationToken??s.continuationToken,parentSessionId:s.sessionId,subagentName:t.subagentName};e.taskId!==void 0&&(f.taskId=e.taskId),(e.graph?.nodesByNodeId.get(t.nodeId)?.sandboxRegistry.sandbox?.definition.inheritsParent===!0||e.selfAgent)&&(s.sandboxState!==void 0&&(f.parentSandboxState=s.sandboxState),f.sandboxSessionId=e.sandboxSessionId??s.sessionId);let p={adapter:{kind:SUBAGENT_ADAPTER_KIND,state:f},auth:n,capabilities:r,channelMetadata:i,inheritedConversation:a,continuationToken:l,initiatorAuth:o,input:{message:formatSubagentCallInputMessage({action:t,source:c}),outputSchema:d??c.outputSchema},limits:u,mode:`conversation`,conversationId:e.parent.conversationId,parent:e.parent.lineage,parentTraceContext:e.parent.traceContext,activityObserver:e.activityObserver};return e.taskId!==void 0&&(p.taskId=e.taskId),{childContinuationToken:l,runInput:p}}function formatSubagentCallInputMessage(e){let{message:t}=e.action.input;switch(e.source.type){case`local`:return formatSubagentInput({description:e.source.description,message:t,name:e.action.subagentName,type:`local`}).message;case`runtime`:return formatSubagentInput({message:t,name:e.action.subagentName,type:`runtime`}).message;default:return e.source}}export{buildSubagentRunInput};
@@ -1,3 +1,3 @@
1
- import { n as defaultMessageReducer, t as useEveAgent } from "../chunks/use-eve-agent-RUGSwq8b.js";
1
+ import { n as defaultMessageReducer, t as useEveAgent } from "../chunks/use-eve-agent-C2APNCdP.js";
2
2
 
3
3
  export { defaultMessageReducer, useEveAgent };
@@ -1,3 +1,3 @@
1
- import { t as useEveAgent } from "../chunks/use-eve-agent-RUGSwq8b.js";
1
+ import { t as useEveAgent } from "../chunks/use-eve-agent-C2APNCdP.js";
2
2
 
3
3
  export { useEveAgent };
@@ -1 +1 @@
1
- import{z}from"#compiled/zod/index.js";import"#context/keys.js";import{parseActivityWorkIdentityV1}from"#protocol/activity.js";import{SESSION_TASKS_STATE_KEY,SESSION_TASKS_STATE_KEY as SESSION_TASKS_STATE_KEY$1,SESSION_TASKS_STATE_VERSION,getTaskCohortId}from"#tasks/session-task-cohorts.js";import{sameTaskMetadata}from"#tasks/types.js";const taskMetadataSchema=z.looseObject({kind:z.string().min(1),name:z.string().min(1)}),LEGACY_TASK_AGENT_DISPATCH_CONTEXT={legacy:!0},sessionAuthContextSchema=z.strictObject({attributes:z.record(z.string(),z.union([z.string(),z.array(z.string()).readonly()])),authenticator:z.string(),issuer:z.string().optional(),principalId:z.string(),principalType:z.string(),subject:z.string().optional()}),dynamicSubagentSelectionsSchema=z.record(z.string(),z.custom()),taskAgentDispatchContextSchema=z.strictObject({auth:z.strictObject({current:sessionAuthContextSchema.nullable(),initiator:sessionAuthContextSchema.nullable()}),sessionDynamicSubagentSelections:dynamicSubagentSelectionsSchema.optional(),turnDynamicSubagentSelections:dynamicSubagentSelectionsSchema.optional()}),sessionTaskDispatchContextSchema=z.union([taskAgentDispatchContextSchema,z.strictObject({legacy:z.literal(!0)})]),taskViewBaseShape={executor:z.strictObject({binding:z.strictObject({data:z.record(z.string(),z.custom()),kind:z.string().min(1)}).optional()}).optional(),metadata:taskMetadataSchema,taskId:z.string().min(1),usage:z.strictObject({cacheReadTokens:z.number().nonnegative(),cacheWriteTokens:z.number().nonnegative(),inputTokens:z.number().nonnegative(),outputTokens:z.number().nonnegative()}).optional()},taskViewSchema=z.discriminatedUnion(`status`,[z.strictObject({...taskViewBaseShape,lastOutput:z.strictObject({data:z.custom(),type:z.literal(`result`)}),status:z.literal(`completed`)}),z.strictObject({...taskViewBaseShape,lastOutput:z.strictObject({data:z.custom(),type:z.literal(`error`)}),status:z.literal(`failed`)}),z.strictObject({...taskViewBaseShape,status:z.literal(`cancelled`)})]),storedSessionTaskIndexEntrySchema=z.strictObject({activityWorkIdentity:z.custom(e=>parseActivityWorkIdentityV1(e)!==void 0).optional(),taskInboxToken:z.string().min(1),createdByStepIndex:z.number().int().nonnegative().optional(),createdByTurnId:z.string().min(1),cohortId:z.string().min(1).optional(),dispatchContext:sessionTaskDispatchContextSchema.optional(),executor:z.strictObject({data:z.record(z.string(),z.custom()),kind:z.string().min(1)}).optional(),metadata:taskMetadataSchema,taskId:z.string().min(1),taskRunId:z.string().min(1),terminalView:taskViewSchema.optional()}),sessionTaskIndexSchema=z.strictObject({tasks:z.array(storedSessionTaskIndexEntrySchema),version:z.literal(SESSION_TASKS_STATE_VERSION)}).refine(e=>new Set(e.tasks.map(e=>e.taskId)).size===e.tasks.length,{message:`Task ids must be unique.`}).refine(e=>e.tasks.every(e=>e.terminalView===void 0||e.terminalView.taskId===e.taskId&&sameTaskMetadata(e.terminalView.metadata,e.metadata)),{message:`Cached terminal views must match their task index entry.`});function getSessionTaskIndex(e){let t=e?.[SESSION_TASKS_STATE_KEY$1];if(t===void 0)return[];let n=typeof t==`object`&&t?Reflect.get(t,`version`):void 0;if(n!==SESSION_TASKS_STATE_VERSION)throw Error(`Unsupported task index version ${JSON.stringify(n)} under session state key "${SESSION_TASKS_STATE_KEY$1}"; expected version ${SESSION_TASKS_STATE_VERSION}.`);let r=sessionTaskIndexSchema.safeParse(t);if(!r.success)throw Error(`Corrupt task index under session state key "${SESSION_TASKS_STATE_KEY$1}": ${r.error.message}`);return r.data.tasks.map(e=>({...e,dispatchContext:e.dispatchContext??LEGACY_TASK_AGENT_DISPATCH_CONTEXT}))}function cacheTerminalTaskView(e,t){if(!isValidTerminalView(t))throw Error(`Cannot cache invalid terminal task "${t.taskId}".`);let n=getSessionTaskIndex(e),r=n.findIndex(e=>e.taskId===t.taskId);if(r<0)return e;if(!sameTaskMetadata(n[r].metadata,t.metadata))throw Error(`Task view metadata does not match index entry "${t.taskId}".`);let i=[...n];return i[r]={...i[r],terminalView:t},{...e,[SESSION_TASKS_STATE_KEY$1]:{tasks:i,version:SESSION_TASKS_STATE_VERSION}}}function isValidTerminalView(e){if(e.inputRequests!==void 0)return!1;switch(e.status){case`completed`:return e.lastOutput?.type===`result`;case`failed`:return e.lastOutput?.type===`error`;case`cancelled`:return e.lastOutput===void 0;case`working`:return!1}}function findSessionTaskEntry(e,t){return getSessionTaskIndex(e).find(e=>e.taskId===t)}function recordSessionTask(e,t){let n=[...getSessionTaskIndex(e.state)],r=n.findIndex(e=>e.taskId===t.taskId),i=n[r];if(i!==void 0)n[r]={...t,cohortId:i.cohortId,createdByStepIndex:i.createdByStepIndex,createdByTurnId:i.createdByTurnId,dispatchContext:i.dispatchContext,terminalView:i.terminalView??t.terminalView};else{let e=n.find(e=>e.terminalView===void 0);n.push({...t,cohortId:e===void 0?void 0:getTaskCohortId(e)})}return{...e,state:{...e.state,[SESSION_TASKS_STATE_KEY$1]:{tasks:n,version:SESSION_TASKS_STATE_VERSION}}}}export{LEGACY_TASK_AGENT_DISPATCH_CONTEXT,SESSION_TASKS_STATE_KEY,cacheTerminalTaskView,findSessionTaskEntry,getSessionTaskIndex,recordSessionTask};
1
+ import{z}from"#compiled/zod/index.js";import"#context/keys.js";import{parseActivityWorkIdentityV1}from"#protocol/activity.js";import{SESSION_TASKS_STATE_KEY,SESSION_TASKS_STATE_KEY as SESSION_TASKS_STATE_KEY$1,SESSION_TASKS_STATE_VERSION,getTaskCohortId}from"#tasks/session-task-cohorts.js";import{sameTaskMetadata}from"#tasks/types.js";const taskMetadataSchema=z.looseObject({kind:z.string().min(1),name:z.string().min(1)}),LEGACY_TASK_AGENT_DISPATCH_CONTEXT={legacy:!0},sessionAuthContextSchema=z.strictObject({attributes:z.record(z.string(),z.union([z.string(),z.array(z.string()).readonly()])),authenticator:z.string(),issuer:z.string().optional(),principalId:z.string(),principalType:z.string(),subject:z.string().optional()}),dynamicSubagentSelectionsSchema=z.record(z.string(),z.custom()),taskAgentDispatchContextSchema=z.strictObject({auth:z.strictObject({current:sessionAuthContextSchema.nullable(),initiator:sessionAuthContextSchema.nullable()}),sessionDynamicSubagentSelections:dynamicSubagentSelectionsSchema.optional(),turnDynamicSubagentSelections:dynamicSubagentSelectionsSchema.optional()}),sessionTaskDispatchContextSchema=z.union([taskAgentDispatchContextSchema,z.strictObject({legacy:z.literal(!0)})]),taskViewBaseShape={inputRequests:z.never().optional(),executor:z.looseObject({binding:z.looseObject({data:z.record(z.string(),z.custom()),kind:z.string().min(1)}).optional()}).optional(),metadata:taskMetadataSchema,taskId:z.string().min(1),usage:z.looseObject({cacheReadTokens:z.number().nonnegative(),cacheWriteTokens:z.number().nonnegative(),costUsd:z.number().finite().nonnegative().optional(),inputTokens:z.number().nonnegative(),outputTokens:z.number().nonnegative()}).optional()},taskViewSchema=z.discriminatedUnion(`status`,[z.looseObject({...taskViewBaseShape,lastOutput:z.looseObject({data:z.custom(),type:z.literal(`result`)}),status:z.literal(`completed`)}),z.looseObject({...taskViewBaseShape,lastOutput:z.looseObject({data:z.custom(),type:z.literal(`error`)}),status:z.literal(`failed`)}),z.looseObject({...taskViewBaseShape,lastOutput:z.never().optional(),status:z.literal(`cancelled`)})]),storedSessionTaskIndexEntrySchema=z.looseObject({activityWorkIdentity:z.custom(e=>parseActivityWorkIdentityV1(e)!==void 0).optional(),taskInboxToken:z.string().min(1),createdByStepIndex:z.number().int().nonnegative().optional(),createdByTurnId:z.string().min(1),cohortId:z.string().min(1).optional(),dispatchContext:sessionTaskDispatchContextSchema.optional(),executor:z.looseObject({data:z.record(z.string(),z.custom()),kind:z.string().min(1)}).optional(),metadata:taskMetadataSchema,taskId:z.string().min(1),taskRunId:z.string().min(1),terminalView:taskViewSchema.optional()}),sessionTaskIndexSchema=z.looseObject({tasks:z.array(storedSessionTaskIndexEntrySchema),version:z.literal(SESSION_TASKS_STATE_VERSION)}).refine(e=>new Set(e.tasks.map(e=>e.taskId)).size===e.tasks.length,{message:`Task ids must be unique.`}).refine(e=>e.tasks.every(e=>e.terminalView===void 0||e.terminalView.taskId===e.taskId&&sameTaskMetadata(e.terminalView.metadata,e.metadata)),{message:`Cached terminal views must match their task index entry.`});function getSessionTaskIndex(e){return readSessionTaskIndex(e).tasks}function readSessionTaskIndex(e){let t=e?.[SESSION_TASKS_STATE_KEY$1];if(t===void 0)return{tasks:[],version:SESSION_TASKS_STATE_VERSION};let n=typeof t==`object`&&t?Reflect.get(t,`version`):void 0;if(n!==SESSION_TASKS_STATE_VERSION)throw Error(`Unsupported task index version ${JSON.stringify(n)} under session state key "${SESSION_TASKS_STATE_KEY$1}"; expected version ${SESSION_TASKS_STATE_VERSION}.`);let r=sessionTaskIndexSchema.safeParse(t);if(!r.success)throw Error(`Corrupt task index under session state key "${SESSION_TASKS_STATE_KEY$1}": ${r.error.message}`);return{...r.data,tasks:r.data.tasks.map(e=>({...e,dispatchContext:e.dispatchContext??LEGACY_TASK_AGENT_DISPATCH_CONTEXT}))}}function cacheTerminalTaskView(e,t){if(!isValidTerminalView(t))throw Error(`Cannot cache invalid terminal task "${t.taskId}".`);let n=readSessionTaskIndex(e),r=n.tasks,i=r.findIndex(e=>e.taskId===t.taskId);if(i<0)return e;if(!sameTaskMetadata(r[i].metadata,t.metadata))throw Error(`Task view metadata does not match index entry "${t.taskId}".`);let a=[...r],o=a[i].terminalView;return a[i]={...a[i],terminalView:taskViewSchema.parse({...o,...t,metadata:{...o?.metadata,...t.metadata},lastOutput:t.lastOutput===void 0?void 0:{...o?.lastOutput,...t.lastOutput},usage:t.usage===void 0?void 0:{...o?.usage,...t.usage},executor:t.executor===void 0?void 0:{...o?.executor,...t.executor,binding:t.executor.binding===void 0?void 0:{...o?.executor?.binding,...t.executor.binding}}})},{...e,[SESSION_TASKS_STATE_KEY$1]:{...n,tasks:a}}}function isValidTerminalView(e){if(e.inputRequests!==void 0)return!1;switch(e.status){case`completed`:return e.lastOutput?.type===`result`;case`failed`:return e.lastOutput?.type===`error`;case`cancelled`:return e.lastOutput===void 0;case`working`:return!1}}function findSessionTaskEntry(e,t){return getSessionTaskIndex(e).find(e=>e.taskId===t)}function recordSessionTask(e,t){let n=readSessionTaskIndex(e.state),r=[...n.tasks],i=r.findIndex(e=>e.taskId===t.taskId),a=r[i];if(a!==void 0)r[i]={...a,...t,metadata:{...a.metadata,...t.metadata},activityWorkIdentity:t.activityWorkIdentity===void 0?a.activityWorkIdentity:{...a.activityWorkIdentity,...t.activityWorkIdentity},executor:t.executor===void 0?a.executor:{...a.executor,...t.executor},cohortId:a.cohortId,createdByStepIndex:a.createdByStepIndex,createdByTurnId:a.createdByTurnId,dispatchContext:a.dispatchContext,terminalView:a.terminalView??t.terminalView};else{let e=r.find(e=>e.terminalView===void 0);r.push({...t,cohortId:e===void 0?void 0:getTaskCohortId(e)})}return{...e,state:{...e.state,[SESSION_TASKS_STATE_KEY$1]:{...n,tasks:r,version:SESSION_TASKS_STATE_VERSION}}}}export{LEGACY_TASK_AGENT_DISPATCH_CONTEXT,SESSION_TASKS_STATE_KEY,cacheTerminalTaskView,findSessionTaskEntry,getSessionTaskIndex,recordSessionTask};
@@ -1,6 +1,6 @@
1
1
  import type { SubagentAuthorizationEvent, SubagentAuthorizationEventHookPayload } from "#channel/types.js";
2
2
  import type { WorkflowToolAgentRequest } from "#execution/tools/workflow/messages.js";
3
- import type { SessionInboxAddress } from "#execution/wire/session-inbox-contract.js";
3
+ import type { SessionInboxAddress } from "#execution/session-inbox/address.js";
4
4
  import { type JsonValue } from "#shared/json.js";
5
5
  import type { TaskExecutorBinding } from "#tools/task.js";
6
6
  /** Durable lifecycle status for one unit of background work. */
@@ -1,2 +1,2 @@
1
- import{normalizeChannelAudience}from"#shared/channel-audience.js";import{applyLiveDeliveryAudienceCeiling,resolveForwardedTraceSeed}from"#shared/forwarded-trace-policy.js";import{contextStorage}from"#context/container.js";import{SessionTraceSeedKey}from"#context/keys.js";import{AGENT_SPAN_NAMES,agentInvocationSpanName}from"#tracing/agent-span-contract.js";import{resolveInstrumentationEnvironment}from"#internal/application/dev-environment.js";import{isSampledTrace,resolveTracePolicyDecision}from"#tracing/sampled-trace.js";import{ROOT_CONTEXT,SpanKind,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{withErrorContent}from"#tracing/error-content-context.js";import{readInstrumentationDecision}from"#shared/instrumentation-decision.js";import{agentSpanNamingAttributes}from"#tracing/agent-span-naming.js";import{agentTraceIdentityAttributes}from"#tracing/agent-otel-attributes.js";import{contentAttribute,genAiInputMessagesAttribute,genAiOutputMessagesAttribute,genAiSystemInstructionsAttribute,systemPromptAttribute,textContentAttribute,toolResultsContentAttribute}from"#tracing/agent-otel-content.js";import{readGatewayCost,setAgentInvocationUsage,setAgentUsage,setGenAiUsage}from"#tracing/agent-otel-usage.js";import{withChannelAudience}from"#tracing/channel-audience-context.js";import{recordAgentSpanError}from"#tracing/agent-span-error.js";import{suppressTracing}from"#tracing/suppress-tracing.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*as runtimeAttributes from"#tracing/agent-otel-runtime-context.js";import{createAgentMemoryInstrumentation}from"#tracing/agent-memory-instrumentation.js";import{createAgentOtelSessionContext}from"#tracing/agent-otel-session-context.js";function createAgentOtelInstrumentation(e){let t=e.environment??resolveInstrumentationEnvironment(),n=e.recordInputs??!1,r=e.recordOutputs??!1,i=new WeakMap,a=new Map,o=new WeakMap,s=new WeakMap,c=createAgentActionInstrumentation({frameworkVersion:e.frameworkVersion,idGenerator:e.idGenerator,recordInputs:n,recordOutputs:r,resolveTraceContext:async t=>(await e.stateStore.getTurn(t.scope.sessionId,t.scope.turnId))?.context,stateStore:e.stateStore,tracer:e.tracer}),l=createAgentApprovalInstrumentation({actionContextFor:c.contextFor,frameworkVersion:e.frameworkVersion,idGenerator:e.idGenerator,tracer:e.tracer}),u=createAgentToolInstrumentation({actionContextFor:c.contextFor,idGenerator:e.idGenerator,recordInputs:n,recordOutputs:r,resolveFallback:e=>{let t=a.get(e.scope.attemptId)??e.scope,n=o.get(t);return n===void 0?void 0:{context:n.context,spanContext:n.span.spanContext()}},tracer:e.tracer}),d=createAgentMemoryInstrumentation({...e,environment:t}),{ensureSessionContext:f,prepareSessionTrace:p,prepareTurnTrace:m}=createAgentOtelSessionContext({...e,environment:t}),projectEvent=async i=>{let a=await e.stateStore.getSession(sessionIdForEvent(i)),o=audienceForEvent(i,a?.channelAudience),s=`traceSeed`in i?i.traceSeed:void 0,c=contextStorage.getStore()?.get(SessionTraceSeedKey),l=resolveForwardedTraceSeed(c),u=resolveForwardedTraceSeed(s,l?.forwardedTracePolicy),decisionForTrace=e=>e===void 0?void 0:resolveTracePolicyDecision(isSampledTrace(e),{audience:o,environment:t}),d=u?.decision??l?.decision??readInstrumentationDecision(a?.decision)??decisionForTrace(s)??decisionForTrace(c)??decisionForTrace(a?.context);if(d===void 0)return withoutInstrumentationContent(i);let f=u===void 0||!(`traceSeed`in i)||i.traceSeed===void 0?i:{...i,traceSeed:{...i.traceSeed,decision:u.decision,traceFlags:u.traceFlags}};return instrumentationEventForTraceDecision(f,applyLiveDeliveryAudienceCeiling(d.action===`drop`?d:{action:`record`,recordInputs:n&&d.recordInputs,recordOutputs:r&&d.recordOutputs},o,u?.forwardedTracePolicy??l?.forwardedTracePolicy,t),{audience:o,environment:t},{applyAudienceCeiling:!1})},onSessionStarted=async e=>{await p(e)},onTurnStarted=async e=>{await m(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 r=withChannelAudience(contextFromSpanContext(n.context),t.scope.channelAudience),i=trace.getSpan(context.active())?.spanContext(),s=e.idGenerator.withSpanId(e.idGenerator.deriveSpanId(attemptIdempotencyKey(t.scope)),()=>e.tracer.startSpan(AGENT_SPAN_NAMES.step,{attributes:{"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,...agentSpanNamingAttributes(`agent.step`),...agentTraceIdentityAttributes({rootSessionId:t.scope.rootSessionId??t.scope.sessionId,sessionId:t.scope.sessionId}),...runtimeAttributes.runtimeContextAttributes(t.runtimeContext)},links:i===void 0||i.traceId===n.context.traceId?void 0:[{attributes:{"eve.link.type":`workflow.delivery`},context:i}]},r));s.addEvent(`step.started`);let c=trace.setSpan(r,s);o.set(t.scope,{context:c,span:s}),a.set(t.scope.attemptId,t.scope)},onStepTerminal=async e=>{let t=a.get(e.scope.attemptId)??e.scope;i.delete(t),drainOpenSpans({...e,scope:t}),u.drain(e.scope.attemptId,e.type===`step.attempt.failed`?{error:e.error}:void 0),e.type===`step.attempt.failed`&&await c.failForAttempt(t,e.error),a.delete(e.scope.attemptId);let n=o.get(t);n!==void 0&&(n.span.addEvent(e.type===`step.attempt.completed`?`step.completed`:`step.failed`),e.type===`step.attempt.failed`&&recordAgentSpanError(n.span,e.error),n.span.end(),o.delete(t))},onTurnTerminal=async t=>{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(await c.flushForSessionTransition(t),t.type===`session.failed`&&t.turnId!==void 0&&await e.stateStore.updateTurn(t.sessionId,t.turnId,e=>({...e,terminal:e.terminal??{error:t.error,type:`turn.failed`}})),t.turnId!==void 0){let n=await e.stateStore.getTurn(t.sessionId,t.turnId);if(n!==void 0){let r=await e.stateStore.getSession(t.sessionId);if(isSampledTrace(n.context)){let i=r?.agentName??n.subagentName,a=withChannelAudience(ROOT_CONTEXT,r?.channelAudience),startSpan=()=>e.tracer.startSpan(agentInvocationSpanName(i),{attributes:runtimeAttributes.agentActivationAttributes({agentName:i,frameworkVersion:e.frameworkVersion,session:r,sessionId:t.sessionId,turnId:t.turnId,turn:n}),kind:SpanKind.INTERNAL,links:agentActivationLinks(n),root:!0,startTime:n.startTimeMs},a),o=e.idGenerator.withSpanId(n.context.spanId,()=>e.idGenerator.withTraceId(n.context.traceId,startSpan));setAgentInvocationUsage(o,n.modelUsage),o.addEvent(`turn.started`,void 0,n.startTimeMs),n.terminal!==void 0&&(o.setAttribute(`agent.turn.outcome`,n.terminal.type===`turn.completed`?`completed`:n.terminal.type===`turn.cancelled`?`cancelled`:`failed`),o.addEvent(n.terminal.type),n.terminal.type===`turn.failed`&&recordAgentSpanError(o,n.terminal.error)),o.end()}await e.stateStore.deleteTurn(t.sessionId,t.turnId)}}(t.type===`session.completed`||t.type===`session.failed`)&&(await c.deleteForSession(t.sessionId),await e.stateStore.deleteSession(t.sessionId))},onModelCallStarted=t=>{let r=o.get(t.scope);if(r===void 0)return;r.span.setAttribute(`agent.model.id`,t.model.modelId),r.span.setAttribute(`agent.model.provider`,t.model.provider);let i=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,...agentSpanNamingAttributes(modelSpanName(t.model.modelId),`chat`),...agentTraceIdentityAttributes({rootSessionId:t.scope.rootSessionId??t.scope.sessionId,sessionId:t.scope.sessionId}),...runtimeAttributes.runtimeContextAttributes(t.runtimeContext)},kind:SpanKind.CLIENT},r.context);if(n&&t.input!==void 0){let e=genAiInputMessagesAttribute(t.input.messages);e!==void 0&&i.setAttribute(`gen_ai.input.messages`,e);let n=systemPromptAttribute(t.input.instructions);n!==void 0&&i.setAttribute(`ai.prompt.system`,n);let r=genAiSystemInstructionsAttribute(t.input.instructions);r!==void 0&&i.setAttribute(`gen_ai.system_instructions`,r)}let a={context:trace.setSpan(r.context,i),span:i};getExecutionContexts(t.scope).set(t.idempotencyKey,a.context),getSpanStates(s,t.scope).set(t.idempotencyKey,a)},onModelCallTerminal=async e=>{i.get(e.scope)?.delete(e.idempotencyKey);let t=takeSpanState(s,e.scope,e.idempotencyKey);if(t!==void 0){if(e.type===`model.call.failed`)recordAgentSpanError(t.span,e.error);else{await recordTurnUsage(e),setGenAiUsage(t.span,e.usage),e.responseId!==void 0&&t.span.setAttribute(`gen_ai.response.id`,e.responseId),t.span.setAttribute(`gen_ai.response.finish_reasons`,[e.finishReason]);let n=o.get(e.scope);if(n!==void 0&&setAgentUsage(n.span,e.usage),r){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);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}}))},h=createAgentChannelDeliveryInstrumentation({ensureSessionContext:f,recordInputs:n,stateStore:e.stateStore}),onStepMetadata=e=>{let t=o.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:{flush:c.flushSettledInvocations,events:{...h,"action.completed":c.events[`action.completed`],"action.failed":c.events[`action.failed`],async"action.started"(e,t){await c.events[`action.started`](e,t),await u.actionStarted(e)},...l,...d.events,"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,...u.events,"turn.cancelled":onTurnTerminal,"turn.completed":onTurnTerminal,"turn.failed":onTurnTerminal,"turn.started":onTurnStarted},name:`eve.otel`,projectEvent,tracePolicy:()=>({emit:!0,recordInputs:n,recordOutputs:r})},prepareSessionTrace:p,prepareTurnTrace:m,async runInContext(n,o){if(n.type===`memory.operation`)return d.runInContext(n,o);let s=a.get(n.scope.attemptId)??n.scope,c=i.get(s),l=n.type===`model.call`?c?.get(n.idempotencyKey):u.contextFor(n.scope.attemptId,n.idempotencyKey);if(l===void 0){let t=await e.stateStore.getTurn(n.scope.sessionId,n.scope.turnId);t!==void 0&&(l=withChannelAudience(contextFromSpanContext(t.context),n.scope.channelAudience),isSampledTrace(t.context)||(l=suppressTracing(l)))}let f=await e.stateStore.getSession(n.scope.sessionId),p=resolveForwardedTraceSeed(contextStorage.getStore()?.get(SessionTraceSeedKey)),m=p?.decision??f?.decision,h=m===void 0?void 0:applyLiveDeliveryAudienceCeiling(m,normalizeChannelAudience(n.scope.channelAudience),p?.forwardedTracePolicy,t);return l===void 0?o():context.with(markAgentTraceContext(withErrorContent(l,r&&h?.action===`record`&&h.recordOutputs)),o)}};function getExecutionContexts(e){let t=i.get(e);return t===void 0&&(t=new Map,i.set(e,t)),t}function drainOpenSpans(e){for(let t of s.get(e.scope)?.values()??[])e.type===`step.attempt.failed`&&recordAgentSpanError(t.span,e.error),t.span.end();s.delete(e.scope)}}function agentActivationLinks(e){let t=[];return e.caller!==void 0&&t.push({context:e.caller,attributes:{"eve.link.type":`agent.dispatch`}}),e.channelDelivery?.requestTraceContext!==void 0&&t.push({context:e.channelDelivery.requestTraceContext,attributes:{"eve.link.type":`channel.request`}}),t.length===0?void 0:t}function sessionIdForEvent(e){return`scope`in e?e.scope.sessionId:e.sessionId}function audienceForEvent(e,t){return`delivery`in e?normalizeChannelAudience(e.delivery.channelAudience):`scope`in e&&e.scope.channelAudience!==void 0?normalizeChannelAudience(e.scope.channelAudience):e.type===`session.started`?normalizeChannelAudience(e.channelAudience):normalizeChannelAudience(t)}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 modelSpanName(e){return`chat ${e}`}function errorText(e){return e instanceof Error?e.message:e}export{createAgentOtelInstrumentation};
1
+ import{normalizeChannelAudience}from"#shared/channel-audience.js";import{applyLiveDeliveryAudienceCeiling,resolveForwardedTraceSeed}from"#shared/forwarded-trace-policy.js";import{contextStorage}from"#context/container.js";import{SessionTraceSeedKey}from"#context/keys.js";import{AGENT_SPAN_NAMES,agentInvocationSpanName,modelSpanName}from"#tracing/agent-span-contract.js";import{resolveInstrumentationEnvironment}from"#internal/application/dev-environment.js";import{isSampledTrace,resolveTracePolicyDecision}from"#tracing/sampled-trace.js";import{ROOT_CONTEXT,SpanKind,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{withErrorContent}from"#tracing/error-content-context.js";import{readInstrumentationDecision}from"#shared/instrumentation-decision.js";import{agentSpanNamingAttributes}from"#tracing/agent-span-naming.js";import{agentTraceIdentityAttributes}from"#tracing/agent-otel-attributes.js";import{contentAttribute,genAiInputMessagesAttribute,genAiOutputMessagesAttribute,genAiSystemInstructionsAttribute,systemPromptAttribute,textContentAttribute,toolResultsContentAttribute}from"#tracing/agent-otel-content.js";import{readGatewayCost,setAgentInvocationUsage,setAgentUsage,setGenAiUsage}from"#tracing/agent-otel-usage.js";import{withChannelAudience}from"#tracing/channel-audience-context.js";import{recordAgentSpanError}from"#tracing/agent-span-error.js";import{suppressTracing}from"#tracing/suppress-tracing.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*as runtimeAttributes from"#tracing/agent-otel-runtime-context.js";import{createAgentMemoryInstrumentation}from"#tracing/agent-memory-instrumentation.js";import{createAgentOtelSessionContext}from"#tracing/agent-otel-session-context.js";function createAgentOtelInstrumentation(e){let t=e.environment??resolveInstrumentationEnvironment(),n=e.recordInputs??!1,r=e.recordOutputs??!1,i=new WeakMap,a=new Map,o=new WeakMap,s=new WeakMap,c=createAgentActionInstrumentation({frameworkVersion:e.frameworkVersion,idGenerator:e.idGenerator,recordInputs:n,recordOutputs:r,resolveTraceContext:async t=>(await e.stateStore.getTurn(t.scope.sessionId,t.scope.turnId))?.context,stateStore:e.stateStore,tracer:e.tracer}),l=createAgentApprovalInstrumentation({actionContextFor:c.contextFor,frameworkVersion:e.frameworkVersion,idGenerator:e.idGenerator,tracer:e.tracer}),u=createAgentToolInstrumentation({actionContextFor:c.contextFor,idGenerator:e.idGenerator,recordInputs:n,recordOutputs:r,resolveFallback:e=>{let t=a.get(e.scope.attemptId)??e.scope,n=o.get(t);return n===void 0?void 0:{context:n.context,spanContext:n.span.spanContext()}},tracer:e.tracer}),d=createAgentMemoryInstrumentation({...e,environment:t}),{ensureSessionContext:f,prepareSessionTrace:p,prepareTurnTrace:m}=createAgentOtelSessionContext({...e,environment:t}),projectEvent=async i=>{let a=await e.stateStore.getSession(sessionIdForEvent(i)),o=audienceForEvent(i,a?.channelAudience),s=`traceSeed`in i?i.traceSeed:void 0,c=contextStorage.getStore()?.get(SessionTraceSeedKey),l=resolveForwardedTraceSeed(c),u=resolveForwardedTraceSeed(s,l?.forwardedTracePolicy),decisionForTrace=e=>e===void 0?void 0:resolveTracePolicyDecision(isSampledTrace(e),{audience:o,environment:t}),d=u?.decision??l?.decision??readInstrumentationDecision(a?.decision)??decisionForTrace(s)??decisionForTrace(c)??decisionForTrace(a?.context);if(d===void 0)return withoutInstrumentationContent(i);let f=u===void 0||!(`traceSeed`in i)||i.traceSeed===void 0?i:{...i,traceSeed:{...i.traceSeed,decision:u.decision,traceFlags:u.traceFlags}};return instrumentationEventForTraceDecision(f,applyLiveDeliveryAudienceCeiling(d.action===`drop`?d:{action:`record`,recordInputs:n&&d.recordInputs,recordOutputs:r&&d.recordOutputs},o,u?.forwardedTracePolicy??l?.forwardedTracePolicy,t),{audience:o,environment:t},{applyAudienceCeiling:!1})},onSessionStarted=async e=>{await p(e)},onTurnStarted=async e=>{await m(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 r=withChannelAudience(contextFromSpanContext(n.context),t.scope.channelAudience),i=trace.getSpan(context.active())?.spanContext(),s=e.idGenerator.withSpanId(e.idGenerator.deriveSpanId(attemptIdempotencyKey(t.scope)),()=>e.tracer.startSpan(AGENT_SPAN_NAMES.step,{attributes:{"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,...agentSpanNamingAttributes(`agent.step`),...agentTraceIdentityAttributes({rootSessionId:t.scope.rootSessionId??t.scope.sessionId,sessionId:t.scope.sessionId}),...runtimeAttributes.runtimeContextAttributes(t.runtimeContext)},links:i===void 0||i.traceId===n.context.traceId?void 0:[{attributes:{"eve.link.type":`workflow.delivery`},context:i}]},r));s.addEvent(`step.started`);let c=trace.setSpan(r,s);o.set(t.scope,{context:c,span:s}),a.set(t.scope.attemptId,t.scope)},onStepTerminal=async e=>{let t=a.get(e.scope.attemptId)??e.scope;i.delete(t),drainOpenSpans({...e,scope:t}),u.drain(e.scope.attemptId,e.type===`step.attempt.failed`?{error:e.error}:void 0),e.type===`step.attempt.failed`&&await c.failForAttempt(t,e.error),a.delete(e.scope.attemptId);let n=o.get(t);n!==void 0&&(n.span.addEvent(e.type===`step.attempt.completed`?`step.completed`:`step.failed`),e.type===`step.attempt.failed`&&recordAgentSpanError(n.span,e.error),n.span.end(),o.delete(t))},onTurnTerminal=async t=>{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(await c.flushForSessionTransition(t),t.type===`session.failed`&&t.turnId!==void 0&&await e.stateStore.updateTurn(t.sessionId,t.turnId,e=>({...e,terminal:e.terminal??{error:t.error,type:`turn.failed`}})),t.turnId!==void 0){let n=await e.stateStore.getTurn(t.sessionId,t.turnId);if(n!==void 0){let r=await e.stateStore.getSession(t.sessionId);if(isSampledTrace(n.context)){let i=r?.agentName??n.subagentName,a=withChannelAudience(ROOT_CONTEXT,r?.channelAudience),startSpan=()=>e.tracer.startSpan(agentInvocationSpanName(i),{attributes:runtimeAttributes.agentActivationAttributes({agentName:i,frameworkVersion:e.frameworkVersion,session:r,sessionId:t.sessionId,turnId:t.turnId,turn:n}),kind:SpanKind.INTERNAL,links:agentActivationLinks(n),root:!0,startTime:n.startTimeMs},a),o=e.idGenerator.withSpanId(n.context.spanId,()=>e.idGenerator.withTraceId(n.context.traceId,startSpan));setAgentInvocationUsage(o,n.modelUsage),o.addEvent(`turn.started`,void 0,n.startTimeMs),n.terminal!==void 0&&(o.setAttribute(`agent.turn.outcome`,n.terminal.type===`turn.completed`?`completed`:n.terminal.type===`turn.cancelled`?`cancelled`:`failed`),o.addEvent(n.terminal.type),n.terminal.type===`turn.failed`&&recordAgentSpanError(o,n.terminal.error)),o.end()}await e.stateStore.deleteTurn(t.sessionId,t.turnId)}}(t.type===`session.completed`||t.type===`session.failed`)&&(await c.deleteForSession(t.sessionId),await e.stateStore.deleteSession(t.sessionId))},onModelCallStarted=t=>{let r=o.get(t.scope);if(r===void 0)return;r.span.setAttribute(`agent.model.id`,t.model.modelId),r.span.setAttribute(`agent.model.provider`,t.model.provider);let i=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,...agentSpanNamingAttributes(modelSpanName(t.model.modelId),`chat`),...agentTraceIdentityAttributes({rootSessionId:t.scope.rootSessionId??t.scope.sessionId,sessionId:t.scope.sessionId}),...runtimeAttributes.runtimeContextAttributes(t.runtimeContext)},kind:SpanKind.CLIENT},r.context);if(n&&t.input!==void 0){let e=genAiInputMessagesAttribute(t.input.messages);e!==void 0&&i.setAttribute(`gen_ai.input.messages`,e);let n=systemPromptAttribute(t.input.instructions);n!==void 0&&i.setAttribute(`ai.prompt.system`,n);let r=genAiSystemInstructionsAttribute(t.input.instructions);r!==void 0&&i.setAttribute(`gen_ai.system_instructions`,r)}let a={context:trace.setSpan(r.context,i),span:i};getExecutionContexts(t.scope).set(t.idempotencyKey,a.context),getSpanStates(s,t.scope).set(t.idempotencyKey,a)},onModelCallTerminal=async e=>{i.get(e.scope)?.delete(e.idempotencyKey);let t=takeSpanState(s,e.scope,e.idempotencyKey);if(t!==void 0){if(e.type===`model.call.failed`)recordAgentSpanError(t.span,e.error);else{await recordTurnUsage(e),setGenAiUsage(t.span,e.usage),e.responseId!==void 0&&t.span.setAttribute(`gen_ai.response.id`,e.responseId),e.responseModelId!==void 0&&t.span.setAttribute(`gen_ai.response.model`,e.responseModelId),t.span.setAttribute(`gen_ai.response.finish_reasons`,[e.finishReason]);let n=o.get(e.scope);if(n!==void 0&&setAgentUsage(n.span,e.usage),r){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);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}}))},h=createAgentChannelDeliveryInstrumentation({ensureSessionContext:f,recordInputs:n,stateStore:e.stateStore}),onStepMetadata=e=>{let t=o.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:{flush:c.flushSettledInvocations,events:{...h,"action.completed":c.events[`action.completed`],"action.failed":c.events[`action.failed`],async"action.started"(e,t){await c.events[`action.started`](e,t),await u.actionStarted(e)},...l,...d.events,"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,...u.events,"turn.cancelled":onTurnTerminal,"turn.completed":onTurnTerminal,"turn.failed":onTurnTerminal,"turn.started":onTurnStarted},name:`eve.otel`,projectEvent,tracePolicy:()=>({emit:!0,recordInputs:n,recordOutputs:r})},prepareSessionTrace:p,prepareTurnTrace:m,async runInContext(n,o){if(n.type===`memory.operation`)return d.runInContext(n,o);let s=a.get(n.scope.attemptId)??n.scope,c=i.get(s),l=n.type===`model.call`?c?.get(n.idempotencyKey):u.contextFor(n.scope.attemptId,n.idempotencyKey);if(l===void 0){let t=await e.stateStore.getTurn(n.scope.sessionId,n.scope.turnId);t!==void 0&&(l=withChannelAudience(contextFromSpanContext(t.context),n.scope.channelAudience),isSampledTrace(t.context)||(l=suppressTracing(l)))}let f=await e.stateStore.getSession(n.scope.sessionId),p=resolveForwardedTraceSeed(contextStorage.getStore()?.get(SessionTraceSeedKey)),m=p?.decision??f?.decision,h=m===void 0?void 0:applyLiveDeliveryAudienceCeiling(m,normalizeChannelAudience(n.scope.channelAudience),p?.forwardedTracePolicy,t);return l===void 0?o():context.with(markAgentTraceContext(withErrorContent(l,r&&h?.action===`record`&&h.recordOutputs)),o)}};function getExecutionContexts(e){let t=i.get(e);return t===void 0&&(t=new Map,i.set(e,t)),t}function drainOpenSpans(e){for(let t of s.get(e.scope)?.values()??[])e.type===`step.attempt.failed`&&recordAgentSpanError(t.span,e.error),t.span.end();s.delete(e.scope)}}function agentActivationLinks(e){let t=[];return e.caller!==void 0&&t.push({context:e.caller,attributes:{"eve.link.type":`agent.dispatch`}}),e.channelDelivery?.requestTraceContext!==void 0&&t.push({context:e.channelDelivery.requestTraceContext,attributes:{"eve.link.type":`channel.request`}}),t.length===0?void 0:t}function sessionIdForEvent(e){return`scope`in e?e.scope.sessionId:e.sessionId}function audienceForEvent(e,t){return`delivery`in e?normalizeChannelAudience(e.delivery.channelAudience):`scope`in e&&e.scope.channelAudience!==void 0?normalizeChannelAudience(e.scope.channelAudience):e.type===`session.started`?normalizeChannelAudience(e.channelAudience):normalizeChannelAudience(t)}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 errorText(e){return e instanceof Error?e.message:e}export{createAgentOtelInstrumentation};
@@ -1 +1 @@
1
- import{AGENT_USAGE_ATTRIBUTES}from"#tracing/agent-span-contract.js";function setAgentUsage(e,t){t.inputTokens!==void 0&&e.setAttribute(AGENT_USAGE_ATTRIBUTES.inputTokens,t.inputTokens),t.outputTokens!==void 0&&e.setAttribute(AGENT_USAGE_ATTRIBUTES.outputTokens,t.outputTokens);let n=t.inputTokenDetails;n?.cacheReadTokens!==void 0&&e.setAttribute(AGENT_USAGE_ATTRIBUTES.cacheReadTokens,n.cacheReadTokens),n?.cacheWriteTokens!==void 0&&e.setAttribute(AGENT_USAGE_ATTRIBUTES.cacheWriteTokens,n.cacheWriteTokens)}function setGenAiUsage(e,t){setAgentUsage(e,t),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);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)}function setAgentInvocationUsage(e,t){t!==void 0&&setGenAiUsage(e,t)}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)}export{readGatewayCost,setAgentInvocationUsage,setAgentUsage,setGenAiUsage};
1
+ import{AGENT_USAGE_ATTRIBUTES}from"#tracing/agent-span-contract.js";function setAgentUsage(e,t){t.inputTokens!==void 0&&e.setAttribute(AGENT_USAGE_ATTRIBUTES.inputTokens,t.inputTokens),t.outputTokens!==void 0&&e.setAttribute(AGENT_USAGE_ATTRIBUTES.outputTokens,t.outputTokens);let n=t.inputTokenDetails;n?.cacheReadTokens!==void 0&&e.setAttribute(AGENT_USAGE_ATTRIBUTES.cacheReadTokens,n.cacheReadTokens),n?.cacheWriteTokens!==void 0&&e.setAttribute(AGENT_USAGE_ATTRIBUTES.cacheWriteTokens,n.cacheWriteTokens)}function setGenAiUsage(e,t){setAgentUsage(e,t),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);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_write.input_tokens`,n.cacheWriteTokens)}function setAgentInvocationUsage(e,t){t!==void 0&&setGenAiUsage(e,t)}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)}export{readGatewayCost,setAgentInvocationUsage,setAgentUsage,setGenAiUsage};
@@ -13,6 +13,7 @@ export declare const AGENT_USAGE_ATTRIBUTES: {
13
13
  };
14
14
  export declare function agentInvocationSpanName(agentName: string | undefined): string;
15
15
  export declare function workflowInvocationSpanName(workflowName: string): string;
16
+ export declare function modelSpanName(modelId: string): string;
16
17
  export interface AgentSamplingOperation {
17
18
  readonly name: string;
18
19
  readonly attributes?: Readonly<Record<string, string | number | boolean | undefined>>;
@@ -1 +1 @@
1
- const AGENT_TRACE_SCHEMA_VERSION=4,AGENT_SPAN_NAMES={action:`agent.action`,approval:`agent.approval`,channelRequest:`agent.channel.request`,step:`agent.step`},AGENT_USAGE_ATTRIBUTES={inputTokens:`agent.usage.input_tokens`,outputTokens:`agent.usage.output_tokens`,cacheReadTokens:`agent.usage.cache_read_tokens`,cacheWriteTokens:`agent.usage.cache_write_tokens`};function agentInvocationSpanName(e){return e===void 0?`invoke_agent`:`invoke_agent ${e}`}function workflowInvocationSpanName(e){return`invoke_workflow ${e}`}function isAgentActivationSpan(e){return e.name===`agent.turn`||e.attributes[`gen_ai.operation.name`]===`invoke_agent`&&e.attributes[`agent.invocation.role`]!==`caller`&&typeof e.attributes[`agent.turn.id`]==`string`}function agentTurnIdentity(e){let t=e.attributes[`gen_ai.conversation.id`],n=e.attributes[`agent.turn.id`];return typeof n==`string`?`${typeof t==`string`?t:``}\0${n}`:void 0}export{AGENT_SPAN_NAMES,AGENT_TRACE_SCHEMA_VERSION,AGENT_USAGE_ATTRIBUTES,agentInvocationSpanName,agentTurnIdentity,isAgentActivationSpan,workflowInvocationSpanName};
1
+ const AGENT_TRACE_SCHEMA_VERSION=4,AGENT_SPAN_NAMES={action:`agent.action`,approval:`agent.approval`,channelRequest:`agent.channel.request`,step:`agent.step`},AGENT_USAGE_ATTRIBUTES={inputTokens:`agent.usage.input_tokens`,outputTokens:`agent.usage.output_tokens`,cacheReadTokens:`agent.usage.cache_read_tokens`,cacheWriteTokens:`agent.usage.cache_write_tokens`};function agentInvocationSpanName(e){return e===void 0?`invoke_agent`:`invoke_agent ${e}`}function workflowInvocationSpanName(e){return`invoke_workflow ${e}`}function modelSpanName(e){return`chat ${e}`}function isAgentActivationSpan(e){return e.name===`agent.turn`||e.attributes[`gen_ai.operation.name`]===`invoke_agent`&&e.attributes[`agent.invocation.role`]!==`caller`&&typeof e.attributes[`agent.turn.id`]==`string`}function agentTurnIdentity(e){let t=e.attributes[`gen_ai.conversation.id`],n=e.attributes[`agent.turn.id`];return typeof n==`string`?`${typeof t==`string`?t:``}\0${n}`:void 0}export{AGENT_SPAN_NAMES,AGENT_TRACE_SCHEMA_VERSION,AGENT_USAGE_ATTRIBUTES,agentInvocationSpanName,agentTurnIdentity,isAgentActivationSpan,modelSpanName,workflowInvocationSpanName};
@@ -1 +1 @@
1
- import{ROOT_CONTEXT,SpanKind,trace}from"#compiled/@opentelemetry/api/index.js";import{actionIdempotencyKey}from"#instrumentation/lifecycle.js";import{agentSpanNamingAttributes}from"#tracing/agent-span-naming.js";import{agentTraceIdentityAttributes}from"#tracing/agent-otel-attributes.js";import{contentAttribute}from"#tracing/agent-otel-content.js";import{withChannelAudience}from"#tracing/channel-audience-context.js";import{recordAgentSpanError}from"#tracing/agent-span-error.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),r=e.resolveFallback(t),i=r===void 0?void 0:reserve(t,n,r),a=await e.actionContextFor(t.scope.sessionId,t.scope.turnId,t.callId);if(i===void 0){if(a===void 0)return;i=reserve(t,n,a)}a!==void 0&&startSpan(i,a.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:withChannelAudience(contextFromSpanContext({isRemote:!1,spanId:a,traceFlags:i.spanContext.traceFlags,traceId:i.spanContext.traceId}),n.scope.channelAudience),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(`execute_tool ${t.event.toolName}`,{attributes:toolAttributes(t.event),kind:SpanKind.INTERNAL,startTime:t.startTimeMs},n)),e.recordInputs)){let e=contentAttribute(t.event.input);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,i){let a=r.span;if(a===void 0||r.finished===!0)return;r.finished=!0;let o=r.terminal;if(i!==void 0)recordAgentSpanError(a,i.error);else if(o?.type===`tool.call.failed`)recordAgentSpanError(a,o.error);else if(o?.output.type===`error`)recordAgentSpanError(a,o.output.error);else if(o!==void 0&&e.recordOutputs){let e=contentAttribute(o.output.output);e!==void 0&&a.setAttribute(`gen_ai.tool.call.result`,e)}a.end(),t.delete(r.actionKey);let s=n.get(r.attemptId);s?.delete(r.idempotencyKey),s?.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,"gen_ai.tool.type":`function`,...agentSpanNamingAttributes(`execute_tool ${e.toolName}`,`execute_tool`),...agentTraceIdentityAttributes({rootSessionId:e.scope.rootSessionId??e.scope.sessionId,sessionId:e.scope.sessionId})}}function contextFromSpanContext(e){return trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext(e))}export{createAgentToolInstrumentation};
1
+ import{ROOT_CONTEXT,SpanKind,trace}from"#compiled/@opentelemetry/api/index.js";import{actionIdempotencyKey}from"#instrumentation/lifecycle.js";import{agentSpanNamingAttributes}from"#tracing/agent-span-naming.js";import{agentTraceIdentityAttributes}from"#tracing/agent-otel-attributes.js";import{contentAttribute}from"#tracing/agent-otel-content.js";import{withChannelAudience}from"#tracing/channel-audience-context.js";import{recordAgentSpanError}from"#tracing/agent-span-error.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),r=e.resolveFallback(t),i=r===void 0?void 0:reserve(t,n,r),a=await e.actionContextFor(t.scope.sessionId,t.scope.turnId,t.callId);if(i===void 0){if(a===void 0)return;i=reserve(t,n,a)}a!==void 0&&startSpan(i,a.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:withChannelAudience(contextFromSpanContext({isRemote:!1,spanId:a,traceFlags:i.spanContext.traceFlags,traceId:i.spanContext.traceId}),n.scope.channelAudience),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(`execute_tool ${t.event.toolName}`,{attributes:toolAttributes(t.event),kind:SpanKind.INTERNAL,startTime:t.startTimeMs},n)),e.recordInputs)){let e=contentAttribute(t.event.input);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,i){let a=r.span;if(a===void 0||r.finished===!0)return;r.finished=!0;let o=r.terminal;if(i!==void 0)recordAgentSpanError(a,i.error);else if(o?.type===`tool.call.failed`)recordAgentSpanError(a,o.error);else if(o?.output.type===`error`)recordAgentSpanError(a,o.output.error);else if(o!==void 0&&e.recordOutputs){let e=contentAttribute(o.output.output);e!==void 0&&a.setAttribute(`gen_ai.tool.call.result`,e)}a.end(),t.delete(r.actionKey);let s=n.get(r.attemptId);s?.delete(r.idempotencyKey),s?.size===0&&n.delete(r.attemptId)}}function toolAttributes(e){return{...e.scope.functionId===void 0?{}:{"gen_ai.agent.name":e.scope.functionId},"gen_ai.operation.name":`execute_tool`,"gen_ai.tool.call.id":e.callId,"gen_ai.tool.name":e.toolName,"gen_ai.tool.type":`function`,...agentSpanNamingAttributes(`execute_tool ${e.toolName}`,`execute_tool`),...agentTraceIdentityAttributes({rootSessionId:e.scope.rootSessionId??e.scope.sessionId,sessionId:e.scope.sessionId})}}function contextFromSpanContext(e){return trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext(e))}export{createAgentToolInstrumentation};
@@ -1,3 +1,3 @@
1
- import { n as defaultMessageReducer, t as useEveAgent } from "../chunks/use-eve-agent-CMdMlS7Y.js";
1
+ import { n as defaultMessageReducer, t as useEveAgent } from "../chunks/use-eve-agent-D0YnDLi_.js";
2
2
 
3
3
  export { defaultMessageReducer, useEveAgent };
@@ -1,3 +1,3 @@
1
- import { t as useEveAgent } from "../chunks/use-eve-agent-CMdMlS7Y.js";
1
+ import { t as useEveAgent } from "../chunks/use-eve-agent-D0YnDLi_.js";
2
2
 
3
3
  export { useEveAgent };
@@ -28,24 +28,22 @@ A config that selects a static Gateway model is compile-only. A config that cont
28
28
 
29
29
  `model` accepts a gateway model id string, which routes through the [Vercel AI Gateway](https://vercel.com/docs/ai-gateway). To call a provider directly and configure the model in code, pass a provider-authored `LanguageModel`.
30
30
 
31
- Provider-specific AI SDK packages are regular project dependencies. A fresh `eve init` app includes the core `ai` package, but it does not install every provider package. Install the provider package you import, then set that provider's API key:
32
-
33
- ```bash
34
- npm install @ai-sdk/anthropic
35
- ```
31
+ Use eve's helpers for direct OpenAI or Anthropic access without installing another provider package:
36
32
 
37
33
  ```ts title="agent/agent.ts"
38
- import { anthropic } from "@ai-sdk/anthropic";
39
34
  import { defineAgent } from "eve";
35
+ import { anthropic } from "eve/models/anthropic";
40
36
 
41
37
  export default defineAgent({
42
- model: anthropic("claude-opus-4-8"),
38
+ model: anthropic(), // claude-sonnet-5
43
39
  });
44
40
  ```
45
41
 
46
- Direct provider model ids use the provider's native format. For Anthropic, the
47
- version uses hyphens (`claude-opus-4-8`), while the Gateway id above uses a dot
48
- (`anthropic/claude-opus-4.8`).
42
+ `openai()` from `eve/models/openai` defaults to `gpt-5.6-luna-fast`. Both helpers accept an optional native provider model ID and use `OPENAI_API_KEY` or `ANTHROPIC_API_KEY`. During local development they can also use credentials saved through `/login`. Deployments require their API key in the server environment.
43
+
44
+ For a local ChatGPT subscription, use `chatgpt()` from `eve/models/openai` and sign in with `/login`. It defaults to `gpt-5.6-luna-fast` and cannot run in a deployment.
45
+
46
+ `/login` can switch a static Gateway string to an eve helper and manage its import. `/model` changes the selected model and settings immediately. Custom provider SDK calls and dynamic expressions retain their authored behavior and require manual source edits. You can still install an AI SDK provider package and pass its `LanguageModel` when you need provider-specific configuration.
49
47
 
50
48
  Model use is subject to the terms, data-processing commitments, retention behavior, and available controls of the selected provider and routing path. Review the [AI Gateway model catalog](https://vercel.com/ai-gateway/models) for gateway-routed models, and review the provider's terms when you configure a direct `LanguageModel`.
51
49
 
@@ -163,10 +161,12 @@ export default defineAgent({
163
161
  });
164
162
  ```
165
163
 
166
- `sessionTimeoutMs` sets an absolute lifetime for every session, including
167
- delegated sessions. It defaults to 30 days, starts at creation, and survives
168
- restarts and redeployments. At the deadline, eve lets an active turn settle,
169
- then emits `session.completed` and releases the continuation; the next
164
+ `sessionTimeoutMs` sets the lifetime for every session, including delegated
165
+ sessions. It defaults to 30 days and starts at creation. Each successful
166
+ deployment handoff or legacy-session import restarts the original configured
167
+ duration. Process restarts, ordinary messages, and failed or skipped handoffs
168
+ keep the existing deadline. At the deadline, eve lets an active turn settle,
169
+ then emits `session.completed` and releases every continuation address; the next
170
170
  qualifying channel message starts fresh. Set it to `false` to disable the
171
171
  timeout. Expiration does not delete stored session data.
172
172
 
@@ -275,10 +275,10 @@ events, and side effects. Use stable idempotency keys for non-idempotent tools.
275
275
 
276
276
  eve ends a batch before it waits for input, authorization, or blocking
277
277
  coordination, and before it acknowledges a background task. A batch can also
278
- end below the configured ceiling when the turn completes. Steering cancels the
279
- active model-and-tool cycle, commits earlier completed cycles in the batch, and
280
- starts the replacement turn from that state. It does not roll the session back
281
- to the beginning of the batch. This option is experimental and may change or
278
+ end below the configured ceiling when the turn completes or steering arrives.
279
+ Before assistant output begins, steering can interrupt pending model generation.
280
+ Executing tools finish safely before the batch yields and applies the correction.
281
+ This option is experimental and may change or
282
282
  disappear in any release. See [Execution model and
283
283
  durability](./concepts/execution-model-and-durability#resuming-after-a-crash)
284
284
  for the retry behavior.
@@ -304,10 +304,10 @@ export default defineAgent({
304
304
  });
305
305
  ```
306
306
 
307
- This will be applied to the session run and every turn run the session
308
- dispatches, as well as the run that collects session activity. Runs eve
309
- starts for other purposes keep the world's default: session timeouts,
310
- background tasks, and [workflow tools](./tools/workflows).
307
+ This applies to every run that owns the session, including successor owners
308
+ started after a deployment handoff, and to the run that collects session
309
+ activity. Runs eve starts for other purposes keep the world's default: session
310
+ timeouts, background tasks, and [workflow tools](./tools/workflows).
311
311
 
312
312
  The value applies per agent. A [subagent](./subagents) that runs its own session
313
313
  uses its own value, unlike `experimental.workflow.world`, which is root-only.
@@ -108,7 +108,9 @@ bot.onNewMention(async (thread, message) => {
108
108
 
109
109
  ### Steering
110
110
 
111
- Messages default to `turnPolicy: "steer"`: a message sent while an eve turn is active is durably buffered, then cancels that turn and starts as its replacement. Set `turnPolicy: "queue"` when the active turn should finish first:
111
+ Messages default to `turnPolicy: "steer"`. Before assistant answer output or local tool execution begins, steering interrupts pending model generation and applies the correction in the same turn. Executing tools finish and checkpoint their results first. After answer output starts, steering waits for the next committed workflow boundary. Reasoning and search progress do not count as answer output; interrupted provider-managed search may run again.
112
+
113
+ Set `turnPolicy: "queue"` when the active turn should finish first:
112
114
 
113
115
  ```ts
114
116
  bot.onSubscribedMessage(async (thread, message) => {
@@ -119,7 +121,7 @@ bot.onSubscribedMessage(async (thread, message) => {
119
121
  });
120
122
  ```
121
123
 
122
- Cancellation-backed steering emits `turn.cancelled`, and the replacement message starts a new turn with a new turn ID. Partial output and completed side effects from the interrupted turn are not rolled back. If no turn is active, the message is sent normally. You can set the policy once on `chatSdkChannel({ turnPolicy })` or override it per `send(...)`.
124
+ Steering preserves the turn ID and completed tool work. If no turn is active, the message starts a turn normally. You can set the policy once on `chatSdkChannel({ turnPolicy })` or override it per `send(...)`.
123
125
 
124
126
  This policy controls overlapping eve turns. Chat SDK's separate `concurrency` option controls overlapping webhook handlers; use `concurrency: "concurrent"` when each inbound message should reach the steering path immediately.
125
127