@copilotkit/runtime 1.76.0 → 1.77.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/dist/_virtual/_rolldown/runtime.mjs +1 -25
  2. package/dist/lib/runtime/copilot-runtime.cjs +1 -0
  3. package/dist/lib/runtime/copilot-runtime.cjs.map +1 -1
  4. package/dist/lib/runtime/copilot-runtime.d.cts +1 -0
  5. package/dist/lib/runtime/copilot-runtime.d.cts.map +1 -1
  6. package/dist/lib/runtime/copilot-runtime.d.mts +1 -0
  7. package/dist/lib/runtime/copilot-runtime.d.mts.map +1 -1
  8. package/dist/lib/runtime/copilot-runtime.mjs +1 -0
  9. package/dist/lib/runtime/copilot-runtime.mjs.map +1 -1
  10. package/dist/lib/telemetry-client.cjs +1 -1
  11. package/dist/lib/telemetry-client.mjs +1 -1
  12. package/dist/package.cjs +6 -6
  13. package/dist/package.mjs +6 -6
  14. package/dist/v2/runtime/core/channel-manager.cjs +15 -15
  15. package/dist/v2/runtime/core/channel-manager.cjs.map +1 -1
  16. package/dist/v2/runtime/core/channel-manager.d.cts.map +1 -1
  17. package/dist/v2/runtime/core/channel-manager.d.mts.map +1 -1
  18. package/dist/v2/runtime/core/channel-manager.mjs +15 -15
  19. package/dist/v2/runtime/core/channel-manager.mjs.map +1 -1
  20. package/dist/v2/runtime/core/fetch-handler.cjs +16 -1
  21. package/dist/v2/runtime/core/fetch-handler.cjs.map +1 -1
  22. package/dist/v2/runtime/core/fetch-handler.d.cts.map +1 -1
  23. package/dist/v2/runtime/core/fetch-handler.d.mts.map +1 -1
  24. package/dist/v2/runtime/core/fetch-handler.mjs +16 -1
  25. package/dist/v2/runtime/core/fetch-handler.mjs.map +1 -1
  26. package/dist/v2/runtime/core/fetch-router.cjs +8 -0
  27. package/dist/v2/runtime/core/fetch-router.cjs.map +1 -1
  28. package/dist/v2/runtime/core/fetch-router.mjs +8 -0
  29. package/dist/v2/runtime/core/fetch-router.mjs.map +1 -1
  30. package/dist/v2/runtime/core/hooks.cjs.map +1 -1
  31. package/dist/v2/runtime/core/hooks.d.cts +3 -0
  32. package/dist/v2/runtime/core/hooks.d.cts.map +1 -1
  33. package/dist/v2/runtime/core/hooks.d.mts +3 -0
  34. package/dist/v2/runtime/core/hooks.d.mts.map +1 -1
  35. package/dist/v2/runtime/core/hooks.mjs.map +1 -1
  36. package/dist/v2/runtime/core/package-info.cjs +10 -0
  37. package/dist/v2/runtime/core/package-info.cjs.map +1 -0
  38. package/dist/v2/runtime/core/package-info.mjs +8 -0
  39. package/dist/v2/runtime/core/package-info.mjs.map +1 -0
  40. package/dist/v2/runtime/core/runtime.cjs +4 -4
  41. package/dist/v2/runtime/core/runtime.cjs.map +1 -1
  42. package/dist/v2/runtime/core/runtime.d.cts +7 -1
  43. package/dist/v2/runtime/core/runtime.d.cts.map +1 -1
  44. package/dist/v2/runtime/core/runtime.d.mts +7 -1
  45. package/dist/v2/runtime/core/runtime.d.mts.map +1 -1
  46. package/dist/v2/runtime/core/runtime.mjs +4 -5
  47. package/dist/v2/runtime/core/runtime.mjs.map +1 -1
  48. package/dist/v2/runtime/endpoints/single-route-helpers.cjs +1 -0
  49. package/dist/v2/runtime/endpoints/single-route-helpers.cjs.map +1 -1
  50. package/dist/v2/runtime/endpoints/single-route-helpers.mjs +1 -0
  51. package/dist/v2/runtime/endpoints/single-route-helpers.mjs.map +1 -1
  52. package/dist/v2/runtime/handlers/handle-trajectory-connect.cjs +41 -0
  53. package/dist/v2/runtime/handlers/handle-trajectory-connect.cjs.map +1 -0
  54. package/dist/v2/runtime/handlers/handle-trajectory-connect.mjs +40 -0
  55. package/dist/v2/runtime/handlers/handle-trajectory-connect.mjs.map +1 -0
  56. package/dist/v2/runtime/handlers/intelligence/memories.cjs +5 -17
  57. package/dist/v2/runtime/handlers/intelligence/memories.cjs.map +1 -1
  58. package/dist/v2/runtime/handlers/intelligence/memories.mjs +5 -17
  59. package/dist/v2/runtime/handlers/intelligence/memories.mjs.map +1 -1
  60. package/dist/v2/runtime/handlers/intelligence/run.cjs +43 -16
  61. package/dist/v2/runtime/handlers/intelligence/run.cjs.map +1 -1
  62. package/dist/v2/runtime/handlers/intelligence/run.mjs +43 -16
  63. package/dist/v2/runtime/handlers/intelligence/run.mjs.map +1 -1
  64. package/dist/v2/runtime/handlers/intelligence/threads.cjs +4 -3
  65. package/dist/v2/runtime/handlers/intelligence/threads.cjs.map +1 -1
  66. package/dist/v2/runtime/handlers/intelligence/threads.mjs +4 -3
  67. package/dist/v2/runtime/handlers/intelligence/threads.mjs.map +1 -1
  68. package/dist/v2/runtime/handlers/shared/mcp-apps-servers.cjs +1 -2
  69. package/dist/v2/runtime/handlers/shared/mcp-apps-servers.cjs.map +1 -1
  70. package/dist/v2/runtime/handlers/shared/mcp-apps-servers.mjs +1 -2
  71. package/dist/v2/runtime/handlers/shared/mcp-apps-servers.mjs.map +1 -1
  72. package/dist/v2/runtime/handlers/shared/platform-error.cjs +40 -0
  73. package/dist/v2/runtime/handlers/shared/platform-error.cjs.map +1 -0
  74. package/dist/v2/runtime/handlers/shared/platform-error.mjs +40 -0
  75. package/dist/v2/runtime/handlers/shared/platform-error.mjs.map +1 -0
  76. package/dist/v2/runtime/intelligence-platform/client.cjs +43 -4
  77. package/dist/v2/runtime/intelligence-platform/client.cjs.map +1 -1
  78. package/dist/v2/runtime/intelligence-platform/client.d.cts +31 -0
  79. package/dist/v2/runtime/intelligence-platform/client.d.cts.map +1 -1
  80. package/dist/v2/runtime/intelligence-platform/client.d.mts +31 -0
  81. package/dist/v2/runtime/intelligence-platform/client.d.mts.map +1 -1
  82. package/dist/v2/runtime/intelligence-platform/client.mjs +43 -4
  83. package/dist/v2/runtime/intelligence-platform/client.mjs.map +1 -1
  84. package/dist/v2/runtime/intelligence-platform/thread-lock-heartbeat.cjs +143 -0
  85. package/dist/v2/runtime/intelligence-platform/thread-lock-heartbeat.cjs.map +1 -0
  86. package/dist/v2/runtime/intelligence-platform/thread-lock-heartbeat.mjs +142 -0
  87. package/dist/v2/runtime/intelligence-platform/thread-lock-heartbeat.mjs.map +1 -0
  88. package/dist/v2/runtime/intelligence-platform/trajectories.cjs +80 -0
  89. package/dist/v2/runtime/intelligence-platform/trajectories.cjs.map +1 -0
  90. package/dist/v2/runtime/intelligence-platform/trajectories.d.cts +12 -0
  91. package/dist/v2/runtime/intelligence-platform/trajectories.d.cts.map +1 -0
  92. package/dist/v2/runtime/intelligence-platform/trajectories.d.mts +12 -0
  93. package/dist/v2/runtime/intelligence-platform/trajectories.d.mts.map +1 -0
  94. package/dist/v2/runtime/intelligence-platform/trajectories.mjs +76 -0
  95. package/dist/v2/runtime/intelligence-platform/trajectories.mjs.map +1 -0
  96. package/dist/v2/runtime/runner/intelligence.cjs +8 -1
  97. package/dist/v2/runtime/runner/intelligence.cjs.map +1 -1
  98. package/dist/v2/runtime/runner/intelligence.d.cts +12 -0
  99. package/dist/v2/runtime/runner/intelligence.d.cts.map +1 -1
  100. package/dist/v2/runtime/runner/intelligence.d.mts +12 -0
  101. package/dist/v2/runtime/runner/intelligence.d.mts.map +1 -1
  102. package/dist/v2/runtime/runner/intelligence.mjs +8 -1
  103. package/dist/v2/runtime/runner/intelligence.mjs.map +1 -1
  104. package/dist/v2/runtime/telemetry/telemetry-client.cjs +3 -4
  105. package/dist/v2/runtime/telemetry/telemetry-client.cjs.map +1 -1
  106. package/dist/v2/runtime/telemetry/telemetry-client.d.cts.map +1 -1
  107. package/dist/v2/runtime/telemetry/telemetry-client.d.mts.map +1 -1
  108. package/dist/v2/runtime/telemetry/telemetry-client.mjs +3 -5
  109. package/dist/v2/runtime/telemetry/telemetry-client.mjs.map +1 -1
  110. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"threads.cjs","names":["errorResponse","isIntelligenceRuntime","isHandlerResponse","resolveIntelligenceUser","isValidIdentifier","supportsLocalThreadEndpoints"],"sources":["../../../../../src/v2/runtime/handlers/intelligence/threads.ts"],"sourcesContent":["import type {\n CopilotIntelligenceRuntimeLike,\n CopilotRuntimeLike,\n} from \"../../core/runtime\";\nimport { isIntelligenceRuntime } from \"../../core/runtime\";\nimport { logger } from \"@copilotkit/shared\";\nimport { errorResponse, isHandlerResponse } from \"../shared/json-response\";\nimport { isValidIdentifier } from \"../shared/intelligence-utils\";\nimport { resolveIntelligenceUser } from \"../shared/resolve-intelligence-user\";\nimport { supportsLocalThreadEndpoints } from \"../../runner/agent-runner\";\n\ninterface ThreadsHandlerParams {\n runtime: CopilotRuntimeLike;\n request: Request;\n}\n\ninterface ThreadMutationParams extends ThreadsHandlerParams {\n threadId: string;\n}\n\ninterface ThreadMutationContext {\n userId: string;\n agentId: string;\n body: Record<string, unknown>;\n}\n\nasync function parseJsonBody(\n request: Request,\n): Promise<Record<string, unknown> | Response> {\n try {\n return (await request.json()) as Record<string, unknown>;\n } catch (error) {\n logger.error({ err: error }, \"Malformed JSON in request body\");\n return errorResponse(\"Invalid request body\", 400);\n }\n}\n\nfunction requireIntelligenceRuntime(\n runtime: CopilotRuntimeLike,\n): CopilotIntelligenceRuntimeLike | Response {\n if (!isIntelligenceRuntime(runtime)) {\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n }\n\n return runtime;\n}\n\nasync function resolveThreadMutationContext(\n runtime: CopilotIntelligenceRuntimeLike,\n request: Request,\n): Promise<ThreadMutationContext | Response> {\n const body = await parseJsonBody(request);\n if (isHandlerResponse(body)) return body;\n\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n const agentId = body.agentId;\n if (!isValidIdentifier(agentId)) {\n return errorResponse(\"Valid agentId is required\", 400);\n }\n\n return {\n body,\n userId: user.id,\n agentId,\n };\n}\n\nexport async function handleListThreads({\n runtime,\n request,\n}: ThreadsHandlerParams): Promise<Response> {\n // CopilotKit Intelligence path\n if (isIntelligenceRuntime(runtime)) {\n try {\n const url = new URL(request.url);\n const agentId = url.searchParams.get(\"agentId\");\n const includeArchived =\n url.searchParams.get(\"includeArchived\") === \"true\";\n const limitParam = url.searchParams.get(\"limit\");\n const cursor = url.searchParams.get(\"cursor\");\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n if (!isValidIdentifier(agentId)) {\n return errorResponse(\"Valid agentId query param is required\", 400);\n }\n\n const data = await runtime.intelligence.listThreads({\n userId: user.id,\n agentId,\n ...(includeArchived ? { includeArchived: true } : {}),\n ...(limitParam ? { limit: Number(limitParam) } : {}),\n ...(cursor ? { cursor } : {}),\n });\n\n return Response.json(data);\n } catch (error) {\n logger.error({ err: error }, \"Error listing threads\");\n return errorResponse(\"Failed to list threads\", 500);\n }\n }\n\n // Local in-memory fallback — useful for local development without Intelligence\n if (supportsLocalThreadEndpoints(runtime.runner)) {\n const url = new URL(request.url);\n const agentId = url.searchParams.get(\"agentId\");\n let threads = runtime.runner.listThreads();\n if (agentId) {\n threads = threads.filter((t) => t.agentId === agentId);\n }\n return Response.json({ threads, nextCursor: null });\n }\n\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n}\n\n/**\n * Clears all in-memory thread history for the local-dev InMemory fallback.\n *\n * The local-dev fallback exposes this so consumers (e.g. the demo's Clear\n * button) can wipe in-memory thread history without restarting the runtime.\n * Intentionally a no-op when CopilotKit Intelligence is configured: real\n * thread history lives in the database and must not be wiped by a\n * client-side page load.\n */\nexport function handleClearThreads({\n runtime,\n}: ThreadsHandlerParams): Response {\n if (supportsLocalThreadEndpoints(runtime.runner)) {\n runtime.runner.clearThreads();\n }\n return new Response(null, { status: 204 });\n}\n\nexport async function handleUpdateThread({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const mutation = await resolveThreadMutationContext(\n intelligenceRuntime,\n request,\n );\n if (isHandlerResponse(mutation)) return mutation;\n\n // The public SDK accepts trusted updates; browser fields must be allowlisted.\n const updates: Record<string, unknown> = {};\n for (const key of [\"name\", \"archived\"]) {\n if (Object.prototype.hasOwnProperty.call(mutation.body, key)) {\n updates[key] = mutation.body[key];\n }\n }\n\n const thread = await intelligenceRuntime.intelligence.updateThread({\n threadId,\n userId: mutation.userId,\n agentId: mutation.agentId,\n updates,\n });\n\n return Response.json(thread);\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error updating thread\");\n return errorResponse(\"Failed to update thread\", 500);\n }\n}\n\nexport async function handleSubscribeToThreads({\n runtime,\n request,\n}: ThreadsHandlerParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const user = await resolveIntelligenceUser({\n runtime: intelligenceRuntime,\n request,\n });\n if (isHandlerResponse(user)) return user;\n\n const credentials =\n await intelligenceRuntime.intelligence.ɵsubscribeToThreads({\n userId: user.id,\n });\n\n return Response.json({ joinToken: credentials.joinToken });\n } catch (error) {\n logger.error({ err: error }, \"Error subscribing to threads\");\n return errorResponse(\"Failed to subscribe to threads\", 500);\n }\n}\n\nexport async function handleArchiveThread({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const mutation = await resolveThreadMutationContext(\n intelligenceRuntime,\n request,\n );\n if (isHandlerResponse(mutation)) return mutation;\n\n await intelligenceRuntime.intelligence.archiveThread({\n threadId,\n userId: mutation.userId,\n agentId: mutation.agentId,\n });\n\n return Response.json({ threadId, archived: true });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error archiving thread\");\n return errorResponse(\"Failed to archive thread\", 500);\n }\n}\n\nexport async function handleDeleteThread({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const mutation = await resolveThreadMutationContext(\n intelligenceRuntime,\n request,\n );\n if (isHandlerResponse(mutation)) return mutation;\n\n await intelligenceRuntime.intelligence.deleteThread({\n threadId,\n userId: mutation.userId,\n agentId: mutation.agentId,\n });\n\n return Response.json({ threadId, deleted: true });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error deleting thread\");\n return errorResponse(\"Failed to delete thread\", 500);\n }\n}\n\nexport async function handleGetThreadMessages({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n // CopilotKit Intelligence path\n if (isIntelligenceRuntime(runtime)) {\n try {\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n const data = await runtime.intelligence.getThreadMessages({\n threadId,\n userId: user.id,\n });\n return Response.json(data);\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error fetching thread messages\");\n return errorResponse(\"Failed to fetch thread messages\", 500);\n }\n }\n\n // Local in-memory fallback — useful for local development without Intelligence\n if (supportsLocalThreadEndpoints(runtime.runner)) {\n const messages = runtime.runner.getThreadMessages(threadId);\n // Map ag-ui Message objects to the same shape CopilotKit Intelligence\n // returns. Switching on the discriminant `role` lets each branch read\n // the narrowed message arm directly, instead of laundering through\n // `Record<string, unknown>` and chained `as` casts.\n const mapped = messages.map((msg) => {\n switch (msg.role) {\n case \"assistant\": {\n const toolCalls = msg.toolCalls ?? [];\n return {\n id: msg.id,\n role: msg.role,\n ...(msg.content !== undefined ? { content: msg.content } : {}),\n ...(toolCalls.length > 0\n ? {\n toolCalls: toolCalls.map((tc) => ({\n id: tc.id,\n name: tc.function.name,\n args: tc.function.arguments,\n })),\n }\n : {}),\n };\n }\n case \"tool\":\n return {\n id: msg.id,\n role: msg.role,\n content: msg.content,\n toolCallId: msg.toolCallId,\n };\n default:\n return {\n id: msg.id,\n role: msg.role,\n ...(\"content\" in msg && msg.content !== undefined\n ? { content: msg.content }\n : {}),\n };\n }\n });\n return Response.json({ messages: mapped });\n }\n\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n}\n\nexport async function handleGetThreadEvents({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n // CopilotKit Intelligence path. Delegates to the platform's `_inspect`\n // endpoint (Intelligence PR #144). Auth still flows through the standard\n // identifyUser → API key path; threadId scoping happens server-side.\n if (isIntelligenceRuntime(runtime)) {\n try {\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n const data = await runtime.intelligence.getThreadEvents({ threadId });\n // Strip platform-internal fields (`decodeErrorRowIds`, `truncated`)\n // before returning to the inspector — those describe persistence-side\n // concerns the inspector currently has no UI for. The shape becomes\n // `{ events }`, matching the in-memory branch below.\n return Response.json({ events: data.events });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error fetching thread events\");\n return errorResponse(\"Failed to fetch thread events\", 500);\n }\n }\n\n // Local in-memory fallback\n if (supportsLocalThreadEndpoints(runtime.runner)) {\n try {\n const events = runtime.runner.getThreadEvents(threadId);\n return Response.json({ events });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error fetching thread events\");\n return errorResponse(\"Failed to fetch thread events\", 500);\n }\n }\n\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n}\n\nexport async function handleGetThreadState({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n // CopilotKit Intelligence path. Delegates to the platform's `_inspect`\n // state endpoint, which folds STATE_DELTA events onto the latest\n // STATE_SNAPSHOT to return the thread's current state.\n if (isIntelligenceRuntime(runtime)) {\n try {\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n const data = await runtime.intelligence.getThreadState({ threadId });\n // Flatten the discriminated `ThreadStateResult` to the wire shape the\n // inspector consumes (`{ state: <value> | null }`). Missing snapshot\n // and decode-error both surface as `null`; the inspector renders an\n // empty state branch for null and the platform's decode-error case is\n // already logged platform-side.\n const state = data.kind === \"snapshot\" ? data.state : null;\n return Response.json({ state });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error fetching thread state\");\n return errorResponse(\"Failed to fetch thread state\", 500);\n }\n }\n\n if (supportsLocalThreadEndpoints(runtime.runner)) {\n try {\n const state = runtime.runner.getThreadState(threadId);\n return Response.json({ state });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error fetching thread state\");\n return errorResponse(\"Failed to fetch thread state\", 500);\n }\n }\n\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"threads.cjs","names":["errorResponse","isIntelligenceRuntime","isHandlerResponse","resolveIntelligenceUser","isValidIdentifier","supportsLocalThreadEndpoints","platformErrorResponse"],"sources":["../../../../../src/v2/runtime/handlers/intelligence/threads.ts"],"sourcesContent":["import type {\n CopilotIntelligenceRuntimeLike,\n CopilotRuntimeLike,\n} from \"../../core/runtime\";\nimport { isIntelligenceRuntime } from \"../../core/runtime\";\nimport { logger } from \"@copilotkit/shared\";\nimport { errorResponse, isHandlerResponse } from \"../shared/json-response\";\nimport { isValidIdentifier } from \"../shared/intelligence-utils\";\nimport { resolveIntelligenceUser } from \"../shared/resolve-intelligence-user\";\nimport { platformErrorResponse } from \"../shared/platform-error\";\nimport { supportsLocalThreadEndpoints } from \"../../runner/agent-runner\";\n\ninterface ThreadsHandlerParams {\n runtime: CopilotRuntimeLike;\n request: Request;\n}\n\ninterface ThreadMutationParams extends ThreadsHandlerParams {\n threadId: string;\n}\n\ninterface ThreadMutationContext {\n userId: string;\n agentId: string;\n body: Record<string, unknown>;\n}\n\nasync function parseJsonBody(\n request: Request,\n): Promise<Record<string, unknown> | Response> {\n try {\n return (await request.json()) as Record<string, unknown>;\n } catch (error) {\n logger.error({ err: error }, \"Malformed JSON in request body\");\n return errorResponse(\"Invalid request body\", 400);\n }\n}\n\nfunction requireIntelligenceRuntime(\n runtime: CopilotRuntimeLike,\n): CopilotIntelligenceRuntimeLike | Response {\n if (!isIntelligenceRuntime(runtime)) {\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n }\n\n return runtime;\n}\n\nasync function resolveThreadMutationContext(\n runtime: CopilotIntelligenceRuntimeLike,\n request: Request,\n): Promise<ThreadMutationContext | Response> {\n const body = await parseJsonBody(request);\n if (isHandlerResponse(body)) return body;\n\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n const agentId = body.agentId;\n if (!isValidIdentifier(agentId)) {\n return errorResponse(\"Valid agentId is required\", 400);\n }\n\n return {\n body,\n userId: user.id,\n agentId,\n };\n}\n\nexport async function handleListThreads({\n runtime,\n request,\n}: ThreadsHandlerParams): Promise<Response> {\n // CopilotKit Intelligence path\n if (isIntelligenceRuntime(runtime)) {\n try {\n const url = new URL(request.url);\n const agentId = url.searchParams.get(\"agentId\");\n const includeArchived =\n url.searchParams.get(\"includeArchived\") === \"true\";\n const limitParam = url.searchParams.get(\"limit\");\n const cursor = url.searchParams.get(\"cursor\");\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n if (!isValidIdentifier(agentId)) {\n return errorResponse(\"Valid agentId query param is required\", 400);\n }\n\n const data = await runtime.intelligence.listThreads({\n userId: user.id,\n agentId,\n ...(includeArchived ? { includeArchived: true } : {}),\n ...(limitParam ? { limit: Number(limitParam) } : {}),\n ...(cursor ? { cursor } : {}),\n });\n\n return Response.json(data);\n } catch (error) {\n logger.error({ err: error }, \"Error listing threads\");\n return errorResponse(\"Failed to list threads\", 500);\n }\n }\n\n // Local in-memory fallback — useful for local development without Intelligence\n if (supportsLocalThreadEndpoints(runtime.runner)) {\n const url = new URL(request.url);\n const agentId = url.searchParams.get(\"agentId\");\n let threads = runtime.runner.listThreads();\n if (agentId) {\n threads = threads.filter((t) => t.agentId === agentId);\n }\n return Response.json({ threads, nextCursor: null });\n }\n\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n}\n\n/**\n * Clears all in-memory thread history for the local-dev InMemory fallback.\n *\n * The local-dev fallback exposes this so consumers (e.g. the demo's Clear\n * button) can wipe in-memory thread history without restarting the runtime.\n * Intentionally a no-op when CopilotKit Intelligence is configured: real\n * thread history lives in the database and must not be wiped by a\n * client-side page load.\n */\nexport function handleClearThreads({\n runtime,\n}: ThreadsHandlerParams): Response {\n if (supportsLocalThreadEndpoints(runtime.runner)) {\n runtime.runner.clearThreads();\n }\n return new Response(null, { status: 204 });\n}\n\nexport async function handleUpdateThread({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const mutation = await resolveThreadMutationContext(\n intelligenceRuntime,\n request,\n );\n if (isHandlerResponse(mutation)) return mutation;\n\n // The public SDK accepts trusted updates; browser fields must be allowlisted.\n const updates: Record<string, unknown> = {};\n for (const key of [\"name\", \"archived\"]) {\n if (Object.prototype.hasOwnProperty.call(mutation.body, key)) {\n updates[key] = mutation.body[key];\n }\n }\n\n const thread = await intelligenceRuntime.intelligence.updateThread({\n threadId,\n userId: mutation.userId,\n agentId: mutation.agentId,\n updates,\n });\n\n return Response.json(thread);\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error updating thread\");\n return errorResponse(\"Failed to update thread\", 500);\n }\n}\n\nexport async function handleSubscribeToThreads({\n runtime,\n request,\n}: ThreadsHandlerParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const user = await resolveIntelligenceUser({\n runtime: intelligenceRuntime,\n request,\n });\n if (isHandlerResponse(user)) return user;\n\n const credentials =\n await intelligenceRuntime.intelligence.ɵsubscribeToThreads({\n userId: user.id,\n });\n\n return Response.json({ joinToken: credentials.joinToken });\n } catch (error) {\n logger.error({ err: error }, \"Error subscribing to threads\");\n return errorResponse(\"Failed to subscribe to threads\", 500);\n }\n}\n\nexport async function handleArchiveThread({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const mutation = await resolveThreadMutationContext(\n intelligenceRuntime,\n request,\n );\n if (isHandlerResponse(mutation)) return mutation;\n\n await intelligenceRuntime.intelligence.archiveThread({\n threadId,\n userId: mutation.userId,\n agentId: mutation.agentId,\n });\n\n return Response.json({ threadId, archived: true });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error archiving thread\");\n return errorResponse(\"Failed to archive thread\", 500);\n }\n}\n\nexport async function handleDeleteThread({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const mutation = await resolveThreadMutationContext(\n intelligenceRuntime,\n request,\n );\n if (isHandlerResponse(mutation)) return mutation;\n\n await intelligenceRuntime.intelligence.deleteThread({\n threadId,\n userId: mutation.userId,\n agentId: mutation.agentId,\n });\n\n return Response.json({ threadId, deleted: true });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error deleting thread\");\n return errorResponse(\"Failed to delete thread\", 500);\n }\n}\n\nexport async function handleGetThreadMessages({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n // CopilotKit Intelligence path\n if (isIntelligenceRuntime(runtime)) {\n try {\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n const data = await runtime.intelligence.getThreadMessages({\n threadId,\n userId: user.id,\n });\n return Response.json(data);\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error fetching thread messages\");\n return platformErrorResponse(error, \"Failed to fetch thread messages\");\n }\n }\n\n // Local in-memory fallback — useful for local development without Intelligence\n if (supportsLocalThreadEndpoints(runtime.runner)) {\n const messages = runtime.runner.getThreadMessages(threadId);\n // Map ag-ui Message objects to the same shape CopilotKit Intelligence\n // returns. Switching on the discriminant `role` lets each branch read\n // the narrowed message arm directly, instead of laundering through\n // `Record<string, unknown>` and chained `as` casts.\n const mapped = messages.map((msg) => {\n switch (msg.role) {\n case \"assistant\": {\n const toolCalls = msg.toolCalls ?? [];\n return {\n id: msg.id,\n role: msg.role,\n ...(msg.content !== undefined ? { content: msg.content } : {}),\n ...(toolCalls.length > 0\n ? {\n toolCalls: toolCalls.map((tc) => ({\n id: tc.id,\n name: tc.function.name,\n args: tc.function.arguments,\n })),\n }\n : {}),\n };\n }\n case \"tool\":\n return {\n id: msg.id,\n role: msg.role,\n content: msg.content,\n toolCallId: msg.toolCallId,\n };\n default:\n return {\n id: msg.id,\n role: msg.role,\n ...(\"content\" in msg && msg.content !== undefined\n ? { content: msg.content }\n : {}),\n };\n }\n });\n return Response.json({ messages: mapped });\n }\n\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n}\n\nexport async function handleGetThreadEvents({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n // CopilotKit Intelligence path. Delegates to the platform's `_inspect`\n // endpoint (Intelligence PR #144). Auth still flows through the standard\n // identifyUser → API key path; threadId scoping happens server-side.\n if (isIntelligenceRuntime(runtime)) {\n try {\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n const data = await runtime.intelligence.getThreadEvents({ threadId });\n // Strip platform-internal fields (`decodeErrorRowIds`, `truncated`)\n // before returning to the inspector — those describe persistence-side\n // concerns the inspector currently has no UI for. The shape becomes\n // `{ events }`, matching the in-memory branch below.\n return Response.json({ events: data.events });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error fetching thread events\");\n return platformErrorResponse(error, \"Failed to fetch thread events\");\n }\n }\n\n // Local in-memory fallback\n if (supportsLocalThreadEndpoints(runtime.runner)) {\n try {\n const events = runtime.runner.getThreadEvents(threadId);\n return Response.json({ events });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error fetching thread events\");\n return errorResponse(\"Failed to fetch thread events\", 500);\n }\n }\n\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n}\n\nexport async function handleGetThreadState({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n // CopilotKit Intelligence path. Delegates to the platform's `_inspect`\n // state endpoint, which folds STATE_DELTA events onto the latest\n // STATE_SNAPSHOT to return the thread's current state.\n if (isIntelligenceRuntime(runtime)) {\n try {\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n const data = await runtime.intelligence.getThreadState({ threadId });\n // Flatten the discriminated `ThreadStateResult` to the wire shape the\n // inspector consumes (`{ state: <value> | null }`). Missing snapshot\n // and decode-error both surface as `null`; the inspector renders an\n // empty state branch for null and the platform's decode-error case is\n // already logged platform-side.\n const state = data.kind === \"snapshot\" ? data.state : null;\n return Response.json({ state });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error fetching thread state\");\n return platformErrorResponse(error, \"Failed to fetch thread state\");\n }\n }\n\n if (supportsLocalThreadEndpoints(runtime.runner)) {\n try {\n const state = runtime.runner.getThreadState(threadId);\n return Response.json({ state });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error fetching thread state\");\n return errorResponse(\"Failed to fetch thread state\", 500);\n }\n }\n\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n}\n"],"mappings":"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"}
@@ -4,6 +4,7 @@ import { isIntelligenceRuntime } from "../../core/runtime.mjs";
4
4
  import { errorResponse, isHandlerResponse } from "../shared/json-response.mjs";
5
5
  import { isValidIdentifier } from "../shared/intelligence-utils.mjs";
6
6
  import { resolveIntelligenceUser } from "../shared/resolve-intelligence-user.mjs";
7
+ import { platformErrorResponse } from "../shared/platform-error.mjs";
7
8
  import { logger } from "@copilotkit/shared";
8
9
 
9
10
  //#region src/v2/runtime/handlers/intelligence/threads.ts
@@ -186,7 +187,7 @@ async function handleGetThreadMessages({ runtime, request, threadId }) {
186
187
  err: error,
187
188
  threadId
188
189
  }, "Error fetching thread messages");
189
- return errorResponse("Failed to fetch thread messages", 500);
190
+ return platformErrorResponse(error, "Failed to fetch thread messages");
190
191
  }
191
192
  if (supportsLocalThreadEndpoints(runtime.runner)) {
192
193
  const mapped = runtime.runner.getThreadMessages(threadId).map((msg) => {
@@ -235,7 +236,7 @@ async function handleGetThreadEvents({ runtime, request, threadId }) {
235
236
  err: error,
236
237
  threadId
237
238
  }, "Error fetching thread events");
238
- return errorResponse("Failed to fetch thread events", 500);
239
+ return platformErrorResponse(error, "Failed to fetch thread events");
239
240
  }
240
241
  if (supportsLocalThreadEndpoints(runtime.runner)) try {
241
242
  const events = runtime.runner.getThreadEvents(threadId);
@@ -264,7 +265,7 @@ async function handleGetThreadState({ runtime, request, threadId }) {
264
265
  err: error,
265
266
  threadId
266
267
  }, "Error fetching thread state");
267
- return errorResponse("Failed to fetch thread state", 500);
268
+ return platformErrorResponse(error, "Failed to fetch thread state");
268
269
  }
269
270
  if (supportsLocalThreadEndpoints(runtime.runner)) try {
270
271
  const state = runtime.runner.getThreadState(threadId);
@@ -1 +1 @@
1
- {"version":3,"file":"threads.mjs","names":[],"sources":["../../../../../src/v2/runtime/handlers/intelligence/threads.ts"],"sourcesContent":["import type {\n CopilotIntelligenceRuntimeLike,\n CopilotRuntimeLike,\n} from \"../../core/runtime\";\nimport { isIntelligenceRuntime } from \"../../core/runtime\";\nimport { logger } from \"@copilotkit/shared\";\nimport { errorResponse, isHandlerResponse } from \"../shared/json-response\";\nimport { isValidIdentifier } from \"../shared/intelligence-utils\";\nimport { resolveIntelligenceUser } from \"../shared/resolve-intelligence-user\";\nimport { supportsLocalThreadEndpoints } from \"../../runner/agent-runner\";\n\ninterface ThreadsHandlerParams {\n runtime: CopilotRuntimeLike;\n request: Request;\n}\n\ninterface ThreadMutationParams extends ThreadsHandlerParams {\n threadId: string;\n}\n\ninterface ThreadMutationContext {\n userId: string;\n agentId: string;\n body: Record<string, unknown>;\n}\n\nasync function parseJsonBody(\n request: Request,\n): Promise<Record<string, unknown> | Response> {\n try {\n return (await request.json()) as Record<string, unknown>;\n } catch (error) {\n logger.error({ err: error }, \"Malformed JSON in request body\");\n return errorResponse(\"Invalid request body\", 400);\n }\n}\n\nfunction requireIntelligenceRuntime(\n runtime: CopilotRuntimeLike,\n): CopilotIntelligenceRuntimeLike | Response {\n if (!isIntelligenceRuntime(runtime)) {\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n }\n\n return runtime;\n}\n\nasync function resolveThreadMutationContext(\n runtime: CopilotIntelligenceRuntimeLike,\n request: Request,\n): Promise<ThreadMutationContext | Response> {\n const body = await parseJsonBody(request);\n if (isHandlerResponse(body)) return body;\n\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n const agentId = body.agentId;\n if (!isValidIdentifier(agentId)) {\n return errorResponse(\"Valid agentId is required\", 400);\n }\n\n return {\n body,\n userId: user.id,\n agentId,\n };\n}\n\nexport async function handleListThreads({\n runtime,\n request,\n}: ThreadsHandlerParams): Promise<Response> {\n // CopilotKit Intelligence path\n if (isIntelligenceRuntime(runtime)) {\n try {\n const url = new URL(request.url);\n const agentId = url.searchParams.get(\"agentId\");\n const includeArchived =\n url.searchParams.get(\"includeArchived\") === \"true\";\n const limitParam = url.searchParams.get(\"limit\");\n const cursor = url.searchParams.get(\"cursor\");\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n if (!isValidIdentifier(agentId)) {\n return errorResponse(\"Valid agentId query param is required\", 400);\n }\n\n const data = await runtime.intelligence.listThreads({\n userId: user.id,\n agentId,\n ...(includeArchived ? { includeArchived: true } : {}),\n ...(limitParam ? { limit: Number(limitParam) } : {}),\n ...(cursor ? { cursor } : {}),\n });\n\n return Response.json(data);\n } catch (error) {\n logger.error({ err: error }, \"Error listing threads\");\n return errorResponse(\"Failed to list threads\", 500);\n }\n }\n\n // Local in-memory fallback — useful for local development without Intelligence\n if (supportsLocalThreadEndpoints(runtime.runner)) {\n const url = new URL(request.url);\n const agentId = url.searchParams.get(\"agentId\");\n let threads = runtime.runner.listThreads();\n if (agentId) {\n threads = threads.filter((t) => t.agentId === agentId);\n }\n return Response.json({ threads, nextCursor: null });\n }\n\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n}\n\n/**\n * Clears all in-memory thread history for the local-dev InMemory fallback.\n *\n * The local-dev fallback exposes this so consumers (e.g. the demo's Clear\n * button) can wipe in-memory thread history without restarting the runtime.\n * Intentionally a no-op when CopilotKit Intelligence is configured: real\n * thread history lives in the database and must not be wiped by a\n * client-side page load.\n */\nexport function handleClearThreads({\n runtime,\n}: ThreadsHandlerParams): Response {\n if (supportsLocalThreadEndpoints(runtime.runner)) {\n runtime.runner.clearThreads();\n }\n return new Response(null, { status: 204 });\n}\n\nexport async function handleUpdateThread({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const mutation = await resolveThreadMutationContext(\n intelligenceRuntime,\n request,\n );\n if (isHandlerResponse(mutation)) return mutation;\n\n // The public SDK accepts trusted updates; browser fields must be allowlisted.\n const updates: Record<string, unknown> = {};\n for (const key of [\"name\", \"archived\"]) {\n if (Object.prototype.hasOwnProperty.call(mutation.body, key)) {\n updates[key] = mutation.body[key];\n }\n }\n\n const thread = await intelligenceRuntime.intelligence.updateThread({\n threadId,\n userId: mutation.userId,\n agentId: mutation.agentId,\n updates,\n });\n\n return Response.json(thread);\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error updating thread\");\n return errorResponse(\"Failed to update thread\", 500);\n }\n}\n\nexport async function handleSubscribeToThreads({\n runtime,\n request,\n}: ThreadsHandlerParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const user = await resolveIntelligenceUser({\n runtime: intelligenceRuntime,\n request,\n });\n if (isHandlerResponse(user)) return user;\n\n const credentials =\n await intelligenceRuntime.intelligence.ɵsubscribeToThreads({\n userId: user.id,\n });\n\n return Response.json({ joinToken: credentials.joinToken });\n } catch (error) {\n logger.error({ err: error }, \"Error subscribing to threads\");\n return errorResponse(\"Failed to subscribe to threads\", 500);\n }\n}\n\nexport async function handleArchiveThread({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const mutation = await resolveThreadMutationContext(\n intelligenceRuntime,\n request,\n );\n if (isHandlerResponse(mutation)) return mutation;\n\n await intelligenceRuntime.intelligence.archiveThread({\n threadId,\n userId: mutation.userId,\n agentId: mutation.agentId,\n });\n\n return Response.json({ threadId, archived: true });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error archiving thread\");\n return errorResponse(\"Failed to archive thread\", 500);\n }\n}\n\nexport async function handleDeleteThread({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const mutation = await resolveThreadMutationContext(\n intelligenceRuntime,\n request,\n );\n if (isHandlerResponse(mutation)) return mutation;\n\n await intelligenceRuntime.intelligence.deleteThread({\n threadId,\n userId: mutation.userId,\n agentId: mutation.agentId,\n });\n\n return Response.json({ threadId, deleted: true });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error deleting thread\");\n return errorResponse(\"Failed to delete thread\", 500);\n }\n}\n\nexport async function handleGetThreadMessages({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n // CopilotKit Intelligence path\n if (isIntelligenceRuntime(runtime)) {\n try {\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n const data = await runtime.intelligence.getThreadMessages({\n threadId,\n userId: user.id,\n });\n return Response.json(data);\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error fetching thread messages\");\n return errorResponse(\"Failed to fetch thread messages\", 500);\n }\n }\n\n // Local in-memory fallback — useful for local development without Intelligence\n if (supportsLocalThreadEndpoints(runtime.runner)) {\n const messages = runtime.runner.getThreadMessages(threadId);\n // Map ag-ui Message objects to the same shape CopilotKit Intelligence\n // returns. Switching on the discriminant `role` lets each branch read\n // the narrowed message arm directly, instead of laundering through\n // `Record<string, unknown>` and chained `as` casts.\n const mapped = messages.map((msg) => {\n switch (msg.role) {\n case \"assistant\": {\n const toolCalls = msg.toolCalls ?? [];\n return {\n id: msg.id,\n role: msg.role,\n ...(msg.content !== undefined ? { content: msg.content } : {}),\n ...(toolCalls.length > 0\n ? {\n toolCalls: toolCalls.map((tc) => ({\n id: tc.id,\n name: tc.function.name,\n args: tc.function.arguments,\n })),\n }\n : {}),\n };\n }\n case \"tool\":\n return {\n id: msg.id,\n role: msg.role,\n content: msg.content,\n toolCallId: msg.toolCallId,\n };\n default:\n return {\n id: msg.id,\n role: msg.role,\n ...(\"content\" in msg && msg.content !== undefined\n ? { content: msg.content }\n : {}),\n };\n }\n });\n return Response.json({ messages: mapped });\n }\n\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n}\n\nexport async function handleGetThreadEvents({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n // CopilotKit Intelligence path. Delegates to the platform's `_inspect`\n // endpoint (Intelligence PR #144). Auth still flows through the standard\n // identifyUser → API key path; threadId scoping happens server-side.\n if (isIntelligenceRuntime(runtime)) {\n try {\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n const data = await runtime.intelligence.getThreadEvents({ threadId });\n // Strip platform-internal fields (`decodeErrorRowIds`, `truncated`)\n // before returning to the inspector — those describe persistence-side\n // concerns the inspector currently has no UI for. The shape becomes\n // `{ events }`, matching the in-memory branch below.\n return Response.json({ events: data.events });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error fetching thread events\");\n return errorResponse(\"Failed to fetch thread events\", 500);\n }\n }\n\n // Local in-memory fallback\n if (supportsLocalThreadEndpoints(runtime.runner)) {\n try {\n const events = runtime.runner.getThreadEvents(threadId);\n return Response.json({ events });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error fetching thread events\");\n return errorResponse(\"Failed to fetch thread events\", 500);\n }\n }\n\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n}\n\nexport async function handleGetThreadState({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n // CopilotKit Intelligence path. Delegates to the platform's `_inspect`\n // state endpoint, which folds STATE_DELTA events onto the latest\n // STATE_SNAPSHOT to return the thread's current state.\n if (isIntelligenceRuntime(runtime)) {\n try {\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n const data = await runtime.intelligence.getThreadState({ threadId });\n // Flatten the discriminated `ThreadStateResult` to the wire shape the\n // inspector consumes (`{ state: <value> | null }`). Missing snapshot\n // and decode-error both surface as `null`; the inspector renders an\n // empty state branch for null and the platform's decode-error case is\n // already logged platform-side.\n const state = data.kind === \"snapshot\" ? data.state : null;\n return Response.json({ state });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error fetching thread state\");\n return errorResponse(\"Failed to fetch thread state\", 500);\n }\n }\n\n if (supportsLocalThreadEndpoints(runtime.runner)) {\n try {\n const state = runtime.runner.getThreadState(threadId);\n return Response.json({ state });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error fetching thread state\");\n return errorResponse(\"Failed to fetch thread state\", 500);\n }\n }\n\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"threads.mjs","names":[],"sources":["../../../../../src/v2/runtime/handlers/intelligence/threads.ts"],"sourcesContent":["import type {\n CopilotIntelligenceRuntimeLike,\n CopilotRuntimeLike,\n} from \"../../core/runtime\";\nimport { isIntelligenceRuntime } from \"../../core/runtime\";\nimport { logger } from \"@copilotkit/shared\";\nimport { errorResponse, isHandlerResponse } from \"../shared/json-response\";\nimport { isValidIdentifier } from \"../shared/intelligence-utils\";\nimport { resolveIntelligenceUser } from \"../shared/resolve-intelligence-user\";\nimport { platformErrorResponse } from \"../shared/platform-error\";\nimport { supportsLocalThreadEndpoints } from \"../../runner/agent-runner\";\n\ninterface ThreadsHandlerParams {\n runtime: CopilotRuntimeLike;\n request: Request;\n}\n\ninterface ThreadMutationParams extends ThreadsHandlerParams {\n threadId: string;\n}\n\ninterface ThreadMutationContext {\n userId: string;\n agentId: string;\n body: Record<string, unknown>;\n}\n\nasync function parseJsonBody(\n request: Request,\n): Promise<Record<string, unknown> | Response> {\n try {\n return (await request.json()) as Record<string, unknown>;\n } catch (error) {\n logger.error({ err: error }, \"Malformed JSON in request body\");\n return errorResponse(\"Invalid request body\", 400);\n }\n}\n\nfunction requireIntelligenceRuntime(\n runtime: CopilotRuntimeLike,\n): CopilotIntelligenceRuntimeLike | Response {\n if (!isIntelligenceRuntime(runtime)) {\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n }\n\n return runtime;\n}\n\nasync function resolveThreadMutationContext(\n runtime: CopilotIntelligenceRuntimeLike,\n request: Request,\n): Promise<ThreadMutationContext | Response> {\n const body = await parseJsonBody(request);\n if (isHandlerResponse(body)) return body;\n\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n const agentId = body.agentId;\n if (!isValidIdentifier(agentId)) {\n return errorResponse(\"Valid agentId is required\", 400);\n }\n\n return {\n body,\n userId: user.id,\n agentId,\n };\n}\n\nexport async function handleListThreads({\n runtime,\n request,\n}: ThreadsHandlerParams): Promise<Response> {\n // CopilotKit Intelligence path\n if (isIntelligenceRuntime(runtime)) {\n try {\n const url = new URL(request.url);\n const agentId = url.searchParams.get(\"agentId\");\n const includeArchived =\n url.searchParams.get(\"includeArchived\") === \"true\";\n const limitParam = url.searchParams.get(\"limit\");\n const cursor = url.searchParams.get(\"cursor\");\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n if (!isValidIdentifier(agentId)) {\n return errorResponse(\"Valid agentId query param is required\", 400);\n }\n\n const data = await runtime.intelligence.listThreads({\n userId: user.id,\n agentId,\n ...(includeArchived ? { includeArchived: true } : {}),\n ...(limitParam ? { limit: Number(limitParam) } : {}),\n ...(cursor ? { cursor } : {}),\n });\n\n return Response.json(data);\n } catch (error) {\n logger.error({ err: error }, \"Error listing threads\");\n return errorResponse(\"Failed to list threads\", 500);\n }\n }\n\n // Local in-memory fallback — useful for local development without Intelligence\n if (supportsLocalThreadEndpoints(runtime.runner)) {\n const url = new URL(request.url);\n const agentId = url.searchParams.get(\"agentId\");\n let threads = runtime.runner.listThreads();\n if (agentId) {\n threads = threads.filter((t) => t.agentId === agentId);\n }\n return Response.json({ threads, nextCursor: null });\n }\n\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n}\n\n/**\n * Clears all in-memory thread history for the local-dev InMemory fallback.\n *\n * The local-dev fallback exposes this so consumers (e.g. the demo's Clear\n * button) can wipe in-memory thread history without restarting the runtime.\n * Intentionally a no-op when CopilotKit Intelligence is configured: real\n * thread history lives in the database and must not be wiped by a\n * client-side page load.\n */\nexport function handleClearThreads({\n runtime,\n}: ThreadsHandlerParams): Response {\n if (supportsLocalThreadEndpoints(runtime.runner)) {\n runtime.runner.clearThreads();\n }\n return new Response(null, { status: 204 });\n}\n\nexport async function handleUpdateThread({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const mutation = await resolveThreadMutationContext(\n intelligenceRuntime,\n request,\n );\n if (isHandlerResponse(mutation)) return mutation;\n\n // The public SDK accepts trusted updates; browser fields must be allowlisted.\n const updates: Record<string, unknown> = {};\n for (const key of [\"name\", \"archived\"]) {\n if (Object.prototype.hasOwnProperty.call(mutation.body, key)) {\n updates[key] = mutation.body[key];\n }\n }\n\n const thread = await intelligenceRuntime.intelligence.updateThread({\n threadId,\n userId: mutation.userId,\n agentId: mutation.agentId,\n updates,\n });\n\n return Response.json(thread);\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error updating thread\");\n return errorResponse(\"Failed to update thread\", 500);\n }\n}\n\nexport async function handleSubscribeToThreads({\n runtime,\n request,\n}: ThreadsHandlerParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const user = await resolveIntelligenceUser({\n runtime: intelligenceRuntime,\n request,\n });\n if (isHandlerResponse(user)) return user;\n\n const credentials =\n await intelligenceRuntime.intelligence.ɵsubscribeToThreads({\n userId: user.id,\n });\n\n return Response.json({ joinToken: credentials.joinToken });\n } catch (error) {\n logger.error({ err: error }, \"Error subscribing to threads\");\n return errorResponse(\"Failed to subscribe to threads\", 500);\n }\n}\n\nexport async function handleArchiveThread({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const mutation = await resolveThreadMutationContext(\n intelligenceRuntime,\n request,\n );\n if (isHandlerResponse(mutation)) return mutation;\n\n await intelligenceRuntime.intelligence.archiveThread({\n threadId,\n userId: mutation.userId,\n agentId: mutation.agentId,\n });\n\n return Response.json({ threadId, archived: true });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error archiving thread\");\n return errorResponse(\"Failed to archive thread\", 500);\n }\n}\n\nexport async function handleDeleteThread({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n const intelligenceRuntime = requireIntelligenceRuntime(runtime);\n if (isHandlerResponse(intelligenceRuntime)) {\n return intelligenceRuntime;\n }\n\n try {\n const mutation = await resolveThreadMutationContext(\n intelligenceRuntime,\n request,\n );\n if (isHandlerResponse(mutation)) return mutation;\n\n await intelligenceRuntime.intelligence.deleteThread({\n threadId,\n userId: mutation.userId,\n agentId: mutation.agentId,\n });\n\n return Response.json({ threadId, deleted: true });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error deleting thread\");\n return errorResponse(\"Failed to delete thread\", 500);\n }\n}\n\nexport async function handleGetThreadMessages({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n // CopilotKit Intelligence path\n if (isIntelligenceRuntime(runtime)) {\n try {\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n const data = await runtime.intelligence.getThreadMessages({\n threadId,\n userId: user.id,\n });\n return Response.json(data);\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error fetching thread messages\");\n return platformErrorResponse(error, \"Failed to fetch thread messages\");\n }\n }\n\n // Local in-memory fallback — useful for local development without Intelligence\n if (supportsLocalThreadEndpoints(runtime.runner)) {\n const messages = runtime.runner.getThreadMessages(threadId);\n // Map ag-ui Message objects to the same shape CopilotKit Intelligence\n // returns. Switching on the discriminant `role` lets each branch read\n // the narrowed message arm directly, instead of laundering through\n // `Record<string, unknown>` and chained `as` casts.\n const mapped = messages.map((msg) => {\n switch (msg.role) {\n case \"assistant\": {\n const toolCalls = msg.toolCalls ?? [];\n return {\n id: msg.id,\n role: msg.role,\n ...(msg.content !== undefined ? { content: msg.content } : {}),\n ...(toolCalls.length > 0\n ? {\n toolCalls: toolCalls.map((tc) => ({\n id: tc.id,\n name: tc.function.name,\n args: tc.function.arguments,\n })),\n }\n : {}),\n };\n }\n case \"tool\":\n return {\n id: msg.id,\n role: msg.role,\n content: msg.content,\n toolCallId: msg.toolCallId,\n };\n default:\n return {\n id: msg.id,\n role: msg.role,\n ...(\"content\" in msg && msg.content !== undefined\n ? { content: msg.content }\n : {}),\n };\n }\n });\n return Response.json({ messages: mapped });\n }\n\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n}\n\nexport async function handleGetThreadEvents({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n // CopilotKit Intelligence path. Delegates to the platform's `_inspect`\n // endpoint (Intelligence PR #144). Auth still flows through the standard\n // identifyUser → API key path; threadId scoping happens server-side.\n if (isIntelligenceRuntime(runtime)) {\n try {\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n const data = await runtime.intelligence.getThreadEvents({ threadId });\n // Strip platform-internal fields (`decodeErrorRowIds`, `truncated`)\n // before returning to the inspector — those describe persistence-side\n // concerns the inspector currently has no UI for. The shape becomes\n // `{ events }`, matching the in-memory branch below.\n return Response.json({ events: data.events });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error fetching thread events\");\n return platformErrorResponse(error, \"Failed to fetch thread events\");\n }\n }\n\n // Local in-memory fallback\n if (supportsLocalThreadEndpoints(runtime.runner)) {\n try {\n const events = runtime.runner.getThreadEvents(threadId);\n return Response.json({ events });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error fetching thread events\");\n return errorResponse(\"Failed to fetch thread events\", 500);\n }\n }\n\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n}\n\nexport async function handleGetThreadState({\n runtime,\n request,\n threadId,\n}: ThreadMutationParams): Promise<Response> {\n // CopilotKit Intelligence path. Delegates to the platform's `_inspect`\n // state endpoint, which folds STATE_DELTA events onto the latest\n // STATE_SNAPSHOT to return the thread's current state.\n if (isIntelligenceRuntime(runtime)) {\n try {\n const user = await resolveIntelligenceUser({ runtime, request });\n if (isHandlerResponse(user)) return user;\n\n const data = await runtime.intelligence.getThreadState({ threadId });\n // Flatten the discriminated `ThreadStateResult` to the wire shape the\n // inspector consumes (`{ state: <value> | null }`). Missing snapshot\n // and decode-error both surface as `null`; the inspector renders an\n // empty state branch for null and the platform's decode-error case is\n // already logged platform-side.\n const state = data.kind === \"snapshot\" ? data.state : null;\n return Response.json({ state });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error fetching thread state\");\n return platformErrorResponse(error, \"Failed to fetch thread state\");\n }\n }\n\n if (supportsLocalThreadEndpoints(runtime.runner)) {\n try {\n const state = runtime.runner.getThreadState(threadId);\n return Response.json({ state });\n } catch (error) {\n logger.error({ err: error, threadId }, \"Error fetching thread state\");\n return errorResponse(\"Failed to fetch thread state\", 500);\n }\n }\n\n return errorResponse(\n \"Missing CopilotKitIntelligence configuration. Thread operations require a CopilotKitIntelligence instance to be provided in CopilotRuntime options.\",\n 422,\n );\n}\n"],"mappings":";;;;;;;;;;AA2BA,eAAe,cACb,SAC6C;AAC7C,KAAI;AACF,SAAQ,MAAM,QAAQ,MAAM;UACrB,OAAO;AACd,SAAO,MAAM,EAAE,KAAK,OAAO,EAAE,iCAAiC;AAC9D,SAAO,cAAc,wBAAwB,IAAI;;;AAIrD,SAAS,2BACP,SAC2C;AAC3C,KAAI,CAAC,sBAAsB,QAAQ,CACjC,QAAO,cACL,uJACA,IACD;AAGH,QAAO;;AAGT,eAAe,6BACb,SACA,SAC2C;CAC3C,MAAM,OAAO,MAAM,cAAc,QAAQ;AACzC,KAAI,kBAAkB,KAAK,CAAE,QAAO;CAEpC,MAAM,OAAO,MAAM,wBAAwB;EAAE;EAAS;EAAS,CAAC;AAChE,KAAI,kBAAkB,KAAK,CAAE,QAAO;CAEpC,MAAM,UAAU,KAAK;AACrB,KAAI,CAAC,kBAAkB,QAAQ,CAC7B,QAAO,cAAc,6BAA6B,IAAI;AAGxD,QAAO;EACL;EACA,QAAQ,KAAK;EACb;EACD;;AAGH,eAAsB,kBAAkB,EACtC,SACA,WAC0C;AAE1C,KAAI,sBAAsB,QAAQ,CAChC,KAAI;EACF,MAAM,MAAM,IAAI,IAAI,QAAQ,IAAI;EAChC,MAAM,UAAU,IAAI,aAAa,IAAI,UAAU;EAC/C,MAAM,kBACJ,IAAI,aAAa,IAAI,kBAAkB,KAAK;EAC9C,MAAM,aAAa,IAAI,aAAa,IAAI,QAAQ;EAChD,MAAM,SAAS,IAAI,aAAa,IAAI,SAAS;EAC7C,MAAM,OAAO,MAAM,wBAAwB;GAAE;GAAS;GAAS,CAAC;AAChE,MAAI,kBAAkB,KAAK,CAAE,QAAO;AAEpC,MAAI,CAAC,kBAAkB,QAAQ,CAC7B,QAAO,cAAc,yCAAyC,IAAI;EAGpE,MAAM,OAAO,MAAM,QAAQ,aAAa,YAAY;GAClD,QAAQ,KAAK;GACb;GACA,GAAI,kBAAkB,EAAE,iBAAiB,MAAM,GAAG,EAAE;GACpD,GAAI,aAAa,EAAE,OAAO,OAAO,WAAW,EAAE,GAAG,EAAE;GACnD,GAAI,SAAS,EAAE,QAAQ,GAAG,EAAE;GAC7B,CAAC;AAEF,SAAO,SAAS,KAAK,KAAK;UACnB,OAAO;AACd,SAAO,MAAM,EAAE,KAAK,OAAO,EAAE,wBAAwB;AACrD,SAAO,cAAc,0BAA0B,IAAI;;AAKvD,KAAI,6BAA6B,QAAQ,OAAO,EAAE;EAEhD,MAAM,UADM,IAAI,IAAI,QAAQ,IAAI,CACZ,aAAa,IAAI,UAAU;EAC/C,IAAI,UAAU,QAAQ,OAAO,aAAa;AAC1C,MAAI,QACF,WAAU,QAAQ,QAAQ,MAAM,EAAE,YAAY,QAAQ;AAExD,SAAO,SAAS,KAAK;GAAE;GAAS,YAAY;GAAM,CAAC;;AAGrD,QAAO,cACL,uJACA,IACD;;;;;;;;;;;AAYH,SAAgB,mBAAmB,EACjC,WACiC;AACjC,KAAI,6BAA6B,QAAQ,OAAO,CAC9C,SAAQ,OAAO,cAAc;AAE/B,QAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,KAAK,CAAC;;AAG5C,eAAsB,mBAAmB,EACvC,SACA,SACA,YAC0C;CAC1C,MAAM,sBAAsB,2BAA2B,QAAQ;AAC/D,KAAI,kBAAkB,oBAAoB,CACxC,QAAO;AAGT,KAAI;EACF,MAAM,WAAW,MAAM,6BACrB,qBACA,QACD;AACD,MAAI,kBAAkB,SAAS,CAAE,QAAO;EAGxC,MAAM,UAAmC,EAAE;AAC3C,OAAK,MAAM,OAAO,CAAC,QAAQ,WAAW,CACpC,KAAI,OAAO,UAAU,eAAe,KAAK,SAAS,MAAM,IAAI,CAC1D,SAAQ,OAAO,SAAS,KAAK;EAIjC,MAAM,SAAS,MAAM,oBAAoB,aAAa,aAAa;GACjE;GACA,QAAQ,SAAS;GACjB,SAAS,SAAS;GAClB;GACD,CAAC;AAEF,SAAO,SAAS,KAAK,OAAO;UACrB,OAAO;AACd,SAAO,MAAM;GAAE,KAAK;GAAO;GAAU,EAAE,wBAAwB;AAC/D,SAAO,cAAc,2BAA2B,IAAI;;;AAIxD,eAAsB,yBAAyB,EAC7C,SACA,WAC0C;CAC1C,MAAM,sBAAsB,2BAA2B,QAAQ;AAC/D,KAAI,kBAAkB,oBAAoB,CACxC,QAAO;AAGT,KAAI;EACF,MAAM,OAAO,MAAM,wBAAwB;GACzC,SAAS;GACT;GACD,CAAC;AACF,MAAI,kBAAkB,KAAK,CAAE,QAAO;EAEpC,MAAM,cACJ,MAAM,oBAAoB,aAAa,oBAAoB,EACzD,QAAQ,KAAK,IACd,CAAC;AAEJ,SAAO,SAAS,KAAK,EAAE,WAAW,YAAY,WAAW,CAAC;UACnD,OAAO;AACd,SAAO,MAAM,EAAE,KAAK,OAAO,EAAE,+BAA+B;AAC5D,SAAO,cAAc,kCAAkC,IAAI;;;AAI/D,eAAsB,oBAAoB,EACxC,SACA,SACA,YAC0C;CAC1C,MAAM,sBAAsB,2BAA2B,QAAQ;AAC/D,KAAI,kBAAkB,oBAAoB,CACxC,QAAO;AAGT,KAAI;EACF,MAAM,WAAW,MAAM,6BACrB,qBACA,QACD;AACD,MAAI,kBAAkB,SAAS,CAAE,QAAO;AAExC,QAAM,oBAAoB,aAAa,cAAc;GACnD;GACA,QAAQ,SAAS;GACjB,SAAS,SAAS;GACnB,CAAC;AAEF,SAAO,SAAS,KAAK;GAAE;GAAU,UAAU;GAAM,CAAC;UAC3C,OAAO;AACd,SAAO,MAAM;GAAE,KAAK;GAAO;GAAU,EAAE,yBAAyB;AAChE,SAAO,cAAc,4BAA4B,IAAI;;;AAIzD,eAAsB,mBAAmB,EACvC,SACA,SACA,YAC0C;CAC1C,MAAM,sBAAsB,2BAA2B,QAAQ;AAC/D,KAAI,kBAAkB,oBAAoB,CACxC,QAAO;AAGT,KAAI;EACF,MAAM,WAAW,MAAM,6BACrB,qBACA,QACD;AACD,MAAI,kBAAkB,SAAS,CAAE,QAAO;AAExC,QAAM,oBAAoB,aAAa,aAAa;GAClD;GACA,QAAQ,SAAS;GACjB,SAAS,SAAS;GACnB,CAAC;AAEF,SAAO,SAAS,KAAK;GAAE;GAAU,SAAS;GAAM,CAAC;UAC1C,OAAO;AACd,SAAO,MAAM;GAAE,KAAK;GAAO;GAAU,EAAE,wBAAwB;AAC/D,SAAO,cAAc,2BAA2B,IAAI;;;AAIxD,eAAsB,wBAAwB,EAC5C,SACA,SACA,YAC0C;AAE1C,KAAI,sBAAsB,QAAQ,CAChC,KAAI;EACF,MAAM,OAAO,MAAM,wBAAwB;GAAE;GAAS;GAAS,CAAC;AAChE,MAAI,kBAAkB,KAAK,CAAE,QAAO;EAEpC,MAAM,OAAO,MAAM,QAAQ,aAAa,kBAAkB;GACxD;GACA,QAAQ,KAAK;GACd,CAAC;AACF,SAAO,SAAS,KAAK,KAAK;UACnB,OAAO;AACd,SAAO,MAAM;GAAE,KAAK;GAAO;GAAU,EAAE,iCAAiC;AACxE,SAAO,sBAAsB,OAAO,kCAAkC;;AAK1E,KAAI,6BAA6B,QAAQ,OAAO,EAAE;EAMhD,MAAM,SALW,QAAQ,OAAO,kBAAkB,SAAS,CAKnC,KAAK,QAAQ;AACnC,WAAQ,IAAI,MAAZ;IACE,KAAK,aAAa;KAChB,MAAM,YAAY,IAAI,aAAa,EAAE;AACrC,YAAO;MACL,IAAI,IAAI;MACR,MAAM,IAAI;MACV,GAAI,IAAI,YAAY,SAAY,EAAE,SAAS,IAAI,SAAS,GAAG,EAAE;MAC7D,GAAI,UAAU,SAAS,IACnB,EACE,WAAW,UAAU,KAAK,QAAQ;OAChC,IAAI,GAAG;OACP,MAAM,GAAG,SAAS;OAClB,MAAM,GAAG,SAAS;OACnB,EAAE,EACJ,GACD,EAAE;MACP;;IAEH,KAAK,OACH,QAAO;KACL,IAAI,IAAI;KACR,MAAM,IAAI;KACV,SAAS,IAAI;KACb,YAAY,IAAI;KACjB;IACH,QACE,QAAO;KACL,IAAI,IAAI;KACR,MAAM,IAAI;KACV,GAAI,aAAa,OAAO,IAAI,YAAY,SACpC,EAAE,SAAS,IAAI,SAAS,GACxB,EAAE;KACP;;IAEL;AACF,SAAO,SAAS,KAAK,EAAE,UAAU,QAAQ,CAAC;;AAG5C,QAAO,cACL,uJACA,IACD;;AAGH,eAAsB,sBAAsB,EAC1C,SACA,SACA,YAC0C;AAI1C,KAAI,sBAAsB,QAAQ,CAChC,KAAI;EACF,MAAM,OAAO,MAAM,wBAAwB;GAAE;GAAS;GAAS,CAAC;AAChE,MAAI,kBAAkB,KAAK,CAAE,QAAO;EAEpC,MAAM,OAAO,MAAM,QAAQ,aAAa,gBAAgB,EAAE,UAAU,CAAC;AAKrE,SAAO,SAAS,KAAK,EAAE,QAAQ,KAAK,QAAQ,CAAC;UACtC,OAAO;AACd,SAAO,MAAM;GAAE,KAAK;GAAO;GAAU,EAAE,+BAA+B;AACtE,SAAO,sBAAsB,OAAO,gCAAgC;;AAKxE,KAAI,6BAA6B,QAAQ,OAAO,CAC9C,KAAI;EACF,MAAM,SAAS,QAAQ,OAAO,gBAAgB,SAAS;AACvD,SAAO,SAAS,KAAK,EAAE,QAAQ,CAAC;UACzB,OAAO;AACd,SAAO,MAAM;GAAE,KAAK;GAAO;GAAU,EAAE,+BAA+B;AACtE,SAAO,cAAc,iCAAiC,IAAI;;AAI9D,QAAO,cACL,uJACA,IACD;;AAGH,eAAsB,qBAAqB,EACzC,SACA,SACA,YAC0C;AAI1C,KAAI,sBAAsB,QAAQ,CAChC,KAAI;EACF,MAAM,OAAO,MAAM,wBAAwB;GAAE;GAAS;GAAS,CAAC;AAChE,MAAI,kBAAkB,KAAK,CAAE,QAAO;EAEpC,MAAM,OAAO,MAAM,QAAQ,aAAa,eAAe,EAAE,UAAU,CAAC;EAMpE,MAAM,QAAQ,KAAK,SAAS,aAAa,KAAK,QAAQ;AACtD,SAAO,SAAS,KAAK,EAAE,OAAO,CAAC;UACxB,OAAO;AACd,SAAO,MAAM;GAAE,KAAK;GAAO;GAAU,EAAE,8BAA8B;AACrE,SAAO,sBAAsB,OAAO,+BAA+B;;AAIvE,KAAI,6BAA6B,QAAQ,OAAO,CAC9C,KAAI;EACF,MAAM,QAAQ,QAAQ,OAAO,eAAe,SAAS;AACrD,SAAO,SAAS,KAAK,EAAE,OAAO,CAAC;UACxB,OAAO;AACd,SAAO,MAAM;GAAE,KAAK;GAAO;GAAU,EAAE,8BAA8B;AACrE,SAAO,cAAc,gCAAgC,IAAI;;AAI7D,QAAO,cACL,uJACA,IACD"}
@@ -2,7 +2,6 @@ require("reflect-metadata");
2
2
 
3
3
  //#region src/v2/runtime/handlers/shared/mcp-apps-servers.ts
4
4
  const UNSUPPORTED_POLICY_KEYS = ["includeTools", "excludeTools"];
5
- const MCP_APPS_MIDDLEWARE_VERSION = "@ag-ui/mcp-apps-middleware@0.0.3";
6
5
  const MCP_APPS_POLICY_ISSUE = "https://github.com/CopilotKit/CopilotKit/issues/5930";
7
6
  /**
8
7
  * Select the servers for an agent and validate the policy boundary owned by
@@ -14,7 +13,7 @@ function resolveMcpAppsServers(servers, agentId) {
14
13
  const config = server;
15
14
  for (const key of UNSUPPORTED_POLICY_KEYS) if (Object.prototype.hasOwnProperty.call(config, key) && config[key] !== void 0) violations.push(`${key} at server[${index}] (${server.serverId ?? server.url})`);
16
15
  }
17
- if (violations.length > 0) throw new Error(`Unsupported MCP Apps tool policy: ${violations.join(", ")}. ${MCP_APPS_MIDDLEWARE_VERSION} owns per-server tool policy and does not support these keys; see ${MCP_APPS_POLICY_ISSUE}.`);
16
+ if (violations.length > 0) throw new Error(`Unsupported MCP Apps tool policy: ${violations.join(", ")}. @ag-ui/mcp-apps-middleware owns per-server tool policy, and the release the runtime depends on does not support these keys; see ${MCP_APPS_POLICY_ISSUE}.`);
18
17
  return servers.filter((server) => !server.agentId || server.agentId === agentId).map(({ agentId: _agentId, ...server }) => server);
19
18
  }
20
19
 
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-apps-servers.cjs","names":[],"sources":["../../../../../src/v2/runtime/handlers/shared/mcp-apps-servers.ts"],"sourcesContent":["import type { MCPClientConfig } from \"@ag-ui/mcp-apps-middleware\";\nimport type { McpAppsServerConfig } from \"../../core/runtime\";\n\nconst UNSUPPORTED_POLICY_KEYS = [\"includeTools\", \"excludeTools\"] as const;\nconst MCP_APPS_MIDDLEWARE_VERSION = \"@ag-ui/mcp-apps-middleware@0.0.3\";\nconst MCP_APPS_POLICY_ISSUE =\n \"https://github.com/CopilotKit/CopilotKit/issues/5930\";\n\n/**\n * Select the servers for an agent and validate the policy boundary owned by\n * the installed MCP Apps middleware.\n */\nexport function resolveMcpAppsServers(\n servers: readonly McpAppsServerConfig[],\n agentId: string,\n): MCPClientConfig[] {\n const violations: string[] = [];\n\n for (const [index, server] of servers.entries()) {\n const config = server as unknown as Record<string, unknown>;\n for (const key of UNSUPPORTED_POLICY_KEYS) {\n if (\n Object.prototype.hasOwnProperty.call(config, key) &&\n config[key] !== undefined\n ) {\n violations.push(\n `${key} at server[${index}] (${server.serverId ?? server.url})`,\n );\n }\n }\n }\n\n if (violations.length > 0) {\n throw new Error(\n `Unsupported MCP Apps tool policy: ${violations.join(\", \")}. ` +\n `${MCP_APPS_MIDDLEWARE_VERSION} owns per-server tool policy and ` +\n `does not support these keys; see ${MCP_APPS_POLICY_ISSUE}.`,\n );\n }\n\n return servers\n .filter((server) => !server.agentId || server.agentId === agentId)\n .map(({ agentId: _agentId, ...server }) => server as MCPClientConfig);\n}\n"],"mappings":";;;AAGA,MAAM,0BAA0B,CAAC,gBAAgB,eAAe;AAChE,MAAM,8BAA8B;AACpC,MAAM,wBACJ;;;;;AAMF,SAAgB,sBACd,SACA,SACmB;CACnB,MAAM,aAAuB,EAAE;AAE/B,MAAK,MAAM,CAAC,OAAO,WAAW,QAAQ,SAAS,EAAE;EAC/C,MAAM,SAAS;AACf,OAAK,MAAM,OAAO,wBAChB,KACE,OAAO,UAAU,eAAe,KAAK,QAAQ,IAAI,IACjD,OAAO,SAAS,OAEhB,YAAW,KACT,GAAG,IAAI,aAAa,MAAM,KAAK,OAAO,YAAY,OAAO,IAAI,GAC9D;;AAKP,KAAI,WAAW,SAAS,EACtB,OAAM,IAAI,MACR,qCAAqC,WAAW,KAAK,KAAK,CAAC,IACtD,4BAA4B,oEACK,sBAAsB,GAC7D;AAGH,QAAO,QACJ,QAAQ,WAAW,CAAC,OAAO,WAAW,OAAO,YAAY,QAAQ,CACjE,KAAK,EAAE,SAAS,UAAU,GAAG,aAAa,OAA0B"}
1
+ {"version":3,"file":"mcp-apps-servers.cjs","names":[],"sources":["../../../../../src/v2/runtime/handlers/shared/mcp-apps-servers.ts"],"sourcesContent":["import type { MCPClientConfig } from \"@ag-ui/mcp-apps-middleware\";\nimport type { McpAppsServerConfig } from \"../../core/runtime\";\n\nconst UNSUPPORTED_POLICY_KEYS = [\"includeTools\", \"excludeTools\"] as const;\nconst MCP_APPS_POLICY_ISSUE =\n \"https://github.com/CopilotKit/CopilotKit/issues/5930\";\n\n/**\n * Select the servers for an agent and validate the policy boundary owned by\n * the installed MCP Apps middleware.\n */\nexport function resolveMcpAppsServers(\n servers: readonly McpAppsServerConfig[],\n agentId: string,\n): MCPClientConfig[] {\n const violations: string[] = [];\n\n for (const [index, server] of servers.entries()) {\n const config = server as unknown as Record<string, unknown>;\n for (const key of UNSUPPORTED_POLICY_KEYS) {\n if (\n Object.prototype.hasOwnProperty.call(config, key) &&\n config[key] !== undefined\n ) {\n violations.push(\n `${key} at server[${index}] (${server.serverId ?? server.url})`,\n );\n }\n }\n }\n\n if (violations.length > 0) {\n throw new Error(\n `Unsupported MCP Apps tool policy: ${violations.join(\", \")}. ` +\n `@ag-ui/mcp-apps-middleware owns per-server tool policy, and the ` +\n `release the runtime depends on does not support these keys; see ` +\n `${MCP_APPS_POLICY_ISSUE}.`,\n );\n }\n\n return servers\n .filter((server) => !server.agentId || server.agentId === agentId)\n .map(({ agentId: _agentId, ...server }) => server as MCPClientConfig);\n}\n"],"mappings":";;;AAGA,MAAM,0BAA0B,CAAC,gBAAgB,eAAe;AAChE,MAAM,wBACJ;;;;;AAMF,SAAgB,sBACd,SACA,SACmB;CACnB,MAAM,aAAuB,EAAE;AAE/B,MAAK,MAAM,CAAC,OAAO,WAAW,QAAQ,SAAS,EAAE;EAC/C,MAAM,SAAS;AACf,OAAK,MAAM,OAAO,wBAChB,KACE,OAAO,UAAU,eAAe,KAAK,QAAQ,IAAI,IACjD,OAAO,SAAS,OAEhB,YAAW,KACT,GAAG,IAAI,aAAa,MAAM,KAAK,OAAO,YAAY,OAAO,IAAI,GAC9D;;AAKP,KAAI,WAAW,SAAS,EACtB,OAAM,IAAI,MACR,qCAAqC,WAAW,KAAK,KAAK,CAAC,oIAGtD,sBAAsB,GAC5B;AAGH,QAAO,QACJ,QAAQ,WAAW,CAAC,OAAO,WAAW,OAAO,YAAY,QAAQ,CACjE,KAAK,EAAE,SAAS,UAAU,GAAG,aAAa,OAA0B"}
@@ -1,7 +1,6 @@
1
1
  import "reflect-metadata";
2
2
  //#region src/v2/runtime/handlers/shared/mcp-apps-servers.ts
3
3
  const UNSUPPORTED_POLICY_KEYS = ["includeTools", "excludeTools"];
4
- const MCP_APPS_MIDDLEWARE_VERSION = "@ag-ui/mcp-apps-middleware@0.0.3";
5
4
  const MCP_APPS_POLICY_ISSUE = "https://github.com/CopilotKit/CopilotKit/issues/5930";
6
5
  /**
7
6
  * Select the servers for an agent and validate the policy boundary owned by
@@ -13,7 +12,7 @@ function resolveMcpAppsServers(servers, agentId) {
13
12
  const config = server;
14
13
  for (const key of UNSUPPORTED_POLICY_KEYS) if (Object.prototype.hasOwnProperty.call(config, key) && config[key] !== void 0) violations.push(`${key} at server[${index}] (${server.serverId ?? server.url})`);
15
14
  }
16
- if (violations.length > 0) throw new Error(`Unsupported MCP Apps tool policy: ${violations.join(", ")}. ${MCP_APPS_MIDDLEWARE_VERSION} owns per-server tool policy and does not support these keys; see ${MCP_APPS_POLICY_ISSUE}.`);
15
+ if (violations.length > 0) throw new Error(`Unsupported MCP Apps tool policy: ${violations.join(", ")}. @ag-ui/mcp-apps-middleware owns per-server tool policy, and the release the runtime depends on does not support these keys; see ${MCP_APPS_POLICY_ISSUE}.`);
17
16
  return servers.filter((server) => !server.agentId || server.agentId === agentId).map(({ agentId: _agentId, ...server }) => server);
18
17
  }
19
18
 
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-apps-servers.mjs","names":[],"sources":["../../../../../src/v2/runtime/handlers/shared/mcp-apps-servers.ts"],"sourcesContent":["import type { MCPClientConfig } from \"@ag-ui/mcp-apps-middleware\";\nimport type { McpAppsServerConfig } from \"../../core/runtime\";\n\nconst UNSUPPORTED_POLICY_KEYS = [\"includeTools\", \"excludeTools\"] as const;\nconst MCP_APPS_MIDDLEWARE_VERSION = \"@ag-ui/mcp-apps-middleware@0.0.3\";\nconst MCP_APPS_POLICY_ISSUE =\n \"https://github.com/CopilotKit/CopilotKit/issues/5930\";\n\n/**\n * Select the servers for an agent and validate the policy boundary owned by\n * the installed MCP Apps middleware.\n */\nexport function resolveMcpAppsServers(\n servers: readonly McpAppsServerConfig[],\n agentId: string,\n): MCPClientConfig[] {\n const violations: string[] = [];\n\n for (const [index, server] of servers.entries()) {\n const config = server as unknown as Record<string, unknown>;\n for (const key of UNSUPPORTED_POLICY_KEYS) {\n if (\n Object.prototype.hasOwnProperty.call(config, key) &&\n config[key] !== undefined\n ) {\n violations.push(\n `${key} at server[${index}] (${server.serverId ?? server.url})`,\n );\n }\n }\n }\n\n if (violations.length > 0) {\n throw new Error(\n `Unsupported MCP Apps tool policy: ${violations.join(\", \")}. ` +\n `${MCP_APPS_MIDDLEWARE_VERSION} owns per-server tool policy and ` +\n `does not support these keys; see ${MCP_APPS_POLICY_ISSUE}.`,\n );\n }\n\n return servers\n .filter((server) => !server.agentId || server.agentId === agentId)\n .map(({ agentId: _agentId, ...server }) => server as MCPClientConfig);\n}\n"],"mappings":";;AAGA,MAAM,0BAA0B,CAAC,gBAAgB,eAAe;AAChE,MAAM,8BAA8B;AACpC,MAAM,wBACJ;;;;;AAMF,SAAgB,sBACd,SACA,SACmB;CACnB,MAAM,aAAuB,EAAE;AAE/B,MAAK,MAAM,CAAC,OAAO,WAAW,QAAQ,SAAS,EAAE;EAC/C,MAAM,SAAS;AACf,OAAK,MAAM,OAAO,wBAChB,KACE,OAAO,UAAU,eAAe,KAAK,QAAQ,IAAI,IACjD,OAAO,SAAS,OAEhB,YAAW,KACT,GAAG,IAAI,aAAa,MAAM,KAAK,OAAO,YAAY,OAAO,IAAI,GAC9D;;AAKP,KAAI,WAAW,SAAS,EACtB,OAAM,IAAI,MACR,qCAAqC,WAAW,KAAK,KAAK,CAAC,IACtD,4BAA4B,oEACK,sBAAsB,GAC7D;AAGH,QAAO,QACJ,QAAQ,WAAW,CAAC,OAAO,WAAW,OAAO,YAAY,QAAQ,CACjE,KAAK,EAAE,SAAS,UAAU,GAAG,aAAa,OAA0B"}
1
+ {"version":3,"file":"mcp-apps-servers.mjs","names":[],"sources":["../../../../../src/v2/runtime/handlers/shared/mcp-apps-servers.ts"],"sourcesContent":["import type { MCPClientConfig } from \"@ag-ui/mcp-apps-middleware\";\nimport type { McpAppsServerConfig } from \"../../core/runtime\";\n\nconst UNSUPPORTED_POLICY_KEYS = [\"includeTools\", \"excludeTools\"] as const;\nconst MCP_APPS_POLICY_ISSUE =\n \"https://github.com/CopilotKit/CopilotKit/issues/5930\";\n\n/**\n * Select the servers for an agent and validate the policy boundary owned by\n * the installed MCP Apps middleware.\n */\nexport function resolveMcpAppsServers(\n servers: readonly McpAppsServerConfig[],\n agentId: string,\n): MCPClientConfig[] {\n const violations: string[] = [];\n\n for (const [index, server] of servers.entries()) {\n const config = server as unknown as Record<string, unknown>;\n for (const key of UNSUPPORTED_POLICY_KEYS) {\n if (\n Object.prototype.hasOwnProperty.call(config, key) &&\n config[key] !== undefined\n ) {\n violations.push(\n `${key} at server[${index}] (${server.serverId ?? server.url})`,\n );\n }\n }\n }\n\n if (violations.length > 0) {\n throw new Error(\n `Unsupported MCP Apps tool policy: ${violations.join(\", \")}. ` +\n `@ag-ui/mcp-apps-middleware owns per-server tool policy, and the ` +\n `release the runtime depends on does not support these keys; see ` +\n `${MCP_APPS_POLICY_ISSUE}.`,\n );\n }\n\n return servers\n .filter((server) => !server.agentId || server.agentId === agentId)\n .map(({ agentId: _agentId, ...server }) => server as MCPClientConfig);\n}\n"],"mappings":";;AAGA,MAAM,0BAA0B,CAAC,gBAAgB,eAAe;AAChE,MAAM,wBACJ;;;;;AAMF,SAAgB,sBACd,SACA,SACmB;CACnB,MAAM,aAAuB,EAAE;AAE/B,MAAK,MAAM,CAAC,OAAO,WAAW,QAAQ,SAAS,EAAE;EAC/C,MAAM,SAAS;AACf,OAAK,MAAM,OAAO,wBAChB,KACE,OAAO,UAAU,eAAe,KAAK,QAAQ,IAAI,IACjD,OAAO,SAAS,OAEhB,YAAW,KACT,GAAG,IAAI,aAAa,MAAM,KAAK,OAAO,YAAY,OAAO,IAAI,GAC9D;;AAKP,KAAI,WAAW,SAAS,EACtB,OAAM,IAAI,MACR,qCAAqC,WAAW,KAAK,KAAK,CAAC,oIAGtD,sBAAsB,GAC5B;AAGH,QAAO,QACJ,QAAQ,WAAW,CAAC,OAAO,WAAW,OAAO,YAAY,QAAQ,CACjE,KAAK,EAAE,SAAS,UAAU,GAAG,aAAa,OAA0B"}
@@ -0,0 +1,40 @@
1
+ require("reflect-metadata");
2
+ const require_client = require('../../intelligence-platform/client.cjs');
3
+ const require_json_response = require('./json-response.cjs');
4
+
5
+ //#region src/v2/runtime/handlers/shared/platform-error.ts
6
+ /**
7
+ * Map a thrown error from a platform call onto a `Response`.
8
+ *
9
+ * Extracted from the memory handlers, which had it first and alone; the thread
10
+ * handlers flattened every failure to 500, so a "this does not exist yet" was
11
+ * indistinguishable from "the platform is down". One copy, because two would
12
+ * drift the moment either grew a case.
13
+ *
14
+ * Forward only client-actionable **4xx** statuses verbatim (404 missing or
15
+ * wrong-scope, 409 conflict, 422 unprocessable) so a consumer can branch on
16
+ * them — a flat 500 erases that distinction. A platform **5xx**, or any non-4xx
17
+ * or malformed status, means this runtime is healthy but its dependency failed,
18
+ * so it surfaces as `502 Bad Gateway` rather than echoing the upstream status as
19
+ * if the runtime itself broke. That also avoids a `RangeError` from
20
+ * `new Response(..., { status })` on an out-of-range status. Anything that is
21
+ * not a platform error at all stays 500.
22
+ *
23
+ * A platform **401** is also 502: it rejects the runtime's own credentials
24
+ * (e.g. a rotated API key), not the end user, so forwarding it would tell the
25
+ * browser the user is unauthenticated for a fault only the server can fix. A
26
+ * **403** is different: the platform uses it to deny this user an action (e.g.
27
+ * a write to read-only memory), so it is forwarded like any other 4xx.
28
+ */
29
+ function platformErrorResponse(error, message) {
30
+ if (error instanceof require_client.PlatformRequestError) {
31
+ const { status } = error;
32
+ if (Number.isInteger(status) && status >= 400 && status <= 499 && status !== 401) return require_json_response.errorResponse(message, status);
33
+ return require_json_response.errorResponse(message, 502);
34
+ }
35
+ return require_json_response.errorResponse(message, 500);
36
+ }
37
+
38
+ //#endregion
39
+ exports.platformErrorResponse = platformErrorResponse;
40
+ //# sourceMappingURL=platform-error.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-error.cjs","names":["PlatformRequestError","errorResponse"],"sources":["../../../../../src/v2/runtime/handlers/shared/platform-error.ts"],"sourcesContent":["import { PlatformRequestError } from \"../../intelligence-platform/client\";\nimport { errorResponse } from \"./json-response\";\n\n/**\n * Map a thrown error from a platform call onto a `Response`.\n *\n * Extracted from the memory handlers, which had it first and alone; the thread\n * handlers flattened every failure to 500, so a \"this does not exist yet\" was\n * indistinguishable from \"the platform is down\". One copy, because two would\n * drift the moment either grew a case.\n *\n * Forward only client-actionable **4xx** statuses verbatim (404 missing or\n * wrong-scope, 409 conflict, 422 unprocessable) so a consumer can branch on\n * them — a flat 500 erases that distinction. A platform **5xx**, or any non-4xx\n * or malformed status, means this runtime is healthy but its dependency failed,\n * so it surfaces as `502 Bad Gateway` rather than echoing the upstream status as\n * if the runtime itself broke. That also avoids a `RangeError` from\n * `new Response(..., { status })` on an out-of-range status. Anything that is\n * not a platform error at all stays 500.\n *\n * A platform **401** is also 502: it rejects the runtime's own credentials\n * (e.g. a rotated API key), not the end user, so forwarding it would tell the\n * browser the user is unauthenticated for a fault only the server can fix. A\n * **403** is different: the platform uses it to deny this user an action (e.g.\n * a write to read-only memory), so it is forwarded like any other 4xx.\n */\nexport function platformErrorResponse(\n error: unknown,\n message: string,\n): Response {\n if (error instanceof PlatformRequestError) {\n const { status } = error;\n if (\n Number.isInteger(status) &&\n status >= 400 &&\n status <= 499 &&\n status !== 401\n ) {\n return errorResponse(message, status);\n }\n return errorResponse(message, 502);\n }\n return errorResponse(message, 500);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,SAAgB,sBACd,OACA,SACU;AACV,KAAI,iBAAiBA,qCAAsB;EACzC,MAAM,EAAE,WAAW;AACnB,MACE,OAAO,UAAU,OAAO,IACxB,UAAU,OACV,UAAU,OACV,WAAW,IAEX,QAAOC,oCAAc,SAAS,OAAO;AAEvC,SAAOA,oCAAc,SAAS,IAAI;;AAEpC,QAAOA,oCAAc,SAAS,IAAI"}
@@ -0,0 +1,40 @@
1
+ import "reflect-metadata";
2
+ import { PlatformRequestError } from "../../intelligence-platform/client.mjs";
3
+ import { errorResponse } from "./json-response.mjs";
4
+
5
+ //#region src/v2/runtime/handlers/shared/platform-error.ts
6
+ /**
7
+ * Map a thrown error from a platform call onto a `Response`.
8
+ *
9
+ * Extracted from the memory handlers, which had it first and alone; the thread
10
+ * handlers flattened every failure to 500, so a "this does not exist yet" was
11
+ * indistinguishable from "the platform is down". One copy, because two would
12
+ * drift the moment either grew a case.
13
+ *
14
+ * Forward only client-actionable **4xx** statuses verbatim (404 missing or
15
+ * wrong-scope, 409 conflict, 422 unprocessable) so a consumer can branch on
16
+ * them — a flat 500 erases that distinction. A platform **5xx**, or any non-4xx
17
+ * or malformed status, means this runtime is healthy but its dependency failed,
18
+ * so it surfaces as `502 Bad Gateway` rather than echoing the upstream status as
19
+ * if the runtime itself broke. That also avoids a `RangeError` from
20
+ * `new Response(..., { status })` on an out-of-range status. Anything that is
21
+ * not a platform error at all stays 500.
22
+ *
23
+ * A platform **401** is also 502: it rejects the runtime's own credentials
24
+ * (e.g. a rotated API key), not the end user, so forwarding it would tell the
25
+ * browser the user is unauthenticated for a fault only the server can fix. A
26
+ * **403** is different: the platform uses it to deny this user an action (e.g.
27
+ * a write to read-only memory), so it is forwarded like any other 4xx.
28
+ */
29
+ function platformErrorResponse(error, message) {
30
+ if (error instanceof PlatformRequestError) {
31
+ const { status } = error;
32
+ if (Number.isInteger(status) && status >= 400 && status <= 499 && status !== 401) return errorResponse(message, status);
33
+ return errorResponse(message, 502);
34
+ }
35
+ return errorResponse(message, 500);
36
+ }
37
+
38
+ //#endregion
39
+ export { platformErrorResponse };
40
+ //# sourceMappingURL=platform-error.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-error.mjs","names":[],"sources":["../../../../../src/v2/runtime/handlers/shared/platform-error.ts"],"sourcesContent":["import { PlatformRequestError } from \"../../intelligence-platform/client\";\nimport { errorResponse } from \"./json-response\";\n\n/**\n * Map a thrown error from a platform call onto a `Response`.\n *\n * Extracted from the memory handlers, which had it first and alone; the thread\n * handlers flattened every failure to 500, so a \"this does not exist yet\" was\n * indistinguishable from \"the platform is down\". One copy, because two would\n * drift the moment either grew a case.\n *\n * Forward only client-actionable **4xx** statuses verbatim (404 missing or\n * wrong-scope, 409 conflict, 422 unprocessable) so a consumer can branch on\n * them — a flat 500 erases that distinction. A platform **5xx**, or any non-4xx\n * or malformed status, means this runtime is healthy but its dependency failed,\n * so it surfaces as `502 Bad Gateway` rather than echoing the upstream status as\n * if the runtime itself broke. That also avoids a `RangeError` from\n * `new Response(..., { status })` on an out-of-range status. Anything that is\n * not a platform error at all stays 500.\n *\n * A platform **401** is also 502: it rejects the runtime's own credentials\n * (e.g. a rotated API key), not the end user, so forwarding it would tell the\n * browser the user is unauthenticated for a fault only the server can fix. A\n * **403** is different: the platform uses it to deny this user an action (e.g.\n * a write to read-only memory), so it is forwarded like any other 4xx.\n */\nexport function platformErrorResponse(\n error: unknown,\n message: string,\n): Response {\n if (error instanceof PlatformRequestError) {\n const { status } = error;\n if (\n Number.isInteger(status) &&\n status >= 400 &&\n status <= 499 &&\n status !== 401\n ) {\n return errorResponse(message, status);\n }\n return errorResponse(message, 502);\n }\n return errorResponse(message, 500);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,SAAgB,sBACd,OACA,SACU;AACV,KAAI,iBAAiB,sBAAsB;EACzC,MAAM,EAAE,WAAW;AACnB,MACE,OAAO,UAAU,OAAO,IACxB,UAAU,OACV,UAAU,OACV,WAAW,IAEX,QAAO,cAAc,SAAS,OAAO;AAEvC,SAAO,cAAc,SAAS,IAAI;;AAEpC,QAAO,cAAc,SAAS,IAAI"}
@@ -1,6 +1,7 @@
1
1
  require("reflect-metadata");
2
2
  const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
3
3
  const require_learned_skills = require('./learned-skills.cjs');
4
+ const require_trajectories = require('./trajectories.cjs');
4
5
  let _copilotkit_shared = require("@copilotkit/shared");
5
6
  let zod = require("zod");
6
7
  let crypto = require("crypto");
@@ -145,6 +146,24 @@ var PlatformRequestError = class extends Error {
145
146
  this.name = "PlatformRequestError";
146
147
  }
147
148
  };
149
+ /**
150
+ * Read the platform's `retryable` hint from an error response body. The
151
+ * platform sends `{ error: { code, message, category, retryable } }`; anything
152
+ * else (non-JSON, proxies, older platforms) yields `undefined`.
153
+ */
154
+ function readErrorBodyRetryable(text) {
155
+ if (!text) return void 0;
156
+ try {
157
+ const body = JSON.parse(text);
158
+ if (typeof body !== "object" || body === null) return void 0;
159
+ const error = body.error;
160
+ if (typeof error !== "object" || error === null) return void 0;
161
+ const retryable = error.retryable;
162
+ return typeof retryable === "boolean" ? retryable : void 0;
163
+ } catch {
164
+ return;
165
+ }
166
+ }
148
167
  /** Copy a public Runtime entitlement so callers cannot mutate cached authority. */
149
168
  function cloneRuntimeEntitlementResponse(response) {
150
169
  if (response.status === "ready") return {
@@ -625,7 +644,26 @@ var CopilotKitIntelligence = class {
625
644
  clearTimeout(timeout);
626
645
  }
627
646
  }
628
- async #request(method, path, body, extraHeaders) {
647
+ /** Mint a browser capture grant using only the Runtime's project and user. */
648
+ async ɵconnectTrajectory(params) {
649
+ const response = await fetch(`${this.#apiUrl}/api/trajectories/join`, {
650
+ method: "POST",
651
+ headers: {
652
+ Authorization: `Bearer ${this.#apiKey}`,
653
+ "Content-Type": "application/json"
654
+ },
655
+ body: JSON.stringify({
656
+ trajectoryId: params.trajectoryId,
657
+ appUserId: params.user.id
658
+ }),
659
+ signal: params.signal,
660
+ redirect: "error"
661
+ });
662
+ const payload = await response.json().catch(() => void 0);
663
+ if (!response.ok) throw require_trajectories.trajectoryResponseError(payload, response.status, this.#apiKey);
664
+ return require_trajectories.parseTrajectoryConnectionGrant(payload, params.trajectoryId, this.ɵgetClientWsUrl());
665
+ }
666
+ async #request(method, path, body, extraHeaders, signal) {
629
667
  const url = `${this.#apiUrl}${path}`;
630
668
  const headers = {
631
669
  Authorization: `Bearer ${this.#apiKey}`,
@@ -635,7 +673,8 @@ var CopilotKitIntelligence = class {
635
673
  const response = await fetch(url, {
636
674
  method,
637
675
  headers,
638
- body: body ? JSON.stringify(body) : void 0
676
+ body: body ? JSON.stringify(body) : void 0,
677
+ signal
639
678
  });
640
679
  if (!response.ok) {
641
680
  const text = await response.text().catch(() => "");
@@ -644,7 +683,7 @@ var CopilotKitIntelligence = class {
644
683
  body: text,
645
684
  path
646
685
  }, "Intelligence platform request failed");
647
- throw new PlatformRequestError(`Intelligence platform error ${response.status}: ${text || response.statusText}`, response.status);
686
+ throw new PlatformRequestError(`Intelligence platform error ${response.status}: ${text || response.statusText}`, response.status, readErrorBodyRetryable(text));
648
687
  }
649
688
  const text = await response.text();
650
689
  if (!text) return;
@@ -1010,7 +1049,7 @@ var CopilotKitIntelligence = class {
1010
1049
  runId: params.runId,
1011
1050
  ttlSeconds: params.ttlSeconds,
1012
1051
  ...params.lockKeyPrefix !== void 0 ? { lockKeyPrefix: params.lockKeyPrefix } : {}
1013
- });
1052
+ }, void 0, params.signal);
1014
1053
  }
1015
1054
  async ɵgetActiveJoinCode(params) {
1016
1055
  const qs = new URLSearchParams({ userId: params.userId }).toString();