eve 0.75.1 → 0.76.2

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 (720) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/dist/src/_virtual/_rolldown/runtime.js +1 -1
  3. package/dist/src/acp/adapter.js +1 -1
  4. package/dist/src/channel/channel-address.d.ts +3 -1
  5. package/dist/src/channel/channel-address.js +1 -1
  6. package/dist/src/channel/session-stranded-error.d.ts +25 -0
  7. package/dist/src/channel/session-stranded-error.js +1 -0
  8. package/dist/src/channel/session.d.ts +13 -6
  9. package/dist/src/channel/task-card.js +1 -1
  10. package/dist/src/channel/tool-eligibility.d.ts +1 -2
  11. package/dist/src/channel/types.d.ts +29 -1
  12. package/dist/src/chunks/{use-eve-agent-DK_T88EP.js → use-eve-agent-BtKWTEpm.js} +99 -24
  13. package/dist/src/chunks/{use-eve-agent-B2Kne9z6.js → use-eve-agent-jI6EsYAu.js} +99 -24
  14. package/dist/src/cli/commands/registry-project.d.ts +10 -3
  15. package/dist/src/cli/commands/registry-project.js +2 -2
  16. package/dist/src/cli/commands/registry.js +1 -1
  17. package/dist/src/cli/dev/environment.d.ts +0 -6
  18. package/dist/src/cli/dev/environment.js +1 -1
  19. package/dist/src/cli/dev/tui/conversation-view.js +1 -1
  20. package/dist/src/cli/dev/tui/runner.js +3 -3
  21. package/dist/src/cli/dev/tui/stranded-session.d.ts +9 -0
  22. package/dist/src/cli/dev/tui/stranded-session.js +1 -0
  23. package/dist/src/cli/dev/tui/tool-presentation.js +1 -1
  24. package/dist/src/cli/dev/tui/transcript.js +1 -1
  25. package/dist/src/client/client-error.d.ts +16 -0
  26. package/dist/src/client/client-error.js +1 -1
  27. package/dist/src/client/client.js +1 -1
  28. package/dist/src/client/index.d.ts +3 -2
  29. package/dist/src/client/index.js +1 -1
  30. package/dist/src/client/message-action-parts.d.ts +3 -0
  31. package/dist/src/client/message-action-parts.js +1 -1
  32. package/dist/src/client/message-reducer-types.d.ts +6 -1
  33. package/dist/src/client/message-reducer.js +1 -1
  34. package/dist/src/client/open-stream.d.ts +5 -3
  35. package/dist/src/client/open-stream.js +1 -1
  36. package/dist/src/client/session-controls.js +1 -1
  37. package/dist/src/client/session.js +1 -1
  38. package/dist/src/client/transcript-reducer.d.ts +46 -0
  39. package/dist/src/client/transcript-reducer.js +2 -0
  40. package/dist/src/compiled/.vendor-stamp.json +3 -2
  41. package/dist/src/compiled/@eve/catalog/index.js +1 -1
  42. package/dist/src/compiled/@vercel/queue/index.d.ts +1066 -0
  43. package/dist/src/compiled/@vercel/queue/index.js +47 -0
  44. package/dist/src/compiler/connection-ownership.d.ts +6 -0
  45. package/dist/src/compiler/connection-ownership.js +1 -0
  46. package/dist/src/compiler/default-tool-policy.d.ts +0 -3
  47. package/dist/src/compiler/default-tool-policy.js +1 -1
  48. package/dist/src/compiler/extension-compatibility.d.ts +23 -22
  49. package/dist/src/compiler/extension-compatibility.js +1 -1
  50. package/dist/src/compiler/manifest.d.ts +9 -6
  51. package/dist/src/compiler/manifest.js +1 -1
  52. package/dist/src/compiler/normalize-agent-config.js +1 -1
  53. package/dist/src/compiler/normalize-connection.js +1 -1
  54. package/dist/src/compiler/normalize-manifest.js +1 -1
  55. package/dist/src/compiler/normalize-skill.d.ts +5 -0
  56. package/dist/src/compiler/normalize-skill.js +1 -1
  57. package/dist/src/compiler/normalize-subagent.d.ts +2 -1
  58. package/dist/src/compiler/normalize-subagent.js +1 -1
  59. package/dist/src/compiler/normalize-tool.js +1 -1
  60. package/dist/src/compiler/remote-agent-node.d.ts +2 -1
  61. package/dist/src/compiler/remote-agent-node.js +1 -1
  62. package/dist/src/connections/ownership.d.ts +18 -0
  63. package/dist/src/connections/ownership.js +1 -0
  64. package/dist/src/context/accessors.d.ts +1 -1
  65. package/dist/src/context/build-callback-context.js +1 -1
  66. package/dist/src/context/build-dynamic-tools.d.ts +3 -9
  67. package/dist/src/context/build-dynamic-tools.js +1 -1
  68. package/dist/src/context/dynamic-connection-lifecycle.js +1 -1
  69. package/dist/src/context/dynamic-resolve-context.js +1 -1
  70. package/dist/src/context/dynamic-skill-lifecycle.d.ts +2 -11
  71. package/dist/src/context/dynamic-skill-lifecycle.js +1 -1
  72. package/dist/src/context/dynamic-subagent-lifecycle.js +1 -1
  73. package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
  74. package/dist/src/context/dynamic-tool-metadata.d.ts +1 -0
  75. package/dist/src/context/keys.d.ts +10 -4
  76. package/dist/src/context/keys.js +1 -1
  77. package/dist/src/context/memory-tools.js +1 -1
  78. package/dist/src/context/providers/session.d.ts +1 -0
  79. package/dist/src/context/providers/session.js +1 -1
  80. package/dist/src/context/schedule-collection-tools.js +1 -1
  81. package/dist/src/context/session-context.d.ts +8 -2
  82. package/dist/src/discover/grammar.d.ts +11 -0
  83. package/dist/src/discover/grammar.js +1 -1
  84. package/dist/src/discover/manifest.d.ts +1 -0
  85. package/dist/src/discover/manifest.js +1 -1
  86. package/dist/src/discover/skills.d.ts +1 -0
  87. package/dist/src/discover/skills.js +1 -1
  88. package/dist/src/dynamic/definition.d.ts +14 -6
  89. package/dist/src/evals/assertions/collector.d.ts +4 -0
  90. package/dist/src/evals/assertions/collector.js +1 -1
  91. package/dist/src/evals/assertions/run.d.ts +2 -3
  92. package/dist/src/evals/assertions/run.js +2 -2
  93. package/dist/src/evals/assertions/scoped.js +1 -1
  94. package/dist/src/evals/index.d.ts +1 -1
  95. package/dist/src/evals/match.d.ts +9 -6
  96. package/dist/src/evals/reported-tool-name.d.ts +9 -0
  97. package/dist/src/evals/reported-tool-name.js +1 -0
  98. package/dist/src/evals/runner/derive-run-facts.d.ts +3 -3
  99. package/dist/src/evals/runner/derive-run-facts.js +1 -1
  100. package/dist/src/evals/runner/execute-task.js +1 -1
  101. package/dist/src/evals/runner/reporters/braintrust.js +1 -1
  102. package/dist/src/evals/runner/reporters/datadog-runtime-trace-links.d.ts +11 -0
  103. package/dist/src/evals/runner/reporters/datadog-runtime-trace-links.js +1 -0
  104. package/dist/src/evals/runner/reporters/datadog.js +2 -2
  105. package/dist/src/evals/session.js +2 -2
  106. package/dist/src/evals/target.d.ts +7 -0
  107. package/dist/src/evals/target.js +1 -1
  108. package/dist/src/evals/types.d.ts +19 -2
  109. package/dist/src/eve-channel/index.js +1 -1
  110. package/dist/src/eve-channel/request.js +2 -2
  111. package/dist/src/eve-channel/support.d.ts +2 -0
  112. package/dist/src/eve-channel/support.js +1 -1
  113. package/dist/src/execution/agent-sessions/remote.js +1 -1
  114. package/dist/src/execution/agent-sessions/steps.js +1 -1
  115. package/dist/src/execution/catalog/connection-auth.d.ts +41 -0
  116. package/dist/src/execution/catalog/connection-auth.js +1 -0
  117. package/dist/src/execution/catalog/connection-entry.d.ts +16 -0
  118. package/dist/src/execution/catalog/connection-entry.js +1 -0
  119. package/dist/src/execution/catalog/listing.d.ts +9 -0
  120. package/dist/src/execution/catalog/listing.js +3 -0
  121. package/dist/src/execution/catalog/rank.d.ts +44 -0
  122. package/dist/src/execution/catalog/rank.js +1 -0
  123. package/dist/src/execution/catalog/search.d.ts +28 -0
  124. package/dist/src/execution/catalog/search.js +1 -0
  125. package/dist/src/execution/catalog/signatures.d.ts +11 -0
  126. package/dist/src/execution/catalog/signatures.js +1 -0
  127. package/dist/src/execution/catalog/skills.d.ts +24 -0
  128. package/dist/src/execution/catalog/skills.js +1 -0
  129. package/dist/src/execution/catalog/step-catalog.d.ts +51 -0
  130. package/dist/src/execution/catalog/step-catalog.js +1 -0
  131. package/dist/src/execution/coordination-dispatch-shared.js +1 -1
  132. package/dist/src/execution/dynamic-connections.js +1 -1
  133. package/dist/src/execution/dynamic-workflow/tool.js +1 -1
  134. package/dist/src/execution/eve-workflow-attributes.d.ts +15 -0
  135. package/dist/src/execution/eve-workflow-attributes.js +1 -1
  136. package/dist/src/execution/install-workflow-world.d.ts +7 -0
  137. package/dist/src/execution/install-workflow-world.js +1 -0
  138. package/dist/src/execution/invoke-tool.js +1 -1
  139. package/dist/src/execution/legacy-session/authorization.js +1 -1
  140. package/dist/src/execution/legacy-session/inbox.js +1 -1
  141. package/dist/src/execution/legacy-session/turn-workflow.js +1 -1
  142. package/dist/src/execution/node-step.js +1 -1
  143. package/dist/src/execution/session/active-turn.d.ts +1 -1
  144. package/dist/src/execution/session/entry.js +1 -1
  145. package/dist/src/execution/session/handoff-steps.d.ts +11 -0
  146. package/dist/src/execution/session/handoff-steps.js +1 -1
  147. package/dist/src/execution/session/pending-turn-state.js +1 -1
  148. package/dist/src/execution/session/program.js +1 -1
  149. package/dist/src/execution/session/timeout-steps.js +1 -1
  150. package/dist/src/execution/session/turn-step.js +1 -1
  151. package/dist/src/execution/session/turn.d.ts +5 -5
  152. package/dist/src/execution/session/turn.js +1 -1
  153. package/dist/src/execution/session-event-stream.d.ts +6 -0
  154. package/dist/src/execution/session-event-stream.js +1 -1
  155. package/dist/src/execution/session-inbox/address.d.ts +4 -0
  156. package/dist/src/execution/session-inbox/address.js +1 -1
  157. package/dist/src/execution/session-inbox/end-stranded-session.d.ts +22 -0
  158. package/dist/src/execution/session-inbox/end-stranded-session.js +1 -0
  159. package/dist/src/execution/session-inbox/hook-release.d.ts +4 -0
  160. package/dist/src/execution/session-inbox/hook-release.js +1 -0
  161. package/dist/src/execution/session-inbox/owner.d.ts +48 -0
  162. package/dist/src/execution/session-inbox/owner.js +1 -0
  163. package/dist/src/execution/session-inbox/resume.d.ts +12 -0
  164. package/dist/src/execution/session-inbox/resume.js +1 -1
  165. package/dist/src/execution/session-inbox/runnable-owner.d.ts +13 -0
  166. package/dist/src/execution/session-inbox/runnable-owner.js +1 -0
  167. package/dist/src/execution/session-inbox/stranded-replay-guard.d.ts +16 -0
  168. package/dist/src/execution/session-inbox/stranded-replay-guard.js +1 -0
  169. package/dist/src/execution/session.js +1 -1
  170. package/dist/src/execution/skills/instructions.d.ts +20 -10
  171. package/dist/src/execution/skills/instructions.js +2 -2
  172. package/dist/src/execution/tasks/calls.d.ts +6 -5
  173. package/dist/src/execution/tasks/calls.js +1 -1
  174. package/dist/src/execution/tasks/model-step.d.ts +10 -10
  175. package/dist/src/execution/tasks/model-step.js +1 -1
  176. package/dist/src/execution/tasks/render.d.ts +3 -3
  177. package/dist/src/execution/tasks/render.js +3 -3
  178. package/dist/src/execution/tasks/session.d.ts +2 -1
  179. package/dist/src/execution/tasks/table.d.ts +1 -1
  180. package/dist/src/execution/tasks/tool-entry-point.d.ts +1 -1
  181. package/dist/src/execution/tool-auth.js +1 -1
  182. package/dist/src/execution/tools/agent-router-workflow.js +1 -1
  183. package/dist/src/execution/tools/workflow/harness-definition.js +1 -1
  184. package/dist/src/execution/workflow-runtime.d.ts +5 -1
  185. package/dist/src/execution/workflow-runtime.js +1 -1
  186. package/dist/src/extensions/code/extension/extension.d.ts +4 -18
  187. package/dist/src/extensions/code/extension/instructions/github.d.ts +3 -0
  188. package/dist/src/extensions/code/extension/instructions/github.js +1 -0
  189. package/dist/src/extensions/code/extension/instructions.md +1 -13
  190. package/dist/src/extensions/code/extension/lib/diagnostics.d.ts +4 -2
  191. package/dist/src/extensions/code/extension/lib/diagnostics.js +3 -3
  192. package/dist/src/extensions/code/extension/lib/github-compat.d.ts +28 -0
  193. package/dist/src/extensions/code/extension/lib/github-compat.js +1 -0
  194. package/dist/src/extensions/code/extension/lib/grep-search.d.ts +3 -13
  195. package/dist/src/extensions/code/extension/lib/grep-search.js +2 -2
  196. package/dist/src/extensions/code/extension/lib/patch.d.ts +8 -2
  197. package/dist/src/extensions/code/extension/lib/patch.js +4 -4
  198. package/dist/src/extensions/code/extension/lib/repository-root.d.ts +3 -4
  199. package/dist/src/extensions/code/extension/lib/repository-root.js +1 -1
  200. package/dist/src/extensions/code/extension/lib/sandbox.d.ts +2 -1
  201. package/dist/src/extensions/code/extension/lib/sandbox.js +1 -1
  202. package/dist/src/extensions/code/extension/lib/tooling.d.ts +4 -4
  203. package/dist/src/extensions/code/extension/lib/tooling.js +7 -7
  204. package/dist/src/extensions/code/extension/lib/workspace-root.d.ts +31 -0
  205. package/dist/src/extensions/code/extension/lib/workspace-root.js +1 -0
  206. package/dist/src/extensions/code/extension/skills/pr.d.ts +6 -0
  207. package/dist/src/extensions/code/extension/skills/pr.js +1 -0
  208. package/dist/src/extensions/code/extension/tools/apply_patch.d.ts +2 -2
  209. package/dist/src/extensions/code/extension/tools/apply_patch.js +2 -2
  210. package/dist/src/extensions/code/extension/tools/gh.d.ts +4 -3
  211. package/dist/src/extensions/code/extension/tools/gh.js +1 -1
  212. package/dist/src/extensions/code/extension/tools/grep.js +1 -1
  213. package/dist/src/extensions/code/tools.d.ts +2 -1
  214. package/dist/src/extensions/code/tools.js +1 -1
  215. package/dist/src/extensions/git/extension/extension.d.ts +12 -0
  216. package/dist/src/extensions/git/extension/extension.js +1 -0
  217. package/dist/src/extensions/git/extension/instructions/github.d.ts +2 -0
  218. package/dist/src/extensions/git/extension/instructions/github.js +1 -0
  219. package/dist/src/extensions/git/extension/lib/gh-tool.d.ts +29 -0
  220. package/dist/src/extensions/git/extension/lib/gh-tool.js +1 -0
  221. package/dist/src/extensions/git/extension/lib/github-guidance.d.ts +3 -0
  222. package/dist/src/extensions/git/extension/lib/github-guidance.js +49 -0
  223. package/dist/src/extensions/{code → git}/extension/lib/github-shell.d.ts +1 -1
  224. package/dist/src/extensions/git/extension/lib/github-shell.js +1 -0
  225. package/dist/src/extensions/git/extension/lib/repository-root.d.ts +5 -0
  226. package/dist/src/extensions/git/extension/lib/repository-root.js +1 -0
  227. package/dist/src/extensions/git/extension/lib/sandbox.d.ts +6 -0
  228. package/dist/src/extensions/git/extension/lib/sandbox.js +1 -0
  229. package/dist/src/extensions/git/extension/lib/shell.d.ts +1 -0
  230. package/dist/src/extensions/git/extension/lib/shell.js +1 -0
  231. package/dist/src/extensions/git/extension/lib/tooling.d.ts +4 -0
  232. package/dist/src/extensions/git/extension/lib/tooling.js +1 -0
  233. package/dist/src/extensions/git/extension/skills/pr.d.ts +5 -0
  234. package/dist/src/extensions/git/extension/skills/pr.js +1 -0
  235. package/dist/src/extensions/git/extension/tools/gh.d.ts +28 -0
  236. package/dist/src/extensions/git/extension/tools/gh.js +1 -0
  237. package/dist/src/extensions/git/tools.d.ts +27 -0
  238. package/dist/src/extensions/git/tools.js +1 -0
  239. package/dist/src/framework/sources/registry.js +1 -1
  240. package/dist/src/harness/action-presentation.d.ts +2 -2
  241. package/dist/src/harness/action-result-helpers.d.ts +10 -2
  242. package/dist/src/harness/action-result-helpers.js +1 -1
  243. package/dist/src/harness/announcements.d.ts +2 -8
  244. package/dist/src/harness/announcements.js +1 -1
  245. package/dist/src/harness/compaction/step.js +1 -1
  246. package/dist/src/harness/coordination.d.ts +11 -11
  247. package/dist/src/harness/coordination.js +1 -1
  248. package/dist/src/harness/current-messages.d.ts +1 -5
  249. package/dist/src/harness/current-messages.js +1 -1
  250. package/dist/src/harness/emission.d.ts +2 -2
  251. package/dist/src/harness/emission.js +1 -1
  252. package/dist/src/harness/execute-call.d.ts +48 -0
  253. package/dist/src/harness/execute-call.js +1 -0
  254. package/dist/src/harness/execute-tool.d.ts +3 -1
  255. package/dist/src/harness/final-output.d.ts +2 -6
  256. package/dist/src/harness/final-output.js +1 -1
  257. package/dist/src/harness/hitl/approvals.d.ts +5 -0
  258. package/dist/src/harness/hitl/approvals.js +1 -1
  259. package/dist/src/harness/hitl/approved-calls.d.ts +3 -2
  260. package/dist/src/harness/hitl/approved-calls.js +1 -1
  261. package/dist/src/harness/hitl/candidates.d.ts +13 -2
  262. package/dist/src/harness/hitl/candidates.js +1 -1
  263. package/dist/src/harness/hitl/coordinator.d.ts +3 -3
  264. package/dist/src/harness/hitl/coordinator.js +1 -1
  265. package/dist/src/harness/hitl/index.d.ts +6 -4
  266. package/dist/src/harness/hitl/index.js +1 -1
  267. package/dist/src/harness/hitl/intake.d.ts +3 -3
  268. package/dist/src/harness/hitl/intake.js +1 -1
  269. package/dist/src/harness/input-extraction.d.ts +4 -1
  270. package/dist/src/harness/input-extraction.js +1 -1
  271. package/dist/src/harness/input-request-resolution.d.ts +15 -0
  272. package/dist/src/harness/input-request-resolution.js +1 -1
  273. package/dist/src/harness/model-call/call.d.ts +4 -6
  274. package/dist/src/harness/model-call/call.js +1 -1
  275. package/dist/src/harness/model-call/errors.d.ts +5 -6
  276. package/dist/src/harness/model-call/errors.js +1 -1
  277. package/dist/src/harness/model-call/recovery.d.ts +4 -3
  278. package/dist/src/harness/model-call/request.d.ts +5 -3
  279. package/dist/src/harness/model-call/request.js +1 -1
  280. package/dist/src/harness/model-call/response.d.ts +2 -1
  281. package/dist/src/harness/model-call/response.js +1 -1
  282. package/dist/src/harness/model-call/run.d.ts +5 -3
  283. package/dist/src/harness/model-call/run.js +1 -1
  284. package/dist/src/harness/model-call/tools.d.ts +12 -21
  285. package/dist/src/harness/model-call/tools.js +1 -1
  286. package/dist/src/harness/model-profile.d.ts +15 -3
  287. package/dist/src/harness/model-profile.js +1 -1
  288. package/dist/src/harness/prompt-cache.d.ts +6 -3
  289. package/dist/src/harness/prompt-cache.js +1 -1
  290. package/dist/src/harness/provider-safety.d.ts +2 -1
  291. package/dist/src/harness/provider-safety.js +1 -1
  292. package/dist/src/harness/provider-tools.d.ts +7 -6
  293. package/dist/src/harness/provider-tools.js +1 -1
  294. package/dist/src/harness/session-machine/commit.js +1 -1
  295. package/dist/src/harness/session-machine/transitions.d.ts +8 -3
  296. package/dist/src/harness/session-machine/transitions.js +1 -1
  297. package/dist/src/harness/step/after-model.js +1 -1
  298. package/dist/src/harness/step/context.js +1 -1
  299. package/dist/src/harness/step-hooks.d.ts +4 -6
  300. package/dist/src/harness/step-hooks.js +1 -1
  301. package/dist/src/harness/tool-call-input-errors.d.ts +2 -2
  302. package/dist/src/harness/tool-call-io.d.ts +3 -0
  303. package/dist/src/harness/tool-call-io.js +1 -1
  304. package/dist/src/harness/tools.d.ts +22 -19
  305. package/dist/src/harness/tools.js +1 -1
  306. package/dist/src/harness/types.d.ts +14 -0
  307. package/dist/src/instrumentation/lifecycle.d.ts +0 -1
  308. package/dist/src/instrumentation/native-events.js +1 -1
  309. package/dist/src/instrumentation/runtime.d.ts +2 -1
  310. package/dist/src/internal/application/compiled-artifacts.js +4 -4
  311. package/dist/src/internal/application/package.d.ts +1 -1
  312. package/dist/src/internal/application/package.js +1 -1
  313. package/dist/src/internal/application/stamped-package-version.d.ts +5 -0
  314. package/dist/src/internal/application/stamped-package-version.js +1 -0
  315. package/dist/src/internal/authored-definition/core.d.ts +3 -0
  316. package/dist/src/internal/authored-definition/core.js +1 -1
  317. package/dist/src/internal/authored-definition/schedule-collection.js +1 -1
  318. package/dist/src/internal/authored-definition/schema-backed.d.ts +2 -2
  319. package/dist/src/internal/authored-definition/schema-backed.js +1 -1
  320. package/dist/src/internal/authored-module.d.ts +2 -1
  321. package/dist/src/internal/authored-module.js +1 -1
  322. package/dist/src/internal/helpers/markdown.js +1 -1
  323. package/dist/src/internal/mcp/skills.js +1 -1
  324. package/dist/src/internal/model-auth/available-models.js +1 -1
  325. package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
  326. package/dist/src/internal/nitro/host/dev-host-fingerprint.js +1 -1
  327. package/dist/src/internal/nitro/host/local-schedules-runtime-plugin.d.ts +5 -0
  328. package/dist/src/internal/nitro/host/local-schedules-runtime-plugin.js +1 -0
  329. package/dist/src/internal/nitro/routes/schedule-collection-consumer.d.ts +6 -0
  330. package/dist/src/internal/nitro/routes/schedule-collection-consumer.js +1 -1
  331. package/dist/src/internal/schedules/consumer-route.d.ts +2 -0
  332. package/dist/src/internal/schedules/consumer-route.js +1 -1
  333. package/dist/src/internal/schedules/dev-environment.d.ts +2 -0
  334. package/dist/src/internal/schedules/dev-environment.js +1 -0
  335. package/dist/src/internal/vercel-agent-summary.d.ts +2 -2
  336. package/dist/src/internal/workflow/development-run-unavailable-error.d.ts +15 -0
  337. package/dist/src/internal/workflow/development-run-unavailable-error.js +1 -0
  338. package/dist/src/internal/workflow/development-world-server.js +1 -1
  339. package/dist/src/internal/workflow/vercel-world-defaults.d.ts +1 -1
  340. package/dist/src/internal/workflow/vercel-world-defaults.js +1 -1
  341. package/dist/src/internal/workflow-bundle/workflow-builders.js +1 -1
  342. package/dist/src/protocol/catalog-tools.d.ts +12 -0
  343. package/dist/src/protocol/catalog-tools.js +1 -0
  344. package/dist/src/protocol/message-version.js +1 -1
  345. package/dist/src/protocol/message.d.ts +15 -1
  346. package/dist/src/protocol/message.js +1 -1
  347. package/dist/src/protocol/remote-agent-protocol.d.ts +2 -0
  348. package/dist/src/protocol/remote-agent-protocol.js +1 -1
  349. package/dist/src/protocol/reply-tool.d.ts +2 -0
  350. package/dist/src/protocol/reply-tool.js +1 -0
  351. package/dist/src/protocol/runtime-tools.d.ts +6 -0
  352. package/dist/src/protocol/runtime-tools.js +1 -0
  353. package/dist/src/protocol/session-projection.js +1 -1
  354. package/dist/src/protocol/task-tools.d.ts +4 -4
  355. package/dist/src/protocol/task-tools.js +1 -1
  356. package/dist/src/public/channels/chat-sdk/chatSdkChannel.js +1 -1
  357. package/dist/src/public/channels/index.d.ts +1 -1
  358. package/dist/src/public/channels/index.js +1 -1
  359. package/dist/src/public/channels/linear/defaults.js +2 -2
  360. package/dist/src/public/channels/slack/action-status.d.ts +0 -9
  361. package/dist/src/public/channels/slack/action-status.js +1 -1
  362. package/dist/src/public/channels/slack/defaults.js +2 -2
  363. package/dist/src/public/channels/slack/task-card.d.ts +1 -1
  364. package/dist/src/public/context/index.d.ts +1 -1
  365. package/dist/src/public/definitions/callback-context.d.ts +1 -1
  366. package/dist/src/public/definitions/channel.d.ts +1 -0
  367. package/dist/src/public/definitions/channel.js +1 -1
  368. package/dist/src/public/definitions/connections/mcp.d.ts +4 -4
  369. package/dist/src/public/definitions/connections/openapi.d.ts +6 -7
  370. package/dist/src/public/definitions/remote-agent.d.ts +6 -3
  371. package/dist/src/public/definitions/workspace-agent.d.ts +6 -3
  372. package/dist/src/public/experimental/schedules/index.d.ts +1 -1
  373. package/dist/src/public/models/openai/chatgpt/model.js +1 -1
  374. package/dist/src/public/models/openai/chatgpt/transport.js +1 -1
  375. package/dist/src/public/schedules/providers/in-memory.js +1 -1
  376. package/dist/src/public/schedules/providers/vercel.js +1 -1
  377. package/dist/src/public/schedules/subscription.d.ts +36 -16
  378. package/dist/src/public/tanstack/index.d.ts +40 -0
  379. package/dist/src/public/tanstack/index.js +1 -0
  380. package/dist/src/public/tools/web-search.d.ts +1 -1
  381. package/dist/src/runtime/agent/bootstrap.d.ts +2 -1
  382. package/dist/src/runtime/agent/bootstrap.js +1 -1
  383. package/dist/src/runtime/agent/mock-model-adapter.js +2 -2
  384. package/dist/src/runtime/agent/mock-model-fixtures.js +2 -2
  385. package/dist/src/runtime/agent/mock-model-skill-selection.d.ts +2 -0
  386. package/dist/src/runtime/agent/mock-model-skill-selection.js +2 -2
  387. package/dist/src/runtime/agent/mock-structured-output.d.ts +1 -1
  388. package/dist/src/runtime/agent/resolve-model.js +1 -1
  389. package/dist/src/runtime/connections/mcp-client.js +1 -1
  390. package/dist/src/runtime/connections/registry.js +1 -1
  391. package/dist/src/runtime/connections/scoped-authorization.js +1 -1
  392. package/dist/src/runtime/connections/tool-result.d.ts +2 -2
  393. package/dist/src/runtime/resolve-agent-graph.js +1 -1
  394. package/dist/src/runtime/resolve-agent.js +1 -1
  395. package/dist/src/runtime/resolve-tool.js +1 -1
  396. package/dist/src/runtime/schedules/collection-client.d.ts +12 -3
  397. package/dist/src/runtime/schedules/collection-client.js +1 -1
  398. package/dist/src/runtime/subagents/dynamic-agent-config.d.ts +2 -2
  399. package/dist/src/runtime/subagents/dynamic-remote-agent-config.d.ts +2 -1
  400. package/dist/src/runtime/subagents/dynamic-remote-agent-config.js +1 -1
  401. package/dist/src/runtime/subagents/registry.d.ts +2 -1
  402. package/dist/src/runtime/subagents/registry.js +1 -1
  403. package/dist/src/runtime/tools/registry.d.ts +2 -0
  404. package/dist/src/runtime/tools/registry.js +1 -1
  405. package/dist/src/runtime/types.d.ts +3 -3
  406. package/dist/src/setup/connection-connector.js +1 -2
  407. package/dist/src/setup/flows/model-login.js +1 -1
  408. package/dist/src/setup/index.d.ts +1 -1
  409. package/dist/src/setup/index.js +1 -1
  410. package/dist/src/setup/integrations/slack/setup.d.ts +23 -3
  411. package/dist/src/setup/integrations/slack/setup.js +1 -1
  412. package/dist/src/setup/integrations/web/framework.d.ts +8 -0
  413. package/dist/src/setup/integrations/web/framework.js +1 -0
  414. package/dist/src/setup/integrations/web/hosting.d.ts +43 -0
  415. package/dist/src/setup/integrations/web/hosting.js +15 -0
  416. package/dist/src/setup/integrations/web/setup.d.ts +6 -10
  417. package/dist/src/setup/integrations/web/setup.js +23 -17
  418. package/dist/src/setup/primitives/process-output.d.ts +5 -0
  419. package/dist/src/setup/primitives/process-output.js +2 -1
  420. package/dist/src/setup/scaffold/create/project.js +1 -1
  421. package/dist/src/setup/scaffold/create/web-template.d.ts +7 -3
  422. package/dist/src/setup/scaffold/create/web-template.js +40 -3
  423. package/dist/src/setup/scaffold/update/channels.js +1 -1
  424. package/dist/src/setup/scaffold/update/update-slack-channel.d.ts +17 -0
  425. package/dist/src/setup/scaffold/update/update-slack-channel.js +1 -1
  426. package/dist/src/setup/slack-connect-create.d.ts +10 -2
  427. package/dist/src/setup/slack-connect-create.js +1 -1
  428. package/dist/src/setup/slack-connect-lifecycle.d.ts +92 -44
  429. package/dist/src/setup/slack-connect-lifecycle.js +1 -1
  430. package/dist/src/setup/slack-connect.d.ts +30 -11
  431. package/dist/src/setup/slack-connect.js +1 -1
  432. package/dist/src/setup/slack-setup-plan.d.ts +72 -0
  433. package/dist/src/setup/slack-setup-plan.js +1 -0
  434. package/dist/src/setup/slackbot.d.ts +75 -35
  435. package/dist/src/setup/slackbot.js +2 -1
  436. package/dist/src/setup/vercel-project-framework.js +1 -1
  437. package/dist/src/shared/action-label.d.ts +10 -0
  438. package/dist/src/shared/action-label.js +1 -0
  439. package/dist/src/shared/action-request-name.d.ts +3 -1
  440. package/dist/src/shared/action-request-name.js +1 -1
  441. package/dist/src/shared/action-types.d.ts +7 -8
  442. package/dist/src/shared/action-types.js +1 -1
  443. package/dist/src/shared/agent-definition.d.ts +36 -3
  444. package/dist/src/shared/agent-definition.js +1 -1
  445. package/dist/src/shared/chatgpt-model.d.ts +8 -0
  446. package/dist/src/shared/chatgpt-model.js +1 -1
  447. package/dist/src/shared/development-env-files.d.ts +4 -0
  448. package/dist/src/shared/development-env-files.js +1 -0
  449. package/dist/src/shared/input.d.ts +0 -1
  450. package/dist/src/shared/map-with-concurrency.d.ts +2 -0
  451. package/dist/src/shared/map-with-concurrency.js +1 -0
  452. package/dist/src/shared/skill-definition.d.ts +6 -0
  453. package/dist/src/shared/skill-package.d.ts +1 -0
  454. package/dist/src/shared/skill-package.js +1 -1
  455. package/dist/src/shared/web-search.d.ts +15 -2
  456. package/dist/src/shared/web-search.js +1 -1
  457. package/dist/src/subagents/callback-route.js +1 -1
  458. package/dist/src/svelte/index.js +1 -1
  459. package/dist/src/svelte/use-eve-agent.js +1 -1
  460. package/dist/src/tool-stubs/execute.d.ts +0 -3
  461. package/dist/src/tool-stubs/execute.js +1 -1
  462. package/dist/src/tool-stubs/rules.js +1 -1
  463. package/dist/src/tool-stubs/validate-targets.js +1 -1
  464. package/dist/src/tools/behavior.d.ts +3 -6
  465. package/dist/src/tools/definition.d.ts +5 -0
  466. package/dist/src/tools/dynamic.d.ts +5 -2
  467. package/dist/src/tools/provided/ask-question-workflow.js +1 -1
  468. package/dist/src/tools/provided/sleep-workflow.js +1 -1
  469. package/dist/src/tools/provided/task-cancel.d.ts +1 -1
  470. package/dist/src/tools/provided/task-wait.d.ts +1 -1
  471. package/dist/src/tools/provided/web-search.d.ts +20 -7
  472. package/dist/src/tools/provided/web-search.js +1 -1
  473. package/dist/src/tools/schema.d.ts +5 -0
  474. package/dist/src/tools/schema.js +1 -1
  475. package/dist/src/{runtime/connections/tool-signature.d.ts → tools/signature.d.ts} +2 -2
  476. package/dist/src/tools/workflow-definition.d.ts +1 -1
  477. package/dist/src/tracing/agent-approval-instrumentation.js +1 -1
  478. package/dist/src/tracing/agent-otel-provider.js +2 -2
  479. package/dist/src/tracing/agent-otel-runtime-context.d.ts +1 -0
  480. package/dist/src/tracing/agent-otel-runtime-context.js +1 -1
  481. package/dist/src/tracing/agent-otel-turn-state.d.ts +6 -0
  482. package/dist/src/tracing/agent-otel-turn-state.js +1 -0
  483. package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
  484. package/dist/src/tracing/agent-trace-context-codec.js +1 -1
  485. package/dist/src/tracing/agent-trace-state.d.ts +4 -1
  486. package/dist/src/vue/index.js +1 -1
  487. package/dist/src/vue/use-eve-agent.js +1 -1
  488. package/docs/agent-config.md +39 -8
  489. package/docs/channels/chat-sdk.mdx +1 -1
  490. package/docs/channels/custom.mdx +26 -0
  491. package/docs/channels/eve.mdx +8 -5
  492. package/docs/channels/slack.mdx +32 -82
  493. package/docs/code-extension.mdx +28 -7
  494. package/docs/concepts/built-in-tools.md +60 -43
  495. package/docs/concepts/context-control.md +1 -1
  496. package/docs/concepts/execution-model-and-durability.mdx +101 -1
  497. package/docs/concepts/project-structure.mdx +2 -2
  498. package/docs/concepts/sessions-runs-and-streaming.md +40 -38
  499. package/docs/connections/mcp.mdx +5 -5
  500. package/docs/connections/openapi.mdx +1 -1
  501. package/docs/connections/overview.mdx +4 -2
  502. package/docs/evals/assertions.mdx +5 -3
  503. package/docs/evals/reporters.mdx +3 -1
  504. package/docs/evals/tool-stubs.mdx +3 -1
  505. package/docs/extensions.md +2 -0
  506. package/docs/guides/client/messages.mdx +10 -1
  507. package/docs/guides/deployment/overview.md +2 -2
  508. package/docs/guides/dev-tui.md +4 -2
  509. package/docs/guides/dynamic-capabilities.md +14 -4
  510. package/docs/guides/frontend/meta.json +9 -1
  511. package/docs/guides/frontend/nextjs.mdx +1 -1
  512. package/docs/guides/frontend/overview.mdx +10 -9
  513. package/docs/guides/frontend/tanstack.mdx +201 -0
  514. package/docs/guides/remote-agents.md +10 -3
  515. package/docs/guides/session-context.md +1 -0
  516. package/docs/install-integrations.mdx +1 -1
  517. package/docs/instructions.mdx +6 -6
  518. package/docs/reference/cli.md +2 -2
  519. package/docs/reference/typescript-api.md +4 -4
  520. package/docs/skills.mdx +19 -4
  521. package/docs/subagents/index.mdx +5 -3
  522. package/docs/tools/human-in-the-loop.md +2 -0
  523. package/docs/tools/overview.mdx +22 -1
  524. package/docs/tools/tasks-upgrade.md +1 -1
  525. package/docs/tools/tasks.md +32 -32
  526. package/docs/tools/workflows.mdx +6 -6
  527. package/docs/tutorial/ship-it.mdx +1 -1
  528. package/docs/tutorial/team-playbooks.mdx +2 -2
  529. package/package.json +28 -6
  530. package/dist/src/execution/connection-announcement.d.ts +0 -7
  531. package/dist/src/execution/connection-announcement.js +0 -4
  532. package/dist/src/execution/tools/connection-approval.d.ts +0 -25
  533. package/dist/src/execution/tools/connection-approval.js +0 -1
  534. package/dist/src/execution/tools/connection-search-rank.d.ts +0 -21
  535. package/dist/src/execution/tools/connection-search-rank.js +0 -1
  536. package/dist/src/execution/tools/connection-target.d.ts +0 -18
  537. package/dist/src/execution/tools/connection-target.js +0 -1
  538. package/dist/src/execution/tools/connection-tools.d.ts +0 -4
  539. package/dist/src/execution/tools/connection-tools.js +0 -2
  540. package/dist/src/execution/tools/load-skill.d.ts +0 -10
  541. package/dist/src/execution/tools/load-skill.js +0 -1
  542. package/dist/src/extensions/code/extension/lib/github-shell.js +0 -1
  543. package/dist/src/extensions/code/extension/skills/pr/SKILL.md +0 -53
  544. package/dist/src/extensions/code/extension/subagents/worker/tools/load_skill.d.ts +0 -2
  545. package/dist/src/extensions/code/extension/subagents/worker/tools/load_skill.js +0 -1
  546. package/dist/src/harness/advertised-tools.d.ts +0 -26
  547. package/dist/src/harness/advertised-tools.js +0 -1
  548. package/dist/src/harness/nested-actions.d.ts +0 -23
  549. package/dist/src/harness/nested-actions.js +0 -1
  550. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/cli-config.js +0 -1
  551. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/cred-storage.js +0 -1
  552. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/index.js +0 -1
  553. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/schema.js +0 -1
  554. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/schema.zod.js +0 -1
  555. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/types.js +0 -1
  556. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/envpath.js +0 -1
  557. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/errors.js +0 -2
  558. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/errutils.js +0 -1
  559. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/exec.js +0 -1
  560. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/fsutils.js +0 -1
  561. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/index.js +0 -1
  562. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/lookup.js +0 -1
  563. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/safety.js +0 -1
  564. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/auth-errors.js +0 -1
  565. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/exchange-vercel-oidc-token.js +0 -1
  566. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/get-context.js +0 -1
  567. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/get-vercel-oidc-token-sync.js +0 -1
  568. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/get-vercel-oidc-token-with-refresh.js +0 -2
  569. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/index.js +0 -1
  570. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/oauth.js +0 -1
  571. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/token-error.js +0 -1
  572. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/token-io.js +0 -1
  573. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/token-util.js +0 -2
  574. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/token.js +0 -1
  575. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/verify-vercel-oidc-token.js +0 -1
  576. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/version.js +0 -1
  577. package/dist/src/node_modules/.pnpm/@vercel_queue@0.5.1_@opentelemetry_api@1.9.1/node_modules/@vercel/queue/dist/index.js +0 -36
  578. package/dist/src/node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js +0 -1
  579. package/dist/src/node_modules/.pnpm/brace-expansion@5.0.12/node_modules/brace-expansion/dist/esm/index.js +0 -1
  580. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/index.js +0 -1
  581. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/enoent.js +0 -1
  582. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/parse.js +0 -1
  583. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/escape.js +0 -1
  584. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/readShebang.js +0 -1
  585. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/resolveCommand.js +0 -1
  586. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/index.js +0 -1
  587. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/command.js +0 -1
  588. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/error.js +0 -2
  589. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/kill.js +0 -1
  590. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/promise.js +0 -1
  591. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/stdio.js +0 -1
  592. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/stream.js +0 -1
  593. package/dist/src/node_modules/.pnpm/get-stream@6.0.1/node_modules/get-stream/buffer-stream.js +0 -1
  594. package/dist/src/node_modules/.pnpm/get-stream@6.0.1/node_modules/get-stream/index.js +0 -1
  595. package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/core.js +0 -1
  596. package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/main.js +0 -1
  597. package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/realtime.js +0 -1
  598. package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/signals.js +0 -1
  599. package/dist/src/node_modules/.pnpm/is-stream@2.0.1/node_modules/is-stream/index.js +0 -1
  600. package/dist/src/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/index.js +0 -1
  601. package/dist/src/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/mode.js +0 -1
  602. package/dist/src/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/windows.js +0 -1
  603. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/index.js +0 -1
  604. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/compact/decrypt.js +0 -1
  605. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/compact/encrypt.js +0 -1
  606. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/flattened/decrypt.js +0 -1
  607. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/flattened/encrypt.js +0 -1
  608. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/general/decrypt.js +0 -1
  609. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/general/encrypt.js +0 -1
  610. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwk/embedded.js +0 -1
  611. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwk/thumbprint.js +0 -1
  612. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwks/local.js +0 -1
  613. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwks/remote.js +0 -1
  614. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/compact/sign.js +0 -1
  615. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/compact/verify.js +0 -1
  616. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/flattened/sign.js +0 -1
  617. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/flattened/verify.js +0 -1
  618. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/general/sign.js +0 -1
  619. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/general/verify.js +0 -1
  620. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/decrypt.js +0 -1
  621. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/encrypt.js +0 -1
  622. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/produce.js +0 -1
  623. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/sign.js +0 -1
  624. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/unsecured.js +0 -1
  625. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/verify.js +0 -1
  626. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/export.js +0 -1
  627. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/generate_key_pair.js +0 -1
  628. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/generate_secret.js +0 -1
  629. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/import.js +0 -1
  630. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/aesgcmkw.js +0 -1
  631. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/buffer_utils.js +0 -1
  632. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/cek.js +0 -1
  633. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/check_iv_length.js +0 -1
  634. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/check_key_type.js +0 -1
  635. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/check_p2s.js +0 -1
  636. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/crypto_key.js +0 -1
  637. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/decrypt_key_management.js +0 -1
  638. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/encrypt_key_management.js +0 -1
  639. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/epoch.js +0 -1
  640. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/invalid_key_input.js +0 -1
  641. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/is_disjoint.js +0 -1
  642. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/is_jwk.js +0 -1
  643. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/is_object.js +0 -1
  644. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/iv.js +0 -1
  645. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/jwt_claims_set.js +0 -1
  646. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/private_symbols.js +0 -1
  647. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/secs.js +0 -1
  648. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/validate_algorithms.js +0 -1
  649. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/validate_crit.js +0 -1
  650. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/aeskw.js +0 -1
  651. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/asn1.js +0 -1
  652. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/base64url.js +0 -1
  653. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/cbc_tag.js +0 -1
  654. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/check_cek_length.js +0 -1
  655. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/check_key_length.js +0 -1
  656. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/ciphers.js +0 -1
  657. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/decrypt.js +0 -1
  658. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/digest.js +0 -1
  659. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/dsa_digest.js +0 -1
  660. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/ecdhes.js +0 -1
  661. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/encrypt.js +0 -1
  662. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/fetch_jwks.js +0 -1
  663. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/generate.js +0 -1
  664. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/get_named_curve.js +0 -1
  665. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/get_sign_verify_key.js +0 -1
  666. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/hmac_digest.js +0 -1
  667. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/is_key_like.js +0 -1
  668. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/is_key_object.js +0 -1
  669. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/jwk_to_key.js +0 -1
  670. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/key_to_jwk.js +0 -1
  671. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/node_key.js +0 -1
  672. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/normalize_key.js +0 -1
  673. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/pbes2kw.js +0 -1
  674. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/random.js +0 -1
  675. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/rsaes.js +0 -1
  676. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/runtime.js +0 -1
  677. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/sign.js +0 -1
  678. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/timing_safe_equal.js +0 -1
  679. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/verify.js +0 -1
  680. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/webcrypto.js +0 -1
  681. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/base64url.js +0 -1
  682. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/decode_jwt.js +0 -1
  683. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/decode_protected_header.js +0 -1
  684. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/errors.js +0 -1
  685. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/runtime.js +0 -1
  686. package/dist/src/node_modules/.pnpm/merge-stream@2.0.0/node_modules/merge-stream/index.js +0 -1
  687. package/dist/src/node_modules/.pnpm/mimic-fn@2.1.0/node_modules/mimic-fn/index.js +0 -1
  688. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/assert-valid-pattern.js +0 -1
  689. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/ast.js +0 -1
  690. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/brace-expressions.js +0 -1
  691. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/escape.js +0 -1
  692. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/index.js +0 -1
  693. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/unescape.js +0 -1
  694. package/dist/src/node_modules/.pnpm/mixpart@0.0.6/node_modules/mixpart/dist/index.js +0 -7
  695. package/dist/src/node_modules/.pnpm/npm-run-path@4.0.1/node_modules/npm-run-path/index.js +0 -1
  696. package/dist/src/node_modules/.pnpm/onetime@5.1.2/node_modules/onetime/index.js +0 -1
  697. package/dist/src/node_modules/.pnpm/os-paths@4.4.0/node_modules/os-paths/src/lib/index.js +0 -1
  698. package/dist/src/node_modules/.pnpm/path-key@3.1.1/node_modules/path-key/index.js +0 -1
  699. package/dist/src/node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js +0 -1
  700. package/dist/src/node_modules/.pnpm/shebang-command@2.0.0/node_modules/shebang-command/index.js +0 -1
  701. package/dist/src/node_modules/.pnpm/shebang-regex@3.0.0/node_modules/shebang-regex/index.js +0 -1
  702. package/dist/src/node_modules/.pnpm/signal-exit@3.0.7/node_modules/signal-exit/index.js +0 -1
  703. package/dist/src/node_modules/.pnpm/signal-exit@3.0.7/node_modules/signal-exit/signals.js +0 -1
  704. package/dist/src/node_modules/.pnpm/strip-final-newline@2.0.0/node_modules/strip-final-newline/index.js +0 -2
  705. package/dist/src/node_modules/.pnpm/which@2.0.2/node_modules/which/which.js +0 -1
  706. package/dist/src/node_modules/.pnpm/xdg-app-paths@5.5.1/node_modules/xdg-app-paths/src/lib/index.js +0 -1
  707. package/dist/src/node_modules/.pnpm/xdg-portable@7.3.0/node_modules/xdg-portable/src/lib/index.js +0 -1
  708. package/dist/src/public/tools/load-skill.d.ts +0 -3
  709. package/dist/src/public/tools/load-skill.js +0 -1
  710. package/dist/src/runtime/skills/fragment-context.d.ts +0 -4
  711. package/dist/src/runtime/skills/fragment-context.js +0 -1
  712. package/dist/src/tools/framework/connection-tools.d.ts +0 -3
  713. package/dist/src/tools/framework/connection-tools.js +0 -1
  714. package/dist/src/tools/provided/load-skill.d.ts +0 -2
  715. package/dist/src/tools/provided/load-skill.js +0 -1
  716. /package/dist/src/extensions/{code → git}/extension/lib/github-shell-schema.d.ts +0 -0
  717. /package/dist/src/extensions/{code → git}/extension/lib/github-shell-schema.js +0 -0
  718. /package/dist/src/extensions/{code → git}/extension/lib/signed-commit.d.ts +0 -0
  719. /package/dist/src/extensions/{code → git}/extension/lib/signed-commit.js +0 -0
  720. /package/dist/src/{runtime/connections/tool-signature.js → tools/signature.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,68 @@
1
1
  # eve
2
2
 
3
+ ## 0.76.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 91f4b68: Add `modelOptions.promptCache` for models eve calls directly. `promptCache: { anthropic: { ttl: "1h" } }` switches eve's Anthropic cache breakpoints to a 1-hour lifetime. `promptCache: { anthropic: {} }` turns breakpoints on for an Anthropic model eve can't recognize from its id, such as a Bedrock application inference profile.
8
+ - c160b22: A session that replaces a retired stranded session names the session it replaced in `ctx.session.predecessor` (also on dynamic resolver contexts) and `session.started` `data.predecessor` (`{ sessionId }`). The new `transcriptReducer()` in `eve/client` folds a session's stream into its user and completed assistant text since the last clear; combine it with `sessions.attach(predecessor.sessionId).stream()` from `eve/server` in a `session.started` user-role dynamic instruction to give the replacement the earlier conversation.
9
+ - 89bd625: Add `eve/tanstack`, a Vite plugin that runs an eve agent inside a TanStack Start app: Nitro proxies `/eve/v1/**` to a local eve server in development, and Vercel builds deploy eve as a sibling service. Set `devServerTimeoutMs` to wait longer for a slow eve dev server to start. `eve build` and `eve dev` now always use Nitro's Rolldown builder, so an agent that shares its root with a TanStack Start app no longer fails to start.
10
+ - b664838: `eve add channel/web` now asks which framework Web Chat uses and can install a TanStack Start app under `apps/web/`, hosted as a separate Vercel service or inside the app through `eve/tanstack`; non-interactive installs keep Next.js unless you pass `--answer 'web-framework="tanstack"'`. Web Chat setup also checks for authored configuration before writing, removes the `vercel.ts` and scripts it wrote when you switch hosting modes, and renders text in the loaded Geist fonts.
11
+
12
+ ## 0.76.1
13
+
14
+ ### Patch Changes
15
+
16
+ - fcbd479: A denied tool approval that carries `text` now passes that note to the model in the denial reason instead of dropping it.
17
+ - 9626748: Use build-stamped package metadata in bundled runtimes so serverless functions can start without resolving `eve/package.json` at runtime.
18
+ - 25b3f35: `/login chatgpt` now lists current subscription models such as `gpt-6-luna`, and the default `chatgpt()` model (`gpt-6-luna-fast`) works: eve sends it to Codex as `gpt-6-luna` on the priority service tier, since Codex rejects `-fast` model IDs.
19
+ - 416e63e: Direct OpenAI and `chatgpt()` model calls now send a per-session `promptCacheKey`, which helps OpenAI route a session's calls to the cache holding its prompt prefix. `chatgpt()` calls also send it as the `session-id` header the Codex backend routes on. An authored `providerOptions.openai.promptCacheKey` still takes precedence.
20
+ - b04acbb: On worlds without per-deployment routing, incompatible subagent sessions and workflow tool runs (including tasks) are now cancelled when their queue deliveries arrive, instead of attempting replay on the new eve version. Top-level sessions remain available for replacement or reset, and session timeout workflows continue to run.
21
+ - b04acbb: Sessions whose workflow run cannot execute after an eve upgrade (a stranded session) are no longer accepted and left unanswered, and the local World and Postgres stop replaying and failing them with `CORRUPTED_EVENT_LOG`. eve treats every World other than Vercel as running one eve version at a time, so the next message through a channel address (Slack, `from(address).send()`) ends a stranded session and starts a fresh one. Sends by session ID throw `SessionStrandedError` (`ClientSessionStrandedError` in `eve/client`), and the eve HTTP channel returns `409 session_stranded`; `reset()` ends a stranded session while `clear()` refuses one, and recorded history stays readable with `stream({ follow: false })` or `follow=false` on the stream route. On Worlds other than Vercel, a retired session's own session timeout now ends it at its deadline, so a retired session no longer stays active forever when no message arrives.
22
+ - cf72486: Agents whose OpenAI model is served by an endpoint without OpenAI web search, such as Amazon Bedrock through `createOpenAI({ baseURL })` or AI Gateway, now retry the step without `web_search` instead of failing every turn.
23
+
24
+ ## 0.76.0
25
+
26
+ ### Minor Changes
27
+
28
+ - 8c55ea7: Skills now load through `eve__skill({ name })`, which every agent with a skill has in place of `load_skill`, and a skill with `deferred: true` (in `SKILL.md` frontmatter or on `defineSkill`, static or dynamic) leaves the system prompt and is found with `eve__search` instead.
29
+
30
+ - The `load_skill` tool and the `eve/tools/load_skill` export are removed. Delete any `agent/tools/load_skill.ts` override or approval policy that names it; an authored `agent/tools/load_skill.ts` is now an ordinary tool.
31
+ - A skill load's `load-skill` action now carries the skill's `name`, and its `input` is the model's `{ name }` instead of `{ skill }`. Its result is a `load-skill-result` with the same `name` instead of a `tool-result` named `load_skill`. Its client message part has the `toolName` `eve__skill` instead of `eve:load-skill`, with the skill's name in `toolMetadata.eve.name`. Sessions recorded by earlier versions replay with `name` filled in from `input.skill`.
32
+ - Eval facts report skill loads in `skillLoads`, which `t.loadedSkill` reads. They no longer count toward `toolCallCount`, `usedNoTools`, or `maxToolCalls`.
33
+ - Skill names must use only ASCII letters, digits, underscores, and dashes, start with a letter or digit, and have at most 64 characters. The compiler rejects a static skill with another name, and eve skips a dynamic skill resolver that returns one.
34
+ - 8c55ea7: An agent with deferred entries or connections now has `eve__search` to find tools marked `deferred: true`, agents marked `tool: "deferred"`, and every connection tool, and `eve__tool` to call them, without growing the model's tool list. An agent with skills has `eve__skill` to load them, and `eve__search` also finds deferred skills. An agent with none of these gets no catalog tools, so its tool list is unchanged apart from `load_skill` becoming `eve__skill`. They replace `connection_search` and `connection_execute`, and stream events, approvals, hooks, and traces now name each connection tool call `<connection>__<tool>`. `eve__search` never asks the user to sign in: it lists a connection that needs sign-in under the connection's own name, and `eve__tool` on that name, such as `eve__tool({ name: "linear" })`, asks the user to sign in. `eve__search` takes a required `query`; a query such as `linear__` searches only that connection's tools.
35
+
36
+ Breaking changes:
37
+
38
+ - The tools eve adds itself now live in the `eve` namespace: `task_wait` is `eve__task_wait`, `task_cancel` is `eve__task_cancel`, and `final_output`, the tool a session with an output schema calls to deliver its structured result, is `eve__reply`. The catalog tools are `eve__search`, `eve__tool`, and `eve__skill`. Update evals, approval policies, hooks, and channel code that match `task_wait`, `task_cancel`, or `final_output` by name. A turn held on `task_wait` when you upgrade stays held until the next message or a cancel.
39
+ - eve reserves the `eve` namespace. A tool, subagent, skill, connection, or extension mount named `eve` or starting with `eve__` now fails to build, or fails when the agent loads or a dynamic entry resolves; rename it. `search`, `execute`, `task_wait`, `task_cancel`, and `final_output` are ordinary names again.
40
+ - A connection owns its name and every name starting with `<name>__`. A tool, subagent, or connection under another connection's prefix is rejected at build time, and a dynamic one when it resolves.
41
+ - Dynamic tool map keys must be legal tool names: ASCII letters, digits, `_`, and `-`, starting with a letter, up to 64 characters.
42
+ - Connection approvals are keyed by `<connection>__<tool>` instead of a `[connection, tool]` pair, so saved "always approve" decisions for connection tools reset.
43
+ - A `connection_execute` call still waiting for approval when you upgrade fails when someone answers it, with "The tool "connection_execute" is no longer available, so the call didn't run."
44
+ - Eval tool-name helpers (`calledTool`, `notCalledTool`, `toolOrder`, and `requireToolCall`) now throw, saying what to assert instead, for `eve__tool` and `eve__skill`, whose calls are reported under the entry they reach and as skill loads, and for a retired eve tool name (`load_skill`, `task_wait`, `task_cancel`, `final_output`, `connection_search`, `connection_execute`) unless the root agent declares a tool by that name or has a dynamic tool resolver. Before, `notCalledTool` on one of these names always passed. `usedNoTools` and `maxToolCalls` count `eve__search` calls; skill loads no longer do.
45
+ - Removed: the `parentCallId` field on `tool-call` actions in `actions.requested` events, and the `agent.action.parent_call_id` span attribute. The subagent `parentCallId` on `session.started` invocation metadata is unchanged.
46
+ - 2cc43ca: GitHub work moves out of `eve/extensions/code` into a new built-in extension, `eve/extensions/git`. The code extension used to tell every agent that "GitHub credentials are not available to ordinary `bash`" and to route GitHub work through its `gh` tool, which only works with Connect-brokered `github` config. Agents whose shell already has `gh` credentials were steered to a tool that could not authenticate.
47
+
48
+ `git({})` adds the GitHub instructions and a `git__pr` skill that commits, pushes, and opens a draft with the shell's `gh pr create --draft`. `git({ github })` adds the Connect-brokered `git__gh` tool and switches `git__pr` to the signed-commit workflow. The tool and sandbox helpers are exported from `eve/extensions/git/tools` and `eve/extensions/git/sandbox`.
49
+
50
+ Deprecated: `code({ github })`. While it is set, the code extension still contributes `code__gh`, its GitHub instructions, and the signed-commit `code__pr` skill. Without it, `code({})` no longer contributes `code__gh`, `code__pr`, or any GitHub instructions; mount `eve/extensions/git` for the pull request skill. `gh` from `eve/extensions/code/tools` and the GitHub shell helpers from `eve/extensions/code/sandbox` still work but are deprecated.
51
+ - 14f2af0: Add dynamic schedule updates for timing and complete payload replacement, with prepared-payload approval for model calls. Payload replacement makes the updating caller the new creator; custom schedule providers must implement `update`, and `preparePayload` now receives a `create` or `update` operation.
52
+ - 0ef5c4c: `eve add channel/slack` now resumes interrupted setup, reopens workspace installation for existing connectors, fixes stale routes without detaching, and avoids sharing a Slack app with another project or creating one with a taken name. The `eve/setup` Slack provisioning API now takes a connector selection from `inspectSlackbotConnectors` rather than inspecting a second time; a failed Vercel create reports its original error instead of a misleading cleanup failure.
53
+
54
+ ### Patch Changes
55
+
56
+ - 32aaf68: Accept create-session responses from remote agents on eve 0.66–0.68 (protocol 1). A newer parent no longer fails a call that the older remote already accepted and is running.
57
+ - 8c55ea7: Catalog calls now read as what happened: `eve__search` shows `Search tools for “linear issues”` and then how much it found, a skill load shows `Load skill <name>` and then `Loaded skill <name>`, and a connection's sign-in entry shows `Sign in to Linear`. Linear activities, Chat SDK typing indicators, and ACP tool calls now show each call's label instead of its raw tool name, and `eve/client` tool parts carry that text as `toolMetadata.eve.label`.
58
+ - 47f1f18: `grep` and `apply_patch` in `eve/extensions/code` now work in sandboxes whose workspace is not `/workspace`, such as `/app`. `apply_patch` no longer requires a git checkout: `root` is optional and defaults to the workspace root, and outside git it still reports whitespace problems the patch introduced. It also accepts unified-diff range headers such as `@@ -118,8 +118,8 @@ def second():`, using the function context to pick between identical blocks.
59
+ - afe7058: `eve__tool` now runs a tool from the agent's tool list, other than eve's own catalog and task tools and tools a provider or client runs, instead of returning an error, so a model that routes a listed tool through it no longer wastes a step.
60
+ - f8ea556: `webSearch({ provider: "native" })` uses the model vendor's own hosted search for AI Gateway models: OpenAI web search for OpenAI models, Anthropic web search for Anthropic models, and Google Search grounding for Gemini 3 and later, instead of Exa. Other Gateway models don't get `web_search` with this setting unless you set `fallback`, for example `webSearch({ provider: "native", fallback: "exa" })`. Gemini models before Gemini 3, including direct ones, no longer get Google Search, which made the model drop every other tool.
61
+ - 73adcdf: Dynamic schedules now use Vercel's local scheduler and queue delivery under `vc dev`, so cron and one-time occurrences fire automatically. The local consumer loads only for Vercel-backed dynamic collections; standalone `eve dev` keeps its in-memory scheduling backend.
62
+ - f15eaa6: Remove the stream-writer WebSocket default added in 0.73.0, which never took effect. Behavior is unchanged.
63
+ - 192732a: Remote-agent create requests now report that work may have completed when a successful response has an incompatible protocol or unreadable body. These failures stop automatic workflow retries, and protocol mismatches include the remote session ID for checking the outcome.
64
+ - c25caf3: Datadog Experiment reports now link each eval to its sampled runtime traces using Datadog-indexed IDs. Linked traces include classified structural spans and, when capture is enabled, turn-level task input and output; zero-duration Experiment spans are normalized to a positive duration. Canonical runtime spans remain unchanged.
65
+
3
66
  ## 0.75.1
4
67
 
5
68
  ### Patch Changes
@@ -1 +1 @@
1
- import"node:module";var __create=Object.create,__defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty,__commonJSMin=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),__copyProps=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=__getOwnPropNames(t),a=0,o=i.length,s;a<o;a++)s=i[a],!__hasOwnProp.call(e,s)&&s!==n&&__defProp(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=__getOwnPropDesc(t,s))||r.enumerable});return e},__toESM=(e,t,n)=>(n=e==null?{}:__create(__getProtoOf(e)),__copyProps(t||!e||!e.__esModule||!__hasOwnProp.call(e,`default`)?__defProp(n,`default`,{value:e,enumerable:!0}):n,e));export{__commonJSMin,__toESM};
1
+ import"node:module";export{};
@@ -1 +1 @@
1
- import{randomUUID}from"node:crypto";import{realpath}from"node:fs/promises";import{PROTOCOL_VERSION,RequestError,methods}from"#compiled/@agentclientprotocol/sdk/index.js";import{Client,ClientError}from"#client/index.js";import{callStatus,foldSession,initialSessionProjection}from"#protocol/session-projection.js";const ANSWER_FIELD=`answer`,ERROR_CODE_EVE=-32002,ACP_TOOL_STATUS={running:`in_progress`,"awaiting-input":`pending`,completed:`completed`,failed:`failed`,rejected:`failed`,cancelled:`failed`,interrupted:`failed`};var EveAcpAdapter=class{#e;#t;#n;#r=!1;#i=new Map;constructor(e){this.#t=e.eveVersion,this.#n=e.workspaceRoot,this.#e=e.client??new Client({auth:e.auth,headers:e.headers,host:e.serverUrl,redirect:`manual`})}initialize(e){return this.#r=e.clientCapabilities?.elicitation?.form!==void 0,{protocolVersion:PROTOCOL_VERSION,agentCapabilities:{loadSession:!1,promptCapabilities:{},sessionCapabilities:{close:{}}},agentInfo:{name:`eve`,title:`eve`,version:this.#t},authMethods:[]}}async newSession(e){if(e.mcpServers.length>0)throw unsupported(`Client-provided MCP servers are not supported by eve ACP mode.`);if((e.additionalDirectories?.length??0)>0)throw unsupported(`Additional workspace directories are not supported by eve ACP mode.`);if(this.#n!==void 0){let t=await normalizedRealpath(e.cwd,`session/new.cwd`),n=await normalizedRealpath(this.#n,`the eve application root`);if(t!==n)throw RequestError.invalidParams({cwd:e.cwd,workspaceRoot:n},`ACP cwd must be the eve application root`)}let t=randomUUID();return this.#i.set(t,{projection:initialSessionProjection(),tools:new Map}),{sessionId:t}}async prompt(e,t,n){let r=this.#s(e.sessionId);if(r.active!==void 0)throw new RequestError(-32001,`ACP session ${e.sessionId} already has an active prompt.`);let i=promptContent(e);r.tools.clear();let a=Promise.withResolvers(),o={cancelRequested:!1,protocolCancelled:!1,outboundController:new AbortController,settled:a.promise,resolveSettled:a.resolve};r.active=o;let onProtocolCancel=()=>{o.protocolCancelled=!0,this.#o(r).catch(()=>void 0)};n.aborted?onProtocolCancel():n.addEventListener(`abort`,onProtocolCancel,{once:!0});try{if(o.protocolCancelled)throw RequestError.requestCancelled({sessionId:e.sessionId});let a={message:i};for(;;){let i;if(r.client===void 0){if(a.message===void 0)throw Error(`ACP session has not started.`);let e=await this.#e.sessions.create({...a,message:a.message});r.client=e.session,i=e.response}else i=a.inputResponses===void 0?await r.client.send(a.message):await r.client.respond(a.inputResponses);(o.cancelRequested||o.protocolCancelled)&&await this.#o(r);let s=[],c=!1,l,u;for await(let n of i){let i=`data`in n?n.data:void 0,a=i!==void 0&&`turnId`in i?i.turnId:void 0;typeof a==`string`&&(o.turnId=a),n.type===`input.requested`&&s.push(...n.data.requests),n.type===`authorization.required`&&(u=unsupported(`Connection authorization cannot be completed through eve ACP mode.`)),n.type===`turn.cancelled`&&(c=!0),(n.type===`turn.failed`||n.type===`session.failed`)&&(l=n),await this.#c(e.sessionId,r,n,t)}if(o.protocolCancelled)throw RequestError.requestCancelled({sessionId:e.sessionId});if(c||o.cancelRequested)return{stopReason:`cancelled`};if(l!==void 0)throw await this.#l(e.sessionId,r,t),eveFailure(l);if(u!==void 0)throw u;if(s.length===0)return{stopReason:`end_turn`};let d;try{d=await Promise.all(s.map(i=>this.#d(e.sessionId,r,i,t,n)))}catch(t){if(o.protocolCancelled)throw RequestError.requestCancelled({sessionId:e.sessionId});if(o.cancelRequested)return{stopReason:`cancelled`};throw t}if(o.protocolCancelled)throw RequestError.requestCancelled({sessionId:e.sessionId});if(o.cancelRequested)return{stopReason:`cancelled`};a={inputResponses:d}}}catch(e){throw acpRequestError(e)}finally{n.removeEventListener(`abort`,onProtocolCancel),r.tools.clear(),o.resolveSettled(),r.active===o&&(r.active=void 0)}}async cancel(e){let t=this.#i.get(e);t!==void 0&&t.active!==void 0&&(t.active.cancelRequested=!0,await this.#o(t))}async closeSession(e){let t=this.#s(e);this.#i.delete(e),await this.#a(t)}async close(){let e=[...this.#i.values()];this.#i.clear(),await Promise.allSettled(e.map(e=>this.#a(e)))}async#a(e){let t;if(e.active!==void 0){let n=e.active;n.cancelRequested=!0;try{await this.#o(e)}catch(e){t=e}await n.settled}try{await e.client?.reset()}catch(e){throw t===void 0?e:AggregateError([t,e],`Could not cancel or reset the eve session`)}if(t!==void 0)throw t}async#o(e){e.active?.outboundController.abort(),e.client!==void 0&&await e.client.cancel(e.active?.turnId===void 0?void 0:{turnId:e.active.turnId})}#s(e){let t=this.#i.get(e);if(t===void 0)throw RequestError.invalidParams({sessionId:e},`Unknown or closed ACP session`);return t}async#c(e,t,n,r){let i=t.projection;if(t.projection=foldSession(i,n),await this.#u(e,t,n,r),n.type===`actions.requested`)return;let a=new Set,{calls:o,tasks:s,turns:c}=t.projection;if(o!==i.calls||s!==i.tasks||c!==i.turns)for(let s of Object.keys(o)){if(!t.tools.has(s))continue;let o=callStatus(t.projection,s);o!==void 0&&o!==callStatus(i,s)&&(a.add(s),await notifyUpdate(r,e,{sessionUpdate:`tool_call_update`,toolCallId:s,status:ACP_TOOL_STATUS[o],...callOutput(n,s)}))}let l=n.type===`action.result`?n.data.result.callId:n.type===`task.settled`?n.data.callId:void 0;if(l===void 0||a.has(l)||!t.tools.has(l))return;let u=callOutput(n,l),d=callStatus(t.projection,l);`content`in u&&d!==void 0&&await notifyUpdate(r,e,{sessionUpdate:`tool_call_update`,toolCallId:l,status:ACP_TOOL_STATUS[d],...u})}async#l(e,t,n){for(let r of t.tools.keys())callStatus(t.projection,r)===`running`&&await notifyUpdate(n,e,{sessionUpdate:`tool_call_update`,toolCallId:r,status:ACP_TOOL_STATUS.failed})}async#u(e,t,n,r){switch(n.type){case`message.appended`:await notifyUpdate(r,e,{sessionUpdate:`agent_message_chunk`,content:{type:`text`,text:n.data.messageDelta},messageId:`${n.data.turnId}:message:${n.data.stepIndex}`});return;case`reasoning.appended`:await notifyUpdate(r,e,{sessionUpdate:`agent_thought_chunk`,content:{type:`text`,text:n.data.reasoningDelta},messageId:`${n.data.turnId}:thought:${n.data.stepIndex}`});return;case`actions.requested`:for(let i of n.data.actions){let n=toolCallForAction(i);t.tools.set(i.callId,n),await notifyUpdate(r,e,{sessionUpdate:`tool_call`,...n})}return;default:return}}async#d(e,t,n,r,i){let a=AbortSignal.any([i,t.active.outboundController.signal]);if(n.display===`confirmation`){let i=`${n.requestId}:approve`,o=`${n.requestId}:deny`,s=t.tools.get(n.action.callId)??toolCallForAction(n.action),c=await r.request(methods.client.session.requestPermission,{sessionId:e,toolCall:s,options:[{kind:`allow_once`,name:`Approve`,optionId:i},{kind:`reject_once`,name:`Deny`,optionId:o}]},{cancellationSignal:a});if(c.outcome.outcome===`cancelled`)return this.#f(t),{requestId:n.requestId};if(c.outcome.optionId===i)return{requestId:n.requestId,optionId:`approve`};if(c.outcome.optionId===o)return{requestId:n.requestId,optionId:`deny`};throw RequestError.invalidParams({optionId:c.outcome.optionId},`Unknown ACP permission option`)}if(!this.#r)throw unsupported(`The ACP client does not support form elicitation required by this eve question.`);let o=elicitationProperty(n),s=await r.request(methods.client.elicitation.create,{mode:`form`,sessionId:e,message:n.prompt,requestedSchema:{type:`object`,properties:{[ANSWER_FIELD]:o},required:[ANSWER_FIELD]}},{cancellationSignal:a});if(s.action!==`accept`)return this.#f(t),{requestId:n.requestId};let c=s.content?.[ANSWER_FIELD];if(typeof c!=`string`)throw RequestError.invalidParams(s.content,`ACP elicitation response must contain a string answer`);if(n.display===`select`){if(!n.options?.some(e=>e.id===c))throw RequestError.invalidParams({answer:c},`Unknown eve question option`);return{requestId:n.requestId,optionId:c}}return{requestId:n.requestId,text:c}}#f(e){let t=e.active;t.cancelRequested=!0,t.outboundController.abort()}};async function normalizedRealpath(e,t){try{return await realpath(e)}catch(n){throw RequestError.invalidParams({path:e},`Could not resolve ${t}: ${errorMessage(n)}`)}}function promptContent(e){let t=e.prompt.map(e=>{if(e.type!==`text`)throw unsupported(`ACP prompt content type ${JSON.stringify(e.type)} is not supported.`);return{type:`text`,text:e.text}});if(t.every(e=>e.text.length===0))throw RequestError.invalidParams(e.prompt,`ACP prompt must contain at least one non-empty text block`);return t}function toolCallForAction(e){let t=e.kind===`tool-call`||e.kind===`workflow-tool-call`?e.toolName:e.kind===`load-skill`?`Load skill`:e.name;return{toolCallId:e.callId,title:t,kind:`other`,status:`pending`,rawInput:e.input}}function elicitationProperty(e){if(e.display===`select`&&e.allowFreeform!==!0&&e.options?.length)return{type:`string`,title:e.prompt,oneOf:e.options.map(e=>({const:e.id,title:e.label,description:e.description}))};if(e.display===`text`&&e.allowFreeform!==!1)return{type:`string`,title:e.prompt,minLength:1};throw unsupported(`This eve question shape cannot be represented by ACP form elicitation.`)}async function notifyUpdate(e,t,n){await e.notify(methods.client.session.update,{sessionId:t,update:n})}function stringifyOutput(e){return typeof e==`string`?e:JSON.stringify(e,null,2)}function unsupported(e){return new RequestError(-32003,e)}function eveFailure(e){return new RequestError(ERROR_CODE_EVE,e.data.message,{code:e.data.code,details:e.data.details})}function acpRequestError(e){return e instanceof RequestError?e:e instanceof ClientError?new RequestError(ERROR_CODE_EVE,e.message,{httpStatus:e.status}):new RequestError(ERROR_CODE_EVE,errorMessage(e))}function errorMessage(e){return e instanceof Error?e.message:String(e)}function callOutput(e,t){let n=e.type===`action.result`&&e.data.result.callId===t?e.data.result.output:e.type===`task.settled`&&e.data.callId===t?e.data.output===void 0?e.data.error?.message:e.data.output:void 0;return n===void 0?{}:{content:[{type:`content`,content:{type:`text`,text:stringifyOutput(n)}}],rawOutput:n}}export{EveAcpAdapter};
1
+ import{randomUUID}from"node:crypto";import{realpath}from"node:fs/promises";import{PROTOCOL_VERSION,RequestError,methods}from"#compiled/@agentclientprotocol/sdk/index.js";import{Client,ClientError}from"#client/index.js";import{callStatus,foldSession,initialSessionProjection}from"#protocol/session-projection.js";import{actionLabel,visibleActions}from"#shared/action-label.js";const ANSWER_FIELD=`answer`,ERROR_CODE_EVE=-32002,ACP_TOOL_STATUS={running:`in_progress`,"awaiting-input":`pending`,completed:`completed`,failed:`failed`,rejected:`failed`,cancelled:`failed`,interrupted:`failed`};var EveAcpAdapter=class{#e;#t;#n;#r=!1;#i=new Map;constructor(e){this.#t=e.eveVersion,this.#n=e.workspaceRoot,this.#e=e.client??new Client({auth:e.auth,headers:e.headers,host:e.serverUrl,redirect:`manual`})}initialize(e){return this.#r=e.clientCapabilities?.elicitation?.form!==void 0,{protocolVersion:PROTOCOL_VERSION,agentCapabilities:{loadSession:!1,promptCapabilities:{},sessionCapabilities:{close:{}}},agentInfo:{name:`eve`,title:`eve`,version:this.#t},authMethods:[]}}async newSession(e){if(e.mcpServers.length>0)throw unsupported(`Client-provided MCP servers are not supported by eve ACP mode.`);if((e.additionalDirectories?.length??0)>0)throw unsupported(`Additional workspace directories are not supported by eve ACP mode.`);if(this.#n!==void 0){let t=await normalizedRealpath(e.cwd,`session/new.cwd`),n=await normalizedRealpath(this.#n,`the eve application root`);if(t!==n)throw RequestError.invalidParams({cwd:e.cwd,workspaceRoot:n},`ACP cwd must be the eve application root`)}let t=randomUUID();return this.#i.set(t,{projection:initialSessionProjection(),tools:new Map}),{sessionId:t}}async prompt(e,t,n){let r=this.#s(e.sessionId);if(r.active!==void 0)throw new RequestError(-32001,`ACP session ${e.sessionId} already has an active prompt.`);let i=promptContent(e);r.tools.clear();let a=Promise.withResolvers(),o={cancelRequested:!1,protocolCancelled:!1,outboundController:new AbortController,settled:a.promise,resolveSettled:a.resolve};r.active=o;let onProtocolCancel=()=>{o.protocolCancelled=!0,this.#o(r).catch(()=>void 0)};n.aborted?onProtocolCancel():n.addEventListener(`abort`,onProtocolCancel,{once:!0});try{if(o.protocolCancelled)throw RequestError.requestCancelled({sessionId:e.sessionId});let a={message:i};for(;;){let i;if(r.client===void 0){if(a.message===void 0)throw Error(`ACP session has not started.`);let e=await this.#e.sessions.create({...a,message:a.message});r.client=e.session,i=e.response}else i=a.inputResponses===void 0?await r.client.send(a.message):await r.client.respond(a.inputResponses);(o.cancelRequested||o.protocolCancelled)&&await this.#o(r);let s=[],c=!1,l,u;for await(let n of i){let i=`data`in n?n.data:void 0,a=i!==void 0&&`turnId`in i?i.turnId:void 0;typeof a==`string`&&(o.turnId=a),n.type===`input.requested`&&s.push(...n.data.requests),n.type===`authorization.required`&&(u=unsupported(`Connection authorization cannot be completed through eve ACP mode.`)),n.type===`turn.cancelled`&&(c=!0),(n.type===`turn.failed`||n.type===`session.failed`)&&(l=n),await this.#c(e.sessionId,r,n,t)}if(o.protocolCancelled)throw RequestError.requestCancelled({sessionId:e.sessionId});if(c||o.cancelRequested)return{stopReason:`cancelled`};if(l!==void 0)throw await this.#l(e.sessionId,r,t),eveFailure(l);if(u!==void 0)throw u;if(s.length===0)return{stopReason:`end_turn`};let d;try{d=await Promise.all(s.map(i=>this.#d(e.sessionId,r,i,t,n)))}catch(t){if(o.protocolCancelled)throw RequestError.requestCancelled({sessionId:e.sessionId});if(o.cancelRequested)return{stopReason:`cancelled`};throw t}if(o.protocolCancelled)throw RequestError.requestCancelled({sessionId:e.sessionId});if(o.cancelRequested)return{stopReason:`cancelled`};a={inputResponses:d}}}catch(e){throw acpRequestError(e)}finally{n.removeEventListener(`abort`,onProtocolCancel),r.tools.clear(),o.resolveSettled(),r.active===o&&(r.active=void 0)}}async cancel(e){let t=this.#i.get(e);t!==void 0&&t.active!==void 0&&(t.active.cancelRequested=!0,await this.#o(t))}async closeSession(e){let t=this.#s(e);this.#i.delete(e),await this.#a(t)}async close(){let e=[...this.#i.values()];this.#i.clear(),await Promise.allSettled(e.map(e=>this.#a(e)))}async#a(e){let t;if(e.active!==void 0){let n=e.active;n.cancelRequested=!0;try{await this.#o(e)}catch(e){t=e}await n.settled}try{await e.client?.reset()}catch(e){throw t===void 0?e:AggregateError([t,e],`Could not cancel or reset the eve session`)}if(t!==void 0)throw t}async#o(e){e.active?.outboundController.abort(),e.client!==void 0&&await e.client.cancel(e.active?.turnId===void 0?void 0:{turnId:e.active.turnId})}#s(e){let t=this.#i.get(e);if(t===void 0)throw RequestError.invalidParams({sessionId:e},`Unknown or closed ACP session`);return t}async#c(e,t,n,r){let i=t.projection;if(t.projection=foldSession(i,n),await this.#u(e,t,n,r),n.type===`actions.requested`)return;let a=new Set,{calls:o,tasks:s,turns:c}=t.projection;if(o!==i.calls||s!==i.tasks||c!==i.turns)for(let s of Object.keys(o)){if(!t.tools.has(s))continue;let o=callStatus(t.projection,s);o!==void 0&&o!==callStatus(i,s)&&(a.add(s),await notifyUpdate(r,e,{sessionUpdate:`tool_call_update`,toolCallId:s,status:ACP_TOOL_STATUS[o],...callOutput(n,s),...resultTitle(n,s)}))}let l=n.type===`action.result`?n.data.result.callId:n.type===`task.settled`?n.data.callId:void 0;if(l===void 0||a.has(l)||!t.tools.has(l))return;let u=callOutput(n,l),d=callStatus(t.projection,l);`content`in u&&d!==void 0&&await notifyUpdate(r,e,{sessionUpdate:`tool_call_update`,toolCallId:l,status:ACP_TOOL_STATUS[d],...u,...resultTitle(n,l)})}async#l(e,t,n){for(let r of t.tools.keys())callStatus(t.projection,r)===`running`&&await notifyUpdate(n,e,{sessionUpdate:`tool_call_update`,toolCallId:r,status:ACP_TOOL_STATUS.failed})}async#u(e,t,n,r){switch(n.type){case`message.appended`:await notifyUpdate(r,e,{sessionUpdate:`agent_message_chunk`,content:{type:`text`,text:n.data.messageDelta},messageId:`${n.data.turnId}:message:${n.data.stepIndex}`});return;case`reasoning.appended`:await notifyUpdate(r,e,{sessionUpdate:`agent_thought_chunk`,content:{type:`text`,text:n.data.reasoningDelta},messageId:`${n.data.turnId}:thought:${n.data.stepIndex}`});return;case`actions.requested`:for(let i of visibleActions(n.data.actions)){let a=toolCallForAction(i,n.data.presentation);t.tools.set(i.callId,a),await notifyUpdate(r,e,{sessionUpdate:`tool_call`,...a})}return;default:return}}async#d(e,t,n,r,i){let a=AbortSignal.any([i,t.active.outboundController.signal]);if(n.display===`confirmation`){let i=`${n.requestId}:approve`,o=`${n.requestId}:deny`,s=t.tools.get(n.action.callId)??toolCallForAction(n.action),c=await r.request(methods.client.session.requestPermission,{sessionId:e,toolCall:s,options:[{kind:`allow_once`,name:`Approve`,optionId:i},{kind:`reject_once`,name:`Deny`,optionId:o}]},{cancellationSignal:a});if(c.outcome.outcome===`cancelled`)return this.#f(t),{requestId:n.requestId};if(c.outcome.optionId===i)return{requestId:n.requestId,optionId:`approve`};if(c.outcome.optionId===o)return{requestId:n.requestId,optionId:`deny`};throw RequestError.invalidParams({optionId:c.outcome.optionId},`Unknown ACP permission option`)}if(!this.#r)throw unsupported(`The ACP client does not support form elicitation required by this eve question.`);let o=elicitationProperty(n),s=await r.request(methods.client.elicitation.create,{mode:`form`,sessionId:e,message:n.prompt,requestedSchema:{type:`object`,properties:{[ANSWER_FIELD]:o},required:[ANSWER_FIELD]}},{cancellationSignal:a});if(s.action!==`accept`)return this.#f(t),{requestId:n.requestId};let c=s.content?.[ANSWER_FIELD];if(typeof c!=`string`)throw RequestError.invalidParams(s.content,`ACP elicitation response must contain a string answer`);if(n.display===`select`){if(!n.options?.some(e=>e.id===c))throw RequestError.invalidParams({answer:c},`Unknown eve question option`);return{requestId:n.requestId,optionId:c}}return{requestId:n.requestId,text:c}}#f(e){let t=e.active;t.cancelRequested=!0,t.outboundController.abort()}};async function normalizedRealpath(e,t){try{return await realpath(e)}catch(n){throw RequestError.invalidParams({path:e},`Could not resolve ${t}: ${errorMessage(n)}`)}}function promptContent(e){let t=e.prompt.map(e=>{if(e.type!==`text`)throw unsupported(`ACP prompt content type ${JSON.stringify(e.type)} is not supported.`);return{type:`text`,text:e.text}});if(t.every(e=>e.text.length===0))throw RequestError.invalidParams(e.prompt,`ACP prompt must contain at least one non-empty text block`);return t}function toolCallForAction(e,t){return{toolCallId:e.callId,title:actionLabel(e,t),kind:`other`,status:`pending`,rawInput:e.input}}function elicitationProperty(e){if(e.display===`select`&&e.allowFreeform!==!0&&e.options?.length)return{type:`string`,title:e.prompt,oneOf:e.options.map(e=>({const:e.id,title:e.label,description:e.description}))};if(e.display===`text`&&e.allowFreeform!==!1)return{type:`string`,title:e.prompt,minLength:1};throw unsupported(`This eve question shape cannot be represented by ACP form elicitation.`)}async function notifyUpdate(e,t,n){await e.notify(methods.client.session.update,{sessionId:t,update:n})}function stringifyOutput(e){return typeof e==`string`?e:JSON.stringify(e,null,2)}function unsupported(e){return new RequestError(-32003,e)}function eveFailure(e){return new RequestError(ERROR_CODE_EVE,e.data.message,{code:e.data.code,details:e.data.details})}function acpRequestError(e){return e instanceof RequestError?e:e instanceof ClientError?new RequestError(ERROR_CODE_EVE,e.message,{httpStatus:e.status}):new RequestError(ERROR_CODE_EVE,errorMessage(e))}function errorMessage(e){return e instanceof Error?e.message:String(e)}function resultTitle(e,t){let n=e.type===`action.result`?e.data.presentation?.[t]?.label:void 0;return n===void 0?{}:{title:n}}function callOutput(e,t){let n=e.type===`action.result`&&e.data.result.callId===t?e.data.result.output:e.type===`task.settled`&&e.data.callId===t?e.data.output===void 0?e.data.error?.message:e.data.output:void 0;return n===void 0?{}:{content:[{type:`content`,content:{type:`text`,text:stringifyOutput(n)}}],rawOutput:n}}export{EveAcpAdapter};
@@ -17,7 +17,9 @@ export type ChannelAddressDeliveryOptions<TState = undefined> = [TState] extends
17
17
  };
18
18
  /**
19
19
  * Dynamic handle for whichever durable session currently owns one channel-local address.
20
- * Only {@link send} may create a session when the address is unowned.
20
+ * Only {@link send} may create a session: when the address is unowned, or in
21
+ * place of a stranded session that another eve version built. Sends to a session whose
22
+ * owner is only unavailable throw `SessionStrandedError` and deliver nothing.
21
23
  */
22
24
  interface ChannelAddress<TState = undefined> {
23
25
  readonly continuationToken: string;
@@ -1 +1 @@
1
- import{createSession,sessionCallbackToTurnCaller}from"#channel/session.js";import{createChannelDeliveryMetadata}from"#channel/delivery-metadata.js";import{normalizeSendInput,serializeUrlFilePartsInMessage}from"#channel/send-input.js";import{DEFAULT_TURN_POLICY}from"#channel/types.js";import{isReservedSessionCommandToken}from"#execution/session-inbox/address.js";function createChannelAddress(e){let t=e.metadata??{},n=`${e.channelName}:${e.continuationToken}`;if(isReservedSessionCommandToken(n))throw Error(`Channel address "${n}" uses eve's reserved session namespace.`);return{continuationToken:e.continuationToken,async deliver(r,i){let a=t.channelKind!==void 0&&t.channelName!==void 0?createChannelDeliveryMetadata(t):void 0,o=normalizeSendInput(r),s=sessionCallbackToTurnCaller(i.callback),c={auth:i.auth,delivery:a,kind:`send`,payload:{...o,message:serializeUrlFilePartsInMessage(o.message)},requestId:t.requestId,turnPolicy:o.message===void 0?void 0:i.turnPolicy??e.turnPolicy??DEFAULT_TURN_POLICY},l=s===void 0?c:{...c,caller:s},u=await(async()=>{let r=await e.runtime.dispatchContinuation({command:l,continuationToken:n});return r.status===`accepted`?createSession(r.sessionId,e.runtime,{...t,turnPolicy:e.turnPolicy}):void 0})();if(u!==void 0)return u;if(o.inputResponses&&o.inputResponses.length>0)throw Error(`Cannot deliver inputResponses — the target session was not found via continuation token.`);let d=i.state,f={adapter:d===void 0?e.adapter:{...e.adapter,state:{...e.adapter.state,...d}},auth:i.auth,capabilities:{requestInput:!0},callback:i.callback,channelName:e.channelName,continuationConflictCommand:l,continuationToken:n,delivery:a,initiatorAuth:i.initiatorAuth,input:{context:o.context,message:serializeUrlFilePartsInMessage(o.message)??``,outputSchema:o.outputSchema,state:o.state},requestId:t.requestId,title:i.title},p=await e.runtime.createSession(f);return createSession(p.sessionId,e.runtime,{...t,turnPolicy:e.turnPolicy})},async send(e,t){return await this.deliver({message:e},t)},async respond(e,t){if(e===void 0||e.length===0)throw Error(`respond() requires at least one input response.`);return await this.deliver({inputResponses:e},t)},async cancel(t){return await e.runtime.dispatchContinuation({command:{kind:`cancel`,turnId:t?.turnId},continuationToken:n})},async compact(){return await e.runtime.dispatchContinuation({command:{kind:`compact`},continuationToken:n})},async clear(){return await e.runtime.dispatchContinuation({command:{kind:`clear`},continuationToken:n})},async reset(t){return await e.runtime.dispatchContinuation({command:{kind:`reset`,reason:t?.reason},continuationToken:n})},async resolveSession(){let r=await e.runtime.resolveContinuation(n);return r===void 0?void 0:createSession(r.sessionId,e.runtime,{...t,turnPolicy:e.turnPolicy})}}}function createChannelAddressFn(e){return t=>createChannelAddress({...e,continuationToken:t})}export{createChannelAddress,createChannelAddressFn};
1
+ import{createSession,sessionCallbackToTurnCaller}from"#channel/session.js";import{createChannelDeliveryMetadata}from"#channel/delivery-metadata.js";import{normalizeSendInput,serializeUrlFilePartsInMessage}from"#channel/send-input.js";import{DEFAULT_TURN_POLICY}from"#channel/types.js";import{isReservedSessionCommandToken}from"#execution/session-inbox/address.js";function createChannelAddress(e){let t=e.metadata??{},n=`${e.channelName}:${e.continuationToken}`;if(isReservedSessionCommandToken(n))throw Error(`Channel address "${n}" uses eve's reserved session namespace.`);return{continuationToken:e.continuationToken,async deliver(r,i){let a=t.channelKind!==void 0&&t.channelName!==void 0?createChannelDeliveryMetadata(t):void 0,o=normalizeSendInput(r),s=sessionCallbackToTurnCaller(i.callback),c={auth:i.auth,delivery:a,kind:`send`,payload:{...o,message:serializeUrlFilePartsInMessage(o.message)},requestId:t.requestId,turnPolicy:o.message===void 0?void 0:i.turnPolicy??e.turnPolicy??DEFAULT_TURN_POLICY},l=s===void 0?c:{...c,caller:s},u=i.state,d={adapter:u===void 0?e.adapter:{...e.adapter,state:{...e.adapter.state,...u}},auth:i.auth,capabilities:{requestInput:!0},callback:i.callback,channelName:e.channelName,continuationConflictCommand:l,continuationToken:n,delivery:a,initiatorAuth:i.initiatorAuth,input:{context:o.context,message:serializeUrlFilePartsInMessage(o.message)??``,outputSchema:o.outputSchema,state:o.state},requestId:t.requestId,title:i.title},toSession=n=>createSession(n,e.runtime,{...t,turnPolicy:e.turnPolicy}),f=await e.runtime.dispatchContinuation({command:l,continuationToken:n,successor:d});if(f.status===`accepted`)return toSession(f.sessionId);if(o.inputResponses&&o.inputResponses.length>0)throw Error(`Cannot deliver inputResponses — the target session was not found via continuation token.`);return toSession((await e.runtime.createSession(d)).sessionId)},async send(e,t){return await this.deliver({message:e},t)},async respond(e,t){if(e===void 0||e.length===0)throw Error(`respond() requires at least one input response.`);return await this.deliver({inputResponses:e},t)},async cancel(t){return await e.runtime.dispatchContinuation({command:{kind:`cancel`,turnId:t?.turnId},continuationToken:n})},async compact(){return await e.runtime.dispatchContinuation({command:{kind:`compact`},continuationToken:n})},async clear(){return await e.runtime.dispatchContinuation({command:{kind:`clear`},continuationToken:n})},async reset(t){return await e.runtime.dispatchContinuation({command:{kind:`reset`,reason:t?.reason},continuationToken:n})},async resolveSession(){let r=await e.runtime.resolveContinuation(n);return r===void 0?void 0:createSession(r.sessionId,e.runtime,{...t,turnPolicy:e.turnPolicy})}}}function createChannelAddressFn(e){return t=>createChannelAddress({...e,continuationToken:t})}export{createChannelAddress,createChannelAddressFn};
@@ -0,0 +1,25 @@
1
+ /** The owner of a stranded session, as far as it recorded itself. */
2
+ interface StrandedSessionOwner {
3
+ /** eve version that built the owner, when it recorded one. */
4
+ readonly eveVersion?: string;
5
+ }
6
+ /**
7
+ * Thrown when sending, responding, clearing, or following the live stream of
8
+ * a session whose owner another eve version built, on a World that only runs
9
+ * this build, so the owner can never execute again. Nothing is delivered and
10
+ * nothing is mutated. Historical reads with `follow: false` still succeed.
11
+ * Call `reset()` to end the session, then start a new one. Narrow with
12
+ * {@link SessionStrandedError.is}.
13
+ */
14
+ export declare class SessionStrandedError extends Error {
15
+ readonly owner: StrandedSessionOwner;
16
+ constructor(owner: StrandedSessionOwner, message?: string);
17
+ /** Narrows stranded-session errors across bundle boundaries, where `instanceof` can miss. */
18
+ static is(error: unknown): error is SessionStrandedError;
19
+ }
20
+ /**
21
+ * One actionable sentence pair that names the cause, the version, and the
22
+ * next step. `nextStep` replaces the default recovery instruction.
23
+ */
24
+ export declare function describeStrandedSession(owner: StrandedSessionOwner, nextStep?: string): string;
25
+ export {};
@@ -0,0 +1 @@
1
+ var SessionStrandedError=class SessionStrandedError extends Error{owner;constructor(e,t){super(t??describeStrandedSession(e)),this.name=`SessionStrandedError`,this.owner=e}static is(e){return e instanceof SessionStrandedError||typeof e==`object`&&!!e&&Reflect.get(e,`name`)===`SessionStrandedError`&&typeof Reflect.get(e,`owner`)==`object`}};function describeStrandedSession(e,t){return`This session is stranded: ${e.eveVersion===void 0?`it was created by an earlier eve release`:`it was created by eve ${e.eveVersion}`} on a deployment that is no longer available, so it cannot process messages. ${t??`Reset the session to start fresh.`}`}export{SessionStrandedError,describeStrandedSession};
@@ -2,16 +2,20 @@ import type { ContextAccessor } from "#context/key.js";
2
2
  import { type ChannelDeliverySource } from "#channel/delivery-metadata.js";
3
3
  import type { MessageStreamEvent } from "#protocol/message.js";
4
4
  import type { UserContent } from "ai";
5
- import type { CancelTurnResult, ClearSessionResult, CompactSessionResult, ResetSessionResult, Runtime, SessionAuthContext, SessionCallback, SessionSendCommandResult, TurnPolicy, TurnCaller } from "#channel/types.js";
5
+ import type { CancelTurnResult, ClearSessionResult, CompactSessionResult, GetEventStreamOptions, ResetSessionResult, Runtime, SessionAuthContext, SessionCallback, SessionSendCommandResult, TurnPolicy, TurnCaller } from "#channel/types.js";
6
6
  import type { SessionAuth } from "#context/keys.js";
7
7
  import { type InputResponse, type StrictInputResponses } from "#shared/input.js";
8
8
  import type { JsonObject } from "#shared/json.js";
9
9
  /** Immutable-ID handle for one exact durable session. */
10
10
  export interface Session {
11
11
  readonly id: string;
12
- /** Sends a message to this exact session ID without creating or following a replacement. */
12
+ /**
13
+ * Sends a message to this exact session ID without creating or following a
14
+ * replacement. Throws `SessionStrandedError` when the session's owner cannot
15
+ * execute here; nothing is delivered. Call {@link reset} to end it.
16
+ */
13
17
  send(message: string | UserContent, options: SessionSendOptions): Promise<SessionSendCommandResult>;
14
- /** Answers pending input requests on this exact session ID. */
18
+ /** Answers pending input requests on this exact session ID. Throws `SessionStrandedError` like {@link send}. */
15
19
  respond<const TResponses extends readonly InputResponse[]>(inputResponses: StrictInputResponses<TResponses>, options: SessionRespondOptions): Promise<SessionSendCommandResult>;
16
20
  /** Requests cancellation of this exact session's active turn. */
17
21
  cancel(options?: {
@@ -25,9 +29,12 @@ export interface Session {
25
29
  reset(options?: {
26
30
  reason?: string;
27
31
  }): Promise<ResetSessionResult>;
28
- getEventStream(options?: {
29
- startIndex?: number;
30
- }): Promise<ReadableStream<MessageStreamEvent>>;
32
+ /**
33
+ * Opens the recorded stream. Following it throws `SessionStrandedError`
34
+ * while its owner is stranded; `follow: false` reads recorded history up to
35
+ * the current tail without inspecting or changing the session.
36
+ */
37
+ getEventStream(options?: GetEventStreamOptions): Promise<ReadableStream<MessageStreamEvent>>;
31
38
  getStreamTailIndex(): Promise<number>;
32
39
  }
33
40
  interface SessionDeliveryOptions {
@@ -1 +1 @@
1
- import{isTaskControlTool}from"#protocol/task-tools.js";import{actionRequestName}from"#shared/action-request-name.js";import{displayTitle}from"#shared/display-name.js";import{firstSentence,normalizePresentationText}from"#shared/presentation-text.js";function trackTaskCardEvent(e,t,n){switch(t.type){case`input.requested`:{let{requests:n,taskId:r}=t.data;if(r===void 0)return{};let i=n.map(e=>blocker(e.requestId,e.kind===`question`?`input`:`approval`,e.prompt));return updateBlockers(e,r,e=>[...e,...i])}case`input.resolved`:{let n=new Set(t.data.resolutions.map(e=>e.requestId));return updateBlockers(e,void 0,e=>e.filter(e=>!n.has(e.id)))}case`authorization.required`:{let{taskId:n}=t.data;if(n===void 0)return{};let r=authorizationId(t.data),i=t.data.authorization?.displayName??t.data.name;return updateBlockers(e,n,e=>[...e.filter(e=>e.id!==r),blocker(r,`authorization`,i)])}case`authorization.completed`:{let n=authorizationId(t.data);return updateBlockers(e,t.data.taskId,e=>e.filter(e=>e.id!==n))}default:{let r=trackTurnEvent(e,t,n);return r===void 0?{}:{[r.turnId]:r.turn}}}}function blocker(e,t,n){let r=presentationText(n)?.slice(0,200);return r===void 0?{id:e,kind:t}:{id:e,kind:t,label:r}}function authorizationId(e){return e.attemptId??e.candidateId??e.name}function updateBlockers(e,t,n){let r={};for(let[i,a]of Object.entries(e))for(let e of a.calls){if(e.task===void 0||e.status!==`working`||t!==void 0&&e.task.id!==t)continue;let o=e.task.blockers??[],s=n(o);if(s.length===o.length&&s.every((e,t)=>e.id===o[t].id))continue;let c={...e.task,blockers:s};r[i]=replaceCall(r[i]??a,{...e,task:c})}return r}function trackTurnEvent(e,t,n){switch(t.type){case`actions.requested`:{let{turnId:r}=t.data,i=e[r]??{calls:[],ended:!1},a=new Set(i.calls.map(e=>e.callId)),o=t.data.actions.filter(e=>!a.has(e.callId)&&(e.kind!==`tool-call`||!isTaskControlTool(e.toolName)&&e.parentCallId===void 0));if(o.length===0)return;let s=o.map(e=>requestedCall(e,t.data.presentation?.[e.callId]?.label,n));return{turn:{...i,calls:bounded([...i.calls,...s])},turnId:r}}case`action.result`:{let{turnId:r}=t.data,i=e[r],a=i?.calls.find(e=>e.callId===t.data.result.callId);if(i===void 0||a===void 0||a.task!==void 0)return;let o=actionStatus(t.data.status);return{turn:replaceCall(i,{...a,settledAt:n,status:o}),turnId:r}}case`task.started`:{let{callId:r,kind:i,name:a,taskId:o,turnId:s}=t.data,c=e[s]??{calls:[],ended:!1},l=c.calls.find(e=>e.callId===r)??{callId:r,name:a,startedAt:n,status:`working`,title:displayTitle(a)};return{turn:replaceCall(c,{callId:l.callId,name:l.name,startedAt:l.startedAt,status:`working`,task:{id:o,kind:i},title:l.title}),turnId:s}}case`task.settled`:{let{callId:r,status:i,turnId:a}=t.data,o=e[a],s=o?.calls.find(e=>e.callId===r);if(o===void 0||s?.task===void 0)return;let c={id:s.task.id,kind:s.task.kind},l=taskSummary(t.data);l!==void 0&&(c.summary=l);let u=t.data.cancel?.reason;return u!==void 0&&(c.cancelReason=u),{turn:replaceCall(o,{...s,settledAt:n,status:i,task:c}),turnId:a}}case`turn.completed`:case`turn.failed`:case`turn.cancelled`:{let n=e[t.data.turnId];return n===void 0||n.ended?void 0:{turn:{...n,ended:!0},turnId:t.data.turnId}}default:return}}function closeSettledTasks(e,t){let n=e.calls.filter(e=>e.task!==void 0&&e.callId!==t);if(!(n.length===0||n.some(e=>e.status===`working`)))return{closed:{calls:e.calls.filter(e=>e.status!==`working`),ended:!0},open:{calls:e.calls.filter(e=>e.status===`working`),ended:!1}}}function taskCardView(e,t,n){let r=[],i=[];for(let e of t.calls)e.task===void 0?i.push(toAction(e)):r.push(toTask(e,e.task,n.audience));return{actions:i,state:r.some(e=>e.status===`blocked`)?`blocked`:!t.ended||r.some(e=>e.status===`working`)?`working`:`finished`,tasks:r,turnId:e}}function workingTaskNames(e){return(e?.calls??[]).filter(e=>e.task!==void 0&&e.status===`working`).map(e=>e.name)}function requestedCall(e,t,n){let r=actionRequestName(e),i={callId:e.callId,name:r,startedAt:n,status:`working`,title:presentationText(t)??displayTitle(r)},a=boundedInput(e.input);return a!==void 0&&(i.input=a),i}function toAction(e){let t={id:e.callId,name:e.name,startedAt:e.startedAt,status:e.status,title:e.title};return e.input!==void 0&&(t.input=e.input),e.settledAt!==void 0&&(t.settledAt=e.settledAt),t}function toTask(e,t,n){let r={id:e.callId,kind:t.kind,name:e.name,startedAt:e.startedAt,status:e.status,taskId:t.id,title:e.title},i=n===`private`,a=e.status===`working`?t.blockers?.at(-1):void 0;a!==void 0&&(r.status=`blocked`,r.blockedOn=i&&a.label!==void 0?{kind:a.kind,label:a.label}:{kind:a.kind});let o=e.status!==`failed`||i;return t.summary!==void 0&&o&&(r.summary=t.summary),t.cancelReason!==void 0&&(r.cancelReason=t.cancelReason),e.settledAt!==void 0&&(r.settledAt=e.settledAt),r}function replaceCall(e,t){let n=e.calls.some(e=>e.callId===t.callId)?e.calls.map(e=>e.callId===t.callId?t:e):[...e.calls,t];return{...e,calls:bounded(n)}}function bounded(e){let t=e.length-100;return t<=0?e:e.filter(e=>t>0&&e.status!==`working`?(--t,!1):!0)}function actionStatus(e){switch(e){case`completed`:case`cancelled`:return e;default:return`failed`}}function boundedInput(e){if(typeof e==`object`&&e&&!Array.isArray(e))return JSON.stringify(e).length<=4096?e:void 0}function taskSummary(e){switch(e.status){case`completed`:return brief(resultText(e.output));case`failed`:return brief(e.error?.message);default:return}}function resultText(e){if(typeof e==`string`)return e;if(typeof e!=`object`||!e||Array.isArray(e))return;let t=e;return t.message??t.text??t.summary}function brief(e){return typeof e==`string`?firstSentence(e):void 0}function presentationText(e){if(e===void 0)return;let t=normalizePresentationText(e);return t===``?void 0:t}export{closeSettledTasks,taskCardView,trackTaskCardEvent,workingTaskNames};
1
+ import{actionLabel,visibleActions}from"#shared/action-label.js";import{actionRequestName}from"#shared/action-request-name.js";import{displayTitle}from"#shared/display-name.js";import{firstSentence,normalizePresentationText}from"#shared/presentation-text.js";function trackTaskCardEvent(e,t,n){switch(t.type){case`input.requested`:{let{requests:n,taskId:r}=t.data;if(r===void 0)return{};let i=n.map(e=>blocker(e.requestId,e.kind===`question`?`input`:`approval`,e.prompt));return updateBlockers(e,r,e=>[...e,...i])}case`input.resolved`:{let n=new Set(t.data.resolutions.map(e=>e.requestId));return updateBlockers(e,void 0,e=>e.filter(e=>!n.has(e.id)))}case`authorization.required`:{let{taskId:n}=t.data;if(n===void 0)return{};let r=authorizationId(t.data),i=t.data.authorization?.displayName??t.data.name;return updateBlockers(e,n,e=>[...e.filter(e=>e.id!==r),blocker(r,`authorization`,i)])}case`authorization.completed`:{let n=authorizationId(t.data);return updateBlockers(e,t.data.taskId,e=>e.filter(e=>e.id!==n))}default:{let r=trackTurnEvent(e,t,n);return r===void 0?{}:{[r.turnId]:r.turn}}}}function blocker(e,t,n){let r=presentationText(n)?.slice(0,200);return r===void 0?{id:e,kind:t}:{id:e,kind:t,label:r}}function authorizationId(e){return e.attemptId??e.candidateId??e.name}function updateBlockers(e,t,n){let r={};for(let[i,a]of Object.entries(e))for(let e of a.calls){if(e.task===void 0||e.status!==`working`||t!==void 0&&e.task.id!==t)continue;let o=e.task.blockers??[],s=n(o);if(s.length===o.length&&s.every((e,t)=>e.id===o[t].id))continue;let c={...e.task,blockers:s};r[i]=replaceCall(r[i]??a,{...e,task:c})}return r}function trackTurnEvent(e,t,n){switch(t.type){case`actions.requested`:{let{turnId:r}=t.data,i=e[r]??{calls:[],ended:!1},a=new Set(i.calls.map(e=>e.callId)),o=visibleActions(t.data.actions).filter(e=>!a.has(e.callId));if(o.length===0)return;let s=o.map(e=>requestedCall(e,t.data.presentation,n));return{turn:{...i,calls:bounded([...i.calls,...s])},turnId:r}}case`action.result`:{let{turnId:r}=t.data,i=e[r],a=i?.calls.find(e=>e.callId===t.data.result.callId);if(i===void 0||a===void 0||a.task!==void 0)return;let o=actionStatus(t.data.status);return{turn:replaceCall(i,{...a,settledAt:n,status:o}),turnId:r}}case`task.started`:{let{callId:r,kind:i,name:a,taskId:o,turnId:s}=t.data,c=e[s]??{calls:[],ended:!1},l=c.calls.find(e=>e.callId===r)??{callId:r,name:a,startedAt:n,status:`working`,title:displayTitle(a)};return{turn:replaceCall(c,{callId:l.callId,name:l.name,startedAt:l.startedAt,status:`working`,task:{id:o,kind:i},title:l.title}),turnId:s}}case`task.settled`:{let{callId:r,status:i,turnId:a}=t.data,o=e[a],s=o?.calls.find(e=>e.callId===r);if(o===void 0||s?.task===void 0)return;let c={id:s.task.id,kind:s.task.kind},l=taskSummary(t.data);l!==void 0&&(c.summary=l);let u=t.data.cancel?.reason;return u!==void 0&&(c.cancelReason=u),{turn:replaceCall(o,{...s,settledAt:n,status:i,task:c}),turnId:a}}case`turn.completed`:case`turn.failed`:case`turn.cancelled`:{let n=e[t.data.turnId];return n===void 0||n.ended?void 0:{turn:{...n,ended:!0},turnId:t.data.turnId}}default:return}}function closeSettledTasks(e,t){let n=e.calls.filter(e=>e.task!==void 0&&e.callId!==t);if(!(n.length===0||n.some(e=>e.status===`working`)))return{closed:{calls:e.calls.filter(e=>e.status!==`working`),ended:!0},open:{calls:e.calls.filter(e=>e.status===`working`),ended:!1}}}function taskCardView(e,t,n){let r=[],i=[];for(let e of t.calls)e.task===void 0?i.push(toAction(e)):r.push(toTask(e,e.task,n.audience));return{actions:i,state:r.some(e=>e.status===`blocked`)?`blocked`:!t.ended||r.some(e=>e.status===`working`)?`working`:`finished`,tasks:r,turnId:e}}function workingTaskNames(e){return(e?.calls??[]).filter(e=>e.task!==void 0&&e.status===`working`).map(e=>e.name)}function requestedCall(e,t,n){let r=actionRequestName(e),i={callId:e.callId,name:r,startedAt:n,status:`working`,title:actionLabel(e,t)},a=boundedInput(e.input);return a!==void 0&&(i.input=a),i}function toAction(e){let t={id:e.callId,name:e.name,startedAt:e.startedAt,status:e.status,title:e.title};return e.input!==void 0&&(t.input=e.input),e.settledAt!==void 0&&(t.settledAt=e.settledAt),t}function toTask(e,t,n){let r={id:e.callId,kind:t.kind,name:e.name,startedAt:e.startedAt,status:e.status,taskId:t.id,title:e.title},i=n===`private`,a=e.status===`working`?t.blockers?.at(-1):void 0;a!==void 0&&(r.status=`blocked`,r.blockedOn=i&&a.label!==void 0?{kind:a.kind,label:a.label}:{kind:a.kind});let o=e.status!==`failed`||i;return t.summary!==void 0&&o&&(r.summary=t.summary),t.cancelReason!==void 0&&(r.cancelReason=t.cancelReason),e.settledAt!==void 0&&(r.settledAt=e.settledAt),r}function replaceCall(e,t){let n=e.calls.some(e=>e.callId===t.callId)?e.calls.map(e=>e.callId===t.callId?t:e):[...e.calls,t];return{...e,calls:bounded(n)}}function bounded(e){let t=e.length-100;return t<=0?e:e.filter(e=>t>0&&e.status!==`working`?(--t,!1):!0)}function actionStatus(e){switch(e){case`completed`:case`cancelled`:return e;default:return`failed`}}function boundedInput(e){if(typeof e==`object`&&e&&!Array.isArray(e))return JSON.stringify(e).length<=4096?e:void 0}function taskSummary(e){switch(e.status){case`completed`:return brief(resultText(e.output));case`failed`:return brief(e.error?.message);default:return}}function resultText(e){if(typeof e==`string`)return e;if(typeof e!=`object`||!e||Array.isArray(e))return;let t=e;return t.message??t.text??t.summary}function brief(e){return typeof e==`string`?firstSentence(e):void 0}function presentationText(e){if(e===void 0)return;let t=normalizePresentationText(e);return t===``?void 0:t}export{closeSettledTasks,taskCardView,trackTaskCardEvent,workingTaskNames};
@@ -20,8 +20,7 @@ export interface CompiledToolBindings {
20
20
  * conservative phase-1 policy, stricter than the mechanical predicate in
21
21
  * the research plan (`hasExecute` minus handled tools and framework
22
22
  * actions). It is not a claim that every framework tool needs a turn: some,
23
- * such as `load_skill` and `agent`, depend on the turn's harness or
24
- * session, while others, such as `web_fetch`, could run without one. They
23
+ * such as `agent`, depend on the turn's harness or session, while others, such as `web_fetch`, could run without one. They
25
24
  * are all withheld so that phase 1 publishes only tools the application or
26
25
  * an extension authored; exposing individual framework tools is a later,
27
26
  * explicit decision. An application or extension tool that overrides a
@@ -31,7 +31,10 @@ export type CompactSessionResult = {
31
31
  } | {
32
32
  readonly status: "no_active_session";
33
33
  };
34
- /** Result of queueing a manual context clear for a session. */
34
+ /**
35
+ * Result of queueing a manual context clear for a session. A stranded session
36
+ * cannot run the clear, so it throws `SessionStrandedError` instead.
37
+ */
35
38
  export type ClearSessionResult = {
36
39
  readonly status: "accepted";
37
40
  readonly sessionId: string;
@@ -210,6 +213,11 @@ export type SessionCommandResult<TCommand extends SessionCommand = SessionComman
210
213
  export interface DispatchContinuationInput<TCommand extends SessionCommand = SessionCommand> {
211
214
  readonly command: TCommand;
212
215
  readonly continuationToken: string;
216
+ /**
217
+ * Fresh creation inputs for a send. Used only when the address's owner is
218
+ * stranded: the runtime ends it and starts this successor in its place.
219
+ */
220
+ readonly successor?: RunInput;
213
221
  }
214
222
  export interface DispatchSessionInput<TCommand extends SessionCommand = SessionCommand> {
215
223
  readonly command: TCommand;
@@ -528,7 +536,17 @@ export interface Runtime {
528
536
  * completion.
529
537
  */
530
538
  createSession(input: RunInput): Promise<RunHandle>;
539
+ /**
540
+ * Sends a command to whichever session owns a continuation address. When
541
+ * that owner is stranded, a send with a `successor` ends it and is accepted
542
+ * by the successor; a send without one, or a `clear`, throws
543
+ * `SessionStrandedError`, and a `reset` ends it.
544
+ */
531
545
  dispatchContinuation<TCommand extends SessionCommand>(input: DispatchContinuationInput<TCommand>): Promise<SessionCommandResult<TCommand>>;
546
+ /**
547
+ * Sends a command to one exact session. A send or `clear` to a stranded
548
+ * session throws `SessionStrandedError`; a `reset` ends it.
549
+ */
532
550
  dispatchSession<TCommand extends SessionCommand>(input: DispatchSessionInput<TCommand>): Promise<SessionCommandResult<TCommand>>;
533
551
  /**
534
552
  * Resolves the session that currently owns a continuation token without
@@ -549,6 +567,10 @@ export interface Runtime {
549
567
  * first event to yield. Negative values read relative to the current tail.
550
568
  * The framework HTTP session-stream route forwards the `startIndex` query
551
569
  * parameter unchanged.
570
+ *
571
+ * A following read throws `SessionStrandedError` when the session's owner
572
+ * cannot execute here. A historical read (`follow: false`) never inspects
573
+ * or changes the session's lifecycle.
552
574
  */
553
575
  getEventStream(sessionId: string, options?: GetEventStreamOptions): Promise<ReadableStream<MessageStreamEvent>>;
554
576
  /**
@@ -569,4 +591,10 @@ export interface GetEventStreamOptions {
569
591
  * (replay the entire stream).
570
592
  */
571
593
  readonly startIndex?: number;
594
+ /**
595
+ * Whether to keep following events recorded after the read opens. When
596
+ * `false`, the stream ends at the durable tail observed when it opens, and
597
+ * it stays readable while the session is stranded. Defaults to `true`.
598
+ */
599
+ readonly follow?: boolean;
572
600
  }
@@ -550,25 +550,39 @@ var ClientError = class extends Error {
550
550
  constructor(status, body, headers) {
551
551
  const normalizedHeaders = Object.freeze(Object.fromEntries(new Headers(headers).entries()));
552
552
  const contentType = normalizedHeaders["content-type"]?.toLowerCase();
553
+ const parsed = parseJsonObject$1(body);
553
554
  let message = body || `Server returned ${status}.`;
554
- let code;
555
- try {
556
- const parsed = JSON.parse(body);
557
- if (isObject(parsed)) {
558
- if (typeof parsed.error === "string") message = parsed.error;
559
- if (typeof parsed.code === "string") code = parsed.code;
560
- }
561
- } catch {
562
- if (contentType?.includes("text/html")) message = `Server returned ${status} with an HTML response. Check the eve route and development server configuration.`;
563
- }
555
+ if (typeof parsed?.error === "string") message = parsed.error;
556
+ else if (parsed === void 0 && contentType?.includes("text/html")) message = `Server returned ${status} with an HTML response. Check the eve route and development server configuration.`;
564
557
  super(message);
565
558
  this.name = "ClientError";
566
- this.code = code;
559
+ this.code = typeof parsed?.code === "string" ? parsed.code : void 0;
567
560
  this.status = status;
568
561
  this.body = body;
569
562
  this.headers = normalizedHeaders;
570
563
  }
571
564
  };
565
+ var ClientSessionStrandedError = class extends ClientError {
566
+ eveVersion;
567
+ constructor(status, body, headers, details) {
568
+ super(status, body, headers);
569
+ this.name = "ClientSessionStrandedError";
570
+ this.eveVersion = details.eveVersion;
571
+ }
572
+ };
573
+ function createClientError(status, body, headers) {
574
+ const parsed = status === 409 ? parseJsonObject$1(body) : void 0;
575
+ if (parsed?.code !== "session_stranded") return new ClientError(status, body, headers);
576
+ return new ClientSessionStrandedError(status, body, headers, { eveVersion: typeof parsed.eveVersion === "string" ? parsed.eveVersion : void 0 });
577
+ }
578
+ function parseJsonObject$1(body) {
579
+ try {
580
+ const parsed = JSON.parse(body);
581
+ return isObject(parsed) ? parsed : void 0;
582
+ } catch {
583
+ return;
584
+ }
585
+ }
572
586
 
573
587
  //#endregion
574
588
  //#region src/shared/errors.ts
@@ -766,7 +780,7 @@ function settleCall(call, status, error) {
766
780
  }
767
781
  function actionName(action) {
768
782
  switch (action.kind) {
769
- case "load-skill": return "load_skill";
783
+ case "load-skill": return action.name;
770
784
  case "subagent-call":
771
785
  case "remote-agent-call": return action.name;
772
786
  case "tool-call":
@@ -775,7 +789,7 @@ function actionName(action) {
775
789
  }
776
790
  function resultName(result) {
777
791
  switch (result.kind) {
778
- case "load-skill-result": return "load_skill";
792
+ case "load-skill-result": return result.name;
779
793
  case "subagent-result": return result.subagentName;
780
794
  default: return result.toolName;
781
795
  }
@@ -1200,6 +1214,9 @@ function isFinalMessageCompleted(event) {
1200
1214
  //#endregion
1201
1215
  //#region src/protocol/message-version.ts
1202
1216
  function normalizeMessageStreamEvent(version, event) {
1217
+ return nameSkillLoads(normalizeAppendEvent(version, event));
1218
+ }
1219
+ function normalizeAppendEvent(version, event) {
1203
1220
  switch (version) {
1204
1221
  case "21":
1205
1222
  case "22":
@@ -1255,6 +1272,26 @@ function normalizeLegacyMessageStreamEvent(version, event) {
1255
1272
  }
1256
1273
  return event;
1257
1274
  }
1275
+ function nameSkillLoads(event) {
1276
+ if (event.type !== "actions.requested" || !event.data.actions.some(isUnnamedSkillLoad)) return event;
1277
+ return {
1278
+ ...event,
1279
+ data: {
1280
+ ...event.data,
1281
+ actions: event.data.actions.map((action) => isUnnamedSkillLoad(action) ? {
1282
+ ...action,
1283
+ name: releasedSkillName(action)
1284
+ } : action)
1285
+ }
1286
+ };
1287
+ }
1288
+ function isUnnamedSkillLoad(action) {
1289
+ return action.kind === "load-skill" && typeof Reflect.get(action, "name") !== "string";
1290
+ }
1291
+ function releasedSkillName(action) {
1292
+ const skill = action.input.skill;
1293
+ return typeof skill === "string" ? skill : "load_skill";
1294
+ }
1258
1295
  function validateDeltaMessageStreamEvent(version, event) {
1259
1296
  if (event.type === "message.appended") {
1260
1297
  assertAppendDelta(event.data.messageDelta, "message", version);
@@ -1560,6 +1597,7 @@ async function* followStreamIterable(input) {
1560
1597
  caughtUp = true;
1561
1598
  input.onCaughtUp?.();
1562
1599
  }
1600
+ if (event.type === "session.failed" || event.type === "session.completed") return;
1563
1601
  if (input.follow === false && tailIndex !== void 0 && startIndex > tailIndex) return;
1564
1602
  }
1565
1603
  } catch (error) {
@@ -1589,6 +1627,7 @@ async function openStreamBody(input) {
1589
1627
  if (controlVersion !== void 0) searchParams[EVE_STREAM_CONTROL_VERSION_QUERY] = controlVersion;
1590
1628
  if (input.startIndex !== 0) searchParams.startIndex = String(input.startIndex);
1591
1629
  if (input.requestTailIndex === true) searchParams.includeTailIndex = "1";
1630
+ if (input.follow === false) searchParams.follow = "false";
1592
1631
  for (let attempt = 0; attempt < openRetryPolicy.maxAttempts; attempt += 1) {
1593
1632
  input.signal?.throwIfAborted();
1594
1633
  const url = createClientUrl(input.host, input.path, Object.keys(searchParams).length > 0 ? searchParams : void 0);
@@ -1629,7 +1668,8 @@ async function openStreamBody(input) {
1629
1668
  lastStatus = response.status;
1630
1669
  lastBody = await response.text();
1631
1670
  lastHeaders = response.headers;
1632
- if (!retryPolicy.retryableErrorStatuses.has(response.status)) throw new ClientError(response.status, lastBody, response.headers);
1671
+ const error = createClientError(response.status, lastBody, response.headers);
1672
+ if (error instanceof ClientSessionStrandedError || !retryPolicy.retryableErrorStatuses.has(response.status)) throw error;
1633
1673
  if (attempt < openRetryPolicy.maxAttempts - 1) {
1634
1674
  await sleep(retryDelayMs, input.signal);
1635
1675
  retryDelayMs = Math.min(retryDelayMs * 2, openRetryPolicy.maxDelayMs);
@@ -1886,7 +1926,7 @@ async function postJson(input) {
1886
1926
  signal: input.signal
1887
1927
  }, input.context.redirect));
1888
1928
  const text = await response.text();
1889
- if (!response.ok) throw new ClientError(response.status, text, response.headers);
1929
+ if (!response.ok) throw createClientError(response.status, text, response.headers);
1890
1930
  try {
1891
1931
  return {
1892
1932
  payload: JSON.parse(text),
@@ -2480,7 +2520,7 @@ async function postTurn(context, path, input, requireMessage, stubs) {
2480
2520
  });
2481
2521
  if (!response.ok) {
2482
2522
  const responseBody = await response.text();
2483
- throw new ClientError(response.status, responseBody, response.headers);
2523
+ throw createClientError(response.status, responseBody, response.headers);
2484
2524
  }
2485
2525
  return response;
2486
2526
  }
@@ -3068,11 +3108,15 @@ function formatAuthorizationDisplayName(name) {
3068
3108
  return `${name.charAt(0).toUpperCase()}${name.slice(1)}`;
3069
3109
  }
3070
3110
 
3111
+ //#endregion
3112
+ //#region src/protocol/catalog-tools.ts
3113
+ const SKILL_TOOL_NAME = "eve__skill";
3114
+
3071
3115
  //#endregion
3072
3116
  //#region src/shared/action-request-name.ts
3073
3117
  function actionRequestName(action) {
3074
3118
  switch (action.kind) {
3075
- case "load-skill": return "load_skill";
3119
+ case "load-skill": return action.name;
3076
3120
  case "subagent-call": return action.subagentName;
3077
3121
  case "remote-agent-call": return action.remoteAgentName;
3078
3122
  case "tool-call":
@@ -3080,6 +3124,23 @@ function actionRequestName(action) {
3080
3124
  }
3081
3125
  }
3082
3126
 
3127
+ //#endregion
3128
+ //#region src/shared/display-name.ts
3129
+ function displayName(identifier) {
3130
+ const words = lastSegment(identifier).replace(/([a-z0-9])([A-Z])/gu, "$1 $2").replace(/([A-Z]+)([A-Z][a-z])/gu, "$1 $2").split(SEPARATORS).filter((word) => word !== "").map((word) => word.length > 1 && word === word.toUpperCase() ? word : word.toLowerCase());
3131
+ return words.length === 0 ? identifier : words.join(" ");
3132
+ }
3133
+ function displayTitle(identifier) {
3134
+ return capitalize(displayName(identifier));
3135
+ }
3136
+ const SEPARATORS = /[\s_-]+/u;
3137
+ function lastSegment(identifier) {
3138
+ return identifier.split("__").findLast((segment) => segment !== "") ?? identifier;
3139
+ }
3140
+ function capitalize(text) {
3141
+ return text.charAt(0).toUpperCase() + text.slice(1);
3142
+ }
3143
+
3083
3144
  //#endregion
3084
3145
  //#region src/client/message-action-parts.ts
3085
3146
  function toMessageInputRequest(request) {
@@ -3096,6 +3157,7 @@ function createToolMetadata(descriptor, extra) {
3096
3157
  return { eve: {
3097
3158
  inputRequest: extra?.inputRequest,
3098
3159
  kind: descriptor.kind,
3160
+ label: extra?.label,
3099
3161
  name: descriptor.name
3100
3162
  } };
3101
3163
  }
@@ -3108,6 +3170,7 @@ function mergeToolMetadata(current, next) {
3108
3170
  inputRequest: next.eve?.inputRequest ?? current?.eve?.inputRequest,
3109
3171
  inputResponse: next.eve?.inputResponse ?? current?.eve?.inputResponse,
3110
3172
  kind,
3173
+ label: next.eve?.label ?? current?.eve?.label,
3111
3174
  name
3112
3175
  } };
3113
3176
  }
@@ -3117,7 +3180,7 @@ function normalizeActionRequest(action) {
3117
3180
  case "load-skill": return {
3118
3181
  kind: "load-skill",
3119
3182
  name,
3120
- toolName: "eve:load-skill"
3183
+ toolName: SKILL_TOOL_NAME
3121
3184
  };
3122
3185
  case "tool-call":
3123
3186
  case "workflow-tool-call": return {
@@ -3137,8 +3200,8 @@ function normalizeActionResult(result) {
3137
3200
  switch (result.kind) {
3138
3201
  case "load-skill-result": return {
3139
3202
  kind: "load-skill",
3140
- name: result.name ?? "load_skill",
3141
- toolName: "eve:load-skill"
3203
+ name: result.name,
3204
+ toolName: SKILL_TOOL_NAME
3142
3205
  };
3143
3206
  case "tool-result": return {
3144
3207
  kind: "tool-call",
@@ -3152,6 +3215,9 @@ function normalizeActionResult(result) {
3152
3215
  };
3153
3216
  }
3154
3217
  }
3218
+ function settledLabel(current, label, descriptor) {
3219
+ return label ?? current?.eve?.label ?? displayTitle(descriptor.name);
3220
+ }
3155
3221
  function stringifyUnknown(value) {
3156
3222
  if (typeof value === "string") return value;
3157
3223
  try {
@@ -3248,6 +3314,12 @@ function transition(message, input) {
3248
3314
  }
3249
3315
  const messageRun = { transition };
3250
3316
 
3317
+ //#endregion
3318
+ //#region src/shared/action-label.ts
3319
+ function actionLabel(action, presentation) {
3320
+ return presentation?.[action.callId]?.label ?? displayTitle(actionRequestName(action));
3321
+ }
3322
+
3251
3323
  //#endregion
3252
3324
  //#region src/client/tool-part-state.ts
3253
3325
  function toolPartState(data, part) {
@@ -3445,7 +3517,7 @@ function reduceContent(data, event) {
3445
3517
  state: "input-available",
3446
3518
  stepIndex: event.data.stepIndex,
3447
3519
  toolCallId: action.callId,
3448
- toolMetadata: createToolMetadata(descriptor),
3520
+ toolMetadata: createToolMetadata(descriptor, { label: actionLabel(action, event.data.presentation) }),
3449
3521
  toolName: descriptor.toolName,
3450
3522
  type: "dynamic-tool"
3451
3523
  }));
@@ -3465,7 +3537,10 @@ function reduceContent(data, event) {
3465
3537
  state: "approval-requested",
3466
3538
  stepIndex: existing?.stepIndex ?? event.data.stepIndex,
3467
3539
  toolCallId: request.action.callId,
3468
- toolMetadata: createToolMetadata(descriptor, { inputRequest: toMessageInputRequest(request) }),
3540
+ toolMetadata: createToolMetadata(descriptor, {
3541
+ inputRequest: toMessageInputRequest(request),
3542
+ label: existing?.toolMetadata?.eve?.label ?? actionLabel(request.action, void 0)
3543
+ }),
3469
3544
  toolName: descriptor.toolName,
3470
3545
  type: "dynamic-tool"
3471
3546
  }));
@@ -3486,7 +3561,7 @@ function reduceContent(data, event) {
3486
3561
  input: existing?.input,
3487
3562
  stepIndex: existing?.stepIndex ?? event.data.stepIndex,
3488
3563
  toolCallId: event.data.result.callId,
3489
- toolMetadata: mergeToolMetadata(existing?.toolMetadata, createToolMetadata(descriptor)),
3564
+ toolMetadata: mergeToolMetadata(existing?.toolMetadata, createToolMetadata(descriptor, { label: settledLabel(existing?.toolMetadata, event.data.presentation?.[event.data.result.callId]?.label, descriptor) })),
3490
3565
  toolName: existing?.toolName ?? descriptor.toolName,
3491
3566
  type: "dynamic-tool"
3492
3567
  };
@@ -3515,7 +3590,7 @@ function reduceContent(data, event) {
3515
3590
  state: "output-available",
3516
3591
  stepIndex: existing?.stepIndex ?? event.data.stepIndex,
3517
3592
  toolCallId: event.data.result.callId,
3518
- toolMetadata: mergeToolMetadata(existing?.toolMetadata, createToolMetadata(descriptor)),
3593
+ toolMetadata: mergeToolMetadata(existing?.toolMetadata, createToolMetadata(descriptor, { label: settledLabel(existing?.toolMetadata, event.data.presentation?.[event.data.result.callId]?.label, descriptor) })),
3519
3594
  toolName: existing?.toolName ?? descriptor.toolName,
3520
3595
  type: "dynamic-tool"
3521
3596
  });