eve 0.75.1 → 0.76.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (720) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/dist/src/_virtual/_rolldown/runtime.js +1 -1
  3. package/dist/src/acp/adapter.js +1 -1
  4. package/dist/src/channel/channel-address.d.ts +3 -1
  5. package/dist/src/channel/channel-address.js +1 -1
  6. package/dist/src/channel/session-stranded-error.d.ts +25 -0
  7. package/dist/src/channel/session-stranded-error.js +1 -0
  8. package/dist/src/channel/session.d.ts +13 -6
  9. package/dist/src/channel/task-card.js +1 -1
  10. package/dist/src/channel/tool-eligibility.d.ts +1 -2
  11. package/dist/src/channel/types.d.ts +29 -1
  12. package/dist/src/chunks/{use-eve-agent-DK_T88EP.js → use-eve-agent-BtKWTEpm.js} +99 -24
  13. package/dist/src/chunks/{use-eve-agent-B2Kne9z6.js → use-eve-agent-jI6EsYAu.js} +99 -24
  14. package/dist/src/cli/commands/registry-project.d.ts +10 -3
  15. package/dist/src/cli/commands/registry-project.js +2 -2
  16. package/dist/src/cli/commands/registry.js +1 -1
  17. package/dist/src/cli/dev/environment.d.ts +0 -6
  18. package/dist/src/cli/dev/environment.js +1 -1
  19. package/dist/src/cli/dev/tui/conversation-view.js +1 -1
  20. package/dist/src/cli/dev/tui/runner.js +3 -3
  21. package/dist/src/cli/dev/tui/stranded-session.d.ts +9 -0
  22. package/dist/src/cli/dev/tui/stranded-session.js +1 -0
  23. package/dist/src/cli/dev/tui/tool-presentation.js +1 -1
  24. package/dist/src/cli/dev/tui/transcript.js +1 -1
  25. package/dist/src/client/client-error.d.ts +16 -0
  26. package/dist/src/client/client-error.js +1 -1
  27. package/dist/src/client/client.js +1 -1
  28. package/dist/src/client/index.d.ts +3 -2
  29. package/dist/src/client/index.js +1 -1
  30. package/dist/src/client/message-action-parts.d.ts +3 -0
  31. package/dist/src/client/message-action-parts.js +1 -1
  32. package/dist/src/client/message-reducer-types.d.ts +6 -1
  33. package/dist/src/client/message-reducer.js +1 -1
  34. package/dist/src/client/open-stream.d.ts +5 -3
  35. package/dist/src/client/open-stream.js +1 -1
  36. package/dist/src/client/session-controls.js +1 -1
  37. package/dist/src/client/session.js +1 -1
  38. package/dist/src/client/transcript-reducer.d.ts +46 -0
  39. package/dist/src/client/transcript-reducer.js +2 -0
  40. package/dist/src/compiled/.vendor-stamp.json +3 -2
  41. package/dist/src/compiled/@eve/catalog/index.js +1 -1
  42. package/dist/src/compiled/@vercel/queue/index.d.ts +1066 -0
  43. package/dist/src/compiled/@vercel/queue/index.js +47 -0
  44. package/dist/src/compiler/connection-ownership.d.ts +6 -0
  45. package/dist/src/compiler/connection-ownership.js +1 -0
  46. package/dist/src/compiler/default-tool-policy.d.ts +0 -3
  47. package/dist/src/compiler/default-tool-policy.js +1 -1
  48. package/dist/src/compiler/extension-compatibility.d.ts +23 -22
  49. package/dist/src/compiler/extension-compatibility.js +1 -1
  50. package/dist/src/compiler/manifest.d.ts +9 -6
  51. package/dist/src/compiler/manifest.js +1 -1
  52. package/dist/src/compiler/normalize-agent-config.js +1 -1
  53. package/dist/src/compiler/normalize-connection.js +1 -1
  54. package/dist/src/compiler/normalize-manifest.js +1 -1
  55. package/dist/src/compiler/normalize-skill.d.ts +5 -0
  56. package/dist/src/compiler/normalize-skill.js +1 -1
  57. package/dist/src/compiler/normalize-subagent.d.ts +2 -1
  58. package/dist/src/compiler/normalize-subagent.js +1 -1
  59. package/dist/src/compiler/normalize-tool.js +1 -1
  60. package/dist/src/compiler/remote-agent-node.d.ts +2 -1
  61. package/dist/src/compiler/remote-agent-node.js +1 -1
  62. package/dist/src/connections/ownership.d.ts +18 -0
  63. package/dist/src/connections/ownership.js +1 -0
  64. package/dist/src/context/accessors.d.ts +1 -1
  65. package/dist/src/context/build-callback-context.js +1 -1
  66. package/dist/src/context/build-dynamic-tools.d.ts +3 -9
  67. package/dist/src/context/build-dynamic-tools.js +1 -1
  68. package/dist/src/context/dynamic-connection-lifecycle.js +1 -1
  69. package/dist/src/context/dynamic-resolve-context.js +1 -1
  70. package/dist/src/context/dynamic-skill-lifecycle.d.ts +2 -11
  71. package/dist/src/context/dynamic-skill-lifecycle.js +1 -1
  72. package/dist/src/context/dynamic-subagent-lifecycle.js +1 -1
  73. package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
  74. package/dist/src/context/dynamic-tool-metadata.d.ts +1 -0
  75. package/dist/src/context/keys.d.ts +10 -4
  76. package/dist/src/context/keys.js +1 -1
  77. package/dist/src/context/memory-tools.js +1 -1
  78. package/dist/src/context/providers/session.d.ts +1 -0
  79. package/dist/src/context/providers/session.js +1 -1
  80. package/dist/src/context/schedule-collection-tools.js +1 -1
  81. package/dist/src/context/session-context.d.ts +8 -2
  82. package/dist/src/discover/grammar.d.ts +11 -0
  83. package/dist/src/discover/grammar.js +1 -1
  84. package/dist/src/discover/manifest.d.ts +1 -0
  85. package/dist/src/discover/manifest.js +1 -1
  86. package/dist/src/discover/skills.d.ts +1 -0
  87. package/dist/src/discover/skills.js +1 -1
  88. package/dist/src/dynamic/definition.d.ts +14 -6
  89. package/dist/src/evals/assertions/collector.d.ts +4 -0
  90. package/dist/src/evals/assertions/collector.js +1 -1
  91. package/dist/src/evals/assertions/run.d.ts +2 -3
  92. package/dist/src/evals/assertions/run.js +2 -2
  93. package/dist/src/evals/assertions/scoped.js +1 -1
  94. package/dist/src/evals/index.d.ts +1 -1
  95. package/dist/src/evals/match.d.ts +9 -6
  96. package/dist/src/evals/reported-tool-name.d.ts +9 -0
  97. package/dist/src/evals/reported-tool-name.js +1 -0
  98. package/dist/src/evals/runner/derive-run-facts.d.ts +3 -3
  99. package/dist/src/evals/runner/derive-run-facts.js +1 -1
  100. package/dist/src/evals/runner/execute-task.js +1 -1
  101. package/dist/src/evals/runner/reporters/braintrust.js +1 -1
  102. package/dist/src/evals/runner/reporters/datadog-runtime-trace-links.d.ts +11 -0
  103. package/dist/src/evals/runner/reporters/datadog-runtime-trace-links.js +1 -0
  104. package/dist/src/evals/runner/reporters/datadog.js +2 -2
  105. package/dist/src/evals/session.js +2 -2
  106. package/dist/src/evals/target.d.ts +7 -0
  107. package/dist/src/evals/target.js +1 -1
  108. package/dist/src/evals/types.d.ts +19 -2
  109. package/dist/src/eve-channel/index.js +1 -1
  110. package/dist/src/eve-channel/request.js +2 -2
  111. package/dist/src/eve-channel/support.d.ts +2 -0
  112. package/dist/src/eve-channel/support.js +1 -1
  113. package/dist/src/execution/agent-sessions/remote.js +1 -1
  114. package/dist/src/execution/agent-sessions/steps.js +1 -1
  115. package/dist/src/execution/catalog/connection-auth.d.ts +41 -0
  116. package/dist/src/execution/catalog/connection-auth.js +1 -0
  117. package/dist/src/execution/catalog/connection-entry.d.ts +16 -0
  118. package/dist/src/execution/catalog/connection-entry.js +1 -0
  119. package/dist/src/execution/catalog/listing.d.ts +9 -0
  120. package/dist/src/execution/catalog/listing.js +3 -0
  121. package/dist/src/execution/catalog/rank.d.ts +44 -0
  122. package/dist/src/execution/catalog/rank.js +1 -0
  123. package/dist/src/execution/catalog/search.d.ts +28 -0
  124. package/dist/src/execution/catalog/search.js +1 -0
  125. package/dist/src/execution/catalog/signatures.d.ts +11 -0
  126. package/dist/src/execution/catalog/signatures.js +1 -0
  127. package/dist/src/execution/catalog/skills.d.ts +24 -0
  128. package/dist/src/execution/catalog/skills.js +1 -0
  129. package/dist/src/execution/catalog/step-catalog.d.ts +51 -0
  130. package/dist/src/execution/catalog/step-catalog.js +1 -0
  131. package/dist/src/execution/coordination-dispatch-shared.js +1 -1
  132. package/dist/src/execution/dynamic-connections.js +1 -1
  133. package/dist/src/execution/dynamic-workflow/tool.js +1 -1
  134. package/dist/src/execution/eve-workflow-attributes.d.ts +15 -0
  135. package/dist/src/execution/eve-workflow-attributes.js +1 -1
  136. package/dist/src/execution/install-workflow-world.d.ts +7 -0
  137. package/dist/src/execution/install-workflow-world.js +1 -0
  138. package/dist/src/execution/invoke-tool.js +1 -1
  139. package/dist/src/execution/legacy-session/authorization.js +1 -1
  140. package/dist/src/execution/legacy-session/inbox.js +1 -1
  141. package/dist/src/execution/legacy-session/turn-workflow.js +1 -1
  142. package/dist/src/execution/node-step.js +1 -1
  143. package/dist/src/execution/session/active-turn.d.ts +1 -1
  144. package/dist/src/execution/session/entry.js +1 -1
  145. package/dist/src/execution/session/handoff-steps.d.ts +11 -0
  146. package/dist/src/execution/session/handoff-steps.js +1 -1
  147. package/dist/src/execution/session/pending-turn-state.js +1 -1
  148. package/dist/src/execution/session/program.js +1 -1
  149. package/dist/src/execution/session/timeout-steps.js +1 -1
  150. package/dist/src/execution/session/turn-step.js +1 -1
  151. package/dist/src/execution/session/turn.d.ts +5 -5
  152. package/dist/src/execution/session/turn.js +1 -1
  153. package/dist/src/execution/session-event-stream.d.ts +6 -0
  154. package/dist/src/execution/session-event-stream.js +1 -1
  155. package/dist/src/execution/session-inbox/address.d.ts +4 -0
  156. package/dist/src/execution/session-inbox/address.js +1 -1
  157. package/dist/src/execution/session-inbox/end-stranded-session.d.ts +22 -0
  158. package/dist/src/execution/session-inbox/end-stranded-session.js +1 -0
  159. package/dist/src/execution/session-inbox/hook-release.d.ts +4 -0
  160. package/dist/src/execution/session-inbox/hook-release.js +1 -0
  161. package/dist/src/execution/session-inbox/owner.d.ts +48 -0
  162. package/dist/src/execution/session-inbox/owner.js +1 -0
  163. package/dist/src/execution/session-inbox/resume.d.ts +12 -0
  164. package/dist/src/execution/session-inbox/resume.js +1 -1
  165. package/dist/src/execution/session-inbox/runnable-owner.d.ts +13 -0
  166. package/dist/src/execution/session-inbox/runnable-owner.js +1 -0
  167. package/dist/src/execution/session-inbox/stranded-replay-guard.d.ts +16 -0
  168. package/dist/src/execution/session-inbox/stranded-replay-guard.js +1 -0
  169. package/dist/src/execution/session.js +1 -1
  170. package/dist/src/execution/skills/instructions.d.ts +20 -10
  171. package/dist/src/execution/skills/instructions.js +2 -2
  172. package/dist/src/execution/tasks/calls.d.ts +6 -5
  173. package/dist/src/execution/tasks/calls.js +1 -1
  174. package/dist/src/execution/tasks/model-step.d.ts +10 -10
  175. package/dist/src/execution/tasks/model-step.js +1 -1
  176. package/dist/src/execution/tasks/render.d.ts +3 -3
  177. package/dist/src/execution/tasks/render.js +3 -3
  178. package/dist/src/execution/tasks/session.d.ts +2 -1
  179. package/dist/src/execution/tasks/table.d.ts +1 -1
  180. package/dist/src/execution/tasks/tool-entry-point.d.ts +1 -1
  181. package/dist/src/execution/tool-auth.js +1 -1
  182. package/dist/src/execution/tools/agent-router-workflow.js +1 -1
  183. package/dist/src/execution/tools/workflow/harness-definition.js +1 -1
  184. package/dist/src/execution/workflow-runtime.d.ts +5 -1
  185. package/dist/src/execution/workflow-runtime.js +1 -1
  186. package/dist/src/extensions/code/extension/extension.d.ts +4 -18
  187. package/dist/src/extensions/code/extension/instructions/github.d.ts +3 -0
  188. package/dist/src/extensions/code/extension/instructions/github.js +1 -0
  189. package/dist/src/extensions/code/extension/instructions.md +1 -13
  190. package/dist/src/extensions/code/extension/lib/diagnostics.d.ts +4 -2
  191. package/dist/src/extensions/code/extension/lib/diagnostics.js +3 -3
  192. package/dist/src/extensions/code/extension/lib/github-compat.d.ts +28 -0
  193. package/dist/src/extensions/code/extension/lib/github-compat.js +1 -0
  194. package/dist/src/extensions/code/extension/lib/grep-search.d.ts +3 -13
  195. package/dist/src/extensions/code/extension/lib/grep-search.js +2 -2
  196. package/dist/src/extensions/code/extension/lib/patch.d.ts +8 -2
  197. package/dist/src/extensions/code/extension/lib/patch.js +4 -4
  198. package/dist/src/extensions/code/extension/lib/repository-root.d.ts +3 -4
  199. package/dist/src/extensions/code/extension/lib/repository-root.js +1 -1
  200. package/dist/src/extensions/code/extension/lib/sandbox.d.ts +2 -1
  201. package/dist/src/extensions/code/extension/lib/sandbox.js +1 -1
  202. package/dist/src/extensions/code/extension/lib/tooling.d.ts +4 -4
  203. package/dist/src/extensions/code/extension/lib/tooling.js +7 -7
  204. package/dist/src/extensions/code/extension/lib/workspace-root.d.ts +31 -0
  205. package/dist/src/extensions/code/extension/lib/workspace-root.js +1 -0
  206. package/dist/src/extensions/code/extension/skills/pr.d.ts +6 -0
  207. package/dist/src/extensions/code/extension/skills/pr.js +1 -0
  208. package/dist/src/extensions/code/extension/tools/apply_patch.d.ts +2 -2
  209. package/dist/src/extensions/code/extension/tools/apply_patch.js +2 -2
  210. package/dist/src/extensions/code/extension/tools/gh.d.ts +4 -3
  211. package/dist/src/extensions/code/extension/tools/gh.js +1 -1
  212. package/dist/src/extensions/code/extension/tools/grep.js +1 -1
  213. package/dist/src/extensions/code/tools.d.ts +2 -1
  214. package/dist/src/extensions/code/tools.js +1 -1
  215. package/dist/src/extensions/git/extension/extension.d.ts +12 -0
  216. package/dist/src/extensions/git/extension/extension.js +1 -0
  217. package/dist/src/extensions/git/extension/instructions/github.d.ts +2 -0
  218. package/dist/src/extensions/git/extension/instructions/github.js +1 -0
  219. package/dist/src/extensions/git/extension/lib/gh-tool.d.ts +29 -0
  220. package/dist/src/extensions/git/extension/lib/gh-tool.js +1 -0
  221. package/dist/src/extensions/git/extension/lib/github-guidance.d.ts +3 -0
  222. package/dist/src/extensions/git/extension/lib/github-guidance.js +49 -0
  223. package/dist/src/extensions/{code → git}/extension/lib/github-shell.d.ts +1 -1
  224. package/dist/src/extensions/git/extension/lib/github-shell.js +1 -0
  225. package/dist/src/extensions/git/extension/lib/repository-root.d.ts +5 -0
  226. package/dist/src/extensions/git/extension/lib/repository-root.js +1 -0
  227. package/dist/src/extensions/git/extension/lib/sandbox.d.ts +6 -0
  228. package/dist/src/extensions/git/extension/lib/sandbox.js +1 -0
  229. package/dist/src/extensions/git/extension/lib/shell.d.ts +1 -0
  230. package/dist/src/extensions/git/extension/lib/shell.js +1 -0
  231. package/dist/src/extensions/git/extension/lib/tooling.d.ts +4 -0
  232. package/dist/src/extensions/git/extension/lib/tooling.js +1 -0
  233. package/dist/src/extensions/git/extension/skills/pr.d.ts +5 -0
  234. package/dist/src/extensions/git/extension/skills/pr.js +1 -0
  235. package/dist/src/extensions/git/extension/tools/gh.d.ts +28 -0
  236. package/dist/src/extensions/git/extension/tools/gh.js +1 -0
  237. package/dist/src/extensions/git/tools.d.ts +27 -0
  238. package/dist/src/extensions/git/tools.js +1 -0
  239. package/dist/src/framework/sources/registry.js +1 -1
  240. package/dist/src/harness/action-presentation.d.ts +2 -2
  241. package/dist/src/harness/action-result-helpers.d.ts +10 -2
  242. package/dist/src/harness/action-result-helpers.js +1 -1
  243. package/dist/src/harness/announcements.d.ts +2 -8
  244. package/dist/src/harness/announcements.js +1 -1
  245. package/dist/src/harness/compaction/step.js +1 -1
  246. package/dist/src/harness/coordination.d.ts +11 -11
  247. package/dist/src/harness/coordination.js +1 -1
  248. package/dist/src/harness/current-messages.d.ts +1 -5
  249. package/dist/src/harness/current-messages.js +1 -1
  250. package/dist/src/harness/emission.d.ts +2 -2
  251. package/dist/src/harness/emission.js +1 -1
  252. package/dist/src/harness/execute-call.d.ts +48 -0
  253. package/dist/src/harness/execute-call.js +1 -0
  254. package/dist/src/harness/execute-tool.d.ts +3 -1
  255. package/dist/src/harness/final-output.d.ts +2 -6
  256. package/dist/src/harness/final-output.js +1 -1
  257. package/dist/src/harness/hitl/approvals.d.ts +5 -0
  258. package/dist/src/harness/hitl/approvals.js +1 -1
  259. package/dist/src/harness/hitl/approved-calls.d.ts +3 -2
  260. package/dist/src/harness/hitl/approved-calls.js +1 -1
  261. package/dist/src/harness/hitl/candidates.d.ts +13 -2
  262. package/dist/src/harness/hitl/candidates.js +1 -1
  263. package/dist/src/harness/hitl/coordinator.d.ts +3 -3
  264. package/dist/src/harness/hitl/coordinator.js +1 -1
  265. package/dist/src/harness/hitl/index.d.ts +6 -4
  266. package/dist/src/harness/hitl/index.js +1 -1
  267. package/dist/src/harness/hitl/intake.d.ts +3 -3
  268. package/dist/src/harness/hitl/intake.js +1 -1
  269. package/dist/src/harness/input-extraction.d.ts +4 -1
  270. package/dist/src/harness/input-extraction.js +1 -1
  271. package/dist/src/harness/input-request-resolution.d.ts +15 -0
  272. package/dist/src/harness/input-request-resolution.js +1 -1
  273. package/dist/src/harness/model-call/call.d.ts +4 -6
  274. package/dist/src/harness/model-call/call.js +1 -1
  275. package/dist/src/harness/model-call/errors.d.ts +5 -6
  276. package/dist/src/harness/model-call/errors.js +1 -1
  277. package/dist/src/harness/model-call/recovery.d.ts +4 -3
  278. package/dist/src/harness/model-call/request.d.ts +5 -3
  279. package/dist/src/harness/model-call/request.js +1 -1
  280. package/dist/src/harness/model-call/response.d.ts +2 -1
  281. package/dist/src/harness/model-call/response.js +1 -1
  282. package/dist/src/harness/model-call/run.d.ts +5 -3
  283. package/dist/src/harness/model-call/run.js +1 -1
  284. package/dist/src/harness/model-call/tools.d.ts +12 -21
  285. package/dist/src/harness/model-call/tools.js +1 -1
  286. package/dist/src/harness/model-profile.d.ts +15 -3
  287. package/dist/src/harness/model-profile.js +1 -1
  288. package/dist/src/harness/prompt-cache.d.ts +6 -3
  289. package/dist/src/harness/prompt-cache.js +1 -1
  290. package/dist/src/harness/provider-safety.d.ts +2 -1
  291. package/dist/src/harness/provider-safety.js +1 -1
  292. package/dist/src/harness/provider-tools.d.ts +7 -6
  293. package/dist/src/harness/provider-tools.js +1 -1
  294. package/dist/src/harness/session-machine/commit.js +1 -1
  295. package/dist/src/harness/session-machine/transitions.d.ts +8 -3
  296. package/dist/src/harness/session-machine/transitions.js +1 -1
  297. package/dist/src/harness/step/after-model.js +1 -1
  298. package/dist/src/harness/step/context.js +1 -1
  299. package/dist/src/harness/step-hooks.d.ts +4 -6
  300. package/dist/src/harness/step-hooks.js +1 -1
  301. package/dist/src/harness/tool-call-input-errors.d.ts +2 -2
  302. package/dist/src/harness/tool-call-io.d.ts +3 -0
  303. package/dist/src/harness/tool-call-io.js +1 -1
  304. package/dist/src/harness/tools.d.ts +22 -19
  305. package/dist/src/harness/tools.js +1 -1
  306. package/dist/src/harness/types.d.ts +14 -0
  307. package/dist/src/instrumentation/lifecycle.d.ts +0 -1
  308. package/dist/src/instrumentation/native-events.js +1 -1
  309. package/dist/src/instrumentation/runtime.d.ts +2 -1
  310. package/dist/src/internal/application/compiled-artifacts.js +4 -4
  311. package/dist/src/internal/application/package.d.ts +1 -1
  312. package/dist/src/internal/application/package.js +1 -1
  313. package/dist/src/internal/application/stamped-package-version.d.ts +5 -0
  314. package/dist/src/internal/application/stamped-package-version.js +1 -0
  315. package/dist/src/internal/authored-definition/core.d.ts +3 -0
  316. package/dist/src/internal/authored-definition/core.js +1 -1
  317. package/dist/src/internal/authored-definition/schedule-collection.js +1 -1
  318. package/dist/src/internal/authored-definition/schema-backed.d.ts +2 -2
  319. package/dist/src/internal/authored-definition/schema-backed.js +1 -1
  320. package/dist/src/internal/authored-module.d.ts +2 -1
  321. package/dist/src/internal/authored-module.js +1 -1
  322. package/dist/src/internal/helpers/markdown.js +1 -1
  323. package/dist/src/internal/mcp/skills.js +1 -1
  324. package/dist/src/internal/model-auth/available-models.js +1 -1
  325. package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
  326. package/dist/src/internal/nitro/host/dev-host-fingerprint.js +1 -1
  327. package/dist/src/internal/nitro/host/local-schedules-runtime-plugin.d.ts +5 -0
  328. package/dist/src/internal/nitro/host/local-schedules-runtime-plugin.js +1 -0
  329. package/dist/src/internal/nitro/routes/schedule-collection-consumer.d.ts +6 -0
  330. package/dist/src/internal/nitro/routes/schedule-collection-consumer.js +1 -1
  331. package/dist/src/internal/schedules/consumer-route.d.ts +2 -0
  332. package/dist/src/internal/schedules/consumer-route.js +1 -1
  333. package/dist/src/internal/schedules/dev-environment.d.ts +2 -0
  334. package/dist/src/internal/schedules/dev-environment.js +1 -0
  335. package/dist/src/internal/vercel-agent-summary.d.ts +2 -2
  336. package/dist/src/internal/workflow/development-run-unavailable-error.d.ts +15 -0
  337. package/dist/src/internal/workflow/development-run-unavailable-error.js +1 -0
  338. package/dist/src/internal/workflow/development-world-server.js +1 -1
  339. package/dist/src/internal/workflow/vercel-world-defaults.d.ts +1 -1
  340. package/dist/src/internal/workflow/vercel-world-defaults.js +1 -1
  341. package/dist/src/internal/workflow-bundle/workflow-builders.js +1 -1
  342. package/dist/src/protocol/catalog-tools.d.ts +12 -0
  343. package/dist/src/protocol/catalog-tools.js +1 -0
  344. package/dist/src/protocol/message-version.js +1 -1
  345. package/dist/src/protocol/message.d.ts +15 -1
  346. package/dist/src/protocol/message.js +1 -1
  347. package/dist/src/protocol/remote-agent-protocol.d.ts +2 -0
  348. package/dist/src/protocol/remote-agent-protocol.js +1 -1
  349. package/dist/src/protocol/reply-tool.d.ts +2 -0
  350. package/dist/src/protocol/reply-tool.js +1 -0
  351. package/dist/src/protocol/runtime-tools.d.ts +6 -0
  352. package/dist/src/protocol/runtime-tools.js +1 -0
  353. package/dist/src/protocol/session-projection.js +1 -1
  354. package/dist/src/protocol/task-tools.d.ts +4 -4
  355. package/dist/src/protocol/task-tools.js +1 -1
  356. package/dist/src/public/channels/chat-sdk/chatSdkChannel.js +1 -1
  357. package/dist/src/public/channels/index.d.ts +1 -1
  358. package/dist/src/public/channels/index.js +1 -1
  359. package/dist/src/public/channels/linear/defaults.js +2 -2
  360. package/dist/src/public/channels/slack/action-status.d.ts +0 -9
  361. package/dist/src/public/channels/slack/action-status.js +1 -1
  362. package/dist/src/public/channels/slack/defaults.js +2 -2
  363. package/dist/src/public/channels/slack/task-card.d.ts +1 -1
  364. package/dist/src/public/context/index.d.ts +1 -1
  365. package/dist/src/public/definitions/callback-context.d.ts +1 -1
  366. package/dist/src/public/definitions/channel.d.ts +1 -0
  367. package/dist/src/public/definitions/channel.js +1 -1
  368. package/dist/src/public/definitions/connections/mcp.d.ts +4 -4
  369. package/dist/src/public/definitions/connections/openapi.d.ts +6 -7
  370. package/dist/src/public/definitions/remote-agent.d.ts +6 -3
  371. package/dist/src/public/definitions/workspace-agent.d.ts +6 -3
  372. package/dist/src/public/experimental/schedules/index.d.ts +1 -1
  373. package/dist/src/public/models/openai/chatgpt/model.js +1 -1
  374. package/dist/src/public/models/openai/chatgpt/transport.js +1 -1
  375. package/dist/src/public/schedules/providers/in-memory.js +1 -1
  376. package/dist/src/public/schedules/providers/vercel.js +1 -1
  377. package/dist/src/public/schedules/subscription.d.ts +36 -16
  378. package/dist/src/public/tanstack/index.d.ts +40 -0
  379. package/dist/src/public/tanstack/index.js +1 -0
  380. package/dist/src/public/tools/web-search.d.ts +1 -1
  381. package/dist/src/runtime/agent/bootstrap.d.ts +2 -1
  382. package/dist/src/runtime/agent/bootstrap.js +1 -1
  383. package/dist/src/runtime/agent/mock-model-adapter.js +2 -2
  384. package/dist/src/runtime/agent/mock-model-fixtures.js +2 -2
  385. package/dist/src/runtime/agent/mock-model-skill-selection.d.ts +2 -0
  386. package/dist/src/runtime/agent/mock-model-skill-selection.js +2 -2
  387. package/dist/src/runtime/agent/mock-structured-output.d.ts +1 -1
  388. package/dist/src/runtime/agent/resolve-model.js +1 -1
  389. package/dist/src/runtime/connections/mcp-client.js +1 -1
  390. package/dist/src/runtime/connections/registry.js +1 -1
  391. package/dist/src/runtime/connections/scoped-authorization.js +1 -1
  392. package/dist/src/runtime/connections/tool-result.d.ts +2 -2
  393. package/dist/src/runtime/resolve-agent-graph.js +1 -1
  394. package/dist/src/runtime/resolve-agent.js +1 -1
  395. package/dist/src/runtime/resolve-tool.js +1 -1
  396. package/dist/src/runtime/schedules/collection-client.d.ts +12 -3
  397. package/dist/src/runtime/schedules/collection-client.js +1 -1
  398. package/dist/src/runtime/subagents/dynamic-agent-config.d.ts +2 -2
  399. package/dist/src/runtime/subagents/dynamic-remote-agent-config.d.ts +2 -1
  400. package/dist/src/runtime/subagents/dynamic-remote-agent-config.js +1 -1
  401. package/dist/src/runtime/subagents/registry.d.ts +2 -1
  402. package/dist/src/runtime/subagents/registry.js +1 -1
  403. package/dist/src/runtime/tools/registry.d.ts +2 -0
  404. package/dist/src/runtime/tools/registry.js +1 -1
  405. package/dist/src/runtime/types.d.ts +3 -3
  406. package/dist/src/setup/connection-connector.js +1 -2
  407. package/dist/src/setup/flows/model-login.js +1 -1
  408. package/dist/src/setup/index.d.ts +1 -1
  409. package/dist/src/setup/index.js +1 -1
  410. package/dist/src/setup/integrations/slack/setup.d.ts +23 -3
  411. package/dist/src/setup/integrations/slack/setup.js +1 -1
  412. package/dist/src/setup/integrations/web/framework.d.ts +8 -0
  413. package/dist/src/setup/integrations/web/framework.js +1 -0
  414. package/dist/src/setup/integrations/web/hosting.d.ts +43 -0
  415. package/dist/src/setup/integrations/web/hosting.js +15 -0
  416. package/dist/src/setup/integrations/web/setup.d.ts +6 -10
  417. package/dist/src/setup/integrations/web/setup.js +23 -17
  418. package/dist/src/setup/primitives/process-output.d.ts +5 -0
  419. package/dist/src/setup/primitives/process-output.js +2 -1
  420. package/dist/src/setup/scaffold/create/project.js +1 -1
  421. package/dist/src/setup/scaffold/create/web-template.d.ts +7 -3
  422. package/dist/src/setup/scaffold/create/web-template.js +40 -3
  423. package/dist/src/setup/scaffold/update/channels.js +1 -1
  424. package/dist/src/setup/scaffold/update/update-slack-channel.d.ts +17 -0
  425. package/dist/src/setup/scaffold/update/update-slack-channel.js +1 -1
  426. package/dist/src/setup/slack-connect-create.d.ts +10 -2
  427. package/dist/src/setup/slack-connect-create.js +1 -1
  428. package/dist/src/setup/slack-connect-lifecycle.d.ts +92 -44
  429. package/dist/src/setup/slack-connect-lifecycle.js +1 -1
  430. package/dist/src/setup/slack-connect.d.ts +30 -11
  431. package/dist/src/setup/slack-connect.js +1 -1
  432. package/dist/src/setup/slack-setup-plan.d.ts +72 -0
  433. package/dist/src/setup/slack-setup-plan.js +1 -0
  434. package/dist/src/setup/slackbot.d.ts +75 -35
  435. package/dist/src/setup/slackbot.js +2 -1
  436. package/dist/src/setup/vercel-project-framework.js +1 -1
  437. package/dist/src/shared/action-label.d.ts +10 -0
  438. package/dist/src/shared/action-label.js +1 -0
  439. package/dist/src/shared/action-request-name.d.ts +3 -1
  440. package/dist/src/shared/action-request-name.js +1 -1
  441. package/dist/src/shared/action-types.d.ts +7 -8
  442. package/dist/src/shared/action-types.js +1 -1
  443. package/dist/src/shared/agent-definition.d.ts +36 -3
  444. package/dist/src/shared/agent-definition.js +1 -1
  445. package/dist/src/shared/chatgpt-model.d.ts +8 -0
  446. package/dist/src/shared/chatgpt-model.js +1 -1
  447. package/dist/src/shared/development-env-files.d.ts +4 -0
  448. package/dist/src/shared/development-env-files.js +1 -0
  449. package/dist/src/shared/input.d.ts +0 -1
  450. package/dist/src/shared/map-with-concurrency.d.ts +2 -0
  451. package/dist/src/shared/map-with-concurrency.js +1 -0
  452. package/dist/src/shared/skill-definition.d.ts +6 -0
  453. package/dist/src/shared/skill-package.d.ts +1 -0
  454. package/dist/src/shared/skill-package.js +1 -1
  455. package/dist/src/shared/web-search.d.ts +15 -2
  456. package/dist/src/shared/web-search.js +1 -1
  457. package/dist/src/subagents/callback-route.js +1 -1
  458. package/dist/src/svelte/index.js +1 -1
  459. package/dist/src/svelte/use-eve-agent.js +1 -1
  460. package/dist/src/tool-stubs/execute.d.ts +0 -3
  461. package/dist/src/tool-stubs/execute.js +1 -1
  462. package/dist/src/tool-stubs/rules.js +1 -1
  463. package/dist/src/tool-stubs/validate-targets.js +1 -1
  464. package/dist/src/tools/behavior.d.ts +3 -6
  465. package/dist/src/tools/definition.d.ts +5 -0
  466. package/dist/src/tools/dynamic.d.ts +5 -2
  467. package/dist/src/tools/provided/ask-question-workflow.js +1 -1
  468. package/dist/src/tools/provided/sleep-workflow.js +1 -1
  469. package/dist/src/tools/provided/task-cancel.d.ts +1 -1
  470. package/dist/src/tools/provided/task-wait.d.ts +1 -1
  471. package/dist/src/tools/provided/web-search.d.ts +20 -7
  472. package/dist/src/tools/provided/web-search.js +1 -1
  473. package/dist/src/tools/schema.d.ts +5 -0
  474. package/dist/src/tools/schema.js +1 -1
  475. package/dist/src/{runtime/connections/tool-signature.d.ts → tools/signature.d.ts} +2 -2
  476. package/dist/src/tools/workflow-definition.d.ts +1 -1
  477. package/dist/src/tracing/agent-approval-instrumentation.js +1 -1
  478. package/dist/src/tracing/agent-otel-provider.js +2 -2
  479. package/dist/src/tracing/agent-otel-runtime-context.d.ts +1 -0
  480. package/dist/src/tracing/agent-otel-runtime-context.js +1 -1
  481. package/dist/src/tracing/agent-otel-turn-state.d.ts +6 -0
  482. package/dist/src/tracing/agent-otel-turn-state.js +1 -0
  483. package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
  484. package/dist/src/tracing/agent-trace-context-codec.js +1 -1
  485. package/dist/src/tracing/agent-trace-state.d.ts +4 -1
  486. package/dist/src/vue/index.js +1 -1
  487. package/dist/src/vue/use-eve-agent.js +1 -1
  488. package/docs/agent-config.md +39 -8
  489. package/docs/channels/chat-sdk.mdx +1 -1
  490. package/docs/channels/custom.mdx +26 -0
  491. package/docs/channels/eve.mdx +8 -5
  492. package/docs/channels/slack.mdx +32 -82
  493. package/docs/code-extension.mdx +28 -7
  494. package/docs/concepts/built-in-tools.md +60 -43
  495. package/docs/concepts/context-control.md +1 -1
  496. package/docs/concepts/execution-model-and-durability.mdx +101 -1
  497. package/docs/concepts/project-structure.mdx +2 -2
  498. package/docs/concepts/sessions-runs-and-streaming.md +40 -38
  499. package/docs/connections/mcp.mdx +5 -5
  500. package/docs/connections/openapi.mdx +1 -1
  501. package/docs/connections/overview.mdx +4 -2
  502. package/docs/evals/assertions.mdx +5 -3
  503. package/docs/evals/reporters.mdx +3 -1
  504. package/docs/evals/tool-stubs.mdx +3 -1
  505. package/docs/extensions.md +2 -0
  506. package/docs/guides/client/messages.mdx +10 -1
  507. package/docs/guides/deployment/overview.md +2 -2
  508. package/docs/guides/dev-tui.md +4 -2
  509. package/docs/guides/dynamic-capabilities.md +14 -4
  510. package/docs/guides/frontend/meta.json +9 -1
  511. package/docs/guides/frontend/nextjs.mdx +1 -1
  512. package/docs/guides/frontend/overview.mdx +10 -9
  513. package/docs/guides/frontend/tanstack.mdx +201 -0
  514. package/docs/guides/remote-agents.md +10 -3
  515. package/docs/guides/session-context.md +1 -0
  516. package/docs/install-integrations.mdx +1 -1
  517. package/docs/instructions.mdx +6 -6
  518. package/docs/reference/cli.md +2 -2
  519. package/docs/reference/typescript-api.md +4 -4
  520. package/docs/skills.mdx +19 -4
  521. package/docs/subagents/index.mdx +5 -3
  522. package/docs/tools/human-in-the-loop.md +2 -0
  523. package/docs/tools/overview.mdx +22 -1
  524. package/docs/tools/tasks-upgrade.md +1 -1
  525. package/docs/tools/tasks.md +32 -32
  526. package/docs/tools/workflows.mdx +6 -6
  527. package/docs/tutorial/ship-it.mdx +1 -1
  528. package/docs/tutorial/team-playbooks.mdx +2 -2
  529. package/package.json +28 -6
  530. package/dist/src/execution/connection-announcement.d.ts +0 -7
  531. package/dist/src/execution/connection-announcement.js +0 -4
  532. package/dist/src/execution/tools/connection-approval.d.ts +0 -25
  533. package/dist/src/execution/tools/connection-approval.js +0 -1
  534. package/dist/src/execution/tools/connection-search-rank.d.ts +0 -21
  535. package/dist/src/execution/tools/connection-search-rank.js +0 -1
  536. package/dist/src/execution/tools/connection-target.d.ts +0 -18
  537. package/dist/src/execution/tools/connection-target.js +0 -1
  538. package/dist/src/execution/tools/connection-tools.d.ts +0 -4
  539. package/dist/src/execution/tools/connection-tools.js +0 -2
  540. package/dist/src/execution/tools/load-skill.d.ts +0 -10
  541. package/dist/src/execution/tools/load-skill.js +0 -1
  542. package/dist/src/extensions/code/extension/lib/github-shell.js +0 -1
  543. package/dist/src/extensions/code/extension/skills/pr/SKILL.md +0 -53
  544. package/dist/src/extensions/code/extension/subagents/worker/tools/load_skill.d.ts +0 -2
  545. package/dist/src/extensions/code/extension/subagents/worker/tools/load_skill.js +0 -1
  546. package/dist/src/harness/advertised-tools.d.ts +0 -26
  547. package/dist/src/harness/advertised-tools.js +0 -1
  548. package/dist/src/harness/nested-actions.d.ts +0 -23
  549. package/dist/src/harness/nested-actions.js +0 -1
  550. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/cli-config.js +0 -1
  551. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/cred-storage.js +0 -1
  552. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/index.js +0 -1
  553. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/schema.js +0 -1
  554. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/schema.zod.js +0 -1
  555. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/types.js +0 -1
  556. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/envpath.js +0 -1
  557. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/errors.js +0 -2
  558. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/errutils.js +0 -1
  559. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/exec.js +0 -1
  560. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/fsutils.js +0 -1
  561. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/index.js +0 -1
  562. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/lookup.js +0 -1
  563. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/safety.js +0 -1
  564. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/auth-errors.js +0 -1
  565. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/exchange-vercel-oidc-token.js +0 -1
  566. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/get-context.js +0 -1
  567. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/get-vercel-oidc-token-sync.js +0 -1
  568. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/get-vercel-oidc-token-with-refresh.js +0 -2
  569. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/index.js +0 -1
  570. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/oauth.js +0 -1
  571. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/token-error.js +0 -1
  572. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/token-io.js +0 -1
  573. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/token-util.js +0 -2
  574. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/token.js +0 -1
  575. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/verify-vercel-oidc-token.js +0 -1
  576. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/version.js +0 -1
  577. package/dist/src/node_modules/.pnpm/@vercel_queue@0.5.1_@opentelemetry_api@1.9.1/node_modules/@vercel/queue/dist/index.js +0 -36
  578. package/dist/src/node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js +0 -1
  579. package/dist/src/node_modules/.pnpm/brace-expansion@5.0.12/node_modules/brace-expansion/dist/esm/index.js +0 -1
  580. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/index.js +0 -1
  581. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/enoent.js +0 -1
  582. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/parse.js +0 -1
  583. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/escape.js +0 -1
  584. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/readShebang.js +0 -1
  585. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/resolveCommand.js +0 -1
  586. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/index.js +0 -1
  587. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/command.js +0 -1
  588. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/error.js +0 -2
  589. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/kill.js +0 -1
  590. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/promise.js +0 -1
  591. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/stdio.js +0 -1
  592. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/stream.js +0 -1
  593. package/dist/src/node_modules/.pnpm/get-stream@6.0.1/node_modules/get-stream/buffer-stream.js +0 -1
  594. package/dist/src/node_modules/.pnpm/get-stream@6.0.1/node_modules/get-stream/index.js +0 -1
  595. package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/core.js +0 -1
  596. package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/main.js +0 -1
  597. package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/realtime.js +0 -1
  598. package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/signals.js +0 -1
  599. package/dist/src/node_modules/.pnpm/is-stream@2.0.1/node_modules/is-stream/index.js +0 -1
  600. package/dist/src/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/index.js +0 -1
  601. package/dist/src/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/mode.js +0 -1
  602. package/dist/src/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/windows.js +0 -1
  603. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/index.js +0 -1
  604. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/compact/decrypt.js +0 -1
  605. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/compact/encrypt.js +0 -1
  606. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/flattened/decrypt.js +0 -1
  607. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/flattened/encrypt.js +0 -1
  608. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/general/decrypt.js +0 -1
  609. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/general/encrypt.js +0 -1
  610. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwk/embedded.js +0 -1
  611. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwk/thumbprint.js +0 -1
  612. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwks/local.js +0 -1
  613. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwks/remote.js +0 -1
  614. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/compact/sign.js +0 -1
  615. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/compact/verify.js +0 -1
  616. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/flattened/sign.js +0 -1
  617. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/flattened/verify.js +0 -1
  618. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/general/sign.js +0 -1
  619. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/general/verify.js +0 -1
  620. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/decrypt.js +0 -1
  621. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/encrypt.js +0 -1
  622. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/produce.js +0 -1
  623. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/sign.js +0 -1
  624. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/unsecured.js +0 -1
  625. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/verify.js +0 -1
  626. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/export.js +0 -1
  627. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/generate_key_pair.js +0 -1
  628. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/generate_secret.js +0 -1
  629. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/import.js +0 -1
  630. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/aesgcmkw.js +0 -1
  631. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/buffer_utils.js +0 -1
  632. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/cek.js +0 -1
  633. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/check_iv_length.js +0 -1
  634. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/check_key_type.js +0 -1
  635. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/check_p2s.js +0 -1
  636. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/crypto_key.js +0 -1
  637. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/decrypt_key_management.js +0 -1
  638. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/encrypt_key_management.js +0 -1
  639. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/epoch.js +0 -1
  640. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/invalid_key_input.js +0 -1
  641. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/is_disjoint.js +0 -1
  642. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/is_jwk.js +0 -1
  643. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/is_object.js +0 -1
  644. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/iv.js +0 -1
  645. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/jwt_claims_set.js +0 -1
  646. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/private_symbols.js +0 -1
  647. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/secs.js +0 -1
  648. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/validate_algorithms.js +0 -1
  649. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/validate_crit.js +0 -1
  650. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/aeskw.js +0 -1
  651. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/asn1.js +0 -1
  652. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/base64url.js +0 -1
  653. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/cbc_tag.js +0 -1
  654. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/check_cek_length.js +0 -1
  655. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/check_key_length.js +0 -1
  656. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/ciphers.js +0 -1
  657. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/decrypt.js +0 -1
  658. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/digest.js +0 -1
  659. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/dsa_digest.js +0 -1
  660. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/ecdhes.js +0 -1
  661. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/encrypt.js +0 -1
  662. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/fetch_jwks.js +0 -1
  663. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/generate.js +0 -1
  664. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/get_named_curve.js +0 -1
  665. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/get_sign_verify_key.js +0 -1
  666. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/hmac_digest.js +0 -1
  667. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/is_key_like.js +0 -1
  668. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/is_key_object.js +0 -1
  669. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/jwk_to_key.js +0 -1
  670. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/key_to_jwk.js +0 -1
  671. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/node_key.js +0 -1
  672. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/normalize_key.js +0 -1
  673. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/pbes2kw.js +0 -1
  674. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/random.js +0 -1
  675. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/rsaes.js +0 -1
  676. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/runtime.js +0 -1
  677. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/sign.js +0 -1
  678. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/timing_safe_equal.js +0 -1
  679. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/verify.js +0 -1
  680. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/webcrypto.js +0 -1
  681. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/base64url.js +0 -1
  682. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/decode_jwt.js +0 -1
  683. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/decode_protected_header.js +0 -1
  684. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/errors.js +0 -1
  685. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/runtime.js +0 -1
  686. package/dist/src/node_modules/.pnpm/merge-stream@2.0.0/node_modules/merge-stream/index.js +0 -1
  687. package/dist/src/node_modules/.pnpm/mimic-fn@2.1.0/node_modules/mimic-fn/index.js +0 -1
  688. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/assert-valid-pattern.js +0 -1
  689. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/ast.js +0 -1
  690. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/brace-expressions.js +0 -1
  691. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/escape.js +0 -1
  692. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/index.js +0 -1
  693. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/unescape.js +0 -1
  694. package/dist/src/node_modules/.pnpm/mixpart@0.0.6/node_modules/mixpart/dist/index.js +0 -7
  695. package/dist/src/node_modules/.pnpm/npm-run-path@4.0.1/node_modules/npm-run-path/index.js +0 -1
  696. package/dist/src/node_modules/.pnpm/onetime@5.1.2/node_modules/onetime/index.js +0 -1
  697. package/dist/src/node_modules/.pnpm/os-paths@4.4.0/node_modules/os-paths/src/lib/index.js +0 -1
  698. package/dist/src/node_modules/.pnpm/path-key@3.1.1/node_modules/path-key/index.js +0 -1
  699. package/dist/src/node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js +0 -1
  700. package/dist/src/node_modules/.pnpm/shebang-command@2.0.0/node_modules/shebang-command/index.js +0 -1
  701. package/dist/src/node_modules/.pnpm/shebang-regex@3.0.0/node_modules/shebang-regex/index.js +0 -1
  702. package/dist/src/node_modules/.pnpm/signal-exit@3.0.7/node_modules/signal-exit/index.js +0 -1
  703. package/dist/src/node_modules/.pnpm/signal-exit@3.0.7/node_modules/signal-exit/signals.js +0 -1
  704. package/dist/src/node_modules/.pnpm/strip-final-newline@2.0.0/node_modules/strip-final-newline/index.js +0 -2
  705. package/dist/src/node_modules/.pnpm/which@2.0.2/node_modules/which/which.js +0 -1
  706. package/dist/src/node_modules/.pnpm/xdg-app-paths@5.5.1/node_modules/xdg-app-paths/src/lib/index.js +0 -1
  707. package/dist/src/node_modules/.pnpm/xdg-portable@7.3.0/node_modules/xdg-portable/src/lib/index.js +0 -1
  708. package/dist/src/public/tools/load-skill.d.ts +0 -3
  709. package/dist/src/public/tools/load-skill.js +0 -1
  710. package/dist/src/runtime/skills/fragment-context.d.ts +0 -4
  711. package/dist/src/runtime/skills/fragment-context.js +0 -1
  712. package/dist/src/tools/framework/connection-tools.d.ts +0 -3
  713. package/dist/src/tools/framework/connection-tools.js +0 -1
  714. package/dist/src/tools/provided/load-skill.d.ts +0 -2
  715. package/dist/src/tools/provided/load-skill.js +0 -1
  716. /package/dist/src/extensions/{code → git}/extension/lib/github-shell-schema.d.ts +0 -0
  717. /package/dist/src/extensions/{code → git}/extension/lib/github-shell-schema.js +0 -0
  718. /package/dist/src/extensions/{code → git}/extension/lib/signed-commit.d.ts +0 -0
  719. /package/dist/src/extensions/{code → git}/extension/lib/signed-commit.js +0 -0
  720. /package/dist/src/{runtime/connections/tool-signature.js → tools/signature.js} +0 -0
@@ -49,7 +49,8 @@ export function AgentChat({
49
49
  resume: sessionId !== undefined,
50
50
  onSessionChange(session) {
51
51
  if (sessionId === undefined && session !== undefined) {
52
- // Next patches window.history to navigate, which would detach the active stream.
52
+ // Framework routers (Next.js, TanStack Router) patch window.history; navigating
53
+ // through them would remount this route and detach the active stream.
53
54
  History.prototype.replaceState.call(
54
55
  window.history,
55
56
  window.history.state,
@@ -464,7 +465,7 @@ function AgentMessagePart({
464
465
  <Tool>
465
466
  <ToolHeader
466
467
  state={part.state}
467
- title={part.toolName}
468
+ title={part.toolMetadata?.eve?.label ?? part.toolName}
468
469
  toolName={part.toolName}
469
470
  type="dynamic-tool"
470
471
  />
@@ -841,6 +842,10 @@ export const WEB_CHAT_AGENT: string | undefined = undefined;
841
842
  --radius-md: calc(var(--radius) - 2px);
842
843
  --radius-lg: var(--radius);
843
844
  --radius-xl: calc(var(--radius) + 4px);
845
+ }
846
+
847
+ /* Not inline: font utilities must read the variables so each host's font loader can override them. */
848
+ @theme {
844
849
  --font-sans: "Geist", "Geist Fallback", ui-sans-serif, system-ui, sans-serif;
845
850
  --font-mono: "Geist Mono", "Geist Mono Fallback", ui-monospace, monospace;
846
851
  }
@@ -6115,4 +6120,36 @@ export const auth = betterAuth({
6115
6120
  },
6116
6121
  },
6117
6122
  });
6118
- `},WEB_APP_TEMPLATE_PACKAGE_JSON={scripts:{build:`next build`,"build:eve":`eve build`,dev:`next dev`,"dev:eve":`eve dev`,start:`next start`,"start:eve":`eve start`,typecheck:`tsc --noEmit -p tsconfig.json`},dependencies:{"@radix-ui/react-use-controllable-state":`1.2.2`,"@shadcn/react":`0.3.1`,"@shikijs/core":`3.23.0`,"@shikijs/engine-javascript":`3.23.0`,"@shikijs/engine-oniguruma":`3.23.0`,"@streamdown/cjk":`1.0.3`,"@streamdown/code":`1.1.1`,"@streamdown/math":`1.0.2`,"@streamdown/mermaid":`1.0.2`,"@tailwindcss/postcss":`4.3.0`,"class-variance-authority":`0.7.1`,clsx:`2.1.1`,cmdk:`1.1.1`,"lucide-react":`1.16.0`,motion:`12.40.0`,nanoid:`5.1.11`,next:`16.3.6`,"radix-ui":`1.4.3`,react:`19.2.6`,"react-dom":`19.2.6`,shiki:`3.23.0`,streamdown:`2.5.0`,"tailwind-merge":`3.6.0`,tailwindcss:`4.3.0`,"use-stick-to-bottom":`1.1.4`,zod:`4.5.4`},devDependencies:{"@types/node":`26`,"@types/react":`19.2.15`,"@types/react-dom":`19.2.3`,typescript:`6.0.3`}};export{WEB_APP_SIGN_IN_WITH_VERCEL_TEMPLATE_FILES,WEB_APP_TEMPLATE_FILES,WEB_APP_TEMPLATE_PACKAGE_JSON,WEB_CHANNEL_TEMPLATES};
6123
+ `},WEB_APP_TANSTACK_TEMPLATE_FILES={"tsconfig.json":`{
6124
+ "$schema": "https://json.schemastore.org/tsconfig",
6125
+ "compilerOptions": {
6126
+ "target": "ES2022",
6127
+ "lib": ["dom", "dom.iterable", "esnext"],
6128
+ "skipLibCheck": true,
6129
+ "strict": true,
6130
+ "noEmit": true,
6131
+ "esModuleInterop": true,
6132
+ "module": "esnext",
6133
+ "moduleResolution": "Bundler",
6134
+ "resolveJsonModule": true,
6135
+ "isolatedModules": true,
6136
+ "jsx": "react-jsx",
6137
+ "types": ["vite/client"],
6138
+ "paths": {
6139
+ "@/*": ["./*"]
6140
+ }
6141
+ },
6142
+ "include": ["**/*.ts", "**/*.tsx"],
6143
+ "exclude": ["node_modules", ".output", ".vercel"]
6144
+ }
6145
+ `,"vite.config.ts":`import { tanstackStart } from "@tanstack/react-start/plugin/vite";
6146
+ import tailwindcss from "@tailwindcss/vite";
6147
+ import viteReact from "@vitejs/plugin-react";
6148
+ import { nitro } from "nitro/vite";
6149
+ import { defineConfig } from "vite";
6150
+
6151
+ export default defineConfig({
6152
+ resolve: { tsconfigPaths: true },
6153
+ plugins: [tailwindcss(), tanstackStart({ srcDirectory: "app" }), viteReact(), nitro()],
6154
+ });
6155
+ `},WEB_APP_TEMPLATE_PACKAGE_JSON={scripts:{build:`next build`,"build:eve":`eve build`,dev:`next dev`,"dev:eve":`eve dev`,start:`next start`,"start:eve":`eve start`,typecheck:`tsc --noEmit -p tsconfig.json`},dependencies:{"@radix-ui/react-use-controllable-state":`1.2.2`,"@shadcn/react":`0.3.1`,"@shikijs/core":`3.23.0`,"@shikijs/engine-javascript":`3.23.0`,"@shikijs/engine-oniguruma":`3.23.0`,"@streamdown/cjk":`1.0.3`,"@streamdown/code":`1.1.1`,"@streamdown/math":`1.0.2`,"@streamdown/mermaid":`1.0.2`,"@tailwindcss/postcss":`4.3.0`,"class-variance-authority":`0.7.1`,clsx:`2.1.1`,cmdk:`1.1.1`,"lucide-react":`1.16.0`,motion:`12.40.0`,nanoid:`5.1.11`,next:`16.3.6`,"radix-ui":`1.4.3`,react:`19.2.6`,"react-dom":`19.2.6`,shiki:`3.23.0`,streamdown:`2.5.0`,"tailwind-merge":`3.6.0`,tailwindcss:`4.3.0`,"use-stick-to-bottom":`1.1.4`,zod:`4.5.4`},devDependencies:{"@types/node":`26`,"@types/react":`19.2.15`,"@types/react-dom":`19.2.3`,typescript:`6.0.3`}};export{WEB_APP_SIGN_IN_WITH_VERCEL_TEMPLATE_FILES,WEB_APP_TANSTACK_TEMPLATE_FILES,WEB_APP_TEMPLATE_FILES,WEB_APP_TEMPLATE_PACKAGE_JSON,WEB_CHANNEL_TEMPLATES};
@@ -1,4 +1,4 @@
1
- import{appendEnv}from"../../append-env.js";import{pinnedNodeEngineMajor}from"../../node-engine.js";import{getSupportedModuleBaseName,matchesSupportedModuleBaseName}from"./module-files.js";import{pathExists,writeTextFile}from"../files.js";import{resolveVersionToken}from"../version-tokens.js";import{patchPackageJson}from"./package-json.js";import{applyPackageManagerWorkspaceConfiguration,isPackageManagerWorkspaceMember,patchWorkspaceRootPackageJson}from"../workspace-root.js";import{WEB_APP_SIGN_IN_WITH_VERCEL_TEMPLATE_FILES,WEB_APP_TEMPLATE_FILES,WEB_APP_TEMPLATE_PACKAGE_JSON,WEB_CHANNEL_TEMPLATES}from"../create/web-template.js";import{resolveEvePackageContract}from"../create/project.js";import{resolveWebPackageVersions}from"./web-options.js";import{readFile,readdir,unlink,writeFile}from"node:fs/promises";import{basename,join,resolve}from"node:path";const SLACK_CHANNEL_DEFAULT_ROUTE=`/eve/v1/slack`,DEFAULT_SLACK_CONNECTOR_SLUG=`my-agent`,NEXT_PACKAGE_NAME=`next`,PACKAGE_DEPENDENCY_FIELDS=[`dependencies`,`devDependencies`],WEB_CHANNEL_PATH=`agent/channels/eve.ts`,WEB_NEXT_CONFIG_PATH=`next.config.ts`,WEB_COMPETING_NEXT_CONFIG_PATHS=[`next.config.js`,`next.config.mjs`,WEB_NEXT_CONFIG_PATH,`next.config.mts`].filter(e=>e!==WEB_NEXT_CONFIG_PATH);function toSlackConnectorSlug(e){return e}function isJsonObject(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}async function readPackageJsonObject(e){if(!await pathExists(e))return;let t=JSON.parse(await readFile(e,`utf8`));return isJsonObject(t)?t:void 0}async function readDependencyVersion(e,t){let n=await readPackageJsonObject(e);if(n===void 0||!isJsonObject(n.dependencies))return;let r=n.dependencies[t];return typeof r==`string`?r:void 0}function packageJsonHasDependency(e,t){for(let n of PACKAGE_DEPENDENCY_FIELDS){let r=e[n];if(isJsonObject(r)&&typeof r[t]==`string`)return!0}return!1}async function hasPackageDependency(e,t){let n=await readPackageJsonObject(e);return n!==void 0&&packageJsonHasDependency(n,t)}const VERCEL_HOST_FRAMEWORK_PRESETS={"@sveltejs/kit":`sveltekit`,[NEXT_PACKAGE_NAME]:`nextjs`,nuxt:`nuxtjs`,nuxt3:`nuxtjs`,"nuxt-edge":`nuxtjs`,"nuxt-nightly":`nuxtjs`};async function resolveVercelHostFrameworkPreset(e){if(await pathExists(join(e,`vercel.ts`)))return`services`;let t=await readPackageJsonObject(join(e,`package.json`));if(t!==void 0){for(let[e,n]of Object.entries(VERCEL_HOST_FRAMEWORK_PRESETS))if(packageJsonHasDependency(t,e))return n}}async function hasVercelHostFramework(e){return await resolveVercelHostFrameworkPreset(e)!==void 0}async function isNextJsProject(e){return hasPackageDependency(join(e,`package.json`),NEXT_PACKAGE_NAME)}async function ensurePackageDependency(e,t,n){return!await pathExists(e)||await readDependencyVersion(e,t)===n?[]:(await patchPackageJson(e,{dependencies:{[t]:n}}),[{path:e,dependencies:[t],devDependencies:[],scripts:[]}])}function formatEveDependencySpecifier(e){return/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z-.]+)?$/.test(e)?`^${e}`:e}async function patchWebPackageJson(e,t,n,r,i,a=!0,o){let s=join(e,`package.json`);if(!await pathExists(s))return{mutations:[]};let c=resolveEvePackageContract(r.evePackage),l=pinnedNodeEngineMajor(c.nodeEngine),u={...WEB_APP_TEMPLATE_PACKAGE_JSON.dependencies,ai:resolveVersionToken(`aiPackageVersion`,r.aiPackageVersion),eve:formatEveDependencySpecifier(c.version),next:resolveVersionToken(`nextPackageVersion`,r.nextPackageVersion),react:resolveVersionToken(`reactPackageVersion`,r.reactPackageVersion),"react-dom":resolveVersionToken(`reactDomPackageVersion`,r.reactDomPackageVersion),streamdown:resolveVersionToken(`streamdownPackageVersion`,r.streamdownPackageVersion),zod:resolveVersionToken(`zodPackageVersion`,r.zodPackageVersion),...o===`sign-in-with-vercel`?{"better-auth":resolveVersionToken(`betterAuthPackageVersion`,r.betterAuthPackageVersion)}:{}},d={...WEB_APP_TEMPLATE_PACKAGE_JSON.devDependencies,"@types/node":l,"@types/react":resolveVersionToken(`typesReactPackageVersion`,r.typesReactPackageVersion),"@types/react-dom":resolveVersionToken(`typesReactDomPackageVersion`,r.typesReactDomPackageVersion),typescript:`6.0.3`},f=WEB_APP_TEMPLATE_PACKAGE_JSON.scripts,p=isPackageManagerWorkspaceMember(t,n),m={scripts:f};a&&(m.dependencies=u,m.devDependencies=d),p||(m.nodeEngineRequirement=c.nodeEngine);let h=await patchPackageJson(s,m),g=(await patchWorkspaceRootPackageJson(t,n,{nodeEngineRequirement:c.nodeEngine,onWorkspaceRootMutation:i})).nodeEngineOverride??h.nodeEngineOverride;return{mutations:[{path:s,dependencies:a?Object.keys(u):[],devDependencies:a?Object.keys(d):[],scripts:Object.keys(f)}],nodeEngineOverride:g}}function normalizeSlackConnectorSlug(e){return toSlackConnectorSlug((e.trim().replace(/^@/,``).split(`/`).at(-1)??``).toLowerCase().replace(/[^a-z0-9_-]+/g,`-`).replace(/^[^a-z0-9]+/,``).replace(/[^a-z0-9]+$/,``).slice(0,100).replace(/[^a-z0-9]+$/,``)||`my-agent`)}async function deriveSlackConnectorSlug(e,t){if(t!==void 0&&t.length>0&&t!==`.`)return normalizeSlackConnectorSlug(t);try{let t=await readFile(join(e,`package.json`),`utf8`),n=JSON.parse(t);if(typeof n.name==`string`&&n.name.length>0)return normalizeSlackConnectorSlug(n.name)}catch{}return normalizeSlackConnectorSlug(basename(resolve(e))||`my-agent`)}function buildSlackConnectTemplate(e){if(!e.startsWith(`slack/`)||e.length===6)throw Error(`Invalid Slack connector UID "${e}".`);return`import { connectSlackCredentials } from "@vercel/connect/eve";
1
+ import{appendEnv}from"../../append-env.js";import{pinnedNodeEngineMajor}from"../../node-engine.js";import{getSupportedModuleBaseName,matchesSupportedModuleBaseName}from"./module-files.js";import{pathExists,writeTextFile}from"../files.js";import{resolveVersionToken}from"../version-tokens.js";import{patchPackageJson}from"./package-json.js";import{applyPackageManagerWorkspaceConfiguration,isPackageManagerWorkspaceMember,patchWorkspaceRootPackageJson}from"../workspace-root.js";import{WEB_APP_SIGN_IN_WITH_VERCEL_TEMPLATE_FILES,WEB_APP_TEMPLATE_FILES,WEB_APP_TEMPLATE_PACKAGE_JSON,WEB_CHANNEL_TEMPLATES}from"../create/web-template.js";import{resolveEvePackageContract}from"../create/project.js";import{resolveWebPackageVersions}from"./web-options.js";import{readFile,readdir,unlink,writeFile}from"node:fs/promises";import{basename,join,resolve}from"node:path";const SLACK_CHANNEL_DEFAULT_ROUTE=`/eve/v1/slack`,DEFAULT_SLACK_CONNECTOR_SLUG=`my-agent`,NEXT_PACKAGE_NAME=`next`,PACKAGE_DEPENDENCY_FIELDS=[`dependencies`,`devDependencies`],WEB_CHANNEL_PATH=`agent/channels/eve.ts`,WEB_NEXT_CONFIG_PATH=`next.config.ts`,WEB_COMPETING_NEXT_CONFIG_PATHS=[`next.config.js`,`next.config.mjs`,WEB_NEXT_CONFIG_PATH,`next.config.mts`].filter(e=>e!==WEB_NEXT_CONFIG_PATH);function toSlackConnectorSlug(e){return e}function isJsonObject(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}async function readPackageJsonObject(e){if(!await pathExists(e))return;let t=JSON.parse(await readFile(e,`utf8`));return isJsonObject(t)?t:void 0}async function readDependencyVersion(e,t){let n=await readPackageJsonObject(e);if(n===void 0||!isJsonObject(n.dependencies))return;let r=n.dependencies[t];return typeof r==`string`?r:void 0}function packageJsonHasDependency(e,t){for(let n of PACKAGE_DEPENDENCY_FIELDS){let r=e[n];if(isJsonObject(r)&&typeof r[t]==`string`)return!0}return!1}async function hasPackageDependency(e,t){let n=await readPackageJsonObject(e);return n!==void 0&&packageJsonHasDependency(n,t)}const VERCEL_HOST_FRAMEWORK_PRESETS={"@sveltejs/kit":`sveltekit`,"@tanstack/react-start":`tanstack-start`,"@tanstack/solid-start":`tanstack-start`,[NEXT_PACKAGE_NAME]:`nextjs`,nuxt:`nuxtjs`,nuxt3:`nuxtjs`,"nuxt-edge":`nuxtjs`,"nuxt-nightly":`nuxtjs`};async function resolveVercelHostFrameworkPreset(e){if(await pathExists(join(e,`vercel.ts`)))return`services`;let t=await readPackageJsonObject(join(e,`package.json`));if(t!==void 0){for(let[e,n]of Object.entries(VERCEL_HOST_FRAMEWORK_PRESETS))if(packageJsonHasDependency(t,e))return n}}async function hasVercelHostFramework(e){return await resolveVercelHostFrameworkPreset(e)!==void 0}async function isNextJsProject(e){return hasPackageDependency(join(e,`package.json`),NEXT_PACKAGE_NAME)}async function ensurePackageDependency(e,t,n){return!await pathExists(e)||await readDependencyVersion(e,t)===n?[]:(await patchPackageJson(e,{dependencies:{[t]:n}}),[{path:e,dependencies:[t],devDependencies:[],scripts:[]}])}function formatEveDependencySpecifier(e){return/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z-.]+)?$/.test(e)?`^${e}`:e}async function patchWebPackageJson(e,t,n,r,i,a=!0,o){let s=join(e,`package.json`);if(!await pathExists(s))return{mutations:[]};let c=resolveEvePackageContract(r.evePackage),l=pinnedNodeEngineMajor(c.nodeEngine),u={...WEB_APP_TEMPLATE_PACKAGE_JSON.dependencies,ai:resolveVersionToken(`aiPackageVersion`,r.aiPackageVersion),eve:formatEveDependencySpecifier(c.version),next:resolveVersionToken(`nextPackageVersion`,r.nextPackageVersion),react:resolveVersionToken(`reactPackageVersion`,r.reactPackageVersion),"react-dom":resolveVersionToken(`reactDomPackageVersion`,r.reactDomPackageVersion),streamdown:resolveVersionToken(`streamdownPackageVersion`,r.streamdownPackageVersion),zod:resolveVersionToken(`zodPackageVersion`,r.zodPackageVersion),...o===`sign-in-with-vercel`?{"better-auth":resolveVersionToken(`betterAuthPackageVersion`,r.betterAuthPackageVersion)}:{}},d={...WEB_APP_TEMPLATE_PACKAGE_JSON.devDependencies,"@types/node":l,"@types/react":resolveVersionToken(`typesReactPackageVersion`,r.typesReactPackageVersion),"@types/react-dom":resolveVersionToken(`typesReactDomPackageVersion`,r.typesReactDomPackageVersion),typescript:`6.0.3`},f=WEB_APP_TEMPLATE_PACKAGE_JSON.scripts,p=isPackageManagerWorkspaceMember(t,n),m={scripts:f};a&&(m.dependencies=u,m.devDependencies=d),p||(m.nodeEngineRequirement=c.nodeEngine);let h=await patchPackageJson(s,m),g=(await patchWorkspaceRootPackageJson(t,n,{nodeEngineRequirement:c.nodeEngine,onWorkspaceRootMutation:i})).nodeEngineOverride??h.nodeEngineOverride;return{mutations:[{path:s,dependencies:a?Object.keys(u):[],devDependencies:a?Object.keys(d):[],scripts:Object.keys(f)}],nodeEngineOverride:g}}function normalizeSlackConnectorSlug(e){return toSlackConnectorSlug((e.trim().replace(/^@/,``).split(`/`).at(-1)??``).toLowerCase().replace(/[^a-z0-9_-]+/g,`-`).replace(/^[^a-z0-9]+/,``).replace(/[^a-z0-9]+$/,``).slice(0,100).replace(/[^a-z0-9]+$/,``)||`my-agent`)}async function deriveSlackConnectorSlug(e,t){if(t!==void 0&&t.length>0&&t!==`.`)return normalizeSlackConnectorSlug(t);try{let t=await readFile(join(e,`package.json`),`utf8`),n=JSON.parse(t);if(typeof n.name==`string`&&n.name.length>0)return normalizeSlackConnectorSlug(n.name)}catch{}return normalizeSlackConnectorSlug(basename(resolve(e))||`my-agent`)}function buildSlackConnectTemplate(e){if(!e.startsWith(`slack/`)||e.length===6)throw Error(`Invalid Slack connector UID "${e}".`);return`import { connectSlackCredentials } from "@vercel/connect/eve";
2
2
  import { slackChannel } from "eve/channels/slack";
3
3
 
4
4
  export default slackChannel({
@@ -4,3 +4,20 @@
4
4
  export declare function updateSlackChannelConnectorUid(slackChannelPath: string, connectorUid: string): Promise<{
5
5
  patched: boolean;
6
6
  }>;
7
+ /**
8
+ * What an existing `agent/channels/slack.ts` already decides. `connect` names
9
+ * one connector UID literal; `environment` reads the default Slack environment
10
+ * variables; `custom` is hand-written credential wiring eve does not parse.
11
+ */
12
+ export type SlackChannelFileState = {
13
+ kind: "absent";
14
+ } | {
15
+ kind: "connect";
16
+ connectorUid: string;
17
+ } | {
18
+ kind: "environment";
19
+ } | {
20
+ kind: "custom";
21
+ };
22
+ /** Reads the Slack channel definition without changing it. */
23
+ export declare function readSlackChannelFile(slackChannelPath: string): Promise<SlackChannelFileState>;
@@ -1 +1 @@
1
- import{readFile,writeFile}from"node:fs/promises";const CONNECT_SLACK_CREDENTIALS_REGEX=/(connectSlackCredentials\(\s*)(["'`])([^"'`]+)\2/;async function updateSlackChannelConnectorUid(e,t){let n;try{n=await readFile(e,`utf8`)}catch{return{patched:!1}}if(!CONNECT_SLACK_CREDENTIALS_REGEX.test(n))return{patched:!1};let r=n.replace(CONNECT_SLACK_CREDENTIALS_REGEX,(e,n,r)=>`${n}${r}${t}${r}`);return await writeFile(e,r,`utf8`),{patched:!0}}export{updateSlackChannelConnectorUid};
1
+ import{readFile,writeFile}from"node:fs/promises";const CONNECT_SLACK_CREDENTIALS_REGEX=/(connectSlackCredentials\(\s*)(["'`])([^"'`]+)\2/;async function updateSlackChannelConnectorUid(e,t){let n;try{n=await readFile(e,`utf8`)}catch{return{patched:!1}}if(!CONNECT_SLACK_CREDENTIALS_REGEX.test(n))return{patched:!1};let r=n.replace(CONNECT_SLACK_CREDENTIALS_REGEX,(e,n,r)=>`${n}${r}${t}${r}`);return await writeFile(e,r,`utf8`),{patched:!0}}async function readSlackChannelFile(e){let t;try{t=await readFile(e,`utf8`)}catch(e){if(e.code===`ENOENT`)return{kind:`absent`};throw e}let n=CONNECT_SLACK_CREDENTIALS_REGEX.exec(t)?.[3];return n!==void 0&&!n.includes("${")?{kind:`connect`,connectorUid:n}:/\bconnectSlackCredentials\b|\bcredentials\s*:/.test(t)?{kind:`custom`}:{kind:`environment`}}export{readSlackChannelFile,updateSlackChannelConnectorUid};
@@ -1,4 +1,4 @@
1
- import type { ProcessOutputHandler } from "#setup/primitives/process-output.js";
1
+ import { type ProcessOutputHandler } from "#setup/primitives/process-output.js";
2
2
  import type { captureVercel, runVercelCaptureStdout } from "#setup/primitives/run-vercel.js";
3
3
  import { type SlackConnectorRef, type SlackWorkspaceConnection } from "./slack-connect.js";
4
4
  export interface SlackConnectorCreateDeps {
@@ -16,8 +16,16 @@ type SlackConnectorCreateResult = {
16
16
  via: "workspace";
17
17
  ref: SlackConnectorRef;
18
18
  workspace: SlackWorkspaceConnection;
19
- } | {
19
+ }
20
+ /**
21
+ * `detail` is the CLI's own error line, when it printed one. `rejected`
22
+ * proves no connector exists: the CLI reported an error before it printed
23
+ * the browser URL, the only flow that can create a managed connector.
24
+ */
25
+ | {
20
26
  state: "failed";
27
+ detail?: string;
28
+ rejected: boolean;
21
29
  } | {
22
30
  state: "unresolved";
23
31
  };
@@ -1 +1 @@
1
- import{parseCreatedSlackConnector}from"./slack-connect.js";import{CONNECT_LOOKUP_TIMEOUT_MS,fetchSlackConnectorDetails}from"./slack-connect-lifecycle.js";import{performance}from"node:perf_hooks";import{setTimeout}from"node:timers/promises";const CREATED_CONNECTOR_PROGRESS=/\bConnector created:\s*(scl_[A-Za-z0-9]+)\b/,realDelay=(e,t)=>setTimeout(e,void 0,{signal:t}),monotonicNow=()=>performance.now();async function pollCreatedSlackConnector(e,t,n,r,i,a){let o=e.delay??realDelay,s=e.now??monotonicNow,c=s()+CONNECT_LOOKUP_TIMEOUT_MS;for(;;){a.throwIfAborted();let l=c-s();if(l<=0)return;let u=await fetchSlackConnectorDetails({deps:e,projectRoot:t,connectorId:n,orgId:r,onOutput:i,timeoutMs:Math.min(1e4,l),signal:a});if(a.throwIfAborted(),u.state===`found`)return u.details.ref;let d=c-s();if(d<=0)return;await o(Math.min(3e3,d),a)}}async function createSlackConnector(e){let t=new AbortController,n=new AbortController,r=new AbortController,i=e.signal?AbortSignal.any([e.signal,t.signal]):t.signal,a=e.signal?AbortSignal.any([e.signal,n.signal]):n.signal,o=e.signal?AbortSignal.any([e.signal,r.signal]):r.signal,s=!1,reportCreated=t=>{s||(s=!0,e.onCreated(t))},c,l,u=new Promise((e,t)=>{c=e,l=t}),d,f,startWorkspaceLookup=t=>{f===void 0&&(f=e.waitForWorkspace(t,o).catch(t=>{if(!(r.signal.aborted&&e.signal?.aborted!==!0))throw t}),f.then(e=>{e!==void 0&&c({ref:t,workspace:e})},l))},createOutput=t=>{e.onOutput(t);let r=t.text.match(CREATED_CONNECTOR_PROGRESS)?.[1];r!==void 0&&d===void 0&&(d=pollCreatedSlackConnector(e.deps,e.projectRoot,r,e.orgId,e.onOutput,a).catch(t=>{if(!(n.signal.aborted&&e.signal?.aborted!==!0))throw t}),d.then(e=>{e!==void 0&&(reportCreated(e),startWorkspaceLookup(e))},l))},p=e.phase(`Waiting for Slack setup to finish...`,()=>e.deps.runVercelCaptureStdout([`connect`,`create`,`slack`,`--triggers`,`--name`,e.slug,`-F`,`json`],{cwd:e.projectRoot,nonInteractive:!0,onOutput:createOutput,timeoutMs:6e5,signal:i})),m;try{m=await Promise.race([p.then(e=>({via:`cli`,result:e})),u.then(e=>({via:`workspace`,...e}))])}catch(e){throw n.abort(),r.abort(),await Promise.allSettled([d,f].filter(e=>e!==void 0)),e}if(m.via===`workspace`)return t.abort(),await p,e.signal?.throwIfAborted(),{state:`created`,via:`workspace`,ref:m.ref,workspace:m.workspace};if(!m.result.ok)return d!==void 0&&await d,r.abort(),f!==void 0&&await f,e.signal?.throwIfAborted(),{state:`failed`};let h=parseCreatedSlackConnector(m.result.stdout);if(h!==void 0)return reportCreated(h),n.abort(),r.abort(),d!==void 0&&await d,f!==void 0&&await f,e.signal?.throwIfAborted(),{state:`created`,via:`cli`,ref:h};let g=d===void 0?void 0:await d;return r.abort(),f!==void 0&&await f,e.signal?.throwIfAborted(),g===void 0?{state:`unresolved`}:{state:`created`,via:`cli`,ref:g}}export{createSlackConnector};
1
+ import{parseCreatedSlackConnector}from"./slack-connect.js";import{CONNECT_LOOKUP_TIMEOUT_MS,fetchSlackConnectorDetails}from"./slack-connect-lifecycle.js";import{performance}from"node:perf_hooks";import{vercelErrorDetail}from"#setup/primitives/process-output.js";import{setTimeout}from"node:timers/promises";const CREATED_CONNECTOR_PROGRESS=/\bConnector created:\s*(scl_[A-Za-z0-9]+)\b/,BROWSER_FLOW_STARTED=/^(Opening browser for |If the browser doesn't open, visit:)/,realDelay=(e,t)=>setTimeout(e,void 0,{signal:t}),monotonicNow=()=>performance.now();async function pollCreatedSlackConnector(e,t,n,r,i,a){let o=e.delay??realDelay,s=e.now??monotonicNow,c=s()+CONNECT_LOOKUP_TIMEOUT_MS;for(;;){a.throwIfAborted();let l=c-s();if(l<=0)return;let u=await fetchSlackConnectorDetails({deps:e,projectRoot:t,connectorId:n,orgId:r,onOutput:i,timeoutMs:Math.min(1e4,l),signal:a});if(a.throwIfAborted(),u.state===`found`)return u.details.ref;let d=c-s();if(d<=0)return;await o(Math.min(3e3,d),a)}}async function createSlackConnector(e){let t=new AbortController,n=new AbortController,r=new AbortController,i=e.signal?AbortSignal.any([e.signal,t.signal]):t.signal,a=e.signal?AbortSignal.any([e.signal,n.signal]):n.signal,o=e.signal?AbortSignal.any([e.signal,r.signal]):r.signal,s=!1,reportCreated=t=>{s||(s=!0,e.onCreated(t))},c,l,u=new Promise((e,t)=>{c=e,l=t}),d=!1,f,p,startWorkspaceLookup=t=>{p===void 0&&(p=e.waitForWorkspace(t,o).catch(t=>{if(!(r.signal.aborted&&e.signal?.aborted!==!0))throw t}),p.then(e=>{e!==void 0&&c({ref:t,workspace:e})},l))},createOutput=t=>{e.onOutput(t);let r=t.text.match(CREATED_CONNECTOR_PROGRESS)?.[1];(r!==void 0||BROWSER_FLOW_STARTED.test(t.text.trim()))&&(d=!0),r!==void 0&&f===void 0&&(f=pollCreatedSlackConnector(e.deps,e.projectRoot,r,e.orgId,e.onOutput,a).catch(t=>{if(!(n.signal.aborted&&e.signal?.aborted!==!0))throw t}),f.then(e=>{e!==void 0&&(reportCreated(e),startWorkspaceLookup(e))},l))},m=e.phase(`Waiting for Slack setup to finish...`,()=>e.deps.runVercelCaptureStdout([`connect`,`create`,`slack`,`--triggers`,`--name`,e.slug,`-F`,`json`],{cwd:e.projectRoot,nonInteractive:!0,onOutput:createOutput,timeoutMs:6e5,signal:i})),h;try{h=await Promise.race([m.then(e=>({via:`cli`,result:e})),u.then(e=>({via:`workspace`,...e}))])}catch(e){throw n.abort(),r.abort(),await Promise.allSettled([f,p].filter(e=>e!==void 0)),e}if(h.via===`workspace`)return t.abort(),await m,e.signal?.throwIfAborted(),{state:`created`,via:`workspace`,ref:h.ref,workspace:h.workspace};if(!h.result.ok){f!==void 0&&await f,r.abort(),p!==void 0&&await p,e.signal?.throwIfAborted();let t=vercelErrorDetail(h.result.stderr);return t===void 0?{state:`failed`,rejected:!1}:{state:`failed`,detail:t,rejected:!d}}let g=parseCreatedSlackConnector(h.result.stdout);if(g!==void 0)return reportCreated(g),n.abort(),r.abort(),f!==void 0&&await f,p!==void 0&&await p,e.signal?.throwIfAborted(),{state:`created`,via:`cli`,ref:g};let _=f===void 0?void 0:await f;return r.abort(),p!==void 0&&await p,e.signal?.throwIfAborted(),_===void 0?{state:`unresolved`}:{state:`created`,via:`cli`,ref:_}}export{createSlackConnector};
@@ -1,21 +1,13 @@
1
- import { type ConnectTriggerAttachmentResult } from "#setup/connect-provisioning.js";
2
1
  import { createPromptCommandOutput, type ChannelSetupLog } from "#setup/cli/index.js";
3
2
  import { captureVercel, runVercel } from "#setup/primitives/run-vercel.js";
4
- import { type RawSlackConnector, type SlackConnectorDetails, type SlackConnectorRef, type SlackWorkspaceConnection } from "./slack-connect.js";
3
+ import { type SlackConnectorDetails, type SlackConnectorRef, type SlackWorkspaceConnection } from "./slack-connect.js";
4
+ import type { SlackConnectorCandidate, SlackRoutingPlan } from "./slack-setup-plan.js";
5
5
  export declare const CONNECT_LOOKUP_TIMEOUT_MS = 60000;
6
- /** Connect subprocess operations needed to inventory and remove Slack connectors. */
6
+ /** Connect subprocess operations needed to inspect and remove Slack connectors. */
7
7
  export interface SlackConnectLifecycleDeps {
8
8
  captureVercel: typeof captureVercel;
9
9
  runVercel: typeof runVercel;
10
10
  }
11
- type SlackConnectorInventory = {
12
- state: "ok";
13
- body: unknown;
14
- connectors: readonly RawSlackConnector[];
15
- } | {
16
- state: "failed";
17
- message: string;
18
- };
19
11
  export type SlackConnectorCleanupResult = {
20
12
  state: "clean";
21
13
  } | {
@@ -23,43 +15,96 @@ export type SlackConnectorCleanupResult = {
23
15
  connectorUids: readonly string[];
24
16
  };
25
17
  type CommandOutput = ReturnType<typeof createPromptCommandOutput>;
18
+ type LookupFailure = {
19
+ state: "failed";
20
+ message: string;
21
+ };
26
22
  /** Shared dependencies and output routing for one connector cleanup operation. */
27
23
  interface SlackConnectorCleanupContext {
28
24
  log: ChannelSetupLog;
29
25
  deps: SlackConnectLifecycleDeps;
30
26
  projectRoot: string;
27
+ orgId: string | undefined;
31
28
  onOutput: CommandOutput;
32
29
  }
33
- /** Reads and validates the account-level Slack connector inventory. */
34
- export declare function listSlackConnectors(deps: SlackConnectLifecycleDeps, projectRoot: string, onOutput: CommandOutput, signal?: AbortSignal): Promise<SlackConnectorInventory>;
35
- export type SlackConnectorLookup = {
36
- state: "found";
37
- connectors: readonly SlackConnectorRef[];
38
- preferred?: SlackConnectorRef;
39
- connectorUids: ReadonlySet<string>;
40
- } | {
41
- state: "not-found";
42
- connectorUids: ReadonlySet<string>;
43
- } | {
44
- state: "failed";
45
- message: string;
46
- };
47
- /** Lists Slack connectors attached to the linked project and identifies the expected UID. */
48
- export declare function findSlackConnector(deps: SlackConnectLifecycleDeps, projectRoot: string, projectId: string | undefined, expectedUid: string | undefined, onOutput: CommandOutput, signal?: AbortSignal): Promise<SlackConnectorLookup>;
30
+ export type SlackConnectorInspection = {
31
+ state: "ok";
32
+ /** Connectors attached to this project or found by UID, with details. */
33
+ candidates: readonly SlackConnectorCandidate[];
34
+ } | LookupFailure;
35
+ /**
36
+ * Read-only snapshot of the Slack connectors that matter to the linked
37
+ * project: those attached to it, plus `namedUids` looked up directly. Each
38
+ * carries its attachment, workspace installation, and trigger destination.
39
+ * Any unreadable connector fails the whole snapshot so setup never guesses.
40
+ */
41
+ export declare function inspectSlackConnectors(input: {
42
+ deps: SlackConnectLifecycleDeps;
43
+ projectRoot: string;
44
+ projectId: string;
45
+ orgId: string | undefined;
46
+ /**
47
+ * UIDs to look up even when this project isn't attached: the channel
48
+ * file's connector and `slack/<slug>`, the names a connector made for this
49
+ * agent would carry. No other unattached connector is ever reused.
50
+ */
51
+ namedUids: ReadonlySet<string>;
52
+ onOutput: CommandOutput;
53
+ signal?: AbortSignal;
54
+ }): Promise<SlackConnectorInspection>;
55
+ /** Rechecks the chosen connector before changing its project access or destinations. */
56
+ export declare function refreshSlackCandidate(input: {
57
+ deps: SlackConnectLifecycleDeps;
58
+ projectRoot: string;
59
+ candidate: SlackConnectorCandidate;
60
+ projectId: string;
61
+ orgId: string | undefined;
62
+ onOutput: CommandOutput;
63
+ signal?: AbortSignal;
64
+ }): Promise<{
65
+ state: "ok";
66
+ candidate: SlackConnectorCandidate;
67
+ } | LookupFailure>;
49
68
  /**
50
- * Outcome of pointing a connector's trigger destination at this project's eve
51
- * route. Detach and attach are reported separately because attach must not run
52
- * while an old trigger destination may still exist. A `detach-failed` connector
53
- * is left in a known-stale state the caller surfaces with manual recovery steps.
69
+ * Picks the `--name` for a new connector: `slug`, then `slug-2`, `slug-3`,
70
+ * and so on. Connect derives the UID `slack/<name>` from it, and a UID a
71
+ * team connector already uses fails the create, so each name is checked by
72
+ * looking its UID up directly.
54
73
  */
55
- type SlackConnectorAttachmentResult = ConnectTriggerAttachmentResult;
74
+ export declare function findFreeSlackConnectorName(input: {
75
+ deps: Pick<SlackConnectLifecycleDeps, "captureVercel">;
76
+ projectRoot: string;
77
+ orgId: string | undefined;
78
+ slug: string;
79
+ onOutput: CommandOutput;
80
+ signal?: AbortSignal;
81
+ }): Promise<{
82
+ state: "ok";
83
+ name: string;
84
+ } | LookupFailure>;
85
+ /** Result of making a connector deliver this project's events to eve's Slack route. */
86
+ export type SlackRoutingResult = {
87
+ state: "configured";
88
+ } | {
89
+ state: "attach-failed";
90
+ message?: string;
91
+ };
56
92
  /**
57
- * Replaces the connector's default trigger destination with the eve route:
58
- * detach the existing destination first, then attach this project. Either
59
- * subprocess failing short-circuits so a half-configured connector is reported
60
- * rather than silently left pointing at the wrong place.
93
+ * Applies the planned routing mutation. Never detaches: attach only adds
94
+ * token access, and the trigger-destinations replacement keeps the project's
95
+ * token access and every other project's entries intact.
61
96
  */
62
- export declare function attachSlackConnector(deps: SlackConnectLifecycleDeps, projectRoot: string, ref: SlackConnectorRef, onOutput: CommandOutput, signal?: AbortSignal): Promise<SlackConnectorAttachmentResult>;
97
+ export declare function applySlackRouting(input: {
98
+ deps: SlackConnectLifecycleDeps;
99
+ projectRoot: string;
100
+ ref: SlackConnectorRef;
101
+ plan: Extract<SlackRoutingPlan, {
102
+ kind: "apply";
103
+ }>;
104
+ orgId: string | undefined;
105
+ onOutput: CommandOutput;
106
+ signal?: AbortSignal;
107
+ }): Promise<SlackRoutingResult>;
63
108
  type SlackWorkspaceLookup = {
64
109
  state: "connected";
65
110
  workspace: SlackWorkspaceConnection;
@@ -97,16 +142,19 @@ export declare function fetchSlackWorkspace(input: {
97
142
  signal?: AbortSignal;
98
143
  }): Promise<SlackWorkspaceLookup>;
99
144
  /**
100
- * Removes the exact connector returned by `connect create`. When no UID was
101
- * returned, ownership cannot be proven: a concurrent or eventually-consistent
102
- * connector looks the same as this attempt's. So cleanup fails closed. It
103
- * removes nothing and instead surfaces the connectors that look like this
104
- * attempt's, matching `expectedUid` and absent from the pre-create snapshot, so
105
- * the caller can stop rather than risk removing a bystander's connector.
145
+ * Removes the exact connector returned by `connect create`. A run the CLI
146
+ * rejected before its browser flow cannot have created a connector, so there
147
+ * is nothing to remove. Otherwise, when no UID was returned, ownership cannot be
148
+ * proven: the browser page may still create one, and a concurrent or
149
+ * eventually-consistent connector looks the same as this attempt's. So
150
+ * cleanup fails closed. It removes nothing and instead surfaces
151
+ * `expectedUid`, which was free before this attempt, if it now exists, so the
152
+ * caller can stop rather than risk removing a bystander's connector.
106
153
  */
107
154
  export declare function cleanupCreatedAttempt(context: SlackConnectorCleanupContext, input: {
108
155
  expectedUid: string;
109
- baselineConnectorUids: ReadonlySet<string>;
110
156
  createdRef: SlackConnectorRef | undefined;
157
+ /** The CLI reported its own error before printing the browser URL. */
158
+ rejected: boolean;
111
159
  }): Promise<SlackConnectorCleanupResult>;
112
160
  export {};
@@ -1 +1 @@
1
- import{parseSlackConnectorDetails,parseSlackConnectors}from"./slack-connect.js";import{SLACK_CHANNEL_DEFAULT_ROUTE}from"#setup/scaffold/index.js";import"#setup/primitives/run-vercel.js";import"#setup/cli/index.js";import{CONNECT_MUTATION_TIMEOUT_MS,replaceConnectTrigger}from"#setup/connect-provisioning.js";const CONNECT_LOOKUP_TIMEOUT_MS=6e4;async function listSlackConnectors(e,t,n,r){let i=await e.captureVercel([`connect`,`list`,`-F`,`json`,`--all-projects`],{cwd:t,onOutput:n,timeoutMs:CONNECT_LOOKUP_TIMEOUT_MS,signal:r});if(!i.ok)return{state:`failed`,message:i.failure.message};try{let e=JSON.parse(i.stdout);if(typeof e!=`object`||!e)return{state:`failed`,message:`Vercel returned a malformed connector list.`};let t=e;return Array.isArray(t.connectors??t.clients)?{state:`ok`,body:e,connectors:parseSlackConnectors(e)}:{state:`failed`,message:`Vercel returned a malformed connector list.`}}catch{return{state:`failed`,message:`Vercel returned invalid JSON for the connector list.`}}}async function findSlackConnector(e,t,n,r,i,a){let o=await listSlackConnectors(e,t,i,a);if(o.state===`failed`)return o;let s=new Set(o.connectors.map(e=>e.uid));if(n===void 0)return{state:`not-found`,connectorUids:s};let c=o.connectors.filter(e=>e.id!==void 0&&e.projectIds.includes(n)).sort((e,t)=>t.createdAt-e.createdAt).map(({uid:e,id:t})=>({uid:e,id:t}));if(c.length===0)return{state:`not-found`,connectorUids:s};let l=c.find(e=>e.uid===r);return l===void 0?{state:`found`,connectors:c,connectorUids:s}:{state:`found`,connectors:c,preferred:l,connectorUids:s}}async function attachSlackConnector(e,t,n,r,i){return replaceConnectTrigger({connectorUid:n.uid,projectRoot:t,triggerPath:SLACK_CHANNEL_DEFAULT_ROUTE,onOutput:r,signal:i,deps:e})}async function fetchSlackConnectorDetails(e){let t=e.orgId===void 0?``:`?teamId=${encodeURIComponent(e.orgId)}`,n=[`api`,`/v1/connect/connectors/${encodeURIComponent(e.connectorId)}${t}`];e.orgId!==void 0&&n.push(`--scope`,e.orgId);let r=await e.deps.captureVercel(n,{cwd:e.projectRoot,onOutput:e.onOutput,timeoutMs:e.timeoutMs,signal:e.signal});if(!r.ok)return{state:`failed`,message:r.failure.message};try{let t=JSON.parse(r.stdout),n=parseSlackConnectorDetails(t);return n?.ref.id===e.connectorId?{state:`found`,details:n}:{state:`failed`,message:`Vercel returned an invalid Slack connector.`}}catch{return{state:`failed`,message:`Vercel returned invalid JSON for the Slack connector.`}}}async function fetchSlackWorkspace(e){let t=await fetchSlackConnectorDetails(e);return t.state===`failed`?t:t.details.workspace===void 0?{state:`pending`}:{state:`connected`,workspace:t.details.workspace}}async function cleanupConnectorUid(e,t){let{log:n,deps:r,projectRoot:i,onOutput:a}=e;return await r.runVercel([`connect`,`remove`,t,`--disconnect-all`,`--yes`],{cwd:i,onOutput:a,timeoutMs:CONNECT_MUTATION_TIMEOUT_MS})?!0:(n.warning(`Could not remove the abandoned Slack connector. Run \`vercel connect remove ${t} --disconnect-all --yes\` to clean it up.`),!1)}async function cleanupConnectorUids(e,t){let n=[];for(let r of new Set(t))await cleanupConnectorUid(e,r)||n.push(r);return n.length===0?{state:`clean`}:{state:`failed`,connectorUids:n}}async function cleanupCreatedAttempt(e,t){if(t.createdRef)return cleanupConnectorUids(e,[t.createdRef.uid]);e.log.warning(`eve couldn't confirm the Slack request in your browser was cancelled. Wait for it to expire before retrying.`);let n=await listSlackConnectors(e.deps,e.projectRoot,e.onOutput);return n.state===`failed`?{state:`failed`,connectorUids:[]}:{state:`failed`,connectorUids:n.connectors.map(e=>e.uid).filter(e=>(e===t.expectedUid||e.startsWith(`${t.expectedUid}-`))&&!t.baselineConnectorUids.has(e))}}export{CONNECT_LOOKUP_TIMEOUT_MS,attachSlackConnector,cleanupCreatedAttempt,fetchSlackConnectorDetails,fetchSlackWorkspace,findSlackConnector,listSlackConnectors};
1
+ import{parseConnectorProjects,parseSlackConnectorDetails,parseSlackConnectorPage}from"./slack-connect.js";import"#setup/primitives/run-vercel.js";import{isNotFoundApiFailure,normalizeVercelApiResult}from"#setup/vercel-api-failure.js";import{mapWithConcurrency}from"#shared/map-with-concurrency.js";import"#setup/cli/index.js";import{CONNECT_MUTATION_TIMEOUT_MS}from"#setup/connect-provisioning.js";const CONNECT_LOOKUP_TIMEOUT_MS=6e4;function connectApiArgs(e,t,n={},r=[]){let i=new URLSearchParams(n);t!==void 0&&i.set(`teamId`,t);let a=i.toString(),o=[`api`,a===``?e:`${e}?${a}`,...r];return t!==void 0&&o.push(`--scope`,t),o}function connectorPath(e){return`/v1/connect/connectors/${encodeURIComponent(e)}`}async function listProjectSlackConnectors(e){let t=[],n=new Set,r;for(let i=0;i<50;i+=1){let i={projectId:e.projectId,type:`slack`,include:`projects`,limit:`100`};r!==void 0&&(i.cursor=r);let a=await e.deps.captureVercel(connectApiArgs(`/v1/connect/connectors`,e.orgId,i),{cwd:e.projectRoot,onOutput:e.onOutput,timeoutMs:CONNECT_LOOKUP_TIMEOUT_MS,signal:e.signal});if(!a.ok)return{state:`failed`,message:a.failure.message};let o;try{o=parseSlackConnectorPage(JSON.parse(a.stdout))}catch{return{state:`failed`,message:`Vercel returned invalid JSON for the connector list.`}}if(o===void 0)return{state:`failed`,message:`Vercel returned a malformed connector list.`};if(t.push(...o.connectors),o.next===void 0)return{state:`ok`,connectors:t};if(n.has(o.next))return{state:`failed`,message:`The connector list repeated cursor ${o.next}.`};n.add(o.next),r=o.next}return{state:`failed`,message:`The connector list has more than 50 pages.`}}async function fetchConnectorProjects(e){let t=await e.deps.captureVercel(connectApiArgs(`${connectorPath(e.connectorId)}/projects`,e.orgId),{cwd:e.projectRoot,onOutput:e.onOutput,timeoutMs:CONNECT_LOOKUP_TIMEOUT_MS,signal:e.signal});if(!t.ok)return{state:`failed`,message:t.failure.message};try{let e=parseConnectorProjects(JSON.parse(t.stdout));return e===void 0?{state:`failed`,message:`Vercel returned a malformed connector project list.`}:{state:`ok`,projects:e}}catch{return{state:`failed`,message:`Vercel returned invalid JSON for the connector project list.`}}}function otherProjectsOf(e,t,n){let r=e.filter(e=>e.id!==n);for(let e of t)e.projectId!==n&&(r.some(t=>t.id===e.projectId)||r.push({id:e.projectId}));return r}function toCandidate(e){let{details:t,projectId:n}=e,r=t.triggerDestinations,i={...t.ref,attached:e.attached,triggerDestinations:r,otherProjects:otherProjectsOf(e.projects,r,n),createdAt:e.createdAt};return t.workspace!==void 0&&(i.workspace=t.workspace),i}async function inspectSlackConnectors(e){let{deps:t,projectRoot:n,projectId:r,orgId:i,onOutput:a,signal:o}=e,s=await listProjectSlackConnectors(e);if(s.state===`failed`)return s;let c=new Set(s.connectors.map(e=>e.uid)),l=[...e.namedUids].filter(e=>!c.has(e)),u={deps:t,projectRoot:n,orgId:i,onOutput:a,signal:o},inspectListed=async e=>{let t=await fetchSlackConnectorDetails({...u,connectorId:e.id,timeoutMs:CONNECT_LOOKUP_TIMEOUT_MS});return t.state===`failed`?`${e.uid}: ${t.message}`:toCandidate({details:t.details,attached:!0,projects:e.projects,projectId:r,createdAt:e.createdAt})},inspectNamed=async e=>{let t=await lookupSlackConnector({...u,key:e,timeoutMs:CONNECT_LOOKUP_TIMEOUT_MS});if(t.state===`absent`)return;if(t.state===`failed`)return`${e}: ${t.message}`;let n=await fetchConnectorProjects({...u,connectorId:t.details.ref.id});return n.state===`failed`?`${e}: ${n.message}`:toCandidate({details:t.details,attached:n.projects.some(e=>e.id===r),projects:n.projects,projectId:r,createdAt:0})},d=await mapWithConcurrency([...s.connectors.map(e=>()=>inspectListed(e)),...l.map(e=>()=>inspectNamed(e))],4,e=>e()),f=d.find(e=>typeof e==`string`);return f===void 0?{state:`ok`,candidates:d.filter(e=>typeof e==`object`)}:{state:`failed`,message:f}}async function refreshSlackCandidate(e){let{deps:t,projectRoot:n,candidate:r,projectId:i,orgId:a,onOutput:o,signal:s}=e,c=await fetchSlackConnectorDetails({deps:t,projectRoot:n,connectorId:r.id,orgId:a,onOutput:o,timeoutMs:CONNECT_LOOKUP_TIMEOUT_MS,signal:s});if(c.state===`failed`)return c;if(c.details.ref.uid!==r.uid)return{state:`failed`,message:`The connector ${r.uid} changed since inspection.`};let l=await fetchConnectorProjects({deps:t,projectRoot:n,connectorId:r.id,orgId:a,onOutput:o,signal:s});return l.state===`failed`?l:{state:`ok`,candidate:toCandidate({details:c.details,attached:l.projects.some(e=>e.id===i),projects:l.projects,projectId:i,createdAt:r.createdAt})}}async function findFreeSlackConnectorName(e){for(let t=1;t<=20;t+=1){let n=t===1?e.slug:`${e.slug}-${t}`,r=`slack/${n}`,i=await lookupSlackConnector({...e,key:r,timeoutMs:CONNECT_LOOKUP_TIMEOUT_MS});if(i.state===`failed`)return i;if(i.state===`absent`)return{state:`ok`,name:n}}return{state:`failed`,message:`Slack connectors \`slack/${e.slug}\` through \`slack/${e.slug}-20\` already exist. Remove unused ones with \`vercel connect remove <uid> --disconnect-all --yes\`, then try again.`}}async function applySlackRouting(e){let{deps:t,projectRoot:n,ref:r,plan:i,orgId:a,onOutput:o,signal:s}=e;if(i.attach){let e=[`connect`,`attach`,r.uid,`--yes`];if(a!==void 0&&e.push(`--scope`,a),!await t.runVercel(e,{cwd:n,onOutput:o,nonInteractive:!0,timeoutMs:CONNECT_MUTATION_TIMEOUT_MS,signal:s}))return{state:`attach-failed`}}if(i.destinations===void 0)return{state:`configured`};let c=connectApiArgs(`${connectorPath(r.id)}/trigger-destinations`,a,{},[`--method`,`PATCH`,`--input`,`-`]),l=normalizeVercelApiResult(await t.captureVercel(c,{cwd:n,onOutput:o,stdin:JSON.stringify({destinations:i.destinations}),timeoutMs:CONNECT_MUTATION_TIMEOUT_MS,signal:s}));return l.ok?{state:`configured`}:{state:`attach-failed`,message:l.failure.message}}async function lookupSlackConnector(e){let t=await e.deps.captureVercel(connectApiArgs(connectorPath(e.key),e.orgId),{cwd:e.projectRoot,onOutput:e.onOutput,timeoutMs:e.timeoutMs,signal:e.signal});if(!t.ok)return{state:isNotFoundApiFailure(t.failure)?`absent`:`failed`,message:t.failure.message};try{let n=JSON.parse(t.stdout),r=parseSlackConnectorDetails(n);return r?.ref.id===e.key||r?.ref.uid===e.key?{state:`found`,details:r}:{state:`failed`,message:`Vercel returned an invalid Slack connector.`}}catch{return{state:`failed`,message:`Vercel returned invalid JSON for the Slack connector.`}}}async function fetchSlackConnectorDetails(e){let t=await lookupSlackConnector({...e,key:e.connectorId});return t.state===`absent`?{state:`failed`,message:t.message}:t}async function fetchSlackWorkspace(e){let t=await fetchSlackConnectorDetails(e);return t.state===`failed`?t:t.details.workspace===void 0?{state:`pending`}:{state:`connected`,workspace:t.details.workspace}}async function cleanupConnectorUid(e,t){let{log:n,deps:r,projectRoot:i,onOutput:a}=e;return await r.runVercel([`connect`,`remove`,t,`--disconnect-all`,`--yes`],{cwd:i,onOutput:a,timeoutMs:CONNECT_MUTATION_TIMEOUT_MS})?!0:(n.warning(`Could not remove the abandoned Slack connector. Run \`vercel connect remove ${t} --disconnect-all --yes\` to clean it up.`),!1)}async function cleanupConnectorUids(e,t){let n=[];for(let r of new Set(t))await cleanupConnectorUid(e,r)||n.push(r);return n.length===0?{state:`clean`}:{state:`failed`,connectorUids:n}}async function cleanupCreatedAttempt(e,t){return t.createdRef?cleanupConnectorUids(e,[t.createdRef.uid]):t.rejected?{state:`clean`}:(e.log.warning(`eve couldn't confirm the Slack request in your browser was cancelled. Wait for it to expire before retrying.`),{state:`failed`,connectorUids:(await lookupSlackConnector({...e,key:t.expectedUid,timeoutMs:CONNECT_LOOKUP_TIMEOUT_MS})).state===`found`?[t.expectedUid]:[]})}export{CONNECT_LOOKUP_TIMEOUT_MS,applySlackRouting,cleanupCreatedAttempt,fetchSlackConnectorDetails,fetchSlackWorkspace,findFreeSlackConnectorName,inspectSlackConnectors,refreshSlackCandidate};
@@ -6,12 +6,6 @@
6
6
  * focused on flow and these stay trivially testable.
7
7
  */
8
8
  import { z } from "#compiled/zod/index.js";
9
- export interface VercelConnectListResponse {
10
- /** `vercel connect list -F json` (current CLI). */
11
- connectors?: unknown;
12
- /** Older CLI builds emitted the same array under `clients`. */
13
- clients?: unknown;
14
- }
15
9
  declare const SlackConnectorRefSchema: z.ZodObject<{
16
10
  uid: z.ZodString;
17
11
  id: z.ZodString;
@@ -23,10 +17,21 @@ export interface SlackWorkspaceConnection {
23
17
  workspaceUrl: string;
24
18
  workspaceName?: string;
25
19
  }
20
+ /**
21
+ * One place Vercel Connect forwards Slack events. A destination without
22
+ * `branch` or `customEnvironmentId` targets the project's default deployment.
23
+ */
24
+ export interface SlackTriggerDestination {
25
+ projectId: string;
26
+ path?: string;
27
+ branch?: string;
28
+ customEnvironmentId?: string;
29
+ }
26
30
  /** Parsed Slack connector state returned by Vercel's connector detail API. */
27
31
  export interface SlackConnectorDetails {
28
32
  ref: SlackConnectorRef;
29
33
  workspace?: SlackWorkspaceConnection;
34
+ triggerDestinations: readonly SlackTriggerDestination[];
30
35
  }
31
36
  /**
32
37
  * Parses the exact connector response. Vercel reports a completed Slack
@@ -48,13 +53,27 @@ export declare function parseCreatedSlackConnector(stdout: string): SlackConnect
48
53
  * See https://docs.slack.dev/interactivity/deep-linking/.
49
54
  */
50
55
  export declare function slackMessageDeepLink(url: string): string;
51
- /** A Slack connector plus the project ids it is attached to. */
56
+ /** A project attached to a connector. */
57
+ export interface SlackConnectorProject {
58
+ id: string;
59
+ name?: string;
60
+ }
61
+ /** A Slack connector plus the projects it is attached to. */
52
62
  export interface RawSlackConnector {
53
63
  uid: string;
54
- id?: string;
55
- projectIds: readonly string[];
64
+ id: string;
65
+ /** Attached projects, possibly truncated to the first few. */
66
+ projects: readonly SlackConnectorProject[];
56
67
  createdAt: number;
57
68
  }
58
- /** Parses Slack connectors (uid + attached project ids) from a connect-list response. */
59
- export declare function parseSlackConnectors(listJson: unknown): RawSlackConnector[];
69
+ /** One page of `GET /v1/connect/connectors?include=projects`. */
70
+ export interface SlackConnectorPage {
71
+ connectors: RawSlackConnector[];
72
+ /** Cursor for the next page, absent on the last one. */
73
+ next?: string;
74
+ }
75
+ /** Parses one connector list page, keeping only Slack connectors. */
76
+ export declare function parseSlackConnectorPage(body: unknown): SlackConnectorPage | undefined;
77
+ /** Parses one page of `GET /v1/connect/connectors/<id>/projects`. */
78
+ export declare function parseConnectorProjects(body: unknown): SlackConnectorProject[] | undefined;
60
79
  export {};
@@ -1 +1 @@
1
- import{z}from"#compiled/zod/index.js";const NonEmptyStringSchema=z.string().min(1),SlackConnectorDetailsSchema=z.object({uid:NonEmptyStringSchema,id:NonEmptyStringSchema}).extend({data:z.object({appId:NonEmptyStringSchema.nullish(),slackTeam:z.object({id:NonEmptyStringSchema,name:NonEmptyStringSchema.nullish()}).nullish()}).nullish()});function parseSlackConnectorDetails(e){let t=SlackConnectorDetailsSchema.safeParse(e);if(!t.success)return;let{id:n,uid:r,data:i}=t.data,a={id:n,uid:r};if(i?.appId==null||i.slackTeam==null)return{ref:a};let o=new URL(`https://slack.com/app_redirect`);return o.searchParams.set(`app`,i.appId),o.searchParams.set(`team`,i.slackTeam.id),{ref:a,workspace:i.slackTeam.name==null?{workspaceUrl:o.href}:{workspaceUrl:o.href,workspaceName:i.slackTeam.name}}}function parseCreatedSlackConnector(e){let t=e.trim();if(!t)return;let n;try{n=JSON.parse(t)}catch{return}return parseSlackConnectorDetails(n)?.ref}function slackMessageDeepLink(e){let t=URL.parse(e);return t===null||!t.pathname.endsWith(`/app_redirect`)||!t.searchParams.has(`app`)||!t.searchParams.has(`team`)?e:(t.searchParams.set(`tab`,`messages`),t.href)}function parseSlackConnectors(e){if(typeof e!=`object`||!e)return[];let t=e,n=t.connectors??t.clients;if(!Array.isArray(n))return[];let r=[];for(let e of n){if(e.type!==`slack`||typeof e.uid!=`string`)continue;let t=Array.isArray(e.projects)?e.projects.map(e=>typeof e==`object`&&e?e.id:void 0).filter(e=>typeof e==`string`):[],n={uid:e.uid,projectIds:t,createdAt:typeof e.createdAt==`number`?e.createdAt:0};typeof e.id==`string`&&(n.id=e.id),r.push(n)}return r}export{parseCreatedSlackConnector,parseSlackConnectorDetails,parseSlackConnectors,slackMessageDeepLink};
1
+ import{z}from"#compiled/zod/index.js";const NonEmptyStringSchema=z.string().min(1),SlackConnectorRefSchema=z.object({uid:NonEmptyStringSchema,id:NonEmptyStringSchema}),SlackTriggerDestinationSchema=z.object({projectId:NonEmptyStringSchema,path:NonEmptyStringSchema.nullish(),branch:NonEmptyStringSchema.nullish(),customEnvironmentId:NonEmptyStringSchema.nullish()}),SlackConnectorDetailsSchema=SlackConnectorRefSchema.extend({triggerDestinations:z.array(SlackTriggerDestinationSchema).nullish(),data:z.object({appId:NonEmptyStringSchema.nullish(),slackTeam:z.object({id:NonEmptyStringSchema,name:NonEmptyStringSchema.nullish()}).nullish()}).nullish()});function toTriggerDestination(e){let t={projectId:e.projectId};return e.path!=null&&(t.path=e.path),e.branch!=null&&(t.branch=e.branch),e.customEnvironmentId!=null&&(t.customEnvironmentId=e.customEnvironmentId),t}function parseSlackConnectorDetails(e){let t=SlackConnectorDetailsSchema.safeParse(e);if(!t.success)return;let{id:n,uid:r,data:i}=t.data,a={id:n,uid:r},o=(t.data.triggerDestinations??[]).map(toTriggerDestination);if(i?.appId==null||i.slackTeam==null)return{ref:a,triggerDestinations:o};let s=new URL(`https://slack.com/app_redirect`);return s.searchParams.set(`app`,i.appId),s.searchParams.set(`team`,i.slackTeam.id),{ref:a,workspace:i.slackTeam.name==null?{workspaceUrl:s.href}:{workspaceUrl:s.href,workspaceName:i.slackTeam.name},triggerDestinations:o}}function parseCreatedSlackConnector(e){let t=e.trim();if(!t)return;let n;try{n=JSON.parse(t)}catch{return}return parseSlackConnectorDetails(n)?.ref}function slackMessageDeepLink(e){let t=URL.parse(e);return t===null||!t.pathname.endsWith(`/app_redirect`)||!t.searchParams.has(`app`)||!t.searchParams.has(`team`)?e:(t.searchParams.set(`tab`,`messages`),t.href)}const ProjectLinkSchema=z.object({projectId:NonEmptyStringSchema,project:z.object({id:NonEmptyStringSchema,name:z.string().nullish()}).nullish()}),PaginationSchema=z.object({next:z.string().nullish()}).nullish(),ConnectorPageSchema=z.object({clients:z.array(z.object({id:NonEmptyStringSchema,uid:NonEmptyStringSchema,type:z.string(),createdAt:z.number().nullish(),includes:z.object({projects:z.object({items:z.array(ProjectLinkSchema)}).nullish()}).nullish()})),pagination:PaginationSchema}),ConnectorProjectsSchema=z.object({projects:z.array(ProjectLinkSchema)});function toProject(e){let t=e.project?.id??e.projectId,n=e.project?.name;return n==null?{id:t}:{id:t,name:n}}function parseSlackConnectorPage(e){let t=ConnectorPageSchema.safeParse(e);if(!t.success)return;let n=t.data.clients.filter(e=>e.type===`slack`).map(e=>({uid:e.uid,id:e.id,projects:(e.includes?.projects?.items??[]).map(toProject),createdAt:e.createdAt??0})),r=t.data.pagination?.next;return r==null?{connectors:n}:{connectors:n,next:r}}function parseConnectorProjects(e){let t=ConnectorProjectsSchema.safeParse(e);return t.success?t.data.projects.map(toProject):void 0}export{parseConnectorProjects,parseCreatedSlackConnector,parseSlackConnectorDetails,parseSlackConnectorPage,slackMessageDeepLink};
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Pure decisions for resumable Slack setup: which mutation (if any) finishes
3
+ * event delivery and which connector setup suggests.
4
+ */
5
+ import type { SlackConnectorProject, SlackConnectorRef, SlackTriggerDestination, SlackWorkspaceConnection } from "./slack-connect.js";
6
+ /** Connect rejects a fourth trigger destination on one connector. */
7
+ export declare const MAX_SLACK_TRIGGER_DESTINATIONS = 3;
8
+ /** A connector other projects use, which setup never attaches to this one. */
9
+ export interface SlackConnectorInUse {
10
+ uid: string;
11
+ otherProjects: readonly SlackConnectorProject[];
12
+ }
13
+ /** One team Slack connector as setup sees it before changing anything. */
14
+ export interface SlackConnectorCandidate extends SlackConnectorRef {
15
+ /** Whether the linked project has token access to this connector. */
16
+ attached: boolean;
17
+ /** Present once the Slack app is installed into a workspace. */
18
+ workspace?: SlackWorkspaceConnection;
19
+ triggerDestinations: readonly SlackTriggerDestination[];
20
+ /**
21
+ * Other projects that use this connector, by attachment or by trigger
22
+ * destination. Setup never changes their attachments or destinations.
23
+ */
24
+ otherProjects: readonly SlackConnectorProject[];
25
+ createdAt: number;
26
+ }
27
+ /**
28
+ * Whether setup may reuse a connector: it already belongs to this project, or
29
+ * no other project uses it (for example, one created by hand for this agent).
30
+ * One Slack app forwards every event to every destination, so attaching a
31
+ * second agent would make both respond.
32
+ */
33
+ export declare function isReusableSlackConnector(candidate: SlackConnectorCandidate): boolean;
34
+ /**
35
+ * What finishes event delivery for one connector. `attach` gives the project
36
+ * token access; `destinations`, when present, is the full destination set to
37
+ * write, changing only this project's default-deployment entry. Each half is
38
+ * idempotent, so a run that stops between them resumes on the next one.
39
+ */
40
+ export type SlackRoutingPlan = {
41
+ kind: "apply";
42
+ attach: boolean;
43
+ destinations?: readonly SlackTriggerDestination[];
44
+ } | {
45
+ kind: "limit-reached";
46
+ destinations: readonly SlackTriggerDestination[];
47
+ };
48
+ /**
49
+ * Plans the routing mutation. An attached project is never re-attached,
50
+ * because `connect attach` without `--environment` resets its environment
51
+ * scoping.
52
+ */
53
+ export declare function planSlackRouting(input: {
54
+ attached: boolean;
55
+ destinations: readonly SlackTriggerDestination[];
56
+ projectId: string;
57
+ route: string;
58
+ }): SlackRoutingPlan;
59
+ /**
60
+ * Orders candidates for the connector question and picks the suggestion:
61
+ * the channel file's UID, then `slack/<slug>`, then the newest connector
62
+ * already attached to this project. `undefined` suggests a new connector.
63
+ */
64
+ export declare function orderSlackConnectorCandidates(candidates: readonly SlackConnectorCandidate[], input: {
65
+ channelConnectorUid?: string | undefined;
66
+ expectedUid: string;
67
+ }): {
68
+ candidates: SlackConnectorCandidate[];
69
+ preferred?: SlackConnectorCandidate;
70
+ };
71
+ /** Human-readable destination list for the trigger-limit report. */
72
+ export declare function describeSlackDestinations(destinations: readonly SlackTriggerDestination[], projectNames: ReadonlyMap<string, string>): string[];
@@ -0,0 +1 @@
1
+ const MAX_SLACK_TRIGGER_DESTINATIONS=3;function isReusableSlackConnector(e){return e.attached||e.otherProjects.length===0}function isDefaultDeployment(e){return e.branch===void 0&&e.customEnvironmentId===void 0}function isProjectDefault(e,t){return e.projectId===t&&isDefaultDeployment(e)}function planSlackRouting(e){let{attached:t,destinations:n,projectId:r,route:i}=e,a=!t,o=n.filter(e=>isProjectDefault(e,r));if(o.length===1&&o[0]?.path===i)return{kind:`apply`,attach:a};let s=[...n.filter(e=>!isProjectDefault(e,r)),{projectId:r,path:i}];return s.length>3?{kind:`limit-reached`,destinations:n}:{kind:`apply`,attach:a,destinations:s}}function orderSlackConnectorCandidates(e,t){let n=[...e].sort((e,t)=>t.createdAt-e.createdAt),r=n.find(e=>e.uid===t.channelConnectorUid)??n.find(e=>e.uid===t.expectedUid)??n.find(e=>e.attached),i=n.filter(e=>e!==r).sort((e,t)=>Number(t.attached)-Number(e.attached)),a=r===void 0?i:[r,...i];return r===void 0?{candidates:a}:{candidates:a,preferred:r}}function describeSlackDestinations(e,t){return e.map(e=>`${t.get(e.projectId)??e.projectId} (${e.customEnvironmentId===void 0?e.branch===void 0?`production`:`branch ${e.branch}`:`custom environment ${e.customEnvironmentId}`}) ${e.path??`<default path>`}`)}export{MAX_SLACK_TRIGGER_DESTINATIONS,describeSlackDestinations,isReusableSlackConnector,orderSlackConnectorCandidates,planSlackRouting};