eve 0.72.1 → 0.74.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (575) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/dist/src/_virtual/_rolldown/runtime.js +1 -1
  3. package/dist/src/channel/agent-description.d.ts +49 -9
  4. package/dist/src/channel/agent-description.js +1 -1
  5. package/dist/src/channel/invoke-tool.d.ts +26 -4
  6. package/dist/src/channel/invoke-tool.js +1 -1
  7. package/dist/src/channel/principal-identity.d.ts +9 -0
  8. package/dist/src/channel/principal-identity.js +1 -0
  9. package/dist/src/channel/prompt-queue.d.ts +31 -0
  10. package/dist/src/channel/prompt-queue.js +1 -0
  11. package/dist/src/channel/routes.d.ts +19 -4
  12. package/dist/src/channel/schedule.d.ts +20 -6
  13. package/dist/src/channel/schedule.js +1 -1
  14. package/dist/src/channel/skill-files.d.ts +114 -0
  15. package/dist/src/channel/skill-files.js +1 -0
  16. package/dist/src/channel/types.d.ts +4 -0
  17. package/dist/src/chunks/{use-eve-agent-C1GYGCtb.js → use-eve-agent-DOOXadF0.js} +13 -3
  18. package/dist/src/chunks/{use-eve-agent-hZJ7CB8t.js → use-eve-agent-mP0M7SrL.js} +13 -3
  19. package/dist/src/cli/commands/agent-instructions.js +1 -1
  20. package/dist/src/cli/commands/extension-init.js +1 -1
  21. package/dist/src/cli/commands/init-agent-workspace.js +1 -1
  22. package/dist/src/cli/commands/init-project.js +1 -1
  23. package/dist/src/cli/commands/init.js +1 -1
  24. package/dist/src/cli/dev/diagnostic-dump.js +1 -1
  25. package/dist/src/cli/dev/tui/blocks.d.ts +6 -0
  26. package/dist/src/cli/dev/tui/blocks.js +2 -2
  27. package/dist/src/cli/dev/tui/markdown.d.ts +5 -0
  28. package/dist/src/cli/dev/tui/markdown.js +2 -2
  29. package/dist/src/cli/dev/tui/stream-format.js +2 -2
  30. package/dist/src/cli/dev/tui/transcript-parts.d.ts +4 -1
  31. package/dist/src/cli/dev/tui/transcript-parts.js +2 -2
  32. package/dist/src/cli/dev/tui/transcript.js +1 -1
  33. package/dist/src/client/message-reducer.js +1 -1
  34. package/dist/src/compiled/.vendor-stamp.json +9 -8
  35. package/dist/src/compiled/@eve/catalog/index.js +1 -1
  36. package/dist/src/compiled/@modelcontextprotocol/server/index.d.ts +68 -7
  37. package/dist/src/compiled/@vercel/schedules/index.d.ts +158 -0
  38. package/dist/src/compiled/@vercel/schedules/index.js +17 -0
  39. package/dist/src/compiled/@workflow/core/capabilities.d.ts +33 -6
  40. package/dist/src/compiled/@workflow/core/flushable-stream.d.ts +2 -0
  41. package/dist/src/compiled/@workflow/core/index.d.ts +1 -0
  42. package/dist/src/compiled/@workflow/core/index.js +2 -2
  43. package/dist/src/compiled/@workflow/core/private.js +1 -1
  44. package/dist/src/compiled/@workflow/core/runtime/helpers.d.ts +6 -0
  45. package/dist/src/compiled/@workflow/core/runtime/helpers.js +1 -1
  46. package/dist/src/compiled/@workflow/core/runtime.js +3 -3
  47. package/dist/src/compiled/@workflow/core/serialization/codec.d.ts +8 -8
  48. package/dist/src/compiled/@workflow/core/serialization/compression.d.ts +13 -5
  49. package/dist/src/compiled/@workflow/core/serialization.d.ts +9 -9
  50. package/dist/src/compiled/@workflow/core/serialization.js +1 -1
  51. package/dist/src/compiled/@workflow/core/symbols.d.ts +2 -0
  52. package/dist/src/compiled/@workflow/core/telemetry/semantic-conventions.d.ts +2 -2
  53. package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
  54. package/dist/src/compiled/@workflow/core/workflow/index.d.ts +1 -0
  55. package/dist/src/compiled/@workflow/core/workflow.js +1 -1
  56. package/dist/src/compiled/@workflow/errors/index.js +1 -1
  57. package/dist/src/compiled/@workflow/world/events.d.ts +11 -0
  58. package/dist/src/compiled/@workflow/world/hooks.d.ts +2 -0
  59. package/dist/src/compiled/@workflow/world/interfaces.d.ts +6 -0
  60. package/dist/src/compiled/@workflow/world-local/index.js +3 -3
  61. package/dist/src/compiled/@workflow/world-vercel/index.js +13 -13
  62. package/dist/src/compiled/_chunks/workflow/{attribute-changes-VaTKT4K8.js → attribute-changes-CSqvJx6j.js} +2 -2
  63. package/dist/src/compiled/_chunks/workflow/{dist-B7NC1c9-.js → dist-DmXynLVH.js} +1 -1
  64. package/dist/src/compiled/_chunks/workflow/dist-T5NnW-0k.js +3 -0
  65. package/dist/src/compiled/_chunks/workflow/helpers-BXCuoPUb.js +1 -0
  66. package/dist/src/compiled/_chunks/workflow/private-Dlf90Zvn.js +1 -0
  67. package/dist/src/compiled/_chunks/workflow/resume-hook-CvENCrxc.js +1 -0
  68. package/dist/src/compiled/_chunks/workflow/{run-DYKeqbob.js → run-8pLWuR2U.js} +6 -6
  69. package/dist/src/compiled/_chunks/workflow/serialization-vDozzDhh.js +16 -0
  70. package/dist/src/compiled/_chunks/workflow/sleep-BMqbraZM.js +1 -0
  71. package/dist/src/compiled/_chunks/workflow/wait-until-A344L2AG.js +1 -0
  72. package/dist/src/compiled/shadcn-registry/index.js +3408 -35163
  73. package/dist/src/compiler/artifacts.js +1 -1
  74. package/dist/src/compiler/compile-agent.js +1 -1
  75. package/dist/src/compiler/development-extensions.js +1 -1
  76. package/dist/src/compiler/extension-compatibility.d.ts +18 -18
  77. package/dist/src/compiler/extension-compatibility.js +1 -1
  78. package/dist/src/compiler/load-binding-namespace.d.ts +5 -0
  79. package/dist/src/compiler/load-binding-namespace.js +1 -1
  80. package/dist/src/compiler/manifest.d.ts +39 -0
  81. package/dist/src/compiler/manifest.js +1 -1
  82. package/dist/src/compiler/memory-wrapper-candidates.d.ts +2 -0
  83. package/dist/src/compiler/memory-wrapper-candidates.js +1 -0
  84. package/dist/src/compiler/module-lifecycle.d.ts +1 -1
  85. package/dist/src/compiler/module-lifecycle.js +1 -1
  86. package/dist/src/compiler/module-map.js +1 -1
  87. package/dist/src/compiler/normalize-agent-config.js +1 -1
  88. package/dist/src/compiler/normalize-manifest.js +1 -1
  89. package/dist/src/compiler/normalize-schedule-collection.d.ts +3 -0
  90. package/dist/src/compiler/normalize-schedule-collection.js +1 -0
  91. package/dist/src/compiler/normalize-schedule.d.ts +2 -2
  92. package/dist/src/compiler/normalize-schedule.js +1 -1
  93. package/dist/src/compiler/resolve-workspace-subagent.js +1 -1
  94. package/dist/src/compiler/schedule-collection-wrapper-candidates.d.ts +2 -0
  95. package/dist/src/compiler/schedule-collection-wrapper-candidates.js +1 -0
  96. package/dist/src/compiler/validate-artifact.js +1 -1
  97. package/dist/src/context/build-callback-context.js +1 -1
  98. package/dist/src/context/dynamic-resolve-context.js +1 -1
  99. package/dist/src/context/key-names.d.ts +1 -0
  100. package/dist/src/context/key-names.js +1 -1
  101. package/dist/src/context/keys.d.ts +2 -0
  102. package/dist/src/context/keys.js +1 -1
  103. package/dist/src/context/providers/session.js +1 -1
  104. package/dist/src/context/schedule-collection-tools.d.ts +9 -0
  105. package/dist/src/context/schedule-collection-tools.js +1 -0
  106. package/dist/src/context/session-context.d.ts +4 -1
  107. package/dist/src/context/session-schedule.d.ts +9 -0
  108. package/dist/src/context/session-schedule.js +1 -0
  109. package/dist/src/context/turn-principals.d.ts +12 -0
  110. package/dist/src/context/turn-principals.js +1 -0
  111. package/dist/src/dynamic/definition.d.ts +1 -0
  112. package/dist/src/evals/cli/eval-client.js +1 -1
  113. package/dist/src/evals/cli/eval.js +1 -1
  114. package/dist/src/execution/agent-sessions/context.d.ts +2 -0
  115. package/dist/src/execution/agent-sessions/context.js +1 -1
  116. package/dist/src/execution/agent-sessions/steps.js +1 -1
  117. package/dist/src/execution/cancelled-model-call-batch.js +1 -1
  118. package/dist/src/execution/dynamic-workflow/tool.js +1 -1
  119. package/dist/src/execution/invoke-tool.d.ts +6 -2
  120. package/dist/src/execution/invoke-tool.js +1 -1
  121. package/dist/src/execution/legacy-session/turn-workflow.js +1 -1
  122. package/dist/src/execution/node-step.d.ts +1 -0
  123. package/dist/src/execution/node-step.js +1 -1
  124. package/dist/src/execution/publish-session-events.js +1 -1
  125. package/dist/src/execution/runtime-context.js +1 -1
  126. package/dist/src/execution/sandbox/bindings/just-bash.js +1 -1
  127. package/dist/src/execution/sandbox/bindings/vercel-errors.d.ts +11 -0
  128. package/dist/src/execution/sandbox/bindings/vercel-errors.js +2 -1
  129. package/dist/src/execution/sandbox/bindings/vercel-tool-sessions.d.ts +7 -0
  130. package/dist/src/execution/sandbox/bindings/vercel-tool-sessions.js +1 -0
  131. package/dist/src/execution/sandbox/bindings/vercel.js +1 -1
  132. package/dist/src/execution/sandbox/development-lazy-prewarm.js +1 -1
  133. package/dist/src/execution/sandbox/ensure.d.ts +14 -1
  134. package/dist/src/execution/sandbox/ensure.js +1 -1
  135. package/dist/src/execution/sandbox/prewarm.js +1 -1
  136. package/dist/src/execution/session/active-turn.d.ts +2 -1
  137. package/dist/src/execution/session/active-turn.js +1 -1
  138. package/dist/src/execution/session/entry.d.ts +10 -1
  139. package/dist/src/execution/session/entry.js +1 -1
  140. package/dist/src/execution/session/program.d.ts +4 -0
  141. package/dist/src/execution/session/program.js +1 -1
  142. package/dist/src/execution/session/timeout-control.d.ts +1 -2
  143. package/dist/src/execution/session/timeout-control.js +1 -1
  144. package/dist/src/execution/session/turn-control.d.ts +7 -0
  145. package/dist/src/execution/session/turn-control.js +1 -0
  146. package/dist/src/execution/session/turn-step.js +1 -1
  147. package/dist/src/execution/session/turn.d.ts +2 -0
  148. package/dist/src/execution/session/turn.js +1 -1
  149. package/dist/src/execution/session-inbox/protocol.js +1 -1
  150. package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
  151. package/dist/src/execution/tool-session/id.d.ts +22 -0
  152. package/dist/src/execution/tool-session/id.js +1 -0
  153. package/dist/src/execution/tool-session/sandbox.d.ts +22 -0
  154. package/dist/src/execution/tool-session/sandbox.js +1 -0
  155. package/dist/src/execution/tools/agent-router-workflow.js +1 -1
  156. package/dist/src/execution/tools/connection-tools.js +1 -1
  157. package/dist/src/framework/sources/modules/schedule-collection-wrapper.d.ts +2 -0
  158. package/dist/src/framework/sources/modules/schedule-collection-wrapper.js +1 -0
  159. package/dist/src/framework/sources/registry.d.ts +1 -0
  160. package/dist/src/framework/sources/registry.js +1 -1
  161. package/dist/src/harness/compaction/step.js +1 -1
  162. package/dist/src/harness/emission.d.ts +1 -0
  163. package/dist/src/harness/emission.js +1 -1
  164. package/dist/src/harness/hitl/approvals.d.ts +1 -1
  165. package/dist/src/harness/hitl/approvals.js +1 -1
  166. package/dist/src/harness/hitl/delivery.d.ts +9 -2
  167. package/dist/src/harness/hitl/delivery.js +1 -1
  168. package/dist/src/harness/hitl/intake.js +1 -1
  169. package/dist/src/harness/model-call/call.d.ts +5 -0
  170. package/dist/src/harness/model-call/call.js +1 -1
  171. package/dist/src/harness/model-call/usage.js +1 -1
  172. package/dist/src/harness/open-input-request.d.ts +8 -0
  173. package/dist/src/harness/open-input-request.js +1 -0
  174. package/dist/src/harness/session-machine/current.js +1 -1
  175. package/dist/src/harness/session-machine/transitions.d.ts +13 -0
  176. package/dist/src/harness/session-machine/transitions.js +1 -1
  177. package/dist/src/harness/stream-actions.d.ts +6 -1
  178. package/dist/src/harness/stream-actions.js +1 -1
  179. package/dist/src/harness/tool-loop.js +1 -1
  180. package/dist/src/harness/tools.js +1 -1
  181. package/dist/src/harness/types.d.ts +2 -0
  182. package/dist/src/instrumentation/ai-sdk-hook-bridge.js +1 -1
  183. package/dist/src/instrumentation/lifecycle.d.ts +1 -0
  184. package/dist/src/internal/application/cache-metadata.js +1 -1
  185. package/dist/src/internal/application/compiled-artifacts.js +1 -1
  186. package/dist/src/internal/application/package.js +1 -1
  187. package/dist/src/internal/application/paths.js +1 -1
  188. package/dist/src/internal/application/runtime-compiled-artifacts-source.js +1 -1
  189. package/dist/src/internal/authored-definition/connection.js +1 -1
  190. package/dist/src/internal/authored-definition/schedule-collection.d.ts +2 -0
  191. package/dist/src/internal/authored-definition/schedule-collection.js +1 -0
  192. package/dist/src/internal/authored-definition/schema-backed.js +1 -1
  193. package/dist/src/internal/authored-module-loader.d.ts +7 -0
  194. package/dist/src/internal/authored-module-loader.js +2 -2
  195. package/dist/src/internal/authored-module-map-loader.js +1 -1
  196. package/dist/src/internal/authored-package-boundary.js +1 -1
  197. package/dist/src/internal/authored-runtime-modules.d.ts +1 -0
  198. package/dist/src/internal/authored-runtime-modules.js +1 -1
  199. package/dist/src/internal/invocation/metadata.js +1 -1
  200. package/dist/src/internal/mcp/forwarded-principal-header.d.ts +31 -0
  201. package/dist/src/internal/mcp/forwarded-principal-header.js +1 -0
  202. package/dist/src/internal/mcp/published-tools.d.ts +9 -2
  203. package/dist/src/internal/mcp/published-tools.js +1 -1
  204. package/dist/src/internal/mcp/skills.d.ts +57 -0
  205. package/dist/src/internal/mcp/skills.js +1 -0
  206. package/dist/src/internal/mcp/streamable-http-server.d.ts +38 -6
  207. package/dist/src/internal/mcp/streamable-http-server.js +1 -1
  208. package/dist/src/internal/nitro/dev-runtime-artifacts.js +1 -1
  209. package/dist/src/internal/nitro/development-generation.js +1 -1
  210. package/dist/src/internal/nitro/host/artifacts-config.js +1 -1
  211. package/dist/src/internal/nitro/host/build-application.js +1 -1
  212. package/dist/src/internal/nitro/host/build-extension.js +1 -1
  213. package/dist/src/internal/nitro/host/build-vercel-agent-summary.js +1 -1
  214. package/dist/src/internal/nitro/host/configure-nitro-routes.js +2 -2
  215. package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
  216. package/dist/src/internal/nitro/host/dev-authored-source-watcher.js +1 -1
  217. package/dist/src/internal/nitro/host/dev-runner.js +1 -1
  218. package/dist/src/internal/nitro/host/extension-capability-requirements.js +1 -1
  219. package/dist/src/internal/nitro/host/local-tracing-runtime-plugin.js +1 -1
  220. package/dist/src/internal/nitro/host/skill-server-assets.d.ts +29 -0
  221. package/dist/src/internal/nitro/host/skill-server-assets.js +1 -0
  222. package/dist/src/internal/nitro/host/start-production-server.js +1 -1
  223. package/dist/src/internal/nitro/host/vercel-build-output-config.d.ts +12 -0
  224. package/dist/src/internal/nitro/host/vercel-build-output-config.js +1 -1
  225. package/dist/src/internal/nitro/host/workspace-extensions.js +1 -1
  226. package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -1
  227. package/dist/src/internal/nitro/routes/channel-route-context.d.ts +4 -0
  228. package/dist/src/internal/nitro/routes/channel-route-context.js +1 -1
  229. package/dist/src/internal/nitro/routes/schedule-collection-consumer.d.ts +3 -0
  230. package/dist/src/internal/nitro/routes/schedule-collection-consumer.js +1 -0
  231. package/dist/src/internal/schedules/consumer-route.d.ts +17 -0
  232. package/dist/src/internal/schedules/consumer-route.js +1 -0
  233. package/dist/src/internal/schedules/verify-delivery.d.ts +25 -0
  234. package/dist/src/internal/schedules/verify-delivery.js +1 -0
  235. package/dist/src/internal/vercel/build-agent-workspace.js +1 -1
  236. package/dist/src/internal/workflow/development-world-client.js +1 -1
  237. package/dist/src/internal/workflow/validate-world.js +1 -1
  238. package/dist/src/internal/workflow/vercel-world-defaults.js +1 -1
  239. package/dist/src/internal/workflow-bundle/builder-support.js +1 -1
  240. package/dist/src/internal/workflow-bundle/builder.js +1 -1
  241. package/dist/src/internal/workflow-bundle/workflow-builders.js +1 -1
  242. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/cli-config.js +1 -0
  243. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/cred-storage.js +1 -0
  244. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/index.js +1 -0
  245. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/schema.js +1 -0
  246. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/schema.zod.js +1 -0
  247. package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.0/node_modules/@vercel/cli-config/dist/types.js +1 -0
  248. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/envpath.js +1 -0
  249. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/errors.js +2 -0
  250. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/errutils.js +1 -0
  251. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/exec.js +1 -0
  252. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/fsutils.js +1 -0
  253. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/index.js +1 -0
  254. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/lookup.js +1 -0
  255. package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.0/node_modules/@vercel/cli-exec/dist/safety.js +1 -0
  256. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/auth-errors.js +1 -0
  257. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/exchange-vercel-oidc-token.js +1 -0
  258. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/get-context.js +1 -0
  259. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/get-vercel-oidc-token-sync.js +1 -0
  260. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/get-vercel-oidc-token-with-refresh.js +2 -0
  261. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/index.js +1 -0
  262. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/oauth.js +1 -0
  263. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/token-error.js +1 -0
  264. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/token-io.js +1 -0
  265. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/token-util.js +2 -0
  266. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/token.js +1 -0
  267. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/verify-vercel-oidc-token.js +1 -0
  268. package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.0/node_modules/@vercel/oidc/dist/version.js +1 -0
  269. package/dist/src/node_modules/.pnpm/@vercel_queue@0.5.1_@opentelemetry_api@1.9.1/node_modules/@vercel/queue/dist/index.js +36 -0
  270. package/dist/src/node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js +1 -0
  271. package/dist/src/node_modules/.pnpm/brace-expansion@5.0.12/node_modules/brace-expansion/dist/esm/index.js +1 -0
  272. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/index.js +1 -0
  273. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/enoent.js +1 -0
  274. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/parse.js +1 -0
  275. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/escape.js +1 -0
  276. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/readShebang.js +1 -0
  277. package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/resolveCommand.js +1 -0
  278. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/index.js +1 -0
  279. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/command.js +1 -0
  280. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/error.js +2 -0
  281. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/kill.js +1 -0
  282. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/promise.js +1 -0
  283. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/stdio.js +1 -0
  284. package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/stream.js +1 -0
  285. package/dist/src/node_modules/.pnpm/get-stream@6.0.1/node_modules/get-stream/buffer-stream.js +1 -0
  286. package/dist/src/node_modules/.pnpm/get-stream@6.0.1/node_modules/get-stream/index.js +1 -0
  287. package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/core.js +1 -0
  288. package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/main.js +1 -0
  289. package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/realtime.js +1 -0
  290. package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/signals.js +1 -0
  291. package/dist/src/node_modules/.pnpm/is-stream@2.0.1/node_modules/is-stream/index.js +1 -0
  292. package/dist/src/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/index.js +1 -0
  293. package/dist/src/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/mode.js +1 -0
  294. package/dist/src/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/windows.js +1 -0
  295. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/index.js +1 -0
  296. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/compact/decrypt.js +1 -0
  297. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/compact/encrypt.js +1 -0
  298. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/flattened/decrypt.js +1 -0
  299. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/flattened/encrypt.js +1 -0
  300. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/general/decrypt.js +1 -0
  301. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/general/encrypt.js +1 -0
  302. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwk/embedded.js +1 -0
  303. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwk/thumbprint.js +1 -0
  304. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwks/local.js +1 -0
  305. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwks/remote.js +1 -0
  306. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/compact/sign.js +1 -0
  307. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/compact/verify.js +1 -0
  308. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/flattened/sign.js +1 -0
  309. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/flattened/verify.js +1 -0
  310. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/general/sign.js +1 -0
  311. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/general/verify.js +1 -0
  312. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/decrypt.js +1 -0
  313. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/encrypt.js +1 -0
  314. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/produce.js +1 -0
  315. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/sign.js +1 -0
  316. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/unsecured.js +1 -0
  317. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/verify.js +1 -0
  318. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/export.js +1 -0
  319. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/generate_key_pair.js +1 -0
  320. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/generate_secret.js +1 -0
  321. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/import.js +1 -0
  322. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/aesgcmkw.js +1 -0
  323. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/buffer_utils.js +1 -0
  324. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/cek.js +1 -0
  325. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/check_iv_length.js +1 -0
  326. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/check_key_type.js +1 -0
  327. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/check_p2s.js +1 -0
  328. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/crypto_key.js +1 -0
  329. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/decrypt_key_management.js +1 -0
  330. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/encrypt_key_management.js +1 -0
  331. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/epoch.js +1 -0
  332. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/invalid_key_input.js +1 -0
  333. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/is_disjoint.js +1 -0
  334. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/is_jwk.js +1 -0
  335. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/is_object.js +1 -0
  336. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/iv.js +1 -0
  337. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/jwt_claims_set.js +1 -0
  338. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/private_symbols.js +1 -0
  339. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/secs.js +1 -0
  340. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/validate_algorithms.js +1 -0
  341. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/validate_crit.js +1 -0
  342. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/aeskw.js +1 -0
  343. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/asn1.js +1 -0
  344. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/base64url.js +1 -0
  345. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/cbc_tag.js +1 -0
  346. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/check_cek_length.js +1 -0
  347. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/check_key_length.js +1 -0
  348. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/ciphers.js +1 -0
  349. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/decrypt.js +1 -0
  350. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/digest.js +1 -0
  351. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/dsa_digest.js +1 -0
  352. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/ecdhes.js +1 -0
  353. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/encrypt.js +1 -0
  354. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/fetch_jwks.js +1 -0
  355. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/generate.js +1 -0
  356. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/get_named_curve.js +1 -0
  357. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/get_sign_verify_key.js +1 -0
  358. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/hmac_digest.js +1 -0
  359. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/is_key_like.js +1 -0
  360. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/is_key_object.js +1 -0
  361. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/jwk_to_key.js +1 -0
  362. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/key_to_jwk.js +1 -0
  363. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/node_key.js +1 -0
  364. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/normalize_key.js +1 -0
  365. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/pbes2kw.js +1 -0
  366. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/random.js +1 -0
  367. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/rsaes.js +1 -0
  368. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/runtime.js +1 -0
  369. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/sign.js +1 -0
  370. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/timing_safe_equal.js +1 -0
  371. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/verify.js +1 -0
  372. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/webcrypto.js +1 -0
  373. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/base64url.js +1 -0
  374. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/decode_jwt.js +1 -0
  375. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/decode_protected_header.js +1 -0
  376. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/errors.js +1 -0
  377. package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/runtime.js +1 -0
  378. package/dist/src/node_modules/.pnpm/merge-stream@2.0.0/node_modules/merge-stream/index.js +1 -0
  379. package/dist/src/node_modules/.pnpm/mimic-fn@2.1.0/node_modules/mimic-fn/index.js +1 -0
  380. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/assert-valid-pattern.js +1 -0
  381. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/ast.js +1 -0
  382. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/brace-expressions.js +1 -0
  383. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/escape.js +1 -0
  384. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/index.js +1 -0
  385. package/dist/src/node_modules/.pnpm/minimatch@10.2.6/node_modules/minimatch/dist/esm/unescape.js +1 -0
  386. package/dist/src/node_modules/.pnpm/mixpart@0.0.6/node_modules/mixpart/dist/index.js +7 -0
  387. package/dist/src/node_modules/.pnpm/npm-run-path@4.0.1/node_modules/npm-run-path/index.js +1 -0
  388. package/dist/src/node_modules/.pnpm/onetime@5.1.2/node_modules/onetime/index.js +1 -0
  389. package/dist/src/node_modules/.pnpm/os-paths@4.4.0/node_modules/os-paths/src/lib/index.js +1 -0
  390. package/dist/src/node_modules/.pnpm/path-key@3.1.1/node_modules/path-key/index.js +1 -0
  391. package/dist/src/node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js +1 -0
  392. package/dist/src/node_modules/.pnpm/shebang-command@2.0.0/node_modules/shebang-command/index.js +1 -0
  393. package/dist/src/node_modules/.pnpm/shebang-regex@3.0.0/node_modules/shebang-regex/index.js +1 -0
  394. package/dist/src/node_modules/.pnpm/signal-exit@3.0.7/node_modules/signal-exit/index.js +1 -0
  395. package/dist/src/node_modules/.pnpm/signal-exit@3.0.7/node_modules/signal-exit/signals.js +1 -0
  396. package/dist/src/node_modules/.pnpm/strip-final-newline@2.0.0/node_modules/strip-final-newline/index.js +2 -0
  397. package/dist/src/node_modules/.pnpm/which@2.0.2/node_modules/which/which.js +1 -0
  398. package/dist/src/node_modules/.pnpm/xdg-app-paths@5.5.1/node_modules/xdg-app-paths/src/lib/index.js +1 -0
  399. package/dist/src/node_modules/.pnpm/xdg-portable@7.3.0/node_modules/xdg-portable/src/lib/index.js +1 -0
  400. package/dist/src/public/channels/chat-sdk/authorization.js +1 -1
  401. package/dist/src/public/channels/chat-sdk/chatSdkChannel.d.ts +7 -1
  402. package/dist/src/public/channels/chat-sdk/chatSdkChannel.js +2 -2
  403. package/dist/src/public/channels/discord/defaults.d.ts +8 -7
  404. package/dist/src/public/channels/discord/discordChannel.d.ts +21 -1
  405. package/dist/src/public/channels/discord/discordChannel.js +1 -1
  406. package/dist/src/public/channels/discord/index.d.ts +1 -1
  407. package/dist/src/public/channels/github/defaults.js +3 -3
  408. package/dist/src/public/channels/github/githubChannel.d.ts +4 -1
  409. package/dist/src/public/channels/github/state.d.ts +2 -1
  410. package/dist/src/public/channels/index.d.ts +1 -1
  411. package/dist/src/public/channels/linear/defaults.js +1 -1
  412. package/dist/src/public/channels/linear/linearChannel.d.ts +4 -1
  413. package/dist/src/public/channels/mcp.d.ts +26 -5
  414. package/dist/src/public/channels/mcp.js +1 -1
  415. package/dist/src/public/channels/slack/index.d.ts +1 -0
  416. package/dist/src/public/channels/slack/index.js +1 -1
  417. package/dist/src/public/channels/slack/interactions.js +1 -1
  418. package/dist/src/public/channels/slack/slackChannel.d.ts +6 -0
  419. package/dist/src/public/channels/twilio/defaults.js +2 -4
  420. package/dist/src/public/channels/twilio/twilioChannel.d.ts +4 -1
  421. package/dist/src/public/definitions/channel.d.ts +1 -1
  422. package/dist/src/public/definitions/connections/mcp.d.ts +11 -0
  423. package/dist/src/public/experimental/schedules/client.d.ts +7 -0
  424. package/dist/src/public/experimental/schedules/client.js +1 -0
  425. package/dist/src/public/experimental/schedules/index.d.ts +5 -0
  426. package/dist/src/public/experimental/schedules/index.js +1 -0
  427. package/dist/src/public/experimental/schedules/testing.d.ts +2 -0
  428. package/dist/src/public/experimental/schedules/testing.js +1 -0
  429. package/dist/src/public/experimental/schedules/vercel.d.ts +2 -0
  430. package/dist/src/public/experimental/schedules/vercel.js +1 -0
  431. package/dist/src/public/memory/scope.js +1 -1
  432. package/dist/src/public/schedules/provider-types.d.ts +16 -0
  433. package/dist/src/public/schedules/provider-types.js +1 -0
  434. package/dist/src/public/schedules/providers/in-memory.d.ts +5 -0
  435. package/dist/src/public/schedules/providers/in-memory.js +1 -0
  436. package/dist/src/public/schedules/providers/vercel.d.ts +10 -0
  437. package/dist/src/public/schedules/providers/vercel.js +1 -0
  438. package/dist/src/public/schedules/scope.d.ts +2 -0
  439. package/dist/src/public/schedules/scope.js +1 -0
  440. package/dist/src/public/schedules/subscription.d.ts +259 -0
  441. package/dist/src/public/schedules/subscription.js +1 -0
  442. package/dist/src/public/schedules/testing.d.ts +1 -0
  443. package/dist/src/public/schedules/testing.js +1 -0
  444. package/dist/src/public/sveltekit/dev-server.js +1 -1
  445. package/dist/src/runtime/cache-key.js +1 -1
  446. package/dist/src/runtime/connections/mcp-client.js +1 -1
  447. package/dist/src/runtime/loaders/compile-metadata.js +1 -1
  448. package/dist/src/runtime/loaders/manifest.js +1 -1
  449. package/dist/src/runtime/loaders/module-map.js +1 -1
  450. package/dist/src/runtime/resolve-connection.js +1 -1
  451. package/dist/src/runtime/sandbox/prepared-artifacts.js +1 -1
  452. package/dist/src/runtime/schedules/collection-client.d.ts +20 -0
  453. package/dist/src/runtime/schedules/collection-client.js +1 -0
  454. package/dist/src/runtime/schedules/dispatch-occurrence.d.ts +12 -0
  455. package/dist/src/runtime/schedules/dispatch-occurrence.js +1 -0
  456. package/dist/src/runtime/schedules/load-collection.d.ts +14 -0
  457. package/dist/src/runtime/schedules/load-collection.js +1 -0
  458. package/dist/src/runtime/schedules/payload.d.ts +24 -0
  459. package/dist/src/runtime/schedules/payload.js +1 -0
  460. package/dist/src/runtime/schedules/provider-types.d.ts +1 -0
  461. package/dist/src/runtime/schedules/provider-types.js +1 -0
  462. package/dist/src/runtime/schedules/queue-namespace.d.ts +2 -0
  463. package/dist/src/runtime/schedules/queue-namespace.js +1 -0
  464. package/dist/src/runtime/schedules/record.d.ts +4 -0
  465. package/dist/src/runtime/schedules/record.js +1 -0
  466. package/dist/src/runtime/schedules/validation.d.ts +6 -0
  467. package/dist/src/runtime/schedules/validation.js +1 -0
  468. package/dist/src/runtime/sessions/compiled-agent-cache.js +1 -1
  469. package/dist/src/runtime/sessions/runtime-context-keys.js +1 -1
  470. package/dist/src/runtime/sessions/runtime-session.d.ts +10 -0
  471. package/dist/src/runtime/sessions/runtime-session.js +1 -1
  472. package/dist/src/runtime/types.d.ts +2 -0
  473. package/dist/src/self-modification/config.d.ts +4 -63
  474. package/dist/src/self-modification/config.js +1 -1
  475. package/dist/src/self-modification/credentials.d.ts +1 -1
  476. package/dist/src/self-modification/deployed-sandbox.d.ts +14 -0
  477. package/dist/src/self-modification/deployed-sandbox.js +1 -0
  478. package/dist/src/self-modification/extension/config-schema.d.ts +2 -17
  479. package/dist/src/self-modification/extension/config-schema.js +1 -1
  480. package/dist/src/self-modification/extension/local-only.d.ts +1 -1
  481. package/dist/src/self-modification/extension/local-only.js +1 -1
  482. package/dist/src/self-modification/extension/subagents/agent/agent.d.ts +1 -1
  483. package/dist/src/self-modification/extension/subagents/agent/agent.js +1 -1
  484. package/dist/src/self-modification/extension/subagents/agent/instructions.js +3 -35
  485. package/dist/src/self-modification/extension/subagents/agent/tools/registry_add.d.ts +3 -31
  486. package/dist/src/self-modification/extension/subagents/agent/tools/registry_add.js +1 -1
  487. package/dist/src/self-modification/git-workspace.d.ts +1 -2
  488. package/dist/src/self-modification/git-workspace.js +1 -1
  489. package/dist/src/self-modification/github-publisher.d.ts +1 -1
  490. package/dist/src/self-modification/mode.d.ts +4 -4
  491. package/dist/src/self-modification/mode.js +1 -1
  492. package/dist/src/self-modification/proposal.js +1 -1
  493. package/dist/src/self-modification/remote/config-schema.d.ts +20 -0
  494. package/dist/src/self-modification/remote/config-schema.js +1 -0
  495. package/dist/src/self-modification/remote/config.d.ts +66 -0
  496. package/dist/src/self-modification/remote/config.js +1 -0
  497. package/dist/src/self-modification/remote/extension.d.ts +5 -0
  498. package/dist/src/self-modification/remote/extension.js +1 -0
  499. package/dist/src/self-modification/remote/production-registry-add.js +1 -0
  500. package/dist/src/self-modification/remote/subagents/agent/agent.d.ts +4 -0
  501. package/dist/src/self-modification/remote/subagents/agent/agent.js +1 -0
  502. package/dist/src/self-modification/remote/subagents/agent/instructions.d.ts +2 -0
  503. package/dist/src/self-modification/remote/subagents/agent/instructions.js +5 -0
  504. package/dist/src/self-modification/remote/subagents/agent/sandbox.d.ts +2 -0
  505. package/dist/src/self-modification/remote/subagents/agent/sandbox.js +1 -0
  506. package/dist/src/self-modification/remote/subagents/agent/tools/edit_file.d.ts +1 -0
  507. package/dist/src/self-modification/remote/subagents/agent/tools/edit_file.js +1 -0
  508. package/dist/src/self-modification/remote/subagents/agent/tools/publish.js +1 -0
  509. package/dist/src/self-modification/remote/subagents/agent/tools/registry_add.d.ts +32 -0
  510. package/dist/src/self-modification/remote/subagents/agent/tools/registry_add.js +1 -0
  511. package/dist/src/self-modification/remote/subagents/agent/tools/search_models.d.ts +1 -0
  512. package/dist/src/self-modification/remote/subagents/agent/tools/search_models.js +1 -0
  513. package/dist/src/self-modification/remote/subagents/agent/tools/search_registry.d.ts +1 -0
  514. package/dist/src/self-modification/remote/subagents/agent/tools/search_registry.js +1 -0
  515. package/dist/src/self-modification/sandbox.d.ts +1 -6
  516. package/dist/src/self-modification/sandbox.js +1 -1
  517. package/dist/src/self-modification/scaffold.js +1 -1
  518. package/dist/src/self-modification/setup.d.ts +6 -0
  519. package/dist/src/self-modification/setup.js +46 -48
  520. package/dist/src/self-modification/subagent-guidance.d.ts +15 -0
  521. package/dist/src/self-modification/subagent-guidance.js +29 -0
  522. package/dist/src/services/dev-client/request-headers.js +1 -1
  523. package/dist/src/setup/flows/model-source-change.js +1 -1
  524. package/dist/src/setup/integrations/self-modification/setup.js +1 -1
  525. package/dist/src/setup/project-resolution.js +1 -1
  526. package/dist/src/setup/scaffold/create/project.js +1 -1
  527. package/dist/src/setup/verified-remote-client.d.ts +3 -0
  528. package/dist/src/setup/verified-remote-client.js +1 -1
  529. package/dist/src/shared/framework-eve-server.js +1 -1
  530. package/dist/src/shared/principal-scope.d.ts +2 -0
  531. package/dist/src/shared/principal-scope.js +1 -0
  532. package/dist/src/shared/schedule-collection-definition.d.ts +11 -0
  533. package/dist/src/shared/schedule-collection-definition.js +1 -0
  534. package/dist/src/shared/schedule-collection-tools.d.ts +1 -0
  535. package/dist/src/shared/schedule-collection-tools.js +1 -0
  536. package/dist/src/subagents/hitl-proxy.js +1 -1
  537. package/dist/src/subagents/tool.d.ts +1 -0
  538. package/dist/src/subagents/tool.js +1 -1
  539. package/dist/src/svelte/index.js +1 -1
  540. package/dist/src/svelte/use-eve-agent.js +1 -1
  541. package/dist/src/tools/framework/agent.js +1 -1
  542. package/dist/src/tools/provided/ask-question-workflow.js +1 -1
  543. package/dist/src/tools/provided/read-file.js +1 -1
  544. package/dist/src/tools/provided/sleep-workflow.js +1 -1
  545. package/dist/src/tracing/agent-otel-content.d.ts +2 -0
  546. package/dist/src/tracing/agent-otel-content.js +2 -2
  547. package/dist/src/tracing/agent-otel-provider.js +1 -1
  548. package/dist/src/tracing/invoke-tool-span.d.ts +1 -0
  549. package/dist/src/vue/index.js +1 -1
  550. package/dist/src/vue/use-eve-agent.js +1 -1
  551. package/docs/channels/chat-sdk.mdx +27 -0
  552. package/docs/channels/custom.mdx +5 -2
  553. package/docs/channels/discord.mdx +22 -0
  554. package/docs/channels/mcp.mdx +102 -4
  555. package/docs/channels/slack.mdx +1 -1
  556. package/docs/connections/mcp.mdx +19 -0
  557. package/docs/evals/targets.mdx +5 -1
  558. package/docs/guides/self-modification.md +50 -3
  559. package/docs/tools/human-in-the-loop.md +14 -2
  560. package/docs/tools/workflows.mdx +6 -4
  561. package/docs/tutorial/guard-the-spend.mdx +1 -1
  562. package/package.json +46 -8
  563. package/dist/src/compiled/@workflow/core/runtime/vm-serde-bundle.generated.d.ts +0 -14
  564. package/dist/src/compiled/_chunks/workflow/dist-CaNNONeg.js +0 -3
  565. package/dist/src/compiled/_chunks/workflow/global-DKbOgrts.js +0 -1
  566. package/dist/src/compiled/_chunks/workflow/helpers-CP9TjeO8.js +0 -1
  567. package/dist/src/compiled/_chunks/workflow/logger-oqfblE3p.js +0 -14
  568. package/dist/src/compiled/_chunks/workflow/resume-hook-yq-NAdBu.js +0 -1
  569. package/dist/src/compiled/_chunks/workflow/serialization-APSKphN5.js +0 -3
  570. package/dist/src/compiled/_chunks/workflow/sleep-Ba8SExMt.js +0 -1
  571. package/dist/src/compiled/_chunks/workflow/wait-until-Dc9s3yyP.js +0 -1
  572. package/dist/src/self-modification/extension/production-registry-add.js +0 -1
  573. package/dist/src/self-modification/extension/subagents/agent/tools/publish.js +0 -1
  574. /package/dist/src/self-modification/{extension → remote}/production-registry-add.d.ts +0 -0
  575. /package/dist/src/self-modification/{extension → remote}/subagents/agent/tools/publish.d.ts +0 -0
@@ -1 +1 @@
1
- import{initExtensionHandoff,initExtensionInstructions}from"./agent-instructions.js";import{tryInitializeGit}from"./init-git.js";import{mkdtemp,readdir,rename,rm,stat}from"node:fs/promises";import{createLogger,isLogLevelEnabled}from"#internal/logging.js";import pc from"#compiled/picocolors/index.js";import{basename,join,resolve}from"node:path";import{scaffoldExtensionProject}from"#setup/scaffold/index.js";import{packageManagerInstallFailureMessage,packageManagerInstallSucceeded,runPackageManagerInstall}from"#setup/primitives/index.js";import{performance}from"node:perf_hooks";import{isCodingAgentLaunch}from"#cli/agent-detection.js";import{EVE_WORDMARK}from"#cli/banner.js";import{formatElapsed}from"#cli/format-elapsed.js";import{startCliLiveRow}from"#cli/ui/live-row.js";import{formatNodeEngineOverrideWarning}from"#setup/node-engine.js";import{detectInvokingPackageManager,detectPackageManager}from"#setup/package-manager.js";import{pathExists}from"#setup/path-exists.js";import{parseProjectName}from"#setup/project-name.js";import{blockingCreateInPlaceEntries}from"#setup/scaffold/create-in-place.js";import{DEFAULT_EVE_PACKAGE_CONTRACT}from"#setup/scaffold/create/project.js";const defaultDependencies={detectInvokingPackageManager,detectPackageManager,isCodingAgentLaunch,now:()=>performance.now(),runPackageManagerInstall,scaffoldExtensionProject,tryInitializeGit},EVE_INIT_PACKAGE_SPEC_ENV=`EVE_INIT_PACKAGE_SPEC`,initLog=createLogger(`extension-init`);function isCurrentDirectoryTarget(e){return/^\.(?:[/\\]+\.?)*$/u.test(e.trim())}async function resolveTargetDirectory(e,t){let n=resolve(e,t);return(await stat(n).catch(()=>void 0))?.isDirectory()?n:void 0}async function assertCanScaffoldInPlace(e){let t=await readdir(e),n=blockingCreateInPlaceEntries(t);if(n.length===0)return;let r=n.slice(0,5).join(`, `),i=n.length>5?`, and ${n.length-5} more`:``;throw Error(`Cannot create project in current directory because it is not empty. Found: ${r}${i}. Use an empty directory.`)}async function moveDirectoryContents(e,t){for(let n of await readdir(e))await rename(join(e,n),join(t,n))}function uniqueWorkspaceRootMutations(e){let t=new Map;for(let n of e){let e=`${n.kind}:${n.path}`,r=t.get(e);t.set(e,{...n,nodeEngineOverride:n.nodeEngineOverride??r?.nodeEngineOverride})}return[...t.values()]}function formatWorkspaceRootMutationWarning(e){let t=e.kind===`package-json`?`package.json`:`configuration`,n=e.nodeEngineOverride===void 0?``:` (${formatNodeEngineOverrideWarning(e.nodeEngineOverride)})`;return`Updated workspace root ${t} at ${e.path}${n}`}async function resolveScaffoldPackageManager(e,t){let n=await t.detectPackageManager(e);return n.source==="default"?t.detectInvokingPackageManager()??`pnpm`:n.kind}async function scaffoldExtension(e,t,n,r,i){let a=resolve(e),o=t===`.`,s=o?a:join(a,t);if(o)await assertCanScaffoldInPlace(s);else if(await pathExists(s))throw Error(`Cannot create project because "${s}" already exists.`);let c=await mkdtemp(join(a,`.eve-extension-init-`)),l=[];try{let e=o?basename(s):t,a=await r.scaffoldExtensionProject({projectName:e,evePackage:i,targetDirectory:c,workspaceProbeDirectory:s,packageManager:n,onWorkspaceRootMutation:e=>{l.push(e)}});return o?await moveDirectoryContents(a,s):await rename(a,s),{projectPath:s,workspaceRootMutations:uniqueWorkspaceRootMutations(l)}}finally{await rm(c,{recursive:!0,force:!0})}}function installProgressDetail(e,t){let n=t.text.trim();if(n===``||e!==`npm`)return n||void 0;let r=/^npm silly fetch manifest (.+)$/u.exec(n);if(r!==null)return`Resolving ${r[1]}`;let i=/^npm http fetch \S+ \S+ attempt (\d+) failed with (\S+)$/u.exec(n);if(i!==null)return`npm registry · attempt ${i[1]} failed: ${i[2]}`;if(t.stream===`stdout`||/^npm (?:error|warn)\b/u.test(n))return n}const NPM_NOISE_LINE=/^\s*npm (?:silly|verbose|http|timing)\b/u;function resolveInitEvePackageOverride(){let e=process.env[EVE_INIT_PACKAGE_SPEC_ENV]?.trim();if(e!==void 0&&e.length!==0)return{nodeEngine:DEFAULT_EVE_PACKAGE_CONTRACT.nodeEngine,version:e}}async function runExtensionInitCommand(e,t,n,r=defaultDependencies,i){if(i?.(`resolve_target`),n===void 0&&await r.isCodingAgentLaunch()){e.log(initExtensionInstructions());return}let a=isLogLevelEnabled(`debug`),o=startCliLiveRow(e);o.update(`Preparing project`);let s,c,l=[],u,d,f;try{let p=n??`.`,m=isCurrentDirectoryTarget(p),h=m?await pathExists(join(resolve(t),`package.json`))?resolve(t):void 0:await resolveTargetDirectory(t,p),g=resolveInitEvePackageOverride();if(h!==void 0)throw Error("`eve extension init` creates a new extension package and cannot add to an existing project. Pass a new directory name, or run from an empty directory with `eve extension init .`.");i?.(`scaffold`),o.update(`Creating extension`),initLog.debug(`creating extension`);let _=r.now(),v=m?`.`:parseProjectName(p),y=resolve(t);c=await resolveScaffoldPackageManager(v===`.`?y:join(y,v),r);let b=await scaffoldExtension(t,v,c,r,g);s=b.projectPath,l=b.workspaceRootMutations,u=r.now()-_,initLog.debug(`creating extension done`,{ms:u}),i?.(`install_dependencies`),o.update(`Installing dependencies`,`${c} install`),initLog.debug(`installing dependencies with ${c}`);let x=r.now(),S=[],C=[],w=await r.runPackageManagerInstall(c,s,{progressDetails:process.stdout.isTTY===!0&&!a,onOutput:e=>{e.text.trim()!==``&&(C.push(e.text),C.length>20&&C.shift(),NPM_NOISE_LINE.test(e.text)||S.push(e.text)),a&&initLog.debug(e.text);let t=installProgressDetail(c,e);t!==void 0&&o.update(`Installing dependencies`,t)}});if(d=r.now()-x,!packageManagerInstallSucceeded(w)){initLog.debug(`dependency installation failed`,{ms:d}),o.stop();let t=S.length>0?S:C;for(let n of t)e.error(n);if(t.length===0){let t=packageManagerInstallFailureMessage(w);t!==void 0&&e.error(t)}throw Error(`Failed to install dependencies in "${s}".`)}initLog.debug(`dependencies installed`,{ms:d}),i?.(`initialize_git`),o.update(`Initializing Git repository`),initLog.debug(`initializing git repository`),f=await r.tryInitializeGit(s)}finally{o.stop()}i?.(`handoff`),e.log(`${pc.green(`✓`)} Created an ${EVE_WORDMARK} extension in ${pc.bold(s)} ${pc.dim(`in ${formatElapsed(u)}`)}`);for(let t of l)e.log(pc.yellow(`⚠ ${formatWorkspaceRootMutationWarning(t)}`));e.log(`${pc.green(`✓`)} Installed dependencies ${pc.dim(`in ${formatElapsed(d)}`)}`),f.kind===`failed`?e.error(pc.yellow(`Git initialization failed: ${f.reason}`)):f.kind===`initialized`&&e.log(`${pc.green(`✓`)} Initialized Git repository`),e.log(initExtensionHandoff({packageManager:c,packageName:basename(s),projectPath:s}))}export{EVE_INIT_PACKAGE_SPEC_ENV,runExtensionInitCommand};
1
+ import{initExtensionHandoff,initExtensionInstructions}from"./agent-instructions.js";import{tryInitializeGit}from"./init-git.js";import{mkdtemp,readdir,rename,rm,stat}from"node:fs/promises";import{createLogger,isLogLevelEnabled}from"#internal/logging.js";import{basename,join,resolve}from"node:path";import pc from"#compiled/picocolors/index.js";import{scaffoldExtensionProject}from"#setup/scaffold/index.js";import{packageManagerInstallFailureMessage,packageManagerInstallSucceeded,runPackageManagerInstall}from"#setup/primitives/index.js";import{performance}from"node:perf_hooks";import{isCodingAgentLaunch}from"#cli/agent-detection.js";import{EVE_WORDMARK}from"#cli/banner.js";import{formatElapsed}from"#cli/format-elapsed.js";import{startCliLiveRow}from"#cli/ui/live-row.js";import{formatNodeEngineOverrideWarning}from"#setup/node-engine.js";import{detectInvokingPackageManager,detectPackageManager}from"#setup/package-manager.js";import{pathExists}from"#setup/path-exists.js";import{parseProjectName}from"#setup/project-name.js";import{blockingCreateInPlaceEntries}from"#setup/scaffold/create-in-place.js";import{DEFAULT_EVE_PACKAGE_CONTRACT}from"#setup/scaffold/create/project.js";const defaultDependencies={detectInvokingPackageManager,detectPackageManager,isCodingAgentLaunch,now:()=>performance.now(),runPackageManagerInstall,scaffoldExtensionProject,tryInitializeGit},EVE_INIT_PACKAGE_SPEC_ENV=`EVE_INIT_PACKAGE_SPEC`,initLog=createLogger(`extension-init`);function isCurrentDirectoryTarget(e){return/^\.(?:[/\\]+\.?)*$/u.test(e.trim())}async function resolveTargetDirectory(e,t){let n=resolve(e,t);return(await stat(n).catch(()=>void 0))?.isDirectory()?n:void 0}async function assertCanScaffoldInPlace(e){let t=await readdir(e),n=blockingCreateInPlaceEntries(t);if(n.length===0)return;let r=n.slice(0,5).join(`, `),i=n.length>5?`, and ${n.length-5} more`:``;throw Error(`Cannot create project in current directory because it is not empty. Found: ${r}${i}. Use an empty directory.`)}async function moveDirectoryContents(e,t){for(let n of await readdir(e))await rename(join(e,n),join(t,n))}function uniqueWorkspaceRootMutations(e){let t=new Map;for(let n of e){let e=`${n.kind}:${n.path}`,r=t.get(e);t.set(e,{...n,nodeEngineOverride:n.nodeEngineOverride??r?.nodeEngineOverride})}return[...t.values()]}function formatWorkspaceRootMutationWarning(e){let t=e.kind===`package-json`?`package.json`:`configuration`,n=e.nodeEngineOverride===void 0?``:` (${formatNodeEngineOverrideWarning(e.nodeEngineOverride)})`;return`Updated workspace root ${t} at ${e.path}${n}`}async function resolveScaffoldPackageManager(e,t){let n=await t.detectPackageManager(e);return n.source==="default"?t.detectInvokingPackageManager()??`pnpm`:n.kind}async function scaffoldExtension(e,t,n,r,i){let a=resolve(e),o=t===`.`,s=o?a:join(a,t);if(o)await assertCanScaffoldInPlace(s);else if(await pathExists(s))throw Error(`Cannot create project because "${s}" already exists.`);let c=await mkdtemp(join(a,`.eve-extension-init-`)),l=[];try{let e=o?basename(s):t,a=await r.scaffoldExtensionProject({projectName:e,evePackage:i,targetDirectory:c,workspaceProbeDirectory:s,packageManager:n,onWorkspaceRootMutation:e=>{l.push(e)}});return o?await moveDirectoryContents(a,s):await rename(a,s),{projectPath:s,workspaceRootMutations:uniqueWorkspaceRootMutations(l)}}finally{await rm(c,{recursive:!0,force:!0})}}function installProgressDetail(e,t){let n=t.text.trim();if(n===``||e!==`npm`)return n||void 0;let r=/^npm silly fetch manifest (.+)$/u.exec(n);if(r!==null)return`Resolving ${r[1]}`;let i=/^npm http fetch \S+ \S+ attempt (\d+) failed with (\S+)$/u.exec(n);if(i!==null)return`npm registry · attempt ${i[1]} failed: ${i[2]}`;if(t.stream===`stdout`||/^npm (?:error|warn)\b/u.test(n))return n}const NPM_NOISE_LINE=/^\s*npm (?:silly|verbose|http|timing)\b/u;function resolveInitEvePackageOverride(){let e=process.env[EVE_INIT_PACKAGE_SPEC_ENV]?.trim();if(e!==void 0&&e.length!==0)return{nodeEngine:DEFAULT_EVE_PACKAGE_CONTRACT.nodeEngine,version:e}}async function runExtensionInitCommand(e,t,n,r=defaultDependencies,i){if(i?.(`resolve_target`),n===void 0&&await r.isCodingAgentLaunch()){e.log(initExtensionInstructions());return}let a=isLogLevelEnabled(`debug`),o=startCliLiveRow(e);o.update(`Preparing project`);let s,c,l=[],u,d,f;try{let p=n??`.`,m=isCurrentDirectoryTarget(p),h=m?await pathExists(join(resolve(t),`package.json`))?resolve(t):void 0:await resolveTargetDirectory(t,p),g=resolveInitEvePackageOverride();if(h!==void 0)throw Error("`eve extension init` creates a new extension package and cannot add to an existing project. Pass a new directory name, or run from an empty directory with `eve extension init .`.");i?.(`scaffold`),o.update(`Creating extension`),initLog.debug(`creating extension`);let _=r.now(),v=m?`.`:parseProjectName(p),y=resolve(t);c=await resolveScaffoldPackageManager(v===`.`?y:join(y,v),r);let b=await scaffoldExtension(t,v,c,r,g);s=b.projectPath,l=b.workspaceRootMutations,u=r.now()-_,initLog.debug(`creating extension done`,{ms:u}),i?.(`install_dependencies`),o.update(`Installing dependencies`,`${c} install`),initLog.debug(`installing dependencies with ${c}`);let x=r.now(),S=[],C=[],w=await r.runPackageManagerInstall(c,s,{progressDetails:process.stdout.isTTY===!0&&!a,onOutput:e=>{e.text.trim()!==``&&(C.push(e.text),C.length>20&&C.shift(),NPM_NOISE_LINE.test(e.text)||S.push(e.text)),a&&initLog.debug(e.text);let t=installProgressDetail(c,e);t!==void 0&&o.update(`Installing dependencies`,t)}});if(d=r.now()-x,!packageManagerInstallSucceeded(w)){initLog.debug(`dependency installation failed`,{ms:d}),o.stop();let t=S.length>0?S:C;for(let n of t)e.error(n);if(t.length===0){let t=packageManagerInstallFailureMessage(w);t!==void 0&&e.error(t)}throw Error(`Failed to install dependencies in "${s}".`)}initLog.debug(`dependencies installed`,{ms:d}),i?.(`initialize_git`),o.update(`Initializing Git repository`),initLog.debug(`initializing git repository`),f=await r.tryInitializeGit(s)}finally{o.stop()}i?.(`handoff`),e.log(`${pc.green(`✓`)} Created an ${EVE_WORDMARK} extension in ${pc.bold(s)} ${pc.dim(`in ${formatElapsed(u)}`)}`);for(let t of l)e.log(pc.yellow(`⚠ ${formatWorkspaceRootMutationWarning(t)}`));e.log(`${pc.green(`✓`)} Installed dependencies ${pc.dim(`in ${formatElapsed(d)}`)}`),f.kind===`failed`?e.error(pc.yellow(`Git initialization failed: ${f.reason}`)):f.kind===`initialized`&&e.log(`${pc.green(`✓`)} Initialized Git repository`),e.log(initExtensionHandoff({packageManager:c,packageName:basename(s),projectPath:s}))}export{EVE_INIT_PACKAGE_SPEC_ENV,runExtensionInitCommand};
@@ -1 +1 @@
1
- import{InitTargetError}from"./init-telemetry.js";import{mkdir,readFile,rename}from"node:fs/promises";import pc from"#compiled/picocolors/index.js";import{join}from"node:path";import{resolveInitAgentSettings}from"#shared/default-agent-model.js";import{createPrompter}from"#setup/prompter.js";import{findEveProjectContext}from"#internal/project-context.js";import{eveCliBanner}from"#cli/banner.js";import{formatNodeEngineOverrideWarning}from"#setup/node-engine.js";import{pathExists}from"#setup/path-exists.js";import{agentTemplateFiles}from"#setup/scaffold/create/project.js";import{assertValidPublicAgentName}from"#internal/agent-name.js";import{validateModelSlug}from"#setup/flows/model-source-change.js";import{writeTextFile}from"#setup/scaffold/files.js";function formatWorkspaceRootMutationWarning(e){let t=e.kind===`package-json`?`package.json`:`configuration`,n=e.nodeEngineOverride===void 0?``:` (${formatNodeEngineOverrideWarning(e.nodeEngineOverride)})`;return`Updated workspace root ${t} at ${e.path}${n}`}function validateAgentNames(e){if(e.length===0)throw Error(`--agents requires at least one agent name.`);let t=new Set;for(let n of e){if(assertValidPublicAgentName(n,`Agent`),t.has(n))throw Error(`Agent name ${JSON.stringify(n)} is repeated.`);t.add(n)}}async function writeWorkspaceAgent(e,t,n){let r=join(e,`agents`,t);if(await pathExists(r))throw Error(`Cannot create agent ${JSON.stringify(t)} because ${r} already exists.`);let{model:i,reasoning:a}=resolveInitAgentSettings(n),o=agentTemplateFiles(i,a);await Promise.all(Object.entries(o).map(([e,t])=>writeTextFile(join(r,e),t)))}async function convertScaffoldToAgentWorkspace(e,t,n){if(validateAgentNames(t),n.channelWebNextjs===!0)throw Error(`--channel-web-nextjs cannot be combined with --agents.`);let[r,...i]=t;await mkdir(join(e,`agents`,r),{recursive:!0}),await rename(join(e,`agent`),join(e,`agents`,r,`agent`));let a=join(e,`tsconfig.json`),o=await readFile(a,`utf8`);await writeTextFile(a,o.replace(`"agent/**/*.ts"`,`"agents/**/*.ts"`),{force:!0});for(let t of i)await writeWorkspaceAgent(e,t,n)}async function addAgentsToWorkspace(e,t,n,r,i=validateModelSlug){if((await findEveProjectContext(t))?.kind!==`workspace`)return!1;if(e.log(eveCliBanner()),r.channelWebNextjs===!0)throw new InitTargetError(`workspace_input`,`--channel-web-nextjs is not supported when adding a workspace agent.`);let a=r.agents;if(n!==void 0&&a!==void 0)throw new InitTargetError(`workspace_input`,`Pass either an agent name or --agents, not both.`);if(a===void 0&&n!==void 0&&(a=[n]),a===void 0){if(!(process.stdin.isTTY&&process.stdout.isTTY))throw new InitTargetError(`workspace_input`,`This directory is an eve agent workspace. Pass an agent name, for example: eve init billing.`);a=[await createPrompter().text({message:`Name the new agent`})]}try{if(validateAgentNames(a),r.model!==void 0){let e=await i(t,r.model);if(e!==null)throw Error(e)}}catch(e){throw new InitTargetError(`workspace_input`,e instanceof Error?e.message:String(e))}for(let e of a){let n=join(t,`agents`,e);if(await pathExists(n))throw new InitTargetError(`target_conflict`,`Cannot create agent ${JSON.stringify(e)} because ${n} already exists.`)}for(let e of a)await writeWorkspaceAgent(t,e,r);return e.log(`${pc.green(`✓`)} Added ${a.length===1?`agent`:`agents`} ${a.map(e=>pc.bold(e)).join(`, `)}`),e.log(pc.dim(`$ eve dev --agent <name>`)),!0}export{addAgentsToWorkspace,convertScaffoldToAgentWorkspace,formatWorkspaceRootMutationWarning};
1
+ import{InitTargetError}from"./init-telemetry.js";import{mkdir,readFile,rename}from"node:fs/promises";import{join}from"node:path";import pc from"#compiled/picocolors/index.js";import{resolveInitAgentSettings}from"#shared/default-agent-model.js";import{createPrompter}from"#setup/prompter.js";import{findEveProjectContext}from"#internal/project-context.js";import{eveCliBanner}from"#cli/banner.js";import{formatNodeEngineOverrideWarning}from"#setup/node-engine.js";import{pathExists}from"#setup/path-exists.js";import{agentTemplateFiles}from"#setup/scaffold/create/project.js";import{assertValidPublicAgentName}from"#internal/agent-name.js";import{validateModelSlug}from"#setup/flows/model-source-change.js";import{writeTextFile}from"#setup/scaffold/files.js";function formatWorkspaceRootMutationWarning(e){let t=e.kind===`package-json`?`package.json`:`configuration`,n=e.nodeEngineOverride===void 0?``:` (${formatNodeEngineOverrideWarning(e.nodeEngineOverride)})`;return`Updated workspace root ${t} at ${e.path}${n}`}function validateAgentNames(e){if(e.length===0)throw Error(`--agents requires at least one agent name.`);let t=new Set;for(let n of e){if(assertValidPublicAgentName(n,`Agent`),t.has(n))throw Error(`Agent name ${JSON.stringify(n)} is repeated.`);t.add(n)}}async function writeWorkspaceAgent(e,t,n){let r=join(e,`agents`,t);if(await pathExists(r))throw Error(`Cannot create agent ${JSON.stringify(t)} because ${r} already exists.`);let{model:i,reasoning:a}=resolveInitAgentSettings(n),o=agentTemplateFiles(i,a);await Promise.all(Object.entries(o).map(([e,t])=>writeTextFile(join(r,e),t)))}async function convertScaffoldToAgentWorkspace(e,t,n){if(validateAgentNames(t),n.channelWebNextjs===!0)throw Error(`--channel-web-nextjs cannot be combined with --agents.`);let[r,...i]=t;await mkdir(join(e,`agents`,r),{recursive:!0}),await rename(join(e,`agent`),join(e,`agents`,r,`agent`));let a=join(e,`tsconfig.json`),o=await readFile(a,`utf8`);await writeTextFile(a,o.replace(`"agent/**/*.ts"`,`"agents/**/*.ts"`),{force:!0});for(let t of i)await writeWorkspaceAgent(e,t,n)}async function addAgentsToWorkspace(e,t,n,r,i=validateModelSlug){if((await findEveProjectContext(t))?.kind!==`workspace`)return!1;if(e.log(eveCliBanner()),r.channelWebNextjs===!0)throw new InitTargetError(`workspace_input`,`--channel-web-nextjs is not supported when adding a workspace agent.`);let a=r.agents;if(n!==void 0&&a!==void 0)throw new InitTargetError(`workspace_input`,`Pass either an agent name or --agents, not both.`);if(a===void 0&&n!==void 0&&(a=[n]),a===void 0){if(!(process.stdin.isTTY&&process.stdout.isTTY))throw new InitTargetError(`workspace_input`,`This directory is an eve agent workspace. Pass an agent name, for example: eve init billing.`);a=[await createPrompter().text({message:`Name the new agent`})]}try{if(validateAgentNames(a),r.model!==void 0){let e=await i(t,r.model);if(e!==null)throw Error(e)}}catch(e){throw new InitTargetError(`workspace_input`,e instanceof Error?e.message:String(e))}for(let e of a){let n=join(t,`agents`,e);if(await pathExists(n))throw new InitTargetError(`target_conflict`,`Cannot create agent ${JSON.stringify(e)} because ${n} already exists.`)}for(let e of a)await writeWorkspaceAgent(t,e,r);return e.log(`${pc.green(`✓`)} Added ${a.length===1?`agent`:`agents`} ${a.map(e=>pc.bold(e)).join(`, `)}`),e.log(pc.dim(`$ eve dev --agent <name>`)),!0}export{addAgentsToWorkspace,convertScaffoldToAgentWorkspace,formatWorkspaceRootMutationWarning};
@@ -1 +1 @@
1
- import pc from"#compiled/picocolors/index.js";import{relative}from"node:path";import{formatNodeEngineOverrideWarning}from"#setup/node-engine.js";function reportExistingProjectChanges(e,t){e.log(`Updated existing project:`);for(let n of t.filesWritten)e.log(` Created ${relative(t.projectPath,n).replaceAll(`\\`,`/`)}`);t.dependenciesAdded.length>0&&e.log(` Added dependencies: ${t.dependenciesAdded.join(`, `)}`);for(let n of t.configurationFilesChanged)e.log(` Updated ${n}`);t.nodeEngineOverride!==void 0&&e.log(pc.yellow(` ⚠ ${formatNodeEngineOverrideWarning(t.nodeEngineOverride)}`))}export{reportExistingProjectChanges};
1
+ import{relative}from"node:path";import pc from"#compiled/picocolors/index.js";import{formatNodeEngineOverrideWarning}from"#setup/node-engine.js";function reportExistingProjectChanges(e,t){e.log(`Updated existing project:`);for(let n of t.filesWritten)e.log(` Created ${relative(t.projectPath,n).replaceAll(`\\`,`/`)}`);t.dependenciesAdded.length>0&&e.log(` Added dependencies: ${t.dependenciesAdded.join(`, `)}`);for(let n of t.configurationFilesChanged)e.log(` Updated ${n}`);t.nodeEngineOverride!==void 0&&e.log(pc.yellow(` ⚠ ${formatNodeEngineOverrideWarning(t.nodeEngineOverride)}`))}export{reportExistingProjectChanges};
@@ -1 +1 @@
1
- import{initAgentDevHandoff,initAgentReadySummary}from"./agent-instructions.js";import{hasInteractiveTerminal}from"./preconditions.js";import{tryInitializeGit}from"./init-git.js";import{InitTargetError}from"./init-telemetry.js";import{addAgentsToWorkspace,convertScaffoldToAgentWorkspace,formatWorkspaceRootMutationWarning}from"./init-agent-workspace.js";import{createInstallDiagnostics,packageManagerInstallFailureCode}from"./init-install.js";import{reportExistingProjectChanges}from"./init-project.js";import{cleanupFreshInitTarget,workspaceFailureNote}from"./init-recovery.js";import{resolveInitTarget}from"./init-target.js";import{mkdtemp,readdir,rename,rm}from"node:fs/promises";import{createLogger,isLogLevelEnabled}from"#internal/logging.js";import pc from"#compiled/picocolors/index.js";import{basename,join,resolve}from"node:path";import{resolveInitAgentSettings}from"#shared/default-agent-model.js";import{ensureChannel,scaffoldBaseProject}from"#setup/scaffold/index.js";import{eveDevArguments,packageManagerInstallFailureMessage,packageManagerInstallSucceeded,resultSucceeded,runPackageManagerInstall,spawnPackageManager}from"#setup/primitives/index.js";import{performance}from"node:perf_hooks";import{isCodingAgentLaunch}from"#cli/agent-detection.js";import{EVE_WORDMARK,eveCliBanner}from"#cli/banner.js";import{formatElapsed}from"#cli/format-elapsed.js";import{startCliLiveRow}from"#cli/ui/live-row.js";import{detectInvokingPackageManager,detectPackageManager}from"#setup/package-manager.js";import{pathExists}from"#setup/path-exists.js";import{DEFAULT_EVE_PACKAGE_CONTRACT}from"#setup/scaffold/create/project.js";import{validateModelSlug}from"#setup/flows/model-source-change.js";import{addAgentToProject}from"#setup/scaffold/create/add-to-project.js";import{WizardCancelledError}from"#setup/step.js";import{isPackageManagerWorkspaceMember}from"#setup/scaffold/workspace-root.js";const defaultDependencies={addAgentToProject,detectInvokingPackageManager,detectPackageManager,ensureChannel,isCodingAgentLaunch,now:()=>performance.now(),runPackageManagerInstall,scaffoldBaseProject,hasInteractiveTerminal,spawnPackageManager,tryInitializeGit,validateModelSlug},EVE_INIT_PACKAGE_SPEC_ENV=`EVE_INIT_PACKAGE_SPEC`,initLog=createLogger(`init`);async function moveDirectoryContents(e,t){for(let n of await readdir(e))await rename(join(e,n),join(t,n))}function uniqueWorkspaceRootMutations(e){let t=new Map;for(let n of e){let e=`${n.kind}:${n.path}`,r=t.get(e);t.set(e,{...n,nodeEngineOverride:n.nodeEngineOverride??r?.nodeEngineOverride})}return[...t.values()]}async function addToExistingProject(e,t,n,r){if(t.channelWebNextjs===!0)throw Error("`--channel-web-nextjs` is not supported when adding an agent to an existing project. Run `eve add channel/web` from the project afterwards instead.");if(t.model!==void 0){let r=await n.validateModelSlug(e,t.model);if(r!==null)throw Error(r)}let i=await n.detectPackageManager(e),a=await n.addAgentToProject({projectRoot:e,...resolveInitAgentSettings(t),packageManager:i.kind,evePackage:r});return{configurationFilesChanged:a.configurationFilesChanged,dependenciesAdded:a.dependenciesAdded,filesWritten:a.filesWritten,packageManager:i.kind,nodeEngineOverride:a.nodeEngineOverride}}async function resolveScaffoldPackageManager(e,t){let n=await t.detectPackageManager(e);return n.source==="default"?t.detectInvokingPackageManager()??`pnpm`:n.kind}async function scaffoldProject(e,t,n,r,i,a,o,s){let c=resolve(e,`..`),l=!n&&await pathExists(e)&&(await readdir(e)).length===0;if(!n&&await pathExists(e)&&!l)throw Error(`Cannot create project because "${e}" already exists.`);let u=n&&s?void 0:await mkdtemp(join(c,`.eve-init-`)),d=[];try{let c=u??e;if(i.model!==void 0){let e=await a.validateModelSlug(c,i.model);if(e!==null)throw Error(e)}let f={projectName:u===void 0?`.`:n?basename(e):t,...resolveInitAgentSettings(i),evePackage:o,targetDirectory:c,overwriteExisting:s,workspaceProbeDirectory:e,packageManager:r,onWorkspaceRootMutation:e=>{d.push(e)}},p=await a.scaffoldBaseProject(f);return i.agents!==void 0&&await convertScaffoldToAgentWorkspace(p,i.agents,i),i.channelWebNextjs===!0&&await a.ensureChannel({projectRoot:p,kind:`web`,packageManager:r,force:s,workspaceProbeDirectory:e,configureVercelServices:!1,onWorkspaceRootMutation:e=>{d.push(e)}}),u!==void 0&&(n||l?await moveDirectoryContents(p,e):await rename(p,e)),{projectPath:e,workspaceRootMutations:uniqueWorkspaceRootMutations(d)}}finally{u!==void 0&&await rm(u,{recursive:!0,force:!0})}}async function runInitSteps(e){let{agentLaunched:t,dependencies:n,interactive:r,logger:i,options:a,parentDirectory:o,target:s,trackStep:c,trackTerminal:l}=e,u=isLogLevelEnabled(`debug`),d=await resolveInitTarget({parentDirectory:o,target:s}),f=resolveInitEvePackageOverride(),p=n.now(),m={animate:r&&!t&&!process.env.CI&&process.env.TERM!==`dumb`,elapsed:!0,logPhases:!0},h=startCliLiveRow(i,m),g=`scaffold`,_;try{let e=d.kind===`fresh`?`creating agent`:`adding agent`;c?.(g),h.update(d.kind===`fresh`?`Creating agent`:`Adding agent`),initLog.debug(e);let r=n.now(),o;if(d.kind===`fresh`){let e=await resolveScaffoldPackageManager(d.projectPath,n),t=isPackageManagerWorkspaceMember(e,d.projectPath),r;try{r=await scaffoldProject(d.projectPath,d.projectName,d.createInPlace,e,a,n,f,d.overwriteExisting)}catch(e){if(d.failurePolicy===`clear`){let n=await cleanupFreshInitTarget(d.projectPath,d.failurePolicy,d.preservedEntries),r=e instanceof Error?e.message:String(e),i=n?`eve restored "${d.projectPath}" to its original state.`:`eve could not completely clean "${d.projectPath}".`;throw Error(`${r}\n\n${i}${workspaceFailureNote(t)}`)}if(d.failurePolicy===`remove`&&t){let t=e instanceof Error?e.message:String(e);throw Error(`${t}${workspaceFailureNote(!0)}`)}throw e}o={failurePolicy:d.failurePolicy,kind:`created`,packageManager:e,preservedTargetEntries:d.preservedEntries,projectPath:r.projectPath,retryCommand:`eve init ${d.projectPath}`,workspaceMember:t,workspaceRootMutations:r.workspaceRootMutations}}else{let e=await addToExistingProject(d.projectPath,a,n,f);o=e.nodeEngineOverride===void 0?{configurationFilesChanged:e.configurationFilesChanged,dependenciesAdded:e.dependenciesAdded,failurePolicy:`preserve`,filesWritten:e.filesWritten,kind:`added`,packageManager:e.packageManager,projectPath:d.projectPath}:{configurationFilesChanged:e.configurationFilesChanged,dependenciesAdded:e.dependenciesAdded,failurePolicy:`preserve`,filesWritten:e.filesWritten,kind:`added`,nodeEngineOverride:e.nodeEngineOverride,packageManager:e.packageManager,projectPath:d.projectPath}}let s=n.now()-r;initLog.debug(`${e} done`,{ms:s}),o.kind===`added`&&(h.stop(),reportExistingProjectChanges(i,o),h=startCliLiveRow(i,m)),g=`install_dependencies`,c?.(g),h.update(`Installing dependencies`,o.packageManager),initLog.debug(`installing dependencies with ${o.packageManager}`);let l=n.now(),v=createInstallDiagnostics(),y=await n.runPackageManagerInstall(o.packageManager,o.projectPath,{autoApprove:!0,bypassMinimumReleaseAge:!0,progressDetails:!1,onOutput:e=>{v.append(e.text),u&&initLog.debug(e.text)}}),b=n.now()-l;if(!packageManagerInstallSucceeded(y)){_=packageManagerInstallFailureCode(y),initLog.debug(`dependency installation failed`,{ms:b}),h.stop();let{lines:e,truncated:t}=v.result();t&&i.error(`Earlier install output omitted; showing the final diagnostics.`);for(let t of e)i.error(t);if(e.length===0){let e=packageManagerInstallFailureMessage(y);e!==void 0&&i.error(e)}if(o.failurePolicy!==`preserve`){if(await cleanupFreshInitTarget(o.projectPath,o.failurePolicy,o.preservedTargetEntries)){let e=o.failurePolicy===`remove`?`eve removed the incomplete project at "${o.projectPath}".`:`eve restored "${o.projectPath}" to its original state.`,t=o.workspaceMember||o.workspaceRootMutations.length>0;throw Error(`Failed to install dependencies.\n\n${e}\n\nResolve the package-manager error above, then retry:\n ${o.retryCommand}${workspaceFailureNote(t)}`)}let e=o.workspaceMember||o.workspaceRootMutations.length>0;throw Error(`Failed to install dependencies, and eve could not completely clean "${o.projectPath}".\n\nResolve the package-manager error above, then install dependencies with ${o.packageManager} in that directory. Or clean the target manually before rerunning eve init.${workspaceFailureNote(e)}`)}throw Error(`The eve agent was added, but dependency installation failed.\n\nResolve the package-manager error above, then install dependencies with ${o.packageManager} in "${o.projectPath}".\n\nDo not rerun eve init; the agent is already configured.`)}if(initLog.debug(`dependencies installed`,{ms:b}),o.kind===`created`){g=`initialize_git`,c?.(g),h.update(`Initializing Git`),initLog.debug(`initializing git repository`);let e=await n.tryInitializeGit(o.projectPath);return{...o,elapsedMs:n.now()-p,agentLaunched:t,gitResult:e}}return{...o,elapsedMs:n.now()-p,agentLaunched:t}}catch(e){throw l?.(g,`error`,g===`install_dependencies`?_:void 0),e}finally{h.stop()}}async function runInitCommand(e,t,n,r,i=defaultDependencies,a,o){let s=await i.isCodingAgentLaunch(),c=i.hasInteractiveTerminal(),l=c&&!s&&!r.nonInteractive;c&&!s&&e.log(``),a?.(`resolve_target`);let u;try{if(await addAgentsToWorkspace(e,t,n,r,i.validateModelSlug)){a?.(`handoff`),o?.(`handoff`,`completed`);return}l||e.log(eveCliBanner()),u=await runInitSteps({agentLaunched:s,interactive:c,dependencies:i,logger:e,options:r,parentDirectory:t,target:n,trackStep:a,trackTerminal:o})}catch(e){if(e instanceof WizardCancelledError){o?.(`resolve_target`,`cancelled`);return}throw e instanceof InitTargetError&&o?.(`resolve_target`,`error`,e.failureCode),e}if(a?.(`handoff`),u.kind===`created`){e.log(`${pc.green(`✓`)} Created an ${EVE_WORDMARK} agent in ${pc.bold(u.projectPath)} ${pc.dim(`in ${formatElapsed(u.elapsedMs)}`)}`);for(let t of u.workspaceRootMutations)e.log(pc.yellow(`⚠ ${formatWorkspaceRootMutationWarning(t)}`))}else e.log(`${pc.green(`✓`)} Added an ${EVE_WORDMARK} agent to ${pc.bold(u.projectPath)} ${pc.dim(`in ${formatElapsed(u.elapsedMs)}`)}`);u.kind===`created`&&u.gitResult.kind===`failed`&&(e.error(pc.yellow(`Git initialization failed during ${u.gitResult.stage}: ${u.gitResult.reason}`)),u.gitResult.stage===`commit`&&e.error(pc.yellow(`The eve agent was created successfully. Git repository metadata and staged files were preserved at "${u.projectPath}"; the initial commit is optional.\n\nTo create it later, configure Git identity and run:\n git -C ${JSON.stringify(u.projectPath)} commit -m "Initial commit from eve"`)));let d=eveDevArguments(u.packageManager),f=[u.packageManager,...d].join(` `),p=initAgentDevHandoff({projectPath:u.projectPath,devCommand:f});if(u.agentLaunched){e.log(initAgentReadySummary(r.model,u.projectPath,{workspace:r.agents!==void 0})),e.log(p);return}if(!l){e.log(p);return}let m=u.kind===`created`,h=[...u.packageManager===`pnpm`?[`--reporter=silent`]:[],...d,...m?[`--onboard`]:[]];if(e.log(``),!resultSucceeded(await i.spawnPackageManager(u.packageManager,u.projectPath,h)))throw Error(`Development server exited unsuccessfully in "${u.projectPath}".`)}function resolveInitEvePackageOverride(){let e=process.env[EVE_INIT_PACKAGE_SPEC_ENV]?.trim();if(e!==void 0&&e.length!==0)return{nodeEngine:DEFAULT_EVE_PACKAGE_CONTRACT.nodeEngine,version:e}}export{EVE_INIT_PACKAGE_SPEC_ENV,runInitCommand};
1
+ import{initAgentDevHandoff,initAgentReadySummary}from"./agent-instructions.js";import{hasInteractiveTerminal}from"./preconditions.js";import{tryInitializeGit}from"./init-git.js";import{InitTargetError}from"./init-telemetry.js";import{addAgentsToWorkspace,convertScaffoldToAgentWorkspace,formatWorkspaceRootMutationWarning}from"./init-agent-workspace.js";import{createInstallDiagnostics,packageManagerInstallFailureCode}from"./init-install.js";import{reportExistingProjectChanges}from"./init-project.js";import{cleanupFreshInitTarget,workspaceFailureNote}from"./init-recovery.js";import{resolveInitTarget}from"./init-target.js";import{mkdtemp,readdir,rename,rm}from"node:fs/promises";import{createLogger,isLogLevelEnabled}from"#internal/logging.js";import{basename,join,resolve}from"node:path";import pc from"#compiled/picocolors/index.js";import{resolveInitAgentSettings}from"#shared/default-agent-model.js";import{ensureChannel,scaffoldBaseProject}from"#setup/scaffold/index.js";import{eveDevArguments,packageManagerInstallFailureMessage,packageManagerInstallSucceeded,resultSucceeded,runPackageManagerInstall,spawnPackageManager}from"#setup/primitives/index.js";import{performance}from"node:perf_hooks";import{isCodingAgentLaunch}from"#cli/agent-detection.js";import{EVE_WORDMARK,eveCliBanner}from"#cli/banner.js";import{formatElapsed}from"#cli/format-elapsed.js";import{startCliLiveRow}from"#cli/ui/live-row.js";import{detectInvokingPackageManager,detectPackageManager}from"#setup/package-manager.js";import{pathExists}from"#setup/path-exists.js";import{DEFAULT_EVE_PACKAGE_CONTRACT}from"#setup/scaffold/create/project.js";import{validateModelSlug}from"#setup/flows/model-source-change.js";import{addAgentToProject}from"#setup/scaffold/create/add-to-project.js";import{WizardCancelledError}from"#setup/step.js";import{isPackageManagerWorkspaceMember}from"#setup/scaffold/workspace-root.js";const defaultDependencies={addAgentToProject,detectInvokingPackageManager,detectPackageManager,ensureChannel,isCodingAgentLaunch,now:()=>performance.now(),runPackageManagerInstall,scaffoldBaseProject,hasInteractiveTerminal,spawnPackageManager,tryInitializeGit,validateModelSlug},EVE_INIT_PACKAGE_SPEC_ENV=`EVE_INIT_PACKAGE_SPEC`,initLog=createLogger(`init`);async function moveDirectoryContents(e,t){for(let n of await readdir(e))await rename(join(e,n),join(t,n))}function uniqueWorkspaceRootMutations(e){let t=new Map;for(let n of e){let e=`${n.kind}:${n.path}`,r=t.get(e);t.set(e,{...n,nodeEngineOverride:n.nodeEngineOverride??r?.nodeEngineOverride})}return[...t.values()]}async function addToExistingProject(e,t,n,r){if(t.channelWebNextjs===!0)throw Error("`--channel-web-nextjs` is not supported when adding an agent to an existing project. Run `eve add channel/web` from the project afterwards instead.");if(t.model!==void 0){let r=await n.validateModelSlug(e,t.model);if(r!==null)throw Error(r)}let i=await n.detectPackageManager(e),a=await n.addAgentToProject({projectRoot:e,...resolveInitAgentSettings(t),packageManager:i.kind,evePackage:r});return{configurationFilesChanged:a.configurationFilesChanged,dependenciesAdded:a.dependenciesAdded,filesWritten:a.filesWritten,packageManager:i.kind,nodeEngineOverride:a.nodeEngineOverride}}async function resolveScaffoldPackageManager(e,t){let n=await t.detectPackageManager(e);return n.source==="default"?t.detectInvokingPackageManager()??`pnpm`:n.kind}async function scaffoldProject(e,t,n,r,i,a,o,s){let c=resolve(e,`..`),l=!n&&await pathExists(e)&&(await readdir(e)).length===0;if(!n&&await pathExists(e)&&!l)throw Error(`Cannot create project because "${e}" already exists.`);let u=n&&s?void 0:await mkdtemp(join(c,`.eve-init-`)),d=[];try{let c=u??e;if(i.model!==void 0){let e=await a.validateModelSlug(c,i.model);if(e!==null)throw Error(e)}let f={projectName:u===void 0?`.`:n?basename(e):t,...resolveInitAgentSettings(i),evePackage:o,targetDirectory:c,overwriteExisting:s,workspaceProbeDirectory:e,packageManager:r,onWorkspaceRootMutation:e=>{d.push(e)}},p=await a.scaffoldBaseProject(f);return i.agents!==void 0&&await convertScaffoldToAgentWorkspace(p,i.agents,i),i.channelWebNextjs===!0&&await a.ensureChannel({projectRoot:p,kind:`web`,packageManager:r,force:s,workspaceProbeDirectory:e,configureVercelServices:!1,onWorkspaceRootMutation:e=>{d.push(e)}}),u!==void 0&&(n||l?await moveDirectoryContents(p,e):await rename(p,e)),{projectPath:e,workspaceRootMutations:uniqueWorkspaceRootMutations(d)}}finally{u!==void 0&&await rm(u,{recursive:!0,force:!0})}}async function runInitSteps(e){let{agentLaunched:t,dependencies:n,interactive:r,logger:i,options:a,parentDirectory:o,target:s,trackStep:c,trackTerminal:l}=e,u=isLogLevelEnabled(`debug`),d=await resolveInitTarget({parentDirectory:o,target:s}),f=resolveInitEvePackageOverride(),p=n.now(),m={animate:r&&!t&&!process.env.CI&&process.env.TERM!==`dumb`,elapsed:!0,logPhases:!0},h=startCliLiveRow(i,m),g=`scaffold`,_;try{let e=d.kind===`fresh`?`creating agent`:`adding agent`;c?.(g),h.update(d.kind===`fresh`?`Creating agent`:`Adding agent`),initLog.debug(e);let r=n.now(),o;if(d.kind===`fresh`){let e=await resolveScaffoldPackageManager(d.projectPath,n),t=isPackageManagerWorkspaceMember(e,d.projectPath),r;try{r=await scaffoldProject(d.projectPath,d.projectName,d.createInPlace,e,a,n,f,d.overwriteExisting)}catch(e){if(d.failurePolicy===`clear`){let n=await cleanupFreshInitTarget(d.projectPath,d.failurePolicy,d.preservedEntries),r=e instanceof Error?e.message:String(e),i=n?`eve restored "${d.projectPath}" to its original state.`:`eve could not completely clean "${d.projectPath}".`;throw Error(`${r}\n\n${i}${workspaceFailureNote(t)}`)}if(d.failurePolicy===`remove`&&t){let t=e instanceof Error?e.message:String(e);throw Error(`${t}${workspaceFailureNote(!0)}`)}throw e}o={failurePolicy:d.failurePolicy,kind:`created`,packageManager:e,preservedTargetEntries:d.preservedEntries,projectPath:r.projectPath,retryCommand:`eve init ${d.projectPath}`,workspaceMember:t,workspaceRootMutations:r.workspaceRootMutations}}else{let e=await addToExistingProject(d.projectPath,a,n,f);o=e.nodeEngineOverride===void 0?{configurationFilesChanged:e.configurationFilesChanged,dependenciesAdded:e.dependenciesAdded,failurePolicy:`preserve`,filesWritten:e.filesWritten,kind:`added`,packageManager:e.packageManager,projectPath:d.projectPath}:{configurationFilesChanged:e.configurationFilesChanged,dependenciesAdded:e.dependenciesAdded,failurePolicy:`preserve`,filesWritten:e.filesWritten,kind:`added`,nodeEngineOverride:e.nodeEngineOverride,packageManager:e.packageManager,projectPath:d.projectPath}}let s=n.now()-r;initLog.debug(`${e} done`,{ms:s}),o.kind===`added`&&(h.stop(),reportExistingProjectChanges(i,o),h=startCliLiveRow(i,m)),g=`install_dependencies`,c?.(g),h.update(`Installing dependencies`,o.packageManager),initLog.debug(`installing dependencies with ${o.packageManager}`);let l=n.now(),v=createInstallDiagnostics(),y=await n.runPackageManagerInstall(o.packageManager,o.projectPath,{autoApprove:!0,bypassMinimumReleaseAge:!0,progressDetails:!1,onOutput:e=>{v.append(e.text),u&&initLog.debug(e.text)}}),b=n.now()-l;if(!packageManagerInstallSucceeded(y)){_=packageManagerInstallFailureCode(y),initLog.debug(`dependency installation failed`,{ms:b}),h.stop();let{lines:e,truncated:t}=v.result();t&&i.error(`Earlier install output omitted; showing the final diagnostics.`);for(let t of e)i.error(t);if(e.length===0){let e=packageManagerInstallFailureMessage(y);e!==void 0&&i.error(e)}if(o.failurePolicy!==`preserve`){if(await cleanupFreshInitTarget(o.projectPath,o.failurePolicy,o.preservedTargetEntries)){let e=o.failurePolicy===`remove`?`eve removed the incomplete project at "${o.projectPath}".`:`eve restored "${o.projectPath}" to its original state.`,t=o.workspaceMember||o.workspaceRootMutations.length>0;throw Error(`Failed to install dependencies.\n\n${e}\n\nResolve the package-manager error above, then retry:\n ${o.retryCommand}${workspaceFailureNote(t)}`)}let e=o.workspaceMember||o.workspaceRootMutations.length>0;throw Error(`Failed to install dependencies, and eve could not completely clean "${o.projectPath}".\n\nResolve the package-manager error above, then install dependencies with ${o.packageManager} in that directory. Or clean the target manually before rerunning eve init.${workspaceFailureNote(e)}`)}throw Error(`The eve agent was added, but dependency installation failed.\n\nResolve the package-manager error above, then install dependencies with ${o.packageManager} in "${o.projectPath}".\n\nDo not rerun eve init; the agent is already configured.`)}if(initLog.debug(`dependencies installed`,{ms:b}),o.kind===`created`){g=`initialize_git`,c?.(g),h.update(`Initializing Git`),initLog.debug(`initializing git repository`);let e=await n.tryInitializeGit(o.projectPath);return{...o,elapsedMs:n.now()-p,agentLaunched:t,gitResult:e}}return{...o,elapsedMs:n.now()-p,agentLaunched:t}}catch(e){throw l?.(g,`error`,g===`install_dependencies`?_:void 0),e}finally{h.stop()}}async function runInitCommand(e,t,n,r,i=defaultDependencies,a,o){let s=await i.isCodingAgentLaunch(),c=i.hasInteractiveTerminal(),l=c&&!s&&!r.nonInteractive;c&&!s&&e.log(``),a?.(`resolve_target`);let u;try{if(await addAgentsToWorkspace(e,t,n,r,i.validateModelSlug)){a?.(`handoff`),o?.(`handoff`,`completed`);return}l||e.log(eveCliBanner()),u=await runInitSteps({agentLaunched:s,interactive:c,dependencies:i,logger:e,options:r,parentDirectory:t,target:n,trackStep:a,trackTerminal:o})}catch(e){if(e instanceof WizardCancelledError){o?.(`resolve_target`,`cancelled`);return}throw e instanceof InitTargetError&&o?.(`resolve_target`,`error`,e.failureCode),e}if(a?.(`handoff`),u.kind===`created`){e.log(`${pc.green(`✓`)} Created an ${EVE_WORDMARK} agent in ${pc.bold(u.projectPath)} ${pc.dim(`in ${formatElapsed(u.elapsedMs)}`)}`);for(let t of u.workspaceRootMutations)e.log(pc.yellow(`⚠ ${formatWorkspaceRootMutationWarning(t)}`))}else e.log(`${pc.green(`✓`)} Added an ${EVE_WORDMARK} agent to ${pc.bold(u.projectPath)} ${pc.dim(`in ${formatElapsed(u.elapsedMs)}`)}`);u.kind===`created`&&u.gitResult.kind===`failed`&&(e.error(pc.yellow(`Git initialization failed during ${u.gitResult.stage}: ${u.gitResult.reason}`)),u.gitResult.stage===`commit`&&e.error(pc.yellow(`The eve agent was created successfully. Git repository metadata and staged files were preserved at "${u.projectPath}"; the initial commit is optional.\n\nTo create it later, configure Git identity and run:\n git -C ${JSON.stringify(u.projectPath)} commit -m "Initial commit from eve"`)));let d=eveDevArguments(u.packageManager),f=[u.packageManager,...d].join(` `),p=initAgentDevHandoff({projectPath:u.projectPath,devCommand:f});if(u.agentLaunched){e.log(initAgentReadySummary(r.model,u.projectPath,{workspace:r.agents!==void 0})),e.log(p);return}if(!l){e.log(p);return}let m=u.kind===`created`,h=[...u.packageManager===`pnpm`?[`--reporter=silent`]:[],...d,...m?[`--onboard`]:[]];if(e.log(``),!resultSucceeded(await i.spawnPackageManager(u.packageManager,u.projectPath,h)))throw Error(`Development server exited unsuccessfully in "${u.projectPath}".`)}function resolveInitEvePackageOverride(){let e=process.env[EVE_INIT_PACKAGE_SPEC_ENV]?.trim();if(e!==void 0&&e.length!==0)return{nodeEngine:DEFAULT_EVE_PACKAGE_CONTRACT.nodeEngine,version:e}}export{EVE_INIT_PACKAGE_SPEC_ENV,runInitCommand};
@@ -1 +1 @@
1
- import{access,readdir,stat,writeFile}from"node:fs/promises";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{constants}from"node:fs";import{delimiter,join,relative,sep}from"node:path";import{LOCAL_WORKFLOW_WORLD_DATA_DIRECTORY_RELATIVE_PATH}from"#internal/workflow/local-world-data-directory.js";import{captureVercel,resolveVercelInvocation}from"#setup/primitives/run-vercel.js";function createDevDiagnosticDump(e,t,n={}){let r=t.replace(/\.log$/,`.dump`),i=n.now??(()=>new Date),a=i().getTime(),o,s,c=Promise.resolve(),l=!1,u=!1,write=()=>{if(u||l)return;let e=formatDump({at:i(),durationMs:i().getTime()-a,environment:o,stats:s});c=c.then(()=>writeFile(r,e,{encoding:`utf8`,mode:384})).catch(()=>{l=!0})};return write(),(n.environment??(()=>collectDevEnvironmentInfo(e)))().then(e=>{o=e,write()}).catch(()=>{}),{path:r,displayPath:relative(e,r).split(sep).join(`/`),updateSessionStats(e){s=e,write()},async close(){u||(write(),u=!0,await c)}}}function formatDump(e){let t={updatedAt:e.at.toISOString(),durationMs:e.durationMs,environment:e.environment??null,session:e.stats??null};return`${JSON.stringify(t,null,2)}\n`}async function collectDevEnvironmentInfo(e){let[t,n]=await Promise.all([detectVercelCli(e),measureSessionsDirectory(e)]),r={eveVersion:resolveInstalledPackageInfo().version,nodeVersion:process.version,platform:`${process.platform} ${process.arch}`,...t};return n!==void 0&&(r.sessionsDirectory=n),r}async function detectVercelCli(e){let t=resolveVercelInvocation(e),[n,r]=await Promise.all([captureVercel([`--version`],{cwd:e,nonInteractive:!0,timeoutMs:5e3}),t.command===`vercel`?findOnPath(`vercel`):Promise.resolve(t.command)]),i=n.ok?n.stdout:`${n.failure.stdout}\n${n.failure.stderr}`,a=/(\d+\.\d+\.\d+\S*)/.exec(i)?.[1],o={};return a!==void 0&&(o.vercelCliVersion=a),r!==void 0&&(o.vercelCliPath=r),o}async function findOnPath(e){let t=(process.env.PATH??``).split(delimiter).filter(e=>e.length>0);for(let n of t){let t=join(n,e);try{return await access(t,constants.X_OK),t}catch{}}}async function measureSessionsDirectory(e){let t=join(e,LOCAL_WORKFLOW_WORLD_DATA_DIRECTORY_RELATIVE_PATH),n;try{n=await readdir(t,{recursive:!0,withFileTypes:!0})}catch{return}let r=0,i=0;for(let e of n)if(e.isFile()){r+=1;try{i+=(await stat(join(e.parentPath,e.name))).size}catch{}}return{path:LOCAL_WORKFLOW_WORLD_DATA_DIRECTORY_RELATIVE_PATH,files:r,bytes:i}}export{createDevDiagnosticDump,measureSessionsDirectory};
1
+ import{access,readdir,stat,writeFile}from"node:fs/promises";import{constants}from"node:fs";import{delimiter,join,relative,sep}from"node:path";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{LOCAL_WORKFLOW_WORLD_DATA_DIRECTORY_RELATIVE_PATH}from"#internal/workflow/local-world-data-directory.js";import{captureVercel,resolveVercelInvocation}from"#setup/primitives/run-vercel.js";function createDevDiagnosticDump(e,t,n={}){let r=t.replace(/\.log$/,`.dump`),i=n.now??(()=>new Date),a=i().getTime(),o,s,c=Promise.resolve(),l=!1,u=!1,write=()=>{if(u||l)return;let e=formatDump({at:i(),durationMs:i().getTime()-a,environment:o,stats:s});c=c.then(()=>writeFile(r,e,{encoding:`utf8`,mode:384})).catch(()=>{l=!0})};return write(),(n.environment??(()=>collectDevEnvironmentInfo(e)))().then(e=>{o=e,write()}).catch(()=>{}),{path:r,displayPath:relative(e,r).split(sep).join(`/`),updateSessionStats(e){s=e,write()},async close(){u||(write(),u=!0,await c)}}}function formatDump(e){let t={updatedAt:e.at.toISOString(),durationMs:e.durationMs,environment:e.environment??null,session:e.stats??null};return`${JSON.stringify(t,null,2)}\n`}async function collectDevEnvironmentInfo(e){let[t,n]=await Promise.all([detectVercelCli(e),measureSessionsDirectory(e)]),r={eveVersion:resolveInstalledPackageInfo().version,nodeVersion:process.version,platform:`${process.platform} ${process.arch}`,...t};return n!==void 0&&(r.sessionsDirectory=n),r}async function detectVercelCli(e){let t=resolveVercelInvocation(e),[n,r]=await Promise.all([captureVercel([`--version`],{cwd:e,nonInteractive:!0,timeoutMs:5e3}),t.command===`vercel`?findOnPath(`vercel`):Promise.resolve(t.command)]),i=n.ok?n.stdout:`${n.failure.stdout}\n${n.failure.stderr}`,a=/(\d+\.\d+\.\d+\S*)/.exec(i)?.[1],o={};return a!==void 0&&(o.vercelCliVersion=a),r!==void 0&&(o.vercelCliPath=r),o}async function findOnPath(e){let t=(process.env.PATH??``).split(delimiter).filter(e=>e.length>0);for(let n of t){let t=join(n,e);try{return await access(t,constants.X_OK),t}catch{}}}async function measureSessionsDirectory(e){let t=join(e,LOCAL_WORKFLOW_WORLD_DATA_DIRECTORY_RELATIVE_PATH),n;try{n=await readdir(t,{recursive:!0,withFileTypes:!0})}catch{return}let r=0,i=0;for(let e of n)if(e.isFile()){r+=1;try{i+=(await stat(join(e.parentPath,e.name))).size}catch{}}return{path:LOCAL_WORKFLOW_WORLD_DATA_DIRECTORY_RELATIVE_PATH,files:r,bytes:i}}export{createDevDiagnosticDump,measureSessionsDirectory};
@@ -54,6 +54,12 @@ export interface Block {
54
54
  * (stopped) mark it ending.
55
55
  */
56
56
  status?: ToolStatus;
57
+ /**
58
+ * Connection-auth only: the sign-in URL. Its body row is hard-wrapped like
59
+ * any other, but every wrapped row is an OSC 8 hyperlink to this full URL,
60
+ * so Cmd-click opens the whole link whatever the terminal width.
61
+ */
62
+ link?: string;
57
63
  /** When true, treat `body` as pre-styled and only wrap + indent it. */
58
64
  preformatted?: boolean;
59
65
  /** Reasoning only: collapse the trace to a single "thinking" line. */
@@ -1,8 +1,8 @@
1
- import{isPromptControlCommand}from"./prompt-commands.js";import{renderMarkdown}from"./markdown.js";import{truncate}from"./tool-format.js";import{elisionText}from"./rail.js";import{renderTool,renderToolHeader}from"./tool-rows.js";import{clipVisible,sliceVisible,visibleLength,wrapVisibleLine}from"#cli/ui/terminal-text.js";function renderBlockLines(e,t,n,r){let i=nestingPrefix(e.depth??0,n),a=renderBody(e,Math.max(8,t-visibleLength(i)),n,r).map(e=>`${i}${e}`);if(e.agentName!==void 0&&r.previous?.subagentCallId!==e.subagentCallId&&a.length>0){let r=`${n.colors.orange(n.glyph.subagent)} ${n.colors.dim(e.agentName)}`;return[clipVisible(` ${r}`,t),...a]}return a}function nestingPrefix(e,t){return e<=0?``:` ${`${t.colors.dim(t.glyph.rule)} `.repeat(e)}`}function renderBody(e,t,n,r){switch(e.kind){case`user`:return renderUser(e,t,n);case`assistant`:case`subagent-step`:return renderProse(e,t,n,r);case`reasoning`:return renderReasoning(e,t,n);case`tool`:case`subagent-tool`:return renderTool(e,t,n,r);case`error`:return renderError(e,t,n);case`notice`:return renderNotice(e,t,n);case`warning`:return renderWarning(e,t,n);case`result`:return renderResult(e,t,n);case`flow`:return renderFlow(e,t,n);case`command`:return renderCommand(e,n,r);case`question`:case`connection-auth`:return renderPreformatted(e,t,n);case`sandbox`:return renderSandbox(e,t,n,r);case`log`:return renderLog(e,t,n);case`task`:return renderTask(e,t,n);case`turn-stats`:return renderTurnStats(e,t,n);case`session-boundary`:case`agent-header`:return(e.body??``).split(`
1
+ import{isPromptControlCommand}from"./prompt-commands.js";import{renderHyperlink,renderMarkdown}from"./markdown.js";import{truncate}from"./tool-format.js";import{elisionText}from"./rail.js";import{renderTool,renderToolHeader}from"./tool-rows.js";import{clipVisible,sliceVisible,visibleLength,wrapVisibleLine}from"#cli/ui/terminal-text.js";function renderBlockLines(e,t,n,r){let i=nestingPrefix(e.depth??0,n),a=renderBody(e,Math.max(8,t-visibleLength(i)),n,r).map(e=>`${i}${e}`);if(e.agentName!==void 0&&r.previous?.subagentCallId!==e.subagentCallId&&a.length>0){let r=`${n.colors.orange(n.glyph.subagent)} ${n.colors.dim(e.agentName)}`;return[clipVisible(` ${r}`,t),...a]}return a}function nestingPrefix(e,t){return e<=0?``:` ${`${t.colors.dim(t.glyph.rule)} `.repeat(e)}`}function renderBody(e,t,n,r){switch(e.kind){case`user`:return renderUser(e,t,n);case`assistant`:case`subagent-step`:return renderProse(e,t,n,r);case`reasoning`:return renderReasoning(e,t,n);case`tool`:case`subagent-tool`:return renderTool(e,t,n,r);case`error`:return renderError(e,t,n);case`notice`:return renderNotice(e,t,n);case`warning`:return renderWarning(e,t,n);case`result`:return renderResult(e,t,n);case`flow`:return renderFlow(e,t,n);case`command`:return renderCommand(e,n,r);case`question`:case`connection-auth`:return renderPreformatted(e,t,n);case`sandbox`:return renderSandbox(e,t,n,r);case`log`:return renderLog(e,t,n);case`task`:return renderTask(e,t,n);case`turn-stats`:return renderTurnStats(e,t,n);case`session-boundary`:case`agent-header`:return(e.body??``).split(`
2
2
  `)}}function renderUser(e,t,n){let r=e.promptOrigin===`steer`?n.colors.yellow(n.glyph.user):n.glyph.user;return wrap(e.body??``,t-2).map(e=>`${r} ${n.colors.bold(e)}`)}function renderProse(e,t,n,r){let i=[],a=e.kind===`subagent-step`,o=r.renderMarkdown??!0,s=a?``:`${n.colors.bold(n.glyph.brand)} `,c=a?``:` `;e.reasoning&&e.reasoning.trim().length>0&&i.push(...renderReasoningLines(e.reasoning,t,n));let l=(e.body??``).trim();return l.length===0&&i.length===0?[`${s}${n.colors.dim(`thinking${n.glyph.ellipsis}`)}`]:(l.length>0&&(o?renderMarkdown(l,t-c.length):l).split(`
3
3
  `).flatMap(e=>wrapVisibleLine(e,t-c.length)).forEach((e,t)=>{t===0&&!a&&i.length===0?i.push(`${s}${e}`):i.push(`${c}${e}`)}),i.length>0?i:[`${s}`])}function renderReasoning(e,t,n){return e.collapsed?[`${n.colors.gray(n.glyph.reasoning)} ${n.colors.dim(e.title??`thinking`)}`]:renderReasoningLines(e.body??``,t,n,n.glyph.reasoning)}function renderReasoningLines(e,t,n,r){let i=r?2:0,a=wrap(e.trim(),t-i);return a.length===0?[]:a.map((e,t)=>`${r?t===0?`${n.colors.gray(r)} `:` `:``}${n.colors.dim(n.colors.italic(e))}`)}function renderError(e,t,n){let r=n.colors.red(n.colors.bold(n.glyph.error)),i=e.title??`Error`,a=[`${r} ${n.colors.red(n.colors.bold(i))}`];for(let r of wrap(e.body??``,t-2))a.push(` ${colorizeError(r,n)}`);if(e.hint!==void 0&&e.hint.trim().length>0)for(let[r,i]of wrap(e.hint,t-4).entries()){let e=r===0?`${n.glyph.arrow} `:` `;a.push(` ${n.colors.cyan(`${e}${i}`)}`)}return a.push(...renderErrorDetail(e.detail,t,n)),a}function renderErrorDetail(e,t,n){if(e===void 0||e.trim().length===0)return[];let r=e.split(`
4
4
  `),i=r.slice(0,12),a=i.map(e=>` ${n.colors.dim(truncatePlain(e,Math.max(1,t-2)))}`),o=r.length-i.length;return o>0&&a.push(` ${n.colors.dim(`${n.glyph.ellipsis} +${o} more line${o===1?``:`s`}`)}`),a}const URL_PATTERN=/(https?:\/\/\S+)/u;function colorizeError(e,t){return URL_PATTERN.test(e)?e.split(URL_PATTERN).map((e,n)=>n%2==1?t.colors.cyan(e):t.colors.red(e)).join(``):t.colors.red(e)}function renderNotice(e,t,n){let r=n.colors.dim(n.glyph.dot),i=wrap(e.body??``,t-2);return i.length===0?[r]:i.map(e=>`${r} ${n.colors.dim(e)}`)}function renderAttentionRows(e,t,n){let r=n.colors.yellow(n.glyph.warning);return wrap(e,t-2).map((e,t)=>`${t===0?r:` `} ${paintCommands(e,n)}`)}function renderWarning(e,t,n){return renderAttentionRows(e.body??``,t,n)}function paintCommands(e,t){return e.replace(/\/[a-z:-]+/g,e=>isPromptControlCommand(e)?t.colors.blue(e):e)}function renderCommand(e,t,n){let r=t.colors;return[`${e.live===!0?n.transientPanelOpen===!0?t.glyph.user:n.setupFlowOpen===!0?r.gray(t.glyph.square):r.gray(n.activityPulse):e.status===`done`?r.gray(`*`):t.glyph.user} ${e.result===void 0?e.body??``:r.dim(e.result)}`]}function renderFlow(e,t,n){let r=wrap(e.body??``,t-2),i=n.colors.dim(`*`);return r.map((e,t)=>`${t===0?i:` `} ${e}`)}function renderResult(e,t,n){let r=wrap(e.body??``,t-7),i=n.colors.dim(n.glyph.elbow);if(r.length===0)return[` ${i}`];let dim=e=>n.colors.dim(e.replaceAll(`\x1B[22m`,`\x1B[22m\x1B[2m`));return r.map((e,t)=>t===0?` ${i} ${dim(e)}`:` ${dim(e)}`)}function renderPreformatted(e,t,n){let r=e.kind===`connection-auth`?n.colors.yellow(n.glyph.connection):n.colors.yellow(n.colors.bold(n.glyph.question)),i=e.kind===`question`?` `:` `,a=wrap(e.title??``,t-2),o=a.length===0?[`${r} `]:a.map((e,t)=>t===0?`${r} ${n.colors.bold(e)}`:` ${n.colors.bold(e)}`);for(let n of(e.body??``).split(`
5
- `))for(let e of wrapVisibleLine(n,Math.max(1,t-i.length)))o.push(`${i}${e}`);return o}function renderSandbox(e,t,n,r){let i=n.colors.cyan(n.glyph.rule),a=n.colors.dim(`sandbox ${n.glyph.dot} `),o=visibleLength(a),s=` `.repeat(o),c=r.previous?.kind===`sandbox`,l=(e.body??``).split(`
5
+ `)){let r=e.link!==void 0&&n===e.link;for(let e of wrapVisibleLine(n,Math.max(1,t-i.length)))o.push(`${i}${r?renderHyperlink(e,n):e}`)}return o}function renderSandbox(e,t,n,r){let i=n.colors.cyan(n.glyph.rule),a=n.colors.dim(`sandbox ${n.glyph.dot} `),o=visibleLength(a),s=` `.repeat(o),c=r.previous?.kind===`sandbox`,l=(e.body??``).split(`
6
6
  `),u=[];for(let e of l){let r=wrapVisibleLine(e,Math.max(1,t-2-o));for(let e of r){let t=u.length===0&&!c?a:s;u.push(`${i} ${t}${n.colors.gray(e)}`)}}return u.length>0?u:[`${i}`]}function renderLog(e,t,n){let r=e.logLevel===`error`?n.colors.red:e.logLevel===`warn`?n.colors.yellow:n.colors.gray,i=n.colors.dim(n.glyph.rule),a=e.logLevel??e.title??`stdout`,o=[`${n.colors.dim(n.glyph.reasoning)} ${n.colors.dim(a)}`];e.elided!==void 0&&e.elided>0&&o.push(`${i} ${elisionText(e.elided,n)}`);for(let a of(e.body??``).split(`
7
7
  `))for(let e of wrapVisibleLine(a,Math.max(1,t-2)))o.push(`${i} ${n.colors.dim(r(e))}`);return o}function renderTurnStats(e,t,n){let r=e.body??``;return[n.colors.dim(truncatePlain(r,Math.max(1,t)))]}function renderTask(e,t,n){if(e.status===void 0)return[` ${renderToolHeader(e.title??`task`,e.subtitle??``,n.colors.gray(n.glyph.square),t-1,n)}`];let r=n.colors,{mark:i,detail:a,color:o}=taskLineStyle(e,n),s=` ${i} ${r.bold(truncate(e.title??`task`,t-4))}`,c=t-visibleLength(s)-2;return a.length===0||c<6?[clipVisible(s,Math.max(1,t))]:[clipVisible(`${s} ${o(truncate(a,c))}`,Math.max(1,t))]}function taskLineStyle(e,t){let n=t.colors;switch(e.status){case`done`:return{mark:n.green(t.glyph.success),detail:e.body??``,color:n.dim};case`error`:return{mark:n.red(t.glyph.error),detail:e.body??`failed`,color:n.red};case`denied`:return{mark:n.dim(t.glyph.square),detail:e.body??`stopped`,color:n.dim};default:return{mark:(e.taskKind===`agent`?n.orange:n.gray)(t.glyph.subagent),detail:e.subtitle??``,color:n.gray}}}function wrap(e,t){return e.trim().length===0?[]:e.split(`
8
8
  `).flatMap(e=>wrapVisibleLine(e,Math.max(1,t)))}function truncatePlain(e,t){return visibleLength(e)<=t?e:sliceVisible(e,t)}export{renderAttentionRows,renderBlockLines};
@@ -7,3 +7,8 @@ export declare function detectMarkdownRendering(env?: {
7
7
  }): boolean;
8
8
  /** Renders parsed GFM blocks for terminal presentation. */
9
9
  export declare function renderMarkdown(input: string, width?: number): string;
10
+ /**
11
+ * Wraps `label` in an OSC 8 hyperlink to `href`, underlined. Terminals
12
+ * without OSC 8 show the plain label. Unsafe hrefs return the label as-is.
13
+ */
14
+ export declare function renderHyperlink(label: string, href: string): string;
@@ -3,5 +3,5 @@ import{sliceVisible,stripAnsi,visibleLength}from"#cli/ui/terminal-text.js";impor
3
3
  `));break;case`code`:r.push(...renderCodeBlock(i,t));break;case`blockquote`:r.push(...renderBlocks(i.tokens??[],Math.max(1,t-2)).map(e=>`${ansi.dim}│${ansi.dimOff} ${e}`));break;case`list`:r.push(...renderList(i,t));break;case`table`:r.push(...renderTable(i,t));break;case`hr`:r.push(ansi.dim+`─`.repeat(horizontalRuleWidth(t))+ansi.dimOff);break;case`html`:r.push(...(i.text??i.raw??``).split(`
4
4
  `));break;case`def`:break;default:i.tokens===void 0?i.text!==void 0&&r.push(i.text):r.push(...renderBlocks(i.tokens,t))}n&&isVisibleBlock(i)&&pushBlankRow(r)}return r}function isVisibleBlock(e){return e.type!==`space`&&e.type!==`def`}function renderHeading(e,t){let n=e===1||e===3||e===5,r=e===1||e===2||e===4,i=renderInline(t,``,{restoreAfterStrong:(e===4||e===5||e>=6)&&!r?ansi.dim:``,restoreUnderlineAfterLink:n,suppressBold:r});switch(e){case 1:return`${ansi.bold}${ansi.underline}${i}${ansi.underlineOff}${ansi.boldOff}`;case 2:return`${ansi.bold}${i}${ansi.boldOff}`;case 3:return`${ansi.underline}${i}${ansi.underlineOff}`;case 4:return`${ansi.bold}${ansi.dim}${i}${ansi.boldOff}`;case 5:return`${ansi.dim}${ansi.underline}${i}${ansi.underlineOff}${ansi.dimOff}`;default:return`${ansi.dim}${i}${ansi.dimOff}`}}function renderCodeBlock(e,t){let n=e.lang?.trim()??``,r=(e.text??``).replace(/\n$/u,``).split(`
5
5
  `),i=Math.max(1,...r.map(visibleLength));if(!Number.isFinite(t)||t>5){let e=Math.min(Number.isFinite(t)?Math.floor(t):i,Math.max(6,i,visibleLength(n)+4));return[n.length>0?codePanelHeader(n,e):codePanelRule(e),...r.flatMap(t=>wrapCodeRow(t,e)),codePanelRule(e)]}return r.flatMap(e=>wrapCodeRow(e,Math.max(1,Math.floor(t))))}function codePanelHeader(e,t){let n=sliceVisible(e,Math.max(1,t-4))||`?`;return`${ansi.dim}─ ${n} ${`─`.repeat(Math.max(0,t-3-visibleLength(n)))}${ansi.dimOff}`}function codePanelRule(e){return`${ansi.dim}${`─`.repeat(e)}${ansi.dimOff}`}function wrapCodeRow(e,t){if(e.length===0)return[``];let n=e.match(/^[\t ]*/u)?.[0]??``,r=[],i=e,a=!1;for(;i.length>0;){let e=a&&visibleLength(n)<t?n:``,o=Math.max(1,t-visibleLength(e)),s=sliceVisible(i,o),c=s.length===0?firstGraphemeFallback(i):void 0,l=c?.rendered??s;r.push(`${e}${l}`),i=i.slice(c?.consumed??s.length),a=!0}return r}function renderList(e,t){let n=[],r=typeof e.start==`number`?e.start:1;for(let i of e.items??[]){let a=e.ordered?`${ansi.dim}${r}.${ansi.dimOff}`:`${ansi.dim}•${ansi.dimOff}`,o=e.ordered?`${r}.`.length:1,s=i.checked===!0?`✓ `:i.checked===!1?`☐ `:``,c=renderBlocks(i.tokens??[],Math.max(1,t-o-1));(c.length===0?[``]:c).forEach((e,t)=>{n.push(t===0?`${a} ${s}${e}`:`${` `.repeat(o+1)}${e}`)}),r+=1}return n}function renderInline(e,t=``,n={}){if(e===void 0)return t;let r=``;for(let t of e)t.type===`image`&&r.endsWith(` `)&&(r=`${r.slice(0,-1)}\u00a0`),r+=renderInlineToken(t,n);return r}function renderInlineToken(e,t){switch(e.type){case`text`:return renderInline(e.tokens,e.text??``,t);case`strong`:{let n=renderInline(e.tokens,e.text,t);return t.suppressBold?n:`${ansi.bold}${n}${ansi.boldOff}${t.restoreAfterStrong??``}`}case`em`:return`${ansi.italic}${renderInline(e.tokens,e.text,t)}${ansi.italicOff}`;case`del`:return`${ansi.strike}${renderInline(e.tokens,e.text,t)}${ansi.strikeOff}`;case`codespan`:return`${ansi.inlineCode}${e.text??``}${ansi.inlineCodeOff}`;case`link`:return renderLink(renderInline(e.tokens,e.text,t),e.href??``,t.restoreUnderlineAfterLink);case`image`:return renderLink(`▧\u00a0${(e.text?.trim()||`image`).replaceAll(` `,`\xA0`)}`,e.href??``,t.restoreUnderlineAfterLink);case`br`:return`
6
- `;case`checkbox`:return e.checked?`✓ `:`☐ `;case`escape`:return e.text??``;case`html`:return e.text??e.raw??``;default:return renderInline(e.tokens,e.text??e.raw??``,t)}}function renderLink(e,t,n=!1){if(!isSafeLinkUrl(t))return e;let r=n?ansi.underline:``;return`\x1b]8;;${t}\x1b\\${ansi.underline}${e}${ansi.underlineOff}\x1b]8;;\x1b\\${r}`}function isSafeLinkUrl(e){return e.length>0&&Buffer.byteLength(e,`utf8`)<=2083&&[...e].every(e=>{let t=e.codePointAt(0)??0;return t>=32&&t!==127&&(t<128||t>159)})}function renderTable(e,t){let n=e.header??[];if(n.length===0)return[];let r=n.map((t,n)=>normalizeAlignment(e.align?.[n])),i=n.map(renderTableCell),a=(e.rows??[]).map(e=>normalizeTableRow(e,n.length).map(renderTableCell)),o=[i,...a],s=r.map((e,t)=>Math.max(1,...o.map(e=>visibleLength(e[t]??``)))),c=s.reduce((e,t)=>e+t,0)+s.length*3+1;if(s.length>0&&(!Number.isFinite(t)||c<=t)){let e=i.map(e=>`${ansi.bold}${e}${ansi.boldOff}`);return[formatTableBorder(s,`┌`,`┬`,`┐`),formatBoxedTableRow(e,s,r),formatTableBorder(s,`├`,`┼`,`┤`),...a.flatMap((e,t)=>[formatBoxedTableRow(e,s,r),...t+1<a.length?[formatTableBorder(s,`├`,`┼`,`┤`)]:[]]),formatTableBorder(s,`└`,`┴`,`┘`)]}return renderVerticalTable(i,a,t)}function renderTableCell(e){return renderInline(e.tokens,e.text).replaceAll(`
7
- `,` `)}function normalizeTableRow(e,t){return Array.from({length:t},(t,n)=>e[n]??{text:``,tokens:[]})}function normalizeAlignment(e){return e??`left`}function renderVerticalTable(e,t,n){let r=Number.isFinite(n)?Math.max(1,Math.floor(n)):80;if(r<=2)return renderNarrowTable(e,t,r);let i=r-2,a=`${ansi.dim}┌${`─`.repeat(i)}┐${ansi.dimOff}`,o=`${ansi.dim}├${`─`.repeat(i)}┤${ansi.dimOff}`,s=`${ansi.dim}└${`─`.repeat(i)}┘${ansi.dimOff}`,c=[a];return t.forEach((n,r)=>{e.forEach((e,t)=>{c.push(...boxedTableLines(`${e}: ${n[t]??``}`,i))}),r+1<t.length&&c.push(o)}),c.push(s),c}function renderNarrowTable(e,t,n){return t.flatMap(t=>e.map((e,r)=>{let i=stripAnsi(`${e}: ${t[r]??``}`),a=sliceVisible(i,n);return a.length>0?a:firstGraphemeFallback(i).rendered}))}function boxedTableLines(e,t){let n=[],r=e;do{let e=sliceVisible(r,t),i=e.length===0?firstGraphemeFallback(r):void 0,a=i?.rendered??e,o=` `.repeat(Math.max(0,t-visibleLength(a)));n.push(`${ansi.dim}│${ansi.dimOff}${a}${o}${ansi.dim}│${ansi.dimOff}`),r=r.slice(i?.consumed??e.length)}while(r.length>0);return n}function firstGraphemeFallback(e){return{consumed:graphemes(e)[0]?.text.length??1,rendered:`?`}}function formatTableBorder(e,t,n,r){return`${t}${e.map(e=>`─`.repeat(e+2)).join(n)}${r}`}function formatBoxedTableRow(e,t,n){return`│ ${e.map((e,r)=>alignTableCell(e,t[r]??1,n[r]??`left`)).join(` │ `)} │`}function alignTableCell(e,t,n){let r=Math.max(0,t-visibleLength(e));if(n===`right`)return`${` `.repeat(r)}${e}`;if(n===`center`){let t=Math.floor(r/2);return`${` `.repeat(t)}${e}${` `.repeat(r-t)}`}return`${e}${` `.repeat(r)}`}function horizontalRuleWidth(e){return Number.isFinite(e)?Math.max(1,Math.floor(e)):60}function pushBlankRow(e){e.length>0&&e.at(-1)!==``&&e.push(``)}function trimTrailingBlankRows(e){for(;e.at(-1)===``;)e.pop();return e}export{detectMarkdownRendering,renderMarkdown};
6
+ `;case`checkbox`:return e.checked?`✓ `:`☐ `;case`escape`:return e.text??``;case`html`:return e.text??e.raw??``;default:return renderInline(e.tokens,e.text??e.raw??``,t)}}function renderHyperlink(e,t){return renderLink(e,t)}function renderLink(e,t,n=!1){if(!isSafeLinkUrl(t))return e;let r=n?ansi.underline:``;return`\x1b]8;;${t}\x1b\\${ansi.underline}${e}${ansi.underlineOff}\x1b]8;;\x1b\\${r}`}function isSafeLinkUrl(e){return e.length>0&&Buffer.byteLength(e,`utf8`)<=2083&&[...e].every(e=>{let t=e.codePointAt(0)??0;return t>=32&&t!==127&&(t<128||t>159)})}function renderTable(e,t){let n=e.header??[];if(n.length===0)return[];let r=n.map((t,n)=>normalizeAlignment(e.align?.[n])),i=n.map(renderTableCell),a=(e.rows??[]).map(e=>normalizeTableRow(e,n.length).map(renderTableCell)),o=[i,...a],s=r.map((e,t)=>Math.max(1,...o.map(e=>visibleLength(e[t]??``)))),c=s.reduce((e,t)=>e+t,0)+s.length*3+1;if(s.length>0&&(!Number.isFinite(t)||c<=t)){let e=i.map(e=>`${ansi.bold}${e}${ansi.boldOff}`);return[formatTableBorder(s,`┌`,`┬`,`┐`),formatBoxedTableRow(e,s,r),formatTableBorder(s,`├`,`┼`,`┤`),...a.flatMap((e,t)=>[formatBoxedTableRow(e,s,r),...t+1<a.length?[formatTableBorder(s,`├`,`┼`,`┤`)]:[]]),formatTableBorder(s,`└`,`┴`,`┘`)]}return renderVerticalTable(i,a,t)}function renderTableCell(e){return renderInline(e.tokens,e.text).replaceAll(`
7
+ `,` `)}function normalizeTableRow(e,t){return Array.from({length:t},(t,n)=>e[n]??{text:``,tokens:[]})}function normalizeAlignment(e){return e??`left`}function renderVerticalTable(e,t,n){let r=Number.isFinite(n)?Math.max(1,Math.floor(n)):80;if(r<=2)return renderNarrowTable(e,t,r);let i=r-2,a=`${ansi.dim}┌${`─`.repeat(i)}┐${ansi.dimOff}`,o=`${ansi.dim}├${`─`.repeat(i)}┤${ansi.dimOff}`,s=`${ansi.dim}└${`─`.repeat(i)}┘${ansi.dimOff}`,c=[a];return t.forEach((n,r)=>{e.forEach((e,t)=>{c.push(...boxedTableLines(`${e}: ${n[t]??``}`,i))}),r+1<t.length&&c.push(o)}),c.push(s),c}function renderNarrowTable(e,t,n){return t.flatMap(t=>e.map((e,r)=>{let i=stripAnsi(`${e}: ${t[r]??``}`),a=sliceVisible(i,n);return a.length>0?a:firstGraphemeFallback(i).rendered}))}function boxedTableLines(e,t){let n=[],r=e;do{let e=sliceVisible(r,t),i=e.length===0?firstGraphemeFallback(r):void 0,a=i?.rendered??e,o=` `.repeat(Math.max(0,t-visibleLength(a)));n.push(`${ansi.dim}│${ansi.dimOff}${a}${o}${ansi.dim}│${ansi.dimOff}`),r=r.slice(i?.consumed??e.length)}while(r.length>0);return n}function firstGraphemeFallback(e){return{consumed:graphemes(e)[0]?.text.length??1,rendered:`?`}}function formatTableBorder(e,t,n,r){return`${t}${e.map(e=>`─`.repeat(e+2)).join(n)}${r}`}function formatBoxedTableRow(e,t,n){return`│ ${e.map((e,r)=>alignTableCell(e,t[r]??1,n[r]??`left`)).join(` │ `)} │`}function alignTableCell(e,t,n){let r=Math.max(0,t-visibleLength(e));if(n===`right`)return`${` `.repeat(r)}${e}`;if(n===`center`){let t=Math.floor(r/2);return`${` `.repeat(t)}${e}${` `.repeat(r-t)}`}return`${e}${` `.repeat(r)}`}function horizontalRuleWidth(e){return Number.isFinite(e)?Math.max(1,Math.floor(e)):60}function pushBlankRow(e){e.length>0&&e.at(-1)!==``&&e.push(``)}function trimTrailingBlankRows(e){for(;e.at(-1)===``;)e.pop();return e}export{detectMarkdownRendering,renderHyperlink,renderMarkdown};
@@ -1,4 +1,4 @@
1
1
  const CSI_FINAL=/[\u0040-\u007e]/u,PASTE_START=`\x1B[200~`,PASTE_END=`\x1B[201~`;function sanitizePastedText(e){let t=``;for(let n of e.replace(/\r\n?/gu,`
2
2
  `)){if(n===`
3
- `||n===` `){t+=n;continue}let e=n.codePointAt(0);e!==void 0&&(e<32||e===127||e>=128&&e<=159||(t+=n))}return t}function isIncompletePaste(e){return e.startsWith(PASTE_START)&&!e.includes(PASTE_END,6)}function stripPasteStart(e){return e.startsWith(PASTE_START)?e.slice(6):e}function isIncompleteOsc(e){return e.startsWith(`\x1B]`)&&!e.includes(`\x07`,2)&&!e.includes(`\x1B\\`,2)}function stripPromptControlCharacters(e){let t=``;for(let n of e)n>=` `&&n!==``&&(t+=n);return t}function nextKey(e){let t=e[0];if(t===void 0)return{consumed:0,incomplete:!0};if(t===`\x1B`){if(e.length===1)return{consumed:0,incomplete:!0};let t=e[1];if(t===`O`)return e.length<3?{consumed:0,incomplete:!0}:{key:parseKey(Buffer.from(e.slice(0,3))),consumed:3};if(t===`[`){if(e.startsWith(PASTE_START)){let t=e.indexOf(PASTE_END,6);return t===-1?{consumed:0,incomplete:!0}:{key:{type:`text`,value:sanitizePastedText(e.slice(6,t)),framing:`bracketed-paste`},consumed:t+6}}for(let t=2;t<e.length;t+=1)if(CSI_FINAL.test(e[t]))return{key:parseKey(Buffer.from(e.slice(0,t+1))),consumed:t+1};return{consumed:0,incomplete:!0}}if(t===`]`){let t=e.indexOf(`\x07`,2),n=e.indexOf(`\x1B\\`,2);if(t===-1&&n===-1)return{consumed:0,incomplete:!0};let r=t===-1?n:n===-1?t:Math.min(t,n);return{key:{type:`osc`,value:e.slice(2,r)},consumed:r+(r===t?1:2)}}return t===`b`||t===`B`?{key:{type:`alt-b`},consumed:2}:t===`f`||t===`F`?{key:{type:`alt-f`},consumed:2}:t===`y`||t===`Y`?{key:{type:`alt-y`},consumed:2}:t===``||t===`\b`?{key:{type:`alt-backspace`},consumed:2}:{key:{type:`escape`},consumed:1}}if(t<` `||t===``)return{key:parseKey(Buffer.from(t)),consumed:1};let n=1;for(;n<e.length;){let t=e[n];if(t===`\x1B`||t<` `||t===``)break;n+=1}return{key:parseKey(Buffer.from(e.slice(0,n))),consumed:n}}const SGR_MOUSE=RegExp(`^\x1B\\[<(\\d+);(\\d+);(\\d+)([Mm])$`,`u`);function parseKey(e){let t=e.toString(`utf8`),n=SGR_MOUSE.exec(t);if(n!==null)return{type:`mouse`,action:n[4]===`M`?`press`:`release`,button:Number(n[1]),x:Number(n[2]),y:Number(n[3])};switch(t){case``:return{type:`ctrl-a`};case``:return{type:`ctrl-b`};case``:return{type:`ctrl-e`};case``:return{type:`ctrl-f`};case``:return{type:`ctrl-d`};case`\v`:return{type:`ctrl-k`};case``:return{type:`ctrl-n`};case``:return{type:`ctrl-p`};case`\f`:return{type:`ctrl-l`};case``:return{type:`ctrl-r`};case``:return{type:`ctrl-u`};case``:return{type:`ctrl-w`};case``:return{type:`ctrl-y`};case``:return{type:`ctrl-c`};case`\r`:case`
4
- `:return{type:`enter`};case`\x1B[27;2;13~`:case`\x1B[13;2u`:return{type:`newline`};case``:case`\b`:return{type:`backspace`};case`\x1B[A`:case`\x1BOA`:return{type:`up`};case`\x1B[B`:case`\x1BOB`:return{type:`down`};case`\x1B[C`:case`\x1BOC`:return{type:`right`};case`\x1B[D`:case`\x1BOD`:return{type:`left`};case`\x1B[1;3C`:case`\x1B[1;5C`:case`\x1B[5C`:return{type:`alt-f`};case`\x1B[1;3D`:case`\x1B[1;5D`:case`\x1B[5D`:return{type:`alt-b`};case`\x1B[H`:case`\x1BOH`:case`\x1B[1~`:return{type:`home`};case`\x1B[F`:case`\x1BOF`:case`\x1B[4~`:return{type:`end`};case`\x1B[3~`:return{type:`delete`};case`\x1B[127;3u`:case`\x1B[8;3u`:case`\x1B[27;3;127~`:case`\x1B[27;3;8~`:return{type:`alt-backspace`};case` `:return{type:`tab`};case`\x1B`:return{type:`escape`};default:{let e=stripPromptControlCharacters(t);return e.length>0?{type:`text`,value:e,framing:`unframed`}:{type:`ignore`}}}}async function*takeUntil(e,t){let n=e[Symbol.asyncIterator](),r=t.then(()=>({done:!0,value:void 0}));try{for(;;){let e=n.next();e.catch(()=>{});let t=await Promise.race([e,r]);if(t.done)break;yield t.value}}finally{n.return?.()?.catch(()=>{})}}function formatCompactTokenCount(e){if(e<1e3)return`${e}`;let t=e<1e6?e/1e3:e/1e6,n=e<1e6?`K`:`M`;return`${t.toFixed(1).replace(/\.0$/,``)}${n}`}function formatTurnDuration(e){let t=Math.max(1,Math.round(e/1e3)),n=t%60,r=Math.floor(t/60);if(r===0)return`${n}s`;let i=r%60,a=Math.floor(r/60);return a===0?n===0?`${i}min`:`${i}min ${n}s`:i===0?`${a}h`:`${a}h ${i}min`}function formatTokenFlow(e,t){let n=formatCompactTokenCount(e.inputTokens),r=formatCompactTokenCount(e.outputTokens),i=`${t.arrowUp} ${n} ${t.arrowDown} ${r}`,a=formatContextPercentage(e.inputTokens,e.contextSize);return a==null?i:`${i} ${a}`}function formatContextPercentage(e,t){if(!(t==null||t<=0||!Number.isFinite(t)))return`${Math.round(e/t*100).toLocaleString()}%`}function formatAssistantResponseStats(e,t){if(t===`tokensPerSecond`)return formatTokensPerSecond(e.tokensPerSecond);if(e.outputTokens!=null)return`${e.outputTokens.toLocaleString()} output tokens`}function formatTokensPerSecond(e){if(e!=null)return`${formatNumber(e)} tok/s`}function formatNumber(e){return Number.isInteger(e)?e.toLocaleString():e.toLocaleString(void 0,{maximumFractionDigits:1})}export{formatAssistantResponseStats,formatCompactTokenCount,formatTokenFlow,formatTurnDuration,isIncompleteOsc,isIncompletePaste,nextKey,parseKey,sanitizePastedText,stripPasteStart,stripPromptControlCharacters,takeUntil};
3
+ `||n===` `){t+=n;continue}let e=n.codePointAt(0);e!==void 0&&(e<32||e===127||e>=128&&e<=159||(t+=n))}return t}function isIncompletePaste(e){return e.startsWith(PASTE_START)&&!e.includes(PASTE_END,6)}function stripPasteStart(e){return e.startsWith(PASTE_START)?e.slice(6):e}function isIncompleteOsc(e){return e.startsWith(`\x1B]`)&&!e.includes(`\x07`,2)&&!e.includes(`\x1B\\`,2)}function stripPromptControlCharacters(e){let t=``;for(let n of e)n>=` `&&n!==``&&(t+=n);return t}function nextKey(e){let t=e[0];if(t===void 0)return{consumed:0,incomplete:!0};if(t===`\x1B`){if(e.length===1)return{consumed:0,incomplete:!0};let t=e[1];if(t===`O`)return e.length<3?{consumed:0,incomplete:!0}:{key:parseKey(Buffer.from(e.slice(0,3))),consumed:3};if(t===`[`){if(e.startsWith(PASTE_START)){let t=e.indexOf(PASTE_END,6);return t===-1?{consumed:0,incomplete:!0}:{key:{type:`text`,value:sanitizePastedText(e.slice(6,t)),framing:`bracketed-paste`},consumed:t+6}}for(let t=2;t<e.length;t+=1)if(CSI_FINAL.test(e[t]))return{key:parseKey(Buffer.from(e.slice(0,t+1))),consumed:t+1};return{consumed:0,incomplete:!0}}if(t===`]`){let t=e.indexOf(`\x07`,2),n=e.indexOf(`\x1B\\`,2);if(t===-1&&n===-1)return{consumed:0,incomplete:!0};let r=t===-1?n:n===-1?t:Math.min(t,n);return{key:{type:`osc`,value:e.slice(2,r)},consumed:r+(r===t?1:2)}}return t===`b`||t===`B`?{key:{type:`alt-b`},consumed:2}:t===`f`||t===`F`?{key:{type:`alt-f`},consumed:2}:t===`y`||t===`Y`?{key:{type:`alt-y`},consumed:2}:t===``||t===`\b`?{key:{type:`alt-backspace`},consumed:2}:{key:{type:`escape`},consumed:1}}if(t<` `||t===``)return{key:parseKey(Buffer.from(t)),consumed:1};let n=1;for(;n<e.length;){let t=e[n];if(t===`\x1B`||t<` `||t===``)break;n+=1}return{key:parseKey(Buffer.from(e.slice(0,n))),consumed:n}}const SGR_MOUSE=RegExp(`^\x1B\\[<(\\d+);(\\d+);(\\d+)([Mm])$`,`u`);function parseKey(e){let t=e.toString(`utf8`),n=SGR_MOUSE.exec(t);if(n!==null)return{type:`mouse`,action:n[4]===`M`?`press`:`release`,button:Number(n[1]),x:Number(n[2]),y:Number(n[3])};switch(t){case``:return{type:`ctrl-a`};case``:return{type:`ctrl-b`};case``:return{type:`ctrl-e`};case``:return{type:`ctrl-f`};case``:return{type:`ctrl-d`};case`\v`:return{type:`ctrl-k`};case``:return{type:`ctrl-n`};case``:return{type:`ctrl-p`};case`\f`:return{type:`ctrl-l`};case``:return{type:`ctrl-r`};case``:return{type:`ctrl-u`};case``:return{type:`ctrl-w`};case``:return{type:`ctrl-y`};case``:return{type:`ctrl-c`};case`\r`:return{type:`enter`};case`
4
+ `:case`\x1B[27;2;13~`:case`\x1B[13;2u`:return{type:`newline`};case``:case`\b`:return{type:`backspace`};case`\x1B[A`:case`\x1BOA`:return{type:`up`};case`\x1B[B`:case`\x1BOB`:return{type:`down`};case`\x1B[C`:case`\x1BOC`:return{type:`right`};case`\x1B[D`:case`\x1BOD`:return{type:`left`};case`\x1B[1;3C`:case`\x1B[1;5C`:case`\x1B[5C`:return{type:`alt-f`};case`\x1B[1;3D`:case`\x1B[1;5D`:case`\x1B[5D`:return{type:`alt-b`};case`\x1B[H`:case`\x1BOH`:case`\x1B[1~`:return{type:`home`};case`\x1B[F`:case`\x1BOF`:case`\x1B[4~`:return{type:`end`};case`\x1B[3~`:return{type:`delete`};case`\x1B[127;3u`:case`\x1B[8;3u`:case`\x1B[27;3;127~`:case`\x1B[27;3;8~`:return{type:`alt-backspace`};case` `:return{type:`tab`};case`\x1B`:return{type:`escape`};default:{let e=stripPromptControlCharacters(t);return e.length>0?{type:`text`,value:e,framing:`unframed`}:{type:`ignore`}}}}async function*takeUntil(e,t){let n=e[Symbol.asyncIterator](),r=t.then(()=>({done:!0,value:void 0}));try{for(;;){let e=n.next();e.catch(()=>{});let t=await Promise.race([e,r]);if(t.done)break;yield t.value}}finally{n.return?.()?.catch(()=>{})}}function formatCompactTokenCount(e){if(e<1e3)return`${e}`;let t=e<1e6?e/1e3:e/1e6,n=e<1e6?`K`:`M`;return`${t.toFixed(1).replace(/\.0$/,``)}${n}`}function formatTurnDuration(e){let t=Math.max(1,Math.round(e/1e3)),n=t%60,r=Math.floor(t/60);if(r===0)return`${n}s`;let i=r%60,a=Math.floor(r/60);return a===0?n===0?`${i}min`:`${i}min ${n}s`:i===0?`${a}h`:`${a}h ${i}min`}function formatTokenFlow(e,t){let n=formatCompactTokenCount(e.inputTokens),r=formatCompactTokenCount(e.outputTokens),i=`${t.arrowUp} ${n} ${t.arrowDown} ${r}`,a=formatContextPercentage(e.inputTokens,e.contextSize);return a==null?i:`${i} ${a}`}function formatContextPercentage(e,t){if(!(t==null||t<=0||!Number.isFinite(t)))return`${Math.round(e/t*100).toLocaleString()}%`}function formatAssistantResponseStats(e,t){if(t===`tokensPerSecond`)return formatTokensPerSecond(e.tokensPerSecond);if(e.outputTokens!=null)return`${e.outputTokens.toLocaleString()} output tokens`}function formatTokensPerSecond(e){if(e!=null)return`${formatNumber(e)} tok/s`}function formatNumber(e){return Number.isInteger(e)?e.toLocaleString():e.toLocaleString(void 0,{maximumFractionDigits:1})}export{formatAssistantResponseStats,formatCompactTokenCount,formatTokenFlow,formatTurnDuration,isIncompleteOsc,isIncompletePaste,nextKey,parseKey,sanitizePastedText,stripPasteStart,stripPromptControlCharacters,takeUntil};
@@ -77,6 +77,9 @@ export declare function taskCallsById(conversation: ConversationState): Map<stri
77
77
  export declare function activeToolSteps(states: ReadonlyMap<EveDynamicToolPart, ToolState>): Set<number | undefined>;
78
78
  export declare function userText(message: EveMessage): string;
79
79
  export declare function authorizationTerminalMessage(state: string): string | undefined;
80
- export declare function formatAuthorization(part: EveAuthorizationPart, terminalMessage: string | undefined): string;
80
+ export declare function formatAuthorization(part: EveAuthorizationPart, terminalMessage: string | undefined): {
81
+ body: string;
82
+ link?: string;
83
+ };
81
84
  /** Reads the shared write-file result's `existed` flag, whatever the tool. */
82
85
  export declare function writeExistedFlag(output: unknown): boolean | undefined;
@@ -1,3 +1,3 @@
1
1
  import{agentDisplayName,agentTaskLabel,presentPreparingTool,presentTool,toolDisplayTitle}from"./tool-presentation.js";import{isTerminalToolCallPart}from"./terminal-tool-part.js";import{formatTurnDuration}from"./stream-format.js";import{summarizeChildTools}from"./tool-block-groups.js";import{stripTerminalControls}from"#cli/ui/terminal-text.js";import{agentToolSession}from"#client/conversation-state.js";import{toolCallState}from"#client/tool-call-state.js";function taskNeedsApproval(e,t){if(Object.values(e.inputs).some(e=>e.taskId===t.taskId&&e.status===`open`&&e.request.kind===`tool-approval`))return!0;let n=agentToolSession(e,t),r=n?.observation.status===`not-followed`?void 0:n?.observation.conversation;return r!==void 0&&Object.values(r.inputs).some(e=>e.status===`open`&&e.request.kind===`tool-approval`)}function startLine(e){let t=presentTool(e.toolName,e.input,{...labelContext(e.label),isSubagent:e.kind===`agent`});return{kind:`task`,taskKind:e.kind,title:e.kind===`agent`?`Delegate ${agentTaskLabel(e.name)}`:e.name,subtitle:stripTerminalControls(t.subtitle),live:!1}}function followUpLine(e,t,n){if(e.kind===`agent`)return{kind:`task`,taskKind:`agent`,title:`Message ${agentTaskLabel(e.name)}`,subtitle:agentTaskSummary(t.input),live:!1};let r=presentTool(t.toolName,t.input,labelContext(n));return{kind:`task`,taskKind:`tool`,title:stripTerminalControls(r.title),subtitle:stripTerminalControls(r.subtitle),live:!1}}function nestedTaskRecord(e,t,n,r){let i=n.kind===`agent`?agentDisplayName(stripTerminalControls(t.toolName)):stripTerminalControls(toolDisplayTitle(t.toolName));return{callId:e,taskId:n.taskId,callIds:[t.toolCallId],kind:n.kind,name:i,toolName:t.toolName,input:t.input,label:void 0,purpose:n.kind===`agent`?agentTaskSummary(t.input):r.subtitle||(r.title===i?void 0:r.title),startedAtMs:Date.now(),ended:!1}}function toolState(e,t,n){let r=toolCallState(t,e.toolCallId,{streaming:n});if(r===void 0)return{status:`running`};switch(r.status){case`running`:return r.output===void 0?{status:`running`}:{status:`running`,output:r.output};case`awaiting-input`:return{status:`approval`};case`completed`:return{status:`done`,output:r.output};case`rejected`:return{status:`denied`,errorText:r.errorText??`Denied by user.`};case`interrupted`:return{status:`error`,errorText:`interrupted`};case`cancelled`:case`failed`:return{status:`error`,errorText:r.errorText}}}function isActive(e){return e===`running`||e===`approval`}function toolBlock(e,t,n){let{toolName:r,input:i}=e,a=e.state===`input-streaming`?presentPreparingTool(r,n):presentTool(r,i,n),o={title:stripTerminalControls(a.title),subtitle:stripTerminalControls(a.subtitle),status:t.status,toolInput:i,toolName:r,toolGroup:a.group};return a.doneTitle!==void 0&&(o.doneTitle=stripTerminalControls(a.doneTitle)),a.detail!==void 0&&(o.detailLines=a.detail,o.keepDetailWhenDone=a.keepDetailWhenDone===!0),t.output===void 0?t.errorText!==void 0&&(o.result=stripTerminalControls(t.errorText)):(o.result=a.summarizeResult(t.output),o.toolOutput=t.output),o}function endLine(e,t,n,r){let i=` ${r} `,a={id:`task:${e.callId}:end`,kind:`task`,taskKind:e.kind,title:e.kind===`agent`?agentTaskLabel(e.name):e.name,live:!1};switch(t.status){case`completed`:{let r=`finished in ${formatTurnDuration((e.settledAtMs??Date.now())-e.startedAtMs)}`,o=e.kind===`agent`?summarizeChildTools(n??[]):presentTool(e.toolName,e.input,labelContext(e.label)).summarizeResult(t.output);a.status=`done`,a.body=o===void 0||o.length===0?r:`${r}${i}${o}`;break}case`failed`:{let e=firstLine(stripTerminalControls(t.error?.message??``));a.status=`error`,a.body=e===void 0?`failed`:`failed${i}${e}`;break}default:a.status=`denied`,a.body=`stopped`}return a}function labelContext(e){return e===void 0?void 0:{label:e}}function agentTaskSummary(e){if(typeof e!=`object`||!e)return``;let t=Reflect.get(e,`message`);return typeof t==`string`?firstLine(stripTerminalControls(t))??``:``}function firstLine(e){return e.split(/\r?\n/u).find(e=>e.trim().length>0)?.trim()}function subagentSteps(e){let t=[],n=0;for(let r of e){let e=``;for(let[i,a]of r.parts.entries())n+=1,a.type===`reasoning`&&(e+=a.text),a.type===`text`&&(t.push({key:a.id??`${r.id}:${i}`,order:n,reasoning:e,message:a.text,finalized:a.state===`done`}),e=``),a.type===`dynamic-tool`&&e&&(t.push({key:`${r.id}:${i}:reasoning`,order:n-.5,reasoning:e,message:``,finalized:!0}),e=``);e&&t.push({key:`${r.id}:reasoning:${r.parts.length}`,order:n,reasoning:e,message:``,finalized:r.metadata?.status===`complete`})}return t.map(e=>({...e,reasoning:stripTerminalControls(e.reasoning).trim(),message:stripTerminalControls(e.message).trim()})).filter(e=>e.reasoning.length>0||e.message.length>0)}function childToolCallIds(e){let t=new Set;for(let n of Object.values(e.agents))if(n.observation.status!==`not-followed`)for(let e of n.observation.conversation?.messages??[])for(let n of e.parts)n.type===`dynamic-tool`&&t.add(n.toolCallId);return t}function isToolCallRow(e){return e.type===`dynamic-tool`&&(e.state===`input-streaming`||isTerminalToolCallPart(e))}function taskCallsById(e){let t=new Map;for(let n of Object.values(e.tasks))for(let e of Object.values(n.calls))t.set(e.callId,{task:n,call:e});return t}function activeToolSteps(e){let t=new Set;for(let[n,r]of e)isActive(r.status)&&t.add(n.stepIndex);return t}function userText(e){return e.parts.map(e=>e.type===`text`?e.text:e.type===`file`?`[file${e.filename===void 0?``:`: ${e.filename}`}]`:``).filter(e=>e.length>0).join(`
2
- `)}function authorizationTerminalMessage(e){switch(e){case`authorized`:return`Authorization complete`;case`declined`:return`Authorization declined`;case`failed`:return`Authorization failed`;case`timed-out`:return`Authorization timed out`;default:return}}function formatAuthorization(e,t){let n=[];if(t!==void 0)n.push(t);else{let t=stripTerminalControls(e.description);t.length>0&&n.push(t);let r=e.authorization;r?.url&&n.push(`URL: ${stripTerminalControls(r.url)}`),r?.userCode&&n.push(`Code: ${stripTerminalControls(r.userCode)}`),r?.expiresAt&&n.push(`Expires: ${stripTerminalControls(r.expiresAt)}`),r?.instructions&&n.push(stripTerminalControls(r.instructions))}if(e.state===`completed`&&e.reason!==void 0){let t=stripTerminalControls(e.reason);t.length>0&&n.push(`Reason: ${t}`)}return n.join(`
3
- `)}function writeExistedFlag(e){if(typeof e!=`object`||!e||Array.isArray(e))return;let t=e.existed;return typeof t==`boolean`?t:void 0}export{activeToolSteps,agentTaskSummary,authorizationTerminalMessage,childToolCallIds,endLine,firstLine,followUpLine,formatAuthorization,isActive,isToolCallRow,labelContext,nestedTaskRecord,startLine,subagentSteps,taskCallsById,taskNeedsApproval,toolBlock,toolState,userText,writeExistedFlag};
2
+ `)}function authorizationTerminalMessage(e){switch(e){case`authorized`:return`Authorization complete`;case`declined`:return`Authorization declined`;case`failed`:return`Authorization failed`;case`timed-out`:return`Authorization timed out`;default:return}}function formatAuthorization(e,t){let n=[],r;if(t!==void 0)n.push(t);else{let t=stripTerminalControls(e.description);t.length>0&&n.push(t);let i=e.authorization;i?.url&&(r=stripTerminalControls(i.url),n.push(`Open to authorize:`,r)),i?.userCode&&n.push(`Code: ${stripTerminalControls(i.userCode)}`),i?.expiresAt&&n.push(`Expires: ${stripTerminalControls(i.expiresAt)}`),i?.instructions&&n.push(stripTerminalControls(i.instructions))}if(e.state===`completed`&&e.reason!==void 0){let t=stripTerminalControls(e.reason);t.length>0&&n.push(`Reason: ${t}`)}let i=n.join(`
3
+ `);return r===void 0?{body:i}:{body:i,link:r}}function writeExistedFlag(e){if(typeof e!=`object`||!e||Array.isArray(e))return;let t=e.existed;return typeof t==`boolean`?t:void 0}export{activeToolSteps,agentTaskSummary,authorizationTerminalMessage,childToolCallIds,endLine,firstLine,followUpLine,formatAuthorization,isActive,isToolCallRow,labelContext,nestedTaskRecord,startLine,subagentSteps,taskCallsById,taskNeedsApproval,toolBlock,toolState,userText,writeExistedFlag};
@@ -1 +1 @@
1
- import{FileContentCache}from"./file-content-cache.js";import{agentDisplayName,agentTaskLabel,isPanelRoutedTool,readWriteFileInput,toolBaseName}from"./tool-presentation.js";import{isTerminalToolCallPart}from"./terminal-tool-part.js";import{activeToolSteps,authorizationTerminalMessage,childToolCallIds,endLine,firstLine,followUpLine,formatAuthorization,isActive,isToolCallRow,nestedTaskRecord,startLine,subagentSteps,taskCallsById,taskNeedsApproval,toolBlock,toolState,userText,writeExistedFlag}from"./transcript-parts.js";import{signInLabel,waitingLabel}from"./task-activity.js";import{TaskRecords}from"./task-records.js";import{isTaskControlTool}from"#protocol/task-tools.js";import{stripTerminalControls}from"#cli/ui/terminal-text.js";import{agentCallTurns,agentToolSession,conversationAuthorizations,isAgentCallContentPending}from"#client/conversation-state.js";import{authorizationKey}from"#client/session-utils.js";const TASK_END_GRACE_MS=2e3;var ConversationTranscript=class{#e=new Map;#t=new FileContentCache;#n=new Map;#r=new Map;#i=new Set;#a=new TaskRecords;#o=new Map;#s=[];#c=new Set;#l=[];reset(){this.#e=new Map,this.#t.clear(),this.#n.clear(),this.#r=new Map,this.#i.clear(),this.#a.clear(),this.#o.clear(),this.#s=[],this.#c.clear(),this.#l=[]}get tasks(){return this.#l}get finishing(){return this.#l.some(e=>e.finishing===!0)}taskLabel(e,t){let n=e.tasks[t];if(n===void 0)return;let r=Object.values(n.calls),i=r.findLast(e=>e.status===`working`)??r.at(-1),a=i===void 0?void 0:this.#a.get(i.callId);return a===void 0?n.kind===`agent`?agentTaskLabel(agentDisplayName(stripTerminalControls(n.name))):stripTerminalControls(n.name):a.kind===`agent`?agentTaskLabel(a.name):a.name}stopWorking(e){let t=[];for(let n of this.#a.values())n.ended||(n.ended=!0,t.push(endLine(n,{status:`cancelled`},void 0,e.dot??`·`)));return this.#l=[],t}project(e,t){let{conversation:n,working:r}=e,i=Date.now(),a=[];this.#h(n.messages);let o=childToolCallIds(n),s=taskCallsById(n),c=new Set(e.data.withdrawnCallIds),l=e.data.toolLabels;for(let e of n.messages){if(e.role===`user`){let t=this.#g(e);t!==void 0&&a.push(t);continue}let u=e.parts.filter(e=>isToolCallRow(e)&&(e.state!==`input-streaming`||r)&&!isTaskControlTool(e.toolName)&&!c.has(e.toolCallId)&&e.toolMetadata?.eve?.inputRequest?.kind!==`session-limit`&&!s.has(e.toolCallId)&&!o.has(e.toolCallId)&&!isPanelRoutedTool(e.toolName)),d=new Map(u.map(e=>[e,toolState(e,n,r)])),f=activeToolSteps(d);for(let[n,o]of e.parts.entries())if(o.type===`text`||o.type===`reasoning`){let i=this.#_(e,n,t,r);i!==void 0&&a.push(i)}else if(o.type===`authorization`)t.connectionAuth!==`hidden`&&a.push(this.#v(o));else if(o.type===`dynamic-tool`){let e=s.get(o.toolCallId);if(e!==void 0){let n=this.#d(o,e.task,l,t,i);n!==void 0&&a.push(n);continue}let n=d.get(o);if(n===void 0||t.tools===`hidden`)continue;let r=l[o.toolCallId];a.push(this.#y(o,n,f.has(o.stepIndex),r,t))}let p=e.metadata?.turnId;p!==void 0&&n.turns[p]?.status===`cancelled`&&a.push(this.#m(`cancelled:${p}`,[],()=>({kind:`notice`,body:`Cancelled.`,live:!1})))}for(let[n,r]of e.failures.entries())a.push(this.#b(n,r,t));let u=this.#u(a),d=this.#f(e,s,t,i);for(let e of d){let t=u.slice(-8).map(e=>e.id);this.#s.push({block:e,after:t}),this.#c.add(e.id),u.push(e)}return u}#u(e){let t=[...e];for(let{block:e,after:n}of this.#s){let r=t.length;for(let e=n.length-1;e>=0;--e){let i=t.findIndex(t=>t.id===n[e]);if(i!==-1){r=i+1;break}}t.splice(r,0,e)}return t}#d(e,t,n,r,i){if(!(t.kind===`agent`?r.subagents!==`hidden`:r.tools!==`hidden`))return;let a=n[e.toolCallId]?.start,o=this.#a.record(e,t,a,i);return o.callId===e.toolCallId?this.#m(`task:${o.callId}:start`,[o],()=>startLine(o)):this.#m(`task:${e.toolCallId}:message`,[o],()=>followUpLine(o,e,a))}#f(e,t,n,r){let{conversation:i,working:a}=e,o=Object.values(i.turns).at(-1),s=!a&&(e.data.sessionFailed||o?.status===`cancelled`||o?.status===`failed`),c=[],l=[],u={remaining:128};for(let e of this.#a.values()){if(e.ended)continue;let o=t.get(e.callId)?.task;if(o===void 0)continue;let d=e.callIds.flatMap(e=>{let n=t.get(e)?.call;return n===void 0?[]:[n]}),f=d.at(-1),p=this.#p(e,o,d,i,n,u);if(n.subagents===`full`)for(let e of p.rows)this.#c.has(e.id)||c.push(e);let m=d.every(e=>e.status!==`working`);m&&(e.settledAtMs??=r);let h=m&&p.pending&&a&&r-(e.settledAtMs??r)<2e3;if(m&&!h||!m&&s){e.ended=!0,c.push(endLine(e,m?f:{status:`cancelled`},p.tools,n.dot??`·`));continue}let g={callId:e.callId,kind:e.kind,name:e.name,toolName:e.toolName,input:e.input,label:e.label,purpose:e.purpose,children:p.children,omittedTasks:p.omittedTasks,omittedAttention:p.omittedAttention,startedAtMs:e.startedAtMs,childTools:new Map(p.tools.map(e=>[e.id,e]))};p.step!==void 0&&(g.step=p.step),h&&(g.finishing=!0),l.push(g)}return this.#l=l,c}#p(e,t,n,r,i,a,o=0){let s=t.kind===`agent`?agentToolSession(r,t):void 0,c=s===void 0||s.observation.status===`not-followed`?void 0:s.observation.conversation;if(s===void 0||c===void 0)return{tools:[],rows:[],pending:!1};let l=s.observation.status===`following`&&n.some(e=>isAgentCallContentPending(t,e,c)),u=agentCallTurns(t,c),d=new Set(n.flatMap(e=>u.get(e.callId)??[])),f=c.messages.filter(e=>e.role===`assistant`&&e.metadata?.turnId!==void 0&&d.has(e.metadata.turnId)),p=n.some(e=>e.status===`working`)||l,m=taskCallsById(c),h=[],g=[],_=[],v=new Set,y=0,b=!1,x=0;for(let t of f)for(let n of t.parts){if(x+=1,!isToolCallRow(n)||isTaskControlTool(n.toolName))continue;let t=m.get(n.toolCallId),r=toolState(n,c,p),s=`subagent:${e.callId}:tool:${n.toolCallId}`,l=this.#m(s,[n,r.status,e.name],()=>{let a=this.#x(n.toolCallId,n,r,i,{isSubagent:t?.task.kind===`agent`});return{...toolBlock(n,r,a),kind:`subagent-tool`,subagentCallId:e.callId,agentName:e.name,depth:1,live:!1}}),u=t?.task.kind===`agent`?i.subagents!==`hidden`:i.tools!==`hidden`;if(t?.call.status===`working`&&u){if(v.has(t.task.taskId))continue;if(v.add(t.task.taskId),o>=8||a.remaining<=0){y+=1,b||=r.status===`approval`||taskNeedsApproval(c,t.task);continue}--a.remaining;let s=`${e.callId}/${n.toolCallId}`,u=this.#o.get(s);u===void 0&&(u=nestedTaskRecord(s,n,t.task,l),this.#o.set(s,u));let d=this.#p(u,t.task,Object.values(t.task.calls).filter(e=>e.status===`working`),c,i,a,o+1);_.push({...u,step:d.step,children:d.children,omittedTasks:d.omittedTasks,omittedAttention:d.omittedAttention,childTools:new Map(d.tools.map(e=>[e.id,e]))})}else g.push(l);h.push({order:x,block:l,settled:!isActive(r.status)})}let S=subagentSteps(f);for(let t of S){if(!t.finalized)continue;let n=`subagent:${e.callId}:step:${t.key}`,r=this.#m(n,[t.reasoning,t.message,e.name],()=>{let n={kind:`subagent-step`,subagentCallId:e.callId,agentName:e.name,depth:1,body:t.message,live:!1};return t.reasoning.length>0&&(n.reasoning=t.reasoning),n});h.push({order:t.order,block:r,settled:!0})}let C=h.filter(e=>e.settled).sort((e,t)=>e.order-t.order).map(e=>e.block),w=S.at(-1),T={tools:g,rows:C,children:_,omittedTasks:y,omittedAttention:b,pending:l};return w!==void 0&&(T.step=firstLine(w.message)??`Thinking`),T}#m(e,t,n){let r=this.#e.get(e);if(r!==void 0&&sameKey(r.key,t))return r.block;let i={...n(),id:e};return this.#e.set(e,{key:t,block:i}),i}#h(e){let t=new Map;for(let n of e)n.role===`user`&&n.metadata?.optimistic===!0&&t.set(n.id,userText(n));let n=[...this.#r].filter(([e])=>!t.has(e)),r=new Set(t.values());for(let t of e){if(t.role!==`user`||t.metadata?.optimistic===!0||this.#i.has(t.id))continue;let e=userText(t),i=n.findIndex(([,t])=>t===e);i===-1&&r.has(e)||(this.#i.add(t.id),i!==-1&&(this.#n.set(t.id,n[i][0]),n.splice(i,1)))}this.#r=t}#g(e){if(e.metadata?.optimistic!==!0&&!this.#i.has(e.id))return;let t=stripTerminalControls(userText(e));if(t.trim().length===0)return;let n=`user:${this.#n.get(e.id)??e.id}`;return this.#m(n,[t],()=>({kind:`user`,body:t,live:!1}))}#_(e,t,n,r){let i=e.parts[t];if(i?.type!==`text`&&i?.type!==`reasoning`||i.type===`reasoning`&&n.reasoning!==`full`)return;let a=stripTerminalControls(i.text).trim();if(a.length===0)return;let o=i.state===`streaming`&&r,s=`${i.type}:${i.id??`${e.id}:${t}`}`;return this.#m(s,[a,o],()=>i.type===`text`?{kind:`assistant`,body:a,live:o}:{kind:`reasoning`,body:a,collapsed:!1,live:o})}#v(e){return this.#m(`connection-auth:${authorizationKey(e)}`,[e],()=>{let t=e.state===`completed`?e.outcome:e.state,n=authorizationTerminalMessage(t);return{kind:`connection-auth`,title:`${stripTerminalControls(e.displayName)} · authorization · ${t}`,body:formatAuthorization(e,n),preformatted:!0,live:n===void 0}})}#y(e,t,n,r,i){let a=n||isActive(t.status);return this.#m(`tool:${e.toolCallId}`,[e,t.status,a,i.tools,i.subagentNames,r],()=>{let n=this.#x(e.toolCallId,e,t,i,{label:r?.start,completeLabel:r?.complete});return{...toolBlock(e,t,n),kind:`tool`,live:a,expanded:i.tools===`full`}})}#b(e,t,n){let{message:r,hint:i,detail:a}=t;return this.#m(`failure:${e}`,[r,i,a],()=>{let e={kind:`error`,title:`Error`,body:stripTerminalControls(r),live:!1};return i!==void 0&&(e.hint=stripTerminalControls(i)),a!==void 0&&(e.detail=n.diagnosticsPath===void 0?stripTerminalControls(a):`details: ${n.diagnosticsPath}`),e})}#x(e,t,n,r,i={}){n.output!==void 0&&this.#t.observeRead(n.output);let a={};(i.isSubagent===!0||r.subagentNames?.includes(toolBaseName(t.toolName))===!0)&&(a.isSubagent=!0),i.label!==void 0&&(a.label=i.label),i.completeLabel!==void 0&&(a.completeLabel=i.completeLabel);let o=readWriteFileInput(t.toolName,t.input);if(o!==void 0){let t=this.#t.observeWrite({...o,callId:e});t!==void 0&&(a.previousContent=t);let r=writeExistedFlag(n.output);r!==void 0&&(a.existed=r)}return Object.keys(a).length>0?a:void 0}};function turnActivity(e,t){let{conversation:n}=e,r=n.activeTurnId===void 0?void 0:n.turns[n.activeTurnId],i=e.conversation.messages.findLast(e=>e.role===`assistant`),a=taskCallsById(n);if(i?.parts.some(e=>isTerminalToolCallPart(e)&&!isTaskControlTool(e.toolName)&&!a.has(e.toolCallId)&&(e.state===`input-available`||e.state===`approval-responded`))===!0)return`Running`;if(r===void 0||r.waiting===!0){let e=conversationAuthorizations(n).filter(e=>e.state===`required`&&e.awaitsCallback===!0);if(e.length>0)return signInLabel(e.map(e=>e.displayName))}if(r?.waiting===!0&&t.length>0)return waitingLabel(t);if(i===void 0)return`Thinking`;let o=i.parts.findLast(e=>e.type!==`step-start`);return o?.type===`text`&&o.state===`streaming`||o?.type===`dynamic-tool`&&o.state===`input-streaming`?`Generating`:`Thinking`}function sameKey(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}export{ConversationTranscript,TASK_END_GRACE_MS,turnActivity};
1
+ import{FileContentCache}from"./file-content-cache.js";import{agentDisplayName,agentTaskLabel,isPanelRoutedTool,readWriteFileInput,toolBaseName}from"./tool-presentation.js";import{isTerminalToolCallPart}from"./terminal-tool-part.js";import{activeToolSteps,authorizationTerminalMessage,childToolCallIds,endLine,firstLine,followUpLine,formatAuthorization,isActive,isToolCallRow,nestedTaskRecord,startLine,subagentSteps,taskCallsById,taskNeedsApproval,toolBlock,toolState,userText,writeExistedFlag}from"./transcript-parts.js";import{signInLabel,waitingLabel}from"./task-activity.js";import{TaskRecords}from"./task-records.js";import{isTaskControlTool}from"#protocol/task-tools.js";import{stripTerminalControls}from"#cli/ui/terminal-text.js";import{agentCallTurns,agentToolSession,conversationAuthorizations,isAgentCallContentPending}from"#client/conversation-state.js";import{authorizationKey}from"#client/session-utils.js";const TASK_END_GRACE_MS=2e3;var ConversationTranscript=class{#e=new Map;#t=new FileContentCache;#n=new Map;#r=new Map;#i=new Set;#a=new TaskRecords;#o=new Map;#s=[];#c=new Set;#l=[];reset(){this.#e=new Map,this.#t.clear(),this.#n.clear(),this.#r=new Map,this.#i.clear(),this.#a.clear(),this.#o.clear(),this.#s=[],this.#c.clear(),this.#l=[]}get tasks(){return this.#l}get finishing(){return this.#l.some(e=>e.finishing===!0)}taskLabel(e,t){let n=e.tasks[t];if(n===void 0)return;let r=Object.values(n.calls),i=r.findLast(e=>e.status===`working`)??r.at(-1),a=i===void 0?void 0:this.#a.get(i.callId);return a===void 0?n.kind===`agent`?agentTaskLabel(agentDisplayName(stripTerminalControls(n.name))):stripTerminalControls(n.name):a.kind===`agent`?agentTaskLabel(a.name):a.name}stopWorking(e){let t=[];for(let n of this.#a.values())n.ended||(n.ended=!0,t.push(endLine(n,{status:`cancelled`},void 0,e.dot??`·`)));return this.#l=[],t}project(e,t){let{conversation:n,working:r}=e,i=Date.now(),a=[];this.#h(n.messages);let o=childToolCallIds(n),s=taskCallsById(n),c=new Set(e.data.withdrawnCallIds),l=e.data.toolLabels;for(let e of n.messages){if(e.role===`user`){let t=this.#g(e);t!==void 0&&a.push(t);continue}let u=e.parts.filter(e=>isToolCallRow(e)&&(e.state!==`input-streaming`||r)&&!isTaskControlTool(e.toolName)&&!c.has(e.toolCallId)&&e.toolMetadata?.eve?.inputRequest?.kind!==`session-limit`&&!s.has(e.toolCallId)&&!o.has(e.toolCallId)&&!isPanelRoutedTool(e.toolName)),d=new Map(u.map(e=>[e,toolState(e,n,r)])),f=activeToolSteps(d);for(let[n,o]of e.parts.entries())if(o.type===`text`||o.type===`reasoning`){let i=this.#_(e,n,t,r);i!==void 0&&a.push(i)}else if(o.type===`authorization`)t.connectionAuth!==`hidden`&&a.push(this.#v(o));else if(o.type===`dynamic-tool`){let e=s.get(o.toolCallId);if(e!==void 0){let n=this.#d(o,e.task,l,t,i);n!==void 0&&a.push(n);continue}let n=d.get(o);if(n===void 0||t.tools===`hidden`)continue;let r=l[o.toolCallId];a.push(this.#y(o,n,f.has(o.stepIndex),r,t))}let p=e.metadata?.turnId;p!==void 0&&n.turns[p]?.status===`cancelled`&&a.push(this.#m(`cancelled:${p}`,[],()=>({kind:`notice`,body:`Cancelled.`,live:!1})))}for(let[n,r]of e.failures.entries())a.push(this.#b(n,r,t));let u=this.#u(a),d=this.#f(e,s,t,i);for(let e of d){let t=u.slice(-8).map(e=>e.id);this.#s.push({block:e,after:t}),this.#c.add(e.id),u.push(e)}return u}#u(e){let t=[...e];for(let{block:e,after:n}of this.#s){let r=t.length;for(let e=n.length-1;e>=0;--e){let i=t.findIndex(t=>t.id===n[e]);if(i!==-1){r=i+1;break}}t.splice(r,0,e)}return t}#d(e,t,n,r,i){if(!(t.kind===`agent`?r.subagents!==`hidden`:r.tools!==`hidden`))return;let a=n[e.toolCallId]?.start,o=this.#a.record(e,t,a,i);return o.callId===e.toolCallId?this.#m(`task:${o.callId}:start`,[o],()=>startLine(o)):this.#m(`task:${e.toolCallId}:message`,[o],()=>followUpLine(o,e,a))}#f(e,t,n,r){let{conversation:i,working:a}=e,o=Object.values(i.turns).at(-1),s=!a&&(e.data.sessionFailed||o?.status===`cancelled`||o?.status===`failed`),c=[],l=[],u={remaining:128};for(let e of this.#a.values()){if(e.ended)continue;let o=t.get(e.callId)?.task;if(o===void 0)continue;let d=e.callIds.flatMap(e=>{let n=t.get(e)?.call;return n===void 0?[]:[n]}),f=d.at(-1),p=this.#p(e,o,d,i,n,u);if(n.subagents===`full`)for(let e of p.rows)this.#c.has(e.id)||c.push(e);let m=d.every(e=>e.status!==`working`);m&&(e.settledAtMs??=r);let h=m&&p.pending&&a&&r-(e.settledAtMs??r)<2e3;if(m&&!h||!m&&s){e.ended=!0,c.push(endLine(e,m?f:{status:`cancelled`},p.tools,n.dot??`·`));continue}let g={callId:e.callId,kind:e.kind,name:e.name,toolName:e.toolName,input:e.input,label:e.label,purpose:e.purpose,children:p.children,omittedTasks:p.omittedTasks,omittedAttention:p.omittedAttention,startedAtMs:e.startedAtMs,childTools:new Map(p.tools.map(e=>[e.id,e]))};p.step!==void 0&&(g.step=p.step),h&&(g.finishing=!0),l.push(g)}return this.#l=l,c}#p(e,t,n,r,i,a,o=0){let s=t.kind===`agent`?agentToolSession(r,t):void 0,c=s===void 0||s.observation.status===`not-followed`?void 0:s.observation.conversation;if(s===void 0||c===void 0)return{tools:[],rows:[],pending:!1};let l=s.observation.status===`following`&&n.some(e=>isAgentCallContentPending(t,e,c)),u=agentCallTurns(t,c),d=new Set(n.flatMap(e=>u.get(e.callId)??[])),f=c.messages.filter(e=>e.role===`assistant`&&e.metadata?.turnId!==void 0&&d.has(e.metadata.turnId)),p=n.some(e=>e.status===`working`)||l,m=taskCallsById(c),h=[],g=[],_=[],v=new Set,y=0,b=!1,x=0;for(let t of f)for(let n of t.parts){if(x+=1,!isToolCallRow(n)||isTaskControlTool(n.toolName))continue;let t=m.get(n.toolCallId),r=toolState(n,c,p),s=`subagent:${e.callId}:tool:${n.toolCallId}`,l=this.#m(s,[n,r.status,e.name],()=>{let a=this.#x(n.toolCallId,n,r,i,{isSubagent:t?.task.kind===`agent`});return{...toolBlock(n,r,a),kind:`subagent-tool`,subagentCallId:e.callId,agentName:e.name,depth:1,live:!1}}),u=t?.task.kind===`agent`?i.subagents!==`hidden`:i.tools!==`hidden`;if(t?.call.status===`working`&&u){if(v.has(t.task.taskId))continue;if(v.add(t.task.taskId),o>=8||a.remaining<=0){y+=1,b||=r.status===`approval`||taskNeedsApproval(c,t.task);continue}--a.remaining;let s=`${e.callId}/${n.toolCallId}`,u=this.#o.get(s);u===void 0&&(u=nestedTaskRecord(s,n,t.task,l),this.#o.set(s,u));let d=this.#p(u,t.task,Object.values(t.task.calls).filter(e=>e.status===`working`),c,i,a,o+1);_.push({...u,step:d.step,children:d.children,omittedTasks:d.omittedTasks,omittedAttention:d.omittedAttention,childTools:new Map(d.tools.map(e=>[e.id,e]))})}else g.push(l);h.push({order:x,block:l,settled:!isActive(r.status)})}let S=subagentSteps(f);for(let t of S){if(!t.finalized)continue;let n=`subagent:${e.callId}:step:${t.key}`,r=this.#m(n,[t.reasoning,t.message,e.name],()=>{let n={kind:`subagent-step`,subagentCallId:e.callId,agentName:e.name,depth:1,body:t.message,live:!1};return t.reasoning.length>0&&(n.reasoning=t.reasoning),n});h.push({order:t.order,block:r,settled:!0})}let C=h.filter(e=>e.settled).sort((e,t)=>e.order-t.order).map(e=>e.block),w=S.at(-1),T={tools:g,rows:C,children:_,omittedTasks:y,omittedAttention:b,pending:l};return w!==void 0&&(T.step=firstLine(w.message)??`Thinking`),T}#m(e,t,n){let r=this.#e.get(e);if(r!==void 0&&sameKey(r.key,t))return r.block;let i={...n(),id:e};return this.#e.set(e,{key:t,block:i}),i}#h(e){let t=new Map;for(let n of e)n.role===`user`&&n.metadata?.optimistic===!0&&t.set(n.id,userText(n));let n=[...this.#r].filter(([e])=>!t.has(e)),r=new Set(t.values());for(let t of e){if(t.role!==`user`||t.metadata?.optimistic===!0||this.#i.has(t.id))continue;let e=userText(t),i=n.findIndex(([,t])=>t===e);i===-1&&r.has(e)||(this.#i.add(t.id),i!==-1&&(this.#n.set(t.id,n[i][0]),n.splice(i,1)))}this.#r=t}#g(e){if(e.metadata?.optimistic!==!0&&!this.#i.has(e.id))return;let t=stripTerminalControls(userText(e));if(t.trim().length===0)return;let n=`user:${this.#n.get(e.id)??e.id}`;return this.#m(n,[t],()=>({kind:`user`,body:t,live:!1}))}#_(e,t,n,r){let i=e.parts[t];if(i?.type!==`text`&&i?.type!==`reasoning`||i.type===`reasoning`&&n.reasoning!==`full`)return;let a=stripTerminalControls(i.text).trim();if(a.length===0)return;let o=i.state===`streaming`&&r,s=`${i.type}:${i.id??`${e.id}:${t}`}`;return this.#m(s,[a,o],()=>i.type===`text`?{kind:`assistant`,body:a,live:o}:{kind:`reasoning`,body:a,collapsed:!1,live:o})}#v(e){return this.#m(`connection-auth:${authorizationKey(e)}`,[e],()=>{let t=e.state===`completed`?e.outcome:e.state,n=authorizationTerminalMessage(t);return{kind:`connection-auth`,title:`${stripTerminalControls(e.displayName)} · authorization · ${t}`,...formatAuthorization(e,n),preformatted:!0,live:n===void 0}})}#y(e,t,n,r,i){let a=n||isActive(t.status);return this.#m(`tool:${e.toolCallId}`,[e,t.status,a,i.tools,i.subagentNames,r],()=>{let n=this.#x(e.toolCallId,e,t,i,{label:r?.start,completeLabel:r?.complete});return{...toolBlock(e,t,n),kind:`tool`,live:a,expanded:i.tools===`full`}})}#b(e,t,n){let{message:r,hint:i,detail:a}=t;return this.#m(`failure:${e}`,[r,i,a],()=>{let e={kind:`error`,title:`Error`,body:stripTerminalControls(r),live:!1};return i!==void 0&&(e.hint=stripTerminalControls(i)),a!==void 0&&(e.detail=n.diagnosticsPath===void 0?stripTerminalControls(a):`details: ${n.diagnosticsPath}`),e})}#x(e,t,n,r,i={}){n.output!==void 0&&this.#t.observeRead(n.output);let a={};(i.isSubagent===!0||r.subagentNames?.includes(toolBaseName(t.toolName))===!0)&&(a.isSubagent=!0),i.label!==void 0&&(a.label=i.label),i.completeLabel!==void 0&&(a.completeLabel=i.completeLabel);let o=readWriteFileInput(t.toolName,t.input);if(o!==void 0){let t=this.#t.observeWrite({...o,callId:e});t!==void 0&&(a.previousContent=t);let r=writeExistedFlag(n.output);r!==void 0&&(a.existed=r)}return Object.keys(a).length>0?a:void 0}};function turnActivity(e,t){let{conversation:n}=e,r=n.activeTurnId===void 0?void 0:n.turns[n.activeTurnId],i=e.conversation.messages.findLast(e=>e.role===`assistant`),a=taskCallsById(n);if(i?.parts.some(e=>isTerminalToolCallPart(e)&&!isTaskControlTool(e.toolName)&&!a.has(e.toolCallId)&&(e.state===`input-available`||e.state===`approval-responded`))===!0)return`Running`;if(r===void 0||r.waiting===!0){let e=conversationAuthorizations(n).filter(e=>e.state===`required`&&e.awaitsCallback===!0);if(e.length>0)return signInLabel(e.map(e=>e.displayName))}if(r?.waiting===!0&&t.length>0)return waitingLabel(t);if(i===void 0)return`Thinking`;let o=i.parts.findLast(e=>e.type!==`step-start`);return o?.type===`text`&&o.state===`streaming`||o?.type===`dynamic-tool`&&o.state===`input-streaming`?`Generating`:`Thinking`}function sameKey(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}export{ConversationTranscript,TASK_END_GRACE_MS,turnActivity};
@@ -1 +1 @@
1
- import{foldSession,initialSessionProjection}from"#protocol/session-projection.js";import{createToolMetadata,mergeToolMetadata,normalizeActionRequest,normalizeActionResult,stringifyUnknown,toMessageInputRequest}from"#client/message-action-parts.js";import{conversationProjection,withConversationProjection}from"#client/conversation-projection.js";import{createAuthorizationCompletedPart,createAuthorizationRequiredPart}from"#client/authorization-message-parts.js";import{optimisticUserMessageId,partKey,projectReceivedParts,upsertMessage}from"#client/message-reducer-primitives.js";import{messageRun}from"#client/message-run-parts.js";import{toolPartState}from"#client/tool-part-state.js";function receivedMessageEventId(e){return e.meta.id??`${e.data.turnId}:${e.data.sequence}`}function defaultMessageReducer(){return{initial(){return withConversationProjection({messages:[]},initialSessionProjection())},reduce(e,t){return reduceMessageData(e,t)}}}function reduceMessageData(e,t){let n=foldSession(conversationProjection(e),t),r=withConversationProjection(reduceContent(e,t),n),i=toolCallIds(r,t);return withConversationProjection(i.length===0?r:withToolPartStates(r,i),n)}function reduceContent(e,t){switch(t.type){case`client.message.submitted`:case`client.message.failed`:return upsertMessage(e,{id:optimisticUserMessageId(t.data.submissionId),metadata:{optimistic:!0,status:t.type===`client.message.failed`?`failed`:`submitted`},parts:[{type:`text`,text:t.data.message}],role:`user`},t.data.turnId);case`message.received`:return upsertMessage(e,{id:`${receivedMessageEventId(t)}:user`,metadata:{status:`complete`,turnId:t.data.turnId},parts:projectReceivedParts(t.data.parts,t.data.message),role:`user`},t.data.turnId);case`step.started`:return updateAssistantMessage(e,t.data.turnId,e=>ensureStepStartPart(e,t.data.stepIndex));case`step.completed`:return e.messages.find(e=>e.role===`assistant`&&e.metadata?.turnId===t.data.turnId)===void 0?e:updateAssistantMessage(e,t.data.turnId,e=>({...e,parts:closeStreamingRuns(e.parts,t.data.stepIndex)}));case`reasoning.appended`:return updateAssistantMessage(e,t.data.turnId,e=>messageRun.transition(ensureStepStartPart(e,t.data.stepIndex),{kind:`append`,delta:t.data.reasoningDelta,id:t.meta?.id,stepIndex:t.data.stepIndex,type:`reasoning`}));case`reasoning.completed`:return updateAssistantMessage(e,t.data.turnId,e=>messageRun.transition(ensureStepStartPart(e,t.data.stepIndex),{kind:`complete`,stepIndex:t.data.stepIndex,text:t.data.reasoning,id:t.meta?.id,type:`reasoning`}));case`action.input.appended`:{let n=findToolPart(e,t.data.callId);if(n!==void 0&&n.state!==`input-streaming`)return e;let r=(n?.state===`input-streaming`?n.inputText:``)+t.data.inputTextDelta;return upsertToolPart(e,t.data.turnId,t.data.stepIndex,{input:void 0,inputText:r,state:`input-streaming`,stepIndex:t.data.stepIndex,toolCallId:t.data.callId,toolMetadata:n?.toolMetadata??{eve:{kind:`unknown`,name:t.data.toolName}},toolName:t.data.toolName,type:`dynamic-tool`})}case`actions.requested`:{let n=e;for(let e of t.data.actions){let r=findToolPart(n,e.callId);if(r!==void 0&&r.state!==`input-streaming`)continue;let i=normalizeActionRequest(e);n=updateAssistantMessage(n,t.data.turnId,n=>upsertPart(ensureStepStartPart(n,t.data.stepIndex),{input:`input`in e?e.input:void 0,state:`input-available`,stepIndex:t.data.stepIndex,toolCallId:e.callId,toolMetadata:createToolMetadata(i),toolName:i.toolName,type:`dynamic-tool`}))}return n}case`input.requested`:{let n=e;for(let e of t.data.requests){let r=findToolPart(n,e.action.callId);if(r?.approval?.id===e.requestId||r!==void 0&&isSettledToolPart(r))continue;let i=normalizeActionRequest(e.action);n=updateAssistantMessage(n,t.data.turnId,n=>upsertPart(ensureStepStartPart(n,t.data.stepIndex),{...r,approval:{id:e.requestId},input:e.action.input,state:`approval-requested`,stepIndex:r?.stepIndex??t.data.stepIndex,toolCallId:e.action.callId,toolMetadata:createToolMetadata(i,{inputRequest:toMessageInputRequest(e)}),toolName:i.toolName,type:`dynamic-tool`}))}return n}case`action.result`:{if(conversationProjection(e).calls[t.data.result.callId]?.taskId!==void 0)return e;let n=findToolPart(e,t.data.result.callId),r=normalizeActionResult(t.data.result),i=t.data.status===void 0||t.data.status===`completed`?t.data.result.isError!==!0&&t.data.error===void 0:!1,a={...n,input:n?.input,stepIndex:n?.stepIndex??t.data.stepIndex,toolCallId:t.data.result.callId,toolMetadata:mergeToolMetadata(n?.toolMetadata,createToolMetadata(r)),toolName:n?.toolName??r.toolName,type:`dynamic-tool`},o=i?{errorText:void 0,output:t.data.result.output}:{errorText:t.data.error?.message??stringifyUnknown(t.data.result.output),output:void 0};return upsertToolPart(e,t.data.turnId,t.data.stepIndex,{...a,...o,partial:void 0})}case`action.partial`:{let n=findToolPart(e,t.data.result.callId);if(n!==void 0&&isSettledToolPart(n))return e;let r=normalizeActionResult(t.data.result);return upsertToolPart(e,t.data.turnId,t.data.stepIndex,{...n,input:n?.input,output:t.data.result.output,partial:!0,state:`output-available`,stepIndex:n?.stepIndex??t.data.stepIndex,toolCallId:t.data.result.callId,toolMetadata:mergeToolMetadata(n?.toolMetadata,createToolMetadata(r)),toolName:n?.toolName??r.toolName,type:`dynamic-tool`})}case`input.resolved`:{let n=e;for(let{requestId:e,response:r}of t.data.resolutions){let t=r===void 0?void 0:findToolPartByApprovalId(n,e);t!==void 0&&(n=replaceToolPart(n,{...t,toolMetadata:mergeToolMetadata(t.toolMetadata,{eve:{inputResponse:r,kind:t.toolMetadata?.eve?.kind??`unknown`,name:t.toolMetadata?.eve?.name??t.toolName}})}))}return n}case`task.settled`:{let n=findToolPart(e,t.data.callId);if(n===void 0)return e;let{error:r,output:i,status:a}=t.data,o=a===`completed`?{output:i}:{errorText:r?.message};return replaceToolPart(e,{...n,...o})}case`authorization.required`:return updateAssistantMessage(e,t.data.turnId,e=>upsertPart(ensureStepStartPart(e,t.data.stepIndex),createAuthorizationRequiredPart(t)));case`authorization.completed`:return completeAuthorization(e,t);case`message.appended`:return updateAssistantMessage(e,t.data.turnId,e=>messageRun.transition(ensureStepStartPart(e,t.data.stepIndex),{kind:`append`,delta:t.data.messageDelta,id:t.meta?.id,stepIndex:t.data.stepIndex,type:`text`}));case`message.completed`:return updateAssistantMessage(e,t.data.turnId,e=>messageRun.transition(ensureStepStartPart(e,t.data.stepIndex),{kind:`complete`,stepIndex:t.data.stepIndex,text:t.data.message,id:t.meta?.id,type:`text`}));case`result.completed`:return updateAssistantMessage(e,t.data.turnId,e=>({...e,metadata:{...e.metadata,result:t.data.result}}));case`turn.completed`:case`turn.cancelled`:case`turn.failed`:return t.type===`turn.failed`&&!e.messages.some(e=>e.role===`assistant`&&e.metadata?.turnId===t.data.turnId)?e:updateAssistantMessage(e,t.data.turnId,e=>({...e,metadata:{...e.metadata,status:`complete`},parts:removeStreamingToolParts(closeStreamingRuns(e.parts))}));default:return e}}function toolCallIds(e,t){let byRequest=t=>findToolPartByApprovalId(e,t)?.toolCallId??[];switch(t.type){case`actions.requested`:return t.data.actions.map(e=>e.callId);case`input.requested`:return t.data.requests.map(e=>e.action.callId);case`action.result`:case`action.partial`:return[t.data.result.callId];case`task.started`:case`task.settled`:return[t.data.callId];case`input.resolved`:return t.data.resolutions.flatMap(e=>byRequest(e.requestId));case`approval.settled`:return[byRequest(t.data.requestId)].flat();default:return[]}}function withToolPartStates(e,t){let n=e;for(let r of new Set(t)){let t=findToolPart(n,r);if(t===void 0)continue;let i=toolPartState(n,t);i!==t&&(n=withConversationProjection(replaceToolPart(n,i),conversationProjection(e)))}return n}function closeStreamingRuns(e,t){return e.map(e=>(e.type===`text`||e.type===`reasoning`)&&e.state===`streaming`&&(t===void 0||e.stepIndex===t)?{...e,state:`done`}:e)}function removeStreamingToolParts(e){return e.filter(e=>e.type!==`dynamic-tool`||e.state!==`input-streaming`)}function updateAssistantMessage(e,t,n){let r=e.messages.find(e=>e.role===`assistant`&&e.metadata?.turnId===t)??createAssistantMessage(t);return upsertMessage(e,n(r))}function createAssistantMessage(e){return{id:`${e}:assistant`,metadata:{status:`streaming`,turnId:e},parts:[],role:`assistant`}}function ensureStepStartPart(e,t){let n=e.parts.filter(e=>e.type===`step-start`).length;if(n>t)return e;let r=t-n+1;return{...e,parts:[...e.parts,...Array.from({length:r},()=>({type:`step-start`}))]}}function upsertPart(e,t){let n=e.parts.findIndex(e=>partKey(e)===partKey(t)),r=n===-1?[...e.parts,t]:[...e.parts.slice(0,n),t,...e.parts.slice(n+1)];return{...e,metadata:{...e.metadata,status:t.type===`text`&&t.state===`done`?`complete`:`streaming`},parts:r}}function upsertToolPart(e,t,n,r){let i=updateToolPart(e,r.toolCallId,r);return i===e?updateAssistantMessage(e,t,e=>upsertPart(ensureStepStartPart(e,n),r)):i}function updateToolPart(e,t,n){let r=e.messages.find(e=>e.role===`assistant`&&e.parts.some(e=>e.type===`dynamic-tool`&&e.toolCallId===t));return r?upsertMessage(e,upsertPart(r,n)):e}function replaceToolPart(e,t){let n=e.messages.find(e=>e.parts.some(e=>e.type===`dynamic-tool`&&e.toolCallId===t.toolCallId));return n===void 0?e:upsertMessage(e,{...n,parts:n.parts.map(e=>partKey(e)===partKey(t)?t:e)})}function completeAuthorization(e,t){let n=findPendingAuthorizationPart(e,t.data.name,t.data.attemptId),r=createAuthorizationCompletedPart(t,n);return updateAssistantMessage(e,n?.turnId??t.data.turnId,e=>upsertPart(ensureStepStartPart(e,r.stepIndex),r))}function findToolPart(e,t){for(let n of e.messages)for(let e of n.parts)if(e.type===`dynamic-tool`&&e.toolCallId===t)return e}function isSettledToolPart(e){return e.state===`output-denied`||e.state===`output-error`||e.state===`output-available`&&e.partial!==!0}function findPendingAuthorizationPart(e,t,n){for(let r=e.messages.length-1;r>=0;--r){let i=e.messages[r];if(i?.role===`assistant`)for(let e=i.parts.length-1;e>=0;--e){let r=i.parts[e];if(r?.type===`authorization`&&r.state===`required`&&(n===void 0?r.attemptId===void 0&&r.name===t:r.attemptId===n))return r}}}function findToolPartByApprovalId(e,t){for(let n of e.messages)for(let e of n.parts)if(e.type===`dynamic-tool`&&e.approval?.id===t)return e}export{defaultMessageReducer};
1
+ import{foldSession,initialSessionProjection,reportedCallStatus}from"#protocol/session-projection.js";import{createToolMetadata,mergeToolMetadata,normalizeActionRequest,normalizeActionResult,stringifyUnknown,toMessageInputRequest}from"#client/message-action-parts.js";import{conversationProjection,withConversationProjection}from"#client/conversation-projection.js";import{createAuthorizationCompletedPart,createAuthorizationRequiredPart}from"#client/authorization-message-parts.js";import{optimisticUserMessageId,partKey,projectReceivedParts,upsertMessage}from"#client/message-reducer-primitives.js";import{messageRun}from"#client/message-run-parts.js";import{toolPartState}from"#client/tool-part-state.js";function receivedMessageEventId(e){return e.meta.id??`${e.data.turnId}:${e.data.sequence}`}function defaultMessageReducer(){return{initial(){return withConversationProjection({messages:[]},initialSessionProjection())},reduce(e,t){return reduceMessageData(e,t)}}}function reduceMessageData(e,t){let n=foldSession(conversationProjection(e),t),r=withConversationProjection(reduceContent(e,t),n),i=toolCallIds(r,t);return withConversationProjection(i.length===0?r:withToolPartStates(r,i),n)}function reduceContent(e,t){switch(t.type){case`client.message.submitted`:case`client.message.failed`:return upsertMessage(e,{id:optimisticUserMessageId(t.data.submissionId),metadata:{optimistic:!0,status:t.type===`client.message.failed`?`failed`:`submitted`},parts:[{type:`text`,text:t.data.message}],role:`user`},t.data.turnId);case`message.received`:return upsertMessage(e,{id:`${receivedMessageEventId(t)}:user`,metadata:{status:`complete`,turnId:t.data.turnId},parts:projectReceivedParts(t.data.parts,t.data.message),role:`user`},t.data.turnId);case`step.started`:return updateAssistantMessage(e,t.data.turnId,e=>ensureStepStartPart(e,t.data.stepIndex));case`step.completed`:return e.messages.find(e=>e.role===`assistant`&&e.metadata?.turnId===t.data.turnId)===void 0?e:updateAssistantMessage(e,t.data.turnId,e=>({...e,parts:closeStreamingRuns(e.parts,t.data.stepIndex)}));case`reasoning.appended`:return updateAssistantMessage(e,t.data.turnId,e=>messageRun.transition(ensureStepStartPart(e,t.data.stepIndex),{kind:`append`,delta:t.data.reasoningDelta,id:t.meta?.id,stepIndex:t.data.stepIndex,type:`reasoning`}));case`reasoning.completed`:return updateAssistantMessage(e,t.data.turnId,e=>messageRun.transition(ensureStepStartPart(e,t.data.stepIndex),{kind:`complete`,stepIndex:t.data.stepIndex,text:t.data.reasoning,id:t.meta?.id,type:`reasoning`}));case`action.input.appended`:{let n=findToolPart(e,t.data.callId);if(n!==void 0&&n.state!==`input-streaming`)return e;let r=(n?.state===`input-streaming`?n.inputText:``)+t.data.inputTextDelta;return upsertToolPart(e,t.data.turnId,t.data.stepIndex,{input:void 0,inputText:r,state:`input-streaming`,stepIndex:t.data.stepIndex,toolCallId:t.data.callId,toolMetadata:n?.toolMetadata??{eve:{kind:`unknown`,name:t.data.toolName}},toolName:t.data.toolName,type:`dynamic-tool`})}case`actions.requested`:{let n=e;for(let e of t.data.actions){let r=findToolPart(n,e.callId);if(r!==void 0&&r.state!==`input-streaming`)continue;let i=normalizeActionRequest(e);n=updateAssistantMessage(n,t.data.turnId,n=>upsertPart(ensureStepStartPart(n,t.data.stepIndex),{input:`input`in e?e.input:void 0,state:`input-available`,stepIndex:t.data.stepIndex,toolCallId:e.callId,toolMetadata:createToolMetadata(i),toolName:i.toolName,type:`dynamic-tool`}))}return n}case`input.requested`:{let n=e;for(let e of t.data.requests){let r=findToolPart(n,e.action.callId);if(r?.approval?.id===e.requestId||r!==void 0&&isSettledToolPart(r))continue;let i=normalizeActionRequest(e.action);n=updateAssistantMessage(n,t.data.turnId,n=>upsertPart(ensureStepStartPart(n,t.data.stepIndex),{...r,approval:{id:e.requestId},input:e.action.input,state:`approval-requested`,stepIndex:r?.stepIndex??t.data.stepIndex,toolCallId:e.action.callId,toolMetadata:createToolMetadata(i,{inputRequest:toMessageInputRequest(e)}),toolName:i.toolName,type:`dynamic-tool`}))}return n}case`action.result`:{if(conversationProjection(e).calls[t.data.result.callId]?.taskId!==void 0)return e;if(t.data.error?.code===`MODEL_CALL_ATTEMPT_RETRIED`)return updateAssistantMessage(e,t.data.turnId,e=>({...e,parts:e.parts.filter(e=>e.type!==`dynamic-tool`||e.toolCallId!==t.data.result.callId)}));let n=findToolPart(e,t.data.result.callId),r=normalizeActionResult(t.data.result),i=t.data.status===void 0||t.data.status===`completed`?t.data.result.isError!==!0&&t.data.error===void 0:!1,a={...n,input:n?.input,stepIndex:n?.stepIndex??t.data.stepIndex,toolCallId:t.data.result.callId,toolMetadata:mergeToolMetadata(n?.toolMetadata,createToolMetadata(r)),toolName:n?.toolName??r.toolName,type:`dynamic-tool`},o=i?{errorText:void 0,output:t.data.result.output}:{errorText:t.data.error?.message??stringifyUnknown(t.data.result.output),output:void 0};return upsertToolPart(e,t.data.turnId,t.data.stepIndex,{...a,...o,partial:void 0})}case`action.partial`:{let n=findToolPart(e,t.data.result.callId);if(n!==void 0&&isSettledToolPart(n))return e;let r=normalizeActionResult(t.data.result);return upsertToolPart(e,t.data.turnId,t.data.stepIndex,{...n,input:n?.input,output:t.data.result.output,partial:!0,state:`output-available`,stepIndex:n?.stepIndex??t.data.stepIndex,toolCallId:t.data.result.callId,toolMetadata:mergeToolMetadata(n?.toolMetadata,createToolMetadata(r)),toolName:n?.toolName??r.toolName,type:`dynamic-tool`})}case`input.resolved`:{let n=e;for(let{requestId:e,response:r}of t.data.resolutions){let t=r===void 0?void 0:findToolPartByApprovalId(n,e);t!==void 0&&(n=replaceToolPart(n,{...t,toolMetadata:mergeToolMetadata(t.toolMetadata,{eve:{inputResponse:r,kind:t.toolMetadata?.eve?.kind??`unknown`,name:t.toolMetadata?.eve?.name??t.toolName}})}))}return n}case`task.settled`:{let n=findToolPart(e,t.data.callId);if(n===void 0)return e;let{error:r,output:i,status:a}=t.data,o=a===`completed`?{output:i}:{errorText:r?.message};return replaceToolPart(e,{...n,...o})}case`authorization.required`:return updateAssistantMessage(e,t.data.turnId,e=>upsertPart(ensureStepStartPart(e,t.data.stepIndex),createAuthorizationRequiredPart(t)));case`authorization.completed`:return completeAuthorization(e,t);case`message.appended`:return updateAssistantMessage(e,t.data.turnId,e=>messageRun.transition(ensureStepStartPart(e,t.data.stepIndex),{kind:`append`,delta:t.data.messageDelta,id:t.meta?.id,stepIndex:t.data.stepIndex,type:`text`}));case`message.completed`:return updateAssistantMessage(e,t.data.turnId,e=>messageRun.transition(ensureStepStartPart(e,t.data.stepIndex),{kind:`complete`,stepIndex:t.data.stepIndex,text:t.data.message,id:t.meta?.id,type:`text`}));case`result.completed`:return updateAssistantMessage(e,t.data.turnId,e=>({...e,metadata:{...e.metadata,result:t.data.result}}));case`turn.completed`:case`turn.cancelled`:case`turn.failed`:return t.type===`turn.failed`&&!e.messages.some(e=>e.role===`assistant`&&e.metadata?.turnId===t.data.turnId)?e:updateAssistantMessage(e,t.data.turnId,t=>({...t,metadata:{...t.metadata,status:`complete`},parts:removeUnsettledToolParts(closeStreamingRuns(t.parts),conversationProjection(e))}));default:return e}}function toolCallIds(e,t){let byRequest=t=>findToolPartByApprovalId(e,t)?.toolCallId??[];switch(t.type){case`actions.requested`:return t.data.actions.map(e=>e.callId);case`input.requested`:return t.data.requests.map(e=>e.action.callId);case`action.result`:case`action.partial`:return[t.data.result.callId];case`task.started`:case`task.settled`:return[t.data.callId];case`input.resolved`:return t.data.resolutions.flatMap(e=>byRequest(e.requestId));case`approval.settled`:return[byRequest(t.data.requestId)].flat();default:return[]}}function withToolPartStates(e,t){let n=e;for(let r of new Set(t)){let t=findToolPart(n,r);if(t===void 0)continue;let i=toolPartState(n,t);i!==t&&(n=withConversationProjection(replaceToolPart(n,i),conversationProjection(e)))}return n}function closeStreamingRuns(e,t){return e.map(e=>(e.type===`text`||e.type===`reasoning`)&&e.state===`streaming`&&(t===void 0||e.stepIndex===t)?{...e,state:`done`}:e)}function removeUnsettledToolParts(e,t){return e.filter(e=>{if(e.type!==`dynamic-tool`)return!0;if(e.state===`input-streaming`)return!1;if(e.state!==`input-available`)return!0;let n=t.calls[e.toolCallId];return n===void 0||n.taskId!==void 0||reportedCallStatus(t,n)!==`running`})}function updateAssistantMessage(e,t,n){let r=e.messages.find(e=>e.role===`assistant`&&e.metadata?.turnId===t)??createAssistantMessage(t);return upsertMessage(e,n(r))}function createAssistantMessage(e){return{id:`${e}:assistant`,metadata:{status:`streaming`,turnId:e},parts:[],role:`assistant`}}function ensureStepStartPart(e,t){let n=e.parts.filter(e=>e.type===`step-start`).length;if(n>t)return e;let r=t-n+1;return{...e,parts:[...e.parts,...Array.from({length:r},()=>({type:`step-start`}))]}}function upsertPart(e,t){let n=e.parts.findIndex(e=>partKey(e)===partKey(t)),r=n===-1?[...e.parts,t]:[...e.parts.slice(0,n),t,...e.parts.slice(n+1)];return{...e,metadata:{...e.metadata,status:t.type===`text`&&t.state===`done`?`complete`:`streaming`},parts:r}}function upsertToolPart(e,t,n,r){let i=updateToolPart(e,r.toolCallId,r);return i===e?updateAssistantMessage(e,t,e=>upsertPart(ensureStepStartPart(e,n),r)):i}function updateToolPart(e,t,n){let r=e.messages.find(e=>e.role===`assistant`&&e.parts.some(e=>e.type===`dynamic-tool`&&e.toolCallId===t));return r?upsertMessage(e,upsertPart(r,n)):e}function replaceToolPart(e,t){let n=e.messages.find(e=>e.parts.some(e=>e.type===`dynamic-tool`&&e.toolCallId===t.toolCallId));return n===void 0?e:upsertMessage(e,{...n,parts:n.parts.map(e=>partKey(e)===partKey(t)?t:e)})}function completeAuthorization(e,t){let n=findPendingAuthorizationPart(e,t.data.name,t.data.attemptId),r=createAuthorizationCompletedPart(t,n);return updateAssistantMessage(e,n?.turnId??t.data.turnId,e=>upsertPart(ensureStepStartPart(e,r.stepIndex),r))}function findToolPart(e,t){for(let n of e.messages)for(let e of n.parts)if(e.type===`dynamic-tool`&&e.toolCallId===t)return e}function isSettledToolPart(e){return e.state===`output-denied`||e.state===`output-error`||e.state===`output-available`&&e.partial!==!0}function findPendingAuthorizationPart(e,t,n){for(let r=e.messages.length-1;r>=0;--r){let i=e.messages[r];if(i?.role===`assistant`)for(let e=i.parts.length-1;e>=0;--e){let r=i.parts[e];if(r?.type===`authorization`&&r.state===`required`&&(n===void 0?r.attemptId===void 0&&r.name===t:r.attemptId===n))return r}}}function findToolPartByApprovalId(e,t){for(let n of e.messages)for(let e of n.parts)if(e.type===`dynamic-tool`&&e.approval?.id===t)return e}export{defaultMessageReducer};
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "moduleFingerprints": {
3
- "@eve/catalog": "68d2a8a8078b0994e821a855a68d8512c8ef9c979394c3bb23498943625f7240",
3
+ "@eve/catalog": "58cbb38af04c334d4282d6ebad5cdee06fb60298204cb745134b2ce2b02a3120",
4
4
  "just-secrets": "1ce67d437d0bb06df02e4e99180a3c5f5edf0010314010226e97b96d462bba5d",
5
5
  "@workflow/world-local": "eeaeed751310cf36666c3daa07f305f431710951b0523b97dcdca3d6e69b1061"
6
6
  },
@@ -38,7 +38,7 @@
38
38
  "@ai-sdk/provider": "4.0.22",
39
39
  "@ai-sdk/provider-utils": "5.0.54",
40
40
  "semver": "7.8.4",
41
- "shadcn": "4.18.0",
41
+ "@shadcn/registry": "0.1.3",
42
42
  "@standard-schema/spec": "1.1.0",
43
43
  "turndown": "7.2.4",
44
44
  "@vercel/blob": "2.8.0",
@@ -48,16 +48,17 @@
48
48
  "@vercel/otel": "2.1.3",
49
49
  "@vercel/sandbox": "3.3.0",
50
50
  "@vercel/sdk": "1.28.8",
51
- "@workflow/core": "5.0.1",
52
- "@workflow/errors": "5.0.1",
51
+ "@vercel/schedules": "0.0.0-alpha.11",
52
+ "@workflow/core": "5.1.0",
53
+ "@workflow/errors": "5.0.2",
53
54
  "@workflow/serde": "5.0.0",
54
- "@workflow/world": "5.0.1",
55
- "@workflow/world-local": "5.0.1",
56
- "@workflow/world-vercel": "5.0.1",
55
+ "@workflow/world": "5.0.2",
56
+ "@workflow/world-local": "5.0.2",
57
+ "@workflow/world-vercel": "5.1.0",
57
58
  "zod": "4.5.4",
58
59
  "zod-validation-error": "5.0.0"
59
60
  },
60
- "scriptHash": "16b872c25e03df81bec4c645ab2674309f3188f3aae692fe7b7ee6d5ad0ac614",
61
+ "scriptHash": "f4dd2f26745407f5b94342ad15f90a1bf4d0cb1fe83bdebaf282f96684006c66",
61
62
  "toolVersions": {
62
63
  "rolldown": "1.2.9",
63
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:`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:`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};