opencami 1.3.2 → 1.5.0
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/README.md +60 -0
- package/dist/client/assets/CSPContext-EgWK8bIJ.js +1 -0
- package/dist/client/assets/DirectionContext-DXtY05YF.js +1 -0
- package/dist/client/assets/_sessionKey-B89e7G3y.js +100 -0
- package/dist/client/assets/agents-screen-1BiEZ9od.js +1 -0
- package/dist/client/assets/agents-x54ocA9z.js +2 -0
- package/dist/client/assets/bots-screen-BNQciUeJ.js +1 -0
- package/dist/client/assets/bots-x86ZHG4b.js +2 -0
- package/dist/client/assets/button-nDcsaNPl.js +1 -0
- package/dist/client/assets/{connect-CtDn993i.js → connect-w4lLOqiJ.js} +1 -1
- package/dist/client/assets/file-explorer-screen-CAsjd3w8.js +1 -0
- package/dist/client/assets/files-Bype5Mnb.js +2 -0
- package/dist/client/assets/{index-N9-2R5hZ.js → index-36G0WCxU.js} +1 -1
- package/dist/client/assets/index-BXkRE220.js +153 -0
- package/dist/client/assets/keyboard-shortcuts-dialog-BdCeXRjD.js +1 -0
- package/dist/client/assets/{main-DrVY5UJU.js → main-B3N0eQFg.js} +129 -17
- package/dist/client/assets/opencami-logo-DD0DPFRQ.js +1 -0
- package/dist/client/assets/{react-CzqI3gbN.js → react-B16OrBeM.js} +1 -1
- package/dist/client/assets/search-dialog-BjTPceEl.js +1 -0
- package/dist/client/assets/session-export-dialog-DtHKG2zW.js +1 -0
- package/dist/client/assets/settings-dialog-hiqdk_UD.js +1 -0
- package/dist/client/assets/skills-DhwyFq3y.js +2 -0
- package/dist/client/assets/skills-panel-BLUjzfjJ.js +5 -0
- package/dist/client/assets/styles-CHP4l6vZ.css +1 -0
- package/dist/client/assets/switch-J6wLIVu2.js +1 -0
- package/dist/client/assets/tabs-DvPgTz5I.js +1 -0
- package/dist/client/assets/tooltip-C14vdXHK.js +1 -0
- package/dist/client/assets/use-file-explorer-state-BnaJEqRP.js +12 -0
- package/dist/client/assets/useButton-Bnnac1eR.js +1 -0
- package/dist/client/assets/useCompositeItem-BgiEMKAt.js +1 -0
- package/dist/client/assets/useControlled-BhUuiHAm.js +1 -0
- package/dist/client/assets/useMutation-CFmVaBag.js +1 -0
- package/dist/client/assets/visuallyHidden-DCCICp6T.js +9 -0
- package/dist/server/assets/{_sessionKey-DVNrEYFh.js → _sessionKey-tRze5NLR.js} +493 -92
- package/dist/server/assets/_tanstack-start-manifest_v-CyfoMvUa.js +4 -0
- package/dist/server/assets/{agents-Dz_i76VW.js → agents-CmQ4vvXm.js} +1 -1
- package/dist/server/assets/{agents-screen-CqQPJndp.js → agents-screen-bmrIyFbk.js} +43 -35
- package/dist/server/assets/bots-Byt6jv0a.js +11 -0
- package/dist/server/assets/bots-screen-C2TGFv42.js +474 -0
- package/dist/server/assets/{button-DtQ3rV1m.js → button-CwY2OHFj.js} +2 -2
- package/dist/server/assets/{connect-CIDOw12K.js → connect-d3AqjAqe.js} +2 -2
- package/dist/server/assets/{file-explorer-screen-Cx0jiLRU.js → file-explorer-screen-CVlFiAFu.js} +39 -40
- package/dist/server/assets/{files-Trs1M5ba.js → files-BIEcSPGp.js} +1 -1
- package/dist/server/assets/{index-CmbNTqa2.js → index-CNIATlJ9.js} +93 -38
- package/dist/server/assets/{index-Dv2RXDa2.js → index-CRfLKh30.js} +2 -1
- package/dist/server/assets/{keyboard-shortcuts-dialog-7OEtXUlW.js → keyboard-shortcuts-dialog-CsNP85q8.js} +2 -2
- package/dist/server/assets/{router-OoQe2c20.js → router-rn7pJO_D.js} +515 -78
- package/dist/server/assets/{search-dialog-Bq0Pnxdb.js → search-dialog-Bz4Cu0KW.js} +23 -6
- package/dist/server/assets/{session-export-dialog-DRVbC8Q-.js → session-export-dialog-CwclV0Aj.js} +2 -2
- package/dist/server/assets/{settings-dialog-BsJsnMiu.js → settings-dialog-BBM7jCjE.js} +409 -95
- package/dist/server/assets/skills-Cy8xclXY.js +11 -0
- package/dist/server/assets/skills-panel-BnRNb7u9.js +762 -0
- package/dist/server/assets/{switch-DnX0MjGS.js → switch-BbkUeVDV.js} +1 -1
- package/dist/server/assets/tabs-DDFZob0m.js +67 -0
- package/dist/server/assets/{tooltip-gbV6rEVv.js → tooltip-DgsSPocE.js} +1 -1
- package/dist/server/assets/{use-file-explorer-state-DMHdtb7D.js → use-file-explorer-state-Il1LlBAe.js} +13 -1
- package/dist/server/server.js +2 -2
- package/package.json +6 -2
- package/dist/client/assets/_sessionKey-Z6Wcnj0N.js +0 -97
- package/dist/client/assets/agents-D8ZHVQ1Z.js +0 -2
- package/dist/client/assets/agents-screen-BVK0QTRH.js +0 -1
- package/dist/client/assets/button-CuH8u1uR.js +0 -1
- package/dist/client/assets/file-explorer-screen-DMUuR1uG.js +0 -1
- package/dist/client/assets/files-CDMLoJ0u.js +0 -2
- package/dist/client/assets/index-IGP-Igwt.js +0 -153
- package/dist/client/assets/keyboard-shortcuts-dialog-DW--4YLF.js +0 -1
- package/dist/client/assets/opencami-logo-ChD2XR2j.js +0 -1
- package/dist/client/assets/search-dialog-DYyFYJmw.js +0 -1
- package/dist/client/assets/session-export-dialog-BFizBmGb.js +0 -1
- package/dist/client/assets/settings-dialog-UvgVi2It.js +0 -1
- package/dist/client/assets/styles-BGTCU8mq.css +0 -1
- package/dist/client/assets/switch-DxW2OWPG.js +0 -1
- package/dist/client/assets/use-file-explorer-state-Cii59H70.js +0 -12
- package/dist/client/assets/useButton-hZdvKtl_.js +0 -9
- package/dist/server/assets/_tanstack-start-manifest_v-PwRq_yJS.js +0 -4
|
@@ -3,13 +3,14 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { QueryClientProvider, QueryClient } from "@tanstack/react-query";
|
|
4
4
|
import { randomUUID } from "node:crypto";
|
|
5
5
|
import WebSocket from "ws";
|
|
6
|
-
import { readFileSync } from "node:fs";
|
|
6
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
7
7
|
import path, { join, resolve, relative, extname } from "node:path";
|
|
8
8
|
import os, { homedir } from "node:os";
|
|
9
9
|
import { json } from "@tanstack/router-core/ssr/client";
|
|
10
|
+
import { execSync } from "node:child_process";
|
|
10
11
|
import { readFile, mkdir, writeFile, rename, stat, readdir, rm, realpath, lstat } from "node:fs/promises";
|
|
11
12
|
import { posix } from "path";
|
|
12
|
-
const appCss = "/assets/styles-
|
|
13
|
+
const appCss = "/assets/styles-CHP4l6vZ.css";
|
|
13
14
|
const swRegisterScript = `
|
|
14
15
|
(() => {
|
|
15
16
|
// Skip PWA service worker inside Capacitor native shell — they conflict
|
|
@@ -46,15 +47,21 @@ const themeScript = `
|
|
|
46
47
|
if (stored) {
|
|
47
48
|
const parsed = JSON.parse(stored)
|
|
48
49
|
const storedTheme = parsed?.state?.settings?.theme
|
|
49
|
-
if (storedTheme === 'light' || storedTheme === 'dark' || storedTheme === 'system' || storedTheme === 'chameleon') {
|
|
50
|
+
if (storedTheme === 'light' || storedTheme === 'dark' || storedTheme === 'system' || storedTheme === 'chameleon' || storedTheme === 'frost-light' || storedTheme === 'frost-dark') {
|
|
50
51
|
theme = storedTheme
|
|
51
52
|
}
|
|
52
53
|
}
|
|
53
54
|
const root = document.documentElement
|
|
54
55
|
const media = window.matchMedia('(prefers-color-scheme: dark)')
|
|
55
56
|
const apply = () => {
|
|
56
|
-
root.classList.remove('light', 'dark', 'system', 'chameleon')
|
|
57
|
+
root.classList.remove('light', 'dark', 'system', 'chameleon', 'frost', 'frost-light', 'frost-dark')
|
|
57
58
|
root.classList.add(theme)
|
|
59
|
+
if (theme === 'frost-light' || theme === 'frost-dark') {
|
|
60
|
+
root.classList.add('frost')
|
|
61
|
+
}
|
|
62
|
+
if (theme === 'frost-dark') {
|
|
63
|
+
root.classList.add('dark')
|
|
64
|
+
}
|
|
58
65
|
if (theme === 'system' && media.matches) {
|
|
59
66
|
root.classList.add('dark')
|
|
60
67
|
}
|
|
@@ -66,6 +73,13 @@ const themeScript = `
|
|
|
66
73
|
} catch {}
|
|
67
74
|
})()
|
|
68
75
|
`;
|
|
76
|
+
const tauriDetectScript = `
|
|
77
|
+
(() => {
|
|
78
|
+
if (window.__TAURI_INTERNALS__ || window.__TAURI__) {
|
|
79
|
+
document.documentElement.classList.add('tauri')
|
|
80
|
+
}
|
|
81
|
+
})()
|
|
82
|
+
`;
|
|
69
83
|
const textSizeScript = `
|
|
70
84
|
(() => {
|
|
71
85
|
try {
|
|
@@ -76,13 +90,119 @@ const textSizeScript = `
|
|
|
76
90
|
} catch {}
|
|
77
91
|
})()
|
|
78
92
|
`;
|
|
93
|
+
const fontFamilyScript = `
|
|
94
|
+
(() => {
|
|
95
|
+
try {
|
|
96
|
+
const stored = localStorage.getItem('opencami-font-family')
|
|
97
|
+
const map = {
|
|
98
|
+
'system': '-apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',
|
|
99
|
+
'inter': '"Inter", sans-serif',
|
|
100
|
+
'ibm-plex-sans': '"IBM Plex Sans", sans-serif',
|
|
101
|
+
'jetbrains-mono': '"JetBrains Mono", monospace',
|
|
102
|
+
'merriweather': '"Merriweather", serif',
|
|
103
|
+
'roboto': '"Roboto", sans-serif',
|
|
104
|
+
}
|
|
105
|
+
const value = map[stored] || map.system
|
|
106
|
+
document.documentElement.style.setProperty('--opencami-font-family', value)
|
|
107
|
+
} catch {}
|
|
108
|
+
})()
|
|
109
|
+
`;
|
|
110
|
+
const densityScript = `
|
|
111
|
+
(() => {
|
|
112
|
+
try {
|
|
113
|
+
const stored = localStorage.getItem('opencami-density')
|
|
114
|
+
const value = stored === 'compact' || stored === 'spacious' || stored === 'comfortable'
|
|
115
|
+
? stored
|
|
116
|
+
: 'comfortable'
|
|
117
|
+
const root = document.documentElement
|
|
118
|
+
root.style.setProperty('--opencami-density', value)
|
|
119
|
+
|
|
120
|
+
if (value === 'compact') {
|
|
121
|
+
root.style.setProperty('--opencami-msg-padding-y', '0.25rem')
|
|
122
|
+
root.style.setProperty('--opencami-msg-gap', '0.25rem')
|
|
123
|
+
root.style.setProperty('--opencami-user-bubble-py', '0.4rem')
|
|
124
|
+
} else if (value === 'spacious') {
|
|
125
|
+
root.style.setProperty('--opencami-msg-padding-y', '1.25rem')
|
|
126
|
+
root.style.setProperty('--opencami-msg-gap', '1rem')
|
|
127
|
+
root.style.setProperty('--opencami-user-bubble-py', '1rem')
|
|
128
|
+
} else {
|
|
129
|
+
root.style.setProperty('--opencami-msg-padding-y', '0.75rem')
|
|
130
|
+
root.style.setProperty('--opencami-msg-gap', '0.5rem')
|
|
131
|
+
root.style.setProperty('--opencami-user-bubble-py', '0.625rem')
|
|
132
|
+
}
|
|
133
|
+
} catch {}
|
|
134
|
+
})()
|
|
135
|
+
`;
|
|
136
|
+
const accentColorScript = `
|
|
137
|
+
(() => {
|
|
138
|
+
try {
|
|
139
|
+
const stored = localStorage.getItem('opencami-accent-color')
|
|
140
|
+
const map = {
|
|
141
|
+
green: { accent: '#22c55e', hover: '#16a34a', light: 'rgba(34, 197, 94, 0.10)' },
|
|
142
|
+
blue: { accent: '#3b82f6', hover: '#2563eb', light: 'rgba(59, 130, 246, 0.10)' },
|
|
143
|
+
purple: { accent: '#8b5cf6', hover: '#7c3aed', light: 'rgba(139, 92, 246, 0.10)' },
|
|
144
|
+
orange: { accent: '#f97316', hover: '#ea580c', light: 'rgba(249, 115, 22, 0.10)' },
|
|
145
|
+
pink: { accent: '#ec4899', hover: '#db2777', light: 'rgba(236, 72, 153, 0.10)' },
|
|
146
|
+
red: { accent: '#ef4444', hover: '#dc2626', light: 'rgba(239, 68, 68, 0.10)' },
|
|
147
|
+
cyan: { accent: '#06b6d4', hover: '#0891b2', light: 'rgba(6, 182, 212, 0.10)' },
|
|
148
|
+
yellow: { accent: '#eab308', hover: '#ca8a04', light: 'rgba(234, 179, 8, 0.10)' },
|
|
149
|
+
}
|
|
150
|
+
const selected = map[stored] || map.green
|
|
151
|
+
const root = document.documentElement
|
|
152
|
+
root.style.setProperty('--opencami-accent', selected.accent)
|
|
153
|
+
root.style.setProperty('--opencami-accent-hover', selected.hover)
|
|
154
|
+
root.style.setProperty('--opencami-accent-light', selected.light)
|
|
155
|
+
} catch {}
|
|
156
|
+
})()
|
|
157
|
+
`;
|
|
158
|
+
const chatWidthScript = `
|
|
159
|
+
(() => {
|
|
160
|
+
try {
|
|
161
|
+
const stored = localStorage.getItem('opencami-chat-width')
|
|
162
|
+
const map = {
|
|
163
|
+
narrow: '640px',
|
|
164
|
+
medium: '800px',
|
|
165
|
+
wide: '1000px',
|
|
166
|
+
full: '100%',
|
|
167
|
+
}
|
|
168
|
+
const value = map[stored] || map.wide
|
|
169
|
+
document.documentElement.style.setProperty('--opencami-chat-width', value)
|
|
170
|
+
} catch {}
|
|
171
|
+
})()
|
|
172
|
+
`;
|
|
173
|
+
const sidebarWidthScript = `
|
|
174
|
+
(() => {
|
|
175
|
+
try {
|
|
176
|
+
const stored = localStorage.getItem('opencami-sidebar-width')
|
|
177
|
+
const map = {
|
|
178
|
+
compact: '200px',
|
|
179
|
+
normal: '260px',
|
|
180
|
+
wide: '320px',
|
|
181
|
+
xl: '400px',
|
|
182
|
+
}
|
|
183
|
+
const value = map[stored] || map.normal
|
|
184
|
+
document.documentElement.style.setProperty('--opencami-sidebar-width', value)
|
|
185
|
+
} catch {}
|
|
186
|
+
})()
|
|
187
|
+
`;
|
|
188
|
+
const bubbleStyleScript = `
|
|
189
|
+
(() => {
|
|
190
|
+
try {
|
|
191
|
+
const stored = localStorage.getItem('opencami-bubble-style')
|
|
192
|
+
const value = stored === 'bubbles' || stored === 'minimal' || stored === 'default'
|
|
193
|
+
? stored
|
|
194
|
+
: 'default'
|
|
195
|
+
document.documentElement.setAttribute('data-opencami-bubble-style', value)
|
|
196
|
+
} catch {}
|
|
197
|
+
})()
|
|
198
|
+
`;
|
|
79
199
|
function NotFoundRedirect() {
|
|
80
200
|
if (typeof window !== "undefined") {
|
|
81
201
|
window.location.href = "/chat/main";
|
|
82
202
|
}
|
|
83
203
|
return null;
|
|
84
204
|
}
|
|
85
|
-
const Route$
|
|
205
|
+
const Route$w = createRootRoute({
|
|
86
206
|
notFoundComponent: NotFoundRedirect,
|
|
87
207
|
head: () => ({
|
|
88
208
|
meta: [
|
|
@@ -172,7 +292,14 @@ function RootLayout() {
|
|
|
172
292
|
function RootDocument({ children }) {
|
|
173
293
|
return /* @__PURE__ */ jsxs("html", { lang: "en", suppressHydrationWarning: true, children: [
|
|
174
294
|
/* @__PURE__ */ jsxs("head", { children: [
|
|
295
|
+
/* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: tauriDetectScript } }),
|
|
175
296
|
/* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: textSizeScript } }),
|
|
297
|
+
/* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: fontFamilyScript } }),
|
|
298
|
+
/* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: densityScript } }),
|
|
299
|
+
/* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: accentColorScript } }),
|
|
300
|
+
/* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: chatWidthScript } }),
|
|
301
|
+
/* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: sidebarWidthScript } }),
|
|
302
|
+
/* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: bubbleStyleScript } }),
|
|
176
303
|
/* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: themeScript } }),
|
|
177
304
|
/* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: swRegisterScript } }),
|
|
178
305
|
/* @__PURE__ */ jsx(HeadContent, {})
|
|
@@ -183,8 +310,12 @@ function RootDocument({ children }) {
|
|
|
183
310
|
] })
|
|
184
311
|
] });
|
|
185
312
|
}
|
|
186
|
-
const $$splitComponentImporter$
|
|
187
|
-
const Route$
|
|
313
|
+
const $$splitComponentImporter$7 = () => import("./skills-Cy8xclXY.js");
|
|
314
|
+
const Route$v = createFileRoute("/skills")({
|
|
315
|
+
component: lazyRouteComponent($$splitComponentImporter$7, "component")
|
|
316
|
+
});
|
|
317
|
+
const $$splitComponentImporter$6 = () => import("./new-Dzk5YxE9.js");
|
|
318
|
+
const Route$u = createFileRoute("/new")({
|
|
188
319
|
beforeLoad: function redirectToNewChat() {
|
|
189
320
|
throw redirect({
|
|
190
321
|
to: "/chat/$sessionKey",
|
|
@@ -194,26 +325,30 @@ const Route$r = createFileRoute("/new")({
|
|
|
194
325
|
replace: true
|
|
195
326
|
});
|
|
196
327
|
},
|
|
328
|
+
component: lazyRouteComponent($$splitComponentImporter$6, "component")
|
|
329
|
+
});
|
|
330
|
+
const $$splitComponentImporter$5 = () => import("./files-BIEcSPGp.js");
|
|
331
|
+
const Route$t = createFileRoute("/files")({
|
|
197
332
|
component: lazyRouteComponent($$splitComponentImporter$5, "component")
|
|
198
333
|
});
|
|
199
|
-
const $$splitComponentImporter$4 = () => import("./
|
|
200
|
-
const Route$
|
|
334
|
+
const $$splitComponentImporter$4 = () => import("./connect-d3AqjAqe.js");
|
|
335
|
+
const Route$s = createFileRoute("/connect")({
|
|
201
336
|
component: lazyRouteComponent($$splitComponentImporter$4, "component")
|
|
202
337
|
});
|
|
203
|
-
const $$splitComponentImporter$3 = () => import("./
|
|
204
|
-
const Route$
|
|
338
|
+
const $$splitComponentImporter$3 = () => import("./bots-Byt6jv0a.js");
|
|
339
|
+
const Route$r = createFileRoute("/bots")({
|
|
205
340
|
component: lazyRouteComponent($$splitComponentImporter$3, "component")
|
|
206
341
|
});
|
|
207
|
-
const $$splitComponentImporter$2 = () => import("./agents-
|
|
208
|
-
const Route$
|
|
342
|
+
const $$splitComponentImporter$2 = () => import("./agents-CmQ4vvXm.js");
|
|
343
|
+
const Route$q = createFileRoute("/agents")({
|
|
209
344
|
component: lazyRouteComponent($$splitComponentImporter$2, "component")
|
|
210
345
|
});
|
|
211
|
-
const $$splitComponentImporter$1 = () => import("./index-
|
|
212
|
-
const Route$
|
|
346
|
+
const $$splitComponentImporter$1 = () => import("./index-CRfLKh30.js");
|
|
347
|
+
const Route$p = createFileRoute("/")({
|
|
213
348
|
component: lazyRouteComponent($$splitComponentImporter$1, "component")
|
|
214
349
|
});
|
|
215
|
-
const $$splitComponentImporter = () => import("./_sessionKey-
|
|
216
|
-
const Route$
|
|
350
|
+
const $$splitComponentImporter = () => import("./_sessionKey-tRze5NLR.js").then((n) => n.$);
|
|
351
|
+
const Route$o = createFileRoute("/chat/$sessionKey")({
|
|
217
352
|
component: lazyRouteComponent($$splitComponentImporter, "component")
|
|
218
353
|
});
|
|
219
354
|
function getGatewayConfig() {
|
|
@@ -580,7 +715,7 @@ async function ttsEdge(text, voice) {
|
|
|
580
715
|
}
|
|
581
716
|
});
|
|
582
717
|
}
|
|
583
|
-
const Route$
|
|
718
|
+
const Route$n = createFileRoute("/api/tts")({
|
|
584
719
|
server: {
|
|
585
720
|
handlers: {
|
|
586
721
|
POST: async ({ request }) => {
|
|
@@ -735,7 +870,7 @@ async function sttOpenAI(audioBlob, apiKey, language) {
|
|
|
735
870
|
const data = await res.json();
|
|
736
871
|
return { text: data.text || "" };
|
|
737
872
|
}
|
|
738
|
-
const Route$
|
|
873
|
+
const Route$m = createFileRoute("/api/stt")({
|
|
739
874
|
server: {
|
|
740
875
|
handlers: {
|
|
741
876
|
POST: async ({ request }) => {
|
|
@@ -837,7 +972,7 @@ const Route$k = createFileRoute("/api/stt")({
|
|
|
837
972
|
}
|
|
838
973
|
}
|
|
839
974
|
});
|
|
840
|
-
const Route$
|
|
975
|
+
const Route$l = createFileRoute("/api/stream")({
|
|
841
976
|
server: {
|
|
842
977
|
handlers: {
|
|
843
978
|
GET: async ({ request }) => {
|
|
@@ -942,6 +1077,155 @@ data: ${JSON.stringify(data)}
|
|
|
942
1077
|
}
|
|
943
1078
|
}
|
|
944
1079
|
});
|
|
1080
|
+
const MY_SKILLS_CONFIG = resolve(process.cwd(), ".clawhub-my-skills.json");
|
|
1081
|
+
const RECOMMENDED_SKILLS = [
|
|
1082
|
+
"web-search-plus",
|
|
1083
|
+
"elevenlabs-voices",
|
|
1084
|
+
"sports-ticker",
|
|
1085
|
+
"personas",
|
|
1086
|
+
"agent-chronicle",
|
|
1087
|
+
"summarize",
|
|
1088
|
+
"weather",
|
|
1089
|
+
"muninn",
|
|
1090
|
+
"clawd-docs-v2",
|
|
1091
|
+
"therapy-mode"
|
|
1092
|
+
];
|
|
1093
|
+
function runCmd(cmd) {
|
|
1094
|
+
try {
|
|
1095
|
+
return execSync(cmd, { encoding: "utf-8", timeout: 3e4 }).trim();
|
|
1096
|
+
} catch (err) {
|
|
1097
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
1098
|
+
throw new Error(`Command failed: ${msg}`);
|
|
1099
|
+
}
|
|
1100
|
+
}
|
|
1101
|
+
function loadMySkillsSlugs() {
|
|
1102
|
+
try {
|
|
1103
|
+
if (!existsSync(MY_SKILLS_CONFIG)) return [];
|
|
1104
|
+
const data = JSON.parse(readFileSync(MY_SKILLS_CONFIG, "utf-8"));
|
|
1105
|
+
return Array.isArray(data.slugs) ? data.slugs : [];
|
|
1106
|
+
} catch {
|
|
1107
|
+
return [];
|
|
1108
|
+
}
|
|
1109
|
+
}
|
|
1110
|
+
function parseInstalledSkills(output) {
|
|
1111
|
+
if (!output) return [];
|
|
1112
|
+
return output.split("\n").filter((line) => line.trim()).map((line) => {
|
|
1113
|
+
const match = line.match(/^(.+?)\s+v?([\d.]+.*)$/);
|
|
1114
|
+
if (match) return { name: match[1].trim(), version: match[2].trim() };
|
|
1115
|
+
return { name: line.trim(), version: "" };
|
|
1116
|
+
});
|
|
1117
|
+
}
|
|
1118
|
+
function parseSearchResults(output) {
|
|
1119
|
+
if (!output) return [];
|
|
1120
|
+
return output.split("\n").filter((line) => line.trim()).map((line) => {
|
|
1121
|
+
const match = line.match(/^(.+?)\s+v([\d.]+)\s+(.+?)(?:\s+\(([\d.]+)\))?$/);
|
|
1122
|
+
if (match) {
|
|
1123
|
+
return {
|
|
1124
|
+
slug: match[1].trim(),
|
|
1125
|
+
displayName: match[1].trim(),
|
|
1126
|
+
version: match[2].trim(),
|
|
1127
|
+
summary: match[3].trim(),
|
|
1128
|
+
score: match[4] ? parseFloat(match[4]) : void 0
|
|
1129
|
+
};
|
|
1130
|
+
}
|
|
1131
|
+
return { slug: line.trim(), displayName: line.trim(), version: "", summary: "" };
|
|
1132
|
+
});
|
|
1133
|
+
}
|
|
1134
|
+
const Route$k = createFileRoute("/api/skills")({
|
|
1135
|
+
server: {
|
|
1136
|
+
handlers: {
|
|
1137
|
+
GET: async ({ request }) => {
|
|
1138
|
+
try {
|
|
1139
|
+
const url = new URL(request.url);
|
|
1140
|
+
const action = url.searchParams.get("action") || "installed";
|
|
1141
|
+
if (action === "installed") {
|
|
1142
|
+
const output = runCmd("clawhub list");
|
|
1143
|
+
return json({ ok: true, skills: parseInstalledSkills(output) });
|
|
1144
|
+
}
|
|
1145
|
+
if (action === "explore") {
|
|
1146
|
+
const sort = url.searchParams.get("sort") || "trending";
|
|
1147
|
+
const limit = url.searchParams.get("limit") || "25";
|
|
1148
|
+
const safeSort = sort.replace(/[^a-z-]/gi, "");
|
|
1149
|
+
const safeLimit = String(parseInt(limit, 10) || 25);
|
|
1150
|
+
const raw = runCmd(`clawhub explore --json --limit ${safeLimit} --sort ${safeSort}`);
|
|
1151
|
+
const output = raw.substring(raw.indexOf("{"));
|
|
1152
|
+
try {
|
|
1153
|
+
const data = JSON.parse(output);
|
|
1154
|
+
return json({ ok: true, skills: Array.isArray(data) ? data : data.items || data.skills || data.results || [] });
|
|
1155
|
+
} catch {
|
|
1156
|
+
return json({ ok: true, skills: [] });
|
|
1157
|
+
}
|
|
1158
|
+
}
|
|
1159
|
+
if (action === "search") {
|
|
1160
|
+
const q = url.searchParams.get("q") || "";
|
|
1161
|
+
const limit = url.searchParams.get("limit") || "10";
|
|
1162
|
+
if (!q.trim()) return json({ ok: true, skills: [] });
|
|
1163
|
+
const safeLimit = String(parseInt(limit, 10) || 10);
|
|
1164
|
+
const safeQ = q.replace(/"/g, '\\"');
|
|
1165
|
+
const raw = runCmd(`clawhub search "${safeQ}" --limit ${safeLimit}`);
|
|
1166
|
+
const output = raw.replace(/^- Searching\n?/, "");
|
|
1167
|
+
return json({ ok: true, skills: parseSearchResults(output) });
|
|
1168
|
+
}
|
|
1169
|
+
if (action === "my-skills" || action === "recommended") {
|
|
1170
|
+
const targetSlugs = action === "my-skills" ? loadMySkillsSlugs() : RECOMMENDED_SKILLS;
|
|
1171
|
+
if (targetSlugs.length === 0) {
|
|
1172
|
+
return json({ ok: true, skills: [] });
|
|
1173
|
+
}
|
|
1174
|
+
const slugSet = new Set(targetSlugs);
|
|
1175
|
+
const found = /* @__PURE__ */ new Map();
|
|
1176
|
+
for (const sort of ["downloads", "installs", "newest", "trending"]) {
|
|
1177
|
+
if (found.size >= slugSet.size) break;
|
|
1178
|
+
try {
|
|
1179
|
+
const raw = runCmd(`clawhub explore --json --limit 200 --sort ${sort}`);
|
|
1180
|
+
const output = raw.substring(raw.indexOf("{"));
|
|
1181
|
+
const data = JSON.parse(output);
|
|
1182
|
+
const items = Array.isArray(data) ? data : data.items || [];
|
|
1183
|
+
for (const item of items) {
|
|
1184
|
+
if (item.slug && slugSet.has(item.slug) && !found.has(item.slug)) {
|
|
1185
|
+
found.set(item.slug, item);
|
|
1186
|
+
}
|
|
1187
|
+
}
|
|
1188
|
+
} catch {
|
|
1189
|
+
}
|
|
1190
|
+
}
|
|
1191
|
+
const skills = Array.from(found.values());
|
|
1192
|
+
skills.sort((a, b) => (b.stats?.downloads || 0) - (a.stats?.downloads || 0));
|
|
1193
|
+
return json({ ok: true, skills });
|
|
1194
|
+
}
|
|
1195
|
+
return json({ ok: false, error: "Unknown action" }, { status: 400 });
|
|
1196
|
+
} catch (err) {
|
|
1197
|
+
return json(
|
|
1198
|
+
{ ok: false, error: err instanceof Error ? err.message : String(err) },
|
|
1199
|
+
{ status: 500 }
|
|
1200
|
+
);
|
|
1201
|
+
}
|
|
1202
|
+
},
|
|
1203
|
+
POST: async ({ request }) => {
|
|
1204
|
+
try {
|
|
1205
|
+
const body = await request.json().catch(() => ({}));
|
|
1206
|
+
const action = typeof body.action === "string" ? body.action : "";
|
|
1207
|
+
const slug = typeof body.slug === "string" ? body.slug.trim() : "";
|
|
1208
|
+
if (!slug) return json({ ok: false, error: "slug is required" }, { status: 400 });
|
|
1209
|
+
const safeSlug = slug.replace(/[^a-zA-Z0-9/_-]/g, "");
|
|
1210
|
+
if (action === "install") {
|
|
1211
|
+
const output = runCmd(`clawhub install ${safeSlug} --no-input`);
|
|
1212
|
+
return json({ ok: true, output });
|
|
1213
|
+
}
|
|
1214
|
+
if (action === "update") {
|
|
1215
|
+
const output = runCmd(`clawhub update ${safeSlug} --no-input`);
|
|
1216
|
+
return json({ ok: true, output });
|
|
1217
|
+
}
|
|
1218
|
+
return json({ ok: false, error: "Unknown action" }, { status: 400 });
|
|
1219
|
+
} catch (err) {
|
|
1220
|
+
return json(
|
|
1221
|
+
{ ok: false, error: err instanceof Error ? err.message : String(err) },
|
|
1222
|
+
{ status: 500 }
|
|
1223
|
+
);
|
|
1224
|
+
}
|
|
1225
|
+
}
|
|
1226
|
+
}
|
|
1227
|
+
}
|
|
1228
|
+
});
|
|
945
1229
|
function deriveFriendlyIdFromKey(key) {
|
|
946
1230
|
if (typeof key !== "string" || key.trim().length === 0) return "main";
|
|
947
1231
|
const parts = key.split(":");
|
|
@@ -966,7 +1250,7 @@ function normalizeSessions(payload) {
|
|
|
966
1250
|
});
|
|
967
1251
|
return { sessions: normalized };
|
|
968
1252
|
}
|
|
969
|
-
const Route$
|
|
1253
|
+
const Route$j = createFileRoute("/api/sessions")({
|
|
970
1254
|
server: {
|
|
971
1255
|
handlers: {
|
|
972
1256
|
GET: async () => {
|
|
@@ -1119,7 +1403,7 @@ const Route$i = createFileRoute("/api/sessions")({
|
|
|
1119
1403
|
}
|
|
1120
1404
|
}
|
|
1121
1405
|
});
|
|
1122
|
-
const Route$
|
|
1406
|
+
const Route$i = createFileRoute("/api/send")({
|
|
1123
1407
|
server: {
|
|
1124
1408
|
handlers: {
|
|
1125
1409
|
POST: async ({ request }) => {
|
|
@@ -1185,7 +1469,7 @@ const Route$h = createFileRoute("/api/send")({
|
|
|
1185
1469
|
}
|
|
1186
1470
|
}
|
|
1187
1471
|
});
|
|
1188
|
-
const Route$
|
|
1472
|
+
const Route$h = createFileRoute("/api/ping")({
|
|
1189
1473
|
server: {
|
|
1190
1474
|
handlers: {
|
|
1191
1475
|
GET: async () => {
|
|
@@ -1209,7 +1493,7 @@ const categories = { "core": [{ "id": "cami", "name": "Cami", "emoji": "🦎", "
|
|
|
1209
1493
|
const personasData = {
|
|
1210
1494
|
categories
|
|
1211
1495
|
};
|
|
1212
|
-
const Route$
|
|
1496
|
+
const Route$g = createFileRoute("/api/personas")({
|
|
1213
1497
|
server: {
|
|
1214
1498
|
handlers: {
|
|
1215
1499
|
GET: async () => {
|
|
@@ -1254,7 +1538,7 @@ function resolveSessionsDir() {
|
|
|
1254
1538
|
)
|
|
1255
1539
|
};
|
|
1256
1540
|
}
|
|
1257
|
-
const Route$
|
|
1541
|
+
const Route$f = createFileRoute("/api/paths")({
|
|
1258
1542
|
server: {
|
|
1259
1543
|
handlers: {
|
|
1260
1544
|
GET: () => {
|
|
@@ -1279,7 +1563,7 @@ function parseModelName(modelId) {
|
|
|
1279
1563
|
return word.charAt(0).toUpperCase() + word.slice(1);
|
|
1280
1564
|
}).join(" ");
|
|
1281
1565
|
}
|
|
1282
|
-
const Route$
|
|
1566
|
+
const Route$e = createFileRoute("/api/models")({
|
|
1283
1567
|
server: {
|
|
1284
1568
|
handlers: {
|
|
1285
1569
|
GET: async () => {
|
|
@@ -1485,7 +1769,7 @@ function generateHeuristicTitle(message) {
|
|
|
1485
1769
|
}
|
|
1486
1770
|
return title || message.slice(0, 50);
|
|
1487
1771
|
}
|
|
1488
|
-
const Route$
|
|
1772
|
+
const Route$d = createFileRoute("/api/llm-features")({
|
|
1489
1773
|
server: {
|
|
1490
1774
|
handlers: {
|
|
1491
1775
|
/**
|
|
@@ -1637,7 +1921,7 @@ const Route$c = createFileRoute("/api/llm-features")({
|
|
|
1637
1921
|
}
|
|
1638
1922
|
}
|
|
1639
1923
|
});
|
|
1640
|
-
const Route$
|
|
1924
|
+
const Route$c = createFileRoute("/api/history")({
|
|
1641
1925
|
server: {
|
|
1642
1926
|
handlers: {
|
|
1643
1927
|
GET: async ({ request }) => {
|
|
@@ -1700,7 +1984,7 @@ function parseFollowUps(text) {
|
|
|
1700
1984
|
const lines = text.split("\n").map((line) => line.trim()).filter((line) => line.length > 0).map((line) => line.replace(/^\d+[.)\s]+/, "").trim()).map((line) => line.replace(/^[-•*]\s*/, "").trim()).map((line) => line.replace(/^["']|["']$/g, "").trim()).filter((line) => line.length > 0 && line.length < 150);
|
|
1701
1985
|
return lines.slice(0, 3);
|
|
1702
1986
|
}
|
|
1703
|
-
const Route$
|
|
1987
|
+
const Route$b = createFileRoute("/api/follow-ups")({
|
|
1704
1988
|
server: {
|
|
1705
1989
|
handlers: {
|
|
1706
1990
|
POST: async ({ request }) => {
|
|
@@ -1741,6 +2025,135 @@ ${truncatedResponse}`;
|
|
|
1741
2025
|
}
|
|
1742
2026
|
}
|
|
1743
2027
|
});
|
|
2028
|
+
function asRecord(value) {
|
|
2029
|
+
return typeof value === "object" && value !== null ? value : {};
|
|
2030
|
+
}
|
|
2031
|
+
function toCronJob(value) {
|
|
2032
|
+
const raw = asRecord(value);
|
|
2033
|
+
const id = typeof raw.id === "string" ? raw.id : "";
|
|
2034
|
+
if (!id) return null;
|
|
2035
|
+
const scheduleRaw = asRecord(raw.schedule);
|
|
2036
|
+
const kind = scheduleRaw.kind;
|
|
2037
|
+
const schedule = {
|
|
2038
|
+
kind: kind === "cron" || kind === "at" || kind === "every" ? kind : "cron",
|
|
2039
|
+
expr: typeof scheduleRaw.expr === "string" ? scheduleRaw.expr : void 0,
|
|
2040
|
+
tz: typeof scheduleRaw.tz === "string" ? scheduleRaw.tz : void 0
|
|
2041
|
+
};
|
|
2042
|
+
const stateRaw = asRecord(raw.state);
|
|
2043
|
+
const status = stateRaw.lastStatus;
|
|
2044
|
+
return {
|
|
2045
|
+
id,
|
|
2046
|
+
name: typeof raw.name === "string" ? raw.name : void 0,
|
|
2047
|
+
enabled: typeof raw.enabled === "boolean" ? raw.enabled : true,
|
|
2048
|
+
schedule,
|
|
2049
|
+
payload: asRecord(raw.payload),
|
|
2050
|
+
delivery: asRecord(raw.delivery),
|
|
2051
|
+
state: {
|
|
2052
|
+
nextRunAtMs: typeof stateRaw.nextRunAtMs === "number" ? stateRaw.nextRunAtMs : void 0,
|
|
2053
|
+
lastRunAtMs: typeof stateRaw.lastRunAtMs === "number" ? stateRaw.lastRunAtMs : void 0,
|
|
2054
|
+
lastStatus: status === "ok" || status === "error" ? status : void 0,
|
|
2055
|
+
lastDurationMs: typeof stateRaw.lastDurationMs === "number" ? stateRaw.lastDurationMs : void 0,
|
|
2056
|
+
lastError: typeof stateRaw.lastError === "string" ? stateRaw.lastError : void 0,
|
|
2057
|
+
consecutiveErrors: typeof stateRaw.consecutiveErrors === "number" ? stateRaw.consecutiveErrors : void 0
|
|
2058
|
+
}
|
|
2059
|
+
};
|
|
2060
|
+
}
|
|
2061
|
+
function toCronRun(value) {
|
|
2062
|
+
const raw = asRecord(value);
|
|
2063
|
+
const id = typeof raw.id === "string" ? raw.id : "";
|
|
2064
|
+
const jobId = typeof raw.jobId === "string" ? raw.jobId : "";
|
|
2065
|
+
const status = raw.status;
|
|
2066
|
+
if (!id || !jobId || status !== "ok" && status !== "error") return null;
|
|
2067
|
+
return {
|
|
2068
|
+
id,
|
|
2069
|
+
jobId,
|
|
2070
|
+
status,
|
|
2071
|
+
durationMs: typeof raw.durationMs === "number" ? raw.durationMs : void 0,
|
|
2072
|
+
error: typeof raw.error === "string" ? raw.error : void 0,
|
|
2073
|
+
ranAt: typeof raw.ranAt === "string" ? raw.ranAt : void 0
|
|
2074
|
+
};
|
|
2075
|
+
}
|
|
2076
|
+
function normalizeJobs(payload) {
|
|
2077
|
+
const raw = asRecord(payload);
|
|
2078
|
+
const source = Array.isArray(raw.jobs) ? raw.jobs : Array.isArray(payload) ? payload : [];
|
|
2079
|
+
return source.map(toCronJob).filter((job) => !!job);
|
|
2080
|
+
}
|
|
2081
|
+
function normalizeRuns(payload) {
|
|
2082
|
+
const raw = asRecord(payload);
|
|
2083
|
+
const source = Array.isArray(raw.runs) ? raw.runs : Array.isArray(payload) ? payload : [];
|
|
2084
|
+
return source.map(toCronRun).filter((run) => !!run);
|
|
2085
|
+
}
|
|
2086
|
+
function parseJobId(value) {
|
|
2087
|
+
if (typeof value !== "string") return null;
|
|
2088
|
+
const trimmed = value.trim();
|
|
2089
|
+
if (!trimmed || trimmed.length > 200) return null;
|
|
2090
|
+
return trimmed;
|
|
2091
|
+
}
|
|
2092
|
+
function parsePatch(value) {
|
|
2093
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return null;
|
|
2094
|
+
const patch = value;
|
|
2095
|
+
if (Object.keys(patch).length === 0) return null;
|
|
2096
|
+
return patch;
|
|
2097
|
+
}
|
|
2098
|
+
const Route$a = createFileRoute("/api/cron")({
|
|
2099
|
+
server: {
|
|
2100
|
+
handlers: {
|
|
2101
|
+
GET: async ({ request }) => {
|
|
2102
|
+
try {
|
|
2103
|
+
const url = new URL(request.url);
|
|
2104
|
+
const jobId = parseJobId(url.searchParams.get("jobId"));
|
|
2105
|
+
if (jobId) {
|
|
2106
|
+
const payload2 = await gatewayRpc("cron.runs", { jobId });
|
|
2107
|
+
return json({ runs: normalizeRuns(payload2) });
|
|
2108
|
+
}
|
|
2109
|
+
const payload = await gatewayRpc("cron.list", { includeDisabled: true });
|
|
2110
|
+
return json({ jobs: normalizeJobs(payload) });
|
|
2111
|
+
} catch (err) {
|
|
2112
|
+
return json(
|
|
2113
|
+
{ error: err instanceof Error ? err.message : String(err) },
|
|
2114
|
+
{ status: 500 }
|
|
2115
|
+
);
|
|
2116
|
+
}
|
|
2117
|
+
},
|
|
2118
|
+
POST: async ({ request }) => {
|
|
2119
|
+
try {
|
|
2120
|
+
const body = await request.json().catch(() => ({}));
|
|
2121
|
+
const jobId = parseJobId(body.jobId);
|
|
2122
|
+
if (!jobId) {
|
|
2123
|
+
return json({ ok: false, error: "jobId is required" }, { status: 400 });
|
|
2124
|
+
}
|
|
2125
|
+
const payload = await gatewayRpc("cron.run", { jobId });
|
|
2126
|
+
return json({ ok: true, ...asRecord(payload) });
|
|
2127
|
+
} catch (err) {
|
|
2128
|
+
return json(
|
|
2129
|
+
{ ok: false, error: err instanceof Error ? err.message : String(err) },
|
|
2130
|
+
{ status: 500 }
|
|
2131
|
+
);
|
|
2132
|
+
}
|
|
2133
|
+
},
|
|
2134
|
+
PATCH: async ({ request }) => {
|
|
2135
|
+
try {
|
|
2136
|
+
const body = await request.json().catch(() => ({}));
|
|
2137
|
+
const jobId = parseJobId(body.jobId);
|
|
2138
|
+
const patch = parsePatch(body.patch);
|
|
2139
|
+
if (!jobId) {
|
|
2140
|
+
return json({ ok: false, error: "jobId is required" }, { status: 400 });
|
|
2141
|
+
}
|
|
2142
|
+
if (!patch) {
|
|
2143
|
+
return json({ ok: false, error: "patch is required" }, { status: 400 });
|
|
2144
|
+
}
|
|
2145
|
+
const payload = await gatewayRpc("cron.update", { jobId, patch });
|
|
2146
|
+
return json({ ok: true, ...asRecord(payload) });
|
|
2147
|
+
} catch (err) {
|
|
2148
|
+
return json(
|
|
2149
|
+
{ ok: false, error: err instanceof Error ? err.message : String(err) },
|
|
2150
|
+
{ status: 500 }
|
|
2151
|
+
);
|
|
2152
|
+
}
|
|
2153
|
+
}
|
|
2154
|
+
}
|
|
2155
|
+
}
|
|
2156
|
+
});
|
|
1744
2157
|
async function readConfigAgents() {
|
|
1745
2158
|
try {
|
|
1746
2159
|
const raw = await readFile(
|
|
@@ -2860,153 +3273,176 @@ const Route = createFileRoute("/api/files/delete")({
|
|
|
2860
3273
|
}
|
|
2861
3274
|
}
|
|
2862
3275
|
});
|
|
2863
|
-
const
|
|
3276
|
+
const SkillsRoute = Route$v.update({
|
|
3277
|
+
id: "/skills",
|
|
3278
|
+
path: "/skills",
|
|
3279
|
+
getParentRoute: () => Route$w
|
|
3280
|
+
});
|
|
3281
|
+
const NewRoute = Route$u.update({
|
|
2864
3282
|
id: "/new",
|
|
2865
3283
|
path: "/new",
|
|
2866
|
-
getParentRoute: () => Route$
|
|
3284
|
+
getParentRoute: () => Route$w
|
|
2867
3285
|
});
|
|
2868
|
-
const FilesRoute = Route$
|
|
3286
|
+
const FilesRoute = Route$t.update({
|
|
2869
3287
|
id: "/files",
|
|
2870
3288
|
path: "/files",
|
|
2871
|
-
getParentRoute: () => Route$
|
|
3289
|
+
getParentRoute: () => Route$w
|
|
2872
3290
|
});
|
|
2873
|
-
const ConnectRoute = Route$
|
|
3291
|
+
const ConnectRoute = Route$s.update({
|
|
2874
3292
|
id: "/connect",
|
|
2875
3293
|
path: "/connect",
|
|
2876
|
-
getParentRoute: () => Route$
|
|
3294
|
+
getParentRoute: () => Route$w
|
|
3295
|
+
});
|
|
3296
|
+
const BotsRoute = Route$r.update({
|
|
3297
|
+
id: "/bots",
|
|
3298
|
+
path: "/bots",
|
|
3299
|
+
getParentRoute: () => Route$w
|
|
2877
3300
|
});
|
|
2878
|
-
const AgentsRoute = Route$
|
|
3301
|
+
const AgentsRoute = Route$q.update({
|
|
2879
3302
|
id: "/agents",
|
|
2880
3303
|
path: "/agents",
|
|
2881
|
-
getParentRoute: () => Route$
|
|
3304
|
+
getParentRoute: () => Route$w
|
|
2882
3305
|
});
|
|
2883
|
-
const IndexRoute = Route$
|
|
3306
|
+
const IndexRoute = Route$p.update({
|
|
2884
3307
|
id: "/",
|
|
2885
3308
|
path: "/",
|
|
2886
|
-
getParentRoute: () => Route$
|
|
3309
|
+
getParentRoute: () => Route$w
|
|
2887
3310
|
});
|
|
2888
|
-
const ChatSessionKeyRoute = Route$
|
|
3311
|
+
const ChatSessionKeyRoute = Route$o.update({
|
|
2889
3312
|
id: "/chat/$sessionKey",
|
|
2890
3313
|
path: "/chat/$sessionKey",
|
|
2891
|
-
getParentRoute: () => Route$
|
|
3314
|
+
getParentRoute: () => Route$w
|
|
2892
3315
|
});
|
|
2893
|
-
const ApiTtsRoute = Route$
|
|
3316
|
+
const ApiTtsRoute = Route$n.update({
|
|
2894
3317
|
id: "/api/tts",
|
|
2895
3318
|
path: "/api/tts",
|
|
2896
|
-
getParentRoute: () => Route$
|
|
3319
|
+
getParentRoute: () => Route$w
|
|
2897
3320
|
});
|
|
2898
|
-
const ApiSttRoute = Route$
|
|
3321
|
+
const ApiSttRoute = Route$m.update({
|
|
2899
3322
|
id: "/api/stt",
|
|
2900
3323
|
path: "/api/stt",
|
|
2901
|
-
getParentRoute: () => Route$
|
|
3324
|
+
getParentRoute: () => Route$w
|
|
2902
3325
|
});
|
|
2903
|
-
const ApiStreamRoute = Route$
|
|
3326
|
+
const ApiStreamRoute = Route$l.update({
|
|
2904
3327
|
id: "/api/stream",
|
|
2905
3328
|
path: "/api/stream",
|
|
2906
|
-
getParentRoute: () => Route$
|
|
3329
|
+
getParentRoute: () => Route$w
|
|
2907
3330
|
});
|
|
2908
|
-
const
|
|
3331
|
+
const ApiSkillsRoute = Route$k.update({
|
|
3332
|
+
id: "/api/skills",
|
|
3333
|
+
path: "/api/skills",
|
|
3334
|
+
getParentRoute: () => Route$w
|
|
3335
|
+
});
|
|
3336
|
+
const ApiSessionsRoute = Route$j.update({
|
|
2909
3337
|
id: "/api/sessions",
|
|
2910
3338
|
path: "/api/sessions",
|
|
2911
|
-
getParentRoute: () => Route$
|
|
3339
|
+
getParentRoute: () => Route$w
|
|
2912
3340
|
});
|
|
2913
|
-
const ApiSendRoute = Route$
|
|
3341
|
+
const ApiSendRoute = Route$i.update({
|
|
2914
3342
|
id: "/api/send",
|
|
2915
3343
|
path: "/api/send",
|
|
2916
|
-
getParentRoute: () => Route$
|
|
3344
|
+
getParentRoute: () => Route$w
|
|
2917
3345
|
});
|
|
2918
|
-
const ApiPingRoute = Route$
|
|
3346
|
+
const ApiPingRoute = Route$h.update({
|
|
2919
3347
|
id: "/api/ping",
|
|
2920
3348
|
path: "/api/ping",
|
|
2921
|
-
getParentRoute: () => Route$
|
|
3349
|
+
getParentRoute: () => Route$w
|
|
2922
3350
|
});
|
|
2923
|
-
const ApiPersonasRoute = Route$
|
|
3351
|
+
const ApiPersonasRoute = Route$g.update({
|
|
2924
3352
|
id: "/api/personas",
|
|
2925
3353
|
path: "/api/personas",
|
|
2926
|
-
getParentRoute: () => Route$
|
|
3354
|
+
getParentRoute: () => Route$w
|
|
2927
3355
|
});
|
|
2928
|
-
const ApiPathsRoute = Route$
|
|
3356
|
+
const ApiPathsRoute = Route$f.update({
|
|
2929
3357
|
id: "/api/paths",
|
|
2930
3358
|
path: "/api/paths",
|
|
2931
|
-
getParentRoute: () => Route$
|
|
3359
|
+
getParentRoute: () => Route$w
|
|
2932
3360
|
});
|
|
2933
|
-
const ApiModelsRoute = Route$
|
|
3361
|
+
const ApiModelsRoute = Route$e.update({
|
|
2934
3362
|
id: "/api/models",
|
|
2935
3363
|
path: "/api/models",
|
|
2936
|
-
getParentRoute: () => Route$
|
|
3364
|
+
getParentRoute: () => Route$w
|
|
2937
3365
|
});
|
|
2938
|
-
const ApiLlmFeaturesRoute = Route$
|
|
3366
|
+
const ApiLlmFeaturesRoute = Route$d.update({
|
|
2939
3367
|
id: "/api/llm-features",
|
|
2940
3368
|
path: "/api/llm-features",
|
|
2941
|
-
getParentRoute: () => Route$
|
|
3369
|
+
getParentRoute: () => Route$w
|
|
2942
3370
|
});
|
|
2943
|
-
const ApiHistoryRoute = Route$
|
|
3371
|
+
const ApiHistoryRoute = Route$c.update({
|
|
2944
3372
|
id: "/api/history",
|
|
2945
3373
|
path: "/api/history",
|
|
2946
|
-
getParentRoute: () => Route$
|
|
3374
|
+
getParentRoute: () => Route$w
|
|
2947
3375
|
});
|
|
2948
|
-
const ApiFollowUpsRoute = Route$
|
|
3376
|
+
const ApiFollowUpsRoute = Route$b.update({
|
|
2949
3377
|
id: "/api/follow-ups",
|
|
2950
3378
|
path: "/api/follow-ups",
|
|
2951
|
-
getParentRoute: () => Route$
|
|
3379
|
+
getParentRoute: () => Route$w
|
|
3380
|
+
});
|
|
3381
|
+
const ApiCronRoute = Route$a.update({
|
|
3382
|
+
id: "/api/cron",
|
|
3383
|
+
path: "/api/cron",
|
|
3384
|
+
getParentRoute: () => Route$w
|
|
2952
3385
|
});
|
|
2953
3386
|
const ApiAgentsRoute = Route$9.update({
|
|
2954
3387
|
id: "/api/agents",
|
|
2955
3388
|
path: "/api/agents",
|
|
2956
|
-
getParentRoute: () => Route$
|
|
3389
|
+
getParentRoute: () => Route$w
|
|
2957
3390
|
});
|
|
2958
3391
|
const ApiFilesUploadRoute = Route$8.update({
|
|
2959
3392
|
id: "/api/files/upload",
|
|
2960
3393
|
path: "/api/files/upload",
|
|
2961
|
-
getParentRoute: () => Route$
|
|
3394
|
+
getParentRoute: () => Route$w
|
|
2962
3395
|
});
|
|
2963
3396
|
const ApiFilesSaveRoute = Route$7.update({
|
|
2964
3397
|
id: "/api/files/save",
|
|
2965
3398
|
path: "/api/files/save",
|
|
2966
|
-
getParentRoute: () => Route$
|
|
3399
|
+
getParentRoute: () => Route$w
|
|
2967
3400
|
});
|
|
2968
3401
|
const ApiFilesRenameRoute = Route$6.update({
|
|
2969
3402
|
id: "/api/files/rename",
|
|
2970
3403
|
path: "/api/files/rename",
|
|
2971
|
-
getParentRoute: () => Route$
|
|
3404
|
+
getParentRoute: () => Route$w
|
|
2972
3405
|
});
|
|
2973
3406
|
const ApiFilesReadRoute = Route$5.update({
|
|
2974
3407
|
id: "/api/files/read",
|
|
2975
3408
|
path: "/api/files/read",
|
|
2976
|
-
getParentRoute: () => Route$
|
|
3409
|
+
getParentRoute: () => Route$w
|
|
2977
3410
|
});
|
|
2978
3411
|
const ApiFilesMkdirRoute = Route$4.update({
|
|
2979
3412
|
id: "/api/files/mkdir",
|
|
2980
3413
|
path: "/api/files/mkdir",
|
|
2981
|
-
getParentRoute: () => Route$
|
|
3414
|
+
getParentRoute: () => Route$w
|
|
2982
3415
|
});
|
|
2983
3416
|
const ApiFilesListRoute = Route$3.update({
|
|
2984
3417
|
id: "/api/files/list",
|
|
2985
3418
|
path: "/api/files/list",
|
|
2986
|
-
getParentRoute: () => Route$
|
|
3419
|
+
getParentRoute: () => Route$w
|
|
2987
3420
|
});
|
|
2988
3421
|
const ApiFilesInfoRoute = Route$2.update({
|
|
2989
3422
|
id: "/api/files/info",
|
|
2990
3423
|
path: "/api/files/info",
|
|
2991
|
-
getParentRoute: () => Route$
|
|
3424
|
+
getParentRoute: () => Route$w
|
|
2992
3425
|
});
|
|
2993
3426
|
const ApiFilesDownloadRoute = Route$1.update({
|
|
2994
3427
|
id: "/api/files/download",
|
|
2995
3428
|
path: "/api/files/download",
|
|
2996
|
-
getParentRoute: () => Route$
|
|
3429
|
+
getParentRoute: () => Route$w
|
|
2997
3430
|
});
|
|
2998
3431
|
const ApiFilesDeleteRoute = Route.update({
|
|
2999
3432
|
id: "/api/files/delete",
|
|
3000
3433
|
path: "/api/files/delete",
|
|
3001
|
-
getParentRoute: () => Route$
|
|
3434
|
+
getParentRoute: () => Route$w
|
|
3002
3435
|
});
|
|
3003
3436
|
const rootRouteChildren = {
|
|
3004
3437
|
IndexRoute,
|
|
3005
3438
|
AgentsRoute,
|
|
3439
|
+
BotsRoute,
|
|
3006
3440
|
ConnectRoute,
|
|
3007
3441
|
FilesRoute,
|
|
3008
3442
|
NewRoute,
|
|
3443
|
+
SkillsRoute,
|
|
3009
3444
|
ApiAgentsRoute,
|
|
3445
|
+
ApiCronRoute,
|
|
3010
3446
|
ApiFollowUpsRoute,
|
|
3011
3447
|
ApiHistoryRoute,
|
|
3012
3448
|
ApiLlmFeaturesRoute,
|
|
@@ -3016,6 +3452,7 @@ const rootRouteChildren = {
|
|
|
3016
3452
|
ApiPingRoute,
|
|
3017
3453
|
ApiSendRoute,
|
|
3018
3454
|
ApiSessionsRoute,
|
|
3455
|
+
ApiSkillsRoute,
|
|
3019
3456
|
ApiStreamRoute,
|
|
3020
3457
|
ApiSttRoute,
|
|
3021
3458
|
ApiTtsRoute,
|
|
@@ -3030,7 +3467,7 @@ const rootRouteChildren = {
|
|
|
3030
3467
|
ApiFilesSaveRoute,
|
|
3031
3468
|
ApiFilesUploadRoute
|
|
3032
3469
|
};
|
|
3033
|
-
const routeTree = Route$
|
|
3470
|
+
const routeTree = Route$w._addFileChildren(rootRouteChildren)._addFileTypes();
|
|
3034
3471
|
const getRouter = () => {
|
|
3035
3472
|
const router2 = createRouter({
|
|
3036
3473
|
routeTree,
|
|
@@ -3045,7 +3482,7 @@ const router = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
|
|
|
3045
3482
|
getRouter
|
|
3046
3483
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
3047
3484
|
export {
|
|
3048
|
-
Route$
|
|
3049
|
-
Route$
|
|
3485
|
+
Route$p as R,
|
|
3486
|
+
Route$o as a,
|
|
3050
3487
|
router as r
|
|
3051
3488
|
};
|