eve 0.51.0 → 0.52.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 (462) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/dist/src/channel/session.d.ts +2 -1
  3. package/dist/src/channel/session.js +1 -1
  4. package/dist/src/channel/types.d.ts +4 -1
  5. package/dist/src/chunks/{use-eve-agent-C3vUG5g2.js → use-eve-agent-3DZuvuWE.js} +17 -6
  6. package/dist/src/chunks/{use-eve-agent-B4xN7-fK.js → use-eve-agent-D7apPojZ.js} +17 -6
  7. package/dist/src/cli/agent-command.js +1 -1
  8. package/dist/src/cli/commands/agent-instructions.d.ts +3 -1
  9. package/dist/src/cli/commands/agent-instructions.js +1 -1
  10. package/dist/src/cli/commands/build.js +1 -1
  11. package/dist/src/cli/commands/deploy.js +1 -1
  12. package/dist/src/cli/commands/init-agent-workspace.js +1 -1
  13. package/dist/src/cli/commands/init-repl.js +1 -1
  14. package/dist/src/cli/commands/init.js +1 -1
  15. package/dist/src/cli/commands/integration-connect.js +1 -1
  16. package/dist/src/cli/commands/link.js +1 -1
  17. package/dist/src/cli/commands/preconditions.js +1 -1
  18. package/dist/src/cli/commands/register-project-commands.d.ts +1 -1
  19. package/dist/src/cli/commands/register-project-commands.js +1 -1
  20. package/dist/src/cli/commands/registry.js +1 -1
  21. package/dist/src/cli/dev/boot-progress.d.ts +3 -0
  22. package/dist/src/cli/dev/boot-progress.js +1 -0
  23. package/dist/src/cli/dev/environment.js +1 -1
  24. package/dist/src/cli/dev/run-interactive-ui.js +1 -1
  25. package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -1
  26. package/dist/src/cli/dev/tui/setup-commands.d.ts +3 -1
  27. package/dist/src/cli/dev/tui/setup-commands.js +1 -1
  28. package/dist/src/cli/run.d.ts +4 -0
  29. package/dist/src/cli/run.js +3 -3
  30. package/dist/src/cli/telemetry/command.d.ts +9 -0
  31. package/dist/src/cli/telemetry/command.js +1 -0
  32. package/dist/src/cli/telemetry/flush.d.ts +2 -0
  33. package/dist/src/cli/telemetry/flush.js +1 -0
  34. package/dist/src/cli/telemetry/identity.d.ts +13 -0
  35. package/dist/src/cli/telemetry/identity.js +1 -0
  36. package/dist/src/cli/telemetry/index.d.ts +25 -0
  37. package/dist/src/cli/telemetry/index.js +3 -0
  38. package/dist/src/cli/telemetry/preference.d.ts +9 -0
  39. package/dist/src/cli/telemetry/preference.js +1 -0
  40. package/dist/src/client/open-stream.js +1 -1
  41. package/dist/src/client/session-controls.d.ts +3 -0
  42. package/dist/src/client/session-controls.js +1 -1
  43. package/dist/src/client/session.d.ts +4 -1
  44. package/dist/src/client/types.d.ts +3 -2
  45. package/dist/src/compiled/.vendor-stamp.json +11 -11
  46. package/dist/src/compiled/@clack/core/LICENSE +9 -0
  47. package/dist/src/compiled/@clack/core/index.d.ts +363 -0
  48. package/dist/src/compiled/@clack/core/index.js +20 -0
  49. package/dist/src/compiled/@eve/catalog/index.js +1 -1
  50. package/dist/src/compiled/@modelcontextprotocol/server/index.d.ts +1 -0
  51. package/dist/src/compiled/@vercel/sandbox/api-client/api-client.d.ts +34 -92
  52. package/dist/src/compiled/@vercel/sandbox/api-client/base-client.d.ts +1 -1
  53. package/dist/src/compiled/@vercel/sandbox/api-client/index.d.ts +1 -1
  54. package/dist/src/compiled/@vercel/sandbox/api-client/validators.d.ts +13 -29
  55. package/dist/src/compiled/@vercel/sandbox/constants.d.ts +11 -1
  56. package/dist/src/compiled/@vercel/sandbox/index.d.ts +3 -3
  57. package/dist/src/compiled/@vercel/sandbox/index.js +9 -9
  58. package/dist/src/compiled/@vercel/sandbox/sandbox-user.d.ts +5 -6
  59. package/dist/src/compiled/@vercel/sandbox/sandbox.d.ts +79 -67
  60. package/dist/src/compiled/@vercel/sandbox/session.d.ts +5 -3
  61. package/dist/src/compiled/@vercel/sandbox/snapshot.d.ts +9 -0
  62. package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/api-client/api-client.d.ts +86 -1
  63. package/dist/src/compiled/@vercel/sandbox-drives/api-client/index.d.ts +2 -0
  64. package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/api-client/validators.d.ts +26 -1
  65. package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/constants.d.ts +2 -2
  66. package/dist/src/compiled/@vercel/{sandbox → sandbox-drives}/drive.d.ts +10 -0
  67. package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/index.d.ts +3 -2
  68. package/dist/src/compiled/@vercel/sandbox-drives/index.js +9 -0
  69. package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/sandbox.d.ts +35 -6
  70. package/dist/src/compiled/@workflow/core/index.js +1 -1
  71. package/dist/src/compiled/@workflow/core/private.d.ts +2 -4
  72. package/dist/src/compiled/@workflow/core/private.js +1 -1
  73. package/dist/src/compiled/@workflow/core/runtime/constants.d.ts +9 -7
  74. package/dist/src/compiled/@workflow/core/runtime/helpers.d.ts +13 -0
  75. package/dist/src/compiled/@workflow/core/runtime/suspension-handler.d.ts +54 -1
  76. package/dist/src/compiled/@workflow/core/runtime.js +3 -3
  77. package/dist/src/compiled/@workflow/core/serialization/types.d.ts +7 -0
  78. package/dist/src/compiled/@workflow/core/serialization.d.ts +24 -2
  79. package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
  80. package/dist/src/compiled/@workflow/core/workflow.js +1 -1
  81. package/dist/src/compiled/@workflow/errors/error-codes.d.ts +2 -0
  82. package/dist/src/compiled/@workflow/errors/index.d.ts +19 -0
  83. package/dist/src/compiled/@workflow/errors/index.js +1 -1
  84. package/dist/src/compiled/@workflow/world/analytics.d.ts +46 -2
  85. package/dist/src/compiled/@workflow/world/events.d.ts +26 -1
  86. package/dist/src/compiled/@workflow/world/index.d.ts +1 -1
  87. package/dist/src/compiled/@workflow/world/runs.d.ts +2 -2
  88. package/dist/src/compiled/@workflow/world-local/index.js +3 -3
  89. package/dist/src/compiled/@workflow/world-vercel/index.js +12 -12
  90. package/dist/src/compiled/_chunks/node/{auth-BSKyPAEP.js → auth-Bx1Aoyfo.js} +1 -1
  91. package/dist/src/compiled/_chunks/node/{auth-YpKlwhP1.js → auth-CA8ZMfB8.js} +1 -1
  92. package/dist/src/compiled/_chunks/node/esm-CE0tAvRh.js +7 -0
  93. package/dist/src/compiled/_chunks/node/version-BC6t2Txc.js +1 -0
  94. package/dist/src/compiled/_chunks/node/version-DSQqVZ5T.js +1 -0
  95. package/dist/src/compiled/_chunks/workflow/{attribute-changes-BwAadFfB.js → attribute-changes-03lzo29R.js} +1 -1
  96. package/dist/src/compiled/_chunks/workflow/dist-BIdMK5N8.js +40 -0
  97. package/dist/src/compiled/_chunks/workflow/dist-DMQ3CtWt.js +3 -0
  98. package/dist/src/compiled/_chunks/workflow/frames-Boesh7kU.js +3 -0
  99. package/dist/src/compiled/_chunks/workflow/{private-CZFMABEf.js → private-CKx3PkSS.js} +1 -1
  100. package/dist/src/compiled/_chunks/workflow/{resume-hook-BToMtPbH.js → resume-hook-C6eL-S_T.js} +1 -1
  101. package/dist/src/compiled/_chunks/workflow/run-BV0S6Zc2.js +1 -0
  102. package/dist/src/compiled/_chunks/workflow/sleep-Bh3jP9ii.js +1 -0
  103. package/dist/src/compiled/_chunks/workflow/wait-until-l-cwfJvm.js +15 -0
  104. package/dist/src/compiled/_chunks/workflow/{ws-transport-PnVVxT0R.js → ws-transport-BagXNxCE.js} +1 -1
  105. package/dist/src/compiler/compile-from-memory.d.ts +1 -0
  106. package/dist/src/compiler/extension-compatibility.d.ts +38 -20
  107. package/dist/src/compiler/extension-compatibility.js +1 -1
  108. package/dist/src/compiler/manifest.d.ts +2 -2
  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-channel.js +1 -1
  112. package/dist/src/compiler/normalize-schedule.js +1 -1
  113. package/dist/src/compiler/normalize-tool.js +1 -1
  114. package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
  115. package/dist/src/discover/extensions.d.ts +2 -0
  116. package/dist/src/discover/extensions.js +1 -1
  117. package/dist/src/discover/filesystem.d.ts +1 -0
  118. package/dist/src/discover/filesystem.js +1 -1
  119. package/dist/src/discover/project.js +1 -1
  120. package/dist/src/evals/runner/execute-task.js +1 -1
  121. package/dist/src/evals/session-cleanup.d.ts +7 -0
  122. package/dist/src/evals/session-cleanup.js +1 -0
  123. package/dist/src/evals/session.d.ts +4 -0
  124. package/dist/src/evals/session.js +1 -1
  125. package/dist/src/eve-channel/index.js +1 -1
  126. package/dist/src/eve-channel/request.d.ts +1 -0
  127. package/dist/src/eve-channel/request.js +1 -1
  128. package/dist/src/execution/activity-collector.js +1 -1
  129. package/dist/src/execution/activity-work.d.ts +8 -0
  130. package/dist/src/execution/activity-work.js +1 -1
  131. package/dist/src/execution/cancel-indexed-session-tasks-step.d.ts +6 -0
  132. package/dist/src/execution/cancel-indexed-session-tasks-step.js +1 -0
  133. package/dist/src/execution/continuation-conflict-step.js +1 -1
  134. package/dist/src/execution/coordination-dispatch-shared.d.ts +2 -2
  135. package/dist/src/execution/coordination-dispatch-shared.js +1 -1
  136. package/dist/src/execution/coordination-dispatch-step.js +1 -1
  137. package/dist/src/execution/create-session-step.js +1 -1
  138. package/dist/src/execution/durable-session-migrations/turn-workflow.d.ts +1 -1
  139. package/dist/src/execution/inline-turn.d.ts +4 -2
  140. package/dist/src/execution/inline-turn.js +1 -1
  141. package/dist/src/execution/next-driver-action.d.ts +0 -3
  142. package/dist/src/execution/parked-delivery-wait.js +1 -1
  143. package/dist/src/execution/proxied-deliver-step.js +1 -1
  144. package/dist/src/execution/run-session-limits.d.ts +5 -5
  145. package/dist/src/execution/sandbox/bindings/vercel-create-sdk.js +1 -1
  146. package/dist/src/execution/sandbox/bindings/vercel-sdk-types.d.ts +4 -4
  147. package/dist/src/execution/sandbox/bindings/vercel.js +1 -1
  148. package/dist/src/execution/session-activity-projection.js +1 -1
  149. package/dist/src/execution/session-activity.js +1 -1
  150. package/dist/src/execution/session-timeout-workflow.js +1 -1
  151. package/dist/src/execution/session.d.ts +1 -0
  152. package/dist/src/execution/session.js +1 -1
  153. package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
  154. package/dist/src/execution/tasks/child/steps.d.ts +19 -1
  155. package/dist/src/execution/tasks/child/steps.js +1 -1
  156. package/dist/src/execution/tasks/child/workflow.d.ts +2 -0
  157. package/dist/src/execution/tasks/child/workflow.js +1 -1
  158. package/dist/src/execution/tasks/parent/control-shared.js +1 -1
  159. package/dist/src/execution/tasks/parent/delegate.d.ts +2 -0
  160. package/dist/src/execution/tasks/parent/delegate.js +1 -1
  161. package/dist/src/execution/tasks/parent/hitl-proxy-steps.js +1 -1
  162. package/dist/src/execution/tasks/parent/subagent-task-projection.d.ts +26 -0
  163. package/dist/src/execution/tasks/parent/subagent-task-projection.js +1 -0
  164. package/dist/src/execution/tasks/parent/tool-execution.js +1 -1
  165. package/dist/src/execution/terminate-child-sessions-step.js +1 -1
  166. package/dist/src/execution/tools/sleep-workflow.d.ts +3 -0
  167. package/dist/src/execution/tools/sleep-workflow.js +1 -0
  168. package/dist/src/execution/tools/sleep.d.ts +1 -5
  169. package/dist/src/execution/tools/sleep.js +1 -1
  170. package/dist/src/execution/tools/subagent/accept-event-step.js +1 -1
  171. package/dist/src/execution/tools/subagent/invoke-agent.d.ts +1 -7
  172. package/dist/src/execution/tools/subagent/invoke-agent.js +1 -1
  173. package/dist/src/execution/tools/subagent/invoke-step.js +1 -1
  174. package/dist/src/execution/tools/workflow/ask.d.ts +1 -2
  175. package/dist/src/execution/tools/workflow/ask.js +1 -1
  176. package/dist/src/execution/tools/workflow/body.d.ts +6 -1
  177. package/dist/src/execution/tools/workflow/body.js +1 -1
  178. package/dist/src/execution/tools/workflow/cancel.js +1 -1
  179. package/dist/src/execution/tools/workflow/messages.d.ts +9 -8
  180. package/dist/src/execution/tools/workflow/messages.js +1 -1
  181. package/dist/src/execution/tools/workflow/owner-inbox.d.ts +2 -2
  182. package/dist/src/execution/tools/workflow/owner-inbox.js +1 -1
  183. package/dist/src/execution/tools/workflow/owner.d.ts +5 -11
  184. package/dist/src/execution/tools/workflow/owner.js +1 -1
  185. package/dist/src/execution/tools/workflow/run-control.d.ts +0 -4
  186. package/dist/src/execution/tools/workflow/run-control.js +1 -1
  187. package/dist/src/execution/tools/workflow/start.d.ts +5 -14
  188. package/dist/src/execution/tools/workflow/start.js +1 -1
  189. package/dist/src/execution/tools/workflow/workflow.d.ts +1 -1
  190. package/dist/src/execution/tools/workflow/workflow.js +1 -1
  191. package/dist/src/execution/turn-cancellation-control.d.ts +1 -0
  192. package/dist/src/execution/turn-cancellation-control.js +1 -1
  193. package/dist/src/execution/turn-cancellation-token.d.ts +1 -0
  194. package/dist/src/execution/turn-control-receiver.d.ts +3 -0
  195. package/dist/src/execution/turn-control-receiver.js +1 -1
  196. package/dist/src/execution/turn-dispatch.d.ts +2 -0
  197. package/dist/src/execution/turn-dispatch.js +1 -1
  198. package/dist/src/execution/turn-workflow-tool-run.d.ts +2 -8
  199. package/dist/src/execution/turn-workflow-tool-run.js +1 -1
  200. package/dist/src/execution/turn-workflow.d.ts +1 -0
  201. package/dist/src/execution/turn-workflow.js +1 -1
  202. package/dist/src/execution/wire/session-inbox-contract.d.ts +2 -2
  203. package/dist/src/execution/wire/session-inbox-contract.js +1 -1
  204. package/dist/src/execution/wire/session-inbox-encoder.d.ts +10 -2
  205. package/dist/src/execution/wire/session-inbox-encoder.js +1 -1
  206. package/dist/src/execution/wire/session-inbox-resume.js +1 -1
  207. package/dist/src/execution/wire/session-inbox-wire.js +1 -1
  208. package/dist/src/execution/wire/session-inbox-wire.v5.d.ts +341 -0
  209. package/dist/src/execution/wire/session-inbox-wire.v5.js +1 -0
  210. package/dist/src/execution/wire/session-inbox-wire.v5.migration.d.ts +3 -0
  211. package/dist/src/execution/wire/session-inbox-wire.v5.migration.js +1 -0
  212. package/dist/src/execution/wire/session-inbox-wire.v6.d.ts +341 -0
  213. package/dist/src/execution/wire/session-inbox-wire.v6.js +1 -0
  214. package/dist/src/execution/workflow-entry.js +1 -1
  215. package/dist/src/execution/workflow-runtime.js +1 -1
  216. package/dist/src/execution/workflow-steps.js +1 -1
  217. package/dist/src/harness/emission-state.js +1 -1
  218. package/dist/src/harness/session-limit-continuation.d.ts +5 -5
  219. package/dist/src/harness/session-limit-continuation.js +1 -1
  220. package/dist/src/harness/session-limit-enforcement.d.ts +4 -4
  221. package/dist/src/harness/session-limit-enforcement.js +1 -1
  222. package/dist/src/harness/session-usage-limits.d.ts +48 -0
  223. package/dist/src/harness/session-usage-limits.js +1 -0
  224. package/dist/src/harness/tool-loop.js +2 -2
  225. package/dist/src/harness/turn-client-context.d.ts +9 -0
  226. package/dist/src/harness/turn-client-context.js +1 -0
  227. package/dist/src/harness/turn-tag-state.d.ts +17 -20
  228. package/dist/src/harness/turn-tag-state.js +1 -1
  229. package/dist/src/harness/types.d.ts +5 -0
  230. package/dist/src/harness/workflow-tool-runs.d.ts +0 -1
  231. package/dist/src/harness/workflow-tool-runs.js +1 -1
  232. package/dist/src/internal/application/build-output-environment.d.ts +1 -0
  233. package/dist/src/internal/application/build-output-environment.js +1 -1
  234. package/dist/src/internal/application/package.js +1 -1
  235. package/dist/src/internal/application/paths.js +1 -1
  236. package/dist/src/internal/authored-definition/core.js +1 -1
  237. package/dist/src/internal/authored-definition/schema-backed.js +1 -1
  238. package/dist/src/internal/eve-project-root.d.ts +8 -0
  239. package/dist/src/internal/eve-project-root.js +1 -0
  240. package/dist/src/internal/invocation/workflow-execution.js +1 -1
  241. package/dist/src/internal/mcp/streamable-http-server.d.ts +29 -1
  242. package/dist/src/internal/mcp/streamable-http-server.js +1 -1
  243. package/dist/src/internal/nitro/host/build-application.js +1 -1
  244. package/dist/src/internal/nitro/host/create-application-nitro.d.ts +1 -0
  245. package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
  246. package/dist/src/internal/nitro/host/types.d.ts +2 -0
  247. package/dist/src/internal/nitro/host/vercel-build-output-config.d.ts +1 -0
  248. package/dist/src/internal/nitro/host/vercel-build-output-config.js +1 -1
  249. package/dist/src/internal/project-context.d.ts +13 -8
  250. package/dist/src/internal/project-context.js +1 -1
  251. package/dist/src/internal/vercel/build-agent-workspace.d.ts +1 -1
  252. package/dist/src/internal/vercel/build-agent-workspace.js +1 -1
  253. package/dist/src/internal/vercel/eve-service-contribution.d.ts +1 -0
  254. package/dist/src/internal/vercel/eve-service-contribution.js +1 -1
  255. package/dist/src/internal/workflow/reference.d.ts +2 -0
  256. package/dist/src/internal/workflow/reference.js +1 -0
  257. package/dist/src/internal/workflow/runtime.d.ts +6 -0
  258. package/dist/src/internal/workflow/runtime.js +1 -1
  259. package/dist/src/internal/workflow-bundle/authored-workflow-directives.d.ts +1 -3
  260. package/dist/src/internal/workflow-bundle/authored-workflow-directives.js +1 -1
  261. package/dist/src/internal/workflow-bundle/authored-workflow-modules.d.ts +1 -11
  262. package/dist/src/internal/workflow-bundle/authored-workflow-modules.js +1 -1
  263. package/dist/src/internal/workflow-bundle/builder.js +1 -1
  264. package/dist/src/internal/workflow-bundle/dynamic-tool-transform.js +1 -1
  265. package/dist/src/internal/workflow-bundle/workflow-builders.d.ts +1 -3
  266. package/dist/src/internal/workflow-bundle/workflow-builders.js +1 -1
  267. package/dist/src/internal/workflow-bundle/workflow-transformer.d.ts +1 -1
  268. package/dist/src/internal/workflow-bundle/workflow-transformer.js +2 -2
  269. package/dist/src/protocol/message.d.ts +3 -2
  270. package/dist/src/public/channels/mcp.js +1 -1
  271. package/dist/src/public/channels/slack/activity-plan.d.ts +4 -0
  272. package/dist/src/public/channels/slack/activity-plan.js +1 -0
  273. package/dist/src/public/channels/slack/activity.d.ts +45 -2
  274. package/dist/src/public/channels/slack/activity.js +2 -1
  275. package/dist/src/public/channels/slack/index.d.ts +1 -1
  276. package/dist/src/public/channels/slack/index.js +1 -1
  277. package/dist/src/public/channels/slack/slackChannel.js +1 -1
  278. package/dist/src/public/memory/index.js +1 -1
  279. package/dist/src/public/models/openai/chatgpt/model.js +2 -2
  280. package/dist/src/public/models/openai/chatgpt/transport.js +1 -1
  281. package/dist/src/public/nuxt/index.js +1 -1
  282. package/dist/src/public/nuxt/module.d.ts +3 -2
  283. package/dist/src/public/nuxt/module.js +1 -1
  284. package/dist/src/public/sandbox/vercel-sandbox.d.ts +9 -5
  285. package/dist/src/public/sandbox/vercel.d.ts +1 -1
  286. package/dist/src/public/sandbox/vercel.js +1 -1
  287. package/dist/src/public/tools/index.d.ts +3 -1
  288. package/dist/src/public/tools/index.js +1 -1
  289. package/dist/src/runtime/resolve-agent.js +1 -1
  290. package/dist/src/runtime/subagents/workflow.js +1 -1
  291. package/dist/src/self-modification/agent.d.ts +22 -0
  292. package/dist/src/self-modification/agent.js +1 -0
  293. package/dist/src/self-modification/extension/classify-registry-item.d.ts +19 -0
  294. package/dist/src/self-modification/extension/classify-registry-item.js +1 -0
  295. package/dist/src/self-modification/extension/eve-add.d.ts +56 -0
  296. package/dist/src/self-modification/extension/eve-add.js +2 -0
  297. package/dist/src/self-modification/extension/extension.d.ts +2 -0
  298. package/dist/src/self-modification/extension/extension.js +1 -0
  299. package/dist/src/self-modification/extension/instructions.d.ts +4 -0
  300. package/dist/src/self-modification/extension/instructions.js +23 -0
  301. package/dist/src/self-modification/extension/source-lock.d.ts +2 -0
  302. package/dist/src/self-modification/extension/source-lock.js +1 -0
  303. package/dist/src/self-modification/extension/tools/edit_file.d.ts +16 -0
  304. package/dist/src/self-modification/extension/tools/edit_file.js +1 -0
  305. package/dist/src/self-modification/extension/tools/registry_add.d.ts +52 -0
  306. package/dist/src/self-modification/extension/tools/registry_add.js +1 -0
  307. package/dist/src/self-modification/extension/tools/search_models.d.ts +22 -0
  308. package/dist/src/self-modification/extension/tools/search_models.js +1 -0
  309. package/dist/src/self-modification/extension/tools/search_registry.d.ts +103 -0
  310. package/dist/src/self-modification/extension/tools/search_registry.js +1 -0
  311. package/dist/src/self-modification/filesystem.d.ts +6 -0
  312. package/dist/src/self-modification/filesystem.js +1 -0
  313. package/dist/src/self-modification/sandbox.d.ts +2 -0
  314. package/dist/src/self-modification/sandbox.js +1 -0
  315. package/dist/src/services/dev-client/target.d.ts +3 -1
  316. package/dist/src/setup/boxes/select-model.d.ts +3 -21
  317. package/dist/src/setup/boxes/select-model.js +1 -1
  318. package/dist/src/setup/cli/prompt-ui.js +4 -4
  319. package/dist/src/setup/cli/select-component.d.ts +1 -1
  320. package/dist/src/setup/cli/select-component.js +1 -1
  321. package/dist/src/setup/flows/model.d.ts +3 -0
  322. package/dist/src/setup/flows/model.js +1 -1
  323. package/dist/src/setup/prompter.js +1 -1
  324. package/dist/src/setup/scaffold/create/project.js +1 -1
  325. package/dist/src/setup/scaffold/update/web-options.js +1 -1
  326. package/dist/src/shared/action-types.d.ts +35 -22
  327. package/dist/src/shared/action-types.js +1 -1
  328. package/dist/src/shared/agent-definition.d.ts +13 -0
  329. package/dist/src/shared/agent-turn-outcome.d.ts +2 -0
  330. package/dist/src/shared/agent-turn-outcome.js +1 -1
  331. package/dist/src/shared/extension-package-contract.d.ts +2 -0
  332. package/dist/src/shared/extension-package-contract.js +1 -1
  333. package/dist/src/shared/gateway-model-catalog.d.ts +21 -0
  334. package/dist/src/shared/gateway-model-catalog.js +1 -0
  335. package/dist/src/shared/sandbox-network-policy.d.ts +1 -1
  336. package/dist/src/shared/token-usage.d.ts +11 -15
  337. package/dist/src/shared/token-usage.js +1 -1
  338. package/dist/src/shared/workflow-tool-context.d.ts +2 -0
  339. package/dist/src/shared/workflow-tool-context.js +1 -0
  340. package/dist/src/subagents/callback-route.js +1 -1
  341. package/dist/src/subagents/event-proxy-step.js +1 -1
  342. package/dist/src/subagents/start-remote.js +1 -1
  343. package/dist/src/subagents/token-budget.js +1 -1
  344. package/dist/src/svelte/index.js +1 -1
  345. package/dist/src/svelte/use-eve-agent.js +1 -1
  346. package/dist/src/tasks/types.d.ts +18 -1
  347. package/dist/src/tasks/types.js +1 -1
  348. package/dist/src/tools/behavior.d.ts +5 -0
  349. package/dist/src/tools/definition.d.ts +16 -12
  350. package/dist/src/tools/definition.js +1 -1
  351. package/dist/src/tools/dynamic.d.ts +2 -2
  352. package/dist/src/tools/provided/sleep.d.ts +4 -4
  353. package/dist/src/tools/provided/sleep.js +1 -1
  354. package/dist/src/tools/task.d.ts +28 -80
  355. package/dist/src/tools/task.js +1 -1
  356. package/dist/src/tools/workflow-definition.d.ts +60 -0
  357. package/dist/src/tools/workflow-definition.js +1 -0
  358. package/dist/src/vue/index.js +1 -1
  359. package/dist/src/vue/use-eve-agent.js +1 -1
  360. package/docs/agent-config.md +24 -19
  361. package/docs/channels/eve.mdx +1 -1
  362. package/docs/channels/mcp.mdx +25 -3
  363. package/docs/concepts/built-in-tools.md +1 -1
  364. package/docs/concepts/execution-model-and-durability.mdx +13 -2
  365. package/docs/concepts/sessions-runs-and-streaming.md +9 -1
  366. package/docs/guides/client/messages.mdx +1 -1
  367. package/docs/guides/client/streaming.mdx +1 -1
  368. package/docs/guides/deployment/vercel.mdx +3 -1
  369. package/docs/guides/frontend/overview.mdx +1 -1
  370. package/docs/memory/overview.mdx +41 -12
  371. package/docs/reference/cli.md +31 -33
  372. package/docs/reference/meta.json +1 -4
  373. package/docs/reference/telemetry.md +56 -0
  374. package/docs/reference/typescript-api.md +38 -35
  375. package/docs/sandbox.mdx +1 -1
  376. package/docs/tools/overview.mdx +59 -18
  377. package/docs/tools/workflows.mdx +146 -70
  378. package/package.json +38 -19
  379. package/dist/src/compiled/@vercel/sandbox-delete/api-client/index.d.ts +0 -2
  380. package/dist/src/compiled/@vercel/sandbox-delete/index.js +0 -9
  381. package/dist/src/compiled/@vercel/sandbox-stable/LICENSE +0 -201
  382. package/dist/src/compiled/@vercel/sandbox-stable/_async-retry.d.ts +0 -8
  383. package/dist/src/compiled/@vercel/sandbox-stable/_workflow-serde.d.ts +0 -5
  384. package/dist/src/compiled/@vercel/sandbox-stable/api-client/api-client.d.ts +0 -1456
  385. package/dist/src/compiled/@vercel/sandbox-stable/api-client/api-error.d.ts +0 -29
  386. package/dist/src/compiled/@vercel/sandbox-stable/api-client/base-client.d.ts +0 -39
  387. package/dist/src/compiled/@vercel/sandbox-stable/api-client/file-writer.d.ts +0 -66
  388. package/dist/src/compiled/@vercel/sandbox-stable/api-client/index.d.ts +0 -2
  389. package/dist/src/compiled/@vercel/sandbox-stable/api-client/validators.d.ts +0 -899
  390. package/dist/src/compiled/@vercel/sandbox-stable/api-client/with-retry.d.ts +0 -10
  391. package/dist/src/compiled/@vercel/sandbox-stable/auth/error.d.ts +0 -15
  392. package/dist/src/compiled/@vercel/sandbox-stable/auth/file.d.ts +0 -18
  393. package/dist/src/compiled/@vercel/sandbox-stable/auth/index.d.ts +0 -6
  394. package/dist/src/compiled/@vercel/sandbox-stable/auth/oauth.d.ts +0 -111
  395. package/dist/src/compiled/@vercel/sandbox-stable/auth/poll-for-token.d.ts +0 -28
  396. package/dist/src/compiled/@vercel/sandbox-stable/auth/project.d.ts +0 -40
  397. package/dist/src/compiled/@vercel/sandbox-stable/command.d.ts +0 -292
  398. package/dist/src/compiled/@vercel/sandbox-stable/constants.d.ts +0 -5
  399. package/dist/src/compiled/@vercel/sandbox-stable/execution-context.d.ts +0 -116
  400. package/dist/src/compiled/@vercel/sandbox-stable/filesystem.d.ts +0 -258
  401. package/dist/src/compiled/@vercel/sandbox-stable/index.d.ts +0 -12
  402. package/dist/src/compiled/@vercel/sandbox-stable/index.js +0 -1
  403. package/dist/src/compiled/@vercel/sandbox-stable/network-policy.d.ts +0 -169
  404. package/dist/src/compiled/@vercel/sandbox-stable/proxy.d.ts +0 -55
  405. package/dist/src/compiled/@vercel/sandbox-stable/sandbox-user.d.ts +0 -212
  406. package/dist/src/compiled/@vercel/sandbox-stable/sandbox.d.ts +0 -1216
  407. package/dist/src/compiled/@vercel/sandbox-stable/session.d.ts +0 -433
  408. package/dist/src/compiled/@vercel/sandbox-stable/snapshot.d.ts +0 -229
  409. package/dist/src/compiled/@vercel/sandbox-stable/utils/get-credentials.d.ts +0 -21
  410. package/dist/src/compiled/@vercel/sandbox-stable/utils/paginator.d.ts +0 -16
  411. package/dist/src/compiled/@vercel/sandbox-stable/utils/resolveSignal.d.ts +0 -15
  412. package/dist/src/compiled/@vercel/sandbox-stable/utils/sandbox-snapshot.d.ts +0 -11
  413. package/dist/src/compiled/@vercel/sandbox-stable/utils/types.d.ts +0 -11
  414. package/dist/src/compiled/_chunks/node/decode_jwt-Col8JOnf.js +0 -7
  415. package/dist/src/compiled/_chunks/node/version-BYHw-SDY.js +0 -1
  416. package/dist/src/compiled/_chunks/node/version-DH6yRy-M.js +0 -1
  417. package/dist/src/compiled/_chunks/workflow/dist-CgbVZs5l.js +0 -40
  418. package/dist/src/compiled/_chunks/workflow/dist-DjojkP5e.js +0 -3
  419. package/dist/src/compiled/_chunks/workflow/frames-CZ9eHShe.js +0 -3
  420. package/dist/src/compiled/_chunks/workflow/run-DzyAoGh4.js +0 -1
  421. package/dist/src/compiled/_chunks/workflow/sleep-3_A5uOp-.js +0 -1
  422. package/dist/src/compiled/_chunks/workflow/wait-until-BtySPYD0.js +0 -15
  423. package/dist/src/harness/session-token-limits.d.ts +0 -41
  424. package/dist/src/harness/session-token-limits.js +0 -1
  425. package/dist/src/harness/turn-sleep.d.ts +0 -12
  426. package/dist/src/harness/turn-sleep.js +0 -1
  427. package/dist/src/internal/agent-workspace.d.ts +0 -15
  428. package/dist/src/internal/agent-workspace.js +0 -1
  429. package/dist/src/node_modules/.pnpm/@clack_core@1.3.1/node_modules/@clack/core/dist/index.js +0 -16
  430. package/dist/src/node_modules/.pnpm/fast-string-truncated-width@3.0.3/node_modules/fast-string-truncated-width/dist/index.js +0 -1
  431. package/dist/src/node_modules/.pnpm/fast-string-truncated-width@3.0.3/node_modules/fast-string-truncated-width/dist/utils.js +0 -1
  432. package/dist/src/node_modules/.pnpm/fast-string-width@3.0.2/node_modules/fast-string-width/dist/index.js +0 -1
  433. package/dist/src/node_modules/.pnpm/fast-wrap-ansi@0.2.2/node_modules/fast-wrap-ansi/lib/main.js +0 -5
  434. package/dist/src/node_modules/.pnpm/sisteransi@1.0.5/node_modules/sisteransi/src/index.js +0 -1
  435. package/dist/src/public/workflow/index.d.ts +0 -5
  436. package/dist/src/public/workflow/index.js +0 -1
  437. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/LICENSE +0 -0
  438. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/_async-retry.d.ts +0 -0
  439. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/_workflow-serde.d.ts +0 -0
  440. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/api-client/api-error.d.ts +0 -0
  441. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/api-client/base-client.d.ts +0 -0
  442. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/api-client/file-writer.d.ts +0 -0
  443. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/api-client/with-retry.d.ts +0 -0
  444. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/auth/error.d.ts +0 -0
  445. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/auth/file.d.ts +0 -0
  446. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/auth/index.d.ts +0 -0
  447. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/auth/oauth.d.ts +0 -0
  448. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/auth/poll-for-token.d.ts +0 -0
  449. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/auth/project.d.ts +0 -0
  450. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/command.d.ts +0 -0
  451. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/execution-context.d.ts +0 -0
  452. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/filesystem.d.ts +0 -0
  453. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/network-policy.d.ts +0 -0
  454. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/proxy.d.ts +0 -0
  455. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/sandbox-user.d.ts +0 -0
  456. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/session.d.ts +0 -0
  457. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/snapshot.d.ts +0 -0
  458. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/utils/get-credentials.d.ts +0 -0
  459. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/utils/paginator.d.ts +0 -0
  460. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/utils/resolveSignal.d.ts +0 -0
  461. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/utils/sandbox-snapshot.d.ts +0 -0
  462. /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/utils/types.d.ts +0 -0
@@ -1,2 +1,2 @@
1
- import{formatRegistrySessionResult,registryItemProgress,registryResultTone}from"./registry-result-message.js";import{createTuiPrompter}from"./tui-prompter.js";import{runDeployFlow}from"#setup/flows/deploy.js";import{WizardCancelledError}from"#setup/step.js";import{runLoginFlow}from"#setup/flows/login.js";import{HumanActionRequiredError}from"#setup/human-action.js";import{runInstallVercelCliFlow}from"#setup/flows/install-vercel-cli.js";import{runModelFlow}from"#setup/flows/model.js";import{runProviderFlow}from"#setup/flows/provider.js";import{RegistryFlowFailedError,runRegistryFlow}from"#setup/flows/registry.js";const SETUP_FLOW_CONFIG={"vc:install":{title:`Install the Vercel CLI`,indicator:`pulse`},"vc:login":{title:`Log in to Vercel`,indicator:`pulse`},model:{title:`Configure the agent model`,indicator:`pulse`},add:{title:`Add to your agent`,indicator:`pulse`},deploy:{title:`Deploy to Vercel`,indicator:`spinner`}};function muteableRenderer(e,t,n){return{readSelect:n=>t()?Promise.resolve(void 0):e.readSelect(n),readEditableSelect:n=>t()?Promise.resolve(void 0):e.readEditableSelect(n),readProviderPicker:n=>t()?Promise.resolve(void 0):e.readProviderPicker(n),readModelEditor:n=>t()?Promise.resolve(void 0):e.readModelEditor(n),readText:n=>t()?Promise.resolve(void 0):e.readText(n),readAcknowledge:n=>t()?Promise.resolve():e.readAcknowledge(n),readChoice:n=>t()?{choice:Promise.resolve(void 0),close:()=>{}}:e.readChoice(n),setNavigation:n=>{t()||e.setNavigation?.(n)},setStatus:n=>{t()||e.setStatus(n)},renderLine:(n,r)=>{(!t()||r===`warning`||r===`error`)&&e.renderLine(n,r)},replaceContent:n=>{t()||e.replaceContent?.(n)},renderOutput:n=>{t()||e.renderOutput(n)},withInheritedStdio:t=>e.withInheritedStdio(t),withExclusiveTerminal:e=>n?.(e)??e()}}async function runTuiSetupCommand(e){let{command:t}=e,n=!1,i=new AbortController,o=muteableRenderer(e.renderer,()=>n,e.withExclusiveTerminal),s=(e.createPrompter??createTuiPrompter)(o),cancelActiveRegistryItem,runRegistryItem=async e=>{let t=new AbortController;cancelActiveRegistryItem=()=>t.abort(new WizardCancelledError);try{return await e(AbortSignal.any([i.signal,t.signal]))}finally{cancelActiveRegistryItem=void 0}},c=e.renderer.waitForInterrupt(),l=executeSetupCommand(e,s,o,i.signal,runRegistryItem),u=l.then(e=>({kind:`outcome`,value:e}));try{for(;;){let r=!1;try{let e=await Promise.race([u,c.promise.then(e=>({kind:`interrupt`,interrupt:e}))]);if(e.kind===`outcome`)return e.value;if(t===`add`&&e.interrupt===`escape`&&cancelActiveRegistryItem!==void 0)cancelActiveRegistryItem(),r=!0;else{n=!0,i.abort(new WizardCancelledError);let e=await l;return e.partial===!0?e:{...e,message:`/${t} interrupted.`,tone:`error`,preserveFlowDiagnostics:!0}}}finally{c.dispose()}r&&(c=e.renderer.waitForInterrupt())}}finally{e.renderer.setStatus(void 0)}}async function executeSetupCommand(r,s,d,f,p){let{command:m,appRoot:h}=r,g={runInstallVercelCliFlow,runLoginFlow,runModelFlow,runRegistryFlow,runDeployFlow,...r.flows};try{switch(m){case`vc:install`:return installVercelCliResultMessage(await g.runInstallVercelCliFlow({appRoot:h,prompter:s,signal:f}));case`vc:login`:return loginResultMessage(await g.runLoginFlow({appRoot:h,prompter:s,signal:f}));case`model`:{let pickProvider=e=>d.readProviderPicker(e),e={appRoot:h,prompter:s,signal:f,chatGptAccountLabel:r.chatGptAccountLabel,deps:{pickModelSettings:e=>d.readModelEditor(e),runProviderFlow:e=>runProviderFlow({...e,picker:pickProvider,recoverHumanAction:e=>recoverVercelHumanAction(e,g,{appRoot:h,prompter:s,signal:f})})}};r.initialModelStep!==void 0&&(e.initialStep=r.initialModelStep),e.withExclusiveTerminal=e=>d.withInheritedStdio(()=>r.withExclusiveTerminal?.(e)??e());let t=await g.runModelFlow(e);if(t.kind===`cancelled`)return{message:t.discardedDraft===!0?`/model dismissed. Drafted changes were discarded; Done commits them.`:`/model dismissed.`,cancelled:!0,preserveFlowDiagnostics:!1};let n=[];t.modelMessage!==void 0&&n.push(t.modelMessage),t.providerSelection!==void 0&&n.push(providerSelectionMessage(t.providerSelection));let i={message:n.join(`
1
+ import{formatRegistrySessionResult,registryItemProgress,registryResultTone}from"./registry-result-message.js";import{createTuiPrompter}from"./tui-prompter.js";import{runDeployFlow}from"#setup/flows/deploy.js";import{WizardCancelledError}from"#setup/step.js";import{runLoginFlow}from"#setup/flows/login.js";import{HumanActionRequiredError}from"#setup/human-action.js";import{runInstallVercelCliFlow}from"#setup/flows/install-vercel-cli.js";import{runModelFlow}from"#setup/flows/model.js";import{runProviderFlow}from"#setup/flows/provider.js";import{RegistryFlowFailedError,runRegistryFlow}from"#setup/flows/registry.js";const SETUP_FLOW_CONFIG={"vc:install":{title:`Install the Vercel CLI`,indicator:`pulse`},"vc:login":{title:`Log in to Vercel`,indicator:`pulse`},model:{title:`Configure the agent model`,indicator:`pulse`},add:{title:`Add to your agent`,indicator:`pulse`},deploy:{title:`Deploy to Vercel`,indicator:`spinner`}};function muteableRenderer(e,t,n){return{readSelect:n=>t()?Promise.resolve(void 0):e.readSelect(n),readEditableSelect:n=>t()?Promise.resolve(void 0):e.readEditableSelect(n),readProviderPicker:n=>t()?Promise.resolve(void 0):e.readProviderPicker(n),readModelEditor:n=>t()?Promise.resolve(void 0):e.readModelEditor(n),readText:n=>t()?Promise.resolve(void 0):e.readText(n),readAcknowledge:n=>t()?Promise.resolve():e.readAcknowledge(n),readChoice:n=>t()?{choice:Promise.resolve(void 0),close:()=>{}}:e.readChoice(n),setNavigation:n=>{t()||e.setNavigation?.(n)},setStatus:n=>{t()||e.setStatus(n)},renderLine:(n,r)=>{(!t()||r===`warning`||r===`error`)&&e.renderLine(n,r)},replaceContent:n=>{t()||e.replaceContent?.(n)},renderOutput:n=>{t()||e.renderOutput(n)},withInheritedStdio:t=>e.withInheritedStdio(t),withExclusiveTerminal:e=>n?.(e)??e()}}async function runTuiSetupCommand(e){let{command:t}=e,n=!1,i=new AbortController,o=muteableRenderer(e.renderer,()=>n,e.withExclusiveTerminal),s=(e.createPrompter??createTuiPrompter)(o),cancelActiveRegistryItem,runRegistryItem=async e=>{let t=new AbortController;cancelActiveRegistryItem=()=>t.abort(new WizardCancelledError);try{return await e(AbortSignal.any([i.signal,t.signal]))}finally{cancelActiveRegistryItem=void 0}},c=e.renderer.waitForInterrupt(),l=executeSetupCommand(e,s,o,i.signal,runRegistryItem),u=l.then(e=>({kind:`outcome`,value:e}));try{for(;;){let r=!1;try{let e=await Promise.race([u,c.promise.then(e=>({kind:`interrupt`,interrupt:e}))]);if(e.kind===`outcome`)return e.value;if(t===`add`&&e.interrupt===`escape`&&cancelActiveRegistryItem!==void 0)cancelActiveRegistryItem(),r=!0;else{n=!0,i.abort(new WizardCancelledError);let e=await l;return e.partial===!0?e:{...e,message:`/${t} interrupted.`,tone:`error`,preserveFlowDiagnostics:!0}}}finally{c.dispose()}r&&(c=e.renderer.waitForInterrupt())}}finally{e.renderer.setStatus(void 0)}}async function executeSetupCommand(r,s,d,f,p){let{command:m,appRoot:h}=r,g={runInstallVercelCliFlow,runLoginFlow,runModelFlow,runRegistryFlow,runDeployFlow,...r.flows};try{switch(m){case`vc:install`:return installVercelCliResultMessage(await g.runInstallVercelCliFlow({appRoot:h,prompter:s,signal:f}));case`vc:login`:return loginResultMessage(await g.runLoginFlow({appRoot:h,prompter:s,signal:f}));case`model`:{let pickProvider=e=>d.readProviderPicker(e),e={appRoot:r.agentRoot??h,environmentRoot:h,prompter:s,signal:f,chatGptAccountLabel:r.chatGptAccountLabel,deps:{pickModelSettings:e=>d.readModelEditor(e),runProviderFlow:e=>runProviderFlow({...e,picker:pickProvider,recoverHumanAction:e=>recoverVercelHumanAction(e,g,{appRoot:h,prompter:s,signal:f})})}};r.initialModelStep!==void 0&&(e.initialStep=r.initialModelStep),e.withExclusiveTerminal=e=>d.withInheritedStdio(()=>r.withExclusiveTerminal?.(e)??e());let t=await g.runModelFlow(e);if(t.kind===`cancelled`)return{message:t.discardedDraft===!0?`/model dismissed. Drafted changes were discarded; Done commits them.`:`/model dismissed.`,cancelled:!0,preserveFlowDiagnostics:!1};let n=[];t.modelMessage!==void 0&&n.push(t.modelMessage),t.providerSelection!==void 0&&n.push(providerSelectionMessage(t.providerSelection));let i={message:n.join(`
2
2
  `),preserveFlowDiagnostics:!1};return t.accessChanged&&(i.effect={kind:`model-access-changed`}),i}case`add`:{let i=await g.runRegistryFlow({appRoot:h,prompter:s,signal:f,initialAddress:r.initialRegistryAddress,plannerContext:r.registryPlannerContext,onItemStart:registryItemProgress(d),runItem:p});if(i.kind===`cancelled`)return{message:`/add dismissed.`,cancelled:!0,preserveFlowDiagnostics:!0};let a=i.result,o=registryResultTone(a),c=a.items.length>0||a.failures.length>0||a.outcomes!==void 0?formatRegistrySessionResult(a):`No integrations selected.`,l={message:o===`error`?`/add failed — ${c}`:c,preserveFlowDiagnostics:!0};return a.cancelled===!0?(l.partial=!0,l.tone=`error`):o!==void 0&&(l.tone=o),a.deployed===`production`&&(l.effect={kind:`deployed`}),l}case`deploy`:{let e=await g.runDeployFlow({appRoot:h,prompter:s,interactive:!0,signal:f});return e.kind===`cancelled`?{message:`/deploy dismissed.`,preserveFlowDiagnostics:!0}:e.kind===`needs-link`?{message:`Not linked to a Vercel project — run /model to connect one first.`,preserveFlowDiagnostics:!0}:e.kind===`local-model`?{message:`ChatGPT subscription models are local-only. Switch to an AI Gateway or server-authenticated model before deploying.`,preserveFlowDiagnostics:!0}:{message:e.productionUrl===void 0?`Deployed.`:`Deployed: ${e.productionUrl}`,preserveFlowDiagnostics:!0,effect:{kind:`deployed`}}}}}catch(t){if(t instanceof WizardCancelledError)return{message:`/${m} dismissed.`,cancelled:!0,preserveFlowDiagnostics:m!==`model`};let n=t instanceof RegistryFlowFailedError?t.cause:t,r=await vercelCliUpgradeOutcome(n,m,g,{appRoot:h,prompter:s,signal:f});if(r!==void 0)return withRegistryResults(r,t);let i=vercelActionOutcome(n,m);return i===void 0?t instanceof RegistryFlowFailedError?{message:`${formatRegistrySessionResult(t.completed)}\n\n${t.message}`,partial:!0,tone:`error`,preserveFlowDiagnostics:!0}:{message:`/${m} failed: ${t instanceof Error?t.message:String(t)}`,tone:`error`,preserveFlowDiagnostics:!0}:withRegistryResults(i,t)}}async function recoverVercelHumanAction(e,t,n){let r=e.action.kind;if(r!==`vercel-cli-missing`&&r!==`vercel-cli-upgrade`&&r!==`vercel-login`&&r!==`vercel-forbidden`)throw e;let i=r===`vercel-cli-missing`?{label:`Install Vercel CLI`,message:`The Vercel CLI is required. Install it now?`}:r===`vercel-cli-upgrade`?{label:`Upgrade Vercel CLI`,message:`Your Vercel CLI needs an update. Upgrade it now?`}:{label:r===`vercel-forbidden`?`Re-authenticate with Vercel`:`Log in to Vercel`,message:r===`vercel-forbidden`?`Vercel denied access to that team. Re-authenticate and continue?`:`You need to log in to Vercel to continue.`},a;try{a=await n.prompter.select({message:i.message,options:[{value:`repair`,label:`${i.label} and continue`},{value:`cancel`,label:`Choose another option`}],initialValue:`repair`})}catch{return`cancel`}if(a===`cancel`)return`cancel`;if(r===`vercel-cli-missing`||r===`vercel-cli-upgrade`){let e=await t.runInstallVercelCliFlow({appRoot:n.appRoot,prompter:n.prompter,signal:n.signal,upgrade:r===`vercel-cli-upgrade`});return e.kind===`installed`||e.kind===`already`?`retry`:(n.prompter.log.warning(e.kind===`failed`&&e.reason!==void 0?`Couldn't ${r===`vercel-cli-upgrade`?`upgrade`:`install`} the Vercel CLI: ${e.reason}`:`Couldn't ${r===`vercel-cli-upgrade`?`upgrade`:`install`} the Vercel CLI.`),`cancel`)}let o=await t.runLoginFlow({appRoot:n.appRoot,prompter:n.prompter,signal:n.signal,force:r===`vercel-forbidden`});return n.prompter.replaceContent?.(),o.kind===`logged-in`||o.kind===`already`?`retry`:`cancel`}function withRegistryResults(t,n){return n instanceof RegistryFlowFailedError?{...t,message:`${formatRegistrySessionResult(n.completed)}\n\n${t.message}`,partial:!0,tone:`error`,preserveFlowDiagnostics:!0}:t}async function vercelCliUpgradeOutcome(e,t,n,r){if(!(e instanceof HumanActionRequiredError)||e.action.kind!==`vercel-cli-upgrade`)return;let i;try{i=await r.prompter.select({message:`Your Vercel CLI needs an update to list your teams. Upgrade now?`,options:[{value:`upgrade`,label:`Upgrade Vercel CLI`,description:`Run the Vercel CLI's native upgrader`},{value:`later`,label:`Not now`}],initialValue:`upgrade`})}catch{i=`later`}if(i===`later`)return{message:`The Vercel CLI needs an update — run \`vercel upgrade\`, then retry /${t}.`,tone:`error`,preserveFlowDiagnostics:!0};let a;try{a=await n.runInstallVercelCliFlow({appRoot:r.appRoot,prompter:r.prompter,signal:r.signal,upgrade:!0})}catch(e){return{message:vercelCliUpgradeFailureMessage(t,errorMessage(e)),tone:`error`,preserveFlowDiagnostics:!0}}switch(a.kind){case`installed`:return{message:`Upgraded the Vercel CLI. Retry /${t}.`,tone:`error`,preserveFlowDiagnostics:!1};case`failed`:return{message:vercelCliUpgradeFailureMessage(t,a.reason),tone:`error`,preserveFlowDiagnostics:!0};case`cancelled`:return{message:`Vercel CLI upgrade cancelled — run \`vercel upgrade\`, then retry /${t}.`,tone:`error`,preserveFlowDiagnostics:!0};case`already`:return{message:`The Vercel CLI is already up to date. Retry /${t}.`,tone:`error`,preserveFlowDiagnostics:!1}}}function errorMessage(e){let t=(e instanceof Error?e.message:String(e)).replace(/\s+/gu,` `).trim();return t.length<=240?t:`${t.slice(0,239)}…`}function vercelCliUpgradeFailureMessage(e,t){return`Couldn't upgrade the Vercel CLI${t===void 0||t===``?``:` (${t})`} — run \`vercel upgrade\`, then retry /${e}.`}function vercelActionOutcome(e,t){if(!(e instanceof HumanActionRequiredError))return;let n=vercelActionMessage(e.action.kind,t);return n===void 0?void 0:{message:n,tone:`error`,preserveFlowDiagnostics:!0}}function vercelActionMessage(e,t){switch(e){case`vercel-login`:return`You're not logged in to Vercel — run /vc:login, then retry /${t}.`;case`vercel-forbidden`:return`Vercel denied access to that team — run /vc:login to re-authenticate (for example to complete SSO), or pick a team you can access, then retry /${t}.`;case`vercel-cli-missing`:return`The Vercel CLI isn't installed — run /vc:install to install it, then retry /${t}.`;case`vercel-cli-upgrade`:return`The Vercel CLI needs an update — run \`vercel upgrade\`, then retry /${t}.`;default:return}}function installVercelCliResultMessage(e){switch(e.kind){case`cancelled`:return{message:`/vc:install dismissed.`,preserveFlowDiagnostics:!1};case`already`:return{message:`The Vercel CLI is already installed.`,preserveFlowDiagnostics:!1};case`failed`:return{message:"Couldn't install the Vercel CLI — install it manually with `npm i -g vercel@latest`.",preserveFlowDiagnostics:!0};case`installed`:return{message:`Installed the Vercel CLI. Run /vc:login next.`,preserveFlowDiagnostics:!1,effect:{kind:`refresh-identity`}}}}function loginResultMessage(e){switch(e.kind){case`cancelled`:return{message:`/vc:login dismissed.`,preserveFlowDiagnostics:!1};case`already`:return{message:`You're already logged in to Vercel.`,preserveFlowDiagnostics:!1};case`cli-missing`:return{message:`The Vercel CLI isn't installed — run /vc:install to install it, then retry /vc:login.`,preserveFlowDiagnostics:!0};case`failed`:return{message:`Vercel login didn't complete — run /vc:login to try again.`,preserveFlowDiagnostics:!0};case`logged-in`:return{message:`Logged in to Vercel.`,preserveFlowDiagnostics:!1,effect:{kind:`refresh-identity`}};case`unavailable`:return{message:`Couldn't reach Vercel — check your connection, then retry /vc:login.`,preserveFlowDiagnostics:!0}}}function providerSelectionMessage(e){return e===`chatgpt`?`ChatGPT subscription selected.`:e===`ai-gateway-project`?`AI Gateway via Project selected.`:`AI Gateway via API key selected.`}export{SETUP_FLOW_CONFIG,runTuiSetupCommand};
@@ -1,10 +1,13 @@
1
+ import { Command } from "#compiled/commander/index.js";
1
2
  import { type BuildHost } from "#cli/commands/build.js";
3
+ import type { CliApplicationContext } from "#cli/application-command.js";
2
4
  import { resolveCliApplicationProject } from "#cli/application-root.js";
3
5
  import { resolveDevUiMode, resolveTuiDisplayOptions } from "#cli/dev/ui-options.js";
4
6
  import { type ResolveVerifiedRemoteDevelopmentClient, type RunAcpServer } from "#cli/acp/command.js";
5
7
  import type { RunDevelopmentTuiInput } from "#cli/dev/tui/tui.js";
6
8
  import type { EvalCliOptions } from "#evals/cli/eval.js";
7
9
  import { type InvokeCliRuntimeDependencies } from "#cli/invoke/command.js";
10
+ import { type EveCliTelemetry } from "#cli/telemetry/index.js";
8
11
  import type { DevelopmentServer, DevelopmentServerOptions, ProductionServerHandle } from "#internal/nitro/host/types.js";
9
12
  export { resolveDevUiMode, resolveTuiDisplayOptions };
10
13
  interface CliLogger {
@@ -35,5 +38,6 @@ interface CliRuntimeDependencies {
35
38
  }): Promise<ProductionServerHandle>;
36
39
  }
37
40
  type CliRuntimeOverrides = Partial<CliRuntimeDependencies>;
41
+ export declare function createCliProgram(logger: CliLogger, runtime: CliRuntimeOverrides, applicationContext: CliApplicationContext, telemetry: Pick<EveCliTelemetry, "trackDevContext">): Command;
38
42
  /** Runs the eve CLI entrypoint. */
39
43
  export declare function runCli(argv?: string[], logger?: CliLogger, runtime?: CliRuntimeOverrides): Promise<void>;
@@ -1,4 +1,4 @@
1
- import{createLogger}from"#internal/logging.js";import{Command,CommanderError,InvalidArgumentError,Option}from"#compiled/commander/index.js";import{agentCommand}from"#cli/agent-command.js";import{parseDevelopmentHeaderOption,resolveDevelopmentUrlTarget}from"#cli/dev/url-target.js";import{parseDevelopmentServerUrl}from"#cli/dev/url.js";import{FORCED_EXIT_BACKSTOP_MS,installShutdownSignal,waitForShutdownSignal}from"#cli/shutdown.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{createCliTheme,renderCliTaggedLine}from"#cli/ui/output.js";import{resolveEveProjectContext}from"#internal/project-context.js";import{isCodingAgentLaunch}from"#cli/agent-detection.js";import{eveCliBanner}from"#cli/banner.js";import{startCliLiveRow}from"#cli/ui/live-row.js";import{registerBuildCommand}from"#cli/commands/build.js";import{resolveApplicationRoot}from"#internal/application/paths.js";import{findCliApplicationRoot,resolveCliApplicationProject}from"#cli/application-root.js";import{registerIntegrationCommands}from"#cli/commands/register-integration-commands.js";import{registerProjectCommands}from"#cli/commands/register-project-commands.js";import{registerRegistryCommands}from"#cli/commands/register-registry-commands.js";import{runInteractiveDevelopmentUi}from"#cli/dev/run-interactive-ui.js";import{resolveDevUiMode,resolveTuiDisplayOptions}from"#cli/dev/ui-options.js";import{registerAcpCommand}from"#cli/acp/command.js";import{waitForServerOrStop,waitForUiOrServer}from"#cli/dev/wait-for-ui.js";import{registerRuntimeInvokeCommand}from"#cli/invoke/command.js";import{parseAgentNamesOption,parseContextSizeOption,parseDisplayMode,parseLogsMode,parsePortOption,parseReasoningOption,parseStatsMode}from"#cli/option-parsers.js";const devBootLog=createLogger(`dev.boot`);function createDevBootProgressReporter(e){return t=>{switch(t.type){case`phase-started`:e?.update(`Building your agent`,t.phase),devBootLog.debug(t.phase);return;case`phase-finished`:devBootLog.debug(`${t.phase} finished`,{ms:t.elapsedMs});return;case`before-first-paint`:e?.stop();return;default:return t}}}async function loadPrintApplicationInfo(){return(await import(`#cli/commands/info.js`)).printApplicationInfo}async function loadDevelopmentTuiModule(){return await import(`#cli/dev/tui/tui.js`)}async function loadRunEvalCommand(){return(await import(`#evals/cli/eval.js`)).runEvalCommand}async function loadStartHost(){return(await import(`#cli/dev/local-server-process.js`)).createDevelopmentServer}const loadIsActiveDevelopmentServerForApp=async()=>(await import(`#internal/nitro/host.js`)).isActiveDevelopmentServerForApp;async function loadStartProductionHost(){return(await import(`#internal/nitro/host.js`)).startProductionServer}function hasInteractiveTerminal(){return!!(process.stdin.isTTY&&process.stdout.isTTY)}function createCliProgram(e,n,d){let f=resolveInstalledPackageInfo().version,m=new Command,h=createCliTheme();m.name(`eve`).description(`Build and run an eve application.`).version(f).showHelpAfterError().exitOverride().hook(`preAction`,(t,n)=>{let{json:r}=n.opts();[`info`,`init`].includes(n.name())&&!r&&e.log(eveCliBanner())}).configureOutput({writeErr:t=>{e.error(t.trimEnd())},writeOut:t=>{e.log(t.trimEnd())}}),agentCommand(m.command(`channels`).description(`Manage user-authored channels in the current project.`).command(`list`),d).description(`List user-authored channels in the current project.`).option(`--json`,`Output as JSON`).action(async t=>{let{runChannelsListCommand:n}=await import(`#cli/commands/channels.js`);await n(e,d.project,t)}),registerIntegrationCommands({program:m,logger:e,applicationContext:d});let g=m.command(`extension`).description(`Create and build reusable eve extension packages.`);g.command(`init [target]`).description(`Create a new eve extension package.`).option(`-y, --yes`,`Accepted for compatibility; has no effect`).action(async(t,n)=>{n.yes&&e.error(`warning: --yes has no effect for eve extension init.`);let{runExtensionInitCommand:r}=await import(`#cli/commands/extension-init.js`);await r(e,d.root,t)}),g.command(`build`).description(`Build the current package as an eve extension.`).action(async()=>{let{loadDevelopmentEnvironmentFiles:t}=await import(`#cli/dev/environment.js`);await t(d.root);let{runExtensionBuildCommand:n}=await import(`#cli/commands/extension-build.js`);await n(e,d.root)}),registerRegistryCommands({program:m,logger:e,applicationContext:d}),m.command(`init [target]`).description(`Create a new eve agent, or add one to an existing project directory.`).option(`--channel-web-nextjs`,`Add the Web Chat application (Next.js)`).option(`--agents <names>`,`Create an agents/ workspace with comma-separated agent names`,parseAgentNamesOption).option(`--model <model>`,`Set the agent model (provider/model-id)`).option(`--reasoning <effort>`,`Set reasoning (provider-default|none|minimal|low|medium|high|xhigh)`,parseReasoningOption).option(`-y, --yes`,`Accepted for compatibility; has no effect`).action(async(t,n)=>{n.yes&&e.error(`warning: --yes has no effect for eve init.`);let{runInitCommand:r}=await import(`#cli/commands/init.js`);await r(e,d.root,t,{agents:n.agents,channelWebNextjs:n.channelWebNextjs,model:n.model,reasoning:n.reasoning})}),agentCommand(m.command(`set`),d).description(`Change root agent model settings.`).option(`--model <model>`,`Set the agent model (provider/model-id)`).option(`--reasoning <effort>`,`Set reasoning (provider-default|none|minimal|low|medium|high|xhigh)`,parseReasoningOption).action(async t=>{let{runSetCommand:n}=await import(`#cli/commands/set.js`);await n(e,d.root,t)}),registerProjectCommands({program:m,logger:e,applicationContext:d}),registerBuildCommand({applicationContext:d,buildHost:n.buildHost,logger:e,program:m}),agentCommand(m.command(`start`),d).description(`Start a built eve application.`).option(`--host <host>`,`Host interface to bind`).option(`--port <port>`,`Port to listen on (defaults to $PORT, then 3000)`,parsePortOption).action(async t=>{let{loadDevelopmentEnvironmentFiles:r}=await import(`#cli/dev/environment.js`);await r(d.root);let i=await(n.startProductionHost??await loadStartProductionHost())(d.root,{host:t.host,port:t.port});e.log(renderCliTaggedLine(h,{message:`server listening at ${i.url}`,tag:`start`,tone:`success`})),await waitForShutdownSignal({close:()=>i.close(),wait:()=>i.wait()})}),registerRuntimeInvokeCommand({applicationContext:d,logger:e,program:m,runtime:n}),registerAcpCommand({applicationContext:d,eveVersion:f,program:m,resolveVerifiedRemoteDevelopmentClient:n.resolveVerifiedRemoteDevelopmentClient,runAcpServer:n.runAcpServer,startHost:n.startHost}),agentCommand(m.command(`dev`),d,e=>resolveDevelopmentUrlTarget(e.opts(),e.processedArgs[0])===void 0).description(`Start the eve development server or connect to an existing URL.`).argument(`[url]`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`--host <host>`,`Host interface to bind`).option(`--port <port>`,`Port to listen on (defaults to $PORT, then 2000)`,parsePortOption).option(`-u, --url <url>`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`-H, --header <header>`,`Request header for a URL target, in "Name: value" form (repeatable)`,parseDevelopmentHeaderOption).option(`--no-ui`,`Start the server without an interactive UI`).option(`--name <name>`,`Title shown in the terminal UI (defaults to the app folder name)`).option(`--input <text>`,`Pre-fill the prompt input`).addOption(new Option(`--onboard`,`Start fresh-agent onboarding`).hideHelp()).option(`--tools <mode>`,`How tool calls render: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--reasoning <mode>`,`How reasoning renders: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--subagents <mode>`,`How subagent sections render: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--connection-auth <mode>`,`How connection authorization renders: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--assistant-response-stats <mode>`,`Assistant header statistic: tokens | tokensPerSecond`,parseStatsMode).option(`--context-size <tokens>`,`Model context window size, shown as a usage percentage`,parseContextSizeOption).option(`--logs <mode>`,`Which server/agent logs to show: all | stderr | sandbox | none`,parseLogsMode).addHelpText(`after`,`
1
+ import{Command,CommanderError,InvalidArgumentError,Option}from"#compiled/commander/index.js";import{agentCommand}from"#cli/agent-command.js";import{parseDevelopmentHeaderOption,resolveDevelopmentUrlTarget}from"#cli/dev/url-target.js";import{parseDevelopmentServerUrl}from"#cli/dev/url.js";import{FORCED_EXIT_BACKSTOP_MS,installShutdownSignal,waitForShutdownSignal}from"#cli/shutdown.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{createCliTheme,renderCliTaggedLine}from"#cli/ui/output.js";import{findEveProjectContext,resolveEveProjectContext}from"#internal/project-context.js";import{isCodingAgentLaunch}from"#cli/agent-detection.js";import{eveCliBanner}from"#cli/banner.js";import{startCliLiveRow}from"#cli/ui/live-row.js";import{registerBuildCommand}from"#cli/commands/build.js";import{resolveApplicationRoot}from"#internal/application/paths.js";import{findCliApplicationRoot,resolveCliApplicationProject}from"#cli/application-root.js";import{registerIntegrationCommands}from"#cli/commands/register-integration-commands.js";import{registerProjectCommands}from"#cli/commands/register-project-commands.js";import{registerRegistryCommands}from"#cli/commands/register-registry-commands.js";import{runInteractiveDevelopmentUi}from"#cli/dev/run-interactive-ui.js";import{resolveDevUiMode,resolveTuiDisplayOptions}from"#cli/dev/ui-options.js";import{registerAcpCommand}from"#cli/acp/command.js";import{waitForServerOrStop,waitForUiOrServer}from"#cli/dev/wait-for-ui.js";import{registerRuntimeInvokeCommand}from"#cli/invoke/command.js";import{parseAgentNamesOption,parseContextSizeOption,parseDisplayMode,parseLogsMode,parsePortOption,parseReasoningOption,parseStatsMode}from"#cli/option-parsers.js";import{createDevBootProgressReporter}from"#cli/dev/boot-progress.js";import{registerEveTelemetryCommands}from"#cli/telemetry/command.js";import{canonicalCommand,createEveCliTelemetry}from"#cli/telemetry/index.js";async function loadPrintApplicationInfo(){return(await import(`#cli/commands/info.js`)).printApplicationInfo}async function loadDevelopmentTuiModule(){return await import(`#cli/dev/tui/tui.js`)}async function loadRunEvalCommand(){return(await import(`#evals/cli/eval.js`)).runEvalCommand}async function loadStartHost(){return(await import(`#cli/dev/local-server-process.js`)).createDevelopmentServer}const loadIsActiveDevelopmentServerForApp=async()=>(await import(`#internal/nitro/host.js`)).isActiveDevelopmentServerForApp;async function loadStartProductionHost(){return(await import(`#internal/nitro/host.js`)).startProductionServer}function hasInteractiveTerminal(){return!!(process.stdin.isTTY&&process.stdout.isTTY)}function createCliProgram(t,f,p,m){let g=resolveInstalledPackageInfo().version,_=new Command,v=createCliTheme();_.name(`eve`).description(`Build and run an eve application.`).version(g).showHelpAfterError().exitOverride().hook(`preAction`,(e,n)=>{let{json:r}=n.opts();[`info`,`init`].includes(n.name())&&!r&&t.log(eveCliBanner())}).configureOutput({writeErr:e=>{t.error(e.trimEnd())},writeOut:e=>{t.log(e.trimEnd())}}),agentCommand(_.command(`channels`).description(`Manage user-authored channels in the current project.`).command(`list`),p).description(`List user-authored channels in the current project.`).option(`--json`,`Output as JSON`).action(async e=>{let{runChannelsListCommand:n}=await import(`#cli/commands/channels.js`);await n(t,p.project,e)}),registerEveTelemetryCommands(_,t),registerIntegrationCommands({program:_,logger:t,applicationContext:p});let S=_.command(`extension`).description(`Create and build reusable eve extension packages.`);S.command(`init [target]`).description(`Create a new eve extension package.`).option(`-y, --yes`,`Accepted for compatibility; has no effect`).action(async(e,n)=>{n.yes&&t.error(`warning: --yes has no effect for eve extension init.`);let{runExtensionInitCommand:r}=await import(`#cli/commands/extension-init.js`);await r(t,p.root,e)}),S.command(`build`).description(`Build the current package as an eve extension.`).action(async()=>{let{loadDevelopmentEnvironmentFiles:e}=await import(`#cli/dev/environment.js`);await e(p.root);let{runExtensionBuildCommand:n}=await import(`#cli/commands/extension-build.js`);await n(t,p.root)}),registerRegistryCommands({program:_,logger:t,applicationContext:p}),_.command(`init [target]`).description(`Create a new eve agent, or add one to an existing project directory.`).option(`--channel-web-nextjs`,`Add the Web Chat application (Next.js)`).option(`--agents <names>`,`Create an agents/ workspace with comma-separated agent names`,parseAgentNamesOption).option(`--model <model>`,`Set the agent model (provider/model-id)`).option(`--reasoning <effort>`,`Set reasoning (provider-default|none|minimal|low|medium|high|xhigh)`,parseReasoningOption).option(`-y, --yes`,`Accepted for compatibility; has no effect`).action(async(e,n)=>{n.yes&&t.error(`warning: --yes has no effect for eve init.`);let{runInitCommand:r}=await import(`#cli/commands/init.js`);await r(t,p.root,e,{agents:n.agents,channelWebNextjs:n.channelWebNextjs,model:n.model,reasoning:n.reasoning})}),agentCommand(_.command(`set`),p).description(`Change root agent model settings.`).option(`--model <model>`,`Set the agent model (provider/model-id)`).option(`--reasoning <effort>`,`Set reasoning (provider-default|none|minimal|low|medium|high|xhigh)`,parseReasoningOption).action(async e=>{let{runSetCommand:n}=await import(`#cli/commands/set.js`);await n(t,p.root,e)}),registerProjectCommands({program:_,logger:t,applicationContext:p}),registerBuildCommand({applicationContext:p,buildHost:f.buildHost,logger:t,program:_}),agentCommand(_.command(`start`),p).description(`Start a built eve application.`).option(`--host <host>`,`Host interface to bind`).option(`--port <port>`,`Port to listen on (defaults to $PORT, then 3000)`,parsePortOption).action(async e=>{let{loadDevelopmentEnvironmentFiles:n}=await import(`#cli/dev/environment.js`);await n(p.root);let r=await(f.startProductionHost??await loadStartProductionHost())(p.root,{host:e.host,port:e.port});t.log(renderCliTaggedLine(v,{message:`server listening at ${r.url}`,tag:`start`,tone:`success`})),await waitForShutdownSignal({close:()=>r.close(),wait:()=>r.wait()})}),registerRuntimeInvokeCommand({applicationContext:p,logger:t,program:_,runtime:f}),registerAcpCommand({applicationContext:p,eveVersion:g,program:_,resolveVerifiedRemoteDevelopmentClient:f.resolveVerifiedRemoteDevelopmentClient,runAcpServer:f.runAcpServer,startHost:f.startHost}),agentCommand(_.command(`dev`),p,e=>resolveDevelopmentUrlTarget(e.opts(),e.processedArgs[0])===void 0).description(`Start the eve development server or connect to an existing URL.`).argument(`[url]`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`--host <host>`,`Host interface to bind`).option(`--port <port>`,`Port to listen on (defaults to $PORT, then 2000)`,parsePortOption).option(`-u, --url <url>`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`-H, --header <header>`,`Request header for a URL target, in "Name: value" form (repeatable)`,parseDevelopmentHeaderOption).option(`--no-ui`,`Start the server without an interactive UI`).option(`--name <name>`,`Title shown in the terminal UI (defaults to the app folder name)`).option(`--input <text>`,`Pre-fill the prompt input`).addOption(new Option(`--onboard`,`Start fresh-agent onboarding`).hideHelp()).option(`--tools <mode>`,`How tool calls render: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--reasoning <mode>`,`How reasoning renders: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--subagents <mode>`,`How subagent sections render: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--connection-auth <mode>`,`How connection authorization renders: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--assistant-response-stats <mode>`,`Assistant header statistic: tokens | tokensPerSecond`,parseStatsMode).option(`--context-size <tokens>`,`Model context window size, shown as a usage percentage`,parseContextSizeOption).option(`--logs <mode>`,`Which server/agent logs to show: all | stderr | sandbox | none`,parseLogsMode).addHelpText(`after`,`
2
2
  You can also pass a bare URL, for example: eve dev https://example.com
3
- `).action(async(t,i)=>{let a=resolveDevelopmentUrlTarget(i,t),o=a?.serverUrl,s=hasInteractiveTerminal(),c=resolveDevUiMode({options:i,interactive:s});if(c===`headless`&&e.log(eveCliBanner()),i.input!==void 0&&c===`headless`)throw new InvalidArgumentError(`--input requires the interactive UI.`);let l=!1;if(o!==void 0&&(l=await(n.isActiveDevelopmentServerForApp??await loadIsActiveDevelopmentServerForApp())({appRoot:d.root,serverUrl:o})),o){let{loadDevelopmentEnvironmentFiles:t}=await import(`#cli/dev/environment.js`);if(await t(d.root),e.log(`↗ ${l?`local`:`remote`} mode targeting ${h.info(new URL(o).host)}`),c===`headless`){e.log(renderCliTaggedLine(h,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`}));return}e.log(``);let r=installShutdownSignal({exitAfterMs:FORCED_EXIT_BACKSTOP_MS});try{await runInteractiveDevelopmentUi({applicationRoot:d.root,existingLocalServer:l,lifecycle:r,options:i,remoteTarget:a,runDevelopmentTui:n.runDevelopmentTui,server:{serverUrl:o}})}finally{r.dispose()}return}let u=c===`tui`?startCliLiveRow(e):void 0,f=createDevBootProgressReporter(u);u?.update(`Building your agent`);let p,m,closeServer=()=>p===void 0?Promise.resolve():(m??=p.close(),m.catch(()=>void 0),m),g=installShutdownSignal({exitAfterMs:FORCED_EXIT_BACKSTOP_MS,onStop:()=>{closeServer()}}),_,v=c===`tui`&&i.onboard!==!0&&n.runDevelopmentTui===void 0?loadDevelopmentTuiModule().then(e=>(f({type:`before-first-paint`}),e.startDevelopmentTuiStartup({appRoot:d.root,initialInput:i.input,onExitRequest:g.requestStop,...resolveTuiDisplayOptions(i)}))):void 0;try{p=(n.startHost??await loadStartHost())(d.root,{existing:c===`tui`?`attach-if-unconfigured`:`reject`,host:i.host,onBootProgress:f,port:i.port});let[t,r]=await Promise.all([Promise.race([p.start().then(e=>({handle:e})),g.stopped.then(()=>({handle:void 0}))]),v]),a=t.handle;if(a===void 0){_=r,await _?.shutdown();return}if(_=r,c!==`tui`&&e.log(renderCliTaggedLine(h,{message:`server listening at ${a.url}`,tag:`dev`,tone:`success`})),c===`headless`){i.ui!==!1&&!s&&e.log(renderCliTaggedLine(h,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`})),await waitForServerOrStop(p,g);return}await waitForUiOrServer({handle:a,lifecycle:g,server:p,runUi:async()=>await runInteractiveDevelopmentUi({applicationRoot:d.root,existingLocalServer:!1,lifecycle:g,options:i,report:f,runDevelopmentTui:n.runDevelopmentTui,server:{appRoot:a.appRoot,serverUrl:a.url},startup:_})})}finally{u?.stop(),_===void 0&&(_=await v?.catch(()=>void 0),await _?.shutdown()),await closeServer(),g.dispose()}});let y=m.command(`logs`).description("Inspect local `eve dev` diagnostic logs (.eve/logs).");return agentCommand(y.command(`show [logid]`,{isDefault:!0}),d).description(`Print a diagnostic log (the most recent when logid is omitted).`).option(`--dump`,`Prepend the log's environment dump (.dump sibling)`).option(`--events`,`Interleave session events from the local workflow store`).action(async(t,n)=>{let{runLogsShowCommand:r}=await import(`#cli/commands/logs.js`);await r(e,d.root,t,n)}),agentCommand(y.command(`ls`),d).description(`List diagnostic logs, most recent first.`).option(`--json`,`Output as JSON`).action(async t=>{let{runLogsListCommand:n}=await import(`#cli/commands/logs.js`);await n(e,d.root,t)}),agentCommand(m.command(`traces [trace]`),d).usage(`[options] [trace]
4
- eve traces ls [options]`).description("Show a local `eve dev` trace (the most recent when trace is omitted).").option(`--verbose`,`Expand every span with all attributes and events`).option(`--json`,`Output as JSON`).action(async(t,n)=>{let{runTraceShowCommand:r}=await import(`#cli/commands/trace.js`);await r(e,d.root,t,n)}).command(`ls`).description(`List local traces, most recent first.`).option(`--json`,`Output as JSON`).action(async t=>{let{runTraceListCommand:n}=await import(`#cli/commands/trace.js`);await n(e,d.root,t)}),agentCommand(m.command(`info`),d).description(`Print resolved application information.`).option(`--json`,`Output as JSON`).action(async t=>{await(n.printApplicationInfo??await loadPrintApplicationInfo())(e,d.root,t)}),agentCommand(m.command(`eval`),d,e=>e.opts().url===void 0).description(`Run evals against an eve agent.`).argument(`[evalIds...]`,`Eval ids (or directory prefixes) to run (all discovered evals when omitted)`).option(`--url <url>`,`Remote agent URL (skip local host startup)`,parseDevelopmentServerUrl).option(`--tag <tag...>`,`Run only evals carrying a tag`).option(`--exclude-tag <tag...>`,`Skip evals carrying a tag`).option(`--strict`,`Fail the exit code when any score falls below its threshold`).option(`--list`,`Print discovered evals without running them`).option(`--timeout <ms>`,`Per-eval timeout in milliseconds`).option(`--max-concurrency <n>`,`Max concurrent eval executions`).option(`--json`,`Output results as JSON`).option(`--junit <path>`,`Write JUnit XML results to a file`).option(`--skip-report`,`Skip eval-defined reporters (e.g. Braintrust)`).option(`--verbose`,`Stream per-eval t.log lines to stdout`).action(async(t,r)=>{await(n.runEvalCommand??await loadRunEvalCommand())(t,r,e,d.root)}),m}async function runCli(e=process.argv.slice(2),t=console,r={}){let i={root:resolveApplicationRoot(),async resolve(){let e=await(r.resolveApplicationProject??resolveCliApplicationProject)(i.root);i.project=e,i.root=e.appRoot},async resolveAgent(){return resolveEveProjectContext(i.root)}},a=createCliProgram(t,r,i),o=e;if(o.length===0){let e=await(r.findApplicationRoot??findCliApplicationRoot)(i.root);e===void 0?o=(await resolveEveProjectContext(i.root)).kind===`workspace`?[`dev`]:[`init`]:(i.root=e,o=[`dev`])}try{await a.parseAsync(o,{from:`user`})}catch(e){if(e instanceof CommanderError){if(e.exitCode===0)return;let n=await(r.isCodingAgentLaunch??isCodingAgentLaunch)();if(o[0]===`init`&&n){let{initAgentInstructions:e}=await import(`#cli/commands/agent-instructions.js`);t.log(e())}throw Error(e.message)}throw e}}export{resolveDevUiMode,resolveTuiDisplayOptions,runCli};
3
+ `).action(async(e,r)=>{let i=resolveDevelopmentUrlTarget(r,e),a=i?.serverUrl,s=hasInteractiveTerminal(),l=resolveDevUiMode({options:r,interactive:s});if(m.trackDevContext({target:i?`remote`:`local`,ui:l}),l===`headless`&&t.log(eveCliBanner()),r.input!==void 0&&l===`headless`)throw new InvalidArgumentError(`--input requires the interactive UI.`);let u=!1;if(a!==void 0&&(u=await(f.isActiveDevelopmentServerForApp??await loadIsActiveDevelopmentServerForApp())({appRoot:p.root,serverUrl:a})),a){let{loadDevelopmentEnvironmentFiles:e}=await import(`#cli/dev/environment.js`);if(await e(p.root),t.log(`↗ ${u?`local`:`remote`} mode targeting ${v.info(new URL(a).host)}`),l===`headless`){t.log(renderCliTaggedLine(v,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`}));return}t.log(``);let n=installShutdownSignal({exitAfterMs:FORCED_EXIT_BACKSTOP_MS});try{await runInteractiveDevelopmentUi({applicationRoot:p.root,existingLocalServer:u,lifecycle:n,options:r,remoteTarget:i,runDevelopmentTui:f.runDevelopmentTui,server:{serverUrl:a}})}finally{n.dispose()}return}let d=l===`tui`?startCliLiveRow(t):void 0,h=createDevBootProgressReporter(d);d?.update(`Building your agent`);let g,_,closeServer=()=>g===void 0?Promise.resolve():(_??=g.close(),_.catch(()=>void 0),_),y=installShutdownSignal({exitAfterMs:FORCED_EXIT_BACKSTOP_MS,onStop:()=>{closeServer()}}),b,x=l===`tui`&&r.onboard!==!0&&f.runDevelopmentTui===void 0?loadDevelopmentTuiModule().then(e=>(h({type:`before-first-paint`}),e.startDevelopmentTuiStartup({appRoot:p.root,initialInput:r.input,onExitRequest:y.requestStop,...resolveTuiDisplayOptions(r)}))):void 0;try{g=(f.startHost??await loadStartHost())(p.root,{existing:l===`tui`?`attach-if-unconfigured`:`reject`,host:r.host,onBootProgress:h,port:r.port});let[e,n]=await Promise.all([Promise.race([g.start().then(e=>({handle:e})),y.stopped.then(()=>({handle:void 0}))]),x]),i=e.handle;if(i===void 0){b=n,await b?.shutdown();return}if(b=n,l!==`tui`&&t.log(renderCliTaggedLine(v,{message:`server listening at ${i.url}`,tag:`dev`,tone:`success`})),l===`headless`){r.ui!==!1&&!s&&t.log(renderCliTaggedLine(v,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`})),await waitForServerOrStop(g,y);return}await waitForUiOrServer({handle:i,lifecycle:y,server:g,runUi:async()=>await runInteractiveDevelopmentUi({applicationRoot:p.root,existingLocalServer:!1,lifecycle:y,options:r,report:h,runDevelopmentTui:f.runDevelopmentTui,server:{appRoot:i.appRoot,serverUrl:i.url},startup:b})})}finally{d?.stop(),b===void 0&&(b=await x?.catch(()=>void 0),await b?.shutdown()),await closeServer(),y.dispose()}});let C=_.command(`logs`).description("Inspect local `eve dev` diagnostic logs (.eve/logs).");return agentCommand(C.command(`show [logid]`,{isDefault:!0}),p).description(`Print a diagnostic log (the most recent when logid is omitted).`).option(`--dump`,`Prepend the log's environment dump (.dump sibling)`).option(`--events`,`Interleave session events from the local workflow store`).action(async(e,n)=>{let{runLogsShowCommand:r}=await import(`#cli/commands/logs.js`);await r(t,p.root,e,n)}),agentCommand(C.command(`ls`),p).description(`List diagnostic logs, most recent first.`).option(`--json`,`Output as JSON`).action(async e=>{let{runLogsListCommand:n}=await import(`#cli/commands/logs.js`);await n(t,p.root,e)}),agentCommand(_.command(`traces [trace]`),p).usage(`[options] [trace]
4
+ eve traces ls [options]`).description("Show a local `eve dev` trace (the most recent when trace is omitted).").option(`--verbose`,`Expand every span with all attributes and events`).option(`--json`,`Output as JSON`).action(async(e,n)=>{let{runTraceShowCommand:r}=await import(`#cli/commands/trace.js`);await r(t,p.root,e,n)}).command(`ls`).description(`List local traces, most recent first.`).option(`--json`,`Output as JSON`).action(async e=>{let{runTraceListCommand:n}=await import(`#cli/commands/trace.js`);await n(t,p.root,e)}),agentCommand(_.command(`info`),p).description(`Print resolved application information.`).option(`--json`,`Output as JSON`).action(async e=>{await(f.printApplicationInfo??await loadPrintApplicationInfo())(t,p.root,e)}),agentCommand(_.command(`eval`),p,e=>e.opts().url===void 0).description(`Run evals against an eve agent.`).argument(`[evalIds...]`,`Eval ids (or directory prefixes) to run (all discovered evals when omitted)`).option(`--url <url>`,`Remote agent URL (skip local host startup)`,parseDevelopmentServerUrl).option(`--tag <tag...>`,`Run only evals carrying a tag`).option(`--exclude-tag <tag...>`,`Skip evals carrying a tag`).option(`--strict`,`Fail the exit code when any score falls below its threshold`).option(`--list`,`Print discovered evals without running them`).option(`--timeout <ms>`,`Per-eval timeout in milliseconds`).option(`--max-concurrency <n>`,`Max concurrent eval executions`).option(`--json`,`Output results as JSON`).option(`--junit <path>`,`Write JUnit XML results to a file`).option(`--skip-report`,`Skip eval-defined reporters (e.g. Braintrust)`).option(`--verbose`,`Stream per-eval t.log lines to stdout`).action(async(e,n)=>{await(f.runEvalCommand??await loadRunEvalCommand())(e,n,t,p.root)}),_}async function runCli(e=process.argv.slice(2),n=console,r={}){let i={root:resolveApplicationRoot(),async resolve(){let e=await(r.resolveApplicationProject??resolveCliApplicationProject)(i.root);i.project=e,i.root=e.appRoot},async resolveAgent(){return resolveEveProjectContext(i.root)}},a=createEveCliTelemetry(resolveInstalledPackageInfo().version),o=createCliProgram(n,r,i,a),s=e;if(s.length===0){let e=await(r.findApplicationRoot??findCliApplicationRoot)(i.root);e===void 0?s=(await findEveProjectContext(i.root))?.kind===`workspace`?[`dev`]:[`init`]:(i.root=e,s=[`dev`])}let c=canonicalCommand(s);a.trackCommand(c),c!==`telemetry`&&await a.notify(n);try{await o.parseAsync(s,{from:`user`}),a.trackOutcome(`success`)}catch(e){if(e instanceof CommanderError&&e.exitCode===0){a.trackOutcome(`success`);return}if(a.trackOutcome(e instanceof CommanderError?`usage_error`:`error`),e instanceof CommanderError){let t=await(r.isCodingAgentLaunch??isCodingAgentLaunch)();if(s[0]===`init`&&t){let{initAgentInstructions:e}=await import(`#cli/commands/agent-instructions.js`);n.log(e())}throw Error(e.message)}throw e}finally{await a.flush()}}export{createCliProgram,resolveDevUiMode,resolveTuiDisplayOptions,runCli};
@@ -0,0 +1,9 @@
1
+ import type { Command } from "#compiled/commander/index.js";
2
+ type TelemetryLogger = {
3
+ log(message: string): void;
4
+ };
5
+ export declare function registerEveTelemetryCommands(program: Command, logger: TelemetryLogger): void;
6
+ export declare function showEveTelemetryStatus(logger: TelemetryLogger): Promise<void>;
7
+ export declare function enableEveTelemetry(logger: TelemetryLogger): Promise<void>;
8
+ export declare function disableEveTelemetry(logger: TelemetryLogger): Promise<void>;
9
+ export {};
@@ -0,0 +1 @@
1
+ import{flushEveCliTelemetry}from"#cli/telemetry/flush.js";import{readEveTelemetryPreference,setEveTelemetryEnabled}from"#cli/telemetry/preference.js";function registerEveTelemetryCommands(t,n){let r=t.command(`telemetry`).description(`Enable or disable CLI telemetry collection.`);r.command(`status`).description(`Show whether telemetry collection is enabled.`).action(async()=>{await showEveTelemetryStatus(n)}),r.command(`enable`).description(`Enable telemetry collection.`).action(async()=>{await enableEveTelemetry(n)}),r.command(`disable`).description(`Disable telemetry collection.`).action(async()=>{await disableEveTelemetry(n)}),r.command(`flush <payload>`,{hidden:!0}).action(async t=>{await flushEveCliTelemetry(t)})}async function showEveTelemetryStatus(e){let{enabled:n}=await readEveTelemetryPreference();e.log(`Telemetry status: ${n?`Enabled`:`Disabled`}`)}async function enableEveTelemetry(e){await setEveTelemetryEnabled(!0),e.log(`Telemetry collection enabled.`)}async function disableEveTelemetry(e){await setEveTelemetryEnabled(!1),e.log(`Telemetry collection disabled. No data will be collected from this machine.`)}export{disableEveTelemetry,enableEveTelemetry,registerEveTelemetryCommands,showEveTelemetryStatus};
@@ -0,0 +1,2 @@
1
+ /** Sends a telemetry batch from the telemetry-disabled child CLI process. */
2
+ export declare function flushEveCliTelemetry(payloadJson: string): Promise<void>;
@@ -0,0 +1 @@
1
+ function isFlushPayload(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.sessionId==`string`&&Array.isArray(t.events)}async function flushEveCliTelemetry(e){let t;try{let n=JSON.parse(e);if(!isFlushPayload(n))return;t=n}catch{return}try{await fetch(process.env.EVE_TELEMETRY_ENDPOINT??`https://telemetry.vercel.com/api/eve-cli/v1/events`,{method:`POST`,headers:{"content-type":`application/json`,"client-id":`eve-cli`,"x-eve-cli-topic-id":`generic`,"x-eve-cli-session-id":t.sessionId},body:JSON.stringify(t.events),signal:AbortSignal.timeout(1e3)})}catch{}}export{flushEveCliTelemetry};
@@ -0,0 +1,13 @@
1
+ export type EveCliTelemetryIdentity = {
2
+ readonly installationId: string;
3
+ readonly projectSalt: string;
4
+ };
5
+ export declare function createEveTelemetryIdentity(): EveCliTelemetryIdentity;
6
+ export declare function isEphemeralEveTelemetryEnvironment(): boolean;
7
+ export declare function hashEveTelemetryProject(identity: EveCliTelemetryIdentity, value: string): string;
8
+ export declare function resolveEveTelemetryProjectId(input: {
9
+ readonly cwd?: string;
10
+ readonly repositoryUrl?: string;
11
+ readonly getGitRemote?: (cwd: string) => Promise<string | undefined>;
12
+ readonly identity: EveCliTelemetryIdentity;
13
+ }): Promise<string>;
@@ -0,0 +1 @@
1
+ import{createHash,randomUUID}from"node:crypto";import{existsSync}from"node:fs";import{execFile}from"node:child_process";import{promisify}from"node:util";const runFile=promisify(execFile);function createEveTelemetryIdentity(){return{installationId:randomUUID(),projectSalt:randomUUID()}}function isEphemeralEveTelemetryEnvironment(){return!!process.env.CI||existsSync(`/.dockerenv`)}function hashEveTelemetryProject(t,n){return createHash(`sha256`).update(t.projectSalt).update(n).digest(`hex`)}async function resolveEveTelemetryProjectId(e){let t=e.cwd??process.cwd(),n=await(e.getGitRemote??getGitRemote)(t);return hashEveTelemetryProject(e.identity,n??e.repositoryUrl??process.env.REPOSITORY_URL??t)}async function getGitRemote(e){try{let{stdout:t}=await runFile(`git`,[`config`,`--local`,`--get`,`remote.origin.url`],{cwd:e,timeout:1e3,windowsHide:!0}),n=t.trim();return n===``?void 0:n}catch{return}}export{createEveTelemetryIdentity,hashEveTelemetryProject,isEphemeralEveTelemetryEnvironment,resolveEveTelemetryProjectId};
@@ -0,0 +1,25 @@
1
+ export type EveCliTelemetryEvent = {
2
+ readonly id: string;
3
+ readonly event_time: number;
4
+ readonly key: string;
5
+ readonly value: string;
6
+ };
7
+ export type EveCliTelemetry = {
8
+ trackCommand(command: string): void;
9
+ trackDevContext(context: {
10
+ target: "local" | "remote";
11
+ ui: "tui" | "headless";
12
+ }): void;
13
+ trackOutcome(outcome: "success" | "usage_error" | "error"): void;
14
+ notify(logger: {
15
+ error(message: string): void;
16
+ }): Promise<void>;
17
+ flush(): Promise<void>;
18
+ };
19
+ /** Explicit privacy allowlist for command values emitted by CLI telemetry. */
20
+ export declare const cliTelemetryCommandPaths: Set<string>;
21
+ /** Internal command paths that must never emit telemetry. */
22
+ export declare const internalCliCommandPaths: Set<string>;
23
+ /** Returns only an allowlisted command path; it never includes user input. */
24
+ export declare function canonicalCommand(argv: readonly string[]): string;
25
+ export declare function createEveCliTelemetry(version: string): EveCliTelemetry;
@@ -0,0 +1,3 @@
1
+ import{randomUUID}from"node:crypto";import{spawn}from"node:child_process";import{markEveTelemetryNotified,readEveTelemetryPreference,readOrCreateEveTelemetryIdentity}from"#cli/telemetry/preference.js";import os from"node:os";import{createEveTelemetryIdentity,isEphemeralEveTelemetryEnvironment,resolveEveTelemetryProjectId}from"#cli/telemetry/identity.js";async function isEnabled(){return process.env.NODE_ENV!==`test`&&!process.env.EVE_TELEMETRY_DISABLED&&(await readEveTelemetryPreference()).enabled}function event(t,n){return{id:randomUUID(),event_time:Date.now(),key:t,value:n}}const CLI_TELEMETRY_COMMANDS=new Map([[`acp`,`acp`],[`add`,`add`],[`build`,`build`],[`channels`,`channels`],[`channels:list`,`channels:list`],[`deploy`,`deploy`],[`dev`,`dev`],[`eval`,`eval`],[`extension`,`extension`],[`extension:build`,`extension:build`],[`extension:init`,`extension:init`],[`info`,`info`],[`init`,`init`],[`integration`,`integration`],[`integration:connect`,`integration:connect`],[`integration:setup`,`integration:setup`],[`invoke`,`invoke`],[`link`,`link`],[`logs`,`logs:show`],[`logs:ls`,`logs:ls`],[`logs:show`,`logs:show`],[`registry`,`registry`],[`registry:add`,`registry:add`],[`registry:list`,`registry:list`],[`registry:search`,`registry:search`],[`registry:view`,`registry:view`],[`set`,`set`],[`start`,`start`],[`telemetry`,`telemetry`],[`telemetry:disable`,`telemetry:disable`],[`telemetry:enable`,`telemetry:enable`],[`telemetry:status`,`telemetry:status`],[`traces`,`traces:show`],[`traces:ls`,`traces:ls`]]),cliTelemetryCommandPaths=new Set(CLI_TELEMETRY_COMMANDS.keys()),internalCliCommandPaths=new Set([`telemetry:flush`]);function canonicalCommand(e){let t=e[0];if(t===`--help`||t===`-h`)return`help`;if(t===`--version`||t===`-V`)return`version`;let n=e.findIndex(e=>!e.startsWith(`-`)),r=e[n];if(r===void 0||/^https?:\/\//.test(r))return`dev`;let i=e.slice(n+1).find(e=>!e.startsWith(`-`));if(i!==void 0){let e=CLI_TELEMETRY_COMMANDS.get(`${r}:${i}`);if(e!==void 0)return e}return CLI_TELEMETRY_COMMANDS.get(r)??`unknown`}function createEveCliTelemetry(a){let o=[event(`version`,a),event(`platform`,os.platform()),event(`arch`,os.arch()),event(`stdin_is_tty`,process.stdin.isTTY?`true`:`false`)],s=randomUUID();return{trackCommand(e){o.push(event(`command`,e))},trackDevContext(e){o.push(event(`target`,e.target),event(`ui`,e.ui))},trackOutcome(e){o.push(event(`outcome`,e))},async notify(e){let t=await readEveTelemetryPreference();if(!(process.env.NODE_ENV===`test`||process.env.EVE_TELEMETRY_DISABLED||!t.enabled||t.notified||!process.stderr.isTTY)){e.error(`Attention: eve collects CLI telemetry to improve the command-line interface.
2
+ Disable it with \`eve telemetry disable\`, or for one command set EVE_TELEMETRY_DISABLED=1.
3
+ Learn more: https://eve.dev/docs/reference/telemetry`);try{await markEveTelemetryNotified()}catch{}}},async flush(){if(!(!await isEnabled()||o.length===0)){try{let e=isEphemeralEveTelemetryEnvironment()?createEveTelemetryIdentity():await readOrCreateEveTelemetryIdentity();o.push(event(`installation_id`,e.installationId),event(`project_id`,await resolveEveTelemetryProjectId({identity:e})))}catch{return}if(process.env.EVE_TELEMETRY_DEBUG){process.stderr.write(`[eve telemetry] ${JSON.stringify(o)}\n`);return}try{let e=spawn(process.execPath,[process.argv[1]??``,`telemetry`,`flush`,JSON.stringify({events:o,sessionId:s})],{detached:!0,env:{...process.env,EVE_TELEMETRY_DISABLED:`1`},stdio:`ignore`,windowsHide:!0});e.on(`error`,()=>{}),e.unref()}catch{}}}}}export{canonicalCommand,cliTelemetryCommandPaths,createEveCliTelemetry,internalCliCommandPaths};
@@ -0,0 +1,9 @@
1
+ import { type EveCliTelemetryIdentity } from "#cli/telemetry/identity.js";
2
+ export type EveTelemetryPreference = {
3
+ readonly enabled: boolean;
4
+ readonly notified: boolean;
5
+ };
6
+ export declare function readEveTelemetryPreference(): Promise<EveTelemetryPreference>;
7
+ export declare function readOrCreateEveTelemetryIdentity(): Promise<EveCliTelemetryIdentity>;
8
+ export declare function setEveTelemetryEnabled(enabled: boolean): Promise<void>;
9
+ export declare function markEveTelemetryNotified(): Promise<void>;
@@ -0,0 +1 @@
1
+ import{boolean,looseObject,number,string}from"../../node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/schemas.js";import"../../node_modules/.pnpm/zod@4.5.4/node_modules/zod/index.js";import{mkdir,readFile,rename,rm,writeFile}from"node:fs/promises";import{dirname,isAbsolute,join}from"node:path";import{homedir}from"node:os";import{createEveTelemetryIdentity}from"#cli/telemetry/identity.js";function configuredDirectory(e,t){return e&&isAbsolute(e)?e:t}function eveConfigPath(){let e=homedir();return process.platform===`win32`?join(configuredDirectory(process.env.APPDATA,join(e,`AppData`,`Roaming`)),`eve`,`config.json`):process.platform===`darwin`?join(e,`Library`,`Preferences`,`eve`,`config.json`):join(configuredDirectory(process.env.XDG_CONFIG_HOME,join(e,`.config`)),`eve`,`config.json`)}const EveConfigSchema=looseObject({telemetry:looseObject({enabled:boolean().default(!0),installationId:string().optional(),noticeVersion:number().int().positive().optional(),notifiedAt:string().optional(),projectSalt:string().optional()}).optional()});function parsePreference(e){let t=EveConfigSchema.safeParse(e).data?.telemetry;return{enabled:t?.enabled??!0,notified:t?.noticeVersion===1}}async function readEveTelemetryPreference(){try{return parsePreference(JSON.parse(await readFile(eveConfigPath(),`utf8`)))}catch{return{enabled:!0,notified:!1}}}async function readOrCreateEveTelemetryIdentity(){let e;try{e=EveConfigSchema.safeParse(JSON.parse(await readFile(eveConfigPath(),`utf8`))).data?.telemetry}catch{}let t=e?.installationId&&e.projectSalt?{installationId:e.installationId,projectSalt:e.projectSalt}:createEveTelemetryIdentity();return(e?.installationId!==t.installationId||e?.projectSalt!==t.projectSalt)&&await updateEveTelemetryPreference(t),t}async function updateEveTelemetryPreference(e){let t=eveConfigPath(),n={};try{let e=JSON.parse(await readFile(t,`utf8`));typeof e==`object`&&e&&(n=e)}catch{}let r=typeof n.telemetry==`object`&&n.telemetry!==null?n.telemetry:{},i={...n,telemetry:{...r,...e}},a=`${t}.${process.pid}.${Date.now()}.tmp`;await mkdir(dirname(t),{recursive:!0});try{await writeFile(a,`${JSON.stringify(i,null,2)}\n`,{mode:384}),await rename(a,t)}catch(e){throw await rm(a,{force:!0}),e}}async function setEveTelemetryEnabled(e){await updateEveTelemetryPreference({enabled:e})}async function markEveTelemetryNotified(){await updateEveTelemetryPreference({noticeVersion:1,notifiedAt:new Date().toISOString()})}export{markEveTelemetryNotified,readEveTelemetryPreference,readOrCreateEveTelemetryIdentity,setEveTelemetryEnabled};
@@ -1 +1 @@
1
- import{createEveSessionStreamRoutePath}from"#protocol/routes.js";import{EVE_STREAM_TAIL_INDEX_HEADER}from"#protocol/message.js";import{isStreamDisconnectError,readNdjsonStream}from"#client/ndjson.js";import{readMessageStreamVersion}from"#client/stream-version.js";import{ClientError}from"#client/client-error.js";import{createClientUrl}from"#client/url.js";const DEFAULT_STREAM_RECONNECT_POLICY={retryableErrorStatuses:new Set([404,409,425,500,502,503,504]),streamIdleReconnectPolicy:{baseDelayMs:250,maxAttempts:5,maxDelayMs:4e3},streamOpenReconnectPolicy:{baseDelayMs:250,maxAttempts:12,maxDelayMs:5e3}},NO_STREAM_RECONNECT_POLICY={...DEFAULT_STREAM_RECONNECT_POLICY,streamIdleReconnectPolicy:{...DEFAULT_STREAM_RECONNECT_POLICY.streamIdleReconnectPolicy,maxAttempts:0},streamOpenReconnectPolicy:{...DEFAULT_STREAM_RECONNECT_POLICY.streamOpenReconnectPolicy,maxAttempts:1}};function resolveRetryPolicy(e,t){return{...t,...e}}function resolveStreamReconnectPolicy(e){if(e&&`reconnect`in e&&e.reconnect===!1)return NO_STREAM_RECONNECT_POLICY;let t=e;return{retryableErrorStatuses:t?.retryableErrorStatuses?new Set(t.retryableErrorStatuses):DEFAULT_STREAM_RECONNECT_POLICY.retryableErrorStatuses,streamIdleReconnectPolicy:resolveRetryPolicy(t?.streamIdleReconnectPolicy,DEFAULT_STREAM_RECONNECT_POLICY.streamIdleReconnectPolicy),streamOpenReconnectPolicy:resolveRetryPolicy(t?.streamOpenReconnectPolicy,DEFAULT_STREAM_RECONNECT_POLICY.streamOpenReconnectPolicy)}}async function*followStreamIterable(e){if(e.follow===!1&&e.startIndex<0)throw Error(`stream({ follow: false }) requires a nonnegative startIndex; a tail-relative cursor cannot be bounded.`);let i=resolveStreamReconnectPolicy(e.streamReconnectPolicy),a=i.streamIdleReconnectPolicy,o=e.startIndex,s=a.baseDelayMs,c=0,l=!0,u;for(;;){let d;try{d=await openStreamBody({...e,retryPolicy:i,startIndex:o,requestTailIndex:e.follow===!1&&u===void 0})}catch(t){if(e.signal?.aborted)return;throw t}if(e.follow===!1&&u===void 0&&(u=d.tailIndex,u===void 0))throw d.close(),Error(`stream({ follow: false }) requires the server to report the ${EVE_STREAM_TAIL_INDEX_HEADER} header. The agent may be running an older eve version.`);if(u!==void 0&&o>u){d.close();return}let f=!1;try{for await(let t of readNdjsonStream(d.body,{idleTimeoutMs:e.streamReadIdleTimeoutMs??15e3,streamVersion:d.streamVersion}))if(o+=1,f=!0,s=a.baseDelayMs,c=0,yield t,u!==void 0&&o>u)return}catch(e){if(!isStreamDisconnectError(e))throw e}finally{d.close()}if(e.signal?.aborted||e.startIndex<0||a.maxAttempts===0||e.keepAlive!==!0&&!f&&!l&&(c+=1)>=a.maxAttempts||(l=!1,await sleep(s,e.signal),e.signal?.aborted))return;s=Math.min(s*2,a.maxDelayMs)}}async function openStreamBody(t){let r=t.retryPolicy??DEFAULT_STREAM_RECONNECT_POLICY,c=r.streamOpenReconnectPolicy,l,u,d,f=c.baseDelayMs,p={};t.startIndex!==0&&(p.startIndex=String(t.startIndex)),t.requestTailIndex===!0&&(p.includeTailIndex=`1`);for(let s=0;s<c.maxAttempts;s+=1){let m=createClientUrl(t.host,createEveSessionStreamRoutePath(t.sessionId),Object.keys(p).length>0?p:void 0),h=await t.resolveHeaders(),g=new AbortController,_=t.signal?AbortSignal.any([t.signal,g.signal]):g.signal,v;try{v=await fetch(m,{cache:`no-store`,headers:h,redirect:t.redirect,signal:_})}catch(e){if(t.signal?.aborted||!isStreamDisconnectError(e)||s===c.maxAttempts-1)throw e;await sleep(f,t.signal),f=Math.min(f*2,c.maxDelayMs);continue}if(v.ok){if(!v.body)throw new ClientError(v.status,`Response body is null.`,v.headers);return{body:v.body,close:()=>g.abort(),streamVersion:readMessageStreamVersion(v.headers),tailIndex:parseTailIndexHeader(v.headers)}}if(l=v.status,u=await v.text(),d=v.headers,!r.retryableErrorStatuses.has(v.status))throw new ClientError(v.status,u,v.headers);s<c.maxAttempts-1&&(await sleep(f,t.signal),f=Math.min(f*2,c.maxDelayMs))}throw new ClientError(l??0,u??`Failed to open message stream.`,d)}function parseTailIndexHeader(e){let n=e.get(EVE_STREAM_TAIL_INDEX_HEADER);if(n===null||!/^-?\d+$/.test(n))return;let r=Number(n);return Number.isSafeInteger(r)?r:void 0}async function sleep(e,t){t?.aborted||await new Promise(n=>{let onAbort=()=>{clearTimeout(r),n()},r=setTimeout(()=>{t?.removeEventListener(`abort`,onAbort),n()},e);t?.addEventListener(`abort`,onAbort,{once:!0})})}export{followStreamIterable,openStreamBody,sleep};
1
+ import{createEveSessionStreamRoutePath}from"#protocol/routes.js";import{EVE_STREAM_TAIL_INDEX_HEADER}from"#protocol/message.js";import{isStreamDisconnectError,readNdjsonStream}from"#client/ndjson.js";import{readMessageStreamVersion}from"#client/stream-version.js";import{ClientError}from"#client/client-error.js";import{createClientUrl}from"#client/url.js";const DEFAULT_STREAM_RECONNECT_POLICY={retryableErrorStatuses:new Set([404,409,425,500,502,503,504]),streamIdleReconnectPolicy:{baseDelayMs:250,maxAttempts:5,maxDelayMs:4e3},streamOpenReconnectPolicy:{baseDelayMs:250,maxAttempts:12,maxDelayMs:5e3}},NO_STREAM_RECONNECT_POLICY={...DEFAULT_STREAM_RECONNECT_POLICY,streamIdleReconnectPolicy:{...DEFAULT_STREAM_RECONNECT_POLICY.streamIdleReconnectPolicy,maxAttempts:0},streamOpenReconnectPolicy:{...DEFAULT_STREAM_RECONNECT_POLICY.streamOpenReconnectPolicy,maxAttempts:1}};function resolveRetryPolicy(e,t){return{...t,...e}}function resolveStreamReconnectPolicy(e){if(e&&`reconnect`in e&&e.reconnect===!1)return NO_STREAM_RECONNECT_POLICY;let t=e;return{retryableErrorStatuses:t?.retryableErrorStatuses?new Set(t.retryableErrorStatuses):DEFAULT_STREAM_RECONNECT_POLICY.retryableErrorStatuses,streamIdleReconnectPolicy:resolveRetryPolicy(t?.streamIdleReconnectPolicy,DEFAULT_STREAM_RECONNECT_POLICY.streamIdleReconnectPolicy),streamOpenReconnectPolicy:resolveRetryPolicy(t?.streamOpenReconnectPolicy,DEFAULT_STREAM_RECONNECT_POLICY.streamOpenReconnectPolicy)}}async function*followStreamIterable(e){if(e.follow===!1&&e.startIndex<0)throw Error(`stream({ follow: false }) requires a nonnegative startIndex; a tail-relative cursor cannot be bounded.`);let i=resolveStreamReconnectPolicy(e.streamReconnectPolicy),a=i.streamIdleReconnectPolicy,o=e.startIndex,s=a.baseDelayMs,c=0,l=!0,u;for(;;){let d;try{d=await openStreamBody({...e,retryPolicy:i,startIndex:o,requestTailIndex:e.follow===!1&&u===void 0})}catch(t){if(e.signal?.aborted)return;throw t}if(e.follow===!1&&u===void 0&&(u=d.tailIndex,u===void 0))throw d.close(),Error(`stream({ follow: false }) requires the server to report the ${EVE_STREAM_TAIL_INDEX_HEADER} header. The agent may be running an older eve version.`);if(u!==void 0&&o>u){d.close();return}let f=!1;try{for await(let t of readNdjsonStream(d.body,{idleTimeoutMs:e.streamReadIdleTimeoutMs??15e3,streamVersion:d.streamVersion}))if(o+=1,f=!0,s=a.baseDelayMs,c=0,yield t,u!==void 0&&o>u)return}catch(e){if(!isStreamDisconnectError(e))throw e}finally{d.close()}if(e.signal?.aborted||e.startIndex<0||a.maxAttempts===0||e.keepAlive!==!0&&!f&&!l&&(c+=1)>=a.maxAttempts||(l=!1,await sleep(s,e.signal),e.signal?.aborted))return;s=Math.min(s*2,a.maxDelayMs)}}async function openStreamBody(t){let r=t.retryPolicy??DEFAULT_STREAM_RECONNECT_POLICY,c=r.streamOpenReconnectPolicy,l,u,d,f=c.baseDelayMs,p={};t.startIndex!==0&&(p.startIndex=String(t.startIndex)),t.requestTailIndex===!0&&(p.includeTailIndex=`1`);for(let s=0;s<c.maxAttempts;s+=1){let m=createClientUrl(t.host,createEveSessionStreamRoutePath(t.sessionId),Object.keys(p).length>0?p:void 0),h=await t.resolveHeaders(),g=new AbortController,_=t.signal?AbortSignal.any([t.signal,g.signal]):g.signal,v;try{v=await fetch(m,{cache:`no-store`,headers:h,redirect:t.redirect,signal:_})}catch(e){if(t.signal?.aborted||!isStreamDisconnectError(e)||s===c.maxAttempts-1)throw e;await sleep(f,t.signal),f=Math.min(f*2,c.maxDelayMs);continue}if(v.ok){if(!v.body)throw new ClientError(v.status,`Response body is null.`,v.headers);let e=!1;return{body:v.body,close:()=>{e||(e=!0,v.body?.cancel().catch(()=>{}),g.abort())},streamVersion:readMessageStreamVersion(v.headers),tailIndex:parseTailIndexHeader(v.headers)}}if(l=v.status,u=await v.text(),d=v.headers,!r.retryableErrorStatuses.has(v.status))throw new ClientError(v.status,u,v.headers);s<c.maxAttempts-1&&(await sleep(f,t.signal),f=Math.min(f*2,c.maxDelayMs))}throw new ClientError(l??0,u??`Failed to open message stream.`,d)}function parseTailIndexHeader(e){let n=e.get(EVE_STREAM_TAIL_INDEX_HEADER);if(n===null||!/^-?\d+$/.test(n))return;let r=Number(n);return Number.isSafeInteger(r)?r:void 0}async function sleep(e,t){t?.aborted||await new Promise(n=>{let onAbort=()=>{clearTimeout(r),n()},r=setTimeout(()=>{t?.removeEventListener(`abort`,onAbort),n()},e);t?.addEventListener(`abort`,onAbort,{once:!0})})}export{followStreamIterable,openStreamBody,sleep};
@@ -7,6 +7,8 @@ interface SessionControlContext {
7
7
  export declare function cancelClientSession(input: {
8
8
  readonly context: SessionControlContext;
9
9
  readonly options?: {
10
+ readonly signal?: AbortSignal;
11
+ readonly tasks?: boolean;
10
12
  readonly turnId?: string;
11
13
  };
12
14
  readonly sessionId: string;
@@ -23,6 +25,7 @@ export declare function resetClientSession(input: {
23
25
  readonly context: SessionControlContext;
24
26
  readonly options?: {
25
27
  readonly reason?: string;
28
+ readonly signal?: AbortSignal;
26
29
  };
27
30
  readonly sessionId: string;
28
31
  }): Promise<ResetResult>;
@@ -1 +1 @@
1
- import{createEveSessionCancelRoutePath,createEveSessionClearRoutePath,createEveSessionCompactRoutePath,createEveSessionResetRoutePath}from"#protocol/routes.js";import{ClientError}from"#client/client-error.js";import{createClientUrl}from"#client/url.js";import{CancelTurnResponseSchema}from"#protocol/cancel-turn.js";import{ClearResponseSchema}from"#protocol/clear-session.js";import{CompactResponseSchema}from"#protocol/compact-session.js";import{ResetResponseSchema}from"#protocol/reset-session.js";async function cancelClientSession(t){let{payload:n,response:r}=await postJson({body:t.options,context:t.context,operation:`Cancel`,path:createEveSessionCancelRoutePath(t.sessionId)}),i=CancelTurnResponseSchema.safeParse(n);if(!i.success||i.data.status===`accepted`&&i.data.sessionId!==t.sessionId)throw Error(`Cancel route returned an invalid response (${r.status}).`);return i.data.status===`accepted`?{sessionId:i.data.sessionId,status:`accepted`}:{status:`no_active_turn`}}async function clearClientSession(e){let{payload:n}=await postJson({context:e.context,operation:`Clear`,path:createEveSessionClearRoutePath(e.sessionId)}),r=ClearResponseSchema.safeParse(n);if(!r.success||r.data.status===`accepted`&&r.data.sessionId!==e.sessionId)throw Error(`Clear route returned an invalid response.`);return r.data.status===`accepted`?{sessionId:r.data.sessionId,status:`accepted`}:{status:`no_active_session`}}async function compactClientSession(e){let{payload:t}=await postJson({context:e.context,operation:`Compact`,path:createEveSessionCompactRoutePath(e.sessionId)}),r=CompactResponseSchema.safeParse(t);if(!r.success||r.data.status===`accepted`&&r.data.sessionId!==e.sessionId)throw Error(`Compact route returned an invalid response.`);return r.data.status===`accepted`?{sessionId:r.data.sessionId,status:`accepted`}:{status:`no_active_session`}}async function resetClientSession(e){let{payload:t}=await postJson({body:e.options,context:e.context,operation:`Reset`,path:createEveSessionResetRoutePath(e.sessionId)}),n=ResetResponseSchema.safeParse(t);if(!n.success||n.data.status===`reset`&&n.data.previousSessionId!==e.sessionId)throw Error(`Reset route returned an invalid response.`);return n.data.status===`reset`?{previousSessionId:n.data.previousSessionId,status:`reset`}:{status:`no_active_session`}}async function postJson(e){let t=await e.context.resolveHeaders();t.set(`content-type`,`application/json`);let n=await fetch(createClientUrl(e.context.host,e.path),withRedirectPolicy({body:e.body===void 0?void 0:JSON.stringify(e.body),headers:t,method:`POST`},e.context.redirect)),r=await n.text();if(!n.ok)throw new ClientError(n.status,r,n.headers);try{return{payload:JSON.parse(r),response:n}}catch{throw Error(`${e.operation} route returned invalid JSON (${n.status}).`)}}function withRedirectPolicy(e,t){return t===void 0?e:{...e,redirect:t}}export{cancelClientSession,clearClientSession,compactClientSession,resetClientSession};
1
+ import{createEveSessionCancelRoutePath,createEveSessionClearRoutePath,createEveSessionCompactRoutePath,createEveSessionResetRoutePath}from"#protocol/routes.js";import{ClientError}from"#client/client-error.js";import{createClientUrl}from"#client/url.js";import{CancelTurnResponseSchema}from"#protocol/cancel-turn.js";import{ClearResponseSchema}from"#protocol/clear-session.js";import{CompactResponseSchema}from"#protocol/compact-session.js";import{ResetResponseSchema}from"#protocol/reset-session.js";async function cancelClientSession(t){let{signal:n,...r}=t.options??{},{payload:i,response:a}=await postJson({body:r,context:t.context,operation:`Cancel`,path:createEveSessionCancelRoutePath(t.sessionId),signal:n}),o=CancelTurnResponseSchema.safeParse(i);if(!o.success||o.data.status===`accepted`&&o.data.sessionId!==t.sessionId)throw Error(`Cancel route returned an invalid response (${a.status}).`);return o.data.status===`accepted`?{sessionId:o.data.sessionId,status:`accepted`}:{status:`no_active_turn`}}async function clearClientSession(e){let{payload:n}=await postJson({context:e.context,operation:`Clear`,path:createEveSessionClearRoutePath(e.sessionId)}),r=ClearResponseSchema.safeParse(n);if(!r.success||r.data.status===`accepted`&&r.data.sessionId!==e.sessionId)throw Error(`Clear route returned an invalid response.`);return r.data.status===`accepted`?{sessionId:r.data.sessionId,status:`accepted`}:{status:`no_active_session`}}async function compactClientSession(e){let{payload:t}=await postJson({context:e.context,operation:`Compact`,path:createEveSessionCompactRoutePath(e.sessionId)}),r=CompactResponseSchema.safeParse(t);if(!r.success||r.data.status===`accepted`&&r.data.sessionId!==e.sessionId)throw Error(`Compact route returned an invalid response.`);return r.data.status===`accepted`?{sessionId:r.data.sessionId,status:`accepted`}:{status:`no_active_session`}}async function resetClientSession(e){let{signal:t,...n}=e.options??{},{payload:i}=await postJson({body:n,context:e.context,operation:`Reset`,path:createEveSessionResetRoutePath(e.sessionId),signal:t}),a=ResetResponseSchema.safeParse(i);if(!a.success||a.data.status===`reset`&&a.data.previousSessionId!==e.sessionId)throw Error(`Reset route returned an invalid response.`);return a.data.status===`reset`?{previousSessionId:a.data.previousSessionId,status:`reset`}:{status:`no_active_session`}}async function postJson(e){let t=await e.context.resolveHeaders();t.set(`content-type`,`application/json`);let n=await fetch(createClientUrl(e.context.host,e.path),withRedirectPolicy({body:e.body===void 0?void 0:JSON.stringify(e.body),headers:t,method:`POST`,signal:e.signal},e.context.redirect)),r=await n.text();if(!n.ok)throw new ClientError(n.status,r,n.headers);try{return{payload:JSON.parse(r),response:n}}catch{throw Error(`${e.operation} route returned invalid JSON (${n.status}).`)}}function withRedirectPolicy(e,t){return t===void 0?e:{...e,redirect:t}}export{cancelClientSession,clearClientSession,compactClientSession,resetClientSession};
@@ -31,8 +31,10 @@ export declare class ClientSession {
31
31
  send<TOutput = unknown>(message: SendTurnInput<TOutput>["message"], options?: SendTurnOptions<TOutput>): Promise<MessageResponse<TOutput>>;
32
32
  /** Answers pending input requests on this exact session ID. */
33
33
  respond<TOutput = unknown>(inputResponses: readonly InputResponse[], options?: RespondTurnOptions<TOutput>): Promise<MessageResponse<TOutput>>;
34
- /** Requests cooperative cancellation of this session's active turn. */
34
+ /** Requests cooperative cancellation of this session's active turn and optionally its tasks. */
35
35
  cancel(options?: {
36
+ readonly signal?: AbortSignal;
37
+ readonly tasks?: boolean;
36
38
  readonly turnId?: string;
37
39
  }): Promise<CancelSessionResult>;
38
40
  /** Queues removal of this session's durable model-message history. */
@@ -42,6 +44,7 @@ export declare class ClientSession {
42
44
  /** Terminally retires this exact session ID. The handle remains pinned to it. */
43
45
  reset(options?: {
44
46
  readonly reason?: string;
47
+ readonly signal?: AbortSignal;
45
48
  }): Promise<ResetResult>;
46
49
  /** Opens this session's durable event stream from its stored cursor. */
47
50
  stream(options?: StreamOptions): AsyncIterable<MessageStreamEvent>;
@@ -84,12 +84,13 @@ export interface SendTurnOptions<TOutput = unknown> {
84
84
  /** Policy for a message sent while the fixed session has an active turn. */
85
85
  readonly turnPolicy?: TurnPolicy;
86
86
  /**
87
- * Ephemeral client/page context for the next model call only.
87
+ * Ephemeral client/page context for the current turn.
88
88
  *
89
89
  * Strings are rendered as user-role model context messages. Objects are
90
90
  * JSON-serialized into one user-role model context message. Client context
91
91
  * rides along with a message or HITL response; it does not dispatch a turn by
92
- * itself and is never persisted to durable session history.
92
+ * itself, remains available to every model call in the turn, and is never
93
+ * persisted to durable session history or exposed to later turns.
93
94
  */
94
95
  readonly clientContext?: string | readonly string[] | JsonObject;
95
96
  /**
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "moduleFingerprints": {
3
- "@eve/catalog": "fe08e23d317a6a20f28cac1bdcea85674f91b29f74e4f0e2bf041ec81966b432"
3
+ "@eve/catalog": "1a52c83c427f093856c0f21512b04d1546e959c80bb1c58672520cbead580260"
4
4
  },
5
5
  "moduleVersions": {
6
6
  "@agentclientprotocol/sdk": "1.3.0",
@@ -10,6 +10,7 @@
10
10
  "@chat-adapter/slack": "4.34.0",
11
11
  "@chat-adapter/state-memory": "4.34.0",
12
12
  "@chat-adapter/twilio": "4.34.0",
13
+ "@clack/core": "1.3.1",
13
14
  "chokidar": "5.0.0",
14
15
  "commander": "14.0.3",
15
16
  "eventsource-parser": "3.1.0",
@@ -40,20 +41,19 @@
40
41
  "@vercel/detect-agent": "1.2.3",
41
42
  "@vercel/oidc": "3.8.0",
42
43
  "@vercel/otel": "2.1.3",
43
- "@vercel/sandbox-drives": "2.10.0-beta.0",
44
- "@vercel/sandbox-delete": "3.2.0",
45
- "@vercel/sandbox": "2.8.0",
46
- "@workflow/builders": "5.0.0-beta.47",
47
- "@workflow/core": "5.0.0-beta.47",
48
- "@workflow/errors": "5.0.0-beta.19",
44
+ "@vercel/sandbox": "3.2.1",
45
+ "@vercel/sandbox-drives": "3.1.0-beta.1",
46
+ "@workflow/builders": "5.0.0-beta.48",
47
+ "@workflow/core": "5.0.0-beta.48",
48
+ "@workflow/errors": "5.0.0-beta.20",
49
49
  "@workflow/serde": "5.0.0-beta.2",
50
- "@workflow/world": "5.0.0-beta.32",
51
- "@workflow/world-local": "5.0.0-beta.41",
52
- "@workflow/world-vercel": "5.0.0-beta.43",
50
+ "@workflow/world": "5.0.0-beta.33",
51
+ "@workflow/world-local": "5.0.0-beta.42",
52
+ "@workflow/world-vercel": "5.0.0-beta.44",
53
53
  "zod": "4.5.4",
54
54
  "zod-validation-error": "5.0.0"
55
55
  },
56
- "scriptHash": "6f739a052f3c59cca4c89caa8ba012ffa89056434b524b16aa3cc65a537f6201",
56
+ "scriptHash": "48ac03db00797ced3de99300179ea8bec7de0cb4bcdc973eac8b039b78adeaa5",
57
57
  "toolVersions": {
58
58
  "rolldown": "1.1.5",
59
59
  "typescript": "7.0.2"
@@ -0,0 +1,9 @@
1
+ MIT License
2
+
3
+ Copyright (c) Nate Moore
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.