eve 0.27.13 → 0.29.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 (347) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/src/channel/adapter.d.ts +5 -5
  3. package/dist/src/channel/session.d.ts +2 -2
  4. package/dist/src/channel/types.d.ts +16 -6
  5. package/dist/src/chunks/{use-eve-agent-CWYe-vqE.js → use-eve-agent-CyDt3Lny.js} +92 -1
  6. package/dist/src/chunks/{use-eve-agent-CsSQOKnp.js → use-eve-agent-DaH3cf8K.js} +92 -1
  7. package/dist/src/cli/commands/agent-prompt/collect-intent.md +1 -1
  8. package/dist/src/cli/commands/channels.d.ts +0 -17
  9. package/dist/src/cli/commands/channels.js +1 -1
  10. package/dist/src/cli/commands/deploy.js +1 -1
  11. package/dist/src/cli/commands/extension-init.js +1 -1
  12. package/dist/src/cli/commands/init.js +1 -1
  13. package/dist/src/cli/commands/integration-connect.d.ts +29 -0
  14. package/dist/src/cli/commands/integration-connect.js +1 -0
  15. package/dist/src/cli/commands/integration-setup.d.ts +2 -3
  16. package/dist/src/cli/commands/integration-setup.js +1 -1
  17. package/dist/src/cli/commands/register-integration-commands.js +1 -1
  18. package/dist/src/cli/commands/registry-setup-command.d.ts +13 -3
  19. package/dist/src/cli/commands/registry-setup-command.js +2 -1
  20. package/dist/src/cli/commands/registry.d.ts +35 -1
  21. package/dist/src/cli/commands/registry.js +1 -1
  22. package/dist/src/cli/commands/trace.js +1 -1
  23. package/dist/src/cli/dev/tui/agent-header.js +1 -1
  24. package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -1
  25. package/dist/src/cli/dev/tui/prompt-commands.d.ts +1 -1
  26. package/dist/src/cli/dev/tui/prompt-commands.js +1 -1
  27. package/dist/src/cli/dev/tui/remote-auth-command.js +1 -1
  28. package/dist/src/cli/dev/tui/runner.d.ts +8 -7
  29. package/dist/src/cli/dev/tui/runner.js +1 -1
  30. package/dist/src/cli/dev/tui/setup-commands.d.ts +8 -13
  31. package/dist/src/cli/dev/tui/setup-commands.js +3 -2
  32. package/dist/src/cli/dev/tui/setup-flow.d.ts +14 -5
  33. package/dist/src/cli/dev/tui/setup-panel.d.ts +5 -1
  34. package/dist/src/cli/dev/tui/setup-panel.js +2 -2
  35. package/dist/src/cli/dev/tui/status-line.d.ts +1 -1
  36. package/dist/src/cli/dev/tui/status-line.js +1 -1
  37. package/dist/src/cli/dev/tui/subagent-pump.d.ts +8 -2
  38. package/dist/src/cli/dev/tui/subagent-pump.js +1 -1
  39. package/dist/src/cli/dev/tui/terminal-renderer.d.ts +2 -5
  40. package/dist/src/cli/dev/tui/terminal-renderer.js +12 -12
  41. package/dist/src/cli/dev/tui/test/fake-setup-flow-renderer.js +1 -1
  42. package/dist/src/cli/dev/tui/tui-prompter.js +1 -1
  43. package/dist/src/cli/dev/tui/tui.d.ts +2 -0
  44. package/dist/src/cli/dev/tui/tui.js +1 -1
  45. package/dist/src/cli/dev/tui/vercel-status.d.ts +1 -6
  46. package/dist/src/cli/dev/tui/vercel-status.js +1 -1
  47. package/dist/src/cli/invoke/result.d.ts +15 -0
  48. package/dist/src/cli/invoke/result.js +1 -1
  49. package/dist/src/cli/option-parsers.d.ts +11 -0
  50. package/dist/src/cli/option-parsers.js +1 -0
  51. package/dist/src/cli/run.d.ts +1 -12
  52. package/dist/src/cli/run.js +3 -3
  53. package/dist/src/cli/shutdown.d.ts +2 -0
  54. package/dist/src/cli/shutdown.js +1 -1
  55. package/dist/src/client/eve-agent-store.d.ts +7 -4
  56. package/dist/src/client/eve-agent-store.js +1 -1
  57. package/dist/src/client/index.d.ts +3 -3
  58. package/dist/src/client/index.js +1 -1
  59. package/dist/src/client/message-action-parts.js +1 -1
  60. package/dist/src/client/message-reducer-types.d.ts +5 -3
  61. package/dist/src/client/message-response.d.ts +4 -4
  62. package/dist/src/client/ndjson.d.ts +3 -3
  63. package/dist/src/client/open-stream.d.ts +2 -2
  64. package/dist/src/client/output-schema.d.ts +2 -2
  65. package/dist/src/client/reducer.d.ts +2 -2
  66. package/dist/src/client/session-utils.d.ts +5 -5
  67. package/dist/src/client/session.d.ts +2 -2
  68. package/dist/src/client/types.d.ts +2 -2
  69. package/dist/src/compiled/.vendor-stamp.json +5 -5
  70. package/dist/src/compiled/@workflow/core/index.js +1 -1
  71. package/dist/src/compiled/@workflow/core/private.d.ts +21 -5
  72. package/dist/src/compiled/@workflow/core/private.js +1 -1
  73. package/dist/src/compiled/@workflow/core/runtime/world.d.ts +10 -5
  74. package/dist/src/compiled/@workflow/core/runtime.js +3 -3
  75. package/dist/src/compiled/@workflow/core/telemetry/semantic-conventions.d.ts +2 -2
  76. package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
  77. package/dist/src/compiled/@workflow/core/workflow.js +1 -1
  78. package/dist/src/compiled/@workflow/world-local/index.js +3 -3
  79. package/dist/src/compiled/@workflow/world-vercel/index.js +13 -13
  80. package/dist/src/compiled/_chunks/workflow/{attribute-changes-DeZc2RZz.js → attribute-changes-1LmTKuTT.js} +1 -1
  81. package/dist/src/compiled/_chunks/workflow/{private-Cre8uYkA.js → private-BcwCGTV5.js} +1 -1
  82. package/dist/src/compiled/_chunks/workflow/{resume-hook-ip1hbn1b.js → resume-hook-D1_5NCZ6.js} +1 -1
  83. package/dist/src/compiled/_chunks/workflow/{run-CWytxfIp.js → run-C240Ctf4.js} +1 -1
  84. package/dist/src/compiled/_chunks/workflow/sleep-De802yfX.js +1 -0
  85. package/dist/src/compiled/_chunks/workflow/{wait-until-De9yESQN.js → wait-until-z48sPUjU.js} +2 -2
  86. package/dist/src/compiled/shadcn-registry/index.d.ts +1 -0
  87. package/dist/src/compiler/compile-from-memory.d.ts +1 -0
  88. package/dist/src/compiler/extension-compatibility.d.ts +8 -8
  89. package/dist/src/compiler/extension-compatibility.js +1 -1
  90. package/dist/src/compiler/manifest.d.ts +2 -2
  91. package/dist/src/compiler/manifest.js +1 -1
  92. package/dist/src/compiler/normalize-agent-config.js +1 -1
  93. package/dist/src/context/dynamic-instruction-lifecycle.d.ts +2 -2
  94. package/dist/src/context/dynamic-model-lifecycle.d.ts +2 -2
  95. package/dist/src/context/dynamic-skill-lifecycle.d.ts +2 -2
  96. package/dist/src/context/dynamic-tool-lifecycle.d.ts +2 -2
  97. package/dist/src/context/hook-lifecycle.d.ts +2 -2
  98. package/dist/src/evals/assertions/collector.d.ts +2 -10
  99. package/dist/src/evals/assertions/collector.js +1 -1
  100. package/dist/src/evals/assertions/run.d.ts +3 -3
  101. package/dist/src/evals/cli/eval.d.ts +6 -2
  102. package/dist/src/evals/cli/eval.js +2 -2
  103. package/dist/src/evals/cli/filter.d.ts +14 -0
  104. package/dist/src/evals/cli/filter.js +1 -0
  105. package/dist/src/evals/context.js +1 -1
  106. package/dist/src/evals/diagnostics.d.ts +8 -0
  107. package/dist/src/evals/diagnostics.js +1 -0
  108. package/dist/src/evals/expect/index.d.ts +1 -1
  109. package/dist/src/evals/expect/index.js +1 -1
  110. package/dist/src/evals/index.d.ts +1 -1
  111. package/dist/src/evals/judge.js +2 -1
  112. package/dist/src/evals/match.d.ts +4 -4
  113. package/dist/src/evals/runner/artifacts.js +1 -1
  114. package/dist/src/evals/runner/derive-run-facts.d.ts +2 -2
  115. package/dist/src/evals/runner/reporters/assertion-diagnostics.d.ts +3 -0
  116. package/dist/src/evals/runner/reporters/assertion-diagnostics.js +3 -0
  117. package/dist/src/evals/runner/reporters/braintrust.js +1 -1
  118. package/dist/src/evals/runner/reporters/console.js +1 -1
  119. package/dist/src/evals/runner/reporters/junit.js +2 -2
  120. package/dist/src/evals/session.d.ts +3 -3
  121. package/dist/src/evals/types.d.ts +33 -17
  122. package/dist/src/execution/cancel-descendant-turns-step.js +1 -1
  123. package/dist/src/execution/dispatch-runtime-actions-step.js +1 -1
  124. package/dist/src/execution/route-child-delivery.d.ts +4 -3
  125. package/dist/src/execution/route-child-delivery.js +1 -1
  126. package/dist/src/execution/session-delivery-hook.d.ts +1 -0
  127. package/dist/src/execution/session-delivery-hook.js +1 -1
  128. package/dist/src/execution/session-timeout-control.d.ts +9 -0
  129. package/dist/src/execution/session-timeout-control.js +1 -0
  130. package/dist/src/execution/session-timeout-steps.d.ts +13 -0
  131. package/dist/src/execution/session-timeout-steps.js +1 -0
  132. package/dist/src/execution/session-timeout-workflow.d.ts +6 -0
  133. package/dist/src/execution/session-timeout-workflow.js +1 -0
  134. package/dist/src/execution/session-timeout.d.ts +2 -0
  135. package/dist/src/execution/session-timeout.js +1 -0
  136. package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
  137. package/dist/src/execution/subagent-event-proxy-step.js +1 -1
  138. package/dist/src/execution/subagent-hitl-proxy.d.ts +5 -1
  139. package/dist/src/execution/subagent-hitl-proxy.js +1 -1
  140. package/dist/src/execution/terminal-session-completion-step.d.ts +5 -0
  141. package/dist/src/execution/terminal-session-completion-step.js +1 -0
  142. package/dist/src/execution/terminal-session-failure-step.js +1 -1
  143. package/dist/src/execution/turn-cancellation-control.js +1 -1
  144. package/dist/src/execution/turn-workflow.js +1 -1
  145. package/dist/src/execution/workflow-entry.d.ts +1 -0
  146. package/dist/src/execution/workflow-entry.js +1 -1
  147. package/dist/src/execution/workflow-runtime.d.ts +4 -0
  148. package/dist/src/execution/workflow-runtime.js +1 -1
  149. package/dist/src/execution/workflow-steps.d.ts +12 -2
  150. package/dist/src/execution/workflow-steps.js +1 -1
  151. package/dist/src/harness/agent-otel-provider.js +1 -1
  152. package/dist/src/harness/ai-sdk-hook-bridge.js +1 -1
  153. package/dist/src/harness/input-extraction.js +1 -1
  154. package/dist/src/harness/input-request-class.d.ts +23 -0
  155. package/dist/src/harness/input-request-class.js +1 -0
  156. package/dist/src/harness/input-requests.d.ts +20 -9
  157. package/dist/src/harness/input-requests.js +1 -1
  158. package/dist/src/harness/instrumentation-lifecycle.d.ts +12 -1
  159. package/dist/src/harness/proxy-input-requests.d.ts +10 -4
  160. package/dist/src/harness/proxy-input-requests.js +1 -1
  161. package/dist/src/harness/session-limit-continuation.d.ts +0 -11
  162. package/dist/src/harness/session-limit-continuation.js +1 -1
  163. package/dist/src/harness/session-limit-enforcement.d.ts +3 -2
  164. package/dist/src/harness/session-limit-enforcement.js +1 -1
  165. package/dist/src/harness/session-token-limits.d.ts +41 -0
  166. package/dist/src/harness/session-token-limits.js +1 -0
  167. package/dist/src/harness/stale-input-responses.js +1 -1
  168. package/dist/src/harness/subagent-token-budget.d.ts +6 -4
  169. package/dist/src/harness/subagent-token-budget.js +1 -1
  170. package/dist/src/harness/tool-loop.js +1 -1
  171. package/dist/src/harness/turn-sleep.d.ts +12 -0
  172. package/dist/src/harness/turn-sleep.js +1 -0
  173. package/dist/src/harness/turn-tag-state.d.ts +26 -17
  174. package/dist/src/harness/turn-tag-state.js +1 -1
  175. package/dist/src/harness/types.d.ts +4 -4
  176. package/dist/src/harness/workflow-lifecycle.d.ts +2 -2
  177. package/dist/src/internal/application/compiled-artifacts.js +7 -7
  178. package/dist/src/internal/application/package.js +1 -1
  179. package/dist/src/internal/authored-definition/core.js +1 -1
  180. package/dist/src/internal/nitro/host/dev-authored-source-watcher.d.ts +4 -0
  181. package/dist/src/internal/nitro/host/dev-authored-source-watcher.js +1 -1
  182. package/dist/src/internal/nitro/host/start-development-server.js +2 -2
  183. package/dist/src/internal/workflow/development-world-protocol.js +1 -1
  184. package/dist/src/internal/workflow/world-target.d.ts +7 -0
  185. package/dist/src/internal/workflow/world-target.js +1 -0
  186. package/dist/src/internal/workflow-bundle/workflow-core-shim.d.ts +1 -1
  187. package/dist/src/internal/workflow-bundle/workflow-core-shim.js +1 -1
  188. package/dist/src/protocol/event-dedupe.d.ts +25 -0
  189. package/dist/src/protocol/event-dedupe.js +1 -0
  190. package/dist/src/protocol/event-id.d.ts +16 -0
  191. package/dist/src/protocol/event-id.js +1 -0
  192. package/dist/src/protocol/message.d.ts +39 -23
  193. package/dist/src/protocol/message.js +2 -2
  194. package/dist/src/protocol/routes.d.ts +4 -0
  195. package/dist/src/protocol/routes.js +1 -1
  196. package/dist/src/public/channels/discord/discordChannel.d.ts +3 -3
  197. package/dist/src/public/channels/github/githubChannel.d.ts +3 -3
  198. package/dist/src/public/channels/linear/linearChannel.d.ts +3 -3
  199. package/dist/src/public/channels/slack/hitl.js +1 -1
  200. package/dist/src/public/channels/slack/slackChannel.d.ts +3 -3
  201. package/dist/src/public/channels/teams/hitl.js +1 -1
  202. package/dist/src/public/channels/teams/teamsChannel.d.ts +3 -3
  203. package/dist/src/public/channels/telegram/telegramChannel.d.ts +3 -3
  204. package/dist/src/public/channels/twilio/twilioChannel.d.ts +3 -3
  205. package/dist/src/public/definitions/channel.d.ts +4 -4
  206. package/dist/src/public/definitions/hook.d.ts +2 -2
  207. package/dist/src/public/tools/sleep/index.d.ts +18 -0
  208. package/dist/src/public/tools/sleep/index.js +1 -0
  209. package/dist/src/react/use-eve-agent.d.ts +3 -2
  210. package/dist/src/runtime/framework-tools/ask-question.js +1 -1
  211. package/dist/src/runtime/framework-tools/sleep.d.ts +15 -0
  212. package/dist/src/runtime/framework-tools/sleep.js +1 -0
  213. package/dist/src/runtime/hooks/registry.d.ts +2 -2
  214. package/dist/src/runtime/input/types.d.ts +19 -4
  215. package/dist/src/runtime/input/types.js +1 -1
  216. package/dist/src/runtime/resolve-agent.js +1 -1
  217. package/dist/src/runtime/types.d.ts +2 -2
  218. package/dist/src/services/dev-client/runtime-artifacts.d.ts +7 -0
  219. package/dist/src/services/dev-client/runtime-artifacts.js +1 -1
  220. package/dist/src/setup/boxes/apply-ai-gateway-credential.js +1 -1
  221. package/dist/src/setup/boxes/deploy-project.d.ts +3 -3
  222. package/dist/src/setup/flows/deploy.js +1 -1
  223. package/dist/src/setup/flows/ensure-vercel-project.d.ts +17 -0
  224. package/dist/src/setup/flows/ensure-vercel-project.js +1 -0
  225. package/dist/src/setup/flows/in-project.d.ts +1 -1
  226. package/dist/src/setup/flows/link.js +1 -1
  227. package/dist/src/setup/flows/model.js +1 -1
  228. package/dist/src/setup/flows/provider.js +1 -1
  229. package/dist/src/setup/flows/registry.d.ts +20 -0
  230. package/dist/src/setup/flows/registry.js +1 -0
  231. package/dist/src/setup/index.d.ts +0 -1
  232. package/dist/src/setup/index.js +1 -1
  233. package/dist/src/setup/{channel-setup-environment.d.ts → integrations/channels/environment.d.ts} +2 -2
  234. package/dist/src/setup/integrations/channels/environment.js +1 -0
  235. package/dist/src/setup/{channel-setup-integrations.d.ts → integrations/channels/index.d.ts} +3 -3
  236. package/dist/src/setup/integrations/channels/index.js +1 -0
  237. package/dist/src/setup/{channel-setup-runner.d.ts → integrations/channels/runner.d.ts} +1 -1
  238. package/dist/src/setup/integrations/channels/runner.js +1 -0
  239. package/dist/src/setup/{boxes/add-channels.d.ts → integrations/channels/setup.d.ts} +32 -22
  240. package/dist/src/setup/integrations/channels/setup.js +2 -0
  241. package/dist/src/setup/{channel-setup-slack.d.ts → integrations/channels/slack.d.ts} +1 -1
  242. package/dist/src/setup/integrations/channels/slack.js +1 -0
  243. package/dist/src/setup/{channel-setup-integration.d.ts → integrations/channels/types.d.ts} +23 -7
  244. package/dist/src/setup/{channel-setup-ui.d.ts → integrations/channels/ui.d.ts} +2 -2
  245. package/dist/src/setup/integrations/channels/ui.js +2 -0
  246. package/dist/src/setup/{channel-setup-web.d.ts → integrations/channels/web.d.ts} +1 -1
  247. package/dist/src/setup/integrations/channels/web.js +1 -0
  248. package/dist/src/setup/primitives/run-vercel.d.ts +1 -0
  249. package/dist/src/setup/primitives/run-vercel.js +1 -1
  250. package/dist/src/setup/prompter.d.ts +16 -3
  251. package/dist/src/setup/prompter.js +1 -1
  252. package/dist/src/setup/registry-setup-client.d.ts +18 -0
  253. package/dist/src/setup/registry-setup-client.js +2 -0
  254. package/dist/src/setup/registry-setup-protocol.d.ts +93 -0
  255. package/dist/src/setup/registry-setup-protocol.js +1 -0
  256. package/dist/src/setup/scaffold/channels-catalog.d.ts +1 -1
  257. package/dist/src/setup/scaffold/create/extension.js +2 -2
  258. package/dist/src/setup/scaffold/create/project.js +2 -2
  259. package/dist/src/setup/scaffold/create/web-template.d.ts +1 -1
  260. package/dist/src/setup/scaffold/create/web-template.js +2 -2
  261. package/dist/src/setup/scaffold/create-in-place.d.ts +1 -0
  262. package/dist/src/setup/scaffold/create-in-place.js +1 -0
  263. package/dist/src/setup/scaffold/index.js +1 -1
  264. package/dist/src/setup/scaffold/update/connections.js +3 -3
  265. package/dist/src/setup/scaffold/update/update-connection-connector.js +1 -1
  266. package/dist/src/setup/vercel-project-framework.d.ts +1 -1
  267. package/dist/src/setup/vercel-project-framework.js +1 -1
  268. package/dist/src/setup/vercel-project.d.ts +17 -2
  269. package/dist/src/setup/vercel-project.js +0 -0
  270. package/dist/src/shared/agent-definition.d.ts +12 -0
  271. package/dist/src/shared/dynamic-tool-definition.d.ts +2 -2
  272. package/dist/src/shared/ulid.d.ts +39 -0
  273. package/dist/src/shared/ulid.js +1 -0
  274. package/dist/src/svelte/index.js +1 -1
  275. package/dist/src/svelte/use-eve-agent.d.ts +4 -4
  276. package/dist/src/svelte/use-eve-agent.js +1 -1
  277. package/dist/src/vue/index.js +1 -1
  278. package/dist/src/vue/use-eve-agent.d.ts +4 -4
  279. package/dist/src/vue/use-eve-agent.js +1 -1
  280. package/docs/agent-config.md +28 -16
  281. package/docs/channels/overview.mdx +1 -1
  282. package/docs/channels/slack.mdx +2 -2
  283. package/docs/concepts/default-harness.md +12 -0
  284. package/docs/concepts/execution-model-and-durability.mdx +1 -1
  285. package/docs/concepts/sessions-runs-and-streaming.md +61 -0
  286. package/docs/evals/assertions.mdx +8 -1
  287. package/docs/evals/judge.mdx +11 -1
  288. package/docs/evals/reporters.mdx +1 -1
  289. package/docs/evals/running.mdx +3 -0
  290. package/docs/guides/client/streaming.mdx +9 -3
  291. package/docs/guides/dev-tui.md +9 -14
  292. package/docs/guides/frontend/overview.mdx +4 -2
  293. package/docs/guides/frontend/use-eve-agent-svelte.mdx +1 -1
  294. package/docs/guides/frontend/use-eve-agent-vue.mdx +10 -10
  295. package/docs/guides/hooks.md +40 -2
  296. package/docs/guides/instrumentation.md +5 -1
  297. package/docs/reference/cli.md +25 -38
  298. package/docs/reference/typescript-api.md +2 -1
  299. package/docs/tools/human-in-the-loop.md +5 -0
  300. package/docs/tutorial/ship-it.mdx +2 -2
  301. package/package.json +11 -6
  302. package/dist/src/compiled/@workflow/core/runtime/world-target.d.ts +0 -11
  303. package/dist/src/compiled/_chunks/workflow/sleep-BjrUxUcs.js +0 -1
  304. package/dist/src/node_modules/.pnpm/@workflow_utils@5.0.0-beta.7/node_modules/@workflow/utils/dist/index.js +0 -1
  305. package/dist/src/node_modules/.pnpm/@workflow_utils@5.0.0-beta.7/node_modules/@workflow/utils/dist/parse-name.js +0 -1
  306. package/dist/src/node_modules/.pnpm/@workflow_utils@5.0.0-beta.7/node_modules/@workflow/utils/dist/promise.js +0 -1
  307. package/dist/src/node_modules/.pnpm/@workflow_utils@5.0.0-beta.7/node_modules/@workflow/utils/dist/time.js +0 -1
  308. package/dist/src/node_modules/.pnpm/@workflow_utils@5.0.0-beta.7/node_modules/@workflow/utils/dist/workflow-routes.js +0 -1
  309. package/dist/src/node_modules/.pnpm/@workflow_utils@5.0.0-beta.7/node_modules/@workflow/utils/dist/world-target.js +0 -1
  310. package/dist/src/node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js +0 -1
  311. package/dist/src/setup/boxes/add-channels.js +0 -2
  312. package/dist/src/setup/boxes/add-connections.d.ts +0 -26
  313. package/dist/src/setup/boxes/add-connections.js +0 -1
  314. package/dist/src/setup/boxes/install-channel-registry-items.d.ts +0 -8
  315. package/dist/src/setup/boxes/install-channel-registry-items.js +0 -1
  316. package/dist/src/setup/boxes/one-shot-next-steps.d.ts +0 -18
  317. package/dist/src/setup/boxes/one-shot-next-steps.js +0 -2
  318. package/dist/src/setup/boxes/preflight.d.ts +0 -37
  319. package/dist/src/setup/boxes/preflight.js +0 -1
  320. package/dist/src/setup/boxes/resolve-target.d.ts +0 -58
  321. package/dist/src/setup/boxes/resolve-target.js +0 -1
  322. package/dist/src/setup/boxes/scaffold.d.ts +0 -40
  323. package/dist/src/setup/boxes/scaffold.js +0 -1
  324. package/dist/src/setup/boxes/select-channels.d.ts +0 -49
  325. package/dist/src/setup/boxes/select-channels.js +0 -1
  326. package/dist/src/setup/boxes/select-chat.d.ts +0 -38
  327. package/dist/src/setup/boxes/select-chat.js +0 -1
  328. package/dist/src/setup/boxes/select-connections.d.ts +0 -30
  329. package/dist/src/setup/boxes/select-connections.js +0 -1
  330. package/dist/src/setup/boxes/select-setup-mode.d.ts +0 -32
  331. package/dist/src/setup/boxes/select-setup-mode.js +0 -1
  332. package/dist/src/setup/channel-setup-deployment.d.ts +0 -11
  333. package/dist/src/setup/channel-setup-deployment.js +0 -1
  334. package/dist/src/setup/channel-setup-environment.js +0 -1
  335. package/dist/src/setup/channel-setup-integration.js +0 -1
  336. package/dist/src/setup/channel-setup-integrations.js +0 -1
  337. package/dist/src/setup/channel-setup-runner.js +0 -1
  338. package/dist/src/setup/channel-setup-slack.js +0 -1
  339. package/dist/src/setup/channel-setup-ui.js +0 -2
  340. package/dist/src/setup/channel-setup-web.js +0 -1
  341. package/dist/src/setup/flows/channels.d.ts +0 -57
  342. package/dist/src/setup/flows/channels.js +0 -1
  343. package/dist/src/setup/flows/connections.d.ts +0 -37
  344. package/dist/src/setup/flows/connections.js +0 -3
  345. package/dist/src/setup/onboarding.d.ts +0 -60
  346. package/dist/src/setup/onboarding.js +0 -1
  347. /package/dist/src/{node_modules/.pnpm/@workflow_utils@5.0.0-beta.7/node_modules/@workflow/utils/dist/pluralize.js → setup/integrations/channels/types.js} +0 -0
@@ -3,8 +3,6 @@ import { detectProjectIdentity, type ProjectIdentity } from "#setup/project-reso
3
3
  export interface VercelStatusSnapshot {
4
4
  /** Resolved link identity; absent while unlinked or while a probe is in flight. */
5
5
  identity?: ProjectIdentity;
6
- /** A /channels run added ≥1 channel this session and no /deploy has shipped since. */
7
- pendingDeploy: boolean;
8
6
  }
9
7
  /**
10
8
  * Status-line effect a completed setup command reports back to the runner.
@@ -12,8 +10,6 @@ export interface VercelStatusSnapshot {
12
10
  * before this session escape it — accepted v1 limits.
13
11
  */
14
12
  export type VercelStatusEffect = {
15
- kind: "channels-added";
16
- } | {
17
13
  kind: "deployed";
18
14
  } | {
19
15
  kind: "refresh-identity";
@@ -28,8 +24,7 @@ export interface VercelStatusTrackerOptions {
28
24
  }
29
25
  /**
30
26
  * Owns the Vercel segment of the dev TUI status line: one cached link
31
- * identity and the session-scoped pending-deploy flag. The identity probe is
32
- * network-bound (it shells `vercel api`), so it runs only at startup and
27
+ * identity. The identity probe is network-bound (it shells `vercel api`), so it runs only at startup and
33
28
  * after provider setup or a /deploy — never on a poll. A linked directory
34
29
  * whose `vercel` CLI call fails resolves to the raw project id as the name
35
30
  * (see {@link detectProjectIdentity}); an unlinked one resolves to no identity,
@@ -1 +1 @@
1
- import{detectProjectIdentity}from"#setup/project-resolution.js";function createVercelStatusTracker(t){let n=t.detectIdentity??detectProjectIdentity,r,i=!1,a=0,o=!1,s,snapshot=()=>{let e={pendingDeploy:i};return r!==void 0&&(e.identity=r),e},emit=()=>{o||t.onChange(snapshot())},refreshIdentity=()=>{if(o)return;s?.abort();let e=new AbortController;s=e,a+=1;let i=a;(async()=>{let c;try{c=await n(t.appRoot,{signal:e.signal})}catch{return}finally{s===e&&(s=void 0)}o||i!==a||(r=c,emit())})()};return{refreshIdentity,applyEffect(e){if(!o)switch(e.kind){case`channels-added`:i=!0,emit();return;case`deployed`:i=!1,emit(),refreshIdentity();return;case`refresh-identity`:refreshIdentity();return}},current:snapshot,dispose(){o||(o=!0,a+=1,s?.abort(),s=void 0)}}}export{createVercelStatusTracker};
1
+ import{detectProjectIdentity}from"#setup/project-resolution.js";function createVercelStatusTracker(t){let n=t.detectIdentity??detectProjectIdentity,r,i=0,a=!1,o,snapshot=()=>r===void 0?{}:{identity:r},emit=()=>{a||t.onChange(snapshot())},refreshIdentity=()=>{if(a)return;o?.abort();let e=new AbortController;o=e,i+=1;let s=i;(async()=>{let c;try{c=await n(t.appRoot,{signal:e.signal})}catch{return}finally{o===e&&(o=void 0)}a||s!==i||(r=c,emit())})()};return{refreshIdentity,applyEffect(e){if(!a)switch(e.kind){case`deployed`:emit(),refreshIdentity();return;case`refresh-identity`:refreshIdentity();return}},current:snapshot,dispose(){a||(a=!0,i+=1,o?.abort(),o=void 0)}}}export{createVercelStatusTracker};
@@ -16,6 +16,11 @@ declare const invokeResumeSchema: z.ZodObject<{
16
16
  }, z.core.$strict>;
17
17
  declare const invocationInputRequestSchema: z.ZodObject<{
18
18
  allowFreeform: z.ZodOptional<z.ZodBoolean>;
19
+ kind: z.ZodEnum<{
20
+ question: "question";
21
+ "session-limit": "session-limit";
22
+ "tool-approval": "tool-approval";
23
+ }>;
19
24
  prompt: z.ZodString;
20
25
  requestId: z.ZodString;
21
26
  options: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -42,6 +47,11 @@ declare const invokeResultSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
42
47
  }, z.core.$strict>, z.ZodObject<{
43
48
  requests: z.ZodReadonly<z.ZodArray<z.ZodObject<{
44
49
  allowFreeform: z.ZodOptional<z.ZodBoolean>;
50
+ kind: z.ZodEnum<{
51
+ question: "question";
52
+ "session-limit": "session-limit";
53
+ "tool-approval": "tool-approval";
54
+ }>;
45
55
  prompt: z.ZodString;
46
56
  requestId: z.ZodString;
47
57
  options: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -221,6 +231,11 @@ export declare const invokeResultJsonSchema: {
221
231
  }, z.core.$strict>, z.ZodObject<{
222
232
  requests: z.ZodReadonly<z.ZodArray<z.ZodObject<{
223
233
  allowFreeform: z.ZodOptional<z.ZodBoolean>;
234
+ kind: z.ZodEnum<{
235
+ question: "question";
236
+ "session-limit": "session-limit";
237
+ "tool-approval": "tool-approval";
238
+ }>;
224
239
  prompt: z.ZodString;
225
240
  requestId: z.ZodString;
226
241
  options: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -1 +1 @@
1
- import{z}from"#compiled/zod/index.js";import{inputOptionSchema,inputRequestSchema}from"#client/index.js";const sessionCursorSchema=z.object({continuationToken:z.string().optional(),sessionId:z.string().min(1),streamIndex:z.number().int().nonnegative()}).strict(),targetSchema=z.discriminatedUnion(`kind`,[z.object({kind:z.literal(`local`)}).strict(),z.object({kind:z.literal(`remote`),serverUrl:z.url()}).strict()]),invokeResumeSchema=z.object({session:sessionCursorSchema,target:targetSchema}).strict(),invocationInputRequestSchema=inputRequestSchema.omit({action:!0,display:!0,options:!0}).extend({options:z.array(inputOptionSchema.omit({style:!0})).optional()}),authorizationChallengeSchema=z.object({displayName:z.string().optional(),expiresAt:z.string().optional(),instructions:z.string().optional(),url:z.string().optional(),userCode:z.string().optional()}).strict(),authorizationInterruptSchema=z.object({authorization:authorizationChallengeSchema.optional(),description:z.string(),name:z.string(),webhookUrl:z.string().optional()}).strict(),turnOutcomeSchema=z.discriminatedUnion(`status`,[z.object({message:z.string().optional(),status:z.literal(`completed`)}).strict(),z.object({message:z.string(),status:z.literal(`failed`)}).strict()]),invokeResultSchema=z.discriminatedUnion(`status`,[z.object({resume:invokeResumeSchema,status:z.literal(`running`)}).strict(),z.object({requests:z.array(invocationInputRequestSchema).readonly(),resume:invokeResumeSchema,status:z.literal(`input-required`)}).strict(),z.object({authorizations:z.array(authorizationInterruptSchema).min(1).readonly(),resume:invokeResumeSchema,status:z.literal(`authorization-required`)}).strict(),z.object({outcome:turnOutcomeSchema,resume:invokeResumeSchema,status:z.literal(`ready`)}).strict(),z.object({message:z.string(),status:z.literal(`failed`)}).strict(),z.object({code:z.string().optional(),message:z.string(),resume:invokeResumeSchema.optional(),status:z.literal(`authentication-required`)}).strict()]);function projectInvocationInputRequest(e){let{allowFreeform:t,options:n,prompt:r,requestId:i}=e;return{allowFreeform:t,options:n?.map(({description:e,id:t,label:n})=>({description:e,id:t,label:n})),prompt:r,requestId:i}}function parseInvokeResumeInput(e){let t=invokeResultSchema.safeParse(e);if(t.success&&`resume`in t.data&&t.data.resume!==void 0)return t.data;throw Error(`Resume JSON is not a valid resumable eve invoke result.`)}const invokeResultJsonSchema={...z.toJSONSchema(invokeResultSchema,{io:`input`,target:`draft-2020-12`,unrepresentable:`any`}),$id:`https://eve.dev/schemas/invoke-result.json`,title:`eve invoke result`};export{invokeResultJsonSchema,parseInvokeResumeInput,projectInvocationInputRequest};
1
+ import{z}from"#compiled/zod/index.js";import{inputOptionSchema,inputRequestSchema}from"#client/index.js";const sessionCursorSchema=z.object({continuationToken:z.string().optional(),sessionId:z.string().min(1),streamIndex:z.number().int().nonnegative()}).strict(),targetSchema=z.discriminatedUnion(`kind`,[z.object({kind:z.literal(`local`)}).strict(),z.object({kind:z.literal(`remote`),serverUrl:z.url()}).strict()]),invokeResumeSchema=z.object({session:sessionCursorSchema,target:targetSchema}).strict(),invocationInputRequestSchema=inputRequestSchema.omit({action:!0,display:!0,options:!0}).extend({options:z.array(inputOptionSchema.omit({style:!0})).optional()}),authorizationChallengeSchema=z.object({displayName:z.string().optional(),expiresAt:z.string().optional(),instructions:z.string().optional(),url:z.string().optional(),userCode:z.string().optional()}).strict(),authorizationInterruptSchema=z.object({authorization:authorizationChallengeSchema.optional(),description:z.string(),name:z.string(),webhookUrl:z.string().optional()}).strict(),turnOutcomeSchema=z.discriminatedUnion(`status`,[z.object({message:z.string().optional(),status:z.literal(`completed`)}).strict(),z.object({message:z.string(),status:z.literal(`failed`)}).strict()]),invokeResultSchema=z.discriminatedUnion(`status`,[z.object({resume:invokeResumeSchema,status:z.literal(`running`)}).strict(),z.object({requests:z.array(invocationInputRequestSchema).readonly(),resume:invokeResumeSchema,status:z.literal(`input-required`)}).strict(),z.object({authorizations:z.array(authorizationInterruptSchema).min(1).readonly(),resume:invokeResumeSchema,status:z.literal(`authorization-required`)}).strict(),z.object({outcome:turnOutcomeSchema,resume:invokeResumeSchema,status:z.literal(`ready`)}).strict(),z.object({message:z.string(),status:z.literal(`failed`)}).strict(),z.object({code:z.string().optional(),message:z.string(),resume:invokeResumeSchema.optional(),status:z.literal(`authentication-required`)}).strict()]);function projectInvocationInputRequest(e){let{allowFreeform:t,kind:n,options:r,prompt:i,requestId:a}=e;return{allowFreeform:t,kind:n,options:r?.map(({description:e,id:t,label:n})=>({description:e,id:t,label:n})),prompt:i,requestId:a}}function parseInvokeResumeInput(e){let t=invokeResultSchema.safeParse(e);if(t.success&&`resume`in t.data&&t.data.resume!==void 0)return t.data;throw Error(`Resume JSON is not a valid resumable eve invoke result.`)}const invokeResultJsonSchema={...z.toJSONSchema(invokeResultSchema,{io:`input`,target:`draft-2020-12`,unrepresentable:`any`}),$id:`https://eve.dev/schemas/invoke-result.json`,title:`eve invoke result`};export{invokeResultJsonSchema,parseInvokeResumeInput,projectInvocationInputRequest};
@@ -0,0 +1,11 @@
1
+ import type { AssistantResponseStatsMode, LogDisplayMode, TerminalPartDisplayMode } from "#cli/dev/tui/types.js";
2
+ /** Parses a TCP port accepted by the CLI. */
3
+ export declare function parsePortOption(value: string): number;
4
+ /** Parses a terminal part display mode. */
5
+ export declare function parseDisplayMode(value: string): TerminalPartDisplayMode;
6
+ /** Parses an assistant response statistics mode. */
7
+ export declare function parseStatsMode(value: string): AssistantResponseStatsMode;
8
+ /** Parses a server log display mode. */
9
+ export declare function parseLogsMode(value: string): LogDisplayMode;
10
+ /** Parses a positive model context-window size. */
11
+ export declare function parseContextSizeOption(value: string): number;
@@ -0,0 +1 @@
1
+ import{InvalidArgumentError}from"#compiled/commander/index.js";import{LOG_DISPLAY_MODES,parseLogDisplayMode}from"#cli/dev/tui/log-display-mode.js";function parsePortOption(e){if(!/^-?\d+$/.test(e))throw new InvalidArgumentError(`Expected a numeric port, received "${e}".`);let t=Number(e);if(t<0||t>65535)throw new InvalidArgumentError(`Expected a port between 0 and 65535, received "${e}".`);return t}const DISPLAY_MODES=new Set([`full`,`collapsed`,`auto-collapsed`,`hidden`]),STATS_MODES=new Set([`tokens`,`tokensPerSecond`]);function parseDisplayMode(e){if(!DISPLAY_MODES.has(e))throw new InvalidArgumentError(`Expected one of ${[...DISPLAY_MODES].join(`, `)}, received "${e}".`);return e}function parseStatsMode(e){if(!STATS_MODES.has(e))throw new InvalidArgumentError(`Expected one of ${[...STATS_MODES].join(`, `)}, received "${e}".`);return e}function parseLogsMode(n){let r=parseLogDisplayMode(n);if(r===void 0)throw new InvalidArgumentError(`Expected one of ${LOG_DISPLAY_MODES.join(`, `)}, received "${n}".`);return r}function parseContextSizeOption(e){let t=Number(e);if(!Number.isFinite(t)||t<=0)throw new InvalidArgumentError(`Expected a positive number, received "${e}".`);return t}export{parseContextSizeOption,parseDisplayMode,parseLogsMode,parsePortOption,parseStatsMode};
@@ -1,6 +1,7 @@
1
1
  import { type BuildHost } from "#cli/commands/build.js";
2
2
  import { resolveDevUiMode, resolveTuiDisplayOptions } from "#cli/dev/ui-options.js";
3
3
  import type { RunDevelopmentTuiInput } from "#cli/dev/tui/tui.js";
4
+ import type { EvalCliOptions } from "#evals/cli/eval.js";
4
5
  import { type InvokeCliRuntimeDependencies } from "#cli/invoke/command.js";
5
6
  import type { DevelopmentServer, DevelopmentServerOptions, ProductionServerHandle } from "#internal/nitro/host/types.js";
6
7
  export { resolveDevUiMode, resolveTuiDisplayOptions };
@@ -28,18 +29,6 @@ interface CliRuntimeDependencies {
28
29
  }): Promise<ProductionServerHandle>;
29
30
  }
30
31
  type CliRuntimeOverrides = Partial<CliRuntimeDependencies>;
31
- interface EvalCliOptions {
32
- json?: boolean;
33
- junit?: string;
34
- list?: boolean;
35
- maxConcurrency?: string;
36
- skipReport?: boolean;
37
- strict?: boolean;
38
- tag?: string[];
39
- timeout?: string;
40
- url?: string;
41
- verbose?: boolean;
42
- }
43
32
  /**
44
33
  * Runs the eve CLI entrypoint.
45
34
  */
@@ -1,4 +1,4 @@
1
- import{createLogger}from"#internal/logging.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{createCliTheme,renderCliTaggedLine}from"#cli/ui/output.js";import{isCodingAgentLaunch}from"#cli/agent-detection.js";import{eveCliBanner}from"#cli/banner.js";import{startCliLiveRow}from"#cli/ui/live-row.js";import{devBootPhase}from"#internal/dev-boot-progress.js";import{Command,CommanderError,InvalidArgumentError}from"#compiled/commander/index.js";import{parseDevelopmentHeaderOption,resolveDevelopmentUrlTarget}from"#cli/dev/url-target.js";import{parseDevelopmentServerUrl}from"#cli/dev/url.js";import{registerBuildCommand}from"#cli/commands/build.js";import{resolveApplicationRoot}from"#internal/application/paths.js";import{registerIntegrationCommands}from"#cli/commands/register-integration-commands.js";import{registerProjectCommands}from"#cli/commands/register-project-commands.js";import{registerRegistryCommands}from"#cli/commands/register-registry-commands.js";import{resolveDevUiMode,resolveTuiDisplayOptions}from"#cli/dev/ui-options.js";import{FORCED_EXIT_BACKSTOP_MS,installShutdownSignal,waitForShutdownSignal}from"#cli/shutdown.js";import{waitForServerOrStop,waitForUiOrServer}from"#cli/dev/wait-for-ui.js";import{registerRuntimeInvokeCommand}from"#cli/invoke/command.js";import{LOG_DISPLAY_MODES,parseLogDisplayMode}from"#cli/dev/tui/log-display-mode.js";import{resolveTuiTitle}from"#cli/dev/tui/target.js";const devBootLog=createLogger(`dev.boot`);function createDevBootProgressReporter(e){return t=>{switch(t.type){case`phase-started`:e?.update(`Building your agent`,t.phase),devBootLog.debug(t.phase);return;case`phase-finished`:devBootLog.debug(`${t.phase} finished`,{ms:t.elapsedMs});return;case`before-first-paint`:e?.stop();return;default:return t}}}async function loadPrintApplicationInfo(){return(await import(`#cli/commands/info.js`)).printApplicationInfo}async function loadRunDevelopmentTui(){return(await import(`#cli/dev/tui/tui.js`)).runDevelopmentTui}async function loadRunEvalCommand(){return(await import(`#evals/cli/eval.js`)).runEvalCommand}async function loadStartHost(){return(await import(`#cli/dev/local-server-process.js`)).createDevelopmentServer}const loadIsActiveDevelopmentServerForApp=async()=>(await import(`#internal/nitro/host.js`)).isActiveDevelopmentServerForApp;async function loadStartProductionHost(){return(await import(`#internal/nitro/host.js`)).startProductionServer}function parsePortOption(e){if(!/^-?\d+$/.test(e))throw new InvalidArgumentError(`Expected a numeric port, received "${e}".`);let t=Number(e);if(t<0||t>65535)throw new InvalidArgumentError(`Expected a port between 0 and 65535, received "${e}".`);return t}const DISPLAY_MODES=new Set([`full`,`collapsed`,`auto-collapsed`,`hidden`]),STATS_MODES=new Set([`tokens`,`tokensPerSecond`]);function parseDisplayMode(e){if(!DISPLAY_MODES.has(e))throw new InvalidArgumentError(`Expected one of ${[...DISPLAY_MODES].join(`, `)}, received "${e}".`);return e}function parseStatsMode(e){if(!STATS_MODES.has(e))throw new InvalidArgumentError(`Expected one of ${[...STATS_MODES].join(`, `)}, received "${e}".`);return e}function parseLogsMode(e){let t=parseLogDisplayMode(e);if(t===void 0)throw new InvalidArgumentError(`Expected one of ${LOG_DISPLAY_MODES.join(`, `)}, received "${e}".`);return t}function parseContextSizeOption(e){let t=Number(e);if(!Number.isFinite(t)||t<=0)throw new InvalidArgumentError(`Expected a positive number, received "${e}".`);return t}function hasInteractiveTerminal(){return!!(process.stdin.isTTY&&process.stdout.isTTY)}function createCliProgram(e,i){let c=resolveApplicationRoot(),y=resolveInstalledPackageInfo().version,b=new Command,x=createCliTheme();b.name(`eve`).description(`Build and run an eve application.`).version(y).showHelpAfterError().exitOverride().hook(`preAction`,(t,n)=>{[`info`,`dev`,`init`].includes(n.name())&&e.log(eveCliBanner())}).configureOutput({writeErr:t=>{e.error(t.trimEnd())},writeOut:t=>{e.log(t.trimEnd())}});let S=b.command(`channels`).description(`Manage user-authored channels in the current project.`);S.command(`add [kind]`).description(`Add channels interactively, or scaffold a channel kind (slack | web).`).option(`-f, --force`,`Overwrite existing channel files`).option(`-y, --yes`,`Assume yes for confirmations; requires an explicit channel kind`).action(async(t,n)=>{let{runChannelsAddCompatibilityCommand:r}=await import(`#cli/commands/channels.js`);await r(e,c,{kind:t,options:n})}),S.command(`list`).description(`List user-authored channels in the current project.`).option(`--json`,`Output as JSON`).action(async t=>{let{runChannelsListCommand:n}=await import(`#cli/commands/channels.js`);await n(e,c,t)}),registerIntegrationCommands({program:b,logger:e,appRoot:c});let C=b.command(`extension`).description(`Create and build reusable eve extension packages.`);C.command(`init [target]`).description(`Create a new eve extension package.`).option(`-y, --yes`,`Accepted for compatibility; has no effect`).action(async(t,n)=>{n.yes&&e.error(`warning: --yes has no effect for eve extension init.`);let{runExtensionInitCommand:r}=await import(`#cli/commands/extension-init.js`);await r(e,c,t)}),C.command(`build`).description(`Build the current package as an eve extension.`).action(async()=>{let{loadDevelopmentEnvironmentFiles:t}=await import(`#cli/dev/environment.js`);t(c);let{runExtensionBuildCommand:n}=await import(`#cli/commands/extension-build.js`);await n(e,c)}),registerRegistryCommands({program:b,logger:e,appRoot:c}),b.command(`init [target]`).description(`Create a new eve agent, or add one to an existing project directory.`).option(`--channel-web-nextjs`,`Add the Web Chat application (Next.js)`).option(`-y, --yes`,`Accepted for compatibility; has no effect`).action(async(t,n)=>{n.yes&&e.error(`warning: --yes has no effect for eve init.`);let{runInitCommand:r}=await import(`#cli/commands/init.js`);await r(e,c,t,{channelWebNextjs:n.channelWebNextjs})}),registerProjectCommands({program:b,logger:e,appRoot:c}),registerBuildCommand({appRoot:c,buildHost:i.buildHost,logger:e,program:b}),b.command(`start`).description(`Start a built eve application.`).option(`--host <host>`,`Host interface to bind`).option(`--port <port>`,`Port to listen on (defaults to $PORT, then 3000)`,parsePortOption).action(async t=>{let{loadDevelopmentEnvironmentFiles:n}=await import(`#cli/dev/environment.js`);n(c);let a=await(i.startProductionHost??await loadStartProductionHost())(c,{host:t.host,port:t.port});e.log(renderCliTaggedLine(x,{message:`server listening at ${a.url}`,tag:`start`,tone:`success`})),await waitForShutdownSignal({close:()=>a.close(),wait:()=>a.wait()})}),registerRuntimeInvokeCommand({appRoot:c,logger:e,program:b,runtime:i}),b.command(`dev`).description(`Start the eve development server or connect to an existing URL.`).argument(`[url]`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`--host <host>`,`Host interface to bind`).option(`--port <port>`,`Port to listen on (defaults to $PORT, then 2000)`,parsePortOption).option(`-u, --url <url>`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`-H, --header <header>`,`Request header for a URL target, in "Name: value" form (repeatable)`,parseDevelopmentHeaderOption).option(`--no-ui`,`Start the server without an interactive UI`).option(`--name <name>`,`Title shown in the terminal UI (defaults to the app folder name)`).option(`--input <text>`,`Pre-fill the prompt input, or start onboarding with /model`).option(`--tools <mode>`,`How tool calls render: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--reasoning <mode>`,`How reasoning renders: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--subagents <mode>`,`How subagent sections render: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--connection-auth <mode>`,`How connection authorization renders: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--assistant-response-stats <mode>`,`Assistant header statistic: tokens | tokensPerSecond`,parseStatsMode).option(`--context-size <tokens>`,`Model context window size, shown as a usage percentage`,parseContextSizeOption).option(`--logs <mode>`,`Which server/agent logs to show: all | stderr | sandbox | none`,parseLogsMode).addHelpText(`after`,`
1
+ import{createLogger}from"#internal/logging.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{createCliTheme,renderCliTaggedLine}from"#cli/ui/output.js";import{isCodingAgentLaunch}from"#cli/agent-detection.js";import{eveCliBanner}from"#cli/banner.js";import{startCliLiveRow}from"#cli/ui/live-row.js";import{devBootPhase}from"#internal/dev-boot-progress.js";import{Command,CommanderError,InvalidArgumentError}from"#compiled/commander/index.js";import{parseDevelopmentHeaderOption,resolveDevelopmentUrlTarget}from"#cli/dev/url-target.js";import{parseDevelopmentServerUrl}from"#cli/dev/url.js";import{registerBuildCommand}from"#cli/commands/build.js";import{resolveApplicationRoot}from"#internal/application/paths.js";import{registerIntegrationCommands}from"#cli/commands/register-integration-commands.js";import{registerProjectCommands}from"#cli/commands/register-project-commands.js";import{registerRegistryCommands}from"#cli/commands/register-registry-commands.js";import{resolveDevUiMode,resolveTuiDisplayOptions}from"#cli/dev/ui-options.js";import{FORCED_EXIT_BACKSTOP_MS,installShutdownSignal,waitForShutdownSignal}from"#cli/shutdown.js";import{waitForServerOrStop,waitForUiOrServer}from"#cli/dev/wait-for-ui.js";import{registerRuntimeInvokeCommand}from"#cli/invoke/command.js";import{parseContextSizeOption,parseDisplayMode,parseLogsMode,parsePortOption,parseStatsMode}from"#cli/option-parsers.js";import{resolveTuiTitle}from"#cli/dev/tui/target.js";import{resumeDevelopmentRuntimeArtifacts,suspendDevelopmentRuntimeArtifacts}from"#services/dev-client/runtime-artifacts.js";const devBootLog=createLogger(`dev.boot`);function createDevBootProgressReporter(e){return t=>{switch(t.type){case`phase-started`:e?.update(`Building your agent`,t.phase),devBootLog.debug(t.phase);return;case`phase-finished`:devBootLog.debug(`${t.phase} finished`,{ms:t.elapsedMs});return;case`before-first-paint`:e?.stop();return;default:return t}}}async function loadPrintApplicationInfo(){return(await import(`#cli/commands/info.js`)).printApplicationInfo}async function loadRunDevelopmentTui(){return(await import(`#cli/dev/tui/tui.js`)).runDevelopmentTui}async function loadRunEvalCommand(){return(await import(`#evals/cli/eval.js`)).runEvalCommand}async function loadStartHost(){return(await import(`#cli/dev/local-server-process.js`)).createDevelopmentServer}const loadIsActiveDevelopmentServerForApp=async()=>(await import(`#internal/nitro/host.js`)).isActiveDevelopmentServerForApp;async function loadStartProductionHost(){return(await import(`#internal/nitro/host.js`)).startProductionServer}function hasInteractiveTerminal(){return!!(process.stdin.isTTY&&process.stdout.isTTY)}function createCliProgram(e,i){let c=resolveApplicationRoot(),y=resolveInstalledPackageInfo().version,b=new Command,x=createCliTheme();b.name(`eve`).description(`Build and run an eve application.`).version(y).showHelpAfterError().exitOverride().hook(`preAction`,(t,n)=>{[`info`,`dev`,`init`].includes(n.name())&&e.log(eveCliBanner())}).configureOutput({writeErr:t=>{e.error(t.trimEnd())},writeOut:t=>{e.log(t.trimEnd())}}),b.command(`channels`).description(`Manage user-authored channels in the current project.`).command(`list`).description(`List user-authored channels in the current project.`).option(`--json`,`Output as JSON`).action(async t=>{let{runChannelsListCommand:n}=await import(`#cli/commands/channels.js`);await n(e,c,t)}),registerIntegrationCommands({program:b,logger:e,appRoot:c});let S=b.command(`extension`).description(`Create and build reusable eve extension packages.`);S.command(`init [target]`).description(`Create a new eve extension package.`).option(`-y, --yes`,`Accepted for compatibility; has no effect`).action(async(t,n)=>{n.yes&&e.error(`warning: --yes has no effect for eve extension init.`);let{runExtensionInitCommand:r}=await import(`#cli/commands/extension-init.js`);await r(e,c,t)}),S.command(`build`).description(`Build the current package as an eve extension.`).action(async()=>{let{loadDevelopmentEnvironmentFiles:t}=await import(`#cli/dev/environment.js`);t(c);let{runExtensionBuildCommand:n}=await import(`#cli/commands/extension-build.js`);await n(e,c)}),registerRegistryCommands({program:b,logger:e,appRoot:c}),b.command(`init [target]`).description(`Create a new eve agent, or add one to an existing project directory.`).option(`--channel-web-nextjs`,`Add the Web Chat application (Next.js)`).option(`-y, --yes`,`Accepted for compatibility; has no effect`).action(async(t,n)=>{n.yes&&e.error(`warning: --yes has no effect for eve init.`);let{runInitCommand:r}=await import(`#cli/commands/init.js`);await r(e,c,t,{channelWebNextjs:n.channelWebNextjs})}),registerProjectCommands({program:b,logger:e,appRoot:c}),registerBuildCommand({appRoot:c,buildHost:i.buildHost,logger:e,program:b}),b.command(`start`).description(`Start a built eve application.`).option(`--host <host>`,`Host interface to bind`).option(`--port <port>`,`Port to listen on (defaults to $PORT, then 3000)`,parsePortOption).action(async t=>{let{loadDevelopmentEnvironmentFiles:n}=await import(`#cli/dev/environment.js`);n(c);let a=await(i.startProductionHost??await loadStartProductionHost())(c,{host:t.host,port:t.port});e.log(renderCliTaggedLine(x,{message:`server listening at ${a.url}`,tag:`start`,tone:`success`})),await waitForShutdownSignal({close:()=>a.close(),wait:()=>a.wait()})}),registerRuntimeInvokeCommand({appRoot:c,logger:e,program:b,runtime:i}),b.command(`dev`).description(`Start the eve development server or connect to an existing URL.`).argument(`[url]`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`--host <host>`,`Host interface to bind`).option(`--port <port>`,`Port to listen on (defaults to $PORT, then 2000)`,parsePortOption).option(`-u, --url <url>`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`-H, --header <header>`,`Request header for a URL target, in "Name: value" form (repeatable)`,parseDevelopmentHeaderOption).option(`--no-ui`,`Start the server without an interactive UI`).option(`--name <name>`,`Title shown in the terminal UI (defaults to the app folder name)`).option(`--input <text>`,`Pre-fill the prompt input, or start onboarding with /model`).option(`--tools <mode>`,`How tool calls render: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--reasoning <mode>`,`How reasoning renders: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--subagents <mode>`,`How subagent sections render: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--connection-auth <mode>`,`How connection authorization renders: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--assistant-response-stats <mode>`,`Assistant header statistic: tokens | tokensPerSecond`,parseStatsMode).option(`--context-size <tokens>`,`Model context window size, shown as a usage percentage`,parseContextSizeOption).option(`--logs <mode>`,`Which server/agent logs to show: all | stderr | sandbox | none`,parseLogsMode).addHelpText(`after`,`
2
2
  You can also pass a bare URL, for example: eve dev https://example.com
3
- `).action(async(t,n)=>{let a=resolveDevelopmentUrlTarget(n,t),s=a?.serverUrl,u=hasInteractiveTerminal(),f=resolveDevUiMode({options:n,interactive:u});if(n.input!==void 0&&f===`headless`)throw new InvalidArgumentError(`--input requires the interactive UI.`);let p=!1;s!==void 0&&(p=await(i.isActiveDevelopmentServerForApp??await loadIsActiveDevelopmentServerForApp())({appRoot:c,serverUrl:s}));let runInteractiveUi=async(e,t,r)=>{let o=await devBootPhase(`loading interactive UI`,async()=>i.runDevelopmentTui??await loadRunDevelopmentTui(),t),l=resolveTuiDisplayOptions(n),u=s===void 0||p?{kind:`local`,serverUrl:e.serverUrl,workspaceRoot:e.appRoot??c}:{kind:`remote`,serverUrl:e.serverUrl,workspaceRoot:c},d=resolveTuiTitle({name:n.name,target:u});d!==void 0&&(l.name=d);let f={target:u,initialInput:n.input,onBootProgress:t,lifecycle:r,...l};a?.headers===void 0?await o(f):await o({...f,headers:a.headers})};if(s){let{loadDevelopmentEnvironmentFiles:t}=await import(`#cli/dev/environment.js`);if(t(c),e.log(`↗ ${p?`local`:`remote`} mode targeting ${x.info(new URL(s).host)}`),f===`headless`){e.log(renderCliTaggedLine(x,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`}));return}e.log(``);let n=installShutdownSignal({exitAfterMs:FORCED_EXIT_BACKSTOP_MS});try{await runInteractiveUi({serverUrl:s},void 0,n)}finally{n.dispose()}return}f===`tui`&&e.log(``);let m=f===`tui`?startCliLiveRow(e):void 0,h=createDevBootProgressReporter(m);m?.update(`Building your agent`);let g,_,closeServer=()=>g===void 0?Promise.resolve():(_??=g.close(),_.catch(()=>void 0),_),v=installShutdownSignal({exitAfterMs:FORCED_EXIT_BACKSTOP_MS,onStop:()=>{closeServer()}});try{g=(i.startHost??await loadStartHost())(c,{existing:f===`tui`?`attach-if-unconfigured`:`reject`,host:n.host,onBootProgress:h,port:n.port});let t=(await Promise.race([g.start().then(e=>({handle:e})),v.stopped.then(()=>({handle:void 0}))])).handle;if(t===void 0)return;if(f!==`tui`&&e.log(renderCliTaggedLine(x,{message:`server listening at ${t.url}`,tag:`dev`,tone:`success`})),f===`headless`){n.ui!==!1&&!u&&e.log(renderCliTaggedLine(x,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`})),await waitForServerOrStop(g,v);return}await waitForUiOrServer({handle:t,lifecycle:v,server:g,runUi:async()=>await runInteractiveUi({appRoot:t.appRoot,serverUrl:t.url},h,v)})}finally{m?.stop(),await closeServer(),v.dispose()}});let w=b.command(`logs`).description("Inspect local `eve dev` diagnostic logs (.eve/logs).");return w.command(`show [logid]`,{isDefault:!0}).description(`Print a diagnostic log (the most recent when logid is omitted).`).option(`--dump`,`Prepend the log's environment dump (.dump sibling)`).option(`--events`,`Interleave session events from the local workflow store`).action(async(t,n)=>{let{runLogsShowCommand:r}=await import(`#cli/commands/logs.js`);await r(e,c,t,n)}),w.command(`ls`).description(`List diagnostic logs, most recent first.`).option(`--json`,`Output as JSON`).action(async t=>{let{runLogsListCommand:n}=await import(`#cli/commands/logs.js`);await n(e,c,t)}),b.command(`trace [trace]`).usage(`[options] [trace]
4
- eve trace ls [options]`).description("Show a local `eve dev` trace (the most recent when trace is omitted).").action(async t=>{let{runTraceShowCommand:n}=await import(`#cli/commands/trace.js`);await n(e,c,t)}).command(`ls`).description(`List local traces, most recent first.`).option(`--json`,`Output as JSON`).action(async t=>{let{runTraceListCommand:n}=await import(`#cli/commands/trace.js`);await n(e,c,t)}),b.command(`info`).description(`Print resolved application information.`).option(`--json`,`Output as JSON`).action(async t=>{await(i.printApplicationInfo??await loadPrintApplicationInfo())(e,c,t)}),b.command(`eval`).description(`Run evals against an eve agent.`).argument(`[evalIds...]`,`Eval ids (or directory prefixes) to run (all discovered evals when omitted)`).option(`--url <url>`,`Remote agent URL (skip local host startup)`,parseDevelopmentServerUrl).option(`--tag <tag...>`,`Run only evals carrying a tag`).option(`--strict`,`Fail the exit code when any score falls below its threshold`).option(`--list`,`Print discovered evals without running them`).option(`--timeout <ms>`,`Per-eval timeout in milliseconds`).option(`--max-concurrency <n>`,`Max concurrent eval executions`).option(`--json`,`Output results as JSON`).option(`--junit <path>`,`Write JUnit XML results to a file`).option(`--skip-report`,`Skip eval-defined reporters (e.g. Braintrust)`).option(`--verbose`,`Stream per-eval t.log lines to stdout`).action(async(t,n)=>{await(i.runEvalCommand??await loadRunEvalCommand())(t,n,e)}),b}async function runCli(e=process.argv.slice(2),t=console,n={}){let r=createCliProgram(t,n),a=e.length===0?[`dev`]:e;try{await r.parseAsync(a,{from:`user`})}catch(e){if(e instanceof CommanderError){if(e.exitCode===0)return;let r=await(n.isCodingAgentLaunch??isCodingAgentLaunch)();if(a[0]===`init`&&r){let{initAgentInstructions:e}=await import(`#cli/commands/agent-instructions.js`);t.log(e())}throw Error(e.message)}throw e}}export{resolveDevUiMode,resolveTuiDisplayOptions,runCli};
3
+ `).action(async(t,n)=>{let a=resolveDevelopmentUrlTarget(n,t),s=a?.serverUrl,u=hasInteractiveTerminal(),f=resolveDevUiMode({options:n,interactive:u});if(n.input!==void 0&&f===`headless`)throw new InvalidArgumentError(`--input requires the interactive UI.`);let p=!1;s!==void 0&&(p=await(i.isActiveDevelopmentServerForApp??await loadIsActiveDevelopmentServerForApp())({appRoot:c,serverUrl:s}));let runInteractiveUi=async(e,t,r)=>{let o=await devBootPhase(`loading interactive UI`,async()=>i.runDevelopmentTui??await loadRunDevelopmentTui(),t),l=resolveTuiDisplayOptions(n),u=s===void 0||p?{kind:`local`,serverUrl:e.serverUrl,workspaceRoot:e.appRoot??c}:{kind:`remote`,serverUrl:e.serverUrl,workspaceRoot:c},d=resolveTuiTitle({name:n.name,target:u});d!==void 0&&(l.name=d);let f={target:u,initialInput:n.input,onBootProgress:t,lifecycle:r,...l};u.kind===`local`&&(f.withExclusiveTerminal=async t=>await(async()=>{if(!await suspendDevelopmentRuntimeArtifacts({serverUrl:e.serverUrl}))throw Error(`Could not pause the development server for integration setup.`);try{return await t()}finally{await resumeDevelopmentRuntimeArtifacts({serverUrl:e.serverUrl,silent:!0})}})()),a?.headers===void 0?await o(f):await o({...f,headers:a.headers})};if(s){let{loadDevelopmentEnvironmentFiles:t}=await import(`#cli/dev/environment.js`);if(t(c),e.log(`↗ ${p?`local`:`remote`} mode targeting ${x.info(new URL(s).host)}`),f===`headless`){e.log(renderCliTaggedLine(x,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`}));return}e.log(``);let n=installShutdownSignal({exitAfterMs:FORCED_EXIT_BACKSTOP_MS});try{await runInteractiveUi({serverUrl:s},void 0,n)}finally{n.dispose()}return}f===`tui`&&e.log(``);let m=f===`tui`?startCliLiveRow(e):void 0,h=createDevBootProgressReporter(m);m?.update(`Building your agent`);let g,_,closeServer=()=>g===void 0?Promise.resolve():(_??=g.close(),_.catch(()=>void 0),_),v=installShutdownSignal({exitAfterMs:FORCED_EXIT_BACKSTOP_MS,onStop:()=>{closeServer()}});try{g=(i.startHost??await loadStartHost())(c,{existing:f===`tui`?`attach-if-unconfigured`:`reject`,host:n.host,onBootProgress:h,port:n.port});let t=(await Promise.race([g.start().then(e=>({handle:e})),v.stopped.then(()=>({handle:void 0}))])).handle;if(t===void 0)return;if(f!==`tui`&&e.log(renderCliTaggedLine(x,{message:`server listening at ${t.url}`,tag:`dev`,tone:`success`})),f===`headless`){n.ui!==!1&&!u&&e.log(renderCliTaggedLine(x,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`})),await waitForServerOrStop(g,v);return}await waitForUiOrServer({handle:t,lifecycle:v,server:g,runUi:async()=>await runInteractiveUi({appRoot:t.appRoot,serverUrl:t.url},h,v)})}finally{m?.stop(),await closeServer(),v.dispose()}});let C=b.command(`logs`).description("Inspect local `eve dev` diagnostic logs (.eve/logs).");return C.command(`show [logid]`,{isDefault:!0}).description(`Print a diagnostic log (the most recent when logid is omitted).`).option(`--dump`,`Prepend the log's environment dump (.dump sibling)`).option(`--events`,`Interleave session events from the local workflow store`).action(async(t,n)=>{let{runLogsShowCommand:r}=await import(`#cli/commands/logs.js`);await r(e,c,t,n)}),C.command(`ls`).description(`List diagnostic logs, most recent first.`).option(`--json`,`Output as JSON`).action(async t=>{let{runLogsListCommand:n}=await import(`#cli/commands/logs.js`);await n(e,c,t)}),b.command(`traces [trace]`).usage(`[options] [trace]
4
+ eve traces ls [options]`).description("Show a local `eve dev` trace (the most recent when trace is omitted).").action(async t=>{let{runTraceShowCommand:n}=await import(`#cli/commands/trace.js`);await n(e,c,t)}).command(`ls`).description(`List local traces, most recent first.`).option(`--json`,`Output as JSON`).action(async t=>{let{runTraceListCommand:n}=await import(`#cli/commands/trace.js`);await n(e,c,t)}),b.command(`info`).description(`Print resolved application information.`).option(`--json`,`Output as JSON`).action(async t=>{await(i.printApplicationInfo??await loadPrintApplicationInfo())(e,c,t)}),b.command(`eval`).description(`Run evals against an eve agent.`).argument(`[evalIds...]`,`Eval ids (or directory prefixes) to run (all discovered evals when omitted)`).option(`--url <url>`,`Remote agent URL (skip local host startup)`,parseDevelopmentServerUrl).option(`--tag <tag...>`,`Run only evals carrying a tag`).option(`--exclude-tag <tag...>`,`Skip evals carrying a tag`).option(`--strict`,`Fail the exit code when any score falls below its threshold`).option(`--list`,`Print discovered evals without running them`).option(`--timeout <ms>`,`Per-eval timeout in milliseconds`).option(`--max-concurrency <n>`,`Max concurrent eval executions`).option(`--json`,`Output results as JSON`).option(`--junit <path>`,`Write JUnit XML results to a file`).option(`--skip-report`,`Skip eval-defined reporters (e.g. Braintrust)`).option(`--verbose`,`Stream per-eval t.log lines to stdout`).action(async(t,n)=>{await(i.runEvalCommand??await loadRunEvalCommand())(t,n,e)}),b}async function runCli(e=process.argv.slice(2),t=console,n={}){let r=createCliProgram(t,n),a=e.length===0?[`dev`]:e;try{await r.parseAsync(a,{from:`user`})}catch(e){if(e instanceof CommanderError){if(e.exitCode===0)return;let r=await(n.isCodingAgentLaunch??isCodingAgentLaunch)();if(a[0]===`init`&&r){let{initAgentInstructions:e}=await import(`#cli/commands/agent-instructions.js`);t.log(e())}throw Error(e.message)}throw e}}export{resolveDevUiMode,resolveTuiDisplayOptions,runCli};
@@ -8,6 +8,8 @@ export declare const FORCED_EXIT_BACKSTOP_MS = 900;
8
8
  export interface CommandLifecycle {
9
9
  readonly signal: AbortSignal;
10
10
  readonly stopped: Promise<NodeJS.Signals | undefined>;
11
+ /** Temporarily gives SIGINT and SIGTERM to an inherited-stdio subprocess. */
12
+ withTerminalLease?<T>(task: () => Promise<T>): Promise<T>;
11
13
  requestStop(): void;
12
14
  dispose(): void;
13
15
  }
@@ -1 +1 @@
1
- const FORCED_EXIT_BACKSTOP_MS=900;function installShutdownSignal(e={}){let t=new AbortController,n=Promise.withResolvers(),r=!1,i=0,a,stop=i=>{r||(r=!0,e.onStop?.(),t.abort(i),n.resolve(i),e.exitAfterMs!==void 0&&(a=setTimeout(()=>process.exit(i===void 0?0:i===`SIGINT`?130:143),e.exitAfterMs)))},handleSignal=e=>{i+=1,i>1&&process.exit(e===`SIGINT`?130:143),stop(e)},onSigint=()=>handleSignal(`SIGINT`),onSigterm=()=>handleSignal(`SIGTERM`);return process.on(`SIGINT`,onSigint),process.on(`SIGTERM`,onSigterm),{signal:t.signal,stopped:n.promise,requestStop:()=>stop(),dispose(){a!==void 0&&clearTimeout(a),process.off(`SIGINT`,onSigint),process.off(`SIGTERM`,onSigterm)}}}async function waitForShutdownSignal(e){let t=installShutdownSignal();try{await Promise.race([t.stopped.then(()=>`signal`),e.wait?.().then(()=>`stopped`)??new Promise(()=>{})])===`signal`&&await e.close()}finally{t.dispose()}}export{FORCED_EXIT_BACKSTOP_MS,installShutdownSignal,waitForShutdownSignal};
1
+ const FORCED_EXIT_BACKSTOP_MS=900;function installShutdownSignal(e={}){let t=new AbortController,n=Promise.withResolvers(),r=!1,i=0,a=0,o,stop=i=>{r||(r=!0,e.onStop?.(),t.abort(i),n.resolve(i),e.exitAfterMs!==void 0&&(o=setTimeout(()=>process.exit(i===void 0?0:i===`SIGINT`?130:143),e.exitAfterMs)))},handleSignal=e=>{a>0||(i+=1,i>1&&process.exit(e===`SIGINT`?130:143),stop(e))},onSigint=()=>handleSignal(`SIGINT`),onSigterm=()=>handleSignal(`SIGTERM`);return process.on(`SIGINT`,onSigint),process.on(`SIGTERM`,onSigterm),{signal:t.signal,stopped:n.promise,async withTerminalLease(e){a+=1;try{return await e()}finally{--a}},requestStop:()=>stop(),dispose(){o!==void 0&&clearTimeout(o),process.off(`SIGINT`,onSigint),process.off(`SIGTERM`,onSigterm)}}}async function waitForShutdownSignal(e){let t=installShutdownSignal();try{await Promise.race([t.stopped.then(()=>`signal`),e.wait?.().then(()=>`stopped`)??new Promise(()=>{})])===`signal`&&await e.close()}finally{t.dispose()}}export{FORCED_EXIT_BACKSTOP_MS,installShutdownSignal,waitForShutdownSignal};
@@ -1,6 +1,6 @@
1
1
  import type { EveAgentReducer } from "#client/reducer.js";
2
2
  import type { ClientSession } from "#client/session.js";
3
- import type { HandleMessageStreamEvent } from "#protocol/message.js";
3
+ import type { MessageStreamEvent } from "#protocol/message.js";
4
4
  import type { ClientAuth, HeadersValue, SendTurnPayload, SessionState } from "#client/types.js";
5
5
  /**
6
6
  * Lifecycle state of an {@link EveAgentStore}: `ready` (idle), `submitted`
@@ -24,7 +24,7 @@ export type PrepareSend = (input: SendTurnPayload) => SendTurnPayload | Promise<
24
24
  export interface EveAgentStoreSnapshot<TData> {
25
25
  readonly data: TData;
26
26
  readonly error: Error | undefined;
27
- readonly events: readonly HandleMessageStreamEvent[];
27
+ readonly events: readonly MessageStreamEvent[];
28
28
  readonly session: SessionState;
29
29
  readonly status: EveAgentStoreStatus;
30
30
  }
@@ -37,7 +37,7 @@ export interface EveAgentStoreSnapshot<TData> {
37
37
  */
38
38
  export interface EveAgentStoreCallbacks<TData> {
39
39
  readonly onError?: (error: Error) => void;
40
- readonly onEvent?: (event: HandleMessageStreamEvent) => void;
40
+ readonly onEvent?: (event: MessageStreamEvent) => void;
41
41
  readonly onFinish?: (snapshot: EveAgentStoreSnapshot<TData>) => void;
42
42
  readonly onSessionChange?: (session: SessionState) => void;
43
43
  readonly prepareSend?: PrepareSend;
@@ -53,12 +53,15 @@ export interface EveAgentStoreCallbacks<TData> {
53
53
  * server confirms them. `host` defaults to `""`. `initialEvents` and
54
54
  * `initialSession` seed prior state on construction. Passing `session` makes
55
55
  * `reset()` reuse that external session rather than create a new one.
56
+ * `initialEvents` must be an ordered prefix of the same session's stream; its
57
+ * endpoint may overlap the cursor because repeated ids are applied once.
56
58
  */
57
59
  export interface EveAgentStoreInit<TData> {
58
60
  readonly auth?: ClientAuth;
59
61
  readonly headers?: HeadersValue;
60
62
  readonly host?: string;
61
- readonly initialEvents?: readonly HandleMessageStreamEvent[];
63
+ /** Ordered prefix of the session stream used to rehydrate projected state. */
64
+ readonly initialEvents?: readonly MessageStreamEvent[];
62
65
  readonly initialSession?: SessionState;
63
66
  readonly optimistic?: boolean;
64
67
  readonly reducer: EveAgentReducer<TData>;
@@ -1,2 +1,2 @@
1
- import{toError}from"#shared/errors.js";import{Client}from"#client/client.js";var EveAgentStore=class{#e;#t;#n;#r=new Set;#i;#a={};#o;#s;#c;#l=0;#u;#d;#f;#p;#m=`ready`;constructor(e){this.#e=e.session?void 0:()=>new Client({auth:e.auth,headers:e.headers,host:e.host??``}).session(e.initialSession),this.#c=[...e.initialEvents??[]],this.#d=[...this.#c],this.#t=e.optimistic??!0,this.#n=e.reducer,this.#f=e.session??this.#h(),this.#o=this.#E(this.#d),this.#p=this.#D()}get snapshot(){return this.#p}setCallbacks(e){this.#a=e}subscribe(e){return this.#r.add(e),()=>{this.#r.delete(e)}}async send(t){if(this.#m===`streaming`||this.#m===`submitted`)throw Error(`eve session is already processing a turn.`);let n=this.#g(),r=new AbortController;this.#i=r,this.#s=void 0,this.#m=`submitted`,this.#O();try{let e=await this.#a.prepareSend?.(t)??t;if(!this.#v(n))return;this.#y(e),this.#b(e),this.#O();let i=await this.#f.send({...e,signal:createAbortSignal(e.signal,r.signal)}),a=!1;for await(let e of i){if(!this.#v(n))return;a||(a=!0,this.#m=`streaming`),this.#c=[...this.#c,e],this.#x(e),this.#a.onEvent?.(e),this.#S(e),this.#O()}if(!this.#v(n))return;this.#m=this.#s===void 0?`ready`:`error`}catch(t){if(!this.#v(n))return;isAbortError(t)?(this.#m=`ready`,this.#C(toError(t))):(this.#s=toError(t),this.#m=`error`,this.#C(this.#s),this.#a.onError?.(this.#s))}finally{this.#v(n)&&(this.#i=void 0,this.#a.onSessionChange?.(this.#f.state),this.#O(),this.#a.onFinish?.(this.#p))}}stop(){this.#i?.abort()}reset(){this.#_(),this.stop(),this.#i=void 0,this.#f=this.#e?.()??this.#f,this.#c=[],this.#u=void 0,this.#d=[],this.#o=this.#n.initial(),this.#s=void 0,this.#m=`ready`,this.#a.onSessionChange?.(this.#f.state),this.#O()}#h(){if(!this.#e)throw Error(`Cannot create an owned eve session from an external session.`);return this.#e()}#g(){return this.#l+=1,this.#l}#_(){this.#l+=1}#v(e){return this.#l===e}#y(e){if(!this.#t||e.message===void 0)return;let t=createSubmissionId(),n={createdAt:Date.now(),id:t,message:summarizeUserContent(e.message)};this.#u=n,this.#w({data:{createdAt:n.createdAt,message:n.message,submissionId:n.id},type:`client.message.submitted`})}#b(e){e.inputResponses===void 0||e.inputResponses.length===0||this.#w({data:{createdAt:Date.now(),responses:e.inputResponses},type:`client.input.responded`})}#x(e){if(e.type===`message.received`&&this.#u!==void 0){let t=this.#u.id;this.#u=void 0,this.#T(e=>e.type===`client.message.submitted`&&e.data.submissionId===t,e);return}this.#w(e)}#S(e){let t=toTerminalStreamFailureError(e);t!==void 0&&(this.#m=`error`,this.#C(t),this.#s===void 0&&(this.#s=t,this.#a.onError?.(t)))}#C(e){let t=this.#u;t!==void 0&&(this.#u=void 0,this.#T(e=>e.type===`client.message.submitted`&&e.data.submissionId===t.id,{data:{createdAt:t.createdAt,error:{message:e.message},message:t.message,submissionId:t.id},type:`client.message.failed`}))}#w(e){this.#d=[...this.#d,e],this.#o=this.#n.reduce(this.#o,e)}#T(e,t){let n=!1;this.#d=this.#d.map(r=>!n&&e(r)?(n=!0,t):r),n||(this.#d=[...this.#d,t]),this.#o=this.#E(this.#d)}#E(e){let t=this.#n.initial();for(let n of e)t=this.#n.reduce(t,n);return t}#D(){return{data:this.#o,error:this.#s,events:this.#c,session:this.#f.state,status:this.#m}}#O(){this.#p=this.#D();for(let e of this.#r)e()}};let submissionSequence=0;function createSubmissionId(){let e=globalThis.crypto?.randomUUID;return e===void 0?(submissionSequence+=1,`submission_${submissionSequence.toString()}`):e.call(globalThis.crypto)}function createAbortSignal(e,t){return e?AbortSignal.any([e,t]):t}function summarizeUserContent(e){if(typeof e==`string`)return e;let t=[];for(let n of e){if(n.type===`text`){t.push(n.text);continue}n.type===`file`&&t.push(n.filename?`[file: ${n.filename}]`:`[file]`)}return t.join(`
1
+ import{toError}from"#shared/errors.js";import{createEventDeduper}from"#protocol/event-dedupe.js";import{Client}from"#client/client.js";var EveAgentStore=class{#e;#t;#n;#r=new Set;#i=createEventDeduper();#a;#o={};#s;#c;#l;#u=0;#d;#f;#p;#m;#h=`ready`;constructor(e){this.#e=e.session?void 0:()=>new Client({auth:e.auth,headers:e.headers,host:e.host??``}).session(e.initialSession);let t=[];for(let n of e.initialEvents??[])this.#i.admit(n)&&t.push(n);this.#l=t,this.#f=[...this.#l],this.#t=e.optimistic??!0,this.#n=e.reducer,this.#p=e.session??this.#g(),this.#s=this.#D(this.#f),this.#m=this.#O()}get snapshot(){return this.#m}setCallbacks(e){this.#o=e}subscribe(e){return this.#r.add(e),()=>{this.#r.delete(e)}}async send(t){if(this.#h===`streaming`||this.#h===`submitted`)throw Error(`eve session is already processing a turn.`);let n=this.#_(),r=new AbortController;this.#a=r,this.#c=void 0,this.#h=`submitted`,this.#k();try{let e=await this.#o.prepareSend?.(t)??t;if(!this.#y(n))return;this.#b(e),this.#x(e),this.#k();let i=await this.#p.send({...e,signal:createAbortSignal(e.signal,r.signal)}),a=!1;for await(let e of i){if(!this.#y(n))return;a||(a=!0,this.#h=`streaming`),this.#i.admit(e)&&(this.#l=[...this.#l,e],this.#S(e),this.#o.onEvent?.(e),this.#C(e),this.#k())}if(!this.#y(n))return;this.#h=this.#c===void 0?`ready`:`error`}catch(t){if(!this.#y(n))return;isAbortError(t)?(this.#h=`ready`,this.#w(toError(t))):(this.#c=toError(t),this.#h=`error`,this.#w(this.#c),this.#o.onError?.(this.#c))}finally{this.#y(n)&&(this.#a=void 0,this.#o.onSessionChange?.(this.#p.state),this.#k(),this.#o.onFinish?.(this.#m))}}stop(){this.#a?.abort()}reset(){this.#v(),this.stop(),this.#a=void 0,this.#p=this.#e?.()??this.#p,this.#l=[],this.#i=createEventDeduper(),this.#d=void 0,this.#f=[],this.#s=this.#n.initial(),this.#c=void 0,this.#h=`ready`,this.#o.onSessionChange?.(this.#p.state),this.#k()}#g(){if(!this.#e)throw Error(`Cannot create an owned eve session from an external session.`);return this.#e()}#_(){return this.#u+=1,this.#u}#v(){this.#u+=1}#y(e){return this.#u===e}#b(e){if(!this.#t||e.message===void 0)return;let t=createSubmissionId(),n={createdAt:Date.now(),id:t,message:summarizeUserContent(e.message)};this.#d=n,this.#T({data:{createdAt:n.createdAt,message:n.message,submissionId:n.id},type:`client.message.submitted`})}#x(e){e.inputResponses===void 0||e.inputResponses.length===0||this.#T({data:{createdAt:Date.now(),responses:e.inputResponses},type:`client.input.responded`})}#S(e){if(e.type===`message.received`&&this.#d!==void 0){let t=this.#d.id;this.#d=void 0,this.#E(e=>e.type===`client.message.submitted`&&e.data.submissionId===t,e);return}this.#T(e)}#C(e){let t=toTerminalStreamFailureError(e);t!==void 0&&(this.#h=`error`,this.#w(t),this.#c===void 0&&(this.#c=t,this.#o.onError?.(t)))}#w(e){let t=this.#d;t!==void 0&&(this.#d=void 0,this.#E(e=>e.type===`client.message.submitted`&&e.data.submissionId===t.id,{data:{createdAt:t.createdAt,error:{message:e.message},message:t.message,submissionId:t.id},type:`client.message.failed`}))}#T(e){this.#f=[...this.#f,e],this.#s=this.#n.reduce(this.#s,e)}#E(e,t){let n=!1;this.#f=this.#f.map(r=>!n&&e(r)?(n=!0,t):r),n||(this.#f=[...this.#f,t]),this.#s=this.#D(this.#f)}#D(e){let t=this.#n.initial();for(let n of e)t=this.#n.reduce(t,n);return t}#O(){return{data:this.#s,error:this.#c,events:this.#l,session:this.#p.state,status:this.#h}}#k(){this.#m=this.#O();for(let e of this.#r)e()}};let submissionSequence=0;function createSubmissionId(){let e=globalThis.crypto?.randomUUID;return e===void 0?(submissionSequence+=1,`submission_${submissionSequence.toString()}`):e.call(globalThis.crypto)}function createAbortSignal(e,t){return e?AbortSignal.any([e,t]):t}function summarizeUserContent(e){if(typeof e==`string`)return e;let t=[];for(let n of e){if(n.type===`text`){t.push(n.text);continue}n.type===`file`&&t.push(n.filename?`[file: ${n.filename}]`:`[file]`)}return t.join(`
2
2
  `)}function isAbortError(e){return e instanceof Error&&e.name===`AbortError`}function toTerminalStreamFailureError(e){if(e.type!==`session.failed`)return;let t=Error(e.data.message);return t.name=e.data.code,t}export{EveAgentStore};
@@ -10,8 +10,8 @@ export type { EveAgentStoreCallbacks, EveAgentStoreInit, EveAgentStoreSnapshot,
10
10
  export type { AgentInfoEntry, AgentInfoChannelEntry, AgentInfoChannels, AgentInfoConnectionEntry, AgentInfoDynamicResolverEntry, AgentInfoFrameworkChannelEntry, AgentInfoFrameworkToolEntry, AgentInfoHookEntry, AgentInfoInstructions, AgentInfoInstructionsEntry, AgentInfoResult, AgentInfoSandboxEntry, AgentInfoScheduleEntry, AgentInfoSkillEntry, AgentInfoSource, AgentInfoSubagentEntry, AgentInfoToolEntry, AgentInfoTools, CancelSessionResult, ClientAuth, ClientOptions, ClientRedirectPolicy, HeadersValue, HealthResult, MessageResult, ResetResult, ResolvedStreamReconnectPolicy, SendTurnInput, SendTurnPayload, SessionState, StreamOptions, StreamReconnectPolicy, StreamReconnectRetryPolicy, TokenValue, } from "#client/types.js";
11
11
  export type { EveAgentReducer, EveAgentReducerEvent, ClientInputRespondedEvent, ClientMessageFailedEvent, ClientMessageSubmittedEvent, } from "#client/reducer.js";
12
12
  export type { EveAuthorizationChallenge, EveAuthorizationOutcome, EveAuthorizationPart, EveMessageData, EveDynamicToolPart, EveMessageInputRequest, EveMessage, EveMessageMetadata, EveMessagePart, EveMessageToolMetadata, } from "#client/message-reducer.js";
13
- export type { ActionResultStreamEvent, ActionsRequestedStreamEvent, AssistantStepFinishReason, AuthorizationOutcome, CompactionCompletedStreamEvent, CompactionRequestedStreamEvent, AuthorizationCompletedStreamEvent, ConnectionAuthorizationOutcome, AuthorizationRequiredStreamEvent, HandleMessageStreamEvent, InputRequestedStreamEvent, MessageAppendedStreamEvent, MessageCompletedStreamEvent, MessageReceivedPart, MessageReceivedStreamEvent, ReasoningAppendedStreamEvent, ReasoningCompletedStreamEvent, ResultCompletedStreamEvent, SessionCompletedStreamEvent, SessionFailedStreamEvent, SessionStartedStreamEvent, SessionWaitingStreamEvent, StepCompletedStreamEvent, StepFailedStreamEvent, StepStartedStreamEvent, SubagentCalledStreamEvent, SubagentChildEventStreamEvent, SubagentCompletedStreamEvent, SubagentStartedStreamEvent, TurnCancelledStreamEvent, TurnCompletedStreamEvent, TurnFailedStreamEvent, TurnStartedStreamEvent, TurnFailureStreamEvent, } from "#protocol/message.js";
13
+ export type { ActionResultStreamEvent, ActionsRequestedStreamEvent, AssistantStepFinishReason, AuthorizationOutcome, CompactionCompletedStreamEvent, CompactionRequestedStreamEvent, AuthorizationCompletedStreamEvent, ConnectionAuthorizationOutcome, AuthorizationRequiredStreamEvent, HandleMessageStreamEvent, MessageStreamEventMeta, InputRequestedStreamEvent, MessageAppendedStreamEvent, MessageCompletedStreamEvent, MessageReceivedPart, MessageReceivedStreamEvent, ReasoningAppendedStreamEvent, ReasoningCompletedStreamEvent, ResultCompletedStreamEvent, SessionCompletedStreamEvent, SessionFailedStreamEvent, SessionStartedStreamEvent, SessionWaitingStreamEvent, MessageStreamEvent, StepCompletedStreamEvent, StepFailedStreamEvent, StepStartedStreamEvent, SubagentCalledStreamEvent, SubagentChildEventStreamEvent, SubagentCompletedStreamEvent, SubagentStartedStreamEvent, TurnCancelledStreamEvent, TurnCompletedStreamEvent, TurnFailedStreamEvent, TurnStartedStreamEvent, TurnFailureStreamEvent, } from "#protocol/message.js";
14
14
  export { isCurrentTurnBoundaryEvent, isTurnFailureEvent } from "#protocol/message.js";
15
- export type { InputOption, InputRequest, InputResponse } from "#runtime/input/types.js";
16
- export { inputOptionSchema, inputRequestSchema, inputResponseSchema, isInputRequest, isInputResponse, } from "#runtime/input/types.js";
15
+ export type { InputOption, InputRequest, InputRequestKind, InputResponse, } from "#runtime/input/types.js";
16
+ export { inputOptionSchema, inputRequestKindSchema, inputRequestSchema, inputResponseSchema, isInputRequest, isInputResponse, } from "#runtime/input/types.js";
17
17
  export { resolveTextToResponse, resolveTextToResponses } from "#channel/resolve-text.js";
@@ -1 +1 @@
1
- import{isCurrentTurnBoundaryEvent,isTurnFailureEvent}from"#protocol/message.js";import{AgentInfoResponseError}from"#client/agent-info-error.js";import{ClientError}from"#client/client-error.js";import{ClientSession}from"#client/session.js";import{Client}from"#client/client.js";import{EveAgentStore}from"#client/eve-agent-store.js";import{defaultMessageReducer}from"#client/message-reducer.js";import{createDataUrlFilePart,createTextWithFileContent}from"#client/file-parts.js";import{MessageResponse}from"#client/message-response.js";import{inputOptionSchema,inputRequestSchema,inputResponseSchema,isInputRequest,isInputResponse}from"#runtime/input/types.js";import{resolveTextToResponse,resolveTextToResponses}from"#channel/resolve-text.js";export{AgentInfoResponseError,Client,ClientError,ClientSession,EveAgentStore,MessageResponse,createDataUrlFilePart,createTextWithFileContent,defaultMessageReducer,inputOptionSchema,inputRequestSchema,inputResponseSchema,isCurrentTurnBoundaryEvent,isInputRequest,isInputResponse,isTurnFailureEvent,resolveTextToResponse,resolveTextToResponses};
1
+ import{isCurrentTurnBoundaryEvent,isTurnFailureEvent}from"#protocol/message.js";import{AgentInfoResponseError}from"#client/agent-info-error.js";import{ClientError}from"#client/client-error.js";import{ClientSession}from"#client/session.js";import{Client}from"#client/client.js";import{EveAgentStore}from"#client/eve-agent-store.js";import{defaultMessageReducer}from"#client/message-reducer.js";import{createDataUrlFilePart,createTextWithFileContent}from"#client/file-parts.js";import{MessageResponse}from"#client/message-response.js";import{inputOptionSchema,inputRequestKindSchema,inputRequestSchema,inputResponseSchema,isInputRequest,isInputResponse}from"#runtime/input/types.js";import{resolveTextToResponse,resolveTextToResponses}from"#channel/resolve-text.js";export{AgentInfoResponseError,Client,ClientError,ClientSession,EveAgentStore,MessageResponse,createDataUrlFilePart,createTextWithFileContent,defaultMessageReducer,inputOptionSchema,inputRequestKindSchema,inputRequestSchema,inputResponseSchema,isCurrentTurnBoundaryEvent,isInputRequest,isInputResponse,isTurnFailureEvent,resolveTextToResponse,resolveTextToResponses};
@@ -1 +1 @@
1
- function toMessageInputRequest(e){return{allowFreeform:e.allowFreeform,display:e.display,options:e.options,prompt:e.prompt,requestId:e.requestId}}function createToolMetadata(e,t){return{eve:{inputRequest:t?.inputRequest,kind:e.kind,name:e.name}}}function mergeToolMetadata(e,t){let n=t.eve?.kind??e?.eve?.kind??`unknown`,r=t.eve?.name??e?.eve?.name??`unknown`;return{eve:{...e?.eve,...t.eve,inputRequest:t.eve?.inputRequest??e?.eve?.inputRequest,inputResponse:t.eve?.inputResponse??e?.eve?.inputResponse,kind:n,name:r}}}function approvedApproval(e){if(e?.approval?.id)return{approved:!0,id:e.approval.id,isAutomatic:e.approval.isAutomatic,reason:e.approval.reason}}function normalizeActionRequest(e){switch(e.kind){case`load-skill`:return{kind:`load-skill`,name:`load_skill`,toolName:`eve:load-skill`};case`tool-call`:return{kind:`tool-call`,name:e.toolName,toolName:e.toolName};case`subagent-call`:return{kind:`subagent-call`,name:e.subagentName,toolName:`eve:subagent:${e.subagentName}`};case`remote-agent-call`:return{kind:`subagent-call`,name:e.remoteAgentName,toolName:`eve:subagent:${e.remoteAgentName}`}}}function normalizeActionResult(e){switch(e.kind){case`load-skill-result`:return{kind:`load-skill`,name:e.name??`load_skill`,toolName:`eve:load-skill`};case`tool-result`:return{kind:`tool-call`,name:e.toolName,toolName:e.toolName};case`subagent-result`:return{kind:`subagent-call`,name:e.subagentName,toolName:`eve:subagent:${e.subagentName}`}}}function stringifyUnknown(e){if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return`Action failed.`}}export{approvedApproval,createToolMetadata,mergeToolMetadata,normalizeActionRequest,normalizeActionResult,stringifyUnknown,toMessageInputRequest};
1
+ function toMessageInputRequest(e){return{allowFreeform:e.allowFreeform,display:e.display,kind:e.kind,options:e.options,prompt:e.prompt,requestId:e.requestId}}function createToolMetadata(e,t){return{eve:{inputRequest:t?.inputRequest,kind:e.kind,name:e.name}}}function mergeToolMetadata(e,t){let n=t.eve?.kind??e?.eve?.kind??`unknown`,r=t.eve?.name??e?.eve?.name??`unknown`;return{eve:{...e?.eve,...t.eve,inputRequest:t.eve?.inputRequest??e?.eve?.inputRequest,inputResponse:t.eve?.inputResponse??e?.eve?.inputResponse,kind:n,name:r}}}function approvedApproval(e){if(e?.approval?.id)return{approved:!0,id:e.approval.id,isAutomatic:e.approval.isAutomatic,reason:e.approval.reason}}function normalizeActionRequest(e){switch(e.kind){case`load-skill`:return{kind:`load-skill`,name:`load_skill`,toolName:`eve:load-skill`};case`tool-call`:return{kind:`tool-call`,name:e.toolName,toolName:e.toolName};case`subagent-call`:return{kind:`subagent-call`,name:e.subagentName,toolName:`eve:subagent:${e.subagentName}`};case`remote-agent-call`:return{kind:`subagent-call`,name:e.remoteAgentName,toolName:`eve:subagent:${e.remoteAgentName}`}}}function normalizeActionResult(e){switch(e.kind){case`load-skill-result`:return{kind:`load-skill`,name:e.name??`load_skill`,toolName:`eve:load-skill`};case`tool-result`:return{kind:`tool-call`,name:e.toolName,toolName:e.toolName};case`subagent-result`:return{kind:`subagent-call`,name:e.subagentName,toolName:`eve:subagent:${e.subagentName}`}}}function stringifyUnknown(e){if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return`Action failed.`}}export{approvedApproval,createToolMetadata,mergeToolMetadata,normalizeActionRequest,normalizeActionResult,stringifyUnknown,toMessageInputRequest};
@@ -1,4 +1,4 @@
1
- import type { InputResponse } from "#runtime/input/types.js";
1
+ import type { InputRequest, InputResponse } from "#runtime/input/types.js";
2
2
  import type { AuthorizationOutcome } from "#protocol/message.js";
3
3
  /**
4
4
  * UIMessage-compatible eve message projection for chat and agent UIs.
@@ -204,12 +204,14 @@ export interface EveMessageToolMetadata {
204
204
  * is the question, `display` selects the control (`"confirmation"`, `"select"`,
205
205
  * or `"text"`), `options` lists selectable choices (each with a `label` and
206
206
  * optional `style`), and `allowFreeform` permits a typed response alongside the
207
- * options. `requestId` is the stable identifier the client returns in the
208
- * responding {@link InputResponse}.
207
+ * options. `kind` identifies the framework-owned request source. `requestId`
208
+ * is the stable identifier the client returns in the responding
209
+ * {@link InputResponse}.
209
210
  */
210
211
  export interface EveMessageInputRequest {
211
212
  readonly allowFreeform?: boolean;
212
213
  readonly display?: "confirmation" | "select" | "text";
214
+ readonly kind: InputRequest["kind"];
213
215
  readonly options?: readonly {
214
216
  readonly description?: string;
215
217
  readonly id: string;
@@ -1,11 +1,11 @@
1
- import type { HandleMessageStreamEvent } from "#protocol/message.js";
1
+ import type { MessageStreamEvent } from "#protocol/message.js";
2
2
  import type { MessageResult } from "#client/types.js";
3
3
  /**
4
4
  * Internal configuration passed to construct a {@link MessageResponse}.
5
5
  */
6
6
  interface MessageResponseInput {
7
7
  readonly continuationToken?: string;
8
- readonly createStream: () => AsyncGenerator<HandleMessageStreamEvent>;
8
+ readonly createStream: () => AsyncGenerator<MessageStreamEvent>;
9
9
  readonly sessionId: string;
10
10
  }
11
11
  /**
@@ -15,7 +15,7 @@ interface MessageResponseInput {
15
15
  * token) as soon as the POST completes. Collect the event stream via
16
16
  * {@link result} or iterate it with `for await...of`.
17
17
  */
18
- export declare class MessageResponse<TOutput = unknown> implements AsyncIterable<HandleMessageStreamEvent> {
18
+ export declare class MessageResponse<TOutput = unknown> implements AsyncIterable<MessageStreamEvent> {
19
19
  #private;
20
20
  /**
21
21
  * Continuation token returned by the server for follow-up messages.
@@ -37,6 +37,6 @@ export declare class MessageResponse<TOutput = unknown> implements AsyncIterable
37
37
  *
38
38
  * Each response can only be consumed once.
39
39
  */
40
- [Symbol.asyncIterator](): AsyncIterator<HandleMessageStreamEvent>;
40
+ [Symbol.asyncIterator](): AsyncIterator<MessageStreamEvent>;
41
41
  }
42
42
  export {};
@@ -1,4 +1,4 @@
1
- import type { HandleMessageStreamEvent } from "#protocol/message.js";
1
+ import type { MessageStreamEvent } from "#protocol/message.js";
2
2
  /**
3
3
  * Returns true when an error looks like a stream socket disconnection that
4
4
  * can be recovered via reconnection.
@@ -7,10 +7,10 @@ export declare function isStreamDisconnectError(error: unknown): boolean;
7
7
  /**
8
8
  * Reads newline-delimited JSON events from a `ReadableStream<Uint8Array>`.
9
9
  *
10
- * Yields one parsed {@link HandleMessageStreamEvent} per complete NDJSON line.
10
+ * Yields one parsed {@link MessageStreamEvent} per complete NDJSON line.
11
11
  * Handles partial lines across chunks via an internal buffer.
12
12
  *
13
13
  * All read errors — including socket disconnections — propagate to the caller.
14
14
  * Use {@link isStreamDisconnectError} to classify them.
15
15
  */
16
- export declare function readNdjsonStream(body: ReadableStream<Uint8Array>): AsyncGenerator<HandleMessageStreamEvent>;
16
+ export declare function readNdjsonStream(body: ReadableStream<Uint8Array>): AsyncGenerator<MessageStreamEvent>;
@@ -1,4 +1,4 @@
1
- import type { HandleMessageStreamEvent } from "#protocol/message.js";
1
+ import type { MessageStreamEvent } from "#protocol/message.js";
2
2
  import type { ClientRedirectPolicy, StreamReconnectPolicy } from "#client/types.js";
3
3
  interface RetryPolicy {
4
4
  readonly baseDelayMs: number;
@@ -41,7 +41,7 @@ interface OpenStreamInput extends FollowStreamInput {
41
41
  * yields events until the cursor passes that tail, reconnecting as needed,
42
42
  * then returns instead of following.
43
43
  */
44
- export declare function followStreamIterable(input: FollowStreamInput): AsyncGenerator<HandleMessageStreamEvent>;
44
+ export declare function followStreamIterable(input: FollowStreamInput): AsyncGenerator<MessageStreamEvent>;
45
45
  /** An opened connection: the response body plus the tail index from the response header, if any. */
46
46
  interface OpenedStream {
47
47
  readonly body: ReadableStream<Uint8Array>;
@@ -1,5 +1,5 @@
1
- import type { HandleMessageStreamEvent } from "#protocol/message.js";
1
+ import type { UnstampedMessageStreamEvent } from "#protocol/message.js";
2
2
  /**
3
3
  * Extracts the most recent finalized structured result from a turn event list.
4
4
  */
5
- export declare function extractCompletedResult<TOutput>(events: readonly HandleMessageStreamEvent[]): TOutput | undefined;
5
+ export declare function extractCompletedResult<TOutput>(events: readonly UnstampedMessageStreamEvent[]): TOutput | undefined;
@@ -1,4 +1,4 @@
1
- import type { HandleMessageStreamEvent } from "#protocol/message.js";
1
+ import type { MessageStreamEvent } from "#protocol/message.js";
2
2
  import type { InputResponse } from "#runtime/input/types.js";
3
3
  /**
4
4
  * Client-side reducer event emitted before eve confirms a submitted user
@@ -47,7 +47,7 @@ export interface ClientInputRespondedEvent {
47
47
  * events are projection-only events created by client state machines for local
48
48
  * UI state such as optimistic user messages and submitted HITL responses.
49
49
  */
50
- export type EveAgentReducerEvent = ClientInputRespondedEvent | ClientMessageFailedEvent | ClientMessageSubmittedEvent | HandleMessageStreamEvent;
50
+ export type EveAgentReducerEvent = ClientInputRespondedEvent | ClientMessageFailedEvent | ClientMessageSubmittedEvent | MessageStreamEvent;
51
51
  /**
52
52
  * Projects eve stream events into accumulated consumer data.
53
53
  */
@@ -1,4 +1,4 @@
1
- import type { AuthorizationRequiredStreamEvent, HandleMessageStreamEvent, TurnFailureStreamEvent } from "#protocol/message.js";
1
+ import type { AuthorizationRequiredStreamEvent, TurnFailureStreamEvent, UnstampedMessageStreamEvent } from "#protocol/message.js";
2
2
  import type { SessionState } from "#client/types.js";
3
3
  import type { InputRequest } from "#runtime/input/types.js";
4
4
  /**
@@ -15,7 +15,7 @@ export declare function createInitialSessionState(): SessionState;
15
15
  */
16
16
  export declare function advanceSession(input: {
17
17
  readonly continuationToken?: string;
18
- readonly events: readonly HandleMessageStreamEvent[];
18
+ readonly events: readonly UnstampedMessageStreamEvent[];
19
19
  readonly preserveCompletedSessions?: boolean;
20
20
  readonly sessionId: string;
21
21
  readonly session: SessionState;
@@ -29,7 +29,7 @@ export interface PendingAuthorization {
29
29
  }
30
30
  /** Canonical projection of the lifecycle state represented by one turn's events. */
31
31
  export interface TurnEventSummary {
32
- readonly boundary: HandleMessageStreamEvent | undefined;
32
+ readonly boundary: UnstampedMessageStreamEvent | undefined;
33
33
  readonly failure: TurnFailureStreamEvent | undefined;
34
34
  readonly inputRequests: readonly InputRequest[];
35
35
  readonly message: string | undefined;
@@ -37,6 +37,6 @@ export interface TurnEventSummary {
37
37
  readonly status: "completed" | "failed" | "waiting";
38
38
  }
39
39
  /** Reduces one turn's protocol events into their client-facing lifecycle state. */
40
- export declare function summarizeTurnEvents(events: readonly HandleMessageStreamEvent[]): TurnEventSummary;
40
+ export declare function summarizeTurnEvents(events: readonly UnstampedMessageStreamEvent[]): TurnEventSummary;
41
41
  /** Collects one segment of an event stream through its current-turn boundary. */
42
- export declare function collectTurnEvents(stream: AsyncIterable<HandleMessageStreamEvent>): Promise<readonly HandleMessageStreamEvent[]>;
42
+ export declare function collectTurnEvents(stream: AsyncIterable<UnstampedMessageStreamEvent>): Promise<readonly UnstampedMessageStreamEvent[]>;
@@ -1,4 +1,4 @@
1
- import type { HandleMessageStreamEvent } from "#protocol/message.js";
1
+ import type { MessageStreamEvent } from "#protocol/message.js";
2
2
  import { MessageResponse } from "#client/message-response.js";
3
3
  import type { CancelSessionResult, ClientRedirectPolicy, ResetResult, SendTurnInput, SessionState, StreamOptions } from "#client/types.js";
4
4
  /**
@@ -79,6 +79,6 @@ export declare class ClientSession {
79
79
  * @throws {Error} If the session has no session ID (no message has been sent
80
80
  * yet), or if `follow: false` is combined with a negative `startIndex`.
81
81
  */
82
- stream(options?: StreamOptions): AsyncIterable<HandleMessageStreamEvent>;
82
+ stream(options?: StreamOptions): AsyncIterable<MessageStreamEvent>;
83
83
  }
84
84
  export {};
@@ -1,6 +1,6 @@
1
1
  import type { UserContent } from "ai";
2
2
  import type { StandardJSONSchemaV1 } from "#compiled/@standard-schema/spec/index.js";
3
- import type { HandleMessageStreamEvent } from "#protocol/message.js";
3
+ import type { MessageStreamEvent } from "#protocol/message.js";
4
4
  import type { CancelTurnStatus } from "#protocol/cancel-turn.js";
5
5
  import type { ResetStatus } from "#protocol/reset-session.js";
6
6
  import type { InputRequest, InputResponse } from "#runtime/input/types.js";
@@ -217,7 +217,7 @@ export interface MessageResult<TOutput = unknown> {
217
217
  /**
218
218
  * All events received during this turn.
219
219
  */
220
- readonly events: HandleMessageStreamEvent[];
220
+ readonly events: MessageStreamEvent[];
221
221
  /**
222
222
  * HITL input requests emitted during this turn.
223
223
  */
@@ -32,14 +32,14 @@
32
32
  "@vercel/oidc": "3.8.0",
33
33
  "@vercel/otel": "2.1.3",
34
34
  "@vercel/sandbox": "2.8.0",
35
- "@workflow/core": "5.0.0-beta.37",
36
- "@workflow/errors": "5.0.0-beta.13",
35
+ "@workflow/core": "5.0.0-beta.38",
36
+ "@workflow/errors": "5.0.0-beta.14",
37
37
  "@workflow/serde": "5.0.0-beta.2",
38
38
  "@workflow/world": "5.0.0-beta.23",
39
- "@workflow/world-local": "5.0.0-beta.31",
40
- "@workflow/world-vercel": "5.0.0-beta.33",
39
+ "@workflow/world-local": "5.0.0-beta.32",
40
+ "@workflow/world-vercel": "5.0.0-beta.34",
41
41
  "zod": "4.4.3",
42
42
  "zod-validation-error": "5.0.0"
43
43
  },
44
- "scriptHash": "5dc33521af35100df1ef83b58d53cbec67de90d4ba05d5e5c72b928cdeb213f1"
44
+ "scriptHash": "29a1968ff7313d674cfe2e39d93daf6b5a526f8803ab44faf27ddf0a73707d48"
45
45
  }
@@ -1,2 +1,2 @@
1
- import{An as e,Cn as t,E as n,H as r,O as i,On as a,Rn as o,Tn as s,U as c,jn as l,kn as u,pn as d,v as f,wn as p,xn as m}from"../../_chunks/workflow/wait-until-De9yESQN.js";import{i as h,u as g}from"../../_chunks/workflow/dist-BeQ_csYA.js";import{a as _,i as v,r as y,t as b}from"../../_chunks/workflow/attribute-changes-DeZc2RZz.js";import"../../_chunks/workflow/dist-WjtNsOyf.js";import{n as x}from"../../_chunks/workflow/resume-hook-ip1hbn1b.js";import{t as S}from"../../_chunks/workflow/sleep-BjrUxUcs.js";function C(e){v(`createHook()`,`https://workflow-sdk.dev/docs/api-reference/workflow/create-hook`,C)}function w(e){v(`createWebhook()`,`https://workflow-sdk.dev/docs/api-reference/workflow/create-webhook`,w)}function T({schema:e}={}){function t(e){v(`defineHook().create()`,`https://workflow-sdk.dev/docs/api-reference/workflow/define-hook`,t)}return{create:t,async resume(t,n){if(!e?.[`~standard`])return await x(t,n);let r=e[`~standard`].validate(n);if(r instanceof Promise&&(r=await r),r.issues){let e=r.issues.map(e=>{let t=e.path?.map(e=>String(typeof e==`object`&&e?e.key:e)).join(`.`);return t?` at "${t}": ${e.message}`:` ${e.message}`});throw Error(`Hook payload did not match the defined schema:\n${e.join(`
1
+ import{An as e,Cn as t,E as n,H as r,O as i,On as a,Rn as o,Tn as s,U as c,jn as l,kn as u,pn as d,v as f,wn as p,xn as m}from"../../_chunks/workflow/wait-until-z48sPUjU.js";import{i as h,u as g}from"../../_chunks/workflow/dist-BeQ_csYA.js";import{a as _,i as v,r as y,t as b}from"../../_chunks/workflow/attribute-changes-1LmTKuTT.js";import"../../_chunks/workflow/dist-WjtNsOyf.js";import{n as x}from"../../_chunks/workflow/resume-hook-D1_5NCZ6.js";import{t as S}from"../../_chunks/workflow/sleep-De802yfX.js";function C(e){v(`createHook()`,`https://workflow-sdk.dev/docs/api-reference/workflow/create-hook`,C)}function w(e){v(`createWebhook()`,`https://workflow-sdk.dev/docs/api-reference/workflow/create-webhook`,w)}function T({schema:e}={}){function t(e){v(`defineHook().create()`,`https://workflow-sdk.dev/docs/api-reference/workflow/define-hook`,t)}return{create:t,async resume(t,n){if(!e?.[`~standard`])return await x(t,n);let r=e[`~standard`].validate(n);if(r instanceof Promise&&(r=await r),r.issues){let e=r.issues.map(e=>{let t=e.path?.map(e=>String(typeof e==`object`&&e?e.key:e)).join(`.`);return t?` at "${t}": ${e.message}`:` ${e.message}`});throw Error(`Hook payload did not match the defined schema:\n${e.join(`
2
2
  `)}`)}return await x(t,r.value)}}}async function E(e,t={}){let n=c.getStore(),r=n?.workflowMetadata?.workflowRunId;if(!r)throw new h(`setAttributes() must be called from a 'use workflow' or 'use step' function. Calling it from plain host code is not supported.`);let i=b(e,t);if(i.length!==0){if(n.runReadyBarrier)try{await n.runReadyBarrier}catch{}await(await m()).events.create(r,{eventType:`attr_set`,specVersion:5,eventData:{changes:i,writer:{type:`step`,stepId:n.stepMetadata.stepId,attempt:n.stepMetadata.attempt},...t.allowReservedAttributes===!0?{allowReservedAttributes:!0}:{}}})}}function D(){let e=c.getStore();return e||y(`getStepMetadata()`,`https://workflow-sdk.dev/docs/api-reference/workflow/get-step-metadata`,D),e.stepMetadata}function O(){let e=c.getStore();return e||_(`getWorkflowMetadata()`,`https://workflow-sdk.dev/docs/api-reference/workflow/get-workflow-metadata`,O),e.workflowMetadata}function k(m={}){let h=c.getStore();h||_(`getWritable()`,`https://workflow-sdk.dev/docs/api-reference/workflow/get-writable`,k);let{namespace:g}=m,v=h.workflowMetadata.workflowRunId,y=r(v,g),b=h.writables??=new Map,x=b.get(y);if(x)return x.writable;let S=i(n(globalThis,h.ops,v,h.encryptionKey,!0,h.runReadyBarrier),h.encryptionKey),C=new f(v,y,h.runReadyBarrier),w=t();return h.ops.push(w.promise),p(S.readable,C,w).catch(()=>{}),s(S.writable,w),Object.defineProperty(S.writable,a,{value:y,writable:!1}),Object.defineProperty(S.writable,l,{value:v,writable:!1}),h.workflowDeploymentId&&Object.defineProperty(S.writable,u,{value:h.workflowDeploymentId,writable:!1}),d(h.encryptionKey)&&Object.defineProperty(S.writable,e,{value:o(h.encryptionKey.keyPair.publicKey),writable:!1}),b.set(y,{writable:S.writable,state:w}),S.writable}export{h as FatalError,g as RetryableError,C as createHook,w as createWebhook,T as defineHook,D as getStepMetadata,O as getWorkflowMetadata,k as getWritable,E as setAttributes,S as sleep};
@@ -2,11 +2,11 @@
2
2
  * Utils used by the bundler when transforming code
3
3
  */
4
4
  import type { WorldCapabilities } from '#compiled/@workflow/world/index.js';
5
- import type { PayloadKey } from './serialization/encryption.js';
6
5
  import type { EventsConsumer } from './events-consumer.js';
7
6
  import type { QueueItem } from './global.js';
8
7
  import type { ReplayPayloadCache } from './replay-payload-cache.js';
9
8
  import type { Serializable } from './schemas.js';
9
+ import type { PayloadKey } from './serialization/encryption.js';
10
10
  export type StepFunction<Args extends Serializable[] = any[], Result extends Serializable | unknown = unknown> = ((...args: Args) => Promise<Result>) & {
11
11
  maxRetries?: number;
12
12
  stepId?: string;
@@ -171,6 +171,16 @@ export interface DeliveryBarrier {
171
171
  * To guarantee a later delivery gated on this one can never hang when this
172
172
  * delivery is abandoned (the workflow took a different branch or is
173
173
  * suspending and never observes it), the barrier auto-resolves at idle.
174
+ *
175
+ * INVARIANT required of every call site: a barrier that is ever `armed` must
176
+ * be paired with a delivery chain that runs unconditionally — attached when
177
+ * the event is consumed (waits, step results, waiting-consumer hook payloads,
178
+ * aborts), or by the `claim()` whose invocation is what arms it (buffered
179
+ * hook payloads). The idle check ({@link scheduleWhenIdle}) refuses to
180
+ * observe idle while an armed, self-resolving barrier is undelivered, and the
181
+ * safety net below is itself idle-gated — so an armed barrier with no
182
+ * unconditional chain would livelock every idle check in the run, including
183
+ * its own retirement.
174
184
  */
175
185
  export declare function registerDeliveryBarrier(ctx: WorkflowOrchestratorContext, eventIndex: number | undefined, kind: DeliveryKind, options?: {
176
186
  armed?: boolean;
@@ -178,10 +188,16 @@ export declare function registerDeliveryBarrier(ctx: WorkflowOrchestratorContext
178
188
  /**
179
189
  * Schedule a callback to fire only after all pending data deliveries
180
190
  * (step results, hook payloads) and async deserialization have completed.
181
- * Uses a polling loop: setTimeout(0) → check pendingDeliveries →
182
- * if > 0, wait for promiseQueue → repeat. This handles the multi-round
183
- * delivery pattern where each hook payload delivery cycle appends new
184
- * async work to the promiseQueue.
191
+ * Uses a polling loop: setTimeout(0) → check pendingDeliveries and the
192
+ * barrier registry → if anything is still in flight, wait for promiseQueue →
193
+ * repeat. This handles the multi-round delivery pattern where each hook
194
+ * payload delivery cycle appends new async work to the promiseQueue.
195
+ *
196
+ * "In flight" is two distinct windows, each with its own guard:
197
+ * `pendingDeliveries > 0` covers hydration inside the serial queue slots, and
198
+ * {@link hasParkedCommittedDelivery} covers the detached gap between a slot
199
+ * releasing that counter and the delivery's `resolve()` actually running —
200
+ * deliberately outside `pendingDeliveries` (see step.ts), and invisible to it.
185
201
  *
186
202
  * The initial `setTimeout(0)` macrotask is load-bearing and must NOT be
187
203
  * downgraded to a microtask (`queueMicrotask`/`Promise.resolve().then`).
@@ -1 +1 @@
1
- import{a as e,i as t,n,r,t as i}from"../../_chunks/workflow/private-Cre8uYkA.js";export{i as awaitEarlierDeliveries,n as getStepFunction,r as registerDeliveryBarrier,t as registerStepFunction,e as scheduleWhenIdle};
1
+ import{a as e,i as t,n,r,t as i}from"../../_chunks/workflow/private-BcwCGTV5.js";export{i as awaitEarlierDeliveries,n as getStepFunction,r as registerDeliveryBarrier,t as registerStepFunction,e as scheduleWhenIdle};