@rubytech/create-realagent 1.0.650 → 1.0.652

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 (76) hide show
  1. package/dist/index.js +115 -6
  2. package/dist/pinned-binaries.js +43 -0
  3. package/package.json +1 -1
  4. package/payload/platform/lib/graph-trash/dist/index.d.ts +91 -0
  5. package/payload/platform/lib/graph-trash/dist/index.d.ts.map +1 -0
  6. package/payload/platform/lib/graph-trash/dist/index.js +238 -0
  7. package/payload/platform/lib/graph-trash/dist/index.js.map +1 -0
  8. package/payload/platform/lib/graph-trash/src/index.ts +360 -0
  9. package/payload/platform/lib/graph-trash/tsconfig.json +8 -0
  10. package/payload/platform/neo4j/schema.cypher +19 -0
  11. package/payload/platform/package.json +2 -2
  12. package/payload/platform/plugins/cloudflare/scripts/list-cf-domains.ts +42 -5
  13. package/payload/platform/plugins/contacts/mcp/dist/index.js +9 -4
  14. package/payload/platform/plugins/contacts/mcp/dist/index.js.map +1 -1
  15. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-delete.d.ts +16 -1
  16. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-delete.d.ts.map +1 -1
  17. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-delete.js +23 -10
  18. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-delete.js.map +1 -1
  19. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.d.ts.map +1 -1
  20. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.js +2 -1
  21. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.js.map +1 -1
  22. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.d.ts.map +1 -1
  23. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.js +8 -4
  24. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.js.map +1 -1
  25. package/payload/platform/plugins/docs/references/deployment.md +1 -1
  26. package/payload/platform/plugins/docs/references/troubleshooting.md +27 -0
  27. package/payload/platform/plugins/memory/PLUGIN.md +4 -2
  28. package/payload/platform/plugins/memory/mcp/dist/index.js +92 -28
  29. package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
  30. package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.d.ts +30 -15
  31. package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.d.ts.map +1 -1
  32. package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.js +46 -84
  33. package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.js.map +1 -1
  34. package/payload/platform/plugins/memory/mcp/dist/tools/memory-empty-trash.d.ts +22 -0
  35. package/payload/platform/plugins/memory/mcp/dist/tools/memory-empty-trash.d.ts.map +1 -0
  36. package/payload/platform/plugins/memory/mcp/dist/tools/memory-empty-trash.js +36 -0
  37. package/payload/platform/plugins/memory/mcp/dist/tools/memory-empty-trash.js.map +1 -0
  38. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts.map +1 -1
  39. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js +16 -0
  40. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js.map +1 -1
  41. package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.d.ts +2 -0
  42. package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.d.ts.map +1 -1
  43. package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.js +42 -3
  44. package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.js.map +1 -1
  45. package/payload/platform/plugins/memory/mcp/dist/tools/memory-restore.d.ts +24 -0
  46. package/payload/platform/plugins/memory/mcp/dist/tools/memory-restore.d.ts.map +1 -0
  47. package/payload/platform/plugins/memory/mcp/dist/tools/memory-restore.js +40 -0
  48. package/payload/platform/plugins/memory/mcp/dist/tools/memory-restore.js.map +1 -0
  49. package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.d.ts.map +1 -1
  50. package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js +35 -10
  51. package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js.map +1 -1
  52. package/payload/platform/plugins/memory/references/graph-primitives.md +49 -3
  53. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +4 -0
  54. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
  55. package/payload/platform/scripts/lib/resolve-account-dir.sh +166 -0
  56. package/payload/platform/scripts/seed-neo4j.sh +7 -11
  57. package/payload/platform/templates/systemd/maxy-ttyd.service +6 -1
  58. package/payload/server/public/assets/{admin-S2KHPNe4.js → admin-DQxieG3v.js} +1 -1
  59. package/payload/server/public/assets/data-CAKMrPTQ.js +1 -0
  60. package/payload/server/public/assets/{file-CRrDfnO1.js → file-dBmvpAuH.js} +1 -1
  61. package/payload/server/public/assets/{graph-CSBMZGGe.js → graph-3snSy3WW.js} +2 -2
  62. package/payload/server/public/assets/{house-D1CBraxB.js → house-IMEjNkQf.js} +1 -1
  63. package/payload/server/public/assets/{jsx-runtime-CZtLX8NN.css → jsx-runtime-BJhXEiL3.css} +1 -1
  64. package/payload/server/public/assets/{public-ukz9-gSe.js → public-b43rEAhq.js} +1 -1
  65. package/payload/server/public/assets/{share-2-DkF8neDM.js → share-2-ARoCxH5K.js} +1 -1
  66. package/payload/server/public/assets/{trash-2-Dde58AAR.js → trash-2-D_Rm8z21.js} +1 -1
  67. package/payload/server/public/assets/{useVoiceRecorder-Hz9X6luB.js → useVoiceRecorder-Cw8gxj1L.js} +1 -1
  68. package/payload/server/public/assets/x-CFPIrGuL.js +1 -0
  69. package/payload/server/public/data.html +7 -7
  70. package/payload/server/public/graph.html +6 -6
  71. package/payload/server/public/index.html +8 -8
  72. package/payload/server/public/public.html +5 -5
  73. package/payload/server/server.js +19 -0
  74. package/payload/server/public/assets/data-BajF3t1i.js +0 -1
  75. package/payload/server/public/assets/x-D52qhSya.js +0 -1
  76. /package/payload/server/public/assets/{jsx-runtime-Cb-WunFZ.js → jsx-runtime-CXoJCO3U.js} +0 -0
@@ -5,14 +5,14 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Data — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/data-BajF3t1i.js"></script>
8
+ <script type="module" crossorigin src="/assets/data-CAKMrPTQ.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-DD-I1_y5.js">
10
- <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-Cb-WunFZ.js">
11
- <link rel="modulepreload" crossorigin href="/assets/share-2-DkF8neDM.js">
12
- <link rel="modulepreload" crossorigin href="/assets/file-CRrDfnO1.js">
13
- <link rel="modulepreload" crossorigin href="/assets/house-D1CBraxB.js">
14
- <link rel="modulepreload" crossorigin href="/assets/trash-2-Dde58AAR.js">
15
- <link rel="stylesheet" crossorigin href="/assets/jsx-runtime-CZtLX8NN.css">
10
+ <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-CXoJCO3U.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/share-2-ARoCxH5K.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/file-dBmvpAuH.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/house-IMEjNkQf.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/trash-2-D_Rm8z21.js">
15
+ <link rel="stylesheet" crossorigin href="/assets/jsx-runtime-BJhXEiL3.css">
16
16
  </head>
17
17
  <body>
18
18
  <div id="root"></div>
@@ -5,13 +5,13 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Graph — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/graph-CSBMZGGe.js"></script>
8
+ <script type="module" crossorigin src="/assets/graph-3snSy3WW.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-DD-I1_y5.js">
10
- <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-Cb-WunFZ.js">
11
- <link rel="modulepreload" crossorigin href="/assets/share-2-DkF8neDM.js">
12
- <link rel="modulepreload" crossorigin href="/assets/house-D1CBraxB.js">
13
- <link rel="modulepreload" crossorigin href="/assets/x-D52qhSya.js">
14
- <link rel="stylesheet" crossorigin href="/assets/jsx-runtime-CZtLX8NN.css">
10
+ <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-CXoJCO3U.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/share-2-ARoCxH5K.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/house-IMEjNkQf.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/x-CFPIrGuL.js">
14
+ <link rel="stylesheet" crossorigin href="/assets/jsx-runtime-BJhXEiL3.css">
15
15
  </head>
16
16
  <body>
17
17
  <div id="root"></div>
@@ -5,16 +5,16 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Real Agent</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/admin-S2KHPNe4.js"></script>
8
+ <script type="module" crossorigin src="/assets/admin-DQxieG3v.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-DD-I1_y5.js">
10
- <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-Cb-WunFZ.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-CXoJCO3U.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-BEFjQwLd.js">
12
- <link rel="modulepreload" crossorigin href="/assets/trash-2-Dde58AAR.js">
13
- <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-Hz9X6luB.js">
14
- <link rel="modulepreload" crossorigin href="/assets/share-2-DkF8neDM.js">
15
- <link rel="modulepreload" crossorigin href="/assets/file-CRrDfnO1.js">
16
- <link rel="modulepreload" crossorigin href="/assets/x-D52qhSya.js">
17
- <link rel="stylesheet" crossorigin href="/assets/jsx-runtime-CZtLX8NN.css">
12
+ <link rel="modulepreload" crossorigin href="/assets/trash-2-D_Rm8z21.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-Cw8gxj1L.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/share-2-ARoCxH5K.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/file-dBmvpAuH.js">
16
+ <link rel="modulepreload" crossorigin href="/assets/x-CFPIrGuL.js">
17
+ <link rel="stylesheet" crossorigin href="/assets/jsx-runtime-BJhXEiL3.css">
18
18
  <link rel="stylesheet" crossorigin href="/assets/admin-kHJ-D0s7.css">
19
19
  <link rel="stylesheet" href="/brand-defaults.css">
20
20
  </head>
@@ -5,13 +5,13 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Real Agent</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/public-ukz9-gSe.js"></script>
8
+ <script type="module" crossorigin src="/assets/public-b43rEAhq.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-DD-I1_y5.js">
10
- <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-Cb-WunFZ.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-CXoJCO3U.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-BEFjQwLd.js">
12
- <link rel="modulepreload" crossorigin href="/assets/trash-2-Dde58AAR.js">
13
- <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-Hz9X6luB.js">
14
- <link rel="stylesheet" crossorigin href="/assets/jsx-runtime-CZtLX8NN.css">
12
+ <link rel="modulepreload" crossorigin href="/assets/trash-2-D_Rm8z21.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-Cw8gxj1L.js">
14
+ <link rel="stylesheet" crossorigin href="/assets/jsx-runtime-BJhXEiL3.css">
15
15
  <link rel="stylesheet" href="/brand-defaults.css">
16
16
  </head>
17
17
  <body>
@@ -2893,6 +2893,7 @@ var serveStatic = (options = { root: "" }) => {
2893
2893
 
2894
2894
  // server/index.ts
2895
2895
  import { readFileSync as readFileSync25, existsSync as existsSync24, watchFile } from "fs";
2896
+ import { createConnection as createConnection5 } from "net";
2896
2897
  import { resolve as resolve29, join as join13, basename as basename7 } from "path";
2897
2898
  import { homedir as homedir5 } from "os";
2898
2899
 
@@ -14823,6 +14824,7 @@ app.get("/", async (c) => {
14823
14824
  }
14824
14825
  const claudeAuthenticated = authHealth.status === "ok" || authHealth.status === "expiring";
14825
14826
  const vncRunning = await checkPort(6080);
14827
+ const terminalReady = await checkPort(7681, 200);
14826
14828
  let apiKeyConfigured = false;
14827
14829
  try {
14828
14830
  apiKeyConfigured = existsSync11(keyFilePath());
@@ -14866,6 +14868,7 @@ app.get("/", async (c) => {
14866
14868
  claude_authenticated: claudeAuthenticated,
14867
14869
  ...onboardingComplete !== void 0 && { onboarding_complete: onboardingComplete },
14868
14870
  vnc_running: vncRunning,
14871
+ terminal_ready: terminalReady,
14869
14872
  browser_transport: browserTransport,
14870
14873
  auth_status: authHealth.status,
14871
14874
  auth_expires_at: authHealth.expiresAt ?? null,
@@ -20911,6 +20914,22 @@ attachTerminalWsProxy(httpServer, {
20911
20914
  upstreamPort: 7681
20912
20915
  });
20913
20916
  console.log(`${BRAND.productName} listening on http://${hostname}:${port}`);
20917
+ setTimeout(() => {
20918
+ const socket = createConnection5(7681, "127.0.0.1");
20919
+ socket.setTimeout(500);
20920
+ socket.once("connect", () => {
20921
+ socket.destroy();
20922
+ console.log("[ttyd] upstream ready on 127.0.0.1:7681");
20923
+ });
20924
+ socket.once("error", (err) => {
20925
+ socket.destroy();
20926
+ console.error(`[ttyd] upstream NOT reachable on 127.0.0.1:7681 \u2014 admin terminal will be unavailable. Check 'sudo systemctl --user status maxy-ttyd' and /usr/local/bin/ttyd. (${err.message})`);
20927
+ });
20928
+ socket.once("timeout", () => {
20929
+ socket.destroy();
20930
+ console.error("[ttyd] upstream NOT reachable on 127.0.0.1:7681 (timeout) \u2014 admin terminal will be unavailable. Check 'sudo systemctl --user status maxy-ttyd'.");
20931
+ });
20932
+ }, 5e3);
20914
20933
  var SUBAPP_MANIFEST = [
20915
20934
  { prefix: "/api/health", file: "server/routes/health.ts", subapp: health_default },
20916
20935
  { prefix: "/api/session", file: "server/routes/session.ts", subapp: session_default },
@@ -1 +0,0 @@
1
- import{o as e}from"./chunk-DD-I1_y5.js";import{a as t,n,r,t as i}from"./jsx-runtime-Cb-WunFZ.js";import{a,i as o,n as s,o as c,r as l,t as u}from"./share-2-DkF8neDM.js";import{n as d,t as f}from"./file-CRrDfnO1.js";import{t as p}from"./house-D1CBraxB.js";import{t as m}from"./trash-2-Dde58AAR.js";var h=n(`circle-arrow-up`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m16 12-4-4-4 4`,key:`177agl`}],[`path`,{d:`M12 16V8`,key:`1sbj14`}]]),g=n(`folder`,[[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`,key:`1kt360`}]]),_=n(`upload`,[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]),v=r(),y=e(t(),1),b=i();function x(){let[e,t]=(0,y.useState)(null),[n,r]=(0,y.useState)(!1);return(0,y.useEffect)(()=>{try{t(sessionStorage.getItem(`maxy-admin-session-key`))}catch{t(null)}r(!0)},[]),n?e?(0,b.jsxs)(`div`,{className:`data-page`,children:[(0,b.jsxs)(`header`,{className:`data-header`,children:[(0,b.jsxs)(`h1`,{className:`data-title`,children:[(0,b.jsx)(c,{size:18}),` Data`]}),(0,b.jsx)(S,{})]}),(0,b.jsxs)(`main`,{className:`data-main`,children:[(0,b.jsx)(C,{sessionKey:e}),(0,b.jsx)(O,{sessionKey:e})]})]}):(0,b.jsxs)(`div`,{className:`data-page`,children:[(0,b.jsx)(`header`,{className:`data-header`,children:(0,b.jsxs)(`h1`,{className:`data-title`,children:[(0,b.jsx)(c,{size:18}),` Data`]})}),(0,b.jsxs)(`div`,{className:`data-empty`,children:[(0,b.jsx)(`p`,{children:`You are not signed in.`}),(0,b.jsxs)(`p`,{children:[`Open the `,(0,b.jsx)(`a`,{href:`/`,className:`data-link`,children:`main admin page`}),` and log in, then return here.`]})]})]}):(0,b.jsx)(`div`,{className:`data-page`,children:(0,b.jsxs)(`div`,{className:`data-loading`,children:[(0,b.jsx)(a,{size:18,className:`spin`}),` Loading…`]})})}function S(){let[e,t]=(0,y.useState)(!1),n=(0,y.useRef)(null);(0,y.useEffect)(()=>{if(!e)return;let r=e=>{n.current&&(n.current.contains(e.target)||t(!1))},i=e=>{e.key===`Escape`&&t(!1)};return document.addEventListener(`mousedown`,r),document.addEventListener(`keydown`,i),()=>{document.removeEventListener(`mousedown`,r),document.removeEventListener(`keydown`,i)}},[e]);let r=(0,y.useCallback)(()=>{try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}window.location.href=`/`},[]);return(0,b.jsxs)(`div`,{className:`chat-burger-wrap`,ref:n,children:[(0,b.jsx)(`button`,{type:`button`,className:`chat-burger`,onClick:()=>t(e=>!e),"aria-label":`Menu`,"aria-haspopup":`true`,"aria-expanded":e,children:(0,b.jsx)(l,{size:20})}),e&&(0,b.jsxs)(`div`,{className:`chat-menu`,children:[(0,b.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,onClick:()=>{t(!1),window.location.href=`/`},children:[(0,b.jsx)(p,{size:14}),` Chat`]}),(0,b.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,onClick:()=>{t(!1),window.location.href=`/graph`},children:[(0,b.jsx)(u,{size:14}),` Graph`]}),(0,b.jsx)(`div`,{className:`chat-menu-divider`}),(0,b.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,onClick:()=>{t(!1),r()},children:[(0,b.jsx)(o,{size:14}),` Log out`]})]})]})}function C({sessionKey:e}){let[t,n]=(0,y.useState)(``),[r,i]=(0,y.useState)(``),[o,c]=(0,y.useState)(null),[l,u]=(0,y.useState)(!1),[d,f]=(0,y.useState)(null);return(0,y.useEffect)(()=>{let e=t.trim();if(!e){i(``),c(null);return}let n=setTimeout(()=>i(e),300);return()=>clearTimeout(n)},[t]),(0,y.useEffect)(()=>{if(!r)return;let t=!1;u(!0),f(null);let n=`/api/admin/graph-search?session_key=${encodeURIComponent(e)}&q=${encodeURIComponent(r)}&limit=20`;return fetch(n).then(async e=>{let t=await e.json().catch(()=>({error:`HTTP ${e.status}`}));if(!e.ok)throw Error(t.error??`HTTP ${e.status}`);return t}).then(e=>{t||c(e.results)}).catch(e=>{t||f(e instanceof Error?e.message:String(e))}).finally(()=>{t||u(!1)}),()=>{t=!0}},[r,e]),(0,b.jsxs)(`section`,{className:`data-panel`,children:[(0,b.jsx)(`h2`,{className:`data-panel-title`,children:`Search`}),(0,b.jsx)(`p`,{className:`data-panel-subtitle`,children:`Find anything in your knowledge base by keyword.`}),(0,b.jsxs)(`div`,{className:`data-search-input`,children:[(0,b.jsx)(s,{size:14}),(0,b.jsx)(`input`,{type:`text`,placeholder:`Search your knowledge…`,value:t,onChange:e=>n(e.target.value),autoFocus:!0,autoComplete:`off`,spellCheck:!1}),l&&(0,b.jsx)(a,{size:14,className:`spin`})]}),d&&(0,b.jsxs)(`div`,{className:`data-error`,children:[`Search failed: `,d]}),o&&!l&&(0,b.jsxs)(`div`,{className:`data-results-meta`,children:[o.length,` result`,o.length===1?``:`s`]}),o&&o.length===0&&!l&&(0,b.jsx)(`div`,{className:`data-empty-results`,children:`No matches. Try a different keyword.`}),o&&o.length>0&&(0,b.jsx)(`ul`,{className:`data-results`,children:o.map(e=>(0,b.jsx)(w,{hit:e},e.nodeId))})]})}function w({hit:e}){let t=E(e.properties),n=D(e.properties),r=T(e.labels),[i,a]=(0,y.useState)(!1),o=n&&n.length>280,s=i||!o?n:n?.slice(0,280)+`…`;return(0,b.jsxs)(`li`,{className:`data-result`,children:[r&&(0,b.jsx)(`div`,{className:`data-result-header`,children:(0,b.jsx)(`span`,{className:`data-result-labels`,children:r})}),t&&(0,b.jsx)(`div`,{className:`data-result-title`,children:t}),n&&(0,b.jsx)(`pre`,{className:`data-result-body`,children:s}),o&&(0,b.jsx)(`button`,{type:`button`,className:`data-result-toggle`,onClick:()=>a(e=>!e),children:i?`Show less`:`Show more`})]})}function T(e){if(e.length===0)return null;let t=e[0].replace(/([a-z])([A-Z])/g,`$1 $2`);return t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()}function E(e){for(let t of[`title`,`name`,`summary`,`headline`]){let n=e[t];if(typeof n==`string`&&n.length>0)return n.length>140?n.slice(0,140)+`…`:n}return null}function D(e){for(let t of[`content`,`summary`,`body`,`description`,`text`]){let n=e[t];if(typeof n==`string`&&n.length>0)return n}return null}function O({sessionKey:e}){let[t,n]=(0,y.useState)(`.`),[r,i]=(0,y.useState)(null),[o,s]=(0,y.useState)([]),[c,l]=(0,y.useState)(!1),[u,p]=(0,y.useState)(null),[v,x]=(0,y.useState)(!1),[S,C]=(0,y.useState)(null),[w,T]=(0,y.useState)(null),[E,D]=(0,y.useState)(null),O=(0,y.useRef)(null),[j,M]=(0,y.useState)(0);(0,y.useEffect)(()=>{let n=!1;l(!0),p(null);let r=`/api/admin/files?session_key=${encodeURIComponent(e)}&path=${encodeURIComponent(t===`.`?``:t)}`;return fetch(r).then(async e=>{let t=await e.json().catch(()=>({error:`HTTP ${e.status}`}));if(!e.ok)throw Error(t.error??`HTTP ${e.status}`);return t}).then(e=>{n||(i(e.entries),s(e.displayPath??[]))}).catch(e=>{n||(i([]),s([]),p(e instanceof Error?e.message:String(e)))}).finally(()=>{n||l(!1)}),()=>{n=!0}},[e,t,j]);let N=(0,y.useCallback)(e=>{n(e)},[]),P=(0,y.useCallback)(()=>{if(t===`.`||t===``)return;let e=t.split(`/`).filter(Boolean);e.pop(),n(e.length===0?`.`:e.join(`/`))},[t]),F=(0,y.useCallback)(n=>{let r=t===`.`?n.name:`${t}/${n.name}`,i=`/api/admin/files/download?session_key=${encodeURIComponent(e)}&path=${encodeURIComponent(r)}`,a=document.createElement(`a`);a.href=i,a.rel=`noopener noreferrer`,document.body.appendChild(a),a.click(),a.remove()},[t,e]),I=(0,y.useCallback)(()=>{O.current?.click()},[]),L=(0,y.useCallback)(async n=>{let r=n.displayName??n.name;if(!window.confirm(`Delete ${r}?`))return;let i=t===`.`?n.name:`${t}/${n.name}`;T(null),D(n.name);try{let t=`/api/admin/files?session_key=${encodeURIComponent(e)}&path=${encodeURIComponent(i)}`,n=await fetch(t,{method:`DELETE`}),r=await n.json().catch(()=>({error:`HTTP ${n.status}`}));if(!n.ok)throw Error(r.error??`HTTP ${n.status}`);M(e=>e+1)}catch(e){T(e instanceof Error?e.message:String(e))}finally{D(null)}},[t,e]),R=(0,y.useCallback)(async t=>{C(null),x(!0);try{let r=new FormData;r.append(`session_key`,e),r.append(`file`,t);let i=await fetch(`/api/admin/files/upload`,{method:`POST`,body:r}),a=await i.json().catch(()=>({error:`HTTP ${i.status}`}));if(!i.ok)throw Error(a.error??`HTTP ${i.status}`);n(a.path.split(`/`).slice(0,-1).join(`/`)||`.`),M(e=>e+1)}catch(e){C(e instanceof Error?e.message:String(e))}finally{x(!1),O.current&&(O.current.value=``)}},[e]);return(0,b.jsxs)(`section`,{className:`data-panel`,children:[(0,b.jsxs)(`div`,{className:`data-panel-heading`,children:[(0,b.jsx)(`h2`,{className:`data-panel-title`,children:`Files`}),(0,b.jsxs)(`div`,{className:`data-file-actions`,children:[(0,b.jsxs)(`button`,{type:`button`,className:`data-btn`,onClick:I,disabled:v,children:[v?(0,b.jsx)(a,{size:14,className:`spin`}):(0,b.jsx)(_,{size:14}),` Upload`]}),(0,b.jsx)(`input`,{type:`file`,ref:O,hidden:!0,onChange:e=>{let t=e.target.files?.[0];t&&R(t)}})]})]}),(0,b.jsxs)(`p`,{className:`data-panel-subtitle`,children:[`Everything under your install's `,(0,b.jsx)(`code`,{children:`data/`}),` directory. Click a folder to open it, a file to download it. Uploads go to `,(0,b.jsx)(`code`,{children:`data/uploads/`}),`.`]}),(0,b.jsxs)(`div`,{className:`data-breadcrumbs`,children:[(0,b.jsx)(`button`,{type:`button`,className:`data-crumb`,onClick:()=>N(`.`),children:`data`}),o.map((e,t)=>{let n=o.slice(0,t+1).map(e=>e.name).join(`/`);return(0,b.jsxs)(`span`,{className:`data-crumb-wrap`,children:[(0,b.jsx)(`span`,{className:`data-crumb-sep`,children:`/`}),(0,b.jsx)(`button`,{type:`button`,className:`data-crumb`,onClick:()=>N(n),title:e.name,children:e.displayName??e.name})]},n)}),t!==`.`&&(0,b.jsxs)(`button`,{type:`button`,className:`data-btn data-btn-ghost data-up-btn`,onClick:P,children:[(0,b.jsx)(h,{size:14}),` Up`]})]}),S&&(0,b.jsxs)(`div`,{className:`data-error`,children:[`Upload failed: `,S]}),w&&(0,b.jsxs)(`div`,{className:`data-error`,children:[`Delete failed: `,w]}),u&&(0,b.jsx)(`div`,{className:`data-error`,children:u}),c&&(0,b.jsxs)(`div`,{className:`data-loading`,children:[(0,b.jsx)(a,{size:14,className:`spin`}),` Loading…`]}),!c&&r&&r.length===0&&!u&&(0,b.jsx)(`div`,{className:`data-empty-results`,children:`Empty directory.`}),!c&&r&&r.length>0&&(0,b.jsx)(`ul`,{className:`data-entries`,children:r.map(e=>{let n=e.displayName??e.name,r=E===e.name;return(0,b.jsx)(`li`,{className:`data-entry`,children:e.kind===`directory`?(0,b.jsxs)(`button`,{type:`button`,className:`data-entry-btn`,onClick:()=>N(t===`.`?e.name:`${t}/${e.name}`),children:[(0,b.jsx)(g,{size:14}),(0,b.jsx)(`span`,{className:`data-entry-name`,title:e.name,children:n})]}):e.kind===`file`?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)(`button`,{type:`button`,className:`data-entry-btn`,onClick:()=>F(e),title:`Download ${n}`,children:[(0,b.jsx)(f,{size:14}),(0,b.jsx)(`span`,{className:`data-entry-name`,title:e.name,children:n}),(0,b.jsxs)(`span`,{className:`data-entry-meta`,title:`Modified ${A(e.modifiedAt)}`,children:[k(e.sizeBytes),` · `,A(e.modifiedAt)]}),(0,b.jsx)(d,{size:12,className:`data-entry-download-icon`})]}),(0,b.jsx)(`button`,{type:`button`,className:`data-entry-delete`,onClick:()=>L(e),disabled:r,title:`Delete ${n}`,"aria-label":`Delete ${n}`,children:r?(0,b.jsx)(a,{size:14,className:`spin`}):(0,b.jsx)(m,{size:14})})]}):(0,b.jsxs)(`div`,{className:`data-entry-btn data-entry-disabled`,children:[(0,b.jsx)(f,{size:14}),(0,b.jsx)(`span`,{className:`data-entry-name`,children:n}),(0,b.jsx)(`span`,{className:`data-entry-meta`,children:`special`})]})},e.name)})})]})}function k(e){return e==null?``:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/1024/1024).toFixed(1)} MB`:`${(e/1024/1024/1024).toFixed(1)} GB`}function A(e){try{let t=new Date(e);if(isNaN(t.getTime()))return`—`;let n=typeof navigator<`u`?navigator.languages&&navigator.languages.length>0?[...navigator.languages]:[navigator.language]:void 0;return t.toLocaleString(n,{dateStyle:`medium`,timeStyle:`short`})}catch{return`—`}}(0,v.createRoot)(document.getElementById(`root`)).render((0,b.jsx)(x,{}));
@@ -1 +0,0 @@
1
- import{n as e}from"./jsx-runtime-Cb-WunFZ.js";var t=e(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]);export{t};