eve 0.75.0 → 0.76.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (658) hide show
  1. package/CHANGELOG.md +54 -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/task-card.js +1 -1
  5. package/dist/src/channel/tool-eligibility.d.ts +1 -2
  6. package/dist/src/chunks/{use-eve-agent-B2Kne9z6.js → use-eve-agent-D2V9UhLt.js} +68 -10
  7. package/dist/src/chunks/{use-eve-agent-DK_T88EP.js → use-eve-agent-QmriPA-w.js} +68 -10
  8. package/dist/src/cli/commands/deploy.js +1 -1
  9. package/dist/src/cli/commands/link.d.ts +2 -1
  10. package/dist/src/cli/commands/link.js +1 -1
  11. package/dist/src/cli/commands/registry.js +1 -1
  12. package/dist/src/cli/commands/vercel-non-interactive.d.ts +6 -4
  13. package/dist/src/cli/commands/vercel-non-interactive.js +1 -1
  14. package/dist/src/cli/dev/environment.d.ts +0 -6
  15. package/dist/src/cli/dev/environment.js +1 -1
  16. package/dist/src/cli/dev/tui/conversation-view.js +1 -1
  17. package/dist/src/cli/dev/tui/runner.js +1 -1
  18. package/dist/src/cli/dev/tui/tool-presentation.js +1 -1
  19. package/dist/src/cli/dev/tui/transcript.js +1 -1
  20. package/dist/src/client/message-action-parts.d.ts +3 -0
  21. package/dist/src/client/message-action-parts.js +1 -1
  22. package/dist/src/client/message-reducer-types.d.ts +6 -1
  23. package/dist/src/client/message-reducer.js +1 -1
  24. package/dist/src/compiled/.vendor-stamp.json +9 -8
  25. package/dist/src/compiled/@eve/catalog/index.js +1 -1
  26. package/dist/src/compiled/@vercel/queue/index.d.ts +1066 -0
  27. package/dist/src/compiled/@vercel/queue/index.js +47 -0
  28. package/dist/src/compiled/@workflow/core/global.d.ts +10 -0
  29. package/dist/src/compiled/@workflow/core/index.js +1 -1
  30. package/dist/src/compiled/@workflow/core/private.d.ts +11 -0
  31. package/dist/src/compiled/@workflow/core/private.js +1 -1
  32. package/dist/src/compiled/@workflow/core/runtime/constants.d.ts +36 -8
  33. package/dist/src/compiled/@workflow/core/runtime/helpers.js +1 -1
  34. package/dist/src/compiled/@workflow/core/runtime/lifecycle-hooks.d.ts +10 -6
  35. package/dist/src/compiled/@workflow/core/runtime/out-of-band-observation.d.ts +159 -0
  36. package/dist/src/compiled/@workflow/core/runtime/vm-mode.d.ts +28 -4
  37. package/dist/src/compiled/@workflow/core/runtime.js +4 -4
  38. package/dist/src/compiled/@workflow/core/serialization.js +1 -1
  39. package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
  40. package/dist/src/compiled/@workflow/core/workflow.js +1 -1
  41. package/dist/src/compiled/@workflow/world-local/index.js +5 -5
  42. package/dist/src/compiled/@workflow/world-vercel/index.js +4 -4
  43. package/dist/src/compiled/_chunks/workflow/{attribute-changes-CSqvJx6j.js → attribute-changes-BW-kbMMn.js} +1 -1
  44. package/dist/src/compiled/_chunks/workflow/dist-CyBgVS7g.js +1 -0
  45. package/dist/src/compiled/_chunks/workflow/{helpers-BXCuoPUb.js → helpers-DlLD3ov_.js} +1 -1
  46. package/dist/src/compiled/_chunks/workflow/private-tQUuwBoQ.js +1 -0
  47. package/dist/src/compiled/_chunks/workflow/{resume-hook-CvENCrxc.js → resume-hook-DMsV_b4n.js} +1 -1
  48. package/dist/src/compiled/_chunks/workflow/{run-8pLWuR2U.js → run-DzdAqdb1.js} +1 -1
  49. package/dist/src/compiled/_chunks/workflow/{serialization-vDozzDhh.js → serialization-DPdYS_w2.js} +2 -2
  50. package/dist/src/compiled/_chunks/workflow/sleep-BY6leHh8.js +1 -0
  51. package/dist/src/compiled/_chunks/workflow/{token-BKeK6DmC.js → token-D5ugC3PI.js} +1 -1
  52. package/dist/src/compiled/_chunks/workflow/{token-util-CddTZ_ef.js → token-util-Bla5Z0G9.js} +1 -1
  53. package/dist/src/compiled/_chunks/workflow/undici-D-ILjOKD.js +95 -0
  54. package/dist/src/compiled/_chunks/workflow/{wait-until-A344L2AG.js → wait-until-xbRRDuUf.js} +1 -1
  55. package/dist/src/compiler/connection-ownership.d.ts +6 -0
  56. package/dist/src/compiler/connection-ownership.js +1 -0
  57. package/dist/src/compiler/default-tool-policy.d.ts +0 -3
  58. package/dist/src/compiler/default-tool-policy.js +1 -1
  59. package/dist/src/compiler/extension-compatibility.d.ts +21 -20
  60. package/dist/src/compiler/extension-compatibility.js +1 -1
  61. package/dist/src/compiler/manifest.d.ts +9 -6
  62. package/dist/src/compiler/manifest.js +1 -1
  63. package/dist/src/compiler/normalize-connection.js +1 -1
  64. package/dist/src/compiler/normalize-manifest.js +1 -1
  65. package/dist/src/compiler/normalize-skill.d.ts +5 -0
  66. package/dist/src/compiler/normalize-skill.js +1 -1
  67. package/dist/src/compiler/normalize-subagent.d.ts +2 -1
  68. package/dist/src/compiler/normalize-subagent.js +1 -1
  69. package/dist/src/compiler/normalize-tool.js +1 -1
  70. package/dist/src/compiler/remote-agent-node.d.ts +2 -1
  71. package/dist/src/compiler/remote-agent-node.js +1 -1
  72. package/dist/src/connections/ownership.d.ts +18 -0
  73. package/dist/src/connections/ownership.js +1 -0
  74. package/dist/src/context/build-dynamic-tools.d.ts +3 -9
  75. package/dist/src/context/build-dynamic-tools.js +1 -1
  76. package/dist/src/context/dynamic-connection-lifecycle.js +1 -1
  77. package/dist/src/context/dynamic-skill-lifecycle.d.ts +2 -11
  78. package/dist/src/context/dynamic-skill-lifecycle.js +1 -1
  79. package/dist/src/context/dynamic-subagent-lifecycle.js +1 -1
  80. package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
  81. package/dist/src/context/dynamic-tool-metadata.d.ts +1 -0
  82. package/dist/src/context/keys.d.ts +5 -4
  83. package/dist/src/context/memory-tools.js +1 -1
  84. package/dist/src/context/schedule-collection-tools.js +1 -1
  85. package/dist/src/discover/grammar.d.ts +11 -0
  86. package/dist/src/discover/grammar.js +1 -1
  87. package/dist/src/discover/manifest.d.ts +1 -0
  88. package/dist/src/discover/manifest.js +1 -1
  89. package/dist/src/discover/skills.d.ts +1 -0
  90. package/dist/src/discover/skills.js +1 -1
  91. package/dist/src/dynamic/definition.d.ts +7 -5
  92. package/dist/src/evals/assertions/collector.d.ts +4 -0
  93. package/dist/src/evals/assertions/collector.js +1 -1
  94. package/dist/src/evals/assertions/run.d.ts +2 -3
  95. package/dist/src/evals/assertions/run.js +2 -2
  96. package/dist/src/evals/assertions/scoped.js +1 -1
  97. package/dist/src/evals/index.d.ts +1 -1
  98. package/dist/src/evals/match.d.ts +9 -6
  99. package/dist/src/evals/reported-tool-name.d.ts +9 -0
  100. package/dist/src/evals/reported-tool-name.js +1 -0
  101. package/dist/src/evals/runner/derive-run-facts.d.ts +3 -3
  102. package/dist/src/evals/runner/derive-run-facts.js +1 -1
  103. package/dist/src/evals/runner/execute-task.js +1 -1
  104. package/dist/src/evals/runner/reporters/braintrust.js +1 -1
  105. package/dist/src/evals/runner/reporters/datadog-runtime-trace-links.d.ts +11 -0
  106. package/dist/src/evals/runner/reporters/datadog-runtime-trace-links.js +1 -0
  107. package/dist/src/evals/runner/reporters/datadog.js +2 -2
  108. package/dist/src/evals/session.js +2 -2
  109. package/dist/src/evals/target.d.ts +7 -0
  110. package/dist/src/evals/target.js +1 -1
  111. package/dist/src/evals/types.d.ts +17 -1
  112. package/dist/src/eve-channel/request.js +1 -1
  113. package/dist/src/execution/agent-sessions/remote.js +1 -1
  114. package/dist/src/execution/catalog/connection-auth.d.ts +41 -0
  115. package/dist/src/execution/catalog/connection-auth.js +1 -0
  116. package/dist/src/execution/catalog/connection-entry.d.ts +16 -0
  117. package/dist/src/execution/catalog/connection-entry.js +1 -0
  118. package/dist/src/execution/catalog/listing.d.ts +9 -0
  119. package/dist/src/execution/catalog/listing.js +3 -0
  120. package/dist/src/execution/catalog/rank.d.ts +44 -0
  121. package/dist/src/execution/catalog/rank.js +1 -0
  122. package/dist/src/execution/catalog/search.d.ts +28 -0
  123. package/dist/src/execution/catalog/search.js +1 -0
  124. package/dist/src/execution/catalog/signatures.d.ts +11 -0
  125. package/dist/src/execution/catalog/signatures.js +1 -0
  126. package/dist/src/execution/catalog/skills.d.ts +24 -0
  127. package/dist/src/execution/catalog/skills.js +1 -0
  128. package/dist/src/execution/catalog/step-catalog.d.ts +51 -0
  129. package/dist/src/execution/catalog/step-catalog.js +1 -0
  130. package/dist/src/execution/coordination-dispatch-shared.js +1 -1
  131. package/dist/src/execution/dynamic-connections.js +1 -1
  132. package/dist/src/execution/dynamic-workflow/tool.js +1 -1
  133. package/dist/src/execution/invoke-tool.js +1 -1
  134. package/dist/src/execution/ndjson-stream.d.ts +6 -6
  135. package/dist/src/execution/ndjson-stream.js +3 -3
  136. package/dist/src/execution/node-step.js +1 -1
  137. package/dist/src/execution/session/active-turn.d.ts +1 -1
  138. package/dist/src/execution/session/pending-turn-state.js +1 -1
  139. package/dist/src/execution/session/turn-step.js +1 -1
  140. package/dist/src/execution/session/turn.d.ts +5 -5
  141. package/dist/src/execution/session/turn.js +1 -1
  142. package/dist/src/execution/session.js +1 -1
  143. package/dist/src/execution/skills/instructions.d.ts +20 -10
  144. package/dist/src/execution/skills/instructions.js +2 -2
  145. package/dist/src/execution/tasks/calls.d.ts +6 -5
  146. package/dist/src/execution/tasks/calls.js +1 -1
  147. package/dist/src/execution/tasks/model-step.d.ts +10 -10
  148. package/dist/src/execution/tasks/model-step.js +1 -1
  149. package/dist/src/execution/tasks/render.d.ts +3 -3
  150. package/dist/src/execution/tasks/render.js +3 -3
  151. package/dist/src/execution/tasks/session.d.ts +2 -1
  152. package/dist/src/execution/tasks/table.d.ts +1 -1
  153. package/dist/src/execution/tasks/tool-entry-point.d.ts +1 -1
  154. package/dist/src/execution/tool-auth.js +1 -1
  155. package/dist/src/execution/tools/agent-router-workflow.js +1 -1
  156. package/dist/src/execution/tools/workflow/harness-definition.js +1 -1
  157. package/dist/src/extensions/code/extension/extension.d.ts +4 -18
  158. package/dist/src/extensions/code/extension/instructions/github.d.ts +3 -0
  159. package/dist/src/extensions/code/extension/instructions/github.js +1 -0
  160. package/dist/src/extensions/code/extension/instructions.md +1 -13
  161. package/dist/src/extensions/code/extension/lib/diagnostics.d.ts +4 -2
  162. package/dist/src/extensions/code/extension/lib/diagnostics.js +3 -3
  163. package/dist/src/extensions/code/extension/lib/github-compat.d.ts +28 -0
  164. package/dist/src/extensions/code/extension/lib/github-compat.js +1 -0
  165. package/dist/src/extensions/code/extension/lib/grep-search.d.ts +3 -13
  166. package/dist/src/extensions/code/extension/lib/grep-search.js +2 -2
  167. package/dist/src/extensions/code/extension/lib/patch.d.ts +8 -2
  168. package/dist/src/extensions/code/extension/lib/patch.js +4 -4
  169. package/dist/src/extensions/code/extension/lib/repository-root.d.ts +3 -4
  170. package/dist/src/extensions/code/extension/lib/repository-root.js +1 -1
  171. package/dist/src/extensions/code/extension/lib/sandbox.d.ts +2 -1
  172. package/dist/src/extensions/code/extension/lib/sandbox.js +1 -1
  173. package/dist/src/extensions/code/extension/lib/tooling.d.ts +4 -4
  174. package/dist/src/extensions/code/extension/lib/tooling.js +7 -7
  175. package/dist/src/extensions/code/extension/lib/workspace-root.d.ts +31 -0
  176. package/dist/src/extensions/code/extension/lib/workspace-root.js +1 -0
  177. package/dist/src/extensions/code/extension/skills/pr.d.ts +6 -0
  178. package/dist/src/extensions/code/extension/skills/pr.js +1 -0
  179. package/dist/src/extensions/code/extension/tools/apply_patch.d.ts +2 -2
  180. package/dist/src/extensions/code/extension/tools/apply_patch.js +2 -2
  181. package/dist/src/extensions/code/extension/tools/gh.d.ts +4 -3
  182. package/dist/src/extensions/code/extension/tools/gh.js +1 -1
  183. package/dist/src/extensions/code/extension/tools/grep.js +1 -1
  184. package/dist/src/extensions/code/tools.d.ts +2 -1
  185. package/dist/src/extensions/code/tools.js +1 -1
  186. package/dist/src/extensions/git/extension/extension.d.ts +12 -0
  187. package/dist/src/extensions/git/extension/extension.js +1 -0
  188. package/dist/src/extensions/git/extension/instructions/github.d.ts +2 -0
  189. package/dist/src/extensions/git/extension/instructions/github.js +1 -0
  190. package/dist/src/extensions/git/extension/lib/gh-tool.d.ts +29 -0
  191. package/dist/src/extensions/git/extension/lib/gh-tool.js +1 -0
  192. package/dist/src/extensions/git/extension/lib/github-guidance.d.ts +3 -0
  193. package/dist/src/extensions/git/extension/lib/github-guidance.js +49 -0
  194. package/dist/src/extensions/{code → git}/extension/lib/github-shell.d.ts +1 -1
  195. package/dist/src/extensions/git/extension/lib/github-shell.js +1 -0
  196. package/dist/src/extensions/git/extension/lib/repository-root.d.ts +5 -0
  197. package/dist/src/extensions/git/extension/lib/repository-root.js +1 -0
  198. package/dist/src/extensions/git/extension/lib/sandbox.d.ts +6 -0
  199. package/dist/src/extensions/git/extension/lib/sandbox.js +1 -0
  200. package/dist/src/extensions/git/extension/lib/shell.d.ts +1 -0
  201. package/dist/src/extensions/git/extension/lib/shell.js +1 -0
  202. package/dist/src/extensions/git/extension/lib/tooling.d.ts +4 -0
  203. package/dist/src/extensions/git/extension/lib/tooling.js +1 -0
  204. package/dist/src/extensions/git/extension/skills/pr.d.ts +5 -0
  205. package/dist/src/extensions/git/extension/skills/pr.js +1 -0
  206. package/dist/src/extensions/git/extension/tools/gh.d.ts +28 -0
  207. package/dist/src/extensions/git/extension/tools/gh.js +1 -0
  208. package/dist/src/extensions/git/tools.d.ts +27 -0
  209. package/dist/src/extensions/git/tools.js +1 -0
  210. package/dist/src/framework/sources/registry.js +1 -1
  211. package/dist/src/harness/action-presentation.d.ts +2 -2
  212. package/dist/src/harness/action-result-helpers.d.ts +10 -2
  213. package/dist/src/harness/action-result-helpers.js +1 -1
  214. package/dist/src/harness/announcements.d.ts +2 -8
  215. package/dist/src/harness/announcements.js +1 -1
  216. package/dist/src/harness/compaction/engine.d.ts +8 -19
  217. package/dist/src/harness/compaction/engine.js +1 -1
  218. package/dist/src/harness/compaction/step.d.ts +7 -1
  219. package/dist/src/harness/compaction/step.js +1 -1
  220. package/dist/src/harness/coordination.d.ts +11 -11
  221. package/dist/src/harness/coordination.js +1 -1
  222. package/dist/src/harness/current-messages.d.ts +1 -5
  223. package/dist/src/harness/current-messages.js +1 -1
  224. package/dist/src/harness/emission.d.ts +2 -2
  225. package/dist/src/harness/emission.js +1 -1
  226. package/dist/src/harness/execute-call.d.ts +48 -0
  227. package/dist/src/harness/execute-call.js +1 -0
  228. package/dist/src/harness/execute-tool.d.ts +3 -1
  229. package/dist/src/harness/final-output.d.ts +2 -6
  230. package/dist/src/harness/final-output.js +1 -1
  231. package/dist/src/harness/hitl/approvals.d.ts +5 -0
  232. package/dist/src/harness/hitl/approvals.js +1 -1
  233. package/dist/src/harness/hitl/approved-calls.d.ts +3 -2
  234. package/dist/src/harness/hitl/approved-calls.js +1 -1
  235. package/dist/src/harness/hitl/candidates.d.ts +13 -2
  236. package/dist/src/harness/hitl/candidates.js +1 -1
  237. package/dist/src/harness/hitl/coordinator.d.ts +3 -3
  238. package/dist/src/harness/hitl/coordinator.js +1 -1
  239. package/dist/src/harness/hitl/index.d.ts +6 -4
  240. package/dist/src/harness/hitl/index.js +1 -1
  241. package/dist/src/harness/hitl/intake.d.ts +3 -3
  242. package/dist/src/harness/hitl/intake.js +1 -1
  243. package/dist/src/harness/input-extraction.d.ts +4 -1
  244. package/dist/src/harness/input-extraction.js +1 -1
  245. package/dist/src/harness/input-request-resolution.d.ts +15 -0
  246. package/dist/src/harness/input-request-resolution.js +1 -1
  247. package/dist/src/harness/model-call/call.d.ts +5 -8
  248. package/dist/src/harness/model-call/call.js +1 -1
  249. package/dist/src/harness/model-call/errors.js +1 -1
  250. package/dist/src/harness/model-call/model.d.ts +4 -5
  251. package/dist/src/harness/model-call/model.js +1 -1
  252. package/dist/src/harness/model-call/request.d.ts +4 -4
  253. package/dist/src/harness/model-call/request.js +1 -1
  254. package/dist/src/harness/model-call/response.d.ts +2 -1
  255. package/dist/src/harness/model-call/response.js +1 -1
  256. package/dist/src/harness/model-call/retry.d.ts +1 -1
  257. package/dist/src/harness/model-call/retry.js +1 -1
  258. package/dist/src/harness/model-call/run.d.ts +5 -3
  259. package/dist/src/harness/model-call/run.js +1 -1
  260. package/dist/src/harness/model-call/tools.d.ts +14 -24
  261. package/dist/src/harness/model-call/tools.js +1 -1
  262. package/dist/src/harness/model-call/usage.js +1 -1
  263. package/dist/src/harness/model-profile.d.ts +28 -0
  264. package/dist/src/harness/model-profile.js +1 -0
  265. package/dist/src/harness/prompt-cache.d.ts +5 -53
  266. package/dist/src/harness/prompt-cache.js +1 -1
  267. package/dist/src/harness/provider-safety.d.ts +3 -5
  268. package/dist/src/harness/provider-safety.js +1 -1
  269. package/dist/src/harness/provider-tools.d.ts +7 -14
  270. package/dist/src/harness/provider-tools.js +1 -1
  271. package/dist/src/harness/session-machine/commit.js +1 -1
  272. package/dist/src/harness/session-machine/transitions.d.ts +5 -2
  273. package/dist/src/harness/session-machine/transitions.js +1 -1
  274. package/dist/src/harness/step/after-model.js +1 -1
  275. package/dist/src/harness/step-hooks.d.ts +6 -9
  276. package/dist/src/harness/step-hooks.js +1 -1
  277. package/dist/src/harness/tool-call-input-errors.d.ts +2 -2
  278. package/dist/src/harness/tool-call-io.d.ts +3 -0
  279. package/dist/src/harness/tool-call-io.js +1 -1
  280. package/dist/src/harness/tools.d.ts +24 -22
  281. package/dist/src/harness/tools.js +1 -1
  282. package/dist/src/harness/turn-tag-state.d.ts +12 -0
  283. package/dist/src/harness/turn-tag-state.js +1 -1
  284. package/dist/src/harness/types.d.ts +14 -0
  285. package/dist/src/instrumentation/lifecycle.d.ts +0 -1
  286. package/dist/src/instrumentation/native-events.js +1 -1
  287. package/dist/src/instrumentation/runtime.d.ts +2 -1
  288. package/dist/src/internal/application/package.js +1 -1
  289. package/dist/src/internal/authored-definition/core.js +1 -1
  290. package/dist/src/internal/authored-definition/schedule-collection.js +1 -1
  291. package/dist/src/internal/authored-definition/schema-backed.d.ts +2 -2
  292. package/dist/src/internal/authored-definition/schema-backed.js +1 -1
  293. package/dist/src/internal/authored-module.d.ts +2 -1
  294. package/dist/src/internal/authored-module.js +1 -1
  295. package/dist/src/internal/gateway.d.ts +0 -13
  296. package/dist/src/internal/gateway.js +1 -1
  297. package/dist/src/internal/helpers/markdown.js +1 -1
  298. package/dist/src/internal/mcp/skills.js +1 -1
  299. package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
  300. package/dist/src/internal/nitro/host/dev-host-fingerprint.js +1 -1
  301. package/dist/src/internal/nitro/host/local-schedules-runtime-plugin.d.ts +5 -0
  302. package/dist/src/internal/nitro/host/local-schedules-runtime-plugin.js +1 -0
  303. package/dist/src/internal/nitro/routes/schedule-collection-consumer.d.ts +6 -0
  304. package/dist/src/internal/nitro/routes/schedule-collection-consumer.js +1 -1
  305. package/dist/src/internal/schedules/consumer-route.d.ts +2 -0
  306. package/dist/src/internal/schedules/consumer-route.js +1 -1
  307. package/dist/src/internal/schedules/dev-environment.d.ts +2 -0
  308. package/dist/src/internal/schedules/dev-environment.js +1 -0
  309. package/dist/src/internal/vercel-agent-summary.d.ts +2 -2
  310. package/dist/src/internal/workflow/vercel-world-defaults.d.ts +1 -1
  311. package/dist/src/internal/workflow/vercel-world-defaults.js +1 -1
  312. package/dist/src/protocol/catalog-tools.d.ts +12 -0
  313. package/dist/src/protocol/catalog-tools.js +1 -0
  314. package/dist/src/protocol/message-version.js +1 -1
  315. package/dist/src/protocol/message.d.ts +1 -1
  316. package/dist/src/protocol/remote-agent-protocol.d.ts +2 -0
  317. package/dist/src/protocol/remote-agent-protocol.js +1 -1
  318. package/dist/src/protocol/reply-tool.d.ts +2 -0
  319. package/dist/src/protocol/reply-tool.js +1 -0
  320. package/dist/src/protocol/runtime-tools.d.ts +6 -0
  321. package/dist/src/protocol/runtime-tools.js +1 -0
  322. package/dist/src/protocol/session-projection.js +1 -1
  323. package/dist/src/protocol/task-tools.d.ts +4 -4
  324. package/dist/src/protocol/task-tools.js +1 -1
  325. package/dist/src/public/channels/chat-sdk/chatSdkChannel.js +1 -1
  326. package/dist/src/public/channels/linear/defaults.js +2 -2
  327. package/dist/src/public/channels/slack/action-status.d.ts +0 -9
  328. package/dist/src/public/channels/slack/action-status.js +1 -1
  329. package/dist/src/public/channels/slack/defaults.js +2 -2
  330. package/dist/src/public/channels/slack/task-card.d.ts +1 -1
  331. package/dist/src/public/definitions/connections/mcp.d.ts +4 -4
  332. package/dist/src/public/definitions/connections/openapi.d.ts +6 -7
  333. package/dist/src/public/definitions/remote-agent.d.ts +6 -3
  334. package/dist/src/public/definitions/workspace-agent.d.ts +6 -3
  335. package/dist/src/public/experimental/schedules/index.d.ts +1 -1
  336. package/dist/src/public/schedules/providers/in-memory.js +1 -1
  337. package/dist/src/public/schedules/providers/vercel.js +1 -1
  338. package/dist/src/public/schedules/subscription.d.ts +36 -16
  339. package/dist/src/public/tools/web-search.d.ts +1 -1
  340. package/dist/src/runtime/agent/bootstrap.d.ts +2 -1
  341. package/dist/src/runtime/agent/bootstrap.js +1 -1
  342. package/dist/src/runtime/agent/mock-model-adapter.js +2 -2
  343. package/dist/src/runtime/agent/mock-model-fixtures.js +2 -2
  344. package/dist/src/runtime/agent/mock-model-skill-selection.d.ts +2 -0
  345. package/dist/src/runtime/agent/mock-model-skill-selection.js +2 -2
  346. package/dist/src/runtime/agent/mock-structured-output.d.ts +1 -1
  347. package/dist/src/runtime/connections/mcp-client.js +1 -1
  348. package/dist/src/runtime/connections/registry.js +1 -1
  349. package/dist/src/runtime/connections/scoped-authorization.js +1 -1
  350. package/dist/src/runtime/connections/tool-result.d.ts +2 -2
  351. package/dist/src/runtime/resolve-agent-graph.js +1 -1
  352. package/dist/src/runtime/resolve-tool.js +1 -1
  353. package/dist/src/runtime/schedules/collection-client.d.ts +12 -3
  354. package/dist/src/runtime/schedules/collection-client.js +1 -1
  355. package/dist/src/runtime/subagents/dynamic-agent-config.d.ts +2 -2
  356. package/dist/src/runtime/subagents/dynamic-remote-agent-config.d.ts +2 -1
  357. package/dist/src/runtime/subagents/dynamic-remote-agent-config.js +1 -1
  358. package/dist/src/runtime/subagents/registry.d.ts +2 -1
  359. package/dist/src/runtime/subagents/registry.js +1 -1
  360. package/dist/src/runtime/tools/registry.d.ts +2 -0
  361. package/dist/src/runtime/tools/registry.js +1 -1
  362. package/dist/src/runtime/types.d.ts +3 -3
  363. package/dist/src/setup/connection-connector.js +1 -2
  364. package/dist/src/setup/index.d.ts +1 -1
  365. package/dist/src/setup/index.js +1 -1
  366. package/dist/src/setup/integrations/slack/setup.d.ts +23 -3
  367. package/dist/src/setup/integrations/slack/setup.js +1 -1
  368. package/dist/src/setup/primitives/process-output.d.ts +5 -0
  369. package/dist/src/setup/primitives/process-output.js +2 -1
  370. package/dist/src/setup/scaffold/create/project.js +1 -1
  371. package/dist/src/setup/scaffold/create/web-template.d.ts +3 -2
  372. package/dist/src/setup/scaffold/create/web-template.js +384 -412
  373. package/dist/src/setup/scaffold/update/update-slack-channel.d.ts +17 -0
  374. package/dist/src/setup/scaffold/update/update-slack-channel.js +1 -1
  375. package/dist/src/setup/slack-connect-create.d.ts +10 -2
  376. package/dist/src/setup/slack-connect-create.js +1 -1
  377. package/dist/src/setup/slack-connect-lifecycle.d.ts +92 -44
  378. package/dist/src/setup/slack-connect-lifecycle.js +1 -1
  379. package/dist/src/setup/slack-connect.d.ts +30 -11
  380. package/dist/src/setup/slack-connect.js +1 -1
  381. package/dist/src/setup/slack-setup-plan.d.ts +72 -0
  382. package/dist/src/setup/slack-setup-plan.js +1 -0
  383. package/dist/src/setup/slackbot.d.ts +75 -35
  384. package/dist/src/setup/slackbot.js +2 -1
  385. package/dist/src/setup/vercel-project.d.ts +1 -1
  386. package/dist/src/setup/vercel-project.js +0 -0
  387. package/dist/src/shared/action-label.d.ts +10 -0
  388. package/dist/src/shared/action-label.js +1 -0
  389. package/dist/src/shared/action-request-name.d.ts +3 -1
  390. package/dist/src/shared/action-request-name.js +1 -1
  391. package/dist/src/shared/action-types.d.ts +7 -8
  392. package/dist/src/shared/action-types.js +1 -1
  393. package/dist/src/shared/agent-definition.d.ts +11 -3
  394. package/dist/src/shared/development-env-files.d.ts +4 -0
  395. package/dist/src/shared/development-env-files.js +1 -0
  396. package/dist/src/shared/input.d.ts +0 -1
  397. package/dist/src/shared/map-with-concurrency.d.ts +2 -0
  398. package/dist/src/shared/map-with-concurrency.js +1 -0
  399. package/dist/src/shared/skill-definition.d.ts +6 -0
  400. package/dist/src/shared/skill-package.d.ts +1 -0
  401. package/dist/src/shared/skill-package.js +1 -1
  402. package/dist/src/shared/web-search.d.ts +15 -2
  403. package/dist/src/shared/web-search.js +1 -1
  404. package/dist/src/svelte/index.js +1 -1
  405. package/dist/src/svelte/use-eve-agent.js +1 -1
  406. package/dist/src/tool-stubs/execute.d.ts +0 -3
  407. package/dist/src/tool-stubs/execute.js +1 -1
  408. package/dist/src/tool-stubs/rules.js +1 -1
  409. package/dist/src/tool-stubs/validate-targets.js +1 -1
  410. package/dist/src/tools/behavior.d.ts +3 -6
  411. package/dist/src/tools/definition.d.ts +5 -0
  412. package/dist/src/tools/dynamic.d.ts +5 -2
  413. package/dist/src/tools/provided/ask-question-workflow.js +1 -1
  414. package/dist/src/tools/provided/sleep-workflow.js +1 -1
  415. package/dist/src/tools/provided/task-cancel.d.ts +1 -1
  416. package/dist/src/tools/provided/task-wait.d.ts +1 -1
  417. package/dist/src/tools/provided/web-search.d.ts +20 -7
  418. package/dist/src/tools/provided/web-search.js +1 -1
  419. package/dist/src/tools/schema.d.ts +5 -0
  420. package/dist/src/tools/schema.js +1 -1
  421. package/dist/src/{runtime/connections/tool-signature.d.ts → tools/signature.d.ts} +2 -2
  422. package/dist/src/tools/workflow-definition.d.ts +1 -1
  423. package/dist/src/tracing/agent-approval-instrumentation.js +1 -1
  424. package/dist/src/tracing/agent-otel-provider.js +2 -2
  425. package/dist/src/tracing/agent-otel-runtime-context.d.ts +1 -0
  426. package/dist/src/tracing/agent-otel-runtime-context.js +1 -1
  427. package/dist/src/tracing/agent-otel-turn-state.d.ts +6 -0
  428. package/dist/src/tracing/agent-otel-turn-state.js +1 -0
  429. package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
  430. package/dist/src/tracing/agent-trace-context-codec.js +1 -1
  431. package/dist/src/tracing/agent-trace-state.d.ts +4 -1
  432. package/dist/src/vue/index.js +1 -1
  433. package/dist/src/vue/use-eve-agent.js +1 -1
  434. package/docs/agent-config.md +8 -8
  435. package/docs/channels/chat-sdk.mdx +1 -1
  436. package/docs/channels/slack.mdx +32 -82
  437. package/docs/code-extension.mdx +28 -7
  438. package/docs/concepts/built-in-tools.md +43 -43
  439. package/docs/concepts/context-control.md +1 -1
  440. package/docs/concepts/execution-model-and-durability.mdx +1 -1
  441. package/docs/concepts/sessions-runs-and-streaming.md +4 -4
  442. package/docs/connections/mcp.mdx +5 -5
  443. package/docs/connections/openapi.mdx +1 -1
  444. package/docs/connections/overview.mdx +4 -2
  445. package/docs/evals/assertions.mdx +5 -3
  446. package/docs/evals/reporters.mdx +3 -1
  447. package/docs/evals/tool-stubs.mdx +3 -1
  448. package/docs/extensions.md +2 -0
  449. package/docs/guides/dev-tui.md +2 -2
  450. package/docs/guides/dynamic-capabilities.md +14 -4
  451. package/docs/guides/frontend/overview.mdx +1 -1
  452. package/docs/guides/remote-agents.md +10 -3
  453. package/docs/instructions.mdx +5 -5
  454. package/docs/reference/cli.md +2 -2
  455. package/docs/reference/typescript-api.md +3 -3
  456. package/docs/skills.mdx +19 -4
  457. package/docs/subagents/index.mdx +5 -3
  458. package/docs/tools/overview.mdx +22 -1
  459. package/docs/tools/tasks-upgrade.md +1 -1
  460. package/docs/tools/tasks.md +32 -32
  461. package/docs/tools/workflows.mdx +6 -6
  462. package/docs/tutorial/team-playbooks.mdx +2 -2
  463. package/package.json +27 -11
  464. package/dist/src/compiled/_chunks/workflow/dist-DmXynLVH.js +0 -1
  465. package/dist/src/compiled/_chunks/workflow/private-Dlf90Zvn.js +0 -1
  466. package/dist/src/compiled/_chunks/workflow/signal-exit-iIdjQcCK.js +0 -95
  467. package/dist/src/compiled/_chunks/workflow/sleep-BMqbraZM.js +0 -1
  468. package/dist/src/execution/connection-announcement.d.ts +0 -7
  469. package/dist/src/execution/connection-announcement.js +0 -4
  470. package/dist/src/execution/tools/connection-approval.d.ts +0 -25
  471. package/dist/src/execution/tools/connection-approval.js +0 -1
  472. package/dist/src/execution/tools/connection-search-rank.d.ts +0 -21
  473. package/dist/src/execution/tools/connection-search-rank.js +0 -1
  474. package/dist/src/execution/tools/connection-target.d.ts +0 -18
  475. package/dist/src/execution/tools/connection-target.js +0 -1
  476. package/dist/src/execution/tools/connection-tools.d.ts +0 -4
  477. package/dist/src/execution/tools/connection-tools.js +0 -2
  478. package/dist/src/execution/tools/load-skill.d.ts +0 -10
  479. package/dist/src/execution/tools/load-skill.js +0 -1
  480. package/dist/src/extensions/code/extension/lib/github-shell.js +0 -1
  481. package/dist/src/extensions/code/extension/skills/pr/SKILL.md +0 -53
  482. package/dist/src/extensions/code/extension/subagents/worker/tools/load_skill.d.ts +0 -2
  483. package/dist/src/extensions/code/extension/subagents/worker/tools/load_skill.js +0 -1
  484. package/dist/src/harness/advertised-tools.d.ts +0 -26
  485. package/dist/src/harness/advertised-tools.js +0 -1
  486. package/dist/src/harness/nested-actions.d.ts +0 -23
  487. package/dist/src/harness/nested-actions.js +0 -1
  488. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/cli-config.js +0 -1
  489. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/cred-storage.js +0 -1
  490. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/index.js +0 -1
  491. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/schema.js +0 -1
  492. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/schema.zod.js +0 -1
  493. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/types.js +0 -1
  494. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/envpath.js +0 -1
  495. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/errors.js +0 -2
  496. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/errutils.js +0 -1
  497. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/exec.js +0 -1
  498. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/fsutils.js +0 -1
  499. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/index.js +0 -1
  500. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/lookup.js +0 -1
  501. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/safety.js +0 -1
  502. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/auth-errors.js +0 -1
  503. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/exchange-vercel-oidc-token.js +0 -1
  504. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/get-context.js +0 -1
  505. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/get-vercel-oidc-token-sync.js +0 -1
  506. 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
  507. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/index.js +0 -1
  508. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/oauth.js +0 -1
  509. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/token-error.js +0 -1
  510. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/token-io.js +0 -1
  511. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/token-util.js +0 -2
  512. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/token.js +0 -1
  513. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/verify-vercel-oidc-token.js +0 -1
  514. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/version.js +0 -1
  515. 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
  516. package/dist/src/node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js +0 -1
  517. package/dist/src/node_modules/.pnpm/brace-expansion@5.0.12/node_modules/brace-expansion/dist/esm/index.js +0 -1
  518. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/index.js +0 -1
  519. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/enoent.js +0 -1
  520. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/parse.js +0 -1
  521. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/escape.js +0 -1
  522. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/readShebang.js +0 -1
  523. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/resolveCommand.js +0 -1
  524. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/index.js +0 -1
  525. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/command.js +0 -1
  526. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/error.js +0 -2
  527. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/kill.js +0 -1
  528. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/promise.js +0 -1
  529. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/stdio.js +0 -1
  530. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/stream.js +0 -1
  531. package/dist/src/node_modules/.pnpm/get-stream@6.0.1/node_modules/get-stream/buffer-stream.js +0 -1
  532. package/dist/src/node_modules/.pnpm/get-stream@6.0.1/node_modules/get-stream/index.js +0 -1
  533. package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/core.js +0 -1
  534. package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/main.js +0 -1
  535. package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/realtime.js +0 -1
  536. package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/signals.js +0 -1
  537. package/dist/src/node_modules/.pnpm/is-stream@2.0.1/node_modules/is-stream/index.js +0 -1
  538. package/dist/src/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/index.js +0 -1
  539. package/dist/src/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/mode.js +0 -1
  540. package/dist/src/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/windows.js +0 -1
  541. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/index.js +0 -1
  542. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/compact/decrypt.js +0 -1
  543. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/compact/encrypt.js +0 -1
  544. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/flattened/decrypt.js +0 -1
  545. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/flattened/encrypt.js +0 -1
  546. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/general/decrypt.js +0 -1
  547. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/general/encrypt.js +0 -1
  548. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwk/embedded.js +0 -1
  549. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwk/thumbprint.js +0 -1
  550. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwks/local.js +0 -1
  551. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwks/remote.js +0 -1
  552. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/compact/sign.js +0 -1
  553. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/compact/verify.js +0 -1
  554. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/flattened/sign.js +0 -1
  555. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/flattened/verify.js +0 -1
  556. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/general/sign.js +0 -1
  557. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/general/verify.js +0 -1
  558. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/decrypt.js +0 -1
  559. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/encrypt.js +0 -1
  560. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/produce.js +0 -1
  561. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/sign.js +0 -1
  562. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/unsecured.js +0 -1
  563. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/verify.js +0 -1
  564. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/export.js +0 -1
  565. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/generate_key_pair.js +0 -1
  566. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/generate_secret.js +0 -1
  567. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/import.js +0 -1
  568. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/aesgcmkw.js +0 -1
  569. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/buffer_utils.js +0 -1
  570. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/cek.js +0 -1
  571. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/check_iv_length.js +0 -1
  572. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/check_key_type.js +0 -1
  573. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/check_p2s.js +0 -1
  574. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/crypto_key.js +0 -1
  575. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/decrypt_key_management.js +0 -1
  576. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/encrypt_key_management.js +0 -1
  577. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/epoch.js +0 -1
  578. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/invalid_key_input.js +0 -1
  579. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/is_disjoint.js +0 -1
  580. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/is_jwk.js +0 -1
  581. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/is_object.js +0 -1
  582. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/iv.js +0 -1
  583. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/jwt_claims_set.js +0 -1
  584. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/private_symbols.js +0 -1
  585. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/secs.js +0 -1
  586. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/validate_algorithms.js +0 -1
  587. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/validate_crit.js +0 -1
  588. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/aeskw.js +0 -1
  589. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/asn1.js +0 -1
  590. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/base64url.js +0 -1
  591. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/cbc_tag.js +0 -1
  592. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/check_cek_length.js +0 -1
  593. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/check_key_length.js +0 -1
  594. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/ciphers.js +0 -1
  595. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/decrypt.js +0 -1
  596. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/digest.js +0 -1
  597. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/dsa_digest.js +0 -1
  598. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/ecdhes.js +0 -1
  599. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/encrypt.js +0 -1
  600. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/fetch_jwks.js +0 -1
  601. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/generate.js +0 -1
  602. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/get_named_curve.js +0 -1
  603. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/get_sign_verify_key.js +0 -1
  604. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/hmac_digest.js +0 -1
  605. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/is_key_like.js +0 -1
  606. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/is_key_object.js +0 -1
  607. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/jwk_to_key.js +0 -1
  608. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/key_to_jwk.js +0 -1
  609. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/node_key.js +0 -1
  610. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/normalize_key.js +0 -1
  611. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/pbes2kw.js +0 -1
  612. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/random.js +0 -1
  613. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/rsaes.js +0 -1
  614. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/runtime.js +0 -1
  615. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/sign.js +0 -1
  616. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/timing_safe_equal.js +0 -1
  617. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/verify.js +0 -1
  618. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/webcrypto.js +0 -1
  619. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/base64url.js +0 -1
  620. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/decode_jwt.js +0 -1
  621. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/decode_protected_header.js +0 -1
  622. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/errors.js +0 -1
  623. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/runtime.js +0 -1
  624. package/dist/src/node_modules/.pnpm/merge-stream@2.0.0/node_modules/merge-stream/index.js +0 -1
  625. package/dist/src/node_modules/.pnpm/mimic-fn@2.1.0/node_modules/mimic-fn/index.js +0 -1
  626. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/assert-valid-pattern.js +0 -1
  627. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/ast.js +0 -1
  628. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/brace-expressions.js +0 -1
  629. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/escape.js +0 -1
  630. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/index.js +0 -1
  631. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/unescape.js +0 -1
  632. package/dist/src/node_modules/.pnpm/mixpart@0.0.6/node_modules/mixpart/dist/index.js +0 -7
  633. package/dist/src/node_modules/.pnpm/npm-run-path@4.0.1/node_modules/npm-run-path/index.js +0 -1
  634. package/dist/src/node_modules/.pnpm/onetime@5.1.2/node_modules/onetime/index.js +0 -1
  635. package/dist/src/node_modules/.pnpm/os-paths@4.4.0/node_modules/os-paths/src/lib/index.js +0 -1
  636. package/dist/src/node_modules/.pnpm/path-key@3.1.1/node_modules/path-key/index.js +0 -1
  637. package/dist/src/node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js +0 -1
  638. package/dist/src/node_modules/.pnpm/shebang-command@2.0.0/node_modules/shebang-command/index.js +0 -1
  639. package/dist/src/node_modules/.pnpm/shebang-regex@3.0.0/node_modules/shebang-regex/index.js +0 -1
  640. package/dist/src/node_modules/.pnpm/signal-exit@3.0.7/node_modules/signal-exit/index.js +0 -1
  641. package/dist/src/node_modules/.pnpm/signal-exit@3.0.7/node_modules/signal-exit/signals.js +0 -1
  642. package/dist/src/node_modules/.pnpm/strip-final-newline@2.0.0/node_modules/strip-final-newline/index.js +0 -2
  643. package/dist/src/node_modules/.pnpm/which@2.0.2/node_modules/which/which.js +0 -1
  644. package/dist/src/node_modules/.pnpm/xdg-app-paths@5.5.1/node_modules/xdg-app-paths/src/lib/index.js +0 -1
  645. package/dist/src/node_modules/.pnpm/xdg-portable@7.3.0/node_modules/xdg-portable/src/lib/index.js +0 -1
  646. package/dist/src/public/tools/load-skill.d.ts +0 -3
  647. package/dist/src/public/tools/load-skill.js +0 -1
  648. package/dist/src/runtime/skills/fragment-context.d.ts +0 -4
  649. package/dist/src/runtime/skills/fragment-context.js +0 -1
  650. package/dist/src/tools/framework/connection-tools.d.ts +0 -3
  651. package/dist/src/tools/framework/connection-tools.js +0 -1
  652. package/dist/src/tools/provided/load-skill.d.ts +0 -2
  653. package/dist/src/tools/provided/load-skill.js +0 -1
  654. /package/dist/src/extensions/{code → git}/extension/lib/github-shell-schema.d.ts +0 -0
  655. /package/dist/src/extensions/{code → git}/extension/lib/github-shell-schema.js +0 -0
  656. /package/dist/src/extensions/{code → git}/extension/lib/signed-commit.d.ts +0 -0
  657. /package/dist/src/extensions/{code → git}/extension/lib/signed-commit.js +0 -0
  658. /package/dist/src/{runtime/connections/tool-signature.js → tools/signature.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,59 @@
1
1
  # eve
2
2
 
3
+ ## 0.76.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 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.
8
+
9
+ - 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.
10
+ - 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`.
11
+ - Eval facts report skill loads in `skillLoads`, which `t.loadedSkill` reads. They no longer count toward `toolCallCount`, `usedNoTools`, or `maxToolCalls`.
12
+ - 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.
13
+ - 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.
14
+
15
+ Breaking changes:
16
+
17
+ - 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.
18
+ - 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.
19
+ - 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.
20
+ - Dynamic tool map keys must be legal tool names: ASCII letters, digits, `_`, and `-`, starting with a letter, up to 64 characters.
21
+ - Connection approvals are keyed by `<connection>__<tool>` instead of a `[connection, tool]` pair, so saved "always approve" decisions for connection tools reset.
22
+ - 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."
23
+ - 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.
24
+ - 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.
25
+ - 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.
26
+
27
+ `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`.
28
+
29
+ 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.
30
+ - 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.
31
+ - 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.
32
+
33
+ ### Patch Changes
34
+
35
+ - 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.
36
+ - 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`.
37
+ - 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.
38
+ - 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.
39
+ - 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.
40
+ - 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.
41
+ - f15eaa6: Remove the stream-writer WebSocket default added in 0.73.0, which never took effect. Behavior is unchanged.
42
+ - 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.
43
+ - 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.
44
+
45
+ ## 0.75.1
46
+
47
+ ### Patch Changes
48
+
49
+ - 6189eea: Context compaction now calls its model the way a step does: it streams the summary, retries transient provider failures with the same policy, and counts the summary call's tokens and cost toward session usage limits. Automatic compaction reports that usage with the turn it ran in. Manual compaction runs between turns, so it counts toward session totals without being added to the next turn's usage.
50
+ - 8c7bb64: Provider options, web search, and prompt caching now read one description of the resolved model. A dynamically selected model gets provider-specific options, such as OpenAI and Anthropic safety identifiers, for the model actually called rather than its catalog id.
51
+ - 30c88ee: Configure 100% trace sampling when eve creates a Vercel project during `eve link`, `eve deploy`, or integration setup, so traces appear in Agent Runs. Existing projects keep their sampling settings, and `eve deploy --no-trace-sampling` still skips configuration.
52
+ - eb06c04: The `/add` picker and `eve registry list` now load the full official registry, so instrumentation items (Braintrust, PostHog, Sentry, and others) appear again instead of being cut off after the first 100 entries.
53
+ - 13059ba: Session stream requests now open the event stream while the tail index lookup is in flight, and the event stream reads its durable source only as fast as the client consumes it instead of buffering the whole history in memory.
54
+ - ee4b14f: Generated Web Chat apps now render `ask_question` prompts with the shadcn `Questionnaire` component from `@shadcn/react`. Pick an option by clicking it or pressing its number, or type your own answer, then submit with Answer or Enter.
55
+ - a4d38b3: Update eve's bundled Workflow SDK packages to the stable 5.2 release family.
56
+
3
57
  ## 0.75.0
4
58
 
5
59
  ### Minor 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};
@@ -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
@@ -767,7 +767,7 @@ function settleCall(call, status, error) {
767
767
  }
768
768
  function actionName(action) {
769
769
  switch (action.kind) {
770
- case "load-skill": return "load_skill";
770
+ case "load-skill": return action.name;
771
771
  case "subagent-call":
772
772
  case "remote-agent-call": return action.name;
773
773
  case "tool-call":
@@ -776,7 +776,7 @@ function actionName(action) {
776
776
  }
777
777
  function resultName(result) {
778
778
  switch (result.kind) {
779
- case "load-skill-result": return "load_skill";
779
+ case "load-skill-result": return result.name;
780
780
  case "subagent-result": return result.subagentName;
781
781
  default: return result.toolName;
782
782
  }
@@ -1201,6 +1201,9 @@ function isFinalMessageCompleted(event) {
1201
1201
  //#endregion
1202
1202
  //#region src/protocol/message-version.ts
1203
1203
  function normalizeMessageStreamEvent(version, event) {
1204
+ return nameSkillLoads(normalizeAppendEvent(version, event));
1205
+ }
1206
+ function normalizeAppendEvent(version, event) {
1204
1207
  switch (version) {
1205
1208
  case "21":
1206
1209
  case "22":
@@ -1256,6 +1259,26 @@ function normalizeLegacyMessageStreamEvent(version, event) {
1256
1259
  }
1257
1260
  return event;
1258
1261
  }
1262
+ function nameSkillLoads(event) {
1263
+ if (event.type !== "actions.requested" || !event.data.actions.some(isUnnamedSkillLoad)) return event;
1264
+ return {
1265
+ ...event,
1266
+ data: {
1267
+ ...event.data,
1268
+ actions: event.data.actions.map((action) => isUnnamedSkillLoad(action) ? {
1269
+ ...action,
1270
+ name: releasedSkillName(action)
1271
+ } : action)
1272
+ }
1273
+ };
1274
+ }
1275
+ function isUnnamedSkillLoad(action) {
1276
+ return action.kind === "load-skill" && typeof Reflect.get(action, "name") !== "string";
1277
+ }
1278
+ function releasedSkillName(action) {
1279
+ const skill = action.input.skill;
1280
+ return typeof skill === "string" ? skill : "load_skill";
1281
+ }
1259
1282
  function validateDeltaMessageStreamEvent(version, event) {
1260
1283
  if (event.type === "message.appended") {
1261
1284
  assertAppendDelta(event.data.messageDelta, "message", version);
@@ -3069,11 +3092,15 @@ function formatAuthorizationDisplayName(name) {
3069
3092
  return `${name.charAt(0).toUpperCase()}${name.slice(1)}`;
3070
3093
  }
3071
3094
 
3095
+ //#endregion
3096
+ //#region src/protocol/catalog-tools.ts
3097
+ const SKILL_TOOL_NAME = "eve__skill";
3098
+
3072
3099
  //#endregion
3073
3100
  //#region src/shared/action-request-name.ts
3074
3101
  function actionRequestName(action) {
3075
3102
  switch (action.kind) {
3076
- case "load-skill": return "load_skill";
3103
+ case "load-skill": return action.name;
3077
3104
  case "subagent-call": return action.subagentName;
3078
3105
  case "remote-agent-call": return action.remoteAgentName;
3079
3106
  case "tool-call":
@@ -3081,6 +3108,23 @@ function actionRequestName(action) {
3081
3108
  }
3082
3109
  }
3083
3110
 
3111
+ //#endregion
3112
+ //#region src/shared/display-name.ts
3113
+ function displayName(identifier) {
3114
+ 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());
3115
+ return words.length === 0 ? identifier : words.join(" ");
3116
+ }
3117
+ function displayTitle(identifier) {
3118
+ return capitalize(displayName(identifier));
3119
+ }
3120
+ const SEPARATORS = /[\s_-]+/u;
3121
+ function lastSegment(identifier) {
3122
+ return identifier.split("__").findLast((segment) => segment !== "") ?? identifier;
3123
+ }
3124
+ function capitalize(text) {
3125
+ return text.charAt(0).toUpperCase() + text.slice(1);
3126
+ }
3127
+
3084
3128
  //#endregion
3085
3129
  //#region src/client/message-action-parts.ts
3086
3130
  function toMessageInputRequest(request) {
@@ -3097,6 +3141,7 @@ function createToolMetadata(descriptor, extra) {
3097
3141
  return { eve: {
3098
3142
  inputRequest: extra?.inputRequest,
3099
3143
  kind: descriptor.kind,
3144
+ label: extra?.label,
3100
3145
  name: descriptor.name
3101
3146
  } };
3102
3147
  }
@@ -3109,6 +3154,7 @@ function mergeToolMetadata(current, next) {
3109
3154
  inputRequest: next.eve?.inputRequest ?? current?.eve?.inputRequest,
3110
3155
  inputResponse: next.eve?.inputResponse ?? current?.eve?.inputResponse,
3111
3156
  kind,
3157
+ label: next.eve?.label ?? current?.eve?.label,
3112
3158
  name
3113
3159
  } };
3114
3160
  }
@@ -3118,7 +3164,7 @@ function normalizeActionRequest(action) {
3118
3164
  case "load-skill": return {
3119
3165
  kind: "load-skill",
3120
3166
  name,
3121
- toolName: "eve:load-skill"
3167
+ toolName: SKILL_TOOL_NAME
3122
3168
  };
3123
3169
  case "tool-call":
3124
3170
  case "workflow-tool-call": return {
@@ -3138,8 +3184,8 @@ function normalizeActionResult(result) {
3138
3184
  switch (result.kind) {
3139
3185
  case "load-skill-result": return {
3140
3186
  kind: "load-skill",
3141
- name: result.name ?? "load_skill",
3142
- toolName: "eve:load-skill"
3187
+ name: result.name,
3188
+ toolName: SKILL_TOOL_NAME
3143
3189
  };
3144
3190
  case "tool-result": return {
3145
3191
  kind: "tool-call",
@@ -3153,6 +3199,9 @@ function normalizeActionResult(result) {
3153
3199
  };
3154
3200
  }
3155
3201
  }
3202
+ function settledLabel(current, label, descriptor) {
3203
+ return label ?? current?.eve?.label ?? displayTitle(descriptor.name);
3204
+ }
3156
3205
  function stringifyUnknown(value) {
3157
3206
  if (typeof value === "string") return value;
3158
3207
  try {
@@ -3249,6 +3298,12 @@ function transition(message, input) {
3249
3298
  }
3250
3299
  const messageRun = { transition };
3251
3300
 
3301
+ //#endregion
3302
+ //#region src/shared/action-label.ts
3303
+ function actionLabel(action, presentation) {
3304
+ return presentation?.[action.callId]?.label ?? displayTitle(actionRequestName(action));
3305
+ }
3306
+
3252
3307
  //#endregion
3253
3308
  //#region src/client/tool-part-state.ts
3254
3309
  function toolPartState(data, part) {
@@ -3446,7 +3501,7 @@ function reduceContent(data, event) {
3446
3501
  state: "input-available",
3447
3502
  stepIndex: event.data.stepIndex,
3448
3503
  toolCallId: action.callId,
3449
- toolMetadata: createToolMetadata(descriptor),
3504
+ toolMetadata: createToolMetadata(descriptor, { label: actionLabel(action, event.data.presentation) }),
3450
3505
  toolName: descriptor.toolName,
3451
3506
  type: "dynamic-tool"
3452
3507
  }));
@@ -3466,7 +3521,10 @@ function reduceContent(data, event) {
3466
3521
  state: "approval-requested",
3467
3522
  stepIndex: existing?.stepIndex ?? event.data.stepIndex,
3468
3523
  toolCallId: request.action.callId,
3469
- toolMetadata: createToolMetadata(descriptor, { inputRequest: toMessageInputRequest(request) }),
3524
+ toolMetadata: createToolMetadata(descriptor, {
3525
+ inputRequest: toMessageInputRequest(request),
3526
+ label: existing?.toolMetadata?.eve?.label ?? actionLabel(request.action, void 0)
3527
+ }),
3470
3528
  toolName: descriptor.toolName,
3471
3529
  type: "dynamic-tool"
3472
3530
  }));
@@ -3487,7 +3545,7 @@ function reduceContent(data, event) {
3487
3545
  input: existing?.input,
3488
3546
  stepIndex: existing?.stepIndex ?? event.data.stepIndex,
3489
3547
  toolCallId: event.data.result.callId,
3490
- toolMetadata: mergeToolMetadata(existing?.toolMetadata, createToolMetadata(descriptor)),
3548
+ toolMetadata: mergeToolMetadata(existing?.toolMetadata, createToolMetadata(descriptor, { label: settledLabel(existing?.toolMetadata, event.data.presentation?.[event.data.result.callId]?.label, descriptor) })),
3491
3549
  toolName: existing?.toolName ?? descriptor.toolName,
3492
3550
  type: "dynamic-tool"
3493
3551
  };
@@ -3516,7 +3574,7 @@ function reduceContent(data, event) {
3516
3574
  state: "output-available",
3517
3575
  stepIndex: existing?.stepIndex ?? event.data.stepIndex,
3518
3576
  toolCallId: event.data.result.callId,
3519
- toolMetadata: mergeToolMetadata(existing?.toolMetadata, createToolMetadata(descriptor)),
3577
+ toolMetadata: mergeToolMetadata(existing?.toolMetadata, createToolMetadata(descriptor, { label: settledLabel(existing?.toolMetadata, event.data.presentation?.[event.data.result.callId]?.label, descriptor) })),
3520
3578
  toolName: existing?.toolName ?? descriptor.toolName,
3521
3579
  type: "dynamic-tool"
3522
3580
  });
@@ -766,7 +766,7 @@ function settleCall(call, status, error) {
766
766
  }
767
767
  function actionName(action) {
768
768
  switch (action.kind) {
769
- case "load-skill": return "load_skill";
769
+ case "load-skill": return action.name;
770
770
  case "subagent-call":
771
771
  case "remote-agent-call": return action.name;
772
772
  case "tool-call":
@@ -775,7 +775,7 @@ function actionName(action) {
775
775
  }
776
776
  function resultName(result) {
777
777
  switch (result.kind) {
778
- case "load-skill-result": return "load_skill";
778
+ case "load-skill-result": return result.name;
779
779
  case "subagent-result": return result.subagentName;
780
780
  default: return result.toolName;
781
781
  }
@@ -1200,6 +1200,9 @@ function isFinalMessageCompleted(event) {
1200
1200
  //#endregion
1201
1201
  //#region src/protocol/message-version.ts
1202
1202
  function normalizeMessageStreamEvent(version, event) {
1203
+ return nameSkillLoads(normalizeAppendEvent(version, event));
1204
+ }
1205
+ function normalizeAppendEvent(version, event) {
1203
1206
  switch (version) {
1204
1207
  case "21":
1205
1208
  case "22":
@@ -1255,6 +1258,26 @@ function normalizeLegacyMessageStreamEvent(version, event) {
1255
1258
  }
1256
1259
  return event;
1257
1260
  }
1261
+ function nameSkillLoads(event) {
1262
+ if (event.type !== "actions.requested" || !event.data.actions.some(isUnnamedSkillLoad)) return event;
1263
+ return {
1264
+ ...event,
1265
+ data: {
1266
+ ...event.data,
1267
+ actions: event.data.actions.map((action) => isUnnamedSkillLoad(action) ? {
1268
+ ...action,
1269
+ name: releasedSkillName(action)
1270
+ } : action)
1271
+ }
1272
+ };
1273
+ }
1274
+ function isUnnamedSkillLoad(action) {
1275
+ return action.kind === "load-skill" && typeof Reflect.get(action, "name") !== "string";
1276
+ }
1277
+ function releasedSkillName(action) {
1278
+ const skill = action.input.skill;
1279
+ return typeof skill === "string" ? skill : "load_skill";
1280
+ }
1258
1281
  function validateDeltaMessageStreamEvent(version, event) {
1259
1282
  if (event.type === "message.appended") {
1260
1283
  assertAppendDelta(event.data.messageDelta, "message", version);
@@ -3068,11 +3091,15 @@ function formatAuthorizationDisplayName(name) {
3068
3091
  return `${name.charAt(0).toUpperCase()}${name.slice(1)}`;
3069
3092
  }
3070
3093
 
3094
+ //#endregion
3095
+ //#region src/protocol/catalog-tools.ts
3096
+ const SKILL_TOOL_NAME = "eve__skill";
3097
+
3071
3098
  //#endregion
3072
3099
  //#region src/shared/action-request-name.ts
3073
3100
  function actionRequestName(action) {
3074
3101
  switch (action.kind) {
3075
- case "load-skill": return "load_skill";
3102
+ case "load-skill": return action.name;
3076
3103
  case "subagent-call": return action.subagentName;
3077
3104
  case "remote-agent-call": return action.remoteAgentName;
3078
3105
  case "tool-call":
@@ -3080,6 +3107,23 @@ function actionRequestName(action) {
3080
3107
  }
3081
3108
  }
3082
3109
 
3110
+ //#endregion
3111
+ //#region src/shared/display-name.ts
3112
+ function displayName(identifier) {
3113
+ 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());
3114
+ return words.length === 0 ? identifier : words.join(" ");
3115
+ }
3116
+ function displayTitle(identifier) {
3117
+ return capitalize(displayName(identifier));
3118
+ }
3119
+ const SEPARATORS = /[\s_-]+/u;
3120
+ function lastSegment(identifier) {
3121
+ return identifier.split("__").findLast((segment) => segment !== "") ?? identifier;
3122
+ }
3123
+ function capitalize(text) {
3124
+ return text.charAt(0).toUpperCase() + text.slice(1);
3125
+ }
3126
+
3083
3127
  //#endregion
3084
3128
  //#region src/client/message-action-parts.ts
3085
3129
  function toMessageInputRequest(request) {
@@ -3096,6 +3140,7 @@ function createToolMetadata(descriptor, extra) {
3096
3140
  return { eve: {
3097
3141
  inputRequest: extra?.inputRequest,
3098
3142
  kind: descriptor.kind,
3143
+ label: extra?.label,
3099
3144
  name: descriptor.name
3100
3145
  } };
3101
3146
  }
@@ -3108,6 +3153,7 @@ function mergeToolMetadata(current, next) {
3108
3153
  inputRequest: next.eve?.inputRequest ?? current?.eve?.inputRequest,
3109
3154
  inputResponse: next.eve?.inputResponse ?? current?.eve?.inputResponse,
3110
3155
  kind,
3156
+ label: next.eve?.label ?? current?.eve?.label,
3111
3157
  name
3112
3158
  } };
3113
3159
  }
@@ -3117,7 +3163,7 @@ function normalizeActionRequest(action) {
3117
3163
  case "load-skill": return {
3118
3164
  kind: "load-skill",
3119
3165
  name,
3120
- toolName: "eve:load-skill"
3166
+ toolName: SKILL_TOOL_NAME
3121
3167
  };
3122
3168
  case "tool-call":
3123
3169
  case "workflow-tool-call": return {
@@ -3137,8 +3183,8 @@ function normalizeActionResult(result) {
3137
3183
  switch (result.kind) {
3138
3184
  case "load-skill-result": return {
3139
3185
  kind: "load-skill",
3140
- name: result.name ?? "load_skill",
3141
- toolName: "eve:load-skill"
3186
+ name: result.name,
3187
+ toolName: SKILL_TOOL_NAME
3142
3188
  };
3143
3189
  case "tool-result": return {
3144
3190
  kind: "tool-call",
@@ -3152,6 +3198,9 @@ function normalizeActionResult(result) {
3152
3198
  };
3153
3199
  }
3154
3200
  }
3201
+ function settledLabel(current, label, descriptor) {
3202
+ return label ?? current?.eve?.label ?? displayTitle(descriptor.name);
3203
+ }
3155
3204
  function stringifyUnknown(value) {
3156
3205
  if (typeof value === "string") return value;
3157
3206
  try {
@@ -3248,6 +3297,12 @@ function transition(message, input) {
3248
3297
  }
3249
3298
  const messageRun = { transition };
3250
3299
 
3300
+ //#endregion
3301
+ //#region src/shared/action-label.ts
3302
+ function actionLabel(action, presentation) {
3303
+ return presentation?.[action.callId]?.label ?? displayTitle(actionRequestName(action));
3304
+ }
3305
+
3251
3306
  //#endregion
3252
3307
  //#region src/client/tool-part-state.ts
3253
3308
  function toolPartState(data, part) {
@@ -3445,7 +3500,7 @@ function reduceContent(data, event) {
3445
3500
  state: "input-available",
3446
3501
  stepIndex: event.data.stepIndex,
3447
3502
  toolCallId: action.callId,
3448
- toolMetadata: createToolMetadata(descriptor),
3503
+ toolMetadata: createToolMetadata(descriptor, { label: actionLabel(action, event.data.presentation) }),
3449
3504
  toolName: descriptor.toolName,
3450
3505
  type: "dynamic-tool"
3451
3506
  }));
@@ -3465,7 +3520,10 @@ function reduceContent(data, event) {
3465
3520
  state: "approval-requested",
3466
3521
  stepIndex: existing?.stepIndex ?? event.data.stepIndex,
3467
3522
  toolCallId: request.action.callId,
3468
- toolMetadata: createToolMetadata(descriptor, { inputRequest: toMessageInputRequest(request) }),
3523
+ toolMetadata: createToolMetadata(descriptor, {
3524
+ inputRequest: toMessageInputRequest(request),
3525
+ label: existing?.toolMetadata?.eve?.label ?? actionLabel(request.action, void 0)
3526
+ }),
3469
3527
  toolName: descriptor.toolName,
3470
3528
  type: "dynamic-tool"
3471
3529
  }));
@@ -3486,7 +3544,7 @@ function reduceContent(data, event) {
3486
3544
  input: existing?.input,
3487
3545
  stepIndex: existing?.stepIndex ?? event.data.stepIndex,
3488
3546
  toolCallId: event.data.result.callId,
3489
- toolMetadata: mergeToolMetadata(existing?.toolMetadata, createToolMetadata(descriptor)),
3547
+ toolMetadata: mergeToolMetadata(existing?.toolMetadata, createToolMetadata(descriptor, { label: settledLabel(existing?.toolMetadata, event.data.presentation?.[event.data.result.callId]?.label, descriptor) })),
3490
3548
  toolName: existing?.toolName ?? descriptor.toolName,
3491
3549
  type: "dynamic-tool"
3492
3550
  };
@@ -3515,7 +3573,7 @@ function reduceContent(data, event) {
3515
3573
  state: "output-available",
3516
3574
  stepIndex: existing?.stepIndex ?? event.data.stepIndex,
3517
3575
  toolCallId: event.data.result.callId,
3518
- toolMetadata: mergeToolMetadata(existing?.toolMetadata, createToolMetadata(descriptor)),
3576
+ toolMetadata: mergeToolMetadata(existing?.toolMetadata, createToolMetadata(descriptor, { label: settledLabel(existing?.toolMetadata, event.data.presentation?.[event.data.result.callId]?.label, descriptor) })),
3519
3577
  toolName: existing?.toolName ?? descriptor.toolName,
3520
3578
  type: "dynamic-tool"
3521
3579
  });
@@ -1 +1 @@
1
- import{hasInteractiveTerminal,validateWorkspaceProjectCommand}from"./preconditions.js";import{isNonInteractiveProjectCommand,runNonInteractiveLink}from"./vercel-non-interactive.js";import{isEveProject}from"#setup/scaffold/index.js";import{runDeployFlow}from"#setup/flows/deploy.js";import{createPrompter}from"#setup/prompter.js";import{configureTraceSampling}from"#setup/vercel-trace-sampling.js";const defaultDependencies={hasInteractiveTerminal,isEveProject};async function runDeployCommand(e,t,n=defaultDependencies,r={}){if(!await validateWorkspaceProjectCommand({appRoot:t,isEveProject:n.isEveProject,logger:e,workspaceMemberMessage:e=>`This agent belongs to the workspace at ${e.root}. Run \`eve deploy\` from the workspace root to deploy every peer agent together.`}))return;let i=isNonInteractiveProjectCommand(r);if(i&&r.yes!==!0){e.error("`eve deploy --non-interactive` requires `--yes` to confirm production deployment."),process.exitCode=1;return}let a=n.createPrompter?.()??createPrompter();try{if(i&&r.project!==void 0&&!await runNonInteractiveLink({logger:e,appRoot:t,options:r,dependencies:n.nonInteractiveLinkDeps,onCreatedProject:r.traceSampling===!1?void 0:e=>configureTraceSampling(e,a),onProjectCreationUnknown:r.traceSampling===!1?void 0:()=>a.log.warning(`Could not verify the Vercel project for trace sampling, so it was not configured. Check the project settings if you need traces in Agent Runs.`)}))return;a.intro(`Deploy your eve agent to Vercel`);let o=await runDeployFlow({appRoot:t,prompter:a,traceSampling:r.traceSampling!==!1,interactive:!i&&n.hasInteractiveTerminal(),deps:n.flowDeps});if(o.kind===`needs-link`){e.error("This directory is not linked to a Vercel project. Run `eve link` first, or name the project on the deploy itself: `eve deploy --project <name-or-id> --non-interactive --yes`."),process.exitCode=1;return}if(o.kind===`local-model`){e.error("ChatGPT subscription models use local ChatGPT credentials and cannot be deployed. Switch to an AI Gateway or server-authenticated model before running `eve deploy`."),process.exitCode=1;return}a.outro(o.kind===`cancelled`?`Cancelled.`:o.productionUrl===void 0?`Deployed.`:`Deployed: ${o.productionUrl}`)}catch(t){e.error(t instanceof Error?t.message:String(t)),process.exitCode=1}}export{runDeployCommand};
1
+ import{hasInteractiveTerminal,validateWorkspaceProjectCommand}from"./preconditions.js";import{isNonInteractiveProjectCommand,runNonInteractiveLink}from"./vercel-non-interactive.js";import{isEveProject}from"#setup/scaffold/index.js";import{runDeployFlow}from"#setup/flows/deploy.js";import{createPrompter}from"#setup/prompter.js";const defaultDependencies={hasInteractiveTerminal,isEveProject};async function runDeployCommand(e,t,n=defaultDependencies,r={}){if(!await validateWorkspaceProjectCommand({appRoot:t,isEveProject:n.isEveProject,logger:e,workspaceMemberMessage:e=>`This agent belongs to the workspace at ${e.root}. Run \`eve deploy\` from the workspace root to deploy every peer agent together.`}))return;let i=isNonInteractiveProjectCommand(r);if(i&&r.yes!==!0){e.error("`eve deploy --non-interactive` requires `--yes` to confirm production deployment."),process.exitCode=1;return}let a=n.createPrompter?.()??createPrompter();try{if(i&&r.project!==void 0&&!await runNonInteractiveLink({logger:e,appRoot:t,options:r,prompter:a,dependencies:n.nonInteractiveLinkDeps}))return;a.intro(`Deploy your eve agent to Vercel`);let o=await runDeployFlow({appRoot:t,prompter:a,traceSampling:r.traceSampling!==!1,interactive:!i&&n.hasInteractiveTerminal(),deps:n.flowDeps});if(o.kind===`needs-link`){e.error("This directory is not linked to a Vercel project. Run `eve link` first, or name the project on the deploy itself: `eve deploy --project <name-or-id> --non-interactive --yes`."),process.exitCode=1;return}if(o.kind===`local-model`){e.error("ChatGPT subscription models use local ChatGPT credentials and cannot be deployed. Switch to an AI Gateway or server-authenticated model before running `eve deploy`."),process.exitCode=1;return}a.outro(o.kind===`cancelled`?`Cancelled.`:o.productionUrl===void 0?`Deployed.`:`Deployed: ${o.productionUrl}`)}catch(t){e.error(t instanceof Error?t.message:String(t)),process.exitCode=1}}export{runDeployCommand};
@@ -1,7 +1,7 @@
1
1
  import { isEveProject } from "#setup/scaffold/index.js";
2
2
  import { type LinkFlowDeps } from "#setup/flows/link.js";
3
3
  import { type Prompter } from "#setup/prompter.js";
4
- import { type VercelProjectCliOptions } from "./vercel-non-interactive.js";
4
+ import { type NonInteractiveLinkDependencies, type VercelProjectCliOptions } from "./vercel-non-interactive.js";
5
5
  export interface LinkCliLogger {
6
6
  error(message: string): void;
7
7
  log(message: string): void;
@@ -12,6 +12,7 @@ export interface LinkCommandDependencies {
12
12
  isEveProject?: typeof isEveProject;
13
13
  /** Test seam into the flow's detection and box effects. */
14
14
  flowDeps?: Partial<LinkFlowDeps>;
15
+ nonInteractiveLinkDeps?: NonInteractiveLinkDependencies;
15
16
  }
16
17
  /**
17
18
  * `eve link`: pick a Vercel team, then create or select a project (re-linking
@@ -1 +1 @@
1
- import{hasInteractiveTerminal,validateWorkspaceProjectCommand}from"./preconditions.js";import{isNonInteractiveProjectCommand,runNonInteractiveLink}from"./vercel-non-interactive.js";import{isEveProject}from"#setup/scaffold/index.js";import{createPrompter}from"#setup/prompter.js";import{runLinkFlow}from"#setup/flows/link.js";const defaultDependencies={hasInteractiveTerminal,isEveProject};async function runLinkCommand(e,t,n=defaultDependencies,r={}){if(!await validateWorkspaceProjectCommand({appRoot:t,isEveProject:n.isEveProject,logger:e,workspaceMemberMessage:e=>`This agent belongs to the workspace at ${e.root}. Run \`eve link\` from the workspace root.`}))return;if(isNonInteractiveProjectCommand(r)){await runNonInteractiveLink({logger:e,appRoot:t,options:r});return}if(!n.hasInteractiveTerminal()){e.error("`eve link` needs an interactive terminal to pick the team and project. Name the project instead: `eve link --project <name-or-id> --non-interactive`."),process.exitCode=1;return}let i=n.createPrompter?.()??createPrompter();i.intro(`Link your eve agent to Vercel`);try{let e=await runLinkFlow({appRoot:t,prompter:i,projectSelection:`create-or-link`,deps:n.flowDeps});i.outro(e.kind===`cancelled`?`Cancelled.`:`Project linked.`)}catch(t){e.error(t instanceof Error?t.message:String(t)),process.exitCode=1}}export{runLinkCommand};
1
+ import{hasInteractiveTerminal,validateWorkspaceProjectCommand}from"./preconditions.js";import{isNonInteractiveProjectCommand,runNonInteractiveLink}from"./vercel-non-interactive.js";import{isEveProject}from"#setup/scaffold/index.js";import{createPrompter}from"#setup/prompter.js";import{runLinkFlow}from"#setup/flows/link.js";const defaultDependencies={hasInteractiveTerminal,isEveProject};async function runLinkCommand(e,t,n=defaultDependencies,r={}){if(!await validateWorkspaceProjectCommand({appRoot:t,isEveProject:n.isEveProject,logger:e,workspaceMemberMessage:e=>`This agent belongs to the workspace at ${e.root}. Run \`eve link\` from the workspace root.`}))return;if(isNonInteractiveProjectCommand(r)){let i=n.createPrompter?.()??createPrompter();await runNonInteractiveLink({logger:e,appRoot:t,options:r,prompter:i,dependencies:n.nonInteractiveLinkDeps});return}if(!n.hasInteractiveTerminal()){e.error("`eve link` needs an interactive terminal to pick the team and project. Name the project instead: `eve link --project <name-or-id> --non-interactive`."),process.exitCode=1;return}let i=n.createPrompter?.()??createPrompter();i.intro(`Link your eve agent to Vercel`);try{let e=await runLinkFlow({appRoot:t,prompter:i,projectSelection:`create-or-link`,deps:n.flowDeps});i.outro(e.kind===`cancelled`?`Cancelled.`:`Project linked.`)}catch(t){e.error(t instanceof Error?t.message:String(t)),process.exitCode=1}}export{runLinkCommand};