@copilotkit/runtime 1.77.1 → 1.77.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/package.cjs +1 -1
- package/dist/package.mjs +1 -1
- package/dist/v2/runtime/core/package-info.cjs +1 -1
- package/dist/v2/runtime/core/package-info.mjs +1 -1
- package/dist/v2/runtime/handlers/handle-trajectory-connect.cjs +1 -1
- package/dist/v2/runtime/handlers/handle-trajectory-connect.cjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-trajectory-connect.mjs +1 -1
- package/dist/v2/runtime/handlers/handle-trajectory-connect.mjs.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.cjs +36 -13
- package/dist/v2/runtime/intelligence-platform/client.cjs.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.d.cts.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.d.mts.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.mjs +36 -13
- package/dist/v2/runtime/intelligence-platform/client.mjs.map +1 -1
- package/dist/v2/runtime/intelligence-platform/trajectories.cjs +19 -3
- package/dist/v2/runtime/intelligence-platform/trajectories.cjs.map +1 -1
- package/dist/v2/runtime/intelligence-platform/trajectories.d.cts.map +1 -1
- package/dist/v2/runtime/intelligence-platform/trajectories.d.mts.map +1 -1
- package/dist/v2/runtime/intelligence-platform/trajectories.mjs +19 -3
- package/dist/v2/runtime/intelligence-platform/trajectories.mjs.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trajectories.cjs","names":["z"],"sources":["../../../../src/v2/runtime/intelligence-platform/trajectories.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport interface TrajectoryConnectionGrant {\n joinToken: string;\n realtime: { clientUrl: string; topic: string };\n}\n\nconst trajectoryIdSchema = z.string().uuid();\n\nexport function isValidTrajectoryId(value: unknown): value is string {\n return trajectoryIdSchema.safeParse(value).success;\n}\n\nconst joinResponseSchema = z.object({\n joinToken: z.string().refine((value) => value.trim().length > 0),\n trajectoryId: trajectoryIdSchema,\n});\n\nconst grantSchema = z.object({\n joinToken: z.string().refine((value) => value.trim().length > 0),\n realtime: z.object({\n clientUrl: z\n .string()\n .url()\n .refine((value) => {\n const url = new URL(value);\n return (\n (url.protocol === \"wss:\" || url.protocol === \"ws:\") &&\n !url.username &&\n !url.password\n );\n }),\n topic: z\n .string()\n .refine((value) => value.trim().length > 0 && !/\\p{Cc}/u.test(value)),\n }),\n});\n\nconst runtimeConfigurationErrorSchema = z.object({\n error: z.object({\n code: z.enum([\n \"AUTH_UNAUTHENTICATED\",\n \"API_KEY_NOT_FOUND\",\n \"ORG_NOT_FOUND\",\n \"PROJECT_NOT_FOUND\",\n ]),\n }),\n});\n\nconst contractErrorSchema = z.object({\n error: z.object({\n code: z.enum([\n \"VALIDATION_ERROR\",\n \"TRAJECTORY_APP_USER_CONFLICT\",\n \"LEARNING_CONTAINER_NOT_FOUND\",\n \"RATE_LIMIT_EXCEEDED\",\n \"INTERNAL_SERVER_ERROR\",\n \"MARKETPLACE_LICENSE_REQUIRED\",\n ]),\n message: z.string().trim().min(1).max(512),\n }),\n});\n\nexport class TrajectoryConnectionError extends Error {\n constructor(\n public readonly code: string,\n message: string,\n public readonly status: number,\n ) {\n super(message);\n this.name = \"TrajectoryConnectionError\";\n }\n}\n\nexport function parseTrajectoryConnectionGrant(\n value: unknown,\n trajectoryId: string,\n clientUrl: string,\n): TrajectoryConnectionGrant {\n const join = joinResponseSchema.safeParse(value);\n const result = grantSchema.safeParse(\n join.success && join.data.trajectoryId === trajectoryId\n ? {\n joinToken: join.data.joinToken,\n realtime: { clientUrl, topic: `trajectory:${trajectoryId}` },\n }\n : undefined,\n );\n if (!result.success) {\n throw new TrajectoryConnectionError(\n \"CONNECTION_FAILED\",\n \"Intelligence returned an invalid trajectory connection grant\",\n 502,\n );\n }\n return {\n joinToken: result.data.joinToken,\n realtime: {\n clientUrl: result.data.realtime.clientUrl,\n topic: result.data.realtime.topic,\n },\n };\n}\n\n/** Forward only the public contract, never raw platform errors or credentials. */\nexport function trajectoryResponseError(\n value: unknown,\n status: number,\n apiKey: string,\n): TrajectoryConnectionError {\n // These failures describe the Runtime's server credentials or tenant setup,\n // not the browser user's identity. Do not expose them as a client auth error.\n if (runtimeConfigurationErrorSchema.safeParse(value).success) {\n return new TrajectoryConnectionError(\n \"CONNECTION_FAILED\",\n \"Could not connect to Intelligence\",\n 502,\n );\n }\n
|
|
1
|
+
{"version":3,"file":"trajectories.cjs","names":["z"],"sources":["../../../../src/v2/runtime/intelligence-platform/trajectories.ts"],"sourcesContent":["import { logger } from \"@copilotkit/shared\";\nimport { z } from \"zod\";\n\nexport interface TrajectoryConnectionGrant {\n joinToken: string;\n realtime: { clientUrl: string; topic: string };\n}\n\nconst trajectoryIdSchema = z.string().uuid();\n\nexport function isValidTrajectoryId(value: unknown): value is string {\n return trajectoryIdSchema.safeParse(value).success;\n}\n\nconst joinResponseSchema = z.object({\n joinToken: z.string().refine((value) => value.trim().length > 0),\n trajectoryId: trajectoryIdSchema,\n});\n\nconst grantSchema = z.object({\n joinToken: z.string().refine((value) => value.trim().length > 0),\n realtime: z.object({\n clientUrl: z\n .string()\n .url()\n .refine((value) => {\n const url = new URL(value);\n return (\n (url.protocol === \"wss:\" || url.protocol === \"ws:\") &&\n !url.username &&\n !url.password\n );\n }),\n topic: z\n .string()\n .refine((value) => value.trim().length > 0 && !/\\p{Cc}/u.test(value)),\n }),\n});\n\nconst runtimeConfigurationErrorSchema = z.object({\n error: z.object({\n code: z.enum([\n \"AUTH_UNAUTHENTICATED\",\n \"API_KEY_NOT_FOUND\",\n \"ORG_NOT_FOUND\",\n \"PROJECT_NOT_FOUND\",\n ]),\n }),\n});\n\nconst contractErrorSchema = z.object({\n error: z.object({\n code: z.enum([\n \"VALIDATION_ERROR\",\n \"TRAJECTORY_APP_USER_CONFLICT\",\n \"LEARNING_CONTAINER_NOT_FOUND\",\n \"RATE_LIMIT_EXCEEDED\",\n \"INTERNAL_SERVER_ERROR\",\n \"MARKETPLACE_LICENSE_REQUIRED\",\n \"TRAJECTORIES_NOT_ENABLED\",\n ]),\n message: z.string().trim().min(1).max(512),\n }),\n});\n\nexport class TrajectoryConnectionError extends Error {\n constructor(\n public readonly code: string,\n message: string,\n public readonly status: number,\n ) {\n super(message);\n this.name = \"TrajectoryConnectionError\";\n }\n}\n\nexport function parseTrajectoryConnectionGrant(\n value: unknown,\n trajectoryId: string,\n clientUrl: string,\n): TrajectoryConnectionGrant {\n const join = joinResponseSchema.safeParse(value);\n const result = grantSchema.safeParse(\n join.success && join.data.trajectoryId === trajectoryId\n ? {\n joinToken: join.data.joinToken,\n realtime: { clientUrl, topic: `trajectory:${trajectoryId}` },\n }\n : undefined,\n );\n if (!result.success) {\n const joinValid = join.success && join.data.trajectoryId === trajectoryId;\n logger.warn(\n { trajectoryIdMatches: joinValid },\n joinValid\n ? \"Intelligence returned a Trajectory join token, but the Gateway URL is invalid; check the Intelligence wsUrl\"\n : \"Intelligence returned an invalid Trajectory join response\",\n );\n throw new TrajectoryConnectionError(\n \"CONNECTION_FAILED\",\n \"Intelligence returned an invalid trajectory connection grant\",\n 502,\n );\n }\n return {\n joinToken: result.data.joinToken,\n realtime: {\n clientUrl: result.data.realtime.clientUrl,\n topic: result.data.realtime.topic,\n },\n };\n}\n\n// Intelligence answers with this code when Trajectory capture is switched off\n// for the deployment, because the join route is then not registered.\nconst routeNotFoundSchema = z.object({\n error: z.object({ code: z.literal(\"ROUTE_NOT_FOUND\") }),\n});\n\nconst upstreamCodeSchema = z.object({\n error: z.object({ code: z.string().regex(/^[A-Z][A-Z0-9_]{0,63}$/) }),\n});\n\n/** Forward only the public contract, never raw platform errors or credentials. */\nexport function trajectoryResponseError(\n value: unknown,\n status: number,\n apiKey: string,\n): TrajectoryConnectionError {\n const result = contractErrorSchema.safeParse(value);\n if (result.success && !result.data.error.message.includes(apiKey)) {\n return new TrajectoryConnectionError(\n result.data.error.code,\n result.data.error.message,\n status,\n );\n }\n if (status === 404 && routeNotFoundSchema.safeParse(value).success) {\n logger.warn(\n { status },\n \"Intelligence does not serve Trajectory capture; enable Trajectories for this deployment\",\n );\n return new TrajectoryConnectionError(\n \"TRAJECTORIES_UNAVAILABLE\",\n \"This Intelligence deployment does not serve Trajectory capture\",\n 404,\n );\n }\n // The browser only learns that the connection failed. Log the upstream code,\n // never the message, so the cause is visible to the Runtime's operator.\n logger.warn(\n {\n status,\n upstreamCode: upstreamCodeSchema.safeParse(value).data?.error.code,\n },\n \"Intelligence rejected the Trajectory connection request; the browser receives CONNECTION_FAILED\",\n );\n // These failures describe the Runtime's server credentials or tenant setup,\n // not the browser user's identity. Do not expose them as a client auth error.\n if (runtimeConfigurationErrorSchema.safeParse(value).success) {\n return new TrajectoryConnectionError(\n \"CONNECTION_FAILED\",\n \"Could not connect to Intelligence\",\n 502,\n );\n }\n return new TrajectoryConnectionError(\n \"CONNECTION_FAILED\",\n \"Intelligence rejected the trajectory connection request\",\n status,\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trajectories.d.cts","names":[],"sources":["../../../../src/v2/runtime/intelligence-platform/trajectories.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"trajectories.d.cts","names":[],"sources":["../../../../src/v2/runtime/intelligence-platform/trajectories.ts"],"mappings":";;UAGiB,yBAAA;EACf,SAAA;EACA,QAAA;IAAY,SAAA;IAAmB,KAAA;EAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trajectories.d.mts","names":[],"sources":["../../../../src/v2/runtime/intelligence-platform/trajectories.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"trajectories.d.mts","names":[],"sources":["../../../../src/v2/runtime/intelligence-platform/trajectories.ts"],"mappings":";;UAGiB,yBAAA;EACf,SAAA;EACA,QAAA;IAAY,SAAA;IAAmB,KAAA;EAAA;AAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import "reflect-metadata";
|
|
2
|
+
import { logger } from "@copilotkit/shared";
|
|
2
3
|
import { z } from "zod";
|
|
3
4
|
|
|
4
5
|
//#region src/v2/runtime/intelligence-platform/trajectories.ts
|
|
@@ -33,7 +34,8 @@ const contractErrorSchema = z.object({ error: z.object({
|
|
|
33
34
|
"LEARNING_CONTAINER_NOT_FOUND",
|
|
34
35
|
"RATE_LIMIT_EXCEEDED",
|
|
35
36
|
"INTERNAL_SERVER_ERROR",
|
|
36
|
-
"MARKETPLACE_LICENSE_REQUIRED"
|
|
37
|
+
"MARKETPLACE_LICENSE_REQUIRED",
|
|
38
|
+
"TRAJECTORIES_NOT_ENABLED"
|
|
37
39
|
]),
|
|
38
40
|
message: z.string().trim().min(1).max(512)
|
|
39
41
|
}) });
|
|
@@ -54,7 +56,11 @@ function parseTrajectoryConnectionGrant(value, trajectoryId, clientUrl) {
|
|
|
54
56
|
topic: `trajectory:${trajectoryId}`
|
|
55
57
|
}
|
|
56
58
|
} : void 0);
|
|
57
|
-
if (!result.success)
|
|
59
|
+
if (!result.success) {
|
|
60
|
+
const joinValid = join.success && join.data.trajectoryId === trajectoryId;
|
|
61
|
+
logger.warn({ trajectoryIdMatches: joinValid }, joinValid ? "Intelligence returned a Trajectory join token, but the Gateway URL is invalid; check the Intelligence wsUrl" : "Intelligence returned an invalid Trajectory join response");
|
|
62
|
+
throw new TrajectoryConnectionError("CONNECTION_FAILED", "Intelligence returned an invalid trajectory connection grant", 502);
|
|
63
|
+
}
|
|
58
64
|
return {
|
|
59
65
|
joinToken: result.data.joinToken,
|
|
60
66
|
realtime: {
|
|
@@ -63,11 +69,21 @@ function parseTrajectoryConnectionGrant(value, trajectoryId, clientUrl) {
|
|
|
63
69
|
}
|
|
64
70
|
};
|
|
65
71
|
}
|
|
72
|
+
const routeNotFoundSchema = z.object({ error: z.object({ code: z.literal("ROUTE_NOT_FOUND") }) });
|
|
73
|
+
const upstreamCodeSchema = z.object({ error: z.object({ code: z.string().regex(/^[A-Z][A-Z0-9_]{0,63}$/) }) });
|
|
66
74
|
/** Forward only the public contract, never raw platform errors or credentials. */
|
|
67
75
|
function trajectoryResponseError(value, status, apiKey) {
|
|
68
|
-
if (runtimeConfigurationErrorSchema.safeParse(value).success) return new TrajectoryConnectionError("CONNECTION_FAILED", "Could not connect to Intelligence", 502);
|
|
69
76
|
const result = contractErrorSchema.safeParse(value);
|
|
70
77
|
if (result.success && !result.data.error.message.includes(apiKey)) return new TrajectoryConnectionError(result.data.error.code, result.data.error.message, status);
|
|
78
|
+
if (status === 404 && routeNotFoundSchema.safeParse(value).success) {
|
|
79
|
+
logger.warn({ status }, "Intelligence does not serve Trajectory capture; enable Trajectories for this deployment");
|
|
80
|
+
return new TrajectoryConnectionError("TRAJECTORIES_UNAVAILABLE", "This Intelligence deployment does not serve Trajectory capture", 404);
|
|
81
|
+
}
|
|
82
|
+
logger.warn({
|
|
83
|
+
status,
|
|
84
|
+
upstreamCode: upstreamCodeSchema.safeParse(value).data?.error.code
|
|
85
|
+
}, "Intelligence rejected the Trajectory connection request; the browser receives CONNECTION_FAILED");
|
|
86
|
+
if (runtimeConfigurationErrorSchema.safeParse(value).success) return new TrajectoryConnectionError("CONNECTION_FAILED", "Could not connect to Intelligence", 502);
|
|
71
87
|
return new TrajectoryConnectionError("CONNECTION_FAILED", "Intelligence rejected the trajectory connection request", status);
|
|
72
88
|
}
|
|
73
89
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trajectories.mjs","names":[],"sources":["../../../../src/v2/runtime/intelligence-platform/trajectories.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport interface TrajectoryConnectionGrant {\n joinToken: string;\n realtime: { clientUrl: string; topic: string };\n}\n\nconst trajectoryIdSchema = z.string().uuid();\n\nexport function isValidTrajectoryId(value: unknown): value is string {\n return trajectoryIdSchema.safeParse(value).success;\n}\n\nconst joinResponseSchema = z.object({\n joinToken: z.string().refine((value) => value.trim().length > 0),\n trajectoryId: trajectoryIdSchema,\n});\n\nconst grantSchema = z.object({\n joinToken: z.string().refine((value) => value.trim().length > 0),\n realtime: z.object({\n clientUrl: z\n .string()\n .url()\n .refine((value) => {\n const url = new URL(value);\n return (\n (url.protocol === \"wss:\" || url.protocol === \"ws:\") &&\n !url.username &&\n !url.password\n );\n }),\n topic: z\n .string()\n .refine((value) => value.trim().length > 0 && !/\\p{Cc}/u.test(value)),\n }),\n});\n\nconst runtimeConfigurationErrorSchema = z.object({\n error: z.object({\n code: z.enum([\n \"AUTH_UNAUTHENTICATED\",\n \"API_KEY_NOT_FOUND\",\n \"ORG_NOT_FOUND\",\n \"PROJECT_NOT_FOUND\",\n ]),\n }),\n});\n\nconst contractErrorSchema = z.object({\n error: z.object({\n code: z.enum([\n \"VALIDATION_ERROR\",\n \"TRAJECTORY_APP_USER_CONFLICT\",\n \"LEARNING_CONTAINER_NOT_FOUND\",\n \"RATE_LIMIT_EXCEEDED\",\n \"INTERNAL_SERVER_ERROR\",\n \"MARKETPLACE_LICENSE_REQUIRED\",\n ]),\n message: z.string().trim().min(1).max(512),\n }),\n});\n\nexport class TrajectoryConnectionError extends Error {\n constructor(\n public readonly code: string,\n message: string,\n public readonly status: number,\n ) {\n super(message);\n this.name = \"TrajectoryConnectionError\";\n }\n}\n\nexport function parseTrajectoryConnectionGrant(\n value: unknown,\n trajectoryId: string,\n clientUrl: string,\n): TrajectoryConnectionGrant {\n const join = joinResponseSchema.safeParse(value);\n const result = grantSchema.safeParse(\n join.success && join.data.trajectoryId === trajectoryId\n ? {\n joinToken: join.data.joinToken,\n realtime: { clientUrl, topic: `trajectory:${trajectoryId}` },\n }\n : undefined,\n );\n if (!result.success) {\n throw new TrajectoryConnectionError(\n \"CONNECTION_FAILED\",\n \"Intelligence returned an invalid trajectory connection grant\",\n 502,\n );\n }\n return {\n joinToken: result.data.joinToken,\n realtime: {\n clientUrl: result.data.realtime.clientUrl,\n topic: result.data.realtime.topic,\n },\n };\n}\n\n/** Forward only the public contract, never raw platform errors or credentials. */\nexport function trajectoryResponseError(\n value: unknown,\n status: number,\n apiKey: string,\n): TrajectoryConnectionError {\n // These failures describe the Runtime's server credentials or tenant setup,\n // not the browser user's identity. Do not expose them as a client auth error.\n if (runtimeConfigurationErrorSchema.safeParse(value).success) {\n return new TrajectoryConnectionError(\n \"CONNECTION_FAILED\",\n \"Could not connect to Intelligence\",\n 502,\n );\n }\n
|
|
1
|
+
{"version":3,"file":"trajectories.mjs","names":[],"sources":["../../../../src/v2/runtime/intelligence-platform/trajectories.ts"],"sourcesContent":["import { logger } from \"@copilotkit/shared\";\nimport { z } from \"zod\";\n\nexport interface TrajectoryConnectionGrant {\n joinToken: string;\n realtime: { clientUrl: string; topic: string };\n}\n\nconst trajectoryIdSchema = z.string().uuid();\n\nexport function isValidTrajectoryId(value: unknown): value is string {\n return trajectoryIdSchema.safeParse(value).success;\n}\n\nconst joinResponseSchema = z.object({\n joinToken: z.string().refine((value) => value.trim().length > 0),\n trajectoryId: trajectoryIdSchema,\n});\n\nconst grantSchema = z.object({\n joinToken: z.string().refine((value) => value.trim().length > 0),\n realtime: z.object({\n clientUrl: z\n .string()\n .url()\n .refine((value) => {\n const url = new URL(value);\n return (\n (url.protocol === \"wss:\" || url.protocol === \"ws:\") &&\n !url.username &&\n !url.password\n );\n }),\n topic: z\n .string()\n .refine((value) => value.trim().length > 0 && !/\\p{Cc}/u.test(value)),\n }),\n});\n\nconst runtimeConfigurationErrorSchema = z.object({\n error: z.object({\n code: z.enum([\n \"AUTH_UNAUTHENTICATED\",\n \"API_KEY_NOT_FOUND\",\n \"ORG_NOT_FOUND\",\n \"PROJECT_NOT_FOUND\",\n ]),\n }),\n});\n\nconst contractErrorSchema = z.object({\n error: z.object({\n code: z.enum([\n \"VALIDATION_ERROR\",\n \"TRAJECTORY_APP_USER_CONFLICT\",\n \"LEARNING_CONTAINER_NOT_FOUND\",\n \"RATE_LIMIT_EXCEEDED\",\n \"INTERNAL_SERVER_ERROR\",\n \"MARKETPLACE_LICENSE_REQUIRED\",\n \"TRAJECTORIES_NOT_ENABLED\",\n ]),\n message: z.string().trim().min(1).max(512),\n }),\n});\n\nexport class TrajectoryConnectionError extends Error {\n constructor(\n public readonly code: string,\n message: string,\n public readonly status: number,\n ) {\n super(message);\n this.name = \"TrajectoryConnectionError\";\n }\n}\n\nexport function parseTrajectoryConnectionGrant(\n value: unknown,\n trajectoryId: string,\n clientUrl: string,\n): TrajectoryConnectionGrant {\n const join = joinResponseSchema.safeParse(value);\n const result = grantSchema.safeParse(\n join.success && join.data.trajectoryId === trajectoryId\n ? {\n joinToken: join.data.joinToken,\n realtime: { clientUrl, topic: `trajectory:${trajectoryId}` },\n }\n : undefined,\n );\n if (!result.success) {\n const joinValid = join.success && join.data.trajectoryId === trajectoryId;\n logger.warn(\n { trajectoryIdMatches: joinValid },\n joinValid\n ? \"Intelligence returned a Trajectory join token, but the Gateway URL is invalid; check the Intelligence wsUrl\"\n : \"Intelligence returned an invalid Trajectory join response\",\n );\n throw new TrajectoryConnectionError(\n \"CONNECTION_FAILED\",\n \"Intelligence returned an invalid trajectory connection grant\",\n 502,\n );\n }\n return {\n joinToken: result.data.joinToken,\n realtime: {\n clientUrl: result.data.realtime.clientUrl,\n topic: result.data.realtime.topic,\n },\n };\n}\n\n// Intelligence answers with this code when Trajectory capture is switched off\n// for the deployment, because the join route is then not registered.\nconst routeNotFoundSchema = z.object({\n error: z.object({ code: z.literal(\"ROUTE_NOT_FOUND\") }),\n});\n\nconst upstreamCodeSchema = z.object({\n error: z.object({ code: z.string().regex(/^[A-Z][A-Z0-9_]{0,63}$/) }),\n});\n\n/** Forward only the public contract, never raw platform errors or credentials. */\nexport function trajectoryResponseError(\n value: unknown,\n status: number,\n apiKey: string,\n): TrajectoryConnectionError {\n const result = contractErrorSchema.safeParse(value);\n if (result.success && !result.data.error.message.includes(apiKey)) {\n return new TrajectoryConnectionError(\n result.data.error.code,\n result.data.error.message,\n status,\n );\n }\n if (status === 404 && routeNotFoundSchema.safeParse(value).success) {\n logger.warn(\n { status },\n \"Intelligence does not serve Trajectory capture; enable Trajectories for this deployment\",\n );\n return new TrajectoryConnectionError(\n \"TRAJECTORIES_UNAVAILABLE\",\n \"This Intelligence deployment does not serve Trajectory capture\",\n 404,\n );\n }\n // The browser only learns that the connection failed. Log the upstream code,\n // never the message, so the cause is visible to the Runtime's operator.\n logger.warn(\n {\n status,\n upstreamCode: upstreamCodeSchema.safeParse(value).data?.error.code,\n },\n \"Intelligence rejected the Trajectory connection request; the browser receives CONNECTION_FAILED\",\n );\n // These failures describe the Runtime's server credentials or tenant setup,\n // not the browser user's identity. Do not expose them as a client auth error.\n if (runtimeConfigurationErrorSchema.safeParse(value).success) {\n return new TrajectoryConnectionError(\n \"CONNECTION_FAILED\",\n \"Could not connect to Intelligence\",\n 502,\n );\n }\n return new TrajectoryConnectionError(\n \"CONNECTION_FAILED\",\n \"Intelligence rejected the trajectory connection request\",\n status,\n );\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@copilotkit/runtime",
|
|
3
|
-
"version": "1.77.
|
|
3
|
+
"version": "1.77.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -109,9 +109,9 @@
|
|
|
109
109
|
"ws": "^8.18.0",
|
|
110
110
|
"zod": "^3.25.18",
|
|
111
111
|
"yauzl": "2.10.0",
|
|
112
|
-
"@copilotkit/channels-core": "^0.11.0",
|
|
113
112
|
"@copilotkit/channels-intelligence": "0.11.0",
|
|
114
|
-
"@copilotkit/
|
|
113
|
+
"@copilotkit/channels-core": "^0.11.0",
|
|
114
|
+
"@copilotkit/shared": "1.77.2"
|
|
115
115
|
},
|
|
116
116
|
"devDependencies": {
|
|
117
117
|
"@copilotkit/aimock": "latest",
|
|
@@ -136,8 +136,8 @@
|
|
|
136
136
|
"valibot": "^1.2.0",
|
|
137
137
|
"vitest": "^3.2.4",
|
|
138
138
|
"@types/yauzl": "2.10.3",
|
|
139
|
-
"
|
|
140
|
-
"
|
|
139
|
+
"tsconfig": "1.4.12",
|
|
140
|
+
"@copilotkit/channels": "0.11.0"
|
|
141
141
|
},
|
|
142
142
|
"peerDependencies": {
|
|
143
143
|
"@anthropic-ai/sdk": ">=0.57.0",
|