eve 0.37.0 → 0.38.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 (410) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/src/channel/routes.d.ts +13 -3
  3. package/dist/src/channel/routes.js +1 -1
  4. package/dist/src/channel/session-callback.js +1 -1
  5. package/dist/src/channel/session.d.ts +2 -1
  6. package/dist/src/channel/session.js +1 -1
  7. package/dist/src/channel/types.d.ts +41 -0
  8. package/dist/src/chunks/{use-eve-agent-COmP-H8R.js → use-eve-agent-BbSsu99c.js} +79 -32
  9. package/dist/src/chunks/{use-eve-agent-CnppTEFk.js → use-eve-agent-Dt8Y5QtW.js} +78 -31
  10. package/dist/src/cli/acp/command.d.ts +2 -1
  11. package/dist/src/cli/acp/command.js +2 -2
  12. package/dist/src/cli/application-command.d.ts +8 -0
  13. package/dist/src/cli/application-command.js +1 -0
  14. package/dist/src/cli/application-root.d.ts +8 -0
  15. package/dist/src/cli/application-root.js +1 -0
  16. package/dist/src/cli/commands/build.d.ts +2 -1
  17. package/dist/src/cli/commands/build.js +1 -1
  18. package/dist/src/cli/commands/init-git.js +1 -1
  19. package/dist/src/cli/commands/init-recovery.d.ts +3 -0
  20. package/dist/src/cli/commands/init-recovery.js +3 -0
  21. package/dist/src/cli/commands/init-repl.js +1 -1
  22. package/dist/src/cli/commands/init-target.d.ts +21 -0
  23. package/dist/src/cli/commands/init-target.js +1 -0
  24. package/dist/src/cli/commands/init.js +1 -1
  25. package/dist/src/cli/commands/register-integration-commands.d.ts +2 -1
  26. package/dist/src/cli/commands/register-integration-commands.js +1 -1
  27. package/dist/src/cli/commands/register-project-commands.d.ts +2 -1
  28. package/dist/src/cli/commands/register-project-commands.js +1 -1
  29. package/dist/src/cli/commands/register-registry-commands.d.ts +2 -1
  30. package/dist/src/cli/commands/register-registry-commands.js +4 -1
  31. package/dist/src/cli/commands/registry-recovery.d.ts +14 -0
  32. package/dist/src/cli/commands/registry-recovery.js +1 -0
  33. package/dist/src/cli/commands/registry.d.ts +2 -5
  34. package/dist/src/cli/commands/registry.js +1 -1
  35. package/dist/src/cli/dev/diagnostic-dump.js +1 -1
  36. package/dist/src/cli/dev/environment.js +1 -1
  37. package/dist/src/cli/dev/tui/runner.d.ts +8 -0
  38. package/dist/src/cli/dev/tui/runner.js +1 -1
  39. package/dist/src/cli/dev/tui/subagent-pump.d.ts +27 -22
  40. package/dist/src/cli/dev/tui/subagent-pump.js +1 -1
  41. package/dist/src/cli/dev/tui/terminal-renderer.d.ts +16 -0
  42. package/dist/src/cli/dev/tui/terminal-renderer.js +12 -12
  43. package/dist/src/cli/dev/tui/tool-presentation.js +1 -1
  44. package/dist/src/cli/invoke/command.d.ts +3 -2
  45. package/dist/src/cli/invoke/command.js +1 -1
  46. package/dist/src/cli/run.d.ts +3 -2
  47. package/dist/src/cli/run.js +3 -3
  48. package/dist/src/client/eve-agent-store.d.ts +15 -3
  49. package/dist/src/client/eve-agent-store.js +2 -2
  50. package/dist/src/client/message-response.d.ts +10 -2
  51. package/dist/src/client/message-response.js +1 -1
  52. package/dist/src/client/open-stream.d.ts +2 -0
  53. package/dist/src/client/open-stream.js +1 -1
  54. package/dist/src/client/session.js +1 -1
  55. package/dist/src/compiled/.vendor-stamp.json +5 -1
  56. package/dist/src/compiled/@ai-sdk/otel/index.js +3 -3
  57. package/dist/src/compiled/@chat-adapter/slack/index.js +25 -25
  58. package/dist/src/compiled/@modelcontextprotocol/server/LICENSE +216 -0
  59. package/dist/src/compiled/@modelcontextprotocol/server/index.d.ts +98 -0
  60. package/dist/src/compiled/@modelcontextprotocol/server/index.js +80 -0
  61. package/dist/src/compiled/@opentelemetry/api/index.js +1 -1
  62. package/dist/src/compiled/@opentelemetry/otlp-transformer/index.js +1 -1
  63. package/dist/src/compiled/@photon-ai/chat-adapter-imessage/index.js +61 -61
  64. package/dist/src/compiled/@vercel/oidc/index.js +14 -14
  65. package/dist/src/compiled/@vercel/otel/index.js +1 -1
  66. package/dist/src/compiled/@vercel/sandbox/index.js +1 -1
  67. package/dist/src/compiled/@workflow/core/index.js +1 -1
  68. package/dist/src/compiled/@workflow/core/private.js +1 -1
  69. package/dist/src/compiled/@workflow/core/runtime.js +2 -2
  70. package/dist/src/compiled/@workflow/core/workflow.js +1 -1
  71. package/dist/src/compiled/@workflow/errors/index.js +1 -1
  72. package/dist/src/compiled/@workflow/world-local/index.js +5 -5
  73. package/dist/src/compiled/@workflow/world-vercel/index.js +13 -13
  74. package/dist/src/compiled/_chunks/workflow/{attribute-changes-BoH7JsWp.js → attribute-changes-DZtQkszH.js} +1 -1
  75. package/dist/src/compiled/_chunks/workflow/chunk-5MU5Z6L3-B_3nkJFi.js +1 -0
  76. package/dist/src/compiled/_chunks/workflow/{chunk-NWCAEW5Y-Oxw40oRR.js → chunk-NWCAEW5Y-BgbcH0OK.js} +1 -1
  77. package/dist/src/compiled/_chunks/workflow/{dist-DlFv0aHY.js → dist-CPlyFOVo.js} +1 -1
  78. package/dist/src/compiled/_chunks/workflow/{dist-tJoQXAF6.js → dist-DpYyXbJv.js} +1 -1
  79. package/dist/src/compiled/_chunks/workflow/{dist-CRTn4Sg8.js → dist-xQXN70ED.js} +1 -1
  80. package/dist/src/compiled/_chunks/workflow/esm-seIr7a6j.js +1 -0
  81. package/dist/src/compiled/_chunks/workflow/{frames-CTpeJYEQ.js → frames-BBs-9k1d.js} +2 -2
  82. package/dist/src/compiled/_chunks/workflow/{functions-CeeNvKsq.js → functions-DAYiHNti.js} +1 -1
  83. package/dist/src/compiled/_chunks/workflow/{getMachineId-bsd-WEBNKY2R-CEYkx6Nv.js → getMachineId-bsd-WEBNKY2R-BTaxrQ52.js} +1 -1
  84. package/dist/src/compiled/_chunks/workflow/{getMachineId-darwin-LT47KAXP-DPwWlhif.js → getMachineId-darwin-LT47KAXP-DhYmwE_R.js} +1 -1
  85. package/dist/src/compiled/_chunks/workflow/{getMachineId-linux-LTVQO6VW-DAFXHwZp.js → getMachineId-linux-LTVQO6VW-Dru_L5ru.js} +1 -1
  86. package/dist/src/compiled/_chunks/workflow/{getMachineId-unsupported-UKWBA27G-BZKOI8mG.js → getMachineId-unsupported-UKWBA27G-DGfoqVW1.js} +1 -1
  87. package/dist/src/compiled/_chunks/workflow/{getMachineId-win-NLJKOPY6-r7_CJB5o.js → getMachineId-win-NLJKOPY6-CLM98q4X.js} +1 -1
  88. package/dist/src/compiled/_chunks/workflow/{private-tvMBynnC.js → private-UQtz8ZcW.js} +1 -1
  89. package/dist/src/compiled/_chunks/workflow/{resume-hook-BPQHjeY5.js → resume-hook-CYtSorp6.js} +1 -1
  90. package/dist/src/compiled/_chunks/workflow/{rolldown-runtime-DaDcL9Zw.js → rolldown-runtime-8V8biNmG.js} +1 -1
  91. package/dist/src/compiled/_chunks/workflow/{run-DQ5dOyjm.js → run-Cjo0A3NO.js} +1 -1
  92. package/dist/src/compiled/_chunks/workflow/{signal-exit-C8vsI6zj.js → signal-exit-o3IPQwwv.js} +1 -1
  93. package/dist/src/compiled/_chunks/workflow/sleep-C1P0OWBm.js +1 -0
  94. package/dist/src/compiled/_chunks/workflow/{token-DHD-q-fS.js → token-DGzfw-Vb.js} +1 -1
  95. package/dist/src/compiled/_chunks/workflow/{token-DtCUEpJs.js → token-DNbxVpeq.js} +1 -1
  96. package/dist/src/compiled/_chunks/workflow/token-util-BneBe0g5.js +27 -0
  97. package/dist/src/compiled/_chunks/workflow/{token-util-Ldar52H7.js → token-util-DjMgNdXS.js} +1 -1
  98. package/dist/src/compiled/_chunks/workflow/{undici-CUIybhQ2.js → undici-BBG5cZTy.js} +1 -1
  99. package/dist/src/compiled/_chunks/workflow/{wait-until-DK2lnH6U.js → wait-until-CT1ve8qB.js} +3 -3
  100. package/dist/src/compiled/_chunks/workflow/{wrapper-CMGju7QA.js → wrapper-CQNxP9mU.js} +3 -3
  101. package/dist/src/compiled/_chunks/workflow/{ws-transport-Csi6Cydc.js → ws-transport-beXxD0s_.js} +1 -1
  102. package/dist/src/compiled/env-runner/node-worker.js +1 -1
  103. package/dist/src/compiled/jose/index.js +1 -1
  104. package/dist/src/compiled/shadcn-registry/index.js +403 -403
  105. package/dist/src/compiler/artifacts.js +1 -1
  106. package/dist/src/compiler/compile-agent.js +2 -2
  107. package/dist/src/compiler/extension-compatibility.d.ts +20 -10
  108. package/dist/src/compiler/extension-compatibility.js +1 -1
  109. package/dist/src/compiler/manifest.js +1 -1
  110. package/dist/src/compiler/normalize-agent-config.js +1 -1
  111. package/dist/src/compiler/normalize-extension.d.ts +8 -5
  112. package/dist/src/compiler/normalize-extension.js +1 -1
  113. package/dist/src/compiler/normalize-manifest.js +1 -1
  114. package/dist/src/compiler/normalize-subagent.d.ts +1 -1
  115. package/dist/src/compiler/normalize-subagent.js +1 -1
  116. package/dist/src/context/serialized-dynamic-model-selection.d.ts +2 -0
  117. package/dist/src/context/serialized-dynamic-model-selection.js +1 -0
  118. package/dist/src/discover/discover-agent.js +1 -1
  119. package/dist/src/discover/extensions.d.ts +0 -6
  120. package/dist/src/discover/extensions.js +1 -1
  121. package/dist/src/evals/cli/eval.d.ts +1 -1
  122. package/dist/src/evals/cli/eval.js +1 -1
  123. package/dist/src/execution/agent-handle-dispatch.d.ts +15 -1
  124. package/dist/src/execution/agent-handle-dispatch.js +1 -1
  125. package/dist/src/execution/cancel-descendant-turns-step.js +1 -1
  126. package/dist/src/execution/delegated-parent-notification.d.ts +17 -0
  127. package/dist/src/execution/delegated-parent-notification.js +1 -1
  128. package/dist/src/execution/deliver-payloads.js +1 -1
  129. package/dist/src/execution/dispatch-runtime-actions-shared.d.ts +155 -0
  130. package/dist/src/execution/dispatch-runtime-actions-shared.js +1 -0
  131. package/dist/src/execution/dispatch-runtime-actions-step.d.ts +18 -14
  132. package/dist/src/execution/dispatch-runtime-actions-step.js +1 -1
  133. package/dist/src/execution/dispatch-workflow-runtime-actions-step.d.ts +7 -2
  134. package/dist/src/execution/dispatch-workflow-runtime-actions-step.js +1 -1
  135. package/dist/src/execution/effective-output-schema.d.ts +21 -0
  136. package/dist/src/execution/effective-output-schema.js +1 -0
  137. package/dist/src/execution/eve-workflow-attributes.d.ts +2 -0
  138. package/dist/src/execution/node-step.js +1 -1
  139. package/dist/src/execution/parked-delivery-wait.d.ts +8 -12
  140. package/dist/src/execution/parked-delivery-wait.js +1 -1
  141. package/dist/src/execution/{route-proxied-deliver-step.d.ts → proxied-deliver-step.d.ts} +7 -4
  142. package/dist/src/execution/proxied-deliver-step.js +1 -0
  143. package/dist/src/execution/remote-agent-dispatch.d.ts +32 -0
  144. package/dist/src/execution/remote-agent-dispatch.js +1 -1
  145. package/dist/src/execution/remote-agent-route-url.d.ts +2 -0
  146. package/dist/src/execution/remote-agent-route-url.js +1 -0
  147. package/dist/src/execution/route-child-delivery.d.ts +2 -1
  148. package/dist/src/execution/route-child-delivery.js +1 -1
  149. package/dist/src/execution/sandbox/bindings/docker-templates.js +1 -1
  150. package/dist/src/execution/sandbox/bindings/just-bash.js +1 -1
  151. package/dist/src/execution/sandbox/bindings/microsandbox-templates.js +1 -1
  152. package/dist/src/execution/sandbox/prewarm.js +1 -1
  153. package/dist/src/execution/session-callback-step.d.ts +11 -0
  154. package/dist/src/execution/session-callback-step.js +1 -1
  155. package/dist/src/execution/session-command-wire.js +1 -1
  156. package/dist/src/execution/session-state-cursor.d.ts +25 -0
  157. package/dist/src/execution/session-state-cursor.js +1 -0
  158. package/dist/src/execution/settle-cancelled-turn-step.d.ts +2 -0
  159. package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
  160. package/dist/src/execution/subagent-event-proxy-step.d.ts +15 -0
  161. package/dist/src/execution/subagent-event-proxy-step.js +1 -1
  162. package/dist/src/execution/subagent-hitl-proxy.d.ts +14 -7
  163. package/dist/src/execution/subagent-hitl-proxy.js +1 -1
  164. package/dist/src/execution/subagent-start-local.d.ts +29 -0
  165. package/dist/src/execution/subagent-start-local.js +1 -0
  166. package/dist/src/execution/subagent-start-remote.d.ts +23 -0
  167. package/dist/src/execution/subagent-start-remote.js +1 -0
  168. package/dist/src/execution/task-event-callback.d.ts +13 -0
  169. package/dist/src/execution/task-event-callback.js +1 -0
  170. package/dist/src/execution/task-input-capability.d.ts +4 -0
  171. package/dist/src/execution/task-input-capability.js +1 -0
  172. package/dist/src/execution/tasks/child/steps.d.ts +46 -0
  173. package/dist/src/execution/tasks/child/steps.js +1 -0
  174. package/dist/src/execution/tasks/child/workflow.d.ts +31 -0
  175. package/dist/src/execution/tasks/child/workflow.js +1 -0
  176. package/dist/src/execution/tasks/parent/agent-identity.d.ts +13 -0
  177. package/dist/src/execution/tasks/parent/agent-identity.js +1 -0
  178. package/dist/src/execution/tasks/parent/agent-views.d.ts +6 -0
  179. package/dist/src/execution/tasks/parent/agent-views.js +1 -0
  180. package/dist/src/execution/tasks/parent/continuation-dispatch.d.ts +37 -0
  181. package/dist/src/execution/tasks/parent/continuation-dispatch.js +1 -0
  182. package/dist/src/execution/tasks/parent/control-shared.d.ts +36 -0
  183. package/dist/src/execution/tasks/parent/control-shared.js +1 -0
  184. package/dist/src/execution/tasks/parent/delegate.d.ts +70 -0
  185. package/dist/src/execution/tasks/parent/delegate.js +1 -0
  186. package/dist/src/execution/tasks/parent/dispatch-task-step.d.ts +19 -0
  187. package/dist/src/execution/tasks/parent/dispatch-task-step.js +1 -0
  188. package/dist/src/execution/tasks/parent/dispatch.d.ts +33 -0
  189. package/dist/src/execution/tasks/parent/dispatch.js +1 -0
  190. package/dist/src/execution/tasks/parent/hitl-proxy-steps.d.ts +29 -0
  191. package/dist/src/execution/tasks/parent/hitl-proxy-steps.js +1 -0
  192. package/dist/src/execution/tasks/parent/run-parent.d.ts +72 -0
  193. package/dist/src/execution/tasks/parent/run-parent.js +1 -0
  194. package/dist/src/execution/tasks/parent/send.d.ts +25 -0
  195. package/dist/src/execution/tasks/parent/send.js +1 -0
  196. package/dist/src/execution/tasks/workflow-target.d.ts +2 -0
  197. package/dist/src/execution/tasks/workflow-target.js +1 -0
  198. package/dist/src/execution/terminate-child-sessions-step.d.ts +1 -0
  199. package/dist/src/execution/terminate-child-sessions-step.js +1 -1
  200. package/dist/src/execution/turn-control-receiver.d.ts +10 -0
  201. package/dist/src/execution/turn-control-receiver.js +1 -1
  202. package/dist/src/execution/turn-dispatch.d.ts +2 -0
  203. package/dist/src/execution/turn-dispatch.js +1 -1
  204. package/dist/src/execution/turn-execution-cursor.d.ts +2 -8
  205. package/dist/src/execution/turn-execution-cursor.js +1 -1
  206. package/dist/src/execution/turn-workflow.js +1 -1
  207. package/dist/src/execution/workflow-callback-url.d.ts +5 -0
  208. package/dist/src/execution/workflow-callback-url.js +1 -1
  209. package/dist/src/execution/workflow-entry.js +1 -1
  210. package/dist/src/execution/workflow-runtime.d.ts +9 -0
  211. package/dist/src/execution/workflow-runtime.js +1 -1
  212. package/dist/src/execution/workflow-steps.d.ts +7 -21
  213. package/dist/src/execution/workflow-steps.js +1 -1
  214. package/dist/src/harness/advertised-tools.js +1 -1
  215. package/dist/src/harness/authorization.js +1 -1
  216. package/dist/src/harness/execute-tool.d.ts +7 -0
  217. package/dist/src/harness/handles/prompt.d.ts +12 -0
  218. package/dist/src/harness/handles/prompt.js +2 -1
  219. package/dist/src/harness/handles/query.js +1 -1
  220. package/dist/src/harness/handles/store.d.ts +9 -2
  221. package/dist/src/harness/handles/store.js +1 -1
  222. package/dist/src/harness/handles/transitions.d.ts +10 -1
  223. package/dist/src/harness/handles/transitions.js +1 -1
  224. package/dist/src/harness/instrumentation/providers.js +1 -1
  225. package/dist/src/harness/instrumentation/runtime-context.d.ts +2 -0
  226. package/dist/src/harness/instrumentation/runtime-context.js +1 -1
  227. package/dist/src/harness/instrumentation/runtime.d.ts +3 -1
  228. package/dist/src/harness/proxy-input-requests.d.ts +21 -4
  229. package/dist/src/harness/proxy-input-requests.js +1 -1
  230. package/dist/src/harness/runtime-actions.d.ts +2 -0
  231. package/dist/src/harness/runtime-actions.js +1 -1
  232. package/dist/src/harness/session-limit-enforcement.js +1 -1
  233. package/dist/src/harness/tool-loop.js +2 -2
  234. package/dist/src/harness/workflow-runtime-action-state.js +1 -1
  235. package/dist/src/internal/application/cache-metadata.js +1 -1
  236. package/dist/src/internal/application/compiled-artifacts.js +2 -2
  237. package/dist/src/internal/application/optional-package-install.js +1 -1
  238. package/dist/src/internal/application/output-publication-lock.js +1 -1
  239. package/dist/src/internal/application/package.js +1 -1
  240. package/dist/src/internal/application/paths.js +1 -1
  241. package/dist/src/internal/application/tsconfig-dependencies.js +1 -1
  242. package/dist/src/internal/authored-definition/core.js +1 -1
  243. package/dist/src/internal/authored-module-evaluation-error.js +4 -4
  244. package/dist/src/internal/authored-module-loader.js +3 -3
  245. package/dist/src/internal/authored-package-boundary.js +1 -1
  246. package/dist/src/internal/authored-relative-extension-resolver.js +1 -1
  247. package/dist/src/internal/bundler/extension-scope-plugin.js +1 -1
  248. package/dist/src/internal/bundler/nitro-rolldown.js +1 -1
  249. package/dist/src/internal/instrumentation-layout.js +1 -1
  250. package/dist/src/internal/invocation/agent-invocation.d.ts +54 -0
  251. package/dist/src/internal/invocation/agent-invocation.js +1 -0
  252. package/dist/src/internal/invocation/attributes.d.ts +2 -0
  253. package/dist/src/internal/invocation/attributes.js +1 -0
  254. package/dist/src/internal/invocation/metadata.d.ts +9 -0
  255. package/dist/src/internal/invocation/metadata.js +1 -0
  256. package/dist/src/internal/invocation/workflow-execution.d.ts +32 -0
  257. package/dist/src/internal/invocation/workflow-execution.js +1 -0
  258. package/dist/src/internal/materialized-authored-modules.js +1 -1
  259. package/dist/src/internal/mcp/http-security.d.ts +12 -0
  260. package/dist/src/internal/mcp/http-security.js +1 -0
  261. package/dist/src/internal/mcp/protected-resource.d.ts +9 -0
  262. package/dist/src/internal/mcp/protected-resource.js +1 -0
  263. package/dist/src/internal/mcp/streamable-http-server.d.ts +51 -0
  264. package/dist/src/internal/mcp/streamable-http-server.js +1 -0
  265. package/dist/src/internal/nitro/dev-runtime-artifacts-retention.js +1 -1
  266. package/dist/src/internal/nitro/dev-runtime-artifacts.js +1 -1
  267. package/dist/src/internal/nitro/dev-runtime-source-snapshot-copy.js +1 -1
  268. package/dist/src/internal/nitro/dev-runtime-source-snapshot-local-roots.js +1 -1
  269. package/dist/src/internal/nitro/dev-runtime-source-snapshot.js +1 -1
  270. package/dist/src/internal/nitro/host/application-route-registry.d.ts +88 -0
  271. package/dist/src/internal/nitro/host/application-route-registry.js +1 -0
  272. package/dist/src/internal/nitro/host/build-application.js +1 -1
  273. package/dist/src/internal/nitro/host/build-extension.js +1 -1
  274. package/dist/src/internal/nitro/host/build-vercel-agent-summary.js +1 -1
  275. package/dist/src/internal/nitro/host/channel-routes.d.ts +4 -11
  276. package/dist/src/internal/nitro/host/channel-routes.js +3 -3
  277. package/dist/src/internal/nitro/host/configure-nitro-routes.js +3 -3
  278. package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
  279. package/dist/src/internal/nitro/host/dev-authored-source-watcher.js +1 -1
  280. package/dist/src/internal/nitro/host/dev-runner.js +1 -1
  281. package/dist/src/internal/nitro/host/dev-workspace-extensions.js +1 -1
  282. package/dist/src/internal/nitro/host/extension-capability-requirements.js +1 -1
  283. package/dist/src/internal/nitro/host/local-tracing-runtime-plugin.js +1 -1
  284. package/dist/src/internal/nitro/host/nitro-bundler-config.js +1 -1
  285. package/dist/src/internal/nitro/host/start-development-server.js +2 -2
  286. package/dist/src/internal/nitro/host/start-production-server.js +2 -2
  287. package/dist/src/internal/nitro/host/vercel-build-output-config.js +1 -1
  288. package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -1
  289. package/dist/src/internal/nitro/routes/channel-route-context.d.ts +14 -0
  290. package/dist/src/internal/nitro/routes/channel-route-context.js +1 -1
  291. package/dist/src/internal/nitro/routes/runtime-stack.d.ts +2 -0
  292. package/dist/src/internal/nitro/routes/runtime-stack.js +1 -1
  293. package/dist/src/internal/process/pnpm.js +1 -1
  294. package/dist/src/internal/vercel-agent-summary.d.ts +1 -1
  295. package/dist/src/internal/workflow/development-world-client.js +1 -1
  296. package/dist/src/internal/workflow/development-world-server.js +1 -1
  297. package/dist/src/internal/workflow-bundle/builder-support.d.ts +12 -8
  298. package/dist/src/internal/workflow-bundle/builder-support.js +8 -7
  299. package/dist/src/internal/workflow-bundle/builder.d.ts +1 -1
  300. package/dist/src/internal/workflow-bundle/builder.js +2 -3
  301. package/dist/src/internal/workflow-bundle/workflow-builders.js +1 -1
  302. package/dist/src/protocol/message.d.ts +28 -0
  303. package/dist/src/protocol/message.js +2 -2
  304. package/dist/src/protocol/routes.d.ts +14 -0
  305. package/dist/src/protocol/routes.js +1 -1
  306. package/dist/src/public/channels/auth.d.ts +36 -0
  307. package/dist/src/public/channels/auth.js +1 -1
  308. package/dist/src/public/channels/discord/discordChannel.d.ts +2 -0
  309. package/dist/src/public/channels/discord/discordChannel.js +1 -1
  310. package/dist/src/public/channels/eve.d.ts +2 -0
  311. package/dist/src/public/channels/eve.js +1 -1
  312. package/dist/src/public/channels/github/dispatch.js +1 -1
  313. package/dist/src/public/channels/github/githubChannel.d.ts +2 -0
  314. package/dist/src/public/channels/linear/linearChannel.d.ts +2 -0
  315. package/dist/src/public/channels/linear/linearChannel.js +1 -1
  316. package/dist/src/public/channels/mcp.d.ts +19 -0
  317. package/dist/src/public/channels/mcp.js +1 -0
  318. package/dist/src/public/channels/photon/photonIMessageChannel.d.ts +2 -0
  319. package/dist/src/public/channels/photon/photonIMessageChannel.js +1 -1
  320. package/dist/src/public/channels/slack/slackChannel.d.ts +3 -1
  321. package/dist/src/public/channels/slack/slackChannel.js +1 -1
  322. package/dist/src/public/channels/teams/teamsChannel.d.ts +2 -0
  323. package/dist/src/public/channels/teams/teamsChannel.js +1 -1
  324. package/dist/src/public/channels/telegram/telegramChannel.d.ts +2 -0
  325. package/dist/src/public/channels/telegram/telegramChannel.js +1 -1
  326. package/dist/src/public/channels/twilio/twilioChannel.d.ts +2 -0
  327. package/dist/src/public/channels/twilio/twilioChannel.js +1 -1
  328. package/dist/src/public/definitions/channel.d.ts +2 -2
  329. package/dist/src/public/definitions/channel.js +1 -1
  330. package/dist/src/public/instrumentation/index.d.ts +9 -3
  331. package/dist/src/public/next/server.js +1 -1
  332. package/dist/src/public/nuxt/dev-server.js +1 -1
  333. package/dist/src/public/sveltekit/dev-server.js +1 -1
  334. package/dist/src/react/use-eve-agent.d.ts +4 -4
  335. package/dist/src/react/use-eve-agent.js +1 -1
  336. package/dist/src/runtime/actions/types.d.ts +9 -0
  337. package/dist/src/runtime/actions/types.js +1 -1
  338. package/dist/src/runtime/agent/bootstrap.js +1 -1
  339. package/dist/src/runtime/connections/authorization-complete-page.js +70 -28
  340. package/dist/src/runtime/framework-channels/index.js +1 -1
  341. package/dist/src/runtime/framework-tools/index.js +1 -1
  342. package/dist/src/runtime/framework-tools/tasks.d.ts +95 -0
  343. package/dist/src/runtime/framework-tools/tasks.js +1 -0
  344. package/dist/src/runtime/prompt/compose.d.ts +1 -0
  345. package/dist/src/runtime/prompt/compose.js +1 -1
  346. package/dist/src/runtime/resolve-agent-graph.js +1 -1
  347. package/dist/src/runtime/resolve-agent.js +1 -1
  348. package/dist/src/runtime/session-callback-route.js +1 -1
  349. package/dist/src/runtime/task-input-response-route.d.ts +5 -0
  350. package/dist/src/runtime/task-input-response-route.js +1 -0
  351. package/dist/src/services/inspect-application.js +1 -1
  352. package/dist/src/setup/primitives/pm/pnpm.js +2 -2
  353. package/dist/src/setup/primitives/run-vercel.js +1 -1
  354. package/dist/src/setup/scaffold/create/add-to-project.js +1 -1
  355. package/dist/src/setup/scaffold/create/extension.js +1 -1
  356. package/dist/src/setup/scaffold/create/project.js +1 -1
  357. package/dist/src/setup/scaffold/create/web-template.d.ts +1 -1
  358. package/dist/src/setup/scaffold/create/web-template.js +8 -86
  359. package/dist/src/setup/scaffold/version-tokens.js +1 -1
  360. package/dist/src/setup/scaffold/workspace-root.js +1 -1
  361. package/dist/src/shared/agent-definition.d.ts +7 -0
  362. package/dist/src/svelte/index.js +1 -1
  363. package/dist/src/svelte/use-eve-agent.d.ts +3 -3
  364. package/dist/src/svelte/use-eve-agent.js +1 -1
  365. package/dist/src/tasks/json.d.ts +88 -0
  366. package/dist/src/tasks/json.js +1 -0
  367. package/dist/src/tasks/session-index.d.ts +48 -0
  368. package/dist/src/tasks/session-index.js +1 -0
  369. package/dist/src/tasks/task-id.d.ts +34 -0
  370. package/dist/src/tasks/task-id.js +1 -0
  371. package/dist/src/tasks/transitions.d.ts +23 -0
  372. package/dist/src/tasks/transitions.js +1 -0
  373. package/dist/src/tasks/types.d.ts +295 -0
  374. package/dist/src/tasks/types.js +1 -0
  375. package/dist/src/tasks/wire.d.ts +26 -0
  376. package/dist/src/tasks/wire.js +1 -0
  377. package/dist/src/tracing/install-instrumentation-runtime.d.ts +2 -1
  378. package/dist/src/tracing/install-instrumentation-runtime.js +1 -1
  379. package/dist/src/tracing/otel-declaration.d.ts +32 -3
  380. package/dist/src/tracing/otel-declaration.js +1 -1
  381. package/dist/src/tracing/otel-registration.js +1 -1
  382. package/dist/src/vue/index.js +1 -1
  383. package/dist/src/vue/use-eve-agent.d.ts +3 -3
  384. package/dist/src/vue/use-eve-agent.js +1 -1
  385. package/docs/channels/custom.mdx +1 -1
  386. package/docs/channels/discord.mdx +1 -1
  387. package/docs/channels/eve.mdx +15 -2
  388. package/docs/channels/github.mdx +1 -1
  389. package/docs/channels/linear.mdx +1 -1
  390. package/docs/channels/overview.mdx +1 -1
  391. package/docs/channels/photon.mdx +1 -1
  392. package/docs/channels/slack.mdx +1 -1
  393. package/docs/channels/teams.mdx +1 -1
  394. package/docs/channels/telegram.mdx +1 -1
  395. package/docs/channels/twilio.mdx +1 -1
  396. package/docs/extensions.md +10 -6
  397. package/docs/guides/client/streaming.mdx +7 -6
  398. package/docs/guides/frontend/overview.mdx +10 -8
  399. package/docs/guides/frontend/use-eve-agent-svelte.mdx +10 -10
  400. package/docs/guides/frontend/use-eve-agent-vue.mdx +10 -10
  401. package/docs/install-integrations.mdx +4 -0
  402. package/docs/reference/cli.md +1 -1
  403. package/docs/schedules.mdx +2 -2
  404. package/docs/tools/human-in-the-loop.md +3 -1
  405. package/package.json +7 -1
  406. package/dist/src/compiled/_chunks/workflow/chunk-5MU5Z6L3-CaJgXkVg.js +0 -1
  407. package/dist/src/compiled/_chunks/workflow/sleep-CzdoBiqy.js +0 -1
  408. package/dist/src/compiled/_chunks/workflow/src-Cj3P1ChQ.js +0 -1
  409. package/dist/src/compiled/_chunks/workflow/token-util-DNwIAn_u.js +0 -27
  410. package/dist/src/execution/route-proxied-deliver-step.js +0 -1
@@ -13,6 +13,7 @@ const EVE_SESSION_COMPACT_ROUTE_PATTERN = `${EVE_SESSION_ROUTE_PATH}/:sessionId/
13
13
  const EVE_SESSION_CLEAR_ROUTE_PATTERN = `${EVE_SESSION_ROUTE_PATH}/:sessionId/clear`;
14
14
  const EVE_SESSION_RESET_ROUTE_PATTERN = `${EVE_SESSION_ROUTE_PATH}/:sessionId/reset`;
15
15
  const EVE_SESSION_STREAM_ROUTE_PATTERN = `${EVE_SESSION_ROUTE_PATH}/:sessionId/stream`;
16
+ const EVE_SUBAGENT_STREAM_ROUTE_PATTERN = `${EVE_SESSION_ROUTE_PATH}/:parentSessionId/subagents/:callId/:childSessionId/stream`;
16
17
  const EVE_DEV_DISPATCH_SCHEDULE_ROUTE_PATTERN = `${EVE_ROUTE_PREFIX}/dev/schedules/:scheduleId`;
17
18
  const EVE_DEV_RUNTIME_ARTIFACTS_ROUTE_PATH = `${EVE_ROUTE_PREFIX}/dev/runtime-artifacts`;
18
19
  const EVE_DEV_RUNTIME_ARTIFACTS_REBUILD_ROUTE_PATH = `${EVE_DEV_RUNTIME_ARTIFACTS_ROUTE_PATH}/rebuild`;
@@ -21,6 +22,7 @@ const EVE_DEV_RUNTIME_ARTIFACTS_RESUME_ROUTE_PATH = `${EVE_DEV_RUNTIME_ARTIFACTS
21
22
  const EVE_CONNECTION_CALLBACK_ROUTE_PATTERN = `${EVE_ROUTE_PREFIX}/connections/:name/callback/:attemptId/:token`;
22
23
  const EVE_LEGACY_CONNECTION_CALLBACK_ROUTE_PATTERN = `${EVE_ROUTE_PREFIX}/connections/:name/callback/:token`;
23
24
  const EVE_CALLBACK_ROUTE_PATTERN = `${EVE_ROUTE_PREFIX}/callback/:token`;
25
+ const EVE_TASK_INPUT_ROUTE_PATTERN = `${EVE_ROUTE_PREFIX}/task-input/:token`;
24
26
  function createEveSessionRoutePath(sessionId) {
25
27
  return `${EVE_SESSION_ROUTE_PATH}/${encodeURIComponent(sessionId)}`;
26
28
  }
@@ -450,12 +452,27 @@ function isFinalMessageCompleted(event) {
450
452
  //#region src/client/message-response.ts
451
453
  var MessageResponse = class {
452
454
  sessionId;
455
+ #cancelTurn;
456
+ #cancellation;
453
457
  #consumed = false;
454
458
  #createStream;
459
+ #settled = false;
460
+ #turnId = Promise.withResolvers();
455
461
  constructor(input) {
462
+ this.#cancelTurn = input.cancelTurn;
456
463
  this.sessionId = input.sessionId;
457
464
  this.#createStream = input.createStream;
458
465
  }
466
+ cancel() {
467
+ if (this.#settled) return Promise.resolve({ status: "no_active_turn" });
468
+ if (this.#cancellation !== void 0) return this.#cancellation;
469
+ const cancellation = this.#turnId.promise.then((turnId) => turnId === void 0 ? { status: "no_active_turn" } : this.#cancelTurn(turnId));
470
+ this.#cancellation = cancellation;
471
+ cancellation.catch(() => {
472
+ if (!this.#settled && this.#cancellation === cancellation) this.#cancellation = void 0;
473
+ });
474
+ return cancellation;
475
+ }
459
476
  async result() {
460
477
  const events = [];
461
478
  for await (const event of this) events.push(event);
@@ -472,7 +489,21 @@ var MessageResponse = class {
472
489
  [Symbol.asyncIterator]() {
473
490
  if (this.#consumed) throw new Error("MessageResponse has already been consumed.");
474
491
  this.#consumed = true;
475
- return this.#createStream();
492
+ return this.#observeStream();
493
+ }
494
+ async *#observeStream() {
495
+ try {
496
+ for await (const event of this.#createStream()) {
497
+ if (event.type === "turn.started") this.#turnId.resolve(event.data.turnId);
498
+ else if (isCurrentTurnBoundaryEvent(event)) {
499
+ this.#settled = true;
500
+ this.#turnId.resolve(void 0);
501
+ }
502
+ yield event;
503
+ }
504
+ } finally {
505
+ this.#turnId.resolve(void 0);
506
+ }
476
507
  }
477
508
  };
478
509
 
@@ -651,7 +682,7 @@ async function* followStreamIterable(input) {
651
682
  if (!isStreamDisconnectError(error)) throw error;
652
683
  }
653
684
  if (input.signal?.aborted || input.startIndex < 0 || idleRetryPolicy.maxAttempts === 0) return;
654
- if (!deliveredEvent && !initialConnection && (idleReconnects += 1) >= idleRetryPolicy.maxAttempts) return;
685
+ if (input.keepAlive !== true && !deliveredEvent && !initialConnection && (idleReconnects += 1) >= idleRetryPolicy.maxAttempts) return;
655
686
  initialConnection = false;
656
687
  await sleep(reconnectDelayMs, input.signal);
657
688
  if (input.signal?.aborted) return;
@@ -1025,6 +1056,7 @@ var ClientSession = class ClientSession {
1025
1056
  #messageResponse(response, input, initialStreamIndex) {
1026
1057
  response.body?.cancel().catch(() => {});
1027
1058
  return new MessageResponse({
1059
+ cancelTurn: async (turnId) => await this.cancel({ turnId }),
1028
1060
  createStream: () => this.#createEventStream(initialStreamIndex, input),
1029
1061
  sessionId: this.#state.sessionId
1030
1062
  });
@@ -1034,6 +1066,7 @@ var ClientSession = class ClientSession {
1034
1066
  try {
1035
1067
  for await (const event of this.#readStream({
1036
1068
  headers: input.headers,
1069
+ keepAlive: shouldKeepActiveTurnAlive(input.streamReconnectPolicy),
1037
1070
  signal: input.signal,
1038
1071
  startIndex: initialStreamIndex,
1039
1072
  streamReconnectPolicy: input.streamReconnectPolicy
@@ -1073,6 +1106,7 @@ var ClientSession = class ClientSession {
1073
1106
  return followStreamIterable({
1074
1107
  follow: input.follow,
1075
1108
  host: this.#context.host,
1109
+ keepAlive: input.keepAlive,
1076
1110
  resolveHeaders: () => this.#context.resolveHeaders(input.headers),
1077
1111
  redirect: this.#context.redirect,
1078
1112
  sessionId: this.#state.sessionId,
@@ -1082,6 +1116,10 @@ var ClientSession = class ClientSession {
1082
1116
  });
1083
1117
  }
1084
1118
  };
1119
+ function shouldKeepActiveTurnAlive(policy) {
1120
+ if (policy && "reconnect" in policy) return false;
1121
+ return policy?.streamIdleReconnectPolicy?.maxAttempts === void 0;
1122
+ }
1085
1123
  async function postTurn(context, path, input, requireMessage) {
1086
1124
  const body = createMessageBody(input, requireMessage);
1087
1125
  if (body === null) throw new Error(requireMessage ? "Creating a session requires a non-empty message." : "A session turn requires a non-empty message or inputResponses.");
@@ -1266,6 +1304,7 @@ function createEventDeduper() {
1266
1304
 
1267
1305
  //#endregion
1268
1306
  //#region src/client/eve-agent-store.ts
1307
+ const detachStore = Symbol("detachEveAgentStore");
1269
1308
  var EveAgentStore = class {
1270
1309
  #client;
1271
1310
  #externalSession;
@@ -1273,12 +1312,11 @@ var EveAgentStore = class {
1273
1312
  #reducer;
1274
1313
  #subscribers = /* @__PURE__ */ new Set();
1275
1314
  #seenEvents = createEventDeduper();
1276
- #abortController;
1315
+ #activeTurn;
1277
1316
  #callbacks = {};
1278
1317
  #data;
1279
1318
  #error;
1280
1319
  #events;
1281
- #operationId = 0;
1282
1320
  #pendingMessageSubmission;
1283
1321
  #projectionEvents;
1284
1322
  #session;
@@ -1315,27 +1353,33 @@ var EveAgentStore = class {
1315
1353
  }
1316
1354
  async send(input) {
1317
1355
  if (this.#status === "streaming" || this.#status === "submitted") throw new Error("eve session is already processing a turn.");
1318
- const operationId = this.#startOperation();
1319
- const abortController = new AbortController();
1320
- this.#abortController = abortController;
1356
+ const response = Promise.withResolvers();
1357
+ const turn = {
1358
+ abortController: new AbortController(),
1359
+ response: response.promise,
1360
+ resolveResponse: response.resolve
1361
+ };
1362
+ this.#activeTurn = turn;
1321
1363
  this.#error = void 0;
1322
1364
  this.#status = "submitted";
1323
1365
  this.#publish();
1324
1366
  try {
1325
1367
  const preparedInput = await this.#callbacks.prepareSend?.(input) ?? input;
1326
1368
  assertExclusiveTurnInput(preparedInput);
1327
- if (!this.#isCurrentOperation(operationId)) return;
1369
+ if (!this.#isActiveTurn(turn)) return;
1328
1370
  this.#projectOptimisticMessage(preparedInput);
1329
1371
  this.#projectInputResponses(preparedInput);
1330
1372
  this.#publish();
1331
1373
  const turnInput = {
1332
1374
  ...preparedInput,
1333
- signal: createAbortSignal(preparedInput.signal, abortController.signal)
1375
+ signal: createAbortSignal(preparedInput.signal, turn.abortController.signal)
1334
1376
  };
1335
1377
  const response = await this.#dispatchTurn(turnInput);
1378
+ if (!this.#isActiveTurn(turn)) return;
1379
+ turn.resolveResponse(response);
1336
1380
  let sawEvent = false;
1337
1381
  for await (const event of response) {
1338
- if (!this.#isCurrentOperation(operationId)) return;
1382
+ if (!this.#isActiveTurn(turn)) return;
1339
1383
  if (!sawEvent) {
1340
1384
  sawEvent = true;
1341
1385
  this.#status = "streaming";
@@ -1347,10 +1391,10 @@ var EveAgentStore = class {
1347
1391
  this.#applyTerminalStreamFailure(event);
1348
1392
  this.#publish();
1349
1393
  }
1350
- if (!this.#isCurrentOperation(operationId)) return;
1394
+ if (!this.#isActiveTurn(turn)) return;
1351
1395
  this.#status = this.#error === void 0 ? "ready" : "error";
1352
1396
  } catch (error) {
1353
- if (!this.#isCurrentOperation(operationId)) return;
1397
+ if (!this.#isActiveTurn(turn)) return;
1354
1398
  if (isAbortError(error)) {
1355
1399
  this.#status = "ready";
1356
1400
  this.#failPendingMessageSubmission(toError(error));
@@ -1361,21 +1405,28 @@ var EveAgentStore = class {
1361
1405
  this.#callbacks.onError?.(this.#error);
1362
1406
  }
1363
1407
  } finally {
1364
- if (this.#isCurrentOperation(operationId)) {
1365
- this.#abortController = void 0;
1408
+ if (this.#isActiveTurn(turn)) {
1409
+ turn.resolveResponse(void 0);
1410
+ this.#activeTurn = void 0;
1366
1411
  this.#callbacks.onSessionChange?.(this.#session?.state);
1367
1412
  this.#publish();
1368
1413
  this.#callbacks.onFinish?.(this.#snapshot);
1369
1414
  }
1370
1415
  }
1371
1416
  }
1372
- stop() {
1373
- this.#abortController?.abort();
1417
+ cancel() {
1418
+ const turn = this.#activeTurn;
1419
+ if (turn === void 0) return Promise.resolve({ status: "no_active_turn" });
1420
+ return turn.response.then((response) => response === void 0 ? { status: "no_active_turn" } : response.cancel());
1421
+ }
1422
+ [detachStore]() {
1423
+ this.#activeTurn?.abortController.abort();
1374
1424
  }
1375
1425
  reset() {
1376
- this.#invalidateOperation();
1377
- this.stop();
1378
- this.#abortController = void 0;
1426
+ const turn = this.#activeTurn;
1427
+ this.#activeTurn = void 0;
1428
+ turn?.resolveResponse(void 0);
1429
+ turn?.abortController.abort();
1379
1430
  if (!this.#externalSession) this.#session = void 0;
1380
1431
  this.#events = [];
1381
1432
  this.#seenEvents = createEventDeduper();
@@ -1408,15 +1459,8 @@ var EveAgentStore = class {
1408
1459
  const { inputResponses, ...options } = input;
1409
1460
  return await this.#session.respond(inputResponses, options);
1410
1461
  }
1411
- #startOperation() {
1412
- this.#operationId += 1;
1413
- return this.#operationId;
1414
- }
1415
- #invalidateOperation() {
1416
- this.#operationId += 1;
1417
- }
1418
- #isCurrentOperation(operationId) {
1419
- return this.#operationId === operationId;
1462
+ #isActiveTurn(turn) {
1463
+ return this.#activeTurn === turn;
1420
1464
  }
1421
1465
  #projectOptimisticMessage(input) {
1422
1466
  if (!this.#optimistic || input.message === void 0) return;
@@ -1514,6 +1558,9 @@ var EveAgentStore = class {
1514
1558
  for (const subscriber of this.#subscribers) subscriber();
1515
1559
  }
1516
1560
  };
1561
+ function detachEveAgentStore(store) {
1562
+ store[detachStore]();
1563
+ }
1517
1564
  function assertExclusiveTurnInput(input) {
1518
1565
  if (input.message !== void 0 === (input.inputResponses !== void 0)) throw new Error("A turn requires exactly one of message or inputResponses.");
1519
1566
  }
@@ -2135,10 +2182,11 @@ function useEveAgent(options = {}) {
2135
2182
  });
2136
2183
  onScopeDispose(() => {
2137
2184
  unsubscribe();
2138
- store.stop();
2185
+ detachEveAgentStore(store);
2139
2186
  });
2140
2187
  }
2141
2188
  return {
2189
+ cancel: () => store.cancel(),
2142
2190
  data: computed(() => snapshot.value.data),
2143
2191
  error: computed(() => snapshot.value.error),
2144
2192
  events: computed(() => snapshot.value.events),
@@ -2152,8 +2200,7 @@ function useEveAgent(options = {}) {
2152
2200
  message
2153
2201
  }),
2154
2202
  session: computed(() => snapshot.value.session),
2155
- status: computed(() => snapshot.value.status),
2156
- stop: () => store.stop()
2203
+ status: computed(() => snapshot.value.status)
2157
2204
  };
2158
2205
  }
2159
2206
 
@@ -1,4 +1,5 @@
1
1
  import { Command } from "#compiled/commander/index.js";
2
+ import { type CliApplicationContext } from "#cli/application-command.js";
2
3
  import type { ClientOptions } from "#client/types.js";
3
4
  import type { DevelopmentServer, DevelopmentServerOptions } from "#internal/nitro/host/types.js";
4
5
  export type RunAcpServer = (input: {
@@ -11,7 +12,7 @@ export type RunAcpServer = (input: {
11
12
  }) => Promise<void>;
12
13
  export type ResolveVerifiedRemoteDevelopmentClient = typeof import("#setup/verified-remote-client.js").resolveVerifiedRemoteDevelopmentClient;
13
14
  export interface RegisterAcpCommandOptions {
14
- readonly appRoot: string;
15
+ readonly applicationContext: CliApplicationContext;
15
16
  readonly eveVersion: string;
16
17
  readonly program: Command;
17
18
  readonly resolveVerifiedRemoteDevelopmentClient?: ResolveVerifiedRemoteDevelopmentClient;
@@ -1,4 +1,4 @@
1
- import"#compiled/commander/index.js";import{loadDevelopmentEnvironmentFiles}from"#cli/dev/environment.js";import{parseDevelopmentHeaderOption,resolveDevelopmentUrlTarget}from"#cli/dev/url-target.js";import{parseDevelopmentServerUrl}from"#cli/dev/url.js";import{FORCED_EXIT_BACKSTOP_MS,installShutdownSignal}from"#cli/shutdown.js";function registerAcpCommand(o){o.program.command(`acp`).description(`Serve an eve agent through stable ACP v1 over stdio.`).argument(`[url]`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`-u, --url <url>`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`--scope <team>`,`Vercel team that owns the URL target`).option(`-H, --header <header>`,`Request header for a URL target, in "Name: value" form (repeatable)`,parseDevelopmentHeaderOption).addHelpText(`after`,`
1
+ import"#compiled/commander/index.js";import{applicationCommand}from"#cli/application-command.js";import{loadDevelopmentEnvironmentFiles}from"#cli/dev/environment.js";import{parseDevelopmentHeaderOption,resolveDevelopmentUrlTarget}from"#cli/dev/url-target.js";import{parseDevelopmentServerUrl}from"#cli/dev/url.js";import{FORCED_EXIT_BACKSTOP_MS,installShutdownSignal}from"#cli/shutdown.js";function registerAcpCommand(s){applicationCommand(s.program.command(`acp`),s.applicationContext,e=>resolveDevelopmentUrlTarget(e.opts(),e.processedArgs[0])===void 0).description(`Serve an eve agent through stable ACP v1 over stdio.`).argument(`[url]`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`-u, --url <url>`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`--scope <team>`,`Vercel team that owns the URL target`).option(`-H, --header <header>`,`Request header for a URL target, in "Name: value" form (repeatable)`,parseDevelopmentHeaderOption).addHelpText(`after`,`
2
2
  Without a URL, eve supervises a local development server. You can also pass a bare URL, for example: eve acp https://example.com
3
3
  ACP does not grant the agent access to the client's workspace or terminal.
4
- `).action(async(t,r)=>{let s=resolveDevelopmentUrlTarget(r,t);loadDevelopmentEnvironmentFiles(o.appRoot);let c=installShutdownSignal({exitAfterMs:FORCED_EXIT_BACKSTOP_MS});if(s!==void 0){try{await runAcp(o,{headers:s.headers,serverUrl:s.serverUrl,signal:c.signal,vercelScope:r.scope??process.env.EVE_VERCEL_SCOPE})}finally{c.dispose()}return}let l,u,closeServer=()=>l===void 0?Promise.resolve():(u??=l.close(),u.catch(()=>void 0),u);c.signal.addEventListener(`abort`,()=>void closeServer(),{once:!0});try{l=(o.startHost??await loadStartHost())(o.appRoot,{existing:`reject`,host:`127.0.0.1`,output:`stderr`,port:0});let e=await Promise.race([l.start(),c.stopped.then(()=>void 0)]);if(e===void 0)return;await runAcp(o,{serverUrl:e.url,signal:c.signal,workspaceRoot:e.appRoot}),c.requestStop()}finally{await closeServer(),c.dispose()}})}async function runAcp(e,t){let n=e.runAcpServer??(await import(`#acp/server.js`)).runAcpServer,{vercelScope:r,...i}=t,a=typeof i.headers==`function`?void 0:i.headers,o=Object.keys(a??{}).some(e=>e.toLowerCase()===`authorization`);if(i.workspaceRoot!==void 0||o){await n({eveVersion:e.eveVersion,...i});return}let{options:s}=await(e.resolveVerifiedRemoteDevelopmentClient??(await import(`#setup/verified-remote-client.js`)).resolveVerifiedRemoteDevelopmentClient)({headers:a,serverUrl:i.serverUrl,signal:i.signal,vercelScope:r,workspaceRoot:e.appRoot});await n({auth:s.auth,eveVersion:e.eveVersion,headers:s.headers,serverUrl:i.serverUrl,signal:i.signal})}async function loadStartHost(){return(await import(`#cli/dev/local-server-process.js`)).createDevelopmentServer}export{registerAcpCommand};
4
+ `).action(async(e,n)=>{let i=resolveDevelopmentUrlTarget(n,e);loadDevelopmentEnvironmentFiles(s.applicationContext.root);let c=installShutdownSignal({exitAfterMs:FORCED_EXIT_BACKSTOP_MS});if(i!==void 0){try{await runAcp(s,{headers:i.headers,serverUrl:i.serverUrl,signal:c.signal,vercelScope:n.scope??process.env.EVE_VERCEL_SCOPE})}finally{c.dispose()}return}let l,u,closeServer=()=>l===void 0?Promise.resolve():(u??=l.close(),u.catch(()=>void 0),u);c.signal.addEventListener(`abort`,()=>void closeServer(),{once:!0});try{l=(s.startHost??await loadStartHost())(s.applicationContext.root,{existing:`reject`,host:`127.0.0.1`,output:`stderr`,port:0});let e=await Promise.race([l.start(),c.stopped.then(()=>void 0)]);if(e===void 0)return;await runAcp(s,{serverUrl:e.url,signal:c.signal,workspaceRoot:e.appRoot}),c.requestStop()}finally{await closeServer(),c.dispose()}})}async function runAcp(e,t){let n=e.runAcpServer??(await import(`#acp/server.js`)).runAcpServer,{vercelScope:r,...i}=t,a=typeof i.headers==`function`?void 0:i.headers,o=Object.keys(a??{}).some(e=>e.toLowerCase()===`authorization`);if(i.workspaceRoot!==void 0||o){await n({eveVersion:e.eveVersion,...i});return}let{options:s}=await(e.resolveVerifiedRemoteDevelopmentClient??(await import(`#setup/verified-remote-client.js`)).resolveVerifiedRemoteDevelopmentClient)({headers:a,serverUrl:i.serverUrl,signal:i.signal,vercelScope:r,workspaceRoot:e.applicationContext.root});await n({auth:s.auth,eveVersion:e.eveVersion,headers:s.headers,serverUrl:i.serverUrl,signal:i.signal})}async function loadStartHost(){return(await import(`#cli/dev/local-server-process.js`)).createDevelopmentServer}export{registerAcpCommand};
@@ -0,0 +1,8 @@
1
+ import type { Command } from "#compiled/commander/index.js";
2
+ export interface CliApplicationContext {
3
+ root: string;
4
+ resolve(): Promise<void>;
5
+ }
6
+ export type CliApplicationRootRequirement = (command: Command) => boolean;
7
+ /** Adds application-root resolution to a project-scoped CLI command. */
8
+ export declare function applicationCommand(command: Command, applicationContext: CliApplicationContext, requirement?: CliApplicationRootRequirement): Command;
@@ -0,0 +1 @@
1
+ function applicationCommand(e,t,n=()=>!0){return e.hook(`preAction`,async(e,r)=>{n(r)&&await t.resolve()})}export{applicationCommand};
@@ -0,0 +1,8 @@
1
+ import { resolveDiscoveryProject } from "#discover/project.js";
2
+ export interface ResolveCliApplicationRootDependencies {
3
+ readonly resolveDiscoveryProject: typeof resolveDiscoveryProject;
4
+ }
5
+ /** Finds the nearest enclosing eve application. */
6
+ export declare function findCliApplicationRoot(cwd?: string, dependencies?: ResolveCliApplicationRootDependencies): Promise<string | undefined>;
7
+ /** Uses the nearest enclosing eve application, or preserves cwd when none exists. */
8
+ export declare function resolveCliApplicationRoot(cwd?: string, dependencies?: ResolveCliApplicationRootDependencies): Promise<string>;
@@ -0,0 +1 @@
1
+ import{resolve}from"node:path";import{DiscoveryProjectResolutionError,resolveDiscoveryProject}from"#discover/project.js";const defaultDependencies={resolveDiscoveryProject};async function findCliApplicationRoot(e=process.cwd(),n=defaultDependencies){try{return(await n.resolveDiscoveryProject(e)).appRoot}catch(e){if(e instanceof DiscoveryProjectResolutionError)return;throw e}}async function resolveCliApplicationRoot(t=process.cwd(),n=defaultDependencies){return await findCliApplicationRoot(t,n)??resolve(t)}export{findCliApplicationRoot,resolveCliApplicationRoot};
@@ -1,4 +1,5 @@
1
1
  import type { Command } from "#compiled/commander/index.js";
2
+ import { type CliApplicationContext } from "#cli/application-command.js";
2
3
  import type { ApplicationBuildOptions } from "#internal/nitro/host/types.js";
3
4
  export type BuildHost = (appRoot: string, options: ApplicationBuildOptions) => Promise<string>;
4
5
  interface BuildCommandLogger {
@@ -6,7 +7,7 @@ interface BuildCommandLogger {
6
7
  }
7
8
  /** Registers the production application build command. */
8
9
  export declare function registerBuildCommand(input: {
9
- readonly appRoot: string;
10
+ readonly applicationContext: CliApplicationContext;
10
11
  readonly buildHost?: BuildHost;
11
12
  readonly logger: BuildCommandLogger;
12
13
  readonly program: Command;
@@ -1 +1 @@
1
- import{resolve}from"node:path";import{resolveInternalVercelServiceOutput}from"#cli/vercel-service-output.js";import{createCliTheme,renderCliTaggedLine}from"#cli/ui/output.js";import{EVE_PUBLIC_ROUTE_PREFIX_ENV,normalizePublicRoutePrefix}from"#shared/public-route-prefix.js";function registerBuildCommand(t){let n=createCliTheme();t.program.command(`build`).description(`Build the current eve application.`).option(`--profile <path>`,`Write best-effort timing and output-size profile JSON to a file`).option(`--skip-sandbox-prewarm`,`Skip sandbox template prewarm for a Vercel build; output may not be deployable`).action(async e=>{let{loadDevelopmentEnvironmentFiles:r}=await import(`#cli/dev/environment.js`);r(t.appRoot);let i=t.buildHost??(await import(`#internal/nitro/host.js`)).buildApplication,a=e.profile===void 0?void 0:resolve(t.appRoot,e.profile),o={publicRoutePrefix:normalizePublicRoutePrefix(process.env[EVE_PUBLIC_ROUTE_PREFIX_ENV]),skipVercelSandboxPrewarm:e.skipSandboxPrewarm===!0,vercelServiceOutput:resolveInternalVercelServiceOutput(t.appRoot)};a!==void 0&&(o.profileOutputPath=a);let s=await i(t.appRoot,o);t.logger.log(renderCliTaggedLine(n,{message:`built output at ${s}`,tag:`build`,tone:`success`}))})}export{registerBuildCommand};
1
+ import{applicationCommand}from"#cli/application-command.js";import{resolve}from"node:path";import{resolveInternalVercelServiceOutput}from"#cli/vercel-service-output.js";import{createCliTheme,renderCliTaggedLine}from"#cli/ui/output.js";import{EVE_PUBLIC_ROUTE_PREFIX_ENV,normalizePublicRoutePrefix}from"#shared/public-route-prefix.js";function registerBuildCommand(n){let r=createCliTheme();applicationCommand(n.program.command(`build`),n.applicationContext).description(`Build the current eve application.`).option(`--profile <path>`,`Write best-effort timing and output-size profile JSON to a file`).option(`--skip-sandbox-prewarm`,`Skip sandbox template prewarm for a Vercel build; output may not be deployable`).action(async e=>{let{loadDevelopmentEnvironmentFiles:t}=await import(`#cli/dev/environment.js`);t(n.applicationContext.root);let i=n.buildHost??(await import(`#internal/nitro/host.js`)).buildApplication,a=e.profile===void 0?void 0:resolve(n.applicationContext.root,e.profile),o={publicRoutePrefix:normalizePublicRoutePrefix(process.env[EVE_PUBLIC_ROUTE_PREFIX_ENV]),skipVercelSandboxPrewarm:e.skipSandboxPrewarm===!0,vercelServiceOutput:resolveInternalVercelServiceOutput(n.applicationContext.root)};a!==void 0&&(o.profileOutputPath=a);let s=await i(n.applicationContext.root,o);n.logger.log(renderCliTaggedLine(r,{message:`built output at ${s}`,tag:`build`,tone:`success`}))})}export{registerBuildCommand};
@@ -1 +1 @@
1
- import{rm}from"node:fs/promises";import{join}from"node:path";import{execFile}from"node:child_process";import{promisify}from"node:util";const GIT_TIMEOUT_MS=5e3,runFile=promisify(execFile);async function commandSucceeds(e,t,n){try{let r={timeout:GIT_TIMEOUT_MS,windowsHide:!0};return n!==void 0&&(r.cwd=n),await runFile(e,[...t],r),!0}catch{return!1}}function isGitAvailable(){return commandSucceeds(`git`,[`--version`])}async function isInsideExistingRepository(e){return await commandSucceeds(`git`,[`rev-parse`,`--is-inside-work-tree`],e)||await commandSucceeds(`hg`,[`--cwd`,`.`,`root`],e)}function hasConfiguredDefaultBranch(e){return commandSucceeds(`git`,[`config`,`init.defaultBranch`],e)}async function runGit(e,t){await runFile(`git`,[...t],{cwd:e,timeout:GIT_TIMEOUT_MS,windowsHide:!0})}async function tryInitializeGit(n){if(!await isGitAvailable()||await isInsideExistingRepository(n))return{kind:`skipped`};let r=!1;try{return await runGit(n,[`init`]),r=!0,await hasConfiguredDefaultBranch(n)||await runGit(n,[`checkout`,`-b`,`main`]),await runGit(n,[`add`,`-A`]),await runGit(n,[`commit`,`-m`,`Initial commit from eve`]),{kind:`initialized`}}catch(i){return r&&await rm(join(n,`.git`),{recursive:!0,force:!0}).catch(()=>{}),{kind:`failed`,reason:i instanceof Error?i.message:String(i)}}}export{tryInitializeGit};
1
+ import{rm,stat}from"node:fs/promises";import{join}from"node:path";import{execFile}from"node:child_process";import{promisify}from"node:util";const GIT_TIMEOUT_MS=5e3,runFile=promisify(execFile);async function commandSucceeds(e,t,n){try{let r={timeout:GIT_TIMEOUT_MS,windowsHide:!0};return n!==void 0&&(r.cwd=n),await runFile(e,[...t],r),!0}catch{return!1}}function isGitAvailable(){return commandSucceeds(`git`,[`--version`])}async function isInsideExistingRepository(e){return await commandSucceeds(`git`,[`rev-parse`,`--is-inside-work-tree`],e)||await commandSucceeds(`hg`,[`--cwd`,`.`,`root`],e)}function hasConfiguredDefaultBranch(e){return commandSucceeds(`git`,[`config`,`init.defaultBranch`],e)}async function runGit(e,t){await runFile(`git`,[...t],{cwd:e,timeout:GIT_TIMEOUT_MS,windowsHide:!0})}async function tryInitializeGit(r){let i=join(r,`.git`);if(await stat(i).then(()=>!0,e=>{if(e.code===`ENOENT`)return!1;throw e})||!await isGitAvailable()||await isInsideExistingRepository(r))return{kind:`skipped`};let a=!1;try{return await runGit(r,[`init`]),a=!0,await hasConfiguredDefaultBranch(r)||await runGit(r,[`checkout`,`-b`,`main`]),await runGit(r,[`add`,`-A`]),await runGit(r,[`commit`,`-m`,`Initial commit from eve`]),{kind:`initialized`}}catch(t){return a&&await rm(i,{recursive:!0,force:!0}).catch(()=>{}),{kind:`failed`,reason:t instanceof Error?t.message:String(t)}}}export{tryInitializeGit};
@@ -0,0 +1,3 @@
1
+ export type InitFailurePolicy = "clear" | "preserve" | "remove";
2
+ export declare function cleanupFreshInitTarget(projectPath: string, policy: Exclude<InitFailurePolicy, "preserve">, preservedEntries?: readonly string[]): Promise<boolean>;
3
+ export declare function workspaceFailureNote(workspaceMember: boolean): string;
@@ -0,0 +1,3 @@
1
+ import{readdir,rm}from"node:fs/promises";import{join}from"node:path";async function cleanupFreshInitTarget(t,n,r=[]){try{if(n===`remove`)await rm(t,{recursive:!0,force:!0});else{let n=new Set(r);for(let r of await readdir(t))n.has(r)||await rm(join(t,r),{recursive:!0,force:!0})}return!0}catch{return!1}}function workspaceFailureNote(e){return e?`
2
+
3
+ Shared workspace files may have changed. Review your workspace changes before committing.`:``}export{cleanupFreshInitTarget,workspaceFailureNote};
@@ -1 +1 @@
1
- import{hasInteractiveTerminal}from"./preconditions.js";import{access,stat}from"node:fs/promises";import{constants}from"node:fs";import{delimiter,extname,join}from"node:path";import{createPrompter}from"#setup/prompter.js";import{spawn}from"node:child_process";const positional=e=>[e],CODING_AGENT_REPLS=[{command:`claude`,label:`Claude Code`,promptArgs:positional},{command:`codex`,label:`Codex`,promptArgs:positional},{command:`cursor-agent`,label:`Cursor`,promptArgs:positional},{command:`droid`,label:`Droid`,promptArgs:positional},{command:`gemini`,label:`Gemini CLI`,promptArgs:e=>[`-i`,e]},{command:`opencode`,label:`opencode`,promptArgs:e=>[`--prompt`,e]},{command:`pi`,label:`Pi`,promptArgs:positional}],WINDOWS_EXECUTABLE_EXTENSIONS=[`.COM`,`.EXE`,`.BAT`,`.CMD`],defaultDependencies={createPrompter,hasInteractiveTerminal,isCodingAgentReplAvailable};function executableNames(e){if(process.platform!==`win32`)return[e];let t=process.env.PATHEXT?.split(`;`).filter(Boolean);return(t&&t.length>0?t:WINDOWS_EXECUTABLE_EXTENSIONS).map(t=>`${e}${t}`)}async function isExecutable(e){try{return(await stat(e)).isFile()?(await access(e,constants.X_OK),!0):!1}catch{return!1}}async function resolveCodingAgentRepl(e){let t=process.env.PATH;if(t===void 0||t.length===0)return null;for(let n of t.split(delimiter))if(n.length!==0)for(let t of executableNames(e)){let e=join(n,t);if(await isExecutable(e))return e}return null}async function isCodingAgentReplAvailable(e){return await resolveCodingAgentRepl(e)!==null}function handoffOptions(e,t){return[{value:`eve-dev`,label:`Start eve dev`,focusHint:`talk to '${t}' in your terminal`},...e.map(e=>({value:e.command,label:`Open ${e.label}`,focusHint:`build '${t}' using ${e.label}`})),{value:`exit`,label:`Exit`,focusHint:`return to your terminal`}]}async function selectInitHandoff(e){let t={...defaultDependencies,...e.deps};if(!t.hasInteractiveTerminal())return`eve-dev`;let n=await Promise.all(CODING_AGENT_REPLS.map(({command:e})=>t.isCodingAgentReplAvailable(e))),r=CODING_AGENT_REPLS.filter((e,t)=>n[t]);return r.length===0?`eve-dev`:t.createPrompter().select({message:`How would you like to continue?`,options:handoffOptions(r,e.agentName),initialValue:`eve-dev`})}function codingAgentRepl(e){let t=CODING_AGENT_REPLS.find(t=>t.command===e);if(t===void 0)throw Error(`Unsupported coding-agent REPL "${e}".`);return t}function isDirectlySpawnable(e,t){if(t!==`win32`)return!0;let n=extname(e).toLowerCase();return n===`.exe`||n===`.com`}function replSpawnPlan(e,t,n,r=process.platform){return t!==null&&isDirectlySpawnable(t,r)?{file:t,args:codingAgentRepl(e).promptArgs(n),shell:!1,seeded:!0}:{file:e,args:[],shell:r===`win32`,seeded:!1}}async function spawnCodingAgentRepl(e){let t=e.resolvePath??resolveCodingAgentRepl,n=replSpawnPlan(e.command,await t(e.command),e.prompt);return n.seeded||e.onPromptUnseeded?.(e.prompt),new Promise(t=>{let r=spawn(n.file,n.args,{cwd:e.cwd,shell:n.shell,stdio:`inherit`}),i=!1,settle=e=>{i||(i=!0,t(e))};r.once(`error`,()=>settle(!1)),r.once(`close`,e=>settle(e===0))})}export{isCodingAgentReplAvailable,replSpawnPlan,resolveCodingAgentRepl,selectInitHandoff,spawnCodingAgentRepl};
1
+ import{hasInteractiveTerminal}from"./preconditions.js";import{access,stat}from"node:fs/promises";import{delimiter,extname,join}from"node:path";import{constants}from"node:fs";import{createPrompter}from"#setup/prompter.js";import{spawn}from"node:child_process";const positional=e=>[e],CODING_AGENT_REPLS=[{command:`claude`,label:`Claude Code`,promptArgs:positional},{command:`codex`,label:`Codex`,promptArgs:positional},{command:`cursor-agent`,label:`Cursor`,promptArgs:positional},{command:`droid`,label:`Droid`,promptArgs:positional},{command:`gemini`,label:`Gemini CLI`,promptArgs:e=>[`-i`,e]},{command:`opencode`,label:`opencode`,promptArgs:e=>[`--prompt`,e]},{command:`pi`,label:`Pi`,promptArgs:positional}],WINDOWS_EXECUTABLE_EXTENSIONS=[`.COM`,`.EXE`,`.BAT`,`.CMD`],defaultDependencies={createPrompter,hasInteractiveTerminal,isCodingAgentReplAvailable};function executableNames(e){if(process.platform!==`win32`)return[e];let t=process.env.PATHEXT?.split(`;`).filter(Boolean);return(t&&t.length>0?t:WINDOWS_EXECUTABLE_EXTENSIONS).map(t=>`${e}${t}`)}async function isExecutable(e){try{return(await stat(e)).isFile()?(await access(e,constants.X_OK),!0):!1}catch{return!1}}async function resolveCodingAgentRepl(e){let t=process.env.PATH;if(t===void 0||t.length===0)return null;for(let n of t.split(delimiter))if(n.length!==0)for(let t of executableNames(e)){let e=join(n,t);if(await isExecutable(e))return e}return null}async function isCodingAgentReplAvailable(e){return await resolveCodingAgentRepl(e)!==null}function handoffOptions(e,t){return[{value:`eve-dev`,label:`Start eve dev`,focusHint:`talk to '${t}' in your terminal`},...e.map(e=>({value:e.command,label:`Open ${e.label}`,focusHint:`build '${t}' using ${e.label}`})),{value:`exit`,label:`Exit`,focusHint:`return to your terminal`}]}async function selectInitHandoff(e){let t={...defaultDependencies,...e.deps};if(!t.hasInteractiveTerminal())return`eve-dev`;let n=await Promise.all(CODING_AGENT_REPLS.map(({command:e})=>t.isCodingAgentReplAvailable(e))),r=CODING_AGENT_REPLS.filter((e,t)=>n[t]);return r.length===0?`eve-dev`:t.createPrompter().select({message:`How would you like to continue?`,options:handoffOptions(r,e.agentName),initialValue:`eve-dev`})}function codingAgentRepl(e){let t=CODING_AGENT_REPLS.find(t=>t.command===e);if(t===void 0)throw Error(`Unsupported coding-agent REPL "${e}".`);return t}function isDirectlySpawnable(e,t){if(t!==`win32`)return!0;let n=extname(e).toLowerCase();return n===`.exe`||n===`.com`}function replSpawnPlan(e,t,n,r=process.platform){return t!==null&&isDirectlySpawnable(t,r)?{file:t,args:codingAgentRepl(e).promptArgs(n),shell:!1,seeded:!0}:{file:e,args:[],shell:r===`win32`,seeded:!1}}async function spawnCodingAgentRepl(e){let t=e.resolvePath??resolveCodingAgentRepl,n=replSpawnPlan(e.command,await t(e.command),e.prompt);return n.seeded||e.onPromptUnseeded?.(e.prompt),new Promise(t=>{let r=spawn(n.file,n.args,{cwd:e.cwd,shell:n.shell,stdio:`inherit`}),i=!1,settle=e=>{i||(i=!0,t(e))};r.once(`error`,()=>settle(!1)),r.once(`close`,e=>settle(e===0))})}export{isCodingAgentReplAvailable,replSpawnPlan,resolveCodingAgentRepl,selectInitHandoff,spawnCodingAgentRepl};
@@ -0,0 +1,21 @@
1
+ import type { InitNonEmptyDirectoryTarget } from "./init-confirm.js";
2
+ import type { InitFailurePolicy } from "./init-recovery.js";
3
+ export type InitTarget = {
4
+ kind: "existing";
5
+ projectPath: string;
6
+ } | {
7
+ failurePolicy: InitFailurePolicy;
8
+ kind: "fresh";
9
+ overwriteExisting: boolean;
10
+ preservedEntries: readonly string[];
11
+ projectName: string;
12
+ projectPath: string;
13
+ };
14
+ interface ResolveInitTargetInput {
15
+ agentLaunched: boolean;
16
+ confirmInitInNonEmptyDirectory(entries: readonly string[]): Promise<InitNonEmptyDirectoryTarget>;
17
+ parentDirectory: string;
18
+ target: string | undefined;
19
+ }
20
+ export declare function resolveInitTarget(input: ResolveInitTargetInput): Promise<InitTarget>;
21
+ export {};
@@ -0,0 +1 @@
1
+ import{readdir,stat}from"node:fs/promises";import{join,resolve}from"node:path";import{pathExists}from"#setup/path-exists.js";import{parseProjectName}from"#setup/project-name.js";import{blockingCreateInPlaceEntries}from"#setup/scaffold/create-in-place.js";function isCurrentDirectoryTarget(e){return/^\.(?:[/\\]+\.?)*$/u.test(e.trim())}async function resolveNamedTarget(n,r){let a=parseProjectName(r),o=join(n,a),s=await stat(o).then(e=>e,e=>{if(e.code!==`ENOENT`)throw e});if(s===void 0)return{failurePolicy:`remove`,kind:`fresh`,overwriteExisting:!1,preservedEntries:[],projectName:a,projectPath:o};if(!s.isDirectory())throw Error(`Cannot create project because "${o}" already exists.`);return(await readdir(o)).length>0?{kind:`existing`,projectPath:o}:{failurePolicy:`clear`,kind:`fresh`,overwriteExisting:!1,preservedEntries:[],projectName:a,projectPath:o}}async function resolveInitTarget(t){let i=resolve(t.parentDirectory),o=t.target??`.`;if(!isCurrentDirectoryTarget(o))return resolveNamedTarget(i,o);if(await pathExists(join(i,`package.json`)))return{kind:`existing`,projectPath:i};let s=await readdir(i),c=blockingCreateInPlaceEntries(s);if(c.length===0)return{failurePolicy:`clear`,kind:`fresh`,overwriteExisting:!1,preservedEntries:s,projectName:`.`,projectPath:i};if(t.agentLaunched)throw Error(`Coding-agent launches cannot choose where to initialize a non-empty current directory. Pass a new directory name, for example: eve init my-agent.`);let l=await t.confirmInitInNonEmptyDirectory(c);return l.kind===`subdirectory`?resolveNamedTarget(i,l.name):{failurePolicy:`preserve`,kind:`fresh`,overwriteExisting:!0,preservedEntries:s,projectName:`.`,projectPath:i}}export{resolveInitTarget};
@@ -1 +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{initAgentDevHandoff,initAgentReplPrompt}from"./agent-instructions.js";import{tryInitializeGit}from"./init-git.js";import{confirmInitInNonEmptyDirectory}from"./init-confirm.js";import{selectInitHandoff,spawnCodingAgentRepl}from"./init-repl.js";import{mkdtemp,readdir,rename,rm,stat}from"node:fs/promises";import{createLogger,isLogLevelEnabled}from"#internal/logging.js";import{basename,join,resolve}from"node:path";import{ensureChannel,scaffoldBaseProject}from"#setup/scaffold/index.js";import{performance}from"node:perf_hooks";import{isCodingAgentLaunch}from"#cli/agent-detection.js";import{EVE_WORDMARK}from"#cli/banner.js";import{formatElapsed}from"#cli/format-elapsed.js";import{startCliLiveRow}from"#cli/ui/live-row.js";import{formatNodeEngineOverrideWarning}from"#setup/node-engine.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{blockingCreateInPlaceEntries}from"#setup/scaffold/create-in-place.js";import{DEFAULT_EVE_PACKAGE_CONTRACT}from"#setup/scaffold/create/project.js";import{DEFAULT_AGENT_MODEL_ID}from"#shared/default-agent-model.js";import{addAgentToProject}from"#setup/scaffold/create/add-to-project.js";import{WizardCancelledError}from"#setup/step.js";import{validateModelSlug}from"#setup/flows/model-source-change.js";var import_picocolors=__toESM(require_picocolors(),1);const defaultDependencies={addAgentToProject,confirmInitInNonEmptyDirectory,detectInvokingPackageManager,detectPackageManager,ensureChannel,isCodingAgentLaunch,now:()=>performance.now(),runPackageManagerInstall,scaffoldBaseProject,selectInitHandoff,spawnCodingAgentRepl,spawnPackageManager,tryInitializeGit,validateModelSlug},EVE_INIT_PACKAGE_SPEC_ENV=`EVE_INIT_PACKAGE_SPEC`,initLog=createLogger(`init`);async function resolveTargetDirectory(e,t){let n=resolve(e,t);return(await stat(n).catch(()=>void 0))?.isDirectory()?n:void 0}function isCurrentDirectoryTarget(e){return/^\.(?:[/\\]+\.?)*$/u.test(e.trim())}async function moveDirectoryContents(e,t){for(let n of await readdir(e))await rename(join(e,n),join(t,n))}function uniqueWorkspaceRootMutations(e){let t=new Map;for(let n of e){let e=`${n.kind}:${n.path}`,r=t.get(e);t.set(e,{...n,nodeEngineOverride:n.nodeEngineOverride??r?.nodeEngineOverride})}return[...t.values()]}function formatWorkspaceRootMutationWarning(e){let t=e.kind===`package-json`?`package.json`:`configuration`,n=e.nodeEngineOverride===void 0?``:` (${formatNodeEngineOverrideWarning(e.nodeEngineOverride)})`;return`Updated workspace root ${t} at ${e.path}${n}`}async function addToExistingProject(e,t,n,r){if(t.channelWebNextjs===!0)throw Error("`--channel-web-nextjs` is not supported when adding an agent to an existing project. Run `eve add channel/web` from the project afterwards instead.");if(t.model!==void 0){let r=await n.validateModelSlug(e,t.model);if(r!==null)throw Error(r)}let i=await n.detectPackageManager(e),a=await n.addAgentToProject({projectRoot:e,model:t.model??DEFAULT_AGENT_MODEL_ID,reasoning:t.reasoning,packageManager:i.kind,evePackage:r});return{packageManager:i.kind,nodeEngineOverride:a.nodeEngineOverride}}async function resolveScaffoldPackageManager(e,t){let n=await t.detectPackageManager(e);return n.source==="default"?t.detectInvokingPackageManager()??`pnpm`:n.kind}async function scaffoldProject(e,t,n,r,i,a,o){let s=resolve(e),l=t===`.`,f=l?s:join(s,t);if(!l&&await pathExists(f))throw Error(`Cannot create project because "${f}" already exists.`);let p=l&&o?void 0:await mkdtemp(join(s,`.eve-init-`)),m=[];try{let e=p??f;if(r.model!==void 0){let t=await i.validateModelSlug(e,r.model);if(t!==null)throw Error(t)}let s={projectName:p===void 0?`.`:l?basename(f):t,model:r.model??DEFAULT_AGENT_MODEL_ID,reasoning:r.reasoning,evePackage:a,targetDirectory:e,overwriteExisting:o,workspaceProbeDirectory:f,packageManager:n,onWorkspaceRootMutation:e=>{m.push(e)}},c=await i.scaffoldBaseProject(s);return r.channelWebNextjs===!0&&await i.ensureChannel({projectRoot:c,kind:`web`,packageManager:n,force:o,workspaceProbeDirectory:f,configureVercelServices:!1,onWorkspaceRootMutation:e=>{m.push(e)}}),p!==void 0&&(l?await moveDirectoryContents(c,f):await rename(c,f)),{projectPath:f,workspaceRootMutations:uniqueWorkspaceRootMutations(m)}}finally{p!==void 0&&await rm(p,{recursive:!0,force:!0})}}function installProgressDetail(e,t){let n=t.text.trim();if(n===``||e!==`npm`)return n||void 0;let r=/^npm silly fetch manifest (.+)$/u.exec(n);if(r!==null)return`Resolving ${r[1]}`;let i=/^npm http fetch \S+ \S+ attempt (\d+) failed with (\S+)$/u.exec(n);if(i!==null)return`npm registry · attempt ${i[1]} failed: ${i[2]}`;if(t.stream===`stdout`||/^npm (?:error|warn)\b/u.test(n))return n}const NPM_NOISE_LINE=/^\s*npm (?:silly|verbose|http|timing)\b/u;async function runInitSteps(e){let{dependencies:t,logger:n,options:r,parentDirectory:i,target:a}=e,o=isLogLevelEnabled(`debug`),s=await t.isCodingAgentLaunch(),c=a??`.`,u=isCurrentDirectoryTarget(c),d=resolve(i),f=u?await pathExists(join(d,`package.json`))?d:void 0:await resolveTargetDirectory(i,c),p=resolveInitEvePackageOverride(),h=!1;if(u&&f===void 0){let e=blockingCreateInPlaceEntries(await readdir(d));if(e.length>0){if(s)throw Error(`Coding-agent launches cannot choose where to initialize a non-empty current directory. Pass a new directory name, for example: eve init my-agent.`);let n=await t.confirmInitInNonEmptyDirectory(e);n.kind===`current-directory`?h=!0:(c=n.name,u=!1)}}let g=startCliLiveRow(n);g.update(`Preparing project`);try{let e=f===void 0?`creating agent`:`adding agent`;g.update(f===void 0?`Creating agent`:`Adding agent`),initLog.debug(e);let a=t.now(),l;if(f===void 0){let e=u?`.`:parseProjectName(c),n=resolve(i),a=await resolveScaffoldPackageManager(e===`.`?n:join(n,e),t),o=await scaffoldProject(i,e,a,r,t,p,h);l={kind:`created`,packageManager:a,projectPath:o.projectPath,workspaceRootMutations:o.workspaceRootMutations}}else{let e=await addToExistingProject(f,r,t,p);l=e.nodeEngineOverride===void 0?{kind:`added`,packageManager:e.packageManager,projectPath:f}:{kind:`added`,nodeEngineOverride:e.nodeEngineOverride,packageManager:e.packageManager,projectPath:f}}let d=t.now()-a;initLog.debug(`${e} done`,{ms:d}),g.update(`Installing dependencies`,`${l.packageManager} install`),initLog.debug(`installing dependencies with ${l.packageManager}`);let m=t.now(),_=[],v=[],y=await t.runPackageManagerInstall(l.packageManager,l.projectPath,{bypassMinimumReleaseAge:!0,progressDetails:process.stdout.isTTY===!0&&!o,onOutput:e=>{e.text.trim()!==``&&(v.push(e.text),v.length>20&&v.shift(),NPM_NOISE_LINE.test(e.text)||_.push(e.text)),o&&initLog.debug(e.text);let t=installProgressDetail(l.packageManager,e);t!==void 0&&g.update(`Installing dependencies`,t)}}),b=t.now()-m;if(!y){initLog.debug(`dependency installation failed`,{ms:b}),g.stop();let e=_.length>0?_:v;for(let t of e)n.error(t);throw Error(`Failed to install dependencies in "${l.projectPath}".`)}return initLog.debug(`dependencies installed`,{ms:b}),l.kind===`created`?(g.update(`Initializing Git repository`),initLog.debug(`initializing git repository`),{...l,agentElapsedMs:d,agentLaunched:s,gitResult:await t.tryInitializeGit(l.projectPath),installElapsedMs:b}):{...l,agentElapsedMs:d,agentLaunched:s,installElapsedMs:b}}finally{g.stop()}}async function runInitCommand(e,t,i,a,o=defaultDependencies){let s;try{s=await runInitSteps({dependencies:o,logger:e,options:a,parentDirectory:t,target:i})}catch(e){if(e instanceof WizardCancelledError)return;throw e}if(s.kind===`created`){e.log(`${import_picocolors.default.green(`✓`)} Created an ${EVE_WORDMARK} agent in ${import_picocolors.default.bold(s.projectPath)} ${import_picocolors.default.dim(`in ${formatElapsed(s.agentElapsedMs)}`)}`);for(let t of s.workspaceRootMutations)e.log(import_picocolors.default.yellow(`⚠ ${formatWorkspaceRootMutationWarning(t)}`))}else e.log(`${import_picocolors.default.green(`✓`)} Added an ${EVE_WORDMARK} agent to ${import_picocolors.default.bold(s.projectPath)} ${import_picocolors.default.dim(`in ${formatElapsed(s.agentElapsedMs)}`)}`),s.nodeEngineOverride!==void 0&&e.log(import_picocolors.default.yellow(`⚠ ${formatNodeEngineOverrideWarning(s.nodeEngineOverride)}`));e.log(`${import_picocolors.default.green(`✓`)} Installed dependencies ${import_picocolors.default.dim(`in ${formatElapsed(s.installElapsedMs)}`)}`),s.kind===`created`&&s.gitResult.kind===`failed`&&e.error(import_picocolors.default.yellow(`Git initialization failed: ${s.gitResult.reason}`));let c=[s.packageManager,...eveDevArguments(s.packageManager)].join(` `),l=initAgentDevHandoff({projectPath:s.projectPath,devCommand:c});if(s.agentLaunched){e.log(l);return}let u;try{u=await o.selectInitHandoff({agentName:basename(s.projectPath)})}catch(e){if(e instanceof WizardCancelledError)return;throw e}if(u===`exit`)return;if(u!==`eve-dev`){if(e.log(import_picocolors.default.dim(`$ ${u}`)),!await o.spawnCodingAgentRepl({command:u,cwd:s.projectPath,prompt:initAgentReplPrompt({devCommand:c}),onPromptUnseeded:t=>{e.log(import_picocolors.default.yellow(`Could not seed ${u} automatically. Paste this prompt into it:`)),e.log(t)}}))throw Error(`Coding-agent REPL exited unsuccessfully in "${s.projectPath}".`);return}let d=s.kind===`created`,f=d?[...eveDevArguments(s.packageManager),`--input`,`/model`]:eveDevArguments(s.packageManager);if(e.log(import_picocolors.default.dim(d?`$ eve dev --input /model`:`$ eve dev`)),!await o.spawnPackageManager(s.packageManager,s.projectPath,f))throw Error(`Development server exited unsuccessfully in "${s.projectPath}".`)}function resolveInitEvePackageOverride(){let e=process.env[EVE_INIT_PACKAGE_SPEC_ENV]?.trim();if(!(e===void 0||e.length===0))return{nodeEngine:DEFAULT_EVE_PACKAGE_CONTRACT.nodeEngine,version:e}}export{EVE_INIT_PACKAGE_SPEC_ENV,runInitCommand};
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{initAgentDevHandoff,initAgentReplPrompt}from"./agent-instructions.js";import{tryInitializeGit}from"./init-git.js";import{confirmInitInNonEmptyDirectory}from"./init-confirm.js";import{cleanupFreshInitTarget,workspaceFailureNote}from"./init-recovery.js";import{selectInitHandoff,spawnCodingAgentRepl}from"./init-repl.js";import{resolveInitTarget}from"./init-target.js";import{mkdtemp,readdir,rename,rm}from"node:fs/promises";import{createLogger,isLogLevelEnabled}from"#internal/logging.js";import{basename,join,resolve}from"node:path";import{ensureChannel,scaffoldBaseProject}from"#setup/scaffold/index.js";import{performance}from"node:perf_hooks";import{isCodingAgentLaunch}from"#cli/agent-detection.js";import{EVE_WORDMARK}from"#cli/banner.js";import{formatElapsed}from"#cli/format-elapsed.js";import{startCliLiveRow}from"#cli/ui/live-row.js";import{formatNodeEngineOverrideWarning}from"#setup/node-engine.js";import{detectInvokingPackageManager,detectPackageManager}from"#setup/package-manager.js";import{pathExists}from"#setup/path-exists.js";import{eveDevArguments,runPackageManagerInstall,spawnPackageManager}from"#setup/primitives/index.js";import{DEFAULT_EVE_PACKAGE_CONTRACT}from"#setup/scaffold/create/project.js";import{DEFAULT_AGENT_MODEL_ID}from"#shared/default-agent-model.js";import{addAgentToProject}from"#setup/scaffold/create/add-to-project.js";import{WizardCancelledError}from"#setup/step.js";import{validateModelSlug}from"#setup/flows/model-source-change.js";import{isPackageManagerWorkspaceMember}from"#setup/scaffold/workspace-root.js";var import_picocolors=__toESM(require_picocolors(),1);const defaultDependencies={addAgentToProject,confirmInitInNonEmptyDirectory,detectInvokingPackageManager,detectPackageManager,ensureChannel,isCodingAgentLaunch,now:()=>performance.now(),runPackageManagerInstall,scaffoldBaseProject,selectInitHandoff,spawnCodingAgentRepl,spawnPackageManager,tryInitializeGit,validateModelSlug},EVE_INIT_PACKAGE_SPEC_ENV=`EVE_INIT_PACKAGE_SPEC`,initLog=createLogger(`init`);async function moveDirectoryContents(e,t){for(let n of await readdir(e))await rename(join(e,n),join(t,n))}function uniqueWorkspaceRootMutations(e){let t=new Map;for(let n of e){let e=`${n.kind}:${n.path}`,r=t.get(e);t.set(e,{...n,nodeEngineOverride:n.nodeEngineOverride??r?.nodeEngineOverride})}return[...t.values()]}function formatWorkspaceRootMutationWarning(e){let t=e.kind===`package-json`?`package.json`:`configuration`,n=e.nodeEngineOverride===void 0?``:` (${formatNodeEngineOverrideWarning(e.nodeEngineOverride)})`;return`Updated workspace root ${t} at ${e.path}${n}`}async function addToExistingProject(e,t,n,r){if(t.channelWebNextjs===!0)throw Error("`--channel-web-nextjs` is not supported when adding an agent to an existing project. Run `eve add channel/web` from the project afterwards instead.");if(t.model!==void 0){let r=await n.validateModelSlug(e,t.model);if(r!==null)throw Error(r)}let i=await n.detectPackageManager(e),a=await n.addAgentToProject({projectRoot:e,model:t.model??DEFAULT_AGENT_MODEL_ID,reasoning:t.reasoning,packageManager:i.kind,evePackage:r});return{packageManager:i.kind,nodeEngineOverride:a.nodeEngineOverride}}async function resolveScaffoldPackageManager(e,t){let n=await t.detectPackageManager(e);return n.source==="default"?t.detectInvokingPackageManager()??`pnpm`:n.kind}async function scaffoldProject(e,t,n,r,i,a,o){let s=resolve(e),c=t===`.`,l=c?s:join(s,t),u=!c&&await pathExists(l)&&(await readdir(l)).length===0;if(!c&&await pathExists(l)&&!u)throw Error(`Cannot create project because "${l}" already exists.`);let h=c&&o?void 0:await mkdtemp(join(s,`.eve-init-`)),g=[];try{let e=h??l;if(r.model!==void 0){let t=await i.validateModelSlug(e,r.model);if(t!==null)throw Error(t)}let s={projectName:h===void 0?`.`:c?basename(l):t,model:r.model??DEFAULT_AGENT_MODEL_ID,reasoning:r.reasoning,evePackage:a,targetDirectory:e,overwriteExisting:o,workspaceProbeDirectory:l,packageManager:n,onWorkspaceRootMutation:e=>{g.push(e)}},d=await i.scaffoldBaseProject(s);return r.channelWebNextjs===!0&&await i.ensureChannel({projectRoot:d,kind:`web`,packageManager:n,force:o,workspaceProbeDirectory:l,configureVercelServices:!1,onWorkspaceRootMutation:e=>{g.push(e)}}),h!==void 0&&(c||u?await moveDirectoryContents(d,l):await rename(d,l)),{projectPath:l,workspaceRootMutations:uniqueWorkspaceRootMutations(g)}}finally{h!==void 0&&await rm(h,{recursive:!0,force:!0})}}function installProgressDetail(e,t){let n=t.text.trim();if(n===``||e!==`npm`)return n||void 0;let r=/^npm silly fetch manifest (.+)$/u.exec(n);if(r!==null)return`Resolving ${r[1]}`;let i=/^npm http fetch \S+ \S+ attempt (\d+) failed with (\S+)$/u.exec(n);if(i!==null)return`npm registry · attempt ${i[1]} failed: ${i[2]}`;if(t.stream===`stdout`||/^npm (?:error|warn)\b/u.test(n))return n}const NPM_NOISE_LINE=/^\s*npm (?:silly|verbose|http|timing)\b/u;async function runInitSteps(e){let{dependencies:t,logger:n,options:r,parentDirectory:i,target:a}=e,c=isLogLevelEnabled(`debug`),l=await t.isCodingAgentLaunch(),d=await resolveInitTarget({agentLaunched:l,confirmInitInNonEmptyDirectory:t.confirmInitInNonEmptyDirectory,parentDirectory:i,target:a}),f=resolveInitEvePackageOverride(),p=startCliLiveRow(n);p.update(`Preparing project`);try{let e=d.kind===`fresh`?`creating agent`:`adding agent`;p.update(d.kind===`fresh`?`Creating agent`:`Adding agent`),initLog.debug(e);let a=t.now(),u;if(d.kind===`fresh`){let e=await resolveScaffoldPackageManager(d.projectPath,t),n=isPackageManagerWorkspaceMember(e,d.projectPath),a;try{a=await scaffoldProject(i,d.projectName,e,r,t,f,d.overwriteExisting)}catch(e){if(d.failurePolicy===`clear`){let t=await cleanupFreshInitTarget(d.projectPath,d.failurePolicy,d.preservedEntries),r=e instanceof Error?e.message:String(e),i=t?`eve restored "${d.projectPath}" to its original state.`:`eve could not completely clean "${d.projectPath}".`;throw Error(`${r}\n\n${i}${workspaceFailureNote(n)}`)}if(d.failurePolicy===`remove`&&n){let t=e instanceof Error?e.message:String(e);throw Error(`${t}${workspaceFailureNote(!0)}`)}throw e}u={failurePolicy:d.failurePolicy,kind:`created`,packageManager:e,preservedTargetEntries:d.preservedEntries,projectPath:a.projectPath,retryCommand:`eve init ${d.projectName}`,workspaceMember:n,workspaceRootMutations:a.workspaceRootMutations}}else{let e=await addToExistingProject(d.projectPath,r,t,f);u=e.nodeEngineOverride===void 0?{failurePolicy:`preserve`,kind:`added`,packageManager:e.packageManager,projectPath:d.projectPath}:{failurePolicy:`preserve`,kind:`added`,nodeEngineOverride:e.nodeEngineOverride,packageManager:e.packageManager,projectPath:d.projectPath}}let m=t.now()-a;initLog.debug(`${e} done`,{ms:m}),p.update(`Installing dependencies`,`${u.packageManager} install`),initLog.debug(`installing dependencies with ${u.packageManager}`);let h=t.now(),g=[],_=[],v=await t.runPackageManagerInstall(u.packageManager,u.projectPath,{bypassMinimumReleaseAge:!0,progressDetails:process.stdout.isTTY===!0&&!c,onOutput:e=>{e.text.trim()!==``&&(_.push(e.text),_.length>20&&_.shift(),NPM_NOISE_LINE.test(e.text)||g.push(e.text)),c&&initLog.debug(e.text);let t=installProgressDetail(u.packageManager,e);t!==void 0&&p.update(`Installing dependencies`,t)}}),y=t.now()-h;if(!v){initLog.debug(`dependency installation failed`,{ms:y}),p.stop();let e=g.length>0?g:_;for(let t of e)n.error(t);if(u.failurePolicy!==`preserve`){if(await cleanupFreshInitTarget(u.projectPath,u.failurePolicy,u.preservedTargetEntries)){let e=u.failurePolicy===`remove`?`eve removed the incomplete project at "${u.projectPath}".`:`eve restored "${u.projectPath}" to its original state.`,t=u.workspaceMember||u.workspaceRootMutations.length>0;throw Error(`Failed to install dependencies.\n\n${e}\n\nResolve the package-manager error above, then retry:\n ${u.retryCommand}${workspaceFailureNote(t)}`)}let e=u.workspaceMember||u.workspaceRootMutations.length>0;throw Error(`Failed to install dependencies, and eve could not completely clean "${u.projectPath}".\n\nResolve the package-manager error above, then install dependencies with ${u.packageManager} in that directory. Or clean the target manually before rerunning eve init.${workspaceFailureNote(e)}`)}throw Error(`The eve agent was added, but dependency installation failed.\n\nResolve the package-manager error above, then install dependencies with ${u.packageManager} in "${u.projectPath}".\n\nDo not rerun eve init; the agent is already configured.`)}return initLog.debug(`dependencies installed`,{ms:y}),u.kind===`created`?(p.update(`Initializing Git repository`),initLog.debug(`initializing git repository`),{...u,agentElapsedMs:m,agentLaunched:l,gitResult:await t.tryInitializeGit(u.projectPath),installElapsedMs:y}):{...u,agentElapsedMs:m,agentLaunched:l,installElapsedMs:y}}finally{p.stop()}}async function runInitCommand(e,t,i,a,o=defaultDependencies){let s;try{s=await runInitSteps({dependencies:o,logger:e,options:a,parentDirectory:t,target:i})}catch(e){if(e instanceof WizardCancelledError)return;throw e}if(s.kind===`created`){e.log(`${import_picocolors.default.green(`✓`)} Created an ${EVE_WORDMARK} agent in ${import_picocolors.default.bold(s.projectPath)} ${import_picocolors.default.dim(`in ${formatElapsed(s.agentElapsedMs)}`)}`);for(let t of s.workspaceRootMutations)e.log(import_picocolors.default.yellow(`⚠ ${formatWorkspaceRootMutationWarning(t)}`))}else e.log(`${import_picocolors.default.green(`✓`)} Added an ${EVE_WORDMARK} agent to ${import_picocolors.default.bold(s.projectPath)} ${import_picocolors.default.dim(`in ${formatElapsed(s.agentElapsedMs)}`)}`),s.nodeEngineOverride!==void 0&&e.log(import_picocolors.default.yellow(`⚠ ${formatNodeEngineOverrideWarning(s.nodeEngineOverride)}`));e.log(`${import_picocolors.default.green(`✓`)} Installed dependencies ${import_picocolors.default.dim(`in ${formatElapsed(s.installElapsedMs)}`)}`),s.kind===`created`&&s.gitResult.kind===`failed`&&e.error(import_picocolors.default.yellow(`Git initialization failed: ${s.gitResult.reason}`));let c=[s.packageManager,...eveDevArguments(s.packageManager)].join(` `),l=initAgentDevHandoff({projectPath:s.projectPath,devCommand:c});if(s.agentLaunched){e.log(l);return}let u;try{u=await o.selectInitHandoff({agentName:basename(s.projectPath)})}catch(e){if(e instanceof WizardCancelledError)return;throw e}if(u===`exit`)return;if(u!==`eve-dev`){if(e.log(import_picocolors.default.dim(`$ ${u}`)),!await o.spawnCodingAgentRepl({command:u,cwd:s.projectPath,prompt:initAgentReplPrompt({devCommand:c}),onPromptUnseeded:t=>{e.log(import_picocolors.default.yellow(`Could not seed ${u} automatically. Paste this prompt into it:`)),e.log(t)}}))throw Error(`Coding-agent REPL exited unsuccessfully in "${s.projectPath}".`);return}let d=s.kind===`created`,f=d?[...eveDevArguments(s.packageManager),`--input`,`/model`]:eveDevArguments(s.packageManager);if(e.log(import_picocolors.default.dim(d?`$ eve dev --input /model`:`$ eve dev`)),!await o.spawnPackageManager(s.packageManager,s.projectPath,f))throw Error(`Development server exited unsuccessfully in "${s.projectPath}".`)}function resolveInitEvePackageOverride(){let e=process.env[EVE_INIT_PACKAGE_SPEC_ENV]?.trim();if(!(e===void 0||e.length===0))return{nodeEngine:DEFAULT_EVE_PACKAGE_CONTRACT.nodeEngine,version:e}}export{EVE_INIT_PACKAGE_SPEC_ENV,runInitCommand};
@@ -1,4 +1,5 @@
1
1
  import type { Command } from "#compiled/commander/index.js";
2
+ import { type CliApplicationContext } from "#cli/application-command.js";
2
3
  interface IntegrationCommandLogger {
3
4
  error(message: string): void;
4
5
  log(message: string): void;
@@ -7,6 +8,6 @@ interface IntegrationCommandLogger {
7
8
  export declare function registerIntegrationCommands(input: {
8
9
  program: Command;
9
10
  logger: IntegrationCommandLogger;
10
- appRoot: string;
11
+ applicationContext: CliApplicationContext;
11
12
  }): void;
12
13
  export {};
@@ -1 +1 @@
1
- import{parseSetupAnswer}from"./setup-answers.js";function registerIntegrationCommands(t){let{appRoot:n,logger:r,program:i}=t,a=i.command(`integration`,{hidden:!0});a.command(`setup <kind>`).option(`-y, --yes`).option(`--non-interactive`,`Run without interactive prompts, instead emit structured NDJSON when further input is required`).option(`--answer <key=value>`,`Answer a setup question; requires --non-interactive.`,parseSetupAnswer,{}).action(async(e,t)=>{let{runIntegrationSetupCommand:i}=await import(`./integration-setup.js`);await i(r,n,e,{yes:t.yes,nonInteractive:t.nonInteractive,answers:t.answer})}),a.command(`connect <slug> <service> [canonical-name]`).option(`-y, --yes`).option(`--non-interactive`,`Run without interactive prompts, instead emit structured NDJSON when further input is required`).action(async(e,t,i,a)=>{let{runIntegrationConnectCommand:o}=await import(`./integration-connect.js`);await o(r,n,e,t,i,a)})}export{registerIntegrationCommands};
1
+ import{parseSetupAnswer}from"./setup-answers.js";import{applicationCommand}from"#cli/application-command.js";function registerIntegrationCommands(n){let{applicationContext:r,logger:i,program:a}=n,o=a.command(`integration`,{hidden:!0});applicationCommand(o.command(`setup <kind>`),r).option(`-y, --yes`).option(`--non-interactive`,`Run without interactive prompts, instead emit structured NDJSON when further input is required`).option(`--answer <key=value>`,`Answer a setup question; requires --non-interactive.`,parseSetupAnswer,{}).action(async(e,t)=>{let{runIntegrationSetupCommand:n}=await import(`./integration-setup.js`);await n(i,r.root,e,{yes:t.yes,nonInteractive:t.nonInteractive,answers:t.answer})}),applicationCommand(o.command(`connect <slug> <service> [canonical-name]`),r).option(`-y, --yes`).option(`--non-interactive`,`Run without interactive prompts, instead emit structured NDJSON when further input is required`).action(async(e,t,n,a)=>{let{runIntegrationConnectCommand:o}=await import(`./integration-connect.js`);await o(i,r.root,e,t,n,a)})}export{registerIntegrationCommands};
@@ -1,4 +1,5 @@
1
1
  import type { Command } from "#compiled/commander/index.js";
2
+ import { type CliApplicationContext } from "#cli/application-command.js";
2
3
  interface ProjectCommandLogger {
3
4
  error(message: string): void;
4
5
  log(message: string): void;
@@ -7,6 +8,6 @@ interface ProjectCommandLogger {
7
8
  export declare function registerProjectCommands(input: {
8
9
  program: Command;
9
10
  logger: ProjectCommandLogger;
10
- appRoot: string;
11
+ applicationContext: CliApplicationContext;
11
12
  }): void;
12
13
  export {};
@@ -1 +1 @@
1
- function registerProjectCommands(e){e.program.command(`link`).description(`Link this directory to a Vercel project and pull AI Gateway credentials.`).action(async()=>{let{runLinkCommand:t}=await import(`./link.js`);await t(e.logger,e.appRoot)}),e.program.command(`deploy`).description(`Deploy the agent to Vercel production (links first if needed).`).action(async()=>{let{runDeployCommand:t}=await import(`./deploy.js`);await t(e.logger,e.appRoot)})}export{registerProjectCommands};
1
+ import{applicationCommand}from"#cli/application-command.js";function registerProjectCommands(t){applicationCommand(t.program.command(`link`),t.applicationContext).description(`Link this directory to a Vercel project and pull AI Gateway credentials.`).action(async()=>{let{runLinkCommand:e}=await import(`./link.js`);await e(t.logger,t.applicationContext.root)}),applicationCommand(t.program.command(`deploy`),t.applicationContext).description(`Deploy the agent to Vercel production (links first if needed).`).action(async()=>{let{runDeployCommand:e}=await import(`./deploy.js`);await e(t.logger,t.applicationContext.root)})}export{registerProjectCommands};
@@ -1,4 +1,5 @@
1
1
  import { type Command } from "#compiled/commander/index.js";
2
+ import { type CliApplicationContext } from "#cli/application-command.js";
2
3
  interface RegistryCommandLogger {
3
4
  error(message: string): void;
4
5
  log(message: string): void;
@@ -7,6 +8,6 @@ interface RegistryCommandLogger {
7
8
  export declare function registerRegistryCommands(input: {
8
9
  program: Command;
9
10
  logger: RegistryCommandLogger;
10
- appRoot: string;
11
+ applicationContext: CliApplicationContext;
11
12
  }): void;
12
13
  export {};
@@ -1 +1,4 @@
1
- import{parseSetupAnswer}from"./setup-answers.js";import{InvalidArgumentError}from"#compiled/commander/index.js";function parseSearchLimit(e){if(!/^\d+$/u.test(e))throw new InvalidArgumentError(`Expected a positive integer, received "${e}".`);let n=Number(e);if(n<1||n>100)throw new InvalidArgumentError(`Expected a limit between 1 and 100, received "${e}".`);return n}function registerRegistryCommands(n){let{appRoot:r,logger:i,program:a}=n;a.command(`add <item>`).description(`Install a registry item; relative paths use the official eve registry.`).option(`-o, --overwrite`,`Overwrite existing files.`).option(`--skip-install`,`Run the item's setup flow without installing it.`).option(`--skip-setup`,`Skip the item's setup flow.`).option(`--non-interactive`,`Run without interactive prompts, instead emit structured NDJSON when further input is required`).option(`--answer <key=value>`,`Answer a setup question with JSON; requires --non-interactive; repeat for multiple answers.`,parseSetupAnswer).option(`-y, --yes`,`Run setup and accept its recommended defaults.`).action(async(e,n)=>{if(n.answer!==void 0&&!n.nonInteractive)throw new InvalidArgumentError(`--answer requires --non-interactive.`);let{runAddCommand:a}=await import(`./registry.js`);await a(i,r,e,{...n,answers:n.answer})});let o=a.command(`registry`).description(`Configure and browse extension and agent registry catalogs.`);o.command(`add <registries...>`).description(`Add registry namespace mappings to package.json.`).action(async e=>{let{runRegistryAddCommand:t}=await import(`./registry.js`);await t(i,r,e)}),o.command(`list`).description(`List items from all registries or one source.`).option(`-r, --registry <source>`,`List items from one registry.`).option(`--json`,`Output as JSON`).action(async e=>{let{runRegistryListCommand:t}=await import(`./registry.js`);await t(i,r,e.registry,e)}),o.command(`search <query>`).description(`Search all registries or one source.`).option(`-r, --registry <source>`,`Search one registry.`).option(`--limit <count>`,`Maximum results to return (default: 10).`,parseSearchLimit,10).option(`--json`,`Output as JSON`).action(async(e,t)=>{let{runRegistrySearchCommand:n}=await import(`./registry.js`);await n(i,r,e,t.registry,t)}),o.command(`view <item>`).description(`Inspect one registry item.`).option(`--json`,`Output the raw registry item as JSON.`).action(async(e,t)=>{let{runRegistryViewCommand:n}=await import(`./registry.js`);await n(i,r,e,t)})}export{registerRegistryCommands};
1
+ import{parseSetupAnswer}from"./setup-answers.js";import{InvalidArgumentError}from"#compiled/commander/index.js";import{applicationCommand}from"#cli/application-command.js";function parseSearchLimit(e){if(!/^\d+$/u.test(e))throw new InvalidArgumentError(`Expected a positive integer, received "${e}".`);let n=Number(e);if(n<1||n>100)throw new InvalidArgumentError(`Expected a limit between 1 and 100, received "${e}".`);return n}function registerRegistryCommands(r){let{applicationContext:i,logger:a,program:o}=r,s=applicationCommand(o.command(`add [item]`),i).description(`Install a registry item; relative paths use the official eve registry.`).option(`-o, --overwrite`,`Overwrite existing files.`).option(`--skip-install`,`Run the item's setup flow without installing it.`).option(`--skip-setup`,`Skip the item's setup flow.`).option(`--non-interactive`,`Run without interactive prompts, instead emit structured NDJSON when further input is required`).option(`--answer <key=value>`,`Answer a setup question with JSON; requires --non-interactive; repeat for multiple answers.`,parseSetupAnswer).option(`-y, --yes`,`Run setup and accept its recommended defaults.`).addHelpText(`after`,`
2
+ Search the registry:
3
+ $ eve registry search <query>
4
+ `).action(async(e,n)=>{if(e===void 0){s.outputHelp();return}if(n.answer!==void 0&&!n.nonInteractive)throw new InvalidArgumentError(`--answer requires --non-interactive.`);let{runAddCommand:r}=await import(`./registry.js`);await r(a,i.root,e,{...n,answers:n.answer})}),c=o.command(`registry`).description(`Configure and browse extension and agent registry catalogs.`);applicationCommand(c.command(`add <registries...>`),i).description(`Add registry namespace mappings to package.json.`).action(async e=>{let{runRegistryAddCommand:t}=await import(`./registry.js`);await t(a,i.root,e)}),applicationCommand(c.command(`list`),i).description(`List items from all registries or one source.`).option(`-r, --registry <source>`,`List items from one registry.`).option(`--json`,`Output as JSON`).action(async e=>{let{runRegistryListCommand:t}=await import(`./registry.js`);await t(a,i.root,e.registry,e)}),applicationCommand(c.command(`search <query>`),i).description(`Search all registries or one source.`).option(`-r, --registry <source>`,`Search one registry.`).option(`--limit <count>`,`Maximum results to return (default: 10).`,parseSearchLimit,10).option(`--json`,`Output as JSON`).action(async(e,t)=>{let{runRegistrySearchCommand:n}=await import(`./registry.js`);await n(a,i.root,e,t.registry,t)}),applicationCommand(c.command(`view <item>`),i).description(`Inspect one registry item.`).option(`--json`,`Output the raw registry item as JSON.`).action(async(e,t)=>{let{runRegistryViewCommand:n}=await import(`./registry.js`);await n(a,i.root,e,t)})}export{registerRegistryCommands};
@@ -0,0 +1,14 @@
1
+ export interface RegistryCommandLogger {
2
+ error(message: string): void;
3
+ log(message: string): void;
4
+ }
5
+ export declare function errorMessage(error: unknown): string;
6
+ export declare function runRegistryAction<T>(logger: RegistryCommandLogger, appRoot: string, action: () => Promise<T>): Promise<T | undefined>;
7
+ export declare function resolveRegistryItemForAdd<T>(logger: RegistryCommandLogger, loadItem: () => Promise<T>, printSuggestions: () => Promise<void>): Promise<{
8
+ found: true;
9
+ item: T;
10
+ } | {
11
+ found: false;
12
+ }>;
13
+ export declare function setupResumeCommand(item: string): string;
14
+ export declare function setupReminder(item: string, outcome: "cancelled" | "skipped"): string;
@@ -0,0 +1 @@
1
+ import{NOT_AN_AGENT_MESSAGE}from"./preconditions.js";import{isEveProject}from"#setup/scaffold/index.js";import{WizardCancelledError}from"#setup/step.js";function errorMessage(e){return e instanceof Error?e.message:String(e)}function isRegistryNotFoundError(e){return e instanceof Error&&`code`in e&&e.code===`NOT_FOUND`}async function runRegistryAction(r,i,a){if(!await isEveProject(i)){r.error(NOT_AN_AGENT_MESSAGE),process.exitCode=1;return}try{return await a()}catch(e){if(e instanceof WizardCancelledError)return;r.error(errorMessage(e)),process.exitCode=1;return}}async function resolveRegistryItemForAdd(e,t,n){try{return{found:!0,item:await t()}}catch(t){if(!isRegistryNotFoundError(t))throw t;return e.error(errorMessage(t)),await n(),process.exitCode=1,{found:!1}}}function setupResumeCommand(e){return`eve add ${/^[\w@./:-]+$/.test(e)?e:`'${e.replaceAll(`'`,`'\\''`)}'`} --skip-install`}function setupReminder(e,t){return`${t===`cancelled`?`Setup cancelled.`:`Setup skipped.`} Run \`${setupResumeCommand(e)}\` when you're ready.`}export{errorMessage,resolveRegistryItemForAdd,runRegistryAction,setupReminder,setupResumeCommand};
@@ -1,10 +1,8 @@
1
1
  import { type Prompter } from "#setup/prompter.js";
2
2
  import type { RegistrySetupCompletion } from "#setup/registry-setup-protocol.js";
3
+ import { type RegistryCommandLogger } from "./registry-recovery.js";
3
4
  import type { runRegistrySetupCommand } from "./registry-setup-command.js";
4
- export interface RegistryCommandLogger {
5
- error(message: string): void;
6
- log(message: string): void;
7
- }
5
+ export type { RegistryCommandLogger } from "./registry-recovery.js";
8
6
  export interface AddCommandOptions {
9
7
  skipInstall?: boolean;
10
8
  overwrite?: boolean;
@@ -89,4 +87,3 @@ export declare function runRegistryListCommand(logger: RegistryCommandLogger, ap
89
87
  export declare function runRegistrySearchCommand(logger: RegistryCommandLogger, appRoot: string, query: string, source?: string, options?: RegistrySearchCommandOptions): Promise<void>;
90
88
  /** Inspects one official, configured, or URL-addressed registry item. */
91
89
  export declare function runRegistryViewCommand(logger: RegistryCommandLogger, appRoot: string, item: string, options?: RegistryCommandOptions): Promise<void>;
92
- export {};