@burtson-labs/bandit-engine 2.0.90 → 2.0.93

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.
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  chat_default
3
- } from "./chunk-42X7ZU6O.mjs";
3
+ } from "./chunk-JOY64M5C.mjs";
4
4
  import "./chunk-ONQMRE2G.mjs";
5
5
  import "./chunk-RUMVTVNM.mjs";
6
6
  import "./chunk-L2EKYO4F.mjs";
@@ -13,4 +13,4 @@ import "./chunk-BJTO5JO5.mjs";
13
13
  export {
14
14
  chat_default as default
15
15
  };
16
- //# sourceMappingURL=chat-W5NCAI6Z.mjs.map
16
+ //# sourceMappingURL=chat-HYXGXPJM.mjs.map
@@ -9741,7 +9741,7 @@ var MCPToolsTabV2_default = MCPToolsTabV2;
9741
9741
 
9742
9742
  // src/management/management.tsx
9743
9743
  import { jsx as jsx14, jsxs as jsxs14 } from "react/jsx-runtime";
9744
- var preloadChatPage = () => import("./chat-W5NCAI6Z.mjs");
9744
+ var preloadChatPage = () => import("./chat-HYXGXPJM.mjs");
9745
9745
  var buildCapabilitiesUrl = (gatewayApiUrl) => {
9746
9746
  const trimmed = gatewayApiUrl.replace(/\/$/, "");
9747
9747
  if (trimmed.endsWith("/api")) {
@@ -11107,4 +11107,4 @@ export {
11107
11107
  useGatewayMemory,
11108
11108
  management_default
11109
11109
  };
11110
- //# sourceMappingURL=chunk-ZOUKYB66.mjs.map
11110
+ //# sourceMappingURL=chunk-GQHA7AIS.mjs.map
@@ -407,7 +407,7 @@ import { Box as Box4 } from "@mui/material";
407
407
  // src/chat/source-chips.tsx
408
408
  import { useMemo, useState as useState3 } from "react";
409
409
  import { Box as Box3, Tooltip as Tooltip2 } from "@mui/material";
410
- import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
410
+ import { Fragment as Fragment2, jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
411
411
  var parseWebSources = (content) => {
412
412
  if (!content) return [];
413
413
  const idx = content.lastIndexOf("**Sources**");
@@ -447,83 +447,103 @@ var SourceChip = ({ source }) => {
447
447
  const [failed, setFailed] = useState3(false);
448
448
  const domain = domainOf(source.url);
449
449
  const label = source.title?.trim() || domain;
450
- return /* @__PURE__ */ jsx5(Tooltip2, { title: `${label} \xB7 ${domain}`, arrow: true, children: /* @__PURE__ */ jsxs2(
451
- Box3,
450
+ return /* @__PURE__ */ jsx5(
451
+ Tooltip2,
452
452
  {
453
- component: "a",
454
- href: source.url,
455
- target: "_blank",
456
- rel: "noopener noreferrer",
457
- sx: {
458
- display: "inline-flex",
459
- alignItems: "center",
460
- gap: 0.75,
461
- maxWidth: 240,
462
- px: 1,
463
- py: 0.4,
464
- borderRadius: 999,
465
- border: "1px solid",
466
- borderColor: "divider",
467
- bgcolor: "action.hover",
468
- textDecoration: "none",
469
- color: "text.primary",
470
- fontSize: 12.5,
471
- lineHeight: 1.4,
472
- transition: "border-color 0.15s ease, background-color 0.15s ease",
473
- "&:hover": { borderColor: "primary.main", bgcolor: "action.selected" }
474
- },
475
- children: [
476
- failed ? /* @__PURE__ */ jsx5(
477
- Box3,
478
- {
479
- sx: {
480
- width: 16,
481
- height: 16,
482
- borderRadius: "4px",
483
- bgcolor: "primary.main",
484
- color: "primary.contrastText",
485
- display: "grid",
486
- placeItems: "center",
487
- fontSize: 9,
488
- fontWeight: 700,
489
- flexShrink: 0
490
- },
491
- children: domain.charAt(0).toUpperCase()
492
- }
493
- ) : /* @__PURE__ */ jsx5(
494
- Box3,
495
- {
496
- component: "img",
497
- src: `https://icons.duckduckgo.com/ip3/${domain}.ico`,
498
- alt: "",
499
- loading: "lazy",
500
- onError: () => setFailed(true),
501
- sx: { width: 16, height: 16, borderRadius: "4px", flexShrink: 0 }
502
- }
503
- ),
504
- /* @__PURE__ */ jsx5(
505
- Box3,
506
- {
507
- component: "span",
508
- sx: { overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" },
509
- children: label
510
- }
511
- )
512
- ]
453
+ title: /* @__PURE__ */ jsxs2(Fragment2, { children: [
454
+ /* @__PURE__ */ jsx5(Box3, { sx: { fontWeight: 600 }, children: label }),
455
+ /* @__PURE__ */ jsx5(Box3, { sx: { opacity: 0.75, fontSize: 11, wordBreak: "break-all", mt: 0.25 }, children: source.url })
456
+ ] }),
457
+ arrow: true,
458
+ children: /* @__PURE__ */ jsxs2(
459
+ Box3,
460
+ {
461
+ component: "a",
462
+ href: source.url,
463
+ target: "_blank",
464
+ rel: "noopener noreferrer",
465
+ sx: {
466
+ display: "inline-flex",
467
+ alignItems: "center",
468
+ flexShrink: 0,
469
+ gap: 0.5,
470
+ height: 26,
471
+ px: 0.75,
472
+ borderRadius: 999,
473
+ border: "1px solid",
474
+ borderColor: "divider",
475
+ bgcolor: "background.paper",
476
+ textDecoration: "none",
477
+ color: "text.primary",
478
+ fontSize: 12.5,
479
+ lineHeight: 1.4,
480
+ transition: "border-color 0.15s ease, background-color 0.15s ease, box-shadow 0.15s ease",
481
+ "&:hover": { borderColor: "primary.main", bgcolor: "action.hover", boxShadow: 1, zIndex: 2 }
482
+ },
483
+ children: [
484
+ failed ? /* @__PURE__ */ jsx5(
485
+ Box3,
486
+ {
487
+ sx: {
488
+ width: 18,
489
+ height: 18,
490
+ borderRadius: "50%",
491
+ bgcolor: "primary.main",
492
+ color: "primary.contrastText",
493
+ display: "grid",
494
+ placeItems: "center",
495
+ fontSize: 9,
496
+ fontWeight: 700,
497
+ flexShrink: 0
498
+ },
499
+ children: domain.charAt(0).toUpperCase()
500
+ }
501
+ ) : /* @__PURE__ */ jsx5(
502
+ Box3,
503
+ {
504
+ component: "img",
505
+ src: `https://icons.duckduckgo.com/ip3/${domain}.ico`,
506
+ alt: "",
507
+ loading: "lazy",
508
+ onError: () => setFailed(true),
509
+ sx: { width: 18, height: 18, borderRadius: "50%", flexShrink: 0 }
510
+ }
511
+ ),
512
+ /* @__PURE__ */ jsx5(
513
+ Box3,
514
+ {
515
+ component: "span",
516
+ sx: { maxWidth: 150, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" },
517
+ children: label
518
+ }
519
+ )
520
+ ]
521
+ }
522
+ )
513
523
  }
514
- ) });
524
+ );
515
525
  };
516
526
  var SourceChips = ({ content }) => {
517
527
  const sources = useMemo(() => parseWebSources(content), [content]);
518
528
  if (sources.length === 0) return null;
519
- return /* @__PURE__ */ jsx5(
520
- Box3,
521
- {
522
- sx: { display: "flex", flexWrap: "wrap", gap: 0.75, mt: 1.5 },
523
- "aria-label": "Sources",
524
- children: sources.map((s, i) => /* @__PURE__ */ jsx5(SourceChip, { source: s }, `${s.url}-${i}`))
525
- }
526
- );
529
+ return /* @__PURE__ */ jsxs2(Box3, { sx: { display: "flex", alignItems: "center", gap: 0.75, mt: 1.5, flexWrap: "wrap" }, "aria-label": "Sources", children: [
530
+ /* @__PURE__ */ jsx5(
531
+ Box3,
532
+ {
533
+ component: "span",
534
+ sx: {
535
+ fontSize: 11,
536
+ fontWeight: 700,
537
+ color: "text.secondary",
538
+ textTransform: "uppercase",
539
+ letterSpacing: 0.5,
540
+ flexShrink: 0
541
+ },
542
+ children: "Sources"
543
+ }
544
+ ),
545
+ /* @__PURE__ */ jsx5(Box3, { sx: { display: "flex", flexWrap: "wrap", alignItems: "center", gap: 0.75 }, children: sources.map((s, i) => /* @__PURE__ */ jsx5(SourceChip, { source: s }, `${s.url}-${i}`)) })
546
+ ] });
527
547
  };
528
548
  var source_chips_default = SourceChips;
529
549
 
@@ -622,7 +642,7 @@ var ChatMessages = ({
622
642
  /* @__PURE__ */ jsx6(
623
643
  StreamingMarkdown_default,
624
644
  {
625
- content: isStreaming && isLast ? content : stripSourcesForDisplay(content),
645
+ content: stripSourcesForDisplay(content),
626
646
  isStreaming: isStreaming && isLast,
627
647
  sources: sourceSummaries
628
648
  }
@@ -805,7 +825,7 @@ var STTClient = class {
805
825
  // src/services/stt/transcriber.tsx
806
826
  import { CircularProgress, IconButton as IconButton3, useTheme as useTheme3 } from "@mui/material";
807
827
  import { from as from2, Subscription, switchMap as switchMap2 } from "rxjs";
808
- import { Fragment as Fragment2, jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
828
+ import { Fragment as Fragment3, jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
809
829
  var initialButtonStyles = (badgeBackground, fileText, hoverBadgeBackground) => ({
810
830
  bgcolor: badgeBackground,
811
831
  color: fileText,
@@ -863,7 +883,7 @@ var Transcriber = ({ onTranscriptionCompleted }) => {
863
883
  backgroundColor: status === "RECORDING" ? "rgba(0,0,0,.3)" : "rgba(0,0,0,0)",
864
884
  borderRadius: "50px"
865
885
  },
866
- children: status === "IDLE" ? /* @__PURE__ */ jsx7(IconButton3, { sx: { ...iconButtonStyles }, onClick: handleRecordClick, children: /* @__PURE__ */ jsx7(MicIcon, { sx: { color: "#aaa", cursor: "pointer" } }) }) : status === "RECORDING" ? /* @__PURE__ */ jsxs4(Fragment2, { children: [
886
+ children: status === "IDLE" ? /* @__PURE__ */ jsx7(IconButton3, { sx: { ...iconButtonStyles }, onClick: handleRecordClick, children: /* @__PURE__ */ jsx7(MicIcon, { sx: { color: "#aaa", cursor: "pointer" } }) }) : status === "RECORDING" ? /* @__PURE__ */ jsxs4(Fragment3, { children: [
867
887
  /* @__PURE__ */ jsx7(
868
888
  IconButton3,
869
889
  {
@@ -929,7 +949,7 @@ var useVoiceModeStore = create((set) => ({
929
949
 
930
950
  // src/chat/chat-input.tsx
931
951
  import { shallow } from "zustand/shallow";
932
- import { Fragment as Fragment3, jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
952
+ import { Fragment as Fragment4, jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
933
953
  var ChatInput = (props) => {
934
954
  const {
935
955
  inputValue,
@@ -1282,7 +1302,7 @@ ${sanitize(
1282
1302
  if (!hasSttAction) return null;
1283
1303
  return /* @__PURE__ */ jsx8(Box5, { sx: { display: "flex", alignItems: "center" }, children: /* @__PURE__ */ jsx8(transcriber_default, { onTranscriptionCompleted: handleTranscriptionCompleted }) }, key ?? "stt");
1284
1304
  };
1285
- return /* @__PURE__ */ jsxs5(Fragment3, { children: [
1305
+ return /* @__PURE__ */ jsxs5(Fragment4, { children: [
1286
1306
  /* @__PURE__ */ jsxs5(
1287
1307
  Box5,
1288
1308
  {
@@ -1512,7 +1532,7 @@ ${sanitize(
1512
1532
  minHeight: primaryIconSize
1513
1533
  },
1514
1534
  children: [
1515
- isVoiceModeEligible && /* @__PURE__ */ jsxs5(Fragment3, { children: [
1535
+ isVoiceModeEligible && /* @__PURE__ */ jsxs5(Fragment4, { children: [
1516
1536
  /* @__PURE__ */ jsx8(
1517
1537
  Tooltip3,
1518
1538
  {
@@ -4590,7 +4610,7 @@ import {
4590
4610
  } from "@mui/material";
4591
4611
  import { Plus as AddIcon2, Pencil as EditIcon2, Trash2 as DeleteIcon, MoreVertical as MoreVertIcon, Folder as FolderIcon, X as CloseIcon3, ArrowLeft as ArrowBackIcon } from "lucide-react";
4592
4612
  import { useTheme as useTheme6, alpha as alpha3 } from "@mui/material/styles";
4593
- import { Fragment as Fragment4, jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
4613
+ import { Fragment as Fragment5, jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
4594
4614
  var DEFAULT_COLORS = [
4595
4615
  "#2196F3",
4596
4616
  "#4CAF50",
@@ -5053,7 +5073,7 @@ var ProjectManagementModal = ({
5053
5073
  justifyContent: "flex-end",
5054
5074
  gap: 1
5055
5075
  },
5056
- children: showCreateForm ? /* @__PURE__ */ jsxs7(Fragment4, { children: [
5076
+ children: showCreateForm ? /* @__PURE__ */ jsxs7(Fragment5, { children: [
5057
5077
  /* @__PURE__ */ jsx10(
5058
5078
  Button2,
5059
5079
  {
@@ -5132,7 +5152,7 @@ var ProjectManagementModal = ({
5132
5152
  ]
5133
5153
  }
5134
5154
  );
5135
- return /* @__PURE__ */ jsx10(Fragment4, { children: isMobile ? /* @__PURE__ */ jsx10(
5155
+ return /* @__PURE__ */ jsx10(Fragment5, { children: isMobile ? /* @__PURE__ */ jsx10(
5136
5156
  SwipeableDrawer,
5137
5157
  {
5138
5158
  anchor: "bottom",
@@ -5368,7 +5388,7 @@ import {
5368
5388
  } from "@mui/material";
5369
5389
  import { MoreVertical as MoreVertIcon2, Pencil as EditIcon3, Trash2 as DeleteIcon2, GripVertical as DragIcon, MailOpen as MoveIcon } from "lucide-react";
5370
5390
  import { useTheme as useTheme8, alpha as alpha4 } from "@mui/material/styles";
5371
- import { Fragment as Fragment5, jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
5391
+ import { Fragment as Fragment6, jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
5372
5392
  var SimpleConversationItem = ({
5373
5393
  conversation,
5374
5394
  isSelected,
@@ -5539,7 +5559,7 @@ var SimpleConversationItem = ({
5539
5559
  setIsTouchDragging(false);
5540
5560
  }
5541
5561
  }, [isTouchDragActive, isTouchDragging]);
5542
- return /* @__PURE__ */ jsxs9(Fragment5, { children: [
5562
+ return /* @__PURE__ */ jsxs9(Fragment6, { children: [
5543
5563
  /* @__PURE__ */ jsxs9(
5544
5564
  Box9,
5545
5565
  {
@@ -6097,7 +6117,7 @@ var TOOLTIP_COPY = {
6097
6117
  var tooltip = (key) => TOOLTIP_COPY[key];
6098
6118
 
6099
6119
  // src/chat/conversation-drawer.tsx
6100
- import { Fragment as Fragment6, jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
6120
+ import { Fragment as Fragment7, jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
6101
6121
  var BANDIT_AVATAR = "https://cdn.burtson.ai/images/bandit-head.png";
6102
6122
  var coerceOptionalString = (value) => {
6103
6123
  if (typeof value !== "string") return void 0;
@@ -6350,7 +6370,7 @@ var ConversationDrawer = ({ open, onClose }) => {
6350
6370
  setMoveModalOpen(false);
6351
6371
  setConversationToMove(null);
6352
6372
  };
6353
- return /* @__PURE__ */ jsxs11(Fragment6, { children: [
6373
+ return /* @__PURE__ */ jsxs11(Fragment7, { children: [
6354
6374
  /* @__PURE__ */ jsxs11(
6355
6375
  Drawer,
6356
6376
  {
@@ -6626,7 +6646,7 @@ var ConversationDrawer = ({ open, onClose }) => {
6626
6646
  ]
6627
6647
  }
6628
6648
  ),
6629
- group.id !== null ? /* @__PURE__ */ jsxs11(Fragment6, { children: [
6649
+ group.id !== null ? /* @__PURE__ */ jsxs11(Fragment7, { children: [
6630
6650
  /* @__PURE__ */ jsx14(
6631
6651
  project_header_default,
6632
6652
  {
@@ -6951,7 +6971,7 @@ import {
6951
6971
  } from "@mui/material";
6952
6972
  import { X as CloseIcon6, X as ClearIcon2, Search as SearchIcon2, Folder as FolderIcon5, MoreVertical as MoreVertIcon4, Trash2 as DeleteSweepIcon2, Inbox as InboxIcon4, Plus as AddIcon5, Settings as SettingsIcon3, Brain as MemoryIcon2 } from "lucide-react";
6953
6973
  import { useTheme as useTheme11, alpha as alpha7 } from "@mui/material/styles";
6954
- import { Fragment as Fragment7, jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
6974
+ import { Fragment as Fragment8, jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
6955
6975
  var BANDIT_AVATAR2 = "https://cdn.burtson.ai/images/bandit-head.png";
6956
6976
  var coerceOptionalString2 = (value) => {
6957
6977
  if (typeof value !== "string") return void 0;
@@ -7285,7 +7305,7 @@ var EnhancedMobileConversationsModal = ({
7285
7305
  return changed ? next : prev;
7286
7306
  });
7287
7307
  }, [conversations]);
7288
- return /* @__PURE__ */ jsxs12(Fragment7, { children: [
7308
+ return /* @__PURE__ */ jsxs12(Fragment8, { children: [
7289
7309
  /* @__PURE__ */ jsx15(
7290
7310
  Modal2,
7291
7311
  {
@@ -7475,7 +7495,7 @@ var EnhancedMobileConversationsModal = ({
7475
7495
  fontWeight: 500,
7476
7496
  whiteSpace: "nowrap"
7477
7497
  },
7478
- children: activeHoverLabel ? /* @__PURE__ */ jsxs12(Fragment7, { children: [
7498
+ children: activeHoverLabel ? /* @__PURE__ */ jsxs12(Fragment8, { children: [
7479
7499
  "to",
7480
7500
  " ",
7481
7501
  /* @__PURE__ */ jsx15(
@@ -7600,7 +7620,7 @@ var EnhancedMobileConversationsModal = ({
7600
7620
  ]
7601
7621
  }
7602
7622
  ),
7603
- group.id !== null ? /* @__PURE__ */ jsxs12(Fragment7, { children: [
7623
+ group.id !== null ? /* @__PURE__ */ jsxs12(Fragment8, { children: [
7604
7624
  /* @__PURE__ */ jsx15(
7605
7625
  project_header_default,
7606
7626
  {
@@ -7906,7 +7926,7 @@ var enhanced_mobile_conversations_modal_default = EnhancedMobileConversationsMod
7906
7926
 
7907
7927
  // src/chat/chat-app-bar.tsx
7908
7928
  import { shallow as shallow2 } from "zustand/shallow";
7909
- import { Fragment as Fragment8, jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
7929
+ import { Fragment as Fragment9, jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
7910
7930
  var CDN_BASE = "https://cdn.burtson.ai/";
7911
7931
  var banditHead = `${CDN_BASE}/images/bandit-head.png`;
7912
7932
  var modelAvatars = {
@@ -8117,7 +8137,7 @@ var ChatAppBar = ({
8117
8137
  }
8118
8138
  safeNavigate("/");
8119
8139
  }
8120
- return /* @__PURE__ */ jsxs13(Fragment8, { children: [
8140
+ return /* @__PURE__ */ jsxs13(Fragment9, { children: [
8121
8141
  /* @__PURE__ */ jsxs13(
8122
8142
  Box13,
8123
8143
  {
@@ -8589,7 +8609,7 @@ var ChatAppBar = ({
8589
8609
  ))
8590
8610
  }
8591
8611
  ),
8592
- isTTSAvailable && /* @__PURE__ */ jsxs13(Fragment8, { children: [
8612
+ isTTSAvailable && /* @__PURE__ */ jsxs13(Fragment9, { children: [
8593
8613
  /* @__PURE__ */ jsx16(Tooltip6, { title: `Voice: ${selectedVoice ? toTitleCase(selectedVoice.split("-")[1]) : "Default"}`, arrow: true, children: /* @__PURE__ */ jsx16(
8594
8614
  IconButton10,
8595
8615
  {
@@ -8817,7 +8837,7 @@ import { useTheme as useTheme13, alpha as alpha8 } from "@mui/material/styles";
8817
8837
  import ReactMarkdown from "react-markdown";
8818
8838
  import remarkGfm from "remark-gfm";
8819
8839
  import rehypeRaw from "rehype-raw";
8820
- import { Fragment as Fragment9, jsx as jsx17 } from "react/jsx-runtime";
8840
+ import { Fragment as Fragment10, jsx as jsx17 } from "react/jsx-runtime";
8821
8841
  var markdownComponents = {
8822
8842
  p: ({ node, ...props }) => /* @__PURE__ */ jsx17("span", { ...props }),
8823
8843
  mark: ({ node, children, ...props }) => /* @__PURE__ */ jsx17("mark", { ...props, children }),
@@ -8896,7 +8916,7 @@ var QuerySuggestionPicker = ({
8896
8916
  return () => clearInterval(interval);
8897
8917
  }, [hasSentPrompt, examplePrompts.length]);
8898
8918
  const displayPrompts = isMobile ? visiblePrompts.slice(0, Math.min(visiblePrompts.length, 6)) : visiblePrompts;
8899
- return displayPrompts.length > 0 && /* @__PURE__ */ jsx17(Fragment9, { children: /* @__PURE__ */ jsx17(
8919
+ return displayPrompts.length > 0 && /* @__PURE__ */ jsx17(Fragment10, { children: /* @__PURE__ */ jsx17(
8900
8920
  Box14,
8901
8921
  {
8902
8922
  ref: scrollRef,
@@ -10597,4 +10617,4 @@ var chat_default = Chat;
10597
10617
  export {
10598
10618
  chat_default
10599
10619
  };
10600
- //# sourceMappingURL=chunk-42X7ZU6O.mjs.map
10620
+ //# sourceMappingURL=chunk-JOY64M5C.mjs.map