eve 0.44.4 → 0.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (779) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +13 -12
  3. package/dist/src/acp/adapter.d.ts +1 -1
  4. package/dist/src/approval/definition.d.ts +84 -0
  5. package/dist/src/approval/definition.js +1 -0
  6. package/dist/src/{runtime/governance → channel}/auth/http-basic.d.ts +1 -1
  7. package/dist/src/{runtime/governance → channel}/auth/jwt-ecdsa.d.ts +1 -1
  8. package/dist/src/channel/auth/jwt-ecdsa.js +1 -0
  9. package/dist/src/{runtime/governance → channel}/auth/jwt-hmac.d.ts +1 -1
  10. package/dist/src/channel/auth/jwt-hmac.js +1 -0
  11. package/dist/src/{runtime/governance → channel}/auth/oidc.d.ts +1 -1
  12. package/dist/src/channel/auth/oidc.js +1 -0
  13. package/dist/src/{runtime/governance → channel}/auth/token-claims.d.ts +1 -1
  14. package/dist/src/{runtime/governance → channel}/auth/types.d.ts +1 -1
  15. package/dist/src/{runtime/governance → channel}/auth/vercel-oidc-project.d.ts +1 -1
  16. package/dist/src/channel/channel-operations.d.ts +1 -1
  17. package/dist/src/channel/channel-operations.js +1 -1
  18. package/dist/src/channel/instrumentation.d.ts +1 -0
  19. package/dist/src/channel/instrumentation.js +1 -1
  20. package/dist/src/channel/resolve-text.d.ts +1 -1
  21. package/dist/src/channel/routes.d.ts +1 -1
  22. package/dist/src/channel/session.d.ts +1 -1
  23. package/dist/src/channel/session.js +1 -1
  24. package/dist/src/channel/types.d.ts +2 -2
  25. package/dist/src/chunks/{use-eve-agent-BJwaMe5k.js → use-eve-agent-C46Kan_I.js} +385 -106
  26. package/dist/src/chunks/{use-eve-agent-BtsOXv3s.js → use-eve-agent-OtHRoxIS.js} +385 -106
  27. package/dist/src/cli/banner.js +1 -1
  28. package/dist/src/cli/commands/agent-instructions.js +2 -2
  29. package/dist/src/cli/commands/channel-add-conflicts.js +1 -1
  30. package/dist/src/cli/commands/extension-build.js +1 -1
  31. package/dist/src/cli/commands/extension-init.js +1 -1
  32. package/dist/src/cli/commands/info.js +1 -1
  33. package/dist/src/cli/commands/init.js +1 -1
  34. package/dist/src/cli/commands/trace.js +1 -1
  35. package/dist/src/cli/dev/tui/remote-auth.js +1 -1
  36. package/dist/src/cli/dev/tui/setup-selection-input.d.ts +3 -1
  37. package/dist/src/cli/dev/tui/setup-selection-input.js +2 -2
  38. package/dist/src/cli/dev/tui/terminal-renderer.js +2 -2
  39. package/dist/src/cli/dev/tui/traces/trace-conversation.d.ts +1 -1
  40. package/dist/src/cli/dev/tui/traces/trace-conversation.js +1 -1
  41. package/dist/src/cli/dev/tui/traces/trace-viewer-state.js +1 -1
  42. package/dist/src/cli/invoke/result.d.ts +1 -1
  43. package/dist/src/cli/ui/live-row.js +1 -1
  44. package/dist/src/cli/ui/output.js +1 -1
  45. package/dist/src/client/agent-info-schema.d.ts +1757 -302
  46. package/dist/src/client/agent-info-schema.js +1 -1
  47. package/dist/src/client/client.js +1 -1
  48. package/dist/src/client/eve-agent-store.d.ts +6 -5
  49. package/dist/src/client/eve-agent-store.js +1 -1
  50. package/dist/src/client/health-response-error.d.ts +5 -0
  51. package/dist/src/client/health-response-error.js +1 -0
  52. package/dist/src/client/health-schema.d.ts +7 -0
  53. package/dist/src/client/health-schema.js +1 -0
  54. package/dist/src/client/index.d.ts +6 -3
  55. package/dist/src/client/index.js +1 -1
  56. package/dist/src/client/message-action-parts.d.ts +2 -2
  57. package/dist/src/client/message-reducer-types.d.ts +1 -1
  58. package/dist/src/client/reducer.d.ts +1 -1
  59. package/dist/src/client/session-utils.d.ts +1 -1
  60. package/dist/src/client/session.d.ts +1 -1
  61. package/dist/src/client/session.js +1 -1
  62. package/dist/src/client/types.d.ts +3 -7
  63. package/dist/src/compiler/artifacts.d.ts +37 -11
  64. package/dist/src/compiler/artifacts.js +1 -1
  65. package/dist/src/compiler/channel-route-plan.d.ts +10 -0
  66. package/dist/src/compiler/channel-route-plan.js +1 -0
  67. package/dist/src/compiler/compile-agent.d.ts +2 -2
  68. package/dist/src/compiler/compile-agent.js +2 -2
  69. package/dist/src/compiler/compile-from-memory.d.ts +13 -52
  70. package/dist/src/compiler/compile-from-memory.js +1 -1
  71. package/dist/src/compiler/diagnostics.d.ts +38 -0
  72. package/dist/src/compiler/diagnostics.js +1 -0
  73. package/dist/src/compiler/extension-compatibility.d.ts +14 -11
  74. package/dist/src/compiler/extension-compatibility.js +1 -1
  75. package/dist/src/compiler/load-binding-namespace.d.ts +9 -0
  76. package/dist/src/compiler/load-binding-namespace.js +1 -0
  77. package/dist/src/compiler/manifest.d.ts +172 -51
  78. package/dist/src/compiler/manifest.js +1 -1
  79. package/dist/src/compiler/module-map.d.ts +12 -30
  80. package/dist/src/compiler/module-map.js +3 -3
  81. package/dist/src/compiler/node-source-state.d.ts +24 -0
  82. package/dist/src/compiler/node-source-state.js +1 -0
  83. package/dist/src/compiler/normalize-agent-config.d.ts +5 -1
  84. package/dist/src/compiler/normalize-agent-config.js +1 -1
  85. package/dist/src/compiler/normalize-channel.d.ts +8 -2
  86. package/dist/src/compiler/normalize-channel.js +1 -1
  87. package/dist/src/compiler/normalize-connection.d.ts +1 -1
  88. package/dist/src/compiler/normalize-connection.js +1 -1
  89. package/dist/src/compiler/normalize-helpers.d.ts +13 -4
  90. package/dist/src/compiler/normalize-helpers.js +1 -1
  91. package/dist/src/compiler/normalize-hook.d.ts +4 -11
  92. package/dist/src/compiler/normalize-hook.js +1 -1
  93. package/dist/src/compiler/normalize-instructions.d.ts +3 -3
  94. package/dist/src/compiler/normalize-instructions.js +1 -1
  95. package/dist/src/compiler/normalize-manifest-helpers.d.ts +29 -0
  96. package/dist/src/compiler/normalize-manifest-helpers.js +1 -0
  97. package/dist/src/compiler/normalize-manifest.d.ts +8 -4
  98. package/dist/src/compiler/normalize-manifest.js +1 -1
  99. package/dist/src/compiler/normalize-sandbox.d.ts +1 -1
  100. package/dist/src/compiler/normalize-sandbox.js +1 -1
  101. package/dist/src/compiler/normalize-schedule.d.ts +2 -2
  102. package/dist/src/compiler/normalize-schedule.js +1 -1
  103. package/dist/src/compiler/normalize-skill.d.ts +2 -2
  104. package/dist/src/compiler/normalize-skill.js +1 -1
  105. package/dist/src/compiler/normalize-subagent.d.ts +21 -39
  106. package/dist/src/compiler/normalize-subagent.js +1 -1
  107. package/dist/src/compiler/normalize-tool.d.ts +2 -1
  108. package/dist/src/compiler/normalize-tool.js +1 -1
  109. package/dist/src/compiler/project-sources.d.ts +71 -0
  110. package/dist/src/compiler/project-sources.js +1 -0
  111. package/dist/src/compiler/remote-agent-node.d.ts +8 -0
  112. package/dist/src/compiler/remote-agent-node.js +1 -1
  113. package/dist/src/compiler/source-graph.d.ts +153 -0
  114. package/dist/src/compiler/source-graph.js +1 -0
  115. package/dist/src/compiler/validate-artifact.d.ts +17 -0
  116. package/dist/src/compiler/validate-artifact.js +1 -0
  117. package/dist/src/compiler/workspace-resources.js +1 -1
  118. package/dist/src/connections/errors.d.ts +125 -0
  119. package/dist/src/connections/errors.js +1 -0
  120. package/dist/src/context/build-base-tool-context.d.ts +2 -2
  121. package/dist/src/context/build-callback-context.d.ts +1 -1
  122. package/dist/src/context/build-dynamic-tools.js +1 -1
  123. package/dist/src/context/dynamic-instruction-lifecycle.js +1 -1
  124. package/dist/src/context/dynamic-resolve-context.d.ts +1 -1
  125. package/dist/src/context/dynamic-skill-lifecycle.js +1 -1
  126. package/dist/src/context/dynamic-subagent-lifecycle.d.ts +0 -2
  127. package/dist/src/context/dynamic-subagent-lifecycle.js +1 -1
  128. package/dist/src/context/dynamic-tool-lifecycle.d.ts +2 -2
  129. package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
  130. package/dist/src/context/key-names.d.ts +12 -0
  131. package/dist/src/context/key-names.js +1 -0
  132. package/dist/src/context/keys.d.ts +8 -1
  133. package/dist/src/context/keys.js +1 -1
  134. package/dist/src/context/providers/connection-key.d.ts +1 -1
  135. package/dist/src/context/providers/connection.d.ts +1 -1
  136. package/dist/src/context/session-context.d.ts +32 -0
  137. package/dist/src/discover/discover-agent.d.ts +0 -13
  138. package/dist/src/discover/discover-agent.js +1 -1
  139. package/dist/src/discover/discover-subagent.js +1 -1
  140. package/dist/src/discover/extensions.d.ts +0 -6
  141. package/dist/src/discover/extensions.js +1 -1
  142. package/dist/src/discover/manifest.d.ts +4 -1
  143. package/dist/src/discover/manifest.js +1 -1
  144. package/dist/src/dynamic/definition.d.ts +117 -0
  145. package/dist/src/dynamic/definition.js +1 -0
  146. package/dist/src/evals/autoevals-client.js +1 -1
  147. package/dist/src/evals/index.d.ts +1 -1
  148. package/dist/src/evals/match.d.ts +1 -1
  149. package/dist/src/evals/runner/reporters/console.js +1 -1
  150. package/dist/src/evals/session.d.ts +1 -1
  151. package/dist/src/evals/target.js +1 -1
  152. package/dist/src/evals/types.d.ts +1 -1
  153. package/dist/src/eve-channel/index.d.ts +12 -0
  154. package/dist/src/eve-channel/index.js +1 -0
  155. package/dist/src/eve-channel/request.d.ts +49 -0
  156. package/dist/src/eve-channel/request.js +3 -0
  157. package/dist/src/eve-channel/support.d.ts +34 -0
  158. package/dist/src/eve-channel/support.js +1 -0
  159. package/dist/src/eve-channel/types.d.ts +128 -0
  160. package/dist/src/eve-channel/types.js +1 -0
  161. package/dist/src/execution/agent-handle-dispatch.d.ts +1 -1
  162. package/dist/src/execution/agent-handle-dispatch.js +1 -1
  163. package/dist/src/execution/authorization-callback-match.d.ts +1 -1
  164. package/dist/src/execution/cancel-descendant-turns-step.js +1 -1
  165. package/dist/src/execution/compaction.js +1 -1
  166. package/dist/src/execution/connection-auth-tool-result.d.ts +1 -1
  167. package/dist/src/{runtime → execution}/connections/callback-route.d.ts +2 -20
  168. package/dist/src/execution/connections/callback-route.js +1 -0
  169. package/dist/src/execution/create-session-step.js +1 -1
  170. package/dist/src/execution/delegated-parent-notification.d.ts +2 -2
  171. package/dist/src/execution/delegated-parent-notification.js +1 -1
  172. package/dist/src/execution/delegated-parent-result.d.ts +1 -1
  173. package/dist/src/execution/delegated-parent-result.js +1 -1
  174. package/dist/src/execution/delegation-tool.d.ts +1 -1
  175. package/dist/src/execution/delegation-tool.js +1 -1
  176. package/dist/src/execution/dispatch-action-failures.d.ts +1 -1
  177. package/dist/src/execution/dispatch-runtime-actions-shared.d.ts +1 -2
  178. package/dist/src/execution/dispatch-runtime-actions-shared.js +1 -1
  179. package/dist/src/execution/dispatch-runtime-actions-step.js +1 -1
  180. package/dist/src/execution/dispatch-workflow-runtime-actions-step.d.ts +1 -1
  181. package/dist/src/execution/durable-session-migrations/turn-workflow.d.ts +1 -1
  182. package/dist/src/execution/durable-session-store.js +1 -1
  183. package/dist/src/execution/effective-output-schema.d.ts +2 -1
  184. package/dist/src/execution/eve-workflow-attributes.d.ts +6 -0
  185. package/dist/src/execution/eve-workflow-attributes.js +1 -1
  186. package/dist/src/execution/forward-turn-cancellation-step.js +1 -1
  187. package/dist/src/execution/node-step.js +1 -1
  188. package/dist/src/execution/remote-agent-dispatch.d.ts +10 -8
  189. package/dist/src/execution/remote-agent-dispatch.js +1 -1
  190. package/dist/src/execution/runtime-context.js +1 -1
  191. package/dist/src/execution/sandbox/{bash-tool.d.ts → bash.d.ts} +2 -2
  192. package/dist/src/execution/sandbox/bindings/vercel-credentials.js +1 -1
  193. package/dist/src/execution/sandbox/glob-tool.js +1 -1
  194. package/dist/src/execution/sandbox/grep-tool.js +1 -1
  195. package/dist/src/execution/sandbox/{read-file-tool.d.ts → read-file.d.ts} +2 -2
  196. package/dist/src/execution/sandbox/{read-file-tool.js → read-file.js} +1 -1
  197. package/dist/src/execution/sandbox/{write-file-tool.d.ts → write-file.d.ts} +2 -2
  198. package/dist/src/execution/sandbox/write-file.js +1 -0
  199. package/dist/src/execution/session-callback-route.d.ts +2 -0
  200. package/dist/src/execution/session-callback-route.js +1 -0
  201. package/dist/src/execution/session-callback-step.js +1 -1
  202. package/dist/src/execution/session-timeout-steps.js +1 -1
  203. package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
  204. package/dist/src/execution/subagent-adapter.js +1 -1
  205. package/dist/src/execution/subagent-hitl-proxy.d.ts +1 -1
  206. package/dist/src/execution/subagent-invocation.d.ts +0 -3
  207. package/dist/src/execution/subagent-invocation.js +1 -1
  208. package/dist/src/execution/subagent-start-local.d.ts +1 -2
  209. package/dist/src/execution/subagent-start-local.js +1 -1
  210. package/dist/src/execution/subagent-start-remote.d.ts +1 -2
  211. package/dist/src/execution/subagent-start-remote.js +1 -1
  212. package/dist/src/execution/subagent-tool.d.ts +4 -8
  213. package/dist/src/execution/subagent-tool.js +1 -1
  214. package/dist/src/execution/subagent-usage-span.d.ts +1 -1
  215. package/dist/src/execution/task-input-response-route.d.ts +2 -0
  216. package/dist/src/execution/task-input-response-route.js +1 -0
  217. package/dist/src/execution/tasks/child/instructions.js +1 -1
  218. package/dist/src/execution/tasks/child/update.d.ts +1 -1
  219. package/dist/src/execution/tasks/child/update.js +1 -1
  220. package/dist/src/execution/tasks/parent/continuation-dispatch.d.ts +1 -1
  221. package/dist/src/execution/tasks/parent/control-shared.d.ts +1 -1
  222. package/dist/src/execution/tasks/parent/delegate.d.ts +2 -2
  223. package/dist/src/execution/tasks/parent/delegate.js +1 -1
  224. package/dist/src/execution/tasks/parent/dispatch-task-step.js +1 -1
  225. package/dist/src/execution/tasks/parent/dispatch.d.ts +3 -1
  226. package/dist/src/execution/tasks/parent/dispatch.js +1 -1
  227. package/dist/src/execution/tasks/parent/hitl-proxy-steps.js +1 -1
  228. package/dist/src/execution/tasks/parent/tool-execution.js +1 -1
  229. package/dist/src/execution/terminate-child-sessions-step.d.ts +4 -5
  230. package/dist/src/execution/terminate-child-sessions-step.js +1 -1
  231. package/dist/src/execution/tool-auth.d.ts +5 -6
  232. package/dist/src/execution/tool-auth.js +1 -1
  233. package/dist/src/execution/tools/connection-search.d.ts +1 -0
  234. package/dist/src/execution/tools/connection-search.js +2 -0
  235. package/dist/src/{runtime/framework-tools → execution/tools}/file-state.d.ts +2 -2
  236. package/dist/src/execution/tools/load-skill.d.ts +6 -0
  237. package/dist/src/execution/tools/load-skill.js +1 -0
  238. package/dist/src/{runtime/framework-tools → execution/tools}/subagent/local.d.ts +7 -7
  239. package/dist/src/execution/tools/subagent/local.js +1 -0
  240. package/dist/src/{runtime/framework-tools → execution/tools}/subagent/remote.d.ts +5 -5
  241. package/dist/src/execution/tools/subagent/remote.js +1 -0
  242. package/dist/src/execution/tools/tasks.d.ts +18 -0
  243. package/dist/src/execution/tools/tasks.js +1 -0
  244. package/dist/src/{runtime/framework-tools → execution/tools}/todo.d.ts +0 -2
  245. package/dist/src/{runtime/framework-tools → execution/tools}/todo.js +1 -2
  246. package/dist/src/execution/turn-control-protocol.js +1 -1
  247. package/dist/src/execution/web-fetch/request.js +1 -1
  248. package/dist/src/execution/wire/session-inbox-resume.js +1 -1
  249. package/dist/src/execution/wire/session-inbox-wire.v1.js +1 -1
  250. package/dist/src/execution/workflow-entry.js +1 -1
  251. package/dist/src/execution/workflow-runtime.js +1 -1
  252. package/dist/src/execution/workflow-steps.js +1 -1
  253. package/dist/src/execution/workflow-trace-context.js +1 -1
  254. package/dist/src/framework/host-inventory.d.ts +8 -0
  255. package/dist/src/framework/host-inventory.js +1 -0
  256. package/dist/src/framework/sources/modules/agent.d.ts +4 -0
  257. package/dist/src/framework/sources/modules/agent.js +1 -0
  258. package/dist/src/framework/sources/modules/eve-channel.d.ts +1 -0
  259. package/dist/src/framework/sources/modules/eve-channel.js +1 -0
  260. package/dist/src/framework/sources/modules/home-channel.d.ts +2 -0
  261. package/dist/src/framework/sources/modules/home-channel.js +1 -0
  262. package/dist/src/framework/sources/modules/sandbox.d.ts +2 -0
  263. package/dist/src/framework/sources/modules/sandbox.js +1 -0
  264. package/dist/src/framework/sources/registry.d.ts +5 -0
  265. package/dist/src/framework/sources/registry.js +1 -0
  266. package/dist/src/harness/action-result-helpers.d.ts +1 -1
  267. package/dist/src/harness/advertised-tools.js +1 -1
  268. package/dist/src/harness/authorization.d.ts +3 -3
  269. package/dist/src/harness/background-tools.d.ts +2 -2
  270. package/dist/src/harness/channel-delivery-instrumentation.js +1 -1
  271. package/dist/src/harness/compaction.js +1 -1
  272. package/dist/src/harness/execute-tool.d.ts +3 -3
  273. package/dist/src/{runtime/framework-tools → harness}/final-output.d.ts +1 -1
  274. package/dist/src/harness/final-output.js +1 -0
  275. package/dist/src/harness/handles/query.d.ts +1 -1
  276. package/dist/src/harness/handles/store.d.ts +8 -0
  277. package/dist/src/harness/handles/store.js +1 -1
  278. package/dist/src/harness/hitl/approval-input-requests.d.ts +1 -1
  279. package/dist/src/harness/hitl/approval-prompt.d.ts +1 -1
  280. package/dist/src/harness/hitl/pending-input-resolution.d.ts +2 -2
  281. package/dist/src/harness/hitl/question-input-requests.d.ts +1 -1
  282. package/dist/src/harness/input-extraction.d.ts +1 -1
  283. package/dist/src/harness/input-extraction.js +1 -1
  284. package/dist/src/harness/input-request-class.d.ts +1 -1
  285. package/dist/src/harness/input-request-resolution.d.ts +1 -1
  286. package/dist/src/harness/input-requests.d.ts +2 -2
  287. package/dist/src/harness/instrumentation/lifecycle.d.ts +3 -0
  288. package/dist/src/harness/instrumentation/providers.js +1 -1
  289. package/dist/src/harness/instrumentation/runtime.d.ts +2 -1
  290. package/dist/src/harness/pending-input-batches.d.ts +1 -1
  291. package/dist/src/harness/prepare-trace-context.d.ts +3 -0
  292. package/dist/src/harness/prepare-trace-context.js +1 -1
  293. package/dist/src/harness/provider-safety.d.ts +7 -0
  294. package/dist/src/harness/provider-safety.js +1 -0
  295. package/dist/src/{runtime/framework-tools/web-search.d.ts → harness/provider-tool-schemas.d.ts} +1 -9
  296. package/dist/src/harness/provider-tool-schemas.js +1 -0
  297. package/dist/src/harness/provider-tools.js +1 -1
  298. package/dist/src/harness/proxy-input-requests.d.ts +1 -1
  299. package/dist/src/harness/request-input-tool.d.ts +4 -0
  300. package/dist/src/harness/request-input-tool.js +1 -0
  301. package/dist/src/harness/runtime-actions.d.ts +1 -1
  302. package/dist/src/harness/session-limit-continuation.d.ts +1 -1
  303. package/dist/src/harness/step-hooks.d.ts +2 -0
  304. package/dist/src/harness/step-hooks.js +1 -1
  305. package/dist/src/harness/stream-actions.d.ts +1 -1
  306. package/dist/src/harness/subagent-depth.d.ts +1 -1
  307. package/dist/src/harness/tool-call-action.d.ts +1 -1
  308. package/dist/src/harness/tool-call-input-errors.d.ts +1 -1
  309. package/dist/src/harness/tool-loop.js +2 -2
  310. package/dist/src/harness/tool-model-output.d.ts +1 -1
  311. package/dist/src/harness/tools.d.ts +1 -1
  312. package/dist/src/harness/tools.js +1 -1
  313. package/dist/src/harness/types.d.ts +3 -9
  314. package/dist/src/harness/workflow-runtime-action-state.d.ts +1 -1
  315. package/dist/src/harness/workflow-subagent-limit.d.ts +1 -1
  316. package/dist/src/instrumentation/provider.d.ts +117 -0
  317. package/dist/src/instrumentation/provider.js +1 -0
  318. package/dist/src/internal/application/compiled-artifacts.js +5 -4
  319. package/dist/src/internal/application/package.js +1 -1
  320. package/dist/src/internal/authored-definition/approval.d.ts +1 -1
  321. package/dist/src/internal/authored-definition/connection.js +1 -1
  322. package/dist/src/internal/authored-definition/core.js +1 -1
  323. package/dist/src/internal/authored-definition/schema-backed.d.ts +6 -3
  324. package/dist/src/internal/authored-definition/schema-backed.js +1 -1
  325. package/dist/src/internal/authored-definition/source-identity.d.ts +17 -0
  326. package/dist/src/internal/authored-definition/source-identity.js +1 -0
  327. package/dist/src/internal/authored-module-map-loader.d.ts +1 -5
  328. package/dist/src/internal/authored-module-map-loader.js +1 -1
  329. package/dist/src/internal/helpers/markdown.js +1 -1
  330. package/dist/src/internal/invocation/agent-invocation.d.ts +2 -2
  331. package/dist/src/internal/invocation/workflow-execution.d.ts +1 -1
  332. package/dist/src/internal/invocation/workflow-execution.js +1 -1
  333. package/dist/src/internal/materialized-authored-modules.js +1 -1
  334. package/dist/src/internal/nitro/dev-runtime-artifacts.js +1 -1
  335. package/dist/src/internal/nitro/host/application-route-registry.d.ts +2 -41
  336. package/dist/src/internal/nitro/host/application-route-registry.js +1 -1
  337. package/dist/src/internal/nitro/host/build-extension.js +1 -1
  338. package/dist/src/internal/nitro/host/build-vercel-agent-summary.js +1 -1
  339. package/dist/src/internal/nitro/host/configure-nitro-routes.js +3 -4
  340. package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
  341. package/dist/src/internal/nitro/host/dev-host-fingerprint.js +1 -1
  342. package/dist/src/internal/nitro/host/extension-capability-requirements.d.ts +2 -0
  343. package/dist/src/internal/nitro/host/extension-capability-requirements.js +1 -1
  344. package/dist/src/internal/nitro/host/start-development-server.js +2 -2
  345. package/dist/src/internal/nitro/host/start-production-server.js +3 -3
  346. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.d.ts +9 -215
  347. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
  348. package/dist/src/internal/nitro/routes/agent-info/load-agent-info-data.d.ts +2 -13
  349. package/dist/src/internal/nitro/routes/agent-info/load-agent-info-data.js +1 -1
  350. package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -1
  351. package/dist/src/internal/nitro/routes/channel-route-context.d.ts +5 -0
  352. package/dist/src/internal/nitro/routes/channel-route-context.js +1 -1
  353. package/dist/src/internal/nitro/routes/index.d.ts +0 -9
  354. package/dist/src/internal/nitro/routes/index.js +1 -1
  355. package/dist/src/internal/nitro/routes/info.js +1 -1
  356. package/dist/src/internal/nitro/routes/runtime-stack.d.ts +5 -5
  357. package/dist/src/internal/nitro/routes/runtime-stack.js +1 -1
  358. package/dist/src/internal/programmatic-source-loader.d.ts +1 -0
  359. package/dist/src/internal/programmatic-source-loader.js +1 -0
  360. package/dist/src/internal/runtime-registry.d.ts +3 -4
  361. package/dist/src/protocol/message.d.ts +3 -3
  362. package/dist/src/protocol/routes.d.ts +2 -0
  363. package/dist/src/protocol/routes.js +1 -1
  364. package/dist/src/public/agents/auth.d.ts +10 -6
  365. package/dist/src/public/agents/auth.js +1 -1
  366. package/dist/src/public/channels/auth.d.ts +1 -1
  367. package/dist/src/public/channels/auth.js +1 -1
  368. package/dist/src/public/channels/discord/discordChannel.js +1 -1
  369. package/dist/src/public/channels/discord/hitl.d.ts +1 -1
  370. package/dist/src/public/channels/discord/hitl.js +1 -1
  371. package/dist/src/public/channels/discord/inbound.d.ts +1 -0
  372. package/dist/src/public/channels/discord/inbound.js +1 -1
  373. package/dist/src/public/channels/eve.d.ts +1 -139
  374. package/dist/src/public/channels/eve.js +1 -3
  375. package/dist/src/public/channels/github/dispatch.d.ts +5 -0
  376. package/dist/src/public/channels/github/dispatch.js +1 -1
  377. package/dist/src/public/channels/github/githubChannel.js +1 -1
  378. package/dist/src/public/channels/github/inbound.d.ts +2 -0
  379. package/dist/src/public/channels/github/inbound.js +1 -1
  380. package/dist/src/public/channels/index.d.ts +1 -1
  381. package/dist/src/public/channels/index.js +1 -1
  382. package/dist/src/public/channels/linear/hitl.d.ts +1 -1
  383. package/dist/src/public/channels/linear/inbound.js +1 -1
  384. package/dist/src/public/channels/mcp.js +1 -1
  385. package/dist/src/public/channels/slack/action-status.d.ts +1 -1
  386. package/dist/src/public/channels/slack/hitl.d.ts +1 -1
  387. package/dist/src/public/channels/slack/hitl.js +1 -1
  388. package/dist/src/public/channels/slack/inbound.d.ts +9 -0
  389. package/dist/src/public/channels/slack/inbound.js +1 -1
  390. package/dist/src/public/channels/slack/interactions.js +1 -1
  391. package/dist/src/public/channels/slack/model-context.d.ts +3 -1
  392. package/dist/src/public/channels/slack/model-context.js +2 -2
  393. package/dist/src/public/channels/slack/session-operations.d.ts +1 -1
  394. package/dist/src/public/channels/slack/slackChannel.d.ts +1 -1
  395. package/dist/src/public/channels/slack/slackChannel.js +1 -1
  396. package/dist/src/public/channels/teams/hitl.d.ts +1 -1
  397. package/dist/src/public/channels/teams/hitl.js +1 -1
  398. package/dist/src/public/channels/teams/inbound.d.ts +2 -0
  399. package/dist/src/public/channels/teams/inbound.js +1 -1
  400. package/dist/src/public/channels/teams/teamsChannel.js +1 -1
  401. package/dist/src/public/channels/teams/verify.js +1 -1
  402. package/dist/src/public/channels/telegram/api.d.ts +15 -0
  403. package/dist/src/public/channels/telegram/api.js +2 -2
  404. package/dist/src/public/channels/telegram/authorization-callback.d.ts +10 -0
  405. package/dist/src/public/channels/telegram/authorization-callback.js +1 -0
  406. package/dist/src/public/channels/telegram/authorization.d.ts +19 -0
  407. package/dist/src/public/channels/telegram/authorization.js +3 -0
  408. package/dist/src/public/channels/telegram/defaults.d.ts +1 -0
  409. package/dist/src/public/channels/telegram/defaults.js +3 -3
  410. package/dist/src/public/channels/telegram/hitl.d.ts +1 -1
  411. package/dist/src/public/channels/telegram/hitl.js +1 -1
  412. package/dist/src/public/channels/telegram/inbound.d.ts +1 -0
  413. package/dist/src/public/channels/telegram/inbound.js +1 -1
  414. package/dist/src/public/channels/telegram/index.d.ts +1 -1
  415. package/dist/src/public/channels/telegram/index.js +1 -1
  416. package/dist/src/public/channels/telegram/state.d.ts +6 -0
  417. package/dist/src/public/channels/telegram/state.js +1 -0
  418. package/dist/src/public/channels/telegram/telegramChannel.d.ts +11 -0
  419. package/dist/src/public/channels/telegram/telegramChannel.js +1 -1
  420. package/dist/src/public/connections/errors.d.ts +1 -125
  421. package/dist/src/public/connections/errors.js +1 -1
  422. package/dist/src/public/connections/index.d.ts +2 -2
  423. package/dist/src/public/connections/index.js +1 -1
  424. package/dist/src/public/definitions/agent.d.ts +1 -1
  425. package/dist/src/public/definitions/agent.js +1 -1
  426. package/dist/src/public/definitions/approval.d.ts +2 -84
  427. package/dist/src/public/definitions/approval.js +1 -1
  428. package/dist/src/public/definitions/callback-context.d.ts +1 -32
  429. package/dist/src/public/definitions/connections/mcp.d.ts +1 -1
  430. package/dist/src/public/definitions/connections/mcp.js +1 -1
  431. package/dist/src/public/definitions/connections/openapi.d.ts +1 -1
  432. package/dist/src/public/definitions/connections/openapi.js +1 -1
  433. package/dist/src/public/definitions/connections/protocol.d.ts +1 -1
  434. package/dist/src/public/definitions/instructions.d.ts +2 -2
  435. package/dist/src/public/definitions/instructions.js +1 -1
  436. package/dist/src/public/definitions/skill.js +1 -1
  437. package/dist/src/public/index.d.ts +1 -1
  438. package/dist/src/public/instructions/index.d.ts +1 -1
  439. package/dist/src/public/instrumentation/provider.d.ts +1 -117
  440. package/dist/src/public/instrumentation/provider.js +1 -1
  441. package/dist/src/public/models/openai/chatgpt/auth.js +1 -1
  442. package/dist/src/public/next/server.js +1 -1
  443. package/dist/src/public/nuxt/dev-server.js +1 -1
  444. package/dist/src/public/sandbox/backends/default.d.ts +1 -49
  445. package/dist/src/public/sandbox/backends/default.js +1 -1
  446. package/dist/src/public/sandbox/backends/docker.d.ts +1 -14
  447. package/dist/src/public/sandbox/backends/docker.js +1 -1
  448. package/dist/src/public/sandbox/backends/just-bash.d.ts +1 -17
  449. package/dist/src/public/sandbox/backends/just-bash.js +1 -1
  450. package/dist/src/public/sandbox/backends/microsandbox.d.ts +1 -17
  451. package/dist/src/public/sandbox/backends/microsandbox.js +1 -1
  452. package/dist/src/public/sandbox/backends/vercel.d.ts +1 -30
  453. package/dist/src/public/sandbox/backends/vercel.js +1 -1
  454. package/dist/src/public/skills/index.d.ts +3 -3
  455. package/dist/src/public/skills/index.js +1 -1
  456. package/dist/src/public/sveltekit/dev-server.js +1 -1
  457. package/dist/src/public/tools/approval/index.d.ts +2 -2
  458. package/dist/src/public/tools/approval/index.js +1 -1
  459. package/dist/src/public/tools/bash.d.ts +3 -0
  460. package/dist/src/public/tools/bash.js +1 -0
  461. package/dist/src/public/tools/glob.d.ts +3 -0
  462. package/dist/src/public/tools/glob.js +1 -0
  463. package/dist/src/public/tools/grep.d.ts +3 -0
  464. package/dist/src/public/tools/grep.js +1 -0
  465. package/dist/src/public/tools/index.d.ts +6 -11
  466. package/dist/src/public/tools/index.js +1 -1
  467. package/dist/src/public/tools/load-skill.d.ts +3 -0
  468. package/dist/src/public/tools/load-skill.js +1 -0
  469. package/dist/src/public/tools/read-file.d.ts +3 -0
  470. package/dist/src/public/tools/read-file.js +1 -0
  471. package/dist/src/public/{tool-result-narrowing.d.ts → tools/result.d.ts} +2 -28
  472. package/dist/src/public/tools/result.js +1 -0
  473. package/dist/src/public/tools/sleep.d.ts +1 -0
  474. package/dist/src/public/tools/sleep.js +1 -0
  475. package/dist/src/public/tools/todo.d.ts +3 -0
  476. package/dist/src/public/tools/todo.js +1 -0
  477. package/dist/src/public/tools/web-fetch.d.ts +3 -0
  478. package/dist/src/public/tools/web-fetch.js +1 -0
  479. package/dist/src/public/tools/web-search.d.ts +3 -36
  480. package/dist/src/public/tools/web-search.js +1 -1
  481. package/dist/src/public/tools/workflow.d.ts +4 -0
  482. package/dist/src/public/tools/workflow.js +1 -0
  483. package/dist/src/public/tools/write-file.d.ts +3 -0
  484. package/dist/src/public/tools/write-file.js +1 -0
  485. package/dist/src/public/types/json.d.ts +1 -28
  486. package/dist/src/react/use-eve-agent.d.ts +1 -0
  487. package/dist/src/react/use-eve-agent.js +1 -1
  488. package/dist/src/runtime/actions/keys.d.ts +1 -1
  489. package/dist/src/runtime/actions/results.d.ts +1 -1
  490. package/dist/src/runtime/agent/bootstrap.js +1 -1
  491. package/dist/src/runtime/agent/mock-model-adapter.js +1 -1
  492. package/dist/src/runtime/connections/authorization-tokens.d.ts +1 -1
  493. package/dist/src/runtime/connections/mcp-client.d.ts +1 -1
  494. package/dist/src/runtime/connections/mcp-client.js +1 -1
  495. package/dist/src/runtime/connections/openapi-client.d.ts +1 -1
  496. package/dist/src/runtime/connections/openapi-client.js +1 -1
  497. package/dist/src/runtime/connections/principal.d.ts +1 -1
  498. package/dist/src/runtime/connections/principal.js +1 -1
  499. package/dist/src/runtime/connections/registry-types.d.ts +11 -0
  500. package/dist/src/runtime/connections/registry.d.ts +3 -2
  501. package/dist/src/runtime/connections/resolve-authorization.d.ts +2 -2
  502. package/dist/src/runtime/connections/resolve-authorization.js +1 -1
  503. package/dist/src/runtime/connections/scoped-authorization.d.ts +2 -2
  504. package/dist/src/runtime/connections/scoped-authorization.js +1 -1
  505. package/dist/src/runtime/loaders/compile-metadata.js +1 -1
  506. package/dist/src/runtime/loaders/manifest.js +1 -1
  507. package/dist/src/runtime/prompt/compose.d.ts +0 -6
  508. package/dist/src/runtime/prompt/compose.js +1 -1
  509. package/dist/src/runtime/resolve-agent-graph.js +1 -1
  510. package/dist/src/runtime/resolve-agent.js +1 -1
  511. package/dist/src/runtime/resolve-connection.js +1 -1
  512. package/dist/src/runtime/resolve-dynamic-tool.js +1 -1
  513. package/dist/src/runtime/resolve-tool.d.ts +2 -1
  514. package/dist/src/runtime/resolve-tool.js +1 -1
  515. package/dist/src/runtime/sandbox/keys.js +1 -1
  516. package/dist/src/runtime/sandbox/registry.d.ts +4 -20
  517. package/dist/src/runtime/sandbox/registry.js +1 -1
  518. package/dist/src/runtime/sessions/compiled-agent-cache.js +1 -1
  519. package/dist/src/runtime/sessions/runtime-context-keys.js +1 -1
  520. package/dist/src/runtime/sessions/turn.d.ts +3 -1
  521. package/dist/src/runtime/skills/sandbox-access.d.ts +1 -1
  522. package/dist/src/runtime/subagents/dynamic-agent-config.js +1 -1
  523. package/dist/src/runtime/subagents/dynamic-remote-agent-config.js +1 -1
  524. package/dist/src/runtime/subagents/registry.d.ts +0 -27
  525. package/dist/src/runtime/subagents/registry.js +1 -1
  526. package/dist/src/runtime/tools/registry.js +1 -1
  527. package/dist/src/runtime/types.d.ts +11 -27
  528. package/dist/src/sandbox/backends/default.d.ts +49 -0
  529. package/dist/src/sandbox/backends/default.js +1 -0
  530. package/dist/src/sandbox/backends/docker.d.ts +14 -0
  531. package/dist/src/sandbox/backends/docker.js +1 -0
  532. package/dist/src/sandbox/backends/just-bash.d.ts +17 -0
  533. package/dist/src/sandbox/backends/just-bash.js +1 -0
  534. package/dist/src/sandbox/backends/microsandbox.d.ts +17 -0
  535. package/dist/src/sandbox/backends/microsandbox.js +1 -0
  536. package/dist/src/sandbox/backends/vercel.d.ts +30 -0
  537. package/dist/src/sandbox/backends/vercel.js +1 -0
  538. package/dist/src/services/dev-client/runtime-artifacts.d.ts +2 -0
  539. package/dist/src/services/dev-client/runtime-artifacts.js +1 -1
  540. package/dist/src/services/dev-client.d.ts +1 -1
  541. package/dist/src/setup/channel-add-conflicts.js +1 -1
  542. package/dist/src/setup/cli/select-component.js +1 -1
  543. package/dist/src/setup/flows/link.js +1 -1
  544. package/dist/src/setup/flows/model-source-change.js +1 -1
  545. package/dist/src/setup/flows/model.js +1 -1
  546. package/dist/src/setup/flows/registry.js +1 -1
  547. package/dist/src/setup/integrations/runner.js +1 -1
  548. package/dist/src/setup/prompter.js +1 -1
  549. package/dist/src/setup/scaffold/create/add-to-project.js +1 -1
  550. package/dist/src/setup/scaffold/create/project.js +2 -2
  551. package/dist/src/setup/scaffold/create/web-template.d.ts +8 -8
  552. package/dist/src/setup/scaffold/create/web-template.js +336 -120
  553. package/dist/src/setup/scaffold/update/channels.js +1 -1
  554. package/dist/src/setup/scaffold/update/connections.js +1 -1
  555. package/dist/src/setup/vercel-project.js +0 -0
  556. package/dist/src/{runtime/actions/types.d.ts → shared/action-types.d.ts} +12 -12
  557. package/dist/src/{runtime/actions/types.js → shared/action-types.js} +1 -1
  558. package/dist/src/shared/agent-definition.d.ts +3 -10
  559. package/dist/src/shared/agent-definition.js +1 -1
  560. package/dist/src/{runtime/connections/types.d.ts → shared/connection-types.d.ts} +3 -13
  561. package/dist/src/{runtime/input/types.d.ts → shared/input.d.ts} +1 -1
  562. package/dist/src/shared/input.js +1 -0
  563. package/dist/src/shared/instructions-definition.d.ts +2 -0
  564. package/dist/src/shared/instructions-definition.js +1 -1
  565. package/dist/src/shared/objects.d.ts +5 -0
  566. package/dist/src/shared/objects.js +1 -0
  567. package/dist/src/shared/sandbox-definition.d.ts +1 -1
  568. package/dist/src/shared/skill-definition.d.ts +2 -0
  569. package/dist/src/shared/skill-definition.js +1 -1
  570. package/dist/src/{execution/skills/types.d.ts → shared/skill-types.d.ts} +1 -1
  571. package/dist/src/shared/skill-types.js +1 -0
  572. package/dist/src/{runtime/connections → shared}/validate-authorization.d.ts +1 -1
  573. package/dist/src/shared/vercel-project.d.ts +1 -0
  574. package/dist/src/shared/vercel-project.js +1 -1
  575. package/dist/src/svelte/index.js +1 -1
  576. package/dist/src/svelte/use-eve-agent.d.ts +8 -4
  577. package/dist/src/svelte/use-eve-agent.js +1 -1
  578. package/dist/src/tasks/json.d.ts +4 -89
  579. package/dist/src/tasks/json.js +1 -1
  580. package/dist/src/tasks/session-index.d.ts +1 -1
  581. package/dist/src/tasks/task-id.d.ts +0 -1
  582. package/dist/src/tasks/task-id.js +1 -1
  583. package/dist/src/tasks/types.d.ts +1 -1
  584. package/dist/src/tasks/types.js +1 -1
  585. package/dist/src/{public/tools/approval/approval-helpers.d.ts → tools/approval/policies.d.ts} +1 -1
  586. package/dist/src/tools/approval/policies.js +1 -0
  587. package/dist/src/tools/auth.d.ts +35 -0
  588. package/dist/src/tools/auth.js +1 -0
  589. package/dist/src/{public/definitions/tool.d.ts → tools/definition.d.ts} +42 -138
  590. package/dist/src/tools/definition.js +1 -0
  591. package/dist/src/{shared/durable-dynamic-tool-callbacks.d.ts → tools/durable-callbacks.d.ts} +1 -1
  592. package/dist/src/tools/durable-callbacks.js +1 -0
  593. package/dist/src/tools/dynamic.d.ts +68 -0
  594. package/dist/src/tools/dynamic.js +1 -0
  595. package/dist/src/tools/framework/agent-contract.d.ts +8 -0
  596. package/dist/src/tools/framework/agent-contract.js +1 -0
  597. package/dist/src/tools/framework/agent.d.ts +17 -0
  598. package/dist/src/tools/framework/agent.js +1 -0
  599. package/dist/src/tools/framework/ask-question.d.ts +50 -0
  600. package/dist/src/tools/framework/ask-question.js +1 -0
  601. package/dist/src/tools/framework/connection-search.d.ts +3 -0
  602. package/dist/src/tools/framework/connection-search.js +1 -0
  603. package/dist/src/tools/framework/task-cancel.d.ts +29 -0
  604. package/dist/src/tools/framework/task-cancel.js +1 -0
  605. package/dist/src/tools/framework/task-contract.d.ts +167 -0
  606. package/dist/src/tools/framework/task-contract.js +1 -0
  607. package/dist/src/tools/framework/task-update.d.ts +9 -0
  608. package/dist/src/tools/framework/task-update.js +1 -0
  609. package/dist/src/{public/tools/output-builders.d.ts → tools/model-output.d.ts} +41 -1
  610. package/dist/src/tools/provided/bash.d.ts +29 -0
  611. package/dist/src/tools/provided/bash.js +1 -0
  612. package/dist/src/tools/provided/glob.d.ts +26 -0
  613. package/dist/src/tools/provided/glob.js +2 -0
  614. package/dist/src/{runtime/framework-tools → tools/provided}/grep.d.ts +10 -10
  615. package/dist/src/tools/provided/grep.js +2 -0
  616. package/dist/src/tools/provided/load-skill.d.ts +2 -0
  617. package/dist/src/tools/provided/load-skill.js +1 -0
  618. package/dist/src/tools/provided/read-file.d.ts +27 -0
  619. package/dist/src/tools/provided/read-file.js +2 -0
  620. package/dist/src/{public/tools/sleep/index.d.ts → tools/provided/sleep.d.ts} +3 -3
  621. package/dist/src/tools/provided/sleep.js +1 -0
  622. package/dist/src/tools/provided/todo.d.ts +8 -0
  623. package/dist/src/tools/provided/todo.js +2 -0
  624. package/dist/src/{runtime/framework-tools → tools/provided}/web-fetch.d.ts +5 -2
  625. package/dist/src/tools/provided/web-fetch.js +2 -0
  626. package/dist/src/tools/provided/web-search.d.ts +39 -0
  627. package/dist/src/tools/provided/web-search.js +1 -0
  628. package/dist/src/tools/provided/write-file.d.ts +23 -0
  629. package/dist/src/tools/provided/write-file.js +2 -0
  630. package/dist/src/tools/workflow.d.ts +37 -0
  631. package/dist/src/tools/workflow.js +1 -0
  632. package/dist/src/tracing/agent-action-instrumentation.js +1 -1
  633. package/dist/src/tracing/agent-approval-instrumentation.js +1 -1
  634. package/dist/src/tracing/agent-channel-delivery-instrumentation.js +1 -1
  635. package/dist/src/tracing/agent-otel-provider.js +2 -2
  636. package/dist/src/tracing/agent-otel-session-context.d.ts +1 -1
  637. package/dist/src/tracing/agent-otel-session-context.js +1 -1
  638. package/dist/src/tracing/agent-span-id-generator.d.ts +1 -0
  639. package/dist/src/tracing/agent-span-id-generator.js +1 -1
  640. package/dist/src/tracing/agent-trace-context-store.d.ts +1 -1
  641. package/dist/src/tracing/agent-trace-context-store.js +1 -1
  642. package/dist/src/tracing/agent-trace-span-processor.js +1 -1
  643. package/dist/src/tracing/agent-trace-state.d.ts +2 -6
  644. package/dist/src/tracing/agent-trace-state.js +1 -1
  645. package/dist/src/tracing/install-instrumentation-runtime.js +1 -1
  646. package/dist/src/tracing/local-trace-reader.d.ts +1 -3
  647. package/dist/src/tracing/local-trace-reader.js +1 -1
  648. package/dist/src/tracing/otel-declaration.d.ts +1 -2
  649. package/dist/src/tracing/otel-registration.js +1 -1
  650. package/dist/src/tracing/sampled-trace.d.ts +10 -2
  651. package/dist/src/tracing/sampled-trace.js +1 -1
  652. package/dist/src/vue/index.js +1 -1
  653. package/dist/src/vue/use-eve-agent.d.ts +8 -4
  654. package/dist/src/vue/use-eve-agent.js +1 -1
  655. package/docs/agent-config.md +16 -4
  656. package/docs/channels/chat-sdk.mdx +1 -1
  657. package/docs/channels/discord.mdx +5 -1
  658. package/docs/channels/eve.mdx +19 -3
  659. package/docs/channels/github.mdx +2 -0
  660. package/docs/channels/linear.mdx +1 -1
  661. package/docs/channels/overview.mdx +1 -1
  662. package/docs/channels/slack.mdx +2 -0
  663. package/docs/channels/teams.mdx +1 -1
  664. package/docs/channels/telegram.mdx +2 -0
  665. package/docs/concepts/built-in-tools.md +30 -21
  666. package/docs/concepts/sessions-runs-and-streaming.md +3 -1
  667. package/docs/connections/overview.mdx +1 -1
  668. package/docs/extensions.md +2 -2
  669. package/docs/getting-started.mdx +9 -9
  670. package/docs/guides/auth-and-route-protection.md +3 -3
  671. package/docs/guides/client/output-schema.mdx +2 -2
  672. package/docs/guides/client/overview.mdx +4 -2
  673. package/docs/guides/frontend/nuxt.mdx +4 -3
  674. package/docs/guides/frontend/overview.mdx +21 -18
  675. package/docs/guides/frontend/sveltekit.mdx +4 -3
  676. package/docs/guides/frontend/use-eve-agent-svelte.mdx +5 -4
  677. package/docs/guides/frontend/use-eve-agent-vue.mdx +5 -4
  678. package/docs/guides/instrumentation.md +1 -0
  679. package/docs/guides/remote-agents.md +37 -18
  680. package/docs/patterns/multi-tenant-approvals.md +1 -1
  681. package/docs/reference/cli.md +2 -4
  682. package/docs/reference/typescript-api.md +35 -31
  683. package/docs/sandbox.mdx +1 -1
  684. package/docs/subagents/index.mdx +11 -28
  685. package/docs/tools/human-in-the-loop.md +43 -2
  686. package/docs/tools/overview.mdx +1 -1
  687. package/package.json +58 -8
  688. package/dist/src/compiler/normalize-extension.d.ts +0 -80
  689. package/dist/src/compiler/normalize-extension.js +0 -1
  690. package/dist/src/execution/sandbox/write-file-tool.js +0 -1
  691. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response-from-manifest.d.ts +0 -9
  692. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response-from-manifest.js +0 -1
  693. package/dist/src/internal/nitro/routes/health.d.ts +0 -14
  694. package/dist/src/internal/nitro/routes/health.js +0 -1
  695. package/dist/src/node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js +0 -1
  696. package/dist/src/public/definitions/tool.js +0 -1
  697. package/dist/src/public/tool-result-narrowing.js +0 -1
  698. package/dist/src/public/tools/approval/approval-helpers.js +0 -1
  699. package/dist/src/public/tools/defaults.d.ts +0 -46
  700. package/dist/src/public/tools/defaults.js +0 -1
  701. package/dist/src/public/tools/define-bash-tool.d.ts +0 -21
  702. package/dist/src/public/tools/define-bash-tool.js +0 -1
  703. package/dist/src/public/tools/define-glob-tool.d.ts +0 -22
  704. package/dist/src/public/tools/define-glob-tool.js +0 -1
  705. package/dist/src/public/tools/define-grep-tool.d.ts +0 -22
  706. package/dist/src/public/tools/define-grep-tool.js +0 -1
  707. package/dist/src/public/tools/define-read-file-tool.d.ts +0 -21
  708. package/dist/src/public/tools/define-read-file-tool.js +0 -1
  709. package/dist/src/public/tools/define-write-file-tool.d.ts +0 -22
  710. package/dist/src/public/tools/define-write-file-tool.js +0 -1
  711. package/dist/src/public/tools/internal.d.ts +0 -13
  712. package/dist/src/public/tools/internal.js +0 -1
  713. package/dist/src/public/tools/sleep/index.js +0 -1
  714. package/dist/src/runtime/connections/callback-route.js +0 -1
  715. package/dist/src/runtime/framework-channels/index.d.ts +0 -6
  716. package/dist/src/runtime/framework-channels/index.js +0 -1
  717. package/dist/src/runtime/framework-tools/agent.d.ts +0 -29
  718. package/dist/src/runtime/framework-tools/agent.js +0 -1
  719. package/dist/src/runtime/framework-tools/ask-question.d.ts +0 -35
  720. package/dist/src/runtime/framework-tools/ask-question.js +0 -1
  721. package/dist/src/runtime/framework-tools/bash.d.ts +0 -24
  722. package/dist/src/runtime/framework-tools/bash.js +0 -1
  723. package/dist/src/runtime/framework-tools/connection-search-dynamic.d.ts +0 -19
  724. package/dist/src/runtime/framework-tools/connection-search-dynamic.js +0 -2
  725. package/dist/src/runtime/framework-tools/final-output.js +0 -1
  726. package/dist/src/runtime/framework-tools/glob.d.ts +0 -26
  727. package/dist/src/runtime/framework-tools/glob.js +0 -2
  728. package/dist/src/runtime/framework-tools/grep.js +0 -2
  729. package/dist/src/runtime/framework-tools/index.d.ts +0 -39
  730. package/dist/src/runtime/framework-tools/index.js +0 -1
  731. package/dist/src/runtime/framework-tools/read-file.d.ts +0 -27
  732. package/dist/src/runtime/framework-tools/read-file.js +0 -2
  733. package/dist/src/runtime/framework-tools/skill.d.ts +0 -12
  734. package/dist/src/runtime/framework-tools/skill.js +0 -1
  735. package/dist/src/runtime/framework-tools/subagent/local.js +0 -1
  736. package/dist/src/runtime/framework-tools/subagent/remote.js +0 -1
  737. package/dist/src/runtime/framework-tools/tasks.d.ts +0 -91
  738. package/dist/src/runtime/framework-tools/tasks.js +0 -1
  739. package/dist/src/runtime/framework-tools/web-fetch.js +0 -2
  740. package/dist/src/runtime/framework-tools/web-search.js +0 -1
  741. package/dist/src/runtime/framework-tools/write-file.d.ts +0 -23
  742. package/dist/src/runtime/framework-tools/write-file.js +0 -2
  743. package/dist/src/runtime/governance/auth/jwt-ecdsa.js +0 -1
  744. package/dist/src/runtime/governance/auth/jwt-hmac.js +0 -1
  745. package/dist/src/runtime/governance/auth/oidc.js +0 -1
  746. package/dist/src/runtime/input/types.js +0 -1
  747. package/dist/src/runtime/session-callback-route.d.ts +0 -6
  748. package/dist/src/runtime/session-callback-route.js +0 -1
  749. package/dist/src/runtime/task-input-response-route.d.ts +0 -5
  750. package/dist/src/runtime/task-input-response-route.js +0 -1
  751. package/dist/src/shared/durable-dynamic-tool-callbacks.js +0 -1
  752. package/dist/src/shared/dynamic-tool-definition.d.ts +0 -154
  753. package/dist/src/shared/dynamic-tool-definition.js +0 -1
  754. package/dist/src/shared/eve-server-health.d.ts +0 -5
  755. package/dist/src/shared/eve-server-health.js +0 -1
  756. package/dist/src/shared/tool-definition.d.ts +0 -89
  757. /package/dist/src/{runtime/governance → channel}/auth/http-basic.js +0 -0
  758. /package/dist/src/{runtime/governance → channel}/auth/token-claims.js +0 -0
  759. /package/dist/src/{runtime/governance → channel}/auth/types.js +0 -0
  760. /package/dist/src/{runtime/governance → channel}/auth/vercel-oidc-project.js +0 -0
  761. /package/dist/src/{runtime/governance/network → channel}/ip-allow-list.d.ts +0 -0
  762. /package/dist/src/{runtime/governance/network → channel}/ip-allow-list.js +0 -0
  763. /package/dist/src/{execution/skills/types.js → context/session-context.js} +0 -0
  764. /package/dist/src/execution/sandbox/{bash-tool.js → bash.js} +0 -0
  765. /package/dist/src/{runtime/framework-tools → execution/tools}/file-state.js +0 -0
  766. /package/dist/src/{runtime/framework-tools → execution/tools}/sleep.d.ts +0 -0
  767. /package/dist/src/{runtime/framework-tools → execution/tools}/sleep.js +0 -0
  768. /package/dist/src/execution/web-fetch/{tool.d.ts → execute.d.ts} +0 -0
  769. /package/dist/src/execution/web-fetch/{tool.js → execute.js} +0 -0
  770. /package/dist/src/{shared/tool-definition.js → runtime/connections/registry-types.js} +0 -0
  771. /package/dist/src/{runtime/connections/types.js → shared/connection-types.js} +0 -0
  772. /package/dist/src/{runtime/sessions/auth.d.ts → shared/session-auth.d.ts} +0 -0
  773. /package/dist/src/{runtime/sessions/auth.js → shared/session-auth.js} +0 -0
  774. /package/dist/src/{runtime/connections → shared}/validate-authorization.js +0 -0
  775. /package/dist/src/{public/tools/output-builders.js → tools/model-output.js} +0 -0
  776. /package/dist/src/{shared/tool-schema.d.ts → tools/schema.d.ts} +0 -0
  777. /package/dist/src/{shared/tool-schema.js → tools/schema.js} +0 -0
  778. /package/dist/src/{shared/tool-task.d.ts → tools/task.d.ts} +0 -0
  779. /package/dist/src/{shared/tool-task.js → tools/task.js} +0 -0
@@ -1 +1 @@
1
- import{loadCompiledManifest}from"#runtime/loaders/manifest.js";import{resolveNitroCompiledArtifactsSource}from"#internal/nitro/routes/runtime-artifacts.js";import{resolveSchedules}from"#runtime/schedules/resolve-schedule.js";import{loadCompiledModuleMap}from"#runtime/loaders/module-map.js";import{resolveAgent}from"#runtime/resolve-agent.js";async function loadAgentInfoData(e){return await loadAgentInfoDataFromArtifacts(e.compiledArtifactsSource)}async function loadAgentInfoManifestData(t){let n=await loadCompiledManifest({compiledArtifactsSource:t.compiledArtifactsSource});return{manifest:n,schedules:await resolveSchedules({manifest:n})}}function resolveAgentInfoCompiledArtifactsSource(e){return resolveNitroCompiledArtifactsSource(e)}async function loadAgentInfoDataFromArtifacts(t){let[r,i]=await Promise.all([loadCompiledManifest({compiledArtifactsSource:t}),loadCompiledModuleMap({compiledArtifactsSource:t})]),a=await resolveSchedules({manifest:r});return{agent:await resolveAgent({manifest:r,moduleMap:i}),manifest:r,schedules:a}}export{loadAgentInfoData,loadAgentInfoManifestData,resolveAgentInfoCompiledArtifactsSource};
1
+ import{loadCompiledManifest}from"#runtime/loaders/manifest.js";import{resolveNitroCompiledArtifactsSource}from"#internal/nitro/routes/runtime-artifacts.js";import{resolveSchedules}from"#runtime/schedules/resolve-schedule.js";async function loadAgentInfoManifestData(t){let n=await loadCompiledManifest({compiledArtifactsSource:t.compiledArtifactsSource});return{manifest:n,schedules:await resolveSchedules({manifest:n})}}function resolveAgentInfoCompiledArtifactsSource(e){return resolveNitroCompiledArtifactsSource(e)}export{loadAgentInfoManifestData,resolveAgentInfoCompiledArtifactsSource};
@@ -1 +1 @@
1
- import{createAttachSessionFn}from"#channel/session.js";import{createLogger,logError}from"#internal/logging.js";import{createChannelDeliveryMetadata}from"#channel/delivery-metadata.js";import{createChannelOperations}from"#channel/channel-operations.js";import{getChannelInstrumentationKind}from"#channel/compiled-channel.js";import{createCrossChannelToFn,toCrossChannelTargets}from"#channel/cross-channel-receive.js";import{DEVELOPMENT_WORKFLOW_SECRET_ENV}from"#internal/workflow/development-world-protocol.js";import{readTrustedDevelopmentClientAddress}from"#internal/nitro/dev-client-address.js";import{attachAgentInfoRouteResponse,attachRemoteAgentStreamHeadersResolver,attachRouteChannelName,attachRouteSessionCreator}from"#internal/nitro/routes/channel-route-context.js";import{traceChannelRequest}from"#internal/nitro/routes/channel-request-instrumentation.js";import{resolveNitroChannelRuntimeBundle}from"#internal/nitro/routes/runtime-stack.js";import{readVercelProjectLink}from"#internal/vercel/project-link.js";import{withVercelOidcProjectResolver}from"#runtime/governance/auth/vercel-oidc-project.js";const log=createLogger(`channel.dispatch`);async function dispatchChannelRequest(e,t,r){return await traceChannelRequest({request:e.req,routeKey:t},async i=>{let o=await resolveNitroChannelRuntimeBundle(r),s=o.channels.find(e=>`${e.method.toUpperCase()} ${e.urlPath}`===t);if(s===void 0)return Response.json({error:`No matching channel for this request.`,ok:!1},{status:404});i?.setAttribute(`eve.channel.name`,s.name);let c=getChannelInstrumentationKind(s.definition)??s.adapter?.kind;c!==void 0&&i?.setAttribute(`eve.channel.kind`,c);let l=buildRouteArgs(e,o,s.name,c??`channel`,r,i),u;try{u=await withDevelopmentVercelOidcContext(r,e.req,async()=>{if(s.handler)return await s.handler(e.req,l.args);let t={waitUntil:l.args.waitUntil,params:l.args.params,requestIp:l.args.requestIp};return await s.fetch(e.req,t)})}catch(r){let i=logError(log,`channel handler threw`,r,{routeKey:t,channel:s.name});return flushBackgroundTasks(e,l.backgroundTasks,t,s.name),Response.json({error:`Channel handler failed.`,errorId:i,ok:!1},{status:500})}return flushBackgroundTasks(e,l.backgroundTasks,t,s.name),u})}async function dispatchChannelWebSocketRequest(e,t,r){let i=await resolveNitroChannelRuntimeBundle(r),o=i.channels.find(e=>`${e.method.toUpperCase()} ${e.urlPath}`===t);if(o===void 0||o.websocket===void 0)return rejectWebSocketUpgrade({error:`No matching websocket channel for this request.`,ok:!1},404);let s=o.websocket,c=getChannelInstrumentationKind(o.definition)??o.adapter?.kind??`channel`,l=buildRouteArgs(e,i,o.name,c,r,void 0);try{let n=await withDevelopmentVercelOidcContext(r,e.req,async()=>await s(e.req,l.args));return flushBackgroundTasks(e,l.backgroundTasks,t,o.name),n}catch(r){let i=logError(log,`channel websocket handler threw`,r,{routeKey:t,channel:o.name});return flushBackgroundTasks(e,l.backgroundTasks,t,o.name),rejectWebSocketUpgrade({error:`Channel websocket handler failed.`,errorId:i,ok:!1},500)}}async function withDevelopmentVercelOidcContext(e,t,n){return e.kind===`development`?await withVercelOidcProjectResolver({request:t,resolveCurrentProject:async()=>{let t=await readVercelProjectLink(e.appRoot);return t===void 0?void 0:{environment:`development`,projectId:t.projectId}}},n):await n()}function buildRouteArgs(t,n,a,c,l,d){let f=readVercelRequestId(t.req.headers),p=extractRequestIp(t,l),m=[],h=t.context.params??{},g={};for(let[e,t]of Object.entries(h))g[e]=decodeURIComponent(t);let waitUntil=e=>{m.push(e)},_=n.channels.find(e=>e.name===a),v=_?.adapter??{kind:`channel`},y=d?.spanContext(),b={channelKind:c,channelName:a,requestId:f,requestTraceContext:y===void 0?void 0:{spanId:y.spanId,traceFlags:y.traceFlags,traceId:y.traceId}},x=createChannelOperations({adapter:v,channelName:a,metadata:b,runtime:n.runtime,turnPolicy:_?.turnPolicy}),S=createAttachSessionFn(n.runtime,{...b,turnPolicy:_?.turnPolicy}),C=createCrossChannelToFn(n.runtime,toCrossChannelTargets(n.channels)),w=attachRouteSessionCreator(attachRouteChannelName(attachAgentInfoRouteResponse({attachSession:S,...x,params:g,requestIp:p,to:C,waitUntil},async()=>{let{handleAgentInfoRequest:e}=await import(`#internal/nitro/routes/info.js`);return await e(l)}),a),async e=>await n.runtime.createSession({...e,adapter:v,channelName:a,continuationToken:e.continuationToken===void 0?void 0:`${a}:${e.continuationToken}`,delivery:createChannelDeliveryMetadata(b),requestId:f}));return n.resolveRemoteAgentStreamHeaders!==void 0&&attachRemoteAgentStreamHeadersResolver(w,n.resolveRemoteAgentStreamHeaders),{args:w,backgroundTasks:m}}function readVercelRequestId(e){let t=e.get(`x-vercel-id`)?.trim();return t===``?void 0:t}function rejectWebSocketUpgrade(e,t){return{upgrade(){throw Response.json(e,{status:t})}}}function flushBackgroundTasks(e,t,r,i){t.length!==0&&e.waitUntil(Promise.allSettled(t).then(e=>{for(let t of e)t.status===`rejected`&&logError(log,`channel background task failed`,t.reason,{routeKey:r,channel:i})}))}function extractRequestIp(e,t){if(t.kind===`development`){let t=readTrustedDevelopmentClientAddress(e.req.headers,process.env[DEVELOPMENT_WORKFLOW_SECRET_ENV]);if(t!==void 0)return t}return extractSocketIp(e)}function extractSocketIp(e){let t=e.req.ip;return typeof t==`string`&&t.length>0?t:null}export{dispatchChannelRequest,dispatchChannelWebSocketRequest};
1
+ import{createAttachSessionFn}from"#channel/session.js";import{createLogger,logError}from"#internal/logging.js";import{createChannelDeliveryMetadata}from"#channel/delivery-metadata.js";import{createChannelOperations}from"#channel/channel-operations.js";import{getChannelInstrumentationKind}from"#channel/compiled-channel.js";import{createCrossChannelToFn,toCrossChannelTargets}from"#channel/cross-channel-receive.js";import{attachAgentInfoRouteResponse,attachHomeRouteMetadata,attachRemoteAgentStreamHeadersResolver,attachRouteChannelName,attachRouteSessionCreator}from"#internal/nitro/routes/channel-route-context.js";import{DEVELOPMENT_WORKFLOW_SECRET_ENV}from"#internal/workflow/development-world-protocol.js";import{readTrustedDevelopmentClientAddress}from"#internal/nitro/dev-client-address.js";import{traceChannelRequest}from"#internal/nitro/routes/channel-request-instrumentation.js";import{resolveNitroChannelRuntimeBundle}from"#internal/nitro/routes/runtime-stack.js";import{readVercelProjectLink}from"#internal/vercel/project-link.js";import{withVercelOidcProjectResolver}from"#channel/auth/vercel-oidc-project.js";const log=createLogger(`channel.dispatch`);async function dispatchChannelRequest(e,t,r){return await traceChannelRequest({request:e.req,routeKey:t},async i=>{let o=await resolveNitroChannelRuntimeBundle(r),s=o.channels.find(e=>`${e.method.toUpperCase()} ${e.urlPath}`===t);if(s===void 0)return Response.json({error:`No matching channel for this request.`,ok:!1},{status:404});i?.setAttribute(`eve.channel.name`,s.name);let c=getChannelInstrumentationKind(s.definition)??s.adapter?.kind;c!==void 0&&i?.setAttribute(`eve.channel.kind`,c);let l=buildRouteArgs(e,o,s.name,c??`channel`,r,i),u;try{u=await withDevelopmentVercelOidcContext(r,e.req,async()=>{if(s.handler)return await s.handler(e.req,l.args);let t={waitUntil:l.args.waitUntil,params:l.args.params,requestIp:l.args.requestIp};return await s.fetch(e.req,t)})}catch(r){let i=logError(log,`channel handler threw`,r,{routeKey:t,channel:s.name});return flushBackgroundTasks(e,l.backgroundTasks,t,s.name),Response.json({error:`Channel handler failed.`,errorId:i,ok:!1},{status:500})}return flushBackgroundTasks(e,l.backgroundTasks,t,s.name),u})}async function dispatchChannelWebSocketRequest(e,t,r){let i=await resolveNitroChannelRuntimeBundle(r),o=i.channels.find(e=>`${e.method.toUpperCase()} ${e.urlPath}`===t);if(o===void 0||o.websocket===void 0)return rejectWebSocketUpgrade({error:`No matching websocket channel for this request.`,ok:!1},404);let s=o.websocket,c=getChannelInstrumentationKind(o.definition)??o.adapter?.kind??`channel`,l=buildRouteArgs(e,i,o.name,c,r,void 0);try{let n=await withDevelopmentVercelOidcContext(r,e.req,async()=>await s(e.req,l.args));return flushBackgroundTasks(e,l.backgroundTasks,t,o.name),n}catch(r){let i=logError(log,`channel websocket handler threw`,r,{routeKey:t,channel:o.name});return flushBackgroundTasks(e,l.backgroundTasks,t,o.name),rejectWebSocketUpgrade({error:`Channel websocket handler failed.`,errorId:i,ok:!1},500)}}async function withDevelopmentVercelOidcContext(e,t,n){return e.kind===`development`?await withVercelOidcProjectResolver({request:t,resolveCurrentProject:async()=>{let t=await readVercelProjectLink(e.appRoot);return t===void 0?void 0:{environment:`development`,projectId:t.projectId}}},n):await n()}function buildRouteArgs(t,n,a,d,f,p){let m=readVercelRequestId(t.req.headers),h=extractRequestIp(t,f),g=[],_=t.context.params??{},v={};for(let[e,t]of Object.entries(_))v[e]=decodeURIComponent(t);let waitUntil=e=>{g.push(e)},y=n.channels.find(e=>e.name===a),b=y?.adapter??{kind:`channel`},x=p?.spanContext(),S={channelKind:d,channelName:a,requestId:m,requestTraceContext:x===void 0?void 0:{spanId:x.spanId,traceFlags:x.traceFlags,traceId:x.traceId}},C=createChannelOperations({adapter:b,channelName:a,metadata:S,runtime:n.runtime,turnPolicy:y?.turnPolicy}),w=createAttachSessionFn(n.runtime,{...S,turnPolicy:y?.turnPolicy}),T=createCrossChannelToFn(n.runtime,toCrossChannelTargets(n.channels)),E=attachRouteSessionCreator(attachHomeRouteMetadata(attachRouteChannelName(attachAgentInfoRouteResponse({attachSession:w,...C,params:v,requestIp:h,to:T,waitUntil},async()=>{let{handleAgentInfoRequest:e}=await import(`#internal/nitro/routes/info.js`);return await e(f)}),a),{agentName:n.agentName}),async e=>await n.runtime.createSession({...e,adapter:b,channelName:a,continuationToken:e.continuationToken===void 0?void 0:`${a}:${e.continuationToken}`,delivery:createChannelDeliveryMetadata(S),requestId:m}));return n.resolveRemoteAgentStreamHeaders!==void 0&&attachRemoteAgentStreamHeadersResolver(E,n.resolveRemoteAgentStreamHeaders),{args:E,backgroundTasks:g}}function readVercelRequestId(e){let t=e.get(`x-vercel-id`)?.trim();return t===``?void 0:t}function rejectWebSocketUpgrade(e,t){return{upgrade(){throw Response.json(e,{status:t})}}}function flushBackgroundTasks(e,t,r,i){t.length!==0&&e.waitUntil(Promise.allSettled(t).then(e=>{for(let t of e)t.status===`rejected`&&logError(log,`channel background task failed`,t.reason,{routeKey:r,channel:i})}))}function extractRequestIp(e,t){if(t.kind===`development`){let t=readTrustedDevelopmentClientAddress(e.req.headers,process.env[DEVELOPMENT_WORKFLOW_SECRET_ENV]);if(t!==void 0)return t}return extractSocketIp(e)}function extractSocketIp(e){let t=e.req.ip;return typeof t==`string`&&t.length>0?t:null}export{dispatchChannelRequest,dispatchChannelWebSocketRequest};
@@ -1,6 +1,9 @@
1
1
  import type { RouteHandlerArgs } from "#channel/routes.js";
2
2
  import type { RunHandle, RunInput } from "#channel/types.js";
3
3
  type AgentInfoRouteResponse = () => Promise<Response>;
4
+ export interface HomeRouteMetadata {
5
+ readonly agentName: string;
6
+ }
4
7
  /**
5
8
  * Creates one session from a route handler. `continuationToken` is
6
9
  * channel-local (the dispatcher prepends the channel name), so ownership
@@ -16,6 +19,8 @@ export declare function attachRouteChannelName<TArgs extends RouteHandlerArgs>(a
16
19
  export declare function readRouteChannelName(args: RouteHandlerArgs): string | undefined;
17
20
  export declare function attachAgentInfoRouteResponse<TArgs extends RouteHandlerArgs>(args: TArgs, respond: AgentInfoRouteResponse): TArgs;
18
21
  export declare function readAgentInfoRouteResponse(args: RouteHandlerArgs): AgentInfoRouteResponse | undefined;
22
+ export declare function attachHomeRouteMetadata<TArgs extends RouteHandlerArgs>(args: TArgs, metadata: HomeRouteMetadata): TArgs;
23
+ export declare function readHomeRouteMetadata(args: RouteHandlerArgs): HomeRouteMetadata | undefined;
19
24
  export declare function attachRouteSessionCreator<TArgs extends RouteHandlerArgs>(args: TArgs, createSession: RouteSessionCreator): TArgs;
20
25
  export declare function readRouteSessionCreator(args: RouteHandlerArgs): RouteSessionCreator | undefined;
21
26
  export declare function attachRemoteAgentStreamHeadersResolver<TArgs extends RouteHandlerArgs>(args: TArgs, resolve: RemoteAgentStreamHeadersResolver): TArgs;
@@ -1 +1 @@
1
- const agentInfoRouteResponseKey=`__eveAgentInfoRouteResponse`,routeChannelNameKey=`__eveRouteChannelName`,remoteAgentStreamHeadersResolverKey=`__eveRemoteAgentStreamHeadersResolver`,routeSessionCreatorKey=`__eveRouteSessionCreator`;function attachRouteChannelName(e,n){let r=e;return r[routeChannelNameKey]=n,e}function readRouteChannelName(e){return e[routeChannelNameKey]}function attachAgentInfoRouteResponse(t,n){let r=t;return r[agentInfoRouteResponseKey]=n,t}function readAgentInfoRouteResponse(t){return t[agentInfoRouteResponseKey]}function attachRouteSessionCreator(e,t){let n=e;return n[routeSessionCreatorKey]=t,e}function readRouteSessionCreator(e){return e[routeSessionCreatorKey]}function attachRemoteAgentStreamHeadersResolver(e,t){let r=e;return r[remoteAgentStreamHeadersResolverKey]=t,e}function readRemoteAgentStreamHeadersResolver(e){return e[remoteAgentStreamHeadersResolverKey]}export{attachAgentInfoRouteResponse,attachRemoteAgentStreamHeadersResolver,attachRouteChannelName,attachRouteSessionCreator,readAgentInfoRouteResponse,readRemoteAgentStreamHeadersResolver,readRouteChannelName,readRouteSessionCreator};
1
+ const agentInfoRouteResponseKey=`__eveAgentInfoRouteResponse`,homeRouteMetadataKey=`__eveHomeRouteMetadata`,routeChannelNameKey=`__eveRouteChannelName`,remoteAgentStreamHeadersResolverKey=`__eveRemoteAgentStreamHeadersResolver`,routeSessionCreatorKey=`__eveRouteSessionCreator`;function attachRouteChannelName(e,t){let r=e;return r[routeChannelNameKey]=t,e}function readRouteChannelName(e){return e[routeChannelNameKey]}function attachAgentInfoRouteResponse(t,n){let r=t;return r[agentInfoRouteResponseKey]=n,t}function readAgentInfoRouteResponse(t){return t[agentInfoRouteResponseKey]}function attachHomeRouteMetadata(e,n){let r=e;return r[homeRouteMetadataKey]=n,e}function readHomeRouteMetadata(e){return e[homeRouteMetadataKey]}function attachRouteSessionCreator(e,t){let n=e;return n[routeSessionCreatorKey]=t,e}function readRouteSessionCreator(e){return e[routeSessionCreatorKey]}function attachRemoteAgentStreamHeadersResolver(e,t){let n=e;return n[remoteAgentStreamHeadersResolverKey]=t,e}function readRemoteAgentStreamHeadersResolver(e){return e[remoteAgentStreamHeadersResolverKey]}export{attachAgentInfoRouteResponse,attachHomeRouteMetadata,attachRemoteAgentStreamHeadersResolver,attachRouteChannelName,attachRouteSessionCreator,readAgentInfoRouteResponse,readHomeRouteMetadata,readRemoteAgentStreamHeadersResolver,readRouteChannelName,readRouteSessionCreator};
@@ -1,4 +1,3 @@
1
- import type { H3Event } from "nitro";
2
1
  /**
3
2
  * Builds the barebones home page response for one request. Exposed
4
3
  * for tests so callers can supply a real {@link Request}; production
@@ -7,11 +6,3 @@ import type { H3Event } from "nitro";
7
6
  export declare function buildHomePageResponse(input: {
8
7
  readonly agentName: string;
9
8
  }, request: Request): Response;
10
- /**
11
- * Nitro route handler for `GET /`. Adapts the Nitro event shape into
12
- * {@link buildHomePageResponse}.
13
- */
14
- export declare function handleHomePageRequest(input: {
15
- readonly agentName: string;
16
- }, request: Request): Response;
17
- export default function handleStaticHomePageRequest(event: H3Event): Response;
@@ -178,4 +178,4 @@ const DEPLOYMENT_URL_PLACEHOLDER=`{{DEPLOYMENT_URL}}`,AGENT_NAME_PLACEHOLDER=`{{
178
178
  </main>
179
179
  </body>
180
180
  </html>
181
- `;function escapeHtml(e){return e.replaceAll(`&`,`&amp;`).replaceAll(`<`,`&lt;`).replaceAll(`>`,`&gt;`).replaceAll(`"`,`&quot;`).replaceAll(`'`,`&#39;`)}function pickFirstForwardedValue(e){if(e===null)return;let t=e.split(`,`)[0]?.trim();if(!(t===void 0||t.length===0))return t}function resolveDeploymentUrl(e){let t=e.headers,n=new URL(e.url),r=pickFirstForwardedValue(t.get(`x-forwarded-host`)),i=pickFirstForwardedValue(t.get(`x-forwarded-proto`)),a=r??t.get(`host`)??n.host;return`${i??n.protocol.replace(/:$/,``)}://${a}`}function buildHomePageResponse(r,i){let a=resolveDeploymentUrl(i),o=HOME_PAGE_HTML_TEMPLATE.replace(AGENT_NAME_PLACEHOLDER,()=>escapeHtml(r.agentName)).replace(DEPLOYMENT_URL_PLACEHOLDER,()=>escapeHtml(a));return new Response(o,{headers:{"cache-control":`no-store`,"content-type":`text/html; charset=utf-8`}})}function handleHomePageRequest(e,t){return buildHomePageResponse(e,t)}function handleStaticHomePageRequest(e){return buildHomePageResponse({agentName:`eve`},e.req)}export{buildHomePageResponse,handleStaticHomePageRequest as default,handleHomePageRequest};
181
+ `;function escapeHtml(e){return e.replaceAll(`&`,`&amp;`).replaceAll(`<`,`&lt;`).replaceAll(`>`,`&gt;`).replaceAll(`"`,`&quot;`).replaceAll(`'`,`&#39;`)}function pickFirstForwardedValue(e){if(e===null)return;let t=e.split(`,`)[0]?.trim();if(!(t===void 0||t.length===0))return t}function resolveDeploymentUrl(e){let t=e.headers,n=new URL(e.url),r=pickFirstForwardedValue(t.get(`x-forwarded-host`)),i=pickFirstForwardedValue(t.get(`x-forwarded-proto`)),a=r??t.get(`host`)??n.host;return`${i??n.protocol.replace(/:$/,``)}://${a}`}function buildHomePageResponse(r,i){let a=resolveDeploymentUrl(i),o=HOME_PAGE_HTML_TEMPLATE.replace(AGENT_NAME_PLACEHOLDER,()=>escapeHtml(r.agentName)).replace(DEPLOYMENT_URL_PLACEHOLDER,()=>escapeHtml(a));return new Response(o,{headers:{"cache-control":`no-store`,"content-type":`text/html; charset=utf-8`}})}export{buildHomePageResponse};
@@ -1 +1 @@
1
- import{hasEnvValue}from"#internal/resolve-model-endpoint-status.js";import{isChatGptModelRouting}from"#shared/chatgpt-model.js";import{getVercelOidcToken}from"#compiled/@vercel/oidc/index.js";import{buildAgentInfoResponseFromManifest}from"#internal/nitro/routes/agent-info/build-agent-info-response-from-manifest.js";import{loadAgentInfoManifestData,resolveAgentInfoCompiledArtifactsSource}from"#internal/nitro/routes/agent-info/load-agent-info-data.js";import{getDefaultCodexTokenBroker}from"#public/models/openai/chatgpt/token-broker.js";async function createAgentInfoPayload(e){let n=await loadAgentInfoManifestData({compiledArtifactsSource:resolveAgentInfoCompiledArtifactsSource(e)}),i=n.manifest.config.dynamicModel===void 0?n.manifest.config.model.routing:void 0;return buildAgentInfoResponseFromManifest(n,{mode:e.kind,gatewayCredentials:i===void 0?{apiKey:!1,oidc:!1}:await resolveGatewayCredentialPresence(i),...isChatGptModelRouting(i)?{chatgptAuth:await getDefaultCodexTokenBroker().refreshState()}:{}})}async function resolveGatewayCredentialPresence(t){let r=hasEnvValue(process.env.AI_GATEWAY_API_KEY);if(t.kind===`external`||r)return{apiKey:r,oidc:!1};try{return await getVercelOidcToken(),{apiKey:!1,oidc:!0}}catch{return{apiKey:!1,oidc:!1}}}async function handleAgentInfoRequest(e){return new Response(JSON.stringify(await createAgentInfoPayload(e)),{headers:{"cache-control":`no-store`,"content-type":`application/json; charset=utf-8`}})}export{handleAgentInfoRequest};
1
+ import{hasEnvValue}from"#internal/resolve-model-endpoint-status.js";import{isChatGptModelRouting}from"#shared/chatgpt-model.js";import{getVercelOidcToken}from"#compiled/@vercel/oidc/index.js";import{buildAgentInfoResponse}from"#internal/nitro/routes/agent-info/build-agent-info-response.js";import{loadAgentInfoManifestData,resolveAgentInfoCompiledArtifactsSource}from"#internal/nitro/routes/agent-info/load-agent-info-data.js";import{getDefaultCodexTokenBroker}from"#public/models/openai/chatgpt/token-broker.js";async function createAgentInfoPayload(e){let n=await loadAgentInfoManifestData({compiledArtifactsSource:resolveAgentInfoCompiledArtifactsSource(e)}),i=n.manifest.config.dynamicModel===void 0?n.manifest.config.model.routing:void 0;return buildAgentInfoResponse(n,{mode:e.kind,gatewayCredentials:i===void 0?{apiKey:!1,oidc:!1}:await resolveGatewayCredentialPresence(i),...isChatGptModelRouting(i)?{chatgptAuth:await getDefaultCodexTokenBroker().refreshState()}:{}})}async function resolveGatewayCredentialPresence(t){let r=hasEnvValue(process.env.AI_GATEWAY_API_KEY);if(t.kind===`external`||r)return{apiKey:r,oidc:!1};try{return await getVercelOidcToken(),{apiKey:!1,oidc:!0}}catch{return{apiKey:!1,oidc:!1}}}async function handleAgentInfoRequest(e){return new Response(JSON.stringify(await createAgentInfoPayload(e)),{headers:{"cache-control":`no-store`,"content-type":`application/json; charset=utf-8`}})}export{handleAgentInfoRequest};
@@ -5,21 +5,21 @@ import { type NitroArtifactsConfig } from "#internal/nitro/routes/runtime-artifa
5
5
  /**
6
6
  * Bundle returned to the per-channel Nitro dispatch handler.
7
7
  *
8
- * Carries the resolved channel set (framework defaults + authored
9
- * overrides minus authored disables) and the per-request workflow runtime.
8
+ * Carries the effective resolved channel set from the compiled route plan and
9
+ * the per-request workflow runtime.
10
10
  * The dispatch handler walks `channels` to match the inbound request
11
11
  * against a registered URL pattern, then calls the matched channel's
12
12
  * `fetch` with a `RouteContext` built from `runtime`.
13
13
  */
14
14
  export interface NitroChannelRuntimeBundle {
15
+ readonly agentName: string;
15
16
  readonly channels: readonly ResolvedChannelDefinition[];
16
17
  readonly resolveRemoteAgentStreamHeaders?: RemoteAgentStreamHeadersResolver;
17
18
  readonly runtime: Runtime;
18
19
  }
19
20
  /**
20
- * Resolves the per-request channel bundle: the agent's resolved channels
21
- * (already merged with framework defaults by `resolve-agent-graph.ts`)
22
- * and a fresh workflow runtime.
21
+ * Resolves the per-request channel bundle from the effective compiled graph
22
+ * and creates a fresh workflow runtime.
23
23
  *
24
24
  * No singleton caching is needed — session state lives inside the
25
25
  * workflow's durable execution and the channel set is recomputed from the
@@ -1 +1 @@
1
- import{resolveRemoteAgentStreamHeaders}from"#execution/remote-agent-dispatch.js";import{createWorkflowRuntime}from"#execution/workflow-runtime.js";import{getCompiledRuntimeAgentBundle}from"#runtime/sessions/compiled-agent-cache.js";import{resolveNitroCompiledArtifactsSource}from"#internal/nitro/routes/runtime-artifacts.js";async function resolveNitroChannelRuntimeBundle(t){let n=resolveNitroCompiledArtifactsSource(t),r=await getCompiledRuntimeAgentBundle({compiledArtifactsSource:n}),i=createWorkflowRuntime({compiledArtifactsSource:n});return{channels:r.graph.root.channels,resolveRemoteAgentStreamHeaders:async e=>await resolveRemoteAgentStreamHeaders({bundle:r,...e}),runtime:i}}export{resolveNitroChannelRuntimeBundle};
1
+ import{createWorkflowRuntime}from"#execution/workflow-runtime.js";import{resolveRemoteAgentStreamHeaders}from"#execution/remote-agent-dispatch.js";import{getCompiledRuntimeAgentBundle}from"#runtime/sessions/compiled-agent-cache.js";import{resolveNitroCompiledArtifactsSource}from"#internal/nitro/routes/runtime-artifacts.js";async function resolveNitroChannelRuntimeBundle(t){let n=resolveNitroCompiledArtifactsSource(t),r=await getCompiledRuntimeAgentBundle({compiledArtifactsSource:n}),i=createWorkflowRuntime({compiledArtifactsSource:n});return{agentName:r.resolvedAgent.config?.name??`eve`,channels:r.graph.root.channels,resolveRemoteAgentStreamHeaders:async e=>await resolveRemoteAgentStreamHeaders({bundle:r,...e}),runtime:i}}export{resolveNitroChannelRuntimeBundle};
@@ -0,0 +1 @@
1
+ export { loadFrameworkProgrammaticModule } from "#framework/sources/registry.js";
@@ -0,0 +1 @@
1
+ import{loadFrameworkProgrammaticModule}from"#framework/sources/registry.js";export{loadFrameworkProgrammaticModule};
@@ -43,8 +43,8 @@ interface RuntimeRegistryRegisterOptions {
43
43
  * collision.
44
44
  *
45
45
  * The optional `reserved` set lets a registry detect collisions across
46
- * multiple registration passes — for example the tool registry seeds
47
- * reserved framework tool names so authored tools cannot shadow them.
46
+ * multiple registration passes — for example when runtime-derived tools and
47
+ * selected compiled tools share one model-visible namespace.
48
48
  * Once an entry is registered its name is automatically added to the
49
49
  * reserved set.
50
50
  */
@@ -69,8 +69,7 @@ export declare class RuntimeRegistry<TEntry> {
69
69
  register(name: string, entry: TEntry, options?: RuntimeRegistryRegisterOptions): void;
70
70
  /**
71
71
  * Adds or replaces an entry without uniqueness or reservation checks.
72
- * Use for framework-owned defaults that the caller has already
73
- * validated.
72
+ * Use for entries the caller has already validated.
74
73
  */
75
74
  set(name: string, entry: TEntry): void;
76
75
  }
@@ -1,7 +1,7 @@
1
1
  import type { FileUIPart, ProviderMetadata, TextUIPart, UserContent } from "ai";
2
- import type { ConnectionAuthorizationChallenge } from "#public/connections/errors.js";
3
- import type { RuntimeActionRequest, RuntimeActionResult, RuntimeToolResultActionResult } from "#runtime/actions/types.js";
4
- import type { InputRequest, InputResponse } from "#runtime/input/types.js";
2
+ import type { ConnectionAuthorizationChallenge } from "#connections/errors.js";
3
+ import type { RuntimeActionRequest, RuntimeActionResult, RuntimeToolResultActionResult } from "#shared/action-types.js";
4
+ import type { InputRequest, InputResponse } from "#shared/input.js";
5
5
  import type { JsonObject, JsonValue } from "#shared/json.js";
6
6
  export declare const EVE_SESSION_ID_HEADER = "x-eve-session-id";
7
7
  export declare const EVE_STREAM_FORMAT_HEADER = "x-eve-stream-format";
@@ -3,6 +3,8 @@
3
3
  * surfaces.
4
4
  */
5
5
  export declare const EVE_ROUTE_PREFIX = "/eve/v1";
6
+ /** Reservation pattern for the production cron bridge's unguessable token. */
7
+ export declare const EVE_PRODUCTION_CRON_ROUTE_PATTERN = "/eve/v1/cron/:token";
6
8
  /**
7
9
  * Stable framework-owned health route.
8
10
  */
@@ -1 +1 @@
1
- const EVE_ROUTE_PREFIX=`/eve/v1`,EVE_HEALTH_ROUTE_PATH=`${EVE_ROUTE_PREFIX}/health`,EVE_INFO_ROUTE_PATH=`${EVE_ROUTE_PREFIX}/info`,EVE_SESSION_ROUTE_PATH=`${EVE_ROUTE_PREFIX}/session`,EVE_SESSION_ROUTE_PATTERN=`${EVE_SESSION_ROUTE_PATH}/:sessionId`,EVE_SESSION_CANCEL_ROUTE_PATTERN=`${EVE_SESSION_ROUTE_PATH}/:sessionId/cancel`,EVE_SESSION_COMPACT_ROUTE_PATTERN=`${EVE_SESSION_ROUTE_PATH}/:sessionId/compact`,EVE_SESSION_CLEAR_ROUTE_PATTERN=`${EVE_SESSION_ROUTE_PATH}/:sessionId/clear`,EVE_SESSION_RESET_ROUTE_PATTERN=`${EVE_SESSION_ROUTE_PATH}/:sessionId/reset`,EVE_SESSION_STREAM_ROUTE_PATTERN=`${EVE_SESSION_ROUTE_PATH}/:sessionId/stream`,EVE_SUBAGENT_STREAM_ROUTE_PATTERN=`${EVE_SESSION_ROUTE_PATH}/:parentSessionId/subagents/:callId/:childSessionId/stream`,EVE_DEV_DISPATCH_SCHEDULE_ROUTE_PATTERN=`${EVE_ROUTE_PREFIX}/dev/schedules/:scheduleId`,EVE_DEV_RUNTIME_ARTIFACTS_ROUTE_PATH=`${EVE_ROUTE_PREFIX}/dev/runtime-artifacts`,EVE_DEV_RUNTIME_ARTIFACTS_REBUILD_ROUTE_PATH=`${EVE_DEV_RUNTIME_ARTIFACTS_ROUTE_PATH}/rebuild`,EVE_DEV_RUNTIME_ARTIFACTS_SUSPEND_ROUTE_PATH=`${EVE_DEV_RUNTIME_ARTIFACTS_ROUTE_PATH}/suspend`,EVE_DEV_RUNTIME_ARTIFACTS_RESUME_ROUTE_PATH=`${EVE_DEV_RUNTIME_ARTIFACTS_ROUTE_PATH}/resume`;function createEveDevDispatchSchedulePath(t){return`${EVE_ROUTE_PREFIX}/dev/schedules/${encodeURIComponent(t)}`}const EVE_CONNECTION_CALLBACK_ROUTE_PATTERN=`${EVE_ROUTE_PREFIX}/connections/:name/callback/:attemptId/:token`,EVE_LEGACY_CONNECTION_CALLBACK_ROUTE_PATTERN=`${EVE_ROUTE_PREFIX}/connections/:name/callback/:token`,EVE_CALLBACK_ROUTE_PATTERN=`${EVE_ROUTE_PREFIX}/callback/:token`,EVE_TASK_INPUT_ROUTE_PATTERN=`${EVE_ROUTE_PREFIX}/task-input/:token`;function createEveSessionRoutePath(e){return`${EVE_SESSION_ROUTE_PATH}/${encodeURIComponent(e)}`}function createEveSessionCancelRoutePath(e){return`${EVE_SESSION_ROUTE_PATH}/${encodeURIComponent(e)}/cancel`}function createEveSubagentStreamRoutePath(e){return`${EVE_SESSION_ROUTE_PATH}/${encodeURIComponent(e.parentSessionId)}/subagents/${encodeURIComponent(e.callId)}/${encodeURIComponent(e.childSessionId)}/stream`}function createEveSessionCompactRoutePath(e){return`${EVE_SESSION_ROUTE_PATH}/${encodeURIComponent(e)}/compact`}function createEveSessionClearRoutePath(e){return`${EVE_SESSION_ROUTE_PATH}/${encodeURIComponent(e)}/clear`}function createEveSessionResetRoutePath(e){return`${EVE_SESSION_ROUTE_PATH}/${encodeURIComponent(e)}/reset`}function createEveSessionStreamRoutePath(e){return`${EVE_SESSION_ROUTE_PATH}/${encodeURIComponent(e)}/stream`}function createEveConnectionCallbackRoutePath(t,n,r){return`${EVE_ROUTE_PREFIX}/connections/${encodeURIComponent(t)}/callback/${encodeURIComponent(n)}/${encodeURIComponent(r)}`}function createEveCallbackRoutePath(t){return`${EVE_ROUTE_PREFIX}/callback/${encodeURIComponent(t)}`}function createEveTaskInputRoutePath(t){return`${EVE_ROUTE_PREFIX}/task-input/${encodeURIComponent(t)}`}export{EVE_CALLBACK_ROUTE_PATTERN,EVE_CONNECTION_CALLBACK_ROUTE_PATTERN,EVE_DEV_DISPATCH_SCHEDULE_ROUTE_PATTERN,EVE_DEV_RUNTIME_ARTIFACTS_REBUILD_ROUTE_PATH,EVE_DEV_RUNTIME_ARTIFACTS_RESUME_ROUTE_PATH,EVE_DEV_RUNTIME_ARTIFACTS_ROUTE_PATH,EVE_DEV_RUNTIME_ARTIFACTS_SUSPEND_ROUTE_PATH,EVE_HEALTH_ROUTE_PATH,EVE_INFO_ROUTE_PATH,EVE_LEGACY_CONNECTION_CALLBACK_ROUTE_PATTERN,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,createEveCallbackRoutePath,createEveConnectionCallbackRoutePath,createEveDevDispatchSchedulePath,createEveSessionCancelRoutePath,createEveSessionClearRoutePath,createEveSessionCompactRoutePath,createEveSessionResetRoutePath,createEveSessionRoutePath,createEveSessionStreamRoutePath,createEveSubagentStreamRoutePath,createEveTaskInputRoutePath};
1
+ const EVE_ROUTE_PREFIX=`/eve/v1`,EVE_PRODUCTION_CRON_ROUTE_PATTERN=`${EVE_ROUTE_PREFIX}/cron/:token`,EVE_HEALTH_ROUTE_PATH=`${EVE_ROUTE_PREFIX}/health`,EVE_INFO_ROUTE_PATH=`${EVE_ROUTE_PREFIX}/info`,EVE_SESSION_ROUTE_PATH=`${EVE_ROUTE_PREFIX}/session`,EVE_SESSION_ROUTE_PATTERN=`${EVE_SESSION_ROUTE_PATH}/:sessionId`,EVE_SESSION_CANCEL_ROUTE_PATTERN=`${EVE_SESSION_ROUTE_PATH}/:sessionId/cancel`,EVE_SESSION_COMPACT_ROUTE_PATTERN=`${EVE_SESSION_ROUTE_PATH}/:sessionId/compact`,EVE_SESSION_CLEAR_ROUTE_PATTERN=`${EVE_SESSION_ROUTE_PATH}/:sessionId/clear`,EVE_SESSION_RESET_ROUTE_PATTERN=`${EVE_SESSION_ROUTE_PATH}/:sessionId/reset`,EVE_SESSION_STREAM_ROUTE_PATTERN=`${EVE_SESSION_ROUTE_PATH}/:sessionId/stream`,EVE_SUBAGENT_STREAM_ROUTE_PATTERN=`${EVE_SESSION_ROUTE_PATH}/:parentSessionId/subagents/:callId/:childSessionId/stream`,EVE_DEV_DISPATCH_SCHEDULE_ROUTE_PATTERN=`${EVE_ROUTE_PREFIX}/dev/schedules/:scheduleId`,EVE_DEV_RUNTIME_ARTIFACTS_ROUTE_PATH=`${EVE_ROUTE_PREFIX}/dev/runtime-artifacts`,EVE_DEV_RUNTIME_ARTIFACTS_REBUILD_ROUTE_PATH=`${EVE_DEV_RUNTIME_ARTIFACTS_ROUTE_PATH}/rebuild`,EVE_DEV_RUNTIME_ARTIFACTS_SUSPEND_ROUTE_PATH=`${EVE_DEV_RUNTIME_ARTIFACTS_ROUTE_PATH}/suspend`,EVE_DEV_RUNTIME_ARTIFACTS_RESUME_ROUTE_PATH=`${EVE_DEV_RUNTIME_ARTIFACTS_ROUTE_PATH}/resume`;function createEveDevDispatchSchedulePath(t){return`${EVE_ROUTE_PREFIX}/dev/schedules/${encodeURIComponent(t)}`}const EVE_CONNECTION_CALLBACK_ROUTE_PATTERN=`${EVE_ROUTE_PREFIX}/connections/:name/callback/:attemptId/:token`,EVE_LEGACY_CONNECTION_CALLBACK_ROUTE_PATTERN=`${EVE_ROUTE_PREFIX}/connections/:name/callback/:token`,EVE_CALLBACK_ROUTE_PATTERN=`${EVE_ROUTE_PREFIX}/callback/:token`,EVE_TASK_INPUT_ROUTE_PATTERN=`${EVE_ROUTE_PREFIX}/task-input/:token`;function createEveSessionRoutePath(e){return`${EVE_SESSION_ROUTE_PATH}/${encodeURIComponent(e)}`}function createEveSessionCancelRoutePath(e){return`${EVE_SESSION_ROUTE_PATH}/${encodeURIComponent(e)}/cancel`}function createEveSubagentStreamRoutePath(e){return`${EVE_SESSION_ROUTE_PATH}/${encodeURIComponent(e.parentSessionId)}/subagents/${encodeURIComponent(e.callId)}/${encodeURIComponent(e.childSessionId)}/stream`}function createEveSessionCompactRoutePath(e){return`${EVE_SESSION_ROUTE_PATH}/${encodeURIComponent(e)}/compact`}function createEveSessionClearRoutePath(e){return`${EVE_SESSION_ROUTE_PATH}/${encodeURIComponent(e)}/clear`}function createEveSessionResetRoutePath(e){return`${EVE_SESSION_ROUTE_PATH}/${encodeURIComponent(e)}/reset`}function createEveSessionStreamRoutePath(e){return`${EVE_SESSION_ROUTE_PATH}/${encodeURIComponent(e)}/stream`}function createEveConnectionCallbackRoutePath(t,n,r){return`${EVE_ROUTE_PREFIX}/connections/${encodeURIComponent(t)}/callback/${encodeURIComponent(n)}/${encodeURIComponent(r)}`}function createEveCallbackRoutePath(t){return`${EVE_ROUTE_PREFIX}/callback/${encodeURIComponent(t)}`}function createEveTaskInputRoutePath(t){return`${EVE_ROUTE_PREFIX}/task-input/${encodeURIComponent(t)}`}export{EVE_CALLBACK_ROUTE_PATTERN,EVE_CONNECTION_CALLBACK_ROUTE_PATTERN,EVE_DEV_DISPATCH_SCHEDULE_ROUTE_PATTERN,EVE_DEV_RUNTIME_ARTIFACTS_REBUILD_ROUTE_PATH,EVE_DEV_RUNTIME_ARTIFACTS_RESUME_ROUTE_PATH,EVE_DEV_RUNTIME_ARTIFACTS_ROUTE_PATH,EVE_DEV_RUNTIME_ARTIFACTS_SUSPEND_ROUTE_PATH,EVE_HEALTH_ROUTE_PATH,EVE_INFO_ROUTE_PATH,EVE_LEGACY_CONNECTION_CALLBACK_ROUTE_PATTERN,EVE_PRODUCTION_CRON_ROUTE_PATTERN,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,createEveCallbackRoutePath,createEveConnectionCallbackRoutePath,createEveDevDispatchSchedulePath,createEveSessionCancelRoutePath,createEveSessionClearRoutePath,createEveSessionCompactRoutePath,createEveSessionResetRoutePath,createEveSessionRoutePath,createEveSessionStreamRoutePath,createEveSubagentStreamRoutePath,createEveTaskInputRoutePath};
@@ -1,4 +1,4 @@
1
- import type { TokenValue } from "#client/types.js";
1
+ import { type TokenValue } from "#client/types.js";
2
2
  /**
3
3
  * Outbound request auth hook for remote agent dispatch. Runs once per
4
4
  * outbound request; returns the headers (e.g. `authorization`) to merge onto
@@ -21,11 +21,15 @@ export interface VercelOidcOptions {
21
21
  readonly team?: string;
22
22
  }
23
23
  /**
24
- * Returns an {@link OutboundAuthFn} that emits a `Bearer` Vercel OIDC token for
25
- * outbound remote-agent requests. Reads the token from the request context or
26
- * the `VERCEL_OIDC_TOKEN` environment variable (refreshed in development when
27
- * expired). Pass {@link VercelOidcOptions} to scope the refresh to a team or
28
- * project; defaults to `{}`.
24
+ * Returns an {@link OutboundAuthFn} that emits a Vercel OIDC token in both the
25
+ * bearer and trusted-identity-provider headers for outbound remote-agent
26
+ * requests. The bearer authenticates the eve route, while the trusted header
27
+ * passes Vercel Deployment Protection.
28
+ *
29
+ * Reads the token from the request context or the `VERCEL_OIDC_TOKEN`
30
+ * environment variable (refreshed in development when expired). Pass
31
+ * {@link VercelOidcOptions} to scope the refresh to a team or project; defaults
32
+ * to `{}`.
29
33
  */
30
34
  export declare function vercelOidc(options?: VercelOidcOptions): OutboundAuthFn;
31
35
  /**
@@ -1 +1 @@
1
- import{getVercelOidcToken}from"#compiled/@vercel/oidc/index.js";function vercelOidc(t={}){return async()=>({headers:{authorization:`Bearer ${await getVercelOidcToken(t)}`}})}function bearer(e){return async()=>({headers:{authorization:`Bearer ${await resolveTokenValue(e)}`}})}function basic(e){return async()=>({headers:{authorization:`Basic ${btoa(`${e.username}:${await resolveTokenValue(e.password)}`)}`}})}async function resolveTokenValue(e){return typeof e==`function`?await e():e}export{basic,bearer,vercelOidc};
1
+ import{VERCEL_TRUSTED_OIDC_IDP_TOKEN_HEADER}from"#client/types.js";import{getVercelOidcToken}from"#compiled/@vercel/oidc/index.js";function vercelOidc(t={}){return async()=>{let n=await getVercelOidcToken(t);return{headers:{authorization:`Bearer ${n}`,[VERCEL_TRUSTED_OIDC_IDP_TOKEN_HEADER]:n}}}}function bearer(e){return async()=>({headers:{authorization:`Bearer ${await resolveTokenValue(e)}`}})}function basic(e){return async()=>({headers:{authorization:`Basic ${btoa(`${e.username}:${await resolveTokenValue(e.password)}`)}`}})}async function resolveTokenValue(e){return typeof e==`function`?await e():e}export{basic,bearer,vercelOidc};
@@ -5,7 +5,7 @@
5
5
  * helpers are lower-level pure functions for custom `fetch` handlers.
6
6
  */
7
7
  import type { SessionAuthContext } from "#channel/types.js";
8
- import { type RuntimeIpAllowList } from "#runtime/governance/network/ip-allow-list.js";
8
+ import { type RuntimeIpAllowList } from "#channel/ip-allow-list.js";
9
9
  /**
10
10
  * Result returned by the verifier helpers below. On success, `sessionAuth`
11
11
  * is a fully-constructed {@link SessionAuthContext}; on failure no detail is
@@ -1 +1 @@
1
- import{createLogger}from"#internal/logging.js";import{isLoopbackHostname}from"#shared/network-address.js";import{isEveDevEnvironment}from"#internal/application/dev-environment.js";import{resolveVercelOidcCurrentProject}from"#runtime/governance/auth/vercel-oidc-project.js";import{decodeJwt}from"#compiled/jose/index.js";import{authenticateHttpBasicStrategy}from"#runtime/governance/auth/http-basic.js";import{authenticateJwtEcdsaStrategy}from"#runtime/governance/auth/jwt-ecdsa.js";import{authenticateJwtHmacStrategy}from"#runtime/governance/auth/jwt-hmac.js";import{authenticateOidcStrategy}from"#runtime/governance/auth/oidc.js";import{createRuntimeSessionAuthContext}from"#runtime/governance/auth/types.js";import{createRuntimeIpAllowList,isRuntimeIpAllowed}from"#runtime/governance/network/ip-allow-list.js";const vercelOidcLog=createLogger(`auth.vercel-oidc`);function verifyHttpBasic(e,t){if(e===null)return{ok:!1};let n=authenticateHttpBasicStrategy({authorization:e,strategy:{kind:`http-basic`,password:t.password,username:t.username}});return n.kind===`authenticated`?{ok:!0,sessionAuth:createRuntimeSessionAuthContext(n.principal)}:{ok:!1}}async function verifyJwtHmac(e,t){if(e===null||e.length===0)return{ok:!1};let n=await authenticateJwtHmacStrategy({strategy:{algorithm:t.algorithm,audiences:[...t.audiences],clockSkewSeconds:t.clockSkewSeconds??30,issuer:t.issuer,kind:`jwt-hmac`,secret:t.secret,...t.claims===void 0?{}:{claims:t.claims},...t.subjects===void 0?{}:{subjects:t.subjects}},token:e});return n.kind===`authenticated`?{ok:!0,sessionAuth:createRuntimeSessionAuthContext(n.principal)}:{ok:!1}}async function verifyJwtEcdsa(e,t){if(e===null||e.length===0)return{ok:!1};let n=await authenticateJwtEcdsaStrategy({strategy:{algorithm:t.algorithm,audiences:[...t.audiences],clockSkewSeconds:t.clockSkewSeconds??30,issuer:t.issuer,kind:`jwt-ecdsa`,publicKey:t.publicKey,...t.claims===void 0?{}:{claims:t.claims},...t.subjects===void 0?{}:{subjects:t.subjects}},token:e});return n.kind===`authenticated`?{ok:!0,sessionAuth:createRuntimeSessionAuthContext(n.principal)}:{ok:!1}}async function verifyOidc(e,t){let n=await runOidcVerification(e,{...t,acceptCurrentVercelProject:!1,currentVercelProject:void 0});return n.kind===`authenticated`?{ok:!0,sessionAuth:createRuntimeSessionAuthContext(n.principal)}:{ok:!1}}async function runOidcVerification(e,t){if(e===null||e.length===0)return{kind:`not-authenticated`};let n={acceptCurrentVercelProject:t.acceptCurrentVercelProject,audiences:[...t.audiences],clockSkewSeconds:t.clockSkewSeconds??30,discoveryUrl:t.discoveryUrl??`${t.issuer.replace(/\/$/,``)}/.well-known/openid-configuration`,issuer:t.issuer,kind:`oidc`,...t.claims===void 0?{}:{claims:t.claims},...t.subjects===void 0?{}:{subjects:t.subjects}};return await authenticateOidcStrategy({strategy:t.currentVercelProject===void 0?n:{...n,currentVercelProject:t.currentVercelProject},token:e})}function extractBearerToken(e){if(e===null)return null;let t=/^Bearer\s+(.+)$/i.exec(e)?.[1]?.trim();return t===void 0||t.length===0?null:t}function createIpAllowList(e){return createRuntimeIpAllowList(e)}function isIpAllowed(e,t){return e!==null&&isRuntimeIpAllowed(e,t)}function createUnauthorizedResponse(e={}){let t=e.status??401,n=e.code??(t===403?`forbidden`:`unauthorized`),r=e.message??(t===403?`Forbidden.`:`Authorization is required for this route.`),i=e.challenges??[],a=new Headers({"cache-control":`no-store`});for(let e of i)a.append(`www-authenticate`,formatChallenge(e));return Response.json({code:n,error:r,ok:!1},{headers:a,status:t})}function formatChallenge(e){if(e.parameters===void 0||Object.keys(e.parameters).length===0)return e.scheme;let t=Object.entries(e.parameters).map(([e,t])=>`${e}="${escapeAuthChallengeParameter(t)}"`).join(`, `);return`${e.scheme} ${t}`}function escapeAuthChallengeParameter(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`)}function isValidOAuthIdentifierUrl(e){try{let n=new URL(e);return(n.protocol===`https:`||n.protocol===`http:`&&isLoopbackHostname(n.hostname))&&n.username.length===0&&n.password.length===0&&n.search.length===0&&n.hash.length===0}catch{return!1}}function isValidMetadataPath(e){if(!e.startsWith(`/`)||e.startsWith(`//`))return!1;let t=new URL(e,`https://eve.invalid`);return t.origin===`https://eve.invalid`&&t.search.length===0&&t.hash.length===0}var UnauthenticatedError=class extends Error{response;constructor(e={}){super(e.message??`Authorization is required for this route.`),this.name=`UnauthenticatedError`,this.response=createUnauthorizedResponse({...e,status:401})}},ForbiddenError=class extends Error{response;constructor(e={}){super(e.message??`Forbidden.`),this.name=`ForbiddenError`,this.response=createUnauthorizedResponse({...e,status:403})}};const OAUTH_RESOURCE_SYMBOL=Symbol.for(`eve.channels.auth.oauthResource`);function oauthResource(e,t){let n=t.issuer===void 0?t.authorizationServers:[t.issuer];if(n.length===0||n.some(e=>!isValidOAuthIdentifierUrl(e)))throw Error(`oauthResource requires at least one HTTPS authorization server URL (HTTP is allowed only on loopback).`);if(t.resource!==void 0&&!isValidOAuthIdentifierUrl(t.resource))throw Error(`oauthResource resource must be an HTTPS URL without credentials, query, or fragment (HTTP is allowed only on loopback).`);if(t.metadataPath!==void 0&&!isValidMetadataPath(t.metadataPath))throw Error(`oauthResource metadataPath must be an absolute path without a host, query, or fragment.`);let r=Array.isArray(e)?e:[e],composed=async e=>{for(let t of r){let n=await t(e);if(n)return n}return null},i=collectDeclaredChallenges(r),a=withAuthChallenges(composed,i.length>0?i:[{scheme:`Bearer`}]);return Object.defineProperty(a,OAUTH_RESOURCE_SYMBOL,{enumerable:!1,value:t}),a}function readOAuthResourceOptions(e){if(!Array.isArray(e))return e[OAUTH_RESOURCE_SYMBOL]}const AUTH_CHALLENGES_SYMBOL=Symbol.for(`eve.channels.auth.challenges`);function withAuthChallenges(e,t){let wrapped=t=>e(t);return Object.defineProperty(wrapped,AUTH_CHALLENGES_SYMBOL,{value:t}),wrapped}function getDeclaredChallenges(e){return e[AUTH_CHALLENGES_SYMBOL]}function collectDeclaredChallenges(e){let t=new Set,n=[];for(let r of e)for(let e of getDeclaredChallenges(r)??[]){let r=formatChallenge(e);t.has(r)||(t.add(r),n.push(e))}return n}async function routeAuth(e,t){let n=Array.isArray(t)?t:[t];try{for(let t of n){let n=await t(e);if(n)return n}}catch(e){if(typeof e==`object`&&e&&`response`in e&&e.response instanceof Response)return e.response;throw e}let r=collectDeclaredChallenges(n);return createUnauthorizedResponse({challenges:r.length>0?addInvalidBearerTokenError(e,r):[{scheme:`Bearer`}]})}function addInvalidBearerTokenError(e,t){let n=e.headers.get(`authorization`);return n===null||!/^Bearer(?:\s|$)/i.test(n.trim())||!t.some(e=>e.scheme===`Bearer`)?t:t.map(e=>e.scheme!==`Bearer`||e.parameters?.error!==void 0?e:{...e,parameters:{...e.parameters,error:`invalid_token`}})}function placeholderAuth(){return()=>{if(process.env.VERCEL_ENV!==`production`)return null;throw new UnauthenticatedError({code:`eve_production_auth_not_configured`,message:`Production auth is not configured. Replace placeholderAuth() in agent/channels/eve.ts with your app's auth provider.`})}}function none(){return()=>ANONYMOUS_SESSION_AUTH_CONTEXT}function localDev(){return()=>isLocalDevelopmentServer()?LOCAL_DEV_SESSION_AUTH_CONTEXT:null}function isLocalDevelopmentServer(){return process.env.VERCEL&&process.env.VERCEL_ENV===`development`?!0:isEveDevEnvironment()}const ANONYMOUS_SESSION_AUTH_CONTEXT={attributes:{},authenticator:`none`,principalId:`anonymous`,principalType:`anonymous`},LOCAL_DEV_SESSION_AUTH_CONTEXT={attributes:{},authenticator:`local-dev`,principalId:`local-dev`,principalType:`local-dev`};async function verifyVercelOidc(e,t={}){if(e===null||e.length===0)return{ok:!1};let n=decodeUnverifiedJwtClaims(e);if(n===null)return vercelOidcLog.debug(`Rejected token that failed to decode as a JWT.`),{ok:!1};if(!n.issuer.startsWith(`https://oidc.vercel.com/`))return vercelOidcLog.debug(`Rejected token whose issuer is not a Vercel OIDC issuer.`,{issuer:n.issuer}),{ok:!1};if(n.audiences.length===0)return vercelOidcLog.debug(`Rejected token with no audience claim.`,{issuer:n.issuer}),{ok:!1};if(!n.audiences.some(e=>e.startsWith(`https://vercel.com/`)))return vercelOidcLog.debug(`Rejected token whose audience is not a Vercel audience.`,{audiences:n.audiences,issuer:n.issuer}),{ok:!1};let r=resolveCurrentVercelProject(t),i=await runOidcVerification(e,{acceptCurrentVercelProject:!0,audiences:n.audiences,currentVercelProject:r,issuer:n.issuer,subjects:t.subjects??[]});return i.kind===`authenticated`?(vercelOidcLog.debug(`Accepted Vercel OIDC token.`,{issuer:n.issuer,principalType:i.principal.principalType,subject:i.principal.subject}),{ok:!0,sessionAuth:createRuntimeSessionAuthContext(i.principal)}):(vercelOidcLog.debug(`Rejected Vercel OIDC token after verification.`,{audiences:n.audiences,issuer:n.issuer,reason:i.kind,subjectsConfigured:(t.subjects??[]).length>0,...i.kind===`misconfigured`?{detail:i.message}:{}}),{ok:!1})}function resolveCurrentVercelProject(e){if(e.currentVercelProject!==void 0)return e.currentVercelProject;let t=process.env.VERCEL_PROJECT_ID?.trim();if(t===void 0||t.length===0)return;let n=process.env.VERCEL_TARGET_ENV?.trim()||process.env.VERCEL_ENV?.trim();return n===void 0||n.length===0?{projectId:t}:{environment:n,projectId:t}}function vercelSubject(e){assertVercelSubjectSegment(`teamSlug`,e.teamSlug),assertVercelSubjectSegment(`projectName`,e.projectName);let t=e.environment??`production`;if(t!==`production`&&t!==`preview`&&t!==`development`&&t!==`*`)throw Error(`vercelSubject: invalid environment ${JSON.stringify(t)}; expected "production", "preview", "development", or "*".`);return`owner:${e.teamSlug}:project:${e.projectName}:environment:${t}`}function assertVercelSubjectSegment(e,t){if(t.length===0)throw Error(`vercelSubject: ${e} must be a non-empty string.`);if(t.includes(`*`)||t.includes(`:`))throw Error(`vercelSubject: ${e} ${JSON.stringify(t)} may not contain ${t.includes(`:`)?`':'`:`'*'`}. Hand-write the subject string when wildcards are intentional.`)}function vercelOidc(e={}){return withAuthChallenges(async t=>{let n=extractBearerToken(t.headers.get(`authorization`)),i=e.currentVercelProject??(n!==null&&isLocalDevelopmentVercelOidc()?await resolveVercelOidcCurrentProject(t):void 0),a=await verifyVercelOidc(n,i===void 0?e:{...e,currentVercelProject:i});return a.ok?a.sessionAuth:null},[{scheme:`Bearer`}])}function isLocalDevelopmentVercelOidc(){return process.env.VERCEL_ENV===`development`?!0:process.env.VERCEL_ENV===`preview`||process.env.VERCEL_ENV===`production`?!1:isEveDevEnvironment()}function httpBasic(e,t){return withAuthChallenges(t=>{let n=verifyHttpBasic(t.headers.get(`authorization`),e);return n.ok?n.sessionAuth:null},[{parameters:{realm:t?.realm??`eve`,charset:`UTF-8`},scheme:`Basic`}])}function jwtHmac(e){return withAuthChallenges(async t=>{let n=await verifyJwtHmac(extractBearerToken(t.headers.get(`authorization`)),e);return n.ok?n.sessionAuth:null},[{scheme:`Bearer`}])}function jwtEcdsa(e){return withAuthChallenges(async t=>{let n=await verifyJwtEcdsa(extractBearerToken(t.headers.get(`authorization`)),e);return n.ok?n.sessionAuth:null},[{scheme:`Bearer`}])}function oidc(e){return withAuthChallenges(async t=>{let n=await verifyOidc(extractBearerToken(t.headers.get(`authorization`)),e);return n.ok?n.sessionAuth:null},[{scheme:`Bearer`}])}function decodeUnverifiedJwtClaims(e){let t;try{t=decodeJwt(e)}catch{return null}return typeof t.iss!=`string`||t.iss.length===0?null:{audiences:typeof t.aud==`string`?[t.aud]:Array.isArray(t.aud)?t.aud.filter(e=>typeof e==`string`):[],issuer:t.iss}}export{ForbiddenError,UnauthenticatedError,createIpAllowList,createUnauthorizedResponse,escapeAuthChallengeParameter,extractBearerToken,httpBasic,isIpAllowed,jwtEcdsa,jwtHmac,localDev,none,oauthResource,oidc,placeholderAuth,readOAuthResourceOptions,routeAuth,vercelOidc,vercelSubject,verifyHttpBasic,verifyJwtEcdsa,verifyJwtHmac,verifyOidc,verifyVercelOidc,withAuthChallenges};
1
+ import{createLogger}from"#internal/logging.js";import{decodeJwt}from"#compiled/jose/index.js";import{isVercelOidcIssuer}from"#shared/vercel-project.js";import{isLoopbackHostname}from"#shared/network-address.js";import{isEveDevEnvironment}from"#internal/application/dev-environment.js";import{resolveVercelOidcCurrentProject}from"#channel/auth/vercel-oidc-project.js";import{authenticateHttpBasicStrategy}from"#channel/auth/http-basic.js";import{authenticateJwtEcdsaStrategy}from"#channel/auth/jwt-ecdsa.js";import{authenticateJwtHmacStrategy}from"#channel/auth/jwt-hmac.js";import{authenticateOidcStrategy}from"#channel/auth/oidc.js";import{createRuntimeSessionAuthContext}from"#channel/auth/types.js";import{createRuntimeIpAllowList,isRuntimeIpAllowed}from"#channel/ip-allow-list.js";const vercelOidcLog=createLogger(`auth.vercel-oidc`);function verifyHttpBasic(e,t){if(e===null)return{ok:!1};let n=authenticateHttpBasicStrategy({authorization:e,strategy:{kind:`http-basic`,password:t.password,username:t.username}});return n.kind===`authenticated`?{ok:!0,sessionAuth:createRuntimeSessionAuthContext(n.principal)}:{ok:!1}}async function verifyJwtHmac(e,t){if(e===null||e.length===0)return{ok:!1};let n=await authenticateJwtHmacStrategy({strategy:{algorithm:t.algorithm,audiences:[...t.audiences],clockSkewSeconds:t.clockSkewSeconds??30,issuer:t.issuer,kind:`jwt-hmac`,secret:t.secret,...t.claims===void 0?{}:{claims:t.claims},...t.subjects===void 0?{}:{subjects:t.subjects}},token:e});return n.kind===`authenticated`?{ok:!0,sessionAuth:createRuntimeSessionAuthContext(n.principal)}:{ok:!1}}async function verifyJwtEcdsa(e,t){if(e===null||e.length===0)return{ok:!1};let n=await authenticateJwtEcdsaStrategy({strategy:{algorithm:t.algorithm,audiences:[...t.audiences],clockSkewSeconds:t.clockSkewSeconds??30,issuer:t.issuer,kind:`jwt-ecdsa`,publicKey:t.publicKey,...t.claims===void 0?{}:{claims:t.claims},...t.subjects===void 0?{}:{subjects:t.subjects}},token:e});return n.kind===`authenticated`?{ok:!0,sessionAuth:createRuntimeSessionAuthContext(n.principal)}:{ok:!1}}async function verifyOidc(e,t){let n=await runOidcVerification(e,{...t,acceptCurrentVercelProject:!1,currentVercelProject:void 0});return n.kind===`authenticated`?{ok:!0,sessionAuth:createRuntimeSessionAuthContext(n.principal)}:{ok:!1}}async function runOidcVerification(e,t){if(e===null||e.length===0)return{kind:`not-authenticated`};let n={acceptCurrentVercelProject:t.acceptCurrentVercelProject,audiences:[...t.audiences],clockSkewSeconds:t.clockSkewSeconds??30,discoveryUrl:t.discoveryUrl??`${t.issuer.replace(/\/$/,``)}/.well-known/openid-configuration`,issuer:t.issuer,kind:`oidc`,...t.claims===void 0?{}:{claims:t.claims},...t.subjects===void 0?{}:{subjects:t.subjects}};return await authenticateOidcStrategy({strategy:t.currentVercelProject===void 0?n:{...n,currentVercelProject:t.currentVercelProject},token:e})}function extractBearerToken(e){if(e===null)return null;let t=/^Bearer\s+(.+)$/i.exec(e)?.[1]?.trim();return t===void 0||t.length===0?null:t}function createIpAllowList(e){return createRuntimeIpAllowList(e)}function isIpAllowed(e,t){return e!==null&&isRuntimeIpAllowed(e,t)}function createUnauthorizedResponse(e={}){let t=e.status??401,n=e.code??(t===403?`forbidden`:`unauthorized`),r=e.message??(t===403?`Forbidden.`:`Authorization is required for this route.`),i=e.challenges??[],a=new Headers({"cache-control":`no-store`});for(let e of i)a.append(`www-authenticate`,formatChallenge(e));return Response.json({code:n,error:r,ok:!1},{headers:a,status:t})}function formatChallenge(e){if(e.parameters===void 0||Object.keys(e.parameters).length===0)return e.scheme;let t=Object.entries(e.parameters).map(([e,t])=>`${e}="${escapeAuthChallengeParameter(t)}"`).join(`, `);return`${e.scheme} ${t}`}function escapeAuthChallengeParameter(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`)}function isValidOAuthIdentifierUrl(e){try{let t=new URL(e);return(t.protocol===`https:`||t.protocol===`http:`&&isLoopbackHostname(t.hostname))&&t.username.length===0&&t.password.length===0&&t.search.length===0&&t.hash.length===0}catch{return!1}}function isValidMetadataPath(e){if(!e.startsWith(`/`)||e.startsWith(`//`))return!1;let t=new URL(e,`https://eve.invalid`);return t.origin===`https://eve.invalid`&&t.search.length===0&&t.hash.length===0}var UnauthenticatedError=class extends Error{response;constructor(e={}){super(e.message??`Authorization is required for this route.`),this.name=`UnauthenticatedError`,this.response=createUnauthorizedResponse({...e,status:401})}},ForbiddenError=class extends Error{response;constructor(e={}){super(e.message??`Forbidden.`),this.name=`ForbiddenError`,this.response=createUnauthorizedResponse({...e,status:403})}};const OAUTH_RESOURCE_SYMBOL=Symbol.for(`eve.channels.auth.oauthResource`);function oauthResource(e,t){let n=t.issuer===void 0?t.authorizationServers:[t.issuer];if(n.length===0||n.some(e=>!isValidOAuthIdentifierUrl(e)))throw Error(`oauthResource requires at least one HTTPS authorization server URL (HTTP is allowed only on loopback).`);if(t.resource!==void 0&&!isValidOAuthIdentifierUrl(t.resource))throw Error(`oauthResource resource must be an HTTPS URL without credentials, query, or fragment (HTTP is allowed only on loopback).`);if(t.metadataPath!==void 0&&!isValidMetadataPath(t.metadataPath))throw Error(`oauthResource metadataPath must be an absolute path without a host, query, or fragment.`);let r=Array.isArray(e)?e:[e],composed=async e=>{for(let t of r){let n=await t(e);if(n)return n}return null},i=collectDeclaredChallenges(r),a=withAuthChallenges(composed,i.length>0?i:[{scheme:`Bearer`}]);return Object.defineProperty(a,OAUTH_RESOURCE_SYMBOL,{enumerable:!1,value:t}),a}function readOAuthResourceOptions(e){if(!Array.isArray(e))return e[OAUTH_RESOURCE_SYMBOL]}const AUTH_CHALLENGES_SYMBOL=Symbol.for(`eve.channels.auth.challenges`);function withAuthChallenges(e,t){let wrapped=t=>e(t);return Object.defineProperty(wrapped,AUTH_CHALLENGES_SYMBOL,{value:t}),wrapped}function getDeclaredChallenges(e){return e[AUTH_CHALLENGES_SYMBOL]}function collectDeclaredChallenges(e){let t=new Set,n=[];for(let r of e)for(let e of getDeclaredChallenges(r)??[]){let r=formatChallenge(e);t.has(r)||(t.add(r),n.push(e))}return n}async function routeAuth(e,t){let n=Array.isArray(t)?t:[t];try{for(let t of n){let n=await t(e);if(n)return n}}catch(e){if(typeof e==`object`&&e&&`response`in e&&e.response instanceof Response)return e.response;throw e}let r=collectDeclaredChallenges(n);return createUnauthorizedResponse({challenges:r.length>0?addInvalidBearerTokenError(e,r):[{scheme:`Bearer`}]})}function addInvalidBearerTokenError(e,t){let n=e.headers.get(`authorization`);return n===null||!/^Bearer(?:\s|$)/i.test(n.trim())||!t.some(e=>e.scheme===`Bearer`)?t:t.map(e=>e.scheme!==`Bearer`||e.parameters?.error!==void 0?e:{...e,parameters:{...e.parameters,error:`invalid_token`}})}function placeholderAuth(){return()=>{if(process.env.VERCEL_ENV!==`production`)return null;throw new UnauthenticatedError({code:`eve_production_auth_not_configured`,message:`Production auth is not configured. Replace placeholderAuth() in agent/channels/eve.ts with your app's auth provider.`})}}function none(){return()=>ANONYMOUS_SESSION_AUTH_CONTEXT}function localDev(){return()=>isLocalDevelopmentServer()?LOCAL_DEV_SESSION_AUTH_CONTEXT:null}function isLocalDevelopmentServer(){return process.env.VERCEL&&process.env.VERCEL_ENV===`development`?!0:isEveDevEnvironment()}const ANONYMOUS_SESSION_AUTH_CONTEXT={attributes:{},authenticator:`none`,principalId:`anonymous`,principalType:`anonymous`},LOCAL_DEV_SESSION_AUTH_CONTEXT={attributes:{},authenticator:`local-dev`,principalId:`local-dev`,principalType:`local-dev`};async function verifyVercelOidc(e,t={}){if(e===null||e.length===0)return{ok:!1};let r=decodeUnverifiedJwtClaims(e);if(r===null)return vercelOidcLog.debug(`Rejected token that failed to decode as a JWT.`),{ok:!1};if(!isVercelOidcIssuer(r.issuer))return vercelOidcLog.debug(`Rejected token whose issuer is not a Vercel OIDC issuer.`,{issuer:r.issuer}),{ok:!1};if(r.audiences.length===0)return vercelOidcLog.debug(`Rejected token with no audience claim.`,{issuer:r.issuer}),{ok:!1};if(!r.audiences.some(e=>e.startsWith(`https://vercel.com/`)))return vercelOidcLog.debug(`Rejected token whose audience is not a Vercel audience.`,{audiences:r.audiences,issuer:r.issuer}),{ok:!1};let i=resolveCurrentVercelProject(t),a=await runOidcVerification(e,{acceptCurrentVercelProject:!0,audiences:r.audiences,currentVercelProject:i,issuer:r.issuer,subjects:t.subjects??[]});return a.kind===`authenticated`?(vercelOidcLog.debug(`Accepted Vercel OIDC token.`,{issuer:r.issuer,principalType:a.principal.principalType,subject:a.principal.subject}),{ok:!0,sessionAuth:createRuntimeSessionAuthContext(a.principal)}):(vercelOidcLog.debug(`Rejected Vercel OIDC token after verification.`,{audiences:r.audiences,issuer:r.issuer,reason:a.kind,subjectsConfigured:(t.subjects??[]).length>0,...a.kind===`misconfigured`?{detail:a.message}:{}}),{ok:!1})}function resolveCurrentVercelProject(e){if(e.currentVercelProject!==void 0)return e.currentVercelProject;let t=process.env.VERCEL_PROJECT_ID?.trim();if(t===void 0||t.length===0)return;let n=process.env.VERCEL_TARGET_ENV?.trim()||process.env.VERCEL_ENV?.trim();return n===void 0||n.length===0?{projectId:t}:{environment:n,projectId:t}}function vercelSubject(e){assertVercelSubjectSegment(`teamSlug`,e.teamSlug),assertVercelSubjectSegment(`projectName`,e.projectName);let t=e.environment??`production`;if(t!==`production`&&t!==`preview`&&t!==`development`&&t!==`*`)throw Error(`vercelSubject: invalid environment ${JSON.stringify(t)}; expected "production", "preview", "development", or "*".`);return`owner:${e.teamSlug}:project:${e.projectName}:environment:${t}`}function assertVercelSubjectSegment(e,t){if(t.length===0)throw Error(`vercelSubject: ${e} must be a non-empty string.`);if(t.includes(`*`)||t.includes(`:`))throw Error(`vercelSubject: ${e} ${JSON.stringify(t)} may not contain ${t.includes(`:`)?`':'`:`'*'`}. Hand-write the subject string when wildcards are intentional.`)}function vercelOidc(e={}){return withAuthChallenges(async t=>{let n=extractBearerToken(t.headers.get(`authorization`)),r=e.currentVercelProject??(n!==null&&isLocalDevelopmentVercelOidc()?await resolveVercelOidcCurrentProject(t):void 0),i=await verifyVercelOidc(n,r===void 0?e:{...e,currentVercelProject:r});return i.ok?i.sessionAuth:null},[{scheme:`Bearer`}])}function isLocalDevelopmentVercelOidc(){return process.env.VERCEL_ENV===`development`?!0:process.env.VERCEL_ENV===`preview`||process.env.VERCEL_ENV===`production`?!1:isEveDevEnvironment()}function httpBasic(e,t){return withAuthChallenges(t=>{let n=verifyHttpBasic(t.headers.get(`authorization`),e);return n.ok?n.sessionAuth:null},[{parameters:{realm:t?.realm??`eve`,charset:`UTF-8`},scheme:`Basic`}])}function jwtHmac(e){return withAuthChallenges(async t=>{let n=await verifyJwtHmac(extractBearerToken(t.headers.get(`authorization`)),e);return n.ok?n.sessionAuth:null},[{scheme:`Bearer`}])}function jwtEcdsa(e){return withAuthChallenges(async t=>{let n=await verifyJwtEcdsa(extractBearerToken(t.headers.get(`authorization`)),e);return n.ok?n.sessionAuth:null},[{scheme:`Bearer`}])}function oidc(e){return withAuthChallenges(async t=>{let n=await verifyOidc(extractBearerToken(t.headers.get(`authorization`)),e);return n.ok?n.sessionAuth:null},[{scheme:`Bearer`}])}function decodeUnverifiedJwtClaims(e){let n;try{n=decodeJwt(e)}catch{return null}return typeof n.iss!=`string`||n.iss.length===0?null:{audiences:typeof n.aud==`string`?[n.aud]:Array.isArray(n.aud)?n.aud.filter(e=>typeof e==`string`):[],issuer:n.iss}}export{ForbiddenError,UnauthenticatedError,createIpAllowList,createUnauthorizedResponse,escapeAuthChallengeParameter,extractBearerToken,httpBasic,isIpAllowed,jwtEcdsa,jwtHmac,localDev,none,oauthResource,oidc,placeholderAuth,readOAuthResourceOptions,routeAuth,vercelOidc,vercelSubject,verifyHttpBasic,verifyJwtEcdsa,verifyJwtHmac,verifyOidc,verifyVercelOidc,withAuthChallenges};
@@ -1 +1 @@
1
- import{discordAudience,discordInstrumentationMetadata}from"./audience.js";import{createLogger,logError}from"#internal/logging.js";import{readNonEmptyString}from"#shared/guards.js";import{parseJsonObject}from"#shared/json.js";import{POST,defineChannel}from"#public/definitions/channel.js";import"#public/channels/discord/verify.js";import{callDiscordApi,createDiscordFollowupMessage,discordContinuationToken,editDiscordOriginalResponse,resolveDiscordBotToken,sendDiscordChannelMessage,splitDiscordMessageContent,triggerDiscordTypingIndicator}from"#public/channels/discord/api.js";import{buildFreeformModalResponse,deriveComponentInputResponses,deriveModalInputResponses,isDiscordFreeformComponent}from"#public/channels/discord/hitl.js";import{defaultEvents,defaultOnCommand}from"#public/channels/discord/defaults.js";import{DISCORD_INTERACTION_RESPONSE_TYPE,DISCORD_INTERACTION_TYPE,commandInteractionMessage,formatDiscordContextBlock,parseDiscordInteraction}from"#public/channels/discord/inbound.js";import{discordDeferredJson,discordJson,discordJsonBody,readMessageContent}from"#public/channels/discord/responses.js";import{verifyDiscordInbound}from"#public/channels/discord/verifyInbound.js";const log=createLogger(`discord.channel`);function discordChannel(e={}){let n=e.onCommand??defaultOnCommand,r={...defaultEvents,...e.events};return defineChannel({kindHint:`discord`,turnPolicy:e.turnPolicy,state:initialDiscordState(),metadata:discordInstrumentationMetadata,context(t,n){return rebuildDiscordContext(t,n,e)},routes:[POST(e.route??`/eve/v1/discord`,async(t,{from:r,waitUntil:i})=>{let o=await verifyDiscordInbound(t,e.credentials);if(o===null)return new Response(`unauthorized`,{status:401});let s;try{s=parseJsonObject(JSON.parse(o))}catch(e){return log.warn(`inbound Discord body is not valid JSON`,{error:e}),discordJson({content:`invalid request`,ephemeral:!0})}if(s.type===DISCORD_INTERACTION_TYPE.PING)return discordJson({type:DISCORD_INTERACTION_RESPONSE_TYPE.PONG});let c=parseDiscordInteraction(s);return c===null?discordJson({content:`Unsupported Discord interaction.`,ephemeral:!0}):handleInteraction({config:e,interaction:c,onCommand:n,from:r,waitUntil:i})})],async receive(t,{from:n}){let r=t.target,a=readNonEmptyString(r.channelId);if(!a)throw Error(`discordChannel().receive requires target.channelId.`);let o=readNonEmptyString(r.conversationId),s=r.initialMessage;if(s!==void 0&&o!==void 0)throw Error("discordChannel().receive: `conversationId` and `initialMessage` are mutually exclusive.");let c=o??``,l=o!==void 0;if(s!==void 0){let t=await buildDiscordHandle({config:e,state:{...initialDiscordState(),channelId:a}}).sendChannelMessage(s);c=t.id,l=t.id.length>0}return n(discordContinuationToken(a,c)).send(t.message,{auth:t.auth,state:{audience:`unknown`,applicationId:null,channelId:a,conversationId:c||null,guildId:null,hasMessageAnchor:l,initialResponseSent:!0,interactionToken:null}})},events:r})}function rebuildDiscordContext(e,t,n){return{discord:buildDiscordHandle({config:n,session:t,state:e}),state:e}}function buildDiscordHandle(e){let t=e.config.api,n=e.state,i=mergeCredentials(e.config.credentials,n);function anchor(t){!t.id||n.hasMessageAnchor||(n.conversationId=t.id,n.hasMessageAnchor=!0,n.channelId&&e.session?.continuation?.rekey(discordContinuationToken(n.channelId,t.id)))}async function sendViaChannel(e){let r=n.channelId??``;if(!r)throw Error(`discordChannel: missing channel id for outbound message.`);let a=await sendDiscordChannelMessage({apiBaseUrl:t?.apiBaseUrl,body:normalizePostInput(e),credentials:i,fetch:t?.fetch,channelId:r});return anchor(a),a}async function editOriginal(e){let r=n.interactionToken??``;if(!r)throw Error(`discordChannel: missing interaction token for original response edit.`);let a=await editDiscordOriginalResponse({apiBaseUrl:t?.apiBaseUrl,body:normalizePostInput(e),credentials:i,fetch:t?.fetch,interactionToken:r});return n.initialResponseSent=!0,anchor(a),a}async function followup(e){let r=n.interactionToken??``;if(!r)throw Error(`discordChannel: missing interaction token for followup message.`);let a=await createDiscordFollowupMessage({apiBaseUrl:t?.apiBaseUrl,body:normalizePostInput(e),credentials:i,fetch:t?.fetch,interactionToken:r});return anchor(a),a}async function startTyping(){let e=n.channelId??``;if(e)try{await triggerDiscordTypingIndicator({apiBaseUrl:t?.apiBaseUrl,credentials:i,fetch:t?.fetch,channelId:e})}catch(t){logError(log,`Discord typing indicator failed — swallowed`,t,{channelId:e})}}return{applicationId:n.applicationId??void 0,channelId:n.channelId??``,conversationId:n.conversationId??``,guildId:n.guildId??void 0,interactionToken:n.interactionToken??void 0,request(e,n,r){return callDiscordApi({apiBaseUrl:t?.apiBaseUrl,body:n,botToken:r?.botAuth===!0?i.botToken:void 0,fetch:t?.fetch,method:r?.method,path:e})},async post(e){let t=expandPostBodies(normalizePostInput(e)),r;for(let e of t){let t=await postOne({body:e,editOriginal,followup,sendViaChannel,state:n});r===void 0&&(r=t)}return r??{id:``,raw:null}},editOriginalResponse:editOriginal,followup,sendChannelMessage:sendViaChannel,startTyping}}async function postOne(e){if(e.state.interactionToken&&e.state.applicationId)try{return e.state.initialResponseSent?await e.followup(e.body):await e.editOriginal(e.body)}catch(e){log.warn(`Discord interaction-token delivery failed, falling back to channel message`,{error:e})}return e.sendViaChannel(e.body)}async function handleInteraction(e){return e.interaction.type===DISCORD_INTERACTION_TYPE.APPLICATION_COMMAND?handleCommandInteraction({config:e.config,interaction:e.interaction,onCommand:e.onCommand,from:e.from,waitUntil:e.waitUntil}):e.interaction.type===DISCORD_INTERACTION_TYPE.MESSAGE_COMPONENT?handleComponentInteraction({interaction:e.interaction,from:e.from,waitUntil:e.waitUntil}):handleModalSubmitInteraction({interaction:e.interaction,from:e.from,waitUntil:e.waitUntil})}async function handleCommandInteraction(e){let t=stateFromInteraction(e.interaction,{conversationId:e.interaction.id,hasMessageAnchor:!1,initialResponseSent:!1}),n={discord:buildDiscordHandle({config:e.config,state:t})},r;try{r=await e.onCommand(n,e.interaction)}catch(e){return log.error(`command handler failed`,{error:e}),discordJson({content:`The Discord command handler failed.`,ephemeral:!0})}return r==null?discordJson({content:`Command ignored.`,ephemeral:!0}):(e.waitUntil(dispatchCommand({interaction:e.interaction,result:r,from:e.from,state:t})),discordDeferredJson(r.ephemeral===!0))}function handleComponentInteraction(e){if(isDiscordFreeformComponent(e.interaction.customId)){let t=readMessageContent(e.interaction.raw);return discordJsonBody(buildFreeformModalResponse({customId:e.interaction.customId,prompt:t}))}let t=deriveComponentInputResponses(e.interaction);return t.length>0&&e.waitUntil(dispatchInputResponses({conversationId:e.interaction.messageId,inputResponses:t,interaction:e.interaction,from:e.from})),discordJsonBody({type:DISCORD_INTERACTION_RESPONSE_TYPE.DEFERRED_UPDATE_MESSAGE})}function handleModalSubmitInteraction(e){let t=deriveModalInputResponses(e.interaction);return t.length>0&&e.waitUntil(dispatchInputResponses({conversationId:e.interaction.messageId??e.interaction.id,inputResponses:t,interaction:e.interaction,from:e.from})),discordJson({content:`Answer received.`,ephemeral:!0})}async function dispatchCommand(e){let t=commandInteractionMessage(e.interaction),n=formatDiscordContextBlock({channelId:e.interaction.channelId,commandName:e.interaction.commandName,guildId:e.interaction.guildId,interactionId:e.interaction.id,userId:e.interaction.user.id,username:e.interaction.user.username}),r=e.result.context??[];try{await e.from(discordContinuationToken(e.interaction.channelId,e.interaction.id)).send(t,{auth:e.result.auth,context:[n,...r],state:e.state,title:e.result.title})}catch(e){log.error(`command delivery failed`,{error:e})}}async function dispatchInputResponses(e){try{await e.from(discordContinuationToken(e.interaction.channelId,e.conversationId)).respond(e.inputResponses,{auth:null})}catch(e){log.error(`interaction response delivery failed`,{error:e})}}function stateFromInteraction(t,n){return{audience:discordAudience(t.channelType),applicationId:t.applicationId,channelId:t.channelId,conversationId:n.conversationId,guildId:t.guildId??null,hasMessageAnchor:n.hasMessageAnchor,initialResponseSent:n.initialResponseSent,interactionToken:t.token}}function initialDiscordState(){return{audience:`unknown`,applicationId:null,channelId:null,conversationId:null,guildId:null,hasMessageAnchor:!1,initialResponseSent:!1,interactionToken:null}}function mergeCredentials(e,t){return{applicationId:t.applicationId??e?.applicationId,botToken:e?.botToken??(()=>resolveDiscordBotToken()),publicKey:e?.publicKey,webhookVerifier:e?.webhookVerifier}}function normalizePostInput(e){return typeof e==`string`?{content:e}:e}function expandPostBodies(e){return typeof e.content==`string`?splitDiscordMessageContent(e.content).map((t,n)=>n===0?{...e,content:t}:{allowed_mentions:e.allowed_mentions,content:t}):[e]}export{discordChannel};
1
+ import{discordAudience,discordInstrumentationMetadata}from"./audience.js";import{createLogger,logError}from"#internal/logging.js";import{readNonEmptyString}from"#shared/guards.js";import{parseJsonObject}from"#shared/json.js";import{POST,defineChannel}from"#public/definitions/channel.js";import"#public/channels/discord/verify.js";import{callDiscordApi,createDiscordFollowupMessage,discordContinuationToken,editDiscordOriginalResponse,resolveDiscordBotToken,sendDiscordChannelMessage,splitDiscordMessageContent,triggerDiscordTypingIndicator}from"#public/channels/discord/api.js";import{buildFreeformModalResponse,deriveComponentInputResponses,deriveModalInputResponses,isDiscordFreeformComponent}from"#public/channels/discord/hitl.js";import{defaultEvents,defaultOnCommand}from"#public/channels/discord/defaults.js";import{DISCORD_INTERACTION_RESPONSE_TYPE,DISCORD_INTERACTION_TYPE,commandInteractionMessage,formatDiscordContextBlock,parseDiscordInteraction}from"#public/channels/discord/inbound.js";import{discordDeferredJson,discordJson,discordJsonBody,readMessageContent}from"#public/channels/discord/responses.js";import{verifyDiscordInbound}from"#public/channels/discord/verifyInbound.js";const log=createLogger(`discord.channel`);function discordChannel(e={}){let n=e.onCommand??defaultOnCommand,r={...defaultEvents,...e.events};return defineChannel({kindHint:`discord`,turnPolicy:e.turnPolicy,state:initialDiscordState(),metadata:discordInstrumentationMetadata,context(t,n){return rebuildDiscordContext(t,n,e)},routes:[POST(e.route??`/eve/v1/discord`,async(t,{from:r,waitUntil:i})=>{let o=await verifyDiscordInbound(t,e.credentials);if(o===null)return new Response(`unauthorized`,{status:401});let s;try{s=parseJsonObject(JSON.parse(o))}catch(e){return log.warn(`inbound Discord body is not valid JSON`,{error:e}),discordJson({content:`invalid request`,ephemeral:!0})}if(s.type===DISCORD_INTERACTION_TYPE.PING)return discordJson({type:DISCORD_INTERACTION_RESPONSE_TYPE.PONG});let c=parseDiscordInteraction(s);return c===null?discordJson({content:`Unsupported Discord interaction.`,ephemeral:!0}):handleInteraction({config:e,interaction:c,onCommand:n,from:r,waitUntil:i})})],async receive(t,{from:n}){let r=t.target,a=readNonEmptyString(r.channelId);if(!a)throw Error(`discordChannel().receive requires target.channelId.`);let o=readNonEmptyString(r.conversationId),s=r.initialMessage;if(s!==void 0&&o!==void 0)throw Error("discordChannel().receive: `conversationId` and `initialMessage` are mutually exclusive.");let c=o??``,l=o!==void 0;if(s!==void 0){let t=await buildDiscordHandle({config:e,state:{...initialDiscordState(),channelId:a}}).sendChannelMessage(s);c=t.id,l=t.id.length>0}return n(discordContinuationToken(a,c)).send(t.message,{auth:t.auth,state:{audience:`unknown`,applicationId:null,channelId:a,conversationId:c||null,guildId:null,hasMessageAnchor:l,initialResponseSent:!0,interactionToken:null}})},events:r})}function rebuildDiscordContext(e,t,n){return{discord:buildDiscordHandle({config:n,session:t,state:e}),state:e}}function buildDiscordHandle(e){let t=e.config.api,n=e.state,i=mergeCredentials(e.config.credentials,n);function anchor(t){!t.id||n.hasMessageAnchor||(n.conversationId=t.id,n.hasMessageAnchor=!0,n.channelId&&e.session?.continuation?.rekey(discordContinuationToken(n.channelId,t.id)))}async function sendViaChannel(e){let r=n.channelId??``;if(!r)throw Error(`discordChannel: missing channel id for outbound message.`);let a=await sendDiscordChannelMessage({apiBaseUrl:t?.apiBaseUrl,body:normalizePostInput(e),credentials:i,fetch:t?.fetch,channelId:r});return anchor(a),a}async function editOriginal(e){let r=n.interactionToken??``;if(!r)throw Error(`discordChannel: missing interaction token for original response edit.`);let a=await editDiscordOriginalResponse({apiBaseUrl:t?.apiBaseUrl,body:normalizePostInput(e),credentials:i,fetch:t?.fetch,interactionToken:r});return n.initialResponseSent=!0,anchor(a),a}async function followup(e){let r=n.interactionToken??``;if(!r)throw Error(`discordChannel: missing interaction token for followup message.`);let a=await createDiscordFollowupMessage({apiBaseUrl:t?.apiBaseUrl,body:normalizePostInput(e),credentials:i,fetch:t?.fetch,interactionToken:r});return anchor(a),a}async function startTyping(){let e=n.channelId??``;if(e)try{await triggerDiscordTypingIndicator({apiBaseUrl:t?.apiBaseUrl,credentials:i,fetch:t?.fetch,channelId:e})}catch(t){logError(log,`Discord typing indicator failed — swallowed`,t,{channelId:e})}}return{applicationId:n.applicationId??void 0,channelId:n.channelId??``,conversationId:n.conversationId??``,guildId:n.guildId??void 0,interactionToken:n.interactionToken??void 0,request(e,n,r){return callDiscordApi({apiBaseUrl:t?.apiBaseUrl,body:n,botToken:r?.botAuth===!0?i.botToken:void 0,fetch:t?.fetch,method:r?.method,path:e})},async post(e){let t=expandPostBodies(normalizePostInput(e)),r;for(let e of t){let t=await postOne({body:e,editOriginal,followup,sendViaChannel,state:n});r===void 0&&(r=t)}return r??{id:``,raw:null}},editOriginalResponse:editOriginal,followup,sendChannelMessage:sendViaChannel,startTyping}}async function postOne(e){if(e.state.interactionToken&&e.state.applicationId)try{return e.state.initialResponseSent?await e.followup(e.body):await e.editOriginal(e.body)}catch(e){log.warn(`Discord interaction-token delivery failed, falling back to channel message`,{error:e})}return e.sendViaChannel(e.body)}async function handleInteraction(e){return e.interaction.type===DISCORD_INTERACTION_TYPE.APPLICATION_COMMAND?handleCommandInteraction({config:e.config,interaction:e.interaction,onCommand:e.onCommand,from:e.from,waitUntil:e.waitUntil}):e.interaction.type===DISCORD_INTERACTION_TYPE.MESSAGE_COMPONENT?handleComponentInteraction({interaction:e.interaction,from:e.from,waitUntil:e.waitUntil}):handleModalSubmitInteraction({interaction:e.interaction,from:e.from,waitUntil:e.waitUntil})}async function handleCommandInteraction(e){let t=stateFromInteraction(e.interaction,{conversationId:e.interaction.id,hasMessageAnchor:!1,initialResponseSent:!1}),n={discord:buildDiscordHandle({config:e.config,state:t})},r;try{r=await e.onCommand(n,e.interaction)}catch(e){return log.error(`command handler failed`,{error:e}),discordJson({content:`The Discord command handler failed.`,ephemeral:!0})}return r==null?discordJson({content:`Command ignored.`,ephemeral:!0}):(e.waitUntil(dispatchCommand({interaction:e.interaction,result:r,from:e.from,state:t})),discordDeferredJson(r.ephemeral===!0))}function handleComponentInteraction(e){if(isDiscordFreeformComponent(e.interaction.customId)){let t=readMessageContent(e.interaction.raw);return discordJsonBody(buildFreeformModalResponse({customId:e.interaction.customId,prompt:t}))}let t=deriveComponentInputResponses(e.interaction);return t.length>0&&e.waitUntil(dispatchInputResponses({conversationId:e.interaction.messageId,inputResponses:t,interaction:e.interaction,from:e.from})),discordJsonBody({type:DISCORD_INTERACTION_RESPONSE_TYPE.DEFERRED_UPDATE_MESSAGE})}function handleModalSubmitInteraction(e){let t=deriveModalInputResponses(e.interaction);return t.length>0&&e.waitUntil(dispatchInputResponses({conversationId:e.interaction.messageId??e.interaction.id,inputResponses:t,interaction:e.interaction,from:e.from})),discordJson({content:`Answer received.`,ephemeral:!0})}async function dispatchCommand(e){let t=commandInteractionMessage(e.interaction),n=formatDiscordContextBlock({applicationId:e.interaction.applicationId,channelId:e.interaction.channelId,commandName:e.interaction.commandName,guildId:e.interaction.guildId,interactionId:e.interaction.id,userId:e.interaction.user.id,username:e.interaction.user.username}),r=e.result.context??[];try{await e.from(discordContinuationToken(e.interaction.channelId,e.interaction.id)).send(t,{auth:e.result.auth,context:[n,...r],state:e.state,title:e.result.title})}catch(e){log.error(`command delivery failed`,{error:e})}}async function dispatchInputResponses(e){try{await e.from(discordContinuationToken(e.interaction.channelId,e.conversationId)).respond(e.inputResponses,{auth:null})}catch(e){log.error(`interaction response delivery failed`,{error:e})}}function stateFromInteraction(t,n){return{audience:discordAudience(t.channelType),applicationId:t.applicationId,channelId:t.channelId,conversationId:n.conversationId,guildId:t.guildId??null,hasMessageAnchor:n.hasMessageAnchor,initialResponseSent:n.initialResponseSent,interactionToken:t.token}}function initialDiscordState(){return{audience:`unknown`,applicationId:null,channelId:null,conversationId:null,guildId:null,hasMessageAnchor:!1,initialResponseSent:!1,interactionToken:null}}function mergeCredentials(e,t){return{applicationId:t.applicationId??e?.applicationId,botToken:e?.botToken??(()=>resolveDiscordBotToken()),publicKey:e?.publicKey,webhookVerifier:e?.webhookVerifier}}function normalizePostInput(e){return typeof e==`string`?{content:e}:e}function expandPostBodies(e){return typeof e.content==`string`?splitDiscordMessageContent(e.content).map((t,n)=>n===0?{...e,content:t}:{allowed_mentions:e.allowed_mentions,content:t}):[e]}export{discordChannel};
@@ -5,7 +5,7 @@
5
5
  * encodes only the request id and, for buttons, the selected option id.
6
6
  */
7
7
  import { type DiscordComponentInteraction, type DiscordModalSubmitInteraction } from "#public/channels/discord/inbound.js";
8
- import { type InputRequest, type ValidatedInputResponse } from "#runtime/input/types.js";
8
+ import { type InputRequest, type ValidatedInputResponse } from "#shared/input.js";
9
9
  /** Maps Discord component kinds (ACTION_ROW, BUTTON, STRING_SELECT, TEXT_INPUT) to their wire `type` integers used in component payloads. */
10
10
  export declare const DISCORD_COMPONENT_TYPE: {
11
11
  readonly ACTION_ROW: 1;
@@ -1 +1 @@
1
- import{parseInputResponse}from"#runtime/input/types.js";import{DISCORD_INTERACTION_RESPONSE_TYPE}from"#public/channels/discord/inbound.js";const DISCORD_COMPONENT_TYPE={ACTION_ROW:1,BUTTON:2,STRING_SELECT:3,TEXT_INPUT:4},DISCORD_HITL_CUSTOM_ID_PREFIX=`eve_input:`,DISCORD_HITL_FREEFORM_CUSTOM_ID_PREFIX=`eve_input_freeform:`,DISCORD_HITL_FREEFORM_TEXT_INPUT_ID=`eve_freeform_text`;function renderInputRequestComponents(e){let t=e.options,a=e.allowFreeform===!0||!t||t.length===0;return t&&t.length>0&&e.display===`select`?[{components:[{custom_id:encodeHitlCustomId(DISCORD_HITL_CUSTOM_ID_PREFIX,{requestId:e.requestId}),options:t.slice(0,25).map(e=>{let t={label:truncate(e.label,100),value:truncate(e.id,100)};return e.description!==void 0&&(t.description=truncate(e.description,100)),t}),placeholder:`Choose an option`,type:DISCORD_COMPONENT_TYPE.STRING_SELECT}],type:DISCORD_COMPONENT_TYPE.ACTION_ROW}]:t&&t.length>0?chunk(t.slice(0,25),5).map(t=>({components:t.map(t=>({custom_id:encodeHitlCustomId(DISCORD_HITL_CUSTOM_ID_PREFIX,{optionId:t.id,requestId:e.requestId}),label:truncate(t.label,80),style:toDiscordButtonStyle(t.style),type:DISCORD_COMPONENT_TYPE.BUTTON})),type:DISCORD_COMPONENT_TYPE.ACTION_ROW})):a?[{components:[{custom_id:encodeHitlCustomId(DISCORD_HITL_FREEFORM_CUSTOM_ID_PREFIX,{requestId:e.requestId}),label:`Type your answer`,style:1,type:DISCORD_COMPONENT_TYPE.BUTTON}],type:DISCORD_COMPONENT_TYPE.ACTION_ROW}]:[]}function buildFreeformModalResponse(e){let r=decodeHitlCustomId(e.customId,DISCORD_HITL_FREEFORM_CUSTOM_ID_PREFIX);if(!r)throw Error(`discordChannel: freeform custom_id is malformed.`);return{data:{components:[{components:[{custom_id:DISCORD_HITL_FREEFORM_TEXT_INPUT_ID,label:`Answer`,max_length:4e3,min_length:1,placeholder:`Type your answer here...`,required:!0,style:2,type:DISCORD_COMPONENT_TYPE.TEXT_INPUT}],type:DISCORD_COMPONENT_TYPE.ACTION_ROW}],custom_id:encodeHitlCustomId(DISCORD_HITL_FREEFORM_CUSTOM_ID_PREFIX,{requestId:r.requestId}),title:truncate(e.prompt??`Your answer`,45)},type:DISCORD_INTERACTION_RESPONSE_TYPE.MODAL}}function isDiscordFreeformComponent(e){return decodeHitlCustomId(e,DISCORD_HITL_FREEFORM_CUSTOM_ID_PREFIX)!==null}function deriveComponentInputResponses(t){let n=decodeHitlCustomId(t.customId,DISCORD_HITL_CUSTOM_ID_PREFIX);if(!n)return[];if(n.optionId!==void 0)return[parseInputResponse({optionId:n.optionId,requestId:n.requestId})];let i=t.values[0];return i===void 0?[]:[parseInputResponse({optionId:i,requestId:n.requestId})]}function deriveModalInputResponses(t){let n=decodeHitlCustomId(t.customId,DISCORD_HITL_FREEFORM_CUSTOM_ID_PREFIX),r=t.textInputs[DISCORD_HITL_FREEFORM_TEXT_INPUT_ID];return!n||r===void 0?[]:[parseInputResponse({requestId:n.requestId,text:r})]}function encodeHitlCustomId(e,t){let n=`${e}${Buffer.from(JSON.stringify(t),`utf8`).toString(`base64url`)}`;if(n.length>100)throw Error(`discordChannel: HITL custom_id exceeded Discord's 100-character limit.`);return n}function decodeHitlCustomId(e,t){if(!e.startsWith(t))return null;try{let n=Buffer.from(e.slice(t.length),`base64url`).toString(`utf8`),r=JSON.parse(n);if(typeof r.requestId!=`string`||r.requestId.length===0)return null;let i={requestId:r.requestId};return typeof r.optionId==`string`?{...i,optionId:r.optionId}:i}catch{return null}}function toDiscordButtonStyle(e){return e===`primary`?1:e===`danger`?4:2}function truncate(e,t){if(e.length<=t)return e;let n=Math.max(0,t-3);return`${e.slice(0,n).trimEnd()}...`}function chunk(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}export{DISCORD_COMPONENT_TYPE,DISCORD_HITL_CUSTOM_ID_PREFIX,DISCORD_HITL_FREEFORM_CUSTOM_ID_PREFIX,DISCORD_HITL_FREEFORM_TEXT_INPUT_ID,buildFreeformModalResponse,deriveComponentInputResponses,deriveModalInputResponses,isDiscordFreeformComponent,renderInputRequestComponents};
1
+ import{parseInputResponse}from"#shared/input.js";import{DISCORD_INTERACTION_RESPONSE_TYPE}from"#public/channels/discord/inbound.js";const DISCORD_COMPONENT_TYPE={ACTION_ROW:1,BUTTON:2,STRING_SELECT:3,TEXT_INPUT:4},DISCORD_HITL_CUSTOM_ID_PREFIX=`eve_input:`,DISCORD_HITL_FREEFORM_CUSTOM_ID_PREFIX=`eve_input_freeform:`,DISCORD_HITL_FREEFORM_TEXT_INPUT_ID=`eve_freeform_text`;function renderInputRequestComponents(e){let t=e.options,a=e.allowFreeform===!0||!t||t.length===0;return t&&t.length>0&&e.display===`select`?[{components:[{custom_id:encodeHitlCustomId(DISCORD_HITL_CUSTOM_ID_PREFIX,{requestId:e.requestId}),options:t.slice(0,25).map(e=>{let t={label:truncate(e.label,100),value:truncate(e.id,100)};return e.description!==void 0&&(t.description=truncate(e.description,100)),t}),placeholder:`Choose an option`,type:DISCORD_COMPONENT_TYPE.STRING_SELECT}],type:DISCORD_COMPONENT_TYPE.ACTION_ROW}]:t&&t.length>0?chunk(t.slice(0,25),5).map(t=>({components:t.map(t=>({custom_id:encodeHitlCustomId(DISCORD_HITL_CUSTOM_ID_PREFIX,{optionId:t.id,requestId:e.requestId}),label:truncate(t.label,80),style:toDiscordButtonStyle(t.style),type:DISCORD_COMPONENT_TYPE.BUTTON})),type:DISCORD_COMPONENT_TYPE.ACTION_ROW})):a?[{components:[{custom_id:encodeHitlCustomId(DISCORD_HITL_FREEFORM_CUSTOM_ID_PREFIX,{requestId:e.requestId}),label:`Type your answer`,style:1,type:DISCORD_COMPONENT_TYPE.BUTTON}],type:DISCORD_COMPONENT_TYPE.ACTION_ROW}]:[]}function buildFreeformModalResponse(e){let r=decodeHitlCustomId(e.customId,DISCORD_HITL_FREEFORM_CUSTOM_ID_PREFIX);if(!r)throw Error(`discordChannel: freeform custom_id is malformed.`);return{data:{components:[{components:[{custom_id:DISCORD_HITL_FREEFORM_TEXT_INPUT_ID,label:`Answer`,max_length:4e3,min_length:1,placeholder:`Type your answer here...`,required:!0,style:2,type:DISCORD_COMPONENT_TYPE.TEXT_INPUT}],type:DISCORD_COMPONENT_TYPE.ACTION_ROW}],custom_id:encodeHitlCustomId(DISCORD_HITL_FREEFORM_CUSTOM_ID_PREFIX,{requestId:r.requestId}),title:truncate(e.prompt??`Your answer`,45)},type:DISCORD_INTERACTION_RESPONSE_TYPE.MODAL}}function isDiscordFreeformComponent(e){return decodeHitlCustomId(e,DISCORD_HITL_FREEFORM_CUSTOM_ID_PREFIX)!==null}function deriveComponentInputResponses(t){let n=decodeHitlCustomId(t.customId,DISCORD_HITL_CUSTOM_ID_PREFIX);if(!n)return[];if(n.optionId!==void 0)return[parseInputResponse({optionId:n.optionId,requestId:n.requestId})];let i=t.values[0];return i===void 0?[]:[parseInputResponse({optionId:i,requestId:n.requestId})]}function deriveModalInputResponses(t){let n=decodeHitlCustomId(t.customId,DISCORD_HITL_FREEFORM_CUSTOM_ID_PREFIX),r=t.textInputs[DISCORD_HITL_FREEFORM_TEXT_INPUT_ID];return!n||r===void 0?[]:[parseInputResponse({requestId:n.requestId,text:r})]}function encodeHitlCustomId(e,t){let n=`${e}${Buffer.from(JSON.stringify(t),`utf8`).toString(`base64url`)}`;if(n.length>100)throw Error(`discordChannel: HITL custom_id exceeded Discord's 100-character limit.`);return n}function decodeHitlCustomId(e,t){if(!e.startsWith(t))return null;try{let n=Buffer.from(e.slice(t.length),`base64url`).toString(`utf8`),r=JSON.parse(n);if(typeof r.requestId!=`string`||r.requestId.length===0)return null;let i={requestId:r.requestId};return typeof r.optionId==`string`?{...i,optionId:r.optionId}:i}catch{return null}}function toDiscordButtonStyle(e){return e===`primary`?1:e===`danger`?4:2}function truncate(e,t){if(e.length<=t)return e;let n=Math.max(0,t-3);return`${e.slice(0,n).trimEnd()}...`}function chunk(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}export{DISCORD_COMPONENT_TYPE,DISCORD_HITL_CUSTOM_ID_PREFIX,DISCORD_HITL_FREEFORM_CUSTOM_ID_PREFIX,DISCORD_HITL_FREEFORM_TEXT_INPUT_ID,buildFreeformModalResponse,deriveComponentInputResponses,deriveModalInputResponses,isDiscordFreeformComponent,renderInputRequestComponents};
@@ -92,6 +92,7 @@ export type DiscordInteraction = DiscordCommandInteraction | DiscordComponentInt
92
92
  * commandName) are omitted from the block when not provided.
93
93
  */
94
94
  export interface DiscordInboundContext {
95
+ readonly applicationId?: string;
95
96
  readonly channelId: string;
96
97
  readonly commandName?: string;
97
98
  readonly guildId?: string;
@@ -1,2 +1,2 @@
1
- import{isNonEmptyString,isObject}from"#shared/guards.js";const DISCORD_INTERACTION_TYPE={APPLICATION_COMMAND:2,MESSAGE_COMPONENT:3,MODAL_SUBMIT:5,PING:1},DISCORD_INTERACTION_RESPONSE_TYPE={CHANNEL_MESSAGE_WITH_SOURCE:4,DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE:5,DEFERRED_UPDATE_MESSAGE:6,MODAL:9,PONG:1},DISCORD_EPHEMERAL_MESSAGE_FLAG=64;function parseDiscordInteraction(e){if(!isObject(e))return null;let r=e.type;return r===DISCORD_INTERACTION_TYPE.APPLICATION_COMMAND?parseCommandInteraction(e):r===DISCORD_INTERACTION_TYPE.MESSAGE_COMPONENT?parseComponentInteraction(e):r===DISCORD_INTERACTION_TYPE.MODAL_SUBMIT?parseModalSubmitInteraction(e):null}function commandInteractionMessage(e){let t=findOptionValue(e.options,`message`);if(typeof t==`string`&&t.trim().length>0)return t;let n=formatCommandOptions(e.options);return n?`/${e.commandName} ${n}`:`/${e.commandName}`}function formatDiscordContextBlock(e){return[`<discord_context>`,`response_medium: discord`,`response_instructions: Reply for Discord in concise Markdown. Avoid mass mentions, long tables, and messages that need more than a few short posts.`,`user_id: ${e.userId}`,...e.username?[`username: ${e.username}`]:[],`channel_id: ${e.channelId}`,...e.guildId?[`guild_id: ${e.guildId}`]:[],`interaction_id: ${e.interactionId}`,...e.commandName?[`command_name: ${e.commandName}`]:[],`</discord_context>`].join(`
1
+ import{isNonEmptyString,isObject}from"#shared/guards.js";const DISCORD_INTERACTION_TYPE={APPLICATION_COMMAND:2,MESSAGE_COMPONENT:3,MODAL_SUBMIT:5,PING:1},DISCORD_INTERACTION_RESPONSE_TYPE={CHANNEL_MESSAGE_WITH_SOURCE:4,DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE:5,DEFERRED_UPDATE_MESSAGE:6,MODAL:9,PONG:1},DISCORD_EPHEMERAL_MESSAGE_FLAG=64;function parseDiscordInteraction(e){if(!isObject(e))return null;let r=e.type;return r===DISCORD_INTERACTION_TYPE.APPLICATION_COMMAND?parseCommandInteraction(e):r===DISCORD_INTERACTION_TYPE.MESSAGE_COMPONENT?parseComponentInteraction(e):r===DISCORD_INTERACTION_TYPE.MODAL_SUBMIT?parseModalSubmitInteraction(e):null}function commandInteractionMessage(e){let t=findOptionValue(e.options,`message`);if(typeof t==`string`&&t.trim().length>0)return t;let n=formatCommandOptions(e.options);return n?`/${e.commandName} ${n}`:`/${e.commandName}`}function formatDiscordContextBlock(e){return[`<discord_context>`,`response_medium: discord`,`response_instructions: Reply for Discord in concise Markdown. Avoid mass mentions, long tables, and messages that need more than a few short posts.`,...e.applicationId?[`application_id: ${e.applicationId}`]:[],`user_id: ${e.userId}`,...e.username?[`username: ${e.username}`]:[],`channel_id: ${e.channelId}`,...e.guildId?[`guild_id: ${e.guildId}`]:[],`interaction_id: ${e.interactionId}`,...e.commandName?[`command_name: ${e.commandName}`]:[],`</discord_context>`].join(`
2
2
  `)}function parseCommandInteraction(r){let i=parseInteractionBase(r),a=isObject(r.data)?r.data:null;return!i||!a||!isNonEmptyString(a.name)?null:{...i,commandId:isNonEmptyString(a.id)?a.id:void 0,commandName:a.name,options:parseOptions(a.options),type:DISCORD_INTERACTION_TYPE.APPLICATION_COMMAND}}function parseComponentInteraction(r){let i=parseInteractionBase(r),a=isObject(r.data)?r.data:null,o=isObject(r.message)?r.message:null;if(!i||!a||!isNonEmptyString(a.custom_id))return null;let s=isNonEmptyString(o?.id)?o.id:``;return s?{...i,componentType:typeof a.component_type==`number`?a.component_type:0,customId:a.custom_id,messageId:s,type:DISCORD_INTERACTION_TYPE.MESSAGE_COMPONENT,values:Array.isArray(a.values)?a.values.filter(e=>typeof e==`string`):[]}:null}function parseModalSubmitInteraction(r){let i=parseInteractionBase(r),a=isObject(r.data)?r.data:null;if(!i||!a||!isNonEmptyString(a.custom_id))return null;let o=isObject(r.message)?r.message:null;return{...i,customId:a.custom_id,messageId:isNonEmptyString(o?.id)?o.id:void 0,textInputs:parseTextInputs(a.components),type:DISCORD_INTERACTION_TYPE.MODAL_SUBMIT}}function parseInteractionBase(n){if(!isNonEmptyString(n.id)||!isNonEmptyString(n.application_id)||!isNonEmptyString(n.channel_id)||!isNonEmptyString(n.token))return null;let r=parseInteractionUser(n);if(!r)return null;let i=isObject(n.channel)?n.channel:void 0;return{applicationId:n.application_id,channelId:n.channel_id,channelType:typeof i?.type==`number`?i.type:void 0,guildId:isNonEmptyString(n.guild_id)?n.guild_id:void 0,id:n.id,member:parseMember(n.member),raw:n,token:n.token,user:r}}function parseInteractionUser(e){return parseUser(e.user)||(parseMember(e.member)?.user??null)}function parseMember(n){if(!isObject(n))return;let r=parseUser(n.user);if(r)return{nick:isNonEmptyString(n.nick)?n.nick:void 0,roles:Array.isArray(n.roles)?n.roles.filter(e=>typeof e==`string`):[],user:r}}function parseUser(n){return!isObject(n)||!isNonEmptyString(n.id)||!isNonEmptyString(n.username)?null:{avatar:isNonEmptyString(n.avatar)?n.avatar:void 0,discriminator:isNonEmptyString(n.discriminator)?n.discriminator:void 0,globalName:isNonEmptyString(n.global_name)?n.global_name:void 0,id:n.id,isBot:n.bot===!0,username:n.username}}function parseOptions(n){if(!Array.isArray(n))return[];let r=[];for(let i of n){if(!isObject(i)||!isNonEmptyString(i.name))continue;let n={name:i.name,options:parseOptions(i.options),value:parseOptionValue(i.value)};r.push(n)}return r}function parseOptionValue(e){if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return e}function parseTextInputs(n){let r={};if(!Array.isArray(n))return r;for(let i of n)if(!(!isObject(i)||!Array.isArray(i.components)))for(let n of i.components)isObject(n)&&isNonEmptyString(n.custom_id)&&typeof n.value==`string`&&(r[n.custom_id]=n.value);return r}function findOptionValue(e,t){for(let n of e){if(n.name===t&&n.value!==void 0)return n.value;let e=findOptionValue(n.options,t);if(e!==void 0)return e}}function formatCommandOptions(e){return e.map(formatOption).filter(e=>e.length>0).join(` `)}function formatOption(e){if(e.value!==void 0)return`${e.name}:${String(e.value)}`;let t=formatCommandOptions(e.options);return t?`${e.name} ${t}`:e.name}export{DISCORD_EPHEMERAL_MESSAGE_FLAG,DISCORD_INTERACTION_RESPONSE_TYPE,DISCORD_INTERACTION_TYPE,commandInteractionMessage,formatDiscordContextBlock,parseDiscordInteraction};
@@ -1,139 +1 @@
1
- import { type UserContent } from "ai";
2
- import type { SessionAuthContext, TurnPolicy } from "#channel/types.js";
3
- import { type TrustedForwarders } from "#channel/forwarded-principal.js";
4
- import { type AuthFn } from "#public/channels/auth.js";
5
- import { type UploadPolicyInput } from "#public/channels/upload-policy.js";
6
- import { type Channel, type ChannelEvents, type ChannelContinuationOps } from "#public/definitions/channel.js";
7
- import type { ChannelMethod } from "#public/definitions/channel.js";
8
- /**
9
- * Event-handler channel context exposed by `eveChannel({ events })`. The default eve HTTP channel
10
- * has no platform-specific state, so handlers receive optional continuation routing here and the
11
- * `SessionContext` third argument from {@link ChannelEvents}.
12
- */
13
- export type EveEventContext = ChannelContinuationOps;
14
- /** Runtime stream-event handlers supported by `eveChannel({ events })`. */
15
- export type EveChannelEvents = ChannelEvents<EveEventContext>;
16
- export interface EveChannelCorsOptions {
17
- /**
18
- * Allowed request origin. Pass a single origin string, an exact-origin list,
19
- * `"null"`, or `"*"`. Omit for `"*"`.
20
- */
21
- readonly origin?: "*" | "null" | string | readonly string[];
22
- /** Methods emitted on preflight responses. Omit for `"*"`. */
23
- readonly methods?: "*" | readonly ChannelMethod[];
24
- /** Request headers emitted on preflight responses. Omit for `"*"`. */
25
- readonly allowedHeaders?: "*" | readonly string[];
26
- /** Response headers exposed to browser callers. Omit for `"*"`. */
27
- readonly exposedHeaders?: "*" | readonly string[];
28
- /** Whether to emit `access-control-allow-credentials: true`. */
29
- readonly credentials?: boolean;
30
- /** Max age, in seconds, emitted on preflight responses. */
31
- readonly maxAge?: number | false;
32
- /** Preflight response status code. Defaults to 204. */
33
- readonly preflightStatus?: number;
34
- }
35
- /**
36
- * Higher-level CORS policy for the default eve HTTP channel. Pass `true` for
37
- * fully permissive browser access, or pass an options object to narrow it.
38
- */
39
- export type EveChannelCors = boolean | EveChannelCorsOptions;
40
- /** Low-level eve HTTP handle exposed to `eveChannel({ onMessage })`. */
41
- export interface EveHandle {
42
- /** Route-auth result for the request; `onMessage` chooses session auth by returning `{ auth }`. */
43
- readonly caller: SessionAuthContext | null;
44
- readonly request: Request;
45
- /** Existing runtime session id for follow-up requests. */
46
- readonly sessionId?: string;
47
- }
48
- /** Pre-dispatch context passed to `eveChannel({ onMessage })`. */
49
- export interface EveMessageContext {
50
- readonly eve: EveHandle;
51
- }
52
- /**
53
- * Result of `eveChannel({ onMessage })`. The object dispatches the inbound message,
54
- * optionally prepending `context` strings as user messages.
55
- */
56
- export type EveMessageResult = {
57
- readonly auth: SessionAuthContext | null;
58
- readonly context?: readonly string[];
59
- /** Overrides the workflow run title without changing the message sent to the model. */
60
- readonly title?: string;
61
- };
62
- /** Synchronous or asynchronous `onMessage` result. */
63
- export type EveMessageResultOrPromise = EveMessageResult | Promise<EveMessageResult>;
64
- /**
65
- * Default `onMessage` auth projection: returns {@link EveHandle.caller} unchanged as the
66
- * runtime session auth when {@link EveChannelInput.onMessage} is omitted. Call it from a custom `onMessage` to inherit the default while adding `context`.
67
- */
68
- export declare function defaultEveAuth(ctx: EveMessageContext): SessionAuthContext | null;
69
- /**
70
- * Configuration for {@link eveChannel}. Only {@link auth} is required;
71
- * `uploadPolicy`, `onMessage`, and `events` refine the default HTTP behavior.
72
- */
73
- export interface EveChannelInput {
74
- /**
75
- * Route auth policy: a single {@link AuthFn} or an ordered array walked by {@link routeAuth}.
76
- * The first entry returning a {@link SessionAuthContext} wins; `null` / `undefined` skips to
77
- * the next; exhaustion (including the empty array) rejects with 401. Include `none()` last for anonymous traffic.
78
- */
79
- readonly auth: AuthFn<Request> | readonly AuthFn<Request>[];
80
- /**
81
- * The trusted-forwarders policy: which transport-authenticated callers may
82
- * assert a forwarded principal on the create-session or continuation route (the
83
- * `forwardedPrincipal` body field a `defineRemoteAgent({ forwardPrincipal:
84
- * true })` sender emits). The predicate receives the *verified* route-auth
85
- * principal of the forwarder — who is asserting, never what is asserted —
86
- * and must match it precisely (for example
87
- * `(forwarder) => forwarder.subject === vercelSubject({ teamSlug, projectName })`).
88
- * A permissive predicate lets any authenticated forwarder assert any
89
- * principal.
90
- *
91
- * When a trusted forwarder's assertion is accepted on session creation, the
92
- * forwarded principal replaces `session.auth.current` and
93
- * `session.auth.initiator`. On continuation, only `session.auth.current`
94
- * changes; the initiator remains pinned to the session's creator. The
95
- * forwarder is recorded on accepted contexts as the `eve:forwarded-by`
96
- * attribute. Omit the option to reject every forwarded assertion with 403.
97
- */
98
- readonly trustedForwarders?: TrustedForwarders;
99
- /**
100
- * Attachment policy for inbound file parts. Omit for the framework default (25 MB cap, all media
101
- * types); `"disabled"` rejects every attachment; a partial config is merged onto the default. Violations reject with 413 (too large) or 415 (bad type).
102
- */
103
- readonly uploadPolicy?: UploadPolicyInput;
104
- /**
105
- * Browser CORS policy for the eve HTTP routes. Omit or pass `false` to leave
106
- * CORS untouched, pass `true` for fully permissive CORS, or pass an options
107
- * object to narrow the policy.
108
- */
109
- readonly cors?: EveChannelCors;
110
- /** Policy for follow-up messages that arrive while a turn is active. */
111
- readonly turnPolicy?: TurnPolicy;
112
- /**
113
- * Pre-dispatch hook for inbound eve HTTP messages. Runs after route auth and body
114
- * parsing, before runtime dispatch.
115
- */
116
- readonly onMessage?: (ctx: EveMessageContext, message: string | UserContent) => EveMessageResultOrPromise;
117
- /**
118
- * Runtime stream-event handlers for the default eve HTTP channel. Handlers receive
119
- * the event data, {@link EveEventContext}, and `SessionContext` (the same shape as custom channels).
120
- */
121
- readonly events?: EveChannelEvents;
122
- }
123
- /**
124
- * Concrete return type of {@link eveChannel}. Named so consumers can default-export an
125
- * `eveChannel(...)` call under `declaration: true` without TypeScript falling back to an
126
- * internal path for `Channel`.
127
- */
128
- export interface EveChannel extends Channel {
129
- }
130
- /**
131
- * Builds the default eve HTTP channel: a {@link defineChannel} instance serving the
132
- * built-in `/eve/v1` routes (GET inspects the agent, POST creates a session,
133
- * ID-addressed POST routes deliver follow-ups and controls, and GET streams a
134
- * session's NDJSON event feed). Every route
135
- * runs {@link EveChannelInput.auth} via {@link routeAuth} before dispatching.
136
- * Default-export the result as your `agent/channels/eve.ts` channel; reach for
137
- * {@link defineChannel} directly only for a custom transport.
138
- */
139
- export declare function eveChannel(input: EveChannelInput): EveChannel;
1
+ export * from "#eve-channel/index.js";