eve 0.6.0-beta.9 → 0.7.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 (587) hide show
  1. package/CHANGELOG.md +266 -0
  2. package/README.md +9 -6
  3. package/dist/docs/public/README.md +1 -1
  4. package/dist/docs/public/advanced/auth-and-route-protection.md +3 -1
  5. package/dist/docs/public/advanced/default-harness.md +2 -2
  6. package/dist/docs/public/advanced/dev-tui.md +9 -11
  7. package/dist/docs/public/advanced/instrumentation.md +1 -1
  8. package/dist/docs/public/advanced/meta.json +0 -1
  9. package/dist/docs/public/advanced/security-model.md +1 -1
  10. package/dist/docs/public/advanced/session-context.md +1 -1
  11. package/dist/docs/public/agent-config.md +1 -1
  12. package/dist/docs/public/channels/eve.mdx +1 -1
  13. package/dist/docs/public/channels/slack.mdx +14 -2
  14. package/dist/docs/public/connections.mdx +3 -1
  15. package/dist/docs/public/evals/assertions.mdx +108 -0
  16. package/dist/docs/public/evals/cases.mdx +143 -0
  17. package/dist/docs/public/evals/judge.mdx +94 -0
  18. package/dist/docs/public/evals/meta.json +4 -0
  19. package/dist/docs/public/evals/overview.mdx +118 -0
  20. package/dist/docs/public/evals/reporters.mdx +62 -0
  21. package/dist/docs/public/evals/running.mdx +63 -0
  22. package/dist/docs/public/evals/targets.mdx +54 -0
  23. package/dist/docs/public/frontend/nextjs.mdx +13 -4
  24. package/dist/docs/public/frontend/nuxt.mdx +4 -4
  25. package/dist/docs/public/frontend/sveltekit.mdx +2 -2
  26. package/dist/docs/public/getting-started.mdx +25 -13
  27. package/dist/docs/public/meta.json +1 -0
  28. package/dist/docs/public/reference/cli.md +34 -18
  29. package/dist/docs/public/reference/typescript-api.md +6 -2
  30. package/dist/docs/public/tools.mdx +0 -4
  31. package/dist/docs/public/tutorial/connect-a-warehouse.mdx +1 -1
  32. package/dist/docs/public/tutorial/first-agent.mdx +5 -2
  33. package/dist/src/chunks/{use-eve-agent-DCZbkLG7.js → use-eve-agent-DErQj5hs.js} +125 -37
  34. package/dist/src/chunks/{use-eve-agent-DoheC4_o.js → use-eve-agent-DoR8C4i6.js} +125 -37
  35. package/dist/src/cli/banner.d.ts +7 -0
  36. package/dist/src/cli/banner.js +1 -0
  37. package/dist/src/cli/commands/channel-add-conflicts.d.ts +1 -1
  38. package/dist/src/cli/commands/channels.d.ts +9 -6
  39. package/dist/src/cli/commands/channels.js +1 -1
  40. package/dist/src/cli/commands/deploy.d.ts +21 -0
  41. package/dist/src/cli/commands/deploy.js +1 -0
  42. package/dist/src/cli/commands/init-git.d.ts +15 -0
  43. package/dist/src/cli/commands/init-git.js +1 -0
  44. package/dist/src/cli/commands/init.d.ts +29 -0
  45. package/dist/src/cli/commands/init.js +1 -0
  46. package/dist/src/cli/commands/link.d.ts +21 -0
  47. package/dist/src/cli/commands/link.js +1 -0
  48. package/dist/src/cli/commands/preconditions.d.ts +7 -0
  49. package/dist/src/cli/commands/preconditions.js +1 -0
  50. package/dist/src/cli/commands/register-project-commands.d.ts +12 -0
  51. package/dist/src/cli/commands/register-project-commands.js +1 -0
  52. package/dist/src/cli/dev/tui/agent-header.d.ts +15 -9
  53. package/dist/src/cli/dev/tui/agent-header.js +1 -1
  54. package/dist/src/cli/dev/tui/blocks.d.ts +1 -1
  55. package/dist/src/cli/dev/tui/blocks.js +3 -2
  56. package/dist/src/cli/dev/tui/command-typeahead.d.ts +47 -0
  57. package/dist/src/cli/dev/tui/command-typeahead.js +1 -0
  58. package/dist/src/cli/dev/tui/dev-rebuild-status.d.ts +21 -0
  59. package/dist/src/cli/dev/tui/dev-rebuild-status.js +1 -0
  60. package/dist/src/cli/dev/tui/errors.d.ts +18 -0
  61. package/dist/src/cli/dev/tui/errors.js +1 -1
  62. package/dist/src/cli/dev/tui/prompt-command-handler.d.ts +14 -0
  63. package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -0
  64. package/dist/src/cli/dev/tui/prompt-commands.d.ts +54 -0
  65. package/dist/src/cli/dev/tui/prompt-commands.js +2 -0
  66. package/dist/src/cli/dev/tui/runner.d.ts +62 -5
  67. package/dist/src/cli/dev/tui/runner.js +1 -1
  68. package/dist/src/cli/dev/tui/setup-commands.d.ts +48 -0
  69. package/dist/src/cli/dev/tui/setup-commands.js +2 -0
  70. package/dist/src/cli/dev/tui/setup-flow.d.ts +35 -0
  71. package/dist/src/cli/dev/tui/setup-issues.d.ts +40 -0
  72. package/dist/src/cli/dev/tui/setup-issues.js +1 -0
  73. package/dist/src/cli/dev/tui/setup-panel.d.ts +103 -0
  74. package/dist/src/cli/dev/tui/setup-panel.js +1 -0
  75. package/dist/src/cli/dev/tui/status-line.d.ts +25 -0
  76. package/dist/src/cli/dev/tui/status-line.js +1 -0
  77. package/dist/src/cli/dev/tui/stream-format.d.ts +16 -1
  78. package/dist/src/cli/dev/tui/stream-format.js +1 -1
  79. package/dist/src/cli/dev/tui/terminal-renderer.d.ts +32 -3
  80. package/dist/src/cli/dev/tui/terminal-renderer.js +5 -2
  81. package/dist/src/cli/dev/tui/test/index.d.ts +3 -1
  82. package/dist/src/cli/dev/tui/test/index.js +1 -1
  83. package/dist/src/cli/dev/tui/test/mock-terminal.d.ts +1 -0
  84. package/dist/src/cli/dev/tui/test/mock-terminal.js +1 -1
  85. package/dist/src/cli/dev/tui/theme.d.ts +10 -0
  86. package/dist/src/cli/dev/tui/theme.js +1 -1
  87. package/dist/src/cli/dev/tui/tui-prompter.d.ts +20 -0
  88. package/dist/src/cli/dev/tui/tui-prompter.js +1 -0
  89. package/dist/src/cli/dev/tui/tui.d.ts +6 -8
  90. package/dist/src/cli/dev/tui/tui.js +1 -1
  91. package/dist/src/cli/dev/tui/types.d.ts +4 -3
  92. package/dist/src/cli/dev/tui/vercel-status.d.ts +47 -0
  93. package/dist/src/cli/dev/tui/vercel-status.js +1 -0
  94. package/dist/src/cli/run.d.ts +9 -18
  95. package/dist/src/cli/run.js +2 -2
  96. package/dist/src/client/client.d.ts +8 -0
  97. package/dist/src/client/client.js +1 -1
  98. package/dist/src/client/file-parts.d.ts +18 -0
  99. package/dist/src/client/file-parts.js +1 -0
  100. package/dist/src/client/index.d.ts +3 -2
  101. package/dist/src/client/index.js +1 -1
  102. package/dist/src/client/message-response.js +1 -1
  103. package/dist/src/client/open-stream.d.ts +6 -0
  104. package/dist/src/client/open-stream.js +1 -1
  105. package/dist/src/client/session-utils.d.ts +5 -0
  106. package/dist/src/client/session-utils.js +1 -1
  107. package/dist/src/client/session.js +1 -1
  108. package/dist/src/client/types.d.ts +9 -2
  109. package/dist/src/compiled/.vendor-stamp.json +8 -8
  110. package/dist/src/compiled/@ai-sdk/anthropic/index.d.ts +56 -31
  111. package/dist/src/compiled/@ai-sdk/anthropic/index.js +2 -2
  112. package/dist/src/compiled/@ai-sdk/google/index.js +1 -1
  113. package/dist/src/compiled/@ai-sdk/mcp/index.js +1 -1
  114. package/dist/src/compiled/@ai-sdk/openai/index.d.ts +16 -9
  115. package/dist/src/compiled/@ai-sdk/openai/index.js +2 -2
  116. package/dist/src/compiled/@ai-sdk/otel/index.js +2 -2
  117. package/dist/src/compiled/@vercel/sandbox/index.js +1 -1
  118. package/dist/src/compiled/@workflow/core/index.js +2 -2
  119. package/dist/src/compiled/@workflow/core/runtime/helpers.d.ts +4 -2
  120. package/dist/src/compiled/@workflow/core/runtime/wait-until.d.ts +18 -0
  121. package/dist/src/compiled/@workflow/core/runtime.d.ts +3 -1
  122. package/dist/src/compiled/@workflow/core/runtime.js +28 -28
  123. package/dist/src/compiled/@workflow/core/serialization.d.ts +41 -0
  124. package/dist/src/compiled/@workflow/core/util.d.ts +0 -5
  125. package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
  126. package/dist/src/compiled/@workflow/core/workflow.js +1 -1
  127. package/dist/src/compiled/@workflow/world/index.d.ts +2 -2
  128. package/dist/src/compiled/@workflow/world/queue.d.ts +28 -2
  129. package/dist/src/compiled/_chunks/workflow/{dist-gEXVSMPU.js → dist-CkMRLaRV.js} +1 -1
  130. package/dist/src/compiled/_chunks/workflow/functions-DuPjIvMH.js +1 -0
  131. package/dist/src/compiled/_chunks/workflow/resume-hook-CEAS3opc.js +12 -0
  132. package/dist/src/compiled/_chunks/workflow/sleep-Cup6vPoA.js +1 -0
  133. package/dist/src/compiled/_chunks/workflow/{symbols-BWCAoPHE.js → symbols-BUTtwS7j.js} +1 -1
  134. package/dist/src/compiled/just-bash/index.d.ts +4 -4
  135. package/dist/src/compiler/artifacts.js +1 -1
  136. package/dist/src/compiler/manifest.d.ts +8 -8
  137. package/dist/src/compiler/normalize-agent-config.js +1 -1
  138. package/dist/src/compiler/normalize-channel.d.ts +2 -1
  139. package/dist/src/compiler/normalize-channel.js +1 -1
  140. package/dist/src/compiler/normalize-connection.d.ts +2 -1
  141. package/dist/src/compiler/normalize-connection.js +1 -1
  142. package/dist/src/compiler/normalize-helpers.d.ts +5 -0
  143. package/dist/src/compiler/normalize-helpers.js +1 -1
  144. package/dist/src/compiler/normalize-instructions.d.ts +3 -2
  145. package/dist/src/compiler/normalize-instructions.js +1 -1
  146. package/dist/src/compiler/normalize-manifest.js +2 -2
  147. package/dist/src/compiler/normalize-sandbox.d.ts +2 -1
  148. package/dist/src/compiler/normalize-sandbox.js +1 -1
  149. package/dist/src/compiler/normalize-schedule.d.ts +2 -1
  150. package/dist/src/compiler/normalize-schedule.js +1 -1
  151. package/dist/src/compiler/normalize-skill.d.ts +2 -1
  152. package/dist/src/compiler/normalize-skill.js +1 -1
  153. package/dist/src/compiler/normalize-subagent.d.ts +4 -1
  154. package/dist/src/compiler/normalize-subagent.js +1 -1
  155. package/dist/src/compiler/normalize-tool.d.ts +2 -1
  156. package/dist/src/compiler/normalize-tool.js +1 -1
  157. package/dist/src/compiler/workspace-resources.js +1 -1
  158. package/dist/src/context/node.d.ts +1 -1
  159. package/dist/src/evals/assertions/collector.d.ts +43 -0
  160. package/dist/src/evals/assertions/collector.js +1 -0
  161. package/dist/src/evals/assertions/run.d.ts +72 -0
  162. package/dist/src/evals/assertions/run.js +2 -0
  163. package/dist/src/evals/autoevals-client.js +2 -0
  164. package/dist/src/evals/cli/eval-client.d.ts +22 -0
  165. package/dist/src/evals/cli/eval-client.js +1 -0
  166. package/dist/src/evals/cli/eval.d.ts +8 -5
  167. package/dist/src/evals/cli/eval.js +1 -1
  168. package/dist/src/evals/context.d.ts +19 -0
  169. package/dist/src/evals/context.js +1 -0
  170. package/dist/src/evals/define-eval-config.d.ts +16 -0
  171. package/dist/src/evals/define-eval-config.js +1 -0
  172. package/dist/src/evals/define-eval.d.ts +20 -0
  173. package/dist/src/evals/define-eval.js +1 -0
  174. package/dist/src/evals/expect/index.d.ts +25 -0
  175. package/dist/src/evals/expect/index.js +1 -0
  176. package/dist/src/evals/index.d.ts +6 -2
  177. package/dist/src/evals/index.js +1 -1
  178. package/dist/src/evals/judge.d.ts +20 -0
  179. package/dist/src/evals/judge.js +1 -0
  180. package/dist/src/evals/{checks/match.d.ts → match.d.ts} +17 -18
  181. package/dist/src/evals/match.js +1 -0
  182. package/dist/src/evals/reporters/index.d.ts +1 -0
  183. package/dist/src/evals/reporters/index.js +1 -1
  184. package/dist/src/evals/requirements.d.ts +3 -0
  185. package/dist/src/evals/requirements.js +1 -0
  186. package/dist/src/evals/runner/artifacts.d.ts +7 -6
  187. package/dist/src/evals/runner/artifacts.js +3 -3
  188. package/dist/src/evals/runner/discover.d.ts +31 -10
  189. package/dist/src/evals/runner/discover.js +1 -1
  190. package/dist/src/evals/runner/execute-eval.d.ts +25 -0
  191. package/dist/src/evals/runner/execute-eval.js +1 -0
  192. package/dist/src/evals/runner/execute-task.d.ts +31 -0
  193. package/dist/src/evals/runner/execute-task.js +1 -0
  194. package/dist/src/evals/runner/reporters/braintrust.d.ts +7 -5
  195. package/dist/src/evals/runner/reporters/braintrust.js +2 -2
  196. package/dist/src/evals/runner/reporters/console.d.ts +4 -4
  197. package/dist/src/evals/runner/reporters/console.js +1 -1
  198. package/dist/src/evals/runner/reporters/junit.d.ts +10 -0
  199. package/dist/src/evals/runner/reporters/junit.js +4 -0
  200. package/dist/src/evals/runner/reporters/types.d.ts +14 -8
  201. package/dist/src/evals/runner/run-evals.d.ts +38 -0
  202. package/dist/src/evals/runner/run-evals.js +1 -0
  203. package/dist/src/evals/runner/verdict.d.ts +10 -15
  204. package/dist/src/evals/runner/verdict.js +1 -1
  205. package/dist/src/evals/session.d.ts +52 -0
  206. package/dist/src/evals/session.js +1 -0
  207. package/dist/src/evals/target.d.ts +23 -0
  208. package/dist/src/evals/target.js +1 -0
  209. package/dist/src/evals/types.d.ts +294 -219
  210. package/dist/src/execution/compaction.d.ts +14 -0
  211. package/dist/src/execution/compaction.js +1 -0
  212. package/dist/src/execution/delegated-parent-notification.js +1 -1
  213. package/dist/src/execution/dispatch-runtime-actions-step.js +1 -1
  214. package/dist/src/execution/node-step.js +1 -1
  215. package/dist/src/execution/sandbox/bash-tool.d.ts +6 -6
  216. package/dist/src/execution/sandbox/bash-tool.js +1 -1
  217. package/dist/src/execution/sandbox/bindings/local.js +1 -1
  218. package/dist/src/execution/sandbox/glob-tool.js +3 -3
  219. package/dist/src/execution/sandbox/grep-tool.js +3 -3
  220. package/dist/src/execution/sandbox/read-file-tool.js +1 -1
  221. package/dist/src/execution/subagent-adapter.js +1 -1
  222. package/dist/src/execution/tool-auth.js +1 -1
  223. package/dist/src/execution/turn-workflow.js +1 -1
  224. package/dist/src/execution/workflow-runtime.d.ts +2 -2
  225. package/dist/src/execution/workflow-runtime.js +1 -1
  226. package/dist/src/execution/workflow-steps.js +1 -1
  227. package/dist/src/harness/action-result-helpers.js +1 -1
  228. package/dist/src/harness/authorization.d.ts +26 -0
  229. package/dist/src/harness/authorization.js +1 -1
  230. package/dist/src/harness/code-mode-lifecycle.js +1 -1
  231. package/dist/src/harness/emission.d.ts +12 -5
  232. package/dist/src/harness/emission.js +1 -1
  233. package/dist/src/harness/model-call-error.d.ts +35 -6
  234. package/dist/src/harness/model-call-error.js +1 -1
  235. package/dist/src/harness/step-hooks.d.ts +10 -4
  236. package/dist/src/harness/step-hooks.js +1 -1
  237. package/dist/src/harness/tool-loop.js +1 -1
  238. package/dist/src/harness/tools.d.ts +4 -6
  239. package/dist/src/harness/tools.js +1 -1
  240. package/dist/src/harness/turn-tag-state.d.ts +4 -0
  241. package/dist/src/harness/turn-tag-state.js +1 -1
  242. package/dist/src/harness/types.d.ts +4 -15
  243. package/dist/src/internal/application/cache-metadata.js +1 -1
  244. package/dist/src/internal/application/compiled-artifacts.js +1 -1
  245. package/dist/src/internal/application/package.js +1 -1
  246. package/dist/src/internal/application/paths.js +1 -1
  247. package/dist/src/internal/authored-definition/schema-backed.js +1 -1
  248. package/dist/src/internal/authored-module-loader.d.ts +4 -1
  249. package/dist/src/internal/authored-module-loader.js +2 -2
  250. package/dist/src/internal/authored-module-map-loader.js +1 -1
  251. package/dist/src/internal/nitro/dev-runtime-artifacts.js +1 -1
  252. package/dist/src/internal/nitro/host/build-application.js +1 -1
  253. package/dist/src/internal/nitro/host/build-vercel-agent-summary.js +1 -1
  254. package/dist/src/internal/nitro/host/configure-nitro-routes.js +3 -3
  255. package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
  256. package/dist/src/internal/nitro/host/dev-authored-source-watcher.js +1 -1
  257. package/dist/src/internal/nitro/host/dev-watcher-log.d.ts +37 -0
  258. package/dist/src/internal/nitro/host/dev-watcher-log.js +1 -0
  259. package/dist/src/internal/nitro/host/ports.d.ts +8 -0
  260. package/dist/src/internal/nitro/host/ports.js +1 -0
  261. package/dist/src/internal/nitro/host/prepare-application-host.js +1 -1
  262. package/dist/src/internal/nitro/host/server-external-packages.d.ts +1 -1
  263. package/dist/src/internal/nitro/host/server-external-packages.js +1 -1
  264. package/dist/src/internal/nitro/host/start-development-server.js +1 -1
  265. package/dist/src/internal/nitro/host/start-production-server.js +1 -1
  266. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response-from-manifest.d.ts +5 -0
  267. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response-from-manifest.js +1 -0
  268. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.d.ts +31 -2
  269. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
  270. package/dist/src/internal/nitro/routes/agent-info/load-agent-info-data.d.ts +13 -0
  271. package/dist/src/internal/nitro/routes/agent-info/load-agent-info-data.js +1 -1
  272. package/dist/src/internal/nitro/routes/info.d.ts +2 -2
  273. package/dist/src/internal/nitro/routes/info.js +1 -1
  274. package/dist/src/internal/workflow/queue-namespace.d.ts +5 -0
  275. package/dist/src/internal/workflow/queue-namespace.js +1 -0
  276. package/dist/src/internal/workflow-bundle/builder-support.js +2 -2
  277. package/dist/src/internal/workflow-bundle/builder.js +3 -5
  278. package/dist/src/internal/workflow-bundle/vercel-workflow-output.js +1 -1
  279. package/dist/src/internal/workflow-bundle/workflow-builders.d.ts +1 -1
  280. package/dist/src/internal/workflow-bundle/workflow-builders.js +1 -1
  281. package/dist/src/node_modules/.pnpm/@clack_core@1.3.1/node_modules/@clack/core/dist/index.js +4 -4
  282. package/dist/src/protocol/message.d.ts +15 -0
  283. package/dist/src/protocol/message.js +2 -2
  284. package/dist/src/public/channels/slack/api.d.ts +8 -0
  285. package/dist/src/public/channels/slack/api.js +1 -1
  286. package/dist/src/public/channels/slack/connections.d.ts +26 -18
  287. package/dist/src/public/channels/slack/connections.js +1 -1
  288. package/dist/src/public/channels/slack/defaults.d.ts +5 -2
  289. package/dist/src/public/channels/slack/defaults.js +1 -1
  290. package/dist/src/public/channels/slack/index.d.ts +1 -1
  291. package/dist/src/public/channels/slack/slackChannel.d.ts +65 -5
  292. package/dist/src/public/channels/slack/slackChannel.js +1 -1
  293. package/dist/src/public/channels/teams/defaults.js +1 -1
  294. package/dist/src/public/connections/errors.d.ts +8 -0
  295. package/dist/src/public/definitions/tool.d.ts +0 -33
  296. package/dist/src/public/next/index.d.ts +7 -1
  297. package/dist/src/public/next/index.js +1 -1
  298. package/dist/src/public/next/server.d.ts +1 -0
  299. package/dist/src/public/next/server.js +1 -1
  300. package/dist/src/public/nuxt/dev-server.js +1 -1
  301. package/dist/src/public/sveltekit/dev-server.js +1 -1
  302. package/dist/src/public/sveltekit/index.d.ts +1 -1
  303. package/dist/src/public/tools/defaults.d.ts +2 -4
  304. package/dist/src/public/tools/defaults.js +1 -1
  305. package/dist/src/public/tools/define-bash-tool.d.ts +3 -3
  306. package/dist/src/public/tools/define-bash-tool.js +1 -1
  307. package/dist/src/public/tools/define-read-file-tool.d.ts +0 -6
  308. package/dist/src/public/tools/define-read-file-tool.js +1 -1
  309. package/dist/src/public/tools/index.d.ts +2 -2
  310. package/dist/src/public/tools/index.js +1 -1
  311. package/dist/src/public/tools/internal.js +1 -1
  312. package/dist/src/runtime/actions/types.d.ts +11 -11
  313. package/dist/src/runtime/agent/mock-model-adapter.js +1 -1
  314. package/dist/src/runtime/agent/mock-model-fixtures.js +3 -2
  315. package/dist/src/runtime/agent/mock-model-skill-selection.js +3 -4
  316. package/dist/src/runtime/connections/callback-route.js +1 -1
  317. package/dist/src/runtime/connections/mcp-client.js +1 -1
  318. package/dist/src/runtime/connections/scoped-authorization.d.ts +21 -5
  319. package/dist/src/runtime/connections/scoped-authorization.js +1 -1
  320. package/dist/src/runtime/connections/types.d.ts +33 -0
  321. package/dist/src/runtime/connections/validate-authorization.js +1 -1
  322. package/dist/src/runtime/framework-tools/bash.d.ts +3 -3
  323. package/dist/src/runtime/framework-tools/bash.js +1 -1
  324. package/dist/src/runtime/framework-tools/connection-search-dynamic.d.ts +1 -1
  325. package/dist/src/runtime/framework-tools/connection-search-dynamic.js +1 -1
  326. package/dist/src/runtime/framework-tools/file-state.d.ts +3 -3
  327. package/dist/src/runtime/framework-tools/index.js +1 -1
  328. package/dist/src/runtime/framework-tools/read-file.js +2 -2
  329. package/dist/src/runtime/framework-tools/todo.d.ts +7 -0
  330. package/dist/src/runtime/framework-tools/todo.js +2 -2
  331. package/dist/src/runtime/governance/auth/http-basic.js +1 -1
  332. package/dist/src/runtime/input/types.d.ts +1 -1
  333. package/dist/src/runtime/resolve-tool.d.ts +2 -2
  334. package/dist/src/runtime/resolve-tool.js +1 -1
  335. package/dist/src/runtime/sandbox/keys.js +1 -1
  336. package/dist/src/runtime/session-callback-route.js +1 -1
  337. package/dist/src/runtime/types.d.ts +1 -7
  338. package/dist/src/services/dev-client/client-options.d.ts +8 -0
  339. package/dist/src/services/dev-client/client-options.js +1 -0
  340. package/dist/src/services/dev-client/runtime-artifacts.d.ts +13 -0
  341. package/dist/src/services/dev-client/runtime-artifacts.js +1 -0
  342. package/dist/src/services/dev-client.d.ts +13 -46
  343. package/dist/src/services/dev-client.js +1 -1
  344. package/dist/src/setup/ask.d.ts +205 -0
  345. package/dist/src/setup/ask.js +1 -0
  346. package/dist/src/setup/boxes/add-channels.d.ts +100 -16
  347. package/dist/src/setup/boxes/add-channels.js +2 -1
  348. package/dist/src/setup/boxes/add-connections.d.ts +13 -23
  349. package/dist/src/setup/boxes/add-connections.js +1 -1
  350. package/dist/src/setup/boxes/apply-ai-gateway-credential.d.ts +2 -2
  351. package/dist/src/setup/boxes/apply-ai-gateway-credential.js +1 -1
  352. package/dist/src/setup/boxes/deploy-project.d.ts +46 -14
  353. package/dist/src/setup/boxes/deploy-project.js +1 -1
  354. package/dist/src/setup/boxes/detect-ai-gateway.d.ts +10 -3
  355. package/dist/src/setup/boxes/detect-ai-gateway.js +1 -1
  356. package/dist/src/setup/boxes/link-project.d.ts +3 -3
  357. package/dist/src/setup/boxes/link-project.js +1 -1
  358. package/dist/src/setup/boxes/one-shot-next-steps.d.ts +18 -0
  359. package/dist/src/setup/boxes/one-shot-next-steps.js +2 -0
  360. package/dist/src/setup/boxes/preflight.d.ts +14 -6
  361. package/dist/src/setup/boxes/preflight.js +1 -1
  362. package/dist/src/setup/boxes/resolve-provisioning.d.ts +36 -8
  363. package/dist/src/setup/boxes/resolve-provisioning.js +1 -1
  364. package/dist/src/setup/boxes/resolve-target.d.ts +25 -8
  365. package/dist/src/setup/boxes/resolve-target.js +1 -1
  366. package/dist/src/setup/boxes/scaffold.d.ts +12 -6
  367. package/dist/src/setup/boxes/scaffold.js +1 -1
  368. package/dist/src/setup/boxes/select-channels.d.ts +38 -9
  369. package/dist/src/setup/boxes/select-channels.js +1 -1
  370. package/dist/src/setup/boxes/select-chat.d.ts +15 -11
  371. package/dist/src/setup/boxes/select-chat.js +1 -1
  372. package/dist/src/setup/boxes/select-connections.d.ts +30 -0
  373. package/dist/src/setup/boxes/select-connections.js +1 -0
  374. package/dist/src/setup/boxes/select-model.d.ts +18 -14
  375. package/dist/src/setup/boxes/select-model.js +1 -1
  376. package/dist/src/setup/boxes/select-setup-mode.d.ts +32 -0
  377. package/dist/src/setup/boxes/select-setup-mode.js +1 -0
  378. package/dist/src/setup/channel-add-conflicts.d.ts +28 -0
  379. package/dist/src/setup/channel-add-conflicts.js +1 -0
  380. package/dist/src/setup/cli/channel-setup-prompter.d.ts +23 -0
  381. package/dist/src/setup/cli/channel-setup-prompter.js +1 -0
  382. package/dist/src/setup/cli/connection-add-prompter.d.ts +8 -0
  383. package/dist/src/setup/cli/connection-add-prompter.js +1 -0
  384. package/dist/src/setup/{scaffold/cli → cli}/index.d.ts +4 -3
  385. package/dist/src/setup/cli/index.js +1 -0
  386. package/dist/src/setup/{scaffold/cli → cli}/prompt-ui.d.ts +39 -15
  387. package/dist/src/setup/cli/prompt-ui.js +5 -0
  388. package/dist/src/setup/{scaffold/cli → cli}/rail-log.d.ts +2 -0
  389. package/dist/src/setup/{scaffold/cli → cli}/rail-log.js +2 -2
  390. package/dist/src/setup/{scaffold/cli → cli}/select-component.d.ts +18 -3
  391. package/dist/src/setup/cli/select-component.js +1 -0
  392. package/dist/src/setup/cli/select-option-codec.d.ts +12 -0
  393. package/dist/src/setup/cli/select-option-codec.js +1 -0
  394. package/dist/src/setup/{scaffold/cli → cli}/select-state.d.ts +13 -1
  395. package/dist/src/setup/cli/select-state.js +1 -0
  396. package/dist/src/setup/cli/whimsy.d.ts +16 -0
  397. package/dist/src/setup/cli/whimsy.js +1 -0
  398. package/dist/src/setup/{scaffold/steps/setup-connection.d.ts → connection-connector.d.ts} +3 -2
  399. package/dist/src/setup/connection-connector.js +1 -0
  400. package/dist/src/setup/flows/channels.d.ts +43 -0
  401. package/dist/src/setup/flows/channels.js +1 -0
  402. package/dist/src/setup/flows/deploy.d.ts +40 -0
  403. package/dist/src/setup/flows/deploy.js +1 -0
  404. package/dist/src/setup/flows/in-project.d.ts +16 -0
  405. package/dist/src/setup/flows/in-project.js +1 -0
  406. package/dist/src/setup/flows/link.d.ts +43 -0
  407. package/dist/src/setup/flows/link.js +1 -0
  408. package/dist/src/setup/flows/model.d.ts +112 -0
  409. package/dist/src/setup/flows/model.js +1 -0
  410. package/dist/src/setup/flows/vercel.d.ts +31 -0
  411. package/dist/src/setup/flows/vercel.js +2 -0
  412. package/dist/src/setup/gateway-models.js +1 -1
  413. package/dist/src/setup/headless.d.ts +1 -1
  414. package/dist/src/setup/index.d.ts +10 -4
  415. package/dist/src/setup/index.js +1 -1
  416. package/dist/src/setup/onboarding.d.ts +7 -4
  417. package/dist/src/setup/onboarding.js +1 -1
  418. package/dist/src/setup/package-manager.d.ts +27 -0
  419. package/dist/src/setup/package-manager.js +1 -0
  420. package/dist/src/setup/primitives/index.d.ts +3 -0
  421. package/dist/src/setup/primitives/index.js +1 -0
  422. package/dist/src/setup/primitives/pm/bun.d.ts +10 -0
  423. package/dist/src/setup/primitives/pm/bun.js +1 -0
  424. package/dist/src/setup/primitives/pm/index.d.ts +11 -0
  425. package/dist/src/setup/primitives/pm/index.js +1 -0
  426. package/dist/src/setup/primitives/pm/npm.d.ts +10 -0
  427. package/dist/src/setup/primitives/pm/npm.js +1 -0
  428. package/dist/src/setup/primitives/pm/pnpm.d.ts +27 -0
  429. package/dist/src/setup/primitives/pm/pnpm.js +8 -0
  430. package/dist/src/setup/primitives/pm/run.d.ts +23 -0
  431. package/dist/src/setup/primitives/pm/run.js +1 -0
  432. package/dist/src/setup/primitives/pm/shared.d.ts +8 -0
  433. package/dist/src/setup/primitives/pm/shared.js +1 -0
  434. package/dist/src/setup/primitives/pm/types.d.ts +37 -0
  435. package/dist/src/setup/primitives/pm/types.js +1 -0
  436. package/dist/src/setup/primitives/pm/yarn.d.ts +10 -0
  437. package/dist/src/setup/primitives/pm/yarn.js +1 -0
  438. package/dist/src/setup/primitives/run-pnpm.d.ts +1 -0
  439. package/dist/src/setup/primitives/run-pnpm.js +1 -0
  440. package/dist/src/setup/{scaffold/primitives → primitives}/run-vercel.d.ts +7 -0
  441. package/dist/src/setup/primitives/run-vercel.js +1 -0
  442. package/dist/src/setup/project-name.d.ts +4 -0
  443. package/dist/src/setup/project-name.js +1 -0
  444. package/dist/src/setup/project-resolution.d.ts +54 -0
  445. package/dist/src/setup/project-resolution.js +1 -0
  446. package/dist/src/setup/prompter.d.ts +52 -4
  447. package/dist/src/setup/prompter.js +1 -1
  448. package/dist/src/setup/quit-guard.d.ts +1 -1
  449. package/dist/src/setup/run-vercel-link.d.ts +1 -1
  450. package/dist/src/setup/run-vercel-link.js +1 -1
  451. package/dist/src/setup/runner.d.ts +5 -4
  452. package/dist/src/setup/runner.js +1 -1
  453. package/dist/src/setup/scaffold/channels-catalog.d.ts +3 -3
  454. package/dist/src/setup/scaffold/channels-catalog.js +1 -1
  455. package/dist/src/setup/scaffold/create/add-to-project.d.ts +26 -0
  456. package/dist/src/setup/scaffold/create/add-to-project.js +1 -0
  457. package/dist/src/setup/scaffold/create/project.d.ts +54 -0
  458. package/dist/src/setup/scaffold/create/project.js +80 -0
  459. package/dist/src/setup/scaffold/index.d.ts +4 -4
  460. package/dist/src/setup/scaffold/index.js +1 -1
  461. package/dist/src/setup/scaffold/{channels.d.ts → update/channels.d.ts} +11 -0
  462. package/dist/src/setup/scaffold/update/channels.js +7 -0
  463. package/dist/src/setup/scaffold/{connections.d.ts → update/connections.d.ts} +1 -1
  464. package/dist/src/setup/scaffold/update/connections.js +21 -0
  465. package/dist/src/setup/scaffold/version-tokens.d.ts +11 -0
  466. package/dist/src/setup/scaffold/version-tokens.js +1 -0
  467. package/dist/src/setup/{scaffold/steps/setup-slackbot.d.ts → slackbot.d.ts} +24 -20
  468. package/dist/src/setup/slackbot.js +1 -0
  469. package/dist/src/setup/state.d.ts +62 -15
  470. package/dist/src/setup/state.js +1 -1
  471. package/dist/src/setup/step.d.ts +9 -18
  472. package/dist/src/setup/vercel-project.d.ts +15 -8
  473. package/dist/src/setup/vercel-project.js +1 -1
  474. package/dist/src/shared/agent-definition.d.ts +5 -3
  475. package/dist/src/shared/default-agent-model.d.ts +5 -0
  476. package/dist/src/shared/default-agent-model.js +1 -0
  477. package/dist/src/source-change/apply-model-name.d.ts +25 -0
  478. package/dist/src/source-change/apply-model-name.js +2 -0
  479. package/dist/src/source-change/static-source-change.d.ts +36 -0
  480. package/dist/src/source-change/static-source-change.js +1 -0
  481. package/dist/src/svelte/index.js +1 -1
  482. package/dist/src/svelte/use-eve-agent.js +1 -1
  483. package/dist/src/vue/index.js +1 -1
  484. package/dist/src/vue/use-eve-agent.js +1 -1
  485. package/package.json +22 -42
  486. package/dist/docs/evals-v2-plan.md +0 -939
  487. package/dist/docs/public/advanced/evals.md +0 -158
  488. package/dist/src/cli/commands/setup.d.ts +0 -55
  489. package/dist/src/cli/commands/setup.js +0 -1
  490. package/dist/src/cli/dev/repl/input-requests.d.ts +0 -38
  491. package/dist/src/cli/dev/repl/input-requests.js +0 -1
  492. package/dist/src/cli/dev/repl/input.d.ts +0 -19
  493. package/dist/src/cli/dev/repl/input.js +0 -1
  494. package/dist/src/cli/dev/repl/repl.d.ts +0 -62
  495. package/dist/src/cli/dev/repl/repl.js +0 -2
  496. package/dist/src/cli/dev/repl/terminal.d.ts +0 -21
  497. package/dist/src/cli/dev/repl/terminal.js +0 -5
  498. package/dist/src/compiled/_chunks/workflow/resume-hook-0Zk0zSvq.js +0 -12
  499. package/dist/src/compiled/_chunks/workflow/sleep-DXZr2BgM.js +0 -1
  500. package/dist/src/evals/checks/checks.d.ts +0 -66
  501. package/dist/src/evals/checks/checks.js +0 -2
  502. package/dist/src/evals/checks/index.d.ts +0 -21
  503. package/dist/src/evals/checks/index.js +0 -1
  504. package/dist/src/evals/checks/match.js +0 -1
  505. package/dist/src/evals/define-eval-suite.d.ts +0 -18
  506. package/dist/src/evals/define-eval-suite.js +0 -1
  507. package/dist/src/evals/runner/execute-case.d.ts +0 -23
  508. package/dist/src/evals/runner/execute-case.js +0 -1
  509. package/dist/src/evals/runner/execute-suite.d.ts +0 -24
  510. package/dist/src/evals/runner/execute-suite.js +0 -1
  511. package/dist/src/evals/scorers/autoevals-client.js +0 -2
  512. package/dist/src/evals/scorers/autoevals.d.ts +0 -58
  513. package/dist/src/evals/scorers/autoevals.js +0 -1
  514. package/dist/src/evals/scorers/json.d.ts +0 -10
  515. package/dist/src/evals/scorers/json.js +0 -1
  516. package/dist/src/evals/scorers/model-marker.d.ts +0 -12
  517. package/dist/src/evals/scorers/model-marker.js +0 -1
  518. package/dist/src/evals/scorers/run.d.ts +0 -24
  519. package/dist/src/evals/scorers/run.js +0 -1
  520. package/dist/src/evals/scorers/sql.d.ts +0 -9
  521. package/dist/src/evals/scorers/sql.js +0 -1
  522. package/dist/src/evals/scorers/text.d.ts +0 -18
  523. package/dist/src/evals/scorers/text.js +0 -1
  524. package/dist/src/evals/scores/index.d.ts +0 -72
  525. package/dist/src/evals/scores/index.js +0 -1
  526. package/dist/src/execution/tool-compaction.d.ts +0 -9
  527. package/dist/src/execution/tool-compaction.js +0 -1
  528. package/dist/src/services/dev-client/stream.d.ts +0 -5
  529. package/dist/src/services/dev-client/stream.js +0 -1
  530. package/dist/src/services/dev-client/url.d.ts +0 -11
  531. package/dist/src/services/dev-client/url.js +0 -1
  532. package/dist/src/setup/channel-setup-prompter.d.ts +0 -8
  533. package/dist/src/setup/channel-setup-prompter.js +0 -1
  534. package/dist/src/setup/scaffold/channels.js +0 -7
  535. package/dist/src/setup/scaffold/cli/channel-add-prompter.d.ts +0 -12
  536. package/dist/src/setup/scaffold/cli/channel-add-prompter.js +0 -1
  537. package/dist/src/setup/scaffold/cli/channel-setup-prompter.d.ts +0 -56
  538. package/dist/src/setup/scaffold/cli/connection-add-prompter.d.ts +0 -44
  539. package/dist/src/setup/scaffold/cli/connection-add-prompter.js +0 -1
  540. package/dist/src/setup/scaffold/cli/index.js +0 -1
  541. package/dist/src/setup/scaffold/cli/prompt-ui.js +0 -5
  542. package/dist/src/setup/scaffold/cli/select-component.js +0 -1
  543. package/dist/src/setup/scaffold/cli/select-state.js +0 -1
  544. package/dist/src/setup/scaffold/connections.js +0 -21
  545. package/dist/src/setup/scaffold/pnpm-workspace.d.ts +0 -3
  546. package/dist/src/setup/scaffold/pnpm-workspace.js +0 -11
  547. package/dist/src/setup/scaffold/primitives/detect-deployment.d.ts +0 -13
  548. package/dist/src/setup/scaffold/primitives/detect-deployment.js +0 -1
  549. package/dist/src/setup/scaffold/primitives/index.d.ts +0 -3
  550. package/dist/src/setup/scaffold/primitives/index.js +0 -1
  551. package/dist/src/setup/scaffold/primitives/pnpm-invocation.d.ts +0 -12
  552. package/dist/src/setup/scaffold/primitives/pnpm-invocation.js +0 -1
  553. package/dist/src/setup/scaffold/primitives/run-pnpm.d.ts +0 -17
  554. package/dist/src/setup/scaffold/primitives/run-pnpm.js +0 -1
  555. package/dist/src/setup/scaffold/primitives/run-vercel.js +0 -1
  556. package/dist/src/setup/scaffold/project.d.ts +0 -21
  557. package/dist/src/setup/scaffold/project.js +0 -80
  558. package/dist/src/setup/scaffold/steps/deploy-to-vercel.d.ts +0 -17
  559. package/dist/src/setup/scaffold/steps/deploy-to-vercel.js +0 -1
  560. package/dist/src/setup/scaffold/steps/index.d.ts +0 -4
  561. package/dist/src/setup/scaffold/steps/index.js +0 -1
  562. package/dist/src/setup/scaffold/steps/project-resolution.d.ts +0 -19
  563. package/dist/src/setup/scaffold/steps/project-resolution.js +0 -1
  564. package/dist/src/setup/scaffold/steps/run-add-connection.d.ts +0 -40
  565. package/dist/src/setup/scaffold/steps/run-add-connection.js +0 -1
  566. package/dist/src/setup/scaffold/steps/run-add-to-agent.d.ts +0 -81
  567. package/dist/src/setup/scaffold/steps/run-add-to-agent.js +0 -2
  568. package/dist/src/setup/scaffold/steps/setup-connection.js +0 -1
  569. package/dist/src/setup/scaffold/steps/setup-slackbot.js +0 -1
  570. /package/dist/src/{setup/scaffold/cli/channel-setup-prompter.js → cli/dev/tui/setup-flow.js} +0 -0
  571. /package/dist/src/evals/{scorers/autoevals-client.d.ts → autoevals-client.d.ts} +0 -0
  572. /package/dist/src/setup/{scaffold/cli → cli}/command-output.d.ts +0 -0
  573. /package/dist/src/setup/{scaffold/cli → cli}/command-output.js +0 -0
  574. /package/dist/src/setup/{scaffold/human-action.d.ts → human-action.d.ts} +0 -0
  575. /package/dist/src/setup/{scaffold/human-action.js → human-action.js} +0 -0
  576. /package/dist/src/setup/{scaffold/primitives → primitives}/process-output.d.ts +0 -0
  577. /package/dist/src/setup/{scaffold/primitives → primitives}/process-output.js +0 -0
  578. /package/dist/src/setup/scaffold/{web-template.d.ts → create/web-template.d.ts} +0 -0
  579. /package/dist/src/setup/scaffold/{web-template.js → create/web-template.js} +0 -0
  580. /package/dist/src/setup/scaffold/{module-files.d.ts → update/module-files.d.ts} +0 -0
  581. /package/dist/src/setup/scaffold/{module-files.js → update/module-files.js} +0 -0
  582. /package/dist/src/setup/scaffold/{package-json.d.ts → update/package-json.d.ts} +0 -0
  583. /package/dist/src/setup/scaffold/{package-json.js → update/package-json.js} +0 -0
  584. /package/dist/src/setup/scaffold/{primitives → update}/update-connection-connector.d.ts +0 -0
  585. /package/dist/src/setup/scaffold/{primitives → update}/update-connection-connector.js +0 -0
  586. /package/dist/src/setup/scaffold/{primitives → update}/update-slack-channel.d.ts +0 -0
  587. /package/dist/src/setup/scaffold/{primitives → update}/update-slack-channel.js +0 -0
@@ -1,158 +0,0 @@
1
- ---
2
- title: "Evals"
3
- description: "Define repeatable scored checks for an Eve agent with defineEvalSuite and run them with eve eval."
4
- ---
5
-
6
- An eval is a scored check that runs your agent against real sessions and grades the result. Use it to catch regressions when you change a prompt or a tool: compare the output against expected text, JSON, SQL, or behavior, and optionally ship the results to Braintrust.
7
-
8
- ## `defineEvalSuite`
9
-
10
- Eve discovers suites under the app-root `evals/` directory, in `.eval.ts` files. The file path is the suite's identity, so you don't author an `id` or `name`.
11
-
12
- ```text
13
- my-agent/
14
- ├── agent/
15
- ├── evals/
16
- │ ├── smoke.eval.ts
17
- │ └── weather.eval.ts
18
- └── package.json
19
- ```
20
-
21
- ```ts title="evals/weather.eval.ts"
22
- import { defineEvalSuite } from "eve/evals";
23
- import { Checks } from "eve/evals/checks";
24
- import { Run } from "eve/evals/scores";
25
-
26
- export default defineEvalSuite({
27
- description: "Basic message and tool-usage coverage for the weather agent.",
28
- cases: [
29
- { id: "brooklyn-forecast", input: "What is the weather in Brooklyn?", expected: "Sunny" },
30
- ],
31
- checks: [Checks.didNotFail(), Checks.toolCalled("get_weather")],
32
- scores: [Run.didNotFail()],
33
- });
34
- ```
35
-
36
- Every suite needs `scores` (an empty array is fine) and either `cases` or `load`. The rest are optional: `description`, `task`, `checks`, `model`, `thresholds`, `modelOptions`, `tags`, `metadata`, `maxConcurrency`, `timeoutMs`, `reporters`. The init template adds `evals/**/*.ts` to `tsconfig.json`, so your eval code type-checks alongside the app.
37
-
38
- `model` is only required when a model-backed scorer (one of the `Autoevals` wrappers) is present without its own per-scorer model override — and it's the scorer model, not the agent's. Eve only uses it for model-backed scoring, never to swap out the agent under test. Pass a string id (e.g. `"anthropic/claude-opus-4.8"`) to route through the Vercel AI Gateway, or hand it an AI SDK model instance to use that directly.
39
-
40
- ## Checks and scores
41
-
42
- Suites grade a case on two distinct tiers:
43
-
44
- - **Checks are hard assertions.** Any failed check marks the case failed and `eve eval` exits non-zero. Use them for the things that must hold — the run completed, the right tool ran, the output parses.
45
- - **Scores are soft data.** They land in reports and artifacts, and a below-threshold score marks the case `scored` — visible but not fatal, unless you pass `--strict`.
46
-
47
- Both exist at the suite level (applied to every case) and the case level (appended to the suite's). Built-in checks live on `eve/evals/checks`:
48
-
49
- | Check | Asserts |
50
- | ------------------------------------------------------------- | --------------------------------------------------------------------------------- |
51
- | `Checks.completed()` | The run did not fail and did not park on unanswered HITL input |
52
- | `Checks.waiting()` | The run parked on HITL input (for approval-shaped suites) |
53
- | `Checks.didNotFail()` | No terminal failure and no `turn.failed`/`step.failed` events (parked runs pass) |
54
- | `Checks.messageIncludes(token)` | Joined assistant text contains `token` (string or RegExp) |
55
- | `Checks.outputEquals(value)` / `Checks.outputMatches(schema)` | Deep equality / Standard Schema (e.g. Zod) validation of the parsed output |
56
- | `Checks.toolCalled(name, opts?)` | A matching tool call happened (`input`, `output`, `isError`, `times` constraints) |
57
- | `Checks.toolNotCalled(name)` | No call to `name` |
58
- | `Checks.toolOrder([...names])` | Tool names appear in order (other calls may interleave) |
59
- | `Checks.noFailedActions()` | No tool, subagent, or skill action reported a failure |
60
- | `Checks.subagentCalled(name, opts?)` | A subagent delegation happened (`remoteUrl`, `output` constraints) |
61
- | `Checks.event(predicate, label)` | Escape hatch: any predicate over the typed event stream |
62
-
63
- Matcher options accept a literal (objects partial-deep-match), a RegExp, or a function — return a boolean to act as a predicate, or return a value to compare against (handy for runner-assigned values like environment-provided URLs):
64
-
65
- ```ts
66
- Checks.toolCalled("bash", { input: { command: /^pwd/ }, isError: false, times: 1 });
67
- Checks.subagentCalled("weather", {
68
- remoteUrl: () => process.env.WEATHER_AGENT_URL!,
69
- output: /72F/,
70
- });
71
- ```
72
-
73
- A custom check is a plain function receiving `{ case, result, target }` and returning `{ name, passed, message? }`.
74
-
75
- ## Cases and tasks
76
-
77
- A case pairs an `input` with an `expected`, plus optional `checks`, `scores`, tags, and metadata. `input` can be a string or an object. `expected` is optional, which is handy when you only care about behavior. List cases inline, or load them dynamically:
78
-
79
- ```ts
80
- import { defineEvalSuite } from "eve/evals";
81
- import { loadYaml } from "eve/evals/loaders";
82
- import { Text } from "eve/evals/scores";
83
-
84
- export default defineEvalSuite({
85
- async load() {
86
- const doc = await loadYaml("evals/data/cases.yaml");
87
- return (doc.evals as readonly { task: string; prompt: string; sql: string }[]).map((row) => ({
88
- id: row.task,
89
- input: row.prompt,
90
- expected: row.sql,
91
- }));
92
- },
93
- scores: [Text.exact()],
94
- });
95
- ```
96
-
97
- The loaders (`loadJson`, `loadYaml` from `eve/evals/loaders`) resolve paths relative to the app root. They're meant for fixtures, not runtime agent code. For the task itself, `task.prompt` covers the single-string case, `task.messages` sets up a multi-turn conversation, and `task.parseOutput` lets you compare a transformed result rather than the raw final message.
98
-
99
- ## Scorers and rubrics
100
-
101
- Scorers live in namespaces on `eve/evals/scores`. Pick the cheapest one that captures what "correct" means here. The deterministic scorers run instantly for free; an LLM judge runs once per case and burns tokens, so save it for when nothing simpler will do.
102
-
103
- | Need | Use |
104
- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
105
- | Grade agent behavior (run succeeded, used the right tools) | `Run.didNotFail()`, `Run.usedTool(name, opts?)`, `Run.usedNoTools()`, `Run.maxToolCalls(max)` |
106
- | Exact string match | `Text.exact()`, `Text.includes()` |
107
- | Fuzzy text match (typos, whitespace) | `Text.levenshtein()` |
108
- | Exact JSON match | `Json.deepEqual()` |
109
- | Exact SQL match (after normalization) | `Sql.exactNormalized()` |
110
- | LLM-judged factual correctness vs an expected answer | `Autoevals.factuality()` |
111
- | LLM-judged summary quality | `Autoevals.summary()` |
112
- | LLM-judged SQL semantic equivalence | `Autoevals.sql()` |
113
- | LLM-judged free-form criteria (no `expected` to match) | `Autoevals.closedQA({ criteria: "..." })` |
114
-
115
- Each scorer gets the flattened `input`, `output`, and `expected` strings along with the full case and task result — including derived facts: typed tool calls (name, input, output, error state), subagent calls, HITL input requests, and whether the run parked. `Run.usedTool` accepts the same matcher options as `Checks.toolCalled`, so you can grade tool-input quality fractionally where a check would assert it absolutely. Return `null` from a scorer to skip a case.
116
-
117
- ### Thresholds
118
-
119
- By default a scorer has to hit an exact match to pass. `thresholds` loosens that, mapping each scorer name to the minimum score you'll accept:
120
-
121
- ```ts
122
- defineEvalSuite({
123
- cases: [{ id: "hello", input: "Hello", expected: "Hello" }],
124
- scores: [Run.didNotFail(), Text.includes()],
125
- thresholds: { "run.didNotFail": 1, "text.includes": 0.5 },
126
- });
127
- ```
128
-
129
- `maxConcurrency` caps parallelism and `timeoutMs` bounds each case. Leave them off and `eve eval` runs up to 8 cases per suite at once. For provider-specific scorer-model settings, use `modelOptions.providerOptions`. Individual Autoevals scorers can also take their own `model` / `modelOptions`, which win over the suite default.
130
-
131
- ## Reporters
132
-
133
- Suite-level reporters live on `eve/evals/reporters`. Right now the public surface is `Braintrust(...)`, which uploads suite results to Braintrust experiments. Eve still runs and scores everything itself; the reporter just ships the results out. Checks log as binary scores under a `check:` prefix so experiments diff check regressions the same way they diff score regressions. Suite and case `metadata` ride along to the reporter, and the CLI prints a console summary by default.
134
-
135
- ## Running evals
136
-
137
- ```bash
138
- eve eval # run all discovered suites locally
139
- eve eval weather smoke # run selected suites
140
- eve eval --url https://<app> # target a remote app instead of a local host
141
- eve eval --tag fast # only cases (or suites) carrying a tag
142
- eve eval --case brooklyn-forecast # only specific case ids
143
- eve eval --strict # below-threshold scores also fail the exit code
144
- eve eval --list # print discovered suites and cases without running
145
- eve eval --json # machine-readable output
146
- eve eval --skip-report # skip suite-defined reporters (e.g. Braintrust)
147
- ```
148
-
149
- Exit codes: `0` when every case passed its checks (and thresholds, under `--strict`), `1` when any case failed (a failed check, an execution error, or a strict threshold miss), `2` for configuration errors. Each run drops per-suite artifacts under `.eve/evals/<timestamp>-<suite-id>/`, including per-case check results and verdicts.
150
-
151
- ## A good baseline
152
-
153
- Most apps do fine with a small smoke suite. Assert behavior with `Checks.didNotFail()` plus one or two content checks, keep case fixtures in `evals/data/`, and only reach for Braintrust once you actually need shared result review or experiment history. In CI, run `eve eval --strict` so threshold misses fail the build too.
154
-
155
- ## What to read next
156
-
157
- - [Tools](../tools): the surface most evals assert on
158
- - [instrumentation.ts](./instrumentation): tracing and debugging
@@ -1,55 +0,0 @@
1
- import { type DeploymentInfo } from "#setup/scaffold/primitives/index.js";
2
- import { type Prompter } from "#setup/prompter.js";
3
- import { type ArgsHeadlessAiGateway, type ArgsHeadlessProject, type ChannelKind, type ChatPreference } from "#setup/state.js";
4
- export interface SetupCliLogger {
5
- error(message: string): void;
6
- log(message: string): void;
7
- }
8
- /**
9
- * Preset answers for a headless `eve setup` run. They mirror the create flow's
10
- * preset options so a headless onboarding run is fully determined by its
11
- * inputs; each field is threaded into the matching onboarding box option.
12
- */
13
- export interface SetupCommandPresets {
14
- presetName?: string;
15
- presetModel?: string;
16
- presetChannels?: ChannelKind[];
17
- presetCreateSlackbot?: boolean;
18
- presetNoDeploy?: boolean;
19
- overwriteExisting?: boolean;
20
- presetConnections?: string[];
21
- presetChatPreference?: ChatPreference;
22
- }
23
- export interface SetupCommandOptions {
24
- /**
25
- * Programmatic-only for now: the `eve setup` CLI registers no headless flags,
26
- * so a headless run is only reachable through this API with presets that
27
- * answer every decision. The CLI fails fast on a non-interactive terminal
28
- * instead of silently entering a headless run that cannot succeed.
29
- */
30
- headless?: boolean;
31
- /** Override for the scaffolded `eve` dependency version. Defaults to "beta",
32
- * matching the create flow; ai/zod/tsgo come from build-stamped defaults. */
33
- evePackageVersion?: string;
34
- presets?: SetupCommandPresets;
35
- /** Headless-only Vercel provisioning flags, mirroring the create flow. */
36
- provisioning?: {
37
- project: ArgsHeadlessProject;
38
- aiGateway: ArgsHeadlessAiGateway;
39
- };
40
- }
41
- export interface SetupCommandDependencies {
42
- createPrompter: () => Prompter;
43
- detectDeployment(projectPath: string): Promise<DeploymentInfo>;
44
- isEveProject(projectPath: string): Promise<boolean>;
45
- hasInteractiveTerminal(): boolean;
46
- }
47
- /**
48
- * The unified `eve setup` entry. In a directory that is not yet an Eve project
49
- * it runs the SAME onboarding composition as `pnpm create eve`, scaffolding in
50
- * place; inside an existing project it runs in-project setup: the channel
51
- * interview, then channel scaffolding, then deploy, against the detected
52
- * on-disk project link. Both compose the shared boxes through the shared
53
- * runner.
54
- */
55
- export declare function runSetupCommand(logger: SetupCliLogger, appRoot: string, options: SetupCommandOptions, dependencies?: SetupCommandDependencies): Promise<void>;
@@ -1 +0,0 @@
1
- import{basename}from"node:path";import{isEveProject}from"#setup/scaffold/index.js";import{createAddToAgentState}from"#setup/scaffold/steps/index.js";import{detectDeployment}from"#setup/scaffold/primitives/index.js";import{addChannels}from"#setup/boxes/add-channels.js";import{deployProject as deployProject$1}from"#setup/boxes/deploy-project.js";import{selectChannels}from"#setup/boxes/select-channels.js";import{composeOnboardingBoxes}from"#setup/onboarding.js";import{createPrompter}from"#setup/prompter.js";import{runHeadless,runInteractive}from"#setup/runner.js";import{createDefaultSetupState,snapshotSetupState}from"#setup/state.js";const defaultDependencies={createPrompter,detectDeployment,isEveProject,hasInteractiveTerminal:()=>!!(process.stdin.isTTY&&process.stdout.isTTY)};async function runSetupCommand(t,n,r,i=defaultDependencies){let a=!await i.isEveProject(n),o=r.evePackageVersion??`beta`,s=r.presets??{},c=r.headless!==!0;if(c&&!i.hasInteractiveTerminal()){t.error("eve setup is interactive and needs a terminal. For automation, use `create-eve --headless` to scaffold a new agent or `eve channels add` inside an existing project."),process.exitCode=1;return}let l=i.createPrompter(),u={write:e=>l.log.message(e)};l.intro(a?`Create a new Eve agent`:`Set up your Eve agent`);let d=a?`Agent created.`:`Setup complete.`,f,p;a?(f=createDefaultSetupState(),p=composeOnboardingBoxes({prompter:l,presetName:s.presetName,presetModel:s.presetModel,presetChannels:s.presetChannels,presetConnections:s.presetConnections,presetCreateSlackbot:s.presetCreateSlackbot,provisioning:r.provisioning,presetChatPreference:s.presetChatPreference??`skip`,targetDirectory:n,inPlace:!0,overwriteExisting:s.overwriteExisting,presetNoDeploy:s.presetNoDeploy,headless:!c,evePackageVersion:o})):(l.log.message(`Checking the current Vercel project...`),f={...createDefaultSetupState(),...createAddToAgentState(await i.detectDeployment(n)),agentName:basename(n),projectPath:{kind:`resolved`,inPlace:!0,path:n}},p=[selectChannels({prompter:l,presetChannels:s.presetChannels}),addChannels({prompter:l,evePackageVersion:o,presetCreateSlackbot:s.presetCreateSlackbot}),deployProject$1({prompter:l,skip:s.presetNoDeploy})]);try{if(c){let e=await runInteractive(p,f,u,{snapshot:snapshotSetupState});l.outro(e.kind===`cancelled`?`Cancelled.`:d);return}await runHeadless(p,f,u,{snapshot:snapshotSetupState}),l.outro(d)}catch(e){t.error(e instanceof Error?e.message:String(e)),process.exitCode=1}}export{runSetupCommand};
@@ -1,38 +0,0 @@
1
- import type { HandleMessageStreamEvent } from "#protocol/message.js";
2
- import type { InputRequest, InputResponse } from "#runtime/input/types.js";
3
- import { type CliTheme } from "#cli/ui/output.js";
4
- /**
5
- * Sentinel returned when the CLI user pressed Escape while responding to a
6
- * pending runtime input request.
7
- */
8
- export declare const ESCAPED_RUNTIME_INPUT_PROMPT: unique symbol;
9
- /**
10
- * One raw answer collected from the CLI while prompting for pending runtime
11
- * input requests.
12
- */
13
- export type RuntimeInputPromptValue = string | typeof ESCAPED_RUNTIME_INPUT_PROMPT | undefined;
14
- /**
15
- * Outcome of one interactive CLI prompt pass for pending runtime input.
16
- */
17
- export type RuntimeInputPromptResult = {
18
- readonly inputResponses: readonly InputResponse[];
19
- readonly kind: "submitted";
20
- } | {
21
- readonly kind: "deferred";
22
- } | {
23
- readonly kind: "aborted";
24
- };
25
- /**
26
- * Returns the last pending runtime-input batch emitted in one turn, if any.
27
- */
28
- export declare function extractPendingRuntimeInputRequests(events: readonly HandleMessageStreamEvent[]): readonly InputRequest[];
29
- /**
30
- * Interactively collects CLI-native responses for pending runtime input
31
- * requests.
32
- */
33
- export declare function promptForRuntimeInputRequests(input: {
34
- ask(prompt: string): Promise<RuntimeInputPromptValue>;
35
- print(message: string): void;
36
- requests: readonly InputRequest[];
37
- theme: CliTheme;
38
- }): Promise<RuntimeInputPromptResult>;
@@ -1 +0,0 @@
1
- import{renderCliTaggedLine}from"#cli/ui/output.js";import{resolveTextToResponse}from"#channel/resolve-text.js";const ESCAPED_RUNTIME_INPUT_PROMPT=Symbol(`eve.cli.runtime-input.escaped`);function extractPendingRuntimeInputRequests(e){for(let t=e.length-1;t>=0;--t){let n=e[t];if(n?.type===`input.requested`)return n.data.requests}return[]}async function promptForRuntimeInputRequests(t){let n=[];t.print(renderCliTaggedLine(t.theme,{message:`pending input request${t.requests.length===1?``:`s`}: reply now, press Escape, or type "skip" to return to the normal prompt`,tag:`input`,tone:`info`}));for(let e of t.requests){let r=await promptForRuntimeInputRequest({ask:t.ask,print:t.print,request:e,theme:t.theme});if(r.kind!==`submitted`)return r;n.push(r.inputResponse)}return{inputResponses:n,kind:`submitted`}}function isApprovalRequest(e){return e.display===`confirmation`}async function promptForRuntimeInputRequest(e){return isApprovalRequest(e.request)?await promptForApprovalInputRequest({ask:e.ask,print:e.print,request:e.request,theme:e.theme}):await promptForQuestionInputRequest({ask:e.ask,print:e.print,request:e.request,theme:e.theme})}async function promptForApprovalInputRequest(t){for(t.print(renderCliTaggedLine(t.theme,{message:`approve tool "${t.request.action.toolName}"? (yes/no)`,tag:`approval`,tone:`warning`})),t.print(renderCliTaggedLine(t.theme,{message:JSON.stringify(t.request.action.input,null,2),tag:`tool`,tone:`muted`}));;){let r=await t.ask(`approval> `);if(r===void 0)return{kind:`aborted`};if(r===ESCAPED_RUNTIME_INPUT_PROMPT)return{kind:`deferred`};let i=r.trim().toLowerCase();if(i===`skip`||i===`/skip`)return{kind:`deferred`};if(i===`a`||i===`approve`||i===`y`||i===`yes`)return{inputResponse:{optionId:`approve`,requestId:t.request.requestId},kind:`submitted`};if(i===`d`||i===`deny`||i===`n`||i===`no`)return{inputResponse:{optionId:`deny`,requestId:t.request.requestId},kind:`submitted`};t.print(renderCliTaggedLine(t.theme,{message:`enter "yes" to approve, "no" to deny, press Escape, or type "skip" to return to the normal prompt`,tag:`input`,tone:`warning`}))}}async function promptForQuestionInputRequest(r){r.print(renderCliTaggedLine(r.theme,{message:r.request.prompt,tag:`question`,tone:`info`}));for(let[t,n]of(r.request.options??[]).entries())r.print(renderCliTaggedLine(r.theme,{message:`${t+1}. ${n.label}${n.description===void 0?``:` - ${n.description}`}`,tag:`option`,tone:`muted`}));let i=r.request.allowFreeform===!0||(r.request.options?.length??0)===0;for(;;){let a=await r.ask(`answer> `);if(a===void 0)return{kind:`aborted`};if(a===ESCAPED_RUNTIME_INPUT_PROMPT)return{kind:`deferred`};let o=a.trim();if(o===`skip`||o===`/skip`)return{kind:`deferred`};let s=resolveTextToResponse(o,r.request);if(s!==void 0)return{inputResponse:s,kind:`submitted`};r.print(renderCliTaggedLine(r.theme,{message:r.request.options===void 0||r.request.options.length===0?`enter a response, press Escape, or type "skip" to return to the normal prompt`:i?`enter an option number/id, freeform text, press Escape, or type "skip" to return to the normal prompt`:`enter an option number/id, press Escape, or type "skip" to return to the normal prompt`,tag:`input`,tone:`warning`}))}}export{ESCAPED_RUNTIME_INPUT_PROMPT,extractPendingRuntimeInputRequests,promptForRuntimeInputRequests};
@@ -1,19 +0,0 @@
1
- /**
2
- * Parsed result for one line of interactive `eve dev` input.
3
- */
4
- export type DevReplInput = {
5
- kind: "empty";
6
- } | {
7
- kind: "exit";
8
- } | {
9
- kind: "help";
10
- } | {
11
- kind: "new";
12
- } | {
13
- kind: "message";
14
- message: string;
15
- };
16
- /**
17
- * Parse one line of input for the minimal development REPL.
18
- */
19
- export declare function parseDevReplInput(value: string): DevReplInput;
@@ -1 +0,0 @@
1
- function parseDevReplInput(e){let t=e.trim();return t.length===0?{kind:`empty`}:t===`/exit`||t===`/quit`?{kind:`exit`}:t===`/help`?{kind:`help`}:t===`/new`?{kind:`new`}:{kind:`message`,message:t}}export{parseDevReplInput};
@@ -1,62 +0,0 @@
1
- import { type HandleMessageStreamEvent } from "#protocol/message.js";
2
- import type { InputRequest } from "#runtime/input/types.js";
3
- import { type CliTheme } from "#cli/ui/output.js";
4
- import { createDevelopmentTerminal } from "#cli/dev/repl/terminal.js";
5
- export type ReplDisplayBlockKind = "content" | "meta";
6
- export type LiveContentKind = "message" | "reasoning";
7
- export interface FormattedContentEvent {
8
- readonly finalized: boolean;
9
- readonly kind: LiveContentKind;
10
- readonly line: string;
11
- }
12
- export interface TurnDisplayState {
13
- readonly activeLiveContentKind: LiveContentKind | null;
14
- readonly lastPrintedBlockKind: ReplDisplayBlockKind | null;
15
- }
16
- interface TurnEventRenderOptions {
17
- readonly isSubagent?: boolean;
18
- readonly sourceLabel?: string;
19
- }
20
- export type TurnDisplayTerminal = Pick<ReturnType<typeof createDevelopmentTerminal>, "commitLive" | "print" | "updateLive">;
21
- export declare function formatContentEvent(theme: CliTheme, event: HandleMessageStreamEvent, options?: TurnEventRenderOptions): FormattedContentEvent | undefined;
22
- export declare function formatEvent(theme: CliTheme, event: HandleMessageStreamEvent, options?: TurnEventRenderOptions): string | undefined;
23
- export declare function createTurnDisplayState(): TurnDisplayState;
24
- export declare function renderTurnEvent(input: {
25
- readonly event: HandleMessageStreamEvent;
26
- readonly options?: TurnEventRenderOptions;
27
- readonly state: TurnDisplayState;
28
- readonly terminal: TurnDisplayTerminal;
29
- readonly theme: CliTheme;
30
- }): TurnDisplayState;
31
- /**
32
- * Decides whether the REPL should drain in-flight subagent stream
33
- * subscriptions before redrawing the next user prompt.
34
- *
35
- * Returns `true` for ordinary turn boundaries (no pending input
36
- * requests on the parent stream). The drain ensures any final
37
- * subagent events — `session.completed`, `session.failed`, or
38
- * trailing messages — render in order with the parent boundary.
39
- *
40
- * Returns `false` when the parent's boundary carries one or more
41
- * pending input requests (HITL). A subagent that triggered the HITL
42
- * request runs in `task` mode (see `execution/subagent-tool.ts`)
43
- * and never emits a turn-boundary event on its own stream while
44
- * parked for HITL — `harness/tool-loop.ts` gates `emitTurnEpilogue`
45
- * on `mode === "conversation"`. Blocking on
46
- * `ReplSubagentStreamManager.waitForIdle()` here would stall the
47
- * prompt until the subagent's serverless function times out, which
48
- * is exactly the multi-minute delay this gate prevents.
49
- *
50
- * Subagent subscriptions stay alive across the prompt; they resume
51
- * rendering when the user answers and the subagent unparks.
52
- *
53
- * Exported for unit-test coverage of the gating contract.
54
- */
55
- export declare function shouldDrainSubagentStreamsOnBoundary(pendingInputRequests: readonly InputRequest[]): boolean;
56
- /**
57
- * Run the minimal interactive `eve dev` REPL against an Eve server.
58
- */
59
- export declare function runDevelopmentRepl(input: {
60
- serverUrl: string;
61
- }): Promise<void>;
62
- export {};
@@ -1,2 +0,0 @@
1
- import{EVE_CONTINUE_SESSION_ROUTE_PATTERN,EVE_CREATE_SESSION_ROUTE_PATH,EVE_MESSAGE_STREAM_ROUTE_PATTERN,createEveMessageStreamRoutePath}from"#protocol/routes.js";import{createCliTheme,renderCliBanner,renderCliSection,renderCliSpeakerLine,renderCliTaggedLine}from"#cli/ui/output.js";import{createInterface,emitKeypressEvents}from"node:readline";import{openStreamIterable}from"#client/open-stream.js";import{isCurrentTurnBoundaryEvent}from"#protocol/message.js";import{toErrorMessage}from"#shared/errors.js";import{createDevelopmentRequestHeadersAsync}from"#services/dev-client/request-headers.js";import{extractCurrentTurnBoundaryEvent}from"#services/dev-client/stream.js";import{resolveDevelopmentServerResourceUrl}from"#services/dev-client/url.js";import{formatVercelAuthChallengeMessage,isVercelAuthChallenge}from"#services/dev-client/vercel-auth-error.js";import{createDevClient}from"#services/dev-client.js";import{parseDevReplInput}from"#cli/dev/repl/input.js";import{ESCAPED_RUNTIME_INPUT_PROMPT,extractPendingRuntimeInputRequests,promptForRuntimeInputRequests}from"#cli/dev/repl/input-requests.js";import{createDevelopmentTerminal}from"#cli/dev/repl/terminal.js";function renderConnectionRows(r){let i=[{label:`Server`,tone:`info`,value:r.serverUrl},{label:`Create`,tone:`info`,value:`POST ${EVE_CREATE_SESSION_ROUTE_PATH}`},{label:`Continue`,tone:`info`,value:`POST ${EVE_CONTINUE_SESSION_ROUTE_PATTERN}`},{label:`Stream`,tone:`info`,value:`GET ${EVE_MESSAGE_STREAM_ROUTE_PATTERN}`}];return i.push({label:`Session`,value:`Follow-up messages reuse the active continuation token.`}),i}function renderCommandRows(){return[{label:`/help`,value:`Print the connection contract and available commands.`},{label:`/new`,value:`Clear the current durable session cursor.`},{label:`/exit`,value:`Exit the REPL.`}]}function renderIntro(e,t){return[renderCliBanner(e,{subtitle:`Interactive development REPL for the active Eve server.`,title:`Eve Dev`}),``,renderCliSection(e,{rows:renderConnectionRows(t),title:`Connection`}),``,renderCliSection(e,{rows:renderCommandRows(),title:`Commands`})].join(`
2
- `)}function normalizeStepMessage(e){let t=e.trim();return t.length>0?t:null}function getRenderTag(e){return e.options?.isSubagent===!0?`subagent`:e.fallback}function getRenderTone(e){return e.options?.isSubagent===!0?`subagent`:e.fallback}function prefixSourceLabel(e){return e.options?.sourceLabel===void 0?e.message:`${e.options.sourceLabel}${e.separator??` `}${e.message}`}function formatContentEvent(e,t,n){switch(t.type){case`message.appended`:return{finalized:!1,kind:`message`,line:renderCliSpeakerLine(e,{message:t.data.messageSoFar,speaker:n?.sourceLabel??`agent`,tone:getRenderTone({fallback:`accent`,options:n})})};case`message.completed`:if(t.data.message===null)return;if(t.data.finishReason===`tool-calls`){let r=normalizeStepMessage(t.data.message);return r===null?void 0:{finalized:!0,kind:`message`,line:renderCliTaggedLine(e,{message:prefixSourceLabel({message:r,options:n,separator:`: `}),tag:getRenderTag({fallback:`step`,options:n}),tone:getRenderTone({fallback:`accent`,options:n})})}}return{finalized:!0,kind:`message`,line:renderCliSpeakerLine(e,{message:t.data.message,speaker:n?.sourceLabel??`agent`,tone:getRenderTone({fallback:`accent`,options:n})})};case`reasoning.appended`:return{finalized:!1,kind:`reasoning`,line:renderCliTaggedLine(e,{message:prefixSourceLabel({message:t.data.reasoningSoFar,options:n,separator:`: `}),tag:getRenderTag({fallback:`reasoning`,options:n}),tone:getRenderTone({fallback:`info`,options:n})})};case`reasoning.completed`:return{finalized:!0,kind:`reasoning`,line:renderCliTaggedLine(e,{message:prefixSourceLabel({message:t.data.reasoning,options:n,separator:`: `}),tag:getRenderTag({fallback:`reasoning`,options:n}),tone:getRenderTone({fallback:`info`,options:n})})};default:return}}function formatEvent(e,t,n){let r=formatContentEvent(e,t,n);if(r!==void 0)return r.line;switch(t.type){case`message.received`:return;case`actions.requested`:return renderCliTaggedLine(e,{message:prefixSourceLabel({message:`${t.type} (${t.data.actions.length} action${t.data.actions.length===1?``:`s`})`,options:n}),tag:getRenderTag({fallback:`event`,options:n}),tone:getRenderTone({fallback:`muted`,options:n})});case`input.requested`:return renderCliTaggedLine(e,{message:prefixSourceLabel({message:`${t.type} (${t.data.requests.length} request${t.data.requests.length===1?``:`s`})`,options:n}),tag:getRenderTag({fallback:`event`,options:n}),tone:getRenderTone({fallback:`info`,options:n})});case`action.result`:return renderCliTaggedLine(e,{message:prefixSourceLabel({message:`${t.type} (${formatActionResultLabel(t.data.result)})`,options:n}),tag:getRenderTag({fallback:`event`,options:n}),tone:getRenderTone({fallback:`muted`,options:n})});case`session.waiting`:case`session.completed`:return;case`authorization.required`:return renderCliTaggedLine(e,{message:prefixSourceLabel({message:`${t.type} (${t.data.name}: ${t.data.description}${formatAuthorizationChallengeSuffix(t.data.authorization)})`,options:n}),tag:getRenderTag({fallback:`event`,options:n}),tone:getRenderTone({fallback:`warning`,options:n})});case`compaction.requested`:return renderCliTaggedLine(e,{message:prefixSourceLabel({message:`compacting conversation history`,options:n}),tag:getRenderTag({fallback:`event`,options:n}),tone:getRenderTone({fallback:`muted`,options:n})});case`compaction.completed`:return renderCliTaggedLine(e,{message:prefixSourceLabel({message:`conversation history compacted`,options:n}),tag:getRenderTag({fallback:`event`,options:n}),tone:getRenderTone({fallback:`muted`,options:n})});case`step.failed`:case`turn.failed`:case`session.failed`:return;case`subagent.called`:return renderCliTaggedLine(e,{message:prefixSourceLabel({message:`${t.type} (${t.data.name} -> ${t.data.childSessionId})`,options:n}),tag:getRenderTag({fallback:`event`,options:n}),tone:getRenderTone({fallback:`info`,options:n})});case`subagent.started`:return renderCliTaggedLine(e,{message:prefixSourceLabel({message:`${t.type} (${t.data.subagentName})`,options:n}),tag:getRenderTag({fallback:`event`,options:n}),tone:getRenderTone({fallback:`info`,options:n})});case`subagent.event`:return renderCliTaggedLine(e,{message:prefixSourceLabel({message:`${t.type} (${t.data.subagentName}: ${formatNestedSubagentEventLabel(t.data.event)})`,options:n}),tag:getRenderTag({fallback:`event`,options:n}),tone:getRenderTone({fallback:`muted`,options:n})});case`subagent.completed`:return renderCliTaggedLine(e,{message:prefixSourceLabel({message:`${t.type} (${t.data.subagentName})`,options:n}),tag:getRenderTag({fallback:`event`,options:n}),tone:getRenderTone({fallback:`info`,options:n})});default:return}}function getEventDisplayBlockKind(e){switch(e.type){case`message.appended`:case`message.completed`:case`reasoning.appended`:case`reasoning.completed`:return`content`;default:return`meta`}}function createTurnDisplayState(){return{activeLiveContentKind:null,lastPrintedBlockKind:null}}function printDisplayLine(e){let t=e.state;return t.activeLiveContentKind!==null&&(e.terminal.commitLive(),t={activeLiveContentKind:null,lastPrintedBlockKind:`content`}),t.lastPrintedBlockKind!==null&&t.lastPrintedBlockKind!==e.kind&&e.terminal.print(``),e.terminal.print(e.line),{activeLiveContentKind:null,lastPrintedBlockKind:e.kind}}function renderTurnEvent(e){let t=formatContentEvent(e.theme,e.event,e.options);if(t!==void 0){let n=e.state;return n.activeLiveContentKind!==null&&n.activeLiveContentKind!==t.kind&&(e.terminal.commitLive(),n={activeLiveContentKind:null,lastPrintedBlockKind:`content`}),n.lastPrintedBlockKind!==null&&n.lastPrintedBlockKind!==`content`&&e.terminal.print(``),e.terminal.updateLive(t.line),t.finalized?(e.terminal.commitLive(),{activeLiveContentKind:null,lastPrintedBlockKind:`content`}):{activeLiveContentKind:t.kind,lastPrintedBlockKind:`content`}}let n=formatEvent(e.theme,e.event,e.options);return n===void 0?e.state:printDisplayLine({kind:getEventDisplayBlockKind(e.event),line:n,state:e.state,terminal:e.terminal})}function isAbortLikeError(e){return(e instanceof DOMException||e instanceof Error)&&e.name===`AbortError`}function shouldDrainSubagentStreamsOnBoundary(e){return e.length===0}var ReplSubagentStreamManager=class{#e=new Map;#t;#n;#r;#i;constructor(e){this.#t=e.displayStateRef,this.#n=e.serverUrl,this.#r=e.terminal,this.#i=e.theme}subscribe(e){if(this.#e.has(e.sessionId))return;let t=new AbortController,n=this.#a({controller:t,sessionId:e.sessionId,subagentName:e.subagentName}).finally(()=>{this.#e.delete(e.sessionId)});this.#e.set(e.sessionId,{controller:t,done:n,label:e.subagentName})}async waitForIdle(){for(;this.#e.size>0;)await Promise.all([...this.#e.values()].map(e=>e.done))}async close(){let e=[...this.#e.values()];for(let t of e)t.controller.abort();await Promise.allSettled(e.map(e=>e.done))}async#a(e){let t=resolveDevelopmentServerResourceUrl({resource:createEveMessageStreamRoutePath(e.sessionId),serverUrl:this.#n});try{for await(let n of openStreamIterable({host:this.#n,maxReconnectAttempts:3,resolveHeaders:async()=>await createDevelopmentRequestHeadersAsync({resourceUrl:t}),sessionId:e.sessionId,signal:e.controller.signal,startIndex:0}))if(this.#t.current=renderTurnEvent({event:n,options:{isSubagent:!0,sourceLabel:e.subagentName},state:this.#t.current,terminal:this.#r,theme:this.#i}),n.type===`subagent.called`&&this.subscribe({sessionId:n.data.childSessionId,subagentName:n.data.name}),isCurrentTurnBoundaryEvent(n))return}catch(t){if(isAbortLikeError(t))return;let n=toErrorMessage(t);this.#t.current=printDisplayLine({kind:`meta`,line:renderCliTaggedLine(this.#i,{message:`${e.subagentName} stream failed: ${n}`,tag:`subagent`,tone:`danger`}),state:this.#t.current,terminal:this.#r})}finally{e.controller.abort()}}};function formatActionResultLabel(e){switch(e.kind){case`load-skill-result`:return e.kind;case`subagent-result`:return`${e.kind}:${e.subagentName}`;case`tool-result`:return`${e.kind}:${e.toolName}`}}function formatAuthorizationChallengeSuffix(e){if(e===void 0)return``;let t=[];return e.url!==void 0&&t.push(e.url),e.userCode!==void 0&&t.push(`code ${e.userCode}`),e.instructions!==void 0&&t.push(e.instructions),t.length===0?``:` — ${t.join(`, `)}`}function formatNestedSubagentEventLabel(e){switch(e.type){case`actions.requested`:{let t=e.data.actions,n=t.map(e=>e.kind===`tool-call`?e.toolName:e.kind).join(`,`);return`${e.type} (${t.length} action${t.length===1?``:`s`}${n.length>0?`: ${n}`:``})`}case`action.result`:return`${e.type} (${formatActionResultLabel(e.data.result)})`;case`input.requested`:return`${e.type} (${e.data.requests.length} request${e.data.requests.length===1?``:`s`})`;default:return e.type}}function formatDispatch(e,t){return t.continuationToken?renderCliTaggedLine(e,{message:`resuming session ${t.continuationToken}`,tag:`session`,tone:`info`}):renderCliTaggedLine(e,{message:`starting a new session`,tag:`session`,tone:`info`})}function formatTurnDispatch(e,t){return t.turn.inputResponses!==void 0&&t.turn.message===void 0?renderCliTaggedLine(e,{message:`responding to pending input request${t.turn.inputResponses.length===1?``:`s`}`,tag:`session`,tone:`info`}):formatDispatch(e,t.session)}function formatSessionBoundary(e,t){let n=extractCurrentTurnBoundaryEvent(t),r=extractPendingRuntimeInputRequests(t);switch(n?.type){case`session.waiting`:return[renderCliTaggedLine(e,{message:r.length>0?`waiting for input approval/answer or the next message`:`waiting for the next message`,tag:`session`,tone:`success`})];case`session.completed`:return[renderCliTaggedLine(e,{message:`session completed; the next input starts a new session`,tag:`session`,tone:`success`})];case`session.failed`:{let t=n.data.details&&typeof n.data.details.name==`string`?n.data.details.name:void 0;return[renderCliTaggedLine(e,{message:t?`session failed (${t}): ${n.data.message}`:`session failed: ${n.data.message}`,tag:`session`,tone:`danger`}),renderCliTaggedLine(e,{message:`cleared; the next input starts a new session`,tag:`session`,tone:`warning`})]}default:return[]}}async function waitForInputLine(e,t,n={}){return await new Promise(r=>{let i=e.input,cleanup=()=>{e.off(`close`,handleClose),e.off(`line`,handleLine),i.off(`keypress`,handleKeypress)},handleClose=()=>{cleanup(),r(void 0)},handleLine=e=>{cleanup(),r(e)},handleKeypress=(t,i)=>{n.allowEscape!==!0||i.name!==`escape`||(cleanup(),e.write(null,{ctrl:!0,name:`u`}),r(ESCAPED_RUNTIME_INPUT_PROMPT))};e.setPrompt(t),e.once(`close`,handleClose),e.once(`line`,handleLine),n.allowEscape&&(emitKeypressEvents(i,e),i.on(`keypress`,handleKeypress)),e.prompt()})}async function runTurn(e){let t=e.turn,n={current:createTurnDisplayState()},i=new ReplSubagentStreamManager({displayStateRef:n,serverUrl:e.serverUrl,terminal:e.terminal,theme:e.theme}),ask=async t=>{e.terminal.startPrompt(e.rl,t);let n=await waitForInputLine(e.rl,t,{allowEscape:!0});return e.terminal.stopPrompt(),n};try{for(;;){let a=e.client.getSession();n.current=printDisplayLine({kind:`meta`,line:formatTurnDispatch(e.theme,{session:a,turn:t}),state:n.current,terminal:e.terminal});let o=await e.client.send({inputResponses:t.inputResponses,message:t.message,onEvent(t){n.current=renderTurnEvent({event:t,state:n.current,terminal:e.terminal,theme:e.theme}),t.type===`subagent.called`&&i.subscribe({sessionId:t.data.childSessionId,subagentName:t.data.name})},onResponseStart(t){t.sessionId&&a.sessionId!==t.sessionId&&(n.current=printDisplayLine({kind:`meta`,line:renderCliTaggedLine(e.theme,{message:t.sessionId,tag:`session`,tone:`accent`}),state:n.current,terminal:e.terminal}),n.current=printDisplayLine({kind:`meta`,line:renderCliTaggedLine(e.theme,{message:resolveDevelopmentServerResourceUrl({resource:createEveMessageStreamRoutePath(t.sessionId),serverUrl:e.serverUrl}).toString(),tag:`stream`,tone:`info`}),state:n.current,terminal:e.terminal}))}}),s=extractPendingRuntimeInputRequests(o.events);if(shouldDrainSubagentStreamsOnBoundary(s)){await i.waitForIdle();for(let t of formatSessionBoundary(e.theme,o.events))n.current=printDisplayLine({kind:`meta`,line:t,state:n.current,terminal:e.terminal});return`continue`}let c=await promptForRuntimeInputRequests({ask,print(t){n.current=printDisplayLine({kind:`meta`,line:t,state:n.current,terminal:e.terminal})},requests:s,theme:e.theme});if(c.kind===`aborted`)return`exit`;if(c.kind===`deferred`)return n.current=printDisplayLine({kind:`meta`,line:renderCliTaggedLine(e.theme,{message:`left pending input requests unresolved; send a new message to ignore them`,tag:`session`,tone:`warning`}),state:n.current,terminal:e.terminal}),`continue`;t={inputResponses:c.inputResponses}}}finally{await i.close()}}async function runDevelopmentRepl(e){let t=createDevelopmentTerminal(),n=createCliTheme({color:!0}),r=createInterface({input:process.stdin,output:t.output,terminal:!0});r.on(`SIGINT`,()=>{r.close()});let a=createDevClient({serverUrl:e.serverUrl});try{for(t.print(renderIntro(n,e)),t.print(``);;){t.print(``),t.startPrompt(r,`you> `);let i=await waitForInputLine(r,`you> `);if(t.stopPrompt(),i===void 0)return;let o=parseDevReplInput(i);switch(o.kind!==`empty`&&o.kind!==`exit`&&t.print(``),o.kind){case`empty`:continue;case`help`:t.print(renderIntro(n,e)),t.print(``);continue;case`exit`:return;case`new`:await a.clear(),t.print(renderCliTaggedLine(n,{message:`cleared; the next input starts a new session`,tag:`session`,tone:`warning`})),t.print(``);continue;case`message`:try{if(await runTurn({client:a,rl:r,serverUrl:e.serverUrl,terminal:t,theme:n,turn:{message:o.message}})===`exit`)return}catch(r){isVercelAuthChallenge(r)?t.printError(renderCliTaggedLine(n,{message:formatVercelAuthChallengeMessage({serverUrl:e.serverUrl}),tag:`auth`,tone:`warning`})):t.printError(renderCliTaggedLine(n,{message:toErrorMessage(r),tag:`error`,tone:`danger`}))}t.print(``)}}}finally{await a.close(),r.close(),t.dispose()}}export{createTurnDisplayState,formatContentEvent,formatEvent,renderTurnEvent,runDevelopmentRepl,shouldDrainSubagentStreamsOnBoundary};
@@ -1,21 +0,0 @@
1
- import type { Interface } from "node:readline";
2
- /**
3
- * Output controller used by the interactive `eve dev` REPL.
4
- *
5
- * It keeps the prompt stable by temporarily clearing and restoring it when
6
- * background server logs write to stdout or stderr.
7
- */
8
- export interface DevelopmentTerminal {
9
- commitLive(): void;
10
- readonly output: NodeJS.WriteStream;
11
- dispose(): void;
12
- print(message: string): void;
13
- printError(message: string): void;
14
- startPrompt(rl: Interface, prompt: string): void;
15
- stopPrompt(): void;
16
- updateLive(message: string): void;
17
- }
18
- /**
19
- * Creates the terminal surface used by the interactive development REPL.
20
- */
21
- export declare function createDevelopmentTerminal(): DevelopmentTerminal;
@@ -1,5 +0,0 @@
1
- const ansiSgrPattern=RegExp(`${String.fromCodePoint(27)}\\[[0-9;]*m`,`gu`);function chunkToString(e,t){return typeof e==`string`?e:Buffer.from(e).toString(t)}function endsWithLineBreak(e){return e.endsWith(`
2
- `)||e.endsWith(`\r`)}function stripAnsi(t){return t.replace(ansiSgrPattern,``)}function countRenderedLines(e){let t=process.stdout.columns;return e.split(/\r\n|\r|\n/u).reduce((e,n)=>{let r=Array.from(stripAnsi(n)).length;return t===void 0||t<=0?e+1:e+Math.max(1,Math.ceil(r/t))},0)}function getPromptCursor(e){let t=e.cursor;return typeof t==`number`?t:e.line.length}function createDevelopmentTerminal(){let e=process.stdout.write.bind(process.stdout),t=process.stderr.write.bind(process.stderr),n=null,r=null,writeOriginal=(e,t,n,r,i)=>Reflect.apply(t,e,[n,r,i]),clearPrompt=()=>{n!==null&&writeOriginal(process.stdout,e,`\x1B[2K\r`)},redrawPrompt=()=>{if(n===null)return;let{prompt:t,rl:r}=n,i=getPromptCursor(r),a=r.line.length-i;writeOriginal(process.stdout,e,`${t}${r.line}`),a>0&&writeOriginal(process.stdout,e,`\u001B[${a}D`)},clearLiveBlock=()=>{if(r!==null)for(let t=0;t<r.lineCount;t+=1)writeOriginal(process.stdout,e,`\x1B[1A`),writeOriginal(process.stdout,e,`\x1B[2K\r`)},renderLiveBlock=t=>{let n=t.length===0||!endsWithLineBreak(t);writeOriginal(process.stdout,e,t),n&&writeOriginal(process.stdout,e,`
3
- `),r={lineCount:countRenderedLines(t),message:t}},printMessage=(e,t,r)=>{let i=n!==null,a=e.length===0||!endsWithLineBreak(e);i&&clearPrompt(),writeOriginal(r,t,e),a&&writeOriginal(r,t,`
4
- `),i&&redrawPrompt()},patchStream=(e,t)=>(e.write=((i,a,o)=>{if(n===null&&r===null)return writeOriginal(e,t,i,a,o);let s=chunkToString(i,typeof a==`string`?a:void 0),c=r;n!==null&&clearPrompt(),c!==null&&(clearLiveBlock(),r=null);let l=writeOriginal(e,t,i,a,o);return s.length>0&&!endsWithLineBreak(s)&&writeOriginal(e,t,`
5
- `),c!==null&&renderLiveBlock(c.message),n!==null&&redrawPrompt(),l}),()=>{e.write=t}),i=patchStream(process.stdout,e),a=patchStream(process.stderr,t);return{commitLive(){r=null},dispose(){n=null,r=null,i(),a()},output:new Proxy(process.stdout,{get(t,n,r){if(n===`write`)return(t,n,r)=>writeOriginal(process.stdout,e,t,n,r);let i=Reflect.get(t,n,r);return typeof i==`function`?i.bind(t):i}}),print(t){printMessage(t,e,process.stdout)},printError(e){printMessage(e,t,process.stderr)},startPrompt(e,t){n={prompt:t,rl:e}},stopPrompt(){n=null},updateLive(e){let t=n!==null;t&&clearPrompt(),r!==null&&(clearLiveBlock(),r=null),renderLiveBlock(e),t&&redrawPrompt()}}}export{createDevelopmentTerminal};