@copilotkit/react-core 1.10.0-next.11 → 1.10.0-next.13

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 (114) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/{chunk-ADZDXHVC.mjs → chunk-2GRWTU7W.mjs} +4 -4
  3. package/dist/chunk-3BASANUO.mjs +170 -0
  4. package/dist/chunk-3BASANUO.mjs.map +1 -0
  5. package/dist/{chunk-LVWV62JZ.mjs → chunk-5P46WS5M.mjs} +32 -26
  6. package/dist/chunk-5P46WS5M.mjs.map +1 -0
  7. package/dist/{chunk-OKRZF3DD.mjs → chunk-6ZLPNY7X.mjs} +2 -2
  8. package/dist/{chunk-OKRZF3DD.mjs.map → chunk-6ZLPNY7X.mjs.map} +1 -1
  9. package/dist/{chunk-COEUPDRL.mjs → chunk-BEFEBKKI.mjs} +8 -8
  10. package/dist/{chunk-QGE7U4NV.mjs → chunk-F26O2HTO.mjs} +3 -3
  11. package/dist/chunk-F26O2HTO.mjs.map +1 -0
  12. package/dist/{chunk-DLEXVOQE.mjs → chunk-GEKWHETN.mjs} +4 -4
  13. package/dist/{chunk-L6HQIJ74.mjs → chunk-JY3STRON.mjs} +8 -8
  14. package/dist/{chunk-JJDXTTEN.mjs → chunk-K4HXT453.mjs} +2 -2
  15. package/dist/{chunk-JBLMXZ3O.mjs → chunk-KH27ZS4Y.mjs} +6 -6
  16. package/dist/{chunk-TWYUYC4F.mjs → chunk-MUDXTKXE.mjs} +6 -6
  17. package/dist/{chunk-Q42NJFXR.mjs → chunk-N4VN2B5S.mjs} +5 -5
  18. package/dist/{chunk-2TSNHEIS.mjs → chunk-NTH42BY5.mjs} +5 -5
  19. package/dist/{chunk-X2DNXTME.mjs → chunk-OPRDTF4S.mjs} +4 -4
  20. package/dist/chunk-PIF5KJYI.mjs +103 -0
  21. package/dist/chunk-PIF5KJYI.mjs.map +1 -0
  22. package/dist/chunk-WSXTUD36.mjs +759 -0
  23. package/dist/chunk-WSXTUD36.mjs.map +1 -0
  24. package/dist/{chunk-IHAZJF3V.mjs → chunk-YIBUNEBN.mjs} +2 -2
  25. package/dist/chunk-YIBUNEBN.mjs.map +1 -0
  26. package/dist/components/copilot-provider/copilot-messages.mjs +3 -3
  27. package/dist/components/copilot-provider/copilotkit-props.d.ts +9 -1
  28. package/dist/components/copilot-provider/copilotkit-props.js.map +1 -1
  29. package/dist/components/copilot-provider/copilotkit.js +1047 -71
  30. package/dist/components/copilot-provider/copilotkit.js.map +1 -1
  31. package/dist/components/copilot-provider/copilotkit.mjs +11 -8
  32. package/dist/components/copilot-provider/index.js +1047 -71
  33. package/dist/components/copilot-provider/index.js.map +1 -1
  34. package/dist/components/copilot-provider/index.mjs +11 -8
  35. package/dist/components/dev-console/console-trigger.d.ts +8 -0
  36. package/dist/components/dev-console/console-trigger.js +1131 -0
  37. package/dist/components/dev-console/console-trigger.js.map +1 -0
  38. package/dist/components/dev-console/console-trigger.mjs +13 -0
  39. package/dist/components/dev-console/console-trigger.mjs.map +1 -0
  40. package/dist/components/dev-console/developer-console-modal.d.ts +10 -0
  41. package/dist/components/dev-console/developer-console-modal.js +977 -0
  42. package/dist/components/dev-console/developer-console-modal.js.map +1 -0
  43. package/dist/components/dev-console/developer-console-modal.mjs +12 -0
  44. package/dist/components/dev-console/developer-console-modal.mjs.map +1 -0
  45. package/dist/components/dev-console/icons.d.ts +9 -0
  46. package/dist/components/dev-console/icons.js +131 -0
  47. package/dist/components/dev-console/icons.js.map +1 -0
  48. package/dist/components/dev-console/icons.mjs +16 -0
  49. package/dist/components/dev-console/icons.mjs.map +1 -0
  50. package/dist/components/error-boundary/error-boundary.js +1 -1
  51. package/dist/components/error-boundary/error-boundary.js.map +1 -1
  52. package/dist/components/error-boundary/error-boundary.mjs +2 -2
  53. package/dist/components/index.js +1047 -71
  54. package/dist/components/index.js.map +1 -1
  55. package/dist/components/index.mjs +11 -8
  56. package/dist/components/usage-banner.js +1 -1
  57. package/dist/components/usage-banner.js.map +1 -1
  58. package/dist/components/usage-banner.mjs +1 -1
  59. package/dist/context/index.mjs +4 -4
  60. package/dist/hooks/index.js +1 -1
  61. package/dist/hooks/index.js.map +1 -1
  62. package/dist/hooks/index.mjs +32 -29
  63. package/dist/hooks/use-chat.mjs +4 -4
  64. package/dist/hooks/use-coagent-state-render.mjs +2 -2
  65. package/dist/hooks/use-coagent.js.map +1 -1
  66. package/dist/hooks/use-coagent.mjs +16 -13
  67. package/dist/hooks/use-copilot-action.mjs +2 -2
  68. package/dist/hooks/use-copilot-authenticated-action.mjs +3 -3
  69. package/dist/hooks/use-copilot-chat-headless_c.js +1 -1
  70. package/dist/hooks/use-copilot-chat-headless_c.js.map +1 -1
  71. package/dist/hooks/use-copilot-chat-headless_c.mjs +16 -13
  72. package/dist/hooks/use-copilot-chat.d.ts +42 -3
  73. package/dist/hooks/use-copilot-chat.js.map +1 -1
  74. package/dist/hooks/use-copilot-chat.mjs +16 -13
  75. package/dist/hooks/use-copilot-chat_internal.js.map +1 -1
  76. package/dist/hooks/use-copilot-chat_internal.mjs +15 -12
  77. package/dist/hooks/use-langgraph-interrupt-render.mjs +1 -1
  78. package/dist/hooks/use-langgraph-interrupt.js.map +1 -1
  79. package/dist/hooks/use-langgraph-interrupt.mjs +16 -13
  80. package/dist/index.js +1145 -178
  81. package/dist/index.js.map +1 -1
  82. package/dist/index.mjs +36 -33
  83. package/dist/lib/copilot-task.js.map +1 -1
  84. package/dist/lib/copilot-task.mjs +13 -10
  85. package/dist/lib/index.js.map +1 -1
  86. package/dist/lib/index.mjs +13 -10
  87. package/dist/utils/extract.js.map +1 -1
  88. package/dist/utils/extract.mjs +11 -8
  89. package/dist/utils/index.js.map +1 -1
  90. package/dist/utils/index.mjs +11 -8
  91. package/dist/utils/suggestions.js.map +1 -1
  92. package/dist/utils/suggestions.mjs +11 -8
  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 +1 -1
  100. package/src/hooks/use-copilot-chat-headless_c.ts +79 -9
  101. package/src/hooks/use-copilot-chat.ts +42 -3
  102. package/dist/chunk-IHAZJF3V.mjs.map +0 -1
  103. package/dist/chunk-LVWV62JZ.mjs.map +0 -1
  104. package/dist/chunk-QGE7U4NV.mjs.map +0 -1
  105. /package/dist/{chunk-ADZDXHVC.mjs.map → chunk-2GRWTU7W.mjs.map} +0 -0
  106. /package/dist/{chunk-COEUPDRL.mjs.map → chunk-BEFEBKKI.mjs.map} +0 -0
  107. /package/dist/{chunk-DLEXVOQE.mjs.map → chunk-GEKWHETN.mjs.map} +0 -0
  108. /package/dist/{chunk-L6HQIJ74.mjs.map → chunk-JY3STRON.mjs.map} +0 -0
  109. /package/dist/{chunk-JJDXTTEN.mjs.map → chunk-K4HXT453.mjs.map} +0 -0
  110. /package/dist/{chunk-JBLMXZ3O.mjs.map → chunk-KH27ZS4Y.mjs.map} +0 -0
  111. /package/dist/{chunk-TWYUYC4F.mjs.map → chunk-MUDXTKXE.mjs.map} +0 -0
  112. /package/dist/{chunk-Q42NJFXR.mjs.map → chunk-N4VN2B5S.mjs.map} +0 -0
  113. /package/dist/{chunk-2TSNHEIS.mjs.map → chunk-NTH42BY5.mjs.map} +0 -0
  114. /package/dist/{chunk-X2DNXTME.mjs.map → chunk-OPRDTF4S.mjs.map} +0 -0
@@ -86,7 +86,7 @@ __export(copilot_provider_exports, {
86
86
  module.exports = __toCommonJS(copilot_provider_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");
@@ -1077,7 +1086,7 @@ var getErrorActions = (error) => {
1077
1086
  primary: {
1078
1087
  label: "Show me how",
1079
1088
  onClick: () => window.open(
1080
- "https://docs.copilotkit.ai/docs/guides/subscription",
1089
+ "https://docs.copilotkit.ai/premium#how-do-i-get-access-to-premium-features",
1081
1090
  "_blank",
1082
1091
  "noopener,noreferrer"
1083
1092
  )
@@ -1330,69 +1339,1030 @@ var CopilotErrorBoundary = class extends import_react8.default.Component {
1330
1339
  }
1331
1340
  };
1332
1341
 
1333
- // 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
1334
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");
1335
2305
  function CopilotKit(_a) {
1336
2306
  var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
1337
2307
  const enabled = shouldShowDevConsole(props.showDevConsole);
1338
- 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 })) }) });
1339
2310
  }
1340
2311
  function CopilotKitInternal(cpkProps) {
1341
2312
  const _a = cpkProps, { children } = _a, props = __objRest(_a, ["children"]);
1342
2313
  validateProps(cpkProps);
1343
- const chatApiEndpoint = props.runtimeUrl || import_shared9.COPILOT_CLOUD_CHAT_URL;
1344
- const [actions, setActions] = (0, import_react9.useState)({});
1345
- const [coAgentStateRenders, setCoAgentStateRenders] = (0, import_react9.useState)({});
1346
- 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)({
1347
2319
  actions: {},
1348
2320
  coAgentStateRenders: {}
1349
2321
  });
1350
2322
  const { addElement, removeElement, printTree, getAllElements } = use_tree_default();
1351
- const [isLoading, setIsLoading] = (0, import_react9.useState)(false);
1352
- const [chatInstructions, setChatInstructions] = (0, import_react9.useState)("");
1353
- const [authStates, setAuthStates] = (0, import_react9.useState)({});
1354
- const [extensions, setExtensions] = (0, import_react9.useState)({});
1355
- 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)([]);
1356
2328
  const {
1357
2329
  addElement: addDocument,
1358
2330
  removeElement: removeDocument,
1359
2331
  allElements: allDocuments
1360
2332
  } = use_flat_category_store_default();
1361
- const statusChecker2 = (0, import_react9.useMemo)(() => new StatusChecker(), []);
1362
- const [usageBannerStatus, setUsageBannerStatus] = (0, import_react9.useState)(null);
1363
- const setAction = (0, import_react9.useCallback)((id, action) => {
2333
+ const setAction = (0, import_react11.useCallback)((id, action) => {
1364
2334
  setActions((prevPoints) => {
1365
2335
  return __spreadProps(__spreadValues({}, prevPoints), {
1366
2336
  [id]: action
1367
2337
  });
1368
2338
  });
1369
2339
  }, []);
1370
- const removeAction = (0, import_react9.useCallback)((id) => {
2340
+ const removeAction = (0, import_react11.useCallback)((id) => {
1371
2341
  setActions((prevPoints) => {
1372
2342
  const newPoints = __spreadValues({}, prevPoints);
1373
2343
  delete newPoints[id];
1374
2344
  return newPoints;
1375
2345
  });
1376
2346
  }, []);
1377
- const setCoAgentStateRender = (0, import_react9.useCallback)((id, stateRender) => {
2347
+ const setCoAgentStateRender = (0, import_react11.useCallback)((id, stateRender) => {
1378
2348
  setCoAgentStateRenders((prevPoints) => {
1379
2349
  return __spreadProps(__spreadValues({}, prevPoints), {
1380
2350
  [id]: stateRender
1381
2351
  });
1382
2352
  });
1383
2353
  }, []);
1384
- const removeCoAgentStateRender = (0, import_react9.useCallback)((id) => {
2354
+ const removeCoAgentStateRender = (0, import_react11.useCallback)((id) => {
1385
2355
  setCoAgentStateRenders((prevPoints) => {
1386
2356
  const newPoints = __spreadValues({}, prevPoints);
1387
2357
  delete newPoints[id];
1388
2358
  return newPoints;
1389
2359
  });
1390
2360
  }, []);
1391
- const getContextString = (0, import_react9.useCallback)(
2361
+ const getContextString = (0, import_react11.useCallback)(
1392
2362
  (documents, categories) => {
1393
- const documentsString = documents.map((document) => {
1394
- return `${document.name} (${document.sourceApplication}):
1395
- ${document.getContents()}`;
2363
+ const documentsString = documents.map((document2) => {
2364
+ return `${document2.name} (${document2.sourceApplication}):
2365
+ ${document2.getContents()}`;
1396
2366
  }).join("\n\n");
1397
2367
  const nonDocumentStrings = printTree(categories);
1398
2368
  return `${documentsString}
@@ -1401,49 +2371,49 @@ ${nonDocumentStrings}`;
1401
2371
  },
1402
2372
  [printTree]
1403
2373
  );
1404
- const addContext = (0, import_react9.useCallback)(
2374
+ const addContext = (0, import_react11.useCallback)(
1405
2375
  (context, parentId, categories = defaultCopilotContextCategories) => {
1406
2376
  return addElement(context, categories, parentId);
1407
2377
  },
1408
2378
  [addElement]
1409
2379
  );
1410
- const removeContext = (0, import_react9.useCallback)(
2380
+ const removeContext = (0, import_react11.useCallback)(
1411
2381
  (id) => {
1412
2382
  removeElement(id);
1413
2383
  },
1414
2384
  [removeElement]
1415
2385
  );
1416
- const getAllContext = (0, import_react9.useCallback)(() => {
2386
+ const getAllContext = (0, import_react11.useCallback)(() => {
1417
2387
  return getAllElements();
1418
2388
  }, [getAllElements]);
1419
- const getFunctionCallHandler = (0, import_react9.useCallback)(
2389
+ const getFunctionCallHandler = (0, import_react11.useCallback)(
1420
2390
  (customEntryPoints) => {
1421
2391
  return entryPointsToFunctionCallHandler(Object.values(customEntryPoints || actions));
1422
2392
  },
1423
2393
  [actions]
1424
2394
  );
1425
- const getDocumentsContext = (0, import_react9.useCallback)(
2395
+ const getDocumentsContext = (0, import_react11.useCallback)(
1426
2396
  (categories) => {
1427
2397
  return allDocuments(categories);
1428
2398
  },
1429
2399
  [allDocuments]
1430
2400
  );
1431
- const addDocumentContext = (0, import_react9.useCallback)(
2401
+ const addDocumentContext = (0, import_react11.useCallback)(
1432
2402
  (documentPointer, categories = defaultCopilotContextCategories) => {
1433
2403
  return addDocument(documentPointer, categories);
1434
2404
  },
1435
2405
  [addDocument]
1436
2406
  );
1437
- const removeDocumentContext = (0, import_react9.useCallback)(
2407
+ const removeDocumentContext = (0, import_react11.useCallback)(
1438
2408
  (documentId) => {
1439
2409
  removeDocument(documentId);
1440
2410
  },
1441
2411
  [removeDocument]
1442
2412
  );
1443
- const copilotApiConfig = (0, import_react9.useMemo)(() => {
2413
+ const copilotApiConfig = (0, import_react11.useMemo)(() => {
1444
2414
  var _a2, _b;
1445
2415
  let cloud = void 0;
1446
- if (props.publicApiKey) {
2416
+ if (publicApiKey) {
1447
2417
  cloud = {
1448
2418
  guardrails: {
1449
2419
  input: {
@@ -1457,7 +2427,7 @@ ${nonDocumentStrings}`;
1457
2427
  };
1458
2428
  }
1459
2429
  return __spreadProps(__spreadValues({
1460
- publicApiKey: props.publicApiKey
2430
+ publicApiKey
1461
2431
  }, cloud ? { cloud } : {}), {
1462
2432
  chatApiEndpoint,
1463
2433
  headers: props.headers || {},
@@ -1467,7 +2437,7 @@ ${nonDocumentStrings}`;
1467
2437
  credentials: props.credentials
1468
2438
  });
1469
2439
  }, [
1470
- props.publicApiKey,
2440
+ publicApiKey,
1471
2441
  props.headers,
1472
2442
  props.properties,
1473
2443
  props.transcribeAudioUrl,
@@ -1476,7 +2446,7 @@ ${nonDocumentStrings}`;
1476
2446
  props.cloudRestrictToTopic,
1477
2447
  props.guardrails_c
1478
2448
  ]);
1479
- const headers = (0, import_react9.useMemo)(() => {
2449
+ const headers = (0, import_react11.useMemo)(() => {
1480
2450
  const authHeaders = Object.values(authStates || {}).reduce((acc, state) => {
1481
2451
  if (state.status === "authenticated" && state.authHeaders) {
1482
2452
  return __spreadValues(__spreadValues({}, acc), Object.entries(state.authHeaders).reduce(
@@ -1488,24 +2458,24 @@ ${nonDocumentStrings}`;
1488
2458
  }
1489
2459
  return acc;
1490
2460
  }, {});
1491
- 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);
1492
2462
  }, [copilotApiConfig.headers, copilotApiConfig.publicApiKey, authStates]);
1493
2463
  const runtimeClient = useCopilotRuntimeClient({
1494
2464
  url: copilotApiConfig.chatApiEndpoint,
1495
- publicApiKey: copilotApiConfig.publicApiKey,
2465
+ publicApiKey,
1496
2466
  headers,
1497
2467
  credentials: copilotApiConfig.credentials,
1498
2468
  showDevConsole: shouldShowDevConsole(props.showDevConsole),
1499
2469
  onError: props.onError
1500
2470
  });
1501
- const [chatSuggestionConfiguration, setChatSuggestionConfiguration] = (0, import_react9.useState)({});
1502
- const addChatSuggestionConfiguration = (0, import_react9.useCallback)(
2471
+ const [chatSuggestionConfiguration, setChatSuggestionConfiguration] = (0, import_react11.useState)({});
2472
+ const addChatSuggestionConfiguration = (0, import_react11.useCallback)(
1503
2473
  (id, suggestion) => {
1504
2474
  setChatSuggestionConfiguration((prev) => __spreadProps(__spreadValues({}, prev), { [id]: suggestion }));
1505
2475
  },
1506
2476
  [setChatSuggestionConfiguration]
1507
2477
  );
1508
- const removeChatSuggestionConfiguration = (0, import_react9.useCallback)(
2478
+ const removeChatSuggestionConfiguration = (0, import_react11.useCallback)(
1509
2479
  (id) => {
1510
2480
  setChatSuggestionConfiguration((prev) => {
1511
2481
  const _a2 = prev, { [id]: _ } = _a2, rest = __objRest(_a2, [__restKey(id)]);
@@ -1514,10 +2484,10 @@ ${nonDocumentStrings}`;
1514
2484
  },
1515
2485
  [setChatSuggestionConfiguration]
1516
2486
  );
1517
- const [availableAgents, setAvailableAgents] = (0, import_react9.useState)([]);
1518
- const [coagentStates, setCoagentStates] = (0, import_react9.useState)({});
1519
- const coagentStatesRef = (0, import_react9.useRef)({});
1520
- 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)(
1521
2491
  (value) => {
1522
2492
  const newValue = typeof value === "function" ? value(coagentStatesRef.current) : value;
1523
2493
  coagentStatesRef.current = newValue;
@@ -1527,8 +2497,8 @@ ${nonDocumentStrings}`;
1527
2497
  },
1528
2498
  []
1529
2499
  );
1530
- const hasLoadedAgents = (0, import_react9.useRef)(false);
1531
- (0, import_react9.useEffect)(() => {
2500
+ const hasLoadedAgents = (0, import_react11.useRef)(false);
2501
+ (0, import_react11.useEffect)(() => {
1532
2502
  if (hasLoadedAgents.current)
1533
2503
  return;
1534
2504
  const fetchData = () => __async(this, null, function* () {
@@ -1547,8 +2517,8 @@ ${nonDocumentStrings}`;
1547
2517
  agentName: props.agent
1548
2518
  };
1549
2519
  }
1550
- const [agentSession, setAgentSession] = (0, import_react9.useState)(initialAgentSession);
1551
- (0, import_react9.useEffect)(() => {
2520
+ const [agentSession, setAgentSession] = (0, import_react11.useState)(initialAgentSession);
2521
+ (0, import_react11.useEffect)(() => {
1552
2522
  if (props.agent) {
1553
2523
  setAgentSession({
1554
2524
  agentName: props.agent
@@ -1557,8 +2527,8 @@ ${nonDocumentStrings}`;
1557
2527
  setAgentSession(null);
1558
2528
  }
1559
2529
  }, [props.agent]);
1560
- const [internalThreadId, setInternalThreadId] = (0, import_react9.useState)(props.threadId || (0, import_shared9.randomUUID)());
1561
- 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)(
1562
2532
  (value) => {
1563
2533
  if (props.threadId) {
1564
2534
  throw new Error("Cannot call setThreadId() when threadId is provided via props.");
@@ -1567,16 +2537,16 @@ ${nonDocumentStrings}`;
1567
2537
  },
1568
2538
  [props.threadId]
1569
2539
  );
1570
- (0, import_react9.useEffect)(() => {
2540
+ (0, import_react11.useEffect)(() => {
1571
2541
  if (props.threadId !== void 0) {
1572
2542
  setInternalThreadId(props.threadId);
1573
2543
  }
1574
2544
  }, [props.threadId]);
1575
- const [runId, setRunId] = (0, import_react9.useState)(null);
1576
- const chatAbortControllerRef = (0, import_react9.useRef)(null);
2545
+ const [runId, setRunId] = (0, import_react11.useState)(null);
2546
+ const chatAbortControllerRef = (0, import_react11.useRef)(null);
1577
2547
  const showDevConsole = shouldShowDevConsole(props.showDevConsole);
1578
- const [langGraphInterruptAction, _setLangGraphInterruptAction] = (0, import_react9.useState)(null);
1579
- const setLangGraphInterruptAction = (0, import_react9.useCallback)((action) => {
2548
+ const [langGraphInterruptAction, _setLangGraphInterruptAction] = (0, import_react11.useState)(null);
2549
+ const setLangGraphInterruptAction = (0, import_react11.useCallback)((action) => {
1580
2550
  _setLangGraphInterruptAction((prev) => {
1581
2551
  if (prev == null)
1582
2552
  return action;
@@ -1589,23 +2559,23 @@ ${nonDocumentStrings}`;
1589
2559
  return __spreadProps(__spreadValues(__spreadValues({}, prev), action), { event });
1590
2560
  });
1591
2561
  }, []);
1592
- const removeLangGraphInterruptAction = (0, import_react9.useCallback)(() => {
2562
+ const removeLangGraphInterruptAction = (0, import_react11.useCallback)(() => {
1593
2563
  setLangGraphInterruptAction(null);
1594
2564
  }, []);
1595
- const memoizedChildren = (0, import_react9.useMemo)(() => children, [children]);
1596
- const [bannerError, setBannerError] = (0, import_react9.useState)(null);
1597
- 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)(() => {
1598
2568
  var _a2;
1599
2569
  return (_a2 = props.agent) != null ? _a2 : null;
1600
2570
  }, [props.agent]);
1601
- const forwardedParameters = (0, import_react9.useMemo)(
2571
+ const forwardedParameters = (0, import_react11.useMemo)(
1602
2572
  () => {
1603
2573
  var _a2;
1604
2574
  return (_a2 = props.forwardedParameters) != null ? _a2 : {};
1605
2575
  },
1606
2576
  [props.forwardedParameters]
1607
2577
  );
1608
- const updateExtensions = (0, import_react9.useCallback)(
2578
+ const updateExtensions = (0, import_react11.useCallback)(
1609
2579
  (newExtensions) => {
1610
2580
  setExtensions((prev) => {
1611
2581
  const resolved = typeof newExtensions === "function" ? newExtensions(prev) : newExtensions;
@@ -1617,7 +2587,7 @@ ${nonDocumentStrings}`;
1617
2587
  },
1618
2588
  [setExtensions]
1619
2589
  );
1620
- const updateAuthStates = (0, import_react9.useCallback)(
2590
+ const updateAuthStates = (0, import_react11.useCallback)(
1621
2591
  (newAuthStates) => {
1622
2592
  setAuthStates((prev) => {
1623
2593
  const resolved = typeof newAuthStates === "function" ? newAuthStates(prev) : newAuthStates;
@@ -1629,7 +2599,7 @@ ${nonDocumentStrings}`;
1629
2599
  },
1630
2600
  [setAuthStates]
1631
2601
  );
1632
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
2602
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
1633
2603
  CopilotContext.Provider,
1634
2604
  {
1635
2605
  value: {
@@ -1687,8 +2657,11 @@ ${nonDocumentStrings}`;
1687
2657
  setBannerError
1688
2658
  },
1689
2659
  children: [
1690
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MessagesTapProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CopilotMessages, { children: memoizedChildren }) }),
1691
- 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)(
1692
2665
  UsageBanner,
1693
2666
  {
1694
2667
  severity: bannerError.severity,
@@ -1732,12 +2705,15 @@ function formatFeatureName(featureName) {
1732
2705
  }
1733
2706
  function validateProps(props) {
1734
2707
  const cloudFeatures = Object.keys(props).filter((key) => key.endsWith("_c"));
1735
- if (!props.runtimeUrl && !props.publicApiKey) {
1736
- 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
+ );
1737
2713
  }
1738
- if (cloudFeatures.length > 0 && !props.publicApiKey) {
1739
- throw new import_shared9.MissingPublicApiKeyError(
1740
- `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(", ")}`
1741
2717
  );
1742
2718
  }
1743
2719
  }