@burtson-labs/bandit-engine 2.0.126 → 2.0.128

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 (31) hide show
  1. package/dist/{chat-Z3GRZ7GA.mjs → chat-MLDKHXUH.mjs} +5 -5
  2. package/dist/chat-provider.js +1 -1
  3. package/dist/chat-provider.js.map +1 -1
  4. package/dist/chat-provider.mjs +2 -2
  5. package/dist/{chunk-OLKDPUWL.mjs → chunk-BQW7DSJ6.mjs} +2 -2
  6. package/dist/{chunk-574ILQTT.mjs → chunk-FWFDOSRM.mjs} +2 -2
  7. package/dist/{chunk-JXFPCLEY.mjs → chunk-LQJ6OD7F.mjs} +332 -509
  8. package/dist/chunk-LQJ6OD7F.mjs.map +1 -0
  9. package/dist/{chunk-TQP3GUW5.mjs → chunk-N3TVVQVS.mjs} +3 -3
  10. package/dist/{chunk-6ONL4SRK.mjs → chunk-NLBZZP3B.mjs} +2 -2
  11. package/dist/{chunk-6ONL4SRK.mjs.map → chunk-NLBZZP3B.mjs.map} +1 -1
  12. package/dist/{chunk-SAQUEXYS.mjs → chunk-PU74BI6Y.mjs} +2 -2
  13. package/dist/{chunk-RKA3X3EY.mjs → chunk-QDTMVQWD.mjs} +23 -6
  14. package/dist/chunk-QDTMVQWD.mjs.map +1 -0
  15. package/dist/index.js +423 -581
  16. package/dist/index.js.map +1 -1
  17. package/dist/index.mjs +7 -7
  18. package/dist/management/management.js +407 -565
  19. package/dist/management/management.js.map +1 -1
  20. package/dist/management/management.mjs +5 -5
  21. package/dist/modals/chat-modal/chat-modal.js +1 -1
  22. package/dist/modals/chat-modal/chat-modal.js.map +1 -1
  23. package/dist/modals/chat-modal/chat-modal.mjs +3 -3
  24. package/package.json +1 -1
  25. package/dist/chunk-JXFPCLEY.mjs.map +0 -1
  26. package/dist/chunk-RKA3X3EY.mjs.map +0 -1
  27. /package/dist/{chat-Z3GRZ7GA.mjs.map → chat-MLDKHXUH.mjs.map} +0 -0
  28. /package/dist/{chunk-OLKDPUWL.mjs.map → chunk-BQW7DSJ6.mjs.map} +0 -0
  29. /package/dist/{chunk-574ILQTT.mjs.map → chunk-FWFDOSRM.mjs.map} +0 -0
  30. /package/dist/{chunk-TQP3GUW5.mjs.map → chunk-N3TVVQVS.mjs.map} +0 -0
  31. /package/dist/{chunk-SAQUEXYS.mjs.map → chunk-PU74BI6Y.mjs.map} +0 -0
package/dist/index.js CHANGED
@@ -1583,7 +1583,7 @@ var init_conversationStore = __esm({
1583
1583
  const now = /* @__PURE__ */ new Date();
1584
1584
  const newConv = normalizeConversation({
1585
1585
  id: (0, import_uuid.v4)(),
1586
- name: "Incognito chat",
1586
+ name: "Temporary chat",
1587
1587
  history: [],
1588
1588
  model: selectedModel,
1589
1589
  createdAt: now,
@@ -19423,23 +19423,24 @@ ${sanitize(
19423
19423
  bgcolor: inputBackground,
19424
19424
  borderRadius: "24px",
19425
19425
  boxShadow: isMobile ? `0 0 0 1px ${theme.palette.mode === "dark" ? "#444" : "#eee"}` : "0 4px 20px rgba(0, 0, 0, 0.4)",
19426
- px: isMobile ? compactMobile ? 1 : 1.5 : 3,
19427
- pt: isMobile ? compactMobile ? 0.6 : 1 : 1,
19428
- pb: isMobile ? compactMobile ? 0.9 : 1.5 : 1.5,
19426
+ px: isMobile ? compactMobile ? 1 : 1.5 : 2,
19427
+ pt: isMobile ? compactMobile ? 0.6 : 1 : 0.75,
19428
+ pb: isMobile ? compactMobile ? 0.9 : 1.5 : 0.75,
19429
19429
  display: "flex",
19430
19430
  flexDirection: "column",
19431
- gap: isMobile ? compactMobile ? 0.75 : 1 : 1
19431
+ gap: isMobile ? compactMobile ? 0.75 : 1 : 0.5
19432
19432
  },
19433
19433
  children: [
19434
19434
  /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
19435
19435
  import_material18.Box,
19436
19436
  {
19437
19437
  sx: {
19438
- display: "flex",
19438
+ display: fileInputs.length > 0 || pastedImages.length > 0 ? "flex" : "none",
19439
19439
  flexWrap: "wrap",
19440
19440
  gap: attachmentsGap,
19441
19441
  alignItems: "center",
19442
- flexDirection: "row"
19442
+ flexDirection: "row",
19443
+ pt: isMobile ? 0 : 0.5
19443
19444
  },
19444
19445
  children: [
19445
19446
  fileInputs.map((file, idx) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
@@ -19563,7 +19564,7 @@ ${sanitize(
19563
19564
  ]
19564
19565
  }
19565
19566
  ),
19566
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
19567
+ isMobile && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
19567
19568
  import_material18.Box,
19568
19569
  {
19569
19570
  sx: {
@@ -19576,8 +19577,8 @@ ${sanitize(
19576
19577
  {
19577
19578
  fullWidth: true,
19578
19579
  multiline: true,
19579
- maxRows: isMobile ? compactMobile ? 6 : 12 : 6,
19580
- placeholder: isIncognito ? "Incognito chat \u2014 not saved" : "What's on your mind?",
19580
+ maxRows: compactMobile ? 6 : 12,
19581
+ placeholder: isIncognito ? "Temporary chat \u2014 not saved" : "What's on your mind?",
19581
19582
  value: inputValue,
19582
19583
  onChange: (e) => setInputValue(e.target.value),
19583
19584
  onKeyDown: handleKeyPress,
@@ -19587,18 +19588,15 @@ ${sanitize(
19587
19588
  disableUnderline: true,
19588
19589
  sx: {
19589
19590
  flex: "1 1 auto",
19590
- maxHeight: isMobile ? compactMobile ? "120px" : "150px" : "none",
19591
+ maxHeight: compactMobile ? "120px" : "150px",
19591
19592
  overflowY: "auto",
19592
19593
  color: fileText,
19593
19594
  "& .MuiInputBase-inputMultiline": {
19594
- fontSize: isMobile ? compactMobile ? "0.95rem" : "1rem" : "1rem"
19595
+ fontSize: compactMobile ? "0.95rem" : "1rem"
19595
19596
  }
19596
19597
  }
19597
19598
  },
19598
- sx: {
19599
- flex: 1,
19600
- "& .MuiInputBase-root": {}
19601
- }
19599
+ sx: { flex: 1 }
19602
19600
  }
19603
19601
  )
19604
19602
  }
@@ -19609,9 +19607,9 @@ ${sanitize(
19609
19607
  sx: {
19610
19608
  display: "flex",
19611
19609
  justifyContent: "space-between",
19612
- alignItems: "center",
19610
+ alignItems: "flex-end",
19613
19611
  gap: isMobile ? 0.6 : 1,
19614
- mt: isMobile ? 0.5 : 1
19612
+ mt: isMobile ? 0.5 : 0
19615
19613
  },
19616
19614
  children: [
19617
19615
  /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
@@ -19698,26 +19696,53 @@ ${sanitize(
19698
19696
  ]
19699
19697
  }
19700
19698
  ),
19701
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_material18.Box, { sx: { display: "flex", alignItems: "center", gap: isMobile ? 0.6 : 1 }, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_material18.Tooltip, { title: isStreaming ? "Stop response" : "Send message", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
19702
- import_material18.IconButton,
19699
+ !isMobile && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
19700
+ import_material18.TextField,
19703
19701
  {
19704
- onClick: isStreaming ? onStop || (() => {
19705
- }) : handleSubmit,
19706
- disabled: (isStreaming ? false : isSubmitting) || !isStreaming && !inputValue.trim() && pastedImages.length === 0 && fileInputs.length === 0,
19707
- sx: {
19708
- bgcolor: sendButtonBackground,
19709
- color: sendButtonColor,
19710
- borderRadius: "50%",
19711
- width: sendIconSize,
19712
- height: sendIconSize,
19713
- boxShadow: sendButtonShadow,
19714
- transition: "background-color 0.2s ease, box-shadow 0.2s ease",
19715
- "&:hover": { bgcolor: sendButtonHover },
19716
- "&.Mui-disabled": { opacity: 0.5 }
19702
+ fullWidth: true,
19703
+ multiline: true,
19704
+ maxRows: 6,
19705
+ placeholder: isIncognito ? "Temporary chat \u2014 not saved" : "What's on your mind?",
19706
+ value: inputValue,
19707
+ onChange: (e) => setInputValue(e.target.value),
19708
+ onKeyDown: handleKeyPress,
19709
+ inputRef,
19710
+ variant: "standard",
19711
+ InputProps: {
19712
+ disableUnderline: true,
19713
+ sx: {
19714
+ color: fileText,
19715
+ maxHeight: "160px",
19716
+ overflowY: "auto",
19717
+ "& .MuiInputBase-inputMultiline": { fontSize: "1rem" }
19718
+ }
19717
19719
  },
19718
- children: isStreaming ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(CloseIcon, { fontSize: "small" }) : /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(ArrowUpwardIcon, { fontSize: "small" })
19720
+ sx: { flex: 1, alignSelf: "center", mx: 0.5 }
19719
19721
  }
19720
- ) }) }) })
19722
+ ),
19723
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_material18.Box, { sx: { display: "flex", alignItems: "center", gap: isMobile ? 0.6 : 1 }, children: [
19724
+ !isMobile && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(engine_picker_default, {}),
19725
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_material18.Tooltip, { title: isStreaming ? "Stop response" : "Send message", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
19726
+ import_material18.IconButton,
19727
+ {
19728
+ onClick: isStreaming ? onStop || (() => {
19729
+ }) : handleSubmit,
19730
+ disabled: (isStreaming ? false : isSubmitting) || !isStreaming && !inputValue.trim() && pastedImages.length === 0 && fileInputs.length === 0,
19731
+ sx: {
19732
+ bgcolor: sendButtonBackground,
19733
+ color: sendButtonColor,
19734
+ borderRadius: "50%",
19735
+ width: sendIconSize,
19736
+ height: sendIconSize,
19737
+ boxShadow: sendButtonShadow,
19738
+ transition: "background-color 0.2s ease, box-shadow 0.2s ease",
19739
+ "&:hover": { bgcolor: sendButtonHover },
19740
+ "&.Mui-disabled": { opacity: 0.5 }
19741
+ },
19742
+ children: isStreaming ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(CloseIcon, { fontSize: "small" }) : /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(ArrowUpwardIcon, { fontSize: "small" })
19743
+ }
19744
+ ) }) })
19745
+ ] })
19721
19746
  ]
19722
19747
  }
19723
19748
  ),
@@ -19764,7 +19789,7 @@ ${sanitize(
19764
19789
  ]
19765
19790
  }
19766
19791
  ),
19767
- !isMobile && /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
19792
+ (!isMobile || isIncognito) && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
19768
19793
  import_material18.Typography,
19769
19794
  {
19770
19795
  variant: "caption",
@@ -19776,10 +19801,7 @@ ${sanitize(
19776
19801
  textAlign: "center",
19777
19802
  pointerEvents: "none"
19778
19803
  },
19779
- children: [
19780
- brandingText || "BanditAI",
19781
- " may be wrong - double-check important info."
19782
- ]
19804
+ children: isIncognito ? "Temporary chats aren't saved to history, synced, or added to memory." : `${brandingText || "BanditAI"} may be wrong - double-check important info.`
19783
19805
  }
19784
19806
  )
19785
19807
  ]
@@ -19869,13 +19891,14 @@ var init_askUserStore = __esm({
19869
19891
  });
19870
19892
 
19871
19893
  // src/chat/ask-user-card.tsx
19872
- var import_react24, import_material19, import_styles11, import_jsx_runtime21, AskUserCard, ask_user_card_default;
19894
+ var import_react24, import_material19, import_styles11, import_lucide_react7, import_jsx_runtime21, AskUserCard, ask_user_card_default;
19873
19895
  var init_ask_user_card = __esm({
19874
19896
  "src/chat/ask-user-card.tsx"() {
19875
19897
  "use strict";
19876
19898
  import_react24 = require("react");
19877
19899
  import_material19 = require("@mui/material");
19878
19900
  import_styles11 = require("@mui/material/styles");
19901
+ import_lucide_react7 = require("lucide-react");
19879
19902
  init_askUserStore();
19880
19903
  import_jsx_runtime21 = require("react/jsx-runtime");
19881
19904
  AskUserCard = () => {
@@ -19903,57 +19926,142 @@ var init_ask_user_card = __esm({
19903
19926
  });
19904
19927
  submit(final);
19905
19928
  };
19906
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_material19.Box, { sx: { width: "100%", display: "flex", justifyContent: "center", px: { xs: 1, sm: 2 }, mb: 1.5 }, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
19929
+ const isSingleQuestion = pending.questions.length === 1;
19930
+ const handleOptionTap = (qid, label) => {
19931
+ setFreeform((p) => ({ ...p, [qid]: "" }));
19932
+ if (isSingleQuestion) {
19933
+ submit({ [qid]: label });
19934
+ return;
19935
+ }
19936
+ setSelected((p) => ({ ...p, [qid]: label }));
19937
+ };
19938
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_material19.Grow, { in: true, timeout: 300, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_material19.Box, { sx: { width: "100%", display: "flex", justifyContent: "center", px: { xs: 1, sm: 2 }, mb: 1.5 }, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
19907
19939
  import_material19.Paper,
19908
19940
  {
19909
19941
  elevation: 0,
19910
19942
  sx: {
19911
19943
  width: "100%",
19912
19944
  maxWidth: 760,
19913
- p: { xs: 1.75, sm: 2.25 },
19914
- borderRadius: 2,
19915
- border: `1px solid ${(0, import_styles11.alpha)(theme.palette.primary.main, 0.45)}`,
19916
- bgcolor: (0, import_styles11.alpha)(theme.palette.primary.main, 0.06)
19945
+ p: { xs: 2, sm: 2.5 },
19946
+ borderRadius: 3,
19947
+ border: `1px solid ${theme.palette.divider}`,
19948
+ bgcolor: theme.palette.background.paper,
19949
+ boxShadow: `0 8px 32px ${(0, import_styles11.alpha)(theme.palette.common.black, theme.palette.mode === "dark" ? 0.35 : 0.1)}`
19917
19950
  },
19918
19951
  children: [
19919
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_material19.Typography, { variant: "caption", sx: { color: theme.palette.primary.main, fontWeight: 700, letterSpacing: 0.4 }, children: "BANDIT NEEDS A QUICK DECISION" }),
19920
- pending.questions.map((q) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_material19.Box, { sx: { mt: 1.5 }, children: [
19921
- q.header && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_material19.Chip, { label: q.header, size: "small", sx: { mb: 0.75, fontWeight: 600 }, color: "primary", variant: "outlined" }),
19922
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_material19.Typography, { sx: { fontWeight: 600, color: theme.palette.text.primary, mb: 1 }, children: q.question }),
19923
- q.options && q.options.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_material19.Stack, { spacing: 1, children: q.options.map((opt) => {
19924
- const isSel = selected[q.id] === opt.label && !freeform[q.id]?.trim();
19925
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
19926
- import_material19.Button,
19952
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_material19.Box, { sx: { display: "flex", alignItems: "center", gap: 1, mb: 0.5 }, children: [
19953
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
19954
+ import_material19.Box,
19955
+ {
19956
+ sx: {
19957
+ width: 26,
19958
+ height: 26,
19959
+ borderRadius: "50%",
19960
+ display: "flex",
19961
+ alignItems: "center",
19962
+ justifyContent: "center",
19963
+ bgcolor: (0, import_styles11.alpha)(theme.palette.primary.main, 0.12),
19964
+ color: theme.palette.primary.main,
19965
+ flexShrink: 0
19966
+ },
19967
+ children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.CircleHelp, { size: 16 })
19968
+ }
19969
+ ),
19970
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_material19.Typography, { variant: "body2", sx: { color: theme.palette.text.secondary, fontWeight: 600 }, children: "Quick question before I continue" })
19971
+ ] }),
19972
+ pending.questions.map((q) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_material19.Box, { sx: { mt: 1.75 }, children: [
19973
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_material19.Box, { sx: { display: "flex", alignItems: "baseline", gap: 1, flexWrap: "wrap", mb: 1.25 }, children: [
19974
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_material19.Typography, { sx: { fontWeight: 600, fontSize: "1.02rem", color: theme.palette.text.primary }, children: q.question }),
19975
+ q.header && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
19976
+ import_material19.Chip,
19927
19977
  {
19928
- onClick: () => {
19929
- setSelected((p) => ({ ...p, [q.id]: opt.label }));
19930
- setFreeform((p) => ({ ...p, [q.id]: "" }));
19931
- },
19932
- variant: isSel ? "contained" : "outlined",
19933
- color: "primary",
19978
+ label: q.header,
19979
+ size: "small",
19934
19980
  sx: {
19935
- justifyContent: "flex-start",
19936
- textAlign: "left",
19937
- textTransform: "none",
19938
- py: 1,
19939
- px: 1.5,
19940
- borderColor: (0, import_styles11.alpha)(theme.palette.primary.main, 0.4)
19941
- },
19942
- children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_material19.Box, { children: [
19943
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_material19.Typography, { sx: { fontWeight: 600, lineHeight: 1.3 }, children: opt.label }),
19944
- opt.description && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
19945
- import_material19.Typography,
19946
- {
19947
- variant: "caption",
19948
- sx: { color: isSel ? (0, import_styles11.alpha)("#fff", 0.85) : theme.palette.text.secondary, display: "block" },
19949
- children: opt.description
19950
- }
19951
- )
19952
- ] })
19981
+ height: 20,
19982
+ fontSize: "0.7rem",
19983
+ fontWeight: 600,
19984
+ color: theme.palette.text.secondary,
19985
+ bgcolor: (0, import_styles11.alpha)(theme.palette.text.primary, 0.06)
19986
+ }
19987
+ }
19988
+ )
19989
+ ] }),
19990
+ q.options && q.options.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
19991
+ import_material19.Box,
19992
+ {
19993
+ sx: {
19994
+ display: "grid",
19995
+ gridTemplateColumns: { xs: "1fr", sm: q.options.length > 1 ? "1fr 1fr" : "1fr" },
19996
+ gap: 1
19953
19997
  },
19954
- opt.label
19955
- );
19956
- }) }),
19998
+ children: q.options.map((opt) => {
19999
+ const isSel = selected[q.id] === opt.label && !freeform[q.id]?.trim();
20000
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
20001
+ import_material19.Box,
20002
+ {
20003
+ component: "button",
20004
+ type: "button",
20005
+ onClick: () => handleOptionTap(q.id, opt.label),
20006
+ sx: {
20007
+ font: "inherit",
20008
+ textAlign: "left",
20009
+ cursor: "pointer",
20010
+ display: "flex",
20011
+ alignItems: "flex-start",
20012
+ gap: 1,
20013
+ px: 1.5,
20014
+ py: 1.25,
20015
+ borderRadius: 2,
20016
+ border: `1.5px solid ${isSel ? theme.palette.primary.main : theme.palette.divider}`,
20017
+ bgcolor: isSel ? (0, import_styles11.alpha)(theme.palette.primary.main, 0.08) : "transparent",
20018
+ color: "inherit",
20019
+ transition: "border-color 0.15s ease, background-color 0.15s ease, transform 0.1s ease",
20020
+ "&:hover": {
20021
+ borderColor: theme.palette.primary.main,
20022
+ bgcolor: (0, import_styles11.alpha)(theme.palette.primary.main, 0.05)
20023
+ },
20024
+ "&:active": { transform: "scale(0.99)" }
20025
+ },
20026
+ children: [
20027
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
20028
+ import_material19.Box,
20029
+ {
20030
+ sx: {
20031
+ width: 18,
20032
+ height: 18,
20033
+ mt: "2px",
20034
+ borderRadius: "50%",
20035
+ flexShrink: 0,
20036
+ display: "flex",
20037
+ alignItems: "center",
20038
+ justifyContent: "center",
20039
+ border: `1.5px solid ${isSel ? theme.palette.primary.main : (0, import_styles11.alpha)(theme.palette.text.secondary, 0.5)}`,
20040
+ bgcolor: isSel ? theme.palette.primary.main : "transparent",
20041
+ color: theme.palette.getContrastText(theme.palette.primary.main),
20042
+ transition: "all 0.15s ease"
20043
+ },
20044
+ children: isSel && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react7.Check, { size: 12, strokeWidth: 3 })
20045
+ }
20046
+ ),
20047
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_material19.Box, { sx: { minWidth: 0 }, children: [
20048
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_material19.Typography, { sx: { fontWeight: 600, lineHeight: 1.35, fontSize: "0.92rem" }, children: opt.label }),
20049
+ opt.description && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
20050
+ import_material19.Typography,
20051
+ {
20052
+ variant: "caption",
20053
+ sx: { color: theme.palette.text.secondary, display: "block", mt: 0.25 },
20054
+ children: opt.description
20055
+ }
20056
+ )
20057
+ ] })
20058
+ ]
20059
+ },
20060
+ opt.label
20061
+ );
20062
+ })
20063
+ }
20064
+ ),
19957
20065
  q.allowFreeform !== false && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
19958
20066
  import_material19.TextField,
19959
20067
  {
@@ -19962,17 +20070,45 @@ var init_ask_user_card = __esm({
19962
20070
  placeholder: q.options && q.options.length ? "Or type your own answer\u2026" : "Type your answer\u2026",
19963
20071
  value: freeform[q.id] ?? "",
19964
20072
  onChange: (e) => setFreeform((p) => ({ ...p, [q.id]: e.target.value })),
19965
- sx: { mt: q.options && q.options.length ? 1.25 : 0 }
20073
+ onKeyDown: (e) => {
20074
+ if (e.key === "Enter" && !e.shiftKey && answerFor(q.id)) {
20075
+ e.preventDefault();
20076
+ if (allAnswered) handleSubmit();
20077
+ }
20078
+ },
20079
+ sx: {
20080
+ mt: q.options && q.options.length ? 1.25 : 0,
20081
+ "& .MuiOutlinedInput-root": { borderRadius: 2 }
20082
+ }
19966
20083
  }
19967
20084
  )
19968
20085
  ] }, q.id)),
19969
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_material19.Box, { sx: { display: "flex", justifyContent: "flex-end", gap: 1, mt: 2 }, children: [
19970
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_material19.Button, { onClick: cancel, color: "inherit", sx: { textTransform: "none", color: theme.palette.text.secondary }, children: "Skip" }),
19971
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_material19.Button, { onClick: handleSubmit, disabled: !allAnswered, variant: "contained", sx: { textTransform: "none" }, children: "Submit" })
20086
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_material19.Box, { sx: { display: "flex", alignItems: "center", justifyContent: "flex-end", gap: 1, mt: 2 }, children: [
20087
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
20088
+ import_material19.Button,
20089
+ {
20090
+ onClick: cancel,
20091
+ color: "inherit",
20092
+ size: "small",
20093
+ sx: { textTransform: "none", color: theme.palette.text.secondary },
20094
+ children: "Skip \u2014 use your best judgment"
20095
+ }
20096
+ ),
20097
+ (!isSingleQuestion || Object.values(freeform).some((v) => v.trim())) && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
20098
+ import_material19.Button,
20099
+ {
20100
+ onClick: handleSubmit,
20101
+ disabled: !allAnswered,
20102
+ variant: "contained",
20103
+ size: "small",
20104
+ sx: { textTransform: "none", borderRadius: 999, px: 2.5 },
20105
+ children: "Answer"
20106
+ }
20107
+ )
19972
20108
  ] })
19973
20109
  ]
19974
20110
  }
19975
- ) });
20111
+ ) }) });
19976
20112
  };
19977
20113
  ask_user_card_default = AskUserCard;
19978
20114
  }
@@ -21973,14 +22109,14 @@ TOOL USAGE PROTOCOL (conservative approach)
21973
22109
  * web_fetch() - to read the FULL contents of a specific URL you already have. Reach for this when the user wants to "tell me more", "go deeper", "read/open that article", or asks for details about a specific source, link, or article from an EARLIER answer: take that item's URL from the previous Sources list in this conversation and fetch it, then answer from the page's actual content (not just the prior summary)
21974
22110
  * image_generation() - ONLY when explicitly asked to create or generate an image
21975
22111
  * create_file({"content": "...", "filename": "report.docx", "format": "docx"}) - when the user asks for a downloadable FILE (a document, spreadsheet, slides, markdown, code, etc.) or to "export"/"download"/"save" something. Formats: md, txt, csv, json, html, xml, yaml, docx, pptx. PDF is NOT a supported format \u2014 if the user asks for a PDF, create a docx instead. For docx/pptx write well-structured Markdown (use "## " headings to start each slide for pptx). It returns a temporary download link \u2014 ALWAYS tell the user the file expires (~1 hour). If it is unclear whether they want it shown inline vs. as a downloadable file, use ask_user first.
21976
- * ask_user({"questions": [{"question": "...", "header": "Format", "options": [{"label": "Inline (Recommended)"}, {"label": "Download a file"}]}]}) - when you are genuinely BLOCKED on a decision that is the USER's to make and cannot resolve from the request, context, or sensible defaults (e.g. show content inline vs. let them download it, which format/option they want). Renders clickable options the user answers in one step \u2014 better than asking in prose and ending your turn. Give 1-4 questions, each with 2-4 options; if one is clearly best, list it first and append " (Recommended)". The user may also type their own answer; act on it directly.
22112
+ * ask_user({"questions": [{"question": "...", "header": "Format", "options": [{"label": "Inline (Recommended)"}, {"label": "Download a file"}]}]}) - when the request is AMBIGUOUS or missing a detail you need to do a good job (unclear scope, audience, format, tone, which of several interpretations they meant), or you are blocked on a decision that is the user's to make and cannot resolve from the request, context, or sensible defaults. Renders clickable options the user answers in one step \u2014 ALWAYS prefer this over asking a clarifying question in prose and ending your turn. Give 1-4 questions, each with 2-4 short options; if one is clearly best, list it first and append " (Recommended)". The user may also type their own answer; act on it directly. Don't overuse it \u2014 when a sensible default exists, take it and note the assumption instead.
21977
22113
  - For general questions about concepts, definitions, explanations, or how-to topics, use your built-in knowledge WITHOUT calling tools.
21978
22114
  - Examples of what NOT to use tools for: "who are you?", "what is React?", "explain machine learning", "how does X work?", general programming questions.
21979
22115
  - When a tool is truly needed, call exactly ONE tool that best matches the request.
21980
22116
  - Begin tool usage with a fenced code block: \`\`\`tool_code
21981
22117
  functionName({"param": "value"})
21982
22118
  \`\`\`
21983
- - If you cannot answer with your knowledge and context, and no suitable tool exists, ask a clarifying question.
22119
+ - If you cannot answer with your knowledge and context, and no suitable tool exists, use ask_user to ask a clarifying question with clickable options.
21984
22120
 
21985
22121
  Examples of appropriate tool usage:
21986
22122
 
@@ -22971,13 +23107,13 @@ var init_useNetworkStatus = __esm({
22971
23107
  });
22972
23108
 
22973
23109
  // src/chat/project-management-modal.tsx
22974
- var import_react30, import_material21, import_lucide_react7, import_styles12, import_jsx_runtime23, DEFAULT_COLORS2, ProjectManagementModal, project_management_modal_default;
23110
+ var import_react30, import_material21, import_lucide_react8, import_styles12, import_jsx_runtime23, DEFAULT_COLORS2, ProjectManagementModal, project_management_modal_default;
22975
23111
  var init_project_management_modal = __esm({
22976
23112
  "src/chat/project-management-modal.tsx"() {
22977
23113
  "use strict";
22978
23114
  import_react30 = require("react");
22979
23115
  import_material21 = require("@mui/material");
22980
- import_lucide_react7 = require("lucide-react");
23116
+ import_lucide_react8 = require("lucide-react");
22981
23117
  import_styles12 = require("@mui/material/styles");
22982
23118
  init_projectStore();
22983
23119
  init_conversationStore();
@@ -23206,7 +23342,7 @@ var init_project_management_modal = __esm({
23206
23342
  flex: 1
23207
23343
  },
23208
23344
  children: [
23209
- showCreateForm && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_material21.IconButton, { onClick: resetForm, size: "small", sx: { mr: 0.5 }, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react7.ArrowLeft, { size: 16 }) }),
23345
+ showCreateForm && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_material21.IconButton, { onClick: resetForm, size: "small", sx: { mr: 0.5 }, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react8.ArrowLeft, { size: 16 }) }),
23210
23346
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
23211
23347
  import_material21.Typography,
23212
23348
  {
@@ -23224,7 +23360,7 @@ var init_project_management_modal = __esm({
23224
23360
  ]
23225
23361
  }
23226
23362
  ),
23227
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_material21.IconButton, { onClick: handleClose, size: "small", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react7.X, {}) })
23363
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_material21.IconButton, { onClick: handleClose, size: "small", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react8.X, {}) })
23228
23364
  ]
23229
23365
  }
23230
23366
  ),
@@ -23311,7 +23447,7 @@ var init_project_management_modal = __esm({
23311
23447
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
23312
23448
  import_material21.Button,
23313
23449
  {
23314
- startIcon: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react7.Plus, {}),
23450
+ startIcon: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react8.Plus, {}),
23315
23451
  onClick: () => setShowCreateForm(true),
23316
23452
  variant: "contained",
23317
23453
  sx: {
@@ -23336,7 +23472,7 @@ var init_project_management_modal = __esm({
23336
23472
  backgroundColor: subtleSurface
23337
23473
  },
23338
23474
  children: [
23339
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react7.Folder, { size: 48, style: { marginBottom: 8, opacity: 0.5 } }),
23475
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react8.Folder, { size: 48, style: { marginBottom: 8, opacity: 0.5 } }),
23340
23476
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_material21.Typography, { variant: "body1", sx: { fontWeight: 600 }, children: "No projects yet" }),
23341
23477
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_material21.Typography, { variant: "body2", children: "Create your first project to organize conversations." })
23342
23478
  ]
@@ -23371,7 +23507,7 @@ var init_project_management_modal = __esm({
23371
23507
  height: 36,
23372
23508
  fontSize: "1rem"
23373
23509
  },
23374
- children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react7.Folder, { size: 16 })
23510
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react8.Folder, { size: 16 })
23375
23511
  }
23376
23512
  ),
23377
23513
  /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_material21.Box, { sx: { flex: 1, minWidth: 0 }, children: [
@@ -23422,7 +23558,7 @@ var init_project_management_modal = __esm({
23422
23558
  mt: 0.25,
23423
23559
  zIndex: 1
23424
23560
  },
23425
- children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react7.MoreVertical, { size: 16 })
23561
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react8.MoreVertical, { size: 16 })
23426
23562
  }
23427
23563
  )
23428
23564
  ]
@@ -23498,7 +23634,7 @@ var init_project_management_modal = __esm({
23498
23634
  startEdit(selectedProject);
23499
23635
  },
23500
23636
  children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_material21.Box, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
23501
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react7.Pencil, { size: 16 }),
23637
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react8.Pencil, { size: 16 }),
23502
23638
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_material21.Typography, { variant: "body2", color: "inherit", children: "Edit" })
23503
23639
  ] })
23504
23640
  }
@@ -23512,7 +23648,7 @@ var init_project_management_modal = __esm({
23512
23648
  },
23513
23649
  sx: { color: theme.palette.error.main },
23514
23650
  children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_material21.Box, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
23515
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react7.Trash2, { size: 16 }),
23651
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react8.Trash2, { size: 16 }),
23516
23652
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_material21.Typography, { variant: "body2", color: "inherit", children: "Delete" })
23517
23653
  ] })
23518
23654
  }
@@ -23564,13 +23700,13 @@ var init_project_management_modal = __esm({
23564
23700
  });
23565
23701
 
23566
23702
  // src/chat/move-conversation-modal.tsx
23567
- var import_react31, import_material22, import_lucide_react8, import_styles13, import_jsx_runtime24, MoveConversationModal, move_conversation_modal_default;
23703
+ var import_react31, import_material22, import_lucide_react9, import_styles13, import_jsx_runtime24, MoveConversationModal, move_conversation_modal_default;
23568
23704
  var init_move_conversation_modal = __esm({
23569
23705
  "src/chat/move-conversation-modal.tsx"() {
23570
23706
  "use strict";
23571
23707
  import_react31 = require("react");
23572
23708
  import_material22 = require("@mui/material");
23573
- import_lucide_react8 = require("lucide-react");
23709
+ import_lucide_react9 = require("lucide-react");
23574
23710
  import_styles13 = require("@mui/material/styles");
23575
23711
  init_projectStore();
23576
23712
  init_conversationStore();
@@ -23655,7 +23791,7 @@ var init_move_conversation_modal = __esm({
23655
23791
  width: 32,
23656
23792
  height: 32
23657
23793
  },
23658
- children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react8.Inbox, {})
23794
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react9.Inbox, {})
23659
23795
  }
23660
23796
  ) }),
23661
23797
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
@@ -23691,7 +23827,7 @@ var init_move_conversation_modal = __esm({
23691
23827
  width: 32,
23692
23828
  height: 32
23693
23829
  },
23694
- children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react8.Folder, {})
23830
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react9.Folder, {})
23695
23831
  }
23696
23832
  ) }),
23697
23833
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
@@ -23735,13 +23871,13 @@ var init_move_conversation_modal = __esm({
23735
23871
  });
23736
23872
 
23737
23873
  // src/chat/simple-conversation-item.tsx
23738
- var import_react32, import_material23, import_lucide_react9, import_styles14, import_jsx_runtime25, SimpleConversationItem, simple_conversation_item_default;
23874
+ var import_react32, import_material23, import_lucide_react10, import_styles14, import_jsx_runtime25, SimpleConversationItem, simple_conversation_item_default;
23739
23875
  var init_simple_conversation_item = __esm({
23740
23876
  "src/chat/simple-conversation-item.tsx"() {
23741
23877
  "use strict";
23742
23878
  import_react32 = require("react");
23743
23879
  import_material23 = require("@mui/material");
23744
- import_lucide_react9 = require("lucide-react");
23880
+ import_lucide_react10 = require("lucide-react");
23745
23881
  import_styles14 = require("@mui/material/styles");
23746
23882
  import_jsx_runtime25 = require("react/jsx-runtime");
23747
23883
  SimpleConversationItem = ({
@@ -23969,7 +24105,7 @@ var init_simple_conversation_item = __esm({
23969
24105
  },
23970
24106
  children: [
23971
24107
  !isMobile && !isEditing && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
23972
- import_lucide_react9.GripVertical,
24108
+ import_lucide_react10.GripVertical,
23973
24109
  {
23974
24110
  size: 16,
23975
24111
  color: theme.palette.text.disabled,
@@ -24063,7 +24199,7 @@ var init_simple_conversation_item = __esm({
24063
24199
  }
24064
24200
  }
24065
24201
  },
24066
- children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react9.MoreVertical, { size: 16 })
24202
+ children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react10.MoreVertical, { size: 16 })
24067
24203
  }
24068
24204
  ),
24069
24205
  /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
@@ -24094,15 +24230,15 @@ var init_simple_conversation_item = __esm({
24094
24230
  },
24095
24231
  children: [
24096
24232
  onRename && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_material23.MenuItem, { onClick: handleEdit, children: [
24097
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_material23.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react9.Pencil, { size: 16 }) }),
24233
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_material23.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react10.Pencil, { size: 16 }) }),
24098
24234
  /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_material23.ListItemText, { children: "Rename" })
24099
24235
  ] }),
24100
24236
  onMove && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_material23.MenuItem, { onClick: handleMove, children: [
24101
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_material23.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react9.MailOpen, { size: 16 }) }),
24237
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_material23.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react10.MailOpen, { size: 16 }) }),
24102
24238
  /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_material23.ListItemText, { children: "Move to Project" })
24103
24239
  ] }),
24104
24240
  /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_material23.MenuItem, { onClick: handleDelete, children: [
24105
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_material23.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react9.Trash2, { size: 16 }) }),
24241
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_material23.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react10.Trash2, { size: 16 }) }),
24106
24242
  /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_material23.ListItemText, { children: "Delete" })
24107
24243
  ] })
24108
24244
  ]
@@ -24175,13 +24311,13 @@ var init_simple_conversation_item = __esm({
24175
24311
  });
24176
24312
 
24177
24313
  // src/chat/project-header.tsx
24178
- var import_react33, import_material24, import_lucide_react10, import_styles15, import_jsx_runtime26, ProjectHeader, project_header_default;
24314
+ var import_react33, import_material24, import_lucide_react11, import_styles15, import_jsx_runtime26, ProjectHeader, project_header_default;
24179
24315
  var init_project_header = __esm({
24180
24316
  "src/chat/project-header.tsx"() {
24181
24317
  "use strict";
24182
24318
  import_react33 = require("react");
24183
24319
  import_material24 = require("@mui/material");
24184
- import_lucide_react10 = require("lucide-react");
24320
+ import_lucide_react11 = require("lucide-react");
24185
24321
  import_styles15 = require("@mui/material/styles");
24186
24322
  init_conversationStore();
24187
24323
  init_projectStore();
@@ -24208,7 +24344,7 @@ var init_project_header = __esm({
24208
24344
  const [renameDraft, setRenameDraft] = (0, import_react33.useState)(projectName);
24209
24345
  const renameActionRef = (0, import_react33.useRef)("none");
24210
24346
  const isUngrouped = projectId === null;
24211
- const Icon = isCollapsed ? import_lucide_react10.Folder : import_lucide_react10.FolderOpen;
24347
+ const Icon = isCollapsed ? import_lucide_react11.Folder : import_lucide_react11.FolderOpen;
24212
24348
  const handleAddConversation = (e) => {
24213
24349
  e.stopPropagation();
24214
24350
  createNewConversation(projectId || void 0);
@@ -24289,7 +24425,7 @@ var init_project_header = __esm({
24289
24425
  mr: 1.5
24290
24426
  },
24291
24427
  children: isUngrouped ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
24292
- import_lucide_react10.Inbox,
24428
+ import_lucide_react11.Inbox,
24293
24429
  {
24294
24430
  size: 16,
24295
24431
  color: theme.palette.text.disabled,
@@ -24405,7 +24541,7 @@ var init_project_header = __esm({
24405
24541
  onRenameCancelDelete ? onRenameCancelDelete() : cancelRename();
24406
24542
  },
24407
24543
  sx: { color: (0, import_material24.alpha)(theme.palette.error.main, 0.9) },
24408
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react10.X, { size: 16 })
24544
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react11.X, { size: 16 })
24409
24545
  }
24410
24546
  ) }),
24411
24547
  /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_material24.Tooltip, { title: "Save", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
@@ -24418,7 +24554,7 @@ var init_project_header = __esm({
24418
24554
  commitRename();
24419
24555
  },
24420
24556
  sx: { color: theme.palette.success.main },
24421
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react10.Check, { size: 16 })
24557
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react11.Check, { size: 16 })
24422
24558
  }
24423
24559
  ) })
24424
24560
  ] }),
@@ -24439,7 +24575,7 @@ var init_project_header = __esm({
24439
24575
  },
24440
24576
  transition: "all 0.2s ease"
24441
24577
  },
24442
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react10.Plus, { size: 16 })
24578
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react11.Plus, { size: 16 })
24443
24579
  }
24444
24580
  ) }),
24445
24581
  !isUngrouped && !isRenaming && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
@@ -24450,7 +24586,7 @@ var init_project_header = __esm({
24450
24586
  color: theme.palette.text.secondary,
24451
24587
  transition: "transform 0.2s ease"
24452
24588
  },
24453
- children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react10.ChevronDown, { size: 16 }) : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react10.ChevronUp, { size: 16 })
24589
+ children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react11.ChevronDown, { size: 16 }) : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react11.ChevronUp, { size: 16 })
24454
24590
  }
24455
24591
  )
24456
24592
  ]
@@ -24480,13 +24616,13 @@ var init_tooltips = __esm({
24480
24616
  });
24481
24617
 
24482
24618
  // src/chat/conversation-drawer.tsx
24483
- var import_react34, import_material25, import_lucide_react11, import_styles16, import_jsx_runtime27, BANDIT_AVATAR, coerceOptionalString, deriveInitials, ConversationDrawer, conversation_drawer_default;
24619
+ var import_react34, import_material25, import_lucide_react12, import_styles16, import_jsx_runtime27, BANDIT_AVATAR, coerceOptionalString, deriveInitials, ConversationDrawer, conversation_drawer_default;
24484
24620
  var init_conversation_drawer = __esm({
24485
24621
  "src/chat/conversation-drawer.tsx"() {
24486
24622
  "use strict";
24487
24623
  import_react34 = require("react");
24488
24624
  import_material25 = require("@mui/material");
24489
- import_lucide_react11 = require("lucide-react");
24625
+ import_lucide_react12 = require("lucide-react");
24490
24626
  import_styles16 = require("@mui/material/styles");
24491
24627
  init_conversationStore();
24492
24628
  init_projectStore();
@@ -24859,7 +24995,7 @@ var init_conversation_drawer = __esm({
24859
24995
  bgcolor: (0, import_material25.alpha)(theme.palette.primary.main, 0.1)
24860
24996
  }
24861
24997
  },
24862
- children: syncStatus === "error" ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.CircleAlert, {}) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.RefreshCw, {})
24998
+ children: syncStatus === "error" ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.CircleAlert, {}) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.RefreshCw, {})
24863
24999
  }
24864
25000
  ) }),
24865
25001
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_material25.Tooltip, { title: "Memories", arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
@@ -24875,7 +25011,7 @@ var init_conversation_drawer = __esm({
24875
25011
  bgcolor: (0, import_material25.alpha)(theme.palette.primary.main, 0.1)
24876
25012
  }
24877
25013
  },
24878
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.Brain, {})
25014
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.Brain, {})
24879
25015
  }
24880
25016
  ) }),
24881
25017
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_material25.Tooltip, { title: tooltip("manageProjects"), arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
@@ -24891,7 +25027,7 @@ var init_conversation_drawer = __esm({
24891
25027
  bgcolor: (0, import_material25.alpha)(theme.palette.primary.main, 0.1)
24892
25028
  }
24893
25029
  },
24894
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.Folder, {})
25030
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.Folder, {})
24895
25031
  }
24896
25032
  ) }),
24897
25033
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_material25.Tooltip, { title: tooltip("conversationOptions"), arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
@@ -24907,7 +25043,7 @@ var init_conversation_drawer = __esm({
24907
25043
  bgcolor: (0, import_material25.alpha)(theme.palette.text.primary, 0.1)
24908
25044
  }
24909
25045
  },
24910
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.MoreVertical, {})
25046
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.MoreVertical, {})
24911
25047
  }
24912
25048
  ) }),
24913
25049
  isMobile && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_material25.Tooltip, { title: tooltip("closeConversationsPanel"), children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
@@ -24927,7 +25063,7 @@ var init_conversation_drawer = __esm({
24927
25063
  bgcolor: (0, import_material25.alpha)(theme.palette.error.main, 0.1)
24928
25064
  }
24929
25065
  },
24930
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.X, {})
25066
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.X, {})
24931
25067
  }
24932
25068
  ) })
24933
25069
  ]
@@ -24943,7 +25079,7 @@ var init_conversation_drawer = __esm({
24943
25079
  onChange: (e) => setSearchQuery(e.target.value),
24944
25080
  variant: "outlined",
24945
25081
  InputProps: {
24946
- startAdornment: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_material25.InputAdornment, { position: "start", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.Search, { size: 16, color: theme.palette.text.secondary }) }),
25082
+ startAdornment: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_material25.InputAdornment, { position: "start", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.Search, { size: 16, color: theme.palette.text.secondary }) }),
24947
25083
  endAdornment: searchQuery && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_material25.InputAdornment, { position: "end", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_material25.Tooltip, { title: tooltip("clearSearch"), children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
24948
25084
  import_material25.IconButton,
24949
25085
  {
@@ -24952,7 +25088,7 @@ var init_conversation_drawer = __esm({
24952
25088
  edge: "end",
24953
25089
  "aria-label": tooltip("clearSearch"),
24954
25090
  sx: { color: theme.palette.text.secondary },
24955
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.X, { size: 16 })
25091
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.X, { size: 16 })
24956
25092
  }
24957
25093
  ) }) })
24958
25094
  },
@@ -25018,7 +25154,7 @@ var init_conversation_drawer = __esm({
25018
25154
  justifyContent: "center",
25019
25155
  flexShrink: 0
25020
25156
  },
25021
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.Folder, { size: 16, color: theme.palette.success.main })
25157
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.Folder, { size: 16, color: theme.palette.success.main })
25022
25158
  }
25023
25159
  ),
25024
25160
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
@@ -25035,7 +25171,7 @@ var init_conversation_drawer = __esm({
25035
25171
  size: "small",
25036
25172
  "aria-label": tooltip("addProject"),
25037
25173
  sx: { color: theme.palette.success.main },
25038
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.Plus, { size: 16 })
25174
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.Plus, { size: 16 })
25039
25175
  }
25040
25176
  ) })
25041
25177
  ]
@@ -25057,7 +25193,7 @@ var init_conversation_drawer = __esm({
25057
25193
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_material25.Divider, { sx: { flex: 1, opacity: 0.6 } }),
25058
25194
  /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_material25.Box, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
25059
25195
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
25060
- import_lucide_react11.Inbox,
25196
+ import_lucide_react12.Inbox,
25061
25197
  {
25062
25198
  size: 14,
25063
25199
  color: theme.palette.text.disabled,
@@ -25297,7 +25433,7 @@ var init_conversation_drawer = __esm({
25297
25433
  border: `1px solid ${(0, import_material25.alpha)(theme.palette.divider, 0.8)}`,
25298
25434
  color: theme.palette.text.secondary
25299
25435
  },
25300
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.House, { size: 16 })
25436
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.House, { size: 16 })
25301
25437
  }
25302
25438
  ),
25303
25439
  user2 && showLimitedAdminPanel() && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
@@ -25316,7 +25452,7 @@ var init_conversation_drawer = __esm({
25316
25452
  border: `1px solid ${(0, import_material25.alpha)(theme.palette.divider, 0.8)}`,
25317
25453
  color: theme.palette.text.secondary
25318
25454
  },
25319
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.SlidersHorizontal, { size: 16 })
25455
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.SlidersHorizontal, { size: 16 })
25320
25456
  }
25321
25457
  ),
25322
25458
  user2 && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
@@ -25334,7 +25470,7 @@ var init_conversation_drawer = __esm({
25334
25470
  border: `1px solid ${(0, import_material25.alpha)(theme.palette.divider, 0.8)}`,
25335
25471
  color: theme.palette.text.secondary
25336
25472
  },
25337
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.Settings, { size: 16 })
25473
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.Settings, { size: 16 })
25338
25474
  }
25339
25475
  ),
25340
25476
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
@@ -25355,7 +25491,7 @@ var init_conversation_drawer = __esm({
25355
25491
  color: theme.palette.error.main,
25356
25492
  "&:hover": { bgcolor: (0, import_material25.alpha)(theme.palette.error.main, 0.1) }
25357
25493
  },
25358
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.LogOut, { size: 16 })
25494
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.LogOut, { size: 16 })
25359
25495
  }
25360
25496
  )
25361
25497
  ] })
@@ -25405,7 +25541,7 @@ var init_conversation_drawer = __esm({
25405
25541
  },
25406
25542
  sx: { color: theme.palette.error.main },
25407
25543
  children: [
25408
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_material25.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.Trash2, { size: 16, color: theme.palette.error.main }) }),
25544
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_material25.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.Trash2, { size: 16, color: theme.palette.error.main }) }),
25409
25545
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_material25.ListItemText, { children: "Clear All Conversations" })
25410
25546
  ]
25411
25547
  }
@@ -25444,13 +25580,13 @@ var init_conversation_drawer = __esm({
25444
25580
  });
25445
25581
 
25446
25582
  // src/chat/enhanced-mobile-conversations-modal.tsx
25447
- var import_react35, import_material26, import_lucide_react12, import_styles17, import_jsx_runtime28, BANDIT_AVATAR2, coerceOptionalString2, deriveInitials2, EnhancedMobileConversationsModal, enhanced_mobile_conversations_modal_default;
25583
+ var import_react35, import_material26, import_lucide_react13, import_styles17, import_jsx_runtime28, BANDIT_AVATAR2, coerceOptionalString2, deriveInitials2, EnhancedMobileConversationsModal, enhanced_mobile_conversations_modal_default;
25448
25584
  var init_enhanced_mobile_conversations_modal = __esm({
25449
25585
  "src/chat/enhanced-mobile-conversations-modal.tsx"() {
25450
25586
  "use strict";
25451
25587
  import_react35 = require("react");
25452
25588
  import_material26 = require("@mui/material");
25453
- import_lucide_react12 = require("lucide-react");
25589
+ import_lucide_react13 = require("lucide-react");
25454
25590
  import_styles17 = require("@mui/material/styles");
25455
25591
  init_conversationStore();
25456
25592
  init_projectStore();
@@ -25893,7 +26029,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
25893
26029
  }
25894
26030
  }
25895
26031
  },
25896
- children: syncStatus === "error" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.CircleAlert, {}) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.RefreshCw, {})
26032
+ children: syncStatus === "error" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.CircleAlert, {}) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.RefreshCw, {})
25897
26033
  }
25898
26034
  ),
25899
26035
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
@@ -25902,7 +26038,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
25902
26038
  onClick: () => setMemoryModalOpen(true),
25903
26039
  "aria-label": "Memory",
25904
26040
  sx: { color: theme.palette.text.secondary },
25905
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.Brain, {})
26041
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.Brain, {})
25906
26042
  }
25907
26043
  ),
25908
26044
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
@@ -25910,7 +26046,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
25910
26046
  {
25911
26047
  onClick: () => setProjectManagementOpen(true),
25912
26048
  sx: { color: theme.palette.text.secondary },
25913
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.Folder, {})
26049
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.Folder, {})
25914
26050
  }
25915
26051
  ),
25916
26052
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
@@ -25918,7 +26054,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
25918
26054
  {
25919
26055
  onClick: handleMenuOpen,
25920
26056
  sx: { color: theme.palette.text.secondary },
25921
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.MoreVertical, {})
26057
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.MoreVertical, {})
25922
26058
  }
25923
26059
  ),
25924
26060
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
@@ -25926,7 +26062,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
25926
26062
  {
25927
26063
  onClick: onClose,
25928
26064
  sx: { color: theme.palette.text.secondary },
25929
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.X, {})
26065
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.X, {})
25930
26066
  }
25931
26067
  )
25932
26068
  ] })
@@ -25942,7 +26078,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
25942
26078
  onChange: (e) => setSearchQuery(e.target.value),
25943
26079
  variant: "outlined",
25944
26080
  InputProps: {
25945
- startAdornment: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_material26.InputAdornment, { position: "start", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.Search, { size: 16, color: theme.palette.text.secondary }) }),
26081
+ startAdornment: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_material26.InputAdornment, { position: "start", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.Search, { size: 16, color: theme.palette.text.secondary }) }),
25946
26082
  endAdornment: searchQuery && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_material26.InputAdornment, { position: "end", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
25947
26083
  import_material26.IconButton,
25948
26084
  {
@@ -25950,7 +26086,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
25950
26086
  size: "small",
25951
26087
  edge: "end",
25952
26088
  sx: { color: theme.palette.text.secondary },
25953
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.X, { size: 16 })
26089
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.X, { size: 16 })
25954
26090
  }
25955
26091
  ) })
25956
26092
  }
@@ -26106,7 +26242,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
26106
26242
  justifyContent: "center",
26107
26243
  flexShrink: 0
26108
26244
  },
26109
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.Folder, { size: 16, color: theme.palette.success.main })
26245
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.Folder, { size: 16, color: theme.palette.success.main })
26110
26246
  }
26111
26247
  ),
26112
26248
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
@@ -26117,7 +26253,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
26117
26253
  children: "New Project"
26118
26254
  }
26119
26255
  ),
26120
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_material26.IconButton, { size: "small", sx: { color: theme.palette.success.main }, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.Plus, { size: 16 }) })
26256
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_material26.IconButton, { size: "small", sx: { color: theme.palette.success.main }, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.Plus, { size: 16 }) })
26121
26257
  ]
26122
26258
  }
26123
26259
  ),
@@ -26137,7 +26273,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
26137
26273
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_material26.Divider, { sx: { flex: 1, opacity: 0.6 } }),
26138
26274
  /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_material26.Box, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
26139
26275
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
26140
- import_lucide_react12.Inbox,
26276
+ import_lucide_react13.Inbox,
26141
26277
  {
26142
26278
  size: 14,
26143
26279
  color: theme.palette.text.disabled,
@@ -26332,7 +26468,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
26332
26468
  createNewConversation();
26333
26469
  onClose();
26334
26470
  },
26335
- startIcon: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.Plus, { size: 18 }),
26471
+ startIcon: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.Plus, { size: 18 }),
26336
26472
  sx: {
26337
26473
  pointerEvents: "auto",
26338
26474
  textTransform: "none",
@@ -26423,7 +26559,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
26423
26559
  border: `1px solid ${(0, import_styles17.alpha)(theme.palette.divider, 0.8)}`,
26424
26560
  color: theme.palette.text.secondary
26425
26561
  },
26426
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.House, { size: 16 })
26562
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.House, { size: 16 })
26427
26563
  }
26428
26564
  ),
26429
26565
  user2 && showLimitedAdminPanel() && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
@@ -26442,7 +26578,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
26442
26578
  border: `1px solid ${(0, import_styles17.alpha)(theme.palette.divider, 0.8)}`,
26443
26579
  color: theme.palette.text.secondary
26444
26580
  },
26445
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.SlidersHorizontal, { size: 16 })
26581
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.SlidersHorizontal, { size: 16 })
26446
26582
  }
26447
26583
  ),
26448
26584
  user2 && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_jsx_runtime28.Fragment, { children: [
@@ -26460,7 +26596,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
26460
26596
  border: `1px solid ${(0, import_styles17.alpha)(theme.palette.divider, 0.8)}`,
26461
26597
  color: theme.palette.text.secondary
26462
26598
  },
26463
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.Settings, { size: 16 })
26599
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.Settings, { size: 16 })
26464
26600
  }
26465
26601
  ),
26466
26602
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
@@ -26481,7 +26617,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
26481
26617
  color: theme.palette.error.main,
26482
26618
  "&:hover": { bgcolor: (0, import_styles17.alpha)(theme.palette.error.main, 0.1) }
26483
26619
  },
26484
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.LogOut, { size: 16 })
26620
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.LogOut, { size: 16 })
26485
26621
  }
26486
26622
  )
26487
26623
  ] })
@@ -26534,7 +26670,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
26534
26670
  disabled: visibleConversationCount === 0,
26535
26671
  sx: { color: theme.palette.error.main },
26536
26672
  children: [
26537
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_material26.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.Trash2, { size: 16, color: theme.palette.error.main }) }),
26673
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_material26.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.Trash2, { size: 16, color: theme.palette.error.main }) }),
26538
26674
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_material26.ListItemText, { children: "Clear All Conversations" })
26539
26675
  ]
26540
26676
  }
@@ -26583,7 +26719,6 @@ var init_chat_app_bar = __esm({
26583
26719
  import_material28 = require("@mui/material");
26584
26720
  import_react_router_dom2 = require("react-router-dom");
26585
26721
  init_lucide_icons();
26586
- init_util();
26587
26722
  init_conversation_drawer();
26588
26723
  init_enhanced_mobile_conversations_modal();
26589
26724
  init_conversationStore();
@@ -26805,13 +26940,13 @@ var init_chat_app_bar = __esm({
26805
26940
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
26806
26941
  import_material28.Tooltip,
26807
26942
  {
26808
- title: isIncognitoActive ? "End incognito chat" : "Start incognito chat \u2014 not saved",
26943
+ title: isIncognitoActive ? "End temporary chat" : "Temporary chat \u2014 not saved anywhere",
26809
26944
  arrow: true,
26810
26945
  children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
26811
26946
  import_material28.IconButton,
26812
26947
  {
26813
26948
  onClick: toggleIncognito,
26814
- "aria-label": isIncognitoActive ? "End incognito chat" : "Start incognito chat",
26949
+ "aria-label": isIncognitoActive ? "End temporary chat" : "Start temporary chat",
26815
26950
  "aria-pressed": isIncognitoActive,
26816
26951
  sx: {
26817
26952
  width: 44,
@@ -26910,35 +27045,11 @@ var init_chat_app_bar = __esm({
26910
27045
  "aria-label": "Create new conversation",
26911
27046
  children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(AddIcon, {})
26912
27047
  }
26913
- ) }),
26914
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
26915
- import_material28.Tooltip,
26916
- {
26917
- title: isIncognitoActive ? "End incognito chat" : "Start incognito chat \u2014 not saved",
26918
- arrow: true,
26919
- children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
26920
- import_material28.IconButton,
26921
- {
26922
- onClick: toggleIncognito,
26923
- "aria-label": isIncognitoActive ? "End incognito chat" : "Start incognito chat",
26924
- "aria-pressed": isIncognitoActive,
26925
- sx: {
26926
- ...pillButtonStyles,
26927
- ...isIncognitoActive && {
26928
- bgcolor: theme.palette.text.primary,
26929
- color: theme.palette.getContrastText(theme.palette.text.primary),
26930
- "&:hover": { bgcolor: theme.palette.text.primary }
26931
- }
26932
- },
26933
- children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(GhostIcon, {})
26934
- }
26935
- )
26936
- }
26937
- )
27048
+ ) })
26938
27049
  ]
26939
27050
  }
26940
27051
  ),
26941
- !isMobile && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
27052
+ !isMobile && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
26942
27053
  import_material28.Box,
26943
27054
  {
26944
27055
  sx: {
@@ -26958,368 +27069,30 @@ var init_chat_app_bar = __esm({
26958
27069
  boxShadow: theme.palette.mode === "dark" ? "0 6px 20px rgba(0,0,0,0.4)" : "0 6px 20px rgba(0,0,0,0.15)"
26959
27070
  }
26960
27071
  },
26961
- children: [
26962
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_material28.Tooltip, { title: `Current AI: ${selectedModel.replace("Bandit-", "")}`, arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
26963
- import_material28.IconButton,
26964
- {
26965
- onClick: (e) => setModelAnchorEl(e.currentTarget),
26966
- sx: {
26967
- ...pillButtonStyles,
26968
- "&:hover": {
26969
- ...pillButtonStyles["&:hover"],
26970
- "& .MuiAvatar-root": {
26971
- transform: "scale(1.1)",
26972
- filter: "brightness(2) saturate(1.2)"
26973
- }
26974
- }
26975
- },
26976
- "aria-label": `Change AI personality. Currently using ${selectedModel}`,
26977
- children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
26978
- import_material27.Avatar,
26979
- {
26980
- src: currentAvatar,
26981
- alt: selectedModel,
26982
- sx: {
26983
- width: "36px",
26984
- height: "36px",
26985
- filter: "brightness(1.7)",
26986
- transition: "all 0.2s ease-in-out",
26987
- border: `2px solid ${theme.palette.primary.main}20`
26988
- },
26989
- className: "MuiAvatar-root"
26990
- }
26991
- )
26992
- }
26993
- ) }),
26994
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_material28.Tooltip, { title: `Engine \xB7 ${engineDisplay}`, arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
26995
- import_material28.IconButton,
26996
- {
26997
- onClick: (e) => setEngineAnchorEl(e.currentTarget),
26998
- sx: pillButtonStyles,
26999
- "aria-label": `Change base model (engine). Currently ${engineDisplay}`,
27000
- children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(AutoAwesomeIcon, { fontSize: "small" })
27001
- }
27002
- ) }),
27003
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
27004
- import_material28.Menu,
27005
- {
27006
- anchorEl: engineAnchorEl,
27007
- open: Boolean(engineAnchorEl),
27008
- onClose: () => setEngineAnchorEl(null),
27009
- transformOrigin: { horizontal: "right", vertical: "top" },
27010
- anchorOrigin: { horizontal: "right", vertical: "bottom" },
27011
- children: [
27012
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_material28.Typography, { variant: "overline", sx: { px: 2, color: theme.palette.text.secondary }, children: "Engine \xB7 base model" }),
27013
- engines.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_material28.MenuItem, { disabled: true, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_material28.Typography, { variant: "body2", children: "No engines available" }) }),
27014
- engines.map((engine) => {
27015
- const badges = [
27016
- engine.vision && "vision",
27017
- engine.tools && "tools",
27018
- engine.thinking && "thinking",
27019
- engine.cloud && "cloud"
27020
- ].filter(Boolean);
27021
- const isGated = engine.cloud && !frontierEligible;
27022
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
27023
- import_material28.MenuItem,
27024
- {
27025
- selected: engine.id === resolvedEngineId,
27026
- disabled: !engine.available || isGated,
27027
- onClick: () => {
27028
- if (isGated) return;
27029
- useEngineStore.getState().setSelectedEngine(engine.id);
27030
- setEngineAnchorEl(null);
27031
- },
27032
- sx: {
27033
- display: "flex",
27034
- flexDirection: "column",
27035
- alignItems: "flex-start",
27036
- gap: 0.5,
27037
- py: 1,
27038
- px: 2,
27039
- maxWidth: 360,
27040
- whiteSpace: "normal",
27041
- // Keep gated rows readable (MUI disabled dims to ~38%) so the
27042
- // upsell stays legible.
27043
- ...isGated ? { opacity: 1, "&.Mui-disabled": { opacity: 1 } } : {}
27044
- },
27045
- children: [
27046
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_material28.Box, { sx: { display: "flex", alignItems: "center", gap: 1, width: "100%" }, children: [
27047
- isGated && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
27048
- LockIcon,
27049
- {
27050
- fontSize: "small",
27051
- sx: { fontSize: "0.95rem", color: theme.palette.text.secondary }
27052
- }
27053
- ),
27054
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
27055
- import_material28.Typography,
27056
- {
27057
- variant: "body2",
27058
- sx: {
27059
- fontWeight: 600,
27060
- flex: 1,
27061
- color: isGated ? theme.palette.text.secondary : void 0
27062
- },
27063
- children: cleanEngineName(engine.displayName)
27064
- }
27065
- ),
27066
- engine.id === resolvedEngineId && !isGated && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_material28.Box, { sx: { width: 8, height: 8, borderRadius: "50%", bgcolor: theme.palette.primary.main } })
27067
- ] }),
27068
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_material28.Typography, { variant: "caption", sx: { color: theme.palette.text.secondary }, children: isGated ? "Premium engine \u2014 available on a paid plan." : engine.available ? engine.description : engine.unavailableReason || "Unavailable" }),
27069
- isGated && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
27070
- import_material28.Button,
27071
- {
27072
- size: "small",
27073
- variant: "text",
27074
- startIcon: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(LockIcon, { sx: { fontSize: "0.85rem" } }),
27075
- onClick: (e) => {
27076
- e.stopPropagation();
27077
- setEngineAnchorEl(null);
27078
- safeNavigate(plansPath);
27079
- },
27080
- sx: {
27081
- mt: 0.25,
27082
- px: 0.75,
27083
- py: 0.1,
27084
- minWidth: 0,
27085
- textTransform: "none",
27086
- fontSize: "0.7rem",
27087
- fontWeight: 600,
27088
- color: theme.palette.primary.main,
27089
- // Re-enable pointer events the disabled MenuItem strips.
27090
- pointerEvents: "auto"
27091
- },
27092
- children: "Upgrade to unlock"
27093
- }
27094
- ),
27095
- badges.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_material28.Box, { sx: { display: "flex", gap: 0.5, flexWrap: "wrap", mt: 0.25 }, children: badges.map((b) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
27096
- import_material28.Box,
27097
- {
27098
- sx: {
27099
- fontSize: "0.65rem",
27100
- px: 0.75,
27101
- py: 0.1,
27102
- borderRadius: 1,
27103
- bgcolor: theme.palette.primary.main + "22",
27104
- color: theme.palette.primary.main
27105
- },
27106
- children: b
27107
- },
27108
- b
27109
- )) })
27110
- ]
27111
- },
27112
- engine.id
27113
- );
27114
- })
27115
- ]
27116
- }
27117
- ),
27118
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
27119
- import_material28.Menu,
27120
- {
27121
- anchorEl: modelAnchorEl,
27122
- open: Boolean(modelAnchorEl),
27123
- onClose: () => setModelAnchorEl(null),
27124
- transformOrigin: { horizontal: "right", vertical: "top" },
27125
- anchorOrigin: { horizontal: "right", vertical: "bottom" },
27126
- PaperProps: {
27127
- sx: {
27128
- bgcolor: menuBackground,
27129
- color: menuText,
27130
- fontSize: "0.875rem",
27131
- zIndex: 2e4,
27132
- borderRadius: 2,
27133
- border: `1px solid ${border}`,
27134
- boxShadow: theme.palette.mode === "dark" ? "0 8px 32px rgba(0,0,0,0.5)" : "0 8px 32px rgba(0,0,0,0.2)",
27135
- minWidth: 200,
27136
- "& .MuiMenuItem-root": {
27137
- transition: "all 0.15s ease-in-out",
27138
- borderRadius: "6px",
27139
- margin: "2px 4px",
27140
- "&:hover": {
27141
- bgcolor: theme.palette.mode === "dark" ? "rgba(255,255,255,0.08)" : "rgba(0,0,0,0.04)",
27142
- transform: "translateX(2px)"
27143
- },
27144
- "&.Mui-selected": {
27145
- bgcolor: theme.palette.primary.main + "20",
27146
- color: theme.palette.primary.main,
27147
- "&:hover": {
27148
- bgcolor: theme.palette.primary.main + "30"
27149
- }
27150
- }
27151
- }
27152
- }
27153
- },
27154
- children: availableModels.map((model) => /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
27155
- import_material28.MenuItem,
27156
- {
27157
- selected: model.name === selectedModel,
27158
- onClick: () => {
27159
- if (!currentConversation?.history.length || currentConversation?.history.length === 0) {
27160
- handleModelChange(model.name);
27161
- useModelStore.getState().setSelectedModel(model.name);
27162
- (async () => {
27163
- try {
27164
- const storeConfigs6 = [{ name: "config", keyPath: "id" }];
27165
- const current = await indexedDBService_default.get(
27166
- "banditConfig",
27167
- 1,
27168
- "config",
27169
- "main",
27170
- storeConfigs6
27171
- );
27172
- const updated = {
27173
- ...current ?? {},
27174
- id: "main",
27175
- model: {
27176
- ...current?.model || {},
27177
- name: model.name,
27178
- selectedModel: model.name
27179
- }
27180
- };
27181
- await indexedDBService_default.put("banditConfig", 1, "config", updated, storeConfigs6);
27182
- } catch (err) {
27183
- debugLogger.error("Failed to persist selectedModel to IndexedDB", { error: err });
27184
- }
27185
- })();
27186
- setModelAnchorEl(null);
27187
- return;
27188
- }
27189
- setPendingModel(model.name);
27190
- setConfirmModelChangeOpen(true);
27191
- setModelAnchorEl(null);
27192
- },
27193
- sx: {
27194
- display: "flex",
27195
- alignItems: "center",
27196
- gap: 1.5,
27197
- minHeight: 48,
27198
- px: 2
27199
- },
27200
- children: [
27201
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
27202
- import_material27.Avatar,
27203
- {
27204
- src: model.avatarBase64 || modelAvatars2[model.name] || banditHead2,
27205
- alt: model.name,
27206
- sx: {
27207
- width: 28,
27208
- height: 28,
27209
- filter: "brightness(1.7)",
27210
- transition: "all 0.2s ease-in-out"
27211
- }
27212
- }
27213
- ),
27214
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_material28.Box, { sx: { flex: 1 }, children: [
27215
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_material28.Typography, { variant: "body2", sx: { fontWeight: 500 }, children: model.name.replace("Bandit-", "") }),
27216
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_material28.Typography, { variant: "caption", sx: { color: theme.palette.text.secondary, display: "block" }, children: model.name === selectedModel ? "Currently active" : "Switch to this AI" })
27217
- ] }),
27218
- model.name === selectedModel && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
27219
- import_material28.Box,
27220
- {
27221
- sx: {
27222
- width: 8,
27223
- height: 8,
27224
- borderRadius: "50%",
27225
- bgcolor: theme.palette.primary.main
27226
- }
27227
- }
27228
- )
27229
- ]
27230
- },
27231
- model.name
27232
- ))
27233
- }
27234
- ),
27235
- isTTSAvailable && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
27236
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_material28.Tooltip, { title: `Voice: ${selectedVoice ? toTitleCase(selectedVoice.split("-")[1]) : "Default"}`, arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
27072
+ children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
27073
+ import_material28.Tooltip,
27074
+ {
27075
+ title: isIncognitoActive ? "End temporary chat" : "Temporary chat \u2014 not saved anywhere",
27076
+ arrow: true,
27077
+ children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
27237
27078
  import_material28.IconButton,
27238
27079
  {
27239
- onClick: (e) => setVoiceAnchorEl(e.currentTarget),
27080
+ onClick: toggleIncognito,
27081
+ "aria-label": isIncognitoActive ? "End temporary chat" : "Start temporary chat",
27082
+ "aria-pressed": isIncognitoActive,
27240
27083
  sx: {
27241
27084
  ...pillButtonStyles,
27242
- bgcolor: theme.palette.info.main + "20",
27243
- color: theme.palette.info.main,
27244
- "&:hover": {
27245
- ...pillButtonStyles["&:hover"],
27246
- bgcolor: theme.palette.info.main + "30"
27085
+ ...isIncognitoActive && {
27086
+ bgcolor: theme.palette.text.primary,
27087
+ color: theme.palette.getContrastText(theme.palette.text.primary),
27088
+ "&:hover": { bgcolor: theme.palette.text.primary }
27247
27089
  }
27248
27090
  },
27249
- "aria-label": `Change voice. Currently using ${selectedVoice ? toTitleCase(selectedVoice.split("-")[1]) : "default"}`,
27250
- children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(RecordVoiceOverIcon, { fontSize: "small" })
27251
- }
27252
- ) }),
27253
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
27254
- import_material28.Menu,
27255
- {
27256
- anchorEl: voiceAnchorEl,
27257
- open: Boolean(voiceAnchorEl),
27258
- onClose: () => setVoiceAnchorEl(null),
27259
- transformOrigin: { horizontal: "right", vertical: "top" },
27260
- anchorOrigin: { horizontal: "right", vertical: "bottom" },
27261
- PaperProps: {
27262
- sx: {
27263
- bgcolor: menuBackground,
27264
- color: menuText,
27265
- fontSize: "0.875rem",
27266
- zIndex: 2e4,
27267
- borderRadius: 2,
27268
- border: `1px solid ${border}`,
27269
- boxShadow: theme.palette.mode === "dark" ? "0 8px 32px rgba(0,0,0,0.5)" : "0 8px 32px rgba(0,0,0,0.2)",
27270
- minWidth: 180,
27271
- "& .MuiMenuItem-root": {
27272
- transition: "all 0.15s ease-in-out",
27273
- borderRadius: "6px",
27274
- margin: "2px 4px",
27275
- minHeight: 40,
27276
- "&:hover": {
27277
- bgcolor: theme.palette.mode === "dark" ? "rgba(255,255,255,0.08)" : "rgba(0,0,0,0.04)",
27278
- transform: "translateX(2px)"
27279
- },
27280
- "&.Mui-selected": {
27281
- bgcolor: theme.palette.info.main + "20",
27282
- color: theme.palette.info.main,
27283
- "&:hover": {
27284
- bgcolor: theme.palette.info.main + "30"
27285
- }
27286
- }
27287
- }
27288
- }
27289
- },
27290
- children: availableVoices.length > 0 ? availableVoices.map((voice) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
27291
- import_material28.MenuItem,
27292
- {
27293
- selected: voice === selectedVoice,
27294
- onClick: () => {
27295
- handleVoiceChange(voice);
27296
- setVoiceAnchorEl(null);
27297
- },
27298
- children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_material28.Box, { sx: { display: "flex", alignItems: "center", gap: 1, width: "100%" }, children: [
27299
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(RecordVoiceOverIcon, { fontSize: "small", sx: { color: theme.palette.text.secondary } }),
27300
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_material28.Box, { sx: { flex: 1 }, children: [
27301
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_material28.Typography, { variant: "body2", children: toTitleCase(voice.split("-")[1]) }),
27302
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_material28.Typography, { variant: "caption", sx: { color: theme.palette.text.secondary }, children: voice === selectedVoice ? "Currently active" : "Switch to this voice" })
27303
- ] }),
27304
- voice === selectedVoice && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
27305
- import_material28.Box,
27306
- {
27307
- sx: {
27308
- width: 8,
27309
- height: 8,
27310
- borderRadius: "50%",
27311
- bgcolor: theme.palette.info.main
27312
- }
27313
- }
27314
- )
27315
- ] })
27316
- },
27317
- voice
27318
- )) : /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_material28.MenuItem, { disabled: true, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_material28.Typography, { variant: "body2", color: "text.secondary", children: "No voices available" }) })
27091
+ children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(GhostIcon, {})
27319
27092
  }
27320
27093
  )
27321
- ] })
27322
- ]
27094
+ }
27095
+ )
27323
27096
  }
27324
27097
  )
27325
27098
  ]
@@ -30201,13 +29974,13 @@ var init_feedback = __esm({
30201
29974
  });
30202
29975
 
30203
29976
  // src/components/feedback/FeedbackButton.tsx
30204
- var import_react38, import_material31, import_lucide_react13, import_jsx_runtime32, FeedbackButton;
29977
+ var import_react38, import_material31, import_lucide_react14, import_jsx_runtime32, FeedbackButton;
30205
29978
  var init_FeedbackButton = __esm({
30206
29979
  "src/components/feedback/FeedbackButton.tsx"() {
30207
29980
  "use strict";
30208
29981
  import_react38 = require("react");
30209
29982
  import_material31 = require("@mui/material");
30210
- import_lucide_react13 = require("lucide-react");
29983
+ import_lucide_react14 = require("lucide-react");
30211
29984
  init_feedback();
30212
29985
  import_jsx_runtime32 = require("react/jsx-runtime");
30213
29986
  FeedbackButton = ({
@@ -30231,7 +30004,7 @@ var init_FeedbackButton = __esm({
30231
30004
  import_material31.Button,
30232
30005
  {
30233
30006
  variant: "outlined",
30234
- startIcon: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react13.MessageCircle, {}),
30007
+ startIcon: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react14.MessageCircle, {}),
30235
30008
  onClick: handleOpen,
30236
30009
  className,
30237
30010
  size,
@@ -30260,7 +30033,7 @@ var init_FeedbackButton = __esm({
30260
30033
  transform: "translateY(-1px)"
30261
30034
  }
30262
30035
  },
30263
- children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react13.MessageCircle, {})
30036
+ children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react14.MessageCircle, {})
30264
30037
  }
30265
30038
  ) }),
30266
30039
  /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
@@ -30319,7 +30092,7 @@ var init_FeedbackButton = __esm({
30319
30092
  }
30320
30093
  }
30321
30094
  },
30322
- children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react13.MessageCircle, {})
30095
+ children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react14.MessageCircle, {})
30323
30096
  }
30324
30097
  )
30325
30098
  }
@@ -30917,7 +30690,8 @@ var init_chat2 = __esm({
30917
30690
  const [inputHeight, setInputHeight] = (0, import_react41.useState)(80);
30918
30691
  const [isSubmitting, setIsSubmitting] = (0, import_react41.useState)(false);
30919
30692
  const [pendingMessage, setPendingMessage] = (0, import_react41.useState)(null);
30920
- const { conversations, currentId, _hasHydrated, hydrate } = useConversationStore();
30693
+ const { conversations, currentId, _hasHydrated, hydrate, toggleIncognito } = useConversationStore();
30694
+ const isTemporaryChat = Boolean(conversations.find((c) => c.id === currentId)?.incognito);
30921
30695
  const [isMobile, setIsMobile] = (0, import_react41.useState)(false);
30922
30696
  const [drawerOpen, setDrawerOpen] = (0, import_react41.useState)(false);
30923
30697
  const [mobileConversationsOpen, setMobileConversationsOpen] = (0, import_react41.useState)(false);
@@ -31770,12 +31544,11 @@ var init_chat2 = __esm({
31770
31544
  width: !isMobile && canvasOpen ? `calc(100vw - ${drawerOpen ? "340px" : "0px"} - ${CANVAS_WIDTH})` : drawerOpen && !isMobile ? "calc(100vw - 340px)" : "100vw",
31771
31545
  zIndex: 0,
31772
31546
  // Claude-style push (mobile only; desktop stays flush): the chat
31773
- // shell slides right and shrinks slightly into a rounded card. The
31774
- // scale insets the card from every screen edge so all four rounded
31775
- // corners stay visible — a full-height 100dvh card had its bottom
31776
- // corners clipped at the device edge in the PWA. Width kept in sync
31547
+ // shell slides right as a full-height rounded card — exactly like
31548
+ // Claude iOS, where the card runs edge-to-edge vertically and the
31549
+ // hairline border keeps the corners legible. Width kept in sync
31777
31550
  // with the drawer in enhanced-mobile-conversations-modal.tsx.
31778
- transform: isMobile && mobileConversationsOpen ? "translateX(min(calc(100vw - 56px), 360px)) scale(0.96)" : "none",
31551
+ transform: isMobile && mobileConversationsOpen ? "translateX(min(calc(100vw - 56px), 360px))" : "none",
31779
31552
  borderRadius: isMobile && mobileConversationsOpen ? "24px" : 0,
31780
31553
  // Hairline border so the rounded card reads even when the backdrop
31781
31554
  // is the same near-black as the shell.
@@ -31798,30 +31571,82 @@ var init_chat2 = __esm({
31798
31571
  onMobileConversationsOpenChange: setMobileConversationsOpen
31799
31572
  }
31800
31573
  ),
31801
- conversations.find((c) => c.id === currentId)?.incognito && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
31802
- import_material33.Box,
31803
- {
31804
- sx: (theme) => ({
31805
- position: "absolute",
31806
- top: `calc(${theme.spacing(8)} + env(safe-area-inset-top, 0px))`,
31807
- left: "50%",
31808
- transform: "translateX(-50%)",
31809
- zIndex: 1200,
31810
- px: 1.5,
31811
- py: 0.5,
31812
- borderRadius: 999,
31813
- fontSize: "0.75rem",
31814
- fontWeight: 600,
31815
- color: theme.palette.text.secondary,
31816
- bgcolor: theme.palette.mode === "dark" ? "rgba(255,255,255,0.08)" : "rgba(0,0,0,0.06)",
31817
- border: `1px solid ${theme.palette.divider}`,
31818
- backdropFilter: "blur(8px)",
31819
- pointerEvents: "none",
31820
- whiteSpace: "nowrap"
31821
- }),
31822
- children: "Incognito \u2014 this chat won't be saved"
31823
- }
31824
- ),
31574
+ isTemporaryChat && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_jsx_runtime34.Fragment, { children: [
31575
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
31576
+ import_material33.Box,
31577
+ {
31578
+ sx: (theme) => ({
31579
+ position: "absolute",
31580
+ inset: 0,
31581
+ border: `2px solid ${theme.palette.mode === "dark" ? "rgba(255,255,255,0.45)" : "rgba(0,0,0,0.4)"}`,
31582
+ borderRadius: "inherit",
31583
+ zIndex: 1400,
31584
+ pointerEvents: "none"
31585
+ })
31586
+ }
31587
+ ),
31588
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
31589
+ import_material33.Box,
31590
+ {
31591
+ sx: (theme) => ({
31592
+ position: "absolute",
31593
+ top: `calc(${theme.spacing(8)} + env(safe-area-inset-top, 0px))`,
31594
+ left: "50%",
31595
+ transform: "translateX(-50%)",
31596
+ zIndex: 1401,
31597
+ display: "flex",
31598
+ alignItems: "center",
31599
+ gap: 0.75,
31600
+ pl: 1.5,
31601
+ pr: 0.75,
31602
+ py: 0.4,
31603
+ borderRadius: 999,
31604
+ fontSize: "0.78rem",
31605
+ fontWeight: 600,
31606
+ color: theme.palette.text.primary,
31607
+ bgcolor: theme.palette.mode === "dark" ? "rgba(255,255,255,0.12)" : "rgba(0,0,0,0.08)",
31608
+ border: `1px solid ${theme.palette.divider}`,
31609
+ backdropFilter: "blur(8px)",
31610
+ whiteSpace: "nowrap"
31611
+ }),
31612
+ children: [
31613
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_material33.Box, { component: "span", "aria-hidden": true, sx: { fontSize: "0.9rem", lineHeight: 1 }, children: "\u{1F47B}" }),
31614
+ "Temporary chat",
31615
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
31616
+ import_material33.Box,
31617
+ {
31618
+ component: "button",
31619
+ type: "button",
31620
+ onClick: toggleIncognito,
31621
+ "aria-label": "End temporary chat",
31622
+ sx: (theme) => ({
31623
+ display: "inline-flex",
31624
+ alignItems: "center",
31625
+ justifyContent: "center",
31626
+ width: 20,
31627
+ height: 20,
31628
+ ml: 0.25,
31629
+ p: 0,
31630
+ border: "none",
31631
+ borderRadius: "50%",
31632
+ cursor: "pointer",
31633
+ color: theme.palette.text.secondary,
31634
+ bgcolor: "transparent",
31635
+ font: "inherit",
31636
+ fontSize: "0.85rem",
31637
+ lineHeight: 1,
31638
+ "&:hover": {
31639
+ bgcolor: theme.palette.mode === "dark" ? "rgba(255,255,255,0.15)" : "rgba(0,0,0,0.1)",
31640
+ color: theme.palette.text.primary
31641
+ }
31642
+ }),
31643
+ children: "\u2715"
31644
+ }
31645
+ )
31646
+ ]
31647
+ }
31648
+ )
31649
+ ] }),
31825
31650
  /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
31826
31651
  import_material33.Box,
31827
31652
  {
@@ -39327,7 +39152,7 @@ init_useFeatures();
39327
39152
  // src/components/shared/ProcessingOverlay.tsx
39328
39153
  var import_react55 = require("react");
39329
39154
  var import_material46 = require("@mui/material");
39330
- var import_lucide_react14 = require("lucide-react");
39155
+ var import_lucide_react15 = require("lucide-react");
39331
39156
  var import_jsx_runtime46 = require("react/jsx-runtime");
39332
39157
  var ninjaFloat = import_material46.keyframes`
39333
39158
  0%, 100% { transform: translateY(0px) rotate(0deg); }
@@ -39352,28 +39177,28 @@ var defaultSteps = [
39352
39177
  id: "upload",
39353
39178
  title: "Uploading to Cloud",
39354
39179
  description: "Our digital ninjas are securely transferring your file...",
39355
- icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react14.CloudUpload, {}),
39180
+ icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react15.CloudUpload, {}),
39356
39181
  duration: 5
39357
39182
  },
39358
39183
  {
39359
39184
  id: "analyze",
39360
39185
  title: "AI Analysis",
39361
39186
  description: "Advanced AI robots are reading and understanding your content...",
39362
- icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react14.Brain, {}),
39187
+ icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react15.Brain, {}),
39363
39188
  duration: 15
39364
39189
  },
39365
39190
  {
39366
39191
  id: "embed",
39367
39192
  title: "Making It Searchable",
39368
39193
  description: "We turn the content into a private, searchable index...",
39369
- icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react14.Cpu, {}),
39194
+ icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react15.Cpu, {}),
39370
39195
  duration: 10
39371
39196
  },
39372
39197
  {
39373
39198
  id: "optimize",
39374
39199
  title: "Optimizing Search",
39375
39200
  description: "Organizing everything for quick, reliable answers...",
39376
- icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react14.Sparkles, {}),
39201
+ icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react15.Sparkles, {}),
39377
39202
  duration: 8
39378
39203
  }
39379
39204
  ];
@@ -39519,7 +39344,7 @@ var ProcessingOverlay = ({
39519
39344
  animation: `${pulse} 3s ease-in-out infinite`,
39520
39345
  color: theme.palette.secondary.main
39521
39346
  },
39522
- children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react14.Bot, {})
39347
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react15.Bot, {})
39523
39348
  }
39524
39349
  ),
39525
39350
  /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
@@ -39533,7 +39358,7 @@ var ProcessingOverlay = ({
39533
39358
  color: theme.palette.primary.main,
39534
39359
  animationDelay: "1s"
39535
39360
  },
39536
- children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react14.Zap, {})
39361
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react15.Zap, {})
39537
39362
  }
39538
39363
  )
39539
39364
  ] }),
@@ -45866,6 +45691,23 @@ var Management = () => {
45866
45691
  boxShadow: "0 2px 8px rgba(0,0,0,0.1)"
45867
45692
  },
45868
45693
  children: [
45694
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
45695
+ import_material54.Button,
45696
+ {
45697
+ onClick: () => navigate("/chat"),
45698
+ onMouseEnter: preloadChatPage,
45699
+ "aria-label": "Back to chat",
45700
+ sx: {
45701
+ minWidth: 48,
45702
+ minHeight: 48,
45703
+ p: 1.5,
45704
+ borderRadius: 2,
45705
+ color: "primary.main",
45706
+ bgcolor: (theme2) => theme2.palette.mode === "dark" ? "rgba(255,255,255,0.08)" : "rgba(0,0,0,0.04)"
45707
+ },
45708
+ children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(ChevronLeftIcon, { sx: { fontSize: 22 } })
45709
+ }
45710
+ ),
45869
45711
  /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
45870
45712
  import_material54.Button,
45871
45713
  {
@@ -46518,7 +46360,7 @@ init_streaming_tts();
46518
46360
 
46519
46361
  // src/modals/SubscriptionExpiredModal.tsx
46520
46362
  var import_material56 = require("@mui/material");
46521
- var import_lucide_react15 = require("lucide-react");
46363
+ var import_lucide_react16 = require("lucide-react");
46522
46364
  var import_jsx_runtime56 = require("react/jsx-runtime");
46523
46365
  var SubscriptionExpiredModal = ({
46524
46366
  open,
@@ -46557,7 +46399,7 @@ var SubscriptionExpiredModal = ({
46557
46399
  },
46558
46400
  children: [
46559
46401
  /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_material56.DialogTitle, { sx: { textAlign: "center", pb: 1 }, children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_material56.Box, { sx: { display: "flex", alignItems: "center", justifyContent: "center", gap: 1, mb: 1 }, children: [
46560
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react15.AlertTriangle, { size: 32, color: "warning" }),
46402
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react16.AlertTriangle, { size: 32, color: "warning" }),
46561
46403
  /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_material56.Typography, { variant: "h5", component: "span", fontWeight: "bold", children: "Subscription Expired" })
46562
46404
  ] }) }),
46563
46405
  /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_material56.DialogContent, { sx: { pt: 1 }, children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_material56.Stack, { spacing: 2, children: [
@@ -46585,7 +46427,7 @@ var SubscriptionExpiredModal = ({
46585
46427
  {
46586
46428
  onClick: handleNavigateHome,
46587
46429
  variant: "outlined",
46588
- startIcon: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react15.Home, {}),
46430
+ startIcon: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react16.Home, {}),
46589
46431
  size: "large",
46590
46432
  sx: { minWidth: 140 },
46591
46433
  children: "Go Home"
@@ -46596,7 +46438,7 @@ var SubscriptionExpiredModal = ({
46596
46438
  {
46597
46439
  onClick: handleManageSubscription,
46598
46440
  variant: "contained",
46599
- startIcon: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react15.CreditCard, {}),
46441
+ startIcon: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react16.CreditCard, {}),
46600
46442
  size: "large",
46601
46443
  color: "primary",
46602
46444
  sx: { minWidth: 140 },