@copilotkit/runtime 1.56.2 → 1.56.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/graphql/resolvers/copilot.resolver.cjs +2 -1
- package/dist/graphql/resolvers/copilot.resolver.cjs.map +1 -1
- package/dist/graphql/resolvers/copilot.resolver.mjs +2 -1
- package/dist/graphql/resolvers/copilot.resolver.mjs.map +1 -1
- package/dist/graphql/resolvers/resolve-message-id.cjs +19 -0
- package/dist/graphql/resolvers/resolve-message-id.cjs.map +1 -0
- package/dist/graphql/resolvers/resolve-message-id.mjs +18 -0
- package/dist/graphql/resolvers/resolve-message-id.mjs.map +1 -0
- package/dist/lib/runtime/copilot-runtime.cjs +4 -2
- package/dist/lib/runtime/copilot-runtime.cjs.map +1 -1
- package/dist/lib/runtime/copilot-runtime.d.cts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.d.mts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.mjs +4 -2
- package/dist/lib/runtime/copilot-runtime.mjs.map +1 -1
- package/dist/package.cjs +2 -2
- package/dist/package.mjs +2 -2
- package/dist/v2/index.d.cts +2 -2
- package/dist/v2/index.d.mts +2 -2
- package/dist/v2/runtime/core/debug-event-bus.cjs +36 -0
- package/dist/v2/runtime/core/debug-event-bus.cjs.map +1 -0
- package/dist/v2/runtime/core/debug-event-bus.d.cts +19 -0
- package/dist/v2/runtime/core/debug-event-bus.d.cts.map +1 -0
- package/dist/v2/runtime/core/debug-event-bus.d.mts +19 -0
- package/dist/v2/runtime/core/debug-event-bus.d.mts.map +1 -0
- package/dist/v2/runtime/core/debug-event-bus.mjs +35 -0
- package/dist/v2/runtime/core/debug-event-bus.mjs.map +1 -0
- package/dist/v2/runtime/core/fetch-handler.cjs +8 -0
- package/dist/v2/runtime/core/fetch-handler.cjs.map +1 -1
- package/dist/v2/runtime/core/fetch-handler.d.cts.map +1 -1
- package/dist/v2/runtime/core/fetch-handler.d.mts.map +1 -1
- package/dist/v2/runtime/core/fetch-handler.mjs +8 -0
- package/dist/v2/runtime/core/fetch-handler.mjs.map +1 -1
- package/dist/v2/runtime/core/fetch-router.cjs +1 -0
- package/dist/v2/runtime/core/fetch-router.cjs.map +1 -1
- package/dist/v2/runtime/core/fetch-router.mjs +1 -0
- package/dist/v2/runtime/core/fetch-router.mjs.map +1 -1
- package/dist/v2/runtime/core/hooks.cjs.map +1 -1
- package/dist/v2/runtime/core/hooks.d.cts +2 -0
- package/dist/v2/runtime/core/hooks.d.cts.map +1 -1
- package/dist/v2/runtime/core/hooks.d.mts +2 -0
- package/dist/v2/runtime/core/hooks.d.mts.map +1 -1
- package/dist/v2/runtime/core/hooks.mjs.map +1 -1
- package/dist/v2/runtime/core/runtime.cjs +5 -0
- package/dist/v2/runtime/core/runtime.cjs.map +1 -1
- package/dist/v2/runtime/core/runtime.d.cts +5 -0
- package/dist/v2/runtime/core/runtime.d.cts.map +1 -1
- package/dist/v2/runtime/core/runtime.d.mts +5 -1
- package/dist/v2/runtime/core/runtime.d.mts.map +1 -1
- package/dist/v2/runtime/core/runtime.mjs +5 -0
- package/dist/v2/runtime/core/runtime.mjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-connect.cjs +3 -2
- package/dist/v2/runtime/handlers/handle-connect.cjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-connect.mjs +3 -2
- package/dist/v2/runtime/handlers/handle-connect.mjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-debug-events.cjs +33 -0
- package/dist/v2/runtime/handlers/handle-debug-events.cjs.map +1 -0
- package/dist/v2/runtime/handlers/handle-debug-events.mjs +32 -0
- package/dist/v2/runtime/handlers/handle-debug-events.mjs.map +1 -0
- package/dist/v2/runtime/handlers/handle-run.cjs +1 -0
- package/dist/v2/runtime/handlers/handle-run.cjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-run.mjs +1 -0
- package/dist/v2/runtime/handlers/handle-run.mjs.map +1 -1
- package/dist/v2/runtime/handlers/intelligence/connect.cjs +24 -4
- package/dist/v2/runtime/handlers/intelligence/connect.cjs.map +1 -1
- package/dist/v2/runtime/handlers/intelligence/connect.mjs +25 -5
- package/dist/v2/runtime/handlers/intelligence/connect.mjs.map +1 -1
- package/dist/v2/runtime/handlers/intelligence/run.cjs +111 -26
- package/dist/v2/runtime/handlers/intelligence/run.cjs.map +1 -1
- package/dist/v2/runtime/handlers/intelligence/run.mjs +111 -26
- package/dist/v2/runtime/handlers/intelligence/run.mjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/intelligence-utils.cjs +7 -3
- package/dist/v2/runtime/handlers/shared/intelligence-utils.cjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/intelligence-utils.mjs +7 -3
- package/dist/v2/runtime/handlers/shared/intelligence-utils.mjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/resolve-intelligence-user.cjs +5 -1
- package/dist/v2/runtime/handlers/shared/resolve-intelligence-user.cjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/resolve-intelligence-user.mjs +5 -1
- package/dist/v2/runtime/handlers/shared/resolve-intelligence-user.mjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/sse-response.cjs +21 -1
- package/dist/v2/runtime/handlers/shared/sse-response.cjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/sse-response.mjs +21 -1
- package/dist/v2/runtime/handlers/shared/sse-response.mjs.map +1 -1
- package/dist/v2/runtime/handlers/sse/connect.cjs +3 -1
- package/dist/v2/runtime/handlers/sse/connect.cjs.map +1 -1
- package/dist/v2/runtime/handlers/sse/connect.mjs +3 -1
- package/dist/v2/runtime/handlers/sse/connect.mjs.map +1 -1
- package/dist/v2/runtime/handlers/sse/run.cjs +3 -1
- package/dist/v2/runtime/handlers/sse/run.cjs.map +1 -1
- package/dist/v2/runtime/handlers/sse/run.mjs +3 -1
- package/dist/v2/runtime/handlers/sse/run.mjs.map +1 -1
- package/dist/v2/runtime/index.d.cts +1 -1
- package/dist/v2/runtime/index.d.mts +1 -2
- package/dist/v2/runtime/index.d.mts.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.cjs +6 -8
- package/dist/v2/runtime/intelligence-platform/client.cjs.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.d.cts +16 -21
- package/dist/v2/runtime/intelligence-platform/client.d.cts.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.d.mts +16 -21
- package/dist/v2/runtime/intelligence-platform/client.d.mts.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.mjs +6 -8
- package/dist/v2/runtime/intelligence-platform/client.mjs.map +1 -1
- package/dist/v2/runtime/runner/agent-runner.cjs.map +1 -1
- package/dist/v2/runtime/runner/agent-runner.d.cts +0 -1
- package/dist/v2/runtime/runner/agent-runner.d.cts.map +1 -1
- package/dist/v2/runtime/runner/agent-runner.d.mts +0 -1
- package/dist/v2/runtime/runner/agent-runner.d.mts.map +1 -1
- package/dist/v2/runtime/runner/agent-runner.mjs.map +1 -1
- package/dist/v2/runtime/runner/index.d.cts +1 -1
- package/dist/v2/runtime/runner/index.d.mts +1 -1
- package/dist/v2/runtime/runner/intelligence.cjs +47 -10
- package/dist/v2/runtime/runner/intelligence.cjs.map +1 -1
- package/dist/v2/runtime/runner/intelligence.d.cts +8 -1
- package/dist/v2/runtime/runner/intelligence.d.cts.map +1 -1
- package/dist/v2/runtime/runner/intelligence.d.mts +8 -1
- package/dist/v2/runtime/runner/intelligence.d.mts.map +1 -1
- package/dist/v2/runtime/runner/intelligence.mjs +47 -10
- package/dist/v2/runtime/runner/intelligence.mjs.map +1 -1
- package/dist/v2/runtime/telemetry/instance-created.cjs +33 -0
- package/dist/v2/runtime/telemetry/instance-created.cjs.map +1 -0
- package/dist/v2/runtime/telemetry/instance-created.mjs +33 -0
- package/dist/v2/runtime/telemetry/instance-created.mjs.map +1 -0
- package/dist/v2/runtime/telemetry/telemetry-client.cjs +1 -38
- package/dist/v2/runtime/telemetry/telemetry-client.cjs.map +1 -1
- package/dist/v2/runtime/telemetry/telemetry-client.mjs +1 -37
- package/dist/v2/runtime/telemetry/telemetry-client.mjs.map +1 -1
- package/package.json +3 -3
- package/src/agents/langgraph/__tests__/event-source.test.ts +256 -0
- package/src/graphql/resolvers/__tests__/resolve-message-id.test.ts +25 -0
- package/src/graphql/resolvers/copilot.resolver.ts +2 -1
- package/src/graphql/resolvers/resolve-message-id.ts +14 -0
- package/src/lib/runtime/__tests__/handle-service-adapter.test.ts +108 -0
- package/src/lib/runtime/__tests__/retry-utils.test.ts +137 -0
- package/src/lib/runtime/agent-integrations/langgraph/__tests__/dispatch-event-filtering.test.ts +190 -0
- package/src/lib/runtime/copilot-runtime.ts +20 -4
- package/src/lib/runtime/retry-utils.ts +41 -1
- package/src/v2/runtime/__tests__/express-single-telemetry.integration.test.ts +65 -0
- package/src/v2/runtime/__tests__/express-telemetry.integration.test.ts +101 -0
- package/src/v2/runtime/__tests__/fetch-router.test.ts +22 -0
- package/src/v2/runtime/__tests__/handle-connect.test.ts +183 -23
- package/src/v2/runtime/__tests__/handle-run.test.ts +411 -33
- package/src/v2/runtime/__tests__/handle-threads.test.ts +66 -4
- package/src/v2/runtime/__tests__/hono-single-telemetry.integration.test.ts +46 -0
- package/src/v2/runtime/__tests__/hono-telemetry.integration.test.ts +99 -0
- package/src/v2/runtime/__tests__/integration/node-servers.integration.test.ts +19 -0
- package/src/v2/runtime/__tests__/integration/suites/debug-events.suite.ts +253 -0
- package/src/v2/runtime/__tests__/intelligence-run-telemetry.test.ts +194 -0
- package/src/v2/runtime/__tests__/runtime.test.ts +3 -1
- package/src/v2/runtime/__tests__/sse-response-telemetry.test.ts +108 -0
- package/src/v2/runtime/__tests__/telemetry.test.ts +0 -61
- package/src/v2/runtime/core/__tests__/debug-event-bus.test.ts +156 -0
- package/src/v2/runtime/core/debug-event-bus.ts +45 -0
- package/src/v2/runtime/core/fetch-handler.ts +7 -0
- package/src/v2/runtime/core/fetch-router.ts +11 -0
- package/src/v2/runtime/core/hooks.ts +2 -1
- package/src/v2/runtime/core/runtime.ts +12 -0
- package/src/v2/runtime/handlers/__tests__/handle-debug-events.test.ts +176 -0
- package/src/v2/runtime/handlers/handle-connect.ts +2 -1
- package/src/v2/runtime/handlers/handle-debug-events.ts +52 -0
- package/src/v2/runtime/handlers/handle-run.ts +1 -0
- package/src/v2/runtime/handlers/intelligence/connect.ts +48 -11
- package/src/v2/runtime/handlers/intelligence/run.ts +162 -21
- package/src/v2/runtime/handlers/shared/intelligence-utils.ts +21 -1
- package/src/v2/runtime/handlers/shared/resolve-intelligence-user.ts +4 -1
- package/src/v2/runtime/handlers/shared/sse-response.ts +46 -0
- package/src/v2/runtime/handlers/sse/__tests__/sse-connect-agent-id.test.ts +71 -0
- package/src/v2/runtime/handlers/sse/connect.ts +6 -0
- package/src/v2/runtime/handlers/sse/run.ts +4 -0
- package/src/v2/runtime/intelligence-platform/__tests__/client.test.ts +33 -37
- package/src/v2/runtime/intelligence-platform/client.ts +37 -40
- package/src/v2/runtime/runner/__tests__/intelligence-runner.test.ts +66 -8
- package/src/v2/runtime/runner/agent-runner.ts +0 -1
- package/src/v2/runtime/runner/intelligence.ts +74 -15
- package/src/v2/runtime/telemetry/__tests__/instance-created.test.ts +96 -0
- package/src/v2/runtime/telemetry/instance-created.ts +44 -0
- package/src/v2/runtime/telemetry/telemetry-client.ts +1 -57
- package/dist/v2/runtime/intelligence-platform/index.d.mts +0 -2
- package/dist/v2/runtime/telemetry/utils.cjs +0 -15
- package/dist/v2/runtime/telemetry/utils.cjs.map +0 -1
- package/dist/v2/runtime/telemetry/utils.mjs +0 -14
- package/dist/v2/runtime/telemetry/utils.mjs.map +0 -1
- package/src/v2/runtime/telemetry/utils.ts +0 -15
|
@@ -228,18 +228,21 @@ describe("handleConnectAgent", () => {
|
|
|
228
228
|
afterRequestMiddleware: undefined,
|
|
229
229
|
runner,
|
|
230
230
|
mode: "intelligence",
|
|
231
|
-
identifyUser: vi
|
|
232
|
-
|
|
231
|
+
identifyUser: vi
|
|
232
|
+
.fn()
|
|
233
|
+
.mockResolvedValue({ id: "user-1", name: "User One" }),
|
|
234
|
+
intelligence: {
|
|
235
|
+
ɵgetClientWsUrl: vi.fn(() => "wss://runtime.example/client"),
|
|
236
|
+
...platform,
|
|
237
|
+
},
|
|
233
238
|
} as unknown as CopilotRuntime;
|
|
234
239
|
};
|
|
235
240
|
|
|
236
|
-
it("returns
|
|
241
|
+
it("returns runtime websocket connection credentials when available", async () => {
|
|
237
242
|
const platform = {
|
|
238
243
|
ɵconnectThread: vi.fn().mockResolvedValue({
|
|
239
|
-
|
|
244
|
+
threadId: "thread-1",
|
|
240
245
|
joinToken: "jt-connect-1",
|
|
241
|
-
joinFromEventId: "event-1",
|
|
242
|
-
events: [],
|
|
243
246
|
}),
|
|
244
247
|
};
|
|
245
248
|
const runtime = createIntelligenceRuntime(platform);
|
|
@@ -254,24 +257,25 @@ describe("handleConnectAgent", () => {
|
|
|
254
257
|
expect(response.headers.get("Content-Type")).toBe("application/json");
|
|
255
258
|
const body = await response.json();
|
|
256
259
|
expect(body).toEqual({
|
|
257
|
-
|
|
260
|
+
threadId: "thread-1",
|
|
258
261
|
joinToken: "jt-connect-1",
|
|
259
|
-
|
|
260
|
-
|
|
262
|
+
realtime: {
|
|
263
|
+
clientUrl: "wss://runtime.example/client",
|
|
264
|
+
topic: "thread:thread-1",
|
|
265
|
+
},
|
|
261
266
|
});
|
|
262
267
|
expect(platform.ɵconnectThread).toHaveBeenCalledWith({
|
|
263
268
|
threadId: "thread-1",
|
|
264
269
|
userId: "user-1",
|
|
265
|
-
|
|
270
|
+
agentId: "my-agent",
|
|
266
271
|
});
|
|
267
272
|
});
|
|
268
273
|
|
|
269
|
-
it("
|
|
274
|
+
it("does not restamp historical replay plans during connect", async () => {
|
|
270
275
|
const platform = {
|
|
271
276
|
ɵconnectThread: vi.fn().mockResolvedValue({
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
events: [{ type: "MESSAGES_SNAPSHOT", messages: [] }],
|
|
277
|
+
threadId: "thread-1",
|
|
278
|
+
joinToken: "jt-connect-1",
|
|
275
279
|
}),
|
|
276
280
|
};
|
|
277
281
|
const runtime = createIntelligenceRuntime(platform);
|
|
@@ -285,9 +289,12 @@ describe("handleConnectAgent", () => {
|
|
|
285
289
|
expect(response.status).toBe(200);
|
|
286
290
|
const body = await response.json();
|
|
287
291
|
expect(body).toEqual({
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
292
|
+
threadId: "thread-1",
|
|
293
|
+
joinToken: "jt-connect-1",
|
|
294
|
+
realtime: {
|
|
295
|
+
clientUrl: "wss://runtime.example/client",
|
|
296
|
+
topic: "thread:thread-1",
|
|
297
|
+
},
|
|
291
298
|
});
|
|
292
299
|
});
|
|
293
300
|
|
|
@@ -310,7 +317,7 @@ describe("handleConnectAgent", () => {
|
|
|
310
317
|
expect(platform.ɵconnectThread).toHaveBeenCalledWith({
|
|
311
318
|
threadId: "thread-1",
|
|
312
319
|
userId: "user-1",
|
|
313
|
-
|
|
320
|
+
agentId: "my-agent",
|
|
314
321
|
});
|
|
315
322
|
});
|
|
316
323
|
|
|
@@ -333,7 +340,73 @@ describe("handleConnectAgent", () => {
|
|
|
333
340
|
expect(body.error).toBe("Connect plan not available");
|
|
334
341
|
});
|
|
335
342
|
|
|
336
|
-
it("
|
|
343
|
+
it("preserves platform not found errors when connect fails with 404", async () => {
|
|
344
|
+
const platform = {
|
|
345
|
+
ɵconnectThread: vi.fn().mockRejectedValue(
|
|
346
|
+
Object.assign(new Error("Intelligence platform error 404"), {
|
|
347
|
+
status: 404,
|
|
348
|
+
}),
|
|
349
|
+
),
|
|
350
|
+
};
|
|
351
|
+
const runtime = createIntelligenceRuntime(platform);
|
|
352
|
+
|
|
353
|
+
const response = await handleConnectAgent({
|
|
354
|
+
runtime,
|
|
355
|
+
request: createConnectRequest(),
|
|
356
|
+
agentId: "my-agent",
|
|
357
|
+
});
|
|
358
|
+
|
|
359
|
+
expect(response.status).toBe(404);
|
|
360
|
+
const body = await response.json();
|
|
361
|
+
expect(body).toEqual({
|
|
362
|
+
error: "Connect request rejected",
|
|
363
|
+
message: "Intelligence platform error 404",
|
|
364
|
+
});
|
|
365
|
+
});
|
|
366
|
+
|
|
367
|
+
it("preserves platform validation errors when connect fails validation", async () => {
|
|
368
|
+
const platform = {
|
|
369
|
+
ɵconnectThread: vi.fn().mockRejectedValue(
|
|
370
|
+
Object.assign(new Error("Intelligence platform error 400"), {
|
|
371
|
+
status: 400,
|
|
372
|
+
}),
|
|
373
|
+
),
|
|
374
|
+
};
|
|
375
|
+
const runtime = createIntelligenceRuntime(platform);
|
|
376
|
+
|
|
377
|
+
const response = await handleConnectAgent({
|
|
378
|
+
runtime,
|
|
379
|
+
request: createConnectRequest(),
|
|
380
|
+
agentId: "my-agent",
|
|
381
|
+
});
|
|
382
|
+
|
|
383
|
+
expect(response.status).toBe(400);
|
|
384
|
+
const body = await response.json();
|
|
385
|
+
expect(body.error).toBe("Connect request rejected");
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
it("preserves platform ownership conflicts when connect fails authorization", async () => {
|
|
389
|
+
const platform = {
|
|
390
|
+
ɵconnectThread: vi.fn().mockRejectedValue(
|
|
391
|
+
Object.assign(new Error("Intelligence platform error 403"), {
|
|
392
|
+
status: 403,
|
|
393
|
+
}),
|
|
394
|
+
),
|
|
395
|
+
};
|
|
396
|
+
const runtime = createIntelligenceRuntime(platform);
|
|
397
|
+
|
|
398
|
+
const response = await handleConnectAgent({
|
|
399
|
+
runtime,
|
|
400
|
+
request: createConnectRequest(),
|
|
401
|
+
agentId: "my-agent",
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
expect(response.status).toBe(403);
|
|
405
|
+
const body = await response.json();
|
|
406
|
+
expect(body.error).toBe("Connect request rejected");
|
|
407
|
+
});
|
|
408
|
+
|
|
409
|
+
it("does not forward replay cursors to the credentials-only intelligence platform connect", async () => {
|
|
337
410
|
const platform = {
|
|
338
411
|
ɵconnectThread: vi.fn().mockResolvedValue(null),
|
|
339
412
|
};
|
|
@@ -349,7 +422,7 @@ describe("handleConnectAgent", () => {
|
|
|
349
422
|
expect(platform.ɵconnectThread).toHaveBeenCalledWith({
|
|
350
423
|
threadId: "thread-1",
|
|
351
424
|
userId: "user-1",
|
|
352
|
-
|
|
425
|
+
agentId: "my-agent",
|
|
353
426
|
});
|
|
354
427
|
});
|
|
355
428
|
|
|
@@ -357,7 +430,9 @@ describe("handleConnectAgent", () => {
|
|
|
357
430
|
const platform = {
|
|
358
431
|
ɵconnectThread: vi.fn().mockResolvedValue(null),
|
|
359
432
|
};
|
|
360
|
-
const identifyUser = vi
|
|
433
|
+
const identifyUser = vi
|
|
434
|
+
.fn()
|
|
435
|
+
.mockResolvedValue({ id: "resolved-user", name: "Resolved User" });
|
|
361
436
|
const runtime = createIntelligenceRuntime(platform);
|
|
362
437
|
runtime.identifyUser = identifyUser;
|
|
363
438
|
const request = createConnectRequest(
|
|
@@ -377,7 +452,7 @@ describe("handleConnectAgent", () => {
|
|
|
377
452
|
expect(platform.ɵconnectThread).toHaveBeenCalledWith({
|
|
378
453
|
threadId: "thread-1",
|
|
379
454
|
userId: "resolved-user",
|
|
380
|
-
|
|
455
|
+
agentId: "my-agent",
|
|
381
456
|
});
|
|
382
457
|
});
|
|
383
458
|
|
|
@@ -386,7 +461,28 @@ describe("handleConnectAgent", () => {
|
|
|
386
461
|
ɵconnectThread: vi.fn(),
|
|
387
462
|
};
|
|
388
463
|
const runtime = createIntelligenceRuntime(platform);
|
|
389
|
-
runtime.identifyUser = vi
|
|
464
|
+
runtime.identifyUser = vi
|
|
465
|
+
.fn()
|
|
466
|
+
.mockResolvedValue({ id: "", name: "User" });
|
|
467
|
+
|
|
468
|
+
const response = await handleConnectAgent({
|
|
469
|
+
runtime,
|
|
470
|
+
request: createConnectRequest(),
|
|
471
|
+
agentId: "my-agent",
|
|
472
|
+
});
|
|
473
|
+
|
|
474
|
+
expect(response.status).toBe(400);
|
|
475
|
+
expect(platform.ɵconnectThread).not.toHaveBeenCalled();
|
|
476
|
+
});
|
|
477
|
+
|
|
478
|
+
it("returns 400 when identifyUser returns an invalid name", async () => {
|
|
479
|
+
const platform = {
|
|
480
|
+
ɵconnectThread: vi.fn(),
|
|
481
|
+
};
|
|
482
|
+
const runtime = createIntelligenceRuntime(platform);
|
|
483
|
+
runtime.identifyUser = vi
|
|
484
|
+
.fn()
|
|
485
|
+
.mockResolvedValue({ id: "user-1", name: "" });
|
|
390
486
|
|
|
391
487
|
const response = await handleConnectAgent({
|
|
392
488
|
runtime,
|
|
@@ -422,4 +518,68 @@ describe("handleConnectAgent", () => {
|
|
|
422
518
|
}
|
|
423
519
|
});
|
|
424
520
|
});
|
|
521
|
+
|
|
522
|
+
describe("telemetry", () => {
|
|
523
|
+
it("captures oss.runtime.copilot_request_created on every invocation", async () => {
|
|
524
|
+
const { telemetry } = await import("../telemetry");
|
|
525
|
+
const captureSpy = vi
|
|
526
|
+
.spyOn(telemetry, "capture")
|
|
527
|
+
.mockResolvedValue(undefined);
|
|
528
|
+
|
|
529
|
+
try {
|
|
530
|
+
const runtime = createMockRuntime({});
|
|
531
|
+
const request = new Request("https://example.com/agent/test/connect", {
|
|
532
|
+
method: "POST",
|
|
533
|
+
});
|
|
534
|
+
await handleConnectAgent({
|
|
535
|
+
runtime,
|
|
536
|
+
request,
|
|
537
|
+
agentId: "nonexistent-agent",
|
|
538
|
+
});
|
|
539
|
+
|
|
540
|
+
expect(captureSpy).toHaveBeenCalledWith(
|
|
541
|
+
"oss.runtime.copilot_request_created",
|
|
542
|
+
expect.objectContaining({
|
|
543
|
+
requestType: "connect",
|
|
544
|
+
"cloud.api_key_provided": false,
|
|
545
|
+
}),
|
|
546
|
+
);
|
|
547
|
+
} finally {
|
|
548
|
+
captureSpy.mockRestore();
|
|
549
|
+
}
|
|
550
|
+
});
|
|
551
|
+
|
|
552
|
+
it("includes cloud.public_api_key when x-copilotcloud-public-api-key header is set", async () => {
|
|
553
|
+
const { telemetry } = await import("../telemetry");
|
|
554
|
+
const captureSpy = vi
|
|
555
|
+
.spyOn(telemetry, "capture")
|
|
556
|
+
.mockResolvedValue(undefined);
|
|
557
|
+
|
|
558
|
+
try {
|
|
559
|
+
const runtime = createMockRuntime({});
|
|
560
|
+
const request = new Request("https://example.com/agent/test/connect", {
|
|
561
|
+
method: "POST",
|
|
562
|
+
headers: {
|
|
563
|
+
"x-copilotcloud-public-api-key": "ck_pub_connect_test",
|
|
564
|
+
},
|
|
565
|
+
});
|
|
566
|
+
|
|
567
|
+
await handleConnectAgent({
|
|
568
|
+
runtime,
|
|
569
|
+
request,
|
|
570
|
+
agentId: "nonexistent-agent",
|
|
571
|
+
});
|
|
572
|
+
|
|
573
|
+
expect(captureSpy).toHaveBeenCalledWith(
|
|
574
|
+
"oss.runtime.copilot_request_created",
|
|
575
|
+
expect.objectContaining({
|
|
576
|
+
"cloud.api_key_provided": true,
|
|
577
|
+
"cloud.public_api_key": "ck_pub_connect_test",
|
|
578
|
+
}),
|
|
579
|
+
);
|
|
580
|
+
} finally {
|
|
581
|
+
captureSpy.mockRestore();
|
|
582
|
+
}
|
|
583
|
+
});
|
|
584
|
+
});
|
|
425
585
|
});
|