eve 0.6.0-beta.8 → 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 (588) hide show
  1. package/CHANGELOG.md +278 -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 +6 -3
  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 +31 -9
  29. package/dist/docs/public/reference/typescript-api.md +6 -2
  30. package/dist/docs/public/sandbox.mdx +3 -1
  31. package/dist/docs/public/tools.mdx +0 -4
  32. package/dist/docs/public/tutorial/connect-a-warehouse.mdx +1 -1
  33. package/dist/docs/public/tutorial/first-agent.mdx +5 -2
  34. package/dist/src/chunks/{use-eve-agent-DCZbkLG7.js → use-eve-agent-DErQj5hs.js} +125 -37
  35. package/dist/src/chunks/{use-eve-agent-DoheC4_o.js → use-eve-agent-DoR8C4i6.js} +125 -37
  36. package/dist/src/cli/banner.d.ts +7 -0
  37. package/dist/src/cli/banner.js +1 -0
  38. package/dist/src/cli/commands/channel-add-conflicts.d.ts +1 -1
  39. package/dist/src/cli/commands/channels.d.ts +9 -6
  40. package/dist/src/cli/commands/channels.js +1 -1
  41. package/dist/src/cli/commands/deploy.d.ts +21 -0
  42. package/dist/src/cli/commands/deploy.js +1 -0
  43. package/dist/src/cli/commands/init-git.d.ts +15 -0
  44. package/dist/src/cli/commands/init-git.js +1 -0
  45. package/dist/src/cli/commands/init.d.ts +29 -0
  46. package/dist/src/cli/commands/init.js +1 -0
  47. package/dist/src/cli/commands/link.d.ts +21 -0
  48. package/dist/src/cli/commands/link.js +1 -0
  49. package/dist/src/cli/commands/preconditions.d.ts +7 -0
  50. package/dist/src/cli/commands/preconditions.js +1 -0
  51. package/dist/src/cli/commands/register-project-commands.d.ts +12 -0
  52. package/dist/src/cli/commands/register-project-commands.js +1 -0
  53. package/dist/src/cli/dev/tui/agent-header.d.ts +15 -9
  54. package/dist/src/cli/dev/tui/agent-header.js +1 -1
  55. package/dist/src/cli/dev/tui/blocks.d.ts +1 -1
  56. package/dist/src/cli/dev/tui/blocks.js +3 -2
  57. package/dist/src/cli/dev/tui/command-typeahead.d.ts +47 -0
  58. package/dist/src/cli/dev/tui/command-typeahead.js +1 -0
  59. package/dist/src/cli/dev/tui/dev-rebuild-status.d.ts +21 -0
  60. package/dist/src/cli/dev/tui/dev-rebuild-status.js +1 -0
  61. package/dist/src/cli/dev/tui/errors.d.ts +18 -0
  62. package/dist/src/cli/dev/tui/errors.js +1 -1
  63. package/dist/src/cli/dev/tui/prompt-command-handler.d.ts +14 -0
  64. package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -0
  65. package/dist/src/cli/dev/tui/prompt-commands.d.ts +54 -0
  66. package/dist/src/cli/dev/tui/prompt-commands.js +2 -0
  67. package/dist/src/cli/dev/tui/runner.d.ts +62 -5
  68. package/dist/src/cli/dev/tui/runner.js +1 -1
  69. package/dist/src/cli/dev/tui/setup-commands.d.ts +48 -0
  70. package/dist/src/cli/dev/tui/setup-commands.js +2 -0
  71. package/dist/src/cli/dev/tui/setup-flow.d.ts +35 -0
  72. package/dist/src/cli/dev/tui/setup-issues.d.ts +40 -0
  73. package/dist/src/cli/dev/tui/setup-issues.js +1 -0
  74. package/dist/src/cli/dev/tui/setup-panel.d.ts +103 -0
  75. package/dist/src/cli/dev/tui/setup-panel.js +1 -0
  76. package/dist/src/cli/dev/tui/status-line.d.ts +25 -0
  77. package/dist/src/cli/dev/tui/status-line.js +1 -0
  78. package/dist/src/cli/dev/tui/stream-format.d.ts +16 -1
  79. package/dist/src/cli/dev/tui/stream-format.js +1 -1
  80. package/dist/src/cli/dev/tui/terminal-renderer.d.ts +32 -3
  81. package/dist/src/cli/dev/tui/terminal-renderer.js +5 -2
  82. package/dist/src/cli/dev/tui/test/index.d.ts +3 -1
  83. package/dist/src/cli/dev/tui/test/index.js +1 -1
  84. package/dist/src/cli/dev/tui/test/mock-terminal.d.ts +1 -0
  85. package/dist/src/cli/dev/tui/test/mock-terminal.js +1 -1
  86. package/dist/src/cli/dev/tui/theme.d.ts +10 -0
  87. package/dist/src/cli/dev/tui/theme.js +1 -1
  88. package/dist/src/cli/dev/tui/tui-prompter.d.ts +20 -0
  89. package/dist/src/cli/dev/tui/tui-prompter.js +1 -0
  90. package/dist/src/cli/dev/tui/tui.d.ts +6 -8
  91. package/dist/src/cli/dev/tui/tui.js +1 -1
  92. package/dist/src/cli/dev/tui/types.d.ts +4 -3
  93. package/dist/src/cli/dev/tui/vercel-status.d.ts +47 -0
  94. package/dist/src/cli/dev/tui/vercel-status.js +1 -0
  95. package/dist/src/cli/run.d.ts +12 -19
  96. package/dist/src/cli/run.js +2 -2
  97. package/dist/src/client/client.d.ts +8 -0
  98. package/dist/src/client/client.js +1 -1
  99. package/dist/src/client/file-parts.d.ts +18 -0
  100. package/dist/src/client/file-parts.js +1 -0
  101. package/dist/src/client/index.d.ts +3 -2
  102. package/dist/src/client/index.js +1 -1
  103. package/dist/src/client/message-response.js +1 -1
  104. package/dist/src/client/open-stream.d.ts +6 -0
  105. package/dist/src/client/open-stream.js +1 -1
  106. package/dist/src/client/session-utils.d.ts +5 -0
  107. package/dist/src/client/session-utils.js +1 -1
  108. package/dist/src/client/session.js +1 -1
  109. package/dist/src/client/types.d.ts +9 -2
  110. package/dist/src/compiled/.vendor-stamp.json +8 -8
  111. package/dist/src/compiled/@ai-sdk/anthropic/index.d.ts +56 -31
  112. package/dist/src/compiled/@ai-sdk/anthropic/index.js +2 -2
  113. package/dist/src/compiled/@ai-sdk/google/index.js +1 -1
  114. package/dist/src/compiled/@ai-sdk/mcp/index.js +1 -1
  115. package/dist/src/compiled/@ai-sdk/openai/index.d.ts +16 -9
  116. package/dist/src/compiled/@ai-sdk/openai/index.js +2 -2
  117. package/dist/src/compiled/@ai-sdk/otel/index.js +2 -2
  118. package/dist/src/compiled/@vercel/sandbox/index.js +1 -1
  119. package/dist/src/compiled/@workflow/core/index.js +2 -2
  120. package/dist/src/compiled/@workflow/core/runtime/helpers.d.ts +4 -2
  121. package/dist/src/compiled/@workflow/core/runtime/wait-until.d.ts +18 -0
  122. package/dist/src/compiled/@workflow/core/runtime.d.ts +3 -1
  123. package/dist/src/compiled/@workflow/core/runtime.js +28 -28
  124. package/dist/src/compiled/@workflow/core/serialization.d.ts +41 -0
  125. package/dist/src/compiled/@workflow/core/util.d.ts +0 -5
  126. package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
  127. package/dist/src/compiled/@workflow/core/workflow.js +1 -1
  128. package/dist/src/compiled/@workflow/world/index.d.ts +2 -2
  129. package/dist/src/compiled/@workflow/world/queue.d.ts +28 -2
  130. package/dist/src/compiled/_chunks/workflow/{dist-gEXVSMPU.js → dist-CkMRLaRV.js} +1 -1
  131. package/dist/src/compiled/_chunks/workflow/functions-DuPjIvMH.js +1 -0
  132. package/dist/src/compiled/_chunks/workflow/resume-hook-CEAS3opc.js +12 -0
  133. package/dist/src/compiled/_chunks/workflow/sleep-Cup6vPoA.js +1 -0
  134. package/dist/src/compiled/_chunks/workflow/{symbols-BWCAoPHE.js → symbols-BUTtwS7j.js} +1 -1
  135. package/dist/src/compiled/just-bash/index.d.ts +27 -4
  136. package/dist/src/compiler/artifacts.js +1 -1
  137. package/dist/src/compiler/manifest.d.ts +8 -8
  138. package/dist/src/compiler/normalize-agent-config.d.ts +0 -10
  139. package/dist/src/compiler/normalize-agent-config.js +1 -1
  140. package/dist/src/compiler/normalize-channel.d.ts +2 -1
  141. package/dist/src/compiler/normalize-channel.js +1 -1
  142. package/dist/src/compiler/normalize-connection.d.ts +2 -1
  143. package/dist/src/compiler/normalize-connection.js +1 -1
  144. package/dist/src/compiler/normalize-helpers.d.ts +5 -0
  145. package/dist/src/compiler/normalize-helpers.js +1 -1
  146. package/dist/src/compiler/normalize-instructions.d.ts +3 -2
  147. package/dist/src/compiler/normalize-instructions.js +1 -1
  148. package/dist/src/compiler/normalize-manifest.js +2 -2
  149. package/dist/src/compiler/normalize-sandbox.d.ts +2 -1
  150. package/dist/src/compiler/normalize-sandbox.js +1 -1
  151. package/dist/src/compiler/normalize-schedule.d.ts +2 -1
  152. package/dist/src/compiler/normalize-schedule.js +1 -1
  153. package/dist/src/compiler/normalize-skill.d.ts +2 -1
  154. package/dist/src/compiler/normalize-skill.js +1 -1
  155. package/dist/src/compiler/normalize-subagent.d.ts +4 -1
  156. package/dist/src/compiler/normalize-subagent.js +1 -1
  157. package/dist/src/compiler/normalize-tool.d.ts +2 -1
  158. package/dist/src/compiler/normalize-tool.js +1 -1
  159. package/dist/src/compiler/workspace-resources.js +1 -1
  160. package/dist/src/context/node.d.ts +1 -1
  161. package/dist/src/evals/assertions/collector.d.ts +43 -0
  162. package/dist/src/evals/assertions/collector.js +1 -0
  163. package/dist/src/evals/assertions/run.d.ts +72 -0
  164. package/dist/src/evals/assertions/run.js +2 -0
  165. package/dist/src/evals/autoevals-client.js +2 -0
  166. package/dist/src/evals/cli/eval-client.d.ts +22 -0
  167. package/dist/src/evals/cli/eval-client.js +1 -0
  168. package/dist/src/evals/cli/eval.d.ts +12 -3
  169. package/dist/src/evals/cli/eval.js +1 -1
  170. package/dist/src/evals/context.d.ts +19 -0
  171. package/dist/src/evals/context.js +1 -0
  172. package/dist/src/evals/define-eval-config.d.ts +16 -0
  173. package/dist/src/evals/define-eval-config.js +1 -0
  174. package/dist/src/evals/define-eval.d.ts +20 -0
  175. package/dist/src/evals/define-eval.js +1 -0
  176. package/dist/src/evals/expect/index.d.ts +25 -0
  177. package/dist/src/evals/expect/index.js +1 -0
  178. package/dist/src/evals/index.d.ts +7 -2
  179. package/dist/src/evals/index.js +1 -1
  180. package/dist/src/evals/judge.d.ts +20 -0
  181. package/dist/src/evals/judge.js +1 -0
  182. package/dist/src/evals/match.d.ts +67 -0
  183. package/dist/src/evals/match.js +1 -0
  184. package/dist/src/evals/reporters/index.d.ts +1 -0
  185. package/dist/src/evals/reporters/index.js +1 -1
  186. package/dist/src/evals/requirements.d.ts +3 -0
  187. package/dist/src/evals/requirements.js +1 -0
  188. package/dist/src/evals/runner/artifacts.d.ts +7 -6
  189. package/dist/src/evals/runner/artifacts.js +3 -3
  190. package/dist/src/evals/runner/derive-run-facts.d.ts +17 -3
  191. package/dist/src/evals/runner/derive-run-facts.js +1 -1
  192. package/dist/src/evals/runner/discover.d.ts +31 -10
  193. package/dist/src/evals/runner/discover.js +1 -1
  194. package/dist/src/evals/runner/execute-eval.d.ts +25 -0
  195. package/dist/src/evals/runner/execute-eval.js +1 -0
  196. package/dist/src/evals/runner/execute-task.d.ts +31 -0
  197. package/dist/src/evals/runner/execute-task.js +1 -0
  198. package/dist/src/evals/runner/reporters/braintrust.d.ts +7 -5
  199. package/dist/src/evals/runner/reporters/braintrust.js +2 -2
  200. package/dist/src/evals/runner/reporters/console.d.ts +4 -4
  201. package/dist/src/evals/runner/reporters/console.js +1 -1
  202. package/dist/src/evals/runner/reporters/junit.d.ts +10 -0
  203. package/dist/src/evals/runner/reporters/junit.js +4 -0
  204. package/dist/src/evals/runner/reporters/types.d.ts +14 -8
  205. package/dist/src/evals/runner/run-evals.d.ts +38 -0
  206. package/dist/src/evals/runner/run-evals.js +1 -0
  207. package/dist/src/evals/runner/verdict.d.ts +13 -0
  208. package/dist/src/evals/runner/verdict.js +1 -0
  209. package/dist/src/evals/session.d.ts +52 -0
  210. package/dist/src/evals/session.js +1 -0
  211. package/dist/src/evals/target.d.ts +23 -0
  212. package/dist/src/evals/target.js +1 -0
  213. package/dist/src/evals/types.d.ts +353 -165
  214. package/dist/src/execution/compaction.d.ts +14 -0
  215. package/dist/src/execution/compaction.js +1 -0
  216. package/dist/src/execution/delegated-parent-notification.js +1 -1
  217. package/dist/src/execution/dispatch-runtime-actions-step.js +1 -1
  218. package/dist/src/execution/node-step.js +1 -1
  219. package/dist/src/execution/sandbox/bash-tool.d.ts +6 -6
  220. package/dist/src/execution/sandbox/bash-tool.js +1 -1
  221. package/dist/src/execution/sandbox/bindings/local.d.ts +11 -0
  222. package/dist/src/execution/sandbox/bindings/local.js +1 -1
  223. package/dist/src/execution/sandbox/glob-tool.js +3 -3
  224. package/dist/src/execution/sandbox/grep-tool.js +3 -3
  225. package/dist/src/execution/sandbox/read-file-tool.js +1 -1
  226. package/dist/src/execution/subagent-adapter.js +1 -1
  227. package/dist/src/execution/tool-auth.js +1 -1
  228. package/dist/src/execution/turn-workflow.js +1 -1
  229. package/dist/src/execution/workflow-runtime.d.ts +2 -2
  230. package/dist/src/execution/workflow-runtime.js +1 -1
  231. package/dist/src/execution/workflow-steps.js +1 -1
  232. package/dist/src/harness/action-result-helpers.js +1 -1
  233. package/dist/src/harness/authorization.d.ts +26 -0
  234. package/dist/src/harness/authorization.js +1 -1
  235. package/dist/src/harness/code-mode-lifecycle.js +1 -1
  236. package/dist/src/harness/emission.d.ts +12 -5
  237. package/dist/src/harness/emission.js +1 -1
  238. package/dist/src/harness/model-call-error.d.ts +35 -6
  239. package/dist/src/harness/model-call-error.js +1 -1
  240. package/dist/src/harness/step-hooks.d.ts +10 -4
  241. package/dist/src/harness/step-hooks.js +1 -1
  242. package/dist/src/harness/tool-loop.js +1 -1
  243. package/dist/src/harness/tools.d.ts +4 -6
  244. package/dist/src/harness/tools.js +1 -1
  245. package/dist/src/harness/turn-tag-state.d.ts +4 -0
  246. package/dist/src/harness/turn-tag-state.js +1 -1
  247. package/dist/src/harness/types.d.ts +4 -15
  248. package/dist/src/internal/application/cache-metadata.js +1 -1
  249. package/dist/src/internal/application/compiled-artifacts.js +1 -1
  250. package/dist/src/internal/application/package.js +1 -1
  251. package/dist/src/internal/application/paths.js +1 -1
  252. package/dist/src/internal/authored-definition/schema-backed.js +1 -1
  253. package/dist/src/internal/authored-module-loader.d.ts +4 -1
  254. package/dist/src/internal/authored-module-loader.js +2 -2
  255. package/dist/src/internal/authored-module-map-loader.js +1 -1
  256. package/dist/src/internal/nitro/dev-runtime-artifacts.d.ts +11 -0
  257. package/dist/src/internal/nitro/dev-runtime-artifacts.js +1 -1
  258. package/dist/src/internal/nitro/host/build-application.js +1 -1
  259. package/dist/src/internal/nitro/host/build-vercel-agent-summary.js +1 -1
  260. package/dist/src/internal/nitro/host/configure-nitro-routes.js +3 -3
  261. package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
  262. package/dist/src/internal/nitro/host/dev-authored-source-watcher.js +1 -1
  263. package/dist/src/internal/nitro/host/dev-watcher-log.d.ts +37 -0
  264. package/dist/src/internal/nitro/host/dev-watcher-log.js +1 -0
  265. package/dist/src/internal/nitro/host/ports.d.ts +8 -0
  266. package/dist/src/internal/nitro/host/ports.js +1 -0
  267. package/dist/src/internal/nitro/host/prepare-application-host.js +1 -1
  268. package/dist/src/internal/nitro/host/server-external-packages.d.ts +1 -1
  269. package/dist/src/internal/nitro/host/server-external-packages.js +1 -1
  270. package/dist/src/internal/nitro/host/start-development-server.js +1 -1
  271. package/dist/src/internal/nitro/host/start-production-server.js +1 -1
  272. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response-from-manifest.d.ts +5 -0
  273. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response-from-manifest.js +1 -0
  274. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.d.ts +31 -2
  275. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
  276. package/dist/src/internal/nitro/routes/agent-info/load-agent-info-data.d.ts +13 -0
  277. package/dist/src/internal/nitro/routes/agent-info/load-agent-info-data.js +1 -1
  278. package/dist/src/internal/nitro/routes/info.d.ts +2 -2
  279. package/dist/src/internal/nitro/routes/info.js +1 -1
  280. package/dist/src/internal/workflow/queue-namespace.d.ts +5 -0
  281. package/dist/src/internal/workflow/queue-namespace.js +1 -0
  282. package/dist/src/internal/workflow-bundle/builder-support.js +2 -2
  283. package/dist/src/internal/workflow-bundle/builder.js +3 -5
  284. package/dist/src/internal/workflow-bundle/vercel-workflow-output.js +1 -1
  285. package/dist/src/internal/workflow-bundle/workflow-builders.d.ts +1 -1
  286. package/dist/src/internal/workflow-bundle/workflow-builders.js +1 -1
  287. package/dist/src/node_modules/.pnpm/@clack_core@1.3.1/node_modules/@clack/core/dist/index.js +4 -4
  288. package/dist/src/protocol/message.d.ts +15 -0
  289. package/dist/src/protocol/message.js +2 -2
  290. package/dist/src/public/channels/slack/api.d.ts +8 -0
  291. package/dist/src/public/channels/slack/api.js +1 -1
  292. package/dist/src/public/channels/slack/connections.d.ts +26 -18
  293. package/dist/src/public/channels/slack/connections.js +1 -1
  294. package/dist/src/public/channels/slack/defaults.d.ts +5 -2
  295. package/dist/src/public/channels/slack/defaults.js +1 -1
  296. package/dist/src/public/channels/slack/index.d.ts +1 -1
  297. package/dist/src/public/channels/slack/slackChannel.d.ts +65 -5
  298. package/dist/src/public/channels/slack/slackChannel.js +1 -1
  299. package/dist/src/public/channels/teams/defaults.js +1 -1
  300. package/dist/src/public/connections/errors.d.ts +8 -0
  301. package/dist/src/public/definitions/tool.d.ts +0 -33
  302. package/dist/src/public/next/index.d.ts +7 -1
  303. package/dist/src/public/next/index.js +1 -1
  304. package/dist/src/public/next/server.d.ts +1 -0
  305. package/dist/src/public/next/server.js +1 -1
  306. package/dist/src/public/nuxt/dev-server.js +1 -1
  307. package/dist/src/public/sandbox/backends/local.d.ts +2 -3
  308. package/dist/src/public/sveltekit/dev-server.js +1 -1
  309. package/dist/src/public/sveltekit/index.d.ts +1 -1
  310. package/dist/src/public/tools/defaults.d.ts +2 -4
  311. package/dist/src/public/tools/defaults.js +1 -1
  312. package/dist/src/public/tools/define-bash-tool.d.ts +3 -3
  313. package/dist/src/public/tools/define-bash-tool.js +1 -1
  314. package/dist/src/public/tools/define-read-file-tool.d.ts +0 -6
  315. package/dist/src/public/tools/define-read-file-tool.js +1 -1
  316. package/dist/src/public/tools/index.d.ts +2 -2
  317. package/dist/src/public/tools/index.js +1 -1
  318. package/dist/src/public/tools/internal.js +1 -1
  319. package/dist/src/runtime/actions/types.d.ts +11 -11
  320. package/dist/src/runtime/agent/mock-model-adapter.js +1 -1
  321. package/dist/src/runtime/agent/mock-model-fixtures.js +3 -2
  322. package/dist/src/runtime/agent/mock-model-skill-selection.js +3 -4
  323. package/dist/src/runtime/connections/callback-route.js +1 -1
  324. package/dist/src/runtime/connections/mcp-client.js +1 -1
  325. package/dist/src/runtime/connections/scoped-authorization.d.ts +21 -5
  326. package/dist/src/runtime/connections/scoped-authorization.js +1 -1
  327. package/dist/src/runtime/connections/types.d.ts +33 -0
  328. package/dist/src/runtime/connections/validate-authorization.js +1 -1
  329. package/dist/src/runtime/framework-tools/bash.d.ts +3 -3
  330. package/dist/src/runtime/framework-tools/bash.js +1 -1
  331. package/dist/src/runtime/framework-tools/connection-search-dynamic.d.ts +1 -1
  332. package/dist/src/runtime/framework-tools/connection-search-dynamic.js +1 -1
  333. package/dist/src/runtime/framework-tools/file-state.d.ts +3 -3
  334. package/dist/src/runtime/framework-tools/index.js +1 -1
  335. package/dist/src/runtime/framework-tools/read-file.js +2 -2
  336. package/dist/src/runtime/framework-tools/todo.d.ts +7 -0
  337. package/dist/src/runtime/framework-tools/todo.js +2 -2
  338. package/dist/src/runtime/governance/auth/http-basic.js +1 -1
  339. package/dist/src/runtime/input/types.d.ts +1 -1
  340. package/dist/src/runtime/resolve-tool.d.ts +2 -2
  341. package/dist/src/runtime/resolve-tool.js +1 -1
  342. package/dist/src/runtime/sandbox/keys.js +1 -1
  343. package/dist/src/runtime/session-callback-route.js +1 -1
  344. package/dist/src/runtime/types.d.ts +1 -7
  345. package/dist/src/services/dev-client/client-options.d.ts +8 -0
  346. package/dist/src/services/dev-client/client-options.js +1 -0
  347. package/dist/src/services/dev-client/runtime-artifacts.d.ts +13 -0
  348. package/dist/src/services/dev-client/runtime-artifacts.js +1 -0
  349. package/dist/src/services/dev-client.d.ts +13 -46
  350. package/dist/src/services/dev-client.js +1 -1
  351. package/dist/src/services/inspect-application.js +1 -1
  352. package/dist/src/setup/ask.d.ts +205 -0
  353. package/dist/src/setup/ask.js +1 -0
  354. package/dist/src/setup/boxes/add-channels.d.ts +100 -16
  355. package/dist/src/setup/boxes/add-channels.js +2 -1
  356. package/dist/src/setup/boxes/add-connections.d.ts +13 -23
  357. package/dist/src/setup/boxes/add-connections.js +1 -1
  358. package/dist/src/setup/boxes/apply-ai-gateway-credential.d.ts +2 -2
  359. package/dist/src/setup/boxes/apply-ai-gateway-credential.js +1 -1
  360. package/dist/src/setup/boxes/deploy-project.d.ts +46 -14
  361. package/dist/src/setup/boxes/deploy-project.js +1 -1
  362. package/dist/src/setup/boxes/detect-ai-gateway.d.ts +10 -3
  363. package/dist/src/setup/boxes/detect-ai-gateway.js +1 -1
  364. package/dist/src/setup/boxes/link-project.d.ts +3 -3
  365. package/dist/src/setup/boxes/link-project.js +1 -1
  366. package/dist/src/setup/boxes/one-shot-next-steps.d.ts +18 -0
  367. package/dist/src/setup/boxes/one-shot-next-steps.js +2 -0
  368. package/dist/src/setup/boxes/preflight.d.ts +14 -6
  369. package/dist/src/setup/boxes/preflight.js +1 -1
  370. package/dist/src/setup/boxes/resolve-provisioning.d.ts +36 -8
  371. package/dist/src/setup/boxes/resolve-provisioning.js +1 -1
  372. package/dist/src/setup/boxes/resolve-target.d.ts +25 -8
  373. package/dist/src/setup/boxes/resolve-target.js +1 -1
  374. package/dist/src/setup/boxes/scaffold.d.ts +12 -6
  375. package/dist/src/setup/boxes/scaffold.js +1 -1
  376. package/dist/src/setup/boxes/select-channels.d.ts +38 -9
  377. package/dist/src/setup/boxes/select-channels.js +1 -1
  378. package/dist/src/setup/boxes/select-chat.d.ts +15 -11
  379. package/dist/src/setup/boxes/select-chat.js +1 -1
  380. package/dist/src/setup/boxes/select-connections.d.ts +30 -0
  381. package/dist/src/setup/boxes/select-connections.js +1 -0
  382. package/dist/src/setup/boxes/select-model.d.ts +18 -14
  383. package/dist/src/setup/boxes/select-model.js +1 -1
  384. package/dist/src/setup/boxes/select-setup-mode.d.ts +32 -0
  385. package/dist/src/setup/boxes/select-setup-mode.js +1 -0
  386. package/dist/src/setup/channel-add-conflicts.d.ts +28 -0
  387. package/dist/src/setup/channel-add-conflicts.js +1 -0
  388. package/dist/src/setup/cli/channel-setup-prompter.d.ts +23 -0
  389. package/dist/src/setup/cli/channel-setup-prompter.js +1 -0
  390. package/dist/src/setup/cli/connection-add-prompter.d.ts +8 -0
  391. package/dist/src/setup/cli/connection-add-prompter.js +1 -0
  392. package/dist/src/setup/{scaffold/cli → cli}/index.d.ts +4 -3
  393. package/dist/src/setup/cli/index.js +1 -0
  394. package/dist/src/setup/{scaffold/cli → cli}/prompt-ui.d.ts +39 -15
  395. package/dist/src/setup/cli/prompt-ui.js +5 -0
  396. package/dist/src/setup/{scaffold/cli → cli}/rail-log.d.ts +2 -0
  397. package/dist/src/setup/{scaffold/cli → cli}/rail-log.js +2 -2
  398. package/dist/src/setup/{scaffold/cli → cli}/select-component.d.ts +18 -3
  399. package/dist/src/setup/cli/select-component.js +1 -0
  400. package/dist/src/setup/cli/select-option-codec.d.ts +12 -0
  401. package/dist/src/setup/cli/select-option-codec.js +1 -0
  402. package/dist/src/setup/{scaffold/cli → cli}/select-state.d.ts +13 -1
  403. package/dist/src/setup/cli/select-state.js +1 -0
  404. package/dist/src/setup/cli/whimsy.d.ts +16 -0
  405. package/dist/src/setup/cli/whimsy.js +1 -0
  406. package/dist/src/setup/{scaffold/steps/setup-connection.d.ts → connection-connector.d.ts} +3 -2
  407. package/dist/src/setup/connection-connector.js +1 -0
  408. package/dist/src/setup/flows/channels.d.ts +43 -0
  409. package/dist/src/setup/flows/channels.js +1 -0
  410. package/dist/src/setup/flows/deploy.d.ts +40 -0
  411. package/dist/src/setup/flows/deploy.js +1 -0
  412. package/dist/src/setup/flows/in-project.d.ts +16 -0
  413. package/dist/src/setup/flows/in-project.js +1 -0
  414. package/dist/src/setup/flows/link.d.ts +43 -0
  415. package/dist/src/setup/flows/link.js +1 -0
  416. package/dist/src/setup/flows/model.d.ts +112 -0
  417. package/dist/src/setup/flows/model.js +1 -0
  418. package/dist/src/setup/flows/vercel.d.ts +31 -0
  419. package/dist/src/setup/flows/vercel.js +2 -0
  420. package/dist/src/setup/gateway-models.js +1 -1
  421. package/dist/src/setup/headless.d.ts +1 -1
  422. package/dist/src/setup/index.d.ts +10 -4
  423. package/dist/src/setup/index.js +1 -1
  424. package/dist/src/setup/onboarding.d.ts +7 -4
  425. package/dist/src/setup/onboarding.js +1 -1
  426. package/dist/src/setup/package-manager.d.ts +27 -0
  427. package/dist/src/setup/package-manager.js +1 -0
  428. package/dist/src/setup/primitives/index.d.ts +3 -0
  429. package/dist/src/setup/primitives/index.js +1 -0
  430. package/dist/src/setup/primitives/pm/bun.d.ts +10 -0
  431. package/dist/src/setup/primitives/pm/bun.js +1 -0
  432. package/dist/src/setup/primitives/pm/index.d.ts +11 -0
  433. package/dist/src/setup/primitives/pm/index.js +1 -0
  434. package/dist/src/setup/primitives/pm/npm.d.ts +10 -0
  435. package/dist/src/setup/primitives/pm/npm.js +1 -0
  436. package/dist/src/setup/primitives/pm/pnpm.d.ts +27 -0
  437. package/dist/src/setup/primitives/pm/pnpm.js +8 -0
  438. package/dist/src/setup/primitives/pm/run.d.ts +23 -0
  439. package/dist/src/setup/primitives/pm/run.js +1 -0
  440. package/dist/src/setup/primitives/pm/shared.d.ts +8 -0
  441. package/dist/src/setup/primitives/pm/shared.js +1 -0
  442. package/dist/src/setup/primitives/pm/types.d.ts +37 -0
  443. package/dist/src/setup/primitives/pm/types.js +1 -0
  444. package/dist/src/setup/primitives/pm/yarn.d.ts +10 -0
  445. package/dist/src/setup/primitives/pm/yarn.js +1 -0
  446. package/dist/src/setup/primitives/run-pnpm.d.ts +1 -0
  447. package/dist/src/setup/primitives/run-pnpm.js +1 -0
  448. package/dist/src/setup/{scaffold/primitives → primitives}/run-vercel.d.ts +7 -0
  449. package/dist/src/setup/primitives/run-vercel.js +1 -0
  450. package/dist/src/setup/project-name.d.ts +4 -0
  451. package/dist/src/setup/project-name.js +1 -0
  452. package/dist/src/setup/project-resolution.d.ts +54 -0
  453. package/dist/src/setup/project-resolution.js +1 -0
  454. package/dist/src/setup/prompter.d.ts +52 -4
  455. package/dist/src/setup/prompter.js +1 -1
  456. package/dist/src/setup/quit-guard.d.ts +1 -1
  457. package/dist/src/setup/run-vercel-link.d.ts +1 -1
  458. package/dist/src/setup/run-vercel-link.js +1 -1
  459. package/dist/src/setup/runner.d.ts +5 -4
  460. package/dist/src/setup/runner.js +1 -1
  461. package/dist/src/setup/scaffold/channels-catalog.d.ts +3 -3
  462. package/dist/src/setup/scaffold/channels-catalog.js +1 -1
  463. package/dist/src/setup/scaffold/create/add-to-project.d.ts +26 -0
  464. package/dist/src/setup/scaffold/create/add-to-project.js +1 -0
  465. package/dist/src/setup/scaffold/create/project.d.ts +54 -0
  466. package/dist/src/setup/scaffold/create/project.js +80 -0
  467. package/dist/src/setup/scaffold/index.d.ts +4 -4
  468. package/dist/src/setup/scaffold/index.js +1 -1
  469. package/dist/src/setup/scaffold/{channels.d.ts → update/channels.d.ts} +11 -0
  470. package/dist/src/setup/scaffold/update/channels.js +7 -0
  471. package/dist/src/setup/scaffold/{connections.d.ts → update/connections.d.ts} +1 -1
  472. package/dist/src/setup/scaffold/update/connections.js +21 -0
  473. package/dist/src/setup/scaffold/version-tokens.d.ts +11 -0
  474. package/dist/src/setup/scaffold/version-tokens.js +1 -0
  475. package/dist/src/setup/{scaffold/steps/setup-slackbot.d.ts → slackbot.d.ts} +24 -20
  476. package/dist/src/setup/slackbot.js +1 -0
  477. package/dist/src/setup/state.d.ts +62 -15
  478. package/dist/src/setup/state.js +1 -1
  479. package/dist/src/setup/step.d.ts +9 -18
  480. package/dist/src/setup/vercel-project.d.ts +15 -8
  481. package/dist/src/setup/vercel-project.js +1 -1
  482. package/dist/src/shared/agent-definition.d.ts +9 -3
  483. package/dist/src/shared/default-agent-model.d.ts +5 -0
  484. package/dist/src/shared/default-agent-model.js +1 -0
  485. package/dist/src/shared/sandbox-backend.d.ts +11 -11
  486. package/dist/src/source-change/apply-model-name.d.ts +25 -0
  487. package/dist/src/source-change/apply-model-name.js +2 -0
  488. package/dist/src/source-change/static-source-change.d.ts +36 -0
  489. package/dist/src/source-change/static-source-change.js +1 -0
  490. package/dist/src/svelte/index.js +1 -1
  491. package/dist/src/svelte/use-eve-agent.js +1 -1
  492. package/dist/src/vue/index.js +1 -1
  493. package/dist/src/vue/use-eve-agent.js +1 -1
  494. package/package.json +23 -38
  495. package/dist/docs/public/advanced/evals.md +0 -121
  496. package/dist/src/cli/commands/setup.d.ts +0 -55
  497. package/dist/src/cli/commands/setup.js +0 -1
  498. package/dist/src/cli/dev/repl/input-requests.d.ts +0 -38
  499. package/dist/src/cli/dev/repl/input-requests.js +0 -1
  500. package/dist/src/cli/dev/repl/input.d.ts +0 -19
  501. package/dist/src/cli/dev/repl/input.js +0 -1
  502. package/dist/src/cli/dev/repl/repl.d.ts +0 -62
  503. package/dist/src/cli/dev/repl/repl.js +0 -2
  504. package/dist/src/cli/dev/repl/terminal.d.ts +0 -21
  505. package/dist/src/cli/dev/repl/terminal.js +0 -5
  506. package/dist/src/compiled/_chunks/workflow/resume-hook-0Zk0zSvq.js +0 -12
  507. package/dist/src/compiled/_chunks/workflow/sleep-DXZr2BgM.js +0 -1
  508. package/dist/src/evals/define-eval-suite.d.ts +0 -16
  509. package/dist/src/evals/define-eval-suite.js +0 -1
  510. package/dist/src/evals/runner/execute-case.d.ts +0 -23
  511. package/dist/src/evals/runner/execute-case.js +0 -1
  512. package/dist/src/evals/runner/execute-suite.d.ts +0 -24
  513. package/dist/src/evals/runner/execute-suite.js +0 -1
  514. package/dist/src/evals/scorers/autoevals-client.js +0 -2
  515. package/dist/src/evals/scorers/autoevals.d.ts +0 -58
  516. package/dist/src/evals/scorers/autoevals.js +0 -1
  517. package/dist/src/evals/scorers/json.d.ts +0 -10
  518. package/dist/src/evals/scorers/json.js +0 -1
  519. package/dist/src/evals/scorers/run.d.ts +0 -18
  520. package/dist/src/evals/scorers/run.js +0 -1
  521. package/dist/src/evals/scorers/sql.d.ts +0 -9
  522. package/dist/src/evals/scorers/sql.js +0 -1
  523. package/dist/src/evals/scorers/text.d.ts +0 -18
  524. package/dist/src/evals/scorers/text.js +0 -1
  525. package/dist/src/evals/scores/index.d.ts +0 -72
  526. package/dist/src/evals/scores/index.js +0 -1
  527. package/dist/src/execution/tool-compaction.d.ts +0 -9
  528. package/dist/src/execution/tool-compaction.js +0 -1
  529. package/dist/src/services/dev-client/stream.d.ts +0 -5
  530. package/dist/src/services/dev-client/stream.js +0 -1
  531. package/dist/src/services/dev-client/url.d.ts +0 -11
  532. package/dist/src/services/dev-client/url.js +0 -1
  533. package/dist/src/setup/channel-setup-prompter.d.ts +0 -8
  534. package/dist/src/setup/channel-setup-prompter.js +0 -1
  535. package/dist/src/setup/scaffold/channels.js +0 -7
  536. package/dist/src/setup/scaffold/cli/channel-add-prompter.d.ts +0 -12
  537. package/dist/src/setup/scaffold/cli/channel-add-prompter.js +0 -1
  538. package/dist/src/setup/scaffold/cli/channel-setup-prompter.d.ts +0 -56
  539. package/dist/src/setup/scaffold/cli/connection-add-prompter.d.ts +0 -44
  540. package/dist/src/setup/scaffold/cli/connection-add-prompter.js +0 -1
  541. package/dist/src/setup/scaffold/cli/index.js +0 -1
  542. package/dist/src/setup/scaffold/cli/prompt-ui.js +0 -5
  543. package/dist/src/setup/scaffold/cli/select-component.js +0 -1
  544. package/dist/src/setup/scaffold/cli/select-state.js +0 -1
  545. package/dist/src/setup/scaffold/connections.js +0 -21
  546. package/dist/src/setup/scaffold/pnpm-workspace.d.ts +0 -3
  547. package/dist/src/setup/scaffold/pnpm-workspace.js +0 -11
  548. package/dist/src/setup/scaffold/primitives/detect-deployment.d.ts +0 -13
  549. package/dist/src/setup/scaffold/primitives/detect-deployment.js +0 -1
  550. package/dist/src/setup/scaffold/primitives/index.d.ts +0 -3
  551. package/dist/src/setup/scaffold/primitives/index.js +0 -1
  552. package/dist/src/setup/scaffold/primitives/pnpm-invocation.d.ts +0 -12
  553. package/dist/src/setup/scaffold/primitives/pnpm-invocation.js +0 -1
  554. package/dist/src/setup/scaffold/primitives/run-pnpm.d.ts +0 -17
  555. package/dist/src/setup/scaffold/primitives/run-pnpm.js +0 -1
  556. package/dist/src/setup/scaffold/primitives/run-vercel.js +0 -1
  557. package/dist/src/setup/scaffold/project.d.ts +0 -21
  558. package/dist/src/setup/scaffold/project.js +0 -80
  559. package/dist/src/setup/scaffold/steps/deploy-to-vercel.d.ts +0 -17
  560. package/dist/src/setup/scaffold/steps/deploy-to-vercel.js +0 -1
  561. package/dist/src/setup/scaffold/steps/index.d.ts +0 -4
  562. package/dist/src/setup/scaffold/steps/index.js +0 -1
  563. package/dist/src/setup/scaffold/steps/project-resolution.d.ts +0 -19
  564. package/dist/src/setup/scaffold/steps/project-resolution.js +0 -1
  565. package/dist/src/setup/scaffold/steps/run-add-connection.d.ts +0 -40
  566. package/dist/src/setup/scaffold/steps/run-add-connection.js +0 -1
  567. package/dist/src/setup/scaffold/steps/run-add-to-agent.d.ts +0 -81
  568. package/dist/src/setup/scaffold/steps/run-add-to-agent.js +0 -2
  569. package/dist/src/setup/scaffold/steps/setup-connection.js +0 -1
  570. package/dist/src/setup/scaffold/steps/setup-slackbot.js +0 -1
  571. /package/dist/src/{setup/scaffold/cli/channel-setup-prompter.js → cli/dev/tui/setup-flow.js} +0 -0
  572. /package/dist/src/evals/{scorers/autoevals-client.d.ts → autoevals-client.d.ts} +0 -0
  573. /package/dist/src/setup/{scaffold/cli → cli}/command-output.d.ts +0 -0
  574. /package/dist/src/setup/{scaffold/cli → cli}/command-output.js +0 -0
  575. /package/dist/src/setup/{scaffold/human-action.d.ts → human-action.d.ts} +0 -0
  576. /package/dist/src/setup/{scaffold/human-action.js → human-action.js} +0 -0
  577. /package/dist/src/setup/{scaffold/primitives → primitives}/process-output.d.ts +0 -0
  578. /package/dist/src/setup/{scaffold/primitives → primitives}/process-output.js +0 -0
  579. /package/dist/src/setup/scaffold/{web-template.d.ts → create/web-template.d.ts} +0 -0
  580. /package/dist/src/setup/scaffold/{web-template.js → create/web-template.js} +0 -0
  581. /package/dist/src/setup/scaffold/{module-files.d.ts → update/module-files.d.ts} +0 -0
  582. /package/dist/src/setup/scaffold/{module-files.js → update/module-files.js} +0 -0
  583. /package/dist/src/setup/scaffold/{package-json.d.ts → update/package-json.d.ts} +0 -0
  584. /package/dist/src/setup/scaffold/{package-json.js → update/package-json.js} +0 -0
  585. /package/dist/src/setup/scaffold/{primitives → update}/update-connection-connector.d.ts +0 -0
  586. /package/dist/src/setup/scaffold/{primitives → update}/update-connection-connector.js +0 -0
  587. /package/dist/src/setup/scaffold/{primitives → update}/update-slack-channel.d.ts +0 -0
  588. /package/dist/src/setup/scaffold/{primitives → update}/update-slack-channel.js +0 -0
@@ -150,6 +150,11 @@ function deriveResultStatus(events) {
150
150
  if (boundary?.type === "session.failed") return "failed";
151
151
  return "completed";
152
152
  }
153
+ function extractInputRequests(events) {
154
+ const requests = [];
155
+ for (const event of events) if (event.type === "input.requested") requests.push(...event.data.requests);
156
+ return requests;
157
+ }
153
158
  function findBoundaryEvent(events) {
154
159
  for (let i = events.length - 1; i >= 0; i--) {
155
160
  const event = events[i];
@@ -178,6 +183,7 @@ var MessageResponse = class {
178
183
  return {
179
184
  data: extractCompletedResult(events),
180
185
  events,
186
+ inputRequests: extractInputRequests(events),
181
187
  message: extractCompletedMessage(events),
182
188
  sessionId: this.sessionId,
183
189
  status: deriveResultStatus(events)
@@ -253,24 +259,28 @@ function formatSearch(searchParams) {
253
259
 
254
260
  //#endregion
255
261
  //#region src/client/open-stream.ts
262
+ const STREAM_OPEN_RETRY_ATTEMPTS = 12;
263
+ const STREAM_OPEN_RETRY_DELAY_MS = 250;
264
+ const STREAM_OPEN_RETRYABLE_STATUS = new Set([
265
+ 404,
266
+ 409,
267
+ 425,
268
+ 500,
269
+ 502,
270
+ 503,
271
+ 504
272
+ ]);
256
273
  async function* openStreamIterable(input) {
257
274
  let startIndex = input.startIndex;
258
275
  let remainingReconnectAttempts = input.maxReconnectAttempts;
259
276
  while (true) {
260
- const url = createClientUrl(input.host, createEveMessageStreamRoutePath(input.sessionId), startIndex > 0 ? { startIndex: String(startIndex) } : void 0);
261
- const headers = await input.resolveHeaders();
262
- const response = await fetch(url, {
263
- headers,
264
- signal: input.signal ?? null
277
+ const body = await openStreamBody({
278
+ ...input,
279
+ startIndex
265
280
  });
266
- if (!response.ok) {
267
- const body = await response.text();
268
- throw new ClientError(response.status, body);
269
- }
270
- if (!response.body) throw new ClientError(response.status, "Response body is null.");
271
281
  let disconnected = false;
272
282
  try {
273
- for await (const event of readNdjsonStream(response.body)) {
283
+ for await (const event of readNdjsonStream(body)) {
274
284
  startIndex += 1;
275
285
  yield event;
276
286
  }
@@ -278,13 +288,39 @@ async function* openStreamIterable(input) {
278
288
  if (!isStreamDisconnectError(error)) throw error;
279
289
  disconnected = true;
280
290
  }
281
- if (!disconnected || remainingReconnectAttempts <= 0) return;
291
+ if (!disconnected || input.signal?.aborted || remainingReconnectAttempts <= 0) return;
282
292
  remainingReconnectAttempts -= 1;
283
293
  }
284
294
  }
295
+ async function openStreamBody(input) {
296
+ let lastStatus;
297
+ let lastBody;
298
+ for (let attempt = 0; attempt < STREAM_OPEN_RETRY_ATTEMPTS; attempt += 1) {
299
+ const url = createClientUrl(input.host, createEveMessageStreamRoutePath(input.sessionId), input.startIndex > 0 ? { startIndex: String(input.startIndex) } : void 0);
300
+ const headers = await input.resolveHeaders();
301
+ const response = await fetch(url, {
302
+ headers,
303
+ signal: input.signal ?? null
304
+ });
305
+ if (response.ok) {
306
+ if (!response.body) throw new ClientError(response.status, "Response body is null.");
307
+ return response.body;
308
+ }
309
+ lastStatus = response.status;
310
+ lastBody = await response.text();
311
+ if (!STREAM_OPEN_RETRYABLE_STATUS.has(response.status)) throw new ClientError(response.status, lastBody);
312
+ if (attempt < STREAM_OPEN_RETRY_ATTEMPTS - 1) await sleep$1(STREAM_OPEN_RETRY_DELAY_MS);
313
+ }
314
+ throw new ClientError(lastStatus ?? 0, lastBody ?? "Failed to open message stream.");
315
+ }
316
+ async function sleep$1(ms) {
317
+ await new Promise((resolve) => setTimeout(resolve, ms));
318
+ }
285
319
 
286
320
  //#endregion
287
321
  //#region src/client/session.ts
322
+ const DELIVER_RETRY_ATTEMPTS = 10;
323
+ const DELIVER_RETRY_DELAY_MS = 200;
288
324
  var ClientSession = class {
289
325
  #context;
290
326
  #state;
@@ -308,14 +344,7 @@ var ClientSession = class {
308
344
  stream(options) {
309
345
  const sessionId = this.#state.sessionId;
310
346
  if (!sessionId) throw new Error("Session has no session ID. Send a message first.");
311
- return openStreamIterable({
312
- host: this.#context.host,
313
- maxReconnectAttempts: this.#context.maxReconnectAttempts,
314
- resolveHeaders: () => this.#context.resolveHeaders(),
315
- sessionId,
316
- signal: options?.signal,
317
- startIndex: options?.startIndex ?? this.#state.streamIndex
318
- });
347
+ return this.#streamAndAdvance(sessionId, options);
319
348
  }
320
349
  async #postTurn(input, session) {
321
350
  const routePath = session.sessionId ? createEveContinueSessionRoutePath(session.sessionId) : EVE_CREATE_SESSION_ROUTE_PATH;
@@ -328,16 +357,13 @@ var ClientSession = class {
328
357
  session
329
358
  });
330
359
  if (body === null) throw new Error("Session.send requires a non-empty message, inputResponses, or both.");
331
- const response = await fetch(url, {
360
+ const response = await postTurnWithRetry({
332
361
  body: JSON.stringify(body),
333
362
  headers,
334
- method: "POST",
335
- signal: input.signal ?? null
363
+ mustDeliver: (input.inputResponses?.length ?? 0) > 0,
364
+ signal: input.signal,
365
+ url
336
366
  });
337
- if (!response.ok) {
338
- const responseBody = await response.text();
339
- throw new ClientError(response.status, responseBody);
340
- }
341
367
  const payload = await response.json();
342
368
  const sessionId = (typeof payload.sessionId === "string" ? payload.sessionId : void 0) ?? response.headers.get("x-eve-session-id")?.trim() ?? session.sessionId;
343
369
  if (!sessionId) throw new Error("Message route did not return a session id.");
@@ -368,6 +394,7 @@ var ClientSession = class {
368
394
  if (!isStreamDisconnectError(error)) throw error;
369
395
  }
370
396
  if (foundBoundary) break;
397
+ if (input.signal?.aborted) break;
371
398
  if (remainingReconnectAttempts <= 0) break;
372
399
  remainingReconnectAttempts -= 1;
373
400
  }
@@ -381,20 +408,69 @@ var ClientSession = class {
381
408
  }
382
409
  }
383
410
  async #openStreamBody(sessionId, startIndex, signal, headers) {
384
- const url = createClientUrl(this.#context.host, createEveMessageStreamRoutePath(sessionId), startIndex > 0 ? { startIndex: String(startIndex) } : void 0);
385
- const resolvedHeaders = await this.#context.resolveHeaders(headers);
386
- const response = await fetch(url, {
387
- headers: resolvedHeaders,
388
- signal: signal ?? null
411
+ return await openStreamBody({
412
+ host: this.#context.host,
413
+ resolveHeaders: () => this.#context.resolveHeaders(headers),
414
+ sessionId,
415
+ signal,
416
+ startIndex
389
417
  });
390
- if (!response.ok) {
391
- const responseBody = await response.text();
392
- throw new ClientError(response.status, responseBody);
418
+ }
419
+ async *#streamAndAdvance(sessionId, options) {
420
+ const initialState = this.#state;
421
+ const streamIndex = options?.startIndex ?? initialState.streamIndex;
422
+ const events = [];
423
+ try {
424
+ for await (const event of openStreamIterable({
425
+ host: this.#context.host,
426
+ maxReconnectAttempts: this.#context.maxReconnectAttempts,
427
+ resolveHeaders: () => this.#context.resolveHeaders(),
428
+ sessionId,
429
+ signal: options?.signal,
430
+ startIndex: streamIndex
431
+ })) {
432
+ events.push(event);
433
+ yield event;
434
+ }
435
+ } finally {
436
+ this.#state = advanceSession({
437
+ continuationToken: initialState.continuationToken,
438
+ events,
439
+ session: {
440
+ ...initialState,
441
+ sessionId,
442
+ streamIndex
443
+ },
444
+ sessionId
445
+ });
393
446
  }
394
- if (!response.body) throw new ClientError(response.status, "Response body is null.");
395
- return response.body;
396
447
  }
397
448
  };
449
+ async function postTurnWithRetry(input) {
450
+ const attempts = input.mustDeliver ? DELIVER_RETRY_ATTEMPTS : 1;
451
+ let lastStatus;
452
+ let lastBody;
453
+ for (let attempt = 0; attempt < attempts; attempt += 1) {
454
+ const response = await fetch(input.url, {
455
+ body: input.body,
456
+ headers: input.headers,
457
+ method: "POST",
458
+ signal: input.signal ?? null
459
+ });
460
+ if (response.ok) return response;
461
+ lastStatus = response.status;
462
+ lastBody = await response.text();
463
+ if (!isRetryableDeliveryFailure(response.status, lastBody)) throw new ClientError(response.status, lastBody);
464
+ if (attempt < attempts - 1) await sleep(DELIVER_RETRY_DELAY_MS);
465
+ }
466
+ throw new ClientError(lastStatus ?? 0, lastBody ?? "Failed to deliver session turn.");
467
+ }
468
+ function isRetryableDeliveryFailure(status, body) {
469
+ return status === 500 && /target session was not found/i.test(body);
470
+ }
471
+ async function sleep(ms) {
472
+ await new Promise((resolve) => setTimeout(resolve, ms));
473
+ }
398
474
  function normalizeSendTurnInput(input) {
399
475
  return typeof input === "string" ? { message: input } : input;
400
476
  }
@@ -444,6 +520,14 @@ var Client = class {
444
520
  }
445
521
  return await response.json();
446
522
  }
523
+ async fetch(path, init = {}) {
524
+ const url = createClientUrl(this.#host, path);
525
+ const headers = await this.#resolveHeaders(headersInitToRecord(init.headers));
526
+ return await fetch(url, {
527
+ ...init,
528
+ headers
529
+ });
530
+ }
447
531
  session(state) {
448
532
  let resolved;
449
533
  if (typeof state === "string") resolved = {
@@ -488,6 +572,10 @@ async function resolveHeadersValue(value) {
488
572
  if (value === void 0) return {};
489
573
  return typeof value === "function" ? await value() : value;
490
574
  }
575
+ function headersInitToRecord(headers) {
576
+ if (headers === void 0) return {};
577
+ return Object.fromEntries(new Headers(headers).entries());
578
+ }
491
579
  function encodeBasicCredentials(username, password) {
492
580
  const bytes = new TextEncoder().encode(`${username}:${password}`);
493
581
  const binaryString = Array.from(bytes, (byte) => String.fromCodePoint(byte)).join("");
@@ -150,6 +150,11 @@ function deriveResultStatus(events) {
150
150
  if (boundary?.type === "session.failed") return "failed";
151
151
  return "completed";
152
152
  }
153
+ function extractInputRequests(events) {
154
+ const requests = [];
155
+ for (const event of events) if (event.type === "input.requested") requests.push(...event.data.requests);
156
+ return requests;
157
+ }
153
158
  function findBoundaryEvent(events) {
154
159
  for (let i = events.length - 1; i >= 0; i--) {
155
160
  const event = events[i];
@@ -178,6 +183,7 @@ var MessageResponse = class {
178
183
  return {
179
184
  data: extractCompletedResult(events),
180
185
  events,
186
+ inputRequests: extractInputRequests(events),
181
187
  message: extractCompletedMessage(events),
182
188
  sessionId: this.sessionId,
183
189
  status: deriveResultStatus(events)
@@ -253,24 +259,28 @@ function formatSearch(searchParams) {
253
259
 
254
260
  //#endregion
255
261
  //#region src/client/open-stream.ts
262
+ const STREAM_OPEN_RETRY_ATTEMPTS = 12;
263
+ const STREAM_OPEN_RETRY_DELAY_MS = 250;
264
+ const STREAM_OPEN_RETRYABLE_STATUS = new Set([
265
+ 404,
266
+ 409,
267
+ 425,
268
+ 500,
269
+ 502,
270
+ 503,
271
+ 504
272
+ ]);
256
273
  async function* openStreamIterable(input) {
257
274
  let startIndex = input.startIndex;
258
275
  let remainingReconnectAttempts = input.maxReconnectAttempts;
259
276
  while (true) {
260
- const url = createClientUrl(input.host, createEveMessageStreamRoutePath(input.sessionId), startIndex > 0 ? { startIndex: String(startIndex) } : void 0);
261
- const headers = await input.resolveHeaders();
262
- const response = await fetch(url, {
263
- headers,
264
- signal: input.signal ?? null
277
+ const body = await openStreamBody({
278
+ ...input,
279
+ startIndex
265
280
  });
266
- if (!response.ok) {
267
- const body = await response.text();
268
- throw new ClientError(response.status, body);
269
- }
270
- if (!response.body) throw new ClientError(response.status, "Response body is null.");
271
281
  let disconnected = false;
272
282
  try {
273
- for await (const event of readNdjsonStream(response.body)) {
283
+ for await (const event of readNdjsonStream(body)) {
274
284
  startIndex += 1;
275
285
  yield event;
276
286
  }
@@ -278,13 +288,39 @@ async function* openStreamIterable(input) {
278
288
  if (!isStreamDisconnectError(error)) throw error;
279
289
  disconnected = true;
280
290
  }
281
- if (!disconnected || remainingReconnectAttempts <= 0) return;
291
+ if (!disconnected || input.signal?.aborted || remainingReconnectAttempts <= 0) return;
282
292
  remainingReconnectAttempts -= 1;
283
293
  }
284
294
  }
295
+ async function openStreamBody(input) {
296
+ let lastStatus;
297
+ let lastBody;
298
+ for (let attempt = 0; attempt < STREAM_OPEN_RETRY_ATTEMPTS; attempt += 1) {
299
+ const url = createClientUrl(input.host, createEveMessageStreamRoutePath(input.sessionId), input.startIndex > 0 ? { startIndex: String(input.startIndex) } : void 0);
300
+ const headers = await input.resolveHeaders();
301
+ const response = await fetch(url, {
302
+ headers,
303
+ signal: input.signal ?? null
304
+ });
305
+ if (response.ok) {
306
+ if (!response.body) throw new ClientError(response.status, "Response body is null.");
307
+ return response.body;
308
+ }
309
+ lastStatus = response.status;
310
+ lastBody = await response.text();
311
+ if (!STREAM_OPEN_RETRYABLE_STATUS.has(response.status)) throw new ClientError(response.status, lastBody);
312
+ if (attempt < STREAM_OPEN_RETRY_ATTEMPTS - 1) await sleep$1(STREAM_OPEN_RETRY_DELAY_MS);
313
+ }
314
+ throw new ClientError(lastStatus ?? 0, lastBody ?? "Failed to open message stream.");
315
+ }
316
+ async function sleep$1(ms) {
317
+ await new Promise((resolve) => setTimeout(resolve, ms));
318
+ }
285
319
 
286
320
  //#endregion
287
321
  //#region src/client/session.ts
322
+ const DELIVER_RETRY_ATTEMPTS = 10;
323
+ const DELIVER_RETRY_DELAY_MS = 200;
288
324
  var ClientSession = class {
289
325
  #context;
290
326
  #state;
@@ -308,14 +344,7 @@ var ClientSession = class {
308
344
  stream(options) {
309
345
  const sessionId = this.#state.sessionId;
310
346
  if (!sessionId) throw new Error("Session has no session ID. Send a message first.");
311
- return openStreamIterable({
312
- host: this.#context.host,
313
- maxReconnectAttempts: this.#context.maxReconnectAttempts,
314
- resolveHeaders: () => this.#context.resolveHeaders(),
315
- sessionId,
316
- signal: options?.signal,
317
- startIndex: options?.startIndex ?? this.#state.streamIndex
318
- });
347
+ return this.#streamAndAdvance(sessionId, options);
319
348
  }
320
349
  async #postTurn(input, session) {
321
350
  const routePath = session.sessionId ? createEveContinueSessionRoutePath(session.sessionId) : EVE_CREATE_SESSION_ROUTE_PATH;
@@ -328,16 +357,13 @@ var ClientSession = class {
328
357
  session
329
358
  });
330
359
  if (body === null) throw new Error("Session.send requires a non-empty message, inputResponses, or both.");
331
- const response = await fetch(url, {
360
+ const response = await postTurnWithRetry({
332
361
  body: JSON.stringify(body),
333
362
  headers,
334
- method: "POST",
335
- signal: input.signal ?? null
363
+ mustDeliver: (input.inputResponses?.length ?? 0) > 0,
364
+ signal: input.signal,
365
+ url
336
366
  });
337
- if (!response.ok) {
338
- const responseBody = await response.text();
339
- throw new ClientError(response.status, responseBody);
340
- }
341
367
  const payload = await response.json();
342
368
  const sessionId = (typeof payload.sessionId === "string" ? payload.sessionId : void 0) ?? response.headers.get("x-eve-session-id")?.trim() ?? session.sessionId;
343
369
  if (!sessionId) throw new Error("Message route did not return a session id.");
@@ -368,6 +394,7 @@ var ClientSession = class {
368
394
  if (!isStreamDisconnectError(error)) throw error;
369
395
  }
370
396
  if (foundBoundary) break;
397
+ if (input.signal?.aborted) break;
371
398
  if (remainingReconnectAttempts <= 0) break;
372
399
  remainingReconnectAttempts -= 1;
373
400
  }
@@ -381,20 +408,69 @@ var ClientSession = class {
381
408
  }
382
409
  }
383
410
  async #openStreamBody(sessionId, startIndex, signal, headers) {
384
- const url = createClientUrl(this.#context.host, createEveMessageStreamRoutePath(sessionId), startIndex > 0 ? { startIndex: String(startIndex) } : void 0);
385
- const resolvedHeaders = await this.#context.resolveHeaders(headers);
386
- const response = await fetch(url, {
387
- headers: resolvedHeaders,
388
- signal: signal ?? null
411
+ return await openStreamBody({
412
+ host: this.#context.host,
413
+ resolveHeaders: () => this.#context.resolveHeaders(headers),
414
+ sessionId,
415
+ signal,
416
+ startIndex
389
417
  });
390
- if (!response.ok) {
391
- const responseBody = await response.text();
392
- throw new ClientError(response.status, responseBody);
418
+ }
419
+ async *#streamAndAdvance(sessionId, options) {
420
+ const initialState = this.#state;
421
+ const streamIndex = options?.startIndex ?? initialState.streamIndex;
422
+ const events = [];
423
+ try {
424
+ for await (const event of openStreamIterable({
425
+ host: this.#context.host,
426
+ maxReconnectAttempts: this.#context.maxReconnectAttempts,
427
+ resolveHeaders: () => this.#context.resolveHeaders(),
428
+ sessionId,
429
+ signal: options?.signal,
430
+ startIndex: streamIndex
431
+ })) {
432
+ events.push(event);
433
+ yield event;
434
+ }
435
+ } finally {
436
+ this.#state = advanceSession({
437
+ continuationToken: initialState.continuationToken,
438
+ events,
439
+ session: {
440
+ ...initialState,
441
+ sessionId,
442
+ streamIndex
443
+ },
444
+ sessionId
445
+ });
393
446
  }
394
- if (!response.body) throw new ClientError(response.status, "Response body is null.");
395
- return response.body;
396
447
  }
397
448
  };
449
+ async function postTurnWithRetry(input) {
450
+ const attempts = input.mustDeliver ? DELIVER_RETRY_ATTEMPTS : 1;
451
+ let lastStatus;
452
+ let lastBody;
453
+ for (let attempt = 0; attempt < attempts; attempt += 1) {
454
+ const response = await fetch(input.url, {
455
+ body: input.body,
456
+ headers: input.headers,
457
+ method: "POST",
458
+ signal: input.signal ?? null
459
+ });
460
+ if (response.ok) return response;
461
+ lastStatus = response.status;
462
+ lastBody = await response.text();
463
+ if (!isRetryableDeliveryFailure(response.status, lastBody)) throw new ClientError(response.status, lastBody);
464
+ if (attempt < attempts - 1) await sleep(DELIVER_RETRY_DELAY_MS);
465
+ }
466
+ throw new ClientError(lastStatus ?? 0, lastBody ?? "Failed to deliver session turn.");
467
+ }
468
+ function isRetryableDeliveryFailure(status, body) {
469
+ return status === 500 && /target session was not found/i.test(body);
470
+ }
471
+ async function sleep(ms) {
472
+ await new Promise((resolve) => setTimeout(resolve, ms));
473
+ }
398
474
  function normalizeSendTurnInput(input) {
399
475
  return typeof input === "string" ? { message: input } : input;
400
476
  }
@@ -444,6 +520,14 @@ var Client = class {
444
520
  }
445
521
  return await response.json();
446
522
  }
523
+ async fetch(path, init = {}) {
524
+ const url = createClientUrl(this.#host, path);
525
+ const headers = await this.#resolveHeaders(headersInitToRecord(init.headers));
526
+ return await fetch(url, {
527
+ ...init,
528
+ headers
529
+ });
530
+ }
447
531
  session(state) {
448
532
  let resolved;
449
533
  if (typeof state === "string") resolved = {
@@ -488,6 +572,10 @@ async function resolveHeadersValue(value) {
488
572
  if (value === void 0) return {};
489
573
  return typeof value === "function" ? await value() : value;
490
574
  }
575
+ function headersInitToRecord(headers) {
576
+ if (headers === void 0) return {};
577
+ return Object.fromEntries(new Headers(headers).entries());
578
+ }
491
579
  function encodeBasicCredentials(username, password) {
492
580
  const bytes = new TextEncoder().encode(`${username}:${password}`);
493
581
  const binaryString = Array.from(bytes, (byte) => String.fromCodePoint(byte)).join("");
@@ -0,0 +1,7 @@
1
+ export declare const EVE_WORDMARK = "\uD835\uDC1E\uD835\uDC2F\uD835\uDC1E";
2
+ /**
3
+ * The one-line boot banner shared by every CLI command that announces itself:
4
+ * the 𝐞𝐯𝐞 badge plus the installed version, dimmed. Printed only by the CLI
5
+ * program's pre-action hook so commands never compose their own variant.
6
+ */
7
+ export declare function eveCliBanner(): string;
@@ -0,0 +1 @@
1
+ import{__toESM}from"../_virtual/_rolldown/runtime.js";import{require_picocolors}from"../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";var import_picocolors=__toESM(require_picocolors(),1);const EVE_WORDMARK=`𝐞𝐯𝐞`;function eveCliBanner(){let{version:e}=resolveInstalledPackageInfo();return`${import_picocolors.default.bgBlack(import_picocolors.default.white(` ${EVE_WORDMARK} `))} ${import_picocolors.default.dim(`v${e}`)}`}export{EVE_WORDMARK,eveCliBanner};
@@ -1,5 +1,5 @@
1
1
  import type { ChannelKind } from "#setup/scaffold/index.js";
2
- import type { DisabledChannelReasons } from "#setup/scaffold/cli/index.js";
2
+ import type { DisabledChannelReasons } from "#setup/cli/index.js";
3
3
  /**
4
4
  * Existing authored registrations that affect the scaffolded channel picker
5
5
  * or would conflict with a generated channel module.
@@ -1,6 +1,7 @@
1
- import { type AddToAgentState, type DeployProjectOptions, type RunAddToAgentOptions } from "#setup/scaffold/steps/index.js";
2
- import { type ChannelAddPrompter } from "#setup/scaffold/cli/index.js";
3
- import { type DeploymentInfo } from "#setup/scaffold/primitives/index.js";
1
+ import { type AddChannelsDeps } from "#setup/boxes/add-channels.js";
2
+ import { type DeployProjectDeps } from "#setup/boxes/deploy-project.js";
3
+ import { type DeploymentInfo } from "#setup/project-resolution.js";
4
+ import { type Prompter } from "#setup/prompter.js";
4
5
  export interface CliLogger {
5
6
  error(message: string): void;
6
7
  log(message: string): void;
@@ -11,10 +12,12 @@ export interface AddChannelCommandOptions {
11
12
  yes?: boolean;
12
13
  }
13
14
  export interface ChannelsAddDependencies {
14
- createPrompter?: () => ChannelAddPrompter;
15
+ createPrompter?: () => Prompter;
15
16
  detectDeployment(projectPath: string): Promise<DeploymentInfo>;
16
- deployProject(options: DeployProjectOptions): Promise<AddToAgentState>;
17
- runAddToAgent(options: RunAddToAgentOptions): Promise<AddToAgentState>;
17
+ /** Test seam into the add-channels box's scaffold/Connect/Vercel effects. */
18
+ addChannelsDeps?: AddChannelsDeps;
19
+ /** Test seam into the deploy box's subprocess effects. */
20
+ deployProjectDeps?: DeployProjectDeps;
18
21
  }
19
22
  export declare function runChannelsAddCommand(logger: CliLogger, appRoot: string, args: {
20
23
  kind?: string;
@@ -1 +1 @@
1
- import{assertCanAddSelectedChannels,inspectExistingChannelRegistrations}from"./channel-add-conflicts.js";import{isEveProject,listAuthoredChannels}from"#setup/scaffold/index.js";import{createAddToAgentState,deployProject,runAddToAgent}from"#setup/scaffold/steps/index.js";import{ChannelAddCancelledError,createChannelAddPrompter}from"#setup/scaffold/cli/index.js";import{detectDeployment}from"#setup/scaffold/primitives/index.js";const NOT_AN_AGENT_MESSAGE="No Eve agent in this directory. Run `pnpm create eve@beta`, then run this command from inside the new project.",KNOWN_CHANNEL_KINDS=[`slack`,`web`];function isChannelKind(e){return KNOWN_CHANNEL_KINDS.includes(e)}function parseChannelKind(e){if(!isChannelKind(e))throw Error(`Unknown channel kind "${e}". Known: ${KNOWN_CHANNEL_KINDS.join(`, `)}.`);return e}const defaultChannelsAddDependencies={detectDeployment,deployProject,runAddToAgent};async function runAddChannelsFlow(n,r,a,o){if(r===void 0&&(a.yes||!process.stdin.isTTY||!process.stdout.isTTY))throw Error(`Pass a channel kind: \`eve channels add <${KNOWN_CHANNEL_KINDS.join(`|`)}>\`.`);let s=o.createPrompter?.()??createChannelAddPrompter();s.intro(`Add channels to your Eve agent`),s.log.message(`Checking the current Vercel project...`);let c=createAddToAgentState(await o.detectDeployment(n)),l;function inspectRegistrations(){return l===void 0&&(s.log.message(`Inspecting existing channel registrations...`),l=inspectExistingChannelRegistrations(n)),l}let u=r===void 0?(await inspectRegistrations()).disabledChannelReasons:void 0;c=await o.runAddToAgent({prompter:s,projectPath:n,state:c,presetChannels:r===void 0?void 0:[r],presetCreateSlackbot:a.yes?!0:void 0,disabledChannelReasons:u,force:a.force,validateSelectedChannels:async t=>{!t.includes(`web`)&&!t.includes(`slack`)||assertCanAddSelectedChannels(t,await inspectRegistrations())}}),c=await o.deployProject({prompter:s,projectPath:n,state:c}),s.outro(c.channels.length===0?`No channels added.`:`Channels added.`)}async function runChannelsAddCommand(e,t,r,i=defaultChannelsAddDependencies){if(!await isEveProject(t)){e.error(NOT_AN_AGENT_MESSAGE),process.exitCode=1;return}try{await runAddChannelsFlow(t,r.kind===void 0?void 0:parseChannelKind(r.kind),r.options,i)}catch(t){if(t instanceof ChannelAddCancelledError)return;e.error(t instanceof Error?t.message:String(t)),process.exitCode=1}}async function runChannelsListCommand(e,t,i){if(!await isEveProject(t)){e.error(NOT_AN_AGENT_MESSAGE),process.exitCode=1;return}let a=await listAuthoredChannels(t);if(i.json){e.log(JSON.stringify({channels:a},null,2));return}if(a.length===0){e.log("No channels defined. Run `eve channels add` to add one.");return}for(let t of a)e.log(t)}export{runChannelsAddCommand,runChannelsListCommand};
1
+ import{assertCanAddSelectedChannels,inspectExistingChannelRegistrations}from"./channel-add-conflicts.js";import{NOT_AN_AGENT_MESSAGE}from"./preconditions.js";import{isEveProject,listAuthoredChannels}from"#setup/scaffold/index.js";import{interactiveAsker}from"#setup/ask.js";import{addChannels}from"#setup/boxes/add-channels.js";import{deployProject}from"#setup/boxes/deploy-project.js";import{selectChannels}from"#setup/boxes/select-channels.js";import{detectDeployment,projectResolutionFromDeployment}from"#setup/project-resolution.js";import{createPrompter}from"#setup/prompter.js";import{runInteractive}from"#setup/runner.js";import{createDefaultSetupState,snapshotSetupState}from"#setup/state.js";const KNOWN_CHANNEL_KINDS=[`slack`,`web`];function isChannelKind(e){return KNOWN_CHANNEL_KINDS.includes(e)}function parseChannelKind(e){if(!isChannelKind(e))throw Error(`Unknown channel kind "${e}". Known: ${KNOWN_CHANNEL_KINDS.join(`, `)}.`);return e}const defaultChannelsAddDependencies={detectDeployment};async function runAddChannelsFlow(n,r,i,s){if(r===void 0&&(i.yes||!process.stdin.isTTY||!process.stdout.isTTY))throw Error(`Pass a channel kind: \`eve channels add <${KNOWN_CHANNEL_KINDS.join(`|`)}>\`.`);let c=s.createPrompter?.()??createPrompter();c.intro(`Add channels to your Eve agent`),c.log.message(`Checking the current Vercel project...`);let l={...createDefaultSetupState(),project:projectResolutionFromDeployment(await s.detectDeployment(n)),projectPath:{kind:`resolved`,inPlace:!0,path:n}},u;function inspectRegistrations(){return u===void 0&&(c.log.message(`Inspecting existing channel registrations...`),u=inspectExistingChannelRegistrations(n)),u}let d=r===void 0?(await inspectRegistrations()).disabledChannelReasons:void 0,f=await runInteractive([selectChannels({asker:interactiveAsker(c),variant:`channels-add`,presetChannels:r===void 0?void 0:[r],disabledChannelReasons:d,validateSelection:async t=>{!t.includes(`web`)&&!t.includes(`slack`)||assertCanAddSelectedChannels(t,await inspectRegistrations())}}),addChannels({asker:interactiveAsker(c),prompter:c,presetCreateSlackbot:i.yes?!0:void 0,force:i.force,configureVercelServices:!0,ensureLinkedProject:`interactive-vercel-link`,deps:s.addChannelsDeps}),deployProject({prompter:c,ensureLinkedProject:`interactive-vercel-link`,deps:s.deployProjectDeps})],l,{write:e=>c.log.message(e)},{snapshot:snapshotSetupState});f.kind!==`cancelled`&&c.outro(f.state.channels.length===0?`No channels added.`:`Channels added.`)}async function runChannelsAddCommand(e,t,i,a=defaultChannelsAddDependencies){if(!await isEveProject(t)){e.error(NOT_AN_AGENT_MESSAGE),process.exitCode=1;return}try{await runAddChannelsFlow(t,i.kind===void 0?void 0:parseChannelKind(i.kind),i.options,a)}catch(t){e.error(t instanceof Error?t.message:String(t)),process.exitCode=1}}async function runChannelsListCommand(e,t,a){if(!await isEveProject(t)){e.error(NOT_AN_AGENT_MESSAGE),process.exitCode=1;return}let o=await listAuthoredChannels(t);if(a.json){e.log(JSON.stringify({channels:o},null,2));return}if(o.length===0){e.log("No channels defined. Run `eve channels add` to add one.");return}for(let t of o)e.log(t)}export{runChannelsAddCommand,runChannelsListCommand};
@@ -0,0 +1,21 @@
1
+ import { type DeployFlowDeps } from "#setup/flows/deploy.js";
2
+ import { type Prompter } from "#setup/prompter.js";
3
+ export interface DeployCliLogger {
4
+ error(message: string): void;
5
+ log(message: string): void;
6
+ }
7
+ export interface DeployCommandDependencies {
8
+ createPrompter?: () => Prompter;
9
+ isEveProject(projectPath: string): Promise<boolean>;
10
+ hasInteractiveTerminal(): boolean;
11
+ /** Test seam into the flow's detection and box effects. */
12
+ flowDeps?: Partial<DeployFlowDeps>;
13
+ }
14
+ /**
15
+ * `eve deploy`: deploy the agent to Vercel production. An already-linked
16
+ * project deploys straight away (interactively or not); an unlinked one walks
17
+ * the same team/project pickers as onboarding when a terminal is present, and
18
+ * refuses with `eve link` guidance otherwise. The flow itself is
19
+ * {@link runDeployFlow}, shared with the dev TUI's `/deploy`.
20
+ */
21
+ export declare function runDeployCommand(logger: DeployCliLogger, appRoot: string, dependencies?: DeployCommandDependencies): Promise<void>;
@@ -0,0 +1 @@
1
+ import{NOT_AN_AGENT_MESSAGE,hasInteractiveTerminal}from"./preconditions.js";import{isEveProject}from"#setup/scaffold/index.js";import{createPrompter}from"#setup/prompter.js";import{runDeployFlow}from"#setup/flows/deploy.js";const defaultDependencies={isEveProject,hasInteractiveTerminal};async function runDeployCommand(t,n,r=defaultDependencies){if(!await r.isEveProject(n)){t.error(NOT_AN_AGENT_MESSAGE),process.exitCode=1;return}let i=r.createPrompter?.()??createPrompter();i.intro(`Deploy your Eve agent to Vercel`);try{let e=await runDeployFlow({appRoot:n,prompter:i,interactive:r.hasInteractiveTerminal(),deps:r.flowDeps});if(e.kind===`needs-link`){t.error("This directory is not linked to a Vercel project. Run `eve link` first (or `vercel link --project <name> --yes` in CI), then re-run `eve deploy`."),process.exitCode=1;return}i.outro(e.kind===`cancelled`?`Cancelled.`:e.productionUrl===void 0?`Deployed.`:`Deployed: ${e.productionUrl}`)}catch(e){t.error(e instanceof Error?e.message:String(e)),process.exitCode=1}}export{runDeployCommand};
@@ -0,0 +1,15 @@
1
+ export type GitInitResult = {
2
+ kind: "initialized";
3
+ } | {
4
+ kind: "skipped";
5
+ } | {
6
+ kind: "failed";
7
+ reason: string;
8
+ };
9
+ /**
10
+ * Initializes a Git repository and records the generated files in an initial
11
+ * commit. Missing Git and parent repositories are skips. A failed partial
12
+ * initialization is removed and returned as a `failed` result; presenting the
13
+ * failure (without failing `eve init`) is the caller's job.
14
+ */
15
+ export declare function tryInitializeGit(projectPath: string): GitInitResult;
@@ -0,0 +1 @@
1
+ import{join}from"node:path";import{execSync}from"node:child_process";import{rmSync}from"node:fs";const GIT_TIMEOUT_MS=5e3;function isGitAvailable(){try{return execSync(`git --version`,{stdio:`ignore`,timeout:GIT_TIMEOUT_MS}),!0}catch{return!1}}function isInsideExistingRepository(e){try{return execSync(`git rev-parse --is-inside-work-tree`,{cwd:e,stdio:`ignore`,timeout:GIT_TIMEOUT_MS}),!0}catch{}try{return execSync(`hg --cwd . root`,{cwd:e,stdio:`ignore`,timeout:GIT_TIMEOUT_MS}),!0}catch{return!1}}function hasConfiguredDefaultBranch(e){try{return execSync(`git config init.defaultBranch`,{cwd:e,stdio:`ignore`,timeout:GIT_TIMEOUT_MS}),!0}catch{return!1}}function tryInitializeGit(n){if(!isGitAvailable()||isInsideExistingRepository(n))return{kind:`skipped`};let r=!1;try{return execSync(`git init`,{cwd:n,stdio:`ignore`,timeout:GIT_TIMEOUT_MS}),r=!0,hasConfiguredDefaultBranch(n)||execSync(`git checkout -b main`,{cwd:n,stdio:`ignore`,timeout:GIT_TIMEOUT_MS}),execSync(`git add -A`,{cwd:n,stdio:`ignore`,timeout:GIT_TIMEOUT_MS}),execSync(`git commit -m "Initial commit from Eve"`,{cwd:n,stdio:`ignore`,timeout:GIT_TIMEOUT_MS}),{kind:`initialized`}}catch(t){if(r)try{rmSync(join(n,`.git`),{recursive:!0,force:!0})}catch{}return{kind:`failed`,reason:t instanceof Error?t.message:String(t)}}}export{tryInitializeGit};
@@ -0,0 +1,29 @@
1
+ import { detectInvokingPackageManager, detectPackageManager } from "#setup/package-manager.js";
2
+ import { runPackageManagerInstall, spawnPackageManager } from "#setup/primitives/index.js";
3
+ import { addAgentToProject } from "#setup/scaffold/create/add-to-project.js";
4
+ import { ensureChannel, scaffoldBaseProject } from "#setup/scaffold/index.js";
5
+ import { tryInitializeGit } from "./init-git.js";
6
+ export interface InitCliLogger {
7
+ error(message: string): void;
8
+ log(message: string): void;
9
+ }
10
+ export interface InitCommandOptions {
11
+ /** Add the Web Chat channel (a Next.js app). Set by `--channel-web-nextjs`. */
12
+ channelWebNextjs?: boolean;
13
+ }
14
+ export interface InitCommandDependencies {
15
+ addAgentToProject: typeof addAgentToProject;
16
+ detectInvokingPackageManager: typeof detectInvokingPackageManager;
17
+ detectPackageManager: typeof detectPackageManager;
18
+ ensureChannel: typeof ensureChannel;
19
+ runPackageManagerInstall: typeof runPackageManagerInstall;
20
+ scaffoldBaseProject: typeof scaffoldBaseProject;
21
+ spawnPackageManager: typeof spawnPackageManager;
22
+ tryInitializeGit: typeof tryInitializeGit;
23
+ }
24
+ /**
25
+ * Creates a new Eve agent (`target` is a project name), or adds one to an
26
+ * existing project (`target` is a directory), without prompts or external
27
+ * provisioning.
28
+ */
29
+ export declare function runInitCommand(logger: InitCliLogger, parentDirectory: string, target: string, options: InitCommandOptions, dependencies?: InitCommandDependencies): Promise<void>;
@@ -0,0 +1 @@
1
+ import{__toESM}from"../../_virtual/_rolldown/runtime.js";import{require_picocolors}from"../../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js";import{tryInitializeGit}from"./init-git.js";import{join,resolve}from"node:path";import{ensureChannel,scaffoldBaseProject}from"#setup/scaffold/index.js";import{mkdtemp,rename,rm,stat}from"node:fs/promises";import{EVE_WORDMARK}from"#cli/banner.js";import{DEFAULT_AGENT_MODEL_ID}from"#shared/default-agent-model.js";import{SPINNER_FRAMES,SPINNER_FRAME_MS}from"#setup/cli/rail-log.js";import{detectInvokingPackageManager,detectPackageManager}from"#setup/package-manager.js";import{pathExists}from"#setup/path-exists.js";import{parseProjectName}from"#setup/project-name.js";import{eveDevArguments,runPackageManagerInstall,spawnPackageManager}from"#setup/primitives/index.js";import{addAgentToProject}from"#setup/scaffold/create/add-to-project.js";var import_picocolors=__toESM(require_picocolors(),1);const defaultDependencies={addAgentToProject,detectInvokingPackageManager,detectPackageManager,ensureChannel,runPackageManagerInstall,scaffoldBaseProject,spawnPackageManager,tryInitializeGit};async function resolveTargetDirectory(e,t){let n=resolve(e,t);return(await stat(n).catch(()=>void 0))?.isDirectory()?n:void 0}async function addToExistingProject(e,t,n){if(t.channelWebNextjs===!0)throw Error("`--channel-web-nextjs` is not supported when adding an agent to an existing project. Run `eve channels add web` from the project afterwards instead.");let r=await n.detectPackageManager(e);return await n.addAgentToProject({projectRoot:e,model:DEFAULT_AGENT_MODEL_ID,packageManager:r.kind}),r.kind}function resolveScaffoldPackageManager(e){return e.detectInvokingPackageManager()??`pnpm`}const EVE_INIT_PACKAGE_VERSION=`latest`;async function scaffoldProject(e,t,n,a,o){let u=resolve(e),d=join(u,t);if(await pathExists(d))throw Error(`Cannot create project because "${d}" already exists.`);let f=await mkdtemp(join(u,`.eve-init-`));try{let e=await o.scaffoldBaseProject({projectName:t,model:DEFAULT_AGENT_MODEL_ID,packageManager:n,targetDirectory:f,evePackageVersion:EVE_INIT_PACKAGE_VERSION});return a.channelWebNextjs===!0&&await o.ensureChannel({projectRoot:e,kind:`web`,packageManager:n,configureVercelServices:!1,webPackageVersions:{evePackageVersion:EVE_INIT_PACKAGE_VERSION}}),await rename(e,d),d}finally{await rm(f,{recursive:!0,force:!0})}}function startSpinner(e,t){if(process.stdout.isTTY!==!0)return e.log(t),{stop(){}};let row=e=>`${import_picocolors.default.green(e)} ${t}`;process.stdout.write(row(SPINNER_FRAMES[0]));let n=0,r=setInterval(()=>{n+=1;let e=SPINNER_FRAMES[n%SPINNER_FRAMES.length]??SPINNER_FRAMES[0];process.stdout.write(`\r\u001B[K${row(e)}`)},SPINNER_FRAME_MS);r.unref?.();let i=!1;return{stop(){i||(i=!0,clearInterval(r),process.stdout.write(`\r\x1B[K`))}}}async function runInitCommand(e,t,n,r,i=defaultDependencies){let a=await resolveTargetDirectory(t,n),o,s;a===void 0?(o=resolveScaffoldPackageManager(i),s=await scaffoldProject(t,parseProjectName(n),o,r,i),e.log(`${import_picocolors.default.green(`✓`)} Created an ${EVE_WORDMARK} agent in ${import_picocolors.default.bold(s)}`)):(o=await addToExistingProject(a,r,i),s=a,e.log(`${import_picocolors.default.green(`✓`)} Added an ${EVE_WORDMARK} agent to ${import_picocolors.default.bold(s)}`));let c=[],l=startSpinner(e,`Installing dependencies...`),u;try{u=await i.runPackageManagerInstall(o,s,{bypassMinimumReleaseAge:!0,onOutput:e=>c.push(e.text)})}finally{l.stop()}if(!u){for(let t of c)e.error(t);throw Error(`Failed to install dependencies in "${s}".`)}if(e.log(`${import_picocolors.default.green(`✓`)} Installed dependencies`),a===void 0){let t=i.tryInitializeGit(s);t.kind===`failed`&&e.error(import_picocolors.default.yellow(`Git initialization failed: ${t.reason}`))}if(e.log(import_picocolors.default.dim(`$ eve dev`)),!await i.spawnPackageManager(o,s,eveDevArguments(o)))throw Error(`Development server exited unsuccessfully in "${s}".`)}export{runInitCommand};