hermium 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/public/assets/{IconAlertCircle-B7TgWpbP.js → IconAlertCircle-C98Iam1j.js} +1 -1
- package/dist/public/assets/{IconAlertTriangle-B7IYa46Q.js → IconAlertTriangle-DdD7_dc8.js} +1 -1
- package/dist/public/assets/{IconCheck-B-_pWgtP.js → IconCheck-CYZ4_524.js} +1 -1
- package/dist/public/assets/{IconLoader2-ClSf33Yd.js → IconLoader2-DkEhzUxZ.js} +1 -1
- package/dist/public/assets/{IconRefresh-D4MZeezY.js → IconRefresh-CCXMrUxO.js} +1 -1
- package/dist/public/assets/index-BTiEWEax.js +1 -0
- package/dist/public/assets/{index-BuznEPrX.js → index-Bfadg8tB.js} +1 -1
- package/dist/public/assets/{index-CsJLc3b2.js → index-C0ivmMuU.js} +1 -1
- package/dist/public/assets/index-CQCxtJMS.js +14 -0
- package/dist/public/assets/{index-BiFHsDt6.js → index-D6B0cdTJ.js} +1 -1
- package/dist/public/assets/{index-D04H-m2p.js → index-DCT13_ZI.js} +1 -1
- package/dist/public/assets/{index-B-EALIKE.js → index-DhCVawEl.js} +1 -1
- package/dist/public/assets/{index-xH6PhxmS.js → index-KT0CxDFc.js} +1 -1
- package/dist/public/assets/index-qsvsww7-.js +1 -0
- package/dist/public/assets/{index-DKYPj90W.js → index-twHXYGSY.js} +5 -5
- package/dist/public/assets/{index-DmUrSr_K.js → index-zFJdOj6P.js} +1 -1
- package/dist/public/assets/input-C_TtyOcH.js +1 -0
- package/dist/public/assets/queries-DuZAFrOY.js +1 -0
- package/dist/public/assets/styles-Bc7sFPhq.css +1 -0
- package/dist/public/assets/{switch-CgWk9YD3.js → switch-BKlJnOab.js} +1 -1
- package/dist/public/assets/{syntax-highlighter-CR5pD3DZ.js → syntax-highlighter-BuOqgzbp.js} +1 -1
- package/dist/public/assets/textarea-a9VUYAmJ.js +1 -0
- package/dist/public/assets/{useQuery-BtGwEPDz.js → useQuery-ByTdbkfi.js} +1 -1
- package/dist/server/index.mjs +132 -128
- package/dist/web-server/_libs/tabler__icons-react.mjs +3 -3
- package/dist/web-server/_ssr/{index-DSIu0x-q.mjs → index-BFCBaZTA.mjs} +3 -3
- package/dist/web-server/_ssr/{index-JzLhPyir.mjs → index-BT-fOdbN.mjs} +2 -2
- package/dist/web-server/_ssr/{index-Bp9a_nTf.mjs → index-BVtbpy73.mjs} +1 -1
- package/dist/web-server/_ssr/{index-BLK6uN4p.mjs → index-B_d-ca5z.mjs} +4 -4
- package/dist/web-server/_ssr/{index-EKE8NFy_.mjs → index-ClGONv4K.mjs} +1 -1
- package/dist/web-server/_ssr/{index-BkkxTg0a.mjs → index-CmwSlgGR.mjs} +12 -19
- package/dist/web-server/_ssr/{index-C8t8AZQG.mjs → index-D4rgpZTm.mjs} +4 -4
- package/dist/web-server/_ssr/{index-DqFrn6kj.mjs → index-DxgfsEKM.mjs} +67 -25
- package/dist/web-server/_ssr/{index-wTy_4MhH.mjs → index-KGEq7IhY.mjs} +2 -2
- package/dist/web-server/_ssr/index.mjs +2 -2
- package/dist/web-server/_ssr/{input-BQFduUUo.mjs → input-CZtNKDXd.mjs} +1 -1
- package/dist/web-server/_ssr/queries-ixVDom0l.mjs +16 -0
- package/dist/web-server/_ssr/{router-59cN5lqo.mjs → router-CrULUyXB.mjs} +21 -21
- package/dist/web-server/_ssr/{switch-Bim4kX8N.mjs → switch-Bd3Khe3S.mjs} +1 -1
- package/dist/web-server/_ssr/{textarea-CK0ROhfF.mjs → textarea-ClM2KXId.mjs} +1 -1
- package/dist/web-server/_tanstack-start-manifest_v-cNUQI9I2.mjs +4 -0
- package/dist/web-server/index.mjs +148 -155
- package/package.json +1 -1
- package/dist/public/assets/IconCode-AzDguzgN.js +0 -1
- package/dist/public/assets/IconPlus-BcEAWT5L.js +0 -1
- package/dist/public/assets/index-BP5217kc.js +0 -1
- package/dist/public/assets/index-DEVyhUPW.js +0 -14
- package/dist/public/assets/index-D_8SzN4W.js +0 -1
- package/dist/public/assets/input-of658hyw.js +0 -1
- package/dist/public/assets/styles-C9Ypt703.css +0 -1
- package/dist/public/assets/textarea-xdRt6_lX.js +0 -1
- package/dist/web-server/_tanstack-start-manifest_v-DLw6M7p4.mjs +0 -4
|
@@ -168,9 +168,9 @@ export {
|
|
|
168
168
|
IconCode as B,
|
|
169
169
|
IconHeart as C,
|
|
170
170
|
IconCloud as D,
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
171
|
+
IconLoader2 as E,
|
|
172
|
+
IconArrowUp as F,
|
|
173
|
+
IconRefresh as G,
|
|
174
174
|
IconAlertCircle as H,
|
|
175
175
|
IconSearch as I,
|
|
176
176
|
IconVersions as J,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import { a as cn, g as get, p as post } from "./router-
|
|
3
|
-
import { S as Switch } from "./switch-
|
|
4
|
-
import {
|
|
2
|
+
import { a as cn, g as get, p as post } from "./router-CrULUyXB.mjs";
|
|
3
|
+
import { S as Switch } from "./switch-Bd3Khe3S.mjs";
|
|
4
|
+
import { E as IconLoader2, H as IconAlertCircle, G as IconRefresh, p as IconPuzzle, I as IconSearch, a as IconX, m as IconChevronDown, J as IconVersions, K as IconTag, L as IconLink } from "../_libs/tabler__icons-react.mjs";
|
|
5
5
|
import { M as Markdown } from "../_libs/react-markdown.mjs";
|
|
6
6
|
import { r as remarkGfm } from "../_libs/remark-gfm.mjs";
|
|
7
7
|
import "../_libs/tanstack__react-router.mjs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import { a as cn, g as get } from "./router-
|
|
3
|
-
import {
|
|
2
|
+
import { a as cn, g as get } from "./router-CrULUyXB.mjs";
|
|
3
|
+
import { G as IconRefresh, s as IconChartBar } from "../_libs/tabler__icons-react.mjs";
|
|
4
4
|
import "../_libs/tanstack__react-router.mjs";
|
|
5
5
|
import "../_libs/tanstack__router-core.mjs";
|
|
6
6
|
import "../_libs/tanstack__history.mjs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
2
|
import { d as useNavigate } from "../_libs/tanstack__react-router.mjs";
|
|
3
|
-
import {
|
|
3
|
+
import { f as useChatStore, c as createSession } from "./router-CrULUyXB.mjs";
|
|
4
4
|
import "../_libs/tanstack__router-core.mjs";
|
|
5
5
|
import "../_libs/tanstack__history.mjs";
|
|
6
6
|
import "../_libs/cookie-es.mjs";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
2
|
import { u as useQueryClient, b as useMutation, a as useQuery } from "../_libs/tanstack__react-query.mjs";
|
|
3
|
-
import { B as Button, a as cn,
|
|
4
|
-
import { I as Input } from "./input-
|
|
5
|
-
import { T as Textarea } from "./textarea-
|
|
6
|
-
import { S as IconPlus,
|
|
3
|
+
import { B as Button, a as cn, i as patch, p as post, j as del, g as get } from "./router-CrULUyXB.mjs";
|
|
4
|
+
import { I as Input } from "./input-CZtNKDXd.mjs";
|
|
5
|
+
import { T as Textarea } from "./textarea-ClM2KXId.mjs";
|
|
6
|
+
import { S as IconPlus, G as IconRefresh, T as IconClock, U as IconPower, v as IconPencil, y as IconTrash, V as IconPlayerPlay, W as IconCalendar, X as IconChevronRight, E as IconLoader2 } from "../_libs/tabler__icons-react.mjs";
|
|
7
7
|
import "../_libs/tanstack__query-core.mjs";
|
|
8
8
|
import "../_libs/tanstack__react-router.mjs";
|
|
9
9
|
import "../_libs/tanstack__router-core.mjs";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import { R as Route$5, u as useTheme } from "./router-
|
|
2
|
+
import { R as Route$5, u as useTheme } from "./router-CrULUyXB.mjs";
|
|
3
3
|
import { i as IconLanguage, h as IconKey, g as IconBell, f as IconPaint, e as IconUser, q as IconRobot, c as IconSun, d as IconMoon, M as IconDeviceDesktop } from "../_libs/tabler__icons-react.mjs";
|
|
4
4
|
import "../_libs/tanstack__react-router.mjs";
|
|
5
5
|
import "../_libs/tanstack__router-core.mjs";
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
2
|
import { u as useShallow } from "../_libs/zustand.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import { T as Textarea } from "./textarea-
|
|
5
|
-
import {
|
|
3
|
+
import { m as Route, f as useChatStore, c as createSession, D as DropdownMenu, b as DropdownMenuTrigger, d as DropdownMenuContent, e as DropdownMenuItem, r as renameSession, B as Button, a as cn, k as deleteSessionApi, l as respondApproval } from "./router-CrULUyXB.mjs";
|
|
4
|
+
import { T as Textarea } from "./textarea-ClM2KXId.mjs";
|
|
5
|
+
import { u as useModels } from "./queries-ixVDom0l.mjs";
|
|
6
6
|
import { d as useNavigate } from "../_libs/tanstack__react-router.mjs";
|
|
7
|
-
import { S as IconPlus, y as IconTrash, u as IconDots, v as IconPencil, I as IconSearch, g as IconBell, Y as IconMail, B as IconCode, T as IconClock, Z as IconChartLine, _ as IconShieldCheck, Q as IconAlertTriangle, N as IconCheck, a as IconX, $ as IconCommand, a0 as IconPaperclip, D as IconCloud,
|
|
7
|
+
import { S as IconPlus, y as IconTrash, u as IconDots, v as IconPencil, I as IconSearch, g as IconBell, Y as IconMail, B as IconCode, T as IconClock, Z as IconChartLine, _ as IconShieldCheck, Q as IconAlertTriangle, N as IconCheck, a as IconX, $ as IconCommand, a0 as IconPaperclip, D as IconCloud, E as IconLoader2, a1 as IconPlayerStop, F as IconArrowUp, a2 as IconPhoto, a3 as IconFile, X as IconChevronRight, x as IconCopy } from "../_libs/tabler__icons-react.mjs";
|
|
8
8
|
import { M as Markdown } from "../_libs/react-markdown.mjs";
|
|
9
9
|
import { r as remarkGfm } from "../_libs/remark-gfm.mjs";
|
|
10
10
|
import "../_libs/tanstack__query-core.mjs";
|
|
11
|
+
import "../_libs/tanstack__react-query.mjs";
|
|
11
12
|
import "../_libs/clsx.mjs";
|
|
12
13
|
import "../_libs/class-variance-authority.mjs";
|
|
13
14
|
import "../_libs/base-ui__react.mjs";
|
|
@@ -183,17 +184,6 @@ function useInputHistory({
|
|
|
183
184
|
const size = reactExports.useCallback(() => history.length, [history.length]);
|
|
184
185
|
return { push, recallPrev, recallNext, isNavigating, size };
|
|
185
186
|
}
|
|
186
|
-
function useModels() {
|
|
187
|
-
return useQuery({
|
|
188
|
-
queryKey: ["models"],
|
|
189
|
-
queryFn: fetchModels,
|
|
190
|
-
staleTime: 3e5,
|
|
191
|
-
// 5min — models don't change often
|
|
192
|
-
gcTime: 6e5,
|
|
193
|
-
// 10min
|
|
194
|
-
refetchOnWindowFocus: false
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
187
|
function formatSize(bytes) {
|
|
198
188
|
if (bytes < 1024) return `${bytes} B`;
|
|
199
189
|
if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
|
|
@@ -1731,12 +1721,15 @@ function Chat({
|
|
|
1731
1721
|
});
|
|
1732
1722
|
reactExports.useEffect(() => {
|
|
1733
1723
|
if (!sessionId || pendingSentRef.current) return;
|
|
1734
|
-
const
|
|
1735
|
-
const
|
|
1724
|
+
const msgKey = `hermium_pending_msg_${sessionId}`;
|
|
1725
|
+
const modelKey = `hermium_pending_model_${sessionId}`;
|
|
1726
|
+
const pending = sessionStorage.getItem(msgKey);
|
|
1736
1727
|
if (!pending) return;
|
|
1737
1728
|
pendingSentRef.current = true;
|
|
1738
|
-
sessionStorage.
|
|
1739
|
-
|
|
1729
|
+
const pendingModel = sessionStorage.getItem(modelKey) || model;
|
|
1730
|
+
sessionStorage.removeItem(msgKey);
|
|
1731
|
+
sessionStorage.removeItem(modelKey);
|
|
1732
|
+
sendMessage(pending, sessionId, pendingModel);
|
|
1740
1733
|
}, [sessionId, model, sendMessage]);
|
|
1741
1734
|
reactExports.useEffect(() => {
|
|
1742
1735
|
function onKey(e) {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import { S as Switch } from "./switch-
|
|
3
|
-
import { I as Input } from "./input-
|
|
2
|
+
import { S as Switch } from "./switch-Bd3Khe3S.mjs";
|
|
3
|
+
import { I as Input } from "./input-CZtNKDXd.mjs";
|
|
4
4
|
import { u as useQueryClient, a as useQuery, b as useMutation } from "../_libs/tanstack__react-query.mjs";
|
|
5
|
-
import { a as cn,
|
|
6
|
-
import {
|
|
5
|
+
import { a as cn, h as put, g as get } from "./router-CrULUyXB.mjs";
|
|
6
|
+
import { E as IconLoader2, O as IconSparkles, P as IconPlugConnected, Q as IconAlertTriangle, R as IconPlug, m as IconChevronDown, N as IconCheck } from "../_libs/tabler__icons-react.mjs";
|
|
7
7
|
import "../_libs/base-ui__react.mjs";
|
|
8
8
|
import "../_libs/base-ui__utils.mjs";
|
|
9
9
|
import "../_libs/use-sync-external-store.mjs";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
2
|
import { d as useNavigate } from "../_libs/tanstack__react-router.mjs";
|
|
3
|
-
import { c as createSession, B as Button, a as cn } from "./router-
|
|
4
|
-
import {
|
|
5
|
-
import { z as IconChevronLeft, v as IconPencil, A as IconBook, B as IconCode, C as IconHeart, D as IconCloud, E as IconArrowUp } from "../_libs/tabler__icons-react.mjs";
|
|
3
|
+
import { c as createSession, B as Button, a as cn, D as DropdownMenu, b as DropdownMenuTrigger, d as DropdownMenuContent, e as DropdownMenuItem } from "./router-CrULUyXB.mjs";
|
|
4
|
+
import { u as useModels } from "./queries-ixVDom0l.mjs";
|
|
5
|
+
import { z as IconChevronLeft, v as IconPencil, A as IconBook, B as IconCode, C as IconHeart, D as IconCloud, E as IconLoader2, F as IconArrowUp } from "../_libs/tabler__icons-react.mjs";
|
|
6
6
|
import "../_libs/tanstack__router-core.mjs";
|
|
7
7
|
import "../_libs/tanstack__history.mjs";
|
|
8
8
|
import "../_libs/cookie-es.mjs";
|
|
@@ -107,12 +107,27 @@ function useGreeting() {
|
|
|
107
107
|
}, []);
|
|
108
108
|
return greeting;
|
|
109
109
|
}
|
|
110
|
+
function displayName(model) {
|
|
111
|
+
if (model.name && model.name !== model.id) return model.name;
|
|
112
|
+
const short = model.id.split("/").pop() || model.id;
|
|
113
|
+
return short.split("-").map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(" ");
|
|
114
|
+
}
|
|
110
115
|
function DashboardInput({
|
|
111
116
|
onSubmit,
|
|
112
117
|
disabled
|
|
113
118
|
}) {
|
|
114
119
|
const [value, setValue] = reactExports.useState("");
|
|
115
120
|
const textareaRef = reactExports.useRef(null);
|
|
121
|
+
const { data: modelsData, isLoading: modelsLoading } = useModels();
|
|
122
|
+
const models = modelsData?.models ?? [];
|
|
123
|
+
const [selectedModelId, setSelectedModelId] = reactExports.useState("");
|
|
124
|
+
reactExports.useEffect(() => {
|
|
125
|
+
if (!models.length) return;
|
|
126
|
+
if (selectedModelId && models.some((m) => m.id === selectedModelId)) return;
|
|
127
|
+
const target = modelsData?.default_model || models[0]?.id;
|
|
128
|
+
if (target) setSelectedModelId(target);
|
|
129
|
+
}, [models, modelsData?.default_model, selectedModelId]);
|
|
130
|
+
const selectedModel = models.find((m) => m.id === selectedModelId);
|
|
116
131
|
const autoResize = reactExports.useCallback(() => {
|
|
117
132
|
const el = textareaRef.current;
|
|
118
133
|
if (!el) return;
|
|
@@ -130,8 +145,8 @@ function DashboardInput({
|
|
|
130
145
|
if (!text || disabled) return;
|
|
131
146
|
setValue("");
|
|
132
147
|
if (textareaRef.current) textareaRef.current.style.height = "auto";
|
|
133
|
-
onSubmit(text);
|
|
134
|
-
}, [value, disabled, onSubmit]);
|
|
148
|
+
onSubmit(text, selectedModelId);
|
|
149
|
+
}, [value, disabled, onSubmit, selectedModelId]);
|
|
135
150
|
function handleKeyDown(e) {
|
|
136
151
|
if (e.key === "Enter" && !e.shiftKey) {
|
|
137
152
|
e.preventDefault();
|
|
@@ -139,9 +154,9 @@ function DashboardInput({
|
|
|
139
154
|
}
|
|
140
155
|
}
|
|
141
156
|
const canSend = value.trim().length > 0;
|
|
142
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col rounded-2xl border border-border bg-card shadow-
|
|
157
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-h-[80px] flex-col rounded-2xl border border-border bg-card shadow-sm transition-colors cursor-text hover:border-border/80", children: [
|
|
143
158
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
144
|
-
|
|
159
|
+
"textarea",
|
|
145
160
|
{
|
|
146
161
|
ref: textareaRef,
|
|
147
162
|
value,
|
|
@@ -151,26 +166,50 @@ function DashboardInput({
|
|
|
151
166
|
rows: 1,
|
|
152
167
|
disabled,
|
|
153
168
|
className: cn(
|
|
154
|
-
"w-full
|
|
169
|
+
"w-full rounded-none border-0 p-4 text-[15px] text-foreground resize-none shadow-none outline-none bg-transparent whitespace-pre-wrap break-words placeholder:text-muted-foreground disabled:opacity-50",
|
|
155
170
|
"min-h-[56px] max-h-[200px]"
|
|
156
171
|
)
|
|
157
172
|
}
|
|
158
173
|
),
|
|
159
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-h-[40px] items-center gap-2 p-2 pb-1", children: [
|
|
175
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenu, { children: [
|
|
176
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenuTrigger, { className: "flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors cursor-pointer outline-none", children: [
|
|
177
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(IconCloud, { className: "h-4 w-4 shrink-0" }),
|
|
178
|
+
modelsLoading && /* @__PURE__ */ jsxRuntimeExports.jsx(IconLoader2, { className: "h-3.5 w-3.5 animate-spin shrink-0" }),
|
|
179
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: cn(modelsLoading && "opacity-60"), children: modelsLoading ? "Loading…" : selectedModel ? displayName(selectedModel) : "Select model" })
|
|
180
|
+
] }),
|
|
181
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuContent, { align: "start", className: "max-h-[300px] overflow-y-auto min-w-48", children: models.map((model) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
182
|
+
DropdownMenuItem,
|
|
183
|
+
{
|
|
184
|
+
onClick: () => setSelectedModelId(model.id),
|
|
185
|
+
className: cn(
|
|
186
|
+
"flex-col items-start py-2",
|
|
187
|
+
model.id === selectedModelId && "bg-muted"
|
|
188
|
+
),
|
|
189
|
+
children: [
|
|
190
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm", children: displayName(model) }),
|
|
191
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-muted-foreground text-xs", children: model.provider_name })
|
|
192
|
+
]
|
|
193
|
+
},
|
|
194
|
+
model.id
|
|
195
|
+
)) })
|
|
196
|
+
] }),
|
|
197
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ml-auto flex items-center gap-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
198
|
+
Button,
|
|
199
|
+
{
|
|
200
|
+
variant: "ghost",
|
|
201
|
+
size: "icon-sm",
|
|
202
|
+
className: cn(
|
|
203
|
+
"rounded-full transition-colors cursor-pointer",
|
|
204
|
+
canSend && !disabled ? "bg-primary hover:bg-primary/90 text-primary-foreground" : "bg-primary text-primary-foreground opacity-40"
|
|
205
|
+
),
|
|
206
|
+
disabled: !canSend || disabled,
|
|
207
|
+
onClick: handleSend,
|
|
208
|
+
title: "Send message",
|
|
209
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(IconArrowUp, { className: "h-4 w-4" })
|
|
210
|
+
}
|
|
211
|
+
) })
|
|
212
|
+
] })
|
|
174
213
|
] });
|
|
175
214
|
}
|
|
176
215
|
function DashboardPage() {
|
|
@@ -180,15 +219,18 @@ function DashboardPage() {
|
|
|
180
219
|
const [isSubmitting, setIsSubmitting] = reactExports.useState(false);
|
|
181
220
|
const submittingRef = reactExports.useRef(false);
|
|
182
221
|
const handleNewChat = reactExports.useCallback(
|
|
183
|
-
async (initialMessage) => {
|
|
222
|
+
async (initialMessage, modelId) => {
|
|
184
223
|
if (submittingRef.current) return;
|
|
185
224
|
submittingRef.current = true;
|
|
186
225
|
setIsSubmitting(true);
|
|
187
226
|
try {
|
|
188
|
-
const session = await createSession();
|
|
227
|
+
const session = await createSession({ model: modelId });
|
|
189
228
|
if (initialMessage) {
|
|
190
229
|
sessionStorage.setItem(`hermium_pending_msg_${session.id}`, initialMessage);
|
|
191
230
|
}
|
|
231
|
+
if (modelId) {
|
|
232
|
+
sessionStorage.setItem(`hermium_pending_model_${session.id}`, modelId);
|
|
233
|
+
}
|
|
192
234
|
navigate({
|
|
193
235
|
to: "/chat/$sessionId",
|
|
194
236
|
params: { sessionId: session.id }
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import { a as cn, g as get, p as post } from "./router-
|
|
3
|
-
import { o as IconBrain, e as IconUser,
|
|
2
|
+
import { a as cn, g as get, p as post } from "./router-CrULUyXB.mjs";
|
|
3
|
+
import { o as IconBrain, e as IconUser, E as IconLoader2, H as IconAlertCircle, G as IconRefresh, a as IconX, N as IconCheck, v as IconPencil } from "../_libs/tabler__icons-react.mjs";
|
|
4
4
|
import { M as Markdown } from "../_libs/react-markdown.mjs";
|
|
5
5
|
import { r as remarkGfm } from "../_libs/remark-gfm.mjs";
|
|
6
6
|
import "../_libs/tanstack__react-router.mjs";
|
|
@@ -365,7 +365,7 @@ function getResponse() {
|
|
|
365
365
|
}
|
|
366
366
|
var HEADERS = { TSS_SHELL: "X-TSS_SHELL" };
|
|
367
367
|
async function getStartManifest(matchedRoutes) {
|
|
368
|
-
const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-
|
|
368
|
+
const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-cNUQI9I2.mjs");
|
|
369
369
|
const startManifest = tsrStartManifest();
|
|
370
370
|
const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
|
|
371
371
|
rootRoute.assets = rootRoute.assets || [];
|
|
@@ -1194,7 +1194,7 @@ var baseManifestPromise;
|
|
|
1194
1194
|
var cachedFinalManifestPromise;
|
|
1195
1195
|
async function loadEntries() {
|
|
1196
1196
|
const [routerEntry, startEntry, pluginAdapters] = await Promise.all([
|
|
1197
|
-
import("./router-
|
|
1197
|
+
import("./router-CrULUyXB.mjs").then((n) => n.o),
|
|
1198
1198
|
import("./start-HYkvq4Ni.mjs"),
|
|
1199
1199
|
import("../__23tanstack-start-plugin-adapters-Cwee5PKy.mjs")
|
|
1200
1200
|
]);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import { a as cn } from "./router-
|
|
2
|
+
import { a as cn } from "./router-CrULUyXB.mjs";
|
|
3
3
|
import { I as Input$1 } from "../_libs/base-ui__react.mjs";
|
|
4
4
|
function Input({ className, type, ...props }) {
|
|
5
5
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { a as useQuery } from "../_libs/tanstack__react-query.mjs";
|
|
2
|
+
import { n as fetchModels } from "./router-CrULUyXB.mjs";
|
|
3
|
+
function useModels() {
|
|
4
|
+
return useQuery({
|
|
5
|
+
queryKey: ["models"],
|
|
6
|
+
queryFn: fetchModels,
|
|
7
|
+
staleTime: 3e5,
|
|
8
|
+
// 5min — models don't change often
|
|
9
|
+
gcTime: 6e5,
|
|
10
|
+
// 10min
|
|
11
|
+
refetchOnWindowFocus: false
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
useModels as u
|
|
16
|
+
};
|
|
@@ -1818,7 +1818,7 @@ function DashboardLayout({ children }) {
|
|
|
1818
1818
|
/* @__PURE__ */ jsxRuntimeExports.jsx(SidebarInset, { className: "flex flex-col min-w-0", children })
|
|
1819
1819
|
] }) });
|
|
1820
1820
|
}
|
|
1821
|
-
const appCss = "/assets/styles-
|
|
1821
|
+
const appCss = "/assets/styles-Bc7sFPhq.css";
|
|
1822
1822
|
const themeScript = `
|
|
1823
1823
|
(function() {
|
|
1824
1824
|
try {
|
|
@@ -1863,19 +1863,19 @@ function RootDocument({ children }) {
|
|
|
1863
1863
|
] })
|
|
1864
1864
|
] });
|
|
1865
1865
|
}
|
|
1866
|
-
const $$splitComponentImporter$8 = () => import("./index-
|
|
1866
|
+
const $$splitComponentImporter$8 = () => import("./index-DxgfsEKM.mjs");
|
|
1867
1867
|
const Route$8 = createFileRoute("/")({
|
|
1868
1868
|
component: lazyRouteComponent($$splitComponentImporter$8, "component")
|
|
1869
1869
|
});
|
|
1870
|
-
const $$splitComponentImporter$7 = () => import("./index-
|
|
1870
|
+
const $$splitComponentImporter$7 = () => import("./index-BT-fOdbN.mjs");
|
|
1871
1871
|
const Route$7 = createFileRoute("/usage/")({
|
|
1872
1872
|
component: lazyRouteComponent($$splitComponentImporter$7, "component")
|
|
1873
1873
|
});
|
|
1874
|
-
const $$splitComponentImporter$6 = () => import("./index-
|
|
1874
|
+
const $$splitComponentImporter$6 = () => import("./index-BFCBaZTA.mjs");
|
|
1875
1875
|
const Route$6 = createFileRoute("/skills/")({
|
|
1876
1876
|
component: lazyRouteComponent($$splitComponentImporter$6, "component")
|
|
1877
1877
|
});
|
|
1878
|
-
const $$splitComponentImporter$5 = () => import("./index-
|
|
1878
|
+
const $$splitComponentImporter$5 = () => import("./index-ClGONv4K.mjs");
|
|
1879
1879
|
const settingsSearchSchema = object({
|
|
1880
1880
|
section: string().optional().default("profile")
|
|
1881
1881
|
});
|
|
@@ -1883,23 +1883,23 @@ const Route$5 = createFileRoute("/settings/")({
|
|
|
1883
1883
|
component: lazyRouteComponent($$splitComponentImporter$5, "component"),
|
|
1884
1884
|
validateSearch: (search) => settingsSearchSchema.parse(search)
|
|
1885
1885
|
});
|
|
1886
|
-
const $$splitComponentImporter$4 = () => import("./index-
|
|
1886
|
+
const $$splitComponentImporter$4 = () => import("./index-KGEq7IhY.mjs");
|
|
1887
1887
|
const Route$4 = createFileRoute("/memory/")({
|
|
1888
1888
|
component: lazyRouteComponent($$splitComponentImporter$4, "component")
|
|
1889
1889
|
});
|
|
1890
|
-
const $$splitComponentImporter$3 = () => import("./index-
|
|
1890
|
+
const $$splitComponentImporter$3 = () => import("./index-BVtbpy73.mjs");
|
|
1891
1891
|
const Route$3 = createFileRoute("/chat/")({
|
|
1892
1892
|
component: lazyRouteComponent($$splitComponentImporter$3, "component")
|
|
1893
1893
|
});
|
|
1894
|
-
const $$splitComponentImporter$2 = () => import("./index-
|
|
1894
|
+
const $$splitComponentImporter$2 = () => import("./index-D4rgpZTm.mjs");
|
|
1895
1895
|
const Route$2 = createFileRoute("/channels/")({
|
|
1896
1896
|
component: lazyRouteComponent($$splitComponentImporter$2, "component")
|
|
1897
1897
|
});
|
|
1898
|
-
const $$splitComponentImporter$1 = () => import("./index-
|
|
1898
|
+
const $$splitComponentImporter$1 = () => import("./index-B_d-ca5z.mjs");
|
|
1899
1899
|
const Route$1 = createFileRoute("/automations/")({
|
|
1900
1900
|
component: lazyRouteComponent($$splitComponentImporter$1, "component")
|
|
1901
1901
|
});
|
|
1902
|
-
const $$splitComponentImporter = () => import("./index-
|
|
1902
|
+
const $$splitComponentImporter = () => import("./index-CmwSlgGR.mjs");
|
|
1903
1903
|
const Route = createFileRoute("/chat/$sessionId/")({
|
|
1904
1904
|
component: lazyRouteComponent($$splitComponentImporter, "component")
|
|
1905
1905
|
});
|
|
@@ -1978,19 +1978,19 @@ export {
|
|
|
1978
1978
|
DropdownMenu as D,
|
|
1979
1979
|
Route$5 as R,
|
|
1980
1980
|
cn as a,
|
|
1981
|
-
|
|
1981
|
+
DropdownMenuTrigger as b,
|
|
1982
1982
|
createSession as c,
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1983
|
+
DropdownMenuContent as d,
|
|
1984
|
+
DropdownMenuItem as e,
|
|
1985
|
+
useChatStore as f,
|
|
1986
1986
|
get as g,
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
|
|
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
1994
|
router as o,
|
|
1995
1995
|
post as p,
|
|
1996
1996
|
renameSession as r,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import { a as cn } from "./router-
|
|
2
|
+
import { a as cn } from "./router-CrULUyXB.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-
|
|
2
|
+
import { a as cn } from "./router-CrULUyXB.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-twHXYGSY.js"] }, "/": { filePath: "/home/abbskhnv/Desktop/hermium/apps/web/src/routes/index.tsx", children: void 0, assets: void 0, preloads: ["/assets/index-qsvsww7-.js", "/assets/queries-DuZAFrOY.js", "/assets/IconLoader2-DkEhzUxZ.js", "/assets/useQuery-ByTdbkfi.js"] }, "/automations/": { filePath: "/home/abbskhnv/Desktop/hermium/apps/web/src/routes/automations/index.tsx", children: void 0, assets: void 0, preloads: ["/assets/index-BTiEWEax.js", "/assets/useQuery-ByTdbkfi.js", "/assets/input-C_TtyOcH.js", "/assets/textarea-a9VUYAmJ.js", "/assets/IconRefresh-CCXMrUxO.js", "/assets/IconLoader2-DkEhzUxZ.js"] }, "/channels/": { filePath: "/home/abbskhnv/Desktop/hermium/apps/web/src/routes/channels/index.tsx", children: void 0, assets: void 0, preloads: ["/assets/index-KT0CxDFc.js", "/assets/switch-BKlJnOab.js", "/assets/input-C_TtyOcH.js", "/assets/useQuery-ByTdbkfi.js", "/assets/IconAlertTriangle-DdD7_dc8.js", "/assets/IconLoader2-DkEhzUxZ.js", "/assets/IconCheck-CYZ4_524.js"] }, "/chat/": { filePath: "/home/abbskhnv/Desktop/hermium/apps/web/src/routes/chat/index.tsx", children: void 0, assets: void 0, preloads: ["/assets/index-DhCVawEl.js"] }, "/memory/": { filePath: "/home/abbskhnv/Desktop/hermium/apps/web/src/routes/memory/index.tsx", children: void 0, assets: void 0, preloads: ["/assets/index-D6B0cdTJ.js", "/assets/IconLoader2-DkEhzUxZ.js", "/assets/IconAlertCircle-C98Iam1j.js", "/assets/IconRefresh-CCXMrUxO.js", "/assets/IconCheck-CYZ4_524.js", "/assets/index-DCT13_ZI.js"] }, "/settings/": { filePath: "/home/abbskhnv/Desktop/hermium/apps/web/src/routes/settings/index.tsx", children: void 0, assets: void 0, preloads: ["/assets/index-Bfadg8tB.js"] }, "/skills/": { filePath: "/home/abbskhnv/Desktop/hermium/apps/web/src/routes/skills/index.tsx", children: void 0, assets: void 0, preloads: ["/assets/index-C0ivmMuU.js", "/assets/switch-BKlJnOab.js", "/assets/IconLoader2-DkEhzUxZ.js", "/assets/IconAlertCircle-C98Iam1j.js", "/assets/IconRefresh-CCXMrUxO.js", "/assets/index-DCT13_ZI.js"] }, "/usage/": { filePath: "/home/abbskhnv/Desktop/hermium/apps/web/src/routes/usage/index.tsx", children: void 0, assets: void 0, preloads: ["/assets/index-zFJdOj6P.js", "/assets/IconRefresh-CCXMrUxO.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-CQCxtJMS.js", "/assets/textarea-a9VUYAmJ.js", "/assets/queries-DuZAFrOY.js", "/assets/IconLoader2-DkEhzUxZ.js", "/assets/index-DCT13_ZI.js", "/assets/IconCheck-CYZ4_524.js", "/assets/IconAlertTriangle-DdD7_dc8.js", "/assets/useQuery-ByTdbkfi.js"] } }, clientEntry: "/assets/index-twHXYGSY.js" });
|
|
2
|
+
export {
|
|
3
|
+
tsrStartManifest
|
|
4
|
+
};
|