opencami 1.8.7 → 1.8.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +0 -1
  2. package/dist/client/assets/{CSPContext-KDlbpvjX.js → CSPContext-DI-5GAnQ.js} +1 -1
  3. package/dist/client/assets/{DirectionContext-DZNUWW6F.js → DirectionContext-CrIsc5n9.js} +1 -1
  4. package/dist/client/assets/_sessionKey-B4NZmxf3.js +21 -0
  5. package/dist/client/assets/agents-bptidK8z.js +2 -0
  6. package/dist/client/assets/agents-screen-6qdnPmx2.js +1 -0
  7. package/dist/client/assets/bots-BWpbaQ-E.js +2 -0
  8. package/dist/client/assets/{bots-screen-CvbAVMk0.js → bots-screen-BTKCOohV.js} +1 -1
  9. package/dist/client/assets/button-8ab4wOwy.js +1 -0
  10. package/dist/client/assets/{composite-t7Eu0qB0.js → composite-B2qsrzf3.js} +1 -1
  11. package/dist/client/assets/{connect-Btonx7l6.js → connect-B3_p7C4I.js} +1 -1
  12. package/dist/client/assets/dashboard-BtClHYpn.js +1 -0
  13. package/dist/client/assets/event-DG3RKJz8.js +1 -0
  14. package/dist/client/assets/file-explorer-screen-Djl8x-8P.js +1 -0
  15. package/dist/client/assets/files-CjbCJDgC.js +2 -0
  16. package/dist/client/assets/follow-up-suggestions-BSCMXRXh.js +5 -0
  17. package/dist/client/assets/{index-nheqha2z.js → index-BXiha-Vz.js} +1 -1
  18. package/dist/client/assets/{index-yPOt98v7.js → index-CtlYu8Ug.js} +1 -1
  19. package/dist/client/assets/keyboard-shortcuts-dialog-HAufCn9C.js +1 -0
  20. package/dist/client/assets/main-CQKtcNr3.js +210 -0
  21. package/dist/client/assets/markdown-DFJF-FsV.js +87 -0
  22. package/dist/client/assets/memory-DnJOmcwU.js +2 -0
  23. package/dist/client/assets/memory-screen-Bm4NMAnU.js +1 -0
  24. package/dist/client/assets/menu-D26Vmgxl.js +1 -0
  25. package/dist/client/assets/{opencami-logo-CoCA2JIf.js → opencami-logo-BSed2Wez.js} +1 -1
  26. package/dist/client/assets/popupStateMapping-DkI2OCkW.js +1 -0
  27. package/dist/client/assets/proxy-CHQ-VCN1.js +9 -0
  28. package/dist/client/assets/{react-DzPMbcP8.js → react-WkSlhZJd.js} +1 -1
  29. package/dist/client/assets/search-dialog-CCl4d0Pi.js +1 -0
  30. package/dist/client/assets/{search-sources-badge-DOd5AI-i.js → search-sources-badge-Du8KpUEb.js} +1 -1
  31. package/dist/client/assets/session-export-dialog-io9FvLKq.js +1 -0
  32. package/dist/client/assets/settings-dialog-B93qswor.js +1 -0
  33. package/dist/client/assets/skills-BNDGnHwM.js +2 -0
  34. package/dist/client/assets/{skills-panel-_M5k5dty.js → skills-panel-CVh1I-7D.js} +1 -1
  35. package/dist/client/assets/styles-Ce2xZzc4.css +1 -0
  36. package/dist/client/assets/switch-CSnzINDW.js +1 -0
  37. package/dist/client/assets/tabs-CWfn44FL.js +1 -0
  38. package/dist/client/assets/thinking-BmoLlbFC.js +1 -0
  39. package/dist/client/assets/tooltip-CSGMH2t4.js +1 -0
  40. package/dist/client/assets/use-file-explorer-state-BYVzjwPA.js +12 -0
  41. package/dist/client/assets/{useBaseUiId-CMJ8I9al.js → useBaseUiId-DiwX_3so.js} +1 -1
  42. package/dist/client/assets/{useCompositeItem-CSriPK0T.js → useCompositeItem-UPIPwR9H.js} +1 -1
  43. package/dist/client/assets/{useControlled-KFa25CcD.js → useControlled-CT2hRlcU.js} +1 -1
  44. package/dist/client/assets/{useMutation-Bd89JWif.js → useMutation-rx8UH99I.js} +1 -1
  45. package/dist/client/assets/{useQuery-DhR_UXNX.js → useQuery-Boaa6oF3.js} +1 -1
  46. package/dist/server/assets/{_sessionKey-BzM-igv7.js → _sessionKey-B6iYeyCS.js} +379 -395
  47. package/dist/server/assets/{_tanstack-start-manifest_v-Bfnqdswf.js → _tanstack-start-manifest_v-C9chPgNH.js} +1 -1
  48. package/dist/server/assets/{dashboard-GCKodTiJ.js → dashboard-UYRCu_mQ.js} +19 -3
  49. package/dist/server/assets/{follow-up-suggestions-DhBZIszK.js → follow-up-suggestions-mzRQIB0k.js} +2 -2
  50. package/dist/server/assets/{index-DCMpnyEo.js → index-COElhwGA.js} +1 -1
  51. package/dist/server/assets/{router-BqPDQeCx.js → router-BqLGFd4L.js} +4 -4
  52. package/dist/server/assets/{search-dialog-DtYc9e4N.js → search-dialog-CmI7naPN.js} +2 -2
  53. package/dist/server/assets/{settings-dialog-BQzn6fyF.js → settings-dialog-BZ67gr9N.js} +2 -2
  54. package/dist/server/assets/{thinking-D6q1tJkk.js → thinking-CA8PSwKJ.js} +2 -2
  55. package/dist/server/server.js +38 -195
  56. package/package.json +3 -7
  57. package/dist/client/assets/_sessionKey-CPRycepq.js +0 -19
  58. package/dist/client/assets/agents-Bp6Cn1BH.js +0 -2
  59. package/dist/client/assets/agents-screen-Du8b4SRW.js +0 -1
  60. package/dist/client/assets/bots-Dl65yZDx.js +0 -2
  61. package/dist/client/assets/button-BxDVif49.js +0 -1
  62. package/dist/client/assets/dashboard-Dz6Uyyke.js +0 -1
  63. package/dist/client/assets/event-DeooaZzN.js +0 -1
  64. package/dist/client/assets/file-explorer-screen-BnOINWSL.js +0 -1
  65. package/dist/client/assets/files-Cf87gXsq.js +0 -2
  66. package/dist/client/assets/follow-up-suggestions-DP_84nA2.js +0 -5
  67. package/dist/client/assets/keyboard-shortcuts-dialog-BzL7ZJUb.js +0 -1
  68. package/dist/client/assets/main-DJgQwVqD.js +0 -210
  69. package/dist/client/assets/markdown-CFbW7h0Q.js +0 -87
  70. package/dist/client/assets/memory-kYdhgbRR.js +0 -2
  71. package/dist/client/assets/memory-screen-BKYBnY-V.js +0 -1
  72. package/dist/client/assets/menu-CnihCZ4y.js +0 -1
  73. package/dist/client/assets/proxy-C2vtPufK.js +0 -9
  74. package/dist/client/assets/search-dialog-CDAdFAQI.js +0 -1
  75. package/dist/client/assets/session-export-dialog-Cf8eisLM.js +0 -1
  76. package/dist/client/assets/settings-dialog-CB1OiRWU.js +0 -1
  77. package/dist/client/assets/skills-D6MaebJh.js +0 -2
  78. package/dist/client/assets/styles-BNkOWk4R.css +0 -1
  79. package/dist/client/assets/switch-LzFh8co4.js +0 -1
  80. package/dist/client/assets/tabs-D9o7Irvl.js +0 -1
  81. package/dist/client/assets/thinking-BqZoM6BP.js +0 -1
  82. package/dist/client/assets/tooltip-D64CzFXa.js +0 -1
  83. package/dist/client/assets/use-file-explorer-state-Tzex8EEL.js +0 -12
  84. package/dist/client/assets/useOnFirstRender-DqnUCnnL.js +0 -1
@@ -1,4 +1,4 @@
1
- const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "/root/opencami/src/routes/__root.tsx", "children": ["/", "/agents", "/bots", "/connect", "/dashboard", "/files", "/memory", "/new", "/skills", "/api/agents", "/api/cron", "/api/follow-ups", "/api/history", "/api/llm-features", "/api/models", "/api/paths", "/api/personas", "/api/ping", "/api/send", "/api/sessions", "/api/skills", "/api/stream", "/api/stt", "/api/tts", "/chat/$sessionKey", "/api/dashboard/crons", "/api/dashboard/gateway", "/api/dashboard/system", "/api/files/delete", "/api/files/download", "/api/files/info", "/api/files/list", "/api/files/mkdir", "/api/files/read", "/api/files/rename", "/api/files/save", "/api/files/upload"], "preloads": ["/assets/main-DJgQwVqD.js"], "assets": [] }, "/": { "filePath": "/root/opencami/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-yPOt98v7.js"] }, "/agents": { "filePath": "/root/opencami/src/routes/agents.tsx", "assets": [], "preloads": ["/assets/agents-Bp6Cn1BH.js"] }, "/bots": { "filePath": "/root/opencami/src/routes/bots.tsx", "assets": [], "preloads": ["/assets/bots-Dl65yZDx.js"] }, "/connect": { "filePath": "/root/opencami/src/routes/connect.tsx", "assets": [], "preloads": ["/assets/connect-Btonx7l6.js", "/assets/index-nheqha2z.js", "/assets/button-BxDVif49.js", "/assets/react-DzPMbcP8.js"] }, "/dashboard": { "filePath": "/root/opencami/src/routes/dashboard.tsx", "assets": [], "preloads": ["/assets/dashboard-Dz6Uyyke.js", "/assets/useQuery-DhR_UXNX.js"] }, "/files": { "filePath": "/root/opencami/src/routes/files.tsx", "assets": [], "preloads": ["/assets/files-Cf87gXsq.js"] }, "/memory": { "filePath": "/root/opencami/src/routes/memory.tsx", "assets": [], "preloads": ["/assets/memory-kYdhgbRR.js"] }, "/new": { "filePath": "/root/opencami/src/routes/new.tsx", "assets": [], "preloads": ["/assets/new-DLlBm66g.js"] }, "/skills": { "filePath": "/root/opencami/src/routes/skills.tsx", "assets": [], "preloads": ["/assets/skills-D6MaebJh.js"] }, "/api/agents": { "filePath": "/root/opencami/src/routes/api/agents.ts" }, "/api/cron": { "filePath": "/root/opencami/src/routes/api/cron.ts" }, "/api/follow-ups": { "filePath": "/root/opencami/src/routes/api/follow-ups.ts" }, "/api/history": { "filePath": "/root/opencami/src/routes/api/history.ts" }, "/api/llm-features": { "filePath": "/root/opencami/src/routes/api/llm-features.ts" }, "/api/models": { "filePath": "/root/opencami/src/routes/api/models.ts" }, "/api/paths": { "filePath": "/root/opencami/src/routes/api/paths.ts" }, "/api/personas": { "filePath": "/root/opencami/src/routes/api/personas.ts" }, "/api/ping": { "filePath": "/root/opencami/src/routes/api/ping.ts" }, "/api/send": { "filePath": "/root/opencami/src/routes/api/send.ts" }, "/api/sessions": { "filePath": "/root/opencami/src/routes/api/sessions.ts" }, "/api/skills": { "filePath": "/root/opencami/src/routes/api/skills.ts" }, "/api/stream": { "filePath": "/root/opencami/src/routes/api/stream.ts" }, "/api/stt": { "filePath": "/root/opencami/src/routes/api/stt.ts" }, "/api/tts": { "filePath": "/root/opencami/src/routes/api/tts.ts" }, "/chat/$sessionKey": { "filePath": "/root/opencami/src/routes/chat/$sessionKey.tsx", "assets": [], "preloads": ["/assets/_sessionKey-CPRycepq.js", "/assets/useQuery-DhR_UXNX.js", "/assets/tooltip-D64CzFXa.js", "/assets/button-BxDVif49.js", "/assets/useMutation-Bd89JWif.js", "/assets/use-file-explorer-state-Tzex8EEL.js", "/assets/useBaseUiId-CMJ8I9al.js", "/assets/useControlled-KFa25CcD.js", "/assets/useOnFirstRender-DqnUCnnL.js", "/assets/event-DeooaZzN.js", "/assets/CSPContext-KDlbpvjX.js", "/assets/DirectionContext-DZNUWW6F.js", "/assets/menu-CnihCZ4y.js", "/assets/opencami-logo-CoCA2JIf.js", "/assets/proxy-C2vtPufK.js", "/assets/markdown-CFbW7h0Q.js", "/assets/index-nheqha2z.js", "/assets/react-DzPMbcP8.js"] }, "/api/dashboard/crons": { "filePath": "/root/opencami/src/routes/api/dashboard/crons.ts" }, "/api/dashboard/gateway": { "filePath": "/root/opencami/src/routes/api/dashboard/gateway.ts" }, "/api/dashboard/system": { "filePath": "/root/opencami/src/routes/api/dashboard/system.ts" }, "/api/files/delete": { "filePath": "/root/opencami/src/routes/api/files/delete.ts" }, "/api/files/download": { "filePath": "/root/opencami/src/routes/api/files/download.ts" }, "/api/files/info": { "filePath": "/root/opencami/src/routes/api/files/info.ts" }, "/api/files/list": { "filePath": "/root/opencami/src/routes/api/files/list.ts" }, "/api/files/mkdir": { "filePath": "/root/opencami/src/routes/api/files/mkdir.ts" }, "/api/files/read": { "filePath": "/root/opencami/src/routes/api/files/read.ts" }, "/api/files/rename": { "filePath": "/root/opencami/src/routes/api/files/rename.ts" }, "/api/files/save": { "filePath": "/root/opencami/src/routes/api/files/save.ts" }, "/api/files/upload": { "filePath": "/root/opencami/src/routes/api/files/upload.ts" } }, "clientEntry": "/assets/main-DJgQwVqD.js" });
1
+ const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "/root/opencami/src/routes/__root.tsx", "children": ["/", "/agents", "/bots", "/connect", "/dashboard", "/files", "/memory", "/new", "/skills", "/api/agents", "/api/cron", "/api/follow-ups", "/api/history", "/api/llm-features", "/api/models", "/api/paths", "/api/personas", "/api/ping", "/api/send", "/api/sessions", "/api/skills", "/api/stream", "/api/stt", "/api/tts", "/chat/$sessionKey", "/api/dashboard/crons", "/api/dashboard/gateway", "/api/dashboard/system", "/api/files/delete", "/api/files/download", "/api/files/info", "/api/files/list", "/api/files/mkdir", "/api/files/read", "/api/files/rename", "/api/files/save", "/api/files/upload"], "preloads": ["/assets/main-CQKtcNr3.js"], "assets": [] }, "/": { "filePath": "/root/opencami/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-CtlYu8Ug.js"] }, "/agents": { "filePath": "/root/opencami/src/routes/agents.tsx", "assets": [], "preloads": ["/assets/agents-bptidK8z.js"] }, "/bots": { "filePath": "/root/opencami/src/routes/bots.tsx", "assets": [], "preloads": ["/assets/bots-BWpbaQ-E.js"] }, "/connect": { "filePath": "/root/opencami/src/routes/connect.tsx", "assets": [], "preloads": ["/assets/connect-B3_p7C4I.js", "/assets/index-BXiha-Vz.js", "/assets/button-8ab4wOwy.js", "/assets/react-WkSlhZJd.js"] }, "/dashboard": { "filePath": "/root/opencami/src/routes/dashboard.tsx", "assets": [], "preloads": ["/assets/dashboard-BtClHYpn.js", "/assets/useQuery-Boaa6oF3.js"] }, "/files": { "filePath": "/root/opencami/src/routes/files.tsx", "assets": [], "preloads": ["/assets/files-CjbCJDgC.js"] }, "/memory": { "filePath": "/root/opencami/src/routes/memory.tsx", "assets": [], "preloads": ["/assets/memory-DnJOmcwU.js"] }, "/new": { "filePath": "/root/opencami/src/routes/new.tsx", "assets": [], "preloads": ["/assets/new-DLlBm66g.js"] }, "/skills": { "filePath": "/root/opencami/src/routes/skills.tsx", "assets": [], "preloads": ["/assets/skills-BNDGnHwM.js"] }, "/api/agents": { "filePath": "/root/opencami/src/routes/api/agents.ts" }, "/api/cron": { "filePath": "/root/opencami/src/routes/api/cron.ts" }, "/api/follow-ups": { "filePath": "/root/opencami/src/routes/api/follow-ups.ts" }, "/api/history": { "filePath": "/root/opencami/src/routes/api/history.ts" }, "/api/llm-features": { "filePath": "/root/opencami/src/routes/api/llm-features.ts" }, "/api/models": { "filePath": "/root/opencami/src/routes/api/models.ts" }, "/api/paths": { "filePath": "/root/opencami/src/routes/api/paths.ts" }, "/api/personas": { "filePath": "/root/opencami/src/routes/api/personas.ts" }, "/api/ping": { "filePath": "/root/opencami/src/routes/api/ping.ts" }, "/api/send": { "filePath": "/root/opencami/src/routes/api/send.ts" }, "/api/sessions": { "filePath": "/root/opencami/src/routes/api/sessions.ts" }, "/api/skills": { "filePath": "/root/opencami/src/routes/api/skills.ts" }, "/api/stream": { "filePath": "/root/opencami/src/routes/api/stream.ts" }, "/api/stt": { "filePath": "/root/opencami/src/routes/api/stt.ts" }, "/api/tts": { "filePath": "/root/opencami/src/routes/api/tts.ts" }, "/chat/$sessionKey": { "filePath": "/root/opencami/src/routes/chat/$sessionKey.tsx", "assets": [], "preloads": ["/assets/_sessionKey-B4NZmxf3.js", "/assets/useQuery-Boaa6oF3.js", "/assets/tooltip-CSGMH2t4.js", "/assets/button-8ab4wOwy.js", "/assets/useMutation-rx8UH99I.js", "/assets/use-file-explorer-state-BYVzjwPA.js", "/assets/useBaseUiId-DiwX_3so.js", "/assets/useControlled-CT2hRlcU.js", "/assets/popupStateMapping-DkI2OCkW.js", "/assets/event-DG3RKJz8.js", "/assets/CSPContext-DI-5GAnQ.js", "/assets/DirectionContext-CrIsc5n9.js", "/assets/menu-D26Vmgxl.js", "/assets/opencami-logo-BSed2Wez.js", "/assets/proxy-CHQ-VCN1.js", "/assets/markdown-DFJF-FsV.js", "/assets/index-BXiha-Vz.js", "/assets/react-WkSlhZJd.js"] }, "/api/dashboard/crons": { "filePath": "/root/opencami/src/routes/api/dashboard/crons.ts" }, "/api/dashboard/gateway": { "filePath": "/root/opencami/src/routes/api/dashboard/gateway.ts" }, "/api/dashboard/system": { "filePath": "/root/opencami/src/routes/api/dashboard/system.ts" }, "/api/files/delete": { "filePath": "/root/opencami/src/routes/api/files/delete.ts" }, "/api/files/download": { "filePath": "/root/opencami/src/routes/api/files/download.ts" }, "/api/files/info": { "filePath": "/root/opencami/src/routes/api/files/info.ts" }, "/api/files/list": { "filePath": "/root/opencami/src/routes/api/files/list.ts" }, "/api/files/mkdir": { "filePath": "/root/opencami/src/routes/api/files/mkdir.ts" }, "/api/files/read": { "filePath": "/root/opencami/src/routes/api/files/read.ts" }, "/api/files/rename": { "filePath": "/root/opencami/src/routes/api/files/rename.ts" }, "/api/files/save": { "filePath": "/root/opencami/src/routes/api/files/save.ts" }, "/api/files/upload": { "filePath": "/root/opencami/src/routes/api/files/upload.ts" } }, "clientEntry": "/assets/main-CQKtcNr3.js" });
2
2
  export {
3
3
  tsrStartManifest
4
4
  };
@@ -1,5 +1,6 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { useQuery } from "@tanstack/react-query";
3
+ import { useState, useEffect } from "react";
3
4
  async function fetchJson(url) {
4
5
  const res = await fetch(url);
5
6
  if (!res.ok) {
@@ -49,15 +50,30 @@ function CardSkeleton() {
49
50
  ] });
50
51
  }
51
52
  function DashboardRoute() {
53
+ const [isDocumentVisible, setIsDocumentVisible] = useState(() => {
54
+ if (typeof document === "undefined") return true;
55
+ return document.visibilityState === "visible";
56
+ });
57
+ useEffect(() => {
58
+ if (typeof document === "undefined") return void 0;
59
+ function handleVisibilityChange() {
60
+ setIsDocumentVisible(document.visibilityState === "visible");
61
+ }
62
+ handleVisibilityChange();
63
+ document.addEventListener("visibilitychange", handleVisibilityChange);
64
+ return () => {
65
+ document.removeEventListener("visibilitychange", handleVisibilityChange);
66
+ };
67
+ }, []);
52
68
  const systemQuery = useQuery({
53
69
  queryKey: ["dashboard", "system"],
54
70
  queryFn: () => fetchJson("/api/dashboard/system"),
55
- refetchInterval: 1e4
71
+ refetchInterval: isDocumentVisible ? 1e4 : false
56
72
  });
57
73
  const gatewayQuery = useQuery({
58
74
  queryKey: ["dashboard", "gateway"],
59
75
  queryFn: () => fetchJson("/api/dashboard/gateway"),
60
- refetchInterval: 1e4
76
+ refetchInterval: isDocumentVisible ? 1e4 : false
61
77
  });
62
78
  const cronQuery = useQuery({
63
79
  queryKey: ["dashboard", "crons"],
@@ -65,7 +81,7 @@ function DashboardRoute() {
65
81
  const data = await fetchJson("/api/dashboard/crons");
66
82
  return data.jobs;
67
83
  },
68
- refetchInterval: 1e4
84
+ refetchInterval: isDocumentVisible ? 1e4 : false
69
85
  });
70
86
  const hasError = systemQuery.isError || gatewayQuery.isError || cronQuery.isError;
71
87
  const cpuUsage = systemQuery.data?.cpu ?? 0;
@@ -2,7 +2,7 @@ import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { useState, useRef, useEffect, memo } from "react";
3
3
  import { HugeiconsIcon } from "@hugeicons/react";
4
4
  import { Loading03Icon, ArrowRight01Icon } from "@hugeicons/core-free-icons";
5
- import { a as useLlmSettingsStore, b as getLlmHeaders } from "./_sessionKey-BzM-igv7.js";
5
+ import { a as useLlmSettingsStore, b as getLlmHeaders } from "./_sessionKey-B6iYeyCS.js";
6
6
  import { c as cn } from "./button-CwY2OHFj.js";
7
7
  import "@tanstack/react-router";
8
8
  import "@tanstack/react-query";
@@ -26,7 +26,7 @@ import "remark-gfm";
26
26
  import "./index-BEWnDAH6.js";
27
27
  import "zustand/middleware";
28
28
  import "react-dom";
29
- import "./router-BqPDQeCx.js";
29
+ import "./router-BqLGFd4L.js";
30
30
  import "node:crypto";
31
31
  import "node:fs";
32
32
  import "node:os";
@@ -1,6 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { useEffect } from "react";
3
- import { R as Route } from "./router-BqPDQeCx.js";
3
+ import { R as Route } from "./router-BqLGFd4L.js";
4
4
  import "@tanstack/react-router";
5
5
  import "@tanstack/react-query";
6
6
  import "node:crypto";
@@ -12,7 +12,7 @@ import { execFile, execSync } from "node:child_process";
12
12
  import { promisify } from "node:util";
13
13
  import { readFile, mkdir, writeFile, rename, stat, readdir, rm, realpath, lstat } from "node:fs/promises";
14
14
  import { posix } from "path";
15
- const appCss = "/assets/styles-BNkOWk4R.css";
15
+ const appCss = "/assets/styles-Ce2xZzc4.css";
16
16
  const swRegisterScript = `
17
17
  (() => {
18
18
  // Skip PWA service worker inside Capacitor native shell — they conflict
@@ -354,7 +354,7 @@ const $$splitComponentImporter$6 = () => import("./files-DYdXlQDr.js");
354
354
  const Route$x = createFileRoute("/files")({
355
355
  component: lazyRouteComponent($$splitComponentImporter$6, "component")
356
356
  });
357
- const $$splitComponentImporter$5 = () => import("./dashboard-GCKodTiJ.js");
357
+ const $$splitComponentImporter$5 = () => import("./dashboard-UYRCu_mQ.js");
358
358
  const Route$w = createFileRoute("/dashboard")({
359
359
  component: lazyRouteComponent($$splitComponentImporter$5, "component")
360
360
  });
@@ -370,11 +370,11 @@ const $$splitComponentImporter$2 = () => import("./agents-CmQ4vvXm.js");
370
370
  const Route$t = createFileRoute("/agents")({
371
371
  component: lazyRouteComponent($$splitComponentImporter$2, "component")
372
372
  });
373
- const $$splitComponentImporter$1 = () => import("./index-DCMpnyEo.js");
373
+ const $$splitComponentImporter$1 = () => import("./index-COElhwGA.js");
374
374
  const Route$s = createFileRoute("/")({
375
375
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
376
376
  });
377
- const $$splitComponentImporter = () => import("./_sessionKey-BzM-igv7.js").then((n) => n.$);
377
+ const $$splitComponentImporter = () => import("./_sessionKey-B6iYeyCS.js").then((n) => n.$);
378
378
  const Route$r = createFileRoute("/chat/$sessionKey")({
379
379
  component: lazyRouteComponent($$splitComponentImporter, "component")
380
380
  });
@@ -5,7 +5,7 @@ import { HugeiconsIcon } from "@hugeicons/react";
5
5
  import { Search01Icon, Cancel01Icon, Loading03Icon } from "@hugeicons/core-free-icons";
6
6
  import { D as DialogRoot, a as DialogContent } from "./use-file-explorer-state-s7CS50ho.js";
7
7
  import { useQueryClient } from "@tanstack/react-query";
8
- import { c as chatQueryKeys } from "./_sessionKey-BzM-igv7.js";
8
+ import { c as chatQueryKeys } from "./_sessionKey-B6iYeyCS.js";
9
9
  import { c as cn } from "./button-CwY2OHFj.js";
10
10
  import "@base-ui/react/dialog";
11
11
  import "zustand";
@@ -26,7 +26,7 @@ import "remark-gfm";
26
26
  import "./index-BEWnDAH6.js";
27
27
  import "zustand/middleware";
28
28
  import "react-dom";
29
- import "./router-BqPDQeCx.js";
29
+ import "./router-BqLGFd4L.js";
30
30
  import "node:crypto";
31
31
  import "node:fs";
32
32
  import "node:os";
@@ -8,7 +8,7 @@ import { D as DialogRoot, a as DialogContent, b as DialogTitle, c as DialogDescr
8
8
  import { S as Switch } from "./switch-BbkUeVDV.js";
9
9
  import { T as Tabs, a as TabsList, b as TabsTab } from "./tabs-DDFZob0m.js";
10
10
  import { u as useChatSettings } from "./index-BEWnDAH6.js";
11
- import { u as useLlmSettings, g as getLlmProviderDefaults } from "./_sessionKey-BzM-igv7.js";
11
+ import { u as useLlmSettings, g as getLlmProviderDefaults } from "./_sessionKey-B6iYeyCS.js";
12
12
  import "@base-ui/react/merge-props";
13
13
  import "@base-ui/react/use-render";
14
14
  import "class-variance-authority";
@@ -35,7 +35,7 @@ import "react-markdown";
35
35
  import "remark-breaks";
36
36
  import "remark-gfm";
37
37
  import "react-dom";
38
- import "./router-BqPDQeCx.js";
38
+ import "./router-BqLGFd4L.js";
39
39
  import "node:crypto";
40
40
  import "node:fs";
41
41
  import "node:os";
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { useState, useEffect } from "react";
3
- import { C as Collapsible, d as CollapsibleTrigger, e as CollapsiblePanel } from "./_sessionKey-BzM-igv7.js";
3
+ import { C as Collapsible, d as CollapsibleTrigger, e as CollapsiblePanel } from "./_sessionKey-B6iYeyCS.js";
4
4
  import { HugeiconsIcon } from "@hugeicons/react";
5
5
  import { ArrowDown01Icon } from "@hugeicons/core-free-icons";
6
6
  import { B as Button } from "./button-CwY2OHFj.js";
@@ -26,7 +26,7 @@ import "remark-gfm";
26
26
  import "./index-BEWnDAH6.js";
27
27
  import "zustand/middleware";
28
28
  import "react-dom";
29
- import "./router-BqPDQeCx.js";
29
+ import "./router-BqLGFd4L.js";
30
30
  import "node:crypto";
31
31
  import "node:fs";
32
32
  import "node:os";
@@ -184,11 +184,19 @@ 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-Bfnqdswf.js");
187
+ const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-C9chPgNH.js");
188
188
  const startManifest = tsrStartManifest();
189
189
  const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
190
190
  rootRoute.assets = rootRoute.assets || [];
191
- let injectedHeadScripts;
191
+ let script = `import('${startManifest.clientEntry}')`;
192
+ rootRoute.assets.push({
193
+ tag: "script",
194
+ attrs: {
195
+ type: "module",
196
+ async: true
197
+ },
198
+ children: script
199
+ });
192
200
  const manifest2 = {
193
201
  routes: Object.fromEntries(
194
202
  Object.entries(startManifest.routes).flatMap(([k, v]) => {
@@ -209,11 +217,7 @@ async function getStartManifest(matchedRoutes) {
209
217
  })
210
218
  )
211
219
  };
212
- return {
213
- manifest: manifest2,
214
- clientEntry: startManifest.clientEntry,
215
- injectedHeadScripts
216
- };
220
+ return manifest2;
217
221
  }
218
222
  const textEncoder$1 = new TextEncoder();
219
223
  const EMPTY_PAYLOAD = new Uint8Array(0);
@@ -371,6 +375,10 @@ const handleServerAction = async ({
371
375
  context,
372
376
  serverFnId
373
377
  }) => {
378
+ const controller = new AbortController();
379
+ const signal = controller.signal;
380
+ const abort = () => controller.abort();
381
+ request.signal.addEventListener("abort", abort);
374
382
  const method = request.method;
375
383
  const methodUpper = method.toUpperCase();
376
384
  const methodLower = method.toLowerCase();
@@ -438,17 +446,17 @@ const handleServerAction = async ({
438
446
  }
439
447
  if (rawStreams.size > 0) {
440
448
  const jsonStream = new ReadableStream({
441
- start(controller) {
449
+ start(controller2) {
442
450
  callbacks.onParse = (value) => {
443
- controller.enqueue(JSON.stringify(value) + "\n");
451
+ controller2.enqueue(JSON.stringify(value) + "\n");
444
452
  };
445
453
  callbacks.onDone = () => {
446
454
  try {
447
- controller.close();
455
+ controller2.close();
448
456
  } catch {
449
457
  }
450
458
  };
451
- callbacks.onError = (error) => controller.error(error);
459
+ callbacks.onError = (error) => controller2.error(error);
452
460
  if (nonStreamingBody !== void 0) {
453
461
  callbacks.onParse(nonStreamingBody);
454
462
  }
@@ -468,18 +476,18 @@ const handleServerAction = async ({
468
476
  });
469
477
  }
470
478
  const stream = new ReadableStream({
471
- start(controller) {
472
- callbacks.onParse = (value) => controller.enqueue(
479
+ start(controller2) {
480
+ callbacks.onParse = (value) => controller2.enqueue(
473
481
  textEncoder.encode(JSON.stringify(value) + "\n")
474
482
  );
475
483
  callbacks.onDone = () => {
476
484
  try {
477
- controller.close();
485
+ controller2.close();
478
486
  } catch (error) {
479
- controller.error(error);
487
+ controller2.error(error);
480
488
  }
481
489
  };
482
- callbacks.onError = (error) => controller.error(error);
490
+ callbacks.onError = (error) => controller2.error(error);
483
491
  if (nonStreamingBody !== void 0) {
484
492
  callbacks.onParse(nonStreamingBody);
485
493
  }
@@ -531,7 +539,7 @@ const handleServerAction = async ({
531
539
  if (false) ;
532
540
  }
533
541
  }
534
- return await action(params);
542
+ return await action(params, signal);
535
543
  }
536
544
  if (methodLower === "get") {
537
545
  const payloadParam = url.searchParams.get("payload");
@@ -541,7 +549,7 @@ const handleServerAction = async ({
541
549
  const payload2 = payloadParam ? parsePayload(JSON.parse(payloadParam)) : {};
542
550
  payload2.context = safeObjectMerge(context, payload2.context);
543
551
  payload2.method = methodUpper;
544
- return await action(payload2);
552
+ return await action(payload2, signal);
545
553
  }
546
554
  if (methodLower !== "post") {
547
555
  throw new Error("expected POST method");
@@ -553,7 +561,7 @@ const handleServerAction = async ({
553
561
  const payload = jsonPayload ? parsePayload(jsonPayload) : {};
554
562
  payload.context = safeObjectMerge(payload.context, context);
555
563
  payload.method = methodUpper;
556
- return await action(payload);
564
+ return await action(payload, signal);
557
565
  })();
558
566
  const unwrapped = res.result || res.error;
559
567
  if (isNotFound(res)) {
@@ -601,6 +609,7 @@ const handleServerAction = async ({
601
609
  });
602
610
  }
603
611
  })();
612
+ request.signal.removeEventListener("abort", abort);
604
613
  return response;
605
614
  };
606
615
  function isNotFoundResponse(error) {
@@ -613,111 +622,6 @@ function isNotFoundResponse(error) {
613
622
  }
614
623
  });
615
624
  }
616
- function resolveTransformConfig(transform) {
617
- if (typeof transform === "string") {
618
- const prefix = transform;
619
- return {
620
- type: "transform",
621
- transformFn: ({ url }) => `${prefix}${url}`,
622
- cache: true
623
- };
624
- }
625
- if (typeof transform === "function") {
626
- return {
627
- type: "transform",
628
- transformFn: transform,
629
- cache: true
630
- };
631
- }
632
- if ("createTransform" in transform && transform.createTransform) {
633
- return {
634
- type: "createTransform",
635
- createTransform: transform.createTransform,
636
- cache: transform.cache !== false
637
- };
638
- }
639
- const transformFn = typeof transform.transform === "string" ? (({ url }) => `${transform.transform}${url}`) : transform.transform;
640
- return {
641
- type: "transform",
642
- transformFn,
643
- cache: transform.cache !== false
644
- };
645
- }
646
- function buildClientEntryScriptTag(clientEntry, injectedHeadScripts) {
647
- const clientEntryLiteral = JSON.stringify(clientEntry);
648
- let script = `import(${clientEntryLiteral})`;
649
- if (injectedHeadScripts) {
650
- script = `${injectedHeadScripts};${script}`;
651
- }
652
- return {
653
- tag: "script",
654
- attrs: {
655
- type: "module",
656
- async: true
657
- },
658
- children: script
659
- };
660
- }
661
- function transformManifestUrls(source, transformFn, opts) {
662
- return (async () => {
663
- const manifest2 = opts?.clone ? structuredClone(source.manifest) : source.manifest;
664
- for (const route of Object.values(manifest2.routes)) {
665
- if (route.preloads) {
666
- route.preloads = await Promise.all(
667
- route.preloads.map(
668
- (url) => Promise.resolve(transformFn({ url, type: "modulepreload" }))
669
- )
670
- );
671
- }
672
- if (route.assets) {
673
- for (const asset of route.assets) {
674
- if (asset.tag === "link" && asset.attrs?.href) {
675
- asset.attrs.href = await Promise.resolve(
676
- transformFn({
677
- url: asset.attrs.href,
678
- type: "stylesheet"
679
- })
680
- );
681
- }
682
- }
683
- }
684
- }
685
- const transformedClientEntry = await Promise.resolve(
686
- transformFn({
687
- url: source.clientEntry,
688
- type: "clientEntry"
689
- })
690
- );
691
- const rootRoute = manifest2.routes[rootRouteId];
692
- if (rootRoute) {
693
- rootRoute.assets = rootRoute.assets || [];
694
- rootRoute.assets.push(
695
- buildClientEntryScriptTag(
696
- transformedClientEntry,
697
- source.injectedHeadScripts
698
- )
699
- );
700
- }
701
- return manifest2;
702
- })();
703
- }
704
- function buildManifestWithClientEntry(source) {
705
- const scriptTag = buildClientEntryScriptTag(
706
- source.clientEntry,
707
- source.injectedHeadScripts
708
- );
709
- const baseRootRoute = source.manifest.routes[rootRouteId];
710
- const routes = {
711
- ...source.manifest.routes,
712
- ...baseRootRoute ? {
713
- [rootRouteId]: {
714
- ...baseRootRoute,
715
- assets: [...baseRootRoute.assets || [], scriptTag]
716
- }
717
- } : {}
718
- };
719
- return { routes };
720
- }
721
625
  const HEADERS = {
722
626
  TSS_SHELL: "X-TSS_SHELL"
723
627
  };
@@ -750,10 +654,9 @@ function getStartResponseHeaders(opts) {
750
654
  return headers;
751
655
  }
752
656
  let entriesPromise;
753
- let baseManifestPromise;
754
- let cachedFinalManifestPromise;
657
+ let manifestPromise;
755
658
  async function loadEntries() {
756
- const routerEntry = await import("./assets/router-BqPDQeCx.js").then((n) => n.r);
659
+ const routerEntry = await import("./assets/router-BqLGFd4L.js").then((n) => n.r);
757
660
  const startEntry = await import("./assets/start-HYkvq4Ni.js");
758
661
  return { startEntry, routerEntry };
759
662
  }
@@ -763,24 +666,11 @@ function getEntries() {
763
666
  }
764
667
  return entriesPromise;
765
668
  }
766
- function getBaseManifest(matchedRoutes) {
767
- if (!baseManifestPromise) {
768
- baseManifestPromise = getStartManifest();
669
+ function getManifest(matchedRoutes) {
670
+ if (!manifestPromise) {
671
+ manifestPromise = getStartManifest();
769
672
  }
770
- return baseManifestPromise;
771
- }
772
- async function resolveManifest(matchedRoutes, transformFn, cache) {
773
- const base = await getBaseManifest();
774
- const computeFinalManifest = async () => {
775
- return transformFn ? await transformManifestUrls(base, transformFn, { clone: !cache }) : buildManifestWithClientEntry(base);
776
- };
777
- if (!transformFn || cache) {
778
- if (!cachedFinalManifestPromise) {
779
- cachedFinalManifestPromise = computeFinalManifest();
780
- }
781
- return cachedFinalManifestPromise;
782
- }
783
- return computeFinalManifest();
673
+ return manifestPromise;
784
674
  }
785
675
  const ROUTER_BASEPATH = "/";
786
676
  const SERVER_FN_BASE = "/_serverFn/";
@@ -854,52 +744,14 @@ function handlerToMiddleware(handler, mayDefer = false) {
854
744
  return response;
855
745
  };
856
746
  }
857
- function createStartHandler(cbOrOptions) {
858
- const cb = typeof cbOrOptions === "function" ? cbOrOptions : cbOrOptions.handler;
859
- const transformAssetUrlsOption = typeof cbOrOptions === "function" ? void 0 : cbOrOptions.transformAssetUrls;
860
- const warmupTransformManifest = !!transformAssetUrlsOption && typeof transformAssetUrlsOption === "object" && transformAssetUrlsOption.warmup === true;
861
- const resolvedTransformConfig = transformAssetUrlsOption ? resolveTransformConfig(transformAssetUrlsOption) : void 0;
862
- const cache = resolvedTransformConfig ? resolvedTransformConfig.cache : true;
863
- let cachedCreateTransformPromise;
864
- const getTransformFn = async (opts) => {
865
- if (!resolvedTransformConfig) return void 0;
866
- if (resolvedTransformConfig.type === "createTransform") {
867
- if (cache) {
868
- if (!cachedCreateTransformPromise) {
869
- cachedCreateTransformPromise = Promise.resolve(
870
- resolvedTransformConfig.createTransform(opts)
871
- );
872
- }
873
- return cachedCreateTransformPromise;
874
- }
875
- return resolvedTransformConfig.createTransform(opts);
876
- }
877
- return resolvedTransformConfig.transformFn;
878
- };
879
- if (warmupTransformManifest && cache && true && !cachedFinalManifestPromise) {
880
- const warmupPromise = (async () => {
881
- const base = await getBaseManifest();
882
- const transformFn = await getTransformFn({ warmup: true });
883
- return transformFn ? await transformManifestUrls(base, transformFn, { clone: false }) : buildManifestWithClientEntry(base);
884
- })();
885
- cachedFinalManifestPromise = warmupPromise;
886
- warmupPromise.catch(() => {
887
- if (cachedFinalManifestPromise === warmupPromise) {
888
- cachedFinalManifestPromise = void 0;
889
- }
890
- cachedCreateTransformPromise = void 0;
891
- });
892
- }
747
+ function createStartHandler(cb) {
893
748
  const startRequestResolver = async (request, requestOpts) => {
894
749
  let router = null;
895
750
  let cbWillCleanup = false;
896
751
  try {
897
- const { url, handledProtocolRelativeURL } = getNormalizedURL(request.url);
752
+ const url = getNormalizedURL(request.url);
898
753
  const href = url.pathname + url.search + url.hash;
899
754
  const origin = getOrigin(request);
900
- if (handledProtocolRelativeURL) {
901
- return Response.redirect(url, 308);
902
- }
903
755
  const entries = await getEntries();
904
756
  const startOptions = await entries.startEntry.startInstance?.getOptions() || {};
905
757
  const serializationAdapters = [
@@ -966,7 +818,6 @@ function createStartHandler(cbOrOptions) {
966
818
  );
967
819
  const ctx2 = await executeMiddleware([...middlewares2, serverFnHandler], {
968
820
  request,
969
- pathname: url.pathname,
970
821
  context: createNullProtoObject(requestOpts?.context)
971
822
  });
972
823
  return handleRedirectResponse(ctx2.response, request, getRouter);
@@ -984,11 +835,7 @@ function createStartHandler(cbOrOptions) {
984
835
  { status: 500 }
985
836
  );
986
837
  }
987
- const manifest2 = await resolveManifest(
988
- matchedRoutes,
989
- await getTransformFn({ warmup: false, request }),
990
- cache
991
- );
838
+ const manifest2 = await getManifest(matchedRoutes);
992
839
  const routerInstance = await getRouter();
993
840
  attachRouterServerSsrUtils({
994
841
  router: routerInstance,
@@ -1043,11 +890,7 @@ function createStartHandler(cbOrOptions) {
1043
890
  );
1044
891
  const ctx = await executeMiddleware(
1045
892
  [...middlewares, requestHandlerMiddleware],
1046
- {
1047
- request,
1048
- pathname: url.pathname,
1049
- context: createNullProtoObject(requestOpts?.context)
1050
- }
893
+ { request, context: createNullProtoObject(requestOpts?.context) }
1051
894
  );
1052
895
  return handleRedirectResponse(ctx.response, request, getRouter);
1053
896
  } finally {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencami",
3
- "version": "1.8.7",
3
+ "version": "1.8.9",
4
4
  "type": "module",
5
5
  "description": "OpenCami - A beautiful web client for OpenClaw",
6
6
  "bin": {
@@ -11,7 +11,7 @@
11
11
  "dist/"
12
12
  ],
13
13
  "scripts": {
14
- "dev": "vite dev --port 3002",
14
+ "dev": "vite dev --port 3003",
15
15
  "build": "vite build",
16
16
  "preview": "vite preview",
17
17
  "test": "vitest run",
@@ -54,8 +54,6 @@
54
54
  "@tailwindcss/vite": "^4.1.18",
55
55
  "@tanstack/react-query": "^5.84.1",
56
56
  "@tanstack/react-router": "^1.132.0",
57
- "@tanstack/react-router-devtools": "^1.132.0",
58
- "@tanstack/react-router-ssr-query": "^1.131.7",
59
57
  "@tanstack/react-start": "^1.132.0",
60
58
  "@tanstack/router-plugin": "^1.132.0",
61
59
  "class-variance-authority": "^0.7.1",
@@ -94,8 +92,6 @@
94
92
  "sharp": "^0.34.5",
95
93
  "typescript": "^5.7.2",
96
94
  "vite": "^7.1.7",
97
- "vite-plugin-pwa": "^1.2.0",
98
- "vitest": "^3.0.5",
99
- "web-vitals": "^5.1.0"
95
+ "vitest": "^3.0.5"
100
96
  }
101
97
  }