eve 0.74.0 → 0.75.1

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 (258) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/src/channel/auth/result.d.ts +4 -0
  3. package/dist/src/channel/auth/result.js +1 -0
  4. package/dist/src/channel/types.d.ts +14 -2
  5. package/dist/src/chunks/{use-eve-agent-mP0M7SrL.js → use-eve-agent-B2Kne9z6.js} +7 -2
  6. package/dist/src/chunks/{use-eve-agent-DOOXadF0.js → use-eve-agent-DK_T88EP.js} +7 -2
  7. package/dist/src/cli/commands/deploy.js +1 -1
  8. package/dist/src/cli/commands/integration-connect.d.ts +2 -0
  9. package/dist/src/cli/commands/integration-connect.js +1 -1
  10. package/dist/src/cli/commands/integration-setup.js +1 -1
  11. package/dist/src/cli/commands/link.d.ts +2 -1
  12. package/dist/src/cli/commands/link.js +1 -1
  13. package/dist/src/cli/commands/registry-declared-setups.d.ts +19 -0
  14. package/dist/src/cli/commands/registry-declared-setups.js +1 -1
  15. package/dist/src/cli/commands/registry-recovery.d.ts +3 -1
  16. package/dist/src/cli/commands/registry-recovery.js +1 -1
  17. package/dist/src/cli/commands/registry.d.ts +12 -4
  18. package/dist/src/cli/commands/registry.js +1 -1
  19. package/dist/src/cli/commands/vercel-non-interactive.d.ts +6 -4
  20. package/dist/src/cli/commands/vercel-non-interactive.js +1 -1
  21. package/dist/src/cli/dev/tui/registry-result-message.js +1 -1
  22. package/dist/src/cli/dev/tui/setup-commands.d.ts +2 -0
  23. package/dist/src/cli/dev/tui/setup-commands.js +2 -2
  24. package/dist/src/client/index.d.ts +1 -0
  25. package/dist/src/client/session.d.ts +1 -1
  26. package/dist/src/client/session.js +1 -1
  27. package/dist/src/client/sessions.d.ts +1 -1
  28. package/dist/src/client/types.d.ts +6 -0
  29. package/dist/src/compiled/.vendor-stamp.json +8 -8
  30. package/dist/src/compiled/@eve/catalog/index.js +1 -1
  31. package/dist/src/compiled/@workflow/core/global.d.ts +10 -0
  32. package/dist/src/compiled/@workflow/core/index.js +1 -1
  33. package/dist/src/compiled/@workflow/core/private.d.ts +11 -0
  34. package/dist/src/compiled/@workflow/core/private.js +1 -1
  35. package/dist/src/compiled/@workflow/core/runtime/constants.d.ts +36 -8
  36. package/dist/src/compiled/@workflow/core/runtime/helpers.js +1 -1
  37. package/dist/src/compiled/@workflow/core/runtime/lifecycle-hooks.d.ts +10 -6
  38. package/dist/src/compiled/@workflow/core/runtime/out-of-band-observation.d.ts +159 -0
  39. package/dist/src/compiled/@workflow/core/runtime/vm-mode.d.ts +28 -4
  40. package/dist/src/compiled/@workflow/core/runtime.js +4 -4
  41. package/dist/src/compiled/@workflow/core/serialization.js +1 -1
  42. package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
  43. package/dist/src/compiled/@workflow/core/workflow.js +1 -1
  44. package/dist/src/compiled/@workflow/world-local/index.js +5 -5
  45. package/dist/src/compiled/@workflow/world-vercel/index.js +4 -4
  46. package/dist/src/compiled/_chunks/workflow/{attribute-changes-CSqvJx6j.js → attribute-changes-BW-kbMMn.js} +1 -1
  47. package/dist/src/compiled/_chunks/workflow/dist-CyBgVS7g.js +1 -0
  48. package/dist/src/compiled/_chunks/workflow/{helpers-BXCuoPUb.js → helpers-DlLD3ov_.js} +1 -1
  49. package/dist/src/compiled/_chunks/workflow/private-tQUuwBoQ.js +1 -0
  50. package/dist/src/compiled/_chunks/workflow/{resume-hook-CvENCrxc.js → resume-hook-DMsV_b4n.js} +1 -1
  51. package/dist/src/compiled/_chunks/workflow/{run-8pLWuR2U.js → run-DzdAqdb1.js} +1 -1
  52. package/dist/src/compiled/_chunks/workflow/{serialization-vDozzDhh.js → serialization-DPdYS_w2.js} +2 -2
  53. package/dist/src/compiled/_chunks/workflow/sleep-BY6leHh8.js +1 -0
  54. package/dist/src/compiled/_chunks/workflow/{token-BKeK6DmC.js → token-D5ugC3PI.js} +1 -1
  55. package/dist/src/compiled/_chunks/workflow/{token-util-CddTZ_ef.js → token-util-Bla5Z0G9.js} +1 -1
  56. package/dist/src/compiled/_chunks/workflow/undici-D-ILjOKD.js +95 -0
  57. package/dist/src/compiled/_chunks/workflow/{wait-until-A344L2AG.js → wait-until-xbRRDuUf.js} +1 -1
  58. package/dist/src/compiler/extension-compatibility.d.ts +18 -12
  59. package/dist/src/compiler/extension-compatibility.js +1 -1
  60. package/dist/src/context/dynamic-connection-lifecycle.d.ts +6 -0
  61. package/dist/src/context/dynamic-connection-lifecycle.js +1 -1
  62. package/dist/src/context/keys.d.ts +4 -1
  63. package/dist/src/context/keys.js +1 -1
  64. package/dist/src/context/providers/sandbox.js +1 -1
  65. package/dist/src/context/providers/tool-stubs-key.d.ts +8 -0
  66. package/dist/src/context/providers/tool-stubs-key.js +1 -0
  67. package/dist/src/context/providers/tool-stubs.d.ts +10 -0
  68. package/dist/src/context/providers/tool-stubs.js +1 -0
  69. package/dist/src/context/run-step.js +1 -1
  70. package/dist/src/evals/index.d.ts +1 -0
  71. package/dist/src/evals/runner/execute-task.js +1 -1
  72. package/dist/src/evals/session-manager.d.ts +2 -0
  73. package/dist/src/evals/session-manager.js +1 -1
  74. package/dist/src/eve-channel/create-request.d.ts +2 -0
  75. package/dist/src/eve-channel/index.js +1 -1
  76. package/dist/src/eve-channel/request.js +1 -1
  77. package/dist/src/execution/agent-sessions/context.d.ts +2 -0
  78. package/dist/src/execution/agent-sessions/context.js +1 -1
  79. package/dist/src/execution/agent-sessions/steps.js +1 -1
  80. package/dist/src/execution/cancelled-model-call-batch.js +1 -1
  81. package/dist/src/execution/dynamic-connection-recovery.d.ts +14 -0
  82. package/dist/src/execution/dynamic-connection-recovery.js +1 -0
  83. package/dist/src/execution/dynamic-workflow/tool.js +1 -1
  84. package/dist/src/execution/forward-session-input.js +1 -1
  85. package/dist/src/execution/legacy-session/authorization.js +1 -1
  86. package/dist/src/execution/legacy-session/completion-step.js +1 -1
  87. package/dist/src/execution/legacy-session/inbox.js +1 -1
  88. package/dist/src/execution/legacy-session/interrupt-step.js +1 -1
  89. package/dist/src/execution/ndjson-stream.d.ts +6 -6
  90. package/dist/src/execution/ndjson-stream.js +3 -3
  91. package/dist/src/execution/proxied-deliver-step.js +1 -1
  92. package/dist/src/execution/runtime-context.js +1 -1
  93. package/dist/src/execution/sandbox/bindings/docker.js +1 -1
  94. package/dist/src/execution/sandbox/bindings/just-bash-runtime.js +1 -1
  95. package/dist/src/execution/sandbox/bindings/just-bash.js +1 -1
  96. package/dist/src/execution/sandbox/bindings/microsandbox-lifecycle.js +1 -1
  97. package/dist/src/execution/sandbox/bindings/vercel.js +1 -1
  98. package/dist/src/execution/sandbox/ensure.d.ts +3 -1
  99. package/dist/src/execution/sandbox/ensure.js +1 -1
  100. package/dist/src/execution/session/active-turn.js +1 -1
  101. package/dist/src/execution/session/admission.js +1 -1
  102. package/dist/src/execution/session/checkpoint-migrations.js +1 -1
  103. package/dist/src/execution/session/end-sandbox-step.d.ts +12 -0
  104. package/dist/src/execution/session/end-sandbox-step.js +1 -0
  105. package/dist/src/execution/session/finalization.js +1 -1
  106. package/dist/src/execution/session/handoff-steps.js +1 -1
  107. package/dist/src/execution/session/handoff.d.ts +1 -1
  108. package/dist/src/execution/session/handoff.js +1 -1
  109. package/dist/src/execution/session/program.js +1 -1
  110. package/dist/src/execution/session/timeout-steps.js +1 -1
  111. package/dist/src/execution/session/turn-step.js +1 -1
  112. package/dist/src/execution/session-inbox/inbox.d.ts +6 -1
  113. package/dist/src/execution/session-inbox/inbox.js +1 -1
  114. package/dist/src/execution/session-inbox/release-step.js +1 -1
  115. package/dist/src/execution/session-inbox/resume.d.ts +2 -1
  116. package/dist/src/execution/session-inbox/resume.js +1 -1
  117. package/dist/src/execution/session-workflow-tool-run.js +1 -1
  118. package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
  119. package/dist/src/execution/tasks/model-step.js +1 -1
  120. package/dist/src/execution/tasks/steps.js +1 -1
  121. package/dist/src/execution/tasks/table.d.ts +7 -1
  122. package/dist/src/execution/tasks/table.js +1 -1
  123. package/dist/src/execution/tool-stubs/playback.d.ts +11 -0
  124. package/dist/src/execution/tool-stubs/playback.js +1 -0
  125. package/dist/src/execution/tool-stubs/steps.d.ts +18 -0
  126. package/dist/src/execution/tool-stubs/steps.js +1 -0
  127. package/dist/src/execution/tools/agent-router-workflow.js +1 -1
  128. package/dist/src/execution/tools/connection-tools.d.ts +0 -6
  129. package/dist/src/execution/tools/connection-tools.js +2 -2
  130. package/dist/src/execution/tools/workflow/authorization-completion.js +1 -1
  131. package/dist/src/execution/tools/workflow/body.js +1 -1
  132. package/dist/src/execution/tools/workflow/serve.js +1 -1
  133. package/dist/src/execution/tools/workflow/withdraw-step.js +1 -1
  134. package/dist/src/execution/workflow-runtime.js +1 -1
  135. package/dist/src/execution/workflow-webhook-route.js +1 -1
  136. package/dist/src/harness/compaction/engine.d.ts +8 -19
  137. package/dist/src/harness/compaction/engine.js +1 -1
  138. package/dist/src/harness/compaction/step.d.ts +7 -1
  139. package/dist/src/harness/compaction/step.js +1 -1
  140. package/dist/src/harness/coordination.js +1 -1
  141. package/dist/src/harness/emission.js +1 -1
  142. package/dist/src/harness/hitl/approved-calls.d.ts +2 -0
  143. package/dist/src/harness/hitl/approved-calls.js +1 -1
  144. package/dist/src/harness/hitl/index.d.ts +9 -1
  145. package/dist/src/harness/hitl/index.js +1 -1
  146. package/dist/src/harness/hitl/intake.js +1 -1
  147. package/dist/src/harness/model-call/call.d.ts +2 -3
  148. package/dist/src/harness/model-call/call.js +1 -1
  149. package/dist/src/harness/model-call/model.d.ts +4 -5
  150. package/dist/src/harness/model-call/model.js +1 -1
  151. package/dist/src/harness/model-call/request.d.ts +1 -2
  152. package/dist/src/harness/model-call/request.js +1 -1
  153. package/dist/src/harness/model-call/retry.d.ts +1 -1
  154. package/dist/src/harness/model-call/retry.js +1 -1
  155. package/dist/src/harness/model-call/run.js +1 -1
  156. package/dist/src/harness/model-call/tools.d.ts +3 -4
  157. package/dist/src/harness/model-call/tools.js +1 -1
  158. package/dist/src/harness/model-call/usage.js +1 -1
  159. package/dist/src/harness/model-profile.d.ts +23 -0
  160. package/dist/src/harness/model-profile.js +1 -0
  161. package/dist/src/harness/prompt-cache.d.ts +5 -53
  162. package/dist/src/harness/prompt-cache.js +1 -1
  163. package/dist/src/harness/provider-safety.d.ts +3 -5
  164. package/dist/src/harness/provider-safety.js +1 -1
  165. package/dist/src/harness/provider-tools.d.ts +5 -13
  166. package/dist/src/harness/provider-tools.js +1 -1
  167. package/dist/src/harness/proxy-input-requests.d.ts +17 -6
  168. package/dist/src/harness/proxy-input-requests.js +1 -1
  169. package/dist/src/harness/session-machine/current.d.ts +4 -0
  170. package/dist/src/harness/session-machine/current.js +1 -1
  171. package/dist/src/harness/step/after-model.js +1 -1
  172. package/dist/src/harness/step/context.d.ts +7 -2
  173. package/dist/src/harness/step/context.js +1 -1
  174. package/dist/src/harness/step-hooks.d.ts +2 -3
  175. package/dist/src/harness/step-hooks.js +1 -1
  176. package/dist/src/harness/tool-call-io.js +1 -1
  177. package/dist/src/harness/tool-loop.js +1 -1
  178. package/dist/src/harness/tools.d.ts +2 -3
  179. package/dist/src/harness/tools.js +1 -1
  180. package/dist/src/harness/turn-tag-state.d.ts +12 -0
  181. package/dist/src/harness/turn-tag-state.js +1 -1
  182. package/dist/src/internal/application/package.js +1 -1
  183. package/dist/src/internal/gateway.d.ts +0 -13
  184. package/dist/src/internal/gateway.js +1 -1
  185. package/dist/src/internal/invocation/workflow-execution.js +1 -1
  186. package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -1
  187. package/dist/src/internal/workflow/cancel-expired-development-run.js +1 -1
  188. package/dist/src/protocol/routes.d.ts +4 -0
  189. package/dist/src/protocol/routes.js +1 -1
  190. package/dist/src/public/channels/auth.d.ts +21 -4
  191. package/dist/src/public/channels/auth.js +1 -1
  192. package/dist/src/public/channels/mcp.js +1 -1
  193. package/dist/src/public/schedules/providers/in-memory.js +1 -1
  194. package/dist/src/public/schedules/providers/vercel.js +1 -1
  195. package/dist/src/public/schedules/subscription.d.ts +0 -1
  196. package/dist/src/sandbox/state.d.ts +1 -0
  197. package/dist/src/self-modification/extension/subagents/agent/instructions.js +1 -1
  198. package/dist/src/self-modification/extension/subagents/agent/tools/registry_add.js +1 -1
  199. package/dist/src/setup/flows/registry-session.d.ts +10 -2
  200. package/dist/src/setup/flows/registry-session.js +1 -1
  201. package/dist/src/setup/flows/registry.d.ts +2 -0
  202. package/dist/src/setup/flows/registry.js +1 -1
  203. package/dist/src/setup/integrations/shared/prerequisite.d.ts +8 -0
  204. package/dist/src/setup/integrations/shared/prerequisite.js +1 -1
  205. package/dist/src/setup/registry-setup-client.js +1 -1
  206. package/dist/src/setup/scaffold/create/project.js +1 -1
  207. package/dist/src/setup/scaffold/create/web-template.d.ts +3 -2
  208. package/dist/src/setup/scaffold/create/web-template.js +383 -411
  209. package/dist/src/setup/scaffold/index.js +1 -1
  210. package/dist/src/setup/vercel-project.d.ts +2 -3
  211. package/dist/src/setup/vercel-project.js +0 -0
  212. package/dist/src/shared/sandbox-provider.d.ts +9 -2
  213. package/dist/src/subagents/adapter.d.ts +3 -2
  214. package/dist/src/subagents/adapter.js +1 -1
  215. package/dist/src/subagents/callback-route.js +1 -1
  216. package/dist/src/subagents/hitl-proxy.d.ts +4 -3
  217. package/dist/src/subagents/hitl-proxy.js +1 -1
  218. package/dist/src/subagents/parent-notification.js +1 -1
  219. package/dist/src/svelte/index.js +1 -1
  220. package/dist/src/svelte/use-eve-agent.js +1 -1
  221. package/dist/src/tool-stubs/execute.d.ts +13 -0
  222. package/dist/src/tool-stubs/execute.js +1 -0
  223. package/dist/src/tool-stubs/output.d.ts +4 -0
  224. package/dist/src/tool-stubs/output.js +1 -0
  225. package/dist/src/tool-stubs/playback.d.ts +15 -0
  226. package/dist/src/tool-stubs/playback.js +1 -0
  227. package/dist/src/tool-stubs/rules.d.ts +3 -0
  228. package/dist/src/tool-stubs/rules.js +1 -0
  229. package/dist/src/tool-stubs/schema.d.ts +4 -0
  230. package/dist/src/tool-stubs/schema.js +1 -0
  231. package/dist/src/tool-stubs/target.d.ts +8 -0
  232. package/dist/src/tool-stubs/target.js +1 -0
  233. package/dist/src/tool-stubs/types.d.ts +56 -0
  234. package/dist/src/tool-stubs/types.js +1 -0
  235. package/dist/src/tool-stubs/validate-targets.d.ts +6 -0
  236. package/dist/src/tool-stubs/validate-targets.js +1 -0
  237. package/dist/src/tools/provided/ask-question-workflow.js +1 -1
  238. package/dist/src/tools/provided/sleep-workflow.js +1 -1
  239. package/dist/src/vue/index.js +1 -1
  240. package/dist/src/vue/use-eve-agent.js +1 -1
  241. package/docs/concepts/sessions-runs-and-streaming.md +2 -2
  242. package/docs/evals/meta.json +10 -1
  243. package/docs/evals/overview.mdx +2 -0
  244. package/docs/evals/tool-stubs.mdx +257 -0
  245. package/docs/extensions.md +1 -1
  246. package/docs/guides/auth-and-route-protection.md +25 -0
  247. package/docs/guides/dynamic-capabilities.md +10 -3
  248. package/docs/guides/frontend/nextjs.mdx +17 -4
  249. package/docs/sandbox/index.mdx +10 -2
  250. package/docs/subagents/index.mdx +1 -1
  251. package/docs/tools/human-in-the-loop.md +1 -1
  252. package/docs/tools/overview.mdx +8 -4
  253. package/docs/tools/workflows.mdx +15 -7
  254. package/package.json +6 -6
  255. package/dist/src/compiled/_chunks/workflow/dist-DmXynLVH.js +0 -1
  256. package/dist/src/compiled/_chunks/workflow/private-Dlf90Zvn.js +0 -1
  257. package/dist/src/compiled/_chunks/workflow/signal-exit-iIdjQcCK.js +0 -95
  258. package/dist/src/compiled/_chunks/workflow/sleep-BMqbraZM.js +0 -1
@@ -16,7 +16,7 @@ export declare class ClientSessions {
16
16
  /** @internal */
17
17
  constructor(context: ClientSessionContext);
18
18
  /** Creates a session and starts its first turn with a message. */
19
- create<TOutput = unknown>(input: SendTurnInput<TOutput>): Promise<CreatedClientSession<TOutput>>;
19
+ create<TOutput = unknown>(input: SendTurnInput<TOutput> & CreateSessionOptions): Promise<CreatedClientSession<TOutput>>;
20
20
  /** Creates a conversation session before its first turn. */
21
21
  create(options?: CreateSessionOptions): Promise<CreatedIdleClientSession>;
22
22
  /** Attaches a fixed handle to a known session ID without performing I/O. */
@@ -8,6 +8,7 @@ import type { ResetStatus } from "#protocol/reset-session.js";
8
8
  import type { TurnPolicy } from "#channel/types.js";
9
9
  import type { InputRequest, InputResponse } from "#shared/input.js";
10
10
  import type { JsonObject } from "#shared/json.js";
11
+ import type { ToolStub } from "#tool-stubs/types.js";
11
12
  export type { HealthResult } from "#client/health-schema.js";
12
13
  export type { AgentInfoChannelEntry, AgentInfoChannels, AgentInfoConnectionEntry, AgentInfoDynamicResolverEntry, AgentInfoEntry, AgentInfoHookEntry, AgentInfoInstructions, AgentInfoInstructionsEntry, AgentInfoMemoryEntry, AgentInfoResult, AgentInfoRemoteAgentEntry, AgentInfoSandboxEntry, AgentInfoScheduleEntry, AgentInfoSkillEntry, AgentInfoSource, AgentInfoSubagentEntry, AgentInfoToolEntry, AgentInfoTools, } from "./agent-info-schema.js";
13
14
  /**
@@ -81,6 +82,11 @@ export interface SendTurnInput<TOutput = unknown> extends SendTurnOptions<TOutpu
81
82
  }
82
83
  /** Request options for creating a conversation session before its first turn. */
83
84
  export interface CreateSessionOptions {
85
+ /**
86
+ * Tool stubs stay fixed for this session and its local subagents.
87
+ * The server must authorize their use.
88
+ */
89
+ readonly stubs?: readonly ToolStub[];
84
90
  /** Abort signal for cancelling the creation request. */
85
91
  readonly signal?: AbortSignal;
86
92
  /** Additional headers for this request only. */
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "moduleFingerprints": {
3
- "@eve/catalog": "58cbb38af04c334d4282d6ebad5cdee06fb60298204cb745134b2ce2b02a3120",
3
+ "@eve/catalog": "52a3d576a671691862a63546afd53c19684247679651ac1a844a3221cd4377d3",
4
4
  "just-secrets": "1ce67d437d0bb06df02e4e99180a3c5f5edf0010314010226e97b96d462bba5d",
5
- "@workflow/world-local": "eeaeed751310cf36666c3daa07f305f431710951b0523b97dcdca3d6e69b1061"
5
+ "@workflow/world-local": "a10e78551f65fc607cf75261a569d852c40bc9cfac13a7fb6e15c88bf1ccf429"
6
6
  },
7
7
  "moduleVersions": {
8
8
  "@agentclientprotocol/sdk": "1.3.0",
@@ -49,16 +49,16 @@
49
49
  "@vercel/sandbox": "3.3.0",
50
50
  "@vercel/sdk": "1.28.8",
51
51
  "@vercel/schedules": "0.0.0-alpha.11",
52
- "@workflow/core": "5.1.0",
53
- "@workflow/errors": "5.0.2",
52
+ "@workflow/core": "5.2.0",
53
+ "@workflow/errors": "5.0.3",
54
54
  "@workflow/serde": "5.0.0",
55
- "@workflow/world": "5.0.2",
56
- "@workflow/world-local": "5.0.2",
57
- "@workflow/world-vercel": "5.1.0",
55
+ "@workflow/world": "5.0.3",
56
+ "@workflow/world-local": "5.1.0",
57
+ "@workflow/world-vercel": "5.2.0",
58
58
  "zod": "4.5.4",
59
59
  "zod-validation-error": "5.0.0"
60
60
  },
61
- "scriptHash": "f4dd2f26745407f5b94342ad15f90a1bf4d0cb1fe83bdebaf282f96684006c66",
61
+ "scriptHash": "c5602482fdb1a9963b9e4a42da1e2d3d57c9fc950587a01bf9d154c3c2b0961f",
62
62
  "toolVersions": {
63
63
  "rolldown": "1.2.9",
64
64
  "typescript": "7.0.2"
@@ -1 +1 @@
1
- function e(e){return[e.mcp?`mcp`:null,e.openapi?`openapi`:null].filter(e=>e!==null)}const t=[{slug:`slack`,name:`Slack`,kind:`channel`,tagline:`Mention your agent in channels and DMs, with Connect-managed auth.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0}},{slug:`discord`,name:`Discord`,kind:`channel`,tagline:`Run your agent as a Discord bot across servers and threads.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`teams`,name:`Microsoft Teams`,kind:`channel`,tagline:`Bring your agent into Teams chats and channels.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`telegram`,name:`Telegram`,kind:`channel`,tagline:`Connect your agent to a Telegram bot for 1:1 and group chats.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`twilio`,name:`Twilio`,kind:`channel`,tagline:`Put your agent on a phone number: SMS and speech-transcribed calls.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`blooio`,name:`Blooio`,kind:`channel`,tagline:`Send and receive iMessage, RCS, and SMS through Blooio.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`github`,name:`GitHub`,kind:`channel`,tagline:`Drive your agent from issues, pull requests, and comments, with guided Connect setup.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`linear-agent`,name:`Linear Agent`,kind:`channel`,tagline:`Delegate Linear issues and comments through Agent Sessions, with guided Connect setup.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`eve`,name:`Web Chat`,kind:`channel`,tagline:`Embed a first-party web chat UI backed by your agent.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0}},{slug:`buzz`,name:`Buzz`,kind:`channel`,tagline:`Talk to your eve agent from Buzz through its ACP desktop harness.`,surfaces:{scaffoldable:!1,registry:!1,gallery:!0}},{slug:`chat-sdk-gchat`,name:`Google Chat`,kind:`channel`,tagline:`Google Chat spaces and DMs via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-whatsapp`,name:`WhatsApp`,kind:`channel`,tagline:`Customer messaging through WhatsApp Business Cloud via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-x`,name:`X`,kind:`channel`,tagline:`Public mentions and DMs on X via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-messenger`,name:`Messenger`,kind:`channel`,tagline:`Facebook Messenger bots with templates, buttons, and reactions via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-zernio`,name:`Zernio`,kind:`channel`,tagline:`Reach seven social and messaging platforms through one Zernio integration.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-velt`,name:`Velt`,kind:`channel`,tagline:`Add agents to anchored comments across documents, canvases, PDFs, and video.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-sendblue`,name:`Sendblue`,kind:`channel`,tagline:`Send and receive iMessage, SMS, and RCS through Sendblue.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-novu`,name:`Novu`,kind:`channel`,tagline:`Reach Slack, Teams, WhatsApp, Telegram, and email through Novu.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-liveblocks`,name:`Liveblocks`,kind:`channel`,tagline:`Bring your agent into Liveblocks comment threads, mentions, and reactions.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`linq`,name:`Linq`,kind:`channel`,tagline:`iMessage and SMS conversations through Linq, with guided Connect or portable setup.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-kapso`,name:`Kapso`,kind:`channel`,tagline:`Managed WhatsApp conversations, media, buttons, and history through Kapso.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`photon`,name:`Photon`,kind:`channel`,tagline:`iMessage through Photon, with guided project and phone setup.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-dial`,name:`Dial`,kind:`channel`,tagline:`Give your agent a phone number for SMS, MMS, iMessage, and voice transcripts.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-agentphone`,name:`AgentPhone`,kind:`channel`,tagline:`SMS, MMS, iMessage, and voice conversations through AgentPhone.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-lark`,name:`Lark / Feishu`,kind:`channel`,tagline:`Lark and Feishu chats with native card streaming via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-beeper`,name:`Beeper`,kind:`channel`,tagline:`Matrix rooms and bridged messaging networks through Beeper.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-resend`,name:`Resend`,kind:`channel`,tagline:`Send and receive threaded email through Resend via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-gmail`,name:`Gmail`,kind:`channel`,tagline:`Turn labelled Gmail threads into agent conversations via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`agent-browser`,name:`agent-browser`,kind:`extension`,tagline:`Add browser automation tools backed by agent-browser to an eve agent.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`blitzreels`,name:`BlitzReels`,kind:`extension`,tagline:`Turn long videos into short clips, generate media, repair edits, and export.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`mux-video`,name:`Mux Video`,kind:`extension`,tagline:`Create and inspect video assets, make clips, and run Mux Robots workflows.`,surfaces:{scaffoldable:!1,registry:!1,gallery:!0}},{slug:`browserbase`,name:`Browserbase`,kind:`extension`,tagline:`Search, fetch, and automate the web with Browserbase and Stagehand.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`github-tools`,name:`GitHub Tools`,kind:`extension`,tagline:`Add scoped GitHub tools with Vercel Connect authentication and approval rules.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`jetty`,name:`Jetty`,kind:`extension`,tagline:`Grade agent turns, compare experiments, and store durable evaluation trajectories.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`link`,name:`Link`,kind:`extension`,tagline:`Give your eve agent guarded access to Link wallet and purchase tools.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`kernel`,name:`KERNEL`,kind:`extension`,tagline:`Let your eve agent use the Internet with KERNEL browser infra, o11y, and stealth. Integrated natively with Vercel Connect and AI Gateway.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`file`,name:`File memory`,kind:`memory`,tagline:`Store durable per-principal memory in a private Vercel Blob store provisioned for the agent.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`supermemory`,name:`Supermemory`,kind:`memory`,tagline:`Give your agents long-term memory, user profiles, and SuperRAG across conversations and context.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`upstash-agentkit`,name:`Upstash AgentKit`,kind:`memory`,tagline:`Give your agents ranked recall and automatic capture on Upstash Redis, or a Redis backend for file memory.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`arcana`,name:`Kybernesis Arcana`,kind:`memory`,tagline:`Give your agents workspace-scoped long-term memory with automatic recall and deliberate storage.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`hindsight`,name:`Hindsight`,kind:`extension`,tagline:`Recall relevant context before every turn and retain each exchange automatically.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`browser-use`,name:`Browser Use`,kind:`connection`,tagline:`Run managed browser automation tasks through Browser Use's MCP server.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0},connection:{description:`Browser Use: run browser automation tasks, inspect sessions, and manage browser profiles.`,mcp:{url:`https://api.browser-use.com/v3/mcp`}}},{slug:`dataforseo`,name:`DataForSEO`,kind:`connection`,tagline:`Run SEO, keyword, and SERP data lookups through DataForSEO's MCP server.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!1},connection:{description:`DataForSEO: run SEO, keyword, and SERP data lookups through DataForSEO's MCP server.`,mcp:{url:`https://mcp.dataforseo.com/v3/mcp`}}},{slug:`vercel`,name:`Vercel`,kind:`connection`,tagline:`Manage Vercel projects, deployments, and logs through Vercel's MCP server.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Vercel: manage projects and deployments, inspect logs, and search documentation.`,mcp:{url:`https://mcp.vercel.com`}}},{slug:`linear`,name:`Linear`,kind:`connection`,tagline:`Issues, projects, cycles, and comments via Linear's MCP server.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0},connection:{description:`Linear workspace: issues, projects, cycles, and comments.`,mcp:{url:`https://mcp.linear.app/mcp`}}},{slug:`notion`,name:`Notion`,kind:`connection`,tagline:`Search and edit Notion pages and databases over MCP or OpenAPI.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0},connection:{description:`Notion workspace: search and edit pages and databases.`,mcp:{url:`https://mcp.notion.com/mcp`},openapi:{spec:`https://developers.notion.com/openapi.json`,baseUrl:`https://api.notion.com`,headers:{"Notion-Version":`2022-06-28`}}}},{slug:`datadog`,name:`Datadog`,kind:`connection`,tagline:`Query metrics, monitors, and logs through Datadog's MCP server.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0},connection:{description:`Datadog: query metrics, monitors, logs, and incidents.`,mcp:{url:`https://mcp.datadoghq.com/api/mcp`}}},{slug:`honeycomb`,name:`Honeycomb`,kind:`connection`,tagline:`Explore traces and run queries through Honeycomb's MCP server.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0},connection:{description:`Honeycomb: explore traces, run queries, and inspect datasets.`,mcp:{url:`https://mcp.honeycomb.io/mcp`}}},{slug:`agentcard`,name:`Agentcard`,kind:`connection`,tagline:`let agents buy online`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:"Agentcard: the agent's wallet. Shop and check out at real merchants (DoorDash, Good Eggs, flights) with the conversational `buy` tool (thread conversation_id on follow-ups), issue a single-use virtual card to pay at any checkout, let the user add their own card, and manage the cash that funds it: balance, top-ups, transactions, KYC, human support.",mcp:{url:`https://mcp.agentcard.sh/mcp`}}},{slug:`airtable`,name:`Airtable`,kind:`connection`,tagline:`Bases, tables, and records through Airtable's MCP server.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Airtable: bases, tables, and records.`,mcp:{url:`https://mcp.airtable.com/mcp`}}},{slug:`bitly`,name:`Bitly`,kind:`connection`,tagline:`Shorten links, generate QR Codes, and track performance.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Bitly: shorten links, generate QR Codes, and track link performance.`,mcp:{url:`https://api-ssl.bitly.com/v4/mcp`}}},{slug:`brex`,name:`Brex`,kind:`connection`,tagline:`Expenses, cards, and cash through Brex's finance automation.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Brex: expenses, cards, budgets, and cash.`,mcp:{url:`https://api.brex.com/mcp`}}},{slug:`candid`,name:`Candid`,kind:`connection`,tagline:`Research nonprofits and funders using Candid's data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Candid: research nonprofits, funders, and grants.`,mcp:{url:`https://mcp.candid.org/mcp`}}},{slug:`clickhouse`,name:`ClickHouse`,kind:`connection`,tagline:`Query and explore your ClickHouse Cloud data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`ClickHouse Cloud: query and explore databases and tables.`,mcp:{url:`https://mcp.clickhouse.cloud/mcp`}}},{slug:`cloudinary`,name:`Cloudinary`,kind:`connection`,tagline:`Manage, transform, and deliver your images and videos.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Cloudinary: manage, transform, and deliver image and video assets.`,mcp:{url:`https://asset-management.mcp.cloudinary.com/sse`}}},{slug:`coda`,name:`Coda`,kind:`connection`,tagline:`Create, search, and update docs and tables.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Coda: create, search, and update docs and tables.`,mcp:{url:`https://coda.io/apis/mcp`}}},{slug:`context`,name:`context.dev`,kind:`connection`,tagline:`search, scrape, extract, and monitor live web data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`context.dev: search the live web, scrape and crawl sites, extract structured data, parse files, retrieve brand intelligence, monitor changes, and run batch jobs.`,mcp:{url:`https://mcp.context.dev/mcp`}}},{slug:`egnyte`,name:`Egnyte`,kind:`connection`,tagline:`Securely access and analyze Egnyte content.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Egnyte: search, access, and analyze governed content.`,mcp:{url:`https://mcp-server.egnyte.com/mcp`}}},{slug:`embat`,name:`Embat`,kind:`connection`,tagline:`Ask Embat about cash, debt, payments, and accounting.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Embat: cash, debt, payments, and accounting.`,mcp:{url:`https://tellme.embat.io/mcp`}}},{slug:`hugging-face`,name:`Hugging Face`,kind:`connection`,tagline:`Access the Hugging Face Hub and thousands of Gradio apps.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Hugging Face: models, datasets, Spaces, and Gradio apps on the Hub.`,mcp:{url:`https://huggingface.co/mcp?login&gradio=none`}}},{slug:`local-falcon`,name:`Local Falcon`,kind:`connection`,tagline:`AI visibility and local search intelligence.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Local Falcon: local search rankings and AI visibility reports.`,mcp:{url:`https://mcp.localfalcon.com`}}},{slug:`make`,name:`Make`,kind:`connection`,tagline:`Run Make scenarios and manage your Make account.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Make: run scenarios and manage automations.`,mcp:{url:`https://mcp.make.com`}}},{slug:`manufact`,name:`Manufact`,kind:`connection`,tagline:`Deploy and monitor MCP servers with Manufact.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Manufact: deploy and monitor MCP servers.`,mcp:{url:`https://mcp.manufact.com/mcp`}}},{slug:`mem0`,name:`Mem0`,kind:`connection`,tagline:`Persistent memory for AI agents and assistants.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Mem0: store and retrieve persistent agent memory.`,mcp:{url:`https://mcp.mem0.ai/mcp`}}},{slug:`miro`,name:`Miro`,kind:`connection`,tagline:`Access and create content on Miro boards.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Miro: read and create content on boards.`,mcp:{url:`https://mcp.miro.com/`}}},{slug:`mixpanel`,name:`Mixpanel`,kind:`connection`,tagline:`Analyze, query, and manage your Mixpanel data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Mixpanel: analyze, query, and manage analytics data.`,mcp:{url:`https://mcp.mixpanel.com/mcp`}}},{slug:`natural`,name:`Natural`,kind:`connection`,tagline:`Send, request, and manage payments with Natural.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Natural: agentic payments — send and request payments, check balances, and move funds.`,mcp:{url:`https://mcp.natural.com/mcp`}}},{slug:`neon`,name:`Neon`,kind:`connection`,tagline:`Manage Neon projects, run queries, and make schema changes.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Neon: manage projects, run queries, and make schema changes.`,mcp:{url:`https://mcp.neon.tech/mcp`}}},{slug:`netlify`,name:`Netlify`,kind:`connection`,tagline:`Create, deploy, manage, and secure websites on Netlify.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Netlify: create, deploy, manage, and secure sites.`,mcp:{url:`https://netlify-mcp.netlify.app/mcp`}}},{slug:`oreilly`,name:`O'Reilly`,kind:`connection`,tagline:`Discover O'Reilly's expert learning content.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`O'Reilly: search books, courses, and learning content.`,mcp:{url:`https://api.oreilly.com/api/content-discovery/v1/mcp/`}}},{slug:`planetscale`,name:`PlanetScale`,kind:`connection`,tagline:`Authenticated access to your PlanetScale Postgres and MySQL databases.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`PlanetScale: query Postgres and MySQL databases.`,mcp:{url:`https://mcp.pscale.dev/mcp/planetscale`}}},{slug:`posthog`,name:`PostHog`,kind:`connection`,tagline:`Query, analyze, and manage your PostHog insights.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`PostHog: insights, events, and feature flags.`,mcp:{url:`https://mcp.posthog.com/mcp`}}},{slug:`postman`,name:`Postman`,kind:`connection`,tagline:`Give API context to your coding agents with Postman.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Postman: APIs, collections, and workspaces.`,mcp:{url:`https://mcp.postman.com/minimal`}}},{slug:`razorpay`,name:`Razorpay`,kind:`connection`,tagline:`Razorpay payments, settlements, and dashboard data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Razorpay: payments, settlements, and dashboard data.`,mcp:{url:`https://mcp.razorpay.com/mcp`}}},{slug:`sanity`,name:`Sanity`,kind:`connection`,tagline:`Query and edit Sanity content, inspect schemas, and manage releases.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Sanity: query content with GROQ, edit documents, inspect schemas, and manage releases.`,mcp:{url:`https://mcp.sanity.io`}}},{slug:`sentry`,name:`Sentry`,kind:`connection`,tagline:`Search, query, and debug errors intelligently.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Sentry: search, query, and debug errors and issues.`,mcp:{url:`https://mcp.sentry.dev/mcp`}}},{slug:`similarweb`,name:`Similarweb`,kind:`connection`,tagline:`Real-time web, mobile app, and market data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Similarweb: web traffic, app, and market intelligence data.`,mcp:{url:`https://mcp.similarweb.com`}}},{slug:`shopify`,name:`Shopify`,kind:`connection`,tagline:`Search products and manage carts and checkouts on a Shopify storefront.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Search products and build carts and checkouts on a Shopify storefront.`,mcp:{url:`https://{shop}.myshopify.com/api/ucp/mcp`}}},{slug:`stripe`,name:`Stripe`,kind:`connection`,tagline:`Payment processing and financial infrastructure tools.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Stripe: payments, customers, billing, and financial infrastructure.`,mcp:{url:`https://mcp.stripe.com`}}},{slug:`supabase`,name:`Supabase`,kind:`connection`,tagline:`Manage databases, authentication, and storage.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Supabase: databases, authentication, and storage.`,mcp:{url:`https://mcp.supabase.com/mcp`}}},{slug:`ticket-tailor`,name:`Ticket Tailor`,kind:`connection`,tagline:`Manage tickets, orders, and events with Ticket Tailor.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Ticket Tailor: events, tickets, and orders.`,mcp:{url:`https://mcp.tickettailor.ai/mcp`}}},{slug:`ticktick`,name:`TickTick`,kind:`connection`,tagline:`Search, create, and manage your tasks and habits in TickTick.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`TickTick: tasks, habits, and lists.`,mcp:{url:`https://mcp.ticktick.com`}}},{slug:`tinybird`,name:`Tinybird`,kind:`connection`,tagline:`Query pipes and data sources in your Tinybird Workspace.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Tinybird: query pipes and data sources, and run SQL. A token grants one Workspace, so add a connection per Workspace.`,mcp:{url:`https://mcp.tinybird.co`}}},{slug:`todoist`,name:`Todoist`,kind:`connection`,tagline:`Search, complete, and manage your tasks in Todoist.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Todoist: search, complete, and manage tasks.`,mcp:{url:`https://ai.todoist.net/mcp`}}},{slug:`webflow`,name:`Webflow`,kind:`connection`,tagline:`Manage Webflow CMS, pages, assets, and sites.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Webflow: CMS items, pages, assets, and sites.`,mcp:{url:`https://mcp.webflow.com/mcp`}}},{slug:`wix`,name:`Wix`,kind:`connection`,tagline:`Manage and build sites and apps on Wix.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Wix: manage and build sites and apps.`,mcp:{url:`https://mcp.wix.com/mcp`}}},{slug:`zapier`,name:`Zapier`,kind:`connection`,tagline:`Automate workflows across thousands of apps.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Zapier: run and manage automations across apps.`,mcp:{url:`https://mcp.zapier.com/api/v1/connect`}}},{slug:`zomato`,name:`Zomato`,kind:`connection`,tagline:`Online food ordering and delivery through Zomato.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Zomato: food ordering and delivery.`,mcp:{url:`https://mcp-server.zomato.com/mcp`}}},{slug:`braintrust`,name:`Braintrust`,kind:`instrumentation`,tagline:`Export AI SDK spans to Braintrust for tracing, evals, and monitoring.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`posthog-instrumentation`,name:`PostHog`,kind:`instrumentation`,tagline:`Send agent traces and generations to PostHog AI Observability.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`sentry-instrumentation`,name:`Sentry`,kind:`instrumentation`,tagline:`Send agent traces to Sentry's OTLP endpoint for tracing and debugging.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`datadog-instrumentation`,name:`Datadog`,kind:`instrumentation`,tagline:`Export agent traces to Datadog APM alongside the rest of your stack.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`honeycomb-instrumentation`,name:`Honeycomb`,kind:`instrumentation`,tagline:`Send OpenTelemetry traces to Honeycomb and query every agent turn.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`arize`,name:`Arize`,kind:`instrumentation`,tagline:`Export traces to Arize AX for LLM observability and evaluation.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`raindrop`,name:`Raindrop`,kind:`instrumentation`,tagline:`Send agent traces to Raindrop to detect and debug AI product issues.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`jaeger`,name:`Jaeger`,kind:`instrumentation`,tagline:`Trace your agent with a local or self-hosted Jaeger OTLP backend.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}}],n=new Map(t.map(e=>[e.slug,e]));function r(e){return n.get(e)}function i(e){return t.filter(t=>t.kind===e)}function a(){return i(`connection`)}function o(){return i(`channel`)}function s(){return i(`extension`)}function c(){return i(`instrumentation`)}function l(){return i(`memory`)}export{t as INTEGRATIONS,o as channelEntries,a as connectionEntries,e as connectionProtocols,s as extensionEntries,r as getIntegrationEntry,c as instrumentationEntries,i as integrationsByKind,l as memoryEntries};
1
+ function e(e){return[e.mcp?`mcp`:null,e.openapi?`openapi`:null].filter(e=>e!==null)}const t=[{slug:`eve`,name:`Web Chat`,kind:`channel`,tagline:`Embed a first-party web chat UI backed by your agent.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0}},{slug:`slack`,name:`Slack`,kind:`channel`,tagline:`Mention your agent in channels and DMs, with Connect-managed auth.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0}},{slug:`discord`,name:`Discord`,kind:`channel`,tagline:`Run your agent as a Discord bot across servers and threads.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`teams`,name:`Microsoft Teams`,kind:`channel`,tagline:`Bring your agent into Teams chats and channels.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`telegram`,name:`Telegram`,kind:`channel`,tagline:`Connect your agent to a Telegram bot for 1:1 and group chats.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`twilio`,name:`Twilio`,kind:`channel`,tagline:`Put your agent on a phone number: SMS and speech-transcribed calls.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`blooio`,name:`Blooio`,kind:`channel`,tagline:`Send and receive iMessage, RCS, and SMS through Blooio.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`github`,name:`GitHub`,kind:`channel`,tagline:`Drive your agent from issues, pull requests, and comments, with guided Connect setup.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`linear-agent`,name:`Linear Agent`,kind:`channel`,tagline:`Delegate Linear issues and comments through Agent Sessions, with guided Connect setup.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`buzz`,name:`Buzz`,kind:`channel`,tagline:`Talk to your eve agent from Buzz through its ACP desktop harness.`,surfaces:{scaffoldable:!1,registry:!1,gallery:!0}},{slug:`chat-sdk-gchat`,name:`Google Chat`,kind:`channel`,tagline:`Google Chat spaces and DMs via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-whatsapp`,name:`WhatsApp`,kind:`channel`,tagline:`Customer messaging through WhatsApp Business Cloud via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-x`,name:`X`,kind:`channel`,tagline:`Public mentions and DMs on X via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-messenger`,name:`Messenger`,kind:`channel`,tagline:`Facebook Messenger bots with templates, buttons, and reactions via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-zernio`,name:`Zernio`,kind:`channel`,tagline:`Reach seven social and messaging platforms through one Zernio integration.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-velt`,name:`Velt`,kind:`channel`,tagline:`Add agents to anchored comments across documents, canvases, PDFs, and video.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-sendblue`,name:`Sendblue`,kind:`channel`,tagline:`Send and receive iMessage, SMS, and RCS through Sendblue.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-novu`,name:`Novu`,kind:`channel`,tagline:`Reach Slack, Teams, WhatsApp, Telegram, and email through Novu.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-liveblocks`,name:`Liveblocks`,kind:`channel`,tagline:`Bring your agent into Liveblocks comment threads, mentions, and reactions.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`linq`,name:`Linq`,kind:`channel`,tagline:`iMessage and SMS conversations through Linq, with guided Connect or portable setup.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-kapso`,name:`Kapso`,kind:`channel`,tagline:`Managed WhatsApp conversations, media, buttons, and history through Kapso.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`photon`,name:`Photon`,kind:`channel`,tagline:`iMessage through Photon, with guided project and phone setup.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-dial`,name:`Dial`,kind:`channel`,tagline:`Give your agent a phone number for SMS, MMS, iMessage, and voice transcripts.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-agentphone`,name:`AgentPhone`,kind:`channel`,tagline:`SMS, MMS, iMessage, and voice conversations through AgentPhone.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-lark`,name:`Lark / Feishu`,kind:`channel`,tagline:`Lark and Feishu chats with native card streaming via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-beeper`,name:`Beeper`,kind:`channel`,tagline:`Matrix rooms and bridged messaging networks through Beeper.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-resend`,name:`Resend`,kind:`channel`,tagline:`Send and receive threaded email through Resend via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`chat-sdk-gmail`,name:`Gmail`,kind:`channel`,tagline:`Turn labelled Gmail threads into agent conversations via the Chat SDK.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`agent-browser`,name:`agent-browser`,kind:`extension`,tagline:`Add browser automation tools backed by agent-browser to an eve agent.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`blitzreels`,name:`BlitzReels`,kind:`extension`,tagline:`Turn long videos into short clips, generate media, repair edits, and export.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`mux-video`,name:`Mux Video`,kind:`extension`,tagline:`Create and inspect video assets, make clips, and run Mux Robots workflows.`,surfaces:{scaffoldable:!1,registry:!1,gallery:!0}},{slug:`browserbase`,name:`Browserbase`,kind:`extension`,tagline:`Search, fetch, and automate the web with Browserbase and Stagehand.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`github-tools`,name:`GitHub Tools`,kind:`extension`,tagline:`Add scoped GitHub tools with Vercel Connect authentication and approval rules.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`jetty`,name:`Jetty`,kind:`extension`,tagline:`Grade agent turns, compare experiments, and store durable evaluation trajectories.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`link`,name:`Link`,kind:`extension`,tagline:`Give your eve agent guarded access to Link wallet and purchase tools.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`kernel`,name:`KERNEL`,kind:`extension`,tagline:`Let your eve agent use the Internet with KERNEL browser infra, o11y, and stealth. Integrated natively with Vercel Connect and AI Gateway.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`file`,name:`File memory`,kind:`memory`,tagline:`Store durable per-principal memory in a private Vercel Blob store provisioned for the agent.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`supermemory`,name:`Supermemory`,kind:`memory`,tagline:`Give your agents long-term memory, user profiles, and SuperRAG across conversations and context.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`upstash-agentkit`,name:`Upstash AgentKit`,kind:`memory`,tagline:`Give your agents ranked recall and automatic capture on Upstash Redis, or a Redis backend for file memory.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`arcana`,name:`Kybernesis Arcana`,kind:`memory`,tagline:`Give your agents workspace-scoped long-term memory with automatic recall and deliberate storage.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`hindsight`,name:`Hindsight`,kind:`extension`,tagline:`Recall relevant context before every turn and retain each exchange automatically.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`browser-use`,name:`Browser Use`,kind:`connection`,tagline:`Run managed browser automation tasks through Browser Use's MCP server.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0},connection:{description:`Browser Use: run browser automation tasks, inspect sessions, and manage browser profiles.`,mcp:{url:`https://api.browser-use.com/v3/mcp`}}},{slug:`dataforseo`,name:`DataForSEO`,kind:`connection`,tagline:`Run SEO, keyword, and SERP data lookups through DataForSEO's MCP server.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!1},connection:{description:`DataForSEO: run SEO, keyword, and SERP data lookups through DataForSEO's MCP server.`,mcp:{url:`https://mcp.dataforseo.com/v3/mcp`}}},{slug:`vercel`,name:`Vercel`,kind:`connection`,tagline:`Manage Vercel projects, deployments, and logs through Vercel's MCP server.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Vercel: manage projects and deployments, inspect logs, and search documentation.`,mcp:{url:`https://mcp.vercel.com`}}},{slug:`linear`,name:`Linear`,kind:`connection`,tagline:`Issues, projects, cycles, and comments via Linear's MCP server.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0},connection:{description:`Linear workspace: issues, projects, cycles, and comments.`,mcp:{url:`https://mcp.linear.app/mcp`}}},{slug:`notion`,name:`Notion`,kind:`connection`,tagline:`Search and edit Notion pages and databases over MCP or OpenAPI.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0},connection:{description:`Notion workspace: search and edit pages and databases.`,mcp:{url:`https://mcp.notion.com/mcp`},openapi:{spec:`https://developers.notion.com/openapi.json`,baseUrl:`https://api.notion.com`,headers:{"Notion-Version":`2022-06-28`}}}},{slug:`datadog`,name:`Datadog`,kind:`connection`,tagline:`Query metrics, monitors, and logs through Datadog's MCP server.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0},connection:{description:`Datadog: query metrics, monitors, logs, and incidents.`,mcp:{url:`https://mcp.datadoghq.com/api/mcp`}}},{slug:`honeycomb`,name:`Honeycomb`,kind:`connection`,tagline:`Explore traces and run queries through Honeycomb's MCP server.`,surfaces:{scaffoldable:!0,registry:!0,gallery:!0},connection:{description:`Honeycomb: explore traces, run queries, and inspect datasets.`,mcp:{url:`https://mcp.honeycomb.io/mcp`}}},{slug:`agentcard`,name:`Agentcard`,kind:`connection`,tagline:`let agents buy online`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:"Agentcard: the agent's wallet. Shop and check out at real merchants (DoorDash, Good Eggs, flights) with the conversational `buy` tool (thread conversation_id on follow-ups), issue a single-use virtual card to pay at any checkout, let the user add their own card, and manage the cash that funds it: balance, top-ups, transactions, KYC, human support.",mcp:{url:`https://mcp.agentcard.sh/mcp`}}},{slug:`airtable`,name:`Airtable`,kind:`connection`,tagline:`Bases, tables, and records through Airtable's MCP server.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Airtable: bases, tables, and records.`,mcp:{url:`https://mcp.airtable.com/mcp`}}},{slug:`bitly`,name:`Bitly`,kind:`connection`,tagline:`Shorten links, generate QR Codes, and track performance.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Bitly: shorten links, generate QR Codes, and track link performance.`,mcp:{url:`https://api-ssl.bitly.com/v4/mcp`}}},{slug:`brex`,name:`Brex`,kind:`connection`,tagline:`Expenses, cards, and cash through Brex's finance automation.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Brex: expenses, cards, budgets, and cash.`,mcp:{url:`https://api.brex.com/mcp`}}},{slug:`candid`,name:`Candid`,kind:`connection`,tagline:`Research nonprofits and funders using Candid's data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Candid: research nonprofits, funders, and grants.`,mcp:{url:`https://mcp.candid.org/mcp`}}},{slug:`clickhouse`,name:`ClickHouse`,kind:`connection`,tagline:`Query and explore your ClickHouse Cloud data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`ClickHouse Cloud: query and explore databases and tables.`,mcp:{url:`https://mcp.clickhouse.cloud/mcp`}}},{slug:`cloudinary`,name:`Cloudinary`,kind:`connection`,tagline:`Manage, transform, and deliver your images and videos.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Cloudinary: manage, transform, and deliver image and video assets.`,mcp:{url:`https://asset-management.mcp.cloudinary.com/sse`}}},{slug:`coda`,name:`Coda`,kind:`connection`,tagline:`Create, search, and update docs and tables.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Coda: create, search, and update docs and tables.`,mcp:{url:`https://coda.io/apis/mcp`}}},{slug:`context`,name:`context.dev`,kind:`connection`,tagline:`search, scrape, extract, and monitor live web data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`context.dev: search the live web, scrape and crawl sites, extract structured data, parse files, retrieve brand intelligence, monitor changes, and run batch jobs.`,mcp:{url:`https://mcp.context.dev/mcp`}}},{slug:`egnyte`,name:`Egnyte`,kind:`connection`,tagline:`Securely access and analyze Egnyte content.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Egnyte: search, access, and analyze governed content.`,mcp:{url:`https://mcp-server.egnyte.com/mcp`}}},{slug:`embat`,name:`Embat`,kind:`connection`,tagline:`Ask Embat about cash, debt, payments, and accounting.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Embat: cash, debt, payments, and accounting.`,mcp:{url:`https://tellme.embat.io/mcp`}}},{slug:`hugging-face`,name:`Hugging Face`,kind:`connection`,tagline:`Access the Hugging Face Hub and thousands of Gradio apps.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Hugging Face: models, datasets, Spaces, and Gradio apps on the Hub.`,mcp:{url:`https://huggingface.co/mcp?login&gradio=none`}}},{slug:`local-falcon`,name:`Local Falcon`,kind:`connection`,tagline:`AI visibility and local search intelligence.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Local Falcon: local search rankings and AI visibility reports.`,mcp:{url:`https://mcp.localfalcon.com`}}},{slug:`make`,name:`Make`,kind:`connection`,tagline:`Run Make scenarios and manage your Make account.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Make: run scenarios and manage automations.`,mcp:{url:`https://mcp.make.com`}}},{slug:`manufact`,name:`Manufact`,kind:`connection`,tagline:`Deploy and monitor MCP servers with Manufact.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Manufact: deploy and monitor MCP servers.`,mcp:{url:`https://mcp.manufact.com/mcp`}}},{slug:`mem0`,name:`Mem0`,kind:`connection`,tagline:`Persistent memory for AI agents and assistants.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Mem0: store and retrieve persistent agent memory.`,mcp:{url:`https://mcp.mem0.ai/mcp`}}},{slug:`miro`,name:`Miro`,kind:`connection`,tagline:`Access and create content on Miro boards.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Miro: read and create content on boards.`,mcp:{url:`https://mcp.miro.com/`}}},{slug:`mixpanel`,name:`Mixpanel`,kind:`connection`,tagline:`Analyze, query, and manage your Mixpanel data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Mixpanel: analyze, query, and manage analytics data.`,mcp:{url:`https://mcp.mixpanel.com/mcp`}}},{slug:`natural`,name:`Natural`,kind:`connection`,tagline:`Send, request, and manage payments with Natural.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Natural: agentic payments — send and request payments, check balances, and move funds.`,mcp:{url:`https://mcp.natural.com/mcp`}}},{slug:`neon`,name:`Neon`,kind:`connection`,tagline:`Manage Neon projects, run queries, and make schema changes.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Neon: manage projects, run queries, and make schema changes.`,mcp:{url:`https://mcp.neon.tech/mcp`}}},{slug:`netlify`,name:`Netlify`,kind:`connection`,tagline:`Create, deploy, manage, and secure websites on Netlify.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Netlify: create, deploy, manage, and secure sites.`,mcp:{url:`https://netlify-mcp.netlify.app/mcp`}}},{slug:`oreilly`,name:`O'Reilly`,kind:`connection`,tagline:`Discover O'Reilly's expert learning content.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`O'Reilly: search books, courses, and learning content.`,mcp:{url:`https://api.oreilly.com/api/content-discovery/v1/mcp/`}}},{slug:`planetscale`,name:`PlanetScale`,kind:`connection`,tagline:`Authenticated access to your PlanetScale Postgres and MySQL databases.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`PlanetScale: query Postgres and MySQL databases.`,mcp:{url:`https://mcp.pscale.dev/mcp/planetscale`}}},{slug:`posthog`,name:`PostHog`,kind:`connection`,tagline:`Query, analyze, and manage your PostHog insights.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`PostHog: insights, events, and feature flags.`,mcp:{url:`https://mcp.posthog.com/mcp`}}},{slug:`postman`,name:`Postman`,kind:`connection`,tagline:`Give API context to your coding agents with Postman.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Postman: APIs, collections, and workspaces.`,mcp:{url:`https://mcp.postman.com/minimal`}}},{slug:`razorpay`,name:`Razorpay`,kind:`connection`,tagline:`Razorpay payments, settlements, and dashboard data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Razorpay: payments, settlements, and dashboard data.`,mcp:{url:`https://mcp.razorpay.com/mcp`}}},{slug:`sanity`,name:`Sanity`,kind:`connection`,tagline:`Query and edit Sanity content, inspect schemas, and manage releases.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Sanity: query content with GROQ, edit documents, inspect schemas, and manage releases.`,mcp:{url:`https://mcp.sanity.io`}}},{slug:`sentry`,name:`Sentry`,kind:`connection`,tagline:`Search, query, and debug errors intelligently.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Sentry: search, query, and debug errors and issues.`,mcp:{url:`https://mcp.sentry.dev/mcp`}}},{slug:`similarweb`,name:`Similarweb`,kind:`connection`,tagline:`Real-time web, mobile app, and market data.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Similarweb: web traffic, app, and market intelligence data.`,mcp:{url:`https://mcp.similarweb.com`}}},{slug:`shopify`,name:`Shopify`,kind:`connection`,tagline:`Search products and manage carts and checkouts on a Shopify storefront.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Search products and build carts and checkouts on a Shopify storefront.`,mcp:{url:`https://{shop}.myshopify.com/api/ucp/mcp`}}},{slug:`stripe`,name:`Stripe`,kind:`connection`,tagline:`Payment processing and financial infrastructure tools.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Stripe: payments, customers, billing, and financial infrastructure.`,mcp:{url:`https://mcp.stripe.com`}}},{slug:`supabase`,name:`Supabase`,kind:`connection`,tagline:`Manage databases, authentication, and storage.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Supabase: databases, authentication, and storage.`,mcp:{url:`https://mcp.supabase.com/mcp`}}},{slug:`ticket-tailor`,name:`Ticket Tailor`,kind:`connection`,tagline:`Manage tickets, orders, and events with Ticket Tailor.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Ticket Tailor: events, tickets, and orders.`,mcp:{url:`https://mcp.tickettailor.ai/mcp`}}},{slug:`ticktick`,name:`TickTick`,kind:`connection`,tagline:`Search, create, and manage your tasks and habits in TickTick.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`TickTick: tasks, habits, and lists.`,mcp:{url:`https://mcp.ticktick.com`}}},{slug:`tinybird`,name:`Tinybird`,kind:`connection`,tagline:`Query pipes and data sources in your Tinybird Workspace.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Tinybird: query pipes and data sources, and run SQL. A token grants one Workspace, so add a connection per Workspace.`,mcp:{url:`https://mcp.tinybird.co`}}},{slug:`todoist`,name:`Todoist`,kind:`connection`,tagline:`Search, complete, and manage your tasks in Todoist.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Todoist: search, complete, and manage tasks.`,mcp:{url:`https://ai.todoist.net/mcp`}}},{slug:`webflow`,name:`Webflow`,kind:`connection`,tagline:`Manage Webflow CMS, pages, assets, and sites.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Webflow: CMS items, pages, assets, and sites.`,mcp:{url:`https://mcp.webflow.com/mcp`}}},{slug:`wix`,name:`Wix`,kind:`connection`,tagline:`Manage and build sites and apps on Wix.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Wix: manage and build sites and apps.`,mcp:{url:`https://mcp.wix.com/mcp`}}},{slug:`zapier`,name:`Zapier`,kind:`connection`,tagline:`Automate workflows across thousands of apps.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Zapier: run and manage automations across apps.`,mcp:{url:`https://mcp.zapier.com/api/v1/connect`}}},{slug:`zomato`,name:`Zomato`,kind:`connection`,tagline:`Online food ordering and delivery through Zomato.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0},connection:{description:`Zomato: food ordering and delivery.`,mcp:{url:`https://mcp-server.zomato.com/mcp`}}},{slug:`braintrust`,name:`Braintrust`,kind:`instrumentation`,tagline:`Export AI SDK spans to Braintrust for tracing, evals, and monitoring.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`posthog-instrumentation`,name:`PostHog`,kind:`instrumentation`,tagline:`Send agent traces and generations to PostHog AI Observability.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`sentry-instrumentation`,name:`Sentry`,kind:`instrumentation`,tagline:`Send agent traces to Sentry's OTLP endpoint for tracing and debugging.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`datadog-instrumentation`,name:`Datadog`,kind:`instrumentation`,tagline:`Export agent traces to Datadog APM alongside the rest of your stack.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`honeycomb-instrumentation`,name:`Honeycomb`,kind:`instrumentation`,tagline:`Send OpenTelemetry traces to Honeycomb and query every agent turn.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`arize`,name:`Arize`,kind:`instrumentation`,tagline:`Export traces to Arize AX for LLM observability and evaluation.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`raindrop`,name:`Raindrop`,kind:`instrumentation`,tagline:`Send agent traces to Raindrop to detect and debug AI product issues.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}},{slug:`jaeger`,name:`Jaeger`,kind:`instrumentation`,tagline:`Trace your agent with a local or self-hosted Jaeger OTLP backend.`,surfaces:{scaffoldable:!1,registry:!0,gallery:!0}}],n=new Map(t.map(e=>[e.slug,e]));function r(e){return n.get(e)}function i(e){return t.filter(t=>t.kind===e)}function a(){return i(`connection`)}function o(){return i(`channel`)}function s(){return i(`extension`)}function c(){return i(`instrumentation`)}function l(){return i(`memory`)}export{t as INTEGRATIONS,o as channelEntries,a as connectionEntries,e as connectionProtocols,s as extensionEntries,r as getIntegrationEntry,c as instrumentationEntries,i as integrationsByKind,l as memoryEntries};
@@ -77,6 +77,16 @@ export declare class WorkflowSuspension extends Error {
77
77
  attributeCount: number;
78
78
  hookDisposedCount: number;
79
79
  abortCount: number;
80
+ /**
81
+ * Correlation ids of the open hooks that workflow code was waiting on a
82
+ * payload for when the VM went idle, i.e. the hooks whose `hook_received`
83
+ * could change what this suspension leads to. A hook absent from the set has
84
+ * no waiting consumer, so a payload landing for it is buffered and inert
85
+ * until the first `await`. `undefined` when the suspension was built without
86
+ * the workflow context that tracks awaiters, which callers must read as
87
+ * "every open hook is observed". See `runtime/out-of-band-observation.ts`.
88
+ */
89
+ observedHookIds?: ReadonlySet<string>;
80
90
  constructor(itemsInput: Map<string, QueueItem>, global: typeof globalThis);
81
91
  static is(value: unknown): value is WorkflowSuspension;
82
92
  }
@@ -1,2 +1,2 @@
1
- import"../../_chunks/workflow/dist-DmXynLVH.js";import{$r as e,Br as t,Gr as n,Jr as r,K as i,Kr as a,Qr as o,Sr as s,T as c,Ur as l,Zr as u,ei as d,i as f,q as p,qr as m,x as h}from"../../_chunks/workflow/serialization-vDozzDhh.js";import{d as g,i as _}from"../../_chunks/workflow/dist-T5NnW-0k.js";import{a as v,i as y,r as b,t as x}from"../../_chunks/workflow/attribute-changes-CSqvJx6j.js";import{n as S}from"../../_chunks/workflow/resume-hook-CvENCrxc.js";import{t as C}from"../../_chunks/workflow/sleep-BMqbraZM.js";function w(e){y(`createHook()`,`https://workflow-sdk.dev/docs/api-reference/workflow/create-hook`,w)}function T(e){y(`createWebhook()`,`https://workflow-sdk.dev/docs/api-reference/workflow/create-webhook`,T)}function E({schema:e}={}){function t(e){y(`defineHook().create()`,`https://workflow-sdk.dev/docs/api-reference/workflow/define-hook`,t)}return{create:t,async resume(t,n){if(!e?.[`~standard`])return await S(t,n);let r=e[`~standard`].validate(n);if(r instanceof Promise&&(r=await r),r.issues){let e=r.issues.map(e=>{let t=e.path?.map(e=>String(typeof e==`object`&&e?e.key:e)).join(`.`);return t?` at "${t}": ${e.message}`:` ${e.message}`});throw Error(`Hook payload did not match the defined schema:\n${e.join(`
1
+ import"../../_chunks/workflow/dist-CyBgVS7g.js";import{$r as e,Br as t,Gr as n,Jr as r,K as i,Kr as a,Qr as o,Sr as s,T as c,Ur as l,Zr as u,ei as d,i as f,q as p,qr as m,x as h}from"../../_chunks/workflow/serialization-DPdYS_w2.js";import{d as g,i as _}from"../../_chunks/workflow/dist-T5NnW-0k.js";import{a as v,i as y,r as b,t as x}from"../../_chunks/workflow/attribute-changes-BW-kbMMn.js";import{n as S}from"../../_chunks/workflow/resume-hook-DMsV_b4n.js";import{t as C}from"../../_chunks/workflow/sleep-BY6leHh8.js";function w(e){y(`createHook()`,`https://workflow-sdk.dev/docs/api-reference/workflow/create-hook`,w)}function T(e){y(`createWebhook()`,`https://workflow-sdk.dev/docs/api-reference/workflow/create-webhook`,T)}function E({schema:e}={}){function t(e){y(`defineHook().create()`,`https://workflow-sdk.dev/docs/api-reference/workflow/define-hook`,t)}return{create:t,async resume(t,n){if(!e?.[`~standard`])return await S(t,n);let r=e[`~standard`].validate(n);if(r instanceof Promise&&(r=await r),r.issues){let e=r.issues.map(e=>{let t=e.path?.map(e=>String(typeof e==`object`&&e?e.key:e)).join(`.`);return t?` at "${t}": ${e.message}`:` ${e.message}`});throw Error(`Hook payload did not match the defined schema:\n${e.join(`
2
2
  `)}`)}return await S(t,r.value)}}}async function D(e,t={}){let n=p.getStore(),r=n?.workflowMetadata?.workflowRunId;if(!r)throw new _(`setAttributes() must be called from a 'use workflow' or 'use step' function. Calling it from plain host code is not supported.`);let i={type:`step`,stepId:n.stepMetadata.stepId,attempt:n.stepMetadata.attempt},a=x(e,t,i);if(a.length!==0){if(n.runReadyBarrier)try{await n.runReadyBarrier}catch{}await(await l()).events.create(r,{eventType:`attr_set`,specVersion:8,eventData:{changes:a,writer:i,...t.allowReservedAttributes===!0?{allowReservedAttributes:!0}:{}}})}}function O(){let e=p.getStore();return e||b(`getStepMetadata()`,`https://workflow-sdk.dev/docs/api-reference/workflow/get-step-metadata`,O),e.stepMetadata}function k(){let e=p.getStore();return e||v(`getWorkflowMetadata()`,`https://workflow-sdk.dev/docs/api-reference/workflow/get-workflow-metadata`,k),e.workflowMetadata}function A(l={}){let g=p.getStore();g||v(`getWritable()`,`https://workflow-sdk.dev/docs/api-reference/workflow/get-writable`,A);let{namespace:_}=l,y=g.workflowMetadata.workflowRunId,b=i(y,_);g.writables??=new Map;let x=g.writables,S=x.get(b);if(S)return S.writable;let C=n();C.deferReleaseSettlement=g.streamStates!==void 0;let w=c(h(globalThis,g.ops,y,g.encryptionKey,!0,g.runReadyBarrier),g.encryptionKey),T=new f(y,b,g.runReadyBarrier);g.streamStates??=[],g.streamStates.push(C),g.ops.push(C.promise),a(w.readable,T,C).catch(()=>{});let E=r(w.writable,C);return m(E,C),Object.defineProperty(E,u,{value:b,writable:!1}),Object.defineProperty(E,d,{value:y,writable:!1}),g.workflowDeploymentId&&Object.defineProperty(E,o,{value:g.workflowDeploymentId,writable:!1}),s(g.encryptionKey)&&Object.defineProperty(E,e,{value:t(g.encryptionKey.keyPair.publicKey),writable:!1}),x.set(b,{writable:E,state:C}),E}export{_ as FatalError,g as RetryableError,w as createHook,T as createWebhook,E as defineHook,O as getStepMetadata,k as getWorkflowMetadata,A as getWritable,D as setAttributes,C as sleep};
@@ -44,6 +44,17 @@ export interface WorkflowOrchestratorContext {
44
44
  * Using Map instead of Array for O(1) lookup/delete operations.
45
45
  */
46
46
  invocationsQueue: Map<string, QueueItem>;
47
+ /**
48
+ * Per open hook, a probe for whether workflow code is currently waiting on
49
+ * its next payload (an `await hook`, a pending `for await` iteration, or a
50
+ * `.then` on it). Registered by `createHook` and dropped once the hook can
51
+ * receive nothing more. Snapshotted into
52
+ * {@link WorkflowSuspension.observedHookIds} when a suspension is raised.
53
+ *
54
+ * Optional so older/out-of-tree contexts (and lightweight test harnesses)
55
+ * degrade to "every open hook is observed".
56
+ */
57
+ hookPayloadAwaiters?: Map<string, () => boolean>;
47
58
  onWorkflowError: (error: Error) => void;
48
59
  /**
49
60
  * Mints the ULID body of a correlation id. Every entity a replay creates
@@ -1 +1 @@
1
- import{a as e,c as t,i as n,n as r,o as i,r as a,s as o,t as s}from"../../_chunks/workflow/private-Dlf90Zvn.js";export{s as awaitEarlierDeliveries,r as getStepFunction,a as hasParkedCommittedDelivery,n as isDeliveryIdle,e as registerDeliveryBarrier,i as registerStepFunction,o as scheduleWhenIdle,t as scheduleWorkflowSuspension};
1
+ import{a as e,c as t,i as n,n as r,o as i,r as a,s as o,t as s}from"../../_chunks/workflow/private-tQUuwBoQ.js";export{s as awaitEarlierDeliveries,r as getStepFunction,a as hasParkedCommittedDelivery,n as isDeliveryIdle,e as registerDeliveryBarrier,i as registerStepFunction,o as scheduleWhenIdle,t as scheduleWorkflowSuspension};
@@ -139,15 +139,43 @@ export declare function isResilientStepDispatchEnabled(): boolean;
139
139
  export declare function isBatchTransitionsEnabled(): boolean;
140
140
  /**
141
141
  * Ceiling on events per `createBatch` call from the batched fan-out fold.
142
- * Mirrors the server's transaction budgets with a comfortable margin: each
143
- * fan-out event costs 2 transaction items server-side (entity + event row)
144
- * against the 100-item DynamoDB cap, and inline payloads count against a
145
- * 768 KB byte budget, so 32 events stays well under both, and a fan-out larger
146
- * than this commits in successive batches (split batches lose
147
- * cross-batch atomicity, which is exactly today's per-event-write crash
148
- * surface, and every batch still converges on retry via per-event 409s).
142
+ * The server's transaction budgets are the hard limit: each fan-out event
143
+ * costs 2 transaction items server-side (entity + event row) against the
144
+ * 100-item DynamoDB cap, and inline payloads count against a 768 KB byte
145
+ * budget. A fan-out larger than this commits in successive batches, all in
146
+ * flight at once (split batches lose cross-batch atomicity, which is exactly
147
+ * the per-event-write crash surface, and every batch still converges on retry
148
+ * via per-event 409s).
149
+ *
150
+ * Within the budget the value is a latency trade, measured on durabench
151
+ * production sweeps (Vercel World, iad1, `Promise.all` of N one-step branches,
152
+ * 100 ms of work and 1 KB JSON each, 2026-10-07, every candidate built off the
153
+ * same commit and interleaved in one sweep):
154
+ *
155
+ * - A queued (non-inline) branch's message is published only once the chunk
156
+ * carrying its `step_created` commits, then goes out in that chunk's
157
+ * batched publish, and both hops slow down as the chunk grows. Smaller
158
+ * chunks start the queued branches sooner: at 64 branches the queued
159
+ * branches' median `step_started` moved from ~570 ms after `run_started` at
160
+ * 32 to ~460 ms at 16, and the last branch's first line from 967 to 875 ms
161
+ * (p50, 45 runs each); at 128 branches, from 4,059 to 3,855 ms (20 runs).
162
+ * - More chunks are more concurrent `createBatch` requests per run, and the
163
+ * inline branches' pair chunk is one of them. From about 16 concurrent
164
+ * chunks the first (inline) branch slows down: at 128 branches 8 per chunk
165
+ * cost it ~120 ms, and at 256 branches 4, 8 and 12 per chunk cost it ~470,
166
+ * ~120 and ~140 ms. At 16 a 256-branch fan-out is 16 plain chunks, at the
167
+ * edge of that (+~100 ms, not significant over 20 runs); at 24 and 32 it
168
+ * is flat.
169
+ *
170
+ * 16 is the largest value with a clear last-branch gain at 64 and 128
171
+ * branches and no first-branch or join regression there; an 8-branch fan-out
172
+ * fits one chunk either way. It also keeps the default inline pairs (two rows
173
+ * per inline step, `MAX_INLINE_STEPS` = 3) in one chunk. A
174
+ * `WORKFLOW_MAX_INLINE_STEPS` above 8 spills the pairs into more than one pair
175
+ * chunk; they commit concurrently and all of them gate the inline bodies, so
176
+ * that degrades latency, not correctness.
149
177
  */
150
- export declare const MAX_BATCH_FANOUT_EVENTS = 32;
178
+ export declare const MAX_BATCH_FANOUT_EVENTS = 16;
151
179
  /**
152
180
  * Optional client-side override for the server-supplied per-run event ceiling.
153
181
  * When set to a positive integer, the runtime clamps the server's limit *down*
@@ -1 +1 @@
1
- import{C as e,D as t,E as n,O as r,S as i,T as a,_ as o,a as s,b as c,c as l,d as u,f as d,g as f,h as p,i as m,k as h,l as g,m as _,n as v,o as y,p as b,r as x,s as S,t as C,u as w,v as T,w as E,x as D,y as O}from"../../../_chunks/workflow/helpers-BXCuoPUb.js";export{C as DYNAMIC_WORKFLOW_VERSION,v as REPLAY_RESOLVE_DATA,x as SLOT_GAP_RECHECK_ATTEMPTS,m as absorbSkippedSlotReport,s as appendEventLog,y as appendUniqueEvents,S as findEventSlotGap,l as getQueueOverhead,g as getWorkflowQueueName,w as handleHealthCheckMessage,u as healthCheck,d as insertEventByEventId,b as isSlotGapCheckEnabled,_ as loadWorkflowRunEvents,p as maxEventSlot,f as memoizeEncryptionKey,o as mergeReportedEvents,T as parseHealthCheckPayload,O as preconditionEventDelta,c as queueMessage,D as queueMessages,i as resolveRunEncryptionKey,e as rootRunIdFrom,E as runDispatchContext,a as settleEventSlotGap,n as slotSnapshotParams,t as stepDispatchIdempotencyKey,r as withHealthCheck,h as withReplayDelta};
1
+ import{C as e,D as t,E as n,O as r,S as i,T as a,_ as o,a as s,b as c,c as l,d as u,f as d,g as f,h as p,i as m,k as h,l as g,m as _,n as v,o as y,p as b,r as x,s as S,t as C,u as w,v as T,w as E,x as D,y as O}from"../../../_chunks/workflow/helpers-DlLD3ov_.js";export{C as DYNAMIC_WORKFLOW_VERSION,v as REPLAY_RESOLVE_DATA,x as SLOT_GAP_RECHECK_ATTEMPTS,m as absorbSkippedSlotReport,s as appendEventLog,y as appendUniqueEvents,S as findEventSlotGap,l as getQueueOverhead,g as getWorkflowQueueName,w as handleHealthCheckMessage,u as healthCheck,d as insertEventByEventId,b as isSlotGapCheckEnabled,_ as loadWorkflowRunEvents,p as maxEventSlot,f as memoizeEncryptionKey,o as mergeReportedEvents,T as parseHealthCheckPayload,O as preconditionEventDelta,c as queueMessage,D as queueMessages,i as resolveRunEncryptionKey,e as rootRunIdFrom,E as runDispatchContext,a as settleEventSlotGap,n as slotSnapshotParams,t as stepDispatchIdempotencyKey,r as withHealthCheck,h as withReplayDelta};
@@ -16,8 +16,7 @@ interface RunHookParams {
16
16
  run: Run<unknown>;
17
17
  }
18
18
  /** Parameters passed to an {@link WorkflowLifecycleHooks.onRunCompleted} handler. */
19
- export interface RunCompletedHookParams extends RunHookParams {
20
- }
19
+ export type RunCompletedHookParams = RunHookParams;
21
20
  /**
22
21
  * Parameters passed to an {@link WorkflowLifecycleHooks.onRunFailed}
23
22
  * handler.
@@ -31,7 +30,9 @@ export interface RunFailedHookParams extends RunHookParams {
31
30
  *
32
31
  * This `WorkflowRunFailedError` has an `errorCode` carrying the failure
33
32
  * classification (e.g. `USER_ERROR`, `RUNTIME_ERROR`). Its `cause` is
34
- * the hydrated persisted value (registered Error subclass identity preserved).
33
+ * the hydrated persisted value. Custom serialization revives registered
34
+ * classes using the runtime's module copy, which may differ from the
35
+ * handler's copy. Use error-class `.is()` helpers rather than `instanceof`.
35
36
  * If hydration fails, `cause` is a generic Error, matching
36
37
  * `run.returnValue`'s fallback.
37
38
  */
@@ -53,9 +54,12 @@ export interface WorkflowLifecycleHooks {
53
54
  * centralized reporting (e.g. forwarding failed runs to Sentry) without
54
55
  * wrapping every workflow body.
55
56
  *
56
- * Register early in the process lifecycle so handlers exist before the first
57
- * run finishes: in Next.js, `instrumentation.ts` is the natural place; in any
58
- * other app, any module that loads at startup works.
57
+ * Register in the host process that executes workflows, before it handles
58
+ * requests, never in a workflow or step. In Next.js 16.3+ use
59
+ * `instrumentation.ts`; restart `next dev` after editing handlers. App startup
60
+ * registration does not reach the separate flow functions emitted by the
61
+ * Vercel Build Output API integrations. See the lifecycle hooks guide for
62
+ * framework-specific support and registration locations.
59
63
  *
60
64
  * Semantics:
61
65
  * - Handlers run on the host (full Node.js), never inside the workflow VM.
@@ -0,0 +1,159 @@
1
+ import type { QueueItem } from '../global.js';
2
+ /**
3
+ * Whether any event an out-of-band writer could append right now is able to
4
+ * change the decisions a suspension leads to. Computed once per suspension
5
+ * that schedules inline steps, and exposed for the run-ahead gate described
6
+ * below. Nothing consumes it for control flow yet; the runtime records it on
7
+ * the invocation span so the eligible share of boundaries can be measured.
8
+ *
9
+ * ## Writers
10
+ *
11
+ * The orchestrator replaying the run is one writer. Every other writer is
12
+ * out-of-band to it:
13
+ *
14
+ * | Writer | Event | Path-changing when |
15
+ * |---|---|---|
16
+ * | webhook / `resumeHook()` | `hook_received` | workflow code is waiting on that hook's next payload |
17
+ * | another run's `createHook({ experimental_force })` | `hook_disposed` | same: it rejects waiting payload awaiters, and later awaits |
18
+ * | a step's `AbortController.abort()` | `hook_received` on a system hook | always: `signal.aborted` and abort listeners are read synchronously, with no `then` to observe |
19
+ * | wait timer | `wait_completed` | the wait is due (see below) |
20
+ * | `run.wakeUp()` / dashboard "cancel sleeps" | `wait_completed` | any time; not detected, see below |
21
+ * | step executors in other invocations | `step_completed` / `step_failed` / `step_retrying` | unknown: step promises are native, so their awaiters are invisible |
22
+ * | `runs.cancel()` | `run_cancelled` | never changes a decision; it ends the run (see "Pipeline depth") |
23
+ * | `setAttributes()` API | `attr_set` | never: workflow code writes attributes but cannot read them |
24
+ *
25
+ * ## Why an unawaited hook is inert
26
+ *
27
+ * On the node:vm engine a `hook_received` for a hook with no waiting consumer
28
+ * is hydrated and buffered as an UNARMED delivery barrier (`workflow/hook.ts`).
29
+ * Step results do not order behind unarmed barriers, the log-order-draws
30
+ * turnstile only waits on armed ones, and the workflow clock advances on
31
+ * delivery rather than consumption (`WorkflowOrchestratorContext.advanceClock`),
32
+ * so the buffered payload moves neither the step results around it nor
33
+ * `Date.now()`. A replay over a log with the payload inserted at any position
34
+ * after the hook's creation, and before its first await, makes the same
35
+ * decisions as one without it. The first `then()` on the hook is visible to the
36
+ * runtime because `Hook` is a custom thenable, which is what
37
+ * `WorkflowSuspension.observedHookIds` records.
38
+ *
39
+ * Over-reporting is possible and safe: a `.then` left behind by a settled
40
+ * `Promise.race` keeps its hook observed although the branch that would read
41
+ * it is gone.
42
+ *
43
+ * The QuickJS engine advances its clock on every event it reads, unclaimed
44
+ * payloads included, so this argument does not hold there. Its suspensions do
45
+ * not carry `observedHookIds`, which classifies every open hook as observed.
46
+ *
47
+ * ## Waits
48
+ *
49
+ * Sleep promises are native, so whether anything still awaits a wait cannot be
50
+ * told. A wait is instead classified by time: one whose `resumeAt` falls within
51
+ * the invocation's inline window plus the clock-skew allowance
52
+ * (`OPEN_WAIT_CLOCK_SKEW_MS`) can have its timer fire while this invocation is
53
+ * still deciding, and counts as path-changing; one due later cannot. The
54
+ * caller computes this from both the log and the suspension's own queue,
55
+ * because either can hold a wait the other lacks.
56
+ *
57
+ * `run.wakeUp()` completes waits regardless of `resumeAt`, so a far-future
58
+ * wait is only inert with respect to its own timer. Today that is a delayed
59
+ * wake at worst. Under run-ahead it is not (see below), so run-ahead has to
60
+ * close that gap before it relies on {@link OutOfBandObservation.inert} with
61
+ * any wait open, for example by treating every open wait as observed while a
62
+ * pipeline is in flight, or by having wake-ups enqueue a delivery instead of
63
+ * writing `wait_completed` directly.
64
+ *
65
+ * ## Intended use: de-opting run-ahead
66
+ *
67
+ * Run-ahead: once an inline step's body returns, feed its result to the
68
+ * retained VM and continue to the next boundary without waiting for the
69
+ * `step_completed` write (and the inline delta it carries) to come back, so
70
+ * consecutive steps overlap their writes. It requires a single-orchestrator
71
+ * guarantee whose stale holders are fenced (their writes refused, not merely
72
+ * their lease taken), which does not exist yet. Without it a second
73
+ * orchestrator is a writer this classification does not cover.
74
+ *
75
+ * Run-ahead removes the property today's replays rest on: a replay's view is a
76
+ * *prefix* of the log, and anything it missed lands after everything it read.
77
+ * A speculative view is the committed prefix plus this invocation's own
78
+ * in-flight writes, and an out-of-band event can commit *between* those writes.
79
+ * A later fresh replay sees it there. If the event was path-changing, that
80
+ * replay decides differently from the writes already committed after it,
81
+ * which is a corrupted log, not a late observation. {@link inert} is the
82
+ * condition under which such an interleaving cannot change any decision.
83
+ *
84
+ * The gate, once run-ahead exists:
85
+ *
86
+ * 1. Evaluate at every boundary, before issuing that boundary's writes.
87
+ * Observation changes as code runs: the first `await hook` turns a hook
88
+ * from inert to observed.
89
+ * 2. `inert === false`: do not run ahead past this boundary. Drain the
90
+ * in-flight writes, fold their skipped-slot reports and deltas into the
91
+ * log, and let the VM consume them in log order before deciding. That is
92
+ * today's per-step cost, paid only at these boundaries.
93
+ * 3. `inert === true`: run ahead. Events the in-flight writes report back are
94
+ * for entities nobody waits on; folding them buffers them, which changes no
95
+ * decision already taken.
96
+ * 4. A boundary where code is waiting on a hook with nothing else to run needs
97
+ * no drain to be safe: suspending without a payload only delays the run.
98
+ * It still drains before parking, so a payload already committed below an
99
+ * in-flight write is acted on now.
100
+ *
101
+ * ## Pipeline depth
102
+ *
103
+ * Run-ahead must cap how many steps it executes past the last write it has
104
+ * seen confirmed, independently of this classification:
105
+ *
106
+ * - Cancellation. `run_cancelled` never changes a decision, but every step
107
+ * body started after it committed is a side effect the user asked not to
108
+ * happen. The depth bounds that to the cap.
109
+ * - Lost invocations. Writes that never land (crash, timeout, lost lease) are
110
+ * re-executed by whoever recovers the run, so every unconfirmed step is a
111
+ * possible duplicate side effect.
112
+ * - Drain cost. Rule 2 above waits for every in-flight write; the cap bounds
113
+ * how long a sync point can stall.
114
+ * - Exposure. The writers this classification cannot see (`run.wakeUp()`,
115
+ * other step executors, a stale orchestrator) can only interleave inside the
116
+ * in-flight window, which the cap keeps short.
117
+ *
118
+ * A small fixed depth (one or two unconfirmed steps) captures most of the
119
+ * latency win, since each extra step only saves one more round trip, and
120
+ * should be tunable per deployment like the other inline-loop knobs.
121
+ */
122
+ export interface OutOfBandObservation {
123
+ /** Open user hooks with workflow code waiting on their next payload. */
124
+ observedHookCount: number;
125
+ /** Open user hooks nobody is waiting on: their payloads are inert. */
126
+ unobservedHookCount: number;
127
+ /**
128
+ * Open user hooks with unknown observation, because the suspension carried
129
+ * no `observedHookIds`. Counted as path-changing.
130
+ */
131
+ unknownHookCount: number;
132
+ /** Open `AbortController` system hooks: always path-changing. */
133
+ abortSignalHookCount: number;
134
+ /**
135
+ * Pending steps this invocation does not execute itself. Their terminal
136
+ * events come from another executor, and their awaiters cannot be seen, so
137
+ * any of them is counted as path-changing.
138
+ */
139
+ externalStepCount: number;
140
+ /** An open wait can fire before this invocation's inline window ends. */
141
+ waitDue: boolean;
142
+ /**
143
+ * No writer this classification can see is able to append an event that
144
+ * changes the decisions this suspension leads to. Excludes `run.wakeUp()`
145
+ * and a second orchestrator; see the module documentation.
146
+ */
147
+ inert: boolean;
148
+ }
149
+ export declare function observeOutOfBandWriters(input: {
150
+ /** The suspension's queue: every open hook, wait, and pending step. */
151
+ items: readonly QueueItem[];
152
+ /** `WorkflowSuspension.observedHookIds`. */
153
+ observedHookIds: ReadonlySet<string> | undefined;
154
+ /** Steps this invocation executes itself (inline or as owner recovery). */
155
+ selfExecutedStepIds: ReadonlySet<string>;
156
+ /** Whether an open wait is due within the invocation's inline window. */
157
+ waitDue: boolean;
158
+ }): OutOfBandObservation;
159
+ //# sourceMappingURL=out-of-band-observation.d.ts.map
@@ -41,6 +41,14 @@ export declare function getWorkflowVmFromEnv(env?: NodeJS.ProcessEnv): WorkflowV
41
41
  * unknown value.
42
42
  */
43
43
  export declare function useQuickJSVm(workflowRun: Pick<WorkflowRun, 'executionContext'>): boolean;
44
+ /**
45
+ * Snapshot threshold the QuickJS engine uses when neither the run's
46
+ * `executionContext` nor `WORKFLOW_SNAPSHOT_THRESHOLD` specifies one.
47
+ * Short runs (most workflows) never reach it and so never pay the
48
+ * snapshot cost; long-running runs stop scaling their resume cost with
49
+ * total event-log length. Set `WORKFLOW_SNAPSHOT_THRESHOLD=0` to opt out.
50
+ */
51
+ export declare const DEFAULT_QUICKJS_SNAPSHOT_THRESHOLD = 1000;
44
52
  /**
45
53
  * Read and validate the `WORKFLOW_SNAPSHOT_THRESHOLD` env var.
46
54
  *
@@ -49,9 +57,9 @@ export declare function useQuickJSVm(workflowRun: Pick<WorkflowRun, 'executionCo
49
57
  * invocations restore the VM and replay only the events recorded since —
50
58
  * instead of re-executing the workflow from the top against the full log.
51
59
  *
52
- * `0` (or unset) disables snapshotting entirely: short-lived runs never
53
- * pay the snapshot cost, while long/forever runs can opt in. `1`
54
- * effectively snapshots at every suspension.
60
+ * When unset, the QuickJS engine uses
61
+ * {@link DEFAULT_QUICKJS_SNAPSHOT_THRESHOLD}. `0` explicitly disables
62
+ * snapshotting. `1` effectively snapshots at every suspension.
55
63
  *
56
64
  * Returns the configured threshold, or `undefined` if unset/empty.
57
65
  * Throws {@link WorkflowRuntimeError} for non-integer or negative values.
@@ -62,12 +70,28 @@ export declare function getSnapshotThresholdFromEnv(env?: NodeJS.ProcessEnv): nu
62
70
  * `executionContext.snapshotThreshold` (set by the SDK at `start()` when
63
71
  * `WORKFLOW_SNAPSHOT_THRESHOLD` is set on the client) wins so a run keeps
64
72
  * the policy it started with; otherwise the handler's env var; otherwise
65
- * `0` (disabled). Only consulted by the QuickJS engine.
73
+ * {@link DEFAULT_QUICKJS_SNAPSHOT_THRESHOLD}. Only consulted by the QuickJS
74
+ * engine.
66
75
  *
67
76
  * Throws on an invalid value. The workflow handler uses
68
77
  * {@link getSnapshotThresholdForHandler}, which doesn't.
69
78
  */
70
79
  export declare function getSnapshotThreshold(workflowRun: WorkflowRun): number;
80
+ /**
81
+ * The snapshot threshold explicitly configured for a run (stamped into its
82
+ * `executionContext` or set via `WORKFLOW_SNAPSHOT_THRESHOLD` on the
83
+ * handler), or `undefined` when the run falls back to
84
+ * {@link DEFAULT_QUICKJS_SNAPSHOT_THRESHOLD}.
85
+ *
86
+ * Throws on an invalid value.
87
+ */
88
+ export declare function getConfiguredSnapshotThreshold(workflowRun: WorkflowRun): number | undefined;
89
+ /**
90
+ * Whether the run's snapshot threshold was explicitly configured rather
91
+ * than falling back to {@link DEFAULT_QUICKJS_SNAPSHOT_THRESHOLD}. Never
92
+ * throws: an invalid value counts as configured.
93
+ */
94
+ export declare function isSnapshotThresholdConfigured(workflowRun: WorkflowRun): boolean;
71
95
  /**
72
96
  * {@link getSnapshotThreshold} for the workflow handler: an invalid value
73
97
  * disables snapshotting (with a warning through `onInvalid`) instead of