@burtson-labs/bandit-engine 2.0.122 → 2.0.123

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.
@@ -15734,7 +15734,7 @@ var init_FeedbackModal = __esm({
15734
15734
  sx: {
15735
15735
  display: "grid",
15736
15736
  gridTemplateRows: "auto auto auto auto",
15737
- rowGap: "24px",
15737
+ rowGap: "16px",
15738
15738
  columnGap: "0px",
15739
15739
  width: "100%"
15740
15740
  },
@@ -15750,35 +15750,6 @@ var init_FeedbackModal = __esm({
15750
15750
  mb: 0
15751
15751
  },
15752
15752
  children: [
15753
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
15754
- import_material13.Box,
15755
- {
15756
- sx: {
15757
- gridColumn: "1 / -1",
15758
- display: "flex",
15759
- alignItems: "center",
15760
- gap: "8px",
15761
- mb: 0,
15762
- mt: 2,
15763
- alignSelf: "end"
15764
- },
15765
- children: [
15766
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react3.MessageSquare, { size: 20, color: theme.palette.text.primary }),
15767
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
15768
- import_material13.Typography,
15769
- {
15770
- variant: "h6",
15771
- sx: {
15772
- fontWeight: 600,
15773
- color: theme.palette.text.primary,
15774
- mb: 0
15775
- },
15776
- children: "Feedback Details"
15777
- }
15778
- )
15779
- ]
15780
- }
15781
- ),
15782
15753
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
15783
15754
  import_material13.TextField,
15784
15755
  {
@@ -15920,7 +15891,7 @@ var init_FeedbackModal = __esm({
15920
15891
  {
15921
15892
  fullWidth: true,
15922
15893
  multiline: true,
15923
- rows: 5,
15894
+ rows: 3,
15924
15895
  label: "Description",
15925
15896
  value: formData.description,
15926
15897
  onChange: handleInputChange("description"),
@@ -15971,118 +15942,37 @@ var init_FeedbackModal = __esm({
15971
15942
  /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
15972
15943
  import_material13.Box,
15973
15944
  {
15974
- className: "impact-assessment-card impact-section",
15975
- sx: {
15976
- flex: 1,
15977
- minWidth: 300,
15978
- display: "flex",
15979
- flexDirection: "column",
15980
- height: "100%",
15981
- p: 0
15982
- },
15945
+ className: "impact-section",
15946
+ sx: { flex: 1, minWidth: 260, display: "flex", flexDirection: "column" },
15983
15947
  children: [
15984
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_material13.Box, { sx: { display: "flex", alignItems: "center", gap: "8px", mb: 3 }, children: [
15985
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react3.Brain, { size: 20, color: theme.palette.warning.main }),
15986
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.Typography, { variant: "h6", sx: { fontWeight: 600, color: theme.palette.text.primary }, children: "Impact Assessment" })
15948
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_material13.Typography, { variant: "body2", sx: { fontWeight: 600, mb: 0.5 }, children: [
15949
+ "How annoying is this?",
15950
+ " ",
15951
+ ["\u{1F60A}", "\u{1F610}", "\u{1F644}", "\u{1F620}", "\u{1F92C}"][(formData.annoyanceLevel ?? 3) - 1],
15952
+ " ",
15953
+ "(",
15954
+ formData.annoyanceLevel ?? 3,
15955
+ "/5)"
15987
15956
  ] }),
15988
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { height: "100%", display: "flex", flexDirection: "column", justifyContent: "space-between" }, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
15989
- import_material13.Paper,
15957
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.Box, { sx: { px: 1 }, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
15958
+ import_material13.Slider,
15990
15959
  {
15991
- variant: "outlined",
15960
+ size: "small",
15961
+ value: formData.annoyanceLevel,
15962
+ onChange: (_, value) => setFormData((prev) => ({ ...prev, annoyanceLevel: value })),
15963
+ min: 1,
15964
+ max: 5,
15965
+ step: 1,
15966
+ marks: true,
15992
15967
  sx: {
15993
- p: 4,
15994
- borderRadius: 3,
15995
- minHeight: 180,
15996
- 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%)",
15997
- border: `1px solid ${theme.palette.divider}`,
15998
- transition: "all 0.2s ease",
15999
- display: "flex",
16000
- flexDirection: "column",
16001
- flex: 1,
16002
- justifyContent: "center",
16003
- height: "100%",
16004
- "&:hover": {
16005
- transform: "translateY(-2px)",
16006
- boxShadow: theme.palette.mode === "dark" ? "0 8px 24px rgba(0,0,0,0.4)" : "0 8px 24px rgba(0,0,0,0.12)"
15968
+ "& .MuiSlider-track": {
15969
+ background: `linear-gradient(90deg, ${theme.palette.success.main}, ${theme.palette.warning.main}, ${theme.palette.error.main})`,
15970
+ border: "none"
15971
+ },
15972
+ "& .MuiSlider-thumb": {
15973
+ background: `linear-gradient(135deg, ${theme.palette.warning.main}, ${theme.palette.warning.dark})`
16007
15974
  }
16008
- },
16009
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_material13.Stack, { spacing: 3, children: [
16010
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_material13.Typography, { variant: "subtitle1", sx: { fontWeight: 600, display: "flex", alignItems: "center", gap: 2 }, children: [
16011
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
16012
- import_material13.Box,
16013
- {
16014
- sx: {
16015
- width: 28,
16016
- height: 28,
16017
- borderRadius: "50%",
16018
- bgcolor: theme.palette.warning.main + "20",
16019
- display: "flex",
16020
- alignItems: "center",
16021
- justifyContent: "center",
16022
- fontSize: "14px"
16023
- },
16024
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react3.Brain, { size: 22, color: theme.palette.warning.main })
16025
- }
16026
- ),
16027
- "How annoying is this issue? (",
16028
- formData.annoyanceLevel,
16029
- "/5)"
16030
- ] }),
16031
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.Box, { sx: { px: 2, py: 1 }, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
16032
- import_material13.Slider,
16033
- {
16034
- value: formData.annoyanceLevel,
16035
- onChange: (_, value) => setFormData((prev) => ({ ...prev, annoyanceLevel: value })),
16036
- min: 1,
16037
- max: 5,
16038
- step: 1,
16039
- marks: [
16040
- { value: 1, label: "\u{1F60A} Not at all" },
16041
- { value: 2, label: "\u{1F610} Slightly" },
16042
- { value: 3, label: "\u{1F644} Moderately" },
16043
- { value: 4, label: "\u{1F620} Very" },
16044
- { value: 5, label: "\u{1F92C} Extremely" }
16045
- ],
16046
- sx: {
16047
- height: 8,
16048
- "& .MuiSlider-mark": {
16049
- backgroundColor: theme.palette.divider,
16050
- width: 3,
16051
- height: 3
16052
- },
16053
- "& .MuiSlider-markLabel": {
16054
- fontSize: "0.8rem",
16055
- color: theme.palette.text.secondary,
16056
- transform: "translateX(-50%)",
16057
- whiteSpace: "nowrap",
16058
- top: 32,
16059
- fontWeight: 500
16060
- },
16061
- "& .MuiSlider-thumb": {
16062
- width: 24,
16063
- height: 24,
16064
- background: `linear-gradient(135deg, ${theme.palette.warning.main}, ${theme.palette.warning.dark})`,
16065
- boxShadow: `0 4px 12px ${theme.palette.warning.main}40`,
16066
- "&:hover, &.Mui-focusVisible": {
16067
- boxShadow: `0 0 0 12px ${theme.palette.warning.main}20, 0 4px 12px ${theme.palette.warning.main}40`
16068
- }
16069
- },
16070
- "& .MuiSlider-track": {
16071
- background: `linear-gradient(90deg, ${theme.palette.success.main}, ${theme.palette.warning.main}, ${theme.palette.error.main})`,
16072
- height: 6,
16073
- border: "none"
16074
- },
16075
- "& .MuiSlider-rail": {
16076
- height: 6,
16077
- backgroundColor: theme.palette.divider,
16078
- opacity: 0.3
16079
- },
16080
- mb: 5
16081
- // Space for labels
16082
- }
16083
- }
16084
- ) })
16085
- ] })
15975
+ }
16086
15976
  }
16087
15977
  ) })
16088
15978
  ]
@@ -16101,109 +15991,63 @@ var init_FeedbackModal = __esm({
16101
15991
  p: 0
16102
15992
  },
16103
15993
  children: [
16104
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_material13.Box, { sx: { display: "flex", alignItems: "center", gap: "8px", mb: 3 }, children: [
16105
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react3.Paperclip, { size: 20, color: theme.palette.primary.main }),
16106
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.Typography, { variant: "h6", sx: { fontWeight: 600, color: theme.palette.text.primary }, children: "Attachments" })
16107
- ] }),
16108
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { height: "100%", display: "flex", flexDirection: "column", justifyContent: "space-between" }, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
16109
- import_material13.Box,
16110
- {
16111
- sx: {
16112
- height: "100%",
16113
- display: "flex",
16114
- flexDirection: "column",
16115
- justifyContent: "center",
16116
- p: 0,
16117
- mb: 0,
16118
- backgroundColor: "transparent",
16119
- boxShadow: "none",
16120
- border: "none"
16121
- },
16122
- onClick: () => fileInputRef.current?.click(),
16123
- children: [
16124
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
16125
- "input",
16126
- {
16127
- ref: fileInputRef,
16128
- type: "file",
16129
- accept: "image/*",
16130
- style: { display: "none" },
16131
- onChange: handleFileUpload
16132
- }
16133
- ),
16134
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
16135
- import_material13.Box,
16136
- {
16137
- sx: {
16138
- flex: 1,
16139
- display: "flex",
16140
- flexDirection: "column",
16141
- justifyContent: "center",
16142
- alignItems: "center",
16143
- p: 2,
16144
- border: "2px dashed",
16145
- borderColor: (theme2) => theme2.palette.divider,
16146
- borderRadius: 2,
16147
- height: "100%",
16148
- mb: 0,
16149
- backgroundColor: "transparent",
16150
- boxShadow: "none"
16151
- },
16152
- children: [
16153
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
16154
- import_material13.Avatar,
16155
- {
16156
- sx: {
16157
- width: 56,
16158
- height: 56,
16159
- bgcolor: theme.palette.primary.main + "15",
16160
- color: theme.palette.primary.main,
16161
- boxShadow: `0 4px 16px ${theme.palette.primary.main}20`,
16162
- transition: "all 0.3s ease"
16163
- },
16164
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react3.Paperclip, { size: 28 })
16165
- }
16166
- ),
16167
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_material13.Box, { sx: { textAlign: "center" }, children: [
16168
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.Typography, { variant: "h6", sx: { fontWeight: 600, mb: 1, fontSize: "1.1rem" }, children: "Attach One Image" }),
16169
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.Typography, { variant: "body2", color: "text.secondary", sx: { mb: 1, fontSize: "0.95rem" }, children: "Click here to upload a single image" }),
16170
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.Typography, { variant: "caption", color: "text.secondary", sx: {
16171
- opacity: 0.8,
16172
- fontSize: "0.85rem",
16173
- background: theme.palette.mode === "dark" ? "rgba(255,255,255,0.05)" : "rgba(0,0,0,0.05)",
16174
- px: 2,
16175
- py: 0.5,
16176
- borderRadius: 1
16177
- }, children: "Support: Images only (JPG, PNG, GIF) - Max 10MB" })
16178
- ] })
16179
- ]
16180
- }
16181
- ),
16182
- (formData.images && formData.images.length > 0 || formData.attachments && formData.attachments.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
16183
- import_material13.Alert,
16184
- {
16185
- severity: "info",
16186
- sx: {
16187
- mt: "auto",
16188
- textAlign: "left",
16189
- fontSize: "0.75rem",
16190
- py: 0.5,
16191
- 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%)",
16192
- border: `1px solid ${theme.palette.info.main}30`,
16193
- "& .MuiAlert-icon": {
16194
- color: theme.palette.info.main,
16195
- fontSize: "0.875rem"
16196
- },
16197
- "& .MuiAlert-message": {
16198
- fontSize: "0.75rem"
16199
- }
16200
- },
16201
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.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" })
15994
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { display: "flex", flexDirection: "column" }, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_material13.Box, { onClick: () => fileInputRef.current?.click(), children: [
15995
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
15996
+ "input",
15997
+ {
15998
+ ref: fileInputRef,
15999
+ type: "file",
16000
+ accept: "image/*",
16001
+ style: { display: "none" },
16002
+ onChange: handleFileUpload
16003
+ }
16004
+ ),
16005
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
16006
+ import_material13.Box,
16007
+ {
16008
+ sx: {
16009
+ display: "flex",
16010
+ alignItems: "center",
16011
+ gap: 1,
16012
+ px: 1.5,
16013
+ py: 1,
16014
+ border: "1px dashed",
16015
+ borderColor: (theme2) => theme2.palette.divider,
16016
+ borderRadius: 2,
16017
+ cursor: "pointer",
16018
+ color: theme.palette.text.secondary,
16019
+ "&:hover": { borderColor: theme.palette.primary.main, color: theme.palette.primary.main }
16020
+ },
16021
+ children: [
16022
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react3.Paperclip, { size: 18 }),
16023
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.Typography, { variant: "body2", sx: { fontWeight: 500 }, children: "Attach an image" }),
16024
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.Typography, { variant: "caption", color: "text.secondary", sx: { ml: "auto" }, children: "JPG/PNG/GIF \xB7 10MB" })
16025
+ ]
16026
+ }
16027
+ ),
16028
+ (formData.images && formData.images.length > 0 || formData.attachments && formData.attachments.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
16029
+ import_material13.Alert,
16030
+ {
16031
+ severity: "info",
16032
+ sx: {
16033
+ mt: "auto",
16034
+ textAlign: "left",
16035
+ fontSize: "0.75rem",
16036
+ py: 0.5,
16037
+ 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%)",
16038
+ border: `1px solid ${theme.palette.info.main}30`,
16039
+ "& .MuiAlert-icon": {
16040
+ color: theme.palette.info.main,
16041
+ fontSize: "0.875rem"
16042
+ },
16043
+ "& .MuiAlert-message": {
16044
+ fontSize: "0.75rem"
16202
16045
  }
16203
- )
16204
- ]
16205
- }
16206
- ) }),
16046
+ },
16047
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.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" })
16048
+ }
16049
+ )
16050
+ ] }) }),
16207
16051
  formData.images && formData.images.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_material13.Box, { sx: { mt: 2 }, children: [
16208
16052
  /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_material13.Box, { sx: { display: "flex", alignItems: "center", gap: 1, mb: 1.5 }, children: [
16209
16053
  /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react3.Camera, { size: 16 }),
@@ -21369,7 +21213,7 @@ var init_voiceModeStore = __esm({
21369
21213
  });
21370
21214
 
21371
21215
  // src/chat/chat-input.tsx
21372
- var import_react46, import_material39, import_styles24, import_shallow, import_jsx_runtime39, ChatInput, chat_input_default;
21216
+ var import_react46, import_material39, import_lucide_react8, import_styles24, import_shallow, import_jsx_runtime39, ChatInput, chat_input_default;
21373
21217
  var init_chat_input = __esm({
21374
21218
  "src/chat/chat-input.tsx"() {
21375
21219
  "use strict";
@@ -21378,6 +21222,7 @@ var init_chat_input = __esm({
21378
21222
  init_conversationStore();
21379
21223
  init_engine_picker();
21380
21224
  init_util();
21225
+ import_lucide_react8 = require("lucide-react");
21381
21226
  init_preferencesStore();
21382
21227
  init_packageSettingsStore();
21383
21228
  init_transcriber();
@@ -21743,7 +21588,7 @@ ${sanitize(
21743
21588
  "&:hover": { bgcolor: hoverBadgeBackground }
21744
21589
  },
21745
21590
  "aria-label": "Change voice",
21746
- children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(RecordVoiceOverIcon, { fontSize: "small" })
21591
+ children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react8.Volume2, { size: 18 })
21747
21592
  }
21748
21593
  ) }, key ?? "voice");
21749
21594
  };
@@ -25313,13 +25158,13 @@ var init_useNetworkStatus = __esm({
25313
25158
  });
25314
25159
 
25315
25160
  // src/chat/project-management-modal.tsx
25316
- var import_react53, import_material42, import_lucide_react8, import_styles26, import_jsx_runtime42, DEFAULT_COLORS2, ProjectManagementModal, project_management_modal_default;
25161
+ var import_react53, import_material42, import_lucide_react9, import_styles26, import_jsx_runtime42, DEFAULT_COLORS2, ProjectManagementModal, project_management_modal_default;
25317
25162
  var init_project_management_modal = __esm({
25318
25163
  "src/chat/project-management-modal.tsx"() {
25319
25164
  "use strict";
25320
25165
  import_react53 = require("react");
25321
25166
  import_material42 = require("@mui/material");
25322
- import_lucide_react8 = require("lucide-react");
25167
+ import_lucide_react9 = require("lucide-react");
25323
25168
  import_styles26 = require("@mui/material/styles");
25324
25169
  init_projectStore();
25325
25170
  init_conversationStore();
@@ -25548,7 +25393,7 @@ var init_project_management_modal = __esm({
25548
25393
  flex: 1
25549
25394
  },
25550
25395
  children: [
25551
- showCreateForm && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_material42.IconButton, { onClick: resetForm, size: "small", sx: { mr: 0.5 }, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react8.ArrowLeft, { size: 16 }) }),
25396
+ showCreateForm && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_material42.IconButton, { onClick: resetForm, size: "small", sx: { mr: 0.5 }, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react9.ArrowLeft, { size: 16 }) }),
25552
25397
  /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
25553
25398
  import_material42.Typography,
25554
25399
  {
@@ -25566,7 +25411,7 @@ var init_project_management_modal = __esm({
25566
25411
  ]
25567
25412
  }
25568
25413
  ),
25569
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_material42.IconButton, { onClick: handleClose, size: "small", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react8.X, {}) })
25414
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_material42.IconButton, { onClick: handleClose, size: "small", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react9.X, {}) })
25570
25415
  ]
25571
25416
  }
25572
25417
  ),
@@ -25653,7 +25498,7 @@ var init_project_management_modal = __esm({
25653
25498
  /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
25654
25499
  import_material42.Button,
25655
25500
  {
25656
- startIcon: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react8.Plus, {}),
25501
+ startIcon: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react9.Plus, {}),
25657
25502
  onClick: () => setShowCreateForm(true),
25658
25503
  variant: "contained",
25659
25504
  sx: {
@@ -25678,7 +25523,7 @@ var init_project_management_modal = __esm({
25678
25523
  backgroundColor: subtleSurface
25679
25524
  },
25680
25525
  children: [
25681
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react8.Folder, { size: 48, style: { marginBottom: 8, opacity: 0.5 } }),
25526
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react9.Folder, { size: 48, style: { marginBottom: 8, opacity: 0.5 } }),
25682
25527
  /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_material42.Typography, { variant: "body1", sx: { fontWeight: 600 }, children: "No projects yet" }),
25683
25528
  /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_material42.Typography, { variant: "body2", children: "Create your first project to organize conversations." })
25684
25529
  ]
@@ -25713,7 +25558,7 @@ var init_project_management_modal = __esm({
25713
25558
  height: 36,
25714
25559
  fontSize: "1rem"
25715
25560
  },
25716
- children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react8.Folder, { size: 16 })
25561
+ children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react9.Folder, { size: 16 })
25717
25562
  }
25718
25563
  ),
25719
25564
  /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_material42.Box, { sx: { flex: 1, minWidth: 0 }, children: [
@@ -25764,7 +25609,7 @@ var init_project_management_modal = __esm({
25764
25609
  mt: 0.25,
25765
25610
  zIndex: 1
25766
25611
  },
25767
- children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react8.MoreVertical, { size: 16 })
25612
+ children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react9.MoreVertical, { size: 16 })
25768
25613
  }
25769
25614
  )
25770
25615
  ]
@@ -25840,7 +25685,7 @@ var init_project_management_modal = __esm({
25840
25685
  startEdit(selectedProject);
25841
25686
  },
25842
25687
  children: /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_material42.Box, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
25843
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react8.Pencil, { size: 16 }),
25688
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react9.Pencil, { size: 16 }),
25844
25689
  /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_material42.Typography, { variant: "body2", color: "inherit", children: "Edit" })
25845
25690
  ] })
25846
25691
  }
@@ -25854,7 +25699,7 @@ var init_project_management_modal = __esm({
25854
25699
  },
25855
25700
  sx: { color: theme.palette.error.main },
25856
25701
  children: /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_material42.Box, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
25857
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react8.Trash2, { size: 16 }),
25702
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react9.Trash2, { size: 16 }),
25858
25703
  /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_material42.Typography, { variant: "body2", color: "inherit", children: "Delete" })
25859
25704
  ] })
25860
25705
  }
@@ -25906,13 +25751,13 @@ var init_project_management_modal = __esm({
25906
25751
  });
25907
25752
 
25908
25753
  // src/chat/move-conversation-modal.tsx
25909
- var import_react54, import_material43, import_lucide_react9, import_styles27, import_jsx_runtime43, MoveConversationModal, move_conversation_modal_default;
25754
+ var import_react54, import_material43, import_lucide_react10, import_styles27, import_jsx_runtime43, MoveConversationModal, move_conversation_modal_default;
25910
25755
  var init_move_conversation_modal = __esm({
25911
25756
  "src/chat/move-conversation-modal.tsx"() {
25912
25757
  "use strict";
25913
25758
  import_react54 = require("react");
25914
25759
  import_material43 = require("@mui/material");
25915
- import_lucide_react9 = require("lucide-react");
25760
+ import_lucide_react10 = require("lucide-react");
25916
25761
  import_styles27 = require("@mui/material/styles");
25917
25762
  init_projectStore();
25918
25763
  init_conversationStore();
@@ -25997,7 +25842,7 @@ var init_move_conversation_modal = __esm({
25997
25842
  width: 32,
25998
25843
  height: 32
25999
25844
  },
26000
- children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_lucide_react9.Inbox, {})
25845
+ children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_lucide_react10.Inbox, {})
26001
25846
  }
26002
25847
  ) }),
26003
25848
  /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
@@ -26033,7 +25878,7 @@ var init_move_conversation_modal = __esm({
26033
25878
  width: 32,
26034
25879
  height: 32
26035
25880
  },
26036
- children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_lucide_react9.Folder, {})
25881
+ children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_lucide_react10.Folder, {})
26037
25882
  }
26038
25883
  ) }),
26039
25884
  /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
@@ -26077,13 +25922,13 @@ var init_move_conversation_modal = __esm({
26077
25922
  });
26078
25923
 
26079
25924
  // src/chat/simple-conversation-item.tsx
26080
- var import_react55, import_material44, import_lucide_react10, import_styles28, import_jsx_runtime44, SimpleConversationItem, simple_conversation_item_default;
25925
+ var import_react55, import_material44, import_lucide_react11, import_styles28, import_jsx_runtime44, SimpleConversationItem, simple_conversation_item_default;
26081
25926
  var init_simple_conversation_item = __esm({
26082
25927
  "src/chat/simple-conversation-item.tsx"() {
26083
25928
  "use strict";
26084
25929
  import_react55 = require("react");
26085
25930
  import_material44 = require("@mui/material");
26086
- import_lucide_react10 = require("lucide-react");
25931
+ import_lucide_react11 = require("lucide-react");
26087
25932
  import_styles28 = require("@mui/material/styles");
26088
25933
  import_jsx_runtime44 = require("react/jsx-runtime");
26089
25934
  SimpleConversationItem = ({
@@ -26311,7 +26156,7 @@ var init_simple_conversation_item = __esm({
26311
26156
  },
26312
26157
  children: [
26313
26158
  !isMobile && !isEditing && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
26314
- import_lucide_react10.GripVertical,
26159
+ import_lucide_react11.GripVertical,
26315
26160
  {
26316
26161
  size: 16,
26317
26162
  color: theme.palette.text.disabled,
@@ -26405,7 +26250,7 @@ var init_simple_conversation_item = __esm({
26405
26250
  }
26406
26251
  }
26407
26252
  },
26408
- children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react10.MoreVertical, { size: 16 })
26253
+ children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react11.MoreVertical, { size: 16 })
26409
26254
  }
26410
26255
  ),
26411
26256
  /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
@@ -26436,15 +26281,15 @@ var init_simple_conversation_item = __esm({
26436
26281
  },
26437
26282
  children: [
26438
26283
  onRename && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_material44.MenuItem, { onClick: handleEdit, children: [
26439
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_material44.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react10.Pencil, { size: 16 }) }),
26284
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_material44.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react11.Pencil, { size: 16 }) }),
26440
26285
  /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_material44.ListItemText, { children: "Rename" })
26441
26286
  ] }),
26442
26287
  onMove && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_material44.MenuItem, { onClick: handleMove, children: [
26443
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_material44.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react10.MailOpen, { size: 16 }) }),
26288
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_material44.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react11.MailOpen, { size: 16 }) }),
26444
26289
  /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_material44.ListItemText, { children: "Move to Project" })
26445
26290
  ] }),
26446
26291
  /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_material44.MenuItem, { onClick: handleDelete, children: [
26447
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_material44.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react10.Trash2, { size: 16 }) }),
26292
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_material44.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react11.Trash2, { size: 16 }) }),
26448
26293
  /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_material44.ListItemText, { children: "Delete" })
26449
26294
  ] })
26450
26295
  ]
@@ -26517,13 +26362,13 @@ var init_simple_conversation_item = __esm({
26517
26362
  });
26518
26363
 
26519
26364
  // src/chat/project-header.tsx
26520
- var import_react56, import_material45, import_lucide_react11, import_styles29, import_jsx_runtime45, ProjectHeader, project_header_default;
26365
+ var import_react56, import_material45, import_lucide_react12, import_styles29, import_jsx_runtime45, ProjectHeader, project_header_default;
26521
26366
  var init_project_header = __esm({
26522
26367
  "src/chat/project-header.tsx"() {
26523
26368
  "use strict";
26524
26369
  import_react56 = require("react");
26525
26370
  import_material45 = require("@mui/material");
26526
- import_lucide_react11 = require("lucide-react");
26371
+ import_lucide_react12 = require("lucide-react");
26527
26372
  import_styles29 = require("@mui/material/styles");
26528
26373
  init_conversationStore();
26529
26374
  init_projectStore();
@@ -26550,7 +26395,7 @@ var init_project_header = __esm({
26550
26395
  const [renameDraft, setRenameDraft] = (0, import_react56.useState)(projectName);
26551
26396
  const renameActionRef = (0, import_react56.useRef)("none");
26552
26397
  const isUngrouped = projectId === null;
26553
- const Icon = isCollapsed ? import_lucide_react11.Folder : import_lucide_react11.FolderOpen;
26398
+ const Icon = isCollapsed ? import_lucide_react12.Folder : import_lucide_react12.FolderOpen;
26554
26399
  const handleAddConversation = (e) => {
26555
26400
  e.stopPropagation();
26556
26401
  createNewConversation(projectId || void 0);
@@ -26631,7 +26476,7 @@ var init_project_header = __esm({
26631
26476
  mr: 1.5
26632
26477
  },
26633
26478
  children: isUngrouped ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
26634
- import_lucide_react11.Inbox,
26479
+ import_lucide_react12.Inbox,
26635
26480
  {
26636
26481
  size: 16,
26637
26482
  color: theme.palette.text.disabled,
@@ -26747,7 +26592,7 @@ var init_project_header = __esm({
26747
26592
  onRenameCancelDelete ? onRenameCancelDelete() : cancelRename();
26748
26593
  },
26749
26594
  sx: { color: (0, import_material45.alpha)(theme.palette.error.main, 0.9) },
26750
- children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react11.X, { size: 16 })
26595
+ children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react12.X, { size: 16 })
26751
26596
  }
26752
26597
  ) }),
26753
26598
  /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_material45.Tooltip, { title: "Save", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
@@ -26760,7 +26605,7 @@ var init_project_header = __esm({
26760
26605
  commitRename();
26761
26606
  },
26762
26607
  sx: { color: theme.palette.success.main },
26763
- children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react11.Check, { size: 16 })
26608
+ children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react12.Check, { size: 16 })
26764
26609
  }
26765
26610
  ) })
26766
26611
  ] }),
@@ -26781,7 +26626,7 @@ var init_project_header = __esm({
26781
26626
  },
26782
26627
  transition: "all 0.2s ease"
26783
26628
  },
26784
- children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react11.Plus, { size: 16 })
26629
+ children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react12.Plus, { size: 16 })
26785
26630
  }
26786
26631
  ) }),
26787
26632
  !isUngrouped && !isRenaming && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
@@ -26792,7 +26637,7 @@ var init_project_header = __esm({
26792
26637
  color: theme.palette.text.secondary,
26793
26638
  transition: "transform 0.2s ease"
26794
26639
  },
26795
- children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react11.ChevronDown, { size: 16 }) : /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react11.ChevronUp, { size: 16 })
26640
+ children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react12.ChevronDown, { size: 16 }) : /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react12.ChevronUp, { size: 16 })
26796
26641
  }
26797
26642
  )
26798
26643
  ]
@@ -26822,13 +26667,13 @@ var init_tooltips = __esm({
26822
26667
  });
26823
26668
 
26824
26669
  // src/chat/conversation-drawer.tsx
26825
- var import_react57, import_material46, import_lucide_react12, import_styles30, import_jsx_runtime46, BANDIT_AVATAR, coerceOptionalString, deriveInitials, ConversationDrawer, conversation_drawer_default;
26670
+ var import_react57, import_material46, import_lucide_react13, import_styles30, import_jsx_runtime46, BANDIT_AVATAR, coerceOptionalString, deriveInitials, ConversationDrawer, conversation_drawer_default;
26826
26671
  var init_conversation_drawer = __esm({
26827
26672
  "src/chat/conversation-drawer.tsx"() {
26828
26673
  "use strict";
26829
26674
  import_react57 = require("react");
26830
26675
  import_material46 = require("@mui/material");
26831
- import_lucide_react12 = require("lucide-react");
26676
+ import_lucide_react13 = require("lucide-react");
26832
26677
  import_styles30 = require("@mui/material/styles");
26833
26678
  init_conversationStore();
26834
26679
  init_projectStore();
@@ -26843,6 +26688,9 @@ var init_conversation_drawer = __esm({
26843
26688
  init_project_header();
26844
26689
  init_debugLogger();
26845
26690
  init_tooltips();
26691
+ init_conversationSyncStore();
26692
+ init_preferencesStore();
26693
+ init_useFeatures();
26846
26694
  import_jsx_runtime46 = require("react/jsx-runtime");
26847
26695
  BANDIT_AVATAR = "https://cdn.burtson.ai/images/bandit-head.png";
26848
26696
  coerceOptionalString = (value) => {
@@ -27069,6 +26917,30 @@ var init_conversation_drawer = __esm({
27069
26917
  onClose();
27070
26918
  }
27071
26919
  };
26920
+ const { preferences } = usePreferencesStore();
26921
+ const { showLimitedAdminPanel } = useFeatureVisibility();
26922
+ const syncEnabled = useConversationSyncStore((s) => s.syncEnabled);
26923
+ const syncStatus = useConversationSyncStore((s) => s.status);
26924
+ const runSync = useConversationSyncStore((s) => s.runSync);
26925
+ const goToHome = () => {
26926
+ const resolvedHomeUrl = preferences.homeUrl?.trim() || usePackageSettingsStore.getState().settings?.homeUrl?.trim() || "";
26927
+ if (resolvedHomeUrl) {
26928
+ window.location.href = resolvedHomeUrl;
26929
+ return;
26930
+ }
26931
+ const navigatorWithStandalone = window.navigator;
26932
+ const isStandalone = window.matchMedia?.("(display-mode: standalone)").matches || navigatorWithStandalone.standalone === true;
26933
+ if (isStandalone) {
26934
+ try {
26935
+ sessionStorage.setItem("banditPwaStayOnHome", "true");
26936
+ } catch {
26937
+ }
26938
+ window.location.href = "/?mode=home";
26939
+ return;
26940
+ }
26941
+ window.location.href = "/";
26942
+ };
26943
+ const managementPath = typeof window !== "undefined" && window.location.pathname.startsWith("/playground") ? "/playground/management" : "/management";
27072
26944
  const handleSearchClear = () => {
27073
26945
  setSearchQuery("");
27074
26946
  };
@@ -27152,6 +27024,31 @@ var init_conversation_drawer = __esm({
27152
27024
  gap: 1
27153
27025
  },
27154
27026
  children: [
27027
+ syncEnabled && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_material46.Tooltip, { title: syncStatus === "error" ? "Sync needs attention \u2014 tap to retry" : "Sync conversations", arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
27028
+ import_material46.IconButton,
27029
+ {
27030
+ onClick: () => {
27031
+ if (syncStatus !== "syncing") void runSync({ force: true });
27032
+ },
27033
+ size: "small",
27034
+ "aria-label": "Sync conversations",
27035
+ sx: {
27036
+ color: syncStatus === "error" ? theme.palette.error.main : theme.palette.text.secondary,
27037
+ ...syncStatus === "syncing" && {
27038
+ animation: "bandit-sync-spin 1s linear infinite",
27039
+ "@keyframes bandit-sync-spin": {
27040
+ "0%": { transform: "rotate(0deg)" },
27041
+ "100%": { transform: "rotate(360deg)" }
27042
+ }
27043
+ },
27044
+ "&:hover": {
27045
+ color: theme.palette.primary.main,
27046
+ bgcolor: (0, import_material46.alpha)(theme.palette.primary.main, 0.1)
27047
+ }
27048
+ },
27049
+ children: syncStatus === "error" ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.CircleAlert, {}) : /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.RefreshCw, {})
27050
+ }
27051
+ ) }),
27155
27052
  /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_material46.Tooltip, { title: "Memories", arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
27156
27053
  import_material46.IconButton,
27157
27054
  {
@@ -27165,7 +27062,7 @@ var init_conversation_drawer = __esm({
27165
27062
  bgcolor: (0, import_material46.alpha)(theme.palette.primary.main, 0.1)
27166
27063
  }
27167
27064
  },
27168
- children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react12.Brain, {})
27065
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.Brain, {})
27169
27066
  }
27170
27067
  ) }),
27171
27068
  /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_material46.Tooltip, { title: tooltip("manageProjects"), arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
@@ -27181,7 +27078,7 @@ var init_conversation_drawer = __esm({
27181
27078
  bgcolor: (0, import_material46.alpha)(theme.palette.primary.main, 0.1)
27182
27079
  }
27183
27080
  },
27184
- children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react12.Folder, {})
27081
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.Folder, {})
27185
27082
  }
27186
27083
  ) }),
27187
27084
  /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_material46.Tooltip, { title: tooltip("conversationOptions"), arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
@@ -27197,7 +27094,7 @@ var init_conversation_drawer = __esm({
27197
27094
  bgcolor: (0, import_material46.alpha)(theme.palette.text.primary, 0.1)
27198
27095
  }
27199
27096
  },
27200
- children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react12.MoreVertical, {})
27097
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.MoreVertical, {})
27201
27098
  }
27202
27099
  ) }),
27203
27100
  isMobile && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_material46.Tooltip, { title: tooltip("closeConversationsPanel"), children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
@@ -27217,7 +27114,7 @@ var init_conversation_drawer = __esm({
27217
27114
  bgcolor: (0, import_material46.alpha)(theme.palette.error.main, 0.1)
27218
27115
  }
27219
27116
  },
27220
- children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react12.X, {})
27117
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.X, {})
27221
27118
  }
27222
27119
  ) })
27223
27120
  ]
@@ -27233,7 +27130,7 @@ var init_conversation_drawer = __esm({
27233
27130
  onChange: (e) => setSearchQuery(e.target.value),
27234
27131
  variant: "outlined",
27235
27132
  InputProps: {
27236
- startAdornment: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_material46.InputAdornment, { position: "start", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react12.Search, { size: 16, color: theme.palette.text.secondary }) }),
27133
+ startAdornment: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_material46.InputAdornment, { position: "start", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.Search, { size: 16, color: theme.palette.text.secondary }) }),
27237
27134
  endAdornment: searchQuery && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_material46.InputAdornment, { position: "end", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_material46.Tooltip, { title: tooltip("clearSearch"), children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
27238
27135
  import_material46.IconButton,
27239
27136
  {
@@ -27242,7 +27139,7 @@ var init_conversation_drawer = __esm({
27242
27139
  edge: "end",
27243
27140
  "aria-label": tooltip("clearSearch"),
27244
27141
  sx: { color: theme.palette.text.secondary },
27245
- children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react12.X, { size: 16 })
27142
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.X, { size: 16 })
27246
27143
  }
27247
27144
  ) }) })
27248
27145
  },
@@ -27308,7 +27205,7 @@ var init_conversation_drawer = __esm({
27308
27205
  justifyContent: "center",
27309
27206
  flexShrink: 0
27310
27207
  },
27311
- children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react12.Folder, { size: 16, color: theme.palette.success.main })
27208
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.Folder, { size: 16, color: theme.palette.success.main })
27312
27209
  }
27313
27210
  ),
27314
27211
  /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
@@ -27325,7 +27222,7 @@ var init_conversation_drawer = __esm({
27325
27222
  size: "small",
27326
27223
  "aria-label": tooltip("addProject"),
27327
27224
  sx: { color: theme.palette.success.main },
27328
- children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react12.Plus, { size: 16 })
27225
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.Plus, { size: 16 })
27329
27226
  }
27330
27227
  ) })
27331
27228
  ]
@@ -27347,7 +27244,7 @@ var init_conversation_drawer = __esm({
27347
27244
  /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_material46.Divider, { sx: { flex: 1, opacity: 0.6 } }),
27348
27245
  /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_material46.Box, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
27349
27246
  /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
27350
- import_lucide_react12.Inbox,
27247
+ import_lucide_react13.Inbox,
27351
27248
  {
27352
27249
  size: 14,
27353
27250
  color: theme.palette.text.disabled,
@@ -27571,6 +27468,44 @@ var init_conversation_drawer = __esm({
27571
27468
  ]
27572
27469
  }
27573
27470
  ),
27471
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
27472
+ import_material46.IconButton,
27473
+ {
27474
+ "aria-label": "Go to home page",
27475
+ title: "Home",
27476
+ onClick: (event) => {
27477
+ event.stopPropagation();
27478
+ goToHome();
27479
+ },
27480
+ sx: {
27481
+ flexShrink: 0,
27482
+ width: 30,
27483
+ height: 30,
27484
+ border: `1px solid ${(0, import_material46.alpha)(theme.palette.divider, 0.8)}`,
27485
+ color: theme.palette.text.secondary
27486
+ },
27487
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.House, { size: 16 })
27488
+ }
27489
+ ),
27490
+ user2 && showLimitedAdminPanel() && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
27491
+ import_material46.IconButton,
27492
+ {
27493
+ "aria-label": "Management & settings",
27494
+ title: "Management & settings",
27495
+ onClick: (event) => {
27496
+ event.stopPropagation();
27497
+ window.location.href = managementPath;
27498
+ },
27499
+ sx: {
27500
+ flexShrink: 0,
27501
+ width: 30,
27502
+ height: 30,
27503
+ border: `1px solid ${(0, import_material46.alpha)(theme.palette.divider, 0.8)}`,
27504
+ color: theme.palette.text.secondary
27505
+ },
27506
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.SlidersHorizontal, { size: 16 })
27507
+ }
27508
+ ),
27574
27509
  user2 && /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment, { children: [
27575
27510
  /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
27576
27511
  import_material46.Box,
@@ -27586,7 +27521,7 @@ var init_conversation_drawer = __esm({
27586
27521
  border: `1px solid ${(0, import_material46.alpha)(theme.palette.divider, 0.8)}`,
27587
27522
  color: theme.palette.text.secondary
27588
27523
  },
27589
- children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react12.Settings, { size: 16 })
27524
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.Settings, { size: 16 })
27590
27525
  }
27591
27526
  ),
27592
27527
  /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
@@ -27607,7 +27542,7 @@ var init_conversation_drawer = __esm({
27607
27542
  color: theme.palette.error.main,
27608
27543
  "&:hover": { bgcolor: (0, import_material46.alpha)(theme.palette.error.main, 0.1) }
27609
27544
  },
27610
- children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react12.LogOut, { size: 16 })
27545
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.LogOut, { size: 16 })
27611
27546
  }
27612
27547
  )
27613
27548
  ] })
@@ -27657,7 +27592,7 @@ var init_conversation_drawer = __esm({
27657
27592
  },
27658
27593
  sx: { color: theme.palette.error.main },
27659
27594
  children: [
27660
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_material46.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react12.Trash2, { size: 16, color: theme.palette.error.main }) }),
27595
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_material46.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react13.Trash2, { size: 16, color: theme.palette.error.main }) }),
27661
27596
  /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_material46.ListItemText, { children: "Clear All Conversations" })
27662
27597
  ]
27663
27598
  }
@@ -27696,13 +27631,13 @@ var init_conversation_drawer = __esm({
27696
27631
  });
27697
27632
 
27698
27633
  // src/chat/enhanced-mobile-conversations-modal.tsx
27699
- var import_react58, import_material47, import_lucide_react13, import_styles31, import_jsx_runtime47, BANDIT_AVATAR2, coerceOptionalString2, deriveInitials2, EnhancedMobileConversationsModal, enhanced_mobile_conversations_modal_default;
27634
+ var import_react58, import_material47, import_lucide_react14, import_styles31, import_jsx_runtime47, BANDIT_AVATAR2, coerceOptionalString2, deriveInitials2, EnhancedMobileConversationsModal, enhanced_mobile_conversations_modal_default;
27700
27635
  var init_enhanced_mobile_conversations_modal = __esm({
27701
27636
  "src/chat/enhanced-mobile-conversations-modal.tsx"() {
27702
27637
  "use strict";
27703
27638
  import_react58 = require("react");
27704
27639
  import_material47 = require("@mui/material");
27705
- import_lucide_react13 = require("lucide-react");
27640
+ import_lucide_react14 = require("lucide-react");
27706
27641
  import_styles31 = require("@mui/material/styles");
27707
27642
  init_conversationStore();
27708
27643
  init_projectStore();
@@ -28145,7 +28080,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
28145
28080
  }
28146
28081
  }
28147
28082
  },
28148
- children: syncStatus === "error" ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react13.CircleAlert, {}) : /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react13.RefreshCw, {})
28083
+ children: syncStatus === "error" ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.CircleAlert, {}) : /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.RefreshCw, {})
28149
28084
  }
28150
28085
  ),
28151
28086
  /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
@@ -28154,7 +28089,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
28154
28089
  onClick: () => setMemoryModalOpen(true),
28155
28090
  "aria-label": "Memory",
28156
28091
  sx: { color: theme.palette.text.secondary },
28157
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react13.Brain, {})
28092
+ children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.Brain, {})
28158
28093
  }
28159
28094
  ),
28160
28095
  /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
@@ -28162,7 +28097,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
28162
28097
  {
28163
28098
  onClick: () => setProjectManagementOpen(true),
28164
28099
  sx: { color: theme.palette.text.secondary },
28165
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react13.Folder, {})
28100
+ children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.Folder, {})
28166
28101
  }
28167
28102
  ),
28168
28103
  /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
@@ -28170,7 +28105,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
28170
28105
  {
28171
28106
  onClick: handleMenuOpen,
28172
28107
  sx: { color: theme.palette.text.secondary },
28173
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react13.MoreVertical, {})
28108
+ children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.MoreVertical, {})
28174
28109
  }
28175
28110
  ),
28176
28111
  /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
@@ -28178,7 +28113,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
28178
28113
  {
28179
28114
  onClick: onClose,
28180
28115
  sx: { color: theme.palette.text.secondary },
28181
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react13.X, {})
28116
+ children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.X, {})
28182
28117
  }
28183
28118
  )
28184
28119
  ] })
@@ -28194,7 +28129,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
28194
28129
  onChange: (e) => setSearchQuery(e.target.value),
28195
28130
  variant: "outlined",
28196
28131
  InputProps: {
28197
- startAdornment: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_material47.InputAdornment, { position: "start", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react13.Search, { size: 16, color: theme.palette.text.secondary }) }),
28132
+ startAdornment: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_material47.InputAdornment, { position: "start", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.Search, { size: 16, color: theme.palette.text.secondary }) }),
28198
28133
  endAdornment: searchQuery && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_material47.InputAdornment, { position: "end", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
28199
28134
  import_material47.IconButton,
28200
28135
  {
@@ -28202,7 +28137,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
28202
28137
  size: "small",
28203
28138
  edge: "end",
28204
28139
  sx: { color: theme.palette.text.secondary },
28205
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react13.X, { size: 16 })
28140
+ children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.X, { size: 16 })
28206
28141
  }
28207
28142
  ) })
28208
28143
  }
@@ -28358,7 +28293,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
28358
28293
  justifyContent: "center",
28359
28294
  flexShrink: 0
28360
28295
  },
28361
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react13.Folder, { size: 16, color: theme.palette.success.main })
28296
+ children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.Folder, { size: 16, color: theme.palette.success.main })
28362
28297
  }
28363
28298
  ),
28364
28299
  /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
@@ -28369,7 +28304,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
28369
28304
  children: "New Project"
28370
28305
  }
28371
28306
  ),
28372
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_material47.IconButton, { size: "small", sx: { color: theme.palette.success.main }, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react13.Plus, { size: 16 }) })
28307
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_material47.IconButton, { size: "small", sx: { color: theme.palette.success.main }, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.Plus, { size: 16 }) })
28373
28308
  ]
28374
28309
  }
28375
28310
  ),
@@ -28389,7 +28324,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
28389
28324
  /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_material47.Divider, { sx: { flex: 1, opacity: 0.6 } }),
28390
28325
  /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_material47.Box, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
28391
28326
  /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
28392
- import_lucide_react13.Inbox,
28327
+ import_lucide_react14.Inbox,
28393
28328
  {
28394
28329
  size: 14,
28395
28330
  color: theme.palette.text.disabled,
@@ -28584,7 +28519,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
28584
28519
  createNewConversation();
28585
28520
  onClose();
28586
28521
  },
28587
- startIcon: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react13.Plus, { size: 18 }),
28522
+ startIcon: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.Plus, { size: 18 }),
28588
28523
  sx: {
28589
28524
  pointerEvents: "auto",
28590
28525
  textTransform: "none",
@@ -28675,7 +28610,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
28675
28610
  border: `1px solid ${(0, import_styles31.alpha)(theme.palette.divider, 0.8)}`,
28676
28611
  color: theme.palette.text.secondary
28677
28612
  },
28678
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react13.House, { size: 16 })
28613
+ children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.House, { size: 16 })
28679
28614
  }
28680
28615
  ),
28681
28616
  user2 && showLimitedAdminPanel() && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
@@ -28694,7 +28629,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
28694
28629
  border: `1px solid ${(0, import_styles31.alpha)(theme.palette.divider, 0.8)}`,
28695
28630
  color: theme.palette.text.secondary
28696
28631
  },
28697
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react13.SlidersHorizontal, { size: 16 })
28632
+ children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.SlidersHorizontal, { size: 16 })
28698
28633
  }
28699
28634
  ),
28700
28635
  user2 && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [
@@ -28712,7 +28647,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
28712
28647
  border: `1px solid ${(0, import_styles31.alpha)(theme.palette.divider, 0.8)}`,
28713
28648
  color: theme.palette.text.secondary
28714
28649
  },
28715
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react13.Settings, { size: 16 })
28650
+ children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.Settings, { size: 16 })
28716
28651
  }
28717
28652
  ),
28718
28653
  /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
@@ -28733,7 +28668,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
28733
28668
  color: theme.palette.error.main,
28734
28669
  "&:hover": { bgcolor: (0, import_styles31.alpha)(theme.palette.error.main, 0.1) }
28735
28670
  },
28736
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react13.LogOut, { size: 16 })
28671
+ children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.LogOut, { size: 16 })
28737
28672
  }
28738
28673
  )
28739
28674
  ] })
@@ -28786,7 +28721,7 @@ var init_enhanced_mobile_conversations_modal = __esm({
28786
28721
  disabled: visibleConversationCount === 0,
28787
28722
  sx: { color: theme.palette.error.main },
28788
28723
  children: [
28789
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_material47.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react13.Trash2, { size: 16, color: theme.palette.error.main }) }),
28724
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_material47.ListItemIcon, { children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.Trash2, { size: 16, color: theme.palette.error.main }) }),
28790
28725
  /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_material47.ListItemText, { children: "Clear All Conversations" })
28791
28726
  ]
28792
28727
  }
@@ -28916,24 +28851,8 @@ var init_chat_app_bar = __esm({
28916
28851
  const { settings: packageSettings } = usePackageSettingsStore();
28917
28852
  const isPlaygroundRoute = typeof window !== "undefined" && window.location.pathname.includes("/playground");
28918
28853
  const isPlaygroundMode3 = Boolean(packageSettings?.playgroundMode) || (packageSettings?.gatewayApiUrl ?? "").toLowerCase().startsWith("playground://") || typeof window !== "undefined" && window.location.pathname.startsWith("/playground");
28919
- const managementPath = isPlaygroundMode3 ? "/playground/management" : "/management";
28920
- const {
28921
- syncEnabled,
28922
- syncStatus,
28923
- lastSyncAt,
28924
- pendingCount,
28925
- warningConversations,
28926
- oversizedConversations,
28927
- triggerSync,
28928
- setSyncEnabled
28929
- } = useConversationSyncStore((state) => ({
28854
+ const { syncEnabled, setSyncEnabled } = useConversationSyncStore((state) => ({
28930
28855
  syncEnabled: state.syncEnabled,
28931
- syncStatus: state.status,
28932
- lastSyncAt: state.lastSyncAt,
28933
- pendingCount: state.pendingConversationUpserts.size + state.pendingConversationDeletes.size + state.pendingProjectUpserts.size + state.pendingProjectDeletes.size,
28934
- warningConversations: state.warningConversations,
28935
- oversizedConversations: state.oversizedConversations,
28936
- triggerSync: state.runSync,
28937
28856
  setSyncEnabled: state.setSyncEnabled
28938
28857
  }), import_shallow2.shallow);
28939
28858
  (0, import_react59.useEffect)(() => {
@@ -28945,57 +28864,6 @@ var init_chat_app_bar = __esm({
28945
28864
  });
28946
28865
  }
28947
28866
  }, [isPlaygroundMode3, syncEnabled, setSyncEnabled]);
28948
- const syncSpinSx = {
28949
- animation: "spin 1s linear infinite",
28950
- "@keyframes spin": {
28951
- "0%": { transform: "rotate(0deg)" },
28952
- "100%": { transform: "rotate(360deg)" }
28953
- }
28954
- };
28955
- const syncIndicatorIcon = (() => {
28956
- if (isPlaygroundMode3 || !syncEnabled) {
28957
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CloudOffIcon, { fontSize: "small", color: "disabled" });
28958
- }
28959
- switch (syncStatus) {
28960
- case "syncing":
28961
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SyncIcon, { fontSize: "small", sx: syncSpinSx, color: "primary" });
28962
- case "error":
28963
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(ErrorOutlineIcon, { fontSize: "small", color: "error" });
28964
- case "idle":
28965
- default:
28966
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CloudDoneIcon, { fontSize: "small", color: "success" });
28967
- }
28968
- })();
28969
- const syncTooltip = (() => {
28970
- if (isPlaygroundMode3) {
28971
- return "Cloud sync is unavailable in playground mode.";
28972
- }
28973
- if (!syncEnabled) {
28974
- return "Cloud sync is disabled. Enable it from Management > Preferences.";
28975
- }
28976
- let base;
28977
- if (oversizedConversations.length > 0) {
28978
- base = "Some conversations are too large for Bandit Cloud. Start a new conversation to keep syncing.";
28979
- } else if (syncStatus === "syncing") {
28980
- base = "Syncing changes to Bandit Cloud\u2026";
28981
- } else if (warningConversations.length > 0) {
28982
- base = "Conversations are nearing the Bandit Cloud limit. Consider starting a new one soon.";
28983
- } else if (syncStatus === "error") {
28984
- base = "Sync needs attention. Visit Management > Preferences for details.";
28985
- } else {
28986
- base = "Conversations are in sync with Bandit Cloud.";
28987
- }
28988
- const pending = pendingCount > 0 ? ` ${pendingCount} change${pendingCount === 1 ? "" : "s"} queued.` : "";
28989
- const last = lastSyncAt ? ` Last sync ${new Date(lastSyncAt).toLocaleTimeString()}.` : "";
28990
- return `${base}${pending}${last}`;
28991
- })();
28992
- const syncButtonDisabled = isPlaygroundMode3 || !syncEnabled;
28993
- const handleSyncBadgeClick = () => {
28994
- if (isPlaygroundMode3 || !syncEnabled || syncStatus === "syncing") {
28995
- return;
28996
- }
28997
- void triggerSync({ force: true });
28998
- };
28999
28867
  const { hasTTS, hasSTT, isAdmin, getCurrentTier, hasLimitedAdminDashboard, isSubscribed } = useFeatures();
29000
28868
  const { showVoiceControls, showLimitedAdminPanel } = useFeatureVisibility();
29001
28869
  const frontierEligible = (() => {
@@ -29046,37 +28914,6 @@ var init_chat_app_bar = __esm({
29046
28914
  useEngineStore.getState().fetchEngines();
29047
28915
  }, []);
29048
28916
  const pendingModelAvatar = useModelStore.getState().availableModels.find((m) => m.name === pendingModel)?.avatarBase64 || modelAvatars3[pendingModel || ""] || banditHead4;
29049
- const resolvedHomeUrl = preferences.homeUrl?.trim() || packageSettings?.homeUrl?.trim() || "";
29050
- const homeTooltip = (() => {
29051
- if (!resolvedHomeUrl) return "Home";
29052
- try {
29053
- return `Home (${new URL(resolvedHomeUrl).hostname})`;
29054
- } catch {
29055
- return "Home";
29056
- }
29057
- })();
29058
- function goToHome() {
29059
- if (resolvedHomeUrl) {
29060
- window.location.href = resolvedHomeUrl;
29061
- return;
29062
- }
29063
- if (typeof window !== "undefined") {
29064
- const navigatorWithStandalone = window.navigator;
29065
- const isStandalone = window.matchMedia?.("(display-mode: standalone)").matches || navigatorWithStandalone.standalone === true;
29066
- if (isStandalone) {
29067
- try {
29068
- sessionStorage.setItem("banditPwaStayOnHome", "true");
29069
- } catch (error) {
29070
- debugLogger.warn("[chat-app-bar] Unable to persist home preference", {
29071
- error: error instanceof Error ? error.message : String(error)
29072
- });
29073
- }
29074
- safeNavigate("/?mode=home");
29075
- return;
29076
- }
29077
- }
29078
- safeNavigate("/");
29079
- }
29080
28917
  return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(import_jsx_runtime48.Fragment, { children: [
29081
28918
  /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
29082
28919
  import_material49.Box,
@@ -29203,72 +29040,6 @@ var init_chat_app_bar = __esm({
29203
29040
  }
29204
29041
  },
29205
29042
  children: [
29206
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_material49.Tooltip, { title: homeTooltip, arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
29207
- import_material49.IconButton,
29208
- {
29209
- onClick: goToHome,
29210
- sx: pillButtonStyles,
29211
- "aria-label": "Go to home page",
29212
- children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(HomeIcon, {})
29213
- }
29214
- ) }),
29215
- showLimitedAdminPanel() && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_material49.Tooltip, { title: "Management & Settings", arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
29216
- import_material49.IconButton,
29217
- {
29218
- onClick: () => safeNavigate(managementPath),
29219
- sx: {
29220
- ...pillButtonStyles,
29221
- ...typeof window !== "undefined" && window.location.pathname === managementPath && {
29222
- bgcolor: theme.palette.primary.main + "20",
29223
- color: theme.palette.primary.main
29224
- }
29225
- },
29226
- "aria-label": "Open management settings",
29227
- children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(SettingsIcon, {})
29228
- }
29229
- ) }),
29230
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_material49.Tooltip, { title: syncTooltip, arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
29231
- import_material49.IconButton,
29232
- {
29233
- onClick: handleSyncBadgeClick,
29234
- disabled: syncButtonDisabled,
29235
- sx: {
29236
- ...pillButtonStyles,
29237
- color: syncButtonDisabled ? theme.palette.action.disabled : theme.palette.primary.main,
29238
- bgcolor: syncButtonDisabled ? "transparent" : syncStatus === "error" ? theme.palette.error.main + "20" : theme.palette.primary.main + "12",
29239
- "&:hover": syncButtonDisabled ? {} : {
29240
- bgcolor: syncStatus === "error" ? theme.palette.error.main + "30" : theme.palette.primary.main + "20"
29241
- }
29242
- },
29243
- "aria-label": "Conversation sync status",
29244
- children: [
29245
- syncIndicatorIcon,
29246
- pendingCount > 0 && !syncButtonDisabled && syncStatus !== "syncing" && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
29247
- import_material49.Box,
29248
- {
29249
- sx: {
29250
- position: "absolute",
29251
- top: -2,
29252
- right: -2,
29253
- minWidth: 16,
29254
- height: 16,
29255
- px: 0.3,
29256
- bgcolor: theme.palette.warning.main,
29257
- color: theme.palette.getContrastText(theme.palette.warning.main),
29258
- borderRadius: "999px",
29259
- display: "flex",
29260
- alignItems: "center",
29261
- justifyContent: "center",
29262
- fontSize: "0.6rem",
29263
- fontWeight: 600,
29264
- border: `2px solid ${background}`
29265
- },
29266
- children: pendingCount > 9 ? "9+" : pendingCount
29267
- }
29268
- )
29269
- ]
29270
- }
29271
- ) }),
29272
29043
  !isMobile && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_material49.Tooltip, { title: `${drawerOpen ? "Close" : "Open"} Conversations`, arrow: true, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
29273
29044
  import_material49.IconButton,
29274
29045
  {
@@ -29283,7 +29054,7 @@ var init_chat_app_bar = __esm({
29283
29054
  "aria-label": `${drawerOpen ? "Close" : "Open"} conversations drawer`,
29284
29055
  "aria-pressed": drawerOpen,
29285
29056
  children: [
29286
- drawerOpen ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(NotesIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(NotesIconOutlined, {}),
29057
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(PanelLeftIcon, {}),
29287
29058
  conversations.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
29288
29059
  import_material49.Box,
29289
29060
  {
@@ -31562,6 +31333,10 @@ var init_chat2 = __esm({
31562
31333
  // enhanced-mobile-conversations-modal.tsx.
31563
31334
  transform: isMobile && mobileConversationsOpen ? "translateX(min(calc(100vw - 56px), 360px))" : "none",
31564
31335
  borderRadius: isMobile && mobileConversationsOpen ? "24px" : drawerOpen && !isMobile ? "24px 0 0 24px" : 0,
31336
+ // A hairline border makes the rounded card read even when the page
31337
+ // behind is the same near-black as the shell — shadow alone is
31338
+ // invisible dark-on-dark.
31339
+ border: isMobile && mobileConversationsOpen || drawerOpen && !isMobile ? `1px solid ${theme.palette.mode === "dark" ? "rgba(255,255,255,0.14)" : "rgba(0,0,0,0.12)"}` : "none",
31565
31340
  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",
31566
31341
  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"
31567
31342
  }),