@copilotkit/runtime 1.56.3 → 1.56.4-canary.1777529757
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/agent/converters/tanstack.cjs +121 -25
- package/dist/agent/converters/tanstack.cjs.map +1 -1
- package/dist/agent/converters/tanstack.d.cts.map +1 -1
- package/dist/agent/converters/tanstack.d.mts.map +1 -1
- package/dist/agent/converters/tanstack.mjs +121 -25
- package/dist/agent/converters/tanstack.mjs.map +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/agent.cjs +8 -1
- package/dist/lib/runtime/agent-integrations/langgraph/agent.cjs.map +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/agent.d.cts.map +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/agent.d.mts.map +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/agent.mjs +8 -1
- package/dist/lib/runtime/agent-integrations/langgraph/agent.mjs.map +1 -1
- package/dist/package.cjs +6 -6
- package/dist/package.mjs +6 -6
- package/dist/v2/index.d.cts +2 -2
- package/dist/v2/index.d.mts +2 -2
- package/dist/v2/runtime/core/fetch-handler.cjs +2 -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 +2 -0
- package/dist/v2/runtime/core/fetch-handler.mjs.map +1 -1
- package/dist/v2/runtime/core/runtime.d.mts +0 -1
- package/dist/v2/runtime/core/runtime.d.mts.map +1 -1
- package/dist/v2/runtime/endpoints/express.cjs +5 -5
- package/dist/v2/runtime/endpoints/express.cjs.map +1 -1
- package/dist/v2/runtime/endpoints/express.mjs +5 -5
- package/dist/v2/runtime/endpoints/express.mjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-connect.cjs +2 -3
- package/dist/v2/runtime/handlers/handle-connect.cjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-connect.mjs +2 -3
- package/dist/v2/runtime/handlers/handle-connect.mjs.map +1 -1
- package/dist/v2/runtime/handlers/intelligence/connect.cjs +21 -31
- package/dist/v2/runtime/handlers/intelligence/connect.cjs.map +1 -1
- package/dist/v2/runtime/handlers/intelligence/connect.mjs +22 -31
- 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/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 +5 -2
- package/dist/v2/runtime/intelligence-platform/client.cjs.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.d.cts +16 -18
- package/dist/v2/runtime/intelligence-platform/client.d.cts.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.d.mts +16 -18
- package/dist/v2/runtime/intelligence-platform/client.d.mts.map +1 -1
- package/dist/v2/runtime/intelligence-platform/client.mjs +5 -2
- 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 +30 -5
- package/dist/v2/runtime/runner/intelligence.cjs.map +1 -1
- package/dist/v2/runtime/runner/intelligence.d.cts +7 -1
- package/dist/v2/runtime/runner/intelligence.d.cts.map +1 -1
- package/dist/v2/runtime/runner/intelligence.d.mts +7 -1
- package/dist/v2/runtime/runner/intelligence.d.mts.map +1 -1
- package/dist/v2/runtime/runner/intelligence.mjs +30 -5
- 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 +7 -7
- package/src/agent/__tests__/agent-test-helpers.ts +31 -1
- package/src/agent/__tests__/converter-tanstack.test.ts +280 -0
- package/src/agent/converters/tanstack.ts +167 -10
- package/src/lib/runtime/agent-integrations/langgraph/agent.ts +8 -1
- package/src/v2/runtime/__tests__/express-fetch-bridge.test.ts +1 -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__/handle-connect.test.ts +155 -48
- package/src/v2/runtime/__tests__/handle-run.test.ts +380 -29
- 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__/intelligence-run-telemetry.test.ts +194 -0
- 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/fetch-handler.ts +3 -0
- package/src/v2/runtime/endpoints/express.ts +9 -3
- package/src/v2/runtime/handlers/handle-connect.ts +1 -2
- package/src/v2/runtime/handlers/intelligence/connect.ts +48 -68
- 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/intelligence-platform/__tests__/client.test.ts +33 -39
- package/src/v2/runtime/intelligence-platform/client.ts +36 -31
- package/src/v2/runtime/runner/__tests__/intelligence-runner.test.ts +15 -7
- package/src/v2/runtime/runner/agent-runner.ts +0 -1
- package/src/v2/runtime/runner/intelligence.ts +47 -6
- 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
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration test: Express adapter + telemetry.
|
|
3
|
+
*/
|
|
4
|
+
import express from "express";
|
|
5
|
+
import request from "supertest";
|
|
6
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
7
|
+
import type { AbstractAgent } from "@ag-ui/client";
|
|
8
|
+
import { Observable, of } from "rxjs";
|
|
9
|
+
|
|
10
|
+
import { telemetry } from "../telemetry";
|
|
11
|
+
import { createCopilotExpressHandler } from "../endpoints/express";
|
|
12
|
+
import { CopilotRuntime } from "../core/runtime";
|
|
13
|
+
|
|
14
|
+
function makeAgent(): AbstractAgent {
|
|
15
|
+
const a: unknown = { execute: async () => ({ events: [] }) };
|
|
16
|
+
(a as { clone: () => unknown }).clone = () => makeAgent();
|
|
17
|
+
return a as AbstractAgent;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function makeRuntime() {
|
|
21
|
+
const runner = {
|
|
22
|
+
run: () =>
|
|
23
|
+
new Observable((observer) => {
|
|
24
|
+
observer.next({});
|
|
25
|
+
observer.complete();
|
|
26
|
+
return () => undefined;
|
|
27
|
+
}),
|
|
28
|
+
connect: () => of({}),
|
|
29
|
+
stop: async () => true,
|
|
30
|
+
};
|
|
31
|
+
return new CopilotRuntime({
|
|
32
|
+
agents: { default: makeAgent() },
|
|
33
|
+
runner,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
describe("Express adapter — telemetry firing (integration)", () => {
|
|
38
|
+
let captureSpy: ReturnType<typeof vi.spyOn>;
|
|
39
|
+
|
|
40
|
+
beforeEach(() => {
|
|
41
|
+
captureSpy = vi.spyOn(telemetry, "capture").mockResolvedValue(undefined);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
afterEach(() => {
|
|
45
|
+
captureSpy.mockRestore();
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it("fires instance_created on handler creation (multi-route)", async () => {
|
|
49
|
+
const runtime = makeRuntime();
|
|
50
|
+
createCopilotExpressHandler({ runtime, basePath: "/" });
|
|
51
|
+
|
|
52
|
+
await vi.waitFor(() => {
|
|
53
|
+
expect(captureSpy).toHaveBeenCalledWith(
|
|
54
|
+
"oss.runtime.instance_created",
|
|
55
|
+
expect.objectContaining({
|
|
56
|
+
agentsAmount: 1,
|
|
57
|
+
"cloud.api_key_provided": false,
|
|
58
|
+
}),
|
|
59
|
+
);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it("fires copilot_request_created when a real HTTP request hits the handler", async () => {
|
|
64
|
+
const runtime = makeRuntime();
|
|
65
|
+
const app = express();
|
|
66
|
+
app.use(createCopilotExpressHandler({ runtime, basePath: "/" }));
|
|
67
|
+
|
|
68
|
+
await request(app)
|
|
69
|
+
.post("/agent/default/run")
|
|
70
|
+
.set("Content-Type", "application/json")
|
|
71
|
+
.send({ messages: [], state: {}, threadId: "t1" });
|
|
72
|
+
|
|
73
|
+
expect(captureSpy).toHaveBeenCalledWith(
|
|
74
|
+
"oss.runtime.copilot_request_created",
|
|
75
|
+
expect.objectContaining({
|
|
76
|
+
requestType: "run",
|
|
77
|
+
"cloud.api_key_provided": false,
|
|
78
|
+
}),
|
|
79
|
+
);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it("includes cloud.public_api_key on request when header is present", async () => {
|
|
83
|
+
const runtime = makeRuntime();
|
|
84
|
+
const app = express();
|
|
85
|
+
app.use(createCopilotExpressHandler({ runtime, basePath: "/" }));
|
|
86
|
+
|
|
87
|
+
await request(app)
|
|
88
|
+
.post("/agent/default/run")
|
|
89
|
+
.set("Content-Type", "application/json")
|
|
90
|
+
.set("x-copilotcloud-public-api-key", "ck_pub_test_xyz")
|
|
91
|
+
.send({ messages: [], state: {}, threadId: "t1" });
|
|
92
|
+
|
|
93
|
+
expect(captureSpy).toHaveBeenCalledWith(
|
|
94
|
+
"oss.runtime.copilot_request_created",
|
|
95
|
+
expect.objectContaining({
|
|
96
|
+
"cloud.api_key_provided": true,
|
|
97
|
+
"cloud.public_api_key": "ck_pub_test_xyz",
|
|
98
|
+
}),
|
|
99
|
+
);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
@@ -231,17 +231,18 @@ describe("handleConnectAgent", () => {
|
|
|
231
231
|
identifyUser: vi
|
|
232
232
|
.fn()
|
|
233
233
|
.mockResolvedValue({ id: "user-1", name: "User One" }),
|
|
234
|
-
intelligence:
|
|
234
|
+
intelligence: {
|
|
235
|
+
ɵgetClientWsUrl: vi.fn(() => "wss://runtime.example/client"),
|
|
236
|
+
...platform,
|
|
237
|
+
},
|
|
235
238
|
} as unknown as CopilotRuntime;
|
|
236
239
|
};
|
|
237
240
|
|
|
238
|
-
it("returns
|
|
241
|
+
it("returns runtime websocket connection credentials when available", async () => {
|
|
239
242
|
const platform = {
|
|
240
243
|
ɵconnectThread: vi.fn().mockResolvedValue({
|
|
241
|
-
|
|
244
|
+
threadId: "thread-1",
|
|
242
245
|
joinToken: "jt-connect-1",
|
|
243
|
-
joinFromEventId: "event-1",
|
|
244
|
-
events: [],
|
|
245
246
|
}),
|
|
246
247
|
};
|
|
247
248
|
const runtime = createIntelligenceRuntime(platform);
|
|
@@ -256,33 +257,25 @@ describe("handleConnectAgent", () => {
|
|
|
256
257
|
expect(response.headers.get("Content-Type")).toBe("application/json");
|
|
257
258
|
const body = await response.json();
|
|
258
259
|
expect(body).toEqual({
|
|
259
|
-
|
|
260
|
+
threadId: "thread-1",
|
|
260
261
|
joinToken: "jt-connect-1",
|
|
261
|
-
|
|
262
|
-
|
|
262
|
+
realtime: {
|
|
263
|
+
clientUrl: "wss://runtime.example/client",
|
|
264
|
+
topic: "thread:thread-1",
|
|
265
|
+
},
|
|
263
266
|
});
|
|
264
267
|
expect(platform.ɵconnectThread).toHaveBeenCalledWith({
|
|
265
268
|
threadId: "thread-1",
|
|
266
269
|
userId: "user-1",
|
|
267
|
-
|
|
268
|
-
lastSeenEventId: null,
|
|
270
|
+
agentId: "my-agent",
|
|
269
271
|
});
|
|
270
272
|
});
|
|
271
273
|
|
|
272
|
-
it("
|
|
274
|
+
it("does not restamp historical replay plans during connect", async () => {
|
|
273
275
|
const platform = {
|
|
274
276
|
ɵconnectThread: vi.fn().mockResolvedValue({
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
events: [
|
|
278
|
-
{
|
|
279
|
-
type: "RUN_STARTED",
|
|
280
|
-
threadId: "thread-1",
|
|
281
|
-
run_id: "backend-run-1",
|
|
282
|
-
input: { messages: [] },
|
|
283
|
-
},
|
|
284
|
-
{ type: "RUN_FINISHED" },
|
|
285
|
-
],
|
|
277
|
+
threadId: "thread-1",
|
|
278
|
+
joinToken: "jt-connect-1",
|
|
286
279
|
}),
|
|
287
280
|
};
|
|
288
281
|
const runtime = createIntelligenceRuntime(platform);
|
|
@@ -296,25 +289,12 @@ describe("handleConnectAgent", () => {
|
|
|
296
289
|
expect(response.status).toBe(200);
|
|
297
290
|
const body = await response.json();
|
|
298
291
|
expect(body).toEqual({
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
runId: "run-1",
|
|
306
|
-
input: {
|
|
307
|
-
messages: [],
|
|
308
|
-
threadId: "thread-1",
|
|
309
|
-
runId: "run-1",
|
|
310
|
-
},
|
|
311
|
-
},
|
|
312
|
-
{
|
|
313
|
-
type: "RUN_FINISHED",
|
|
314
|
-
threadId: "thread-1",
|
|
315
|
-
runId: "run-1",
|
|
316
|
-
},
|
|
317
|
-
],
|
|
292
|
+
threadId: "thread-1",
|
|
293
|
+
joinToken: "jt-connect-1",
|
|
294
|
+
realtime: {
|
|
295
|
+
clientUrl: "wss://runtime.example/client",
|
|
296
|
+
topic: "thread:thread-1",
|
|
297
|
+
},
|
|
318
298
|
});
|
|
319
299
|
});
|
|
320
300
|
|
|
@@ -337,8 +317,7 @@ describe("handleConnectAgent", () => {
|
|
|
337
317
|
expect(platform.ɵconnectThread).toHaveBeenCalledWith({
|
|
338
318
|
threadId: "thread-1",
|
|
339
319
|
userId: "user-1",
|
|
340
|
-
|
|
341
|
-
lastSeenEventId: null,
|
|
320
|
+
agentId: "my-agent",
|
|
342
321
|
});
|
|
343
322
|
});
|
|
344
323
|
|
|
@@ -361,7 +340,73 @@ describe("handleConnectAgent", () => {
|
|
|
361
340
|
expect(body.error).toBe("Connect plan not available");
|
|
362
341
|
});
|
|
363
342
|
|
|
364
|
-
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 () => {
|
|
365
410
|
const platform = {
|
|
366
411
|
ɵconnectThread: vi.fn().mockResolvedValue(null),
|
|
367
412
|
};
|
|
@@ -377,8 +422,7 @@ describe("handleConnectAgent", () => {
|
|
|
377
422
|
expect(platform.ɵconnectThread).toHaveBeenCalledWith({
|
|
378
423
|
threadId: "thread-1",
|
|
379
424
|
userId: "user-1",
|
|
380
|
-
|
|
381
|
-
lastSeenEventId: "event-9",
|
|
425
|
+
agentId: "my-agent",
|
|
382
426
|
});
|
|
383
427
|
});
|
|
384
428
|
|
|
@@ -408,8 +452,7 @@ describe("handleConnectAgent", () => {
|
|
|
408
452
|
expect(platform.ɵconnectThread).toHaveBeenCalledWith({
|
|
409
453
|
threadId: "thread-1",
|
|
410
454
|
userId: "resolved-user",
|
|
411
|
-
|
|
412
|
-
lastSeenEventId: "event-9",
|
|
455
|
+
agentId: "my-agent",
|
|
413
456
|
});
|
|
414
457
|
});
|
|
415
458
|
|
|
@@ -475,4 +518,68 @@ describe("handleConnectAgent", () => {
|
|
|
475
518
|
}
|
|
476
519
|
});
|
|
477
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
|
+
});
|
|
478
585
|
});
|