eve 0.66.3 → 0.67.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/src/channel/channel-address.d.ts +0 -2
  3. package/dist/src/channel/channel-address.js +1 -1
  4. package/dist/src/channel/channel-operations.d.ts +0 -5
  5. package/dist/src/channel/channel-operations.js +1 -1
  6. package/dist/src/channel/compiled-channel.d.ts +8 -0
  7. package/dist/src/channel/compiled-channel.js +2 -2
  8. package/dist/src/channel/conversation-context.js +1 -1
  9. package/dist/src/channel/routes.d.ts +1 -2
  10. package/dist/src/channel/schedule-auth.d.ts +0 -2
  11. package/dist/src/channel/schedule-auth.js +1 -1
  12. package/dist/src/channel/schedule.d.ts +2 -2
  13. package/dist/src/channel/schedule.js +1 -1
  14. package/dist/src/channel/types.d.ts +8 -13
  15. package/dist/src/chunks/{use-eve-agent-Di1u2zKu.js → use-eve-agent-D4HVZBjn.js} +1 -6
  16. package/dist/src/chunks/{use-eve-agent-PbSMyJ6e.js → use-eve-agent-DXcE_8Ja.js} +1 -6
  17. package/dist/src/cli/acp/command.js +3 -3
  18. package/dist/src/cli/application-root.d.ts +0 -2
  19. package/dist/src/cli/application-root.js +1 -1
  20. package/dist/src/cli/commands/agent-instructions.d.ts +0 -4
  21. package/dist/src/cli/commands/agent-instructions.js +3 -3
  22. package/dist/src/cli/commands/extension-init.js +1 -1
  23. package/dist/src/cli/commands/init-agent-workspace.js +1 -1
  24. package/dist/src/cli/commands/init-project.d.ts +0 -1
  25. package/dist/src/cli/commands/init-project.js +1 -1
  26. package/dist/src/cli/commands/init.js +1 -1
  27. package/dist/src/cli/commands/logs.d.ts +3 -3
  28. package/dist/src/cli/commands/logs.js +1 -1
  29. package/dist/src/cli/commands/register-integration-commands.js +1 -1
  30. package/dist/src/cli/commands/trace.js +1 -1
  31. package/dist/src/cli/dev/command.d.ts +9 -5
  32. package/dist/src/cli/dev/command.js +1 -3
  33. package/dist/src/cli/dev/diagnostic-dump.js +1 -1
  34. package/dist/src/cli/dev/environment.js +1 -1
  35. package/dist/src/cli/dev/run-interactive-ui.d.ts +0 -1
  36. package/dist/src/cli/dev/run-interactive-ui.js +1 -1
  37. package/dist/src/cli/dev/tui/blocks.js +1 -1
  38. package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -1
  39. package/dist/src/cli/dev/tui/question-panel.d.ts +4 -4
  40. package/dist/src/cli/dev/tui/question-panel.js +1 -1
  41. package/dist/src/cli/dev/tui/runner.d.ts +0 -1
  42. package/dist/src/cli/dev/tui/runner.js +2 -2
  43. package/dist/src/cli/dev/tui/terminal-renderer.js +8 -9
  44. package/dist/src/cli/dev/tui/theme.d.ts +1 -1
  45. package/dist/src/cli/dev/url-target.js +1 -1
  46. package/dist/src/cli/invoke/command.d.ts +2 -5
  47. package/dist/src/cli/invoke/command.js +1 -1
  48. package/dist/src/cli/invoke/invoke.d.ts +2 -2
  49. package/dist/src/cli/invoke/invoke.js +1 -1
  50. package/dist/src/cli/invoke/result.d.ts +14 -194
  51. package/dist/src/cli/invoke/result.js +1 -1
  52. package/dist/src/cli/run.d.ts +0 -4
  53. package/dist/src/cli/run.js +2 -2
  54. package/dist/src/cli/telemetry/index.js +1 -1
  55. package/dist/src/cli/ui/output.d.ts +0 -15
  56. package/dist/src/cli/ui/output.js +2 -5
  57. package/dist/src/client/eve-agent-store.js +1 -1
  58. package/dist/src/client/message-reducer.js +1 -1
  59. package/dist/src/compiled/.vendor-stamp.json +1 -1
  60. package/dist/src/compiler/artifacts.js +1 -1
  61. package/dist/src/compiler/compile-agent.js +1 -1
  62. package/dist/src/compiler/compile-from-memory.d.ts +0 -1
  63. package/dist/src/compiler/compile-from-memory.js +1 -1
  64. package/dist/src/compiler/extension-compatibility.d.ts +25 -18
  65. package/dist/src/compiler/extension-compatibility.js +1 -1
  66. package/dist/src/compiler/manifest.d.ts +48 -14
  67. package/dist/src/compiler/manifest.js +1 -1
  68. package/dist/src/compiler/normalize-agent-config.js +1 -1
  69. package/dist/src/compiler/normalize-channel.js +1 -1
  70. package/dist/src/compiler/normalize-connection.js +1 -1
  71. package/dist/src/compiler/normalize-manifest-helpers.js +1 -1
  72. package/dist/src/compiler/normalize-subagent.d.ts +0 -2
  73. package/dist/src/compiler/normalize-subagent.js +1 -1
  74. package/dist/src/compiler/remote-agent-node.d.ts +0 -2
  75. package/dist/src/compiler/remote-agent-node.js +1 -1
  76. package/dist/src/compiler/workspace-resources.js +1 -1
  77. package/dist/src/context/dynamic-subagent-lifecycle.js +1 -1
  78. package/dist/src/context/keys.d.ts +0 -3
  79. package/dist/src/context/keys.js +1 -1
  80. package/dist/src/context/memory-lifecycle.d.ts +1 -0
  81. package/dist/src/context/memory-lifecycle.js +1 -1
  82. package/dist/src/discover/diagnostics.d.ts +0 -4
  83. package/dist/src/discover/diagnostics.js +1 -1
  84. package/dist/src/discover/project.js +1 -1
  85. package/dist/src/eve-channel/create-request.d.ts +0 -3
  86. package/dist/src/eve-channel/create-request.js +1 -1
  87. package/dist/src/eve-channel/index.js +1 -1
  88. package/dist/src/eve-channel/request.js +1 -1
  89. package/dist/src/eve-channel/types.d.ts +1 -1
  90. package/dist/src/execution/delegated-session-context.d.ts +2 -0
  91. package/dist/src/execution/delegated-session-context.js +1 -0
  92. package/dist/src/execution/dynamic-connections.d.ts +4 -1
  93. package/dist/src/execution/dynamic-connections.js +1 -1
  94. package/dist/src/execution/dynamic-workflow/tool.js +1 -1
  95. package/dist/src/execution/effective-agent-config.js +1 -1
  96. package/dist/src/execution/legacy-session/input.d.ts +0 -2
  97. package/dist/src/execution/legacy-session/input.js +1 -1
  98. package/dist/src/execution/legacy-session/prepare-step.d.ts +0 -1
  99. package/dist/src/execution/legacy-session/turn-workflow.js +1 -1
  100. package/dist/src/execution/node-step.d.ts +4 -2
  101. package/dist/src/execution/node-step.js +1 -1
  102. package/dist/src/execution/proxied-deliver-step.js +1 -1
  103. package/dist/src/execution/publish-channel-event.d.ts +23 -0
  104. package/dist/src/execution/publish-channel-event.js +1 -0
  105. package/dist/src/execution/runtime-context.js +1 -1
  106. package/dist/src/execution/sandbox/bindings/docker-templates.js +1 -1
  107. package/dist/src/execution/sandbox/bindings/just-bash.js +1 -1
  108. package/dist/src/execution/sandbox/bindings/microsandbox-templates.js +1 -1
  109. package/dist/src/execution/session/entry.js +1 -1
  110. package/dist/src/execution/session/event-sink.d.ts +1 -1
  111. package/dist/src/execution/session/event-sink.js +1 -1
  112. package/dist/src/execution/session/finalization.d.ts +1 -4
  113. package/dist/src/execution/session/finalization.js +1 -1
  114. package/dist/src/execution/session/handoff.d.ts +1 -3
  115. package/dist/src/execution/session/handoff.js +1 -1
  116. package/dist/src/execution/session/input-queue.d.ts +0 -1
  117. package/dist/src/execution/session/input-queue.js +1 -1
  118. package/dist/src/execution/session/next-input.d.ts +0 -1
  119. package/dist/src/execution/session/next-input.js +1 -1
  120. package/dist/src/execution/session/program.d.ts +0 -3
  121. package/dist/src/execution/session/program.js +1 -1
  122. package/dist/src/execution/session/turn-step-result.d.ts +1 -2
  123. package/dist/src/execution/session/turn-step-result.js +1 -1
  124. package/dist/src/execution/session/turn-step.js +1 -1
  125. package/dist/src/execution/session/turn.d.ts +2 -2
  126. package/dist/src/execution/session/turn.js +1 -1
  127. package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
  128. package/dist/src/execution/tasks/parent/hitl-proxy-steps.js +1 -1
  129. package/dist/src/execution/tools/agent-router-workflow.js +1 -1
  130. package/dist/src/execution/tools/agent-router.d.ts +0 -2
  131. package/dist/src/execution/tools/agent-router.js +1 -1
  132. package/dist/src/execution/tools/ask-question-workflow.js +1 -1
  133. package/dist/src/execution/tools/connection-search.d.ts +1 -0
  134. package/dist/src/execution/tools/connection-search.js +1 -1
  135. package/dist/src/execution/tools/sleep-workflow.js +1 -1
  136. package/dist/src/execution/tools/subagent/invoke-preparation.js +1 -1
  137. package/dist/src/execution/tools/subagent/start.js +1 -1
  138. package/dist/src/extensions/code/extension/lib/connect-authentication.js +1 -1
  139. package/dist/src/extensions/code/extension/lib/github-shell.js +1 -1
  140. package/dist/src/extensions/code/extension/lib/prwatch-github.js +1 -1
  141. package/dist/src/framework/sources/registry.js +1 -1
  142. package/dist/src/harness/approval-delivery-coordinator.d.ts +3 -13
  143. package/dist/src/harness/approval-delivery-coordinator.js +1 -1
  144. package/dist/src/harness/authorization.d.ts +0 -9
  145. package/dist/src/harness/authorization.js +1 -1
  146. package/dist/src/harness/emission.d.ts +2 -3
  147. package/dist/src/harness/emission.js +1 -1
  148. package/dist/src/harness/input-request-resolution.d.ts +2 -0
  149. package/dist/src/harness/input-request-resolution.js +1 -1
  150. package/dist/src/harness/input-requests.d.ts +3 -3
  151. package/dist/src/harness/input-requests.js +1 -1
  152. package/dist/src/harness/pending-input-batches.d.ts +3 -3
  153. package/dist/src/harness/pending-input-batches.js +1 -1
  154. package/dist/src/harness/provider-safety.d.ts +9 -0
  155. package/dist/src/harness/provider-safety.js +1 -1
  156. package/dist/src/harness/proxy-input-requests.d.ts +2 -0
  157. package/dist/src/harness/proxy-input-requests.js +1 -1
  158. package/dist/src/harness/session-limit-enforcement.d.ts +2 -3
  159. package/dist/src/harness/session-limit-enforcement.js +1 -1
  160. package/dist/src/harness/step-hooks.js +1 -1
  161. package/dist/src/harness/tool-loop.js +2 -2
  162. package/dist/src/harness/tools.js +1 -1
  163. package/dist/src/harness/turn-cancellation.d.ts +2 -7
  164. package/dist/src/harness/turn-cancellation.js +1 -1
  165. package/dist/src/harness/types.d.ts +11 -13
  166. package/dist/src/harness/workflow-stream-error.d.ts +0 -7
  167. package/dist/src/harness/workflow-stream-error.js +1 -1
  168. package/dist/src/instrumentation/runtime.js +1 -1
  169. package/dist/src/instrumentation/session-context.js +1 -1
  170. package/dist/src/instrumentation/session-init.js +1 -1
  171. package/dist/src/internal/application/cache-metadata.js +1 -1
  172. package/dist/src/internal/application/compiled-artifacts.js +1 -1
  173. package/dist/src/internal/application/optional-package-import.js +1 -1
  174. package/dist/src/internal/application/optional-package-install.js +1 -1
  175. package/dist/src/internal/application/output-publication-lock.js +1 -1
  176. package/dist/src/internal/application/package.js +1 -1
  177. package/dist/src/internal/application/paths.js +1 -1
  178. package/dist/src/internal/application/tsconfig-dependencies.js +1 -1
  179. package/dist/src/internal/authored-asset-import-plugin.js +1 -1
  180. package/dist/src/internal/authored-definition/core.js +1 -1
  181. package/dist/src/internal/authored-module-evaluation-error.js +1 -1
  182. package/dist/src/internal/authored-module-loader.js +1 -2
  183. package/dist/src/internal/authored-package-boundary.d.ts +0 -1
  184. package/dist/src/internal/authored-package-boundary.js +1 -1
  185. package/dist/src/internal/authored-relative-extension-resolver.js +1 -1
  186. package/dist/src/internal/bundler/extension-scope-plugin.js +1 -1
  187. package/dist/src/internal/bundler/nitro-rolldown.d.ts +3 -1
  188. package/dist/src/internal/bundler/nitro-rolldown.js +1 -1
  189. package/dist/src/internal/bundler/vendored-dependency-log.d.ts +7 -0
  190. package/dist/src/internal/bundler/vendored-dependency-log.js +1 -0
  191. package/dist/src/internal/external-resources-snapshot.d.ts +46 -0
  192. package/dist/src/internal/external-resources-snapshot.js +1 -0
  193. package/dist/src/internal/external-resources.d.ts +20 -0
  194. package/dist/src/internal/external-resources.js +1 -0
  195. package/dist/src/internal/gateway.d.ts +2 -0
  196. package/dist/src/internal/gateway.js +1 -1
  197. package/dist/src/internal/instrumentation-layout.js +1 -1
  198. package/dist/src/internal/invocation/workflow-execution.d.ts +0 -2
  199. package/dist/src/internal/invocation/workflow-execution.js +1 -1
  200. package/dist/src/internal/materialized-authored-modules.js +1 -1
  201. package/dist/src/internal/nitro/dev-runtime-artifacts-retention.js +1 -1
  202. package/dist/src/internal/nitro/dev-runtime-artifacts.js +1 -1
  203. package/dist/src/internal/nitro/dev-runtime-source-snapshot-copy.js +1 -1
  204. package/dist/src/internal/nitro/dev-runtime-source-snapshot-local-roots.js +1 -1
  205. package/dist/src/internal/nitro/dev-runtime-source-snapshot.js +1 -1
  206. package/dist/src/internal/nitro/host/build-application.js +1 -1
  207. package/dist/src/internal/nitro/host/build-extension.js +1 -1
  208. package/dist/src/internal/nitro/host/build-vercel-agent-summary.js +1 -1
  209. package/dist/src/internal/nitro/host/configure-nitro-routes.js +1 -1
  210. package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
  211. package/dist/src/internal/nitro/host/dev-authored-source-watcher.js +1 -1
  212. package/dist/src/internal/nitro/host/extension-external-dependency-plugin.js +1 -1
  213. package/dist/src/internal/nitro/host/instrumentation-entry.d.ts +3 -0
  214. package/dist/src/internal/nitro/host/instrumentation-entry.js +2 -0
  215. package/dist/src/internal/nitro/host/local-tracing-runtime-plugin.js +1 -1
  216. package/dist/src/internal/nitro/host/nitro-bundler-config.js +1 -1
  217. package/dist/src/internal/nitro/host/schedule-task-routes.d.ts +1 -25
  218. package/dist/src/internal/nitro/host/schedule-task-routes.js +2 -2
  219. package/dist/src/internal/nitro/host/start-development-server.d.ts +0 -8
  220. package/dist/src/internal/nitro/host/start-development-server.js +2 -2
  221. package/dist/src/internal/nitro/host/start-production-server.js +1 -1
  222. package/dist/src/internal/nitro/host/workspace-extensions.js +1 -1
  223. package/dist/src/internal/nitro/host.d.ts +1 -1
  224. package/dist/src/internal/nitro/host.js +1 -1
  225. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
  226. package/dist/src/internal/nitro/routes/index.js +72 -3
  227. package/dist/src/internal/process/pnpm.js +1 -1
  228. package/dist/src/internal/vercel/build-agent-workspace.js +1 -1
  229. package/dist/src/internal/workflow/development-world-client.js +1 -1
  230. package/dist/src/internal/workflow/development-world-server.js +1 -1
  231. package/dist/src/internal/workflow-bundle/builder-support.js +1 -1
  232. package/dist/src/internal/workflow-bundle/builder.js +2 -2
  233. package/dist/src/internal/workflow-bundle/workflow-builders.js +1 -1
  234. package/dist/src/node_modules/.pnpm/{@vercel_cli-config@0.2.7 → @vercel_cli-config@0.3.0}/node_modules/@vercel/cli-config/dist/index.js +1 -1
  235. package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_3fe44d656b2dcd93a04011e80966afff → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/authorization.js +1 -1
  236. package/dist/src/node_modules/.pnpm/@vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494/node_modules/@vercel/connect/dist/connector.js +1 -0
  237. package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_3fe44d656b2dcd93a04011e80966afff → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/installation.js +1 -1
  238. package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_3fe44d656b2dcd93a04011e80966afff → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/token.js +1 -1
  239. package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/token-util.js +1 -1
  240. package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/token.js +1 -1
  241. package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/version.js +1 -1
  242. package/dist/src/protocol/message.d.ts +4 -0
  243. package/dist/src/protocol/message.js +1 -1
  244. package/dist/src/public/channels/chat-sdk/chatSdkChannel.d.ts +0 -1
  245. package/dist/src/public/channels/chat-sdk/chatSdkChannel.js +1 -1
  246. package/dist/src/public/channels/github/api.d.ts +0 -10
  247. package/dist/src/public/channels/github/api.js +1 -1
  248. package/dist/src/public/channels/mcp.js +1 -1
  249. package/dist/src/public/channels/slack/app-manifest.d.ts +9 -0
  250. package/dist/src/public/channels/slack/app-manifest.js +1 -0
  251. package/dist/src/public/channels/slack/hitl.d.ts +0 -4
  252. package/dist/src/public/channels/slack/hitl.js +2 -2
  253. package/dist/src/public/channels/slack/inbound-content.js +6 -3
  254. package/dist/src/public/channels/slack/mrkdwn.d.ts +0 -2
  255. package/dist/src/public/channels/slack/mrkdwn.js +1 -1
  256. package/dist/src/public/channels/slack/slackChannel.d.ts +4 -1
  257. package/dist/src/public/channels/slack/slackChannel.js +1 -1
  258. package/dist/src/public/channels/upload-policy.d.ts +0 -11
  259. package/dist/src/public/channels/upload-policy.js +1 -1
  260. package/dist/src/public/definitions/remote-agent.d.ts +0 -9
  261. package/dist/src/public/definitions/workspace-agent.d.ts +0 -3
  262. package/dist/src/public/definitions/workspace-agent.js +1 -1
  263. package/dist/src/public/next/server.js +1 -1
  264. package/dist/src/public/nuxt/dev-server.js +1 -1
  265. package/dist/src/public/sveltekit/dev-server.js +1 -1
  266. package/dist/src/runtime/agent/bootstrap.d.ts +0 -1
  267. package/dist/src/runtime/agent/bootstrap.js +1 -1
  268. package/dist/src/runtime/connections/mcp-client.js +1 -1
  269. package/dist/src/runtime/connections/mcp-tracing.d.ts +27 -0
  270. package/dist/src/runtime/connections/mcp-tracing.js +1 -0
  271. package/dist/src/runtime/resolve-agent-graph.js +1 -1
  272. package/dist/src/runtime/resolve-agent.js +1 -1
  273. package/dist/src/runtime/subagents/dynamic-agent-config.d.ts +0 -2
  274. package/dist/src/runtime/subagents/dynamic-agent-config.js +1 -1
  275. package/dist/src/runtime/subagents/dynamic-remote-agent-config.d.ts +0 -2
  276. package/dist/src/runtime/subagents/dynamic-remote-agent-config.js +1 -1
  277. package/dist/src/runtime/types.d.ts +1 -2
  278. package/dist/src/self-modification/extension/subagents/agent/tools/search_traces.js +1 -1
  279. package/dist/src/services/dev-client/vercel-auth-error.d.ts +1 -9
  280. package/dist/src/services/dev-client/vercel-auth-error.js +2 -3
  281. package/dist/src/setup/boxes/select-model.d.ts +2 -36
  282. package/dist/src/setup/boxes/select-model.js +1 -1
  283. package/dist/src/setup/flows/model-source-change.js +1 -1
  284. package/dist/src/setup/flows/provider.d.ts +2 -45
  285. package/dist/src/setup/flows/provider.js +1 -4
  286. package/dist/src/setup/primitives/pm/pnpm.js +1 -1
  287. package/dist/src/setup/primitives/run-vercel.js +1 -1
  288. package/dist/src/setup/project-resolution.d.ts +0 -2
  289. package/dist/src/setup/project-resolution.js +1 -1
  290. package/dist/src/setup/provider-settings.js +1 -1
  291. package/dist/src/setup/scaffold/connections/catalog.d.ts +0 -13
  292. package/dist/src/setup/scaffold/connections/catalog.js +1 -1
  293. package/dist/src/setup/scaffold/create/project.js +1 -1
  294. package/dist/src/setup/scaffold/version-tokens.js +1 -1
  295. package/dist/src/setup/scaffold/workspace-root.js +1 -1
  296. package/dist/src/setup/vercel-api-failure.d.ts +0 -2
  297. package/dist/src/setup/vercel-api-failure.js +1 -1
  298. package/dist/src/setup/vercel-project.d.ts +2 -21
  299. package/dist/src/setup/vercel-project.js +0 -0
  300. package/dist/src/setup/verified-remote-agent.d.ts +1 -0
  301. package/dist/src/setup/verified-remote-agent.js +1 -1
  302. package/dist/src/shared/action-types.d.ts +2 -2
  303. package/dist/src/shared/agent-definition.d.ts +0 -9
  304. package/dist/src/shared/agent-turn-outcome.d.ts +1 -1
  305. package/dist/src/shared/channel-definition.d.ts +2 -2
  306. package/dist/src/shared/conversation-context.d.ts +0 -4
  307. package/dist/src/shared/conversation-context.js +1 -1
  308. package/dist/src/shared/conversation-identity.d.ts +2 -0
  309. package/dist/src/shared/conversation-identity.js +1 -0
  310. package/dist/src/shared/skill-paths.d.ts +0 -13
  311. package/dist/src/shared/skill-paths.js +2 -2
  312. package/dist/src/shared/validate-authorization.js +1 -1
  313. package/dist/src/shared/vercel-connect-metadata.d.ts +12 -0
  314. package/dist/src/shared/vercel-connect-metadata.js +1 -0
  315. package/dist/src/subagents/agent-handle-errors.d.ts +0 -4
  316. package/dist/src/subagents/agent-handle-errors.js +1 -1
  317. package/dist/src/subagents/callback-route.js +1 -1
  318. package/dist/src/subagents/callback-step.d.ts +0 -22
  319. package/dist/src/subagents/callback-step.js +1 -1
  320. package/dist/src/subagents/event-proxy-step.js +1 -1
  321. package/dist/src/subagents/hitl-proxy.d.ts +3 -5
  322. package/dist/src/subagents/hitl-proxy.js +1 -1
  323. package/dist/src/subagents/invocation.d.ts +5 -6
  324. package/dist/src/subagents/parent-notification.d.ts +1 -18
  325. package/dist/src/subagents/parent-notification.js +1 -1
  326. package/dist/src/subagents/remote-dispatch.js +1 -1
  327. package/dist/src/subagents/tool.d.ts +0 -3
  328. package/dist/src/subagents/tool.js +1 -1
  329. package/dist/src/svelte/index.js +1 -1
  330. package/dist/src/svelte/use-eve-agent.js +1 -1
  331. package/dist/src/tools/framework/agent-contract.d.ts +0 -2
  332. package/dist/src/tools/framework/agent-contract.js +1 -1
  333. package/dist/src/tracing/agent-action-instrumentation.js +1 -1
  334. package/dist/src/tracing/agent-approval-instrumentation.js +1 -1
  335. package/dist/src/tracing/agent-invocation-coordinator.js +1 -1
  336. package/dist/src/tracing/agent-memory-instrumentation.js +1 -1
  337. package/dist/src/tracing/agent-otel-attributes.js +1 -1
  338. package/dist/src/tracing/agent-otel-provider.js +2 -2
  339. package/dist/src/tracing/agent-otel-session-context.js +1 -1
  340. package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
  341. package/dist/src/tracing/agent-tool-span-context.d.ts +15 -0
  342. package/dist/src/tracing/agent-tool-span-context.js +1 -0
  343. package/dist/src/tracing/agent-trace-context-store.d.ts +0 -2
  344. package/dist/src/tracing/agent-trace-context-store.js +1 -1
  345. package/dist/src/tracing/conversation-context.d.ts +0 -2
  346. package/dist/src/tracing/conversation-context.js +1 -1
  347. package/dist/src/tracing/install-instrumentation-runtime.js +1 -1
  348. package/dist/src/tracing/otel-declaration.d.ts +4 -9
  349. package/dist/src/vue/index.js +1 -1
  350. package/dist/src/vue/use-eve-agent.js +1 -1
  351. package/docs/agent-config.md +19 -13
  352. package/docs/channels/chat-sdk.mdx +1 -1
  353. package/docs/channels/custom.mdx +1 -1
  354. package/docs/channels/eve.mdx +4 -4
  355. package/docs/channels/mcp.mdx +10 -10
  356. package/docs/channels/slack.mdx +1 -1
  357. package/docs/concepts/sessions-runs-and-streaming.md +5 -6
  358. package/docs/connections/overview.mdx +22 -0
  359. package/docs/guides/deployment/overview.md +1 -1
  360. package/docs/guides/deployment/self-hosting.md +1 -1
  361. package/docs/guides/deployment/vercel.mdx +2 -2
  362. package/docs/guides/dev-tui.md +6 -6
  363. package/docs/guides/dynamic-capabilities.md +2 -2
  364. package/docs/guides/frontend/overview.mdx +5 -3
  365. package/docs/guides/hooks.md +4 -2
  366. package/docs/guides/instrumentation/agent-runs.mdx +7 -7
  367. package/docs/guides/instrumentation/instrumentation.mdx +22 -5
  368. package/docs/guides/instrumentation/otel.mdx +30 -0
  369. package/docs/guides/remote-agents.md +3 -4
  370. package/docs/guides/self-modification.md +1 -1
  371. package/docs/memory/custom-provider.md +1 -1
  372. package/docs/protocols/acp.md +1 -1
  373. package/docs/reference/cli.md +91 -97
  374. package/docs/schedules.mdx +4 -5
  375. package/docs/subagents/index.mdx +5 -7
  376. package/docs/tools/human-in-the-loop.md +4 -0
  377. package/docs/tools/overview.mdx +2 -0
  378. package/docs/tools/workflows.mdx +1 -1
  379. package/docs/tutorial/remember-definitions.mdx +1 -1
  380. package/docs/tutorial/ship-it.mdx +1 -1
  381. package/package.json +3 -2
  382. package/dist/src/cli/commands/channels.d.ts +0 -9
  383. package/dist/src/cli/commands/channels.js +0 -1
  384. package/dist/src/cli/commands/init-confirm.d.ts +0 -12
  385. package/dist/src/cli/commands/init-confirm.js +0 -1
  386. package/dist/src/execution/effective-output-schema.d.ts +0 -22
  387. package/dist/src/execution/effective-output-schema.js +0 -1
  388. package/dist/src/node_modules/.pnpm/@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_3fe44d656b2dcd93a04011e80966afff/node_modules/@vercel/connect/dist/connector.js +0 -1
  389. package/dist/src/setup/gateway-models.d.ts +0 -10
  390. package/dist/src/setup/gateway-models.js +0 -1
  391. package/dist/src/shared/run-mode.d.ts +0 -7
  392. package/dist/src/shared/run-mode.js +0 -1
  393. package/dist/src/subagents/parent-result.d.ts +0 -14
  394. package/dist/src/subagents/parent-result.js +0 -1
  395. /package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_3fe44d656b2dcd93a04011e80966afff → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/index.js +0 -0
  396. /package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_3fe44d656b2dcd93a04011e80966afff → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/internal/base-url.js +0 -0
  397. /package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_3fe44d656b2dcd93a04011e80966afff → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/internal/default-scopes.js +0 -0
  398. /package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_3fe44d656b2dcd93a04011e80966afff → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/internal/env.js +0 -0
  399. /package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_3fe44d656b2dcd93a04011e80966afff → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/internal/url-validation.js +0 -0
  400. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/auth-errors.js +0 -0
  401. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/exchange-vercel-oidc-token.js +0 -0
  402. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/get-context.js +0 -0
  403. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/get-vercel-oidc-token-sync.js +0 -0
  404. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/get-vercel-oidc-token-with-refresh.js +0 -0
  405. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/index.js +0 -0
  406. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/oauth.js +0 -0
  407. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/token-error.js +0 -0
  408. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/token-io.js +0 -0
  409. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/verify-vercel-oidc-token.js +0 -0
@@ -1 +1 @@
1
- import{createHash}from"node:crypto";import{cp,mkdir,readFile,readdir,rm}from"node:fs/promises";import{join,posix}from"node:path";import{normalizeLogicalPath}from"#discover/filesystem.js";import{ROOT_COMPILED_AGENT_NODE_ID,deriveResourceRootEntries}from"#compiler/manifest.js";import{normalizeSkillPackage,writeSkillPackageDirectory}from"#shared/skill-package.js";const RESOURCES_DIRECTORY=`workspace-resources`,RESOURCE_SKILLS_DIRECTORY=`skills`;async function materializeWorkspaceResources(e){let t=join(e.compileDirectoryPath,RESOURCES_DIRECTORY);await rm(t,{force:!0,recursive:!0});let n=await materializeNode({nodeId:ROOT_COMPILED_AGENT_NODE_ID,resourcesRoot:t,manifest:e.manifest}),r=await Promise.all(e.manifest.subagents.map(async e=>e.configResolver===void 0?{...e,agent:await materializeNode({nodeId:e.nodeId,resourcesRoot:t,manifest:e.agent})}:{...e,agent:await materializeNode({nodeId:e.nodeId,resourcesRoot:t,manifest:e.agent}),configResolver:e.configResolver}));return{...n,kind:e.manifest.kind,extensionMounts:e.manifest.extensionMounts,subagents:r,version:e.manifest.version}}function createResourceRoot(e,t,n){return{contentHash:n,logicalPath:normalizeLogicalPath(join(RESOURCES_DIRECTORY,t)),rootEntries:deriveResourceRootEntries({sandboxWorkspaces:e.sandboxWorkspaces,skills:e.skills})}}async function materializeNode(e){let t=join(e.resourcesRoot,e.nodeId);await mkdir(t,{recursive:!0});let n=join(t,`workspace`);await Promise.all([mkdir(n,{recursive:!0}),mkdir(join(t,RESOURCE_SKILLS_DIRECTORY),{recursive:!0})]);for(let t of e.manifest.sandboxWorkspaces)await copyDirectoryContents({sourcePath:t.sourcePath,targetPath:n});for(let n of e.manifest.skills)await materializeSkill({nodeRoot:t,skill:n});let r=await hashWorkspaceResourceRoot(t);return{...e.manifest,skills:e.manifest.skills.map(stripSkillPackageFiles),workspaceResourceRoot:createResourceRoot(e.manifest,e.nodeId,r)}}async function materializeSkill(e){let t=join(e.nodeRoot,RESOURCE_SKILLS_DIRECTORY,e.skill.name);if(e.skill.sourceKind===`skill-package`){await cp(e.skill.rootPath,t,{recursive:!0});return}await writeSkillPackageDirectory({rootPath:e.nodeRoot,skill:normalizeSkillPackage(e.skill)})}function stripSkillPackageFiles(e){let{files:t,...n}=e;return n}async function copyDirectoryContents(e){let t=await readdir(e.sourcePath,{withFileTypes:!0});await mkdir(e.targetPath,{recursive:!0});for(let n of t)(n.isDirectory()||n.isFile())&&await cp(join(e.sourcePath,n.name),join(e.targetPath,n.name),{recursive:!0})}async function hashWorkspaceResourceRoot(e){let t=await listWorkspaceResourceFiles({logicalDirectoryPath:`.`,sourceDirectoryPath:e});if(t.sort((e,t)=>e.logicalPath.localeCompare(t.logicalPath)),t.length===0)return;let n=createHash(`sha256`);n.update(`eve-workspace-resource-root-v1\0`);for(let e of t){let t=await readFile(e.sourcePath);n.update(e.logicalPath),n.update(`\0`),n.update(String(t.byteLength)),n.update(`\0`),n.update(t),n.update(`\0`)}return n.digest(`hex`)}async function listWorkspaceResourceFiles(e){let t=[],n=await readdir(e.sourceDirectoryPath,{withFileTypes:!0});for(let r of n){if(!r.isDirectory()&&!r.isFile())continue;let n=join(e.sourceDirectoryPath,r.name),i=posix.join(e.logicalDirectoryPath,r.name);if(r.isDirectory()){t.push(...await listWorkspaceResourceFiles({logicalDirectoryPath:i,sourceDirectoryPath:n}));continue}t.push({logicalPath:i,sourcePath:n})}return t}export{materializeWorkspaceResources};
1
+ import{createHash}from"node:crypto";import{cp,mkdir,readFile,readdir,rm}from"node:fs/promises";import{join,posix}from"node:path";import{normalizeLogicalPath}from"#discover/filesystem.js";import{ROOT_COMPILED_AGENT_NODE_ID,deriveResourceRootEntries}from"#compiler/manifest.js";import{normalizeSkillPackage,writeSkillPackageDirectory}from"#shared/skill-package.js";const RESOURCES_DIRECTORY=`workspace-resources`,RESOURCE_SKILLS_DIRECTORY=`skills`;async function materializeWorkspaceResources(e){let t=join(e.compileDirectoryPath,RESOURCES_DIRECTORY);await rm(t,{force:!0,recursive:!0});let n=await materializeNode({nodeId:ROOT_COMPILED_AGENT_NODE_ID,resourcesRoot:t,manifest:e.manifest}),r=await Promise.all(e.manifest.subagents.map(async e=>e.configResolver===void 0?{...e,agent:await materializeNode({nodeId:e.nodeId,resourcesRoot:t,manifest:e.agent})}:{...e,agent:await materializeNode({nodeId:e.nodeId,resourcesRoot:t,manifest:e.agent}),configResolver:e.configResolver}));return{...n,kind:e.manifest.kind,extensionMounts:e.manifest.extensionMounts,subagents:r,version:e.manifest.version}}function resourceDirectoryName(e){return encodeURIComponent(e)}function createResourceRoot(e,t,n){return{contentHash:n,logicalPath:normalizeLogicalPath(join(RESOURCES_DIRECTORY,resourceDirectoryName(t))),rootEntries:deriveResourceRootEntries({sandboxWorkspaces:e.sandboxWorkspaces,skills:e.skills})}}async function materializeNode(e){let t=join(e.resourcesRoot,resourceDirectoryName(e.nodeId));await mkdir(t,{recursive:!0});let n=join(t,`workspace`);await Promise.all([mkdir(n,{recursive:!0}),mkdir(join(t,RESOURCE_SKILLS_DIRECTORY),{recursive:!0})]);for(let t of e.manifest.sandboxWorkspaces)await copyDirectoryContents({sourcePath:t.sourcePath,targetPath:n});for(let n of e.manifest.skills)await materializeSkill({nodeRoot:t,skill:n});let r=await hashWorkspaceResourceRoot(t);return{...e.manifest,skills:e.manifest.skills.map(stripSkillPackageFiles),workspaceResourceRoot:createResourceRoot(e.manifest,e.nodeId,r)}}async function materializeSkill(e){let t=join(e.nodeRoot,RESOURCE_SKILLS_DIRECTORY,e.skill.name);if(e.skill.sourceKind===`skill-package`){await cp(e.skill.rootPath,t,{recursive:!0});return}await writeSkillPackageDirectory({rootPath:e.nodeRoot,skill:normalizeSkillPackage(e.skill)})}function stripSkillPackageFiles(e){let{files:t,...n}=e;return n}async function copyDirectoryContents(e){let t=await readdir(e.sourcePath,{withFileTypes:!0});await mkdir(e.targetPath,{recursive:!0});for(let n of t)(n.isDirectory()||n.isFile())&&await cp(join(e.sourcePath,n.name),join(e.targetPath,n.name),{recursive:!0})}async function hashWorkspaceResourceRoot(e){let t=await listWorkspaceResourceFiles({logicalDirectoryPath:`.`,sourceDirectoryPath:e});if(t.sort((e,t)=>e.logicalPath.localeCompare(t.logicalPath)),t.length===0)return;let n=createHash(`sha256`);n.update(`eve-workspace-resource-root-v1\0`);for(let e of t){let t=await readFile(e.sourcePath);n.update(e.logicalPath),n.update(`\0`),n.update(String(t.byteLength)),n.update(`\0`),n.update(t),n.update(`\0`)}return n.digest(`hex`)}async function listWorkspaceResourceFiles(e){let t=[],n=await readdir(e.sourceDirectoryPath,{withFileTypes:!0});for(let r of n){if(!r.isDirectory()&&!r.isFile())continue;let n=join(e.sourceDirectoryPath,r.name),i=posix.join(e.logicalDirectoryPath,r.name);if(r.isDirectory()){t.push(...await listWorkspaceResourceFiles({logicalDirectoryPath:i,sourceDirectoryPath:n}));continue}t.push({logicalPath:i,sourcePath:n})}return t}export{materializeWorkspaceResources};
@@ -1 +1 @@
1
- import{createLogger}from"#internal/logging.js";import{SessionDynamicSubagentRuntimeRevisionKey,SessionDynamicSubagentSelectionsKey,TurnDynamicSubagentSelectionsKey}from"#context/keys.js";import{toErrorMessage}from"#shared/errors.js";import{buildResolveContext}from"#context/dynamic-resolve-context.js";import{createPreparedWorkflowToolHarnessDefinition}from"#execution/tools/workflow/background.js";import{createPreparedRuntimeSubagentTool}from"#runtime/subagents/registry.js";import{normalizeDynamicSubagentAgentConfig}from"#runtime/subagents/dynamic-agent-config.js";import{normalizeDynamicRemoteAgentConfig}from"#runtime/subagents/dynamic-remote-agent-config.js";const log=createLogger(`dynamic-subagents`),ALLOWED_DYNAMIC_SUBAGENT_EVENTS=new Set([`session.started`,`turn.started`]);async function resolveSelections(e){let t=await Promise.allSettled(e.resolvers.map(async t=>{let n=t.events[e.event.type];if(n===void 0)return[t.nodeId,null];let r=await n(e.event,buildResolveContext(e.ctx,e.messages));if(r==null)return[t.nodeId,null];if(isRemoteAgentDefinition(r)){let e=await normalizeDynamicRemoteAgentConfig({name:t.name,value:r}),n=t.tool===!1?{...e,tool:!1}:e,i=createPreparedRuntimeSubagentTool({description:n.description,kind:`remote`,logicalPath:t.logicalPath,name:t.name,nodeId:t.nodeId,outputSchema:n.outputSchema,path:n.path,sourceId:t.sourceId,sourceKind:t.sourceKind,tool:n.tool,url:n.url});return[t.nodeId,{kind:`remote`,prepared:i,remoteAgent:n}]}let i=await normalizeDynamicSubagentAgentConfig({name:t.name,state:e.ctx,value:r}),a=t.tool===!1?{...i,tool:!1}:i,o=createPreparedRuntimeSubagentTool({description:a.description,kind:`subagent`,logicalPath:t.logicalPath,name:t.name,nodeId:t.nodeId,sourceId:t.sourceId,sourceKind:t.sourceKind,tool:a.tool});return[t.nodeId,{agentConfig:a,kind:`subagent`,prepared:o}]})),n={};for(let r=0;r<t.length;r+=1){let i=t[r],a=e.resolvers[r];if(i.status===`rejected`){log.error(`Dynamic subagent resolver (${e.event.type}) threw — omitting subagent.`,{error:toErrorMessage(i.reason),subagentName:a.name}),n[a.nodeId]=null;continue}n[i.value[0]]=i.value[1]}return n}function isRemoteAgentDefinition(e){return typeof e==`object`&&!!e&&e.kind===`remote`}async function dispatchDynamicSubagentEvent(e){if(!ALLOWED_DYNAMIC_SUBAGENT_EVENTS.has(e.event.type))return;let t=e.resolvers.filter(t=>t.eventNames.includes(e.event.type)),n=await resolveSelections({...e,resolvers:t});e.event.type===`session.started`?e.ctx.set(SessionDynamicSubagentSelectionsKey,n):e.ctx.set(TurnDynamicSubagentSelectionsKey,n)}async function refreshDynamicSessionSubagentsForRuntimeRevision(e){if(e.ctx.get(SessionDynamicSubagentRuntimeRevisionKey)===e.runtimeRevision)return;let t=e.resolvers.filter(e=>e.eventNames.includes(`session.started`)),n=await resolveSelections({...e,resolvers:t});e.ctx.set(SessionDynamicSubagentSelectionsKey,n),e.ctx.set(SessionDynamicSubagentRuntimeRevisionKey,e.runtimeRevision)}function buildDynamicSubagentTools(e){let t=e.get(SessionDynamicSubagentSelectionsKey)??{},n=e.get(TurnDynamicSubagentSelectionsKey)??{},r={...t,...n},i=[],a=new Set;for(let e of Object.values(r))if(e!==null){if(a.has(e.prepared.name))throw Error(`Found multiple active dynamic subagents named "${e.prepared.name}". Subagent names must be unique at runtime.`);a.add(e.prepared.name),(e.kind===`subagent`?e.agentConfig.tool!==!1:e.remoteAgent.tool!==!1)&&i.push(createPreparedWorkflowToolHarnessDefinition(e.prepared))}return i}function getDynamicSubagentSelection(e,t){let n=e.get(TurnDynamicSubagentSelectionsKey)??{};return Object.hasOwn(n,t)?n[t]??void 0:(e.get(SessionDynamicSubagentSelectionsKey)??{})[t]??void 0}export{buildDynamicSubagentTools,dispatchDynamicSubagentEvent,getDynamicSubagentSelection,refreshDynamicSessionSubagentsForRuntimeRevision};
1
+ import{createLogger}from"#internal/logging.js";import{SessionDynamicSubagentRuntimeRevisionKey,SessionDynamicSubagentSelectionsKey,TurnDynamicSubagentSelectionsKey}from"#context/keys.js";import{toErrorMessage}from"#shared/errors.js";import{buildResolveContext}from"#context/dynamic-resolve-context.js";import{createPreparedWorkflowToolHarnessDefinition}from"#execution/tools/workflow/background.js";import{createPreparedRuntimeSubagentTool}from"#runtime/subagents/registry.js";import{normalizeDynamicSubagentAgentConfig}from"#runtime/subagents/dynamic-agent-config.js";import{normalizeDynamicRemoteAgentConfig}from"#runtime/subagents/dynamic-remote-agent-config.js";const log=createLogger(`dynamic-subagents`),ALLOWED_DYNAMIC_SUBAGENT_EVENTS=new Set([`session.started`,`turn.started`]);async function resolveSelections(e){let t=await Promise.allSettled(e.resolvers.map(async t=>{let n=t.events[e.event.type];if(n===void 0)return[t.nodeId,null];let r=await n(e.event,buildResolveContext(e.ctx,e.messages));if(r==null)return[t.nodeId,null];if(isRemoteAgentDefinition(r)){let e=await normalizeDynamicRemoteAgentConfig({name:t.name,value:r}),n=t.tool===!1?{...e,tool:!1}:e,i=createPreparedRuntimeSubagentTool({description:n.description,kind:`remote`,logicalPath:t.logicalPath,name:t.name,nodeId:t.nodeId,path:n.path,sourceId:t.sourceId,sourceKind:t.sourceKind,tool:n.tool,url:n.url});return[t.nodeId,{kind:`remote`,prepared:i,remoteAgent:n}]}let i=await normalizeDynamicSubagentAgentConfig({name:t.name,state:e.ctx,value:r}),a=t.tool===!1?{...i,tool:!1}:i,o=createPreparedRuntimeSubagentTool({description:a.description,kind:`subagent`,logicalPath:t.logicalPath,name:t.name,nodeId:t.nodeId,sourceId:t.sourceId,sourceKind:t.sourceKind,tool:a.tool});return[t.nodeId,{agentConfig:a,kind:`subagent`,prepared:o}]})),n={};for(let r=0;r<t.length;r+=1){let i=t[r],a=e.resolvers[r];if(i.status===`rejected`){log.error(`Dynamic subagent resolver (${e.event.type}) threw — omitting subagent.`,{error:toErrorMessage(i.reason),subagentName:a.name}),n[a.nodeId]=null;continue}n[i.value[0]]=i.value[1]}return n}function isRemoteAgentDefinition(e){return typeof e==`object`&&!!e&&e.kind===`remote`}async function dispatchDynamicSubagentEvent(e){if(!ALLOWED_DYNAMIC_SUBAGENT_EVENTS.has(e.event.type))return;let t=e.resolvers.filter(t=>t.eventNames.includes(e.event.type)),n=await resolveSelections({...e,resolvers:t});e.event.type===`session.started`?e.ctx.set(SessionDynamicSubagentSelectionsKey,n):e.ctx.set(TurnDynamicSubagentSelectionsKey,n)}async function refreshDynamicSessionSubagentsForRuntimeRevision(e){if(e.ctx.get(SessionDynamicSubagentRuntimeRevisionKey)===e.runtimeRevision)return;let t=e.resolvers.filter(e=>e.eventNames.includes(`session.started`)),n=await resolveSelections({...e,resolvers:t});e.ctx.set(SessionDynamicSubagentSelectionsKey,n),e.ctx.set(SessionDynamicSubagentRuntimeRevisionKey,e.runtimeRevision)}function buildDynamicSubagentTools(e){let t=e.get(SessionDynamicSubagentSelectionsKey)??{},n=e.get(TurnDynamicSubagentSelectionsKey)??{},r={...t,...n},i=[],a=new Set;for(let e of Object.values(r))if(e!==null){if(a.has(e.prepared.name))throw Error(`Found multiple active dynamic subagents named "${e.prepared.name}". Subagent names must be unique at runtime.`);a.add(e.prepared.name),(e.kind===`subagent`?e.agentConfig.tool!==!1:e.remoteAgent.tool!==!1)&&i.push(createPreparedWorkflowToolHarnessDefinition(e.prepared))}return i}function getDynamicSubagentSelection(e,t){let n=e.get(TurnDynamicSubagentSelectionsKey)??{};return Object.hasOwn(n,t)?n[t]??void 0:(e.get(SessionDynamicSubagentSelectionsKey)??{})[t]??void 0}export{buildDynamicSubagentTools,dispatchDynamicSubagentEvent,getDynamicSubagentSelection,refreshDynamicSessionSubagentsForRuntimeRevision};
@@ -14,7 +14,6 @@ import type { PersistedDynamicToolMetadata } from "#context/dynamic-tool-metadat
14
14
  import type { DynamicSubagentAgentConfig } from "#runtime/subagents/dynamic-agent-config.js";
15
15
  import type { DynamicRemoteAgentConfig } from "#runtime/subagents/dynamic-remote-agent-config.js";
16
16
  import type { SandboxAccess } from "#sandbox/state.js";
17
- import type { RunMode } from "#shared/run-mode.js";
18
17
  import type { HistoryViewProjector } from "#shared/history-view.js";
19
18
  import type { RuntimeModelReference } from "#runtime/agent/bootstrap.js";
20
19
  import type { PreparedRuntimeDelegationTool } from "#runtime/sessions/turn.js";
@@ -93,8 +92,6 @@ export interface ActiveChannelDelivery {
93
92
  }
94
93
  export declare const ActiveChannelDeliveriesKey: ContextKey<readonly ActiveChannelDelivery[]>;
95
94
  export declare const ChannelInstrumentationKey: ContextKey<ChannelInstrumentationProjection>;
96
- /** Trace ceiling and immutable origin accepted from a trusted forwarding deployment. */
97
- export declare const ModeKey: ContextKey<RunMode>;
98
95
  export declare const ParentSessionKey: ContextKey<SessionParent>;
99
96
  /** Separate from {@link ParentSessionKey} so it stays out of what extensions read. */
100
97
  export declare const ParentTraceContextKey: ContextKey<SessionTraceContext>;
@@ -1 +1 @@
1
- import{SESSION_INBOX_CONTEXT_KEY}from"#execution/session-inbox/address.js";import{ContextKey}from"#context/key.js";import{SESSION_CALLBACK_CONTEXT_KEY_NAME,TASK_DELIVERY_POLICY_CONTEXT_KEY_NAME}from"#context/key-names.js";const AuthKey=new ContextKey(`eve.auth`),InitiatorAuthKey=new ContextKey(`eve.initiatorAuth`),SessionIdKey=new ContextKey(`eve.sessionId`),ConversationIdKey=new ContextKey(`eve.conversationId`),SessionInboxKey=new ContextKey(SESSION_INBOX_CONTEXT_KEY),ContinuationTokenKey=new ContextKey(`eve.continuationToken`),ContinuationHookTokensKey=new ContextKey(`eve.continuationHookTokens`),ChannelRequestIdKey=new ContextKey(`eve.channelRequestId`),LocalDevRequestKey=new ContextKey(`eve.internal.localDevRequest`),ScheduleIdKey=new ContextKey(`eve.scheduleId`),SessionTitleKey=new ContextKey(`eve.sessionTitle`),ChannelDeliveryKey=new ContextKey(`eve.channelDelivery`),TurnDeliveryIdsKey=new ContextKey(`eve.turnDeliveryIds`),TaskDeliveryPolicyKey=new ContextKey(TASK_DELIVERY_POLICY_CONTEXT_KEY_NAME),TurnTaskDeliveryKey=new ContextKey(`eve.turnTaskDelivery`),HistoryStateKey=new ContextKey(`eve.historyState`),ActiveChannelDeliveriesKey=new ContextKey(`eve.activeChannelDeliveries`),ChannelInstrumentationKey=new ContextKey(`eve.channelInstrumentation`),ModeKey=new ContextKey(`eve.mode`),ParentSessionKey=new ContextKey(`eve.parentSession`),ParentTraceContextKey=new ContextKey(`eve.parentTraceContext`),SessionTraceSeedKey=new ContextKey(`eve.sessionTraceSeed`),OtelTraceEnabledKey=new ContextKey(`eve.otelTraceEnabled`),CapabilitiesKey=new ContextKey(`eve.capabilities`),ActivityObserverKey=new ContextKey(`eve.activityObserver`),ActivityRootTurnIdKey=new ContextKey(`eve.activityRootTurnId`),ActivityPendingBlockersKey=new ContextKey(`eve.activityPendingBlockers`),SessionCallbackKey=new ContextKey(SESSION_CALLBACK_CONTEXT_KEY_NAME),SessionKey=new ContextKey(`eve.session`),SandboxKey=new ContextKey(`eve.sandbox`),HandleEventKey=new ContextKey(`eve.internal.handleEvent`),StaticModelReferenceKey=new ContextKey(`eve.staticModelReference`),SessionDynamicModelReferenceKey=new ContextKey(`eve.sessionDynamicModelReference`),TurnDynamicModelReferenceKey=new ContextKey(`eve.turnDynamicModelReference`),RuntimeModelMetadataCacheKey=new ContextKey(`eve.runtimeModelMetadataCache`),LiveStepDynamicModelSelectionKey=new ContextKey(`eve.liveStepDynamicModelSelection`),SessionDynamicToolMetadataKey=new ContextKey(`eve.sessionDynamicToolMetadata`),SessionDynamicToolRuntimeRevisionKey=new ContextKey(`eve.sessionDynamicToolRuntimeRevision`),TurnDynamicToolMetadataKey=new ContextKey(`eve.turnDynamicToolMetadata`),TurnMemoryLocksKey=new ContextKey(`eve.memory.turnLocks`),PreparedMemoryPreambleKey=new ContextKey(`eve.memory.preparedPreamble`),PendingMemoryCommitKey=new ContextKey(`eve.memory.pendingCommit`),PreparedMemoryCompactionKey=new ContextKey(`eve.memory.preparedCompaction`),StepDynamicToolMetadataKey=new ContextKey(`eve.stepDynamicToolMetadata`),SessionDynamicSubagentSelectionsKey=new ContextKey(`eve.sessionDynamicSubagentSelections`),TurnDynamicSubagentSelectionsKey=new ContextKey(`eve.turnDynamicSubagentSelections`),SessionDynamicSubagentRuntimeRevisionKey=new ContextKey(`eve.sessionDynamicSubagentRuntimeRevision`),DynamicSubagentAgentConfigKey=new ContextKey(`eve.dynamicSubagentAgentConfig`),DynamicSkillManifestKey=new ContextKey(`eve.dynamicSkillManifest`),DynamicSkillSandboxKey=new ContextKey(`eve.dynamicSkillSandbox`),SessionDynamicInstructionsKey=new ContextKey(`eve.sessionDynamicInstructions`),TurnDynamicInstructionsKey=new ContextKey(`eve.turnDynamicInstructions`),DynamicInstructionResolveMessagesKey=new ContextKey(`eve.dynamicInstructionResolveMessages`),PendingDynamicInstructionUserMessagesKey=new ContextKey(`eve.pendingDynamicInstructionUserMessages`);export{ActiveChannelDeliveriesKey,ActivityObserverKey,ActivityPendingBlockersKey,ActivityRootTurnIdKey,AuthKey,CapabilitiesKey,ChannelDeliveryKey,ChannelInstrumentationKey,ChannelRequestIdKey,ContinuationHookTokensKey,ContinuationTokenKey,ConversationIdKey,DynamicInstructionResolveMessagesKey,DynamicSkillManifestKey,DynamicSkillSandboxKey,DynamicSubagentAgentConfigKey,HandleEventKey,HistoryStateKey,InitiatorAuthKey,LiveStepDynamicModelSelectionKey,LocalDevRequestKey,ModeKey,OtelTraceEnabledKey,ParentSessionKey,ParentTraceContextKey,PendingDynamicInstructionUserMessagesKey,PendingMemoryCommitKey,PreparedMemoryCompactionKey,PreparedMemoryPreambleKey,RuntimeModelMetadataCacheKey,SandboxKey,ScheduleIdKey,SessionCallbackKey,SessionDynamicInstructionsKey,SessionDynamicModelReferenceKey,SessionDynamicSubagentRuntimeRevisionKey,SessionDynamicSubagentSelectionsKey,SessionDynamicToolMetadataKey,SessionDynamicToolRuntimeRevisionKey,SessionIdKey,SessionInboxKey,SessionKey,SessionTitleKey,SessionTraceSeedKey,StaticModelReferenceKey,StepDynamicToolMetadataKey,TaskDeliveryPolicyKey,TurnDeliveryIdsKey,TurnDynamicInstructionsKey,TurnDynamicModelReferenceKey,TurnDynamicSubagentSelectionsKey,TurnDynamicToolMetadataKey,TurnMemoryLocksKey,TurnTaskDeliveryKey};
1
+ import{SESSION_INBOX_CONTEXT_KEY}from"#execution/session-inbox/address.js";import{ContextKey}from"#context/key.js";import{SESSION_CALLBACK_CONTEXT_KEY_NAME,TASK_DELIVERY_POLICY_CONTEXT_KEY_NAME}from"#context/key-names.js";const AuthKey=new ContextKey(`eve.auth`),InitiatorAuthKey=new ContextKey(`eve.initiatorAuth`),SessionIdKey=new ContextKey(`eve.sessionId`),ConversationIdKey=new ContextKey(`eve.conversationId`),SessionInboxKey=new ContextKey(SESSION_INBOX_CONTEXT_KEY),ContinuationTokenKey=new ContextKey(`eve.continuationToken`),ContinuationHookTokensKey=new ContextKey(`eve.continuationHookTokens`),ChannelRequestIdKey=new ContextKey(`eve.channelRequestId`),LocalDevRequestKey=new ContextKey(`eve.internal.localDevRequest`),ScheduleIdKey=new ContextKey(`eve.scheduleId`),SessionTitleKey=new ContextKey(`eve.sessionTitle`),ChannelDeliveryKey=new ContextKey(`eve.channelDelivery`),TurnDeliveryIdsKey=new ContextKey(`eve.turnDeliveryIds`),TaskDeliveryPolicyKey=new ContextKey(TASK_DELIVERY_POLICY_CONTEXT_KEY_NAME),TurnTaskDeliveryKey=new ContextKey(`eve.turnTaskDelivery`),HistoryStateKey=new ContextKey(`eve.historyState`),ActiveChannelDeliveriesKey=new ContextKey(`eve.activeChannelDeliveries`),ChannelInstrumentationKey=new ContextKey(`eve.channelInstrumentation`),ParentSessionKey=new ContextKey(`eve.parentSession`),ParentTraceContextKey=new ContextKey(`eve.parentTraceContext`),SessionTraceSeedKey=new ContextKey(`eve.sessionTraceSeed`),OtelTraceEnabledKey=new ContextKey(`eve.otelTraceEnabled`),CapabilitiesKey=new ContextKey(`eve.capabilities`),ActivityObserverKey=new ContextKey(`eve.activityObserver`),ActivityRootTurnIdKey=new ContextKey(`eve.activityRootTurnId`),ActivityPendingBlockersKey=new ContextKey(`eve.activityPendingBlockers`),SessionCallbackKey=new ContextKey(SESSION_CALLBACK_CONTEXT_KEY_NAME),SessionKey=new ContextKey(`eve.session`),SandboxKey=new ContextKey(`eve.sandbox`),HandleEventKey=new ContextKey(`eve.internal.handleEvent`),StaticModelReferenceKey=new ContextKey(`eve.staticModelReference`),SessionDynamicModelReferenceKey=new ContextKey(`eve.sessionDynamicModelReference`),TurnDynamicModelReferenceKey=new ContextKey(`eve.turnDynamicModelReference`),RuntimeModelMetadataCacheKey=new ContextKey(`eve.runtimeModelMetadataCache`),LiveStepDynamicModelSelectionKey=new ContextKey(`eve.liveStepDynamicModelSelection`),SessionDynamicToolMetadataKey=new ContextKey(`eve.sessionDynamicToolMetadata`),SessionDynamicToolRuntimeRevisionKey=new ContextKey(`eve.sessionDynamicToolRuntimeRevision`),TurnDynamicToolMetadataKey=new ContextKey(`eve.turnDynamicToolMetadata`),TurnMemoryLocksKey=new ContextKey(`eve.memory.turnLocks`),PreparedMemoryPreambleKey=new ContextKey(`eve.memory.preparedPreamble`),PendingMemoryCommitKey=new ContextKey(`eve.memory.pendingCommit`),PreparedMemoryCompactionKey=new ContextKey(`eve.memory.preparedCompaction`),StepDynamicToolMetadataKey=new ContextKey(`eve.stepDynamicToolMetadata`),SessionDynamicSubagentSelectionsKey=new ContextKey(`eve.sessionDynamicSubagentSelections`),TurnDynamicSubagentSelectionsKey=new ContextKey(`eve.turnDynamicSubagentSelections`),SessionDynamicSubagentRuntimeRevisionKey=new ContextKey(`eve.sessionDynamicSubagentRuntimeRevision`),DynamicSubagentAgentConfigKey=new ContextKey(`eve.dynamicSubagentAgentConfig`),DynamicSkillManifestKey=new ContextKey(`eve.dynamicSkillManifest`),DynamicSkillSandboxKey=new ContextKey(`eve.dynamicSkillSandbox`),SessionDynamicInstructionsKey=new ContextKey(`eve.sessionDynamicInstructions`),TurnDynamicInstructionsKey=new ContextKey(`eve.turnDynamicInstructions`),DynamicInstructionResolveMessagesKey=new ContextKey(`eve.dynamicInstructionResolveMessages`),PendingDynamicInstructionUserMessagesKey=new ContextKey(`eve.pendingDynamicInstructionUserMessages`);export{ActiveChannelDeliveriesKey,ActivityObserverKey,ActivityPendingBlockersKey,ActivityRootTurnIdKey,AuthKey,CapabilitiesKey,ChannelDeliveryKey,ChannelInstrumentationKey,ChannelRequestIdKey,ContinuationHookTokensKey,ContinuationTokenKey,ConversationIdKey,DynamicInstructionResolveMessagesKey,DynamicSkillManifestKey,DynamicSkillSandboxKey,DynamicSubagentAgentConfigKey,HandleEventKey,HistoryStateKey,InitiatorAuthKey,LiveStepDynamicModelSelectionKey,LocalDevRequestKey,OtelTraceEnabledKey,ParentSessionKey,ParentTraceContextKey,PendingDynamicInstructionUserMessagesKey,PendingMemoryCommitKey,PreparedMemoryCompactionKey,PreparedMemoryPreambleKey,RuntimeModelMetadataCacheKey,SandboxKey,ScheduleIdKey,SessionCallbackKey,SessionDynamicInstructionsKey,SessionDynamicModelReferenceKey,SessionDynamicSubagentRuntimeRevisionKey,SessionDynamicSubagentSelectionsKey,SessionDynamicToolMetadataKey,SessionDynamicToolRuntimeRevisionKey,SessionIdKey,SessionInboxKey,SessionKey,SessionTitleKey,SessionTraceSeedKey,StaticModelReferenceKey,StepDynamicToolMetadataKey,TaskDeliveryPolicyKey,TurnDeliveryIdsKey,TurnDynamicInstructionsKey,TurnDynamicModelReferenceKey,TurnDynamicSubagentSelectionsKey,TurnDynamicToolMetadataKey,TurnMemoryLocksKey,TurnTaskDeliveryKey};
@@ -50,5 +50,6 @@ export declare function memoryOperationId(input: {
50
50
  readonly sequence: number;
51
51
  readonly sessionId: string;
52
52
  readonly slot: string;
53
+ readonly stepIndex?: number;
53
54
  readonly turnId: string | null;
54
55
  }): string;
@@ -1 +1 @@
1
- import{createLogger}from"#internal/logging.js";import{PendingMemoryCommitKey,PreparedMemoryCompactionKey,PreparedMemoryPreambleKey,TurnMemoryLocksKey}from"#context/keys.js";import{buildCallbackContext}from"#context/build-callback-context.js";import{buildResolveContext}from"#context/dynamic-resolve-context.js";import{isEveDevEnvironment}from"#internal/application/dev-environment.js";import{defaultNamespace}from"#public/memory/index.js";import{instrumentMemoryOperation}from"#instrumentation/memory.js";import{applyMemoryRecallBatches,createMemoryLock,projectMemoryHistory,validateMemoryRecallResult}from"#shared/memory-state.js";const fallbackAbortSignal=new AbortController().signal,log=createLogger(`memory`);function prepareMemoryPreamble(e,t){e.setVirtualContext(PreparedMemoryPreambleKey,t)}async function dispatchMemoryTurnStarted(e){let t=e.ctx.get(PreparedMemoryPreambleKey);if(t===void 0)return[];let n=Object.freeze({id:e.event.data.turnId,input:Object.freeze([...t.input]),sequence:e.event.data.sequence}),r=Object.fromEntries((await Promise.all([...e.memories].sort((e,t)=>e.logicalPath.localeCompare(t.logicalPath)).map(async t=>{let r=await resolveMemoryLock({abortSignal:e.abortSignal??fallbackAbortSignal,appRoot:e.appRoot,ctx:e.ctx,memory:t,nodeId:e.nodeId,turn:n});return r===null?null:[t.slot,r]}))).filter(e=>e!==null));e.ctx.set(TurnMemoryLocksKey,r);let i=projectMemoryHistory({locks:r,messages:t.history}),a=buildCallbackContext(),o=(await settleMemoryOperations([...e.memories].sort((e,t)=>e.logicalPath.localeCompare(t.logicalPath)).map(async t=>{let o=r[t.slot];if(o===void 0)return null;let s=memoryOperationId({phase:`turn.started`,sequence:e.event.data.sequence,sessionId:a.session.id,slot:t.slot,turnId:n.id});return{lock:o,messages:await instrumentMemoryOperation(e.instrumentation,memoryInstrumentationOperation({operationId:s,operationName:`search_memory`,phase:`turn.started`,slot:t.slot,storeId:o.scope.key,turnId:n.id}),async()=>{let r=await t.provider.recall[`turn.started`]({...a,abortSignal:e.abortSignal??fallbackAbortSignal,memory:{scope:o.scope,slot:t.slot},messages:i,operationId:s,turn:n}),c=validateMemoryRecallResult(r,t.slot);return{outputRecords:memoryRecords(r),recordCount:c.length,value:c}}),operationId:s}}))).filter(e=>e!==null),s=applyMemoryRecallBatches({batches:o,history:t.history,state:t.state}),c=[...projectMemoryHistory({locks:r,messages:s.history}),...t.input],l=t.projector?.({messages:c,state:s.state})??c;return e.ctx.setVirtualContext(PendingMemoryCommitKey,{history:s.history,projectedMessages:l,state:s.state}),l}function drainMemoryCommit(e){let t=e.get(PendingMemoryCommitKey);return e.delete(PendingMemoryCommitKey),e.delete(PreparedMemoryPreambleKey),t}function prepareMemoryCompaction(e,t){e.setVirtualContext(PreparedMemoryCompactionKey,t)}async function dispatchMemoryCompactionRequested(e){let t=buildCallbackContext(),n=await resolveCompactionLocks(e);e.ctx.set(TurnMemoryLocksKey,n);let r=e.event.data.turnId.length===0?null:firstLockedTurn(n);await settleMemoryOperations([...e.memories].sort((e,t)=>e.logicalPath.localeCompare(t.logicalPath)).map(async i=>{let a=n[i.slot],o=i.provider.capture?.[`compaction.requested`];if(a===void 0||o===void 0)return;let s=memoryOperationId({phase:`compaction.requested`,sequence:e.event.data.sequence,sessionId:t.session.id,slot:i.slot,turnId:r?.id??null});await instrumentMemoryOperation(e.instrumentation,memoryInstrumentationOperation({operationId:s,operationName:`upsert_memory`,phase:`compaction.requested`,slot:i.slot,storeId:a.scope.key,turnId:r?.id}),async()=>(await o({...t,abortSignal:e.abortSignal??fallbackAbortSignal,compaction:{modelId:e.event.data.modelId,usageInputTokens:e.event.data.usageInputTokens},memory:{scope:a.scope,slot:i.slot},messages:e.messages,operationId:s,turn:r}),{value:void 0}))}))}async function dispatchMemoryCompactionCompleted(e){let t=e.ctx.get(PreparedMemoryCompactionKey),n=t?.history??e.messages,r=e.ctx.get(TurnMemoryLocksKey)??{},i=projectMemoryHistory({locks:r,messages:n}),a=buildCallbackContext(),o=e.event.data.turnId.length===0?null:firstLockedTurn(r),s=(await settleMemoryOperations([...e.memories].sort((e,t)=>e.logicalPath.localeCompare(t.logicalPath)).map(async t=>{let n=r[t.slot],s=t.provider.recall[`compaction.completed`];if(n===void 0||s===void 0)return null;let c=memoryOperationId({phase:`compaction.completed`,sequence:e.event.data.sequence,sessionId:a.session.id,slot:t.slot,turnId:o?.id??null});return{lock:n,messages:await instrumentMemoryOperation(e.instrumentation,memoryInstrumentationOperation({operationId:c,operationName:`search_memory`,phase:`compaction.completed`,slot:t.slot,storeId:n.scope.key,turnId:o?.id}),async()=>{let r=await s({...a,abortSignal:e.abortSignal??fallbackAbortSignal,compaction:{modelId:e.event.data.modelId},memory:{scope:n.scope,slot:t.slot},messages:i,operationId:c,turn:o}),l=validateMemoryRecallResult(r,t.slot);return{outputRecords:memoryRecords(r),recordCount:l.length,value:l}}),operationId:c}}))).filter(e=>e!==null),c=applyMemoryRecallBatches({batches:s,history:n,state:t?.state}),l=projectMemoryHistory({locks:r,messages:c.history});return e.ctx.setVirtualContext(PendingMemoryCommitKey,{history:c.history,projectedMessages:l,state:c.state}),e.ctx.delete(PreparedMemoryCompactionKey),l}async function dispatchMemoryTurnCompleted(e){let t=e.ctx.get(TurnMemoryLocksKey)??{},n=buildCallbackContext(),r=projectMemoryHistory({locks:t,messages:e.messages});await settleMemoryOperations([...e.memories].sort((e,t)=>e.logicalPath.localeCompare(t.logicalPath)).map(async i=>{let a=t[i.slot],o=i.provider.capture?.[`turn.completed`];if(a===void 0||o===void 0)return;let s=memoryOperationId({phase:`turn.completed`,sequence:e.event.data.sequence,sessionId:n.session.id,slot:i.slot,turnId:e.event.data.turnId});await instrumentMemoryOperation(e.instrumentation,memoryInstrumentationOperation({operationId:s,operationName:`upsert_memory`,phase:`turn.completed`,slot:i.slot,storeId:a.scope.key,turnId:a.turn.id}),async()=>(await o({...n,abortSignal:e.abortSignal??fallbackAbortSignal,memory:{scope:a.scope,slot:i.slot},messages:r,operationId:s,turn:a.turn}),{value:void 0}))}))}async function resolveCompactionLocks(e){let t=e.ctx.get(TurnMemoryLocksKey);if(e.event.data.turnId.length>0&&t!==void 0)return t;let n=Object.freeze({id:``,input:[],sequence:e.event.data.sequence});return Object.fromEntries((await Promise.all(e.memories.map(async t=>{let r=await resolveMemoryLock({abortSignal:e.abortSignal??fallbackAbortSignal,appRoot:e.appRoot,ctx:e.ctx,memory:t,nodeId:e.nodeId,turn:n});return r===null?null:[t.slot,r]}))).filter(e=>e!==null))}function firstLockedTurn(e){return Object.values(e)[0]?.turn??null}async function resolveMemoryLock(e){let t=buildResolveContext(e.ctx,[]),n={abortSignal:e.abortSignal,channel:t.channel,session:t.session},r=typeof e.memory.scope==`function`?await e.memory.scope(n):e.memory.scope;if(r===null)return reportDisabledMemorySlot(e.memory.slot,`scope`),null;let i={appRoot:e.appRoot,node:e.nodeId,slot:e.memory.slot},a=e.memory.namespace===void 0?defaultNamespace(i):typeof e.memory.namespace==`function`?await e.memory.namespace(i):e.memory.namespace;return a===null?(reportDisabledMemorySlot(e.memory.slot,`namespace`),null):createMemoryLock({namespace:a,scope:r,slot:e.memory.slot,turn:e.turn,visibility:e.memory.visibility})}function reportDisabledMemorySlot(e,t){isEveDevEnvironment()&&log.info(`Memory slot is disabled for this operation`,{resolver:t,slot:e})}async function settleMemoryOperations(e){let t=await Promise.allSettled(e),n=[],r;for(let e of t)e.status===`rejected`?r??=e:n.push(e.value);if(r!==void 0)throw r.reason;return n}function memoryOperationId(e){return[`eve-memory-operation-v1`,e.sessionId,String(e.sequence),e.turnId??`standalone`,e.phase,e.slot].join(`:`)}function memoryInstrumentationOperation(e){return{idempotencyKey:e.operationId,operationName:e.operationName,phase:e.phase,slot:e.slot,storeId:e.storeId,turnId:e.turnId}}function memoryRecords(e){return e==null?[]:e.messages.map(e=>e.id===void 0?{content:e.content}:{content:e.content,id:e.id})}export{dispatchMemoryCompactionCompleted,dispatchMemoryCompactionRequested,dispatchMemoryTurnCompleted,dispatchMemoryTurnStarted,drainMemoryCommit,memoryOperationId,prepareMemoryCompaction,prepareMemoryPreamble};
1
+ import{createLogger}from"#internal/logging.js";import{PendingMemoryCommitKey,PreparedMemoryCompactionKey,PreparedMemoryPreambleKey,TurnMemoryLocksKey}from"#context/keys.js";import{buildCallbackContext}from"#context/build-callback-context.js";import{buildResolveContext}from"#context/dynamic-resolve-context.js";import{isEveDevEnvironment}from"#internal/application/dev-environment.js";import{defaultNamespace}from"#public/memory/index.js";import{instrumentMemoryOperation}from"#instrumentation/memory.js";import{applyMemoryRecallBatches,createMemoryLock,projectMemoryHistory,validateMemoryRecallResult}from"#shared/memory-state.js";const fallbackAbortSignal=new AbortController().signal,log=createLogger(`memory`);function prepareMemoryPreamble(e,t){e.setVirtualContext(PreparedMemoryPreambleKey,t)}async function dispatchMemoryTurnStarted(e){let t=e.ctx.get(PreparedMemoryPreambleKey);if(t===void 0)return[];let n=Object.freeze({id:e.event.data.turnId,input:Object.freeze([...t.input]),sequence:e.event.data.sequence}),r=Object.fromEntries((await Promise.all([...e.memories].sort((e,t)=>e.logicalPath.localeCompare(t.logicalPath)).map(async t=>{let r=await resolveMemoryLock({abortSignal:e.abortSignal??fallbackAbortSignal,appRoot:e.appRoot,ctx:e.ctx,memory:t,nodeId:e.nodeId,turn:n});return r===null?null:[t.slot,r]}))).filter(e=>e!==null));e.ctx.set(TurnMemoryLocksKey,r);let i=projectMemoryHistory({locks:r,messages:t.history}),a=buildCallbackContext(),o=(await settleMemoryOperations([...e.memories].sort((e,t)=>e.logicalPath.localeCompare(t.logicalPath)).map(async t=>{let o=r[t.slot];if(o===void 0)return null;let s=memoryOperationId({phase:`turn.started`,sequence:e.event.data.sequence,sessionId:a.session.id,slot:t.slot,turnId:n.id});return{lock:o,messages:await instrumentMemoryOperation(e.instrumentation,memoryInstrumentationOperation({operationId:s,operationName:`search_memory`,phase:`turn.started`,slot:t.slot,storeId:o.scope.key,turnId:n.id}),async()=>{let r=await t.provider.recall[`turn.started`]({...a,abortSignal:e.abortSignal??fallbackAbortSignal,memory:{scope:o.scope,slot:t.slot},messages:i,operationId:s,turn:n}),c=validateMemoryRecallResult(r,t.slot);return{outputRecords:memoryRecords(r),recordCount:c.length,value:c}}),operationId:s}}))).filter(e=>e!==null),s=applyMemoryRecallBatches({batches:o,history:t.history,state:t.state}),c=[...projectMemoryHistory({locks:r,messages:s.history}),...t.input],l=t.projector?.({messages:c,state:s.state})??c;return e.ctx.setVirtualContext(PendingMemoryCommitKey,{history:s.history,projectedMessages:l,state:s.state}),l}function drainMemoryCommit(e){let t=e.get(PendingMemoryCommitKey);return e.delete(PendingMemoryCommitKey),e.delete(PreparedMemoryPreambleKey),t}function prepareMemoryCompaction(e,t){e.setVirtualContext(PreparedMemoryCompactionKey,t)}async function dispatchMemoryCompactionRequested(e){let t=buildCallbackContext(),n=await resolveCompactionLocks(e);e.ctx.set(TurnMemoryLocksKey,n);let r=e.event.data.turnId.length===0?null:firstLockedTurn(n);await settleMemoryOperations([...e.memories].sort((e,t)=>e.logicalPath.localeCompare(t.logicalPath)).map(async i=>{let a=n[i.slot],o=i.provider.capture?.[`compaction.requested`];if(a===void 0||o===void 0)return;let s=memoryOperationId({phase:`compaction.requested`,sequence:e.event.data.sequence,sessionId:t.session.id,slot:i.slot,stepIndex:e.event.data.stepIndex,turnId:r?.id??null});await instrumentMemoryOperation(e.instrumentation,memoryInstrumentationOperation({operationId:s,operationName:`upsert_memory`,phase:`compaction.requested`,slot:i.slot,storeId:a.scope.key,turnId:r?.id}),async()=>(await o({...t,abortSignal:e.abortSignal??fallbackAbortSignal,compaction:{modelId:e.event.data.modelId,usageInputTokens:e.event.data.usageInputTokens},memory:{scope:a.scope,slot:i.slot},messages:e.messages,operationId:s,turn:r}),{value:void 0}))}))}async function dispatchMemoryCompactionCompleted(e){let t=e.ctx.get(PreparedMemoryCompactionKey),n=t?.history??e.messages,r=e.ctx.get(TurnMemoryLocksKey)??{},i=projectMemoryHistory({locks:r,messages:n}),a=buildCallbackContext(),o=e.event.data.turnId.length===0?null:firstLockedTurn(r),s=(await settleMemoryOperations([...e.memories].sort((e,t)=>e.logicalPath.localeCompare(t.logicalPath)).map(async t=>{let n=r[t.slot],s=t.provider.recall[`compaction.completed`];if(n===void 0||s===void 0)return null;let c=memoryOperationId({phase:`compaction.completed`,sequence:e.event.data.sequence,sessionId:a.session.id,slot:t.slot,stepIndex:e.event.data.stepIndex,turnId:o?.id??null});return{lock:n,messages:await instrumentMemoryOperation(e.instrumentation,memoryInstrumentationOperation({operationId:c,operationName:`search_memory`,phase:`compaction.completed`,slot:t.slot,storeId:n.scope.key,turnId:o?.id}),async()=>{let r=await s({...a,abortSignal:e.abortSignal??fallbackAbortSignal,compaction:{modelId:e.event.data.modelId},memory:{scope:n.scope,slot:t.slot},messages:i,operationId:c,turn:o}),l=validateMemoryRecallResult(r,t.slot);return{outputRecords:memoryRecords(r),recordCount:l.length,value:l}}),operationId:c}}))).filter(e=>e!==null),c=applyMemoryRecallBatches({batches:s,history:n,state:t?.state}),l=projectMemoryHistory({locks:r,messages:c.history});return e.ctx.setVirtualContext(PendingMemoryCommitKey,{history:c.history,projectedMessages:l,state:c.state}),e.ctx.delete(PreparedMemoryCompactionKey),l}async function dispatchMemoryTurnCompleted(e){let t=e.ctx.get(TurnMemoryLocksKey)??{},n=buildCallbackContext(),r=projectMemoryHistory({locks:t,messages:e.messages});await settleMemoryOperations([...e.memories].sort((e,t)=>e.logicalPath.localeCompare(t.logicalPath)).map(async i=>{let a=t[i.slot],o=i.provider.capture?.[`turn.completed`];if(a===void 0||o===void 0)return;let s=memoryOperationId({phase:`turn.completed`,sequence:e.event.data.sequence,sessionId:n.session.id,slot:i.slot,turnId:e.event.data.turnId});await instrumentMemoryOperation(e.instrumentation,memoryInstrumentationOperation({operationId:s,operationName:`upsert_memory`,phase:`turn.completed`,slot:i.slot,storeId:a.scope.key,turnId:a.turn.id}),async()=>(await o({...n,abortSignal:e.abortSignal??fallbackAbortSignal,memory:{scope:a.scope,slot:i.slot},messages:r,operationId:s,turn:a.turn}),{value:void 0}))}))}async function resolveCompactionLocks(e){let t=e.ctx.get(TurnMemoryLocksKey);if(e.event.data.turnId.length>0&&t!==void 0)return t;let n=Object.freeze({id:``,input:[],sequence:e.event.data.sequence});return Object.fromEntries((await Promise.all(e.memories.map(async t=>{let r=await resolveMemoryLock({abortSignal:e.abortSignal??fallbackAbortSignal,appRoot:e.appRoot,ctx:e.ctx,memory:t,nodeId:e.nodeId,turn:n});return r===null?null:[t.slot,r]}))).filter(e=>e!==null))}function firstLockedTurn(e){return Object.values(e)[0]?.turn??null}async function resolveMemoryLock(e){let t=buildResolveContext(e.ctx,[]),n={abortSignal:e.abortSignal,channel:t.channel,session:t.session},r=typeof e.memory.scope==`function`?await e.memory.scope(n):e.memory.scope;if(r===null)return reportDisabledMemorySlot(e.memory.slot,`scope`),null;let i={appRoot:e.appRoot,node:e.nodeId,slot:e.memory.slot},a=e.memory.namespace===void 0?defaultNamespace(i):typeof e.memory.namespace==`function`?await e.memory.namespace(i):e.memory.namespace;return a===null?(reportDisabledMemorySlot(e.memory.slot,`namespace`),null):createMemoryLock({namespace:a,scope:r,slot:e.memory.slot,turn:e.turn,visibility:e.memory.visibility})}function reportDisabledMemorySlot(e,t){isEveDevEnvironment()&&log.info(`Memory slot is disabled for this operation`,{resolver:t,slot:e})}async function settleMemoryOperations(e){let t=await Promise.allSettled(e),n=[],r;for(let e of t)e.status===`rejected`?r??=e:n.push(e.value);if(r!==void 0)throw r.reason;return n}function memoryOperationId(e){return[`eve-memory-operation-v1`,e.sessionId,String(e.sequence),e.turnId??`standalone`,...e.stepIndex===void 0?[]:[String(e.stepIndex)],e.phase,e.slot].join(`:`)}function memoryInstrumentationOperation(e){return{idempotencyKey:e.operationId,operationName:e.operationName,phase:e.phase,slot:e.slot,storeId:e.storeId,turnId:e.turnId}}function memoryRecords(e){return e==null?[]:e.messages.map(e=>e.id===void 0?{content:e.content}:{content:e.content,id:e.id})}export{dispatchMemoryCompactionCompleted,dispatchMemoryCompactionRequested,dispatchMemoryTurnCompleted,dispatchMemoryTurnStarted,drainMemoryCommit,memoryOperationId,prepareMemoryCompaction,prepareMemoryPreamble};
@@ -47,7 +47,3 @@ export declare function createDiscoverWarningDiagnostic(input: Omit<DiscoverDiag
47
47
  * Summarizes discovery diagnostics into error and warning counts.
48
48
  */
49
49
  export declare function summarizeDiscoverDiagnostics(diagnostics: readonly DiscoverDiagnostic[]): DiscoverDiagnosticsSummary;
50
- /**
51
- * Returns whether discovery diagnostics include at least one error.
52
- */
53
- export declare function hasDiscoverErrors(diagnostics: readonly DiscoverDiagnostic[]): boolean;
@@ -1 +1 @@
1
- import{z}from"#compiled/zod/index.js";const discoverDiagnosticSeveritySchema=z.union([z.literal(`error`),z.literal(`warning`)]),discoverDiagnosticSchema=z.object({code:z.string(),message:z.string(),severity:discoverDiagnosticSeveritySchema,sourcePath:z.string()}).strict(),discoverDiagnosticsSummarySchema=z.object({errors:z.number().finite(),warnings:z.number().finite()}).strict(),DISCOVER_PROJECT_NOT_FOUND=`discover/project-not-found`;function createDiscoverErrorDiagnostic(e){return{...e,severity:`error`}}function createDiscoverWarningDiagnostic(e){return{...e,severity:`warning`}}function summarizeDiscoverDiagnostics(e){return e.reduce((e,t)=>(t.severity===`error`?e.errors+=1:e.warnings+=1,e),{errors:0,warnings:0})}function hasDiscoverErrors(e){return e.some(e=>e.severity===`error`)}export{DISCOVER_PROJECT_NOT_FOUND,createDiscoverErrorDiagnostic,createDiscoverWarningDiagnostic,discoverDiagnosticSchema,discoverDiagnosticSeveritySchema,discoverDiagnosticsSummarySchema,hasDiscoverErrors,summarizeDiscoverDiagnostics};
1
+ import{z}from"#compiled/zod/index.js";const discoverDiagnosticSeveritySchema=z.union([z.literal(`error`),z.literal(`warning`)]),discoverDiagnosticSchema=z.object({code:z.string(),message:z.string(),severity:discoverDiagnosticSeveritySchema,sourcePath:z.string()}).strict(),discoverDiagnosticsSummarySchema=z.object({errors:z.number().finite(),warnings:z.number().finite()}).strict(),DISCOVER_PROJECT_NOT_FOUND=`discover/project-not-found`;function createDiscoverErrorDiagnostic(e){return{...e,severity:`error`}}function createDiscoverWarningDiagnostic(e){return{...e,severity:`warning`}}function summarizeDiscoverDiagnostics(e){return e.reduce((e,t)=>(t.severity===`error`?e.errors+=1:e.warnings+=1,e),{errors:0,warnings:0})}export{DISCOVER_PROJECT_NOT_FOUND,createDiscoverErrorDiagnostic,createDiscoverWarningDiagnostic,discoverDiagnosticSchema,discoverDiagnosticSeveritySchema,discoverDiagnosticsSummarySchema,summarizeDiscoverDiagnostics};
@@ -1 +1 @@
1
- import{basename,dirname,join,resolve}from"node:path";import{findEveProjectContext}from"#internal/project-context.js";import{getDirectoryEntryType,isDiscoverableAgentRootEntry,isProjectMarkerEntry}from"#discover/filesystem.js";import{DISCOVER_PROJECT_NOT_FOUND,createDiscoverErrorDiagnostic}from"#discover/diagnostics.js";import{createDiskProjectSource}from"#discover/project-source.js";var DiscoveryProjectResolutionError=class extends Error{diagnostic;constructor(e){super(e.message),this.name=`DiscoveryProjectResolutionError`,this.diagnostic=e}};async function resolveDiscoveryProject(e=process.cwd(),t={}){let n=t.source??createDiskProjectSource(),r=await resolveSearchDirectory(n,e),i=r;for(;;){let e=await tryResolveNestedProjectFromAgentDirectory(n,i);if(e!==null)return e;let t=await tryResolveNestedProjectFromAppRoot(n,i);if(t!==null)return t;if(await isFlatAgentRoot(n,i))return{agentRoot:i,appRoot:i,layout:`flat`};let r=dirname(i);if(r===i)break;i=r}throw new DiscoveryProjectResolutionError(createDiscoverErrorDiagnostic({code:DISCOVER_PROJECT_NOT_FOUND,message:`Could not resolve an eve agent root from "${r}".`,sourcePath:r}))}async function resolveSearchDirectory(e,t){let n=resolve(t);return await e.stat(n)===`directory`?n:dirname(n)}async function tryResolveNestedProjectFromAgentDirectory(e,t){if(basename(t)!==`agent`)return null;let n=dirname(t);return await isNestedProjectRoot(e,n)?{agentRoot:t,appRoot:n,layout:`nested`}:null}async function tryResolveNestedProjectFromAppRoot(e,t){if(!await isNestedProjectRoot(e,t))return null;let n=join(t,`agent`);return await directoryExists(e,n)?{agentRoot:n,appRoot:t,layout:`nested`}:null}async function isNestedProjectRoot(e,t){if(await hasProjectMarkers(e,t))return!0;let n=await findEveProjectContext(t,{source:e});return n?.kind===`workspace-member`&&n.member.appRoot===t}async function isFlatAgentRoot(e,t){let n=await readDirectoryEntryTypes(e,t);return Array.from(n.entries()).some(([e,t])=>isDiscoverableAgentRootEntry(e,t))}async function hasProjectMarkers(e,t){let n=await readDirectoryEntryTypes(e,t);return Array.from(n.entries()).some(([e,t])=>isProjectMarkerEntry(e,t))}async function readDirectoryEntryTypes(e,t){if(await e.stat(t)!==`directory`)return new Map;let n=await e.readDirectory(t);return new Map(n.map(e=>[e.name,getDirectoryEntryType(e)]))}async function directoryExists(e,t){return await e.stat(t)===`directory`}export{DiscoveryProjectResolutionError,resolveDiscoveryProject};
1
+ import{basename,dirname,join,resolve}from"node:path";import{findEveProjectContext}from"#internal/project-context.js";import{getDirectoryEntryType,isDiscoverableAgentRootEntry,isProjectMarkerEntry}from"#discover/filesystem.js";import{DISCOVER_PROJECT_NOT_FOUND,createDiscoverErrorDiagnostic}from"#discover/diagnostics.js";import{createDiskProjectSource}from"#discover/project-source.js";var DiscoveryProjectResolutionError=class extends Error{diagnostic;constructor(e){super(e.message),this.name=`DiscoveryProjectResolutionError`,this.diagnostic=e}};async function resolveDiscoveryProject(e=process.cwd(),t={}){let n=t.source??createDiskProjectSource(),r=await resolveSearchDirectory(n,e),i=r;for(;;){let e=await tryResolveNestedProjectFromAgentDirectory(n,i);if(e!==null)return e;let t=await tryResolveNestedProjectFromAppRoot(n,i);if(t!==null)return t;if(await isFlatAgentRoot(n,i))return{agentRoot:i,appRoot:i,layout:`flat`};let r=dirname(i);if(r===i)break;i=r}throw new DiscoveryProjectResolutionError(createDiscoverErrorDiagnostic({code:DISCOVER_PROJECT_NOT_FOUND,message:`Could not resolve an eve agent root from "${r}".`,sourcePath:r}))}async function resolveSearchDirectory(e,t){let n=resolve(t);return await e.stat(n)===`directory`?n:dirname(n)}async function tryResolveNestedProjectFromAgentDirectory(e,t){if(basename(t)!==`agent`||await hasProjectMarkers(e,t))return null;let n=dirname(t);return await isNestedProjectRoot(e,n)?{agentRoot:t,appRoot:n,layout:`nested`}:null}async function tryResolveNestedProjectFromAppRoot(e,t){if(!await isNestedProjectRoot(e,t))return null;let n=join(t,`agent`);return await directoryExists(e,n)?{agentRoot:n,appRoot:t,layout:`nested`}:null}async function isNestedProjectRoot(e,t){if(await hasProjectMarkers(e,t))return!0;let n=await findEveProjectContext(t,{source:e});return n?.kind===`workspace-member`&&n.member.appRoot===t}async function isFlatAgentRoot(e,t){let n=await readDirectoryEntryTypes(e,t);return Array.from(n.entries()).some(([e,t])=>isDiscoverableAgentRootEntry(e,t))}async function hasProjectMarkers(e,t){let n=await readDirectoryEntryTypes(e,t);return Array.from(n.entries()).some(([e,t])=>isProjectMarkerEntry(e,t))}async function readDirectoryEntryTypes(e,t){if(await e.stat(t)!==`directory`)return new Map;let n=await e.readDirectory(t);return new Map(n.map(e=>[e.name,getDirectoryEntryType(e)]))}async function directoryExists(e,t){return await e.stat(t)===`directory`}export{DiscoveryProjectResolutionError,resolveDiscoveryProject};
@@ -1,14 +1,12 @@
1
1
  import type { UserContent } from "ai";
2
2
  import type { ActivityObserverConfig, SessionCallback, SessionCapabilities, TaskDeliveryPolicy } from "#channel/types.js";
3
3
  import type { JsonObject } from "#shared/json.js";
4
- import type { RunMode } from "#shared/run-mode.js";
5
4
  export interface ParsedCreateBody {
6
5
  taskDeliveryPolicy?: TaskDeliveryPolicy;
7
6
  activityObserver?: ActivityObserverConfig;
8
7
  callback?: SessionCallback;
9
8
  capabilities?: SessionCapabilities;
10
9
  message?: string | UserContent;
11
- mode?: RunMode;
12
10
  context?: readonly string[];
13
11
  operationId?: string;
14
12
  outputSchema?: JsonObject;
@@ -20,6 +18,5 @@ export declare function validateMessageFreeCreate(input: {
20
18
  readonly hasClientContext: boolean;
21
19
  readonly hasMessageField: boolean;
22
20
  readonly message: string | UserContent | undefined;
23
- readonly mode: RunMode | undefined;
24
21
  readonly outputSchema: JsonObject | undefined;
25
22
  }): Response | undefined;
@@ -1 +1 @@
1
- function validateMessageFreeCreate(e){if(e.hasMessageField&&e.message===void 0)return Response.json({error:`Expected 'message' to be non-empty when provided.`,ok:!1},{status:400});if(e.message===void 0){if(e.mode===`task`)return Response.json({error:`Task sessions require a non-empty 'message'.`,ok:!1},{status:400});if(e.hasClientContext||e.callback!==void 0||e.activityObserver!==void 0||e.outputSchema!==void 0)return Response.json({error:`Creating a session without a message does not accept 'clientContext', 'callback', 'activityObserver', or 'outputSchema'.`,ok:!1},{status:400})}}export{validateMessageFreeCreate};
1
+ function validateMessageFreeCreate(e){if(e.hasMessageField&&e.message===void 0)return Response.json({error:`Expected 'message' to be non-empty when provided.`,ok:!1},{status:400});if(e.message===void 0&&(e.hasClientContext||e.callback!==void 0||e.activityObserver!==void 0||e.outputSchema!==void 0))return Response.json({error:`Creating a session without a message does not accept 'clientContext', 'callback', 'activityObserver', or 'outputSchema'.`,ok:!1},{status:400})}export{validateMessageFreeCreate};
@@ -1 +1 @@
1
- import{EVE_ACTIVITY_ROUTE_PATTERN,EVE_CALLBACK_ROUTE_PATTERN,EVE_CONNECTION_CALLBACK_ROUTE_PATTERN,EVE_HEALTH_ROUTE_PATH,EVE_INFO_ROUTE_PATH,EVE_ROUTE_PREFIX,EVE_SESSION_CANCEL_ROUTE_PATTERN,EVE_SESSION_CLEAR_ROUTE_PATTERN,EVE_SESSION_COMPACT_ROUTE_PATTERN,EVE_SESSION_RESET_ROUTE_PATTERN,EVE_SESSION_ROUTE_PATH,EVE_SESSION_ROUTE_PATTERN,EVE_SESSION_STREAM_ROUTE_PATTERN,EVE_SUBAGENT_STREAM_ROUTE_PATTERN,EVE_TASK_INPUT_ROUTE_PATTERN,createEveSessionStreamRoutePath,createEveSubagentStreamRoutePath}from"#protocol/routes.js";import{attachClientContext}from"#internal/client-context.js";import{createLogger,logError}from"#internal/logging.js";import{FAIL_CLOSED_FORWARDED_TRACE_ASSERTION,formatTraceContentCeiling}from"#shared/forwarded-trace-policy.js";import{EVE_SESSION_ID_HEADER,EVE_STREAM_CONTROL_VERSION_QUERY,EVE_STREAM_FORMAT_HEADER,EVE_STREAM_TAIL_INDEX_HEADER,EVE_STREAM_VERSION_HEADER}from"#protocol/message.js";import{DELETE,GET,HEAD,PATCH,POST,PUT,defineChannel}from"#public/definitions/channel.js";import{handleExpiredLegacyAuthorization}from"#execution/legacy-session/authorization.js";import{resolveForwardedPrincipal}from"#channel/forwarded-principal.js";import{handleConnectionCallbackRequest}from"#execution/connections/callback-route.js";import{handleActivityRequest}from"#execution/activity-route.js";import{handleSessionCallbackRequest}from"#subagents/callback-route.js";import{handleTaskInputResponseRequest}from"#execution/task-input-response-route.js";import{WORKFLOW_WEBHOOK_ROUTE_PATTERN,handleWorkflowWebhookRequest}from"#execution/workflow-webhook-route.js";import{readAgentInfoRouteResponse,readRemoteAgentStreamHeadersResolver,readRouteSessionCreator}from"#internal/nitro/routes/channel-route-context.js";import{parseTraceparent,readAgentDispatchTraceContext}from"#protocol/traceparent.js";import{readForwardedAudienceBaggage,readForwardedParentSessionBaggage}from"#protocol/baggage.js";import{readConversationBaggage}from"#tracing/conversation-context.js";import{routeAuth}from"#public/channels/auth.js";import{defaultEveAudience}from"#eve-channel/audience.js";import{mergeUploadPolicy}from"#public/channels/upload-policy.js";import{checkUploadPolicy,createSessionStreamResponse,deriveOperationContinuationToken,parseCancelTurnBody,parseCreateBody,parseIncludeTailIndex,parseJsonRequest,parseOptionalJsonRequest,parseResetBody,parseSessionControlBody,parseSessionMessageBody,parseStartIndex,rejectSessionContinuationToken,requireSessionId}from"#eve-channel/request.js";import{findRemoteSubagentBinding,healthResponse,normalizeEveCors,resolveOnMessage}from"#eve-channel/support.js";export*from"#eve-channel/types.js";const log=createLogger(`eve.channel`);function eveChannel(e){let t=mergeUploadPolicy(e.uploadPolicy);return defineChannel({cors:normalizeEveCors(e.cors),turnPolicy:e.turnPolicy,audience:t=>{let n=e.audience??defaultEveAudience;return typeof n==`function`?n(t):n},routes:[GET(EVE_HEALTH_ROUTE_PATH,async()=>healthResponse()),HEAD(EVE_HEALTH_ROUTE_PATH,async()=>healthResponse()),GET(EVE_INFO_ROUTE_PATH,async(t,n)=>{let r=await routeAuth(t,e.auth);if(r instanceof Response)return r;let i=readAgentInfoRouteResponse(n);return i===void 0?Response.json({error:`Agent info route requires internal channel dispatch context.`,ok:!1},{status:500}):await i()}),GET(`${EVE_ROUTE_PREFIX}/connections/:name/callback/:token`,handleExpiredLegacyAuthorization),POST(`${EVE_ROUTE_PREFIX}/connections/:name/callback/:token`,handleExpiredLegacyAuthorization),GET(EVE_CONNECTION_CALLBACK_ROUTE_PATTERN,handleConnectionCallbackRequest),POST(EVE_CONNECTION_CALLBACK_ROUTE_PATTERN,handleConnectionCallbackRequest),POST(EVE_ACTIVITY_ROUTE_PATTERN,handleActivityRequest),POST(EVE_CALLBACK_ROUTE_PATTERN,handleSessionCallbackRequest),POST(EVE_TASK_INPUT_ROUTE_PATTERN,handleTaskInputResponseRequest),GET(WORKFLOW_WEBHOOK_ROUTE_PATTERN,handleWorkflowWebhookRequest),POST(WORKFLOW_WEBHOOK_ROUTE_PATTERN,handleWorkflowWebhookRequest),PUT(WORKFLOW_WEBHOOK_ROUTE_PATTERN,handleWorkflowWebhookRequest),PATCH(WORKFLOW_WEBHOOK_ROUTE_PATTERN,handleWorkflowWebhookRequest),DELETE(WORKFLOW_WEBHOOK_ROUTE_PATTERN,handleWorkflowWebhookRequest),POST(EVE_SESSION_ROUTE_PATH,async(n,r)=>{let i=await routeAuth(n,e.auth);if(i instanceof Response)return i;let a=await parseOptionalJsonRequest(n);if(a instanceof Response)return a;let o=rejectSessionContinuationToken(a);if(o!==null)return o;let s=await resolveForwardedPrincipal({trustedForwarders:e.trustedForwarders,forwarder:i,payload:a});if(s instanceof Response)return s;let c=parseCreateBody(a);if(c instanceof Response)return c;let l=c.callback===void 0?`absent`:readForwardedParentSessionBaggage(n.headers.get(`baggage`)),u;if(typeof l==`object`){if(l.callId!==c.callback?.callId)log.warn(`ignoring remote parent lineage with a mismatched callback`,{forwarder:i.principalId});else{let t=s.accepted;if(!t&&e.trustedForwarders!==void 0)try{t=await e.trustedForwarders(i,{})}catch(e){let t=logError(log,`trustedForwarders handler failed`,e,{forwarder:i.principalId});return Response.json({error:`trustedForwarders handler failed.`,errorId:t,ok:!1},{status:500})}t?u=l:log.warn(`ignoring remote parent lineage from an untrusted forwarder`,{forwarder:i.principalId})}}else l===`malformed`&&log.warn(`ignoring malformed remote parent lineage`,{forwarder:i.principalId});let d=c.callback===void 0?void 0:parseTraceparent(n.headers.get(`traceparent`)),f=c.callback===void 0?void 0:readAgentDispatchTraceContext(n.headers.get(`tracestate`),d)??d,p=checkUploadPolicy(c,t);if(p!==null)return p;if(c.operationId!==void 0&&s.auth.principalType===`anonymous`)return Response.json({error:`operationId requires an authenticated principal.`,ok:!1},{status:400});let m=c.operationId===void 0?void 0:await deriveOperationContinuationToken({auth:s.auth,operationId:c.operationId});if(m!==void 0){let e=await r.resolveSession(m);if(e!==void 0)return Response.json({ok:!0,sessionId:e.id,status:`accepted`},{headers:{"cache-control":`no-store`,[EVE_SESSION_ID_HEADER]:e.id},status:202})}let h=d===void 0?`absent`:readForwardedAudienceBaggage(n.headers.get(`baggage`)),g=s.accepted&&d!==void 0&&(d.traceFlags&1)==1?typeof h==`object`?h:h===`malformed`?FAIL_CLOSED_FORWARDED_TRACE_ASSERTION:void 0:void 0,_=f;g!==void 0&&f!==void 0&&(_={...f,forwardedTracePolicy:g}),h===`malformed`?log.warn(`using metadata-only policy for malformed forwarded audience baggage`,{forwarder:i.principalId}):typeof h==`object`&&(g===void 0?log.warn(`ignoring forwarded trace policy without an accepted sampled principal`,{forwarder:i.principalId}):log.info(`accepted forwarded trace policy`,{audience:h.originAudience,ceiling:formatTraceContentCeiling(h.ceiling),forwarder:i.principalId}));let v=c.message===void 0?{auth:s.auth}:await resolveOnMessage({auth:s.auth,config:e,message:c.message,request:n});if(v instanceof Response)return v;let y=readRouteSessionCreator(r);if(y===void 0)return Response.json({error:`Session creation requires internal channel dispatch context.`,ok:!1},{status:500});let b;try{b=await y({taskDeliveryPolicy:c.taskDeliveryPolicy,activityObserver:c.activityObserver,audienceAuth:i,auth:v.auth,capabilities:c.capabilities??(c.mode===`task`?void 0:{requestInput:!0}),callback:c.callback,continuationToken:m,initiatorAuth:s.accepted?s.initiatorAuth:void 0,input:attachClientContext({message:c.message,context:v.context,outputSchema:c.outputSchema},c.context),mode:c.mode??`conversation`,conversationId:c.callback===void 0?void 0:readConversationBaggage(n.headers.get(`baggage`)),parent:u,parentTraceContext:_,title:v.title})}catch(e){let t=logError(log,`session-create request failed`,e);return Response.json({error:`Failed to create the session.`,errorId:t,ok:!1},{status:500})}return Response.json({ok:!0,sessionId:b.sessionId,status:`accepted`},{headers:{"cache-control":`no-store`,[EVE_SESSION_ID_HEADER]:b.sessionId},status:202})}),POST(EVE_SESSION_ROUTE_PATTERN,async(n,{attachSession:r,params:i})=>{let a=await routeAuth(n,e.auth);if(a instanceof Response)return a;let o=requireSessionId(i);if(o instanceof Response)return o;let s=await parseJsonRequest(n);if(s instanceof Response)return s;let c=await resolveForwardedPrincipal({trustedForwarders:e.trustedForwarders,forwarder:a,payload:s});if(c instanceof Response)return c;let l=parseSessionMessageBody(s);if(l instanceof Response)return l;let u=checkUploadPolicy(l,t);if(u!==null)return u;let d,f,p=c.auth;if(l.message!==void 0){let t=await resolveOnMessage({auth:c.auth,config:e,message:l.message,request:n,sessionId:o});if(t instanceof Response)return t;d=t.context,f=t.title,p=t.auth}let m;try{let e=r(o),t=attachClientContext({taskDeliveryPolicy:l.taskDeliveryPolicy,activityObserver:l.activityObserver,auth:p,callback:l.callback,context:d,outputSchema:l.outputSchema,turnPolicy:l.turnPolicy,title:f},l.context);m=l.inputResponses===void 0?await e.send(l.message,t):await e.respond(l.inputResponses,t)}catch(e){let t=logError(log,`session-message request failed`,e,{sessionId:o});return Response.json({error:`Failed to send the session message.`,errorId:t,ok:!1},{status:500})}return m.status===`accepted`?Response.json({ok:!0,sessionId:m.sessionId,status:`accepted`,deliveryId:m.deliveryId},{headers:{"cache-control":`no-store`,[EVE_SESSION_ID_HEADER]:m.sessionId},status:202}):Response.json({code:m.retryable?`session_not_ready`:`session_not_active`,error:m.retryable===!0?`The session is not ready to accept messages yet.`:`The session is no longer active.`,ok:!1},{headers:{"cache-control":`no-store`},status:409})}),POST(EVE_SESSION_CANCEL_ROUTE_PATTERN,async(t,{attachSession:n,params:r})=>{let i=await routeAuth(t,e.auth);if(i instanceof Response)return i;let a=requireSessionId(r);if(a instanceof Response)return a;let o=await parseCancelTurnBody(t);if(o instanceof Response)return o;let s;try{s=await n(a).cancel({taskId:o.taskId,tasks:o.tasks,turnId:o.turnId})}catch(e){let t=logError(log,`cancel-turn request failed`,e,{sessionId:a});return Response.json({error:`Failed to cancel the turn.`,errorId:t,ok:!1},{status:500})}return Response.json(s.status===`accepted`?{ok:!0,sessionId:s.sessionId,status:`accepted`}:{ok:!0,status:`no_active_turn`},{headers:{"cache-control":`no-store`},status:s.status===`accepted`?202:200})}),POST(EVE_SESSION_COMPACT_ROUTE_PATTERN,async(t,{attachSession:n,params:r})=>{let i=await routeAuth(t,e.auth);if(i instanceof Response)return i;let a=requireSessionId(r);if(a instanceof Response)return a;let o=await parseSessionControlBody(t);if(o instanceof Response)return o;let s;try{s=await n(a).compact()}catch(e){let t=logError(log,`session-compaction request failed`,e,{sessionId:a});return Response.json({error:`Failed to compact the session.`,errorId:t,ok:!1},{status:500})}return Response.json(s.status===`accepted`?{ok:!0,sessionId:s.sessionId,status:`accepted`}:{ok:!0,status:`no_active_session`},{headers:{"cache-control":`no-store`},status:s.status===`accepted`?202:200})}),POST(EVE_SESSION_CLEAR_ROUTE_PATTERN,async(t,{attachSession:n,params:r})=>{let i=await routeAuth(t,e.auth);if(i instanceof Response)return i;let a=requireSessionId(r);if(a instanceof Response)return a;let o=await parseSessionControlBody(t);if(o instanceof Response)return o;let s;try{s=await n(a).clear()}catch(e){let t=logError(log,`session-clear request failed`,e,{sessionId:a});return Response.json({error:`Failed to clear the session context.`,errorId:t,ok:!1},{status:500})}return Response.json(s.status===`accepted`?{ok:!0,sessionId:s.sessionId,status:`accepted`}:{ok:!0,status:`no_active_session`},{headers:{"cache-control":`no-store`},status:s.status===`accepted`?202:200})}),POST(EVE_SESSION_RESET_ROUTE_PATTERN,async(t,{attachSession:n,params:r})=>{let i=await routeAuth(t,e.auth);if(i instanceof Response)return i;let a=requireSessionId(r);if(a instanceof Response)return a;let o=await parseResetBody(t);if(o instanceof Response)return o;let s;try{s=await n(a).reset({reason:o.reason})}catch(e){let t=logError(log,`session-reset request failed`,e,{sessionId:a});return Response.json({error:`Failed to reset the session.`,errorId:t,ok:!1},{status:500})}return Response.json(s.status===`reset`?{ok:!0,previousSessionId:s.previousSessionId,status:`reset`}:{ok:!0,status:`no_active_session`},{headers:{"cache-control":`no-store`}})}),GET(EVE_SESSION_STREAM_ROUTE_PATTERN,async(t,{attachSession:n,params:r})=>{let i=await routeAuth(t,e.auth);if(i instanceof Response)return i;let a=requireSessionId(r);return a instanceof Response?a:await createSessionStreamResponse(t,n(a))}),GET(EVE_SUBAGENT_STREAM_ROUTE_PATTERN,async(t,n)=>{let r=await routeAuth(t,e.auth);if(r instanceof Response)return r;let i=n.params.parentSessionId,a=n.params.callId,o=n.params.childSessionId;if(!i||!a||!o)return Response.json({error:`Missing subagent stream coordinates.`,ok:!1},{status:400});let s=parseStartIndex(t);if(s instanceof Response)return s;let c=parseIncludeTailIndex(t),l=createEveSubagentStreamRoutePath({callId:a,childSessionId:o,parentSessionId:i}),u;try{let e=n.attachSession(i),t=await findRemoteSubagentBinding({callId:a,childSessionId:o,childStreamPath:l,parentSessionId:i,parent:e});if(t===void 0)throw Error(`Remote subagent binding not found.`);u=t}catch{return Response.json({error:`Subagent stream not found.`,ok:!1},{status:404})}let d=readRemoteAgentStreamHeadersResolver(n);if(d===void 0)return Response.json({error:`Subagent stream proxy requires internal channel dispatch context.`,ok:!1},{status:500});let f;try{f=await d({name:u.data.toolName,resolverId:u.data.remote.resolverId,url:u.data.remote.url})}catch{return Response.json({error:`Subagent stream not found.`,ok:!1},{status:404})}let p=new URL(createEveSessionStreamRoutePath(o).replace(/^\/+/,``),`${u.data.remote.url.replace(/\/+$/,``)}/`);s!==void 0&&p.searchParams.set(`startIndex`,String(s));let m=new URL(t.url).searchParams.get(EVE_STREAM_CONTROL_VERSION_QUERY);m!==null&&p.searchParams.set(EVE_STREAM_CONTROL_VERSION_QUERY,m),c&&p.searchParams.set(`includeTailIndex`,`1`);let h=await fetch(p,{cache:`no-store`,headers:f,redirect:`manual`,signal:t.signal}),g=new Headers;for(let e of[`cache-control`,`content-type`,`x-accel-buffering`,EVE_SESSION_ID_HEADER,EVE_STREAM_FORMAT_HEADER,EVE_STREAM_TAIL_INDEX_HEADER,EVE_STREAM_VERSION_HEADER]){let t=h.headers.get(e);t!==null&&g.set(e,t)}return new Response(h.body,{headers:g,status:h.status,statusText:h.statusText})})],events:e.events})}export{eveChannel};
1
+ import{EVE_ACTIVITY_ROUTE_PATTERN,EVE_CALLBACK_ROUTE_PATTERN,EVE_CONNECTION_CALLBACK_ROUTE_PATTERN,EVE_HEALTH_ROUTE_PATH,EVE_INFO_ROUTE_PATH,EVE_ROUTE_PREFIX,EVE_SESSION_CANCEL_ROUTE_PATTERN,EVE_SESSION_CLEAR_ROUTE_PATTERN,EVE_SESSION_COMPACT_ROUTE_PATTERN,EVE_SESSION_RESET_ROUTE_PATTERN,EVE_SESSION_ROUTE_PATH,EVE_SESSION_ROUTE_PATTERN,EVE_SESSION_STREAM_ROUTE_PATTERN,EVE_SUBAGENT_STREAM_ROUTE_PATTERN,EVE_TASK_INPUT_ROUTE_PATTERN,createEveSessionStreamRoutePath,createEveSubagentStreamRoutePath}from"#protocol/routes.js";import{attachClientContext}from"#internal/client-context.js";import{createLogger,logError}from"#internal/logging.js";import{FAIL_CLOSED_FORWARDED_TRACE_ASSERTION,formatTraceContentCeiling}from"#shared/forwarded-trace-policy.js";import{EVE_SESSION_ID_HEADER,EVE_STREAM_CONTROL_VERSION_QUERY,EVE_STREAM_FORMAT_HEADER,EVE_STREAM_TAIL_INDEX_HEADER,EVE_STREAM_VERSION_HEADER}from"#protocol/message.js";import{DELETE,GET,HEAD,PATCH,POST,PUT,defineChannel}from"#public/definitions/channel.js";import{handleExpiredLegacyAuthorization}from"#execution/legacy-session/authorization.js";import{resolveForwardedPrincipal}from"#channel/forwarded-principal.js";import{handleConnectionCallbackRequest}from"#execution/connections/callback-route.js";import{handleActivityRequest}from"#execution/activity-route.js";import{handleSessionCallbackRequest}from"#subagents/callback-route.js";import{handleTaskInputResponseRequest}from"#execution/task-input-response-route.js";import{WORKFLOW_WEBHOOK_ROUTE_PATTERN,handleWorkflowWebhookRequest}from"#execution/workflow-webhook-route.js";import{readAgentInfoRouteResponse,readRemoteAgentStreamHeadersResolver,readRouteSessionCreator}from"#internal/nitro/routes/channel-route-context.js";import{parseTraceparent,readAgentDispatchTraceContext}from"#protocol/traceparent.js";import{readForwardedAudienceBaggage,readForwardedParentSessionBaggage}from"#protocol/baggage.js";import{readConversationBaggage}from"#tracing/conversation-context.js";import{routeAuth}from"#public/channels/auth.js";import{defaultEveAudience}from"#eve-channel/audience.js";import{mergeUploadPolicy}from"#public/channels/upload-policy.js";import{checkUploadPolicy,createSessionStreamResponse,deriveOperationContinuationToken,parseCancelTurnBody,parseCreateBody,parseIncludeTailIndex,parseJsonRequest,parseOptionalJsonRequest,parseResetBody,parseSessionControlBody,parseSessionMessageBody,parseStartIndex,rejectSessionContinuationToken,requireSessionId}from"#eve-channel/request.js";import{findRemoteSubagentBinding,healthResponse,normalizeEveCors,resolveOnMessage}from"#eve-channel/support.js";export*from"#eve-channel/types.js";const log=createLogger(`eve.channel`);function eveChannel(e){let t=mergeUploadPolicy(e.uploadPolicy);return defineChannel({cors:normalizeEveCors(e.cors),turnPolicy:e.turnPolicy,audience:t=>{let n=e.audience??defaultEveAudience;return typeof n==`function`?n(t):n},routes:[GET(EVE_HEALTH_ROUTE_PATH,async()=>healthResponse()),HEAD(EVE_HEALTH_ROUTE_PATH,async()=>healthResponse()),GET(EVE_INFO_ROUTE_PATH,async(t,n)=>{let r=await routeAuth(t,e.auth);if(r instanceof Response)return r;let i=readAgentInfoRouteResponse(n);return i===void 0?Response.json({error:`Agent info route requires internal channel dispatch context.`,ok:!1},{status:500}):await i()}),GET(`${EVE_ROUTE_PREFIX}/connections/:name/callback/:token`,handleExpiredLegacyAuthorization),POST(`${EVE_ROUTE_PREFIX}/connections/:name/callback/:token`,handleExpiredLegacyAuthorization),GET(EVE_CONNECTION_CALLBACK_ROUTE_PATTERN,handleConnectionCallbackRequest),POST(EVE_CONNECTION_CALLBACK_ROUTE_PATTERN,handleConnectionCallbackRequest),POST(EVE_ACTIVITY_ROUTE_PATTERN,handleActivityRequest),POST(EVE_CALLBACK_ROUTE_PATTERN,handleSessionCallbackRequest),POST(EVE_TASK_INPUT_ROUTE_PATTERN,handleTaskInputResponseRequest),GET(WORKFLOW_WEBHOOK_ROUTE_PATTERN,handleWorkflowWebhookRequest),POST(WORKFLOW_WEBHOOK_ROUTE_PATTERN,handleWorkflowWebhookRequest),PUT(WORKFLOW_WEBHOOK_ROUTE_PATTERN,handleWorkflowWebhookRequest),PATCH(WORKFLOW_WEBHOOK_ROUTE_PATTERN,handleWorkflowWebhookRequest),DELETE(WORKFLOW_WEBHOOK_ROUTE_PATTERN,handleWorkflowWebhookRequest),POST(EVE_SESSION_ROUTE_PATH,async(n,r)=>{let i=await routeAuth(n,e.auth);if(i instanceof Response)return i;let a=await parseOptionalJsonRequest(n);if(a instanceof Response)return a;let o=rejectSessionContinuationToken(a);if(o!==null)return o;let s=await resolveForwardedPrincipal({trustedForwarders:e.trustedForwarders,forwarder:i,payload:a});if(s instanceof Response)return s;let c=parseCreateBody(a);if(c instanceof Response)return c;let l=c.callback===void 0?`absent`:readForwardedParentSessionBaggage(n.headers.get(`baggage`)),u;if(typeof l==`object`){if(l.callId!==c.callback?.callId)log.warn(`ignoring remote parent lineage with a mismatched callback`,{forwarder:i.principalId});else{let t=s.accepted;if(!t&&e.trustedForwarders!==void 0)try{t=await e.trustedForwarders(i,{})}catch(e){let t=logError(log,`trustedForwarders handler failed`,e,{forwarder:i.principalId});return Response.json({error:`trustedForwarders handler failed.`,errorId:t,ok:!1},{status:500})}t?u=l:log.warn(`ignoring remote parent lineage from an untrusted forwarder`,{forwarder:i.principalId})}}else l===`malformed`&&log.warn(`ignoring malformed remote parent lineage`,{forwarder:i.principalId});let d=c.callback===void 0?void 0:parseTraceparent(n.headers.get(`traceparent`)),f=c.callback===void 0?void 0:readAgentDispatchTraceContext(n.headers.get(`tracestate`),d)??d,p=checkUploadPolicy(c,t);if(p!==null)return p;if(c.operationId!==void 0&&s.auth.principalType===`anonymous`)return Response.json({error:`operationId requires an authenticated principal.`,ok:!1},{status:400});let m=c.operationId===void 0?void 0:await deriveOperationContinuationToken({auth:s.auth,operationId:c.operationId});if(m!==void 0){let e=await r.resolveSession(m);if(e!==void 0)return Response.json({ok:!0,sessionId:e.id,status:`accepted`},{headers:{"cache-control":`no-store`,[EVE_SESSION_ID_HEADER]:e.id},status:202})}let h=d===void 0?`absent`:readForwardedAudienceBaggage(n.headers.get(`baggage`)),g=s.accepted&&d!==void 0&&(d.traceFlags&1)==1?typeof h==`object`?h:h===`malformed`?FAIL_CLOSED_FORWARDED_TRACE_ASSERTION:void 0:void 0,_=f;g!==void 0&&f!==void 0&&(_={...f,forwardedTracePolicy:g}),h===`malformed`?log.warn(`using metadata-only policy for malformed forwarded audience baggage`,{forwarder:i.principalId}):typeof h==`object`&&(g===void 0?log.warn(`ignoring forwarded trace policy without an accepted sampled principal`,{forwarder:i.principalId}):log.info(`accepted forwarded trace policy`,{audience:h.originAudience,ceiling:formatTraceContentCeiling(h.ceiling),forwarder:i.principalId}));let v=c.message===void 0?{auth:s.auth}:await resolveOnMessage({auth:s.auth,config:e,message:c.message,request:n});if(v instanceof Response)return v;let y=readRouteSessionCreator(r);if(y===void 0)return Response.json({error:`Session creation requires internal channel dispatch context.`,ok:!1},{status:500});let b;try{b=await y({taskDeliveryPolicy:c.taskDeliveryPolicy,activityObserver:c.activityObserver,audienceAuth:i,auth:v.auth,capabilities:c.capabilities??{requestInput:!0},callback:c.callback,continuationToken:m,initiatorAuth:s.accepted?s.initiatorAuth:void 0,input:attachClientContext({message:c.message,context:v.context,outputSchema:c.outputSchema},c.context),conversationId:c.callback===void 0?void 0:readConversationBaggage(n.headers.get(`baggage`)),parent:u,parentTraceContext:_,title:v.title})}catch(e){let t=logError(log,`session-create request failed`,e);return Response.json({error:`Failed to create the session.`,errorId:t,ok:!1},{status:500})}return Response.json({ok:!0,sessionId:b.sessionId,status:`accepted`},{headers:{"cache-control":`no-store`,[EVE_SESSION_ID_HEADER]:b.sessionId},status:202})}),POST(EVE_SESSION_ROUTE_PATTERN,async(n,{attachSession:r,params:i})=>{let a=await routeAuth(n,e.auth);if(a instanceof Response)return a;let o=requireSessionId(i);if(o instanceof Response)return o;let s=await parseJsonRequest(n);if(s instanceof Response)return s;let c=await resolveForwardedPrincipal({trustedForwarders:e.trustedForwarders,forwarder:a,payload:s});if(c instanceof Response)return c;let l=parseSessionMessageBody(s);if(l instanceof Response)return l;let u=checkUploadPolicy(l,t);if(u!==null)return u;let d,f,p=c.auth;if(l.message!==void 0){let t=await resolveOnMessage({auth:c.auth,config:e,message:l.message,request:n,sessionId:o});if(t instanceof Response)return t;d=t.context,f=t.title,p=t.auth}let m;try{let e=r(o),t=attachClientContext({taskDeliveryPolicy:l.taskDeliveryPolicy,activityObserver:l.activityObserver,auth:p,callback:l.callback,context:d,outputSchema:l.outputSchema,turnPolicy:l.turnPolicy,title:f},l.context);m=l.inputResponses===void 0?await e.send(l.message,t):await e.respond(l.inputResponses,t)}catch(e){let t=logError(log,`session-message request failed`,e,{sessionId:o});return Response.json({error:`Failed to send the session message.`,errorId:t,ok:!1},{status:500})}return m.status===`accepted`?Response.json({ok:!0,sessionId:m.sessionId,status:`accepted`,deliveryId:m.deliveryId},{headers:{"cache-control":`no-store`,[EVE_SESSION_ID_HEADER]:m.sessionId},status:202}):Response.json({code:m.retryable?`session_not_ready`:`session_not_active`,error:m.retryable===!0?`The session is not ready to accept messages yet.`:`The session is no longer active.`,ok:!1},{headers:{"cache-control":`no-store`},status:409})}),POST(EVE_SESSION_CANCEL_ROUTE_PATTERN,async(t,{attachSession:n,params:r})=>{let i=await routeAuth(t,e.auth);if(i instanceof Response)return i;let a=requireSessionId(r);if(a instanceof Response)return a;let o=await parseCancelTurnBody(t);if(o instanceof Response)return o;let s;try{s=await n(a).cancel({taskId:o.taskId,tasks:o.tasks,turnId:o.turnId})}catch(e){let t=logError(log,`cancel-turn request failed`,e,{sessionId:a});return Response.json({error:`Failed to cancel the turn.`,errorId:t,ok:!1},{status:500})}return Response.json(s.status===`accepted`?{ok:!0,sessionId:s.sessionId,status:`accepted`}:{ok:!0,status:`no_active_turn`},{headers:{"cache-control":`no-store`},status:s.status===`accepted`?202:200})}),POST(EVE_SESSION_COMPACT_ROUTE_PATTERN,async(t,{attachSession:n,params:r})=>{let i=await routeAuth(t,e.auth);if(i instanceof Response)return i;let a=requireSessionId(r);if(a instanceof Response)return a;let o=await parseSessionControlBody(t);if(o instanceof Response)return o;let s;try{s=await n(a).compact()}catch(e){let t=logError(log,`session-compaction request failed`,e,{sessionId:a});return Response.json({error:`Failed to compact the session.`,errorId:t,ok:!1},{status:500})}return Response.json(s.status===`accepted`?{ok:!0,sessionId:s.sessionId,status:`accepted`}:{ok:!0,status:`no_active_session`},{headers:{"cache-control":`no-store`},status:s.status===`accepted`?202:200})}),POST(EVE_SESSION_CLEAR_ROUTE_PATTERN,async(t,{attachSession:n,params:r})=>{let i=await routeAuth(t,e.auth);if(i instanceof Response)return i;let a=requireSessionId(r);if(a instanceof Response)return a;let o=await parseSessionControlBody(t);if(o instanceof Response)return o;let s;try{s=await n(a).clear()}catch(e){let t=logError(log,`session-clear request failed`,e,{sessionId:a});return Response.json({error:`Failed to clear the session context.`,errorId:t,ok:!1},{status:500})}return Response.json(s.status===`accepted`?{ok:!0,sessionId:s.sessionId,status:`accepted`}:{ok:!0,status:`no_active_session`},{headers:{"cache-control":`no-store`},status:s.status===`accepted`?202:200})}),POST(EVE_SESSION_RESET_ROUTE_PATTERN,async(t,{attachSession:n,params:r})=>{let i=await routeAuth(t,e.auth);if(i instanceof Response)return i;let a=requireSessionId(r);if(a instanceof Response)return a;let o=await parseResetBody(t);if(o instanceof Response)return o;let s;try{s=await n(a).reset({reason:o.reason})}catch(e){let t=logError(log,`session-reset request failed`,e,{sessionId:a});return Response.json({error:`Failed to reset the session.`,errorId:t,ok:!1},{status:500})}return Response.json(s.status===`reset`?{ok:!0,previousSessionId:s.previousSessionId,status:`reset`}:{ok:!0,status:`no_active_session`},{headers:{"cache-control":`no-store`}})}),GET(EVE_SESSION_STREAM_ROUTE_PATTERN,async(t,{attachSession:n,params:r})=>{let i=await routeAuth(t,e.auth);if(i instanceof Response)return i;let a=requireSessionId(r);return a instanceof Response?a:await createSessionStreamResponse(t,n(a))}),GET(EVE_SUBAGENT_STREAM_ROUTE_PATTERN,async(t,n)=>{let r=await routeAuth(t,e.auth);if(r instanceof Response)return r;let i=n.params.parentSessionId,a=n.params.callId,o=n.params.childSessionId;if(!i||!a||!o)return Response.json({error:`Missing subagent stream coordinates.`,ok:!1},{status:400});let s=parseStartIndex(t);if(s instanceof Response)return s;let c=parseIncludeTailIndex(t),l=createEveSubagentStreamRoutePath({callId:a,childSessionId:o,parentSessionId:i}),u;try{let e=n.attachSession(i),t=await findRemoteSubagentBinding({callId:a,childSessionId:o,childStreamPath:l,parentSessionId:i,parent:e});if(t===void 0)throw Error(`Remote subagent binding not found.`);u=t}catch{return Response.json({error:`Subagent stream not found.`,ok:!1},{status:404})}let d=readRemoteAgentStreamHeadersResolver(n);if(d===void 0)return Response.json({error:`Subagent stream proxy requires internal channel dispatch context.`,ok:!1},{status:500});let f;try{f=await d({name:u.data.toolName,resolverId:u.data.remote.resolverId,url:u.data.remote.url})}catch{return Response.json({error:`Subagent stream not found.`,ok:!1},{status:404})}let p=new URL(createEveSessionStreamRoutePath(o).replace(/^\/+/,``),`${u.data.remote.url.replace(/\/+$/,``)}/`);s!==void 0&&p.searchParams.set(`startIndex`,String(s));let m=new URL(t.url).searchParams.get(EVE_STREAM_CONTROL_VERSION_QUERY);m!==null&&p.searchParams.set(EVE_STREAM_CONTROL_VERSION_QUERY,m),c&&p.searchParams.set(`includeTailIndex`,`1`);let h=await fetch(p,{cache:`no-store`,headers:f,redirect:`manual`,signal:t.signal}),g=new Headers;for(let e of[`cache-control`,`content-type`,`x-accel-buffering`,EVE_SESSION_ID_HEADER,EVE_STREAM_FORMAT_HEADER,EVE_STREAM_TAIL_INDEX_HEADER,EVE_STREAM_VERSION_HEADER]){let t=h.headers.get(e);t!==null&&g.set(e,t)}return new Response(h.body,{headers:g,status:h.status,statusText:h.statusText})})],events:e.events})}export{eveChannel};
@@ -1,4 +1,4 @@
1
- import{isInputResponse}from"#shared/input.js";import{hasInternalRefScheme}from"#internal/attachments/url-refs.js";import{parseJsonObject}from"#shared/json.js";import{EVE_MESSAGE_STREAM_CONTENT_TYPE,EVE_MESSAGE_STREAM_FORMAT,EVE_MESSAGE_STREAM_VERSION,EVE_SESSION_ID_HEADER,EVE_STREAM_CONTROL_VERSION,EVE_STREAM_CONTROL_VERSION_QUERY,EVE_STREAM_FORMAT_HEADER,EVE_STREAM_LEASE_ENDED_CONTROL,EVE_STREAM_TAIL_INDEX_HEADER,EVE_STREAM_VERSION_HEADER}from"#protocol/message.js";import{collectUploadPolicyViolations,formatUploadPolicyViolation}from"#public/channels/upload-policy.js";import{parseSessionCallback}from"#channel/session-callback.js";import{parseActivityObserverField,validateActivityObserverBinding}from"#eve-channel/activity-observer-request.js";import{parseTaskDeliveryPolicyField,parseTurnPolicyField}from"#eve-channel/delivery-policy-request.js";import{validateMessageFreeCreate}from"#eve-channel/create-request.js";async function deriveOperationContinuationToken(e){let t=JSON.stringify([`eve:create-session:v1`,e.auth.authenticator,e.auth.issuer??null,e.auth.principalType,e.auth.principalId,e.operationId]),n=await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(t));return`eve:op:${Array.from(new Uint8Array(n),e=>e.toString(16).padStart(2,`0`)).join(``).slice(0,32)}`}function parseCreateBody(e){if(e.inputResponses!==void 0)return Response.json({error:`'inputResponses' is only accepted for an existing session.`,ok:!1},{status:400});let t=parseMessageField(e.message);if(t instanceof Response)return t;let n=parseClientContextField(e.clientContext);if(n instanceof Response)return n;let r=parseCallbackField(e.callback);if(r instanceof Response)return r;let i=parseCapabilitiesField(e.capabilities);if(i instanceof Response)return i;let a=parseActivityObserverField(e.activityObserver);if(a instanceof Response)return a;if(a!==void 0){let e=validateActivityObserverBinding(a,r);if(e!==void 0)return e}let o=parseModeField(e.mode);if(o instanceof Response)return o;let s=parseTaskDeliveryPolicyField(e.taskDeliveryPolicy,t);if(s instanceof Response)return s;let c=parseOutputSchemaField(e.outputSchema);if(c instanceof Response)return c;let l=validateMessageFreeCreate({activityObserver:a,callback:r,hasClientContext:e.clientContext!==void 0,hasMessageField:`message`in e,message:t,mode:o,outputSchema:c});if(l!==void 0)return l;let u=e.operationId;if(u!==void 0&&(typeof u!=`string`||!u))return Response.json({error:`Expected 'operationId' to be a non-empty string.`,ok:!1},{status:400});let d={taskDeliveryPolicy:s,activityObserver:a,callback:r,capabilities:i,mode:o,context:n,outputSchema:c};return t!==void 0&&(d.message=t),typeof u==`string`&&(d.operationId=u),d}function parseSessionMessageBody(e){let t=rejectSessionContinuationToken(e);if(t!==null)return t;let n=parseMessageField(e.message);if(n instanceof Response)return n;let r=parseCallbackField(e.callback);if(r instanceof Response)return r;let i=parseActivityObserverField(e.activityObserver);if(i instanceof Response)return i;if(i!==void 0){let e=validateActivityObserverBinding(i,r);if(e!==void 0)return e}let a=parseInputResponses$1(e.inputResponses);if(a instanceof Response)return a;let o=parseClientContextField(e.clientContext);if(o instanceof Response)return o;let s=parseTaskDeliveryPolicyField(e.taskDeliveryPolicy,n);if(s instanceof Response)return s;let c=parseOutputSchemaField(e.outputSchema);if(c instanceof Response)return c;let l=parseTurnPolicyField(e.turnPolicy);return l instanceof Response?l:n===void 0&&a===void 0?Response.json({error:`Expected a non-empty 'message' or a non-empty 'inputResponses' array.`,ok:!1},{status:400}):n!==void 0&&a!==void 0?Response.json({error:`'message' and 'inputResponses' are mutually exclusive.`,ok:!1},{status:400}):{activityObserver:i,callback:r,message:n,inputResponses:a,context:o,outputSchema:c,turnPolicy:l,taskDeliveryPolicy:s}}async function parseCancelTurnBody(e){let t=await parseOptionalJsonRequest(e);if(t instanceof Response)return t;let n=rejectSessionContinuationToken(t);if(n!==null)return n;let r=t.turnId,i=t.taskId,a=t.tasks;if(r!==void 0&&(typeof r!=`string`||r.length===0))return Response.json({error:`Expected 'turnId' to be a non-empty string.`,ok:!1},{status:400});if(a!==void 0&&typeof a!=`boolean`)return Response.json({error:`Expected 'tasks' to be a boolean.`,ok:!1},{status:400});if(i!==void 0&&(typeof i!=`string`||i.length===0))return Response.json({error:`Expected 'taskId' to be a non-empty string.`,ok:!1},{status:400});let o={};return typeof i==`string`&&(o.taskId=i),typeof a==`boolean`&&(o.tasks=a),typeof r==`string`&&(o.turnId=r),o}async function parseJsonRequest(e){let t;try{t=await e.json()}catch{return Response.json({error:`Invalid JSON body.`,ok:!1},{status:400})}return typeof t!=`object`||!t||Array.isArray(t)?Response.json({error:`Expected a JSON object.`,ok:!1},{status:400}):t}async function parseResetBody(e){let t=await parseOptionalJsonRequest(e);if(t instanceof Response)return t;let n=rejectSessionContinuationToken(t);if(n!==null)return n;let r=t.reason;return r!==void 0&&(typeof r!=`string`||r.length===0)?Response.json({error:`Expected 'reason' to be a non-empty string.`,ok:!1},{status:400}):r===void 0?{}:{reason:r}}async function parseSessionControlBody(e){let t=await parseOptionalJsonRequest(e);return t instanceof Response?t:rejectSessionContinuationToken(t)??t}async function parseOptionalJsonRequest(e){let t;try{t=await e.text()}catch{return Response.json({error:`Unreadable request body.`,ok:!1},{status:400})}if(t.trim().length===0)return{};let n;try{n=JSON.parse(t)}catch{return Response.json({error:`Invalid JSON body.`,ok:!1},{status:400})}return typeof n!=`object`||!n||Array.isArray(n)?Response.json({error:`Expected a JSON object.`,ok:!1},{status:400}):n}function rejectSessionContinuationToken(e){return`continuationToken`in e?Response.json({error:`Session-ID routes do not accept 'continuationToken'.`,ok:!1},{status:400}):null}function requireSessionId(e){return e.sessionId||Response.json({error:`Missing session id.`,ok:!1},{status:400})}async function createSessionStreamResponse(e,t){let n=parseStartIndex(e);if(n instanceof Response)return n;let r=parseIncludeTailIndex(e);try{let i=r?await t.getStreamTailIndex():void 0,a=await t.getEventStream({startIndex:n}),o=new URL(e.url).searchParams.get(EVE_STREAM_CONTROL_VERSION_QUERY)===EVE_STREAM_CONTROL_VERSION?EVE_STREAM_CONTROL_VERSION:void 0,s=new Headers({"cache-control":`no-store, no-transform`,"content-type":EVE_MESSAGE_STREAM_CONTENT_TYPE,"x-accel-buffering":`no`,[EVE_SESSION_ID_HEADER]:t.id,[EVE_STREAM_FORMAT_HEADER]:EVE_MESSAGE_STREAM_FORMAT,[EVE_STREAM_VERSION_HEADER]:EVE_MESSAGE_STREAM_VERSION});return i!==void 0&&s.set(EVE_STREAM_TAIL_INDEX_HEADER,String(i)),new Response(serializeAsNdjson(a,e.signal,streamEventLimit(n,i),o!==void 0),{headers:s})}catch{return Response.json({error:`Session not found.`,ok:!1},{status:404})}}function parseOutputSchemaField(e){if(e!==void 0)try{return parseJsonObject(e)}catch{return Response.json({error:`Expected 'outputSchema' to be a JSON-serializable object.`,ok:!1},{status:400})}}function parseCallbackField(e){if(e===void 0)return;let t=parseSessionCallback(e);return t.ok?t.callback:Response.json({error:t.message,ok:!1},{status:400})}function parseCapabilitiesField(e){if(e===void 0)return;if(typeof e!=`object`||!e||Array.isArray(e))return Response.json({error:`Expected 'capabilities' to be an object.`,ok:!1},{status:400});let t=Object.keys(e),n=Reflect.get(e,`requestInput`);return t.some(e=>e!==`requestInput`)||n!==void 0&&typeof n!=`boolean`?Response.json({error:`Expected 'capabilities.requestInput' to be a boolean when provided.`,ok:!1},{status:400}):n===void 0?{}:{requestInput:n}}function parseModeField(e){if(e!==void 0)return e===`conversation`||e===`task`?e:Response.json({error:`Expected 'mode' to be either 'conversation' or 'task'.`,ok:!1},{status:400})}function parseMessageField(e){if(e===void 0)return;if(typeof e==`string`)return e.length>0?e:void 0;if(!Array.isArray(e))return Response.json({error:`Expected 'message' to be a string or an array of text/file parts.`,ok:!1},{status:400});if(e.length===0)return;let t=[];for(let n of e){let e=parseMessagePart(n);if(e instanceof Response)return e;t.push(e)}return t}function parseMessagePart(e){if(typeof e!=`object`||!e)return Response.json({error:`Expected each message part to be an object.`,ok:!1},{status:400});let t=e;if(t.type===`text`)return typeof t.text!=`string`||t.text.length===0?Response.json({error:`Text parts require a non-empty 'text' string.`,ok:!1},{status:400}):{type:`text`,text:t.text};if(t.type===`file`){if(typeof t.mediaType!=`string`||t.mediaType.length===0)return Response.json({error:`File parts require a non-empty 'mediaType' string.`,ok:!1},{status:400});if(typeof t.data!=`string`)return Response.json({error:`File parts require a 'data' string (base64, data URL, or URL).`,ok:!1},{status:400});if(hasInternalRefScheme(t.data))return Response.json({error:`File part 'data' must not use a framework-internal ref scheme.`,ok:!1},{status:400});let e={type:`file`,mediaType:t.mediaType,data:t.data};return typeof t.filename==`string`&&t.filename.length>0&&(e.filename=t.filename),e}return Response.json({error:`Unsupported message part type "${String(t.type)}". Use 'text' or 'file'.`,ok:!1},{status:400})}function checkUploadPolicy(e,t){if(!e.message)return null;let n=collectUploadPolicyViolations(e.message,t);if(n.length===0)return null;let[r]=n;if(!r)return null;let i=r.kind===`too-large`?413:415;return Response.json({error:formatUploadPolicyViolation(r),ok:!1,violations:n.map(e=>e.kind===`too-large`?{byteLength:e.byteLength,filename:e.filename,kind:e.kind,limit:e.limit,mediaType:e.mediaType}:{allowedMediaTypes:e.allowedMediaTypes,filename:e.filename,kind:e.kind,mediaType:e.mediaType})},{status:i})}function parseInputResponses$1(e){if(e===void 0)return;if(!Array.isArray(e)||e.length===0)return Response.json({error:`Expected 'inputResponses' to be a non-empty array.`,ok:!1},{status:400});let t=e.filter(isInputResponse);return t.length===e.length?t:Response.json({error:`Expected every 'inputResponses' entry to match the HITL response schema.`,ok:!1},{status:400})}function parseClientContextField(e){if(e!==void 0){if(typeof e==`string`)return e.length>0?[toClientContextMessage(e)]:void 0;if(Array.isArray(e))return e.length===0?void 0:e.every(e=>typeof e==`string`&&e.length>0)?e.map(e=>toClientContextMessage(e)):Response.json({error:`Expected 'clientContext' array entries to be non-empty strings.`,ok:!1},{status:400});if(typeof e!=`object`||!e)return Response.json({error:`Expected 'clientContext' to be a string, string array, or JSON object.`,ok:!1},{status:400});try{let t=parseJsonObject(e);return[toClientContextMessage(JSON.stringify(t))]}catch{return Response.json({error:`Expected 'clientContext' to be a JSON-serializable object.`,ok:!1},{status:400})}}}function toClientContextMessage(e){return`Client context:
1
+ import{isInputResponse}from"#shared/input.js";import{hasInternalRefScheme}from"#internal/attachments/url-refs.js";import{parseJsonObject}from"#shared/json.js";import{EVE_MESSAGE_STREAM_CONTENT_TYPE,EVE_MESSAGE_STREAM_FORMAT,EVE_MESSAGE_STREAM_VERSION,EVE_SESSION_ID_HEADER,EVE_STREAM_CONTROL_VERSION,EVE_STREAM_CONTROL_VERSION_QUERY,EVE_STREAM_FORMAT_HEADER,EVE_STREAM_LEASE_ENDED_CONTROL,EVE_STREAM_TAIL_INDEX_HEADER,EVE_STREAM_VERSION_HEADER}from"#protocol/message.js";import{collectUploadPolicyViolations,formatUploadPolicyViolation}from"#public/channels/upload-policy.js";import{parseSessionCallback}from"#channel/session-callback.js";import{parseActivityObserverField,validateActivityObserverBinding}from"#eve-channel/activity-observer-request.js";import{parseTaskDeliveryPolicyField,parseTurnPolicyField}from"#eve-channel/delivery-policy-request.js";import{validateMessageFreeCreate}from"#eve-channel/create-request.js";async function deriveOperationContinuationToken(e){let t=JSON.stringify([`eve:create-session:v1`,e.auth.authenticator,e.auth.issuer??null,e.auth.principalType,e.auth.principalId,e.operationId]),n=await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(t));return`eve:op:${Array.from(new Uint8Array(n),e=>e.toString(16).padStart(2,`0`)).join(``).slice(0,32)}`}function parseCreateBody(e){if(e.inputResponses!==void 0)return Response.json({error:`'inputResponses' is only accepted for an existing session.`,ok:!1},{status:400});let t=parseMessageField(e.message);if(t instanceof Response)return t;let n=parseClientContextField(e.clientContext);if(n instanceof Response)return n;let r=parseCallbackField(e.callback);if(r instanceof Response)return r;let i=parseCapabilitiesField(e.capabilities);if(i instanceof Response)return i;let a=parseActivityObserverField(e.activityObserver);if(a instanceof Response)return a;if(a!==void 0){let e=validateActivityObserverBinding(a,r);if(e!==void 0)return e}let o=parseTaskDeliveryPolicyField(e.taskDeliveryPolicy,t);if(o instanceof Response)return o;let s=parseOutputSchemaField(e.outputSchema);if(s instanceof Response)return s;let c=validateMessageFreeCreate({activityObserver:a,callback:r,hasClientContext:e.clientContext!==void 0,hasMessageField:`message`in e,message:t,outputSchema:s});if(c!==void 0)return c;let l=e.operationId;if(l!==void 0&&(typeof l!=`string`||!l))return Response.json({error:`Expected 'operationId' to be a non-empty string.`,ok:!1},{status:400});let u={taskDeliveryPolicy:o,activityObserver:a,callback:r,capabilities:i,context:n,outputSchema:s};return t!==void 0&&(u.message=t),typeof l==`string`&&(u.operationId=l),u}function parseSessionMessageBody(e){let t=rejectSessionContinuationToken(e);if(t!==null)return t;let n=parseMessageField(e.message);if(n instanceof Response)return n;let r=parseCallbackField(e.callback);if(r instanceof Response)return r;let i=parseActivityObserverField(e.activityObserver);if(i instanceof Response)return i;if(i!==void 0){let e=validateActivityObserverBinding(i,r);if(e!==void 0)return e}let a=parseInputResponses$1(e.inputResponses);if(a instanceof Response)return a;let o=parseClientContextField(e.clientContext);if(o instanceof Response)return o;let s=parseTaskDeliveryPolicyField(e.taskDeliveryPolicy,n);if(s instanceof Response)return s;let c=parseOutputSchemaField(e.outputSchema);if(c instanceof Response)return c;let l=parseTurnPolicyField(e.turnPolicy);return l instanceof Response?l:n===void 0&&a===void 0?Response.json({error:`Expected a non-empty 'message' or a non-empty 'inputResponses' array.`,ok:!1},{status:400}):n!==void 0&&a!==void 0?Response.json({error:`'message' and 'inputResponses' are mutually exclusive.`,ok:!1},{status:400}):{activityObserver:i,callback:r,message:n,inputResponses:a,context:o,outputSchema:c,turnPolicy:l,taskDeliveryPolicy:s}}async function parseCancelTurnBody(e){let t=await parseOptionalJsonRequest(e);if(t instanceof Response)return t;let n=rejectSessionContinuationToken(t);if(n!==null)return n;let r=t.turnId,i=t.taskId,a=t.tasks;if(r!==void 0&&(typeof r!=`string`||r.length===0))return Response.json({error:`Expected 'turnId' to be a non-empty string.`,ok:!1},{status:400});if(a!==void 0&&typeof a!=`boolean`)return Response.json({error:`Expected 'tasks' to be a boolean.`,ok:!1},{status:400});if(i!==void 0&&(typeof i!=`string`||i.length===0))return Response.json({error:`Expected 'taskId' to be a non-empty string.`,ok:!1},{status:400});let o={};return typeof i==`string`&&(o.taskId=i),typeof a==`boolean`&&(o.tasks=a),typeof r==`string`&&(o.turnId=r),o}async function parseJsonRequest(e){let t;try{t=await e.json()}catch{return Response.json({error:`Invalid JSON body.`,ok:!1},{status:400})}return typeof t!=`object`||!t||Array.isArray(t)?Response.json({error:`Expected a JSON object.`,ok:!1},{status:400}):t}async function parseResetBody(e){let t=await parseOptionalJsonRequest(e);if(t instanceof Response)return t;let n=rejectSessionContinuationToken(t);if(n!==null)return n;let r=t.reason;return r!==void 0&&(typeof r!=`string`||r.length===0)?Response.json({error:`Expected 'reason' to be a non-empty string.`,ok:!1},{status:400}):r===void 0?{}:{reason:r}}async function parseSessionControlBody(e){let t=await parseOptionalJsonRequest(e);return t instanceof Response?t:rejectSessionContinuationToken(t)??t}async function parseOptionalJsonRequest(e){let t;try{t=await e.text()}catch{return Response.json({error:`Unreadable request body.`,ok:!1},{status:400})}if(t.trim().length===0)return{};let n;try{n=JSON.parse(t)}catch{return Response.json({error:`Invalid JSON body.`,ok:!1},{status:400})}return typeof n!=`object`||!n||Array.isArray(n)?Response.json({error:`Expected a JSON object.`,ok:!1},{status:400}):n}function rejectSessionContinuationToken(e){return`continuationToken`in e?Response.json({error:`Session-ID routes do not accept 'continuationToken'.`,ok:!1},{status:400}):null}function requireSessionId(e){return e.sessionId||Response.json({error:`Missing session id.`,ok:!1},{status:400})}async function createSessionStreamResponse(e,t){let n=parseStartIndex(e);if(n instanceof Response)return n;let r=parseIncludeTailIndex(e);try{let i=r?await t.getStreamTailIndex():void 0,a=await t.getEventStream({startIndex:n}),o=new URL(e.url).searchParams.get(EVE_STREAM_CONTROL_VERSION_QUERY)===EVE_STREAM_CONTROL_VERSION?EVE_STREAM_CONTROL_VERSION:void 0,s=new Headers({"cache-control":`no-store, no-transform`,"content-type":EVE_MESSAGE_STREAM_CONTENT_TYPE,"x-accel-buffering":`no`,[EVE_SESSION_ID_HEADER]:t.id,[EVE_STREAM_FORMAT_HEADER]:EVE_MESSAGE_STREAM_FORMAT,[EVE_STREAM_VERSION_HEADER]:EVE_MESSAGE_STREAM_VERSION});return i!==void 0&&s.set(EVE_STREAM_TAIL_INDEX_HEADER,String(i)),new Response(serializeAsNdjson(a,e.signal,streamEventLimit(n,i),o!==void 0),{headers:s})}catch{return Response.json({error:`Session not found.`,ok:!1},{status:404})}}function parseOutputSchemaField(e){if(e!==void 0)try{return parseJsonObject(e)}catch{return Response.json({error:`Expected 'outputSchema' to be a JSON-serializable object.`,ok:!1},{status:400})}}function parseCallbackField(e){if(e===void 0)return;let t=parseSessionCallback(e);return t.ok?t.callback:Response.json({error:t.message,ok:!1},{status:400})}function parseCapabilitiesField(e){if(e===void 0)return;if(typeof e!=`object`||!e||Array.isArray(e))return Response.json({error:`Expected 'capabilities' to be an object.`,ok:!1},{status:400});let t=Object.keys(e),n=Reflect.get(e,`requestInput`);return t.some(e=>e!==`requestInput`)||n!==void 0&&typeof n!=`boolean`?Response.json({error:`Expected 'capabilities.requestInput' to be a boolean when provided.`,ok:!1},{status:400}):n===void 0?{}:{requestInput:n}}function parseMessageField(e){if(e===void 0)return;if(typeof e==`string`)return e.length>0?e:void 0;if(!Array.isArray(e))return Response.json({error:`Expected 'message' to be a string or an array of text/file parts.`,ok:!1},{status:400});if(e.length===0)return;let t=[];for(let n of e){let e=parseMessagePart(n);if(e instanceof Response)return e;t.push(e)}return t}function parseMessagePart(e){if(typeof e!=`object`||!e)return Response.json({error:`Expected each message part to be an object.`,ok:!1},{status:400});let t=e;if(t.type===`text`)return typeof t.text!=`string`||t.text.length===0?Response.json({error:`Text parts require a non-empty 'text' string.`,ok:!1},{status:400}):{type:`text`,text:t.text};if(t.type===`file`){if(typeof t.mediaType!=`string`||t.mediaType.length===0)return Response.json({error:`File parts require a non-empty 'mediaType' string.`,ok:!1},{status:400});if(typeof t.data!=`string`)return Response.json({error:`File parts require a 'data' string (base64, data URL, or URL).`,ok:!1},{status:400});if(hasInternalRefScheme(t.data))return Response.json({error:`File part 'data' must not use a framework-internal ref scheme.`,ok:!1},{status:400});let e={type:`file`,mediaType:t.mediaType,data:t.data};return typeof t.filename==`string`&&t.filename.length>0&&(e.filename=t.filename),e}return Response.json({error:`Unsupported message part type "${String(t.type)}". Use 'text' or 'file'.`,ok:!1},{status:400})}function checkUploadPolicy(e,t){if(!e.message)return null;let n=collectUploadPolicyViolations(e.message,t);if(n.length===0)return null;let[r]=n;if(!r)return null;let i=r.kind===`too-large`?413:415;return Response.json({error:formatUploadPolicyViolation(r),ok:!1,violations:n.map(e=>e.kind===`too-large`?{byteLength:e.byteLength,filename:e.filename,kind:e.kind,limit:e.limit,mediaType:e.mediaType}:{allowedMediaTypes:e.allowedMediaTypes,filename:e.filename,kind:e.kind,mediaType:e.mediaType})},{status:i})}function parseInputResponses$1(e){if(e===void 0)return;if(!Array.isArray(e)||e.length===0)return Response.json({error:`Expected 'inputResponses' to be a non-empty array.`,ok:!1},{status:400});let t=e.filter(isInputResponse);return t.length===e.length?t:Response.json({error:`Expected every 'inputResponses' entry to match the HITL response schema.`,ok:!1},{status:400})}function parseClientContextField(e){if(e!==void 0){if(typeof e==`string`)return e.length>0?[toClientContextMessage(e)]:void 0;if(Array.isArray(e))return e.length===0?void 0:e.every(e=>typeof e==`string`&&e.length>0)?e.map(e=>toClientContextMessage(e)):Response.json({error:`Expected 'clientContext' array entries to be non-empty strings.`,ok:!1},{status:400});if(typeof e!=`object`||!e)return Response.json({error:`Expected 'clientContext' to be a string, string array, or JSON object.`,ok:!1},{status:400});try{let t=parseJsonObject(e);return[toClientContextMessage(JSON.stringify(t))]}catch{return Response.json({error:`Expected 'clientContext' to be a JSON-serializable object.`,ok:!1},{status:400})}}}function toClientContextMessage(e){return`Client context:
2
2
  ${e}`}function parseIncludeTailIndex(e){let t=new URL(e.url).searchParams.get(`includeTailIndex`);return t===`1`||t===`true`}function parseStartIndex(e){let t=new URL(e.url).searchParams.get(`startIndex`);if(t===null)return;let n=Number(t);return!/^-?\d+$/.test(t)||!Number.isSafeInteger(n)?Response.json({error:`Expected startIndex to be an integer.`,ok:!1},{status:400}):n}function streamEventLimit(e,t){if(t===void 0)return;let n=e===void 0?0:e<0?Math.max(0,t+1+e):e;return Math.max(0,t-n+1)}function serializeAsNdjson(e,t,n,r=!1){let i=new TextEncoder,a=0,o,s,clearTimers=()=>{clearTimeout(o),clearTimeout(s),o=void 0,s=void 0},scheduleHeartbeat=e=>{clearTimeout(o),o=setTimeout(()=>{try{e.enqueue(i.encode(`
3
3
  `)),scheduleHeartbeat(e)}catch{clearTimers()}},1e4)},startLease=e=>{scheduleHeartbeat(e),s=setTimeout(()=>{clearTimers();try{e.enqueue(i.encode(`${JSON.stringify(EVE_STREAM_LEASE_ENDED_CONTROL)}\n`)),e.terminate()}catch{}},6e4)},c=new TransformStream({start(e){e.enqueue(i.encode(`
4
4
  `)),n===0?e.terminate():r&&startLease(e)},transform(e,t){t.enqueue(i.encode(`${JSON.stringify(e)}\n`)),a+=1,a===n?(clearTimers(),t.terminate()):r&&scheduleHeartbeat(t)},flush(){clearTimers()}});return e.pipeTo(c.writable,{signal:t}).catch(()=>{}).finally(clearTimers),c.readable}export{checkUploadPolicy,createSessionStreamResponse,deriveOperationContinuationToken,parseCancelTurnBody,parseCreateBody,parseIncludeTailIndex,parseJsonRequest,parseOptionalJsonRequest,parseResetBody,parseSessionControlBody,parseSessionMessageBody,parseStartIndex,rejectSessionContinuationToken,requireSessionId};
@@ -86,7 +86,7 @@ export interface EveChannelInput {
86
86
  * trace consumers treat as non-public.
87
87
  *
88
88
  * Pass a constant audience, or a function receiving the authenticated
89
- * principal, channel, run mode, and deployment environment. Continuation
89
+ * principal, channel, and deployment environment. Continuation
90
90
  * turns from a different caller do not reclassify an existing session.
91
91
  */
92
92
  readonly audience?: ChannelAudience | ((input: Omit<AudienceContext<undefined>, "state">) => ChannelAudience);
@@ -0,0 +1,2 @@
1
+ /** Returns whether this session was created as a delegated child behind a parent input proxy. */
2
+ export declare function hasDelegatedSessionContext(serializedContext: Readonly<Record<string, unknown>>): boolean;
@@ -0,0 +1 @@
1
+ function hasDelegatedSessionContext(e){if(e[`eve.sessionCallback`]!==void 0)return!0;let t=e[`eve.channel`];return typeof t==`object`&&!!t&&Reflect.get(t,`kind`)===`subagent`}export{hasDelegatedSessionContext};
@@ -5,5 +5,8 @@ import type { ResolvedAgent } from "#runtime/types.js";
5
5
  /** Binds dynamic connection lifecycle dispatch to one execution context. */
6
6
  export declare function bindDynamicConnections(ctx: ContextContainer, agent: Pick<ResolvedAgent, "dynamicConnectionResolvers">): {
7
7
  dispatch: (event: UnstampedMessageStreamEvent) => Promise<void>;
8
- rehydrate(state: HarnessEmissionState, runtime: RuntimeIdentity, betweenTurns: boolean): Promise<void>;
8
+ rehydrate(state: HarnessEmissionState, runtime: RuntimeIdentity, turn?: {
9
+ readonly sequence: number;
10
+ readonly turnId: string;
11
+ }): Promise<void>;
9
12
  };
@@ -1 +1 @@
1
- import{createSessionStartedEvent,createTurnStartedEvent}from"#protocol/message.js";import{activeTurnId}from"#harness/active-turn-id.js";import{dispatchDynamicConnectionEvent}from"#context/dynamic-connection-lifecycle.js";function bindDynamicConnections(e,t){let n=t.dynamicConnectionResolvers??[],dispatch=t=>dispatchDynamicConnectionEvent({ctx:e,event:t,resolvers:n});return{dispatch,async rehydrate(e,t,n){e.sessionStarted&&(await dispatch(createSessionStartedEvent({runtime:t})),!n&&await dispatch(createTurnStartedEvent({sequence:e.sequence,turnId:activeTurnId(e)})))}}}export{bindDynamicConnections};
1
+ import{createSessionStartedEvent,createTurnStartedEvent}from"#protocol/message.js";import{dispatchDynamicConnectionEvent}from"#context/dynamic-connection-lifecycle.js";function bindDynamicConnections(e,t){let n=t.dynamicConnectionResolvers??[],dispatch=t=>dispatchDynamicConnectionEvent({ctx:e,event:t,resolvers:n});return{dispatch,async rehydrate(e,t,n){e.sessionStarted&&(await dispatch(createSessionStartedEvent({runtime:t})),n!==void 0&&await dispatch(createTurnStartedEvent(n)))}}}export{bindDynamicConnections};
@@ -1 +1 @@
1
- import{runJsProgram}from"#execution/dynamic-workflow/workflow.js";async function executeWorkflowProgram(e,t){"use workflow";return runJsProgram(e.js,t,{maxSubagents:e.maxSubagents??0})}executeWorkflowProgram.workflowId=`workflow//eve@0.66.3//executeWorkflowProgram`;export{executeWorkflowProgram};
1
+ import{runJsProgram}from"#execution/dynamic-workflow/workflow.js";async function executeWorkflowProgram(e,t){"use workflow";return runJsProgram(e.js,t,{maxSubagents:e.maxSubagents??0})}executeWorkflowProgram.workflowId=`workflow//eve@0.67.1//executeWorkflowProgram`;export{executeWorkflowProgram};
@@ -1 +1 @@
1
- import{DynamicSubagentAgentConfigKey}from"#context/keys.js";function resolveEffectiveAgentRuntime(e,t){return resolveEffectiveAgentRuntimeFromConfig(e,t.get(DynamicSubagentAgentConfigKey))}function resolveEffectiveAgentRuntimeFromConfig(e,t){if(t===void 0){if(e.turnAgent.configResolver===!0)throw Error(`Dynamic subagent execution requires a selected concrete agent config.`);return{limits:e.resolvedAgent.config?.limits,thresholdPercent:e.resolvedAgent.config?.compaction?.thresholdPercent,turnAgent:e.turnAgent}}let{compactionModel:n,configResolver:r,dynamicModel:i,model:a,...o}=e.turnAgent;return{limits:t.limits,thresholdPercent:t.compaction?.thresholdPercent,turnAgent:{...o,compactionModel:t.compaction?.model,model:t.model,outputSchema:t.outputSchema,reasoning:t.reasoning}}}export{resolveEffectiveAgentRuntime,resolveEffectiveAgentRuntimeFromConfig};
1
+ import{DynamicSubagentAgentConfigKey}from"#context/keys.js";function resolveEffectiveAgentRuntime(e,t){return resolveEffectiveAgentRuntimeFromConfig(e,t.get(DynamicSubagentAgentConfigKey))}function resolveEffectiveAgentRuntimeFromConfig(e,t){if(t===void 0){if(e.turnAgent.configResolver===!0)throw Error(`Dynamic subagent execution requires a selected concrete agent config.`);return{limits:e.resolvedAgent.config?.limits,thresholdPercent:e.resolvedAgent.config?.compaction?.thresholdPercent,turnAgent:e.turnAgent}}let{compactionModel:n,configResolver:r,dynamicModel:i,model:a,...o}=e.turnAgent;return{limits:t.limits,thresholdPercent:t.compaction?.thresholdPercent,turnAgent:{...o,compactionModel:t.compaction?.model,model:t.model,reasoning:t.reasoning}}}export{resolveEffectiveAgentRuntime,resolveEffectiveAgentRuntimeFromConfig};
@@ -1,10 +1,8 @@
1
1
  import type { DeliverHookPayload, SessionCapabilities } from "#channel/types.js";
2
2
  import type { AgentWorkflowRetentionDefinition } from "#shared/agent-definition.js";
3
- import type { RunMode } from "#shared/run-mode.js";
4
3
  export interface LegacyTurnInput {
5
4
  readonly completionToken: string;
6
5
  readonly capabilities?: SessionCapabilities;
7
- readonly mode: RunMode;
8
6
  readonly retention?: AgentWorkflowRetentionDefinition;
9
7
  readonly sessionWritable: WritableStream<Uint8Array>;
10
8
  readonly serializedContext: Record<string, unknown>;
@@ -1 +1 @@
1
- import{isObject}from"#shared/guards.js";function readLegacyTurnInput(e){if(!isObject(e)||e.version!==1&&e.version!==2)throw Error(`Unsupported legacy turn input version.`);let t=e.stepInput;if(!isObject(t)||typeof e.completionToken!=`string`||!e.completionToken||e.mode!==`conversation`&&e.mode!==`task`)throw Error(`Invalid legacy turn input.`);let n=isObject(e.initialStep)&&isObject(e.initialStep.result)?e.initialStep.result:void 0,r=(n?.action===`cancelled`?n.backgroundTaskState:void 0)??n?.sessionState??n?.backgroundTaskState??t.sessionState,i=n?.serializedContext??n?.backgroundTaskContext??t.serializedContext;if(!isObject(r)||typeof r.sessionId!=`string`||!r.sessionId||!isObject(i)||t.parentWritable===void 0)throw Error(`Legacy turn input has no session checkpoint or output stream.`);let a=t.input;if(n===void 0&&a!==void 0&&(!isObject(a)||![`deliver`,`clear`,`compact`,`runtime-action-result`].includes(String(a.kind))||a.kind===`deliver`&&!Array.isArray(a.payloads)))throw Error(`Unsupported legacy turn delivery.`);let o=n===void 0&&isObject(a)&&a.kind===`deliver`?a:void 0;return{completionToken:e.completionToken,mode:e.mode,capabilities:e.capabilities,retention:e.retention,sessionWritable:t.parentWritable,serializedContext:i,sessionState:r,delivery:o,inputCommitted:n!==void 0}}export{readLegacyTurnInput};
1
+ import{isObject}from"#shared/guards.js";function readLegacyTurnInput(e){if(!isObject(e)||e.version!==1&&e.version!==2)throw Error(`Unsupported legacy turn input version.`);let t=e.stepInput;if(!isObject(t)||typeof e.completionToken!=`string`||!e.completionToken)throw Error(`Invalid legacy turn input.`);let n=isObject(e.initialStep)&&isObject(e.initialStep.result)?e.initialStep.result:void 0,r=(n?.action===`cancelled`?n.backgroundTaskState:void 0)??n?.sessionState??n?.backgroundTaskState??t.sessionState,i=n?.serializedContext??n?.backgroundTaskContext??t.serializedContext;if(!isObject(r)||typeof r.sessionId!=`string`||!r.sessionId||!isObject(i)||t.parentWritable===void 0)throw Error(`Legacy turn input has no session checkpoint or output stream.`);let a=t.input;if(n===void 0&&a!==void 0&&(!isObject(a)||![`deliver`,`clear`,`compact`,`runtime-action-result`].includes(String(a.kind))||a.kind===`deliver`&&!Array.isArray(a.payloads)))throw Error(`Unsupported legacy turn delivery.`);let o=n===void 0&&isObject(a)&&a.kind===`deliver`?a:void 0;return{completionToken:e.completionToken,capabilities:e.capabilities,retention:e.retention,sessionWritable:t.parentWritable,serializedContext:i,sessionState:r,delivery:o,inputCommitted:n!==void 0}}export{readLegacyTurnInput};
@@ -4,7 +4,6 @@ export declare function prepareLegacySessionStep(rawInput: unknown): Promise<{
4
4
  input: {
5
5
  completionToken: string;
6
6
  capabilities?: import("../../channel/types.ts").SessionCapabilities;
7
- mode: import("../../shared/run-mode.ts").RunMode;
8
7
  sessionWritable: WritableStream<Uint8Array>;
9
8
  serializedContext: Record<string, unknown>;
10
9
  sessionState: Record<string, unknown> & {
@@ -1 +1 @@
1
- import{completeLegacyDriverStep}from"./completion-step.js";import{interruptLegacySessionStep}from"./interrupt-step.js";import{prepareLegacySessionStep}from"./prepare-step.js";import{sessionCommandHookToken}from"#execution/session-inbox/address.js";import{isHookConflictError}from"#execution/hook-ownership.js";import{sessionTimeoutDeadline}from"#execution/session/timeout.js";import{sessionHookTokens}from"#execution/session/hook-tokens.js";import{createSessionInbox}from"#execution/session-inbox/inbox.js";import{failSession,runPreparedSession}from"#execution/session/program.js";async function turnWorkflow(e){"use workflow";let t=await prepareLegacySessionStep(e),{sessionId:n}=t.sessionState,r=createSessionInbox(n);try{await r.claimSessionHook(sessionCommandHookToken(n))}catch(e){if(isHookConflictError(e))return;throw e}let{mode:i,sessionWritable:a}=t.input,o;try{await r.claimSessionHooks(sessionHookTokens(t)),o=await interruptLegacySessionStep(t)}catch(e){return await r.dispose(),await failSession({error:e,mode:i,serializedContext:t.serializedContext,sessionId:n,sessionState:t.sessionState,sessionWritable:a})}await runPreparedSession({anchor:{kind:`self`,notify:e=>completeLegacyDriverStep({completionToken:t.input.completionToken,result:e,serializedContext:t.serializedContext,sessionState:t.sessionState,sessionWritable:a})},caller:void 0,capabilities:t.input.capabilities,deploymentId:t.deploymentId,initialInput:t.input.delivery===void 0?void 0:{...t.input.delivery,caller:void 0},awaitFirstMessage:!1,mode:i,retention:t.input.retention,serializedContext:o.serializedContext,sessionId:n,sessionState:o.sessionState,sessionTimeoutMs:t.sessionTimeoutMs,sessionTimeoutDeadline:sessionTimeoutDeadline(t.sessionTimeoutMs,Date.now()),sessionWritable:a},r)}turnWorkflow.workflowId=`workflow//eve//turnWorkflow`;export{turnWorkflow};
1
+ import{completeLegacyDriverStep}from"./completion-step.js";import{interruptLegacySessionStep}from"./interrupt-step.js";import{prepareLegacySessionStep}from"./prepare-step.js";import{sessionCommandHookToken}from"#execution/session-inbox/address.js";import{isHookConflictError}from"#execution/hook-ownership.js";import{sessionTimeoutDeadline}from"#execution/session/timeout.js";import{sessionHookTokens}from"#execution/session/hook-tokens.js";import{createSessionInbox}from"#execution/session-inbox/inbox.js";import{failSession,runPreparedSession}from"#execution/session/program.js";async function turnWorkflow(e){"use workflow";let t=await prepareLegacySessionStep(e),{sessionId:n}=t.sessionState,r=createSessionInbox(n);try{await r.claimSessionHook(sessionCommandHookToken(n))}catch(e){if(isHookConflictError(e))return;throw e}let{sessionWritable:i}=t.input,a;try{await r.claimSessionHooks(sessionHookTokens(t)),a=await interruptLegacySessionStep(t)}catch(e){return await r.dispose(),await failSession({error:e,serializedContext:t.serializedContext,sessionId:n,sessionState:t.sessionState,sessionWritable:i})}await runPreparedSession({anchor:{kind:`self`,notify:e=>completeLegacyDriverStep({completionToken:t.input.completionToken,result:e,serializedContext:t.serializedContext,sessionState:t.sessionState,sessionWritable:i})},caller:void 0,capabilities:t.input.capabilities,deploymentId:t.deploymentId,initialInput:t.input.delivery===void 0?void 0:{...t.input.delivery,caller:void 0},awaitFirstMessage:!1,retention:t.input.retention,serializedContext:a.serializedContext,sessionId:n,sessionState:a.sessionState,sessionTimeoutMs:t.sessionTimeoutMs,sessionTimeoutDeadline:sessionTimeoutDeadline(t.sessionTimeoutMs,Date.now()),sessionWritable:i},r)}turnWorkflow.workflowId=`workflow//eve//turnWorkflow`;export{turnWorkflow};
@@ -2,7 +2,6 @@ import type { Runtime, SessionCapabilities } from "#channel/types.js";
2
2
  import type { ExecutionInstrumentation } from "#instrumentation/runtime.js";
3
3
  import type { HandleEventFn, HarnessToolMap, StepFn } from "#harness/types.js";
4
4
  import type { RuntimeIdentity } from "#protocol/message.js";
5
- import type { RunMode } from "#shared/run-mode.js";
6
5
  import { type RuntimeModelResolutionScope } from "#runtime/agent/resolve-model.js";
7
6
  import type { RuntimeCompiledArtifactsSource } from "#runtime/compiled-artifacts-source.js";
8
7
  import type { ResolvedRuntimeAgentNode } from "#runtime/graph.js";
@@ -39,10 +38,13 @@ export interface CreateExecutionNodeStepInput {
39
38
  */
40
39
  readonly createRuntime: CreateRuntime;
41
40
  readonly handleEvent?: HandleEventFn;
41
+ readonly prepareApprovalTurn?: (event: {
42
+ readonly sequence: number;
43
+ readonly turnId: string;
44
+ }) => Promise<void>;
42
45
  readonly historyProjector?: HistoryViewProjector;
43
46
  readonly historyView?: PreparedHistoryView;
44
47
  readonly instrumentation: ExecutionInstrumentation | undefined;
45
- readonly mode: RunMode;
46
48
  readonly modelResolutionScope: RuntimeModelResolutionScope;
47
49
  readonly node: ResolvedRuntimeAgentNode;
48
50
  }
@@ -1 +1 @@
1
- import{createLogger}from"#internal/logging.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{UNSPECIFIED_INPUT_SCHEMA}from"#tools/schema.js";import{createToolExecuteWithAuth}from"#execution/tool-auth.js";import{resolveRuntimeModelReference}from"#runtime/agent/resolve-model.js";import{createPreparedWorkflowToolHarnessDefinition,createWorkflowToolHarnessDefinition}from"#execution/tools/workflow/background.js";import{LOAD_SKILL_TOOL_NAME}from"#runtime/skills/fragment-context.js";import{dispatchDynamicModelEvent}from"#context/dynamic-model-lifecycle.js";import{preparePersistedStepDynamicToolMetadata}from"#context/dynamic-tool-lifecycle.js";import{createToolLoopHarness}from"#harness/tool-loop.js";import{createTaskToolHarnessDefinitions}from"#execution/tools/tasks.js";import{findRegisteredRuntimeTool}from"#runtime/tools/registry.js";import{WEB_SEARCH_TOOL_NAME,resolveWebSearchActivityLabel}from"#harness/provider-tool-schemas.js";const log=createLogger(`execution.node-step`);function createExecutionNodeStep(e){let t=createRuntimeModelResolver(e.modelResolutionScope),n=e.node.turnAgent.dynamicModel===void 0?void 0:createRuntimeDynamicModelEventDispatcher(e.modelResolutionScope,e.node.turnAgent.dynamicModel,e.abortSignal),r=createNodeHarnessTools({node:e.node}),i=e.instrumentation,a=i?.prepareExecution(),o=createToolLoopHarness({steeringSignal:e.steeringSignal,abortSignal:e.abortSignal,capabilities:e.capabilities,clearOnly:e.clearOnly,compactOnly:e.compactOnly,handleEvent:e.handleEvent,historyProjector:e.historyProjector,historyView:e.historyView,instrumentation:a,mode:e.mode,resolveStepDynamicTools:t=>preparePersistedStepDynamicToolMetadata({...t,resolvers:e.node.agent.dynamicToolResolvers??[]}),dispatchDynamicModelEvent:n,resolveModel:t,runtimeIdentity:buildRuntimeIdentity(e.node),tools:r});return i===void 0?o:async(e,t)=>{try{return await o(e,t)}finally{await i.flush()}}}function buildRuntimeIdentity(e){let t=resolveInstalledPackageInfo(),n={agentId:e.turnAgent.id,agentName:e.agent.config?.name,eveVersion:t.version},r=process.env.VERCEL_GIT_COMMIT_SHA?.trim(),i=process.env.VERCEL_GIT_COMMIT_REF?.trim(),a=process.env.VERCEL_DEPLOYMENT_CREATED_AT?.trim();return r||i||a?{...n,build:{deployedAt:a||void 0,gitBranch:i||void 0,gitSha:r||void 0}}:n}function createRuntimeModelResolver(e){return t=>resolveRuntimeModelReference(t,e)}function createRuntimeDynamicModelEventDispatcher(e,t,n){return r=>dispatchDynamicModelEvent({abortSignal:n,ctx:r.ctx,dynamicModel:t,event:r.event,messages:r.messages,scope:e})}function createNodeHarnessTools(e){let t=new Map;for(let n of e.node.turnAgent.tools){let r=resolveHarnessToolDefinition({node:e.node,tool:n});r!==null&&t.set(n.name,r)}return t}function resolveHarnessToolDefinition(e){let t=findRegisteredRuntimeTool(e.node.toolRegistry,e.tool.name);return isPreparedRuntimeWorkflowTool(e.tool)?t===null?createPreparedWorkflowToolHarnessDefinition(e.tool):createWorkflowToolHarnessDefinition({executeInput:t.definition.executeInput,definition:createRegisteredHarnessToolDefinition({behavior:e.tool.behavior,definition:t.definition,rootOnly:e.tool.rootOnly}),nodeId:e.tool.task.nodeId,workflowId:e.tool.task.workflowId}):t===null?(log.warn(`declared tool is not registered — omitting from toolset`,{toolName:e.tool.name,nodeId:e.node.nodeId}),null):createRegisteredHarnessToolDefinition({behavior:e.tool.behavior,definition:t.definition,rootOnly:e.tool.rootOnly})}function isPreparedRuntimeWorkflowTool(e){return e.task!==void 0}function createRegisteredHarnessToolDefinition(e){let t=e.definition;if(t.owner.kind===`framework`){let n=createTaskToolHarnessDefinitions().find(e=>e.name===t.name);if(n!==void 0)return{...n,behavior:e.behavior}}let n=t.execute;return{availableInSubagents:t.availableInSubagents,label:t.label??(t.owner.kind===`framework`&&t.name===WEB_SEARCH_TOOL_NAME?{start:resolveWebSearchActivityLabel}:void 0),approvalKey:t.approvalKey,behavior:e.behavior,description:t.description,execution:t.execution,executeInput:t.executeInput,execute:resolveAuthoredExecute({rawExecute:n,scope:t.name}),frameworkAction:t.owner.kind===`framework`&&t.name===LOAD_SKILL_TOOL_NAME?`load-skill`:void 0,inputSchema:t.inputSchema??UNSPECIFIED_INPUT_SCHEMA,name:t.name,approval:t.approval,outputSchema:t.outputSchema,rootOnly:e.rootOnly,toModelOutput:t.toModelOutput}}function resolveAuthoredExecute(e){let{rawExecute:t,scope:n}=e;return t===void 0?void 0:createToolExecuteWithAuth({execute:t,scope:n})}export{buildRuntimeIdentity,createExecutionNodeStep,createNodeHarnessTools};
1
+ import{createLogger}from"#internal/logging.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{UNSPECIFIED_INPUT_SCHEMA}from"#tools/schema.js";import{createToolExecuteWithAuth}from"#execution/tool-auth.js";import{resolveRuntimeModelReference}from"#runtime/agent/resolve-model.js";import{createPreparedWorkflowToolHarnessDefinition,createWorkflowToolHarnessDefinition}from"#execution/tools/workflow/background.js";import{LOAD_SKILL_TOOL_NAME}from"#runtime/skills/fragment-context.js";import{dispatchDynamicModelEvent}from"#context/dynamic-model-lifecycle.js";import{preparePersistedStepDynamicToolMetadata}from"#context/dynamic-tool-lifecycle.js";import{createToolLoopHarness}from"#harness/tool-loop.js";import{createTaskToolHarnessDefinitions}from"#execution/tools/tasks.js";import{findRegisteredRuntimeTool}from"#runtime/tools/registry.js";import{connectionToolReplayIdentity}from"#execution/tools/connection-search.js";import{WEB_SEARCH_TOOL_NAME,resolveWebSearchActivityLabel}from"#harness/provider-tool-schemas.js";const log=createLogger(`execution.node-step`);function createExecutionNodeStep(e){let t=createRuntimeModelResolver(e.modelResolutionScope),n=e.node.turnAgent.dynamicModel===void 0?void 0:createRuntimeDynamicModelEventDispatcher(e.modelResolutionScope,e.node.turnAgent.dynamicModel,e.abortSignal),r=createNodeHarnessTools({node:e.node}),i=e.instrumentation,a=i?.prepareExecution(),o=createToolLoopHarness({steeringSignal:e.steeringSignal,abortSignal:e.abortSignal,capabilities:e.capabilities,clearOnly:e.clearOnly,compactOnly:e.compactOnly,handleEvent:e.handleEvent,historyProjector:e.historyProjector,historyView:e.historyView,instrumentation:a,prepareApprovalTurn:e.prepareApprovalTurn,toolReplayIdentity:connectionToolReplayIdentity,resolveStepDynamicTools:t=>preparePersistedStepDynamicToolMetadata({...t,resolvers:e.node.agent.dynamicToolResolvers??[]}),dispatchDynamicModelEvent:n,resolveModel:t,runtimeIdentity:buildRuntimeIdentity(e.node),tools:r});return i===void 0?o:async(e,t)=>{try{return await o(e,t)}finally{await i.flush()}}}function buildRuntimeIdentity(e){let t=resolveInstalledPackageInfo(),n={agentId:e.turnAgent.id,agentName:e.agent.config?.name,eveVersion:t.version},r=process.env.VERCEL_GIT_COMMIT_SHA?.trim(),i=process.env.VERCEL_GIT_COMMIT_REF?.trim(),a=process.env.VERCEL_DEPLOYMENT_CREATED_AT?.trim();return r||i||a?{...n,build:{deployedAt:a||void 0,gitBranch:i||void 0,gitSha:r||void 0}}:n}function createRuntimeModelResolver(e){return t=>resolveRuntimeModelReference(t,e)}function createRuntimeDynamicModelEventDispatcher(e,t,n){return r=>dispatchDynamicModelEvent({abortSignal:n,ctx:r.ctx,dynamicModel:t,event:r.event,messages:r.messages,scope:e})}function createNodeHarnessTools(e){let t=new Map;for(let n of e.node.turnAgent.tools){let r=resolveHarnessToolDefinition({node:e.node,tool:n});r!==null&&t.set(n.name,r)}return t}function resolveHarnessToolDefinition(e){let t=findRegisteredRuntimeTool(e.node.toolRegistry,e.tool.name);return isPreparedRuntimeWorkflowTool(e.tool)?t===null?createPreparedWorkflowToolHarnessDefinition(e.tool):createWorkflowToolHarnessDefinition({executeInput:t.definition.executeInput,definition:createRegisteredHarnessToolDefinition({behavior:e.tool.behavior,definition:t.definition,rootOnly:e.tool.rootOnly}),nodeId:e.tool.task.nodeId,workflowId:e.tool.task.workflowId}):t===null?(log.warn(`declared tool is not registered — omitting from toolset`,{toolName:e.tool.name,nodeId:e.node.nodeId}),null):createRegisteredHarnessToolDefinition({behavior:e.tool.behavior,definition:t.definition,rootOnly:e.tool.rootOnly})}function isPreparedRuntimeWorkflowTool(e){return e.task!==void 0}function createRegisteredHarnessToolDefinition(e){let t=e.definition;if(t.owner.kind===`framework`){let n=createTaskToolHarnessDefinitions().find(e=>e.name===t.name);if(n!==void 0)return{...n,behavior:e.behavior}}let n=t.execute;return{availableInSubagents:t.availableInSubagents,label:t.label??(t.owner.kind===`framework`&&t.name===WEB_SEARCH_TOOL_NAME?{start:resolveWebSearchActivityLabel}:void 0),approvalKey:t.approvalKey,behavior:e.behavior,description:t.description,execution:t.execution,executeInput:t.executeInput,execute:resolveAuthoredExecute({rawExecute:n,scope:t.name}),frameworkAction:t.owner.kind===`framework`&&t.name===LOAD_SKILL_TOOL_NAME?`load-skill`:void 0,inputSchema:t.inputSchema??UNSPECIFIED_INPUT_SCHEMA,name:t.name,approval:t.approval,outputSchema:t.outputSchema,rootOnly:e.rootOnly,toModelOutput:t.toModelOutput}}function resolveAuthoredExecute(e){let{rawExecute:t,scope:n}=e;return t===void 0?void 0:createToolExecuteWithAuth({execute:t,scope:n})}export{buildRuntimeIdentity,createExecutionNodeStep,createNodeHarnessTools};
@@ -1 +1 @@
1
- import{createInputResolvedEvent,encodeMessageStreamEvent,stampMessageStreamEvent}from"#protocol/message.js";import{getPendingCoordinationBatch}from"#harness/coordination.js";import{readDurableSession,replaceDurableSessionSnapshot}from"#execution/durable-session-store.js";import{getBackgroundTasks}from"#harness/workflow-tool-runs.js";import{resumeSessionInbox}from"#execution/session-inbox/resume.js";import{createTaskInputRequestId,retireProxyInputRequests}from"#harness/proxy-input-requests.js";import{coalesceDeliverPayloads}from"#execution/deliver-payloads.js";import{routeDeliverPayload}from"#subagents/hitl-proxy.js";import{sendTaskInboundPayload}from"#execution/tasks/parent/run-parent.js";import{resumeWorkflowToolRunAnswers,resumeWorkflowToolRunDismissal}from"#execution/tools/workflow/answer.js";async function routeProxiedDeliverStep(e){"use step";let t=readDurableSession(e.sessionState),n=e.delivery,r=new Map,i=new Map,a,o=n.caller===void 0&&n.taskDeliveryId===void 0,s=new Set;for(let[e,c]of n.payloads.entries()){let l=routeDeliverPayload({allowRoute:(e,n)=>!s.has(e)&&(n.taskId===void 0||getBackgroundTasks(t.state).get(n.taskId)!==void 0),payload:c,resolveMessage:o,state:t.state});a??=l.parentAction,l.forSelf!==void 0&&r.set(e,l.forSelf);for(let[t,r]of l.forChildren.entries()){if(r.answerHook!==void 0)for(let e of r.retireRequestIds)s.add(e);let a=[r.childContinuationToken,r.childSessionInbox?.sessionId??``,r.childResponseUrl??``,r.taskId??``].join(`\0`),o=i.get(a)??{answerHook:r.answerHook,childContinuationToken:r.childContinuationToken,childSessionInbox:r.childSessionInbox,childResponseUrl:r.childResponseUrl,dismissedRequestIds:[],metadata:[],payloads:[],retireRequestIds:[],sourcePayloadIndexes:[],taskId:r.taskId},c=o.payloads.length;if(o.payloads.push(r.payload),o.dismissedRequestIds.push(...r.dismissedRequestIds??[]),o.retireRequestIds.push(...r.retireRequestIds),o.sourcePayloadIndexes.push(e),l.forSelf===void 0&&t===0)for(let t of n.deliveryMetadata??[])t.payloadIndex===e&&o.metadata.push({...t,payloadIndex:c});i.set(a,o)}}let c=!1;for(let a of i.values()){let i=a.taskId;if(i!==void 0){let e=getBackgroundTasks(t.state).get(i)?.run;if(e===void 0){mergeStrandedResponses(r,a,i);continue}if(await sendTaskInboundPayload({taskInboxToken:e.address.hookToken,payload:{auth:n.auth,childContinuationToken:a.childContinuationToken,childSessionInbox:a.childSessionInbox,childResponseUrl:a.childResponseUrl,inputResponses:coalesceDeliverPayloads(a.payloads).inputResponses??[],kind:`input-response`,taskId:i}})===`unreachable`){mergeStrandedResponses(r,a,i);continue}t=retireProxyInputRequests(t,a.retireRequestIds),c=!0;continue}if(a.answerHook!==void 0){let n=coalesceDeliverPayloads(a.payloads).inputResponses??[];await resumeWorkflowToolRunAnswers(a.childContinuationToken,n),a.dismissedRequestIds.length>0&&await resumeWorkflowToolRunDismissal(a.childContinuationToken),a.answerHook.question!==void 0&&await emitQuestionResolutions({dismissedRequestIds:a.dismissedRequestIds,responses:n,sessionState:t.state,sessionWritable:e.sessionWritable}),t=retireProxyInputRequests(t,a.retireRequestIds),c=!0;continue}let o={...n,deliveryMetadata:a.metadata.length===0?void 0:a.metadata,payloads:a.payloads};await resumeSessionInbox(a.childSessionInbox??a.childContinuationToken,o),t=retireProxyInputRequests(t,a.retireRequestIds),c=!0}let l={serializedContext:e.serializedContext??{},sessionState:c?replaceDurableSessionSnapshot({session:t,state:e.sessionState}):e.sessionState};if(a!==void 0)return{...l,...a};let u=[...r].sort(([e],[t])=>e-t),d=u.flatMap(([e],t)=>(n.deliveryMetadata??[]).filter(t=>t.payloadIndex===e).map(e=>({...e,payloadIndex:t}))),f=u.length===0?void 0:{...n,deliveryMetadata:d.length===0?void 0:d,payloads:u.map(([,e])=>e)};return{...l,kind:`continue`,remainder:f}}async function emitQuestionResolutions(e){let t=getPendingCoordinationBatch(e.sessionState)?.event;if(t===void 0)return;let n=[...e.responses.map(e=>({kind:`question`,outcome:`answered`,requestId:e.requestId,response:e})),...e.dismissedRequestIds.map(e=>({kind:`question`,outcome:`ignored`,requestId:e}))];if(n.length===0)return;let r=e.sessionWritable.getWriter();try{await r.write(encodeMessageStreamEvent(stampMessageStreamEvent(createInputResolvedEvent({resolutions:n,...t}))))}finally{r.releaseLock()}}function mergeStrandedResponses(e,t,n){for(let[r,i]of t.payloads.entries()){let a=t.sourcePayloadIndexes[r];if(a===void 0)continue;let o=(i.inputResponses??[]).map(e=>({...e,requestId:createTaskInputRequestId(n,e.requestId)}));if(o.length===0)continue;let s=e.get(a);e.set(a,{...s,inputResponses:[...s?.inputResponses??[],...o]})}}export{routeProxiedDeliverStep};
1
+ import{createInputResolvedEvent,encodeMessageStreamEvent,stampMessageStreamEvent}from"#protocol/message.js";import{getPendingCoordinationBatch}from"#harness/coordination.js";import{readDurableSession,replaceDurableSessionSnapshot}from"#execution/durable-session-store.js";import{getBackgroundTasks}from"#harness/workflow-tool-runs.js";import{resumeSessionInbox}from"#execution/session-inbox/resume.js";import{createTaskInputRequestId,retireProxyInputRequests}from"#harness/proxy-input-requests.js";import{coalesceDeliverPayloads}from"#execution/deliver-payloads.js";import{hasDelegatedSessionContext}from"#execution/delegated-session-context.js";import{routeDeliverPayload}from"#subagents/hitl-proxy.js";import{sendTaskInboundPayload}from"#execution/tasks/parent/run-parent.js";import{resumeWorkflowToolRunAnswers,resumeWorkflowToolRunDismissal}from"#execution/tools/workflow/answer.js";async function routeProxiedDeliverStep(e){"use step";let t=readDurableSession(e.sessionState),n=e.delivery,r=new Map,i=new Map,a,o=!hasDelegatedSessionContext(e.serializedContext??{})&&n.caller===void 0&&n.taskDeliveryId===void 0,s=new Set;for(let[e,c]of n.payloads.entries()){let l=routeDeliverPayload({allowRoute:(e,n)=>!s.has(e)&&(n.taskId===void 0||getBackgroundTasks(t.state).get(n.taskId)!==void 0),payload:c,resolveMessage:o,state:t.state});a??=l.parentAction,l.forSelf!==void 0&&r.set(e,l.forSelf);for(let[t,r]of l.forChildren.entries()){if(r.answerHook!==void 0)for(let e of r.retireRequestIds)s.add(e);let a=[r.childContinuationToken,r.childSessionInbox?.sessionId??``,r.childResponseUrl??``,r.taskId??``].join(`\0`),o=i.get(a)??{answerHook:r.answerHook,childContinuationToken:r.childContinuationToken,childSessionInbox:r.childSessionInbox,childResponseUrl:r.childResponseUrl,dismissedRequestIds:[],metadata:[],payloads:[],retireRequestIds:[],sourcePayloadIndexes:[],taskId:r.taskId},c=o.payloads.length;if(o.payloads.push(r.payload),o.dismissedRequestIds.push(...r.dismissedRequestIds??[]),o.retireRequestIds.push(...r.retireRequestIds),o.sourcePayloadIndexes.push(e),l.forSelf===void 0&&t===0)for(let t of n.deliveryMetadata??[])t.payloadIndex===e&&o.metadata.push({...t,payloadIndex:c});i.set(a,o)}}let c=!1;for(let a of i.values()){let i=a.taskId;if(i!==void 0){let e=getBackgroundTasks(t.state).get(i)?.run;if(e===void 0){mergeStrandedResponses(r,a,i);continue}if(await sendTaskInboundPayload({taskInboxToken:e.address.hookToken,payload:{auth:n.auth,childContinuationToken:a.childContinuationToken,childSessionInbox:a.childSessionInbox,childResponseUrl:a.childResponseUrl,inputResponses:coalesceDeliverPayloads(a.payloads).inputResponses??[],kind:`input-response`,taskId:i}})===`unreachable`){mergeStrandedResponses(r,a,i);continue}t=retireProxyInputRequests(t,a.retireRequestIds),c=!0;continue}if(a.answerHook!==void 0){let n=coalesceDeliverPayloads(a.payloads).inputResponses??[];await resumeWorkflowToolRunAnswers(a.childContinuationToken,n),a.dismissedRequestIds.length>0&&await resumeWorkflowToolRunDismissal(a.childContinuationToken),a.answerHook.question!==void 0&&await emitQuestionResolutions({dismissedRequestIds:a.dismissedRequestIds,responses:n,sessionState:t.state,sessionWritable:e.sessionWritable}),t=retireProxyInputRequests(t,a.retireRequestIds),c=!0;continue}let o={...n,deliveryMetadata:a.metadata.length===0?void 0:a.metadata,payloads:a.payloads};await resumeSessionInbox(a.childSessionInbox??a.childContinuationToken,o),t=retireProxyInputRequests(t,a.retireRequestIds),c=!0}let l={serializedContext:e.serializedContext??{},sessionState:c?replaceDurableSessionSnapshot({session:t,state:e.sessionState}):e.sessionState};if(a!==void 0)return{...l,...a};let u=[...r].sort(([e],[t])=>e-t),d=u.flatMap(([e],t)=>(n.deliveryMetadata??[]).filter(t=>t.payloadIndex===e).map(e=>({...e,payloadIndex:t}))),f=u.length===0?void 0:{...n,deliveryMetadata:d.length===0?void 0:d,payloads:u.map(([,e])=>e)};return{...l,kind:`continue`,remainder:f}}async function emitQuestionResolutions(e){let t=getPendingCoordinationBatch(e.sessionState)?.event;if(t===void 0)return;let n=[...e.responses.map(e=>({kind:`question`,outcome:`answered`,requestId:e.requestId,response:e})),...e.dismissedRequestIds.map(e=>({kind:`question`,outcome:`ignored`,requestId:e}))];if(n.length===0)return;let r=e.sessionWritable.getWriter();try{await r.write(encodeMessageStreamEvent(stampMessageStreamEvent(createInputResolvedEvent({resolutions:n,...t}))))}finally{r.releaseLock()}}function mergeStrandedResponses(e,t,n){for(let[r,i]of t.payloads.entries()){let a=t.sourcePayloadIndexes[r];if(a===void 0)continue;let o=(i.inputResponses??[]).map(e=>({...e,requestId:createTaskInputRequestId(n,e.requestId)}));if(o.length===0)continue;let s=e.get(a);e.set(a,{...s,inputResponses:[...s?.inputResponses??[],...o]})}}export{routeProxiedDeliverStep};
@@ -0,0 +1,23 @@
1
+ import { type ChannelAdapter, type ChannelAdapterContext } from "#channel/adapter.js";
2
+ import type { ContextContainer } from "#context/container.js";
3
+ import { type MessageStreamEvent, type UnstampedMessageStreamEvent } from "#protocol/message.js";
4
+ interface ChannelEventInput {
5
+ readonly adapter: ChannelAdapter;
6
+ readonly adapterCtx: ChannelAdapterContext;
7
+ readonly ctx: ContextContainer;
8
+ readonly deliveryIds?: readonly string[];
9
+ readonly event: UnstampedMessageStreamEvent;
10
+ readonly writer: WritableStreamDefaultWriter<Uint8Array>;
11
+ }
12
+ /**
13
+ * Publishes an already-routed event, then runs its stream-event hooks on the
14
+ * stamped event. Callers with subscribed hooks must hold an active context scope.
15
+ */
16
+ export declare function publishChannelEvent(input: ChannelEventInput): Promise<MessageStreamEvent>;
17
+ /**
18
+ * Publishes without hooks. Only `createSessionEventSink` uses this: turn steps
19
+ * run memory lifecycle before hooks, and subagent notifications release the
20
+ * writer before hooks. Both dispatch hooks themselves after `sink.emit`.
21
+ */
22
+ export declare function writeChannelEvent(input: ChannelEventInput): Promise<MessageStreamEvent>;
23
+ export {};
@@ -0,0 +1 @@
1
+ import{callAdapterEventHandler}from"#channel/adapter.js";import{encodeMessageStreamEvent,stampMessageStreamEvent}from"#protocol/message.js";import{BundleKey}from"#runtime/sessions/runtime-context-keys.js";import{dispatchStreamEventHooks}from"#context/hook-lifecycle.js";import{setChannelContext}from"#execution/channel-context.js";async function publishChannelEvent(e){let t=await writeChannelEvent(e);return await dispatchStreamEventHooks({ctx:e.ctx,registry:e.ctx.require(BundleKey).hookRegistry,event:t}),t}async function writeChannelEvent(e){let t=await callAdapterEventHandler(e.adapter,e.event,e.adapterCtx);setChannelContext(e.ctx,{...e.adapter,state:{...e.adapterCtx.state}});let n=stampMessageStreamEvent(t,e.deliveryIds);return await e.writer.write(encodeMessageStreamEvent(n)),n}export{publishChannelEvent,writeChannelEvent};
@@ -1 +1 @@
1
- import{ConversationContextKey}from"#shared/conversation-context.js";import{ContextContainer,contextStorage}from"#context/container.js";import{ActivityObserverKey,AuthKey,CapabilitiesKey,ChannelDeliveryKey,ChannelInstrumentationKey,ChannelRequestIdKey,ContinuationHookTokensKey,ContinuationTokenKey,ConversationIdKey,DynamicSubagentAgentConfigKey,InitiatorAuthKey,ModeKey,ParentSessionKey,ParentTraceContextKey,ScheduleIdKey,SessionCallbackKey,SessionTitleKey,TaskDeliveryPolicyKey}from"#context/keys.js";import{BundleKey}from"#runtime/sessions/runtime-context-keys.js";import{resolveInstrumentationEnvironment}from"#internal/application/dev-environment.js";import{readConversationId}from"#tracing/conversation-context.js";import{setChannelContext}from"#execution/channel-context.js";import{deriveSessionTitle}from"#execution/eve-workflow-attributes.js";import{buildConversationContext}from"#channel/conversation-context.js";function buildRunContext(e){let{bundle:t,run:n}=e,r=new ContextContainer,i=n.auth,a=readConversationId(n.conversationId);if(a!==void 0&&r.set(ConversationIdKey,a),r.set(BundleKey,t),setChannelContext(r,n.adapter,{channelName:n.channelName}),r.set(ConversationContextKey,buildConversationContext(n,resolveInstrumentationEnvironment())),n.parent===void 0){let e=deriveSessionTitle(n.title??n.input.message);e!==void 0&&r.set(SessionTitleKey,e)}if(n.channelMetadata!==void 0){let e=r.get(ChannelInstrumentationKey);r.set(ChannelInstrumentationKey,{channelType:e?.channelType??n.channelMetadata.channelType,kind:e?.kind??n.channelMetadata.kind,metadata:n.channelMetadata.metadata})}n.continuationToken!==void 0&&(r.set(ContinuationTokenKey,n.continuationToken),r.set(ContinuationHookTokensKey,[n.continuationToken])),r.set(ModeKey,n.mode),r.set(AuthKey,i),(n.initiatorAuth!==void 0||n.input.message!==void 0)&&r.set(InitiatorAuthKey,n.initiatorAuth??i),e.dynamicSubagentAgentConfig!==void 0&&r.set(DynamicSubagentAgentConfigKey,e.dynamicSubagentAgentConfig),n.capabilities!==void 0&&r.set(CapabilitiesKey,n.capabilities),n.requestId!==void 0&&r.set(ChannelRequestIdKey,n.requestId);let o=contextStorage.getStore()?.get(ScheduleIdKey);return o!==void 0&&r.set(ScheduleIdKey,o),r.set(TaskDeliveryPolicyKey,n.taskDeliveryPolicy??(n.parent!==void 0||o!==void 0?`cohort`:`auto`)),n.delivery!==void 0&&r.set(ChannelDeliveryKey,n.delivery),n.callback!==void 0&&r.set(SessionCallbackKey,n.callback),n.activityObserver!==void 0&&r.set(ActivityObserverKey,n.activityObserver),n.parent!==void 0&&r.set(ParentSessionKey,n.parent),n.parentTraceContext!==void 0&&r.set(ParentTraceContextKey,n.parentTraceContext),r}export{buildRunContext};
1
+ import{ConversationContextKey}from"#shared/conversation-context.js";import{ContextContainer,contextStorage}from"#context/container.js";import{ActivityObserverKey,AuthKey,CapabilitiesKey,ChannelDeliveryKey,ChannelInstrumentationKey,ChannelRequestIdKey,ContinuationHookTokensKey,ContinuationTokenKey,ConversationIdKey,DynamicSubagentAgentConfigKey,InitiatorAuthKey,ParentSessionKey,ParentTraceContextKey,ScheduleIdKey,SessionCallbackKey,SessionTitleKey,TaskDeliveryPolicyKey}from"#context/keys.js";import{BundleKey}from"#runtime/sessions/runtime-context-keys.js";import{resolveInstrumentationEnvironment}from"#internal/application/dev-environment.js";import{setChannelContext}from"#execution/channel-context.js";import{deriveSessionTitle}from"#execution/eve-workflow-attributes.js";import{readConversationId}from"#shared/conversation-identity.js";import{buildConversationContext}from"#channel/conversation-context.js";function buildRunContext(e){let{bundle:t,run:n}=e,r=new ContextContainer,i=n.auth,a=readConversationId(n.conversationId);if(a!==void 0&&r.set(ConversationIdKey,a),r.set(BundleKey,t),setChannelContext(r,n.adapter,{channelName:n.channelName}),r.set(ConversationContextKey,buildConversationContext(n,resolveInstrumentationEnvironment())),n.parent===void 0){let e=deriveSessionTitle(n.title??n.input.message);e!==void 0&&r.set(SessionTitleKey,e)}if(n.channelMetadata!==void 0){let e=r.get(ChannelInstrumentationKey);r.set(ChannelInstrumentationKey,{channelType:e?.channelType??n.channelMetadata.channelType,kind:e?.kind??n.channelMetadata.kind,metadata:n.channelMetadata.metadata})}n.continuationToken!==void 0&&(r.set(ContinuationTokenKey,n.continuationToken),r.set(ContinuationHookTokensKey,[n.continuationToken])),r.set(AuthKey,i),(n.initiatorAuth!==void 0||n.input.message!==void 0)&&r.set(InitiatorAuthKey,n.initiatorAuth??i),e.dynamicSubagentAgentConfig!==void 0&&r.set(DynamicSubagentAgentConfigKey,e.dynamicSubagentAgentConfig),n.capabilities!==void 0&&r.set(CapabilitiesKey,n.capabilities),n.requestId!==void 0&&r.set(ChannelRequestIdKey,n.requestId);let o=contextStorage.getStore()?.get(ScheduleIdKey);return o!==void 0&&r.set(ScheduleIdKey,o),r.set(TaskDeliveryPolicyKey,n.taskDeliveryPolicy??(n.parent!==void 0||o!==void 0?`cohort`:`auto`)),n.delivery!==void 0&&r.set(ChannelDeliveryKey,n.delivery),n.callback!==void 0&&r.set(SessionCallbackKey,n.callback),n.activityObserver!==void 0&&r.set(ActivityObserverKey,n.activityObserver),n.parent!==void 0&&r.set(ParentSessionKey,n.parent),n.parentTraceContext!==void 0&&r.set(ParentTraceContextKey,n.parentTraceContext),r}export{buildRunContext};
@@ -1 +1 @@
1
- import{mkdir,readdir,rm,stat,utimes,writeFile}from"node:fs/promises";import{dirname,join}from"node:path";import"node:fs";import{resolveSandboxCacheDirectory}from"#internal/application/paths.js";import{expectDockerSuccess}from"#execution/sandbox/bindings/docker-utils.js";import{createDockerCli}from"#execution/sandbox/bindings/docker-cli.js";import{DOCKER_SANDBOX_LABEL}from"#execution/sandbox/bindings/docker-container.js";import{LOCAL_SANDBOX_TEMPLATE_RECENT_WINDOW_MS,LOCAL_SANDBOX_TEMPLATE_RETAIN_COUNT,selectStaleTemplateEntries}from"#execution/sandbox/bindings/local-template-prune.js";const DOCKER_TEMPLATE_IMAGE_REPOSITORY=`eve-sandbox-template`;async function pruneDockerSandboxTemplates(e){let t=e.dockerCli??createDockerCli(),n=resolveDockerTemplateMarkersDirectory(e.appRoot),r;try{r=await readdir(n,{withFileTypes:!0})}catch(e){if(e instanceof Error&&`code`in e&&e.code===`ENOENT`)return;throw e}let i=await Promise.all(r.filter(e=>e.isFile()).map(async e=>{let t=join(n,e.name);return{imageTag:e.name,mtimeMs:(await stat(t)).mtimeMs,path:t}})),a=selectStaleTemplateEntries(i,{now:e.now??Date.now(),recentWindowMs:e.recentWindowMs??LOCAL_SANDBOX_TEMPLATE_RECENT_WINDOW_MS,retainCount:e.retainCount??LOCAL_SANDBOX_TEMPLATE_RETAIN_COUNT});for(let e of a){let n=await t.run([`rmi`,dockerTemplateImageReferenceFromTag(e.imageTag)]),r=n.exitCode!==0&&/no such image/i.test(n.stderr);(n.exitCode===0||r)&&await rm(e.path,{force:!0})}}function dockerTemplateImageReference(e){return dockerTemplateImageReferenceFromTag(dockerTemplateImageTag(e))}function dockerTemplateImageReferenceFromTag(e){return`${DOCKER_TEMPLATE_IMAGE_REPOSITORY}:${e}`}function dockerTemplateImageTag(e){return`${e.templateKey.toLowerCase()}-${e.optionsHash}`}function resolveDockerTemplateMarkerPath(e,t){return join(resolveDockerTemplateMarkersDirectory(e),dockerTemplateImageTag(t))}async function touchDockerTemplateMarker(e,t){await mkdir(dirname(e),{recursive:!0});try{let t=new Date;await utimes(e,t,t)}catch{await writeFile(e,`${t}\n`)}}async function dockerImageExists(e,t){return(await e.run([`image`,`inspect`,`--format`,`{{.Id}}`,t])).exitCode===0}async function commitDockerTemplateImage(e){let t=await e.cli.run([`commit`,`--change`,`LABEL ${DOCKER_SANDBOX_LABEL}=1`,`--change`,`LABEL ${DOCKER_SANDBOX_LABEL}.role=template`,`--change`,`LABEL ${DOCKER_SANDBOX_LABEL}.template-key=${e.templateKey}`,e.containerIdentity,e.imageReference]);return t.exitCode===0?`committed`:(/already(?:\s*|-)?exists/iu.test(`${t.stderr}\n${t.stdout}`)&&await dockerImageExists(e.cli,e.imageReference)||expectDockerSuccess(t,`commit sandbox template image "${e.imageReference}"`),`reused`)}async function ensureDockerBaseImage(e,t){if(t.pullPolicy===`always`){expectDockerSuccess(await e.run([`pull`,t.image]),`pull base image "${t.image}"`);return}if(!await dockerImageExists(e,t.image)){if(t.pullPolicy===`never`)throw Error(`The local sandbox base image "${t.image}" is not present locally and pullPolicy is "never". Pull the image manually or relax the pull policy.`);expectDockerSuccess(await e.run([`pull`,t.image]),`pull base image "${t.image}"`)}}function resolveDockerTemplateMarkersDirectory(e){return join(resolveSandboxCacheDirectory(e),`docker`,`templates`)}export{DOCKER_TEMPLATE_IMAGE_REPOSITORY,commitDockerTemplateImage,dockerImageExists,dockerTemplateImageReference,ensureDockerBaseImage,pruneDockerSandboxTemplates,resolveDockerTemplateMarkerPath,touchDockerTemplateMarker};
1
+ import{mkdir,readdir,rm,stat,utimes,writeFile}from"node:fs/promises";import"node:fs";import{dirname,join}from"node:path";import{resolveSandboxCacheDirectory}from"#internal/application/paths.js";import{expectDockerSuccess}from"#execution/sandbox/bindings/docker-utils.js";import{createDockerCli}from"#execution/sandbox/bindings/docker-cli.js";import{DOCKER_SANDBOX_LABEL}from"#execution/sandbox/bindings/docker-container.js";import{LOCAL_SANDBOX_TEMPLATE_RECENT_WINDOW_MS,LOCAL_SANDBOX_TEMPLATE_RETAIN_COUNT,selectStaleTemplateEntries}from"#execution/sandbox/bindings/local-template-prune.js";const DOCKER_TEMPLATE_IMAGE_REPOSITORY=`eve-sandbox-template`;async function pruneDockerSandboxTemplates(e){let t=e.dockerCli??createDockerCli(),n=resolveDockerTemplateMarkersDirectory(e.appRoot),r;try{r=await readdir(n,{withFileTypes:!0})}catch(e){if(e instanceof Error&&`code`in e&&e.code===`ENOENT`)return;throw e}let i=await Promise.all(r.filter(e=>e.isFile()).map(async e=>{let t=join(n,e.name);return{imageTag:e.name,mtimeMs:(await stat(t)).mtimeMs,path:t}})),a=selectStaleTemplateEntries(i,{now:e.now??Date.now(),recentWindowMs:e.recentWindowMs??LOCAL_SANDBOX_TEMPLATE_RECENT_WINDOW_MS,retainCount:e.retainCount??LOCAL_SANDBOX_TEMPLATE_RETAIN_COUNT});for(let e of a){let n=await t.run([`rmi`,dockerTemplateImageReferenceFromTag(e.imageTag)]),r=n.exitCode!==0&&/no such image/i.test(n.stderr);(n.exitCode===0||r)&&await rm(e.path,{force:!0})}}function dockerTemplateImageReference(e){return dockerTemplateImageReferenceFromTag(dockerTemplateImageTag(e))}function dockerTemplateImageReferenceFromTag(e){return`${DOCKER_TEMPLATE_IMAGE_REPOSITORY}:${e}`}function dockerTemplateImageTag(e){return`${e.templateKey.toLowerCase()}-${e.optionsHash}`}function resolveDockerTemplateMarkerPath(e,t){return join(resolveDockerTemplateMarkersDirectory(e),dockerTemplateImageTag(t))}async function touchDockerTemplateMarker(e,t){await mkdir(dirname(e),{recursive:!0});try{let t=new Date;await utimes(e,t,t)}catch{await writeFile(e,`${t}\n`)}}async function dockerImageExists(e,t){return(await e.run([`image`,`inspect`,`--format`,`{{.Id}}`,t])).exitCode===0}async function commitDockerTemplateImage(e){let t=await e.cli.run([`commit`,`--change`,`LABEL ${DOCKER_SANDBOX_LABEL}=1`,`--change`,`LABEL ${DOCKER_SANDBOX_LABEL}.role=template`,`--change`,`LABEL ${DOCKER_SANDBOX_LABEL}.template-key=${e.templateKey}`,e.containerIdentity,e.imageReference]);return t.exitCode===0?`committed`:(/already(?:\s*|-)?exists/iu.test(`${t.stderr}\n${t.stdout}`)&&await dockerImageExists(e.cli,e.imageReference)||expectDockerSuccess(t,`commit sandbox template image "${e.imageReference}"`),`reused`)}async function ensureDockerBaseImage(e,t){if(t.pullPolicy===`always`){expectDockerSuccess(await e.run([`pull`,t.image]),`pull base image "${t.image}"`);return}if(!await dockerImageExists(e,t.image)){if(t.pullPolicy===`never`)throw Error(`The local sandbox base image "${t.image}" is not present locally and pullPolicy is "never". Pull the image manually or relax the pull policy.`);expectDockerSuccess(await e.run([`pull`,t.image]),`pull base image "${t.image}"`)}}function resolveDockerTemplateMarkersDirectory(e){return join(resolveSandboxCacheDirectory(e),`docker`,`templates`)}export{DOCKER_TEMPLATE_IMAGE_REPOSITORY,commitDockerTemplateImage,dockerImageExists,dockerTemplateImageReference,ensureDockerBaseImage,pruneDockerSandboxTemplates,resolveDockerTemplateMarkerPath,touchDockerTemplateMarker};