@copilotkit/react-core 1.10.0-next.9 → 1.10.0

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 (118) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/dist/{chunk-VH45SC6Z.mjs → chunk-2GRWTU7W.mjs} +2 -2
  3. package/dist/chunk-3BASANUO.mjs +170 -0
  4. package/dist/chunk-3BASANUO.mjs.map +1 -0
  5. package/dist/{chunk-PHIMGB3K.mjs → chunk-5P46WS5M.mjs} +25 -19
  6. package/dist/chunk-5P46WS5M.mjs.map +1 -0
  7. package/dist/{chunk-AWFAFFO5.mjs → chunk-6ZLPNY7X.mjs} +7 -3
  8. package/dist/chunk-6ZLPNY7X.mjs.map +1 -0
  9. package/dist/{chunk-TTI4Z6GK.mjs → chunk-BEFEBKKI.mjs} +7 -7
  10. package/dist/chunk-BEFEBKKI.mjs.map +1 -0
  11. package/dist/{chunk-VSH4JSN3.mjs → chunk-F26O2HTO.mjs} +13 -7
  12. package/dist/chunk-F26O2HTO.mjs.map +1 -0
  13. package/dist/{chunk-GRCHDHC4.mjs → chunk-JY3STRON.mjs} +22 -4
  14. package/dist/chunk-JY3STRON.mjs.map +1 -0
  15. package/dist/{chunk-ZTZJIDRJ.mjs → chunk-N4VN2B5S.mjs} +2 -2
  16. package/dist/{chunk-FTP6FDYS.mjs → chunk-NTH42BY5.mjs} +2 -2
  17. package/dist/chunk-PIF5KJYI.mjs +103 -0
  18. package/dist/chunk-PIF5KJYI.mjs.map +1 -0
  19. package/dist/chunk-WSXTUD36.mjs +759 -0
  20. package/dist/chunk-WSXTUD36.mjs.map +1 -0
  21. package/dist/chunk-YIBUNEBN.mjs +34 -0
  22. package/dist/chunk-YIBUNEBN.mjs.map +1 -0
  23. package/dist/components/copilot-provider/copilotkit-props.d.ts +9 -1
  24. package/dist/components/copilot-provider/copilotkit-props.js.map +1 -1
  25. package/dist/components/copilot-provider/copilotkit.js +1052 -72
  26. package/dist/components/copilot-provider/copilotkit.js.map +1 -1
  27. package/dist/components/copilot-provider/copilotkit.mjs +6 -3
  28. package/dist/components/copilot-provider/index.js +1052 -72
  29. package/dist/components/copilot-provider/index.js.map +1 -1
  30. package/dist/components/copilot-provider/index.mjs +6 -3
  31. package/dist/components/dev-console/console-trigger.d.ts +8 -0
  32. package/dist/components/dev-console/console-trigger.js +1131 -0
  33. package/dist/components/dev-console/console-trigger.js.map +1 -0
  34. package/dist/components/dev-console/console-trigger.mjs +13 -0
  35. package/dist/components/dev-console/developer-console-modal.d.ts +10 -0
  36. package/dist/components/dev-console/developer-console-modal.js +977 -0
  37. package/dist/components/dev-console/developer-console-modal.js.map +1 -0
  38. package/dist/components/dev-console/developer-console-modal.mjs +12 -0
  39. package/dist/components/dev-console/developer-console-modal.mjs.map +1 -0
  40. package/dist/components/dev-console/icons.d.ts +9 -0
  41. package/dist/components/dev-console/icons.js +131 -0
  42. package/dist/components/dev-console/icons.js.map +1 -0
  43. package/dist/components/dev-console/icons.mjs +16 -0
  44. package/dist/components/dev-console/icons.mjs.map +1 -0
  45. package/dist/components/error-boundary/error-boundary.js +6 -2
  46. package/dist/components/error-boundary/error-boundary.js.map +1 -1
  47. package/dist/components/error-boundary/error-boundary.mjs +2 -2
  48. package/dist/components/index.js +1052 -72
  49. package/dist/components/index.js.map +1 -1
  50. package/dist/components/index.mjs +6 -3
  51. package/dist/components/usage-banner.d.ts +2 -1
  52. package/dist/components/usage-banner.js +6 -2
  53. package/dist/components/usage-banner.js.map +1 -1
  54. package/dist/components/usage-banner.mjs +1 -1
  55. package/dist/hooks/index.d.ts +5 -5
  56. package/dist/hooks/index.js +58 -26
  57. package/dist/hooks/index.js.map +1 -1
  58. package/dist/hooks/index.mjs +13 -10
  59. package/dist/hooks/use-coagent.d.ts +1 -1
  60. package/dist/hooks/use-coagent.js +18 -6
  61. package/dist/hooks/use-coagent.js.map +1 -1
  62. package/dist/hooks/use-coagent.mjs +8 -5
  63. package/dist/hooks/use-copilot-chat-headless_c.d.ts +33 -0
  64. package/dist/hooks/{use-copilot-chat-light.js → use-copilot-chat-headless_c.js} +88 -19
  65. package/dist/hooks/use-copilot-chat-headless_c.js.map +1 -0
  66. package/dist/hooks/{use-copilot-chat-light.mjs → use-copilot-chat-headless_c.mjs} +14 -8
  67. package/dist/hooks/use-copilot-chat-headless_c.mjs.map +1 -0
  68. package/dist/hooks/use-copilot-chat.d.ts +85 -4
  69. package/dist/hooks/use-copilot-chat.js +38 -61
  70. package/dist/hooks/use-copilot-chat.js.map +1 -1
  71. package/dist/hooks/use-copilot-chat.mjs +8 -8
  72. package/dist/hooks/use-copilot-chat_internal.d.ts +98 -12
  73. package/dist/hooks/use-copilot-chat_internal.js +13 -1
  74. package/dist/hooks/use-copilot-chat_internal.js.map +1 -1
  75. package/dist/hooks/use-copilot-chat_internal.mjs +7 -4
  76. package/dist/hooks/use-langgraph-interrupt.js +13 -1
  77. package/dist/hooks/use-langgraph-interrupt.js.map +1 -1
  78. package/dist/hooks/use-langgraph-interrupt.mjs +8 -5
  79. package/dist/index.d.ts +3 -3
  80. package/dist/index.js +1203 -200
  81. package/dist/index.js.map +1 -1
  82. package/dist/index.mjs +14 -11
  83. package/dist/lib/copilot-task.js.map +1 -1
  84. package/dist/lib/copilot-task.mjs +7 -4
  85. package/dist/lib/index.js.map +1 -1
  86. package/dist/lib/index.mjs +7 -4
  87. package/dist/utils/extract.js.map +1 -1
  88. package/dist/utils/extract.mjs +6 -3
  89. package/dist/utils/index.js.map +1 -1
  90. package/dist/utils/index.mjs +6 -3
  91. package/dist/utils/suggestions.js.map +1 -1
  92. package/dist/utils/suggestions.mjs +6 -3
  93. package/package.json +3 -3
  94. package/src/components/copilot-provider/copilotkit-props.tsx +10 -1
  95. package/src/components/copilot-provider/copilotkit.tsx +25 -16
  96. package/src/components/dev-console/console-trigger.tsx +190 -0
  97. package/src/components/dev-console/developer-console-modal.tsx +866 -0
  98. package/src/components/dev-console/icons.tsx +101 -0
  99. package/src/components/usage-banner.tsx +8 -3
  100. package/src/hooks/index.ts +6 -7
  101. package/src/hooks/use-coagent.ts +6 -11
  102. package/src/hooks/use-copilot-chat-headless_c.ts +257 -0
  103. package/src/hooks/use-copilot-chat.ts +103 -154
  104. package/src/hooks/use-copilot-chat_internal.ts +122 -15
  105. package/dist/chunk-AWFAFFO5.mjs.map +0 -1
  106. package/dist/chunk-GRCHDHC4.mjs.map +0 -1
  107. package/dist/chunk-MWHILKQH.mjs +0 -18
  108. package/dist/chunk-MWHILKQH.mjs.map +0 -1
  109. package/dist/chunk-PHIMGB3K.mjs.map +0 -1
  110. package/dist/chunk-TTI4Z6GK.mjs.map +0 -1
  111. package/dist/chunk-VSH4JSN3.mjs.map +0 -1
  112. package/dist/hooks/use-copilot-chat-light.d.ts +0 -211
  113. package/dist/hooks/use-copilot-chat-light.js.map +0 -1
  114. package/src/hooks/use-copilot-chat-light.ts +0 -219
  115. /package/dist/{chunk-VH45SC6Z.mjs.map → chunk-2GRWTU7W.mjs.map} +0 -0
  116. /package/dist/{chunk-ZTZJIDRJ.mjs.map → chunk-N4VN2B5S.mjs.map} +0 -0
  117. /package/dist/{chunk-FTP6FDYS.mjs.map → chunk-NTH42BY5.mjs.map} +0 -0
  118. /package/dist/{hooks/use-copilot-chat-light.mjs.map → components/dev-console/console-trigger.mjs.map} +0 -0
@@ -85,7 +85,7 @@ __export(copilotkit_exports, {
85
85
  defaultCopilotContextCategories: () => defaultCopilotContextCategories
86
86
  });
87
87
  module.exports = __toCommonJS(copilotkit_exports);
88
- var import_react9 = require("react");
88
+ var import_react11 = require("react");
89
89
 
90
90
  // src/context/copilot-context.tsx
91
91
  var import_react = __toESM(require("react"));
@@ -314,7 +314,7 @@ function setsHaveIntersection(setA, setB) {
314
314
 
315
315
  // src/components/copilot-provider/copilotkit.tsx
316
316
  var import_react_dom = require("react-dom");
317
- var import_shared9 = require("@copilotkit/shared");
317
+ var import_shared10 = require("@copilotkit/shared");
318
318
 
319
319
  // src/hooks/use-flat-category-store.ts
320
320
  var import_react3 = require("react");
@@ -395,6 +395,15 @@ var emptyCopilotContext2 = {
395
395
  setSuggestions: () => []
396
396
  };
397
397
  var CopilotMessagesContext = import_react4.default.createContext(emptyCopilotContext2);
398
+ function useCopilotMessagesContext() {
399
+ const context = import_react4.default.useContext(CopilotMessagesContext);
400
+ if (context === emptyCopilotContext2) {
401
+ throw new Error(
402
+ "A messages consuming component was not wrapped with `<CopilotMessages> {...} </CopilotMessages>`"
403
+ );
404
+ }
405
+ return context;
406
+ }
398
407
 
399
408
  // src/components/copilot-provider/copilot-messages.tsx
400
409
  var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
@@ -1074,8 +1083,12 @@ var getErrorActions = (error) => {
1074
1083
  case import_shared5.CopilotKitErrorCode.MISSING_PUBLIC_API_KEY_ERROR:
1075
1084
  return {
1076
1085
  primary: {
1077
- label: "Get Free API Key",
1078
- onClick: () => window.open("https://cloud.copilotkit.ai", "_blank", "noopener,noreferrer")
1086
+ label: "Show me how",
1087
+ onClick: () => window.open(
1088
+ "https://docs.copilotkit.ai/premium#how-do-i-get-access-to-premium-features",
1089
+ "_blank",
1090
+ "noopener,noreferrer"
1091
+ )
1079
1092
  }
1080
1093
  };
1081
1094
  case import_shared5.CopilotKitErrorCode.UPGRADE_REQUIRED_ERROR:
@@ -1325,69 +1338,1030 @@ var CopilotErrorBoundary = class extends import_react8.default.Component {
1325
1338
  }
1326
1339
  };
1327
1340
 
1328
- // src/components/copilot-provider/copilotkit.tsx
1341
+ // src/components/dev-console/console-trigger.tsx
1342
+ var import_react10 = require("react");
1343
+
1344
+ // src/components/dev-console/icons.tsx
1329
1345
  var import_jsx_runtime5 = require("react/jsx-runtime");
1346
+ var ExclamationMarkTriangleIcon = () => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1347
+ "svg",
1348
+ {
1349
+ width: "13.3967723px",
1350
+ height: "12px",
1351
+ viewBox: "0 0 13.3967723 12",
1352
+ version: "1.1",
1353
+ xmlns: "http://www.w3.org/2000/svg",
1354
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("g", { id: "Page-1", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("g", { id: "exclamation-triangle", fill: "#CD2121", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1355
+ "path",
1356
+ {
1357
+ d: "M5.39935802,0.75 C5.97670802,-0.25 7.42007802,-0.25 7.99742802,0.75 L13.193588,9.75 C13.770888,10.75 13.049288,12 11.894588,12 L1.50223802,12 C0.34753802,12 -0.37414898,10.75 0.20319802,9.75 L5.39935802,0.75 Z M6.69838802,2.5 C7.11260802,2.5 7.44838802,2.83579 7.44838802,3.25 L7.44838802,6.25 C7.44838802,6.66421 7.11260802,7 6.69838802,7 C6.28417802,7 5.94838802,6.66421 5.94838802,6.25 L5.94838802,3.25 C5.94838802,2.83579 6.28417802,2.5 6.69838802,2.5 Z M6.69838802,10.5 C7.25067802,10.5 7.69838802,10.0523 7.69838802,9.5 C7.69838802,8.9477 7.25067802,8.5 6.69838802,8.5 C6.14610802,8.5 5.69838802,8.9477 5.69838802,9.5 C5.69838802,10.0523 6.14610802,10.5 6.69838802,10.5 Z",
1358
+ id: "Shape"
1359
+ }
1360
+ ) }) })
1361
+ }
1362
+ );
1363
+ var CheckIcon = () => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1364
+ "svg",
1365
+ {
1366
+ width: "14px",
1367
+ height: "14px",
1368
+ viewBox: "0 0 14 14",
1369
+ version: "1.1",
1370
+ xmlns: "http://www.w3.org/2000/svg",
1371
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("g", { id: "Page-1", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("g", { id: "Group-2", transform: "translate(-118, 0)", fill: "#1BC030", fillRule: "nonzero", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("g", { id: "Group", transform: "translate(118, 0)", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1372
+ "path",
1373
+ {
1374
+ d: "M0,7 C0,3.13384615 3.13384615,0 7,0 C10.8661538,0 14,3.13384615 14,7 C14,10.8661538 10.8661538,14 7,14 C3.13384615,14 0,10.8661538 0,7 Z M9.59179487,5.69764103 C9.70905818,5.54139023 9.73249341,5.33388318 9.65303227,5.15541491 C9.57357113,4.97694665 9.40367989,4.85551619 9.20909814,4.83811118 C9.01451638,4.82070616 8.82577109,4.91005717 8.71589744,5.07158974 L6.39261538,8.32389744 L5.22666667,7.15794872 C5.01450582,6.96025518 4.68389046,6.9660885 4.47883563,7.17114332 C4.27378081,7.37619815 4.26794748,7.70681351 4.46564103,7.91897436 L6.08102564,9.53435897 C6.19289944,9.64614839 6.3482622,9.70310251 6.50588106,9.69010587 C6.66349993,9.67710922 6.80743532,9.59547613 6.89948718,9.46687179 L9.59179487,5.69764103 L9.59179487,5.69764103 Z",
1375
+ id: "Shape"
1376
+ }
1377
+ ) }) }) })
1378
+ }
1379
+ );
1380
+ var CopilotKitIcon = () => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1381
+ "svg",
1382
+ {
1383
+ width: "33px",
1384
+ height: "35px",
1385
+ viewBox: "0 0 33 35",
1386
+ version: "1.1",
1387
+ xmlns: "http://www.w3.org/2000/svg",
1388
+ children: [
1389
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("title", { children: "bd5c9079-929b-4d55-bdc9-16d1c8181b71" }),
1390
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("g", { id: "Page-1", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1391
+ "image",
1392
+ {
1393
+ x: "0",
1394
+ y: "0",
1395
+ width: "33",
1396
+ height: "35",
1397
+ xlinkHref: "data:image/png;base64,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"
1398
+ }
1399
+ ) })
1400
+ ]
1401
+ }
1402
+ );
1403
+
1404
+ // src/components/dev-console/developer-console-modal.tsx
1405
+ var import_shared9 = require("@copilotkit/shared");
1406
+ var import_react9 = require("react");
1407
+ var import_jsx_runtime6 = require("react/jsx-runtime");
1408
+ function DeveloperConsoleModal({ isOpen, onClose, hasApiKey }) {
1409
+ const context = useCopilotContext();
1410
+ const messagesContext = useCopilotMessagesContext();
1411
+ const [activeTab, setActiveTab] = (0, import_react9.useState)("actions");
1412
+ (0, import_react9.useEffect)(() => {
1413
+ const handleEscape = (e) => {
1414
+ if (e.key === "Escape") {
1415
+ onClose();
1416
+ }
1417
+ };
1418
+ if (isOpen) {
1419
+ document.addEventListener("keydown", handleEscape);
1420
+ document.body.style.overflow = "hidden";
1421
+ }
1422
+ return () => {
1423
+ document.removeEventListener("keydown", handleEscape);
1424
+ document.body.style.overflow = "unset";
1425
+ };
1426
+ }, [isOpen, onClose]);
1427
+ if (!isOpen)
1428
+ return null;
1429
+ const displayContext = hasApiKey ? context : {
1430
+ actions: {
1431
+ search_web: { name: "search_web", description: "Search the web for information" },
1432
+ send_email: { name: "send_email", description: "Send an email to a contact" },
1433
+ create_document: { name: "create_document", description: "Create a new document" },
1434
+ analyze_code: {
1435
+ name: "analyze_code",
1436
+ description: "Analyze code for issues and improvements"
1437
+ },
1438
+ generate_tests: {
1439
+ name: "generate_tests",
1440
+ description: "Generate unit tests for functions"
1441
+ }
1442
+ },
1443
+ getAllContext: () => [
1444
+ {
1445
+ content: "User preferences: dark mode enabled, TypeScript preferred",
1446
+ metadata: { source: "settings" }
1447
+ },
1448
+ {
1449
+ content: "Current project: Building a React application with CopilotKit",
1450
+ metadata: { source: "project" }
1451
+ },
1452
+ {
1453
+ content: "Recent activity: Implemented authentication system",
1454
+ metadata: { source: "activity" }
1455
+ },
1456
+ {
1457
+ content: "Development environment: VS Code, Node.js 18, React 18",
1458
+ metadata: { source: "environment" }
1459
+ }
1460
+ ],
1461
+ coagentStates: {
1462
+ "main-agent": { status: "active", lastUpdate: Date.now() },
1463
+ "code-assistant": { status: "active", lastUpdate: Date.now() - 15e3 },
1464
+ "search-agent": { status: "idle", lastUpdate: Date.now() - 6e4 }
1465
+ },
1466
+ getDocumentsContext: () => [
1467
+ {
1468
+ content: "README.md: Project setup and installation instructions",
1469
+ metadata: { type: "documentation" }
1470
+ },
1471
+ {
1472
+ content: "API Documentation: CopilotKit integration guide",
1473
+ metadata: { type: "documentation" }
1474
+ },
1475
+ {
1476
+ content: "package.json: Project dependencies and scripts",
1477
+ metadata: { type: "configuration" }
1478
+ }
1479
+ ]
1480
+ };
1481
+ const displayMessagesContext = hasApiKey ? messagesContext : {
1482
+ messages: [
1483
+ {
1484
+ id: "1",
1485
+ role: "user",
1486
+ content: "Help me implement a todo list with drag and drop functionality"
1487
+ },
1488
+ {
1489
+ id: "2",
1490
+ role: "assistant",
1491
+ content: "I'll help you create a todo list with drag and drop. Let me start by setting up the basic components and then add the drag and drop functionality using React DnD."
1492
+ },
1493
+ { id: "3", role: "user", content: "Can you also add priority levels and due dates?" },
1494
+ {
1495
+ id: "4",
1496
+ role: "assistant",
1497
+ content: "Absolutely! I'll enhance the todo items with priority levels (high, medium, low) and due date functionality. This will make your todo list much more powerful for task management."
1498
+ },
1499
+ { id: "5", role: "user", content: "Perfect! How about adding categories or tags?" }
1500
+ ]
1501
+ };
1502
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1503
+ "div",
1504
+ {
1505
+ style: {
1506
+ position: "fixed",
1507
+ top: 0,
1508
+ left: 0,
1509
+ right: 0,
1510
+ bottom: 0,
1511
+ zIndex: 9999,
1512
+ backgroundColor: "rgba(0, 0, 0, 0.3)",
1513
+ display: "flex",
1514
+ alignItems: "center",
1515
+ justifyContent: "center",
1516
+ padding: "16px"
1517
+ },
1518
+ onClick: onClose,
1519
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
1520
+ "div",
1521
+ {
1522
+ style: {
1523
+ width: "1152px",
1524
+ maxWidth: "95vw",
1525
+ height: "80vh",
1526
+ backgroundColor: "white",
1527
+ borderRadius: "12px",
1528
+ boxShadow: "0 25px 50px -12px rgba(0, 0, 0, 0.25)",
1529
+ display: "flex",
1530
+ flexDirection: "column",
1531
+ overflow: "hidden",
1532
+ position: "relative"
1533
+ },
1534
+ onClick: (e) => e.stopPropagation(),
1535
+ children: [
1536
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
1537
+ "div",
1538
+ {
1539
+ style: {
1540
+ display: "flex",
1541
+ alignItems: "center",
1542
+ justifyContent: "space-between",
1543
+ padding: "24px",
1544
+ borderBottom: "1px solid #e5e7eb",
1545
+ minHeight: "73px",
1546
+ flexShrink: 0,
1547
+ filter: !hasApiKey ? "blur(0.3px)" : "none",
1548
+ opacity: !hasApiKey ? 0.95 : 1
1549
+ },
1550
+ children: [
1551
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "12px" }, children: [
1552
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(CopilotKitIcon, {}),
1553
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1554
+ "h1",
1555
+ {
1556
+ style: {
1557
+ fontWeight: "bold",
1558
+ fontSize: "20px",
1559
+ color: "#1f2937",
1560
+ margin: 0
1561
+ },
1562
+ children: "Developer Console"
1563
+ }
1564
+ ),
1565
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
1566
+ "span",
1567
+ {
1568
+ style: {
1569
+ fontSize: "14px",
1570
+ color: "#6b7280",
1571
+ backgroundColor: "#f3f4f6",
1572
+ padding: "4px 8px",
1573
+ borderRadius: "4px"
1574
+ },
1575
+ children: [
1576
+ "v",
1577
+ import_shared9.COPILOTKIT_VERSION
1578
+ ]
1579
+ }
1580
+ )
1581
+ ] }),
1582
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1583
+ "button",
1584
+ {
1585
+ onClick: onClose,
1586
+ style: {
1587
+ color: "#9ca3af",
1588
+ fontSize: "24px",
1589
+ fontWeight: "300",
1590
+ border: "none",
1591
+ background: "none",
1592
+ cursor: "pointer",
1593
+ padding: "4px"
1594
+ },
1595
+ onMouseEnter: (e) => e.currentTarget.style.color = "#4b5563",
1596
+ onMouseLeave: (e) => e.currentTarget.style.color = "#9ca3af",
1597
+ children: "\xD7"
1598
+ }
1599
+ )
1600
+ ]
1601
+ }
1602
+ ),
1603
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1604
+ "div",
1605
+ {
1606
+ style: {
1607
+ display: "flex",
1608
+ borderBottom: "1px solid #e5e7eb",
1609
+ backgroundColor: "#f9fafb",
1610
+ minHeight: "50px",
1611
+ flexShrink: 0,
1612
+ filter: !hasApiKey ? "blur(0.3px)" : "none",
1613
+ opacity: !hasApiKey ? 0.9 : 1
1614
+ },
1615
+ children: [
1616
+ { id: "actions", label: "Actions", count: Object.keys(displayContext.actions).length },
1617
+ { id: "readables", label: "Readables", count: displayContext.getAllContext().length },
1618
+ {
1619
+ id: "agent",
1620
+ label: "Agent Status",
1621
+ count: Object.keys(displayContext.coagentStates).length
1622
+ },
1623
+ { id: "messages", label: "Messages", count: displayMessagesContext.messages.length },
1624
+ {
1625
+ id: "context",
1626
+ label: "Context",
1627
+ count: displayContext.getDocumentsContext([]).length
1628
+ }
1629
+ ].map((tab) => /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
1630
+ "button",
1631
+ {
1632
+ onClick: () => setActiveTab(tab.id),
1633
+ style: {
1634
+ padding: "12px 24px",
1635
+ fontSize: "14px",
1636
+ fontWeight: "500",
1637
+ border: "none",
1638
+ cursor: "pointer",
1639
+ backgroundColor: activeTab === tab.id ? "white" : "transparent",
1640
+ color: activeTab === tab.id ? "#2563eb" : "#6b7280",
1641
+ borderBottom: activeTab === tab.id ? "2px solid #2563eb" : "none",
1642
+ transition: "all 0.2s"
1643
+ },
1644
+ onMouseEnter: (e) => {
1645
+ if (activeTab !== tab.id) {
1646
+ e.currentTarget.style.color = "#1f2937";
1647
+ e.currentTarget.style.backgroundColor = "#f3f4f6";
1648
+ }
1649
+ },
1650
+ onMouseLeave: (e) => {
1651
+ if (activeTab !== tab.id) {
1652
+ e.currentTarget.style.color = "#6b7280";
1653
+ e.currentTarget.style.backgroundColor = "transparent";
1654
+ }
1655
+ },
1656
+ children: [
1657
+ tab.label,
1658
+ tab.count > 0 && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1659
+ "span",
1660
+ {
1661
+ style: {
1662
+ marginLeft: "8px",
1663
+ backgroundColor: "#e5e7eb",
1664
+ color: "#374151",
1665
+ padding: "2px 8px",
1666
+ borderRadius: "9999px",
1667
+ fontSize: "12px"
1668
+ },
1669
+ children: tab.count
1670
+ }
1671
+ )
1672
+ ]
1673
+ },
1674
+ tab.id
1675
+ ))
1676
+ }
1677
+ ),
1678
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
1679
+ "div",
1680
+ {
1681
+ style: {
1682
+ height: "calc(100% - 142px)",
1683
+ overflow: "auto",
1684
+ padding: "24px",
1685
+ backgroundColor: "#f9fafb",
1686
+ filter: !hasApiKey ? "blur(0.3px)" : "none",
1687
+ opacity: !hasApiKey ? 0.85 : 1
1688
+ },
1689
+ children: [
1690
+ activeTab === "actions" && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(ActionsTab, { context: displayContext }),
1691
+ activeTab === "readables" && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(ReadablesTab, { context: displayContext }),
1692
+ activeTab === "agent" && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(AgentStatusTab, { context: displayContext }),
1693
+ activeTab === "messages" && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(MessagesTab, { messagesContext: displayMessagesContext }),
1694
+ activeTab === "context" && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(ContextTab, { context: displayContext })
1695
+ ]
1696
+ }
1697
+ ),
1698
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
1699
+ "div",
1700
+ {
1701
+ style: {
1702
+ padding: "16px 24px",
1703
+ borderTop: "1px solid #e5e7eb",
1704
+ backgroundColor: "white",
1705
+ display: "flex",
1706
+ justifyContent: "space-between",
1707
+ alignItems: "center",
1708
+ minHeight: "57px",
1709
+ flexShrink: 0,
1710
+ filter: !hasApiKey ? "blur(0.3px)" : "none",
1711
+ opacity: !hasApiKey ? 0.9 : 1
1712
+ },
1713
+ children: [
1714
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: { fontSize: "14px", color: "#6b7280" }, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1715
+ "a",
1716
+ {
1717
+ href: "https://github.com/CopilotKit/CopilotKit/issues",
1718
+ target: "_blank",
1719
+ rel: "noopener noreferrer",
1720
+ style: { color: "#2563eb", textDecoration: "none" },
1721
+ onMouseEnter: (e) => e.currentTarget.style.textDecoration = "underline",
1722
+ onMouseLeave: (e) => e.currentTarget.style.textDecoration = "none",
1723
+ children: "Report an issue"
1724
+ }
1725
+ ) }),
1726
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: { fontSize: "14px", color: "#6b7280" }, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1727
+ "a",
1728
+ {
1729
+ href: "https://mcp.copilotkit.ai/",
1730
+ target: "_blank",
1731
+ rel: "noopener noreferrer",
1732
+ style: { color: "#2563eb", textDecoration: "none" },
1733
+ onMouseEnter: (e) => e.currentTarget.style.textDecoration = "underline",
1734
+ onMouseLeave: (e) => e.currentTarget.style.textDecoration = "none",
1735
+ children: "Add MCP Server \u2192"
1736
+ }
1737
+ ) })
1738
+ ]
1739
+ }
1740
+ ),
1741
+ !hasApiKey && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1742
+ "div",
1743
+ {
1744
+ style: {
1745
+ position: "absolute",
1746
+ top: 0,
1747
+ left: 0,
1748
+ right: 0,
1749
+ bottom: 0,
1750
+ backgroundColor: "rgba(255, 255, 255, 0.2)",
1751
+ backdropFilter: "blur(2px)",
1752
+ WebkitBackdropFilter: "blur(2px)",
1753
+ display: "flex",
1754
+ alignItems: "center",
1755
+ justifyContent: "center",
1756
+ borderRadius: "12px",
1757
+ zIndex: 10
1758
+ },
1759
+ onClick: (e) => e.stopPropagation(),
1760
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
1761
+ "button",
1762
+ {
1763
+ onClick: () => window.open("https://cloud.copilotkit.ai/sign-in", "_blank"),
1764
+ style: {
1765
+ // Following button system specifications
1766
+ height: "48px",
1767
+ padding: "12px 24px",
1768
+ backgroundColor: "#030507",
1769
+ // textPrimary token
1770
+ color: "#FFFFFF",
1771
+ borderRadius: "12px",
1772
+ // Medium radius token
1773
+ border: "none",
1774
+ cursor: "pointer",
1775
+ fontSize: "14px",
1776
+ // Medium Semi Bold typography
1777
+ fontWeight: "600",
1778
+ fontFamily: "'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, sans-serif",
1779
+ lineHeight: "22px",
1780
+ boxShadow: "0 4px 16px rgba(3, 5, 7, 0.2), 0 1px 3px rgba(3, 5, 7, 0.1)",
1781
+ transition: "all 200ms ease",
1782
+ // 200ms ease as per specs
1783
+ display: "inline-flex",
1784
+ alignItems: "center",
1785
+ gap: "8px",
1786
+ textTransform: "uppercase",
1787
+ letterSpacing: "0.5px"
1788
+ },
1789
+ onMouseEnter: (e) => {
1790
+ e.currentTarget.style.backgroundColor = "#575758";
1791
+ e.currentTarget.style.transform = "translateY(-1px)";
1792
+ e.currentTarget.style.boxShadow = "0 6px 20px rgba(3, 5, 7, 0.25), 0 2px 4px rgba(3, 5, 7, 0.15)";
1793
+ },
1794
+ onMouseLeave: (e) => {
1795
+ e.currentTarget.style.backgroundColor = "#030507";
1796
+ e.currentTarget.style.transform = "translateY(0)";
1797
+ e.currentTarget.style.boxShadow = "0 4px 16px rgba(3, 5, 7, 0.2), 0 1px 3px rgba(3, 5, 7, 0.1)";
1798
+ },
1799
+ onMouseDown: (e) => {
1800
+ e.currentTarget.style.backgroundColor = "#858589";
1801
+ e.currentTarget.style.transform = "translateY(0)";
1802
+ },
1803
+ onMouseUp: (e) => {
1804
+ e.currentTarget.style.backgroundColor = "#575758";
1805
+ e.currentTarget.style.transform = "translateY(-1px)";
1806
+ },
1807
+ onFocus: (e) => {
1808
+ e.currentTarget.style.outline = "2px solid #BEC9FF";
1809
+ e.currentTarget.style.outlineOffset = "2px";
1810
+ },
1811
+ onBlur: (e) => {
1812
+ e.currentTarget.style.outline = "none";
1813
+ },
1814
+ children: [
1815
+ "Get API Key",
1816
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { style: { fontSize: "16px", marginLeft: "-4px" }, children: "\u2192" })
1817
+ ]
1818
+ }
1819
+ )
1820
+ }
1821
+ )
1822
+ ]
1823
+ }
1824
+ )
1825
+ }
1826
+ );
1827
+ }
1828
+ function ActionsTab({ context }) {
1829
+ const actions = Object.values(context.actions);
1830
+ if (actions.length === 0) {
1831
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { style: { textAlign: "center", padding: "48px 0", color: "#6b7280" }, children: [
1832
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { style: { fontSize: "18px", margin: "0 0 8px 0" }, children: "No actions available" }),
1833
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { style: { fontSize: "14px", margin: 0 }, children: "Actions will appear here when registered" })
1834
+ ] });
1835
+ }
1836
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: { display: "flex", flexDirection: "column", gap: "16px" }, children: actions.map((action, index) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1837
+ "div",
1838
+ {
1839
+ style: {
1840
+ backgroundColor: "white",
1841
+ padding: "16px",
1842
+ borderRadius: "8px",
1843
+ boxShadow: "0 1px 3px 0 rgba(0, 0, 0, 0.1)",
1844
+ border: "1px solid #e5e7eb"
1845
+ },
1846
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
1847
+ "div",
1848
+ {
1849
+ style: { display: "flex", alignItems: "flex-start", justifyContent: "space-between" },
1850
+ children: [
1851
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { style: { flex: 1 }, children: [
1852
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h3", { style: { fontWeight: "600", color: "#1f2937", margin: "0 0 4px 0" }, children: action.name }),
1853
+ action.description && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { style: { fontSize: "14px", color: "#4b5563", margin: "0 0 12px 0" }, children: action.description }),
1854
+ action.parameters && action.parameters.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { style: { marginTop: "12px" }, children: [
1855
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1856
+ "p",
1857
+ {
1858
+ style: {
1859
+ fontSize: "12px",
1860
+ fontWeight: "500",
1861
+ color: "#6b7280",
1862
+ textTransform: "uppercase",
1863
+ margin: "0 0 4px 0"
1864
+ },
1865
+ children: "Parameters:"
1866
+ }
1867
+ ),
1868
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: { display: "flex", flexDirection: "column", gap: "4px" }, children: action.parameters.map((param, pIndex) => /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { style: { fontSize: "14px" }, children: [
1869
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { style: { fontFamily: "monospace", color: "#374151" }, children: param.name }),
1870
+ param.required && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { style: { marginLeft: "4px", fontSize: "12px", color: "#ef4444" }, children: "*required" }),
1871
+ param.type && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { style: { marginLeft: "8px", fontSize: "12px", color: "#6b7280" }, children: [
1872
+ "(",
1873
+ param.type,
1874
+ ")"
1875
+ ] })
1876
+ ] }, pIndex)) })
1877
+ ] })
1878
+ ] }),
1879
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: { marginLeft: "16px" }, children: action.status === "available" ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(CheckIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(ExclamationMarkTriangleIcon, {}) })
1880
+ ]
1881
+ }
1882
+ )
1883
+ },
1884
+ index
1885
+ )) });
1886
+ }
1887
+ function ReadablesTab({ context }) {
1888
+ const readables = context.getAllContext();
1889
+ if (readables.length === 0) {
1890
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { style: { textAlign: "center", padding: "48px 0", color: "#6b7280" }, children: [
1891
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { style: { fontSize: "18px", margin: "0 0 8px 0" }, children: "No readable context available" }),
1892
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { style: { fontSize: "14px", margin: 0 }, children: "Readable context will appear here when provided" })
1893
+ ] });
1894
+ }
1895
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: { display: "flex", flexDirection: "column", gap: "16px" }, children: readables.map((readable, index) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1896
+ "div",
1897
+ {
1898
+ style: {
1899
+ backgroundColor: "white",
1900
+ padding: "16px",
1901
+ borderRadius: "8px",
1902
+ boxShadow: "0 1px 3px 0 rgba(0, 0, 0, 0.1)",
1903
+ border: "1px solid #e5e7eb"
1904
+ },
1905
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1906
+ "div",
1907
+ {
1908
+ style: { display: "flex", alignItems: "flex-start", justifyContent: "space-between" },
1909
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { style: { flex: 1 }, children: [
1910
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h3", { style: { fontWeight: "600", color: "#1f2937", margin: "0 0 4px 0" }, children: readable.name || `Readable ${index + 1}` }),
1911
+ readable.description && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { style: { fontSize: "14px", color: "#4b5563", margin: "0 0 12px 0" }, children: readable.description }),
1912
+ readable.value && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1913
+ "pre",
1914
+ {
1915
+ style: {
1916
+ marginTop: "12px",
1917
+ padding: "8px",
1918
+ backgroundColor: "#f9fafb",
1919
+ borderRadius: "4px",
1920
+ fontSize: "12px",
1921
+ overflowX: "auto",
1922
+ margin: "12px 0 0 0"
1923
+ },
1924
+ children: JSON.stringify(readable.value, null, 2)
1925
+ }
1926
+ )
1927
+ ] })
1928
+ }
1929
+ )
1930
+ },
1931
+ index
1932
+ )) });
1933
+ }
1934
+ function AgentStatusTab({ context }) {
1935
+ const agentStates = context.coagentStates || {};
1936
+ const agentStateEntries = Object.entries(agentStates);
1937
+ if (agentStateEntries.length === 0) {
1938
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { style: { textAlign: "center", padding: "48px 0", color: "#6b7280" }, children: [
1939
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { style: { fontSize: "18px", margin: "0 0 8px 0" }, children: "No agent states available" }),
1940
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { style: { fontSize: "14px", margin: 0 }, children: "Agent states will appear here when agents are active" })
1941
+ ] });
1942
+ }
1943
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: { display: "flex", flexDirection: "column", gap: "24px" }, children: agentStateEntries.map(([agentName, state]) => /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
1944
+ "div",
1945
+ {
1946
+ style: {
1947
+ backgroundColor: "white",
1948
+ padding: "24px",
1949
+ borderRadius: "8px",
1950
+ boxShadow: "0 1px 3px 0 rgba(0, 0, 0, 0.1)",
1951
+ border: "1px solid #e5e7eb"
1952
+ },
1953
+ children: [
1954
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
1955
+ "div",
1956
+ {
1957
+ style: {
1958
+ display: "flex",
1959
+ alignItems: "center",
1960
+ justifyContent: "space-between",
1961
+ marginBottom: "16px"
1962
+ },
1963
+ children: [
1964
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h3", { style: { fontWeight: "600", fontSize: "18px", color: "#1f2937", margin: 0 }, children: agentName }),
1965
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1966
+ "span",
1967
+ {
1968
+ style: {
1969
+ padding: "4px 12px",
1970
+ borderRadius: "9999px",
1971
+ fontSize: "12px",
1972
+ fontWeight: "500",
1973
+ backgroundColor: state.status === "running" ? "#dcfce7" : state.status === "complete" ? "#dbeafe" : "#f3f4f6",
1974
+ color: state.status === "running" ? "#166534" : state.status === "complete" ? "#1e40af" : "#1f2937"
1975
+ },
1976
+ children: state.status || "idle"
1977
+ }
1978
+ )
1979
+ ]
1980
+ }
1981
+ ),
1982
+ state.state && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { style: { marginBottom: "12px" }, children: [
1983
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1984
+ "p",
1985
+ {
1986
+ style: {
1987
+ fontSize: "12px",
1988
+ fontWeight: "500",
1989
+ color: "#6b7280",
1990
+ textTransform: "uppercase",
1991
+ margin: "0 0 4px 0"
1992
+ },
1993
+ children: "Current State:"
1994
+ }
1995
+ ),
1996
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1997
+ "pre",
1998
+ {
1999
+ style: {
2000
+ padding: "12px",
2001
+ backgroundColor: "#f9fafb",
2002
+ borderRadius: "4px",
2003
+ fontSize: "12px",
2004
+ overflowX: "auto",
2005
+ margin: 0
2006
+ },
2007
+ children: JSON.stringify(state.state, null, 2)
2008
+ }
2009
+ )
2010
+ ] }),
2011
+ state.running && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
2012
+ "div",
2013
+ {
2014
+ style: {
2015
+ marginTop: "16px",
2016
+ display: "flex",
2017
+ alignItems: "center",
2018
+ fontSize: "14px",
2019
+ color: "#4b5563"
2020
+ },
2021
+ children: [
2022
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: { marginRight: "8px" }, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
2023
+ "svg",
2024
+ {
2025
+ width: "16",
2026
+ height: "16",
2027
+ viewBox: "0 0 16 16",
2028
+ style: { animation: "spin 1s linear infinite" },
2029
+ children: [
2030
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("style", { children: `@keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }` }),
2031
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2032
+ "circle",
2033
+ {
2034
+ cx: "8",
2035
+ cy: "8",
2036
+ r: "6",
2037
+ fill: "none",
2038
+ stroke: "#4b5563",
2039
+ strokeWidth: "2",
2040
+ strokeDasharray: "9 3"
2041
+ }
2042
+ )
2043
+ ]
2044
+ }
2045
+ ) }),
2046
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { children: "Agent is currently running..." })
2047
+ ]
2048
+ }
2049
+ )
2050
+ ]
2051
+ },
2052
+ agentName
2053
+ )) });
2054
+ }
2055
+ function MessagesTab({ messagesContext }) {
2056
+ const messages = messagesContext.messages || [];
2057
+ if (messages.length === 0) {
2058
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { style: { textAlign: "center", padding: "48px 0", color: "#6b7280" }, children: [
2059
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { style: { fontSize: "18px", margin: "0 0 8px 0" }, children: "No messages yet" }),
2060
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { style: { fontSize: "14px", margin: 0 }, children: "Messages will appear here as the conversation progresses" })
2061
+ ] });
2062
+ }
2063
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: { display: "flex", flexDirection: "column", gap: "16px" }, children: messages.map((message, index) => /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
2064
+ "div",
2065
+ {
2066
+ style: {
2067
+ padding: "16px",
2068
+ borderRadius: "8px",
2069
+ backgroundColor: message.role === "user" ? "#eff6ff" : message.role === "assistant" ? "#f9fafb" : "#fefce8",
2070
+ border: `1px solid ${message.role === "user" ? "#c7d2fe" : message.role === "assistant" ? "#e5e7eb" : "#fde047"}`,
2071
+ marginLeft: message.role === "user" ? "48px" : "0",
2072
+ marginRight: message.role === "assistant" ? "48px" : "0"
2073
+ },
2074
+ children: [
2075
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
2076
+ "div",
2077
+ {
2078
+ style: {
2079
+ display: "flex",
2080
+ alignItems: "flex-start",
2081
+ justifyContent: "space-between",
2082
+ marginBottom: "8px"
2083
+ },
2084
+ children: [
2085
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2086
+ "span",
2087
+ {
2088
+ style: {
2089
+ fontWeight: "500",
2090
+ fontSize: "14px",
2091
+ color: "#374151",
2092
+ textTransform: "capitalize"
2093
+ },
2094
+ children: message.role || "system"
2095
+ }
2096
+ ),
2097
+ message.timestamp && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { style: { fontSize: "12px", color: "#6b7280" }, children: new Date(message.timestamp).toLocaleTimeString() })
2098
+ ]
2099
+ }
2100
+ ),
2101
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: { fontSize: "14px", color: "#1f2937", whiteSpace: "pre-wrap" }, children: message.content || "" })
2102
+ ]
2103
+ },
2104
+ index
2105
+ )) });
2106
+ }
2107
+ function ContextTab({ context }) {
2108
+ const documents = context.getDocumentsContext([]);
2109
+ if (documents.length === 0) {
2110
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { style: { textAlign: "center", padding: "48px 0", color: "#6b7280" }, children: [
2111
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { style: { fontSize: "18px", margin: "0 0 8px 0" }, children: "No document context available" }),
2112
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { style: { fontSize: "14px", margin: 0 }, children: "Document context will appear here when provided" })
2113
+ ] });
2114
+ }
2115
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: { display: "flex", flexDirection: "column", gap: "16px" }, children: documents.map((doc, index) => /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
2116
+ "div",
2117
+ {
2118
+ style: {
2119
+ backgroundColor: "white",
2120
+ padding: "16px",
2121
+ borderRadius: "8px",
2122
+ boxShadow: "0 1px 3px 0 rgba(0, 0, 0, 0.1)",
2123
+ border: "1px solid #e5e7eb"
2124
+ },
2125
+ children: [
2126
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h3", { style: { fontWeight: "600", color: "#1f2937", margin: "0 0 8px 0" }, children: doc.name || `Document ${index + 1}` }),
2127
+ doc.content && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
2128
+ "pre",
2129
+ {
2130
+ style: {
2131
+ padding: "12px",
2132
+ backgroundColor: "#f9fafb",
2133
+ borderRadius: "4px",
2134
+ fontSize: "12px",
2135
+ overflowX: "auto",
2136
+ margin: 0
2137
+ },
2138
+ children: doc.content
2139
+ }
2140
+ )
2141
+ ]
2142
+ },
2143
+ index
2144
+ )) });
2145
+ }
2146
+
2147
+ // src/components/dev-console/console-trigger.tsx
2148
+ var import_jsx_runtime7 = require("react/jsx-runtime");
2149
+ function ConsoleTrigger({ position = "bottom-right" }) {
2150
+ const context = useCopilotContext();
2151
+ const hasApiKey = Boolean(context.copilotApiConfig.publicApiKey);
2152
+ const [isModalOpen, setIsModalOpen] = (0, import_react10.useState)(false);
2153
+ const [isHovered, setIsHovered] = (0, import_react10.useState)(false);
2154
+ const [isDragging, setIsDragging] = (0, import_react10.useState)(false);
2155
+ const [buttonPosition, setButtonPosition] = (0, import_react10.useState)(null);
2156
+ const [mounted, setMounted] = (0, import_react10.useState)(false);
2157
+ const dragRef = (0, import_react10.useRef)(null);
2158
+ const buttonRef = (0, import_react10.useRef)(null);
2159
+ (0, import_react10.useEffect)(() => {
2160
+ setMounted(true);
2161
+ if (typeof window !== "undefined" && !buttonPosition) {
2162
+ const buttonSize = 60;
2163
+ const margin = 24;
2164
+ const initialPosition = {
2165
+ x: margin,
2166
+ y: window.innerHeight - buttonSize - margin
2167
+ };
2168
+ setButtonPosition(initialPosition);
2169
+ }
2170
+ }, [position]);
2171
+ const handleMouseDown = (e) => {
2172
+ e.preventDefault();
2173
+ if (!buttonPosition)
2174
+ return;
2175
+ dragRef.current = {
2176
+ startX: e.clientX,
2177
+ startY: e.clientY,
2178
+ buttonX: buttonPosition.x,
2179
+ buttonY: buttonPosition.y
2180
+ };
2181
+ setIsDragging(true);
2182
+ };
2183
+ (0, import_react10.useEffect)(() => {
2184
+ if (!isDragging)
2185
+ return;
2186
+ const handleMouseMove = (e) => {
2187
+ e.preventDefault();
2188
+ e.stopPropagation();
2189
+ if (!dragRef.current)
2190
+ return;
2191
+ const deltaX = e.clientX - dragRef.current.startX;
2192
+ const deltaY = e.clientY - dragRef.current.startY;
2193
+ let newX = dragRef.current.buttonX + deltaX;
2194
+ let newY = dragRef.current.buttonY + deltaY;
2195
+ newX = Math.max(0, Math.min(newX, window.innerWidth - 60));
2196
+ newY = Math.max(0, Math.min(newY, window.innerHeight - 60));
2197
+ setButtonPosition({ x: newX, y: newY });
2198
+ };
2199
+ const handleMouseUp = (e) => {
2200
+ e.preventDefault();
2201
+ e.stopPropagation();
2202
+ setIsDragging(false);
2203
+ dragRef.current = null;
2204
+ };
2205
+ document.addEventListener("mousemove", handleMouseMove, { capture: true, passive: false });
2206
+ document.addEventListener("mouseup", handleMouseUp, { capture: true, passive: false });
2207
+ return () => {
2208
+ document.removeEventListener("mousemove", handleMouseMove, { capture: true });
2209
+ document.removeEventListener("mouseup", handleMouseUp, { capture: true });
2210
+ };
2211
+ }, [isDragging]);
2212
+ if (!mounted || !buttonPosition) {
2213
+ return null;
2214
+ }
2215
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
2216
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
2217
+ "button",
2218
+ {
2219
+ ref: buttonRef,
2220
+ onClick: () => {
2221
+ if (!isDragging) {
2222
+ setIsModalOpen(true);
2223
+ }
2224
+ },
2225
+ onMouseDown: handleMouseDown,
2226
+ onMouseEnter: () => setIsHovered(true),
2227
+ onMouseLeave: () => setIsHovered(false),
2228
+ style: {
2229
+ position: "fixed",
2230
+ left: `${buttonPosition.x}px`,
2231
+ top: `${buttonPosition.y}px`,
2232
+ zIndex: 2147483647,
2233
+ width: "60px",
2234
+ height: "60px",
2235
+ background: isDragging ? "#000000" : isHovered ? "#111111" : "#000000",
2236
+ color: "white",
2237
+ borderRadius: "50%",
2238
+ boxShadow: isDragging ? "0 8px 32px rgba(0, 0, 0, 0.6), 0 4px 16px rgba(0, 0, 0, 0.4)" : isHovered ? "0 12px 40px rgba(0, 0, 0, 0.7), 0 6px 20px rgba(0, 0, 0, 0.5)" : "0 6px 20px rgba(0, 0, 0, 0.5), 0 3px 10px rgba(0, 0, 0, 0.3)",
2239
+ transition: isDragging ? "none" : "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)",
2240
+ display: "flex",
2241
+ alignItems: "center",
2242
+ justifyContent: "center",
2243
+ border: "none",
2244
+ cursor: isDragging ? "grabbing" : "grab",
2245
+ opacity: 1,
2246
+ userSelect: "none",
2247
+ transform: isDragging ? "scale(1.05)" : isHovered ? "scale(1.1)" : "scale(1)",
2248
+ backdropFilter: "blur(10px)",
2249
+ pointerEvents: "auto",
2250
+ isolation: "isolate"
2251
+ },
2252
+ title: hasApiKey ? "Open Developer Console (Drag to move)" : "Developer Console (API Key Required, Drag to move)",
2253
+ children: [
2254
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2255
+ "div",
2256
+ {
2257
+ style: {
2258
+ width: "28px",
2259
+ height: "28px",
2260
+ display: "flex",
2261
+ alignItems: "center",
2262
+ justifyContent: "center",
2263
+ filter: "drop-shadow(0 2px 4px rgba(0,0,0,0.2))"
2264
+ },
2265
+ children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(CopilotKitIcon, {})
2266
+ }
2267
+ ),
2268
+ !hasApiKey && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2269
+ "div",
2270
+ {
2271
+ style: {
2272
+ position: "absolute",
2273
+ top: "-2px",
2274
+ right: "-2px",
2275
+ width: "18px",
2276
+ height: "18px",
2277
+ background: "linear-gradient(135deg, #ff6b6b 0%, #ee5a24 100%)",
2278
+ borderRadius: "50%",
2279
+ display: "flex",
2280
+ alignItems: "center",
2281
+ justifyContent: "center",
2282
+ boxShadow: "0 2px 8px rgba(255, 107, 107, 0.4)",
2283
+ border: "2px solid white"
2284
+ },
2285
+ children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { style: { fontSize: "10px", color: "white", fontWeight: "bold" }, children: "!" })
2286
+ }
2287
+ )
2288
+ ]
2289
+ }
2290
+ ),
2291
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
2292
+ DeveloperConsoleModal,
2293
+ {
2294
+ isOpen: isModalOpen,
2295
+ onClose: () => setIsModalOpen(false),
2296
+ hasApiKey
2297
+ }
2298
+ )
2299
+ ] });
2300
+ }
2301
+
2302
+ // src/components/copilot-provider/copilotkit.tsx
2303
+ var import_jsx_runtime8 = require("react/jsx-runtime");
1330
2304
  function CopilotKit(_a) {
1331
2305
  var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
1332
2306
  const enabled = shouldShowDevConsole(props.showDevConsole);
1333
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ToastProvider, { enabled, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CopilotErrorBoundary, { publicApiKey: props.publicApiKey, showUsageBanner: enabled, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CopilotKitInternal, __spreadProps(__spreadValues({}, props), { children })) }) });
2307
+ const publicApiKey = props.publicApiKey || props.publicLicenseKey;
2308
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ToastProvider, { enabled, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(CopilotErrorBoundary, { publicApiKey, showUsageBanner: enabled, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(CopilotKitInternal, __spreadProps(__spreadValues({}, props), { children })) }) });
1334
2309
  }
1335
2310
  function CopilotKitInternal(cpkProps) {
1336
2311
  const _a = cpkProps, { children } = _a, props = __objRest(_a, ["children"]);
1337
2312
  validateProps(cpkProps);
1338
- const chatApiEndpoint = props.runtimeUrl || import_shared9.COPILOT_CLOUD_CHAT_URL;
1339
- const [actions, setActions] = (0, import_react9.useState)({});
1340
- const [coAgentStateRenders, setCoAgentStateRenders] = (0, import_react9.useState)({});
1341
- const chatComponentsCache = (0, import_react9.useRef)({
2313
+ const publicApiKey = props.publicLicenseKey || props.publicApiKey;
2314
+ const chatApiEndpoint = props.runtimeUrl || import_shared10.COPILOT_CLOUD_CHAT_URL;
2315
+ const [actions, setActions] = (0, import_react11.useState)({});
2316
+ const [coAgentStateRenders, setCoAgentStateRenders] = (0, import_react11.useState)({});
2317
+ const chatComponentsCache = (0, import_react11.useRef)({
1342
2318
  actions: {},
1343
2319
  coAgentStateRenders: {}
1344
2320
  });
1345
2321
  const { addElement, removeElement, printTree, getAllElements } = use_tree_default();
1346
- const [isLoading, setIsLoading] = (0, import_react9.useState)(false);
1347
- const [chatInstructions, setChatInstructions] = (0, import_react9.useState)("");
1348
- const [authStates, setAuthStates] = (0, import_react9.useState)({});
1349
- const [extensions, setExtensions] = (0, import_react9.useState)({});
1350
- const [additionalInstructions, setAdditionalInstructions] = (0, import_react9.useState)([]);
2322
+ const [isLoading, setIsLoading] = (0, import_react11.useState)(false);
2323
+ const [chatInstructions, setChatInstructions] = (0, import_react11.useState)("");
2324
+ const [authStates, setAuthStates] = (0, import_react11.useState)({});
2325
+ const [extensions, setExtensions] = (0, import_react11.useState)({});
2326
+ const [additionalInstructions, setAdditionalInstructions] = (0, import_react11.useState)([]);
1351
2327
  const {
1352
2328
  addElement: addDocument,
1353
2329
  removeElement: removeDocument,
1354
2330
  allElements: allDocuments
1355
2331
  } = use_flat_category_store_default();
1356
- const statusChecker2 = (0, import_react9.useMemo)(() => new StatusChecker(), []);
1357
- const [usageBannerStatus, setUsageBannerStatus] = (0, import_react9.useState)(null);
1358
- const setAction = (0, import_react9.useCallback)((id, action) => {
2332
+ const setAction = (0, import_react11.useCallback)((id, action) => {
1359
2333
  setActions((prevPoints) => {
1360
2334
  return __spreadProps(__spreadValues({}, prevPoints), {
1361
2335
  [id]: action
1362
2336
  });
1363
2337
  });
1364
2338
  }, []);
1365
- const removeAction = (0, import_react9.useCallback)((id) => {
2339
+ const removeAction = (0, import_react11.useCallback)((id) => {
1366
2340
  setActions((prevPoints) => {
1367
2341
  const newPoints = __spreadValues({}, prevPoints);
1368
2342
  delete newPoints[id];
1369
2343
  return newPoints;
1370
2344
  });
1371
2345
  }, []);
1372
- const setCoAgentStateRender = (0, import_react9.useCallback)((id, stateRender) => {
2346
+ const setCoAgentStateRender = (0, import_react11.useCallback)((id, stateRender) => {
1373
2347
  setCoAgentStateRenders((prevPoints) => {
1374
2348
  return __spreadProps(__spreadValues({}, prevPoints), {
1375
2349
  [id]: stateRender
1376
2350
  });
1377
2351
  });
1378
2352
  }, []);
1379
- const removeCoAgentStateRender = (0, import_react9.useCallback)((id) => {
2353
+ const removeCoAgentStateRender = (0, import_react11.useCallback)((id) => {
1380
2354
  setCoAgentStateRenders((prevPoints) => {
1381
2355
  const newPoints = __spreadValues({}, prevPoints);
1382
2356
  delete newPoints[id];
1383
2357
  return newPoints;
1384
2358
  });
1385
2359
  }, []);
1386
- const getContextString = (0, import_react9.useCallback)(
2360
+ const getContextString = (0, import_react11.useCallback)(
1387
2361
  (documents, categories) => {
1388
- const documentsString = documents.map((document) => {
1389
- return `${document.name} (${document.sourceApplication}):
1390
- ${document.getContents()}`;
2362
+ const documentsString = documents.map((document2) => {
2363
+ return `${document2.name} (${document2.sourceApplication}):
2364
+ ${document2.getContents()}`;
1391
2365
  }).join("\n\n");
1392
2366
  const nonDocumentStrings = printTree(categories);
1393
2367
  return `${documentsString}
@@ -1396,49 +2370,49 @@ ${nonDocumentStrings}`;
1396
2370
  },
1397
2371
  [printTree]
1398
2372
  );
1399
- const addContext = (0, import_react9.useCallback)(
2373
+ const addContext = (0, import_react11.useCallback)(
1400
2374
  (context, parentId, categories = defaultCopilotContextCategories) => {
1401
2375
  return addElement(context, categories, parentId);
1402
2376
  },
1403
2377
  [addElement]
1404
2378
  );
1405
- const removeContext = (0, import_react9.useCallback)(
2379
+ const removeContext = (0, import_react11.useCallback)(
1406
2380
  (id) => {
1407
2381
  removeElement(id);
1408
2382
  },
1409
2383
  [removeElement]
1410
2384
  );
1411
- const getAllContext = (0, import_react9.useCallback)(() => {
2385
+ const getAllContext = (0, import_react11.useCallback)(() => {
1412
2386
  return getAllElements();
1413
2387
  }, [getAllElements]);
1414
- const getFunctionCallHandler = (0, import_react9.useCallback)(
2388
+ const getFunctionCallHandler = (0, import_react11.useCallback)(
1415
2389
  (customEntryPoints) => {
1416
2390
  return entryPointsToFunctionCallHandler(Object.values(customEntryPoints || actions));
1417
2391
  },
1418
2392
  [actions]
1419
2393
  );
1420
- const getDocumentsContext = (0, import_react9.useCallback)(
2394
+ const getDocumentsContext = (0, import_react11.useCallback)(
1421
2395
  (categories) => {
1422
2396
  return allDocuments(categories);
1423
2397
  },
1424
2398
  [allDocuments]
1425
2399
  );
1426
- const addDocumentContext = (0, import_react9.useCallback)(
2400
+ const addDocumentContext = (0, import_react11.useCallback)(
1427
2401
  (documentPointer, categories = defaultCopilotContextCategories) => {
1428
2402
  return addDocument(documentPointer, categories);
1429
2403
  },
1430
2404
  [addDocument]
1431
2405
  );
1432
- const removeDocumentContext = (0, import_react9.useCallback)(
2406
+ const removeDocumentContext = (0, import_react11.useCallback)(
1433
2407
  (documentId) => {
1434
2408
  removeDocument(documentId);
1435
2409
  },
1436
2410
  [removeDocument]
1437
2411
  );
1438
- const copilotApiConfig = (0, import_react9.useMemo)(() => {
2412
+ const copilotApiConfig = (0, import_react11.useMemo)(() => {
1439
2413
  var _a2, _b;
1440
2414
  let cloud = void 0;
1441
- if (props.publicApiKey) {
2415
+ if (publicApiKey) {
1442
2416
  cloud = {
1443
2417
  guardrails: {
1444
2418
  input: {
@@ -1452,7 +2426,7 @@ ${nonDocumentStrings}`;
1452
2426
  };
1453
2427
  }
1454
2428
  return __spreadProps(__spreadValues({
1455
- publicApiKey: props.publicApiKey
2429
+ publicApiKey
1456
2430
  }, cloud ? { cloud } : {}), {
1457
2431
  chatApiEndpoint,
1458
2432
  headers: props.headers || {},
@@ -1462,7 +2436,7 @@ ${nonDocumentStrings}`;
1462
2436
  credentials: props.credentials
1463
2437
  });
1464
2438
  }, [
1465
- props.publicApiKey,
2439
+ publicApiKey,
1466
2440
  props.headers,
1467
2441
  props.properties,
1468
2442
  props.transcribeAudioUrl,
@@ -1471,7 +2445,7 @@ ${nonDocumentStrings}`;
1471
2445
  props.cloudRestrictToTopic,
1472
2446
  props.guardrails_c
1473
2447
  ]);
1474
- const headers = (0, import_react9.useMemo)(() => {
2448
+ const headers = (0, import_react11.useMemo)(() => {
1475
2449
  const authHeaders = Object.values(authStates || {}).reduce((acc, state) => {
1476
2450
  if (state.status === "authenticated" && state.authHeaders) {
1477
2451
  return __spreadValues(__spreadValues({}, acc), Object.entries(state.authHeaders).reduce(
@@ -1483,24 +2457,24 @@ ${nonDocumentStrings}`;
1483
2457
  }
1484
2458
  return acc;
1485
2459
  }, {});
1486
- return __spreadValues(__spreadValues(__spreadValues({}, copilotApiConfig.headers || {}), copilotApiConfig.publicApiKey ? { [import_shared9.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: copilotApiConfig.publicApiKey } : {}), authHeaders);
2460
+ return __spreadValues(__spreadValues(__spreadValues({}, copilotApiConfig.headers || {}), copilotApiConfig.publicApiKey ? { [import_shared10.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: copilotApiConfig.publicApiKey } : {}), authHeaders);
1487
2461
  }, [copilotApiConfig.headers, copilotApiConfig.publicApiKey, authStates]);
1488
2462
  const runtimeClient = useCopilotRuntimeClient({
1489
2463
  url: copilotApiConfig.chatApiEndpoint,
1490
- publicApiKey: copilotApiConfig.publicApiKey,
2464
+ publicApiKey,
1491
2465
  headers,
1492
2466
  credentials: copilotApiConfig.credentials,
1493
2467
  showDevConsole: shouldShowDevConsole(props.showDevConsole),
1494
2468
  onError: props.onError
1495
2469
  });
1496
- const [chatSuggestionConfiguration, setChatSuggestionConfiguration] = (0, import_react9.useState)({});
1497
- const addChatSuggestionConfiguration = (0, import_react9.useCallback)(
2470
+ const [chatSuggestionConfiguration, setChatSuggestionConfiguration] = (0, import_react11.useState)({});
2471
+ const addChatSuggestionConfiguration = (0, import_react11.useCallback)(
1498
2472
  (id, suggestion) => {
1499
2473
  setChatSuggestionConfiguration((prev) => __spreadProps(__spreadValues({}, prev), { [id]: suggestion }));
1500
2474
  },
1501
2475
  [setChatSuggestionConfiguration]
1502
2476
  );
1503
- const removeChatSuggestionConfiguration = (0, import_react9.useCallback)(
2477
+ const removeChatSuggestionConfiguration = (0, import_react11.useCallback)(
1504
2478
  (id) => {
1505
2479
  setChatSuggestionConfiguration((prev) => {
1506
2480
  const _a2 = prev, { [id]: _ } = _a2, rest = __objRest(_a2, [__restKey(id)]);
@@ -1509,10 +2483,10 @@ ${nonDocumentStrings}`;
1509
2483
  },
1510
2484
  [setChatSuggestionConfiguration]
1511
2485
  );
1512
- const [availableAgents, setAvailableAgents] = (0, import_react9.useState)([]);
1513
- const [coagentStates, setCoagentStates] = (0, import_react9.useState)({});
1514
- const coagentStatesRef = (0, import_react9.useRef)({});
1515
- const setCoagentStatesWithRef = (0, import_react9.useCallback)(
2486
+ const [availableAgents, setAvailableAgents] = (0, import_react11.useState)([]);
2487
+ const [coagentStates, setCoagentStates] = (0, import_react11.useState)({});
2488
+ const coagentStatesRef = (0, import_react11.useRef)({});
2489
+ const setCoagentStatesWithRef = (0, import_react11.useCallback)(
1516
2490
  (value) => {
1517
2491
  const newValue = typeof value === "function" ? value(coagentStatesRef.current) : value;
1518
2492
  coagentStatesRef.current = newValue;
@@ -1522,8 +2496,8 @@ ${nonDocumentStrings}`;
1522
2496
  },
1523
2497
  []
1524
2498
  );
1525
- const hasLoadedAgents = (0, import_react9.useRef)(false);
1526
- (0, import_react9.useEffect)(() => {
2499
+ const hasLoadedAgents = (0, import_react11.useRef)(false);
2500
+ (0, import_react11.useEffect)(() => {
1527
2501
  if (hasLoadedAgents.current)
1528
2502
  return;
1529
2503
  const fetchData = () => __async(this, null, function* () {
@@ -1542,8 +2516,8 @@ ${nonDocumentStrings}`;
1542
2516
  agentName: props.agent
1543
2517
  };
1544
2518
  }
1545
- const [agentSession, setAgentSession] = (0, import_react9.useState)(initialAgentSession);
1546
- (0, import_react9.useEffect)(() => {
2519
+ const [agentSession, setAgentSession] = (0, import_react11.useState)(initialAgentSession);
2520
+ (0, import_react11.useEffect)(() => {
1547
2521
  if (props.agent) {
1548
2522
  setAgentSession({
1549
2523
  agentName: props.agent
@@ -1552,8 +2526,8 @@ ${nonDocumentStrings}`;
1552
2526
  setAgentSession(null);
1553
2527
  }
1554
2528
  }, [props.agent]);
1555
- const [internalThreadId, setInternalThreadId] = (0, import_react9.useState)(props.threadId || (0, import_shared9.randomUUID)());
1556
- const setThreadId = (0, import_react9.useCallback)(
2529
+ const [internalThreadId, setInternalThreadId] = (0, import_react11.useState)(props.threadId || (0, import_shared10.randomUUID)());
2530
+ const setThreadId = (0, import_react11.useCallback)(
1557
2531
  (value) => {
1558
2532
  if (props.threadId) {
1559
2533
  throw new Error("Cannot call setThreadId() when threadId is provided via props.");
@@ -1562,16 +2536,16 @@ ${nonDocumentStrings}`;
1562
2536
  },
1563
2537
  [props.threadId]
1564
2538
  );
1565
- (0, import_react9.useEffect)(() => {
2539
+ (0, import_react11.useEffect)(() => {
1566
2540
  if (props.threadId !== void 0) {
1567
2541
  setInternalThreadId(props.threadId);
1568
2542
  }
1569
2543
  }, [props.threadId]);
1570
- const [runId, setRunId] = (0, import_react9.useState)(null);
1571
- const chatAbortControllerRef = (0, import_react9.useRef)(null);
2544
+ const [runId, setRunId] = (0, import_react11.useState)(null);
2545
+ const chatAbortControllerRef = (0, import_react11.useRef)(null);
1572
2546
  const showDevConsole = shouldShowDevConsole(props.showDevConsole);
1573
- const [langGraphInterruptAction, _setLangGraphInterruptAction] = (0, import_react9.useState)(null);
1574
- const setLangGraphInterruptAction = (0, import_react9.useCallback)((action) => {
2547
+ const [langGraphInterruptAction, _setLangGraphInterruptAction] = (0, import_react11.useState)(null);
2548
+ const setLangGraphInterruptAction = (0, import_react11.useCallback)((action) => {
1575
2549
  _setLangGraphInterruptAction((prev) => {
1576
2550
  if (prev == null)
1577
2551
  return action;
@@ -1584,23 +2558,23 @@ ${nonDocumentStrings}`;
1584
2558
  return __spreadProps(__spreadValues(__spreadValues({}, prev), action), { event });
1585
2559
  });
1586
2560
  }, []);
1587
- const removeLangGraphInterruptAction = (0, import_react9.useCallback)(() => {
2561
+ const removeLangGraphInterruptAction = (0, import_react11.useCallback)(() => {
1588
2562
  setLangGraphInterruptAction(null);
1589
2563
  }, []);
1590
- const memoizedChildren = (0, import_react9.useMemo)(() => children, [children]);
1591
- const [bannerError, setBannerError] = (0, import_react9.useState)(null);
1592
- const agentLock = (0, import_react9.useMemo)(() => {
2564
+ const memoizedChildren = (0, import_react11.useMemo)(() => children, [children]);
2565
+ const [bannerError, setBannerError] = (0, import_react11.useState)(null);
2566
+ const agentLock = (0, import_react11.useMemo)(() => {
1593
2567
  var _a2;
1594
2568
  return (_a2 = props.agent) != null ? _a2 : null;
1595
2569
  }, [props.agent]);
1596
- const forwardedParameters = (0, import_react9.useMemo)(
2570
+ const forwardedParameters = (0, import_react11.useMemo)(
1597
2571
  () => {
1598
2572
  var _a2;
1599
2573
  return (_a2 = props.forwardedParameters) != null ? _a2 : {};
1600
2574
  },
1601
2575
  [props.forwardedParameters]
1602
2576
  );
1603
- const updateExtensions = (0, import_react9.useCallback)(
2577
+ const updateExtensions = (0, import_react11.useCallback)(
1604
2578
  (newExtensions) => {
1605
2579
  setExtensions((prev) => {
1606
2580
  const resolved = typeof newExtensions === "function" ? newExtensions(prev) : newExtensions;
@@ -1612,7 +2586,7 @@ ${nonDocumentStrings}`;
1612
2586
  },
1613
2587
  [setExtensions]
1614
2588
  );
1615
- const updateAuthStates = (0, import_react9.useCallback)(
2589
+ const updateAuthStates = (0, import_react11.useCallback)(
1616
2590
  (newAuthStates) => {
1617
2591
  setAuthStates((prev) => {
1618
2592
  const resolved = typeof newAuthStates === "function" ? newAuthStates(prev) : newAuthStates;
@@ -1624,7 +2598,7 @@ ${nonDocumentStrings}`;
1624
2598
  },
1625
2599
  [setAuthStates]
1626
2600
  );
1627
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
2601
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
1628
2602
  CopilotContext.Provider,
1629
2603
  {
1630
2604
  value: {
@@ -1682,8 +2656,11 @@ ${nonDocumentStrings}`;
1682
2656
  setBannerError
1683
2657
  },
1684
2658
  children: [
1685
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MessagesTapProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CopilotMessages, { children: memoizedChildren }) }),
1686
- bannerError && showDevConsole && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
2659
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(MessagesTapProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(CopilotMessages, { children: [
2660
+ memoizedChildren,
2661
+ showDevConsole && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ConsoleTrigger, {})
2662
+ ] }) }),
2663
+ bannerError && showDevConsole && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1687
2664
  UsageBanner,
1688
2665
  {
1689
2666
  severity: bannerError.severity,
@@ -1727,12 +2704,15 @@ function formatFeatureName(featureName) {
1727
2704
  }
1728
2705
  function validateProps(props) {
1729
2706
  const cloudFeatures = Object.keys(props).filter((key) => key.endsWith("_c"));
1730
- if (!props.runtimeUrl && !props.publicApiKey) {
1731
- throw new import_shared9.ConfigurationError("Missing required prop: 'runtimeUrl' or 'publicApiKey'");
2707
+ const hasApiKey = props.publicApiKey || props.publicLicenseKey;
2708
+ if (!props.runtimeUrl && !hasApiKey) {
2709
+ throw new import_shared10.ConfigurationError(
2710
+ "Missing required prop: 'runtimeUrl' or 'publicApiKey' or 'publicLicenseKey'"
2711
+ );
1732
2712
  }
1733
- if (cloudFeatures.length > 0 && !props.publicApiKey) {
1734
- throw new import_shared9.MissingPublicApiKeyError(
1735
- `Missing required prop: 'publicApiKey' to use cloud features: ${cloudFeatures.map(formatFeatureName).join(", ")}`
2713
+ if (cloudFeatures.length > 0 && !hasApiKey) {
2714
+ throw new import_shared10.MissingPublicApiKeyError(
2715
+ `Missing required prop: 'publicApiKey' or 'publicLicenseKey' to use cloud features: ${cloudFeatures.map(formatFeatureName).join(", ")}`
1736
2716
  );
1737
2717
  }
1738
2718
  }