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