@copilotkit/runtime 1.57.2 → 1.57.4

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 (342) hide show
  1. package/dist/lib/runtime/copilot-runtime.cjs +2 -0
  2. package/dist/lib/runtime/copilot-runtime.cjs.map +1 -1
  3. package/dist/lib/runtime/copilot-runtime.d.cts.map +1 -1
  4. package/dist/lib/runtime/copilot-runtime.d.mts.map +1 -1
  5. package/dist/lib/runtime/copilot-runtime.mjs +2 -0
  6. package/dist/lib/runtime/copilot-runtime.mjs.map +1 -1
  7. package/dist/package.cjs +52 -19
  8. package/dist/package.mjs +52 -19
  9. package/dist/v2/runtime/core/runtime.cjs +4 -1
  10. package/dist/v2/runtime/core/runtime.cjs.map +1 -1
  11. package/dist/v2/runtime/core/runtime.d.cts.map +1 -1
  12. package/dist/v2/runtime/core/runtime.d.mts.map +1 -1
  13. package/dist/v2/runtime/core/runtime.mjs +4 -1
  14. package/dist/v2/runtime/core/runtime.mjs.map +1 -1
  15. package/dist/v2/runtime/handlers/get-runtime-info.cjs +1 -1
  16. package/dist/v2/runtime/handlers/get-runtime-info.mjs +1 -1
  17. package/dist/v2/runtime/handlers/handle-connect.cjs +1 -1
  18. package/dist/v2/runtime/handlers/handle-connect.mjs +1 -1
  19. package/dist/v2/runtime/handlers/handle-run.cjs +1 -1
  20. package/dist/v2/runtime/handlers/handle-run.mjs +1 -1
  21. package/dist/v2/runtime/handlers/shared/agent-utils.cjs +1 -1
  22. package/dist/v2/runtime/handlers/shared/agent-utils.cjs.map +1 -1
  23. package/dist/v2/runtime/handlers/shared/agent-utils.mjs +1 -1
  24. package/dist/v2/runtime/handlers/shared/agent-utils.mjs.map +1 -1
  25. package/dist/v2/runtime/telemetry/telemetry-client.cjs +22 -6
  26. package/dist/v2/runtime/telemetry/telemetry-client.cjs.map +1 -1
  27. package/dist/v2/runtime/telemetry/telemetry-client.mjs +27 -11
  28. package/dist/v2/runtime/telemetry/telemetry-client.mjs.map +1 -1
  29. package/package.json +8 -18
  30. package/skills/runtime/SKILL.md +98 -0
  31. package/skills/runtime/references/agent-runners-custom.md +161 -0
  32. package/skills/runtime/references/agent-runners-in-memory.md +64 -0
  33. package/skills/runtime/references/agent-runners-sqlite.md +90 -0
  34. package/skills/runtime/references/agent-runners.md +304 -0
  35. package/skills/runtime/references/built-in-agent-factory-modes.md +232 -0
  36. package/skills/runtime/references/built-in-agent-helper-utilities.md +123 -0
  37. package/skills/runtime/references/built-in-agent-model-identifiers.md +59 -0
  38. package/skills/runtime/references/built-in-agent.md +523 -0
  39. package/skills/runtime/references/intelligence-mode.md +336 -0
  40. package/skills/runtime/references/middleware.md +376 -0
  41. package/skills/runtime/references/server-side-tools.md +414 -0
  42. package/skills/runtime/references/setup-endpoint.md +503 -0
  43. package/skills/runtime/references/transcription.md +287 -0
  44. package/skills/runtime/references/wiring-a2a.md +40 -0
  45. package/skills/runtime/references/wiring-adk.md +45 -0
  46. package/skills/runtime/references/wiring-ag2.md +41 -0
  47. package/skills/runtime/references/wiring-agno.md +39 -0
  48. package/skills/runtime/references/wiring-aws-strands.md +59 -0
  49. package/skills/runtime/references/wiring-crewai-crews.md +51 -0
  50. package/skills/runtime/references/wiring-crewai-flows.md +45 -0
  51. package/skills/runtime/references/wiring-external-agents.md +348 -0
  52. package/skills/runtime/references/wiring-langgraph.md +50 -0
  53. package/skills/runtime/references/wiring-llamaindex.md +39 -0
  54. package/skills/runtime/references/wiring-mastra.md +70 -0
  55. package/skills/runtime/references/wiring-mcp-apps-middleware.md +68 -0
  56. package/skills/runtime/references/wiring-ms-agent-framework.md +41 -0
  57. package/skills/runtime/references/wiring-pydantic-ai.md +45 -0
  58. package/CHANGELOG.md +0 -3624
  59. package/__snapshots__/schema/schema.graphql +0 -371
  60. package/dist/v2/runtime/telemetry/scarf-client.cjs +0 -32
  61. package/dist/v2/runtime/telemetry/scarf-client.cjs.map +0 -1
  62. package/dist/v2/runtime/telemetry/scarf-client.mjs +0 -32
  63. package/dist/v2/runtime/telemetry/scarf-client.mjs.map +0 -1
  64. package/scripts/generate-gql-schema.ts +0 -16
  65. package/src/agent/__tests__/agent-test-helpers.ts +0 -476
  66. package/src/agent/__tests__/agent.test.ts +0 -593
  67. package/src/agent/__tests__/ai-sdk-v6-compat.test.ts +0 -116
  68. package/src/agent/__tests__/basic-agent.test.ts +0 -1698
  69. package/src/agent/__tests__/capabilities.test.ts +0 -81
  70. package/src/agent/__tests__/config-tools-execution.test.ts +0 -516
  71. package/src/agent/__tests__/converter-aisdk.test.ts +0 -692
  72. package/src/agent/__tests__/converter-custom.test.ts +0 -319
  73. package/src/agent/__tests__/converter-tanstack-input.test.ts +0 -211
  74. package/src/agent/__tests__/converter-tanstack.test.ts +0 -594
  75. package/src/agent/__tests__/mcp-clients.test.ts +0 -246
  76. package/src/agent/__tests__/mcp-servers-integration.test.ts +0 -373
  77. package/src/agent/__tests__/multimodal-tanstack.test.ts +0 -284
  78. package/src/agent/__tests__/multimodal.test.ts +0 -176
  79. package/src/agent/__tests__/property-overrides.test.ts +0 -598
  80. package/src/agent/__tests__/provider-id-collision.test.ts +0 -195
  81. package/src/agent/__tests__/standard-schema-tools.test.ts +0 -313
  82. package/src/agent/__tests__/standard-schema-types.test.ts +0 -158
  83. package/src/agent/__tests__/state-tools.test.ts +0 -436
  84. package/src/agent/__tests__/test-helpers.ts +0 -197
  85. package/src/agent/__tests__/utils.test.ts +0 -536
  86. package/src/agent/__tests__/zod-regression.test.ts +0 -350
  87. package/src/agent/converters/aisdk.ts +0 -326
  88. package/src/agent/converters/index.ts +0 -7
  89. package/src/agent/converters/tanstack.ts +0 -451
  90. package/src/agent/index.ts +0 -1743
  91. package/src/agents/langgraph/__tests__/event-source.test.ts +0 -256
  92. package/src/agents/langgraph/event-source.ts +0 -365
  93. package/src/agents/langgraph/events.ts +0 -394
  94. package/src/graphql/inputs/action.input.ts +0 -16
  95. package/src/graphql/inputs/agent-session.input.ts +0 -13
  96. package/src/graphql/inputs/agent-state.input.ts +0 -13
  97. package/src/graphql/inputs/cloud-guardrails.input.ts +0 -16
  98. package/src/graphql/inputs/cloud.input.ts +0 -8
  99. package/src/graphql/inputs/context-property.input.ts +0 -10
  100. package/src/graphql/inputs/copilot-context.input.ts +0 -10
  101. package/src/graphql/inputs/custom-property.input.ts +0 -15
  102. package/src/graphql/inputs/extensions.input.ts +0 -21
  103. package/src/graphql/inputs/forwarded-parameters.input.ts +0 -22
  104. package/src/graphql/inputs/frontend.input.ts +0 -14
  105. package/src/graphql/inputs/generate-copilot-response.input.ts +0 -59
  106. package/src/graphql/inputs/load-agent-state.input.ts +0 -10
  107. package/src/graphql/inputs/message.input.ts +0 -110
  108. package/src/graphql/inputs/meta-event.input.ts +0 -18
  109. package/src/graphql/message-conversion/agui-to-gql.test.ts +0 -1384
  110. package/src/graphql/message-conversion/agui-to-gql.ts +0 -384
  111. package/src/graphql/message-conversion/gql-to-agui.test.ts +0 -1653
  112. package/src/graphql/message-conversion/gql-to-agui.ts +0 -297
  113. package/src/graphql/message-conversion/index.ts +0 -2
  114. package/src/graphql/message-conversion/roundtrip-conversion.test.ts +0 -561
  115. package/src/graphql/resolvers/__tests__/resolve-message-id.test.ts +0 -25
  116. package/src/graphql/resolvers/copilot.resolver.ts +0 -785
  117. package/src/graphql/resolvers/resolve-message-id.ts +0 -14
  118. package/src/graphql/resolvers/state.resolver.ts +0 -30
  119. package/src/graphql/types/agents-response.type.ts +0 -19
  120. package/src/graphql/types/base/index.ts +0 -10
  121. package/src/graphql/types/converted/index.ts +0 -183
  122. package/src/graphql/types/copilot-response.type.ts +0 -141
  123. package/src/graphql/types/enums.ts +0 -38
  124. package/src/graphql/types/extensions-response.type.ts +0 -23
  125. package/src/graphql/types/guardrails-result.type.ts +0 -20
  126. package/src/graphql/types/load-agent-state-response.type.ts +0 -17
  127. package/src/graphql/types/message-status.type.ts +0 -48
  128. package/src/graphql/types/meta-events.type.ts +0 -78
  129. package/src/graphql/types/response-status.type.ts +0 -77
  130. package/src/index.ts +0 -3
  131. package/src/langgraph.ts +0 -1
  132. package/src/lib/__tests__/telemetry-disclosure.test.ts +0 -55
  133. package/src/lib/cloud/index.ts +0 -4
  134. package/src/lib/error-messages.ts +0 -211
  135. package/src/lib/index.ts +0 -52
  136. package/src/lib/integrations/index.ts +0 -6
  137. package/src/lib/integrations/nest/index.ts +0 -21
  138. package/src/lib/integrations/nextjs/app-router.ts +0 -47
  139. package/src/lib/integrations/nextjs/pages-router.ts +0 -45
  140. package/src/lib/integrations/node-express/index.ts +0 -21
  141. package/src/lib/integrations/node-http/__tests__/request-duck-type.test.ts +0 -66
  142. package/src/lib/integrations/node-http/index.ts +0 -187
  143. package/src/lib/integrations/node-http/request-handler.ts +0 -128
  144. package/src/lib/integrations/shared.ts +0 -112
  145. package/src/lib/logger.ts +0 -31
  146. package/src/lib/observability.ts +0 -167
  147. package/src/lib/runtime/__tests__/copilot-runtime-error.test.ts +0 -183
  148. package/src/lib/runtime/__tests__/handle-service-adapter.test.ts +0 -108
  149. package/src/lib/runtime/__tests__/mcp-tools-utils.test.ts +0 -499
  150. package/src/lib/runtime/__tests__/on-after-request.test.ts +0 -122
  151. package/src/lib/runtime/__tests__/retry-utils.test.ts +0 -137
  152. package/src/lib/runtime/__tests__/v1-agent-factory.test.ts +0 -109
  153. package/src/lib/runtime/agent-integrations/langgraph/__tests__/dispatch-event-filtering.test.ts +0 -345
  154. package/src/lib/runtime/agent-integrations/langgraph/__tests__/run-message-filtering.test.ts +0 -156
  155. package/src/lib/runtime/agent-integrations/langgraph/agent.ts +0 -263
  156. package/src/lib/runtime/agent-integrations/langgraph/consts.ts +0 -37
  157. package/src/lib/runtime/agent-integrations/langgraph/index.ts +0 -2
  158. package/src/lib/runtime/copilot-runtime.ts +0 -863
  159. package/src/lib/runtime/mcp-tools-utils.ts +0 -313
  160. package/src/lib/runtime/retry-utils.ts +0 -141
  161. package/src/lib/runtime/telemetry-agent-runner.ts +0 -151
  162. package/src/lib/runtime/types.ts +0 -48
  163. package/src/lib/runtime/utils.ts +0 -93
  164. package/src/lib/streaming.ts +0 -220
  165. package/src/lib/telemetry-client.ts +0 -66
  166. package/src/lib/telemetry-disclosure.ts +0 -53
  167. package/src/service-adapters/anthropic/anthropic-adapter.ts +0 -532
  168. package/src/service-adapters/anthropic/utils.ts +0 -219
  169. package/src/service-adapters/bedrock/bedrock-adapter.ts +0 -73
  170. package/src/service-adapters/conversion.test.ts +0 -56
  171. package/src/service-adapters/conversion.ts +0 -69
  172. package/src/service-adapters/empty/empty-adapter.ts +0 -38
  173. package/src/service-adapters/events.ts +0 -337
  174. package/src/service-adapters/experimental/ollama/ollama-adapter.ts +0 -84
  175. package/src/service-adapters/google/google-genai-adapter.test.ts +0 -151
  176. package/src/service-adapters/google/google-genai-adapter.ts +0 -95
  177. package/src/service-adapters/groq/groq-adapter.ts +0 -229
  178. package/src/service-adapters/index.ts +0 -18
  179. package/src/service-adapters/langchain/langchain-adapter.ts +0 -113
  180. package/src/service-adapters/langchain/langserve.ts +0 -88
  181. package/src/service-adapters/langchain/types.ts +0 -20
  182. package/src/service-adapters/langchain/utils.ts +0 -330
  183. package/src/service-adapters/openai/__tests__/openai-v5-compat.test.ts +0 -177
  184. package/src/service-adapters/openai/openai-adapter.ts +0 -324
  185. package/src/service-adapters/openai/openai-assistant-adapter.ts +0 -385
  186. package/src/service-adapters/openai/utils.ts +0 -305
  187. package/src/service-adapters/service-adapter.ts +0 -50
  188. package/src/service-adapters/shared/error-utils.ts +0 -64
  189. package/src/service-adapters/shared/index.ts +0 -2
  190. package/src/service-adapters/shared/sdk-client-utils.ts +0 -19
  191. package/src/service-adapters/unify/unify-adapter.ts +0 -165
  192. package/src/utils/failed-response-status-reasons.ts +0 -70
  193. package/src/utils/index.ts +0 -1
  194. package/src/v2/express.ts +0 -1
  195. package/src/v2/hono.ts +0 -1
  196. package/src/v2/index.ts +0 -5
  197. package/src/v2/node.ts +0 -1
  198. package/src/v2/runtime/__tests__/agents-factory.test.ts +0 -136
  199. package/src/v2/runtime/__tests__/backward-compat.test.ts +0 -261
  200. package/src/v2/runtime/__tests__/code-review-fixes.test.ts +0 -500
  201. package/src/v2/runtime/__tests__/cors-credentials.test.ts +0 -320
  202. package/src/v2/runtime/__tests__/debug-sse-response.test.ts +0 -302
  203. package/src/v2/runtime/__tests__/express-adapter.test.ts +0 -188
  204. package/src/v2/runtime/__tests__/express-body-order.test.ts +0 -76
  205. package/src/v2/runtime/__tests__/express-fetch-bridge.test.ts +0 -344
  206. package/src/v2/runtime/__tests__/express-single-sse.test.ts +0 -122
  207. package/src/v2/runtime/__tests__/express-single-telemetry.integration.test.ts +0 -65
  208. package/src/v2/runtime/__tests__/express-telemetry.integration.test.ts +0 -101
  209. package/src/v2/runtime/__tests__/fetch-cors.test.ts +0 -205
  210. package/src/v2/runtime/__tests__/fetch-handler-validation.test.ts +0 -440
  211. package/src/v2/runtime/__tests__/fetch-handler.test.ts +0 -456
  212. package/src/v2/runtime/__tests__/fetch-router.test.ts +0 -276
  213. package/src/v2/runtime/__tests__/get-runtime-info.test.ts +0 -335
  214. package/src/v2/runtime/__tests__/handle-connect.test.ts +0 -585
  215. package/src/v2/runtime/__tests__/handle-run.test.ts +0 -1388
  216. package/src/v2/runtime/__tests__/handle-threads.test.ts +0 -930
  217. package/src/v2/runtime/__tests__/handle-transcribe.test.ts +0 -301
  218. package/src/v2/runtime/__tests__/header-utils.test.ts +0 -88
  219. package/src/v2/runtime/__tests__/hono-adapter.test.ts +0 -150
  220. package/src/v2/runtime/__tests__/hono-single-telemetry.integration.test.ts +0 -46
  221. package/src/v2/runtime/__tests__/hono-telemetry.integration.test.ts +0 -99
  222. package/src/v2/runtime/__tests__/hooks-edge-cases.test.ts +0 -457
  223. package/src/v2/runtime/__tests__/hooks.test.ts +0 -557
  224. package/src/v2/runtime/__tests__/in-process-agent-runner-messages.test.ts +0 -230
  225. package/src/v2/runtime/__tests__/in-process-agent-runner.test.ts +0 -1030
  226. package/src/v2/runtime/__tests__/integration/bun/bun-servers.integration.test.ts +0 -27
  227. package/src/v2/runtime/__tests__/integration/bun/elysia-multi.ts +0 -32
  228. package/src/v2/runtime/__tests__/integration/bun/elysia-single.ts +0 -33
  229. package/src/v2/runtime/__tests__/integration/bun/hono-bun-multi.ts +0 -25
  230. package/src/v2/runtime/__tests__/integration/bun/hono-bun-single.ts +0 -32
  231. package/src/v2/runtime/__tests__/integration/helpers/create-test-runtime.ts +0 -15
  232. package/src/v2/runtime/__tests__/integration/helpers/sse-reader.ts +0 -45
  233. package/src/v2/runtime/__tests__/integration/helpers/test-agent.ts +0 -58
  234. package/src/v2/runtime/__tests__/integration/node-servers.integration.test.ts +0 -58
  235. package/src/v2/runtime/__tests__/integration/servers/express-multi.ts +0 -35
  236. package/src/v2/runtime/__tests__/integration/servers/express-single.ts +0 -36
  237. package/src/v2/runtime/__tests__/integration/servers/fetch-direct.ts +0 -39
  238. package/src/v2/runtime/__tests__/integration/servers/hono-multi.ts +0 -30
  239. package/src/v2/runtime/__tests__/integration/servers/hono-single.ts +0 -37
  240. package/src/v2/runtime/__tests__/integration/servers/node-multi.ts +0 -45
  241. package/src/v2/runtime/__tests__/integration/servers/node-single.ts +0 -46
  242. package/src/v2/runtime/__tests__/integration/servers/types.ts +0 -18
  243. package/src/v2/runtime/__tests__/integration/suites/debug-events.suite.ts +0 -253
  244. package/src/v2/runtime/__tests__/integration/suites/multi-endpoint.suite.ts +0 -358
  245. package/src/v2/runtime/__tests__/integration/suites/single-endpoint.suite.ts +0 -363
  246. package/src/v2/runtime/__tests__/intelligence-run-telemetry.test.ts +0 -194
  247. package/src/v2/runtime/__tests__/mcp-apps-middleware-integration.test.ts +0 -275
  248. package/src/v2/runtime/__tests__/middleware-express.test.ts +0 -208
  249. package/src/v2/runtime/__tests__/middleware-single-express.test.ts +0 -213
  250. package/src/v2/runtime/__tests__/middleware-single.test.ts +0 -225
  251. package/src/v2/runtime/__tests__/middleware-sse-parser.test.ts +0 -237
  252. package/src/v2/runtime/__tests__/middleware.test.ts +0 -250
  253. package/src/v2/runtime/__tests__/node-fetch-handler.test.ts +0 -157
  254. package/src/v2/runtime/__tests__/open-generative-ui-middleware.e2e.test.ts +0 -728
  255. package/src/v2/runtime/__tests__/router-edge-cases.test.ts +0 -217
  256. package/src/v2/runtime/__tests__/routing-express.test.ts +0 -174
  257. package/src/v2/runtime/__tests__/routing-single-express.test.ts +0 -168
  258. package/src/v2/runtime/__tests__/routing-single.test.ts +0 -193
  259. package/src/v2/runtime/__tests__/routing.test.ts +0 -257
  260. package/src/v2/runtime/__tests__/runtime.test.ts +0 -234
  261. package/src/v2/runtime/__tests__/sse-response-telemetry.test.ts +0 -108
  262. package/src/v2/runtime/__tests__/telemetry.test.ts +0 -167
  263. package/src/v2/runtime/__tests__/thread-names.test.ts +0 -188
  264. package/src/v2/runtime/core/__tests__/debug-event-bus.test.ts +0 -156
  265. package/src/v2/runtime/core/debug-event-bus.ts +0 -45
  266. package/src/v2/runtime/core/fetch-cors.ts +0 -136
  267. package/src/v2/runtime/core/fetch-handler.ts +0 -492
  268. package/src/v2/runtime/core/fetch-router.ts +0 -203
  269. package/src/v2/runtime/core/hooks.ts +0 -160
  270. package/src/v2/runtime/core/middleware-sse-parser.ts +0 -210
  271. package/src/v2/runtime/core/middleware.ts +0 -115
  272. package/src/v2/runtime/core/runtime.ts +0 -432
  273. package/src/v2/runtime/endpoints/express-fetch-bridge.ts +0 -137
  274. package/src/v2/runtime/endpoints/express-single.ts +0 -54
  275. package/src/v2/runtime/endpoints/express.ts +0 -179
  276. package/src/v2/runtime/endpoints/hono-single.ts +0 -60
  277. package/src/v2/runtime/endpoints/hono.ts +0 -89
  278. package/src/v2/runtime/endpoints/index.ts +0 -4
  279. package/src/v2/runtime/endpoints/node-fetch-handler.ts +0 -48
  280. package/src/v2/runtime/endpoints/node.ts +0 -28
  281. package/src/v2/runtime/endpoints/single-route-helpers.ts +0 -125
  282. package/src/v2/runtime/express.ts +0 -2
  283. package/src/v2/runtime/handlers/__tests__/handle-debug-events.test.ts +0 -176
  284. package/src/v2/runtime/handlers/get-runtime-info.ts +0 -101
  285. package/src/v2/runtime/handlers/handle-connect.ts +0 -80
  286. package/src/v2/runtime/handlers/handle-debug-events.ts +0 -52
  287. package/src/v2/runtime/handlers/handle-run.ts +0 -111
  288. package/src/v2/runtime/handlers/handle-stop.ts +0 -77
  289. package/src/v2/runtime/handlers/handle-threads.ts +0 -11
  290. package/src/v2/runtime/handlers/handle-transcribe.ts +0 -269
  291. package/src/v2/runtime/handlers/header-utils.ts +0 -24
  292. package/src/v2/runtime/handlers/intelligence/connect.ts +0 -102
  293. package/src/v2/runtime/handlers/intelligence/run.ts +0 -351
  294. package/src/v2/runtime/handlers/intelligence/thread-names.ts +0 -246
  295. package/src/v2/runtime/handlers/intelligence/threads.ts +0 -420
  296. package/src/v2/runtime/handlers/shared/agent-utils.ts +0 -154
  297. package/src/v2/runtime/handlers/shared/intelligence-utils.ts +0 -41
  298. package/src/v2/runtime/handlers/shared/json-response.ts +0 -9
  299. package/src/v2/runtime/handlers/shared/resolve-intelligence-user.ts +0 -28
  300. package/src/v2/runtime/handlers/shared/sse-response.ts +0 -215
  301. package/src/v2/runtime/handlers/sse/__tests__/sse-connect-agent-id.test.ts +0 -71
  302. package/src/v2/runtime/handlers/sse/connect.ts +0 -30
  303. package/src/v2/runtime/handlers/sse/run.ts +0 -40
  304. package/src/v2/runtime/hono.ts +0 -2
  305. package/src/v2/runtime/index.ts +0 -51
  306. package/src/v2/runtime/intelligence-platform/__tests__/client.test.ts +0 -601
  307. package/src/v2/runtime/intelligence-platform/__tests__/intelligence-mcp-helper.test.ts +0 -246
  308. package/src/v2/runtime/intelligence-platform/client.ts +0 -818
  309. package/src/v2/runtime/intelligence-platform/index.ts +0 -10
  310. package/src/v2/runtime/node.ts +0 -6
  311. package/src/v2/runtime/open-generative-ui-middleware.ts +0 -373
  312. package/src/v2/runtime/runner/__tests__/finalize-events.test.ts +0 -109
  313. package/src/v2/runtime/runner/__tests__/in-memory-runner.e2e.test.ts +0 -775
  314. package/src/v2/runtime/runner/__tests__/in-memory-runner.test.ts +0 -777
  315. package/src/v2/runtime/runner/__tests__/intelligence-runner.test.ts +0 -1039
  316. package/src/v2/runtime/runner/agent-runner.ts +0 -35
  317. package/src/v2/runtime/runner/in-memory.ts +0 -467
  318. package/src/v2/runtime/runner/index.ts +0 -4
  319. package/src/v2/runtime/runner/intelligence.ts +0 -498
  320. package/src/v2/runtime/telemetry/__tests__/instance-created.test.ts +0 -96
  321. package/src/v2/runtime/telemetry/events.ts +0 -35
  322. package/src/v2/runtime/telemetry/index.ts +0 -7
  323. package/src/v2/runtime/telemetry/instance-created.ts +0 -44
  324. package/src/v2/runtime/telemetry/scarf-client.ts +0 -39
  325. package/src/v2/runtime/telemetry/telemetry-client.ts +0 -70
  326. package/src/v2/runtime/transcription-service/transcription-service.ts +0 -11
  327. package/tests/global.d.ts +0 -1
  328. package/tests/service-adapters/anthropic/allowlist-approach.test.ts +0 -259
  329. package/tests/service-adapters/anthropic/anthropic-adapter-language-model.test.ts +0 -101
  330. package/tests/service-adapters/anthropic/anthropic-adapter.test.ts +0 -645
  331. package/tests/service-adapters/anthropic/utils-token-trimming.test.ts +0 -301
  332. package/tests/service-adapters/groq/groq-adapter-language-model.test.ts +0 -102
  333. package/tests/service-adapters/openai/allowlist-approach.test.ts +0 -294
  334. package/tests/service-adapters/openai/openai-adapter-language-model.test.ts +0 -122
  335. package/tests/service-adapters/openai/openai-adapter.test.ts +0 -291
  336. package/tests/service-adapters/shared/sdk-client-utils.test.ts +0 -36
  337. package/tests/setup.vitest.ts +0 -8
  338. package/tests/tsconfig.json +0 -10
  339. package/tsconfig.json +0 -20
  340. package/tsdown.config.ts +0 -45
  341. package/typedoc.json +0 -4
  342. package/vitest.config.mjs +0 -13
@@ -1,301 +0,0 @@
1
- import { handleTranscribe } from "../handlers/handle-transcribe";
2
- import { CopilotRuntime } from "../core/runtime";
3
- import {
4
- TranscriptionService,
5
- TranscribeFileOptions,
6
- } from "../transcription-service/transcription-service";
7
- import { describe, it, expect } from "vitest";
8
-
9
- // Mock TranscriptionService
10
- class MockTranscriptionService extends TranscriptionService {
11
- public lastOptions?: TranscribeFileOptions;
12
-
13
- constructor(
14
- private shouldThrow = false,
15
- private returnText = "Mock transcription",
16
- ) {
17
- super();
18
- }
19
-
20
- async transcribeFile(options: TranscribeFileOptions): Promise<string> {
21
- this.lastOptions = options;
22
- if (this.shouldThrow) {
23
- throw new Error("Transcription service error");
24
- }
25
- return this.returnText;
26
- }
27
- }
28
-
29
- describe("handleTranscribe", () => {
30
- const createMockRuntime = (
31
- transcriptionService?: TranscriptionService,
32
- ): CopilotRuntime => {
33
- return {
34
- agents: Promise.resolve({}),
35
- transcriptionService,
36
- beforeRequestMiddleware: undefined,
37
- afterRequestMiddleware: undefined,
38
- } as CopilotRuntime;
39
- };
40
-
41
- const createMockAudioFile = (
42
- name = "test.mp3",
43
- type = "audio/mpeg",
44
- size = 1024,
45
- ): File => {
46
- const content = new Uint8Array(size);
47
- return new File([content], name, { type });
48
- };
49
-
50
- const createFormDataRequest = (audioFile?: File): Request => {
51
- const formData = new FormData();
52
- if (audioFile) {
53
- formData.append("audio", audioFile);
54
- }
55
-
56
- return new Request("https://example.com/transcribe", {
57
- method: "POST",
58
- body: formData,
59
- });
60
- };
61
-
62
- const createJsonRequest = (): Request => {
63
- return new Request("https://example.com/transcribe", {
64
- method: "POST",
65
- headers: { "Content-Type": "application/json" },
66
- body: JSON.stringify({ test: "data" }),
67
- });
68
- };
69
-
70
- it("should successfully transcribe an audio file", async () => {
71
- const mockService = new MockTranscriptionService(false, "Hello world");
72
- const runtime = createMockRuntime(mockService);
73
- const audioFile = createMockAudioFile("test.mp3", "audio/mpeg", 2048);
74
- const request = createFormDataRequest(audioFile);
75
-
76
- const response = await handleTranscribe({ runtime, request });
77
-
78
- expect(response.status).toBe(200);
79
- expect(response.headers.get("Content-Type")).toBe("application/json");
80
-
81
- const body = await response.json();
82
- expect(body).toEqual({
83
- text: "Hello world",
84
- size: 2048,
85
- type: "audio/mpeg",
86
- });
87
- });
88
-
89
- it("should return 503 when transcription service is not configured", async () => {
90
- const runtime = createMockRuntime(); // No transcription service
91
- const audioFile = createMockAudioFile();
92
- const request = createFormDataRequest(audioFile);
93
-
94
- const response = await handleTranscribe({ runtime, request });
95
-
96
- expect(response.status).toBe(503);
97
- expect(response.headers.get("Content-Type")).toBe("application/json");
98
-
99
- const body = await response.json();
100
- expect(body).toEqual({
101
- error: "service_not_configured",
102
- message: "Transcription service is not configured",
103
- retryable: false,
104
- });
105
- });
106
-
107
- it("should return 400 when request is not form data", async () => {
108
- const mockService = new MockTranscriptionService();
109
- const runtime = createMockRuntime(mockService);
110
- const request = createJsonRequest();
111
-
112
- const response = await handleTranscribe({ runtime, request });
113
-
114
- expect(response.status).toBe(400);
115
- expect(response.headers.get("Content-Type")).toBe("application/json");
116
-
117
- const body = await response.json();
118
- expect(body).toEqual({
119
- error: "invalid_request",
120
- message:
121
- "Request must include 'audio' field with base64-encoded audio data",
122
- retryable: false,
123
- });
124
- });
125
-
126
- it("should return 400 when no audio file is provided", async () => {
127
- const mockService = new MockTranscriptionService();
128
- const runtime = createMockRuntime(mockService);
129
- const request = createFormDataRequest(); // No audio file
130
-
131
- const response = await handleTranscribe({ runtime, request });
132
-
133
- expect(response.status).toBe(400);
134
- expect(response.headers.get("Content-Type")).toBe("application/json");
135
-
136
- const body = await response.json();
137
- expect(body).toEqual({
138
- error: "invalid_request",
139
- message:
140
- "No audio file found in form data. Please include an 'audio' field.",
141
- retryable: false,
142
- });
143
- });
144
-
145
- it("should accept various valid audio file types", async () => {
146
- const mockService = new MockTranscriptionService();
147
- const runtime = createMockRuntime(mockService);
148
-
149
- const validTypes = [
150
- "audio/mpeg",
151
- "audio/mp3",
152
- "audio/mp4",
153
- "audio/wav",
154
- "audio/webm",
155
- "audio/ogg",
156
- "audio/flac",
157
- "audio/aac",
158
- ];
159
-
160
- for (const type of validTypes) {
161
- const audioFile = createMockAudioFile(`test.${type.split("/")[1]}`, type);
162
- const request = createFormDataRequest(audioFile);
163
-
164
- const response = await handleTranscribe({ runtime, request });
165
- expect(response.status).toBe(200);
166
- }
167
- });
168
-
169
- it("should accept files with empty type (some browsers/systems)", async () => {
170
- const mockService = new MockTranscriptionService();
171
- const runtime = createMockRuntime(mockService);
172
- const audioFile = createMockAudioFile("test.mp3", ""); // Empty type
173
- const request = createFormDataRequest(audioFile);
174
-
175
- const response = await handleTranscribe({ runtime, request });
176
-
177
- expect(response.status).toBe(200);
178
- });
179
-
180
- it("should accept files with application/octet-stream type (fallback)", async () => {
181
- const mockService = new MockTranscriptionService();
182
- const runtime = createMockRuntime(mockService);
183
- const audioFile = createMockAudioFile(
184
- "test.mp3",
185
- "application/octet-stream",
186
- );
187
- const request = createFormDataRequest(audioFile);
188
-
189
- const response = await handleTranscribe({ runtime, request });
190
-
191
- expect(response.status).toBe(200);
192
- });
193
-
194
- it("should return 400 for invalid file types", async () => {
195
- const mockService = new MockTranscriptionService();
196
- const runtime = createMockRuntime(mockService);
197
- const audioFile = createMockAudioFile("test.txt", "text/plain");
198
- const request = createFormDataRequest(audioFile);
199
-
200
- const response = await handleTranscribe({ runtime, request });
201
-
202
- expect(response.status).toBe(400);
203
- expect(response.headers.get("Content-Type")).toBe("application/json");
204
-
205
- const body = await response.json();
206
- expect(body.error).toBe("invalid_audio_format");
207
- expect(body.message).toContain("Unsupported audio format: text/plain");
208
- expect(body.retryable).toBe(false);
209
- });
210
-
211
- it("should return 500 when transcription service throws an error", async () => {
212
- const mockService = new MockTranscriptionService(true); // Will throw error
213
- const runtime = createMockRuntime(mockService);
214
- const audioFile = createMockAudioFile();
215
- const request = createFormDataRequest(audioFile);
216
-
217
- const response = await handleTranscribe({ runtime, request });
218
-
219
- expect(response.status).toBe(500);
220
- expect(response.headers.get("Content-Type")).toBe("application/json");
221
-
222
- const body = await response.json();
223
- expect(body).toEqual({
224
- error: "provider_error",
225
- message: "Transcription service error",
226
- retryable: true,
227
- });
228
- });
229
-
230
- it("should handle form data parsing errors gracefully", async () => {
231
- const mockService = new MockTranscriptionService();
232
- const runtime = createMockRuntime(mockService);
233
-
234
- // Create a request with malformed form data
235
- const request = new Request("https://example.com/transcribe", {
236
- method: "POST",
237
- headers: { "Content-Type": "multipart/form-data; boundary=invalid" },
238
- body: "invalid form data",
239
- });
240
-
241
- const response = await handleTranscribe({ runtime, request });
242
-
243
- expect(response.status).toBe(500);
244
- expect(response.headers.get("Content-Type")).toBe("application/json");
245
-
246
- const body = await response.json();
247
- expect(body.error).toBe("provider_error");
248
- expect(body.retryable).toBe(true);
249
- });
250
-
251
- it("should handle non-File objects in form data", async () => {
252
- const mockService = new MockTranscriptionService();
253
- const runtime = createMockRuntime(mockService);
254
-
255
- const formData = new FormData();
256
- formData.append("audio", "not a file"); // String instead of File
257
-
258
- const request = new Request("https://example.com/transcribe", {
259
- method: "POST",
260
- body: formData,
261
- });
262
-
263
- const response = await handleTranscribe({ runtime, request });
264
-
265
- expect(response.status).toBe(400);
266
- expect(response.headers.get("Content-Type")).toBe("application/json");
267
-
268
- const body = await response.json();
269
- expect(body).toEqual({
270
- error: "invalid_request",
271
- message:
272
- "No audio file found in form data. Please include an 'audio' field.",
273
- retryable: false,
274
- });
275
- });
276
-
277
- it("should pass file metadata to transcription service", async () => {
278
- const mockService = new MockTranscriptionService();
279
- const runtime = createMockRuntime(mockService);
280
- const audioFile = createMockAudioFile(
281
- "my-recording.wav",
282
- "audio/wav",
283
- 2048,
284
- );
285
-
286
- const request = createFormDataRequest(audioFile);
287
-
288
- const response = await handleTranscribe({ runtime, request });
289
-
290
- expect(response.status).toBe(200);
291
- expect(mockService.lastOptions).toEqual({
292
- audioFile: expect.objectContaining({
293
- name: "my-recording.wav",
294
- type: "audio/wav",
295
- size: 2048,
296
- }),
297
- mimeType: "audio/wav",
298
- size: 2048,
299
- });
300
- });
301
- });
@@ -1,88 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import {
3
- shouldForwardHeader,
4
- extractForwardableHeaders,
5
- } from "../handlers/header-utils";
6
-
7
- describe("header-utils", () => {
8
- describe("shouldForwardHeader", () => {
9
- it("forwards authorization header (case-insensitive)", () => {
10
- expect(shouldForwardHeader("authorization")).toBe(true);
11
- expect(shouldForwardHeader("Authorization")).toBe(true);
12
- expect(shouldForwardHeader("AUTHORIZATION")).toBe(true);
13
- });
14
-
15
- it("forwards x-* custom headers", () => {
16
- expect(shouldForwardHeader("x-custom")).toBe(true);
17
- expect(shouldForwardHeader("X-Custom")).toBe(true);
18
- expect(shouldForwardHeader("x-request-id")).toBe(true);
19
- expect(shouldForwardHeader("X-Forwarded-For")).toBe(true);
20
- });
21
-
22
- it("blocks standard headers", () => {
23
- expect(shouldForwardHeader("content-type")).toBe(false);
24
- expect(shouldForwardHeader("Content-Type")).toBe(false);
25
- expect(shouldForwardHeader("origin")).toBe(false);
26
- expect(shouldForwardHeader("user-agent")).toBe(false);
27
- expect(shouldForwardHeader("accept")).toBe(false);
28
- expect(shouldForwardHeader("cookie")).toBe(false);
29
- expect(shouldForwardHeader("host")).toBe(false);
30
- });
31
- });
32
-
33
- describe("extractForwardableHeaders", () => {
34
- it("extracts only forwardable headers from request", () => {
35
- const request = new Request("https://example.com", {
36
- method: "POST",
37
- headers: {
38
- "Content-Type": "application/json",
39
- "X-Custom": "custom-value",
40
- "X-Request-ID": "req-123",
41
- Authorization: "Bearer token",
42
- Origin: "http://localhost",
43
- },
44
- });
45
-
46
- const result = extractForwardableHeaders(request);
47
-
48
- expect(result).toEqual({
49
- "x-custom": "custom-value",
50
- "x-request-id": "req-123",
51
- authorization: "Bearer token",
52
- });
53
- });
54
-
55
- it("returns empty object when no forwardable headers present", () => {
56
- const request = new Request("https://example.com", {
57
- method: "POST",
58
- headers: {
59
- "Content-Type": "application/json",
60
- Origin: "http://localhost",
61
- },
62
- });
63
-
64
- const result = extractForwardableHeaders(request);
65
-
66
- expect(result).toEqual({});
67
- });
68
-
69
- it("preserves header values exactly", () => {
70
- const request = new Request("https://example.com", {
71
- method: "POST",
72
- headers: {
73
- Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
74
- "X-Complex-Value": "value with spaces and special=chars&more",
75
- },
76
- });
77
-
78
- const result = extractForwardableHeaders(request);
79
-
80
- expect(result.authorization).toBe(
81
- "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
82
- );
83
- expect(result["x-complex-value"]).toBe(
84
- "value with spaces and special=chars&more",
85
- );
86
- });
87
- });
88
- });
@@ -1,150 +0,0 @@
1
- import { describe, it, expect, vi } from "vitest";
2
- import type { AbstractAgent } from "@ag-ui/client";
3
-
4
- import {
5
- createCopilotEndpoint,
6
- createCopilotEndpointSingleRoute,
7
- } from "../endpoints";
8
- import { CopilotRuntime } from "../core/runtime";
9
-
10
- describe("Hono adapter with hooks", () => {
11
- const createMockAgent = () => {
12
- const agent: unknown = {
13
- execute: async () => ({ events: [] }),
14
- };
15
- (agent as { clone: () => unknown }).clone = () => createMockAgent();
16
- return agent as AbstractAgent;
17
- };
18
-
19
- const createMockRuntime = (opts?: Partial<CopilotRuntime>) =>
20
- new CopilotRuntime({
21
- agents: {
22
- default: createMockAgent(),
23
- myAgent: createMockAgent(),
24
- testAgent: createMockAgent(),
25
- },
26
- ...opts,
27
- });
28
-
29
- describe("createCopilotEndpoint", () => {
30
- const createEndpoint = (
31
- hooks?: Parameters<typeof createCopilotEndpoint>[0]["hooks"],
32
- runtimeOpts?: Partial<CopilotRuntime>,
33
- ) => {
34
- const runtime = createMockRuntime(runtimeOpts);
35
- const endpoint = createCopilotEndpoint({
36
- runtime,
37
- basePath: "/",
38
- hooks,
39
- });
40
- return { endpoint, runtime };
41
- };
42
-
43
- it("routes GET /info correctly", async () => {
44
- const { endpoint } = createEndpoint();
45
- const response = await endpoint.fetch(
46
- new Request("https://example.com/info"),
47
- );
48
-
49
- expect(response.status).toBe(200);
50
- const body = await response.json();
51
- expect(body).toHaveProperty("version");
52
- });
53
-
54
- it("routes POST /agent/:id/run correctly", async () => {
55
- const { endpoint } = createEndpoint();
56
- const response = await endpoint.fetch(
57
- new Request("https://example.com/agent/myAgent/run", {
58
- method: "POST",
59
- headers: { "Content-Type": "application/json" },
60
- body: JSON.stringify({
61
- messages: [],
62
- state: {},
63
- threadId: "thread-1",
64
- }),
65
- }),
66
- );
67
-
68
- expect(response.status).not.toBe(404);
69
- });
70
-
71
- it("forwards hooks — onRequest hook is called", async () => {
72
- const onRequest = vi.fn();
73
- const { endpoint, runtime } = createEndpoint({ onRequest });
74
-
75
- await endpoint.fetch(new Request("https://example.com/info"));
76
-
77
- expect(onRequest).toHaveBeenCalledTimes(1);
78
- expect(onRequest).toHaveBeenCalledWith(
79
- expect.objectContaining({
80
- request: expect.any(Request),
81
- path: expect.stringContaining("/info"),
82
- runtime,
83
- }),
84
- );
85
- });
86
-
87
- it("hooks can modify response headers via onResponse", async () => {
88
- const { endpoint } = createEndpoint({
89
- onResponse: ({ response }) => {
90
- const headers = new Headers(response.headers);
91
- headers.set("x-custom-header", "hello-from-hook");
92
- return new Response(response.body, {
93
- status: response.status,
94
- headers,
95
- });
96
- },
97
- });
98
-
99
- const response = await endpoint.fetch(
100
- new Request("https://example.com/info"),
101
- );
102
-
103
- expect(response.status).toBe(200);
104
- expect(response.headers.get("x-custom-header")).toBe("hello-from-hook");
105
- });
106
-
107
- it("Hono CORS headers are present", async () => {
108
- const { endpoint } = createEndpoint();
109
- const response = await endpoint.fetch(
110
- new Request("https://example.com/info", {
111
- method: "OPTIONS",
112
- headers: {
113
- Origin: "https://somesite.com",
114
- "Access-Control-Request-Method": "GET",
115
- },
116
- }),
117
- );
118
-
119
- expect(response.headers.get("Access-Control-Allow-Origin")).toBe("*");
120
- });
121
- });
122
-
123
- describe("createCopilotEndpointSingleRoute", () => {
124
- it("dispatches single-route with method envelope", async () => {
125
- const runtime = createMockRuntime();
126
- const endpoint = createCopilotEndpointSingleRoute({
127
- runtime,
128
- basePath: "/rpc",
129
- });
130
-
131
- const response = await endpoint.fetch(
132
- new Request("https://example.com/rpc", {
133
- method: "POST",
134
- headers: { "Content-Type": "application/json" },
135
- body: JSON.stringify({
136
- method: "agent/run",
137
- params: { agentId: "myAgent" },
138
- body: {
139
- messages: [],
140
- state: {},
141
- threadId: "thread-1",
142
- },
143
- }),
144
- }),
145
- );
146
-
147
- expect(response.status).not.toBe(404);
148
- });
149
- });
150
- });
@@ -1,46 +0,0 @@
1
- /**
2
- * Integration test: Hono single-route adapter (deprecated path) + telemetry.
3
- *
4
- * `createCopilotEndpointSingleRoute` is the legacy direct single-route entry
5
- * point, superseded by `createCopilotHonoHandler({ mode: "single-route" })`
6
- * but still exported.
7
- */
8
- import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
9
- import type { AbstractAgent } from "@ag-ui/client";
10
-
11
- import { telemetry } from "../telemetry";
12
- import { createCopilotEndpointSingleRoute } from "../endpoints/hono-single";
13
- import { CopilotRuntime } from "../core/runtime";
14
-
15
- function makeAgent(): AbstractAgent {
16
- const a: unknown = { execute: async () => ({ events: [] }) };
17
- (a as { clone: () => unknown }).clone = () => makeAgent();
18
- return a as AbstractAgent;
19
- }
20
-
21
- describe("Hono single-route adapter — telemetry firing (integration)", () => {
22
- let captureSpy: ReturnType<typeof vi.spyOn>;
23
-
24
- beforeEach(() => {
25
- captureSpy = vi.spyOn(telemetry, "capture").mockResolvedValue(undefined);
26
- });
27
-
28
- afterEach(() => {
29
- captureSpy.mockRestore();
30
- });
31
-
32
- it("fires instance_created on handler creation", async () => {
33
- const runtime = new CopilotRuntime({ agents: { default: makeAgent() } });
34
- createCopilotEndpointSingleRoute({ runtime, basePath: "/api/copilotkit" });
35
-
36
- await vi.waitFor(() => {
37
- expect(captureSpy).toHaveBeenCalledWith(
38
- "oss.runtime.instance_created",
39
- expect.objectContaining({
40
- agentsAmount: 1,
41
- "cloud.api_key_provided": false,
42
- }),
43
- );
44
- });
45
- });
46
- });
@@ -1,99 +0,0 @@
1
- /**
2
- * Integration test: Hono adapter + telemetry.
3
- *
4
- * Asserts both ends of the path-to-production chain that the v2 refactor
5
- * previously broke (2ac4a40b5, 2026-03-29):
6
- * 1. `oss.runtime.instance_created` fires once per handler factory.
7
- * 2. `oss.runtime.copilot_request_created` fires when a real HTTP request
8
- * flows through the handler.
9
- *
10
- * If either regresses, this test fails.
11
- */
12
- import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
13
- import type { AbstractAgent } from "@ag-ui/client";
14
-
15
- import { telemetry } from "../telemetry";
16
- import { createCopilotHonoHandler } from "../endpoints/hono";
17
- import { CopilotRuntime } from "../core/runtime";
18
-
19
- function makeAgent(): AbstractAgent {
20
- const a: unknown = {
21
- execute: async () => ({ events: [] }),
22
- };
23
- (a as { clone: () => unknown }).clone = () => makeAgent();
24
- return a as AbstractAgent;
25
- }
26
-
27
- describe("Hono adapter — telemetry firing (integration)", () => {
28
- let captureSpy: ReturnType<typeof vi.spyOn>;
29
-
30
- beforeEach(() => {
31
- captureSpy = vi.spyOn(telemetry, "capture").mockResolvedValue(undefined);
32
- });
33
-
34
- afterEach(() => {
35
- captureSpy.mockRestore();
36
- });
37
-
38
- it("fires instance_created on handler creation (multi-route)", async () => {
39
- const runtime = new CopilotRuntime({ agents: { default: makeAgent() } });
40
- createCopilotHonoHandler({ runtime, basePath: "/" });
41
-
42
- await vi.waitFor(() => {
43
- expect(captureSpy).toHaveBeenCalledWith(
44
- "oss.runtime.instance_created",
45
- expect.objectContaining({
46
- agentsAmount: 1,
47
- actionsAmount: 0,
48
- endpointsAmount: 0,
49
- "cloud.api_key_provided": false,
50
- }),
51
- );
52
- });
53
- });
54
-
55
- it("fires copilot_request_created when a real HTTP request hits the handler", async () => {
56
- const runtime = new CopilotRuntime({ agents: { default: makeAgent() } });
57
- const endpoint = createCopilotHonoHandler({ runtime, basePath: "/" });
58
-
59
- await endpoint.fetch(
60
- new Request("https://example.com/agent/default/run", {
61
- method: "POST",
62
- headers: { "Content-Type": "application/json" },
63
- body: JSON.stringify({ messages: [], state: {}, threadId: "t1" }),
64
- }),
65
- );
66
-
67
- expect(captureSpy).toHaveBeenCalledWith(
68
- "oss.runtime.copilot_request_created",
69
- expect.objectContaining({
70
- requestType: "run",
71
- "cloud.api_key_provided": false,
72
- }),
73
- );
74
- });
75
-
76
- it("includes cloud.public_api_key on request when header is present", async () => {
77
- const runtime = new CopilotRuntime({ agents: { default: makeAgent() } });
78
- const endpoint = createCopilotHonoHandler({ runtime, basePath: "/" });
79
-
80
- await endpoint.fetch(
81
- new Request("https://example.com/agent/default/run", {
82
- method: "POST",
83
- headers: {
84
- "Content-Type": "application/json",
85
- "x-copilotcloud-public-api-key": "ck_pub_test_123",
86
- },
87
- body: JSON.stringify({ messages: [], state: {}, threadId: "t1" }),
88
- }),
89
- );
90
-
91
- expect(captureSpy).toHaveBeenCalledWith(
92
- "oss.runtime.copilot_request_created",
93
- expect.objectContaining({
94
- "cloud.api_key_provided": true,
95
- "cloud.public_api_key": "ck_pub_test_123",
96
- }),
97
- );
98
- });
99
- });