opencami 1.3.2 → 1.4.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/dist/client/assets/_sessionKey-DB95zj1L.js +97 -0
- package/dist/client/assets/agents-LFrWe-HX.js +2 -0
- package/dist/client/assets/agents-screen-CEBBk1yO.js +1 -0
- package/dist/client/assets/bots-CxDwf_WK.js +2 -0
- package/dist/client/assets/bots-screen-D6qma1wK.js +1 -0
- package/dist/client/assets/button-Il3CHIzX.js +1 -0
- package/dist/client/assets/{connect-CtDn993i.js → connect-D3baVDFL.js} +1 -1
- package/dist/client/assets/file-explorer-screen-rtV6n-5_.js +1 -0
- package/dist/client/assets/files-DMemuq9D.js +2 -0
- package/dist/client/assets/{index-N9-2R5hZ.js → index-ByIsZcHh.js} +1 -1
- package/dist/client/assets/index-CVV4XiZo.js +153 -0
- package/dist/client/assets/keyboard-shortcuts-dialog-DXC0YHoy.js +1 -0
- package/dist/client/assets/{main-DrVY5UJU.js → main-CkIF0soY.js} +9 -9
- package/dist/client/assets/opencami-logo-CIxSO1oo.js +1 -0
- package/dist/client/assets/{react-CzqI3gbN.js → react-BhVdgA5r.js} +1 -1
- package/dist/client/assets/search-dialog-I1jJplIh.js +1 -0
- package/dist/client/assets/session-export-dialog-CH5unryw.js +1 -0
- package/dist/client/assets/settings-dialog-B8v-GVJ8.js +1 -0
- package/dist/client/assets/styles-BaTVzdPa.css +1 -0
- package/dist/client/assets/switch-sQnv1YsK.js +1 -0
- package/dist/client/assets/tooltip-j_viC_EE.js +1 -0
- package/dist/client/assets/use-file-explorer-state-BUH-u7Jv.js +12 -0
- package/dist/client/assets/useButton-9VAzplAB.js +9 -0
- package/dist/client/assets/useControlled-Y306krcC.js +1 -0
- package/dist/client/assets/useMutation-0WgW4xQJ.js +1 -0
- package/dist/server/assets/{_sessionKey-DVNrEYFh.js → _sessionKey-BhFH4uWY.js} +325 -56
- package/dist/server/assets/_tanstack-start-manifest_v-BaIrL1VQ.js +4 -0
- package/dist/server/assets/bots-6ryCIgKh.js +11 -0
- package/dist/server/assets/bots-screen-DS_ZF9Ec.js +417 -0
- package/dist/server/assets/{connect-CIDOw12K.js → connect-B8jpGQGK.js} +1 -1
- package/dist/server/assets/{file-explorer-screen-Cx0jiLRU.js → file-explorer-screen-DCfS_Ajx.js} +4 -5
- package/dist/server/assets/{files-Trs1M5ba.js → files-D2GIrPF4.js} +1 -1
- package/dist/server/assets/{index-Dv2RXDa2.js → index-B2JHn34C.js} +1 -1
- package/dist/server/assets/{index-CmbNTqa2.js → index-BNSsDaLb.js} +71 -35
- package/dist/server/assets/{keyboard-shortcuts-dialog-7OEtXUlW.js → keyboard-shortcuts-dialog-CqIm8aYF.js} +1 -1
- package/dist/server/assets/{router-OoQe2c20.js → router-Dme7USeO.js} +219 -74
- package/dist/server/assets/{search-dialog-Bq0Pnxdb.js → search-dialog-DG0D9KRN.js} +4 -4
- package/dist/server/assets/{session-export-dialog-DRVbC8Q-.js → session-export-dialog-DLPZVlQV.js} +1 -1
- package/dist/server/assets/{settings-dialog-BsJsnMiu.js → settings-dialog-BaGT4e5l.js} +27 -4
- package/dist/server/assets/{use-file-explorer-state-DMHdtb7D.js → use-file-explorer-state-DfAKF2gZ.js} +12 -0
- package/dist/server/server.js +2 -2
- package/package.json +1 -1
- 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
|
@@ -9,7 +9,7 @@ import os, { homedir } from "node:os";
|
|
|
9
9
|
import { json } from "@tanstack/router-core/ssr/client";
|
|
10
10
|
import { readFile, mkdir, writeFile, rename, stat, readdir, rm, realpath, lstat } from "node:fs/promises";
|
|
11
11
|
import { posix } from "path";
|
|
12
|
-
const appCss = "/assets/styles-
|
|
12
|
+
const appCss = "/assets/styles-BaTVzdPa.css";
|
|
13
13
|
const swRegisterScript = `
|
|
14
14
|
(() => {
|
|
15
15
|
// Skip PWA service worker inside Capacitor native shell — they conflict
|
|
@@ -82,7 +82,7 @@ function NotFoundRedirect() {
|
|
|
82
82
|
}
|
|
83
83
|
return null;
|
|
84
84
|
}
|
|
85
|
-
const Route$
|
|
85
|
+
const Route$u = createRootRoute({
|
|
86
86
|
notFoundComponent: NotFoundRedirect,
|
|
87
87
|
head: () => ({
|
|
88
88
|
meta: [
|
|
@@ -183,8 +183,8 @@ function RootDocument({ children }) {
|
|
|
183
183
|
] })
|
|
184
184
|
] });
|
|
185
185
|
}
|
|
186
|
-
const $$splitComponentImporter$
|
|
187
|
-
const Route$
|
|
186
|
+
const $$splitComponentImporter$6 = () => import("./new-Dzk5YxE9.js");
|
|
187
|
+
const Route$t = createFileRoute("/new")({
|
|
188
188
|
beforeLoad: function redirectToNewChat() {
|
|
189
189
|
throw redirect({
|
|
190
190
|
to: "/chat/$sessionKey",
|
|
@@ -194,26 +194,30 @@ const Route$r = createFileRoute("/new")({
|
|
|
194
194
|
replace: true
|
|
195
195
|
});
|
|
196
196
|
},
|
|
197
|
+
component: lazyRouteComponent($$splitComponentImporter$6, "component")
|
|
198
|
+
});
|
|
199
|
+
const $$splitComponentImporter$5 = () => import("./files-D2GIrPF4.js");
|
|
200
|
+
const Route$s = createFileRoute("/files")({
|
|
197
201
|
component: lazyRouteComponent($$splitComponentImporter$5, "component")
|
|
198
202
|
});
|
|
199
|
-
const $$splitComponentImporter$4 = () => import("./
|
|
200
|
-
const Route$
|
|
203
|
+
const $$splitComponentImporter$4 = () => import("./connect-B8jpGQGK.js");
|
|
204
|
+
const Route$r = createFileRoute("/connect")({
|
|
201
205
|
component: lazyRouteComponent($$splitComponentImporter$4, "component")
|
|
202
206
|
});
|
|
203
|
-
const $$splitComponentImporter$3 = () => import("./
|
|
204
|
-
const Route$
|
|
207
|
+
const $$splitComponentImporter$3 = () => import("./bots-6ryCIgKh.js");
|
|
208
|
+
const Route$q = createFileRoute("/bots")({
|
|
205
209
|
component: lazyRouteComponent($$splitComponentImporter$3, "component")
|
|
206
210
|
});
|
|
207
211
|
const $$splitComponentImporter$2 = () => import("./agents-Dz_i76VW.js");
|
|
208
|
-
const Route$
|
|
212
|
+
const Route$p = createFileRoute("/agents")({
|
|
209
213
|
component: lazyRouteComponent($$splitComponentImporter$2, "component")
|
|
210
214
|
});
|
|
211
|
-
const $$splitComponentImporter$1 = () => import("./index-
|
|
212
|
-
const Route$
|
|
215
|
+
const $$splitComponentImporter$1 = () => import("./index-B2JHn34C.js");
|
|
216
|
+
const Route$o = createFileRoute("/")({
|
|
213
217
|
component: lazyRouteComponent($$splitComponentImporter$1, "component")
|
|
214
218
|
});
|
|
215
|
-
const $$splitComponentImporter = () => import("./_sessionKey-
|
|
216
|
-
const Route$
|
|
219
|
+
const $$splitComponentImporter = () => import("./_sessionKey-BhFH4uWY.js").then((n) => n.$);
|
|
220
|
+
const Route$n = createFileRoute("/chat/$sessionKey")({
|
|
217
221
|
component: lazyRouteComponent($$splitComponentImporter, "component")
|
|
218
222
|
});
|
|
219
223
|
function getGatewayConfig() {
|
|
@@ -580,7 +584,7 @@ async function ttsEdge(text, voice) {
|
|
|
580
584
|
}
|
|
581
585
|
});
|
|
582
586
|
}
|
|
583
|
-
const Route$
|
|
587
|
+
const Route$m = createFileRoute("/api/tts")({
|
|
584
588
|
server: {
|
|
585
589
|
handlers: {
|
|
586
590
|
POST: async ({ request }) => {
|
|
@@ -735,7 +739,7 @@ async function sttOpenAI(audioBlob, apiKey, language) {
|
|
|
735
739
|
const data = await res.json();
|
|
736
740
|
return { text: data.text || "" };
|
|
737
741
|
}
|
|
738
|
-
const Route$
|
|
742
|
+
const Route$l = createFileRoute("/api/stt")({
|
|
739
743
|
server: {
|
|
740
744
|
handlers: {
|
|
741
745
|
POST: async ({ request }) => {
|
|
@@ -837,7 +841,7 @@ const Route$k = createFileRoute("/api/stt")({
|
|
|
837
841
|
}
|
|
838
842
|
}
|
|
839
843
|
});
|
|
840
|
-
const Route$
|
|
844
|
+
const Route$k = createFileRoute("/api/stream")({
|
|
841
845
|
server: {
|
|
842
846
|
handlers: {
|
|
843
847
|
GET: async ({ request }) => {
|
|
@@ -966,7 +970,7 @@ function normalizeSessions(payload) {
|
|
|
966
970
|
});
|
|
967
971
|
return { sessions: normalized };
|
|
968
972
|
}
|
|
969
|
-
const Route$
|
|
973
|
+
const Route$j = createFileRoute("/api/sessions")({
|
|
970
974
|
server: {
|
|
971
975
|
handlers: {
|
|
972
976
|
GET: async () => {
|
|
@@ -1119,7 +1123,7 @@ const Route$i = createFileRoute("/api/sessions")({
|
|
|
1119
1123
|
}
|
|
1120
1124
|
}
|
|
1121
1125
|
});
|
|
1122
|
-
const Route$
|
|
1126
|
+
const Route$i = createFileRoute("/api/send")({
|
|
1123
1127
|
server: {
|
|
1124
1128
|
handlers: {
|
|
1125
1129
|
POST: async ({ request }) => {
|
|
@@ -1185,7 +1189,7 @@ const Route$h = createFileRoute("/api/send")({
|
|
|
1185
1189
|
}
|
|
1186
1190
|
}
|
|
1187
1191
|
});
|
|
1188
|
-
const Route$
|
|
1192
|
+
const Route$h = createFileRoute("/api/ping")({
|
|
1189
1193
|
server: {
|
|
1190
1194
|
handlers: {
|
|
1191
1195
|
GET: async () => {
|
|
@@ -1209,7 +1213,7 @@ const categories = { "core": [{ "id": "cami", "name": "Cami", "emoji": "🦎", "
|
|
|
1209
1213
|
const personasData = {
|
|
1210
1214
|
categories
|
|
1211
1215
|
};
|
|
1212
|
-
const Route$
|
|
1216
|
+
const Route$g = createFileRoute("/api/personas")({
|
|
1213
1217
|
server: {
|
|
1214
1218
|
handlers: {
|
|
1215
1219
|
GET: async () => {
|
|
@@ -1254,7 +1258,7 @@ function resolveSessionsDir() {
|
|
|
1254
1258
|
)
|
|
1255
1259
|
};
|
|
1256
1260
|
}
|
|
1257
|
-
const Route$
|
|
1261
|
+
const Route$f = createFileRoute("/api/paths")({
|
|
1258
1262
|
server: {
|
|
1259
1263
|
handlers: {
|
|
1260
1264
|
GET: () => {
|
|
@@ -1279,7 +1283,7 @@ function parseModelName(modelId) {
|
|
|
1279
1283
|
return word.charAt(0).toUpperCase() + word.slice(1);
|
|
1280
1284
|
}).join(" ");
|
|
1281
1285
|
}
|
|
1282
|
-
const Route$
|
|
1286
|
+
const Route$e = createFileRoute("/api/models")({
|
|
1283
1287
|
server: {
|
|
1284
1288
|
handlers: {
|
|
1285
1289
|
GET: async () => {
|
|
@@ -1485,7 +1489,7 @@ function generateHeuristicTitle(message) {
|
|
|
1485
1489
|
}
|
|
1486
1490
|
return title || message.slice(0, 50);
|
|
1487
1491
|
}
|
|
1488
|
-
const Route$
|
|
1492
|
+
const Route$d = createFileRoute("/api/llm-features")({
|
|
1489
1493
|
server: {
|
|
1490
1494
|
handlers: {
|
|
1491
1495
|
/**
|
|
@@ -1637,7 +1641,7 @@ const Route$c = createFileRoute("/api/llm-features")({
|
|
|
1637
1641
|
}
|
|
1638
1642
|
}
|
|
1639
1643
|
});
|
|
1640
|
-
const Route$
|
|
1644
|
+
const Route$c = createFileRoute("/api/history")({
|
|
1641
1645
|
server: {
|
|
1642
1646
|
handlers: {
|
|
1643
1647
|
GET: async ({ request }) => {
|
|
@@ -1700,7 +1704,7 @@ function parseFollowUps(text) {
|
|
|
1700
1704
|
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
1705
|
return lines.slice(0, 3);
|
|
1702
1706
|
}
|
|
1703
|
-
const Route$
|
|
1707
|
+
const Route$b = createFileRoute("/api/follow-ups")({
|
|
1704
1708
|
server: {
|
|
1705
1709
|
handlers: {
|
|
1706
1710
|
POST: async ({ request }) => {
|
|
@@ -1741,6 +1745,135 @@ ${truncatedResponse}`;
|
|
|
1741
1745
|
}
|
|
1742
1746
|
}
|
|
1743
1747
|
});
|
|
1748
|
+
function asRecord(value) {
|
|
1749
|
+
return typeof value === "object" && value !== null ? value : {};
|
|
1750
|
+
}
|
|
1751
|
+
function toCronJob(value) {
|
|
1752
|
+
const raw = asRecord(value);
|
|
1753
|
+
const id = typeof raw.id === "string" ? raw.id : "";
|
|
1754
|
+
if (!id) return null;
|
|
1755
|
+
const scheduleRaw = asRecord(raw.schedule);
|
|
1756
|
+
const kind = scheduleRaw.kind;
|
|
1757
|
+
const schedule = {
|
|
1758
|
+
kind: kind === "cron" || kind === "at" || kind === "every" ? kind : "cron",
|
|
1759
|
+
expr: typeof scheduleRaw.expr === "string" ? scheduleRaw.expr : void 0,
|
|
1760
|
+
tz: typeof scheduleRaw.tz === "string" ? scheduleRaw.tz : void 0
|
|
1761
|
+
};
|
|
1762
|
+
const stateRaw = asRecord(raw.state);
|
|
1763
|
+
const status = stateRaw.lastStatus;
|
|
1764
|
+
return {
|
|
1765
|
+
id,
|
|
1766
|
+
name: typeof raw.name === "string" ? raw.name : void 0,
|
|
1767
|
+
enabled: typeof raw.enabled === "boolean" ? raw.enabled : true,
|
|
1768
|
+
schedule,
|
|
1769
|
+
payload: asRecord(raw.payload),
|
|
1770
|
+
delivery: asRecord(raw.delivery),
|
|
1771
|
+
state: {
|
|
1772
|
+
nextRunAtMs: typeof stateRaw.nextRunAtMs === "number" ? stateRaw.nextRunAtMs : void 0,
|
|
1773
|
+
lastRunAtMs: typeof stateRaw.lastRunAtMs === "number" ? stateRaw.lastRunAtMs : void 0,
|
|
1774
|
+
lastStatus: status === "ok" || status === "error" ? status : void 0,
|
|
1775
|
+
lastDurationMs: typeof stateRaw.lastDurationMs === "number" ? stateRaw.lastDurationMs : void 0,
|
|
1776
|
+
lastError: typeof stateRaw.lastError === "string" ? stateRaw.lastError : void 0,
|
|
1777
|
+
consecutiveErrors: typeof stateRaw.consecutiveErrors === "number" ? stateRaw.consecutiveErrors : void 0
|
|
1778
|
+
}
|
|
1779
|
+
};
|
|
1780
|
+
}
|
|
1781
|
+
function toCronRun(value) {
|
|
1782
|
+
const raw = asRecord(value);
|
|
1783
|
+
const id = typeof raw.id === "string" ? raw.id : "";
|
|
1784
|
+
const jobId = typeof raw.jobId === "string" ? raw.jobId : "";
|
|
1785
|
+
const status = raw.status;
|
|
1786
|
+
if (!id || !jobId || status !== "ok" && status !== "error") return null;
|
|
1787
|
+
return {
|
|
1788
|
+
id,
|
|
1789
|
+
jobId,
|
|
1790
|
+
status,
|
|
1791
|
+
durationMs: typeof raw.durationMs === "number" ? raw.durationMs : void 0,
|
|
1792
|
+
error: typeof raw.error === "string" ? raw.error : void 0,
|
|
1793
|
+
ranAt: typeof raw.ranAt === "string" ? raw.ranAt : void 0
|
|
1794
|
+
};
|
|
1795
|
+
}
|
|
1796
|
+
function normalizeJobs(payload) {
|
|
1797
|
+
const raw = asRecord(payload);
|
|
1798
|
+
const source = Array.isArray(raw.jobs) ? raw.jobs : Array.isArray(payload) ? payload : [];
|
|
1799
|
+
return source.map(toCronJob).filter((job) => !!job);
|
|
1800
|
+
}
|
|
1801
|
+
function normalizeRuns(payload) {
|
|
1802
|
+
const raw = asRecord(payload);
|
|
1803
|
+
const source = Array.isArray(raw.runs) ? raw.runs : Array.isArray(payload) ? payload : [];
|
|
1804
|
+
return source.map(toCronRun).filter((run) => !!run);
|
|
1805
|
+
}
|
|
1806
|
+
function parseJobId(value) {
|
|
1807
|
+
if (typeof value !== "string") return null;
|
|
1808
|
+
const trimmed = value.trim();
|
|
1809
|
+
if (!trimmed || trimmed.length > 200) return null;
|
|
1810
|
+
return trimmed;
|
|
1811
|
+
}
|
|
1812
|
+
function parsePatch(value) {
|
|
1813
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return null;
|
|
1814
|
+
const patch = value;
|
|
1815
|
+
if (Object.keys(patch).length === 0) return null;
|
|
1816
|
+
return patch;
|
|
1817
|
+
}
|
|
1818
|
+
const Route$a = createFileRoute("/api/cron")({
|
|
1819
|
+
server: {
|
|
1820
|
+
handlers: {
|
|
1821
|
+
GET: async ({ request }) => {
|
|
1822
|
+
try {
|
|
1823
|
+
const url = new URL(request.url);
|
|
1824
|
+
const jobId = parseJobId(url.searchParams.get("jobId"));
|
|
1825
|
+
if (jobId) {
|
|
1826
|
+
const payload2 = await gatewayRpc("cron.runs", { jobId });
|
|
1827
|
+
return json({ runs: normalizeRuns(payload2) });
|
|
1828
|
+
}
|
|
1829
|
+
const payload = await gatewayRpc("cron.list", { includeDisabled: true });
|
|
1830
|
+
return json({ jobs: normalizeJobs(payload) });
|
|
1831
|
+
} catch (err) {
|
|
1832
|
+
return json(
|
|
1833
|
+
{ error: err instanceof Error ? err.message : String(err) },
|
|
1834
|
+
{ status: 500 }
|
|
1835
|
+
);
|
|
1836
|
+
}
|
|
1837
|
+
},
|
|
1838
|
+
POST: async ({ request }) => {
|
|
1839
|
+
try {
|
|
1840
|
+
const body = await request.json().catch(() => ({}));
|
|
1841
|
+
const jobId = parseJobId(body.jobId);
|
|
1842
|
+
if (!jobId) {
|
|
1843
|
+
return json({ ok: false, error: "jobId is required" }, { status: 400 });
|
|
1844
|
+
}
|
|
1845
|
+
const payload = await gatewayRpc("cron.run", { jobId });
|
|
1846
|
+
return json({ ok: true, ...asRecord(payload) });
|
|
1847
|
+
} catch (err) {
|
|
1848
|
+
return json(
|
|
1849
|
+
{ ok: false, error: err instanceof Error ? err.message : String(err) },
|
|
1850
|
+
{ status: 500 }
|
|
1851
|
+
);
|
|
1852
|
+
}
|
|
1853
|
+
},
|
|
1854
|
+
PATCH: async ({ request }) => {
|
|
1855
|
+
try {
|
|
1856
|
+
const body = await request.json().catch(() => ({}));
|
|
1857
|
+
const jobId = parseJobId(body.jobId);
|
|
1858
|
+
const patch = parsePatch(body.patch);
|
|
1859
|
+
if (!jobId) {
|
|
1860
|
+
return json({ ok: false, error: "jobId is required" }, { status: 400 });
|
|
1861
|
+
}
|
|
1862
|
+
if (!patch) {
|
|
1863
|
+
return json({ ok: false, error: "patch is required" }, { status: 400 });
|
|
1864
|
+
}
|
|
1865
|
+
const payload = await gatewayRpc("cron.update", { jobId, patch });
|
|
1866
|
+
return json({ ok: true, ...asRecord(payload) });
|
|
1867
|
+
} catch (err) {
|
|
1868
|
+
return json(
|
|
1869
|
+
{ ok: false, error: err instanceof Error ? err.message : String(err) },
|
|
1870
|
+
{ status: 500 }
|
|
1871
|
+
);
|
|
1872
|
+
}
|
|
1873
|
+
}
|
|
1874
|
+
}
|
|
1875
|
+
}
|
|
1876
|
+
});
|
|
1744
1877
|
async function readConfigAgents() {
|
|
1745
1878
|
try {
|
|
1746
1879
|
const raw = await readFile(
|
|
@@ -2860,153 +2993,165 @@ const Route = createFileRoute("/api/files/delete")({
|
|
|
2860
2993
|
}
|
|
2861
2994
|
}
|
|
2862
2995
|
});
|
|
2863
|
-
const NewRoute = Route$
|
|
2996
|
+
const NewRoute = Route$t.update({
|
|
2864
2997
|
id: "/new",
|
|
2865
2998
|
path: "/new",
|
|
2866
|
-
getParentRoute: () => Route$
|
|
2999
|
+
getParentRoute: () => Route$u
|
|
2867
3000
|
});
|
|
2868
|
-
const FilesRoute = Route$
|
|
3001
|
+
const FilesRoute = Route$s.update({
|
|
2869
3002
|
id: "/files",
|
|
2870
3003
|
path: "/files",
|
|
2871
|
-
getParentRoute: () => Route$
|
|
3004
|
+
getParentRoute: () => Route$u
|
|
2872
3005
|
});
|
|
2873
|
-
const ConnectRoute = Route$
|
|
3006
|
+
const ConnectRoute = Route$r.update({
|
|
2874
3007
|
id: "/connect",
|
|
2875
3008
|
path: "/connect",
|
|
2876
|
-
getParentRoute: () => Route$
|
|
3009
|
+
getParentRoute: () => Route$u
|
|
3010
|
+
});
|
|
3011
|
+
const BotsRoute = Route$q.update({
|
|
3012
|
+
id: "/bots",
|
|
3013
|
+
path: "/bots",
|
|
3014
|
+
getParentRoute: () => Route$u
|
|
2877
3015
|
});
|
|
2878
|
-
const AgentsRoute = Route$
|
|
3016
|
+
const AgentsRoute = Route$p.update({
|
|
2879
3017
|
id: "/agents",
|
|
2880
3018
|
path: "/agents",
|
|
2881
|
-
getParentRoute: () => Route$
|
|
3019
|
+
getParentRoute: () => Route$u
|
|
2882
3020
|
});
|
|
2883
|
-
const IndexRoute = Route$
|
|
3021
|
+
const IndexRoute = Route$o.update({
|
|
2884
3022
|
id: "/",
|
|
2885
3023
|
path: "/",
|
|
2886
|
-
getParentRoute: () => Route$
|
|
3024
|
+
getParentRoute: () => Route$u
|
|
2887
3025
|
});
|
|
2888
|
-
const ChatSessionKeyRoute = Route$
|
|
3026
|
+
const ChatSessionKeyRoute = Route$n.update({
|
|
2889
3027
|
id: "/chat/$sessionKey",
|
|
2890
3028
|
path: "/chat/$sessionKey",
|
|
2891
|
-
getParentRoute: () => Route$
|
|
3029
|
+
getParentRoute: () => Route$u
|
|
2892
3030
|
});
|
|
2893
|
-
const ApiTtsRoute = Route$
|
|
3031
|
+
const ApiTtsRoute = Route$m.update({
|
|
2894
3032
|
id: "/api/tts",
|
|
2895
3033
|
path: "/api/tts",
|
|
2896
|
-
getParentRoute: () => Route$
|
|
3034
|
+
getParentRoute: () => Route$u
|
|
2897
3035
|
});
|
|
2898
|
-
const ApiSttRoute = Route$
|
|
3036
|
+
const ApiSttRoute = Route$l.update({
|
|
2899
3037
|
id: "/api/stt",
|
|
2900
3038
|
path: "/api/stt",
|
|
2901
|
-
getParentRoute: () => Route$
|
|
3039
|
+
getParentRoute: () => Route$u
|
|
2902
3040
|
});
|
|
2903
|
-
const ApiStreamRoute = Route$
|
|
3041
|
+
const ApiStreamRoute = Route$k.update({
|
|
2904
3042
|
id: "/api/stream",
|
|
2905
3043
|
path: "/api/stream",
|
|
2906
|
-
getParentRoute: () => Route$
|
|
3044
|
+
getParentRoute: () => Route$u
|
|
2907
3045
|
});
|
|
2908
|
-
const ApiSessionsRoute = Route$
|
|
3046
|
+
const ApiSessionsRoute = Route$j.update({
|
|
2909
3047
|
id: "/api/sessions",
|
|
2910
3048
|
path: "/api/sessions",
|
|
2911
|
-
getParentRoute: () => Route$
|
|
3049
|
+
getParentRoute: () => Route$u
|
|
2912
3050
|
});
|
|
2913
|
-
const ApiSendRoute = Route$
|
|
3051
|
+
const ApiSendRoute = Route$i.update({
|
|
2914
3052
|
id: "/api/send",
|
|
2915
3053
|
path: "/api/send",
|
|
2916
|
-
getParentRoute: () => Route$
|
|
3054
|
+
getParentRoute: () => Route$u
|
|
2917
3055
|
});
|
|
2918
|
-
const ApiPingRoute = Route$
|
|
3056
|
+
const ApiPingRoute = Route$h.update({
|
|
2919
3057
|
id: "/api/ping",
|
|
2920
3058
|
path: "/api/ping",
|
|
2921
|
-
getParentRoute: () => Route$
|
|
3059
|
+
getParentRoute: () => Route$u
|
|
2922
3060
|
});
|
|
2923
|
-
const ApiPersonasRoute = Route$
|
|
3061
|
+
const ApiPersonasRoute = Route$g.update({
|
|
2924
3062
|
id: "/api/personas",
|
|
2925
3063
|
path: "/api/personas",
|
|
2926
|
-
getParentRoute: () => Route$
|
|
3064
|
+
getParentRoute: () => Route$u
|
|
2927
3065
|
});
|
|
2928
|
-
const ApiPathsRoute = Route$
|
|
3066
|
+
const ApiPathsRoute = Route$f.update({
|
|
2929
3067
|
id: "/api/paths",
|
|
2930
3068
|
path: "/api/paths",
|
|
2931
|
-
getParentRoute: () => Route$
|
|
3069
|
+
getParentRoute: () => Route$u
|
|
2932
3070
|
});
|
|
2933
|
-
const ApiModelsRoute = Route$
|
|
3071
|
+
const ApiModelsRoute = Route$e.update({
|
|
2934
3072
|
id: "/api/models",
|
|
2935
3073
|
path: "/api/models",
|
|
2936
|
-
getParentRoute: () => Route$
|
|
3074
|
+
getParentRoute: () => Route$u
|
|
2937
3075
|
});
|
|
2938
|
-
const ApiLlmFeaturesRoute = Route$
|
|
3076
|
+
const ApiLlmFeaturesRoute = Route$d.update({
|
|
2939
3077
|
id: "/api/llm-features",
|
|
2940
3078
|
path: "/api/llm-features",
|
|
2941
|
-
getParentRoute: () => Route$
|
|
3079
|
+
getParentRoute: () => Route$u
|
|
2942
3080
|
});
|
|
2943
|
-
const ApiHistoryRoute = Route$
|
|
3081
|
+
const ApiHistoryRoute = Route$c.update({
|
|
2944
3082
|
id: "/api/history",
|
|
2945
3083
|
path: "/api/history",
|
|
2946
|
-
getParentRoute: () => Route$
|
|
3084
|
+
getParentRoute: () => Route$u
|
|
2947
3085
|
});
|
|
2948
|
-
const ApiFollowUpsRoute = Route$
|
|
3086
|
+
const ApiFollowUpsRoute = Route$b.update({
|
|
2949
3087
|
id: "/api/follow-ups",
|
|
2950
3088
|
path: "/api/follow-ups",
|
|
2951
|
-
getParentRoute: () => Route$
|
|
3089
|
+
getParentRoute: () => Route$u
|
|
3090
|
+
});
|
|
3091
|
+
const ApiCronRoute = Route$a.update({
|
|
3092
|
+
id: "/api/cron",
|
|
3093
|
+
path: "/api/cron",
|
|
3094
|
+
getParentRoute: () => Route$u
|
|
2952
3095
|
});
|
|
2953
3096
|
const ApiAgentsRoute = Route$9.update({
|
|
2954
3097
|
id: "/api/agents",
|
|
2955
3098
|
path: "/api/agents",
|
|
2956
|
-
getParentRoute: () => Route$
|
|
3099
|
+
getParentRoute: () => Route$u
|
|
2957
3100
|
});
|
|
2958
3101
|
const ApiFilesUploadRoute = Route$8.update({
|
|
2959
3102
|
id: "/api/files/upload",
|
|
2960
3103
|
path: "/api/files/upload",
|
|
2961
|
-
getParentRoute: () => Route$
|
|
3104
|
+
getParentRoute: () => Route$u
|
|
2962
3105
|
});
|
|
2963
3106
|
const ApiFilesSaveRoute = Route$7.update({
|
|
2964
3107
|
id: "/api/files/save",
|
|
2965
3108
|
path: "/api/files/save",
|
|
2966
|
-
getParentRoute: () => Route$
|
|
3109
|
+
getParentRoute: () => Route$u
|
|
2967
3110
|
});
|
|
2968
3111
|
const ApiFilesRenameRoute = Route$6.update({
|
|
2969
3112
|
id: "/api/files/rename",
|
|
2970
3113
|
path: "/api/files/rename",
|
|
2971
|
-
getParentRoute: () => Route$
|
|
3114
|
+
getParentRoute: () => Route$u
|
|
2972
3115
|
});
|
|
2973
3116
|
const ApiFilesReadRoute = Route$5.update({
|
|
2974
3117
|
id: "/api/files/read",
|
|
2975
3118
|
path: "/api/files/read",
|
|
2976
|
-
getParentRoute: () => Route$
|
|
3119
|
+
getParentRoute: () => Route$u
|
|
2977
3120
|
});
|
|
2978
3121
|
const ApiFilesMkdirRoute = Route$4.update({
|
|
2979
3122
|
id: "/api/files/mkdir",
|
|
2980
3123
|
path: "/api/files/mkdir",
|
|
2981
|
-
getParentRoute: () => Route$
|
|
3124
|
+
getParentRoute: () => Route$u
|
|
2982
3125
|
});
|
|
2983
3126
|
const ApiFilesListRoute = Route$3.update({
|
|
2984
3127
|
id: "/api/files/list",
|
|
2985
3128
|
path: "/api/files/list",
|
|
2986
|
-
getParentRoute: () => Route$
|
|
3129
|
+
getParentRoute: () => Route$u
|
|
2987
3130
|
});
|
|
2988
3131
|
const ApiFilesInfoRoute = Route$2.update({
|
|
2989
3132
|
id: "/api/files/info",
|
|
2990
3133
|
path: "/api/files/info",
|
|
2991
|
-
getParentRoute: () => Route$
|
|
3134
|
+
getParentRoute: () => Route$u
|
|
2992
3135
|
});
|
|
2993
3136
|
const ApiFilesDownloadRoute = Route$1.update({
|
|
2994
3137
|
id: "/api/files/download",
|
|
2995
3138
|
path: "/api/files/download",
|
|
2996
|
-
getParentRoute: () => Route$
|
|
3139
|
+
getParentRoute: () => Route$u
|
|
2997
3140
|
});
|
|
2998
3141
|
const ApiFilesDeleteRoute = Route.update({
|
|
2999
3142
|
id: "/api/files/delete",
|
|
3000
3143
|
path: "/api/files/delete",
|
|
3001
|
-
getParentRoute: () => Route$
|
|
3144
|
+
getParentRoute: () => Route$u
|
|
3002
3145
|
});
|
|
3003
3146
|
const rootRouteChildren = {
|
|
3004
3147
|
IndexRoute,
|
|
3005
3148
|
AgentsRoute,
|
|
3149
|
+
BotsRoute,
|
|
3006
3150
|
ConnectRoute,
|
|
3007
3151
|
FilesRoute,
|
|
3008
3152
|
NewRoute,
|
|
3009
3153
|
ApiAgentsRoute,
|
|
3154
|
+
ApiCronRoute,
|
|
3010
3155
|
ApiFollowUpsRoute,
|
|
3011
3156
|
ApiHistoryRoute,
|
|
3012
3157
|
ApiLlmFeaturesRoute,
|
|
@@ -3030,7 +3175,7 @@ const rootRouteChildren = {
|
|
|
3030
3175
|
ApiFilesSaveRoute,
|
|
3031
3176
|
ApiFilesUploadRoute
|
|
3032
3177
|
};
|
|
3033
|
-
const routeTree = Route$
|
|
3178
|
+
const routeTree = Route$u._addFileChildren(rootRouteChildren)._addFileTypes();
|
|
3034
3179
|
const getRouter = () => {
|
|
3035
3180
|
const router2 = createRouter({
|
|
3036
3181
|
routeTree,
|
|
@@ -3045,7 +3190,7 @@ const router = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
|
|
|
3045
3190
|
getRouter
|
|
3046
3191
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
3047
3192
|
export {
|
|
3048
|
-
Route$
|
|
3049
|
-
Route$
|
|
3193
|
+
Route$o as R,
|
|
3194
|
+
Route$n as a,
|
|
3050
3195
|
router as r
|
|
3051
3196
|
};
|
|
@@ -3,9 +3,9 @@ import { useState, useRef, useEffect, useCallback, useMemo } from "react";
|
|
|
3
3
|
import { useNavigate } from "@tanstack/react-router";
|
|
4
4
|
import { HugeiconsIcon } from "@hugeicons/react";
|
|
5
5
|
import { Search01Icon, Cancel01Icon, Loading03Icon } from "@hugeicons/core-free-icons";
|
|
6
|
-
import { D as DialogRoot, a as DialogContent } from "./use-file-explorer-state-
|
|
6
|
+
import { D as DialogRoot, a as DialogContent } from "./use-file-explorer-state-DfAKF2gZ.js";
|
|
7
7
|
import { useQueryClient } from "@tanstack/react-query";
|
|
8
|
-
import { c as chatQueryKeys } from "./_sessionKey-
|
|
8
|
+
import { c as chatQueryKeys } from "./_sessionKey-BhFH4uWY.js";
|
|
9
9
|
import { c as cn } from "./button-DtQ3rV1m.js";
|
|
10
10
|
import "@base-ui/react/dialog";
|
|
11
11
|
import "@base-ui/react/menu";
|
|
@@ -21,7 +21,7 @@ import "marked";
|
|
|
21
21
|
import "react-markdown";
|
|
22
22
|
import "remark-breaks";
|
|
23
23
|
import "remark-gfm";
|
|
24
|
-
import "./index-
|
|
24
|
+
import "./index-BNSsDaLb.js";
|
|
25
25
|
import "shiki/core";
|
|
26
26
|
import "shiki/engine/javascript";
|
|
27
27
|
import "@shikijs/themes/vitesse-dark";
|
|
@@ -57,7 +57,7 @@ import "@shikijs/langs/xml";
|
|
|
57
57
|
import "@shikijs/langs/yaml";
|
|
58
58
|
import "zustand/middleware";
|
|
59
59
|
import "react-dom";
|
|
60
|
-
import "./router-
|
|
60
|
+
import "./router-Dme7USeO.js";
|
|
61
61
|
import "node:crypto";
|
|
62
62
|
import "ws";
|
|
63
63
|
import "node:fs";
|
package/dist/server/assets/{session-export-dialog-DRVbC8Q-.js → session-export-dialog-DLPZVlQV.js}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useState } from "react";
|
|
3
|
-
import { D as DialogRoot, a as DialogContent, b as DialogTitle, c as DialogDescription, d as DialogClose } from "./use-file-explorer-state-
|
|
3
|
+
import { D as DialogRoot, a as DialogContent, b as DialogTitle, c as DialogDescription, d as DialogClose } from "./use-file-explorer-state-DfAKF2gZ.js";
|
|
4
4
|
import { B as Button } from "./button-DtQ3rV1m.js";
|
|
5
5
|
import "@base-ui/react/dialog";
|
|
6
6
|
import "@base-ui/react/menu";
|
|
@@ -3,11 +3,11 @@ import { useState, useRef, useEffect } from "react";
|
|
|
3
3
|
import { c as cn, B as Button } from "./button-DtQ3rV1m.js";
|
|
4
4
|
import { HugeiconsIcon } from "@hugeicons/react";
|
|
5
5
|
import { Cancel01Icon, Link01Icon, PaintBoardIcon, MessageEdit01Icon, UserIcon, VoiceIcon, AiBrain01Icon, InformationCircleIcon, ComputerIcon, Sun01Icon, Moon01Icon, Leaf01Icon, Loading02Icon, Tick01Icon, Cancel02Icon } from "@hugeicons/core-free-icons";
|
|
6
|
-
import { D as DialogRoot, a as DialogContent, b as DialogTitle, c as DialogDescription, d as DialogClose } from "./use-file-explorer-state-
|
|
6
|
+
import { D as DialogRoot, a as DialogContent, b as DialogTitle, c as DialogDescription, d as DialogClose } from "./use-file-explorer-state-DfAKF2gZ.js";
|
|
7
7
|
import { S as Switch } from "./switch-DnX0MjGS.js";
|
|
8
8
|
import { Tabs as Tabs$1 } from "@base-ui/react/tabs";
|
|
9
|
-
import {
|
|
10
|
-
import { u as useLlmSettings, g as getLlmProviderDefaults } from "./_sessionKey-
|
|
9
|
+
import { u as useChatSettings } from "./index-BNSsDaLb.js";
|
|
10
|
+
import { u as useLlmSettings, g as getLlmProviderDefaults } from "./_sessionKey-BhFH4uWY.js";
|
|
11
11
|
import "@base-ui/react/merge-props";
|
|
12
12
|
import "@base-ui/react/use-render";
|
|
13
13
|
import "class-variance-authority";
|
|
@@ -65,7 +65,7 @@ import "react-markdown";
|
|
|
65
65
|
import "remark-breaks";
|
|
66
66
|
import "remark-gfm";
|
|
67
67
|
import "react-dom";
|
|
68
|
-
import "./router-
|
|
68
|
+
import "./router-Dme7USeO.js";
|
|
69
69
|
import "node:crypto";
|
|
70
70
|
import "ws";
|
|
71
71
|
import "node:fs";
|
|
@@ -497,6 +497,29 @@ function SettingsDialog({
|
|
|
497
497
|
)
|
|
498
498
|
}
|
|
499
499
|
),
|
|
500
|
+
/* @__PURE__ */ jsx(
|
|
501
|
+
SettingsRow,
|
|
502
|
+
{
|
|
503
|
+
label: "Cron Jobs Panel (Beta)",
|
|
504
|
+
description: "Show Cron Jobs in sidebar for managing OpenClaw cron schedules",
|
|
505
|
+
children: /* @__PURE__ */ jsx(
|
|
506
|
+
Switch,
|
|
507
|
+
{
|
|
508
|
+
checked: (() => {
|
|
509
|
+
try {
|
|
510
|
+
return localStorage.getItem("opencami-cron-manager") === "true";
|
|
511
|
+
} catch {
|
|
512
|
+
return false;
|
|
513
|
+
}
|
|
514
|
+
})(),
|
|
515
|
+
onCheckedChange: (checked) => {
|
|
516
|
+
localStorage.setItem("opencami-cron-manager", String(checked));
|
|
517
|
+
window.location.reload();
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
)
|
|
521
|
+
}
|
|
522
|
+
),
|
|
500
523
|
/* @__PURE__ */ jsx(
|
|
501
524
|
SettingsRow,
|
|
502
525
|
{
|
|
@@ -94,6 +94,7 @@ const useFileExplorerState = create((set, get) => ({
|
|
|
94
94
|
sortBy: "name",
|
|
95
95
|
sortAsc: true,
|
|
96
96
|
selectedFiles: /* @__PURE__ */ new Set(),
|
|
97
|
+
editingFile: null,
|
|
97
98
|
navigateTo: (path) => {
|
|
98
99
|
set({
|
|
99
100
|
currentPath: path,
|
|
@@ -132,6 +133,17 @@ const useFileExplorerState = create((set, get) => ({
|
|
|
132
133
|
clearSelection: () => {
|
|
133
134
|
set({ selectedFiles: /* @__PURE__ */ new Set() });
|
|
134
135
|
},
|
|
136
|
+
openInEditor: (filePath) => {
|
|
137
|
+
const dir = filePath.includes("/") ? filePath.slice(0, filePath.lastIndexOf("/")) || "/" : "/";
|
|
138
|
+
set({
|
|
139
|
+
currentPath: dir,
|
|
140
|
+
editingFile: filePath,
|
|
141
|
+
selectedFiles: /* @__PURE__ */ new Set()
|
|
142
|
+
});
|
|
143
|
+
},
|
|
144
|
+
closeEditor: () => {
|
|
145
|
+
set({ editingFile: null });
|
|
146
|
+
},
|
|
135
147
|
toggleFileSelection: (path) => {
|
|
136
148
|
const { selectedFiles, selectFile, deselectFile } = get();
|
|
137
149
|
if (selectedFiles.has(path)) {
|
package/dist/server/server.js
CHANGED
|
@@ -184,7 +184,7 @@ function getResponse() {
|
|
|
184
184
|
return event.res;
|
|
185
185
|
}
|
|
186
186
|
async function getStartManifest(matchedRoutes) {
|
|
187
|
-
const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-
|
|
187
|
+
const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-BaIrL1VQ.js");
|
|
188
188
|
const startManifest = tsrStartManifest();
|
|
189
189
|
const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
|
|
190
190
|
rootRoute.assets = rootRoute.assets || [];
|
|
@@ -656,7 +656,7 @@ function getStartResponseHeaders(opts) {
|
|
|
656
656
|
let entriesPromise;
|
|
657
657
|
let manifestPromise;
|
|
658
658
|
async function loadEntries() {
|
|
659
|
-
const routerEntry = await import("./assets/router-
|
|
659
|
+
const routerEntry = await import("./assets/router-Dme7USeO.js").then((n) => n.r);
|
|
660
660
|
const startEntry = await import("./assets/start-HYkvq4Ni.js");
|
|
661
661
|
return { startEntry, routerEntry };
|
|
662
662
|
}
|