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