@rubytech/create-maxy 1.0.712 → 1.0.714

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 (28) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/lib/graph-search/dist/index.d.ts +22 -1
  3. package/payload/platform/lib/graph-search/dist/index.d.ts.map +1 -1
  4. package/payload/platform/lib/graph-search/dist/index.js +69 -39
  5. package/payload/platform/lib/graph-search/dist/index.js.map +1 -1
  6. package/payload/platform/lib/graph-search/src/__tests__/bm25-label-gate.test.ts +88 -0
  7. package/payload/platform/lib/graph-search/src/__tests__/expand-batch.test.ts +206 -0
  8. package/payload/platform/lib/graph-search/src/index.ts +100 -43
  9. package/payload/platform/plugins/docs/references/graph.md +25 -0
  10. package/payload/platform/plugins/docs/references/platform.md +3 -1
  11. package/payload/platform/scripts/check-sdk-oauth.mjs +178 -0
  12. package/payload/server/public/assets/{Checkbox-CjbS9JcG.js → Checkbox-DD2mv2dU.js} +1 -1
  13. package/payload/server/public/assets/{admin-Ce9DbUuu.js → admin-BmuLrDs2.js} +1 -1
  14. package/payload/server/public/assets/{data-C-SxjLC9.js → data-BiexCwhp.js} +1 -1
  15. package/payload/server/public/assets/{file-D4cbAAuo.js → file-CXzgVus7.js} +1 -1
  16. package/payload/server/public/assets/{graph-DJ7IfYHV.js → graph-DOWTWpqy.js} +12 -12
  17. package/payload/server/public/assets/{house-CYsVygEQ.js → house-DuPFyfb8.js} +1 -1
  18. package/payload/server/public/assets/{jsx-runtime-DPXE45W9.css → jsx-runtime-UA_LoTFj.css} +1 -1
  19. package/payload/server/public/assets/{public-BTOF98iO.js → public-Tjx3543Z.js} +1 -1
  20. package/payload/server/public/assets/{share-2-B-sbkB36.js → share-2-C_nKw-UZ.js} +1 -1
  21. package/payload/server/public/assets/{useVoiceRecorder-DLVFx3ms.js → useVoiceRecorder-aDBUrrIb.js} +1 -1
  22. package/payload/server/public/assets/{x-BNidzSAn.js → x-Do7BO9Ow.js} +1 -1
  23. package/payload/server/public/data.html +6 -6
  24. package/payload/server/public/graph.html +7 -7
  25. package/payload/server/public/index.html +8 -8
  26. package/payload/server/public/public.html +5 -5
  27. package/payload/server/server.js +69 -47
  28. /package/payload/server/public/assets/{jsx-runtime-BUs3sHtV.js → jsx-runtime-DV3X_CC7.js} +0 -0
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mermaid.core-C3TZA9fX.js","assets/preload-helper-BEFjQwLd.js","assets/dist-BKbAaes5.js","assets/chunk-DD-I1_y5.js","assets/chunk-U2HBQHQK-BLgNHWFf.js","assets/src-BvrHnOMG.js","assets/chunk-5PVQY5BW-CLNppenz.js","assets/chunk-ICPOFSXX-DEZT2XyQ.js","assets/_baseFor-WfS9pKAn.js","assets/isEmpty-C3Vxk1It.js","assets/chunk-336JU56O-Dszn2qEY.js","assets/chunk-5FUZZQ4R-CXZykYh_.js","assets/chunk-X2U36JSP-DHYLiYqc.js","assets/chunk-ZZ45TVLE-B5dCmOpH.js","assets/rough.esm-HAx67Hnb.js","assets/chunk-ENJZ2VHE-CuXW3Isg.js","assets/line-BhOwLD_o.js","assets/path-YdFzr2W6.js","assets/array-HeX70jSN.js","assets/chunk-BSJP7CBP-Cd9H-V61.js","assets/chunk-426QAEUC-tWQOa3-I.js","assets/chunk-XPW4576I-DBdiQ3Zy.js"])))=>i.map(i=>d[i]);
2
- import{o as e,r as t,t as n}from"./chunk-DD-I1_y5.js";import{n as r,o as i,r as a,t as o}from"./jsx-runtime-BUs3sHtV.js";import{t as s}from"./Checkbox-CjbS9JcG.js";import{t as c}from"./preload-helper-BEFjQwLd.js";var l=a(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),u=a(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),d=a(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]),f=a(`file-code`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12.5 8 15l2 2.5`,key:`1tg20x`}],[`path`,{d:`m14 12.5 2 2.5-2 2.5`,key:`yinavb`}]]),p=a(`file-text`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]),m=a(`globe`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20`,key:`13o1zl`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}]]),h=a(`mic`,[[`path`,{d:`M12 19v3`,key:`npa21l`}],[`path`,{d:`M19 10v2a7 7 0 0 1-14 0v-2`,key:`1vc78b`}],[`rect`,{x:`9`,y:`2`,width:`6`,height:`13`,rx:`3`,key:`s6n7sd`}]]),g=a(`paperclip`,[[`path`,{d:`m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551`,key:`1miecu`}]]),_=a(`pause`,[[`rect`,{x:`14`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`kaeet6`}],[`rect`,{x:`5`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`1wsw3u`}]]),v=a(`play`,[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]),y=a(`square-check-big`,[[`path`,{d:`M21 10.656V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.344`,key:`2acyp4`}],[`path`,{d:`m9 11 3 3L22 4`,key:`1pflzl`}]]),b=a(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),x=e(i(),1);async function S(e){if(navigator.clipboard)try{return await navigator.clipboard.writeText(e),!0}catch{}try{let t=document.createElement(`textarea`);t.value=e,t.style.position=`fixed`,t.style.opacity=`0`,document.body.appendChild(t),t.select();let n=document.execCommand(`copy`);return document.body.removeChild(t),n}catch{return!1}}function C(){let[e,t]=(0,x.useState)(!1),[n,r]=(0,x.useState)(new Set),[i,a]=(0,x.useState)(!1),o=(0,x.useRef)(null);(0,x.useEffect)(()=>()=>{o.current!==null&&clearTimeout(o.current)},[]);let s=(0,x.useCallback)(()=>{t(!0),r(new Set)},[]),c=(0,x.useCallback)(()=>{t(!1),r(new Set)},[]),l=(0,x.useCallback)(e=>{r(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),u=(0,x.useCallback)(e=>{e.length!==0&&r(t=>e.every(e=>t.has(e))?new Set:new Set(e))},[]),d=(0,x.useCallback)(()=>{o.current!==null&&(clearTimeout(o.current),o.current=null)},[]),f=(0,x.useCallback)(e=>({onPointerDown:()=>{o.current=setTimeout(()=>{t(!0),r(new Set([e])),o.current=null},500)},onPointerUp:d,onPointerLeave:d,onPointerCancel:d}),[d]),p=(0,x.useCallback)(e=>{a(e?`copied`:`failed`),setTimeout(()=>a(!1),1500)},[]);return{selectionMode:e,selectedItems:n,copyToast:i,longPressProps:f,enterSelection:s,exitSelection:c,toggleSelectItem:l,selectAll:u,copySelected:(0,x.useCallback)(async(e,t)=>{let r=[...n].sort(t).map(t=>e(t)).filter(Boolean);r.length>0&&p(await S(r.join(`
2
+ import{o as e,r as t,t as n}from"./chunk-DD-I1_y5.js";import{n as r,o as i,r as a,t as o}from"./jsx-runtime-DV3X_CC7.js";import{t as s}from"./Checkbox-DD2mv2dU.js";import{t as c}from"./preload-helper-BEFjQwLd.js";var l=a(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),u=a(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),d=a(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]),f=a(`file-code`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12.5 8 15l2 2.5`,key:`1tg20x`}],[`path`,{d:`m14 12.5 2 2.5-2 2.5`,key:`yinavb`}]]),p=a(`file-text`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]),m=a(`globe`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20`,key:`13o1zl`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}]]),h=a(`mic`,[[`path`,{d:`M12 19v3`,key:`npa21l`}],[`path`,{d:`M19 10v2a7 7 0 0 1-14 0v-2`,key:`1vc78b`}],[`rect`,{x:`9`,y:`2`,width:`6`,height:`13`,rx:`3`,key:`s6n7sd`}]]),g=a(`paperclip`,[[`path`,{d:`m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551`,key:`1miecu`}]]),_=a(`pause`,[[`rect`,{x:`14`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`kaeet6`}],[`rect`,{x:`5`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`1wsw3u`}]]),v=a(`play`,[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]),y=a(`square-check-big`,[[`path`,{d:`M21 10.656V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.344`,key:`2acyp4`}],[`path`,{d:`m9 11 3 3L22 4`,key:`1pflzl`}]]),b=a(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),x=e(i(),1);async function S(e){if(navigator.clipboard)try{return await navigator.clipboard.writeText(e),!0}catch{}try{let t=document.createElement(`textarea`);t.value=e,t.style.position=`fixed`,t.style.opacity=`0`,document.body.appendChild(t),t.select();let n=document.execCommand(`copy`);return document.body.removeChild(t),n}catch{return!1}}function C(){let[e,t]=(0,x.useState)(!1),[n,r]=(0,x.useState)(new Set),[i,a]=(0,x.useState)(!1),o=(0,x.useRef)(null);(0,x.useEffect)(()=>()=>{o.current!==null&&clearTimeout(o.current)},[]);let s=(0,x.useCallback)(()=>{t(!0),r(new Set)},[]),c=(0,x.useCallback)(()=>{t(!1),r(new Set)},[]),l=(0,x.useCallback)(e=>{r(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),u=(0,x.useCallback)(e=>{e.length!==0&&r(t=>e.every(e=>t.has(e))?new Set:new Set(e))},[]),d=(0,x.useCallback)(()=>{o.current!==null&&(clearTimeout(o.current),o.current=null)},[]),f=(0,x.useCallback)(e=>({onPointerDown:()=>{o.current=setTimeout(()=>{t(!0),r(new Set([e])),o.current=null},500)},onPointerUp:d,onPointerLeave:d,onPointerCancel:d}),[d]),p=(0,x.useCallback)(e=>{a(e?`copied`:`failed`),setTimeout(()=>a(!1),1500)},[]);return{selectionMode:e,selectedItems:n,copyToast:i,longPressProps:f,enterSelection:s,exitSelection:c,toggleSelectItem:l,selectAll:u,copySelected:(0,x.useCallback)(async(e,t)=>{let r=[...n].sort(t).map(t=>e(t)).filter(Boolean);r.length>0&&p(await S(r.join(`
3
3
 
4
4
  ---
5
5
 
@@ -1 +1 @@
1
- import{r as e}from"./jsx-runtime-BUs3sHtV.js";var t=e(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),n=e(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]);export{t as n,n as t};
1
+ import{r as e}from"./jsx-runtime-DV3X_CC7.js";var t=e(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),n=e(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]);export{t as n,n as t};
@@ -5,13 +5,13 @@
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-C-SxjLC9.js"></script>
8
+ <script type="module" crossorigin src="/assets/data-BiexCwhp.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-DD-I1_y5.js">
10
- <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-BUs3sHtV.js">
11
- <link rel="modulepreload" crossorigin href="/assets/share-2-B-sbkB36.js">
12
- <link rel="modulepreload" crossorigin href="/assets/file-D4cbAAuo.js">
13
- <link rel="modulepreload" crossorigin href="/assets/house-CYsVygEQ.js">
14
- <link rel="stylesheet" crossorigin href="/assets/jsx-runtime-DPXE45W9.css">
10
+ <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-DV3X_CC7.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/share-2-C_nKw-UZ.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/file-CXzgVus7.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/house-DuPFyfb8.js">
14
+ <link rel="stylesheet" crossorigin href="/assets/jsx-runtime-UA_LoTFj.css">
15
15
  </head>
16
16
  <body>
17
17
  <div id="root"></div>
@@ -5,14 +5,14 @@
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-DJ7IfYHV.js"></script>
8
+ <script type="module" crossorigin src="/assets/graph-DOWTWpqy.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-DD-I1_y5.js">
10
- <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-BUs3sHtV.js">
11
- <link rel="modulepreload" crossorigin href="/assets/Checkbox-CjbS9JcG.js">
12
- <link rel="modulepreload" crossorigin href="/assets/share-2-B-sbkB36.js">
13
- <link rel="modulepreload" crossorigin href="/assets/house-CYsVygEQ.js">
14
- <link rel="modulepreload" crossorigin href="/assets/x-BNidzSAn.js">
15
- <link rel="stylesheet" crossorigin href="/assets/jsx-runtime-DPXE45W9.css">
10
+ <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-DV3X_CC7.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/Checkbox-DD2mv2dU.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/share-2-C_nKw-UZ.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/house-DuPFyfb8.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/x-Do7BO9Ow.js">
15
+ <link rel="stylesheet" crossorigin href="/assets/jsx-runtime-UA_LoTFj.css">
16
16
  </head>
17
17
  <body>
18
18
  <div id="root"></div>
@@ -5,16 +5,16 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/admin-Ce9DbUuu.js"></script>
8
+ <script type="module" crossorigin src="/assets/admin-BmuLrDs2.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-DD-I1_y5.js">
10
- <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-BUs3sHtV.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-DV3X_CC7.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-BEFjQwLd.js">
12
- <link rel="modulepreload" crossorigin href="/assets/Checkbox-CjbS9JcG.js">
13
- <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-DLVFx3ms.js">
14
- <link rel="modulepreload" crossorigin href="/assets/share-2-B-sbkB36.js">
15
- <link rel="modulepreload" crossorigin href="/assets/file-D4cbAAuo.js">
16
- <link rel="modulepreload" crossorigin href="/assets/x-BNidzSAn.js">
17
- <link rel="stylesheet" crossorigin href="/assets/jsx-runtime-DPXE45W9.css">
12
+ <link rel="modulepreload" crossorigin href="/assets/Checkbox-DD2mv2dU.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-aDBUrrIb.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/share-2-C_nKw-UZ.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/file-CXzgVus7.js">
16
+ <link rel="modulepreload" crossorigin href="/assets/x-Do7BO9Ow.js">
17
+ <link rel="stylesheet" crossorigin href="/assets/jsx-runtime-UA_LoTFj.css">
18
18
  <link rel="stylesheet" href="/brand-defaults.css">
19
19
  </head>
20
20
  <body>
@@ -5,13 +5,13 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/public-BTOF98iO.js"></script>
8
+ <script type="module" crossorigin src="/assets/public-Tjx3543Z.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-DD-I1_y5.js">
10
- <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-BUs3sHtV.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-DV3X_CC7.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-BEFjQwLd.js">
12
- <link rel="modulepreload" crossorigin href="/assets/Checkbox-CjbS9JcG.js">
13
- <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-DLVFx3ms.js">
14
- <link rel="stylesheet" crossorigin href="/assets/jsx-runtime-DPXE45W9.css">
12
+ <link rel="modulepreload" crossorigin href="/assets/Checkbox-DD2mv2dU.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-aDBUrrIb.js">
14
+ <link rel="stylesheet" crossorigin href="/assets/jsx-runtime-UA_LoTFj.css">
15
15
  <link rel="stylesheet" href="/brand-defaults.css">
16
16
  </head>
17
17
  <body>
@@ -10163,9 +10163,10 @@ function buildKeywordFilter(keywords, keywordMatch = "any") {
10163
10163
  };
10164
10164
  }
10165
10165
  async function bm25Only(session, params) {
10166
- const { query, accountId, limit, allowedScopes, agentSlug, keywords, keywordMatch } = params;
10166
+ const { query, accountId, limit, allowedScopes, agentSlug, keywords, keywordMatch, labels } = params;
10167
10167
  const scopeClause = allowedScopes ? "AND (node.scope IS NULL OR node.scope IN $allowedScopes)" : "";
10168
10168
  const agentClause = agentSlug ? "AND node.agents IS NOT NULL AND $agentSlug IN node.agents" : "";
10169
+ const labelClause = labels && labels.length > 0 ? "AND any(l IN labels(node) WHERE l IN $labels)" : "";
10169
10170
  const keywordFilter = buildKeywordFilter(keywords, keywordMatch);
10170
10171
  const kwClause = keywordFilter?.clause ?? "";
10171
10172
  const escaped = escapeLucene(query);
@@ -10176,6 +10177,7 @@ async function bm25Only(session, params) {
10176
10177
  WHERE node.accountId = $accountId
10177
10178
  ${scopeClause}
10178
10179
  ${agentClause}
10180
+ ${labelClause}
10179
10181
  AND ${(0, import_dist.notTrashed)("node")}
10180
10182
  ${kwClause}
10181
10183
  RETURN node, score, labels(node) AS nodeLabels, elementId(node) AS nodeId
@@ -10188,6 +10190,7 @@ async function bm25Only(session, params) {
10188
10190
  limit: int(limit),
10189
10191
  ...allowedScopes ? { allowedScopes } : {},
10190
10192
  ...agentSlug ? { agentSlug } : {},
10193
+ ...labels && labels.length > 0 ? { labels } : {},
10191
10194
  ...keywordFilter?.params ?? {}
10192
10195
  }
10193
10196
  );
@@ -10232,7 +10235,7 @@ async function hybrid(session, embed2, params) {
10232
10235
  const msg = err instanceof Error ? err.message : String(err);
10233
10236
  const bm25Hits2 = await bm25Only(session, params);
10234
10237
  const results2 = bm25Hits2.map((h) => ({ ...h, related: [] }));
10235
- return { mode: "bm25", results: results2, embedError: msg };
10238
+ return { mode: "bm25", results: results2, embedError: msg, expandMs: 0 };
10236
10239
  }
10237
10240
  const labelToIndex = await discoverIndexes(session);
10238
10241
  const keywordFilter = buildKeywordFilter(keywords, keywordMatch);
@@ -10243,7 +10246,7 @@ async function hybrid(session, embed2, params) {
10243
10246
  if (labels && labels.length > 0) {
10244
10247
  indexesToQuery = labels.map((l) => labelToIndex.get(l)).filter((idx) => idx !== void 0);
10245
10248
  if (indexesToQuery.length === 0) {
10246
- return { mode: "hybrid", results: [] };
10249
+ return { mode: "hybrid", results: [], expandMs: 0 };
10247
10250
  }
10248
10251
  } else {
10249
10252
  indexesToQuery = [...new Set(labelToIndex.values())];
@@ -10354,44 +10357,55 @@ async function hybrid(session, embed2, params) {
10354
10357
  ...node,
10355
10358
  combinedScore: VECTOR_WEIGHT * node.vectorScore + BM25_WEIGHT * node.bm25Score
10356
10359
  })).sort((a, b) => b.combinedScore - a.combinedScore).slice(0, limit);
10357
- const results = [];
10358
- for (const node of merged) {
10359
- const result = {
10360
- nodeId: node.nodeId,
10361
- labels: node.labels,
10362
- properties: node.properties,
10363
- score: node.combinedScore,
10364
- related: []
10365
- };
10366
- if (expandHops > 0) {
10367
- const expandScopeClause = allowedScopes ? "AND (related.scope IS NULL OR related.scope IN $allowedScopes)" : "";
10368
- const expandAgentClause = agentSlug ? "AND (related.agents IS NULL OR $agentSlug IN related.agents)" : "";
10369
- const expandResult = await session.run(
10370
- `MATCH (n)-[r]-(related)
10371
- WHERE elementId(n) = $nodeId
10372
- AND ${(0, import_dist.notTrashed)("related")}
10373
- ${expandScopeClause}
10374
- ${expandAgentClause}
10375
- RETURN type(r) AS relType,
10376
- CASE WHEN startNode(r) = n THEN 'outgoing' ELSE 'incoming' END AS direction,
10377
- labels(related) AS relatedLabels,
10378
- related
10379
- LIMIT 20`,
10380
- { nodeId: node.nodeId, ...scopeParams, ...agentParams }
10381
- );
10382
- for (const rec of expandResult.records) {
10383
- const related = rec.get("related");
10384
- result.related.push({
10385
- relationship: rec.get("relType"),
10386
- direction: rec.get("direction"),
10387
- labels: rec.get("relatedLabels"),
10388
- properties: plainProperties(related.properties)
10360
+ const results = merged.map((node) => ({
10361
+ nodeId: node.nodeId,
10362
+ labels: node.labels,
10363
+ properties: node.properties,
10364
+ score: node.combinedScore,
10365
+ related: []
10366
+ }));
10367
+ let expandMs = 0;
10368
+ if (expandHops > 0 && results.length > 0) {
10369
+ const expandScopeClause = allowedScopes ? "AND (related.scope IS NULL OR related.scope IN $allowedScopes)" : "";
10370
+ const expandAgentClause = agentSlug ? "AND (related.agents IS NULL OR $agentSlug IN related.agents)" : "";
10371
+ const expandStart = Date.now();
10372
+ const expandResult = await session.run(
10373
+ `UNWIND $nodeIds AS nid
10374
+ MATCH (n)-[r]-(related)
10375
+ WHERE elementId(n) = nid
10376
+ AND ${(0, import_dist.notTrashed)("related")}
10377
+ ${expandScopeClause}
10378
+ ${expandAgentClause}
10379
+ WITH nid, n, r, related
10380
+ WITH nid, collect({
10381
+ relType: type(r),
10382
+ direction: CASE WHEN startNode(r) = n THEN 'outgoing' ELSE 'incoming' END,
10383
+ relatedNodeId: elementId(related),
10384
+ relatedLabels: labels(related),
10385
+ related: related
10386
+ })[0..20] AS items
10387
+ RETURN nid, items`,
10388
+ { nodeIds: results.map((r) => r.nodeId), ...scopeParams, ...agentParams }
10389
+ );
10390
+ expandMs = Date.now() - expandStart;
10391
+ const byNodeId = new Map(results.map((r) => [r.nodeId, r]));
10392
+ for (const rec of expandResult.records) {
10393
+ const nid = rec.get("nid");
10394
+ const target = byNodeId.get(nid);
10395
+ if (!target) continue;
10396
+ const items = rec.get("items");
10397
+ for (const item of items) {
10398
+ target.related.push({
10399
+ nodeId: item.relatedNodeId,
10400
+ relationship: item.relType,
10401
+ direction: item.direction,
10402
+ labels: item.relatedLabels,
10403
+ properties: plainProperties(item.related.properties)
10389
10404
  });
10390
10405
  }
10391
10406
  }
10392
- results.push(result);
10393
10407
  }
10394
- return { mode: "hybrid", results };
10408
+ return { mode: "hybrid", results, expandMs };
10395
10409
  }
10396
10410
  function mergeBm25Hit(map, hit, normalisedScore) {
10397
10411
  const existing = map.get(hit.nodeId);
@@ -10422,18 +10436,23 @@ function plainProperties(properties) {
10422
10436
 
10423
10437
  // server/routes/admin/graph-search.ts
10424
10438
  var DEFAULT_LIMIT = 20;
10425
- var MAX_LIMIT = 100;
10439
+ var MAX_LIMIT = 2e3;
10426
10440
  var app24 = new Hono();
10427
10441
  app24.get("/", requireAdminSession, async (c) => {
10428
10442
  const sessionKey = c.var.sessionKey;
10429
10443
  const q = (c.req.query("q") ?? "").trim();
10430
10444
  const rawLimit = c.req.query("limit");
10445
+ const rawLabels = c.req.query("labels");
10431
10446
  const accountId = getAccountIdForSession(sessionKey);
10432
10447
  if (!accountId) {
10433
10448
  console.error(`[graph-search] auth-rejected endpoint="/api/admin/graph-search" reason="no account for session"`);
10434
10449
  return c.json({ error: "Account not found for session" }, 401);
10435
10450
  }
10436
10451
  if (!q) return c.json({ error: "q (search query) required" }, 400);
10452
+ const labels = rawLabels ? rawLabels.split(",").map((s) => s.trim()).filter((s) => s.length > 0) : [];
10453
+ if (labels.length === 0) {
10454
+ return c.json({ error: "Select at least one filter chip before searching." }, 400);
10455
+ }
10437
10456
  const parsedLimit = rawLimit ? parseInt(rawLimit, 10) : DEFAULT_LIMIT;
10438
10457
  const limit = Number.isFinite(parsedLimit) && parsedLimit > 0 ? Math.min(parsedLimit, MAX_LIMIT) : DEFAULT_LIMIT;
10439
10458
  const started = Date.now();
@@ -10442,21 +10461,24 @@ app24.get("/", requireAdminSession, async (c) => {
10442
10461
  const res = await hybrid(session, embed, {
10443
10462
  query: q,
10444
10463
  accountId,
10464
+ labels,
10445
10465
  limit,
10446
10466
  degradeOnEmbedFailure: true
10447
10467
  });
10448
- const elapsed = Date.now() - started;
10468
+ const total = Date.now() - started;
10449
10469
  if (res.embedError) {
10450
10470
  console.error(`[graph-search] embed-unavailable err="${res.embedError}" \u2014 bm25-only`);
10471
+ console.error(`[graph-search] embed-degraded query="${q}" results=${res.results.length}`);
10451
10472
  }
10452
- console.error(`[graph-search] query="${q}" mode=${res.mode} results=${res.results.length} ms=${elapsed}`);
10453
- const results = res.results.map((r) => ({
10454
- nodeId: r.nodeId,
10455
- labels: r.labels,
10456
- properties: r.properties,
10457
- score: r.score
10458
- }));
10459
- return c.json({ results, elapsedMs: elapsed });
10473
+ console.error(
10474
+ `[graph-search] query="${q}" labels=${labels.join(",")} limit=${limit} mode=${res.mode} results=${res.results.length} expand-ms=${res.expandMs} total-ms=${total}`
10475
+ );
10476
+ return c.json({
10477
+ results: res.results,
10478
+ mode: res.mode,
10479
+ embedError: res.embedError,
10480
+ elapsedMs: total
10481
+ });
10460
10482
  } catch (err) {
10461
10483
  const elapsed = Date.now() - started;
10462
10484
  const message = err instanceof Error ? err.message : String(err);