hermium 0.1.7 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/bin/hermium.mjs +6 -5
  2. package/dist/public/assets/{IconAlertCircle-C98Iam1j.js → IconAlertCircle-BHkmI3j7.js} +1 -1
  3. package/dist/public/assets/{IconAlertTriangle-DdD7_dc8.js → IconAlertTriangle-wCJudlVg.js} +1 -1
  4. package/dist/public/assets/{IconCheck-CYZ4_524.js → IconCheck-CFuEh_p7.js} +1 -1
  5. package/dist/public/assets/{IconLoader2-DkEhzUxZ.js → IconLoader2-BIx3OuF9.js} +1 -1
  6. package/dist/public/assets/{IconRefresh-CCXMrUxO.js → IconRefresh-Dgm93w3T.js} +1 -1
  7. package/dist/public/assets/index-Bbz3abmO.js +14 -0
  8. package/dist/public/assets/index-CWUaRwcE.js +1 -0
  9. package/dist/public/assets/index-CinLq3cd.js +1 -0
  10. package/dist/public/assets/{index-DCT13_ZI.js → index-CrQs9n6q.js} +1 -1
  11. package/dist/public/assets/{index-zFJdOj6P.js → index-CtacpN3I.js} +1 -1
  12. package/dist/public/assets/{index-C0ivmMuU.js → index-DY7aE-9s.js} +1 -1
  13. package/dist/public/assets/index-DkYGodJj.js +94 -0
  14. package/dist/public/assets/{index-DhCVawEl.js → index-DvDLadUx.js} +1 -1
  15. package/dist/public/assets/index-U6RcWedt.js +1 -0
  16. package/dist/public/assets/index-_6iFZ0fh.js +1 -0
  17. package/dist/public/assets/index-enFS26SU.js +1 -0
  18. package/dist/public/assets/input-eNcwlDHp.js +1 -0
  19. package/dist/public/assets/queries-iHRgZzw2.js +1 -0
  20. package/dist/public/assets/styles-KcflDlA_.css +1 -0
  21. package/dist/public/assets/{switch-BKlJnOab.js → switch-B1DcZLwL.js} +1 -1
  22. package/dist/public/assets/{syntax-highlighter-BuOqgzbp.js → syntax-highlighter-DWPF-A_h.js} +2 -2
  23. package/dist/public/assets/{textarea-a9VUYAmJ.js → textarea-Di_syYTS.js} +1 -1
  24. package/dist/server/index.mjs +130 -129
  25. package/dist/web-server/_libs/tabler__icons-react.mjs +171 -165
  26. package/dist/web-server/_ssr/{index-KGEq7IhY.mjs → index-0n2Z3BPQ.mjs} +2 -2
  27. package/dist/web-server/_ssr/{index-DxgfsEKM.mjs → index-6itDALOw.mjs} +39 -20
  28. package/dist/web-server/_ssr/{index-BFCBaZTA.mjs → index-BIRTrOmp.mjs} +3 -3
  29. package/dist/web-server/_ssr/{index-BVtbpy73.mjs → index-BPzfADac.mjs} +1 -1
  30. package/dist/web-server/_ssr/{index-CmwSlgGR.mjs → index-BQE3bF14.mjs} +42 -20
  31. package/dist/web-server/_ssr/index-C5HpvlUP.mjs +190 -0
  32. package/dist/web-server/_ssr/{index-BT-fOdbN.mjs → index-C_ZxnypN.mjs} +2 -2
  33. package/dist/web-server/_ssr/{index-B_d-ca5z.mjs → index-Ca8JFH8f.mjs} +4 -4
  34. package/dist/web-server/_ssr/{index-D4rgpZTm.mjs → index-DNVESZiA.mjs} +4 -4
  35. package/dist/web-server/_ssr/index.mjs +2 -2
  36. package/dist/web-server/_ssr/{input-CZtNKDXd.mjs → input-CqXjTRQg.mjs} +1 -1
  37. package/dist/web-server/_ssr/{queries-ixVDom0l.mjs → queries-3H_19mUt.mjs} +1 -1
  38. package/dist/web-server/_ssr/{router-CrULUyXB.mjs → router-sbsNus0Y.mjs} +186 -91
  39. package/dist/web-server/_ssr/{switch-Bd3Khe3S.mjs → switch-usf2F1UM.mjs} +1 -1
  40. package/dist/web-server/_ssr/{textarea-ClM2KXId.mjs → textarea-DfRheWY0.mjs} +1 -1
  41. package/dist/web-server/_tanstack-start-manifest_v-DqW-pKEH.mjs +4 -0
  42. package/dist/web-server/index.mjs +135 -142
  43. package/package.json +1 -1
  44. package/dist/public/assets/index-BTiEWEax.js +0 -1
  45. package/dist/public/assets/index-Bfadg8tB.js +0 -1
  46. package/dist/public/assets/index-CQCxtJMS.js +0 -14
  47. package/dist/public/assets/index-D6B0cdTJ.js +0 -1
  48. package/dist/public/assets/index-KT0CxDFc.js +0 -1
  49. package/dist/public/assets/index-qsvsww7-.js +0 -1
  50. package/dist/public/assets/index-twHXYGSY.js +0 -90
  51. package/dist/public/assets/input-C_TtyOcH.js +0 -1
  52. package/dist/public/assets/queries-DuZAFrOY.js +0 -1
  53. package/dist/public/assets/styles-Bc7sFPhq.css +0 -1
  54. package/dist/public/assets/useQuery-ByTdbkfi.js +0 -1
  55. package/dist/web-server/_ssr/index-ClGONv4K.mjs +0 -189
  56. package/dist/web-server/_tanstack-start-manifest_v-cNUQI9I2.mjs +0 -4
@@ -1,11 +1,11 @@
1
1
  import { c as createRouter, a as createRootRoute, b as createFileRoute, l as lazyRouteComponent, H as HeadContent, S as Scripts, u as useLocation, L as Link } from "../_libs/tanstack__react-router.mjs";
2
2
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
3
3
  import { b as QueryClient } from "../_libs/tanstack__query-core.mjs";
4
- import { Q as QueryClientProvider, u as useQueryClient } from "../_libs/tanstack__react-query.mjs";
4
+ import { Q as QueryClientProvider, u as useQueryClient, a as useQuery, b as useMutation } from "../_libs/tanstack__react-query.mjs";
5
5
  import { c as clsx } from "../_libs/clsx.mjs";
6
6
  import { c as cva } from "../_libs/class-variance-authority.mjs";
7
7
  import { c as create, d as devtools } from "../_libs/zustand.mjs";
8
- import { I as IconSearch, a as IconX, b as IconSettings, c as IconSun, d as IconMoon, e as IconUser, f as IconPaint, g as IconBell, h as IconKey, i as IconLanguage, j as IconArrowLeft, k as IconLayoutSidebar, l as IconChevronUp, m as IconChevronDown, n as IconCirclePlus, o as IconBrain, p as IconPuzzle, q as IconRobot, r as IconHash, s as IconChartBar, t as IconPin, u as IconDots, v as IconPencil, w as IconPinnedOff, x as IconCopy, y as IconTrash } from "../_libs/tabler__icons-react.mjs";
8
+ import { I as IconSearch, a as IconX, b as IconSettings, c as IconSun, d as IconMoon, e as IconPaint, f as IconBrandGithub, g as IconArrowLeft, h as IconLayoutSidebar, i as IconChevronUp, j as IconChevronDown, k as IconCirclePlus, l as IconBrain, m as IconPuzzle, n as IconRobot, o as IconHash, p as IconChartBar, q as IconPin, r as IconDots, s as IconPencil, t as IconPinnedOff, u as IconCopy, v as IconTrash, w as IconDownload } from "../_libs/tabler__icons-react.mjs";
9
9
  import { T as TooltipProvider$1, u as useRender, m as mergeProps, B as Button$1, D as DialogRoot, a as DialogPopup, b as DialogClose, c as DialogTitle, d as DialogDescription, C as CollapsibleRoot, e as CollapsibleTrigger$1, f as CollapsiblePanel, M as MenuRoot, g as MenuTrigger, h as MenuPortal, i as MenuPositioner, j as MenuPopup, k as MenuItem, l as DialogPortal, n as DialogBackdrop, o as TooltipRoot, p as TooltipPortal, q as TooltipPositioner, r as TooltipPopup, s as TooltipArrow, t as TooltipTrigger$1 } from "../_libs/base-ui__react.mjs";
10
10
  import { o as object, s as string } from "../_libs/zod.mjs";
11
11
  import "../_libs/tanstack__router-core.mjs";
@@ -228,7 +228,11 @@ function getSystemTheme() {
228
228
  function applyTheme(theme) {
229
229
  const root = document.documentElement;
230
230
  const resolved = theme === "system" ? getSystemTheme() : theme;
231
- root.classList.toggle("dark", resolved === "dark");
231
+ if (resolved === "dark") {
232
+ root.classList.add("dark");
233
+ } else {
234
+ root.classList.remove("dark");
235
+ }
232
236
  }
233
237
  const ThemeContext = reactExports.createContext({
234
238
  theme: "system",
@@ -244,6 +248,7 @@ function ThemeProvider({ children }) {
244
248
  setMounted(true);
245
249
  const stored = getStoredTheme();
246
250
  setThemeState(stored);
251
+ applyTheme(stored);
247
252
  const isDark = stored === "system" ? window.matchMedia("(prefers-color-scheme: dark)").matches : stored === "dark";
248
253
  setResolved(isDark ? "dark" : "light");
249
254
  const mq = window.matchMedia("(prefers-color-scheme: dark)");
@@ -1000,7 +1005,7 @@ function DropdownMenuItem({
1000
1005
  }
1001
1006
  );
1002
1007
  }
1003
- const BASE_URL = "http://localhost:8788";
1008
+ const BASE_URL = "http://localhost:47474";
1004
1009
  class ApiError extends Error {
1005
1010
  constructor(message, status, code) {
1006
1011
  super(message);
@@ -1299,9 +1304,35 @@ async function deleteSessionApi(sessionId) {
1299
1304
  async function fetchModels() {
1300
1305
  return get("/api/config/models");
1301
1306
  }
1307
+ async function updateModelConfig(params) {
1308
+ return post("/api/config/model", params);
1309
+ }
1302
1310
  async function respondApproval(params) {
1303
1311
  return post("/api/approval/respond", params);
1304
1312
  }
1313
+ async function fetchVersion() {
1314
+ return get("/api/version");
1315
+ }
1316
+ async function triggerUpdate() {
1317
+ return post("/api/update");
1318
+ }
1319
+ function useVersionCheck() {
1320
+ return useQuery({
1321
+ queryKey: ["version"],
1322
+ queryFn: fetchVersion,
1323
+ staleTime: 5 * 60 * 1e3,
1324
+ // 5 minutes
1325
+ refetchInterval: 5 * 60 * 1e3,
1326
+ // poll every 5 minutes
1327
+ refetchIntervalInBackground: false,
1328
+ retry: 2
1329
+ });
1330
+ }
1331
+ function useTriggerUpdate() {
1332
+ return useMutation({
1333
+ mutationFn: triggerUpdate
1334
+ });
1335
+ }
1305
1336
  function normalizeContent(raw) {
1306
1337
  if (typeof raw === "string") return raw;
1307
1338
  if (Array.isArray(raw)) {
@@ -1420,7 +1451,7 @@ function DashboardSidebar() {
1420
1451
  [queryClient2]
1421
1452
  );
1422
1453
  const location = useLocation();
1423
- const currentSection = new URLSearchParams(location.search).get("section") || "profile";
1454
+ const currentSection = new URLSearchParams(location.search).get("section") || "appearance";
1424
1455
  const [searchQuery, setSearchQuery] = reactExports.useState("");
1425
1456
  const [isSearchOpen, setIsSearchOpen] = reactExports.useState(false);
1426
1457
  const [activePanel, setActivePanel] = reactExports.useState(
@@ -1597,54 +1628,48 @@ function DashboardSidebar() {
1597
1628
  ] }) })
1598
1629
  ] })
1599
1630
  ] }),
1600
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "shrink-0", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: cn("flex items-center", isCollapsed ? "flex-col gap-1" : "flex-row gap-1"), children: [
1601
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
1602
- Link,
1603
- {
1604
- to: "/settings",
1605
- className: cn(
1606
- "flex items-center gap-1.5 rounded-md text-xs font-medium text-muted-foreground hover:bg-sidebar-muted hover:text-foreground transition-colors",
1607
- isCollapsed ? "justify-center p-1.5 w-full" : "flex-1 px-2 py-1"
1608
- ),
1609
- "aria-label": "Settings",
1610
- title: isCollapsed ? "Settings" : void 0,
1611
- children: [
1612
- /* @__PURE__ */ jsxRuntimeExports.jsx(IconSettings, { className: "size-3.5 shrink-0" }),
1613
- !isCollapsed && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Settings" })
1614
- ]
1615
- }
1616
- ),
1617
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
1618
- "button",
1619
- {
1620
- onClick: () => setTheme(resolvedTheme === "dark" ? "light" : "dark"),
1621
- className: cn(
1622
- "flex items-center justify-center rounded-md text-muted-foreground hover:bg-sidebar-muted hover:text-foreground transition-colors",
1623
- isCollapsed ? "p-1.5 w-full" : "p-1.5"
1624
- ),
1625
- "aria-label": "Toggle theme",
1626
- title: isCollapsed ? resolvedTheme === "dark" ? "Light mode" : "Dark mode" : void 0,
1627
- children: [
1628
- /* @__PURE__ */ jsxRuntimeExports.jsx(IconSun, { className: "size-3.5 dark:hidden" }),
1629
- /* @__PURE__ */ jsxRuntimeExports.jsx(IconMoon, { className: "size-3.5 hidden dark:block" })
1630
- ]
1631
- }
1632
- )
1633
- ] }) })
1631
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "shrink-0 space-y-1", children: [
1632
+ /* @__PURE__ */ jsxRuntimeExports.jsx(UpdateBanner, { isCollapsed }),
1633
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: cn("flex items-center", isCollapsed ? "flex-col gap-1" : "flex-row gap-1"), children: [
1634
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
1635
+ Link,
1636
+ {
1637
+ to: "/settings",
1638
+ className: cn(
1639
+ "flex items-center gap-1.5 rounded-md text-xs font-medium text-muted-foreground hover:bg-sidebar-muted hover:text-foreground transition-colors",
1640
+ isCollapsed ? "justify-center p-1.5 w-full" : "flex-1 px-2 py-1"
1641
+ ),
1642
+ "aria-label": "Settings",
1643
+ title: isCollapsed ? "Settings" : void 0,
1644
+ children: [
1645
+ /* @__PURE__ */ jsxRuntimeExports.jsx(IconSettings, { className: "size-3.5 shrink-0" }),
1646
+ !isCollapsed && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Settings" })
1647
+ ]
1648
+ }
1649
+ ),
1650
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
1651
+ "button",
1652
+ {
1653
+ onClick: () => setTheme(resolvedTheme === "dark" ? "light" : "dark"),
1654
+ className: cn(
1655
+ "flex items-center justify-center rounded-md text-muted-foreground hover:bg-sidebar-muted hover:text-foreground transition-colors",
1656
+ isCollapsed ? "p-1.5 w-full" : "p-1.5"
1657
+ ),
1658
+ "aria-label": "Toggle theme",
1659
+ title: isCollapsed ? resolvedTheme === "dark" ? "Light mode" : "Dark mode" : void 0,
1660
+ children: [
1661
+ /* @__PURE__ */ jsxRuntimeExports.jsx(IconSun, { className: "size-3.5 dark:hidden" }),
1662
+ /* @__PURE__ */ jsxRuntimeExports.jsx(IconMoon, { className: "size-3.5 hidden dark:block" })
1663
+ ]
1664
+ }
1665
+ )
1666
+ ] })
1667
+ ] })
1634
1668
  ] }),
1635
1669
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col h-full justify-between w-1/2", children: [
1636
1670
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col flex-1 min-h-0", children: [
1637
1671
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-1 pb-1.5 shrink-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] font-semibold uppercase tracking-wide text-muted-foreground/60", children: "Settings" }) }),
1638
1672
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 overflow-y-auto min-h-0 space-y-0.5 px-0.5", children: [
1639
- /* @__PURE__ */ jsxRuntimeExports.jsx(
1640
- SettingsGroup,
1641
- {
1642
- icon: /* @__PURE__ */ jsxRuntimeExports.jsx(IconUser, { className: "size-4" }),
1643
- title: "Profile",
1644
- section: "profile",
1645
- activeSection: currentSection
1646
- }
1647
- ),
1648
1673
  /* @__PURE__ */ jsxRuntimeExports.jsx(
1649
1674
  SettingsGroup,
1650
1675
  {
@@ -1657,27 +1682,9 @@ function DashboardSidebar() {
1657
1682
  /* @__PURE__ */ jsxRuntimeExports.jsx(
1658
1683
  SettingsGroup,
1659
1684
  {
1660
- icon: /* @__PURE__ */ jsxRuntimeExports.jsx(IconBell, { className: "size-4" }),
1661
- title: "Notifications",
1662
- section: "notifications",
1663
- activeSection: currentSection
1664
- }
1665
- ),
1666
- /* @__PURE__ */ jsxRuntimeExports.jsx(
1667
- SettingsGroup,
1668
- {
1669
- icon: /* @__PURE__ */ jsxRuntimeExports.jsx(IconKey, { className: "size-4" }),
1670
- title: "API Keys",
1671
- section: "api-keys",
1672
- activeSection: currentSection
1673
- }
1674
- ),
1675
- /* @__PURE__ */ jsxRuntimeExports.jsx(
1676
- SettingsGroup,
1677
- {
1678
- icon: /* @__PURE__ */ jsxRuntimeExports.jsx(IconLanguage, { className: "size-4" }),
1679
- title: "Language & Region",
1680
- section: "language",
1685
+ icon: /* @__PURE__ */ jsxRuntimeExports.jsx(IconBrandGithub, { className: "size-4" }),
1686
+ title: "About",
1687
+ section: "about",
1681
1688
  activeSection: currentSection
1682
1689
  }
1683
1690
  )
@@ -1812,13 +1819,96 @@ function SessionItem({
1812
1819
  ] })
1813
1820
  ] }) }) });
1814
1821
  }
1822
+ function UpdateBanner({ isCollapsed }) {
1823
+ const { data, isLoading } = useVersionCheck();
1824
+ const updateMutation = useTriggerUpdate();
1825
+ const [showPanel, setShowPanel] = reactExports.useState(false);
1826
+ if (isLoading || !data?.outdated) return null;
1827
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
1828
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
1829
+ "button",
1830
+ {
1831
+ onClick: () => setShowPanel((s) => !s),
1832
+ className: cn(
1833
+ "flex items-center gap-1.5 rounded-md text-xs font-medium transition-colors w-full",
1834
+ isCollapsed ? "justify-center p-1.5 bg-amber-500/10 text-amber-600 hover:bg-amber-500/20 dark:text-amber-400" : "px-2 py-1.5 bg-amber-500/10 text-amber-600 hover:bg-amber-500/20 dark:text-amber-400"
1835
+ ),
1836
+ title: "Update available",
1837
+ children: [
1838
+ /* @__PURE__ */ jsxRuntimeExports.jsx(IconDownload, { className: "size-3.5 shrink-0" }),
1839
+ !isCollapsed && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "truncate", children: [
1840
+ "Update v",
1841
+ data.latest
1842
+ ] })
1843
+ ]
1844
+ }
1845
+ ),
1846
+ showPanel && !isCollapsed && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute bottom-full left-0 right-0 mb-1.5 rounded-lg border border-border bg-popover p-3 shadow-lg z-50", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
1847
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-xs font-medium text-foreground", children: [
1848
+ "Hermium v",
1849
+ data.latest,
1850
+ " is available"
1851
+ ] }),
1852
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-[11px] text-muted-foreground", children: [
1853
+ "You are running v",
1854
+ data.current,
1855
+ "."
1856
+ ] }),
1857
+ updateMutation.isSuccess && updateMutation.data.success ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md bg-green-500/10 px-2 py-1.5 text-[11px] text-green-600 dark:text-green-400", children: updateMutation.data.message }) : updateMutation.isSuccess && !updateMutation.data.success ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1.5", children: [
1858
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md bg-red-500/10 px-2 py-1.5 text-[11px] text-red-600 dark:text-red-400", children: updateMutation.data.message }),
1859
+ updateMutation.data.command && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1.5 rounded-md border border-border bg-muted px-2 py-1.5", children: [
1860
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "flex-1 text-[11px] font-mono text-foreground truncate", children: updateMutation.data.command }),
1861
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
1862
+ "button",
1863
+ {
1864
+ onClick: () => navigator.clipboard.writeText(updateMutation.data.command),
1865
+ className: "shrink-0 rounded p-0.5 text-muted-foreground hover:text-foreground hover:bg-muted-foreground/10 transition-colors",
1866
+ title: "Copy command",
1867
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(IconCopy, { className: "size-3.5" })
1868
+ }
1869
+ )
1870
+ ] })
1871
+ ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex gap-1.5", children: [
1872
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
1873
+ "button",
1874
+ {
1875
+ onClick: () => updateMutation.mutate(),
1876
+ disabled: updateMutation.isPending,
1877
+ className: "flex-1 rounded-md bg-primary px-2 py-1 text-[11px] font-medium text-primary-foreground hover:bg-primary/90 transition-colors disabled:opacity-50",
1878
+ children: updateMutation.isPending ? "Updating..." : "Update now"
1879
+ }
1880
+ ),
1881
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
1882
+ "button",
1883
+ {
1884
+ onClick: () => {
1885
+ if (data.updateCommand) {
1886
+ navigator.clipboard.writeText(data.updateCommand);
1887
+ }
1888
+ },
1889
+ className: "rounded-md border border-border px-2 py-1 text-[11px] font-medium text-muted-foreground hover:text-foreground hover:bg-muted transition-colors",
1890
+ children: "Copy cmd"
1891
+ }
1892
+ )
1893
+ ] }),
1894
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
1895
+ "button",
1896
+ {
1897
+ onClick: () => setShowPanel(false),
1898
+ className: "w-full rounded-md border border-border px-2 py-1 text-[11px] font-medium text-muted-foreground hover:text-foreground hover:bg-muted transition-colors",
1899
+ children: "Dismiss"
1900
+ }
1901
+ )
1902
+ ] }) })
1903
+ ] });
1904
+ }
1815
1905
  function DashboardLayout({ children }) {
1816
1906
  return /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarProvider, { style: { "--sidebar-width-icon": "2.5rem" }, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative flex h-dvh w-full", children: [
1817
1907
  /* @__PURE__ */ jsxRuntimeExports.jsx(DashboardSidebar, {}),
1818
1908
  /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarInset, { className: "flex flex-col min-w-0", children })
1819
1909
  ] }) });
1820
1910
  }
1821
- const appCss = "/assets/styles-Bc7sFPhq.css";
1911
+ const appCss = "/assets/styles-KcflDlA_.css";
1822
1912
  const themeScript = `
1823
1913
  (function() {
1824
1914
  try {
@@ -1826,7 +1916,11 @@ const themeScript = `
1826
1916
  var resolved = theme === 'system'
1827
1917
  ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')
1828
1918
  : theme;
1829
- document.documentElement.classList.toggle('dark', resolved === 'dark');
1919
+ if (resolved === 'dark') {
1920
+ document.documentElement.classList.add('dark');
1921
+ } else {
1922
+ document.documentElement.classList.remove('dark');
1923
+ }
1830
1924
  } catch (e) {}
1831
1925
  })();
1832
1926
  `;
@@ -1863,43 +1957,43 @@ function RootDocument({ children }) {
1863
1957
  ] })
1864
1958
  ] });
1865
1959
  }
1866
- const $$splitComponentImporter$8 = () => import("./index-DxgfsEKM.mjs");
1960
+ const $$splitComponentImporter$8 = () => import("./index-6itDALOw.mjs");
1867
1961
  const Route$8 = createFileRoute("/")({
1868
1962
  component: lazyRouteComponent($$splitComponentImporter$8, "component")
1869
1963
  });
1870
- const $$splitComponentImporter$7 = () => import("./index-BT-fOdbN.mjs");
1964
+ const $$splitComponentImporter$7 = () => import("./index-C_ZxnypN.mjs");
1871
1965
  const Route$7 = createFileRoute("/usage/")({
1872
1966
  component: lazyRouteComponent($$splitComponentImporter$7, "component")
1873
1967
  });
1874
- const $$splitComponentImporter$6 = () => import("./index-BFCBaZTA.mjs");
1968
+ const $$splitComponentImporter$6 = () => import("./index-BIRTrOmp.mjs");
1875
1969
  const Route$6 = createFileRoute("/skills/")({
1876
1970
  component: lazyRouteComponent($$splitComponentImporter$6, "component")
1877
1971
  });
1878
- const $$splitComponentImporter$5 = () => import("./index-ClGONv4K.mjs");
1972
+ const $$splitComponentImporter$5 = () => import("./index-C5HpvlUP.mjs");
1879
1973
  const settingsSearchSchema = object({
1880
- section: string().optional().default("profile")
1974
+ section: string().optional().default("appearance")
1881
1975
  });
1882
1976
  const Route$5 = createFileRoute("/settings/")({
1883
1977
  component: lazyRouteComponent($$splitComponentImporter$5, "component"),
1884
1978
  validateSearch: (search) => settingsSearchSchema.parse(search)
1885
1979
  });
1886
- const $$splitComponentImporter$4 = () => import("./index-KGEq7IhY.mjs");
1980
+ const $$splitComponentImporter$4 = () => import("./index-0n2Z3BPQ.mjs");
1887
1981
  const Route$4 = createFileRoute("/memory/")({
1888
1982
  component: lazyRouteComponent($$splitComponentImporter$4, "component")
1889
1983
  });
1890
- const $$splitComponentImporter$3 = () => import("./index-BVtbpy73.mjs");
1984
+ const $$splitComponentImporter$3 = () => import("./index-BPzfADac.mjs");
1891
1985
  const Route$3 = createFileRoute("/chat/")({
1892
1986
  component: lazyRouteComponent($$splitComponentImporter$3, "component")
1893
1987
  });
1894
- const $$splitComponentImporter$2 = () => import("./index-D4rgpZTm.mjs");
1988
+ const $$splitComponentImporter$2 = () => import("./index-DNVESZiA.mjs");
1895
1989
  const Route$2 = createFileRoute("/channels/")({
1896
1990
  component: lazyRouteComponent($$splitComponentImporter$2, "component")
1897
1991
  });
1898
- const $$splitComponentImporter$1 = () => import("./index-B_d-ca5z.mjs");
1992
+ const $$splitComponentImporter$1 = () => import("./index-Ca8JFH8f.mjs");
1899
1993
  const Route$1 = createFileRoute("/automations/")({
1900
1994
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
1901
1995
  });
1902
- const $$splitComponentImporter = () => import("./index-CmwSlgGR.mjs");
1996
+ const $$splitComponentImporter = () => import("./index-BQE3bF14.mjs");
1903
1997
  const Route = createFileRoute("/chat/$sessionId/")({
1904
1998
  component: lazyRouteComponent($$splitComponentImporter, "component")
1905
1999
  });
@@ -1982,17 +2076,18 @@ export {
1982
2076
  createSession as c,
1983
2077
  DropdownMenuContent as d,
1984
2078
  DropdownMenuItem as e,
1985
- useChatStore as f,
2079
+ useTheme as f,
1986
2080
  get as g,
1987
- put as h,
1988
- patch as i,
1989
- del as j,
1990
- deleteSessionApi as k,
1991
- respondApproval as l,
1992
- Route as m,
1993
- fetchModels as n,
1994
- router as o,
2081
+ useChatStore as h,
2082
+ put as i,
2083
+ patch as j,
2084
+ del as k,
2085
+ deleteSessionApi as l,
2086
+ respondApproval as m,
2087
+ Route as n,
2088
+ fetchModels as o,
1995
2089
  post as p,
2090
+ router as q,
1996
2091
  renameSession as r,
1997
- useTheme as u
2092
+ updateModelConfig as u
1998
2093
  };
@@ -1,5 +1,5 @@
1
1
  import { j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { a as cn } from "./router-CrULUyXB.mjs";
2
+ import { a as cn } from "./router-sbsNus0Y.mjs";
3
3
  function Switch({ checked, onCheckedChange, disabled, className }) {
4
4
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
5
5
  "button",
@@ -1,5 +1,5 @@
1
1
  import { j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { a as cn } from "./router-CrULUyXB.mjs";
2
+ import { a as cn } from "./router-sbsNus0Y.mjs";
3
3
  function Textarea({ className, ...props }) {
4
4
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
5
5
  "textarea",
@@ -0,0 +1,4 @@
1
+ const tsrStartManifest = () => ({ routes: { __root__: { filePath: "/home/abbskhnv/Desktop/hermium/apps/web/src/routes/__root.tsx", children: ["/", "/automations/", "/channels/", "/chat/", "/memory/", "/settings/", "/skills/", "/usage/", "/chat/$sessionId/"], assets: void 0, preloads: ["/assets/index-DkYGodJj.js"] }, "/": { filePath: "/home/abbskhnv/Desktop/hermium/apps/web/src/routes/index.tsx", children: void 0, assets: void 0, preloads: ["/assets/index-U6RcWedt.js", "/assets/queries-iHRgZzw2.js", "/assets/IconLoader2-BIx3OuF9.js"] }, "/automations/": { filePath: "/home/abbskhnv/Desktop/hermium/apps/web/src/routes/automations/index.tsx", children: void 0, assets: void 0, preloads: ["/assets/index-CinLq3cd.js", "/assets/input-eNcwlDHp.js", "/assets/textarea-Di_syYTS.js", "/assets/IconRefresh-Dgm93w3T.js", "/assets/IconLoader2-BIx3OuF9.js"] }, "/channels/": { filePath: "/home/abbskhnv/Desktop/hermium/apps/web/src/routes/channels/index.tsx", children: void 0, assets: void 0, preloads: ["/assets/index-enFS26SU.js", "/assets/switch-B1DcZLwL.js", "/assets/input-eNcwlDHp.js", "/assets/IconAlertTriangle-wCJudlVg.js", "/assets/IconLoader2-BIx3OuF9.js", "/assets/IconCheck-CFuEh_p7.js"] }, "/chat/": { filePath: "/home/abbskhnv/Desktop/hermium/apps/web/src/routes/chat/index.tsx", children: void 0, assets: void 0, preloads: ["/assets/index-DvDLadUx.js"] }, "/memory/": { filePath: "/home/abbskhnv/Desktop/hermium/apps/web/src/routes/memory/index.tsx", children: void 0, assets: void 0, preloads: ["/assets/index-CWUaRwcE.js", "/assets/IconLoader2-BIx3OuF9.js", "/assets/IconAlertCircle-BHkmI3j7.js", "/assets/IconRefresh-Dgm93w3T.js", "/assets/IconCheck-CFuEh_p7.js", "/assets/index-CrQs9n6q.js"] }, "/settings/": { filePath: "/home/abbskhnv/Desktop/hermium/apps/web/src/routes/settings/index.tsx", children: void 0, assets: void 0, preloads: ["/assets/index-_6iFZ0fh.js"] }, "/skills/": { filePath: "/home/abbskhnv/Desktop/hermium/apps/web/src/routes/skills/index.tsx", children: void 0, assets: void 0, preloads: ["/assets/index-DY7aE-9s.js", "/assets/switch-B1DcZLwL.js", "/assets/IconLoader2-BIx3OuF9.js", "/assets/IconAlertCircle-BHkmI3j7.js", "/assets/IconRefresh-Dgm93w3T.js", "/assets/index-CrQs9n6q.js"] }, "/usage/": { filePath: "/home/abbskhnv/Desktop/hermium/apps/web/src/routes/usage/index.tsx", children: void 0, assets: void 0, preloads: ["/assets/index-CtacpN3I.js", "/assets/IconRefresh-Dgm93w3T.js"] }, "/chat/$sessionId/": { filePath: "/home/abbskhnv/Desktop/hermium/apps/web/src/routes/chat/$sessionId/index.tsx", children: void 0, assets: void 0, preloads: ["/assets/index-Bbz3abmO.js", "/assets/textarea-Di_syYTS.js", "/assets/queries-iHRgZzw2.js", "/assets/IconLoader2-BIx3OuF9.js", "/assets/index-CrQs9n6q.js", "/assets/IconCheck-CFuEh_p7.js", "/assets/IconAlertTriangle-wCJudlVg.js"] } }, clientEntry: "/assets/index-DkYGodJj.js" });
2
+ export {
3
+ tsrStartManifest
4
+ };