@copilotkit/runtime 1.3.16-mme-lgc-langgraph-package.10 → 1.3.16-mme-reset-chat.10

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 (65) hide show
  1. package/CHANGELOG.md +45 -63
  2. package/dist/{chunk-JE2DM46O.mjs → chunk-2S6JGN2A.mjs} +4 -3
  3. package/dist/chunk-2S6JGN2A.mjs.map +1 -0
  4. package/dist/{chunk-SM3JAVXQ.mjs → chunk-3XICZ4K2.mjs} +5 -4
  5. package/dist/chunk-3XICZ4K2.mjs.map +1 -0
  6. package/dist/chunk-DFOKBSIS.mjs +1 -0
  7. package/dist/chunk-DFOKBSIS.mjs.map +1 -0
  8. package/dist/{chunk-PGK7SFLR.mjs → chunk-ODOSADGH.mjs} +376 -28
  9. package/dist/chunk-ODOSADGH.mjs.map +1 -0
  10. package/dist/{chunk-JCC4W3AU.mjs → chunk-TBNMKEWV.mjs} +4 -3
  11. package/dist/chunk-TBNMKEWV.mjs.map +1 -0
  12. package/dist/{chunk-BNQDVBQH.mjs → chunk-WHJ3DAYL.mjs} +251 -34
  13. package/dist/chunk-WHJ3DAYL.mjs.map +1 -0
  14. package/dist/{copilot-runtime-8d3f40c7.d.ts → copilot-runtime-b9715bd4.d.ts} +3 -3
  15. package/dist/index.d.ts +1 -1
  16. package/dist/index.js +141 -45
  17. package/dist/index.js.map +1 -1
  18. package/dist/index.mjs +22 -22
  19. package/dist/index.mjs.map +1 -1
  20. package/dist/lib/index.d.ts +1 -1
  21. package/dist/lib/index.js +141 -45
  22. package/dist/lib/index.js.map +1 -1
  23. package/dist/lib/index.mjs +21 -21
  24. package/dist/lib/integrations/index.d.ts +2 -2
  25. package/dist/lib/integrations/index.js +152 -85
  26. package/dist/lib/integrations/index.js.map +1 -1
  27. package/dist/lib/integrations/index.mjs +5 -5
  28. package/dist/lib/integrations/nest/index.d.ts +1 -1
  29. package/dist/lib/integrations/nest/index.js +149 -82
  30. package/dist/lib/integrations/nest/index.js.map +1 -1
  31. package/dist/lib/integrations/nest/index.mjs +3 -3
  32. package/dist/lib/integrations/node-express/index.d.ts +1 -1
  33. package/dist/lib/integrations/node-express/index.js +149 -82
  34. package/dist/lib/integrations/node-express/index.js.map +1 -1
  35. package/dist/lib/integrations/node-express/index.mjs +3 -3
  36. package/dist/lib/integrations/node-http/index.d.ts +1 -1
  37. package/dist/lib/integrations/node-http/index.js +148 -81
  38. package/dist/lib/integrations/node-http/index.js.map +1 -1
  39. package/dist/lib/integrations/node-http/index.mjs +2 -2
  40. package/dist/service-adapters/index.js +31 -18
  41. package/dist/service-adapters/index.js.map +1 -1
  42. package/dist/service-adapters/index.mjs +1 -2
  43. package/package.json +4 -4
  44. package/src/agents/langgraph/events.ts +2 -0
  45. package/src/lib/integrations/nest/index.ts +5 -2
  46. package/src/lib/integrations/nextjs/app-router.ts +5 -2
  47. package/src/lib/integrations/nextjs/pages-router.ts +5 -2
  48. package/src/lib/integrations/node-express/index.ts +5 -2
  49. package/src/lib/integrations/node-http/index.ts +5 -2
  50. package/src/lib/runtime/copilot-runtime.ts +14 -15
  51. package/src/lib/runtime/remote-action-constructors.ts +17 -3
  52. package/src/lib/runtime/remote-lg-cloud-action.ts +25 -2
  53. package/src/lib/telemetry-client.ts +43 -0
  54. package/src/service-adapters/google/google-genai-adapter.ts +2 -2
  55. package/src/service-adapters/langchain/langchain-adapter.ts +22 -16
  56. package/src/service-adapters/openai/openai-adapter.ts +5 -0
  57. package/dist/chunk-BNQDVBQH.mjs.map +0 -1
  58. package/dist/chunk-H3C6UCKB.mjs +0 -288
  59. package/dist/chunk-H3C6UCKB.mjs.map +0 -1
  60. package/dist/chunk-JCC4W3AU.mjs.map +0 -1
  61. package/dist/chunk-JE2DM46O.mjs.map +0 -1
  62. package/dist/chunk-MXXPWWBF.mjs +0 -218
  63. package/dist/chunk-MXXPWWBF.mjs.map +0 -1
  64. package/dist/chunk-PGK7SFLR.mjs.map +0 -1
  65. package/dist/chunk-SM3JAVXQ.mjs.map +0 -1
@@ -12,11 +12,11 @@ var __export = (target, all) => {
12
12
  for (var name in all)
13
13
  __defProp(target, name, { get: all[name], enumerable: true });
14
14
  };
15
- var __copyProps = (to, from2, except, desc) => {
16
- if (from2 && typeof from2 === "object" || typeof from2 === "function") {
17
- for (let key of __getOwnPropNames(from2))
15
+ var __copyProps = (to, from3, except, desc) => {
16
+ if (from3 && typeof from3 === "object" || typeof from3 === "function") {
17
+ for (let key of __getOwnPropNames(from3))
18
18
  if (!__hasOwnProp.call(to, key) && key !== except)
19
- __defProp(to, key, { get: () => from2[key], enumerable: !(desc = __getOwnPropDesc(from2, key)) || desc.enumerable });
19
+ __defProp(to, key, { get: () => from3[key], enumerable: !(desc = __getOwnPropDesc(from3, key)) || desc.enumerable });
20
20
  }
21
21
  return to;
22
22
  };
@@ -44,7 +44,7 @@ var require_package = __commonJS({
44
44
  publishConfig: {
45
45
  access: "public"
46
46
  },
47
- version: "1.3.16-mme-lgc-langgraph-package.10",
47
+ version: "1.3.16-mme-reset-chat.10",
48
48
  sideEffects: false,
49
49
  main: "./dist/index.js",
50
50
  module: "./dist/index.mjs",
@@ -136,7 +136,7 @@ var import_type_graphql16 = require("type-graphql");
136
136
 
137
137
  // src/graphql/resolvers/copilot.resolver.ts
138
138
  var import_type_graphql15 = require("type-graphql");
139
- var import_rxjs2 = require("rxjs");
139
+ var import_rxjs3 = require("rxjs");
140
140
 
141
141
  // src/graphql/inputs/generate-copilot-response.input.ts
142
142
  var import_type_graphql11 = require("type-graphql");
@@ -1180,15 +1180,132 @@ CopilotResponse = _ts_decorate13([
1180
1180
  var import_graphql_yoga = require("graphql-yoga");
1181
1181
 
1182
1182
  // src/service-adapters/events.ts
1183
- var import_rxjs = require("rxjs");
1183
+ var import_rxjs2 = require("rxjs");
1184
+
1185
+ // src/lib/telemetry-client.ts
1186
+ var import_shared2 = require("@copilotkit/shared");
1187
+
1188
+ // src/lib/runtime/remote-actions.ts
1189
+ var EndpointType;
1190
+ (function(EndpointType2) {
1191
+ EndpointType2["CopilotKit"] = "copilotKit";
1192
+ EndpointType2["LangGraphCloud"] = "langgraph-cloud";
1193
+ })(EndpointType || (EndpointType = {}));
1184
1194
 
1185
1195
  // src/lib/telemetry-client.ts
1196
+ var import_node_crypto = require("crypto");
1197
+
1198
+ // src/lib/runtime/copilot-runtime.ts
1186
1199
  var import_shared = require("@copilotkit/shared");
1200
+
1201
+ // src/graphql/types/converted/index.ts
1202
+ var Message = class extends BaseMessageInput {
1203
+ type;
1204
+ isTextMessage() {
1205
+ return this.type === "TextMessage";
1206
+ }
1207
+ isActionExecutionMessage() {
1208
+ return this.type === "ActionExecutionMessage";
1209
+ }
1210
+ isResultMessage() {
1211
+ return this.type === "ResultMessage";
1212
+ }
1213
+ isAgentStateMessage() {
1214
+ return this.type === "AgentStateMessage";
1215
+ }
1216
+ };
1217
+ __name(Message, "Message");
1218
+ var TextMessage = class extends Message {
1219
+ type = "TextMessage";
1220
+ content;
1221
+ role;
1222
+ };
1223
+ __name(TextMessage, "TextMessage");
1224
+ var ActionExecutionMessage = class extends Message {
1225
+ type = "ActionExecutionMessage";
1226
+ name;
1227
+ arguments;
1228
+ scope;
1229
+ };
1230
+ __name(ActionExecutionMessage, "ActionExecutionMessage");
1231
+ var ResultMessage = class extends Message {
1232
+ type = "ResultMessage";
1233
+ actionExecutionId;
1234
+ actionName;
1235
+ result;
1236
+ };
1237
+ __name(ResultMessage, "ResultMessage");
1238
+ var AgentStateMessage = class extends Message {
1239
+ type = "AgentStateMessage";
1240
+ threadId;
1241
+ agentName;
1242
+ nodeName;
1243
+ runId;
1244
+ active;
1245
+ role;
1246
+ state;
1247
+ running;
1248
+ };
1249
+ __name(AgentStateMessage, "AgentStateMessage");
1250
+
1251
+ // src/lib/runtime/copilot-runtime.ts
1252
+ var import_rxjs = require("rxjs");
1253
+ function resolveEndpointType(endpoint) {
1254
+ if (!endpoint.type) {
1255
+ if ("langsmithApiKey" in endpoint && "deploymentUrl" in endpoint && "agents" in endpoint) {
1256
+ return EndpointType.LangGraphCloud;
1257
+ } else {
1258
+ return EndpointType.CopilotKit;
1259
+ }
1260
+ }
1261
+ return endpoint.type;
1262
+ }
1263
+ __name(resolveEndpointType, "resolveEndpointType");
1264
+
1265
+ // src/lib/telemetry-client.ts
1187
1266
  var packageJson = require_package();
1188
- var telemetryClient = new import_shared.TelemetryClient({
1267
+ var telemetryClient = new import_shared2.TelemetryClient({
1189
1268
  packageName: packageJson.name,
1190
1269
  packageVersion: packageJson.version
1191
1270
  });
1271
+ function getRuntimeInstanceTelemetryInfo(runtime) {
1272
+ const endpointsInfo = runtime.remoteEndpointDefinitions.reduce((acc, endpoint) => {
1273
+ let info = {
1274
+ ...acc
1275
+ };
1276
+ const endpointType = resolveEndpointType(endpoint);
1277
+ if (!info.endpointTypes.includes(endpointType)) {
1278
+ info = {
1279
+ ...info,
1280
+ endpointTypes: [
1281
+ ...info.endpointTypes,
1282
+ endpointType
1283
+ ]
1284
+ };
1285
+ }
1286
+ if (endpointType === EndpointType.LangGraphCloud) {
1287
+ const ep = endpoint;
1288
+ info = {
1289
+ ...info,
1290
+ agentsAmount: ep.agents.length,
1291
+ hashedKey: (0, import_node_crypto.createHash)("sha256").update(ep.langsmithApiKey).digest("hex")
1292
+ };
1293
+ }
1294
+ return info;
1295
+ }, {
1296
+ endpointTypes: [],
1297
+ agentsAmount: null,
1298
+ hashedKey: null
1299
+ });
1300
+ return {
1301
+ actionsAmount: runtime.actions.length,
1302
+ endpointsAmount: runtime.remoteEndpointDefinitions.length,
1303
+ endpointTypes: endpointsInfo.endpointTypes,
1304
+ agentsAmount: endpointsInfo.agentsAmount,
1305
+ hashedLgcKey: endpointsInfo.hashedKey
1306
+ };
1307
+ }
1308
+ __name(getRuntimeInstanceTelemetryInfo, "getRuntimeInstanceTelemetryInfo");
1192
1309
  var telemetry_client_default = telemetryClient;
1193
1310
 
1194
1311
  // src/service-adapters/events.ts
@@ -1242,58 +1359,8 @@ var UnknownErrorResponse = class extends FailedResponseStatus {
1242
1359
  };
1243
1360
  __name(UnknownErrorResponse, "UnknownErrorResponse");
1244
1361
 
1245
- // src/graphql/types/converted/index.ts
1246
- var Message = class extends BaseMessageInput {
1247
- type;
1248
- isTextMessage() {
1249
- return this.type === "TextMessage";
1250
- }
1251
- isActionExecutionMessage() {
1252
- return this.type === "ActionExecutionMessage";
1253
- }
1254
- isResultMessage() {
1255
- return this.type === "ResultMessage";
1256
- }
1257
- isAgentStateMessage() {
1258
- return this.type === "AgentStateMessage";
1259
- }
1260
- };
1261
- __name(Message, "Message");
1262
- var TextMessage = class extends Message {
1263
- type = "TextMessage";
1264
- content;
1265
- role;
1266
- };
1267
- __name(TextMessage, "TextMessage");
1268
- var ActionExecutionMessage = class extends Message {
1269
- type = "ActionExecutionMessage";
1270
- name;
1271
- arguments;
1272
- scope;
1273
- };
1274
- __name(ActionExecutionMessage, "ActionExecutionMessage");
1275
- var ResultMessage = class extends Message {
1276
- type = "ResultMessage";
1277
- actionExecutionId;
1278
- actionName;
1279
- result;
1280
- };
1281
- __name(ResultMessage, "ResultMessage");
1282
- var AgentStateMessage = class extends Message {
1283
- type = "AgentStateMessage";
1284
- threadId;
1285
- agentName;
1286
- nodeName;
1287
- runId;
1288
- active;
1289
- role;
1290
- state;
1291
- running;
1292
- };
1293
- __name(AgentStateMessage, "AgentStateMessage");
1294
-
1295
1362
  // src/graphql/resolvers/copilot.resolver.ts
1296
- var import_shared2 = require("@copilotkit/shared");
1363
+ var import_shared3 = require("@copilotkit/shared");
1297
1364
  function _ts_decorate14(decorators, target, key, desc) {
1298
1365
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1299
1366
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
@@ -1399,9 +1466,9 @@ var CopilotResolver = class {
1399
1466
  });
1400
1467
  }
1401
1468
  logger2.debug("Setting up subjects");
1402
- const responseStatus$ = new import_rxjs2.ReplaySubject();
1403
- const interruptStreaming$ = new import_rxjs2.ReplaySubject();
1404
- const guardrailsResult$ = new import_rxjs2.ReplaySubject();
1469
+ const responseStatus$ = new import_rxjs3.ReplaySubject();
1470
+ const interruptStreaming$ = new import_rxjs3.ReplaySubject();
1471
+ const guardrailsResult$ = new import_rxjs3.ReplaySubject();
1405
1472
  let outputMessages = [];
1406
1473
  let resolveOutputMessagesPromise;
1407
1474
  let rejectOutputMessagesPromise;
@@ -1410,7 +1477,7 @@ var CopilotResolver = class {
1410
1477
  rejectOutputMessagesPromise = reject;
1411
1478
  });
1412
1479
  logger2.debug("Processing");
1413
- const { eventSource, threadId = (0, import_shared2.randomId)(), runId, serverSideActions, actionInputsWithoutAgents } = await copilotRuntime.processRuntimeRequest({
1480
+ const { eventSource, threadId = (0, import_shared3.randomId)(), runId, serverSideActions, actionInputsWithoutAgents } = await copilotRuntime.processRuntimeRequest({
1414
1481
  serviceAdapter,
1415
1482
  messages: data.messages,
1416
1483
  actions: data.frontend.actions,
@@ -1428,7 +1495,7 @@ var CopilotResolver = class {
1428
1495
  const response = {
1429
1496
  threadId,
1430
1497
  runId,
1431
- status: (0, import_rxjs2.firstValueFrom)(responseStatus$),
1498
+ status: (0, import_rxjs3.firstValueFrom)(responseStatus$),
1432
1499
  messages: new import_graphql_yoga.Repeater(async (pushMessage, stopStreamingMessages) => {
1433
1500
  var _a2, _b2;
1434
1501
  logger2.debug("Messages repeater created");
@@ -1455,7 +1522,7 @@ var CopilotResolver = class {
1455
1522
  });
1456
1523
  outputMessages = [
1457
1524
  (0, import_class_transformer.plainToInstance)(TextMessage, {
1458
- id: (0, import_shared2.randomId)(),
1525
+ id: (0, import_shared3.randomId)(),
1459
1526
  createdAt: /* @__PURE__ */ new Date(),
1460
1527
  content: result.reason,
1461
1528
  role: MessageRole.assistant
@@ -1489,8 +1556,8 @@ var CopilotResolver = class {
1489
1556
  }).pipe(
1490
1557
  // shareReplay() ensures that later subscribers will see the whole stream instead of
1491
1558
  // just the events that were emitted after the subscriber was added.
1492
- (0, import_rxjs2.shareReplay)(),
1493
- (0, import_rxjs2.finalize)(() => {
1559
+ (0, import_rxjs3.shareReplay)(),
1560
+ (0, import_rxjs3.finalize)(() => {
1494
1561
  logger2.debug("Event stream finalized");
1495
1562
  })
1496
1563
  );
@@ -1501,22 +1568,22 @@ var CopilotResolver = class {
1501
1568
  case RuntimeEventTypes.TextMessageStart:
1502
1569
  const textMessageContentStream = eventStream.pipe(
1503
1570
  // skip until this message start event
1504
- (0, import_rxjs2.skipWhile)((e) => e !== event),
1571
+ (0, import_rxjs3.skipWhile)((e) => e !== event),
1505
1572
  // take until the message end event
1506
- (0, import_rxjs2.takeWhile)((e) => e.type != RuntimeEventTypes.TextMessageEnd)
1573
+ (0, import_rxjs3.takeWhile)((e) => e.type != RuntimeEventTypes.TextMessageEnd)
1507
1574
  );
1508
- const streamingTextStatus = new import_rxjs2.Subject();
1575
+ const streamingTextStatus = new import_rxjs3.Subject();
1509
1576
  const messageId = event.messageId;
1510
1577
  pushMessage({
1511
1578
  id: messageId,
1512
- status: (0, import_rxjs2.firstValueFrom)(streamingTextStatus),
1579
+ status: (0, import_rxjs3.firstValueFrom)(streamingTextStatus),
1513
1580
  createdAt: /* @__PURE__ */ new Date(),
1514
1581
  role: MessageRole.assistant,
1515
1582
  content: new import_graphql_yoga.Repeater(async (pushTextChunk, stopStreamingText) => {
1516
1583
  logger2.debug("Text message content repeater created");
1517
1584
  const textChunks = [];
1518
1585
  let textSubscription;
1519
- interruptStreaming$.pipe((0, import_rxjs2.shareReplay)(), (0, import_rxjs2.take)(1), (0, import_rxjs2.tap)(({ reason, messageId: messageId2 }) => {
1586
+ interruptStreaming$.pipe((0, import_rxjs3.shareReplay)(), (0, import_rxjs3.take)(1), (0, import_rxjs3.tap)(({ reason, messageId: messageId2 }) => {
1520
1587
  logger2.debug({
1521
1588
  reason,
1522
1589
  messageId: messageId2
@@ -1567,11 +1634,11 @@ var CopilotResolver = class {
1567
1634
  break;
1568
1635
  case RuntimeEventTypes.ActionExecutionStart:
1569
1636
  logger2.debug("Action execution start event received");
1570
- const actionExecutionArgumentStream = eventStream.pipe((0, import_rxjs2.skipWhile)((e) => e !== event), (0, import_rxjs2.takeWhile)((e) => e.type != RuntimeEventTypes.ActionExecutionEnd));
1571
- const streamingArgumentsStatus = new import_rxjs2.Subject();
1637
+ const actionExecutionArgumentStream = eventStream.pipe((0, import_rxjs3.skipWhile)((e) => e !== event), (0, import_rxjs3.takeWhile)((e) => e.type != RuntimeEventTypes.ActionExecutionEnd));
1638
+ const streamingArgumentsStatus = new import_rxjs3.Subject();
1572
1639
  pushMessage({
1573
1640
  id: event.actionExecutionId,
1574
- status: (0, import_rxjs2.firstValueFrom)(streamingArgumentsStatus),
1641
+ status: (0, import_rxjs3.firstValueFrom)(streamingArgumentsStatus),
1575
1642
  createdAt: /* @__PURE__ */ new Date(),
1576
1643
  name: event.actionName,
1577
1644
  scope: event.scope,
@@ -1618,7 +1685,7 @@ var CopilotResolver = class {
1618
1685
  result: event.result
1619
1686
  }, "Action execution result event received");
1620
1687
  pushMessage({
1621
- id: (0, import_shared2.randomId)(),
1688
+ id: (0, import_shared3.randomId)(),
1622
1689
  status: new SuccessMessageStatus(),
1623
1690
  createdAt: /* @__PURE__ */ new Date(),
1624
1691
  actionExecutionId: event.actionExecutionId,
@@ -1626,7 +1693,7 @@ var CopilotResolver = class {
1626
1693
  result: event.result
1627
1694
  });
1628
1695
  outputMessages.push((0, import_class_transformer.plainToInstance)(ResultMessage, {
1629
- id: (0, import_shared2.randomId)(),
1696
+ id: (0, import_shared3.randomId)(),
1630
1697
  createdAt: /* @__PURE__ */ new Date(),
1631
1698
  actionExecutionId: event.actionExecutionId,
1632
1699
  actionName: event.actionName,
@@ -1638,7 +1705,7 @@ var CopilotResolver = class {
1638
1705
  event
1639
1706
  }, "Agent message event received");
1640
1707
  pushMessage({
1641
- id: (0, import_shared2.randomId)(),
1708
+ id: (0, import_shared3.randomId)(),
1642
1709
  status: new SuccessMessageStatus(),
1643
1710
  threadId: event.threadId,
1644
1711
  agentName: event.agentName,
@@ -1651,7 +1718,7 @@ var CopilotResolver = class {
1651
1718
  createdAt: /* @__PURE__ */ new Date()
1652
1719
  });
1653
1720
  outputMessages.push((0, import_class_transformer.plainToInstance)(AgentStateMessage, {
1654
- id: (0, import_shared2.randomId)(),
1721
+ id: (0, import_shared3.randomId)(),
1655
1722
  threadId: event.threadId,
1656
1723
  agentName: event.agentName,
1657
1724
  nodeName: event.nodeName,
@@ -1681,7 +1748,7 @@ var CopilotResolver = class {
1681
1748
  logger2.debug("Event stream completed");
1682
1749
  if ((_a3 = data.cloud) == null ? void 0 : _a3.guardrails) {
1683
1750
  logger2.debug("Guardrails is enabled, waiting for guardrails result");
1684
- await (0, import_rxjs2.firstValueFrom)(guardrailsResult$);
1751
+ await (0, import_rxjs3.firstValueFrom)(guardrailsResult$);
1685
1752
  }
1686
1753
  responseStatus$.next(new SuccessResponseStatus());
1687
1754
  eventStreamSubscription == null ? void 0 : eventStreamSubscription.unsubscribe();
@@ -1838,7 +1905,7 @@ function copilotRuntimeNodeHttpEndpoint(options) {
1838
1905
  _copilotkit: options.properties._copilotkit
1839
1906
  });
1840
1907
  }
1841
- telemetry_client_default.capture("oss.runtime.instance_created", {});
1908
+ telemetry_client_default.capture("oss.runtime.instance_created", getRuntimeInstanceTelemetryInfo(options.runtime));
1842
1909
  const logger2 = commonConfig.logging;
1843
1910
  logger2.debug("Creating Node HTTP endpoint");
1844
1911
  const yoga = (0, import_graphql_yoga2.createYoga)({
@@ -1856,7 +1923,7 @@ function copilotRuntimeNodeExpressEndpoint(options) {
1856
1923
  framework: "node-express"
1857
1924
  }
1858
1925
  });
1859
- telemetry_client_default.capture("oss.runtime.instance_created", {});
1926
+ telemetry_client_default.capture("oss.runtime.instance_created", getRuntimeInstanceTelemetryInfo(options.runtime));
1860
1927
  return copilotRuntimeNodeHttpEndpoint(options);
1861
1928
  }
1862
1929
  __name(copilotRuntimeNodeExpressEndpoint, "copilotRuntimeNodeExpressEndpoint");