@burtson-labs/bandit-engine 2.0.122 → 2.0.124

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.
package/dist/index.js CHANGED
@@ -18311,7 +18311,7 @@ var init_FeedbackModal = __esm({
18311
18311
  sx: {
18312
18312
  display: "grid",
18313
18313
  gridTemplateRows: "auto auto auto auto",
18314
- rowGap: "24px",
18314
+ rowGap: "16px",
18315
18315
  columnGap: "0px",
18316
18316
  width: "100%"
18317
18317
  },
@@ -18327,35 +18327,6 @@ var init_FeedbackModal = __esm({
18327
18327
  mb: 0
18328
18328
  },
18329
18329
  children: [
18330
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
18331
- import_material17.Box,
18332
- {
18333
- sx: {
18334
- gridColumn: "1 / -1",
18335
- display: "flex",
18336
- alignItems: "center",
18337
- gap: "8px",
18338
- mb: 0,
18339
- mt: 2,
18340
- alignSelf: "end"
18341
- },
18342
- children: [
18343
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react5.MessageSquare, { size: 20, color: theme.palette.text.primary }),
18344
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
18345
- import_material17.Typography,
18346
- {
18347
- variant: "h6",
18348
- sx: {
18349
- fontWeight: 600,
18350
- color: theme.palette.text.primary,
18351
- mb: 0
18352
- },
18353
- children: "Feedback Details"
18354
- }
18355
- )
18356
- ]
18357
- }
18358
- ),
18359
18330
  /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
18360
18331
  import_material17.TextField,
18361
18332
  {
@@ -18497,7 +18468,7 @@ var init_FeedbackModal = __esm({
18497
18468
  {
18498
18469
  fullWidth: true,
18499
18470
  multiline: true,
18500
- rows: 5,
18471
+ rows: 3,
18501
18472
  label: "Description",
18502
18473
  value: formData.description,
18503
18474
  onChange: handleInputChange("description"),
@@ -18548,118 +18519,37 @@ var init_FeedbackModal = __esm({
18548
18519
  /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
18549
18520
  import_material17.Box,
18550
18521
  {
18551
- className: "impact-assessment-card impact-section",
18552
- sx: {
18553
- flex: 1,
18554
- minWidth: 300,
18555
- display: "flex",
18556
- flexDirection: "column",
18557
- height: "100%",
18558
- p: 0
18559
- },
18522
+ className: "impact-section",
18523
+ sx: { flex: 1, minWidth: 260, display: "flex", flexDirection: "column" },
18560
18524
  children: [
18561
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_material17.Box, { sx: { display: "flex", alignItems: "center", gap: "8px", mb: 3 }, children: [
18562
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react5.Brain, { size: 20, color: theme.palette.warning.main }),
18563
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_material17.Typography, { variant: "h6", sx: { fontWeight: 600, color: theme.palette.text.primary }, children: "Impact Assessment" })
18525
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_material17.Typography, { variant: "body2", sx: { fontWeight: 600, mb: 0.5 }, children: [
18526
+ "How annoying is this?",
18527
+ " ",
18528
+ ["\u{1F60A}", "\u{1F610}", "\u{1F644}", "\u{1F620}", "\u{1F92C}"][(formData.annoyanceLevel ?? 3) - 1],
18529
+ " ",
18530
+ "(",
18531
+ formData.annoyanceLevel ?? 3,
18532
+ "/5)"
18564
18533
  ] }),
18565
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { style: { height: "100%", display: "flex", flexDirection: "column", justifyContent: "space-between" }, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
18566
- import_material17.Paper,
18534
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_material17.Box, { sx: { px: 1 }, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
18535
+ import_material17.Slider,
18567
18536
  {
18568
- variant: "outlined",
18537
+ size: "small",
18538
+ value: formData.annoyanceLevel,
18539
+ onChange: (_, value) => setFormData((prev) => ({ ...prev, annoyanceLevel: value })),
18540
+ min: 1,
18541
+ max: 5,
18542
+ step: 1,
18543
+ marks: true,
18569
18544
  sx: {
18570
- p: 4,
18571
- borderRadius: 3,
18572
- minHeight: 180,
18573
- background: theme.palette.mode === "dark" ? "linear-gradient(135deg, rgba(255,255,255,0.03) 0%, rgba(255,255,255,0.01) 100%)" : "linear-gradient(135deg, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.03) 100%)",
18574
- border: `1px solid ${theme.palette.divider}`,
18575
- transition: "all 0.2s ease",
18576
- display: "flex",
18577
- flexDirection: "column",
18578
- flex: 1,
18579
- justifyContent: "center",
18580
- height: "100%",
18581
- "&:hover": {
18582
- transform: "translateY(-2px)",
18583
- boxShadow: theme.palette.mode === "dark" ? "0 8px 24px rgba(0,0,0,0.4)" : "0 8px 24px rgba(0,0,0,0.12)"
18545
+ "& .MuiSlider-track": {
18546
+ background: `linear-gradient(90deg, ${theme.palette.success.main}, ${theme.palette.warning.main}, ${theme.palette.error.main})`,
18547
+ border: "none"
18548
+ },
18549
+ "& .MuiSlider-thumb": {
18550
+ background: `linear-gradient(135deg, ${theme.palette.warning.main}, ${theme.palette.warning.dark})`
18584
18551
  }
18585
- },
18586
- children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_material17.Stack, { spacing: 3, children: [
18587
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_material17.Typography, { variant: "subtitle1", sx: { fontWeight: 600, display: "flex", alignItems: "center", gap: 2 }, children: [
18588
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
18589
- import_material17.Box,
18590
- {
18591
- sx: {
18592
- width: 28,
18593
- height: 28,
18594
- borderRadius: "50%",
18595
- bgcolor: theme.palette.warning.main + "20",
18596
- display: "flex",
18597
- alignItems: "center",
18598
- justifyContent: "center",
18599
- fontSize: "14px"
18600
- },
18601
- children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react5.Brain, { size: 22, color: theme.palette.warning.main })
18602
- }
18603
- ),
18604
- "How annoying is this issue? (",
18605
- formData.annoyanceLevel,
18606
- "/5)"
18607
- ] }),
18608
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_material17.Box, { sx: { px: 2, py: 1 }, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
18609
- import_material17.Slider,
18610
- {
18611
- value: formData.annoyanceLevel,
18612
- onChange: (_, value) => setFormData((prev) => ({ ...prev, annoyanceLevel: value })),
18613
- min: 1,
18614
- max: 5,
18615
- step: 1,
18616
- marks: [
18617
- { value: 1, label: "\u{1F60A} Not at all" },
18618
- { value: 2, label: "\u{1F610} Slightly" },
18619
- { value: 3, label: "\u{1F644} Moderately" },
18620
- { value: 4, label: "\u{1F620} Very" },
18621
- { value: 5, label: "\u{1F92C} Extremely" }
18622
- ],
18623
- sx: {
18624
- height: 8,
18625
- "& .MuiSlider-mark": {
18626
- backgroundColor: theme.palette.divider,
18627
- width: 3,
18628
- height: 3
18629
- },
18630
- "& .MuiSlider-markLabel": {
18631
- fontSize: "0.8rem",
18632
- color: theme.palette.text.secondary,
18633
- transform: "translateX(-50%)",
18634
- whiteSpace: "nowrap",
18635
- top: 32,
18636
- fontWeight: 500
18637
- },
18638
- "& .MuiSlider-thumb": {
18639
- width: 24,
18640
- height: 24,
18641
- background: `linear-gradient(135deg, ${theme.palette.warning.main}, ${theme.palette.warning.dark})`,
18642
- boxShadow: `0 4px 12px ${theme.palette.warning.main}40`,
18643
- "&:hover, &.Mui-focusVisible": {
18644
- boxShadow: `0 0 0 12px ${theme.palette.warning.main}20, 0 4px 12px ${theme.palette.warning.main}40`
18645
- }
18646
- },
18647
- "& .MuiSlider-track": {
18648
- background: `linear-gradient(90deg, ${theme.palette.success.main}, ${theme.palette.warning.main}, ${theme.palette.error.main})`,
18649
- height: 6,
18650
- border: "none"
18651
- },
18652
- "& .MuiSlider-rail": {
18653
- height: 6,
18654
- backgroundColor: theme.palette.divider,
18655
- opacity: 0.3
18656
- },
18657
- mb: 5
18658
- // Space for labels
18659
- }
18660
- }
18661
- ) })
18662
- ] })
18552
+ }
18663
18553
  }
18664
18554
  ) })
18665
18555
  ]
@@ -18678,109 +18568,63 @@ var init_FeedbackModal = __esm({
18678
18568
  p: 0
18679
18569
  },
18680
18570
  children: [
18681
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_material17.Box, { sx: { display: "flex", alignItems: "center", gap: "8px", mb: 3 }, children: [
18682
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react5.Paperclip, { size: 20, color: theme.palette.primary.main }),
18683
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_material17.Typography, { variant: "h6", sx: { fontWeight: 600, color: theme.palette.text.primary }, children: "Attachments" })
18684
- ] }),
18685
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { style: { height: "100%", display: "flex", flexDirection: "column", justifyContent: "space-between" }, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
18686
- import_material17.Box,
18687
- {
18688
- sx: {
18689
- height: "100%",
18690
- display: "flex",
18691
- flexDirection: "column",
18692
- justifyContent: "center",
18693
- p: 0,
18694
- mb: 0,
18695
- backgroundColor: "transparent",
18696
- boxShadow: "none",
18697
- border: "none"
18698
- },
18699
- onClick: () => fileInputRef.current?.click(),
18700
- children: [
18701
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
18702
- "input",
18703
- {
18704
- ref: fileInputRef,
18705
- type: "file",
18706
- accept: "image/*",
18707
- style: { display: "none" },
18708
- onChange: handleFileUpload
18709
- }
18710
- ),
18711
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
18712
- import_material17.Box,
18713
- {
18714
- sx: {
18715
- flex: 1,
18716
- display: "flex",
18717
- flexDirection: "column",
18718
- justifyContent: "center",
18719
- alignItems: "center",
18720
- p: 2,
18721
- border: "2px dashed",
18722
- borderColor: (theme2) => theme2.palette.divider,
18723
- borderRadius: 2,
18724
- height: "100%",
18725
- mb: 0,
18726
- backgroundColor: "transparent",
18727
- boxShadow: "none"
18728
- },
18729
- children: [
18730
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
18731
- import_material17.Avatar,
18732
- {
18733
- sx: {
18734
- width: 56,
18735
- height: 56,
18736
- bgcolor: theme.palette.primary.main + "15",
18737
- color: theme.palette.primary.main,
18738
- boxShadow: `0 4px 16px ${theme.palette.primary.main}20`,
18739
- transition: "all 0.3s ease"
18740
- },
18741
- children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react5.Paperclip, { size: 28 })
18742
- }
18743
- ),
18744
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_material17.Box, { sx: { textAlign: "center" }, children: [
18745
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_material17.Typography, { variant: "h6", sx: { fontWeight: 600, mb: 1, fontSize: "1.1rem" }, children: "Attach One Image" }),
18746
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_material17.Typography, { variant: "body2", color: "text.secondary", sx: { mb: 1, fontSize: "0.95rem" }, children: "Click here to upload a single image" }),
18747
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_material17.Typography, { variant: "caption", color: "text.secondary", sx: {
18748
- opacity: 0.8,
18749
- fontSize: "0.85rem",
18750
- background: theme.palette.mode === "dark" ? "rgba(255,255,255,0.05)" : "rgba(0,0,0,0.05)",
18751
- px: 2,
18752
- py: 0.5,
18753
- borderRadius: 1
18754
- }, children: "Support: Images only (JPG, PNG, GIF) - Max 10MB" })
18755
- ] })
18756
- ]
18757
- }
18758
- ),
18759
- (formData.images && formData.images.length > 0 || formData.attachments && formData.attachments.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
18760
- import_material17.Alert,
18761
- {
18762
- severity: "info",
18763
- sx: {
18764
- mt: "auto",
18765
- textAlign: "left",
18766
- fontSize: "0.75rem",
18767
- py: 0.5,
18768
- background: theme.palette.mode === "dark" ? "linear-gradient(135deg, rgba(33,150,243,0.1) 0%, rgba(25,118,210,0.1) 100%)" : "linear-gradient(135deg, rgba(33,150,243,0.05) 0%, rgba(25,118,210,0.05) 100%)",
18769
- border: `1px solid ${theme.palette.info.main}30`,
18770
- "& .MuiAlert-icon": {
18771
- color: theme.palette.info.main,
18772
- fontSize: "0.875rem"
18773
- },
18774
- "& .MuiAlert-message": {
18775
- fontSize: "0.75rem"
18776
- }
18777
- },
18778
- children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_material17.Typography, { variant: "caption", sx: { fontWeight: 600, display: "block" }, children: formData.images && formData.images.length > 0 ? "\u{1F4CE} Image will be copied to clipboard - paste in email!" : "\u{1F4CE} Files ready for email attachment" })
18571
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { style: { display: "flex", flexDirection: "column" }, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_material17.Box, { onClick: () => fileInputRef.current?.click(), children: [
18572
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
18573
+ "input",
18574
+ {
18575
+ ref: fileInputRef,
18576
+ type: "file",
18577
+ accept: "image/*",
18578
+ style: { display: "none" },
18579
+ onChange: handleFileUpload
18580
+ }
18581
+ ),
18582
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
18583
+ import_material17.Box,
18584
+ {
18585
+ sx: {
18586
+ display: "flex",
18587
+ alignItems: "center",
18588
+ gap: 1,
18589
+ px: 1.5,
18590
+ py: 1,
18591
+ border: "1px dashed",
18592
+ borderColor: (theme2) => theme2.palette.divider,
18593
+ borderRadius: 2,
18594
+ cursor: "pointer",
18595
+ color: theme.palette.text.secondary,
18596
+ "&:hover": { borderColor: theme.palette.primary.main, color: theme.palette.primary.main }
18597
+ },
18598
+ children: [
18599
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react5.Paperclip, { size: 18 }),
18600
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_material17.Typography, { variant: "body2", sx: { fontWeight: 500 }, children: "Attach an image" }),
18601
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_material17.Typography, { variant: "caption", color: "text.secondary", sx: { ml: "auto" }, children: "JPG/PNG/GIF \xB7 10MB" })
18602
+ ]
18603
+ }
18604
+ ),
18605
+ (formData.images && formData.images.length > 0 || formData.attachments && formData.attachments.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
18606
+ import_material17.Alert,
18607
+ {
18608
+ severity: "info",
18609
+ sx: {
18610
+ mt: "auto",
18611
+ textAlign: "left",
18612
+ fontSize: "0.75rem",
18613
+ py: 0.5,
18614
+ background: theme.palette.mode === "dark" ? "linear-gradient(135deg, rgba(33,150,243,0.1) 0%, rgba(25,118,210,0.1) 100%)" : "linear-gradient(135deg, rgba(33,150,243,0.05) 0%, rgba(25,118,210,0.05) 100%)",
18615
+ border: `1px solid ${theme.palette.info.main}30`,
18616
+ "& .MuiAlert-icon": {
18617
+ color: theme.palette.info.main,
18618
+ fontSize: "0.875rem"
18619
+ },
18620
+ "& .MuiAlert-message": {
18621
+ fontSize: "0.75rem"
18779
18622
  }
18780
- )
18781
- ]
18782
- }
18783
- ) }),
18623
+ },
18624
+ children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_material17.Typography, { variant: "caption", sx: { fontWeight: 600, display: "block" }, children: formData.images && formData.images.length > 0 ? "\u{1F4CE} Image will be copied to clipboard - paste in email!" : "\u{1F4CE} Files ready for email attachment" })
18625
+ }
18626
+ )
18627
+ ] }) }),
18784
18628
  formData.images && formData.images.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_material17.Box, { sx: { mt: 2 }, children: [
18785
18629
  /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_material17.Box, { sx: { display: "flex", alignItems: "center", gap: 1, mb: 1.5 }, children: [
18786
18630
  /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react5.Camera, { size: 16 }),
@@ -19130,7 +18974,7 @@ var init_voiceModeStore = __esm({
19130
18974
  });
19131
18975
 
19132
18976
  // src/chat/chat-input.tsx
19133
- var import_react23, import_material18, import_styles10, import_shallow, import_jsx_runtime20, ChatInput, chat_input_default;
18977
+ var import_react23, import_material18, import_lucide_react6, import_styles10, import_shallow, import_jsx_runtime20, ChatInput, chat_input_default;
19134
18978
  var init_chat_input = __esm({
19135
18979
  "src/chat/chat-input.tsx"() {
19136
18980
  "use strict";
@@ -19139,6 +18983,7 @@ var init_chat_input = __esm({
19139
18983
  init_conversationStore();
19140
18984
  init_engine_picker();
19141
18985
  init_util();
18986
+ import_lucide_react6 = require("lucide-react");
19142
18987
  init_preferencesStore();
19143
18988
  init_packageSettingsStore();
19144
18989
  init_transcriber();
@@ -19504,7 +19349,7 @@ ${sanitize(
19504
19349
  "&:hover": { bgcolor: hoverBadgeBackground }
19505
19350
  },
19506
19351
  "aria-label": "Change voice",
19507
- children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(RecordVoiceOverIcon, { fontSize: "small" })
19352
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react6.Volume2, { size: 18 })
19508
19353
  }
19509
19354
  ) }, key ?? "voice");
19510
19355
  };
@@ -23074,13 +22919,13 @@ var init_useNetworkStatus = __esm({
23074
22919
  });
23075
22920
 
23076
22921
  // src/chat/project-management-modal.tsx
23077
- var import_react30, import_material21, import_lucide_react6, import_styles12, import_jsx_runtime23, DEFAULT_COLORS2, ProjectManagementModal, project_management_modal_default;
22922
+ var import_react30, import_material21, import_lucide_react7, import_styles12, import_jsx_runtime23, DEFAULT_COLORS2, ProjectManagementModal, project_management_modal_default;
23078
22923
  var init_project_management_modal = __esm({
23079
22924
  "src/chat/project-management-modal.tsx"() {
23080
22925
  "use strict";
23081
22926
  import_react30 = require("react");
23082
22927
  import_material21 = require("@mui/material");
23083
- import_lucide_react6 = require("lucide-react");
22928
+ import_lucide_react7 = require("lucide-react");
23084
22929
  import_styles12 = require("@mui/material/styles");
23085
22930
  init_projectStore();
23086
22931
  init_conversationStore();
@@ -23309,7 +23154,7 @@ var init_project_management_modal = __esm({
23309
23154
  flex: 1
23310
23155
  },
23311
23156
  children: [
23312
- 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_react6.ArrowLeft, { size: 16 }) }),
23157
+ 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 }) }),
23313
23158
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
23314
23159
  import_material21.Typography,
23315
23160
  {
@@ -23327,7 +23172,7 @@ var init_project_management_modal = __esm({
23327
23172
  ]
23328
23173
  }
23329
23174
  ),
23330
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_material21.IconButton, { onClick: handleClose, size: "small", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react6.X, {}) })
23175
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_material21.IconButton, { onClick: handleClose, size: "small", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react7.X, {}) })
23331
23176
  ]
23332
23177
  }
23333
23178
  ),
@@ -23414,7 +23259,7 @@ var init_project_management_modal = __esm({
23414
23259
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
23415
23260
  import_material21.Button,
23416
23261
  {
23417
- startIcon: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react6.Plus, {}),
23262
+ startIcon: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react7.Plus, {}),
23418
23263
  onClick: () => setShowCreateForm(true),
23419
23264
  variant: "contained",
23420
23265
  sx: {
@@ -23439,7 +23284,7 @@ var init_project_management_modal = __esm({
23439
23284
  backgroundColor: subtleSurface
23440
23285
  },
23441
23286
  children: [
23442
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react6.Folder, { size: 48, style: { marginBottom: 8, opacity: 0.5 } }),
23287
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react7.Folder, { size: 48, style: { marginBottom: 8, opacity: 0.5 } }),
23443
23288
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_material21.Typography, { variant: "body1", sx: { fontWeight: 600 }, children: "No projects yet" }),
23444
23289
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_material21.Typography, { variant: "body2", children: "Create your first project to organize conversations." })
23445
23290
  ]
@@ -23474,7 +23319,7 @@ var init_project_management_modal = __esm({
23474
23319
  height: 36,
23475
23320
  fontSize: "1rem"
23476
23321
  },
23477
- children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react6.Folder, { size: 16 })
23322
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react7.Folder, { size: 16 })
23478
23323
  }
23479
23324
  ),
23480
23325
  /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_material21.Box, { sx: { flex: 1, minWidth: 0 }, children: [
@@ -23525,7 +23370,7 @@ var init_project_management_modal = __esm({
23525
23370
  mt: 0.25,
23526
23371
  zIndex: 1
23527
23372
  },
23528
- children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react6.MoreVertical, { size: 16 })
23373
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react7.MoreVertical, { size: 16 })
23529
23374
  }
23530
23375
  )
23531
23376
  ]
@@ -23601,7 +23446,7 @@ var init_project_management_modal = __esm({
23601
23446
  startEdit(selectedProject);
23602
23447
  },
23603
23448
  children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_material21.Box, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
23604
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react6.Pencil, { size: 16 }),
23449
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react7.Pencil, { size: 16 }),
23605
23450
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_material21.Typography, { variant: "body2", color: "inherit", children: "Edit" })
23606
23451
  ] })
23607
23452
  }
@@ -23615,7 +23460,7 @@ var init_project_management_modal = __esm({
23615
23460
  },
23616
23461
  sx: { color: theme.palette.error.main },
23617
23462
  children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_material21.Box, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
23618
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react6.Trash2, { size: 16 }),
23463
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react7.Trash2, { size: 16 }),
23619
23464
  /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_material21.Typography, { variant: "body2", color: "inherit", children: "Delete" })
23620
23465
  ] })
23621
23466
  }
@@ -23667,13 +23512,13 @@ var init_project_management_modal = __esm({
23667
23512
  });
23668
23513
 
23669
23514
  // src/chat/move-conversation-modal.tsx
23670
- var import_react31, import_material22, import_lucide_react7, import_styles13, import_jsx_runtime24, MoveConversationModal, move_conversation_modal_default;
23515
+ var import_react31, import_material22, import_lucide_react8, import_styles13, import_jsx_runtime24, MoveConversationModal, move_conversation_modal_default;
23671
23516
  var init_move_conversation_modal = __esm({
23672
23517
  "src/chat/move-conversation-modal.tsx"() {
23673
23518
  "use strict";
23674
23519
  import_react31 = require("react");
23675
23520
  import_material22 = require("@mui/material");
23676
- import_lucide_react7 = require("lucide-react");
23521
+ import_lucide_react8 = require("lucide-react");
23677
23522
  import_styles13 = require("@mui/material/styles");
23678
23523
  init_projectStore();
23679
23524
  init_conversationStore();
@@ -23758,7 +23603,7 @@ var init_move_conversation_modal = __esm({
23758
23603
  width: 32,
23759
23604
  height: 32
23760
23605
  },
23761
- children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react7.Inbox, {})
23606
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react8.Inbox, {})
23762
23607
  }
23763
23608
  ) }),
23764
23609
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
@@ -23794,7 +23639,7 @@ var init_move_conversation_modal = __esm({
23794
23639
  width: 32,
23795
23640
  height: 32
23796
23641
  },
23797
- children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react7.Folder, {})
23642
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react8.Folder, {})
23798
23643
  }
23799
23644
  ) }),
23800
23645
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
@@ -23838,13 +23683,13 @@ var init_move_conversation_modal = __esm({
23838
23683
  });
23839
23684
 
23840
23685
  // src/chat/simple-conversation-item.tsx
23841
- var import_react32, import_material23, import_lucide_react8, import_styles14, import_jsx_runtime25, SimpleConversationItem, simple_conversation_item_default;
23686
+ var import_react32, import_material23, import_lucide_react9, import_styles14, import_jsx_runtime25, SimpleConversationItem, simple_conversation_item_default;
23842
23687
  var init_simple_conversation_item = __esm({
23843
23688
  "src/chat/simple-conversation-item.tsx"() {
23844
23689
  "use strict";
23845
23690
  import_react32 = require("react");
23846
23691
  import_material23 = require("@mui/material");
23847
- import_lucide_react8 = require("lucide-react");
23692
+ import_lucide_react9 = require("lucide-react");
23848
23693
  import_styles14 = require("@mui/material/styles");
23849
23694
  import_jsx_runtime25 = require("react/jsx-runtime");
23850
23695
  SimpleConversationItem = ({
@@ -24072,7 +23917,7 @@ var init_simple_conversation_item = __esm({
24072
23917
  },
24073
23918
  children: [
24074
23919
  !isMobile && !isEditing && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
24075
- import_lucide_react8.GripVertical,
23920
+ import_lucide_react9.GripVertical,
24076
23921
  {
24077
23922
  size: 16,
24078
23923
  color: theme.palette.text.disabled,
@@ -24166,7 +24011,7 @@ var init_simple_conversation_item = __esm({
24166
24011
  }
24167
24012
  }
24168
24013
  },
24169
- children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react8.MoreVertical, { size: 16 })
24014
+ children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react9.MoreVertical, { size: 16 })
24170
24015
  }
24171
24016
  ),
24172
24017
  /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
@@ -24197,15 +24042,15 @@ var init_simple_conversation_item = __esm({
24197
24042
  },
24198
24043
  children: [
24199
24044
  onRename && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_material23.MenuItem, { onClick: handleEdit, children: [
24200
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_material23.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react8.Pencil, { size: 16 }) }),
24045
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_material23.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react9.Pencil, { size: 16 }) }),
24201
24046
  /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_material23.ListItemText, { children: "Rename" })
24202
24047
  ] }),
24203
24048
  onMove && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_material23.MenuItem, { onClick: handleMove, children: [
24204
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_material23.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react8.MailOpen, { size: 16 }) }),
24049
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_material23.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react9.MailOpen, { size: 16 }) }),
24205
24050
  /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_material23.ListItemText, { children: "Move to Project" })
24206
24051
  ] }),
24207
24052
  /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_material23.MenuItem, { onClick: handleDelete, children: [
24208
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_material23.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react8.Trash2, { size: 16 }) }),
24053
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_material23.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react9.Trash2, { size: 16 }) }),
24209
24054
  /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_material23.ListItemText, { children: "Delete" })
24210
24055
  ] })
24211
24056
  ]
@@ -24278,13 +24123,13 @@ var init_simple_conversation_item = __esm({
24278
24123
  });
24279
24124
 
24280
24125
  // src/chat/project-header.tsx
24281
- var import_react33, import_material24, import_lucide_react9, import_styles15, import_jsx_runtime26, ProjectHeader, project_header_default;
24126
+ var import_react33, import_material24, import_lucide_react10, import_styles15, import_jsx_runtime26, ProjectHeader, project_header_default;
24282
24127
  var init_project_header = __esm({
24283
24128
  "src/chat/project-header.tsx"() {
24284
24129
  "use strict";
24285
24130
  import_react33 = require("react");
24286
24131
  import_material24 = require("@mui/material");
24287
- import_lucide_react9 = require("lucide-react");
24132
+ import_lucide_react10 = require("lucide-react");
24288
24133
  import_styles15 = require("@mui/material/styles");
24289
24134
  init_conversationStore();
24290
24135
  init_projectStore();
@@ -24311,7 +24156,7 @@ var init_project_header = __esm({
24311
24156
  const [renameDraft, setRenameDraft] = (0, import_react33.useState)(projectName);
24312
24157
  const renameActionRef = (0, import_react33.useRef)("none");
24313
24158
  const isUngrouped = projectId === null;
24314
- const Icon = isCollapsed ? import_lucide_react9.Folder : import_lucide_react9.FolderOpen;
24159
+ const Icon = isCollapsed ? import_lucide_react10.Folder : import_lucide_react10.FolderOpen;
24315
24160
  const handleAddConversation = (e) => {
24316
24161
  e.stopPropagation();
24317
24162
  createNewConversation(projectId || void 0);
@@ -24392,7 +24237,7 @@ var init_project_header = __esm({
24392
24237
  mr: 1.5
24393
24238
  },
24394
24239
  children: isUngrouped ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
24395
- import_lucide_react9.Inbox,
24240
+ import_lucide_react10.Inbox,
24396
24241
  {
24397
24242
  size: 16,
24398
24243
  color: theme.palette.text.disabled,
@@ -24508,7 +24353,7 @@ var init_project_header = __esm({
24508
24353
  onRenameCancelDelete ? onRenameCancelDelete() : cancelRename();
24509
24354
  },
24510
24355
  sx: { color: (0, import_material24.alpha)(theme.palette.error.main, 0.9) },
24511
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react9.X, { size: 16 })
24356
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react10.X, { size: 16 })
24512
24357
  }
24513
24358
  ) }),
24514
24359
  /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_material24.Tooltip, { title: "Save", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
@@ -24521,7 +24366,7 @@ var init_project_header = __esm({
24521
24366
  commitRename();
24522
24367
  },
24523
24368
  sx: { color: theme.palette.success.main },
24524
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react9.Check, { size: 16 })
24369
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react10.Check, { size: 16 })
24525
24370
  }
24526
24371
  ) })
24527
24372
  ] }),
@@ -24542,7 +24387,7 @@ var init_project_header = __esm({
24542
24387
  },
24543
24388
  transition: "all 0.2s ease"
24544
24389
  },
24545
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react9.Plus, { size: 16 })
24390
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react10.Plus, { size: 16 })
24546
24391
  }
24547
24392
  ) }),
24548
24393
  !isUngrouped && !isRenaming && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
@@ -24553,7 +24398,7 @@ var init_project_header = __esm({
24553
24398
  color: theme.palette.text.secondary,
24554
24399
  transition: "transform 0.2s ease"
24555
24400
  },
24556
- children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react9.ChevronDown, { size: 16 }) : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react9.ChevronUp, { size: 16 })
24401
+ 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 })
24557
24402
  }
24558
24403
  )
24559
24404
  ]
@@ -24583,13 +24428,13 @@ var init_tooltips = __esm({
24583
24428
  });
24584
24429
 
24585
24430
  // src/chat/conversation-drawer.tsx
24586
- var import_react34, import_material25, import_lucide_react10, import_styles16, import_jsx_runtime27, BANDIT_AVATAR, coerceOptionalString, deriveInitials, ConversationDrawer, conversation_drawer_default;
24431
+ var import_react34, import_material25, import_lucide_react11, import_styles16, import_jsx_runtime27, BANDIT_AVATAR, coerceOptionalString, deriveInitials, ConversationDrawer, conversation_drawer_default;
24587
24432
  var init_conversation_drawer = __esm({
24588
24433
  "src/chat/conversation-drawer.tsx"() {
24589
24434
  "use strict";
24590
24435
  import_react34 = require("react");
24591
24436
  import_material25 = require("@mui/material");
24592
- import_lucide_react10 = require("lucide-react");
24437
+ import_lucide_react11 = require("lucide-react");
24593
24438
  import_styles16 = require("@mui/material/styles");
24594
24439
  init_conversationStore();
24595
24440
  init_projectStore();
@@ -24604,6 +24449,9 @@ var init_conversation_drawer = __esm({
24604
24449
  init_project_header();
24605
24450
  init_debugLogger();
24606
24451
  init_tooltips();
24452
+ init_conversationSyncStore();
24453
+ init_preferencesStore();
24454
+ init_useFeatures();
24607
24455
  import_jsx_runtime27 = require("react/jsx-runtime");
24608
24456
  BANDIT_AVATAR = "https://cdn.burtson.ai/images/bandit-head.png";
24609
24457
  coerceOptionalString = (value) => {
@@ -24830,6 +24678,30 @@ var init_conversation_drawer = __esm({
24830
24678
  onClose();
24831
24679
  }
24832
24680
  };
24681
+ const { preferences } = usePreferencesStore();
24682
+ const { showLimitedAdminPanel } = useFeatureVisibility();
24683
+ const syncEnabled = useConversationSyncStore((s) => s.syncEnabled);
24684
+ const syncStatus = useConversationSyncStore((s) => s.status);
24685
+ const runSync = useConversationSyncStore((s) => s.runSync);
24686
+ const goToHome = () => {
24687
+ const resolvedHomeUrl = preferences.homeUrl?.trim() || usePackageSettingsStore.getState().settings?.homeUrl?.trim() || "";
24688
+ if (resolvedHomeUrl) {
24689
+ window.location.href = resolvedHomeUrl;
24690
+ return;
24691
+ }
24692
+ const navigatorWithStandalone = window.navigator;
24693
+ const isStandalone = window.matchMedia?.("(display-mode: standalone)").matches || navigatorWithStandalone.standalone === true;
24694
+ if (isStandalone) {
24695
+ try {
24696
+ sessionStorage.setItem("banditPwaStayOnHome", "true");
24697
+ } catch {
24698
+ }
24699
+ window.location.href = "/?mode=home";
24700
+ return;
24701
+ }
24702
+ window.location.href = "/";
24703
+ };
24704
+ const managementPath = typeof window !== "undefined" && window.location.pathname.startsWith("/playground") ? "/playground/management" : "/management";
24833
24705
  const handleSearchClear = () => {
24834
24706
  setSearchQuery("");
24835
24707
  };
@@ -24913,6 +24785,31 @@ var init_conversation_drawer = __esm({
24913
24785
  gap: 1
24914
24786
  },
24915
24787
  children: [
24788
+ syncEnabled && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_material25.Tooltip, { title: syncStatus === "error" ? "Sync needs attention \u2014 tap to retry" : "Sync conversations", arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
24789
+ import_material25.IconButton,
24790
+ {
24791
+ onClick: () => {
24792
+ if (syncStatus !== "syncing") void runSync({ force: true });
24793
+ },
24794
+ size: "small",
24795
+ "aria-label": "Sync conversations",
24796
+ sx: {
24797
+ color: syncStatus === "error" ? theme.palette.error.main : theme.palette.text.secondary,
24798
+ ...syncStatus === "syncing" && {
24799
+ animation: "bandit-sync-spin 1s linear infinite",
24800
+ "@keyframes bandit-sync-spin": {
24801
+ "0%": { transform: "rotate(0deg)" },
24802
+ "100%": { transform: "rotate(360deg)" }
24803
+ }
24804
+ },
24805
+ "&:hover": {
24806
+ color: theme.palette.primary.main,
24807
+ bgcolor: (0, import_material25.alpha)(theme.palette.primary.main, 0.1)
24808
+ }
24809
+ },
24810
+ children: syncStatus === "error" ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.CircleAlert, {}) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.RefreshCw, {})
24811
+ }
24812
+ ) }),
24916
24813
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_material25.Tooltip, { title: "Memories", arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
24917
24814
  import_material25.IconButton,
24918
24815
  {
@@ -24926,7 +24823,7 @@ var init_conversation_drawer = __esm({
24926
24823
  bgcolor: (0, import_material25.alpha)(theme.palette.primary.main, 0.1)
24927
24824
  }
24928
24825
  },
24929
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react10.Brain, {})
24826
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.Brain, {})
24930
24827
  }
24931
24828
  ) }),
24932
24829
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_material25.Tooltip, { title: tooltip("manageProjects"), arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
@@ -24942,7 +24839,7 @@ var init_conversation_drawer = __esm({
24942
24839
  bgcolor: (0, import_material25.alpha)(theme.palette.primary.main, 0.1)
24943
24840
  }
24944
24841
  },
24945
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react10.Folder, {})
24842
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.Folder, {})
24946
24843
  }
24947
24844
  ) }),
24948
24845
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_material25.Tooltip, { title: tooltip("conversationOptions"), arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
@@ -24958,7 +24855,7 @@ var init_conversation_drawer = __esm({
24958
24855
  bgcolor: (0, import_material25.alpha)(theme.palette.text.primary, 0.1)
24959
24856
  }
24960
24857
  },
24961
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react10.MoreVertical, {})
24858
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.MoreVertical, {})
24962
24859
  }
24963
24860
  ) }),
24964
24861
  isMobile && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_material25.Tooltip, { title: tooltip("closeConversationsPanel"), children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
@@ -24978,7 +24875,7 @@ var init_conversation_drawer = __esm({
24978
24875
  bgcolor: (0, import_material25.alpha)(theme.palette.error.main, 0.1)
24979
24876
  }
24980
24877
  },
24981
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react10.X, {})
24878
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.X, {})
24982
24879
  }
24983
24880
  ) })
24984
24881
  ]
@@ -24994,7 +24891,7 @@ var init_conversation_drawer = __esm({
24994
24891
  onChange: (e) => setSearchQuery(e.target.value),
24995
24892
  variant: "outlined",
24996
24893
  InputProps: {
24997
- startAdornment: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_material25.InputAdornment, { position: "start", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react10.Search, { size: 16, color: theme.palette.text.secondary }) }),
24894
+ 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 }) }),
24998
24895
  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)(
24999
24896
  import_material25.IconButton,
25000
24897
  {
@@ -25003,7 +24900,7 @@ var init_conversation_drawer = __esm({
25003
24900
  edge: "end",
25004
24901
  "aria-label": tooltip("clearSearch"),
25005
24902
  sx: { color: theme.palette.text.secondary },
25006
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react10.X, { size: 16 })
24903
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.X, { size: 16 })
25007
24904
  }
25008
24905
  ) }) })
25009
24906
  },
@@ -25069,7 +24966,7 @@ var init_conversation_drawer = __esm({
25069
24966
  justifyContent: "center",
25070
24967
  flexShrink: 0
25071
24968
  },
25072
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react10.Folder, { size: 16, color: theme.palette.success.main })
24969
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.Folder, { size: 16, color: theme.palette.success.main })
25073
24970
  }
25074
24971
  ),
25075
24972
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
@@ -25086,7 +24983,7 @@ var init_conversation_drawer = __esm({
25086
24983
  size: "small",
25087
24984
  "aria-label": tooltip("addProject"),
25088
24985
  sx: { color: theme.palette.success.main },
25089
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react10.Plus, { size: 16 })
24986
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.Plus, { size: 16 })
25090
24987
  }
25091
24988
  ) })
25092
24989
  ]
@@ -25108,7 +25005,7 @@ var init_conversation_drawer = __esm({
25108
25005
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_material25.Divider, { sx: { flex: 1, opacity: 0.6 } }),
25109
25006
  /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_material25.Box, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
25110
25007
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
25111
- import_lucide_react10.Inbox,
25008
+ import_lucide_react11.Inbox,
25112
25009
  {
25113
25010
  size: 14,
25114
25011
  color: theme.palette.text.disabled,
@@ -25332,6 +25229,44 @@ var init_conversation_drawer = __esm({
25332
25229
  ]
25333
25230
  }
25334
25231
  ),
25232
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
25233
+ import_material25.IconButton,
25234
+ {
25235
+ "aria-label": "Go to home page",
25236
+ title: "Home",
25237
+ onClick: (event) => {
25238
+ event.stopPropagation();
25239
+ goToHome();
25240
+ },
25241
+ sx: {
25242
+ flexShrink: 0,
25243
+ width: 30,
25244
+ height: 30,
25245
+ border: `1px solid ${(0, import_material25.alpha)(theme.palette.divider, 0.8)}`,
25246
+ color: theme.palette.text.secondary
25247
+ },
25248
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.House, { size: 16 })
25249
+ }
25250
+ ),
25251
+ user2 && showLimitedAdminPanel() && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
25252
+ import_material25.IconButton,
25253
+ {
25254
+ "aria-label": "Management & settings",
25255
+ title: "Management & settings",
25256
+ onClick: (event) => {
25257
+ event.stopPropagation();
25258
+ window.location.href = managementPath;
25259
+ },
25260
+ sx: {
25261
+ flexShrink: 0,
25262
+ width: 30,
25263
+ height: 30,
25264
+ border: `1px solid ${(0, import_material25.alpha)(theme.palette.divider, 0.8)}`,
25265
+ color: theme.palette.text.secondary
25266
+ },
25267
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.SlidersHorizontal, { size: 16 })
25268
+ }
25269
+ ),
25335
25270
  user2 && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
25336
25271
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
25337
25272
  import_material25.Box,
@@ -25347,7 +25282,7 @@ var init_conversation_drawer = __esm({
25347
25282
  border: `1px solid ${(0, import_material25.alpha)(theme.palette.divider, 0.8)}`,
25348
25283
  color: theme.palette.text.secondary
25349
25284
  },
25350
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react10.Settings, { size: 16 })
25285
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.Settings, { size: 16 })
25351
25286
  }
25352
25287
  ),
25353
25288
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
@@ -25368,7 +25303,7 @@ var init_conversation_drawer = __esm({
25368
25303
  color: theme.palette.error.main,
25369
25304
  "&:hover": { bgcolor: (0, import_material25.alpha)(theme.palette.error.main, 0.1) }
25370
25305
  },
25371
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react10.LogOut, { size: 16 })
25306
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react11.LogOut, { size: 16 })
25372
25307
  }
25373
25308
  )
25374
25309
  ] })
@@ -25418,7 +25353,7 @@ var init_conversation_drawer = __esm({
25418
25353
  },
25419
25354
  sx: { color: theme.palette.error.main },
25420
25355
  children: [
25421
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_material25.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react10.Trash2, { size: 16, color: theme.palette.error.main }) }),
25356
+ /* @__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 }) }),
25422
25357
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_material25.ListItemText, { children: "Clear All Conversations" })
25423
25358
  ]
25424
25359
  }
@@ -25457,13 +25392,13 @@ var init_conversation_drawer = __esm({
25457
25392
  });
25458
25393
 
25459
25394
  // src/chat/enhanced-mobile-conversations-modal.tsx
25460
- var import_react35, import_material26, import_lucide_react11, import_styles17, import_jsx_runtime28, BANDIT_AVATAR2, coerceOptionalString2, deriveInitials2, EnhancedMobileConversationsModal, enhanced_mobile_conversations_modal_default;
25395
+ var import_react35, import_material26, import_lucide_react12, import_styles17, import_jsx_runtime28, BANDIT_AVATAR2, coerceOptionalString2, deriveInitials2, EnhancedMobileConversationsModal, enhanced_mobile_conversations_modal_default;
25461
25396
  var init_enhanced_mobile_conversations_modal = __esm({
25462
25397
  "src/chat/enhanced-mobile-conversations-modal.tsx"() {
25463
25398
  "use strict";
25464
25399
  import_react35 = require("react");
25465
25400
  import_material26 = require("@mui/material");
25466
- import_lucide_react11 = require("lucide-react");
25401
+ import_lucide_react12 = require("lucide-react");
25467
25402
  import_styles17 = require("@mui/material/styles");
25468
25403
  init_conversationStore();
25469
25404
  init_projectStore();
@@ -25906,7 +25841,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
25906
25841
  }
25907
25842
  }
25908
25843
  },
25909
- children: syncStatus === "error" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react11.CircleAlert, {}) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react11.RefreshCw, {})
25844
+ children: syncStatus === "error" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.CircleAlert, {}) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.RefreshCw, {})
25910
25845
  }
25911
25846
  ),
25912
25847
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
@@ -25915,7 +25850,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
25915
25850
  onClick: () => setMemoryModalOpen(true),
25916
25851
  "aria-label": "Memory",
25917
25852
  sx: { color: theme.palette.text.secondary },
25918
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react11.Brain, {})
25853
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.Brain, {})
25919
25854
  }
25920
25855
  ),
25921
25856
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
@@ -25923,7 +25858,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
25923
25858
  {
25924
25859
  onClick: () => setProjectManagementOpen(true),
25925
25860
  sx: { color: theme.palette.text.secondary },
25926
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react11.Folder, {})
25861
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.Folder, {})
25927
25862
  }
25928
25863
  ),
25929
25864
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
@@ -25931,7 +25866,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
25931
25866
  {
25932
25867
  onClick: handleMenuOpen,
25933
25868
  sx: { color: theme.palette.text.secondary },
25934
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react11.MoreVertical, {})
25869
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.MoreVertical, {})
25935
25870
  }
25936
25871
  ),
25937
25872
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
@@ -25939,7 +25874,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
25939
25874
  {
25940
25875
  onClick: onClose,
25941
25876
  sx: { color: theme.palette.text.secondary },
25942
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react11.X, {})
25877
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.X, {})
25943
25878
  }
25944
25879
  )
25945
25880
  ] })
@@ -25955,7 +25890,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
25955
25890
  onChange: (e) => setSearchQuery(e.target.value),
25956
25891
  variant: "outlined",
25957
25892
  InputProps: {
25958
- startAdornment: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_material26.InputAdornment, { position: "start", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react11.Search, { size: 16, color: theme.palette.text.secondary }) }),
25893
+ 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 }) }),
25959
25894
  endAdornment: searchQuery && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_material26.InputAdornment, { position: "end", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
25960
25895
  import_material26.IconButton,
25961
25896
  {
@@ -25963,7 +25898,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
25963
25898
  size: "small",
25964
25899
  edge: "end",
25965
25900
  sx: { color: theme.palette.text.secondary },
25966
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react11.X, { size: 16 })
25901
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.X, { size: 16 })
25967
25902
  }
25968
25903
  ) })
25969
25904
  }
@@ -26119,7 +26054,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
26119
26054
  justifyContent: "center",
26120
26055
  flexShrink: 0
26121
26056
  },
26122
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react11.Folder, { size: 16, color: theme.palette.success.main })
26057
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.Folder, { size: 16, color: theme.palette.success.main })
26123
26058
  }
26124
26059
  ),
26125
26060
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
@@ -26130,7 +26065,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
26130
26065
  children: "New Project"
26131
26066
  }
26132
26067
  ),
26133
- /* @__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_react11.Plus, { size: 16 }) })
26068
+ /* @__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 }) })
26134
26069
  ]
26135
26070
  }
26136
26071
  ),
@@ -26150,7 +26085,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
26150
26085
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_material26.Divider, { sx: { flex: 1, opacity: 0.6 } }),
26151
26086
  /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_material26.Box, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
26152
26087
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
26153
- import_lucide_react11.Inbox,
26088
+ import_lucide_react12.Inbox,
26154
26089
  {
26155
26090
  size: 14,
26156
26091
  color: theme.palette.text.disabled,
@@ -26345,7 +26280,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
26345
26280
  createNewConversation();
26346
26281
  onClose();
26347
26282
  },
26348
- startIcon: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react11.Plus, { size: 18 }),
26283
+ startIcon: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.Plus, { size: 18 }),
26349
26284
  sx: {
26350
26285
  pointerEvents: "auto",
26351
26286
  textTransform: "none",
@@ -26436,7 +26371,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
26436
26371
  border: `1px solid ${(0, import_styles17.alpha)(theme.palette.divider, 0.8)}`,
26437
26372
  color: theme.palette.text.secondary
26438
26373
  },
26439
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react11.House, { size: 16 })
26374
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.House, { size: 16 })
26440
26375
  }
26441
26376
  ),
26442
26377
  user2 && showLimitedAdminPanel() && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
@@ -26455,7 +26390,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
26455
26390
  border: `1px solid ${(0, import_styles17.alpha)(theme.palette.divider, 0.8)}`,
26456
26391
  color: theme.palette.text.secondary
26457
26392
  },
26458
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react11.SlidersHorizontal, { size: 16 })
26393
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.SlidersHorizontal, { size: 16 })
26459
26394
  }
26460
26395
  ),
26461
26396
  user2 && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_jsx_runtime28.Fragment, { children: [
@@ -26473,7 +26408,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
26473
26408
  border: `1px solid ${(0, import_styles17.alpha)(theme.palette.divider, 0.8)}`,
26474
26409
  color: theme.palette.text.secondary
26475
26410
  },
26476
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react11.Settings, { size: 16 })
26411
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.Settings, { size: 16 })
26477
26412
  }
26478
26413
  ),
26479
26414
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
@@ -26494,7 +26429,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
26494
26429
  color: theme.palette.error.main,
26495
26430
  "&:hover": { bgcolor: (0, import_styles17.alpha)(theme.palette.error.main, 0.1) }
26496
26431
  },
26497
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react11.LogOut, { size: 16 })
26432
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.LogOut, { size: 16 })
26498
26433
  }
26499
26434
  )
26500
26435
  ] })
@@ -26547,7 +26482,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
26547
26482
  disabled: visibleConversationCount === 0,
26548
26483
  sx: { color: theme.palette.error.main },
26549
26484
  children: [
26550
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_material26.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react11.Trash2, { size: 16, color: theme.palette.error.main }) }),
26485
+ /* @__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 }) }),
26551
26486
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_material26.ListItemText, { children: "Clear All Conversations" })
26552
26487
  ]
26553
26488
  }
@@ -26677,24 +26612,8 @@ var init_chat_app_bar = __esm({
26677
26612
  const { settings: packageSettings } = usePackageSettingsStore();
26678
26613
  const isPlaygroundRoute = typeof window !== "undefined" && window.location.pathname.includes("/playground");
26679
26614
  const isPlaygroundMode3 = Boolean(packageSettings?.playgroundMode) || (packageSettings?.gatewayApiUrl ?? "").toLowerCase().startsWith("playground://") || typeof window !== "undefined" && window.location.pathname.startsWith("/playground");
26680
- const managementPath = isPlaygroundMode3 ? "/playground/management" : "/management";
26681
- const {
26682
- syncEnabled,
26683
- syncStatus,
26684
- lastSyncAt,
26685
- pendingCount,
26686
- warningConversations,
26687
- oversizedConversations,
26688
- triggerSync,
26689
- setSyncEnabled
26690
- } = useConversationSyncStore((state) => ({
26615
+ const { syncEnabled, setSyncEnabled } = useConversationSyncStore((state) => ({
26691
26616
  syncEnabled: state.syncEnabled,
26692
- syncStatus: state.status,
26693
- lastSyncAt: state.lastSyncAt,
26694
- pendingCount: state.pendingConversationUpserts.size + state.pendingConversationDeletes.size + state.pendingProjectUpserts.size + state.pendingProjectDeletes.size,
26695
- warningConversations: state.warningConversations,
26696
- oversizedConversations: state.oversizedConversations,
26697
- triggerSync: state.runSync,
26698
26617
  setSyncEnabled: state.setSyncEnabled
26699
26618
  }), import_shallow2.shallow);
26700
26619
  (0, import_react36.useEffect)(() => {
@@ -26706,57 +26625,6 @@ var init_chat_app_bar = __esm({
26706
26625
  });
26707
26626
  }
26708
26627
  }, [isPlaygroundMode3, syncEnabled, setSyncEnabled]);
26709
- const syncSpinSx = {
26710
- animation: "spin 1s linear infinite",
26711
- "@keyframes spin": {
26712
- "0%": { transform: "rotate(0deg)" },
26713
- "100%": { transform: "rotate(360deg)" }
26714
- }
26715
- };
26716
- const syncIndicatorIcon = (() => {
26717
- if (isPlaygroundMode3 || !syncEnabled) {
26718
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CloudOffIcon, { fontSize: "small", color: "disabled" });
26719
- }
26720
- switch (syncStatus) {
26721
- case "syncing":
26722
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SyncIcon, { fontSize: "small", sx: syncSpinSx, color: "primary" });
26723
- case "error":
26724
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(ErrorOutlineIcon, { fontSize: "small", color: "error" });
26725
- case "idle":
26726
- default:
26727
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CloudDoneIcon, { fontSize: "small", color: "success" });
26728
- }
26729
- })();
26730
- const syncTooltip = (() => {
26731
- if (isPlaygroundMode3) {
26732
- return "Cloud sync is unavailable in playground mode.";
26733
- }
26734
- if (!syncEnabled) {
26735
- return "Cloud sync is disabled. Enable it from Management > Preferences.";
26736
- }
26737
- let base;
26738
- if (oversizedConversations.length > 0) {
26739
- base = "Some conversations are too large for Bandit Cloud. Start a new conversation to keep syncing.";
26740
- } else if (syncStatus === "syncing") {
26741
- base = "Syncing changes to Bandit Cloud\u2026";
26742
- } else if (warningConversations.length > 0) {
26743
- base = "Conversations are nearing the Bandit Cloud limit. Consider starting a new one soon.";
26744
- } else if (syncStatus === "error") {
26745
- base = "Sync needs attention. Visit Management > Preferences for details.";
26746
- } else {
26747
- base = "Conversations are in sync with Bandit Cloud.";
26748
- }
26749
- const pending = pendingCount > 0 ? ` ${pendingCount} change${pendingCount === 1 ? "" : "s"} queued.` : "";
26750
- const last = lastSyncAt ? ` Last sync ${new Date(lastSyncAt).toLocaleTimeString()}.` : "";
26751
- return `${base}${pending}${last}`;
26752
- })();
26753
- const syncButtonDisabled = isPlaygroundMode3 || !syncEnabled;
26754
- const handleSyncBadgeClick = () => {
26755
- if (isPlaygroundMode3 || !syncEnabled || syncStatus === "syncing") {
26756
- return;
26757
- }
26758
- void triggerSync({ force: true });
26759
- };
26760
26628
  const { hasTTS, hasSTT, isAdmin, getCurrentTier, hasLimitedAdminDashboard, isSubscribed } = useFeatures();
26761
26629
  const { showVoiceControls, showLimitedAdminPanel } = useFeatureVisibility();
26762
26630
  const frontierEligible = (() => {
@@ -26807,37 +26675,6 @@ var init_chat_app_bar = __esm({
26807
26675
  useEngineStore.getState().fetchEngines();
26808
26676
  }, []);
26809
26677
  const pendingModelAvatar = useModelStore.getState().availableModels.find((m) => m.name === pendingModel)?.avatarBase64 || modelAvatars2[pendingModel || ""] || banditHead2;
26810
- const resolvedHomeUrl = preferences.homeUrl?.trim() || packageSettings?.homeUrl?.trim() || "";
26811
- const homeTooltip = (() => {
26812
- if (!resolvedHomeUrl) return "Home";
26813
- try {
26814
- return `Home (${new URL(resolvedHomeUrl).hostname})`;
26815
- } catch {
26816
- return "Home";
26817
- }
26818
- })();
26819
- function goToHome() {
26820
- if (resolvedHomeUrl) {
26821
- window.location.href = resolvedHomeUrl;
26822
- return;
26823
- }
26824
- if (typeof window !== "undefined") {
26825
- const navigatorWithStandalone = window.navigator;
26826
- const isStandalone = window.matchMedia?.("(display-mode: standalone)").matches || navigatorWithStandalone.standalone === true;
26827
- if (isStandalone) {
26828
- try {
26829
- sessionStorage.setItem("banditPwaStayOnHome", "true");
26830
- } catch (error) {
26831
- debugLogger.warn("[chat-app-bar] Unable to persist home preference", {
26832
- error: error instanceof Error ? error.message : String(error)
26833
- });
26834
- }
26835
- safeNavigate("/?mode=home");
26836
- return;
26837
- }
26838
- }
26839
- safeNavigate("/");
26840
- }
26841
26678
  return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
26842
26679
  /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
26843
26680
  import_material28.Box,
@@ -26964,72 +26801,6 @@ var init_chat_app_bar = __esm({
26964
26801
  }
26965
26802
  },
26966
26803
  children: [
26967
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_material28.Tooltip, { title: homeTooltip, arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
26968
- import_material28.IconButton,
26969
- {
26970
- onClick: goToHome,
26971
- sx: pillButtonStyles,
26972
- "aria-label": "Go to home page",
26973
- children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(HomeIcon, {})
26974
- }
26975
- ) }),
26976
- showLimitedAdminPanel() && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_material28.Tooltip, { title: "Management & Settings", arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
26977
- import_material28.IconButton,
26978
- {
26979
- onClick: () => safeNavigate(managementPath),
26980
- sx: {
26981
- ...pillButtonStyles,
26982
- ...typeof window !== "undefined" && window.location.pathname === managementPath && {
26983
- bgcolor: theme.palette.primary.main + "20",
26984
- color: theme.palette.primary.main
26985
- }
26986
- },
26987
- "aria-label": "Open management settings",
26988
- children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SettingsIcon, {})
26989
- }
26990
- ) }),
26991
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_material28.Tooltip, { title: syncTooltip, arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
26992
- import_material28.IconButton,
26993
- {
26994
- onClick: handleSyncBadgeClick,
26995
- disabled: syncButtonDisabled,
26996
- sx: {
26997
- ...pillButtonStyles,
26998
- color: syncButtonDisabled ? theme.palette.action.disabled : theme.palette.primary.main,
26999
- bgcolor: syncButtonDisabled ? "transparent" : syncStatus === "error" ? theme.palette.error.main + "20" : theme.palette.primary.main + "12",
27000
- "&:hover": syncButtonDisabled ? {} : {
27001
- bgcolor: syncStatus === "error" ? theme.palette.error.main + "30" : theme.palette.primary.main + "20"
27002
- }
27003
- },
27004
- "aria-label": "Conversation sync status",
27005
- children: [
27006
- syncIndicatorIcon,
27007
- pendingCount > 0 && !syncButtonDisabled && syncStatus !== "syncing" && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
27008
- import_material28.Box,
27009
- {
27010
- sx: {
27011
- position: "absolute",
27012
- top: -2,
27013
- right: -2,
27014
- minWidth: 16,
27015
- height: 16,
27016
- px: 0.3,
27017
- bgcolor: theme.palette.warning.main,
27018
- color: theme.palette.getContrastText(theme.palette.warning.main),
27019
- borderRadius: "999px",
27020
- display: "flex",
27021
- alignItems: "center",
27022
- justifyContent: "center",
27023
- fontSize: "0.6rem",
27024
- fontWeight: 600,
27025
- border: `2px solid ${background}`
27026
- },
27027
- children: pendingCount > 9 ? "9+" : pendingCount
27028
- }
27029
- )
27030
- ]
27031
- }
27032
- ) }),
27033
26804
  !isMobile && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_material28.Tooltip, { title: `${drawerOpen ? "Close" : "Open"} Conversations`, arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
27034
26805
  import_material28.IconButton,
27035
26806
  {
@@ -27044,7 +26815,7 @@ var init_chat_app_bar = __esm({
27044
26815
  "aria-label": `${drawerOpen ? "Close" : "Open"} conversations drawer`,
27045
26816
  "aria-pressed": drawerOpen,
27046
26817
  children: [
27047
- drawerOpen ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(NotesIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(NotesIconOutlined, {}),
26818
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(PanelLeftIcon, {}),
27048
26819
  conversations.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
27049
26820
  import_material28.Box,
27050
26821
  {
@@ -30378,13 +30149,13 @@ var init_feedback = __esm({
30378
30149
  });
30379
30150
 
30380
30151
  // src/components/feedback/FeedbackButton.tsx
30381
- var import_react38, import_material31, import_lucide_react12, import_jsx_runtime32, FeedbackButton;
30152
+ var import_react38, import_material31, import_lucide_react13, import_jsx_runtime32, FeedbackButton;
30382
30153
  var init_FeedbackButton = __esm({
30383
30154
  "src/components/feedback/FeedbackButton.tsx"() {
30384
30155
  "use strict";
30385
30156
  import_react38 = require("react");
30386
30157
  import_material31 = require("@mui/material");
30387
- import_lucide_react12 = require("lucide-react");
30158
+ import_lucide_react13 = require("lucide-react");
30388
30159
  init_feedback();
30389
30160
  import_jsx_runtime32 = require("react/jsx-runtime");
30390
30161
  FeedbackButton = ({
@@ -30408,7 +30179,7 @@ var init_FeedbackButton = __esm({
30408
30179
  import_material31.Button,
30409
30180
  {
30410
30181
  variant: "outlined",
30411
- startIcon: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react12.MessageCircle, {}),
30182
+ startIcon: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react13.MessageCircle, {}),
30412
30183
  onClick: handleOpen,
30413
30184
  className,
30414
30185
  size,
@@ -30437,7 +30208,7 @@ var init_FeedbackButton = __esm({
30437
30208
  transform: "translateY(-1px)"
30438
30209
  }
30439
30210
  },
30440
- children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react12.MessageCircle, {})
30211
+ children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react13.MessageCircle, {})
30441
30212
  }
30442
30213
  ) }),
30443
30214
  /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
@@ -30496,7 +30267,7 @@ var init_FeedbackButton = __esm({
30496
30267
  }
30497
30268
  }
30498
30269
  },
30499
- children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react12.MessageCircle, {})
30270
+ children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react13.MessageCircle, {})
30500
30271
  }
30501
30272
  )
30502
30273
  }
@@ -31946,13 +31717,18 @@ var init_chat2 = __esm({
31946
31717
  left: drawerOpen && !isMobile ? "340px" : 0,
31947
31718
  width: !isMobile && canvasOpen ? `calc(100vw - ${drawerOpen ? "340px" : "0px"} - ${CANVAS_WIDTH})` : drawerOpen && !isMobile ? "calc(100vw - 340px)" : "100vw",
31948
31719
  zIndex: 0,
31949
- // Claude/ChatGPT-style push: while the mobile conversations drawer is
31950
- // open the whole chat shell slides right and becomes a rounded card,
31951
- // leaving a tappable sliver. Width kept in sync with the drawer in
31952
- // enhanced-mobile-conversations-modal.tsx.
31953
- transform: isMobile && mobileConversationsOpen ? "translateX(min(calc(100vw - 56px), 360px))" : "none",
31954
- borderRadius: isMobile && mobileConversationsOpen ? "24px" : drawerOpen && !isMobile ? "24px 0 0 24px" : 0,
31955
- boxShadow: isMobile && mobileConversationsOpen || drawerOpen && !isMobile ? `0 12px 40px ${theme.palette.mode === "dark" ? "rgba(0,0,0,0.55)" : "rgba(0,0,0,0.25)"}` : "none",
31720
+ // Claude-style push (mobile only; desktop stays flush): the chat
31721
+ // shell slides right and shrinks slightly into a rounded card. The
31722
+ // scale insets the card from every screen edge so all four rounded
31723
+ // corners stay visible — a full-height 100dvh card had its bottom
31724
+ // corners clipped at the device edge in the PWA. Width kept in sync
31725
+ // with the drawer in enhanced-mobile-conversations-modal.tsx.
31726
+ transform: isMobile && mobileConversationsOpen ? "translateX(min(calc(100vw - 56px), 360px)) scale(0.96)" : "none",
31727
+ borderRadius: isMobile && mobileConversationsOpen ? "24px" : 0,
31728
+ // Hairline border so the rounded card reads even when the backdrop
31729
+ // is the same near-black as the shell.
31730
+ border: isMobile && mobileConversationsOpen ? `1px solid ${theme.palette.mode === "dark" ? "rgba(255,255,255,0.14)" : "rgba(0,0,0,0.12)"}` : "none",
31731
+ boxShadow: isMobile && mobileConversationsOpen ? `0 12px 40px ${theme.palette.mode === "dark" ? "rgba(0,0,0,0.55)" : "rgba(0,0,0,0.25)"}` : "none",
31956
31732
  transition: "left 0.3s ease-in-out, width 0.3s ease-in-out, transform 0.3s ease-in-out, border-radius 0.3s ease-in-out"
31957
31733
  }),
31958
31734
  children: [
@@ -39499,7 +39275,7 @@ init_useFeatures();
39499
39275
  // src/components/shared/ProcessingOverlay.tsx
39500
39276
  var import_react55 = require("react");
39501
39277
  var import_material46 = require("@mui/material");
39502
- var import_lucide_react13 = require("lucide-react");
39278
+ var import_lucide_react14 = require("lucide-react");
39503
39279
  var import_jsx_runtime46 = require("react/jsx-runtime");
39504
39280
  var ninjaFloat = import_material46.keyframes`
39505
39281
  0%, 100% { transform: translateY(0px) rotate(0deg); }
@@ -39524,28 +39300,28 @@ var defaultSteps = [
39524
39300
  id: "upload",
39525
39301
  title: "Uploading to Cloud",
39526
39302
  description: "Our digital ninjas are securely transferring your file...",
39527
- icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.CloudUpload, {}),
39303
+ icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react14.CloudUpload, {}),
39528
39304
  duration: 5
39529
39305
  },
39530
39306
  {
39531
39307
  id: "analyze",
39532
39308
  title: "AI Analysis",
39533
39309
  description: "Advanced AI robots are reading and understanding your content...",
39534
- icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.Brain, {}),
39310
+ icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react14.Brain, {}),
39535
39311
  duration: 15
39536
39312
  },
39537
39313
  {
39538
39314
  id: "embed",
39539
39315
  title: "Making It Searchable",
39540
39316
  description: "We turn the content into a private, searchable index...",
39541
- icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.Cpu, {}),
39317
+ icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react14.Cpu, {}),
39542
39318
  duration: 10
39543
39319
  },
39544
39320
  {
39545
39321
  id: "optimize",
39546
39322
  title: "Optimizing Search",
39547
39323
  description: "Organizing everything for quick, reliable answers...",
39548
- icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.Sparkles, {}),
39324
+ icon: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react14.Sparkles, {}),
39549
39325
  duration: 8
39550
39326
  }
39551
39327
  ];
@@ -39691,7 +39467,7 @@ var ProcessingOverlay = ({
39691
39467
  animation: `${pulse} 3s ease-in-out infinite`,
39692
39468
  color: theme.palette.secondary.main
39693
39469
  },
39694
- children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.Bot, {})
39470
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react14.Bot, {})
39695
39471
  }
39696
39472
  ),
39697
39473
  /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
@@ -39705,7 +39481,7 @@ var ProcessingOverlay = ({
39705
39481
  color: theme.palette.primary.main,
39706
39482
  animationDelay: "1s"
39707
39483
  },
39708
- children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.Zap, {})
39484
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react14.Zap, {})
39709
39485
  }
39710
39486
  )
39711
39487
  ] }),
@@ -46690,7 +46466,7 @@ init_streaming_tts();
46690
46466
 
46691
46467
  // src/modals/SubscriptionExpiredModal.tsx
46692
46468
  var import_material56 = require("@mui/material");
46693
- var import_lucide_react14 = require("lucide-react");
46469
+ var import_lucide_react15 = require("lucide-react");
46694
46470
  var import_jsx_runtime56 = require("react/jsx-runtime");
46695
46471
  var SubscriptionExpiredModal = ({
46696
46472
  open,
@@ -46729,7 +46505,7 @@ var SubscriptionExpiredModal = ({
46729
46505
  },
46730
46506
  children: [
46731
46507
  /* @__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: [
46732
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react14.AlertTriangle, { size: 32, color: "warning" }),
46508
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react15.AlertTriangle, { size: 32, color: "warning" }),
46733
46509
  /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_material56.Typography, { variant: "h5", component: "span", fontWeight: "bold", children: "Subscription Expired" })
46734
46510
  ] }) }),
46735
46511
  /* @__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: [
@@ -46757,7 +46533,7 @@ var SubscriptionExpiredModal = ({
46757
46533
  {
46758
46534
  onClick: handleNavigateHome,
46759
46535
  variant: "outlined",
46760
- startIcon: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react14.Home, {}),
46536
+ startIcon: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react15.Home, {}),
46761
46537
  size: "large",
46762
46538
  sx: { minWidth: 140 },
46763
46539
  children: "Go Home"
@@ -46768,7 +46544,7 @@ var SubscriptionExpiredModal = ({
46768
46544
  {
46769
46545
  onClick: handleManageSubscription,
46770
46546
  variant: "contained",
46771
- startIcon: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react14.CreditCard, {}),
46547
+ startIcon: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_lucide_react15.CreditCard, {}),
46772
46548
  size: "large",
46773
46549
  color: "primary",
46774
46550
  sx: { minWidth: 140 },