@rubytech/create-maxy-code 0.1.557 → 0.1.558
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/package.json +1 -1
- package/payload/platform/plugins/admin/PLUGIN.md +2 -1
- package/payload/platform/plugins/admin/mcp/dist/content-producer-authoring-skills.d.ts +1 -1
- package/payload/platform/plugins/admin/mcp/dist/content-producer-authoring-skills.d.ts.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/content-producer-authoring-skills.js +7 -0
- package/payload/platform/plugins/admin/mcp/dist/content-producer-authoring-skills.js.map +1 -1
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +43 -1
- package/payload/platform/plugins/admin/skills/video-production/SKILL.md +106 -0
- package/payload/platform/plugins/admin/skills/video-production/__tests__/registration.sh +54 -0
- package/payload/platform/plugins/admin/skills/video-production/references/reel-authoring.md +83 -0
- package/payload/platform/plugins/admin/skills/video-production/render.mjs +429 -0
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +7 -0
- package/payload/platform/plugins/docs/PLUGIN.md +1 -0
- package/payload/platform/plugins/docs/references/video-production.md +37 -0
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +32 -0
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/templates/specialists/agents/content-producer.md +8 -0
- package/payload/server/public/assets/{AdminLoginScreens-DrF7rAcb.js → AdminLoginScreens-BUv_EOfw.js} +1 -1
- package/payload/server/public/assets/AdminLoginScreens-BUv_EOfw.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-BUv_EOfw.js.gz +0 -0
- package/payload/server/public/assets/{admin-CCB9k3GB.js → admin-BUor8KRy.js} +1 -1
- package/payload/server/public/assets/admin-BUor8KRy.js.br +0 -0
- package/payload/server/public/assets/admin-BUor8KRy.js.gz +0 -0
- package/payload/server/public/assets/chat-D7LjNerV.js +1 -0
- package/payload/server/public/assets/chat-D7LjNerV.js.br +0 -0
- package/payload/server/public/assets/chat-D7LjNerV.js.gz +0 -0
- package/payload/server/public/assets/data-BU60tJiv.js +1 -0
- package/payload/server/public/assets/data-BU60tJiv.js.br +0 -0
- package/payload/server/public/assets/data-BU60tJiv.js.gz +0 -0
- package/payload/server/public/assets/{operator-B0oOVB8R.js → operator-t15ZvJER.js} +1 -1
- package/payload/server/public/assets/operator-t15ZvJER.js.br +0 -0
- package/payload/server/public/assets/operator-t15ZvJER.js.gz +0 -0
- package/payload/server/public/assets/{page-DrbfHSQ9.js → page-CogD1Hho.js} +1 -1
- package/payload/server/public/assets/page-CogD1Hho.js.br +0 -0
- package/payload/server/public/assets/page-CogD1Hho.js.gz +0 -0
- package/payload/server/public/assets/{page-Dfce3YQd.js → page-DcKH1PVD.js} +1 -1
- package/payload/server/public/assets/page-DcKH1PVD.js.br +0 -0
- package/payload/server/public/assets/page-DcKH1PVD.js.gz +0 -0
- package/payload/server/public/assets/{public-DJwMfl-4.js → public-UlLvs9vV.js} +1 -1
- package/payload/server/public/assets/public-UlLvs9vV.js.br +0 -0
- package/payload/server/public/assets/public-UlLvs9vV.js.gz +0 -0
- package/payload/server/public/assets/useVoiceRecorder-q9U5ahfg.js +2 -0
- package/payload/server/public/assets/useVoiceRecorder-q9U5ahfg.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-q9U5ahfg.js.gz +0 -0
- package/payload/server/public/chat.html +3 -3
- package/payload/server/public/data.html +3 -3
- package/payload/server/public/index.html +4 -4
- package/payload/server/public/operator.html +4 -4
- package/payload/server/public/public.html +3 -3
- package/payload/server/server.js +93 -42
- package/payload/server/public/assets/AdminLoginScreens-DrF7rAcb.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-DrF7rAcb.js.gz +0 -0
- package/payload/server/public/assets/admin-CCB9k3GB.js.br +0 -0
- package/payload/server/public/assets/admin-CCB9k3GB.js.gz +0 -0
- package/payload/server/public/assets/chat-BgOUm7r1.js +0 -1
- package/payload/server/public/assets/chat-BgOUm7r1.js.br +0 -0
- package/payload/server/public/assets/chat-BgOUm7r1.js.gz +0 -0
- package/payload/server/public/assets/data-YEC6LkxI.js +0 -1
- package/payload/server/public/assets/data-YEC6LkxI.js.br +0 -0
- package/payload/server/public/assets/data-YEC6LkxI.js.gz +0 -0
- package/payload/server/public/assets/operator-B0oOVB8R.js.br +0 -0
- package/payload/server/public/assets/operator-B0oOVB8R.js.gz +0 -0
- package/payload/server/public/assets/page-Dfce3YQd.js.br +0 -0
- package/payload/server/public/assets/page-Dfce3YQd.js.gz +0 -0
- package/payload/server/public/assets/page-DrbfHSQ9.js.br +0 -0
- package/payload/server/public/assets/page-DrbfHSQ9.js.gz +0 -0
- package/payload/server/public/assets/public-DJwMfl-4.js.br +0 -0
- package/payload/server/public/assets/public-DJwMfl-4.js.gz +0 -0
- package/payload/server/public/assets/useVoiceRecorder-9qVOHhkb.js +0 -2
- package/payload/server/public/assets/useVoiceRecorder-9qVOHhkb.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-9qVOHhkb.js.gz +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/pdf-render-Bwg_xv1L.js","assets/preload-helper-BJ2zoBc3.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{o as e}from"./chunk-CltuBf4Z.js";import{B as t,G as n,Z as r,a as i,ct as a,d as o,i as s,j as c,nt as l,v as u,w as d,x as f}from"./useMediaQuery-DIm6yGOl.js";import{t as p}from"./copy-CG2tAK16.js";import{t as m}from"./play-Bankj0zU.js";import{t as h}from"./preload-helper-BJ2zoBc3.js";var g=`image/jpeg,image/png,image/gif,image/webp,application/pdf,text/plain,text/markdown,text/csv,text/html,text/calendar,application/zip,application/x-zip-compressed,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.oasis.opendocument.text,text/rtf,application/rtf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel,application/vnd.oasis.opendocument.spreadsheet,application/vnd.openxmlformats-officedocument.presentationml.presentation,application/vnd.ms-powerpoint,application/vnd.oasis.opendocument.presentation,audio/ogg,audio/opus,audio/mp4,audio/x-m4a,audio/mpeg,audio/webm,audio/wav,video/mp4,.docx,.odt,.rtf,.xlsx,.xls,.ods,.pptx,.ppt,.odp,.opus,.ogg,.m4a,.mp4,.mp3,.wav,.webm`,_=new Set(g.split(`,`).filter(e=>!e.startsWith(`.`))),v=50*1024*1024;function y(e){switch(e){case`expanded`:return!0;case`collapsed`:return!1;default:return}}var b=r(`check-check`,[[`path`,{d:`M18 6 7 17l-5-5`,key:`116fxf`}],[`path`,{d:`m22 10-7.5 7.5L13 16`,key:`ke71qq`}]]),x=r(`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`}]]),S=r(`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`}]]),C=r(`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`}]]),w=r(`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`}]]),T=r(`reply`,[[`path`,{d:`M20 18v-2a4 4 0 0 0-4-4H4`,key:`5vmcpk`}],[`path`,{d:`m9 17-5-5 5-5`,key:`nvlc11`}]]),E=r(`user`,[[`path`,{d:`M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2`,key:`975kel`}],[`circle`,{cx:`12`,cy:`7`,r:`4`,key:`17ys0d`}]]),D=e(a(),1),O=l(),k=200;function ee({children:e,tail:t=null,repinSignals:n,onReachTop:r,prependToken:i=0}){let a=(0,D.useRef)(null),o=(0,D.useRef)(null),s=(0,D.useRef)(!0),[c,l]=(0,D.useState)(!0),u=(0,D.useRef)(0),d=(0,D.useRef)(0),f=(0,D.useRef)(!1),p=(0,D.useRef)(r);p.current=r;let m=()=>{let e=a.current;if(!e)return;let t=e.clientHeight,n=e.scrollHeight,r=t!==u.current||n!==d.current;if(u.current=t,d.current=n,r){s.current&&(e.scrollTop=e.scrollHeight);return}let i=n-e.scrollTop-t<=32;s.current=i,l(e=>e===i?e:i);let o=e.scrollTop<=k;o&&!f.current&&p.current?.(),f.current=o},h=()=>{let e=a.current;e&&(e.scrollTop=e.scrollHeight,d.current=e.scrollHeight,u.current=e.clientHeight,s.current=!0,l(!0))},g=t!=null;return(0,D.useLayoutEffect)(()=>{let e=a.current;if(!e||i===0)return;let t=e.scrollHeight-d.current;t>0&&(e.scrollTop+=t),d.current=e.scrollHeight},[i]),(0,D.useLayoutEffect)(()=>{let e=a.current;e&&s.current&&(e.scrollTop=e.scrollHeight),e&&(d.current=e.scrollHeight,u.current=e.clientHeight)},[...n,g]),(0,D.useLayoutEffect)(()=>{if(typeof ResizeObserver>`u`)return;let e=new ResizeObserver(()=>m());return a.current&&e.observe(a.current),o.current&&e.observe(o.current),()=>e.disconnect()},[]),(0,O.jsxs)(`div`,{className:`wa-reader`,children:[(0,O.jsx)(`div`,{className:`wa-reader-thread`,ref:a,onScroll:m,children:(0,O.jsxs)(`div`,{className:`wa-thread-scroll`,ref:o,children:[e,t]})}),!c&&(0,O.jsx)(`button`,{type:`button`,className:`wa-jump`,onClick:h,"aria-label":`Jump to latest message`,title:`Jump to latest message`,children:`↓`})]})}var A={auth_expired:`Your session has expired. Please sign in again.`,claude_down:`Claude is currently experiencing an outage. Please try again in a few minutes.`,claude_overloaded:`Claude is overloaded right now. Please try again shortly.`,model_unavailable:`The selected model is currently unavailable. Switch to a different model from the model picker to continue.`,agent_error:`Something went wrong. Please try again.`},j={auth_expired:`I'm not available right now. Please try again later.`,claude_down:`I'm not available right now. Please try again later.`,claude_overloaded:`I'm not available right now. Please try again shortly.`,model_unavailable:`I'm not available right now. Please try again later.`,agent_error:`I'm not available right now. Please try again later.`};function M(e,t=`admin`){return t===`public`?j[e]:A[e]}function te(e){return e===`whatsapp`?` · via WhatsApp`:e===`webchat`?` · via web`:``}var N=56,P=5;function ne(e,t){let n=Math.max(1,Math.floor(e.length/t)),r=[],i=0;for(let a=0;a<t;a++){let t=a*n,o=0,s=0;for(let r=t;r<t+n&&r<e.length;r++)o+=e[r]*e[r],s++;let c=s>0?Math.sqrt(o/s):0;r.push(c),c>i&&(i=c)}return i>0?r.map(e=>e/i):r}function re({src:e,filename:t,onDecodeFail:n,onMediaError:r}){let a=(0,D.useRef)(null),o=(0,D.useRef)(null),s=(0,D.useRef)(!1),[c,l]=(0,D.useState)([]),[u,d]=(0,D.useState)(void 0),[f,p]=(0,D.useState)(!1),[h,g]=(0,D.useState)(0),[_,v]=(0,D.useState)(0);(0,D.useEffect)(()=>{let t=!1,r=null,i=window.AudioContext??window.webkitAudioContext,a=()=>{t||s.current||(s.current=!0,n())};if(!i){a();return}let o=new i;return(async()=>{try{let n=await fetch(e);if(!n.ok)throw Error(`audio fetch ${n.status}`);let i=await n.blob();if(t)return;r=URL.createObjectURL(i),d(r);let a=await o.decodeAudioData(await i.arrayBuffer());if(t)return;l(ne(a.getChannelData(0),N)),Number.isFinite(a.duration)&&a.duration>0&&v(a.duration)}catch{a()}finally{try{o.close()}catch{}}})(),()=>{t=!0,r&&URL.revokeObjectURL(r)}},[e]);let y=()=>{let e=a.current;e&&(f?e.pause():Promise.resolve(e.play()).catch(()=>{}))},b=e=>{let t=a.current;if(!t||!(_>0))return;let n=Math.min(_,Math.max(0,e));t.currentTime=n,g(n)},x=e=>{let t=o.current;if(!t||!(_>0))return;let n=t.getBoundingClientRect();b(Math.min(1,Math.max(0,(e-n.left)/n.width))*_)},S=e=>{x(e.clientX);let t=e=>x(e.clientX),n=()=>{window.removeEventListener(`mousemove`,t),window.removeEventListener(`mouseup`,n)};window.addEventListener(`mousemove`,t),window.addEventListener(`mouseup`,n)},C=e=>{if(!(_>0))return;let t=a.current?.currentTime??0;switch(e.key){case`ArrowRight`:case`ArrowUp`:b(t+P),e.preventDefault();break;case`ArrowLeft`:case`ArrowDown`:b(t-P),e.preventDefault();break;case`Home`:b(0),e.preventDefault();break;case`End`:b(_),e.preventDefault();break;default:break}},T=_>0?Math.min(1,h/_):0,E=Math.round(T*N),k=i(h>0?h:_);return(0,O.jsxs)(`div`,{className:`voice-note`,children:[(0,O.jsx)(`button`,{type:`button`,className:`voice-note-play`,"aria-label":`${f?`Pause`:`Play`} ${t}`,onClick:y,children:f?(0,O.jsx)(w,{size:16,"aria-hidden":!0}):(0,O.jsx)(m,{size:16,"aria-hidden":!0})}),(0,O.jsx)(`div`,{ref:o,className:`voice-note-bars`,role:`slider`,tabIndex:0,"aria-label":`Seek ${t}`,"aria-valuemin":0,"aria-valuemax":Math.round(_),"aria-valuenow":Math.round(h),onMouseDown:S,onKeyDown:C,children:(c.length?c:Array.from({length:N},()=>0)).map((e,t)=>(0,O.jsx)(`span`,{className:`voice-note-bar${t<E?` is-played`:``}`,style:{height:`${Math.max(10,Math.round(e*100))}%`}},t))}),(0,O.jsx)(`span`,{className:`voice-note-time`,children:k}),(0,O.jsx)(`audio`,{ref:a,className:`voice-note-audio`,preload:`metadata`,src:u,"aria-label":t,onPlay:()=>p(!0),onPause:()=>p(!1),onEnded:()=>p(!1),onError:()=>r?.(),onLoadedMetadata:e=>{let t=e.currentTarget.duration;Number.isFinite(t)&&t>0&&v(t)},onTimeUpdate:e=>g(e.currentTarget.currentTime)})]})}var F=/\.(png|jpe?g|gif|webp|svg|bmp)$/i,I=/\.pdf$/i;function ie(e,t){return(t?t.startsWith(`image/`):F.test(e))?`image`:t&&t.startsWith(`audio/`)?`audio`:(t?t===`application/pdf`:I.test(e))?`pdf`:`file`}function ae(e,t,n,r){let i=encodeURIComponent(e.path),a=encodeURIComponent(n),o=r?`&disposition=${r}`:``;return e.root===`scratchpad`?`/api/admin/files/download?path=${i}&root=scratchpad&sessionId=${encodeURIComponent(t)}&session_key=${a}${o}`:`/api/admin/files/download?path=${i}&root=data&session_key=${a}${o}`}function L(e,t,n,r){return t===`public`?`/api/public-reader/attachment/${e}?sessionId=${encodeURIComponent(n)}`:`/api/admin/attachment/${e}?session_key=${encodeURIComponent(r)}`}function oe(e,t,n){return`/api/admin/session-upload?session_key=${encodeURIComponent(n)}&session_id=${encodeURIComponent(e)}&file=${encodeURIComponent(t)}`}function R(e){if(e<1024)return`${e} B`;let t=e/1024;if(t<1024)return`${t<10?t.toFixed(1):Math.round(t)} KB`;let n=t/1024;return`${n<10?n.toFixed(1):Math.round(n)} MB`}function z({href:e,filename:t,label:n}){return(0,O.jsxs)(`a`,{className:`chat-attachment-chip`,href:e,download:t,children:[(0,O.jsx)(C,{size:14,"aria-hidden":!0}),n]})}function B({href:e,filename:t,className:r,size:i=14,onClick:a}){return(0,O.jsx)(`a`,{className:r,href:e,download:t,"aria-label":`Download ${t}`,onClick:a,children:(0,O.jsx)(n,{size:i,"aria-hidden":!0})})}function se({src:e,filename:t,sizeBytes:n,expandable:r,onFail:i}){let[a,o]=(0,D.useState)(!1),[s,c]=(0,D.useState)(!1),l=n==null?t:`${t} · ${R(n)}`;return s?(0,O.jsx)(z,{href:e,filename:t,label:l}):(0,O.jsxs)(O.Fragment,{children:[(0,O.jsxs)(`span`,{className:`chat-attachment-image-wrap`,children:[(0,O.jsx)(`img`,{className:`chat-attachment-image`,src:e,alt:t,onClick:r?()=>o(!0):void 0,onError:()=>{c(!0),i?.(`fetch`)}}),(0,O.jsx)(B,{href:e,filename:t,className:`chat-attachment-download`})]}),r&&a&&(0,O.jsx)(`div`,{className:`chat-attachment-overlay`,role:`dialog`,"aria-label":t,onClick:()=>o(!1),children:(0,O.jsx)(`img`,{className:`chat-attachment-overlay-image`,src:e,alt:t})})]})}var ce=280,le=360,ue=16;function V({src:e,filename:n,sizeBytes:r,onFail:i}){let[a,o]=(0,D.useState)(!1),[s,c]=(0,D.useState)(!1),l=(0,D.useRef)(null),u=r==null?n:`${n} · ${R(r)}`;return(0,D.useEffect)(()=>{let t=!1,n=null;return(async()=>{try{let{loadPdf:r,renderPageToFit:i}=await h(async()=>{let{loadPdf:e,renderPageToFit:t}=await import(`./pdf-render-Bwg_xv1L.js`);return{loadPdf:e,renderPageToFit:t}},__vite__mapDeps([0,1])),a=await r(e);n=a;let o=l.current;if(t||!o)return;await i(a,1,o,ce,le)}catch{t||(c(!0),i?.(`render`))}})(),()=>{t=!0;try{n?.destroy()}catch{}}},[e]),s?(0,O.jsx)(z,{href:e,filename:n,label:u}):(0,O.jsxs)(O.Fragment,{children:[(0,O.jsxs)(`div`,{className:`chat-attachment-pdf`,children:[(0,O.jsx)(`canvas`,{ref:l,className:`chat-attachment-pdf-canvas`,"aria-label":n}),(0,O.jsx)(B,{href:e,filename:n,className:`chat-attachment-download`}),(0,O.jsx)(`button`,{type:`button`,className:`chat-attachment-pdf-expand`,"aria-label":`Expand ${n}`,onClick:()=>o(!0),children:(0,O.jsx)(t,{size:14,"aria-hidden":!0})})]}),a&&(0,O.jsx)(de,{src:e,filename:n,label:u,onClose:()=>o(!1),onFail:i})]})}function de({src:e,filename:t,label:n,onClose:r,onFail:i}){let a=(0,D.useRef)(null),o=(0,D.useRef)(null),[s,l]=(0,D.useState)(null),[u,d]=(0,D.useState)(!1);return(0,D.useEffect)(()=>{let t=!1;return(async()=>{try{let{loadPdf:n}=await h(async()=>{let{loadPdf:e}=await import(`./pdf-render-Bwg_xv1L.js`);return{loadPdf:e}},__vite__mapDeps([0,1])),r=await n(e);if(t){try{r.destroy()}catch{}return}o.current=r,l(r.numPages)}catch{t||(d(!0),i?.(`render`))}})(),()=>{t=!0;try{o.current?.destroy()}catch{}}},[e]),(0,D.useEffect)(()=>{if(s==null)return;let e=a.current,t=o.current;if(!e||!t)return;let n=!1;return(async()=>{try{let{renderPageToWidth:r}=await h(async()=>{let{renderPageToWidth:e}=await import(`./pdf-render-Bwg_xv1L.js`);return{renderPageToWidth:e}},__vite__mapDeps([0,1])),i=Array.from(e.querySelectorAll(`canvas.chat-attachment-overlay-page`)),a=Math.max(e.clientWidth-ue*2,1);for(let e=0;e<i.length;e++){if(n)return;await r(t,e+1,i[e],a)}}catch{n||(d(!0),i?.(`render`))}})(),()=>{n=!0}},[s]),(0,O.jsxs)(`div`,{className:`chat-attachment-overlay`,role:`dialog`,"aria-label":t,onClick:r,children:[(0,O.jsx)(`div`,{ref:a,className:`chat-attachment-overlay-pdf`,onClick:e=>e.stopPropagation(),children:u?(0,O.jsx)(z,{href:e,filename:t,label:n}):Array.from({length:s??0},(e,n)=>(0,O.jsx)(`canvas`,{className:`chat-attachment-overlay-page`,"aria-label":`${t} page ${n+1}`},n))}),(0,O.jsx)(B,{href:e,filename:t,className:`chat-attachment-overlay-download`,size:20,onClick:e=>e.stopPropagation()}),(0,O.jsx)(`button`,{type:`button`,className:`chat-attachment-overlay-close`,"aria-label":`Close`,onClick:r,children:(0,O.jsx)(c,{size:20,"aria-hidden":!0})})]})}function fe({src:e,filename:t,onFail:n}){let[r,i]=(0,D.useState)(!1);return r?(0,O.jsx)(`audio`,{className:`chat-attachment-audio`,controls:!0,preload:`metadata`,src:e,"aria-label":t,onError:()=>n?.(`fetch`)}):(0,O.jsx)(re,{src:e,filename:t,onDecodeFail:()=>{i(!0),n?.(`render`)},onMediaError:()=>{i(!0),n?.(`fetch`)}})}function H({filename:e,href:t,mimeType:n,sizeBytes:r,expandable:i,telemetry:a}){let o=ie(e,n);(0,D.useEffect)(()=>{a?.onRender?.({kind:o,mime:n,served:!!t})},[]);let s=a?.onFail?e=>a.onFail({kind:o===`pdf`?`pdf`:o===`audio`?`audio`:`image`,mime:n,reason:e}):void 0;if(o===`image`&&t)return(0,O.jsx)(se,{src:t,filename:e,sizeBytes:r,expandable:i,onFail:s});if(o===`audio`&&t)return(0,O.jsx)(fe,{src:t,filename:e,onFail:s});if(o===`pdf`&&t)return(0,O.jsx)(V,{src:t,filename:e,sizeBytes:r,onFail:s});let c=r==null?e:`${e} · ${R(r)}`;return t?(0,O.jsx)(z,{href:t,filename:e,label:c}):(0,O.jsxs)(`p`,{className:`chat-doc`,children:[(0,O.jsx)(C,{size:14,"aria-hidden":!0,style:{verticalAlign:`text-bottom`}}),` `,c]})}var pe=/^-?\d+(\.\d+)?,-?\d+(\.\d+)?$/,me=/^\[(?:live )?location: (.+)\]$/;function U(e){let t=me.exec(e.trim());if(!t)return{kind:`none`};let n=t[1].split(` — `),r=n[n.length-1].trim();if(!pe.test(r))return{kind:`label-only`};let[i,a]=r.split(`,`),o=Number(i),s=Number(a);return!Number.isFinite(o)||!Number.isFinite(s)?{kind:`reject`,reason:`nan`,raw:r}:o<-90||o>90||s<-180||s>180?{kind:`reject`,reason:`range`,raw:r}:`${o},${s}`===r?{kind:`point`,lat:o,lon:s}:{kind:`reject`,reason:`roundtrip`,raw:r}}function he(e,t,n=16){let r=2**n,i=(t+180)/360*r,a=(1-Math.asinh(Math.tan(e*Math.PI/180))/Math.PI)/2*r,o=Math.round(i)-1,s=(o%r+r)%r,c=Math.min(Math.max(Math.round(a)-1,0),r-2);return{tiles:[{x:s,y:c},{x:(s+1)%r,y:c},{x:s,y:c+1},{x:(s+1)%r,y:c+1}].map(e=>({...e,url:`https://tile.openstreetmap.org/${n}/${e.x}/${e.y}.png`})),offsetX:i*256-o*256,offsetY:a*256-c*256}}var W=0,G=0;function ge(){return{maps:W,tileErrors:G}}function _e({lat:e,lon:t,msgKeyId:n}){let{tiles:r,offsetX:i,offsetY:a}=he(e,t);return(0,D.useEffect)(()=>(W+=1,()=>{--W}),[]),(0,O.jsx)(`a`,{className:`wa-map`,href:`https://www.openstreetmap.org/?mlat=${e}&mlon=${t}#map=16/${e}/${t}`,target:`_blank`,rel:`noopener noreferrer`,style:{width:240,height:160},children:(0,O.jsxs)(`span`,{className:`wa-map-viewport`,children:[(0,O.jsx)(`span`,{className:`wa-map-block`,style:{left:`calc(50% - ${i}px)`,top:`calc(50% - ${a}px)`},children:r.map(e=>(0,O.jsx)(`img`,{className:`wa-map-tile`,src:e.url,alt:``,width:256,height:256,loading:`lazy`,onError:()=>{G+=1}},e.url))}),(0,O.jsx)(`span`,{className:`wa-map-pin`,"aria-hidden":!0}),(0,O.jsx)(`span`,{className:`wa-map-credit`,children:`© OpenStreetMap contributors`})]})})}function K({text:e,body:t,msgKeyId:n}){let r=U(e);return(0,O.jsxs)(O.Fragment,{children:[r.kind===`point`&&(0,O.jsx)(_e,{lat:r.lat,lon:r.lon,msgKeyId:n}),(0,O.jsx)(`p`,{className:`wa-body`,children:t})]})}function ve(e){let t=0,n=0,r=0,i=0;for(let a of e){let e=a.kind===`turn`?a.turn:null,o=e&&`text`in e&&typeof e.text==`string`?e.text:``;if(o===``)continue;t+=1;let s=U(o);s.kind!==`none`&&(n+=1,s.kind===`point`?r+=1:s.kind===`reject`&&(i+=1))}return{bodies:t,withLabel:n,parsed:r,rejected:i}}var ye=20;function be(e){let t=e.replace(/\/(store-)?stream$/,(e,t)=>t?`/store-backfill`:`/backfill`);return t===e?``:t}function q(e,...t){let[n,r,i,a]=t,[o,s]=(0,D.useState)([]),[c,l]=(0,D.useState)(null),[u,d]=(0,D.useState)(!1),[f,p]=(0,D.useState)(0),m=(0,D.useRef)(!1);(0,D.useEffect)(()=>{s([]),l(null),d(!1),p(0),m.current=!1},[a,n,r,i,e]);let h=(0,D.useCallback)(e=>l(e),[]),g=(0,D.useCallback)(()=>{!e||c===null||c<=0||m.current||(m.current=!0,d(!0),(async()=>{let t=c,a=[],o=0;try{for(;t>0&&a.length===0&&o<ye;){o+=1;let s=await fetch(`${e}?${Se(e,n,r,i,t)}`);if(!s.ok)break;let c=await s.json();if(!Array.isArray(c.turns))break;a.unshift(...c.turns);let l=c.reachedStart?0:c.from;if(!c.reachedStart&&l>=t){xe(e,t,c.from);break}t=l}}catch{}finally{a.length>0&&(s(e=>[...a,...e]),p(e=>e+1)),l(t),m.current=!1,d(!1)}})())},[e,n,r,i,c]);return{turns:o,hasOlder:c!==null&&c>0,loadingOlder:u,prependCount:f,loadOlder:g,setTurns:s,onWindow:h}}function xe(e,t,n){let r=e.endsWith(`/store-backfill`)?`store`:e.includes(`/public-reader/`)?`public`:`session`;try{fetch(`/api/_client-error`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({kind:`event`,source:`reader-backfill`,op:`backfill-no-advance`,reader:r,before:t,from:n}),keepalive:!0}).catch(()=>{})}catch{}}function Se(e,t,n,r,i){let a=e.endsWith(`/store-backfill`);return new URLSearchParams(a?{accountId:t,remoteJid:n,session_key:r,before:String(i)}:{sessionId:t,projectDir:n,session_key:r,before:String(i)}).toString()}function Ce(e,t,n,r=`/api/session-reader/stream`,i=e,a=!0){let[o,s]=(0,D.useState)([]),[c,l]=(0,D.useState)(`open`),[u,d]=(0,D.useState)(null),f=q(be(r),e,t,n,i),{onWindow:p}=f,m=(0,D.useRef)([]);return(0,D.useEffect)(()=>{m.current=o},[o]),(0,D.useEffect)(()=>{s([]),m.current=[],d(null)},[i,t,n,r]),(0,D.useEffect)(()=>{if(l(`open`),!a)return;let i=m.current.slice(),o=i.map(we),c=0,u=i.length>0,f=`${r}?sessionId=${encodeURIComponent(e)}&projectDir=${encodeURIComponent(t)}&session_key=${encodeURIComponent(n)}`,h=new EventSource(f);return h.onopen=()=>{l(`open`)},h.onmessage=e=>{let t;try{t=JSON.parse(e.data)}catch{return}if(u){if(c<o.length&&we(t)===o[c]){c+=1;return}u=!1}s(e=>[...e,t])},h.addEventListener(`activity`,e=>{try{d(JSON.parse(e.data))}catch{}}),h.addEventListener(`activity-clear`,()=>d(null)),h.addEventListener(`window`,e=>{try{let t=JSON.parse(e.data);typeof t.from==`number`&&p(t.from)}catch{}}),h.onerror=()=>{h.readyState===2&&(console.error(`[admin-ui] wa-stream onerror readyState=${h.readyState}`),l(`error`))},()=>h.close()},[e,t,n,r,i,a,p]),{turns:(0,D.useMemo)(()=>[...f.turns,...o],[f.turns,o]),status:c,subagentActivity:u,hasOlder:f.hasOlder,loadingOlder:f.loadingOlder,prependCount:f.prependCount,loadOlder:f.loadOlder}}function we(e){return JSON.stringify(e)}function Te(e,t,n,r=!0){let[i,a]=(0,D.useState)([]),[o,s]=(0,D.useState)(`open`),c=q(`/api/whatsapp-reader/store-backfill`,e,t,n,`${e}|${t}`),{onWindow:l,setTurns:u}=c;return(0,D.useEffect)(()=>{if(a([]),s(`open`),!r||!e||!t)return;let i=`/api/whatsapp-reader/store-stream?accountId=${encodeURIComponent(e)}&remoteJid=${encodeURIComponent(t)}&session_key=${encodeURIComponent(n)}`,o=new EventSource(i);return o.onopen=()=>s(`open`),o.onmessage=e=>{let t;try{t=JSON.parse(e.data)}catch{return}a(e=>[...e,t])},o.addEventListener(`window`,e=>{try{let t=JSON.parse(e.data);typeof t.from==`number`&&l(t.from)}catch{}}),o.addEventListener(`reaction`,e=>{let t;try{t=JSON.parse(e.data)}catch{return}let n=e=>e.map(e=>e.kind===`whatsapp-persisted`&&e.msgKeyId===t.targetMsgKeyId?{...e,reactions:t.reactions}:e);a(n),u(n)}),o.onerror=()=>{o.readyState===2&&s(`error`)},()=>o.close()},[e,t,n,r,l,u]),{turns:(0,D.useMemo)(()=>[...c.turns,...i].sort((e,t)=>String(e.ts??``).localeCompare(String(t.ts??``))),[c.turns,i]),status:o,hasOlder:c.hasOlder,loadingOlder:c.loadingOlder,prependCount:c.prependCount,loadOlder:c.loadOlder}}var Ee=e=>{if(!e)return 1/0;let t=new Date(e).getTime();return Number.isNaN(t)?1/0:t};function De(e,t){let n=[],r=0;return e.forEach((e,t)=>n.push({sort:Ee(e.ts),sub:1,ins:r++,item:{kind:`turn`,turn:e,idx:t}})),t.forEach(e=>n.push({sort:Ee(e.ts),sub:0,ins:r++,item:{kind:`directive`,entry:e}})),n.sort((e,t)=>e.sort===t.sort?e.sort===1/0?e.ins-t.ins:e.sub-t.sub||e.ins-t.ins:e.sort<t.sort?-1:1).map(e=>e.item)}function Oe(e,t,n=!0){let[r,i]=(0,D.useState)([]);return(0,D.useEffect)(()=>{if(!n||typeof fetch!=`function`)return;let r=!0,a=`/api/session-reader/directives?sessionId=${encodeURIComponent(e)}&session_key=${encodeURIComponent(t)}`;return fetch(a).then(e=>e.ok?e.json():{entries:[]}).then(e=>{r&&i(Array.isArray(e.entries)?e.entries:[])}).catch(()=>{r&&i([])}),()=>{r=!1}},[e,t,n]),r}var ke=new Set([`operator-inbound`,`operator-typed`,`agent-reply`,`agent-reply-document`,`agent-file`,`agent-error`,`agent-webchat-final`,`agent-send-party`,`whatsapp-persisted`]),Ae=[`#c2185b`,`#7b1fa2`,`#512da8`,`#303f9f`,`#1976d2`,`#0288d1`,`#0097a7`,`#00796b`,`#388e3c`,`#689f38`,`#af6c00`,`#e64a19`,`#5d4037`,`#455a64`,`#d81b60`,`#8e24aa`,`#3949ab`,`#039be5`,`#00897b`,`#6d4c41`];function je(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619)>>>0;return t>>>0}function Me(e){return Ae[je(e)%Ae.length]}function Ne({accountId:e,jid:t,sessionKey:n,className:r=`wa-web-avatar`,size:i=20}){let[a,o]=(0,D.useState)(null);if(!t||a===t)return(0,O.jsx)(`span`,{className:r,"aria-hidden":!0,children:(0,O.jsx)(E,{size:i})});let s=`/api/whatsapp-reader/avatar?session_key=${encodeURIComponent(n)}&accountId=${encodeURIComponent(e)}&jid=${encodeURIComponent(t)}`;return(0,O.jsx)(`span`,{className:r,"aria-hidden":!0,children:(0,O.jsx)(`img`,{className:`wa-avatar-img`,src:s,alt:``,onError:()=>o(t)})})}function J(e,t){if(!e)return``;let n=new Date(e);if(Number.isNaN(n.getTime()))return``;let r=d(n,t);return`${String(r.hh).padStart(2,`0`)}:${String(r.mm).padStart(2,`0`)}`}function Y(e){let t=e.lastIndexOf(`/`);return t===-1?e:e.slice(t+1)}var Pe=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],Fe=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function X(e,t){if(!e)return null;let n=new Date(e);return Number.isNaN(n.getTime())?null:f(n,t)}function Ie(e,t,n=new Date){if(!e)return``;let r=new Date(e);if(Number.isNaN(r.getTime()))return``;let i=f(r,t);if(i===f(n,t))return`Today`;let a=d(n,t);if(i===f(new Date(Date.UTC(a.y,a.m-1,a.d)-864e5),`UTC`))return`Yesterday`;let o=d(r,t);return`${Pe[new Date(Date.UTC(o.y,o.m-1,o.d)).getUTCDay()]} ${o.d} ${Fe[o.m-1]} ${o.y}`}function Le(e){return e.kind===`turn`?e.turn.ts:e.entry.ts}function Re({ts:e,prevTs:t=null}){let{zone:n}=u(),r=X(e,n);return r===null||t!==null&&X(t,n)===r?null:(0,O.jsx)(`div`,{className:`day-divider`,role:`separator`,children:(0,O.jsx)(`span`,{className:`day-divider-label`,children:Ie(e,n)})})}function ze({ts:e,className:t}){let{zone:n}=u();return(0,O.jsx)(`time`,{className:t,children:J(e,n)})}function Be(){return(0,O.jsx)(`div`,{className:`session-divider`,role:`separator`,children:(0,O.jsx)(`span`,{className:`session-divider-label`,children:`Conversation continued`})})}function Z({label:e,ts:t,colour:n}){let{zone:r}=u();return(0,O.jsxs)(`div`,{className:`wa-turn-head`,children:[(0,O.jsx)(`span`,{className:`wa-who`,style:n?{color:n}:void 0,children:e}),(0,O.jsx)(`time`,{className:`wa-time`,children:J(t,r)})]})}function Ve({turn:e}){let[t,n]=(0,D.useState)(!1),{zone:r}=u(),i=e.kind===`tool-result`,a=i?`wa-turn wa-turn-result${e.isError?` is-error`:``}`:`wa-turn wa-turn-tool`,o=i?e.isError?`result (error)`:`result`:`↳ ${e.name}`,s=i?e.text:JSON.stringify(e.input,null,2);return(0,O.jsxs)(`div`,{className:a,children:[(0,O.jsxs)(`button`,{type:`button`,className:`wa-tool-toggle`,"aria-expanded":t,onClick:()=>n(e=>!e),children:[(0,O.jsx)(`span`,{className:`wa-chevron`,children:t?`▾`:`▸`}),(0,O.jsx)(`span`,{className:`wa-who`,children:o}),(0,O.jsx)(`time`,{className:`wa-time`,children:J(e.ts,r)})]}),t&&(0,O.jsx)(`pre`,{className:`wa-code`,children:s})]})}function He({entry:e,sessionId:t,sessionKey:n}){let[r,i]=(0,D.useState)(!1),[a,o]=(0,D.useState)(null),{zone:s}=u(),c=()=>{let s=!r;if(i(s),s&&a===null&&typeof fetch==`function`){let r=`/api/session-reader/directive?sessionId=${encodeURIComponent(t)}&name=${encodeURIComponent(e.name)}&session_key=${encodeURIComponent(n)}`;fetch(r).then(e=>e.ok?e.text():`(directive unavailable)`).then(o).catch(()=>o(`(directive unavailable)`))}};return(0,O.jsxs)(`div`,{className:`wa-turn wa-turn-directive`,children:[(0,O.jsxs)(`button`,{type:`button`,className:`wa-tool-toggle`,"aria-expanded":r,onClick:c,children:[(0,O.jsx)(`span`,{className:`wa-chevron`,children:r?`▾`:`▸`}),(0,O.jsxs)(`span`,{className:`wa-who`,children:[`⚙ directive injected (`,e.len,` B)`]}),(0,O.jsx)(`time`,{className:`wa-time`,children:J(e.ts,s)})]}),r&&(0,O.jsx)(`pre`,{className:`wa-code`,children:a??`Loading…`})]})}function Ue(e){return`text`in e&&typeof e.text==`string`?e.text:``}function We(e,t){let n=(t??``).trim();if(!n)return e;let r=e.toLowerCase(),i=n.toLowerCase(),a=[],o=0,s=0;for(;;){let t=r.indexOf(i,o);if(t===-1){a.push(e.slice(o));break}t>o&&a.push(e.slice(o,t)),a.push((0,O.jsx)(`mark`,{className:`wa-search-hit`,children:e.slice(t,t+i.length)},s++)),o=t+i.length}return a.length===1?a[0]:(0,O.jsx)(O.Fragment,{children:a})}var Q={onFail:({kind:e,mime:t,reason:n})=>console.warn(`[operator-ui] op=reader-attachment-fail kind=${e} mime=${t??``} reason=${n}`)};function Ge(e,t,n){switch(e.kind){case`operator-inbound`:return(0,O.jsxs)(`div`,{className:`wa-turn wa-turn-in`,children:[(0,O.jsx)(Z,{label:`Operator${te(e.source)}`,ts:e.ts}),e.text&&(0,O.jsx)(K,{text:e.text,body:e.text}),e.attachments&&e.attachments.length>0&&(0,O.jsx)(`div`,{className:`chat-attachment-list`,children:e.attachments.map((e,t)=>(0,O.jsx)(H,{expandable:!0,filename:e.filename,mimeType:e.mimeType,sizeBytes:e.sizeBytes,href:L(e.attachmentId,n.audience,n.sessionId,n.sessionKey),telemetry:Q},t))})]},t);case`operator-typed`:return(0,O.jsxs)(`div`,{className:`wa-turn wa-turn-in wa-turn-typed`,children:[(0,O.jsx)(Z,{label:`Operator (web)`,ts:e.ts}),(0,O.jsx)(K,{text:e.text,body:e.text})]},t);case`agent-text`:return(0,O.jsxs)(`div`,{className:`wa-turn wa-turn-think`,children:[(0,O.jsx)(Z,{label:`Agent`,ts:e.ts}),(0,O.jsx)(K,{text:e.text,body:e.text})]},t);case`agent-reply`:return(0,O.jsxs)(`div`,{className:`wa-turn wa-turn-out`,children:[(0,O.jsx)(Z,{label:`Agent`,ts:e.ts}),(0,O.jsx)(K,{text:e.text,body:e.text})]},t);case`agent-send-party`:return(0,O.jsxs)(`div`,{className:`wa-turn wa-turn-out`,children:[(0,O.jsx)(Z,{label:`Agent to ${e.phone}`,ts:e.ts}),(0,O.jsx)(K,{text:e.text,body:e.text})]},t);case`agent-reply-document`:return(0,O.jsxs)(`div`,{className:`wa-turn wa-turn-out`,children:[(0,O.jsx)(Z,{label:`Agent`,ts:e.ts}),(0,O.jsxs)(`p`,{className:`wa-doc`,children:[(0,O.jsx)(C,{size:14,"aria-hidden":!0,style:{verticalAlign:`text-bottom`}}),` `,`sent document(s): `,e.files.map(Y).join(`, `)]}),e.caption&&(0,O.jsx)(`p`,{className:`wa-body`,children:e.caption})]},t);case`agent-file`:return(0,O.jsxs)(`div`,{className:`wa-turn wa-turn-out`,children:[(0,O.jsx)(Z,{label:`Agent`,ts:e.ts}),e.files.map((t,r)=>{let i=Y(t),a=e.downloads?.[r];return(0,O.jsx)(H,{expandable:!0,filename:i,href:a?ae(a,n.sessionId,n.sessionKey,I.test(i)?`inline`:void 0):void 0,telemetry:Q},r)}),e.caption&&(0,O.jsx)(`p`,{className:`wa-body`,children:e.caption})]},t);case`whatsapp-persisted`:{let r=e.origin===`operator-manual`,i=e.fromMe?r?`You`:`Sent`:e.senderName??`Contact`,a=n.groupThread&&!e.fromMe&&n.storeAccountId&&e.senderJid&&o(e.senderJid)?e.senderJid:null;return(0,O.jsxs)(`div`,{className:`wa-turn ${e.fromMe?`wa-turn-out`:`wa-turn-in`}${r?` wa-op-manual`:``}${a?` wa-turn-has-avatar`:``}`,children:[a&&(0,O.jsx)(Ne,{accountId:n.storeAccountId,jid:a,sessionKey:n.sessionKey,className:`wa-bubble-avatar`,size:14}),n.onReplyTo&&e.msgKeyId&&(0,O.jsx)(`button`,{type:`button`,className:`wa-bubble-reply`,"aria-label":`Reply to this message`,onClick:()=>n.onReplyTo({msgKeyId:e.msgKeyId,body:e.text,senderName:e.senderName,fromMe:e.fromMe}),children:(0,O.jsx)(T,{size:14})}),n.showCopy&&e.text&&(0,O.jsx)(`button`,{type:`button`,className:`wa-bubble-copy`,"aria-label":`Copy this message`,onClick:()=>{let t=e.text;s(t).then(e=>{e||console.warn(`[operator-ui] op=wa-copy-fail reason=clipboard-unavailable`)})},children:(0,O.jsx)(p,{size:14})}),e.quoted&&(0,O.jsxs)(`div`,{className:`wa-quoted`,children:[(0,O.jsx)(`span`,{className:`wa-quoted-who`,children:e.quoted.fromMe?`You`:e.quoted.sender??`Contact`}),(0,O.jsx)(`span`,{className:`wa-quoted-body`,children:e.quoted.body||`Message`})]}),(0,O.jsx)(Z,{label:i,ts:e.ts,colour:n.groupThread&&!e.fromMe?Me(e.senderTelephone||e.senderName||``):void 0}),e.text&&(0,O.jsx)(K,{text:e.text,body:We(e.text,n.highlight),msgKeyId:e.msgKeyId??void 0}),e.attachments&&e.attachments.length>0&&(0,O.jsx)(`div`,{className:`chat-attachment-list`,children:e.attachments.map((e,t)=>(0,O.jsx)(H,{expandable:!0,filename:e.filename,mimeType:e.mimeType,sizeBytes:e.sizeBytes,href:L(e.attachmentId,n.audience,n.sessionId,n.sessionKey),telemetry:Q},t))}),e.reactions&&e.reactions.length>0&&(0,O.jsx)(`div`,{className:`wa-reactions`,children:e.reactions.map((e,t)=>(0,O.jsx)(`span`,{className:`wa-reaction`,title:e.reactorName??void 0,children:e.emoji},t))}),(0,O.jsxs)(`span`,{className:`wa-bubble-meta`,children:[r&&(0,O.jsx)(`span`,{className:`wa-op-tag`,children:`You`}),(0,O.jsx)(ze,{ts:e.ts,className:`wa-bubble-time`}),e.fromMe&&(0,O.jsx)(b,{size:14,className:`wa-bubble-tick`,"aria-hidden":!0})]})]},t)}case`session-continued`:return(0,O.jsx)(Be,{},t);case`harness-internal`:return null;case`tool-call`:case`tool-result`:return(0,O.jsx)(Ve,{turn:e},t);case`agent-error`:return(0,O.jsxs)(`div`,{className:`wa-turn wa-turn-error`,role:`alert`,children:[(0,O.jsx)(Z,{label:`Agent`,ts:e.ts}),(0,O.jsx)(`p`,{className:`wa-body wa-error-body`,children:M(e.code,`admin`)}),e.code===`agent_error`&&e.raw&&(0,O.jsx)(`pre`,{className:`wa-code`,children:e.raw})]},t)}}function $(e,t,n,r=`admin`,i,a,o,s,c){let l={sessionId:t,sessionKey:n,audience:r,highlight:i,onReplyTo:a,showCopy:o,groupThread:s,storeAccountId:c},u=[],d=null;return e.forEach((e,r)=>{let i=Le(e);i!==null&&!Number.isNaN(new Date(i).getTime())&&(u.push((0,O.jsx)(Re,{ts:i,prevTs:d},`day-${r}`)),d=i),u.push(e.kind===`turn`?Ge(e.turn,r,l):(0,O.jsx)(He,{entry:e.entry,sessionId:t,sessionKey:n},r))}),u}function Ke(e){return e.filter(e=>e.kind===`turn`&&ke.has(e.turn.kind)&&!(e.turn.kind===`operator-inbound`&&e.turn.scheduled))}var qe=(0,D.memo)(function({sessionId:e,projectDir:t,sessionKey:n,renderItems:r=$,clean:i,onToggleClean:a,forceDeliveredOnly:o=!1,streamEndpoint:s=`/api/session-reader/stream`,suppressDirectives:c=!1,tail:l=null,resetKey:u,onTurnsChange:d,onActivityChange:f,store:p,search:m,onReplyTo:h,groupThread:g=!1}){let _=!!p,v=Ce(e,t,n,s,u,!_),y=Te(p?.accountId??``,p?.remoteJid??``,n,_),{turns:b,status:x}=_?{turns:y.turns,status:y.status}:{turns:v.turns,status:v.status},S=_?y:v,C=_?null:v.subagentActivity;(0,D.useEffect)(()=>{f?.(C)},[C,f]),(0,D.useEffect)(()=>{d?.(b.length)},[b.length,d]);let w=De(b,Oe(e,n,!c)),T=a==null?!1:!!i,E=o||T?Ke(w):w,k=(m??``).trim().toLowerCase(),A=k.length>0,j=A?E.filter(e=>e.kind===`turn`&&Ue(e.turn).toLowerCase().includes(k)):E;return(0,D.useEffect)(()=>{if(!g||!_)return;let e=b.filter(e=>e.kind===`whatsapp-persisted`&&!e.fromMe);if(e.length===0)return;let t=new Set(e.map(e=>e.senderTelephone||e.senderName||``));new Set(Array.from(t,e=>Me(e))),new Set(e.filter(e=>!e.senderTelephone).map(e=>e.senderName??``)).size},[g,_,b,p?.remoteJid]),(0,D.useEffect)(()=>{let e=_?j:r===$?E:null;if(!e||ve(e).bodies===0)return;let{maps:t,tileErrors:n}=ge()},[_,j,E,r]),(0,O.jsxs)(ee,{repinSignals:[b,T,A],tail:l,onReachTop:S.hasOlder&&!A?S.loadOlder:void 0,prependToken:S.prependCount,children:[x===`error`&&(0,O.jsx)(`div`,{className:`wa-reader-error`,children:`Stream disconnected.`}),S.loadingOlder&&(0,O.jsx)(`div`,{className:`wa-reader-placeholder`,children:`Loading earlier messages…`}),!A&&b.length===0&&x===`open`&&(0,O.jsx)(`div`,{className:`wa-reader-placeholder`,children:`No messages in this conversation yet.`}),A&&j.length===0&&(0,O.jsxs)(`div`,{className:`wa-reader-placeholder`,children:[`No matches for "`,m,`".`]}),_?$(j,e,n,`admin`,m,h,!0,g,p?.accountId):r(E,e,n)]})});function Je(e,t){let n=e.split(`;`)[0].trim().toLowerCase();return t.has(n)}var Ye=[`audio/ogg;codecs=opus`,`audio/webm;codecs=opus`,`audio/webm`,`audio/mp4`];function Xe(){for(let e of Ye)if(MediaRecorder.isTypeSupported(e))return e;return``}function Ze(e){return e.split(`;`)[0]}async function Qe(){return typeof navigator>`u`||!navigator.mediaDevices?.enumerateDevices?[]:(await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===`audioinput`)}function $e(e){let[t,n]=(0,D.useState)(`idle`),[r,i]=(0,D.useState)(0),[a,o]=(0,D.useState)(null),[s,c]=(0,D.useState)(null),l=(0,D.useRef)(null),u=(0,D.useRef)(null),d=(0,D.useRef)([]),f=(0,D.useRef)(``),p=(0,D.useRef)(null),m=(0,D.useRef)(0),h=(0,D.useRef)(0),g=(0,D.useRef)(null),_=(0,D.useRef)(null),v=(0,D.useRef)(0),y=(0,D.useCallback)(()=>{if(p.current&&=(clearInterval(p.current),null),v.current&&=(cancelAnimationFrame(v.current),0),l.current&&l.current.state!==`inactive`)try{l.current.stop()}catch{}l.current=null,d.current=[],u.current&&=(u.current.getTracks().forEach(e=>e.stop()),null),g.current&&(g.current.close().catch(()=>{}),g.current=null,_.current=null),h.current=0,m.current=0},[]);(0,D.useEffect)(()=>y,[y]);let b=(0,D.useCallback)(()=>{m.current=Date.now(),p.current=setInterval(()=>{let e=Date.now()-m.current,t=h.current+e;i(Math.floor(t/1e3))},200)},[]),x=(0,D.useCallback)(()=>{p.current&&=(clearInterval(p.current),null);let e=Date.now()-m.current;h.current+=e},[]),S=(0,D.useCallback)(()=>{let e=_.current;if(!e)return;let t=new Uint8Array(e.frequencyBinCount),n=()=>{e.getByteTimeDomainData(t),o(new Uint8Array(t)),v.current=requestAnimationFrame(n)};n()},[]),C=(0,D.useCallback)(()=>{v.current&&=(cancelAnimationFrame(v.current),0)},[]),w=e?.onResult,T=(0,D.useCallback)(async e=>{if(!(t!==`idle`&&t!==`error`)){if(c(null),typeof window<`u`&&!window.isSecureContext){n(`error`),c(`Voice recording requires a secure connection (HTTPS). Use your tunnel URL for voice notes.`);return}if(typeof navigator>`u`||!navigator.mediaDevices?.getUserMedia){n(`error`),c(`Voice recording is not supported in this browser.`);return}if(typeof MediaRecorder>`u`){n(`error`),c(`Voice recording is not supported in this browser.`);return}try{let t=e?{audio:{deviceId:{exact:e}}}:{audio:!0},r;try{r=await navigator.mediaDevices.getUserMedia(t)}catch(t){let n=t?.name;if(e&&(n===`OverconstrainedError`||n===`NotFoundError`))r=await navigator.mediaDevices.getUserMedia({audio:!0});else throw t}u.current=r;let a=new AudioContext;g.current=a;let s=a.createMediaStreamSource(r),c=a.createAnalyser();c.fftSize=256,s.connect(c),_.current=c;let p=Xe();f.current=p;let m=new MediaRecorder(r,p?{mimeType:p}:void 0);l.current=m,d.current=[],m.ondataavailable=e=>{e.data.size>0&&d.current.push(e.data)},r.getAudioTracks()[0]?.addEventListener(`ended`,()=>{y(),n(`idle`),i(0),o(null)}),m.start(1e3),n(`recording`),i(0),b(),S(),w?.({ok:!0})}catch(e){y(),n(`error`),e instanceof DOMException?(w?.({ok:!1,name:e.name,message:e.message}),e.name===`NotAllowedError`?c(`Microphone access was denied. Check your browser permissions to enable voice recording.`):e.name===`NotFoundError`?c(`No microphone found. Connect a microphone to use voice recording.`):e.name===`NotReadableError`?c(`The microphone could not be started even though access was granted. The browser reported: ${e.message} (${e.name}).`):c(`Microphone error (${e.name}): ${e.message}`)):(w?.({ok:!1}),c(`Could not start recording.`))}}},[t,y,b,S,w]),E=(0,D.useCallback)(()=>{let e=l.current;e&&(t===`recording`&&e.state===`recording`?(e.pause(),x(),C(),n(`paused`)):t===`paused`&&e.state===`paused`&&(e.resume(),b(),S(),n(`recording`)))},[t,x,b,S,C]),O=(0,D.useCallback)(()=>{t!==`recording`&&t!==`paused`||(y(),n(`idle`),i(0),o(null))},[t,y]),k=(0,D.useCallback)(async()=>{if(t!==`recording`&&t!==`paused`)return null;let e=l.current;if(!e)return null;let r=t===`recording`?Date.now()-m.current:0;return h.current+r<1e3?(O(),null):(n(`sending`),x(),C(),new Promise(t=>{e.onstop=()=>{let r=f.current||e.mimeType||`audio/webm`,a=new Blob(d.current,{type:Ze(r)});y(),n(`idle`),i(0),o(null),t(a.size>0?a:null)},e.stop()}))},[t,O,x,C,y]);return(0,D.useEffect)(()=>{if(t!==`error`)return;let e=setTimeout(()=>{n(`idle`),c(null)},8e3);return()=>clearTimeout(e)},[t]),{state:t,elapsedSeconds:r,waveform:a,errorMessage:s,start:T,togglePause:E,discard:O,send:k}}export{y as A,w as C,g as D,x as E,v as O,T as S,S as T,L as _,He as a,M as b,Y as c,Le as d,Ne as f,I as g,F as h,Re as i,_ as k,X as l,V as m,$e as n,Be as o,H as p,Je as r,qe as s,Qe as t,J as u,ae as v,C as w,E as x,oe as y};
|
|
Binary file
|
|
Binary file
|
|
@@ -5,20 +5,20 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>Chat — Maxy</title>
|
|
7
7
|
<link rel="icon" href="/favicon.ico">
|
|
8
|
-
<script type="module" crossorigin src="/assets/chat-
|
|
8
|
+
<script type="module" crossorigin src="/assets/chat-D7LjNerV.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/useMediaQuery-DIm6yGOl.js">
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/AdminShell-BVKfxSgh.js">
|
|
12
12
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-BJ2zoBc3.js">
|
|
13
13
|
<link rel="modulepreload" crossorigin href="/assets/copy-CG2tAK16.js">
|
|
14
14
|
<link rel="modulepreload" crossorigin href="/assets/play-Bankj0zU.js">
|
|
15
|
-
<link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-
|
|
15
|
+
<link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-q9U5ahfg.js">
|
|
16
16
|
<link rel="modulepreload" crossorigin href="/assets/useCopyFeedback-Ae_va0Ps.js">
|
|
17
17
|
<link rel="modulepreload" crossorigin href="/assets/chevron-left-CGsW9Vsp.js">
|
|
18
18
|
<link rel="modulepreload" crossorigin href="/assets/file-text-47cIljhV.js">
|
|
19
19
|
<link rel="modulepreload" crossorigin href="/assets/rotate-ccw-Dbj7NrEB.js">
|
|
20
20
|
<link rel="modulepreload" crossorigin href="/assets/wrench-BmXV4Tmh.js">
|
|
21
|
-
<link rel="modulepreload" crossorigin href="/assets/page-
|
|
21
|
+
<link rel="modulepreload" crossorigin href="/assets/page-DcKH1PVD.js">
|
|
22
22
|
<link rel="stylesheet" crossorigin href="/assets/useMediaQuery-HRgPNA8l.css">
|
|
23
23
|
<link rel="stylesheet" href="/brand-defaults.css">
|
|
24
24
|
</head>
|
|
@@ -5,19 +5,19 @@
|
|
|
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-
|
|
8
|
+
<script type="module" crossorigin src="/assets/data-BU60tJiv.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/useMediaQuery-DIm6yGOl.js">
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/graph-labels-Byp2RkVg.js">
|
|
12
12
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-BJ2zoBc3.js">
|
|
13
13
|
<link rel="modulepreload" crossorigin href="/assets/copy-CG2tAK16.js">
|
|
14
14
|
<link rel="modulepreload" crossorigin href="/assets/play-Bankj0zU.js">
|
|
15
|
-
<link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-
|
|
15
|
+
<link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-q9U5ahfg.js">
|
|
16
16
|
<link rel="modulepreload" crossorigin href="/assets/file-download-DiQesOd2.js">
|
|
17
17
|
<link rel="modulepreload" crossorigin href="/assets/chevron-left-CGsW9Vsp.js">
|
|
18
18
|
<link rel="modulepreload" crossorigin href="/assets/file-text-47cIljhV.js">
|
|
19
19
|
<link rel="modulepreload" crossorigin href="/assets/triangle-alert-D7zwttJW.js">
|
|
20
|
-
<link rel="modulepreload" crossorigin href="/assets/page-
|
|
20
|
+
<link rel="modulepreload" crossorigin href="/assets/page-CogD1Hho.js">
|
|
21
21
|
<link rel="stylesheet" crossorigin href="/assets/useMediaQuery-HRgPNA8l.css">
|
|
22
22
|
<link rel="stylesheet" href="/brand-defaults.css">
|
|
23
23
|
</head>
|
|
@@ -5,7 +5,7 @@
|
|
|
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-
|
|
8
|
+
<script type="module" crossorigin src="/assets/admin-BUor8KRy.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/useMediaQuery-DIm6yGOl.js">
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/graph-labels-Byp2RkVg.js">
|
|
@@ -13,13 +13,13 @@
|
|
|
13
13
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-BJ2zoBc3.js">
|
|
14
14
|
<link rel="modulepreload" crossorigin href="/assets/copy-CG2tAK16.js">
|
|
15
15
|
<link rel="modulepreload" crossorigin href="/assets/play-Bankj0zU.js">
|
|
16
|
-
<link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-
|
|
17
|
-
<link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-
|
|
16
|
+
<link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-q9U5ahfg.js">
|
|
17
|
+
<link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-BUv_EOfw.js">
|
|
18
18
|
<link rel="modulepreload" crossorigin href="/assets/file-download-DiQesOd2.js">
|
|
19
19
|
<link rel="modulepreload" crossorigin href="/assets/chevron-left-CGsW9Vsp.js">
|
|
20
20
|
<link rel="modulepreload" crossorigin href="/assets/file-text-47cIljhV.js">
|
|
21
21
|
<link rel="modulepreload" crossorigin href="/assets/triangle-alert-D7zwttJW.js">
|
|
22
|
-
<link rel="modulepreload" crossorigin href="/assets/page-
|
|
22
|
+
<link rel="modulepreload" crossorigin href="/assets/page-CogD1Hho.js">
|
|
23
23
|
<link rel="stylesheet" crossorigin href="/assets/useMediaQuery-HRgPNA8l.css">
|
|
24
24
|
<link rel="stylesheet" crossorigin href="/assets/AdminLoginScreens-CWMpccrR.css">
|
|
25
25
|
<link rel="stylesheet" href="/brand-defaults.css">
|
|
@@ -5,21 +5,21 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>Operator — Maxy</title>
|
|
7
7
|
<link rel="icon" href="/favicon.ico">
|
|
8
|
-
<script type="module" crossorigin src="/assets/operator-
|
|
8
|
+
<script type="module" crossorigin src="/assets/operator-t15ZvJER.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/useMediaQuery-DIm6yGOl.js">
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/AdminShell-BVKfxSgh.js">
|
|
12
12
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-BJ2zoBc3.js">
|
|
13
13
|
<link rel="modulepreload" crossorigin href="/assets/copy-CG2tAK16.js">
|
|
14
14
|
<link rel="modulepreload" crossorigin href="/assets/play-Bankj0zU.js">
|
|
15
|
-
<link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-
|
|
16
|
-
<link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-
|
|
15
|
+
<link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-q9U5ahfg.js">
|
|
16
|
+
<link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-BUv_EOfw.js">
|
|
17
17
|
<link rel="modulepreload" crossorigin href="/assets/useCopyFeedback-Ae_va0Ps.js">
|
|
18
18
|
<link rel="modulepreload" crossorigin href="/assets/chevron-left-CGsW9Vsp.js">
|
|
19
19
|
<link rel="modulepreload" crossorigin href="/assets/file-text-47cIljhV.js">
|
|
20
20
|
<link rel="modulepreload" crossorigin href="/assets/rotate-ccw-Dbj7NrEB.js">
|
|
21
21
|
<link rel="modulepreload" crossorigin href="/assets/wrench-BmXV4Tmh.js">
|
|
22
|
-
<link rel="modulepreload" crossorigin href="/assets/page-
|
|
22
|
+
<link rel="modulepreload" crossorigin href="/assets/page-DcKH1PVD.js">
|
|
23
23
|
<link rel="stylesheet" crossorigin href="/assets/useMediaQuery-HRgPNA8l.css">
|
|
24
24
|
<link rel="stylesheet" crossorigin href="/assets/AdminLoginScreens-CWMpccrR.css">
|
|
25
25
|
<link rel="stylesheet" href="/brand-defaults.css">
|
|
@@ -5,20 +5,20 @@
|
|
|
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-
|
|
8
|
+
<script type="module" crossorigin src="/assets/public-UlLvs9vV.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/useMediaQuery-DIm6yGOl.js">
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/AdminShell-BVKfxSgh.js">
|
|
12
12
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-BJ2zoBc3.js">
|
|
13
13
|
<link rel="modulepreload" crossorigin href="/assets/copy-CG2tAK16.js">
|
|
14
14
|
<link rel="modulepreload" crossorigin href="/assets/play-Bankj0zU.js">
|
|
15
|
-
<link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-
|
|
15
|
+
<link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-q9U5ahfg.js">
|
|
16
16
|
<link rel="modulepreload" crossorigin href="/assets/useCopyFeedback-Ae_va0Ps.js">
|
|
17
17
|
<link rel="modulepreload" crossorigin href="/assets/chevron-left-CGsW9Vsp.js">
|
|
18
18
|
<link rel="modulepreload" crossorigin href="/assets/file-text-47cIljhV.js">
|
|
19
19
|
<link rel="modulepreload" crossorigin href="/assets/rotate-ccw-Dbj7NrEB.js">
|
|
20
20
|
<link rel="modulepreload" crossorigin href="/assets/wrench-BmXV4Tmh.js">
|
|
21
|
-
<link rel="modulepreload" crossorigin href="/assets/page-
|
|
21
|
+
<link rel="modulepreload" crossorigin href="/assets/page-DcKH1PVD.js">
|
|
22
22
|
<link rel="stylesheet" crossorigin href="/assets/useMediaQuery-HRgPNA8l.css">
|
|
23
23
|
<link rel="stylesheet" href="/brand-defaults.css">
|
|
24
24
|
</head>
|
package/payload/server/server.js
CHANGED
|
@@ -1839,7 +1839,7 @@ var require_dist6 = __commonJS({
|
|
|
1839
1839
|
import { readFileSync as readFileSync48, existsSync as existsSync52, watchFile, readdirSync as readdirSync30, statSync as statSync28 } from "fs";
|
|
1840
1840
|
import { spawn as spawn3 } from "child_process";
|
|
1841
1841
|
import { createHash as createHash7 } from "crypto";
|
|
1842
|
-
import { resolve as resolve45, join as join57, basename as
|
|
1842
|
+
import { resolve as resolve45, join as join57, basename as basename17 } from "path";
|
|
1843
1843
|
import { homedir as homedir4 } from "os";
|
|
1844
1844
|
|
|
1845
1845
|
// server/lib/route-cache-watchers.ts
|
|
@@ -2954,6 +2954,27 @@ function alignToRow(path, rawFrom, fileEnd) {
|
|
|
2954
2954
|
if (nl === -1) return { from: rawFrom, aligned: false };
|
|
2955
2955
|
return { from: rawFrom + nl + 1, aligned: true };
|
|
2956
2956
|
}
|
|
2957
|
+
function backfillRangeStart(path, to, budget = TAIL_WINDOW_BYTES) {
|
|
2958
|
+
const rawFrom = Math.max(0, to - budget);
|
|
2959
|
+
if (rawFrom <= 0) return { from: 0, aligned: true };
|
|
2960
|
+
const span = Math.min(rawFrom, ALIGN_SCAN_MAX_BYTES);
|
|
2961
|
+
const start = rawFrom - span;
|
|
2962
|
+
let buf;
|
|
2963
|
+
try {
|
|
2964
|
+
buf = Buffer.alloc(span);
|
|
2965
|
+
const fd = openSync(path, "r");
|
|
2966
|
+
try {
|
|
2967
|
+
readSync(fd, buf, 0, span, start);
|
|
2968
|
+
} finally {
|
|
2969
|
+
closeSync(fd);
|
|
2970
|
+
}
|
|
2971
|
+
} catch {
|
|
2972
|
+
return { from: rawFrom, aligned: false };
|
|
2973
|
+
}
|
|
2974
|
+
const nl = buf.lastIndexOf(10);
|
|
2975
|
+
if (nl === -1) return start === 0 ? { from: 0, aligned: true } : { from: rawFrom, aligned: false };
|
|
2976
|
+
return { from: start + nl + 1, aligned: true };
|
|
2977
|
+
}
|
|
2957
2978
|
|
|
2958
2979
|
// server/lib/turn-ctx-seed.ts
|
|
2959
2980
|
import { openSync as openSync2, readSync as readSync2, closeSync as closeSync2 } from "fs";
|
|
@@ -3008,12 +3029,12 @@ function addBounded(set, id) {
|
|
|
3008
3029
|
}
|
|
3009
3030
|
set.add(id);
|
|
3010
3031
|
}
|
|
3011
|
-
function noteWindowedOpen(
|
|
3032
|
+
function noteWindowedOpen(transcriptId, windowed) {
|
|
3012
3033
|
if (!windowed) return;
|
|
3013
|
-
addBounded(windowedOpens,
|
|
3034
|
+
addBounded(windowedOpens, transcriptId);
|
|
3014
3035
|
}
|
|
3015
|
-
function noteBackfill(
|
|
3016
|
-
addBounded(sawBackfill,
|
|
3036
|
+
function noteBackfill(transcriptId) {
|
|
3037
|
+
addBounded(sawBackfill, transcriptId);
|
|
3017
3038
|
}
|
|
3018
3039
|
function censusSnapshot() {
|
|
3019
3040
|
let withBackfill = 0;
|
|
@@ -3041,6 +3062,14 @@ function fixtureBody() {
|
|
|
3041
3062
|
message: { role: "assistant", content: [{ type: "text", text: `audit-${i}-${"x".repeat(400)}` }] }
|
|
3042
3063
|
})
|
|
3043
3064
|
);
|
|
3065
|
+
if (i === Math.floor(FIXTURE_ROWS / 2)) {
|
|
3066
|
+
rows.push(
|
|
3067
|
+
JSON.stringify({
|
|
3068
|
+
type: "assistant",
|
|
3069
|
+
message: { role: "assistant", content: [{ type: "text", text: `audit-fat-${"F".repeat(FIXTURE_BUDGET * 2)}` }] }
|
|
3070
|
+
})
|
|
3071
|
+
);
|
|
3072
|
+
}
|
|
3044
3073
|
}
|
|
3045
3074
|
return rows.join("\n") + "\n";
|
|
3046
3075
|
}
|
|
@@ -3063,14 +3092,17 @@ function runReaderWindowAudit() {
|
|
|
3063
3092
|
const older = [];
|
|
3064
3093
|
let before = windowFrom;
|
|
3065
3094
|
let guard = 0;
|
|
3095
|
+
let walkTerminated = true;
|
|
3066
3096
|
while (before > 0) {
|
|
3067
|
-
const
|
|
3068
|
-
const { from } = alignToRow(path, rawFrom, before);
|
|
3097
|
+
const { from } = backfillRangeStart(path, before, FIXTURE_BUDGET);
|
|
3069
3098
|
const ctx = {};
|
|
3070
3099
|
if (from > 0) seedTurnCtx(path, from, ctx);
|
|
3071
3100
|
older.unshift(...parseTranscript(readRange(path, from, before).toString("utf8").split("\n"), /* @__PURE__ */ new Map(), ctx));
|
|
3072
3101
|
before = from;
|
|
3073
|
-
if (++guard > 1e3)
|
|
3102
|
+
if (++guard > 1e3) {
|
|
3103
|
+
walkTerminated = false;
|
|
3104
|
+
break;
|
|
3105
|
+
}
|
|
3074
3106
|
}
|
|
3075
3107
|
const assembled = older.concat(windowTurns);
|
|
3076
3108
|
const assembledKeys = assembled.map(key);
|
|
@@ -3080,7 +3112,7 @@ function runReaderWindowAudit() {
|
|
|
3080
3112
|
const gaps = fullKeys.filter((k) => !assembledSet.has(k)).length;
|
|
3081
3113
|
const ordered = assembledKeys.length === fullKeys.length && assembledKeys.every((k, i) => k === fullKeys[i]);
|
|
3082
3114
|
console.log(
|
|
3083
|
-
`${TAG3} op=window-continuity fixture=synthetic full=${full.length} assembled=${assembled.length} duplicates=${duplicates} gaps=${gaps} ordered=${ordered}`
|
|
3115
|
+
`${TAG3} op=window-continuity fixture=synthetic full=${full.length} assembled=${assembled.length} duplicates=${duplicates} gaps=${gaps} ordered=${ordered} walkTerminated=${walkTerminated}`
|
|
3084
3116
|
);
|
|
3085
3117
|
const windowRef = parseTranscript(readRange(path, windowFrom, fileEnd).toString("utf8").split("\n"));
|
|
3086
3118
|
const mismatched = windowTurns.reduce(
|
|
@@ -3090,8 +3122,8 @@ function runReaderWindowAudit() {
|
|
|
3090
3122
|
console.log(
|
|
3091
3123
|
`${TAG3} op=window-kinds fixture=synthetic windowTurns=${windowTurns.length} mismatched=${mismatched}`
|
|
3092
3124
|
);
|
|
3093
|
-
const ok2 = duplicates === 0 && gaps === 0 && ordered && mismatched === 0;
|
|
3094
|
-
return `continuity=${ok2 ? "ok" : "FAILED"} full=${full.length} assembled=${assembled.length} reach=${census.withBackfill}/${census.windowed}`;
|
|
3125
|
+
const ok2 = duplicates === 0 && gaps === 0 && ordered && walkTerminated && mismatched === 0;
|
|
3126
|
+
return `continuity=${ok2 ? "ok" : "FAILED"} full=${full.length} assembled=${assembled.length} walk=${walkTerminated ? "ok" : "STUCK"} reach=${census.withBackfill}/${census.windowed}`;
|
|
3095
3127
|
} catch (err) {
|
|
3096
3128
|
const reason = err instanceof Error ? err.message : String(err);
|
|
3097
3129
|
console.error(`${TAG3} op=audit-failed reason=${reason.slice(0, 120)}`);
|
|
@@ -4581,11 +4613,11 @@ function findExistingJsonlForSessionId(claudeConfigDir2, sessionId) {
|
|
|
4581
4613
|
} catch {
|
|
4582
4614
|
return null;
|
|
4583
4615
|
}
|
|
4584
|
-
const
|
|
4616
|
+
const basename18 = `${sessionId}.jsonl`;
|
|
4585
4617
|
for (const slug of slugs) {
|
|
4586
|
-
const live = join8(projectsRoot, slug,
|
|
4618
|
+
const live = join8(projectsRoot, slug, basename18);
|
|
4587
4619
|
if (existsSync3(live)) return live;
|
|
4588
|
-
const archived = join8(projectsRoot, slug, "archive",
|
|
4620
|
+
const archived = join8(projectsRoot, slug, "archive", basename18);
|
|
4589
4621
|
if (existsSync3(archived)) return archived;
|
|
4590
4622
|
}
|
|
4591
4623
|
return null;
|
|
@@ -4783,6 +4815,7 @@ async function resolveOperatorNamesBySender(users, admins, senderIds) {
|
|
|
4783
4815
|
|
|
4784
4816
|
// server/routes/admin/sidebar-sessions.ts
|
|
4785
4817
|
var SESSION_ID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\.jsonl$/i;
|
|
4818
|
+
var SIDECAR_META_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\.meta\.json$/i;
|
|
4786
4819
|
function lastAssistantModel(body) {
|
|
4787
4820
|
const lines = body.split("\n");
|
|
4788
4821
|
for (let i = lines.length - 1; i >= 0; i--) {
|
|
@@ -4835,7 +4868,7 @@ function findSessionProjectDir(sessionId) {
|
|
|
4835
4868
|
const jsonlPath = findExistingJsonlForSessionId(cfg, sessionId);
|
|
4836
4869
|
return jsonlPath ? dirname(jsonlPath) : null;
|
|
4837
4870
|
}
|
|
4838
|
-
function enumerateJsonlsWithSkips(projectsRoot) {
|
|
4871
|
+
function enumerateJsonlsWithSkips(projectsRoot, fileRe = SESSION_ID_RE) {
|
|
4839
4872
|
const out = [];
|
|
4840
4873
|
let skipped = 0;
|
|
4841
4874
|
let slugs;
|
|
@@ -4857,7 +4890,7 @@ function enumerateJsonlsWithSkips(projectsRoot) {
|
|
|
4857
4890
|
continue;
|
|
4858
4891
|
}
|
|
4859
4892
|
for (const entry of entries2) {
|
|
4860
|
-
if (entry.isFile() &&
|
|
4893
|
+
if (entry.isFile() && fileRe.test(entry.name)) {
|
|
4861
4894
|
out.push({ path: join10(slugDir, entry.name), isSubagent: false, archived: false });
|
|
4862
4895
|
} else if (entry.isDirectory() && entry.name === "subagents") {
|
|
4863
4896
|
const subDir = join10(slugDir, entry.name);
|
|
@@ -4871,7 +4904,7 @@ function enumerateJsonlsWithSkips(projectsRoot) {
|
|
|
4871
4904
|
continue;
|
|
4872
4905
|
}
|
|
4873
4906
|
for (const sub of subEntries) {
|
|
4874
|
-
if (sub.isFile() &&
|
|
4907
|
+
if (sub.isFile() && fileRe.test(sub.name)) {
|
|
4875
4908
|
out.push({ path: join10(subDir, sub.name), isSubagent: true, archived: false });
|
|
4876
4909
|
}
|
|
4877
4910
|
}
|
|
@@ -4887,7 +4920,7 @@ function enumerateJsonlsWithSkips(projectsRoot) {
|
|
|
4887
4920
|
continue;
|
|
4888
4921
|
}
|
|
4889
4922
|
for (const arc of archiveEntries) {
|
|
4890
|
-
if (arc.isFile() &&
|
|
4923
|
+
if (arc.isFile() && fileRe.test(arc.name)) {
|
|
4891
4924
|
out.push({ path: join10(archiveDir, arc.name), isSubagent: false, archived: true });
|
|
4892
4925
|
}
|
|
4893
4926
|
}
|
|
@@ -4899,6 +4932,9 @@ function enumerateJsonlsWithSkips(projectsRoot) {
|
|
|
4899
4932
|
function enumerateJsonls(projectsRoot) {
|
|
4900
4933
|
return enumerateJsonlsWithSkips(projectsRoot).files;
|
|
4901
4934
|
}
|
|
4935
|
+
function enumerateSessionSidecars(projectsRoot) {
|
|
4936
|
+
return enumerateJsonlsWithSkips(projectsRoot, SIDECAR_META_RE).files;
|
|
4937
|
+
}
|
|
4902
4938
|
async function fetchLiveSessions() {
|
|
4903
4939
|
const out = /* @__PURE__ */ new Map();
|
|
4904
4940
|
let port2;
|
|
@@ -10651,8 +10687,7 @@ app5.get("/store-backfill", requireAdminSession, (c) => {
|
|
|
10651
10687
|
console.log(`[wa-reader] op=store-backfill remoteJid=${remoteJid} from=0 to=0 turns=0 bytes=0 reachedStart=true`);
|
|
10652
10688
|
return c.json({ turns: [], from: 0, reachedStart: true });
|
|
10653
10689
|
}
|
|
10654
|
-
const
|
|
10655
|
-
const { from, aligned } = alignToRow(file, rawFrom, to);
|
|
10690
|
+
const { from, aligned } = backfillRangeStart(file, to, TAIL_WINDOW_BYTES);
|
|
10656
10691
|
const records = [];
|
|
10657
10692
|
const reactionRecords = [];
|
|
10658
10693
|
let reactionScanBytes = 0;
|
|
@@ -10708,6 +10743,7 @@ app5.get("/store-backfill", requireAdminSession, (c) => {
|
|
|
10708
10743
|
const fold = foldReactions(reactionRecords);
|
|
10709
10744
|
const turns = records.map((m) => toTurn(m, fold.get(m.msgKeyId)));
|
|
10710
10745
|
const reachedStart = from === 0;
|
|
10746
|
+
noteBackfill(remoteJid.slice(0, 12));
|
|
10711
10747
|
console.log(
|
|
10712
10748
|
`[wa-reader] op=store-backfill remoteJid=${remoteJid} from=${from} to=${to} turns=${turns.length} bytes=${to - from} aligned=${aligned} reactionScanBytes=${reactionScanBytes} quoteResolved=${q2.found.size} quoteMissing=${wanted.size - q2.found.size} quoteCapped=${q2.capped} reachedStart=${reachedStart}`
|
|
10713
10749
|
);
|
|
@@ -10775,6 +10811,7 @@ data: ${JSON.stringify(payload)}
|
|
|
10775
10811
|
if (offset === 0) {
|
|
10776
10812
|
const rawFrom = tailWindowStart(fileEnd0, TAIL_WINDOW_BYTES);
|
|
10777
10813
|
const { from: alignedFrom, aligned } = alignToRow(file, rawFrom, fileEnd0);
|
|
10814
|
+
noteWindowedOpen(remoteJid.slice(0, 12), alignedFrom > 0);
|
|
10778
10815
|
controller.enqueue(
|
|
10779
10816
|
encoder.encode(`event: window
|
|
10780
10817
|
data: ${JSON.stringify({ from: alignedFrom, fileEnd: fileEnd0 })}
|
|
@@ -11409,7 +11446,7 @@ data: ${JSON.stringify({ from: alignedFrom, fileEnd: fileEnd0 })}
|
|
|
11409
11446
|
|
|
11410
11447
|
`)
|
|
11411
11448
|
);
|
|
11412
|
-
noteWindowedOpen(
|
|
11449
|
+
noteWindowedOpen(sessionId.slice(0, 8), windowed);
|
|
11413
11450
|
try {
|
|
11414
11451
|
const { buf, end } = readFrom(jsonlPath, alignedFrom);
|
|
11415
11452
|
offset = end;
|
|
@@ -11524,8 +11561,7 @@ app6.get("/backfill", requireAdminSession, (c) => {
|
|
|
11524
11561
|
console.log(`[wa-stream] op=backfill conn=${connId} from=0 to=0 turns=0 bytes=0 reachedStart=true`);
|
|
11525
11562
|
return c.json({ turns: [], from: 0, reachedStart: true });
|
|
11526
11563
|
}
|
|
11527
|
-
const
|
|
11528
|
-
const { from, aligned } = alignToRow(jsonlPath, rawFrom, to);
|
|
11564
|
+
const { from, aligned } = backfillRangeStart(jsonlPath, to, TAIL_WINDOW_BYTES);
|
|
11529
11565
|
const turnCtx = {};
|
|
11530
11566
|
if (from > 0) seedTurnCtx(jsonlPath, from, turnCtx);
|
|
11531
11567
|
let turns;
|
|
@@ -11539,7 +11575,7 @@ app6.get("/backfill", requireAdminSession, (c) => {
|
|
|
11539
11575
|
return c.json({ error: "read-failed" }, 500);
|
|
11540
11576
|
}
|
|
11541
11577
|
const reachedStart = from === 0;
|
|
11542
|
-
noteBackfill(
|
|
11578
|
+
noteBackfill(sessionId.slice(0, 8));
|
|
11543
11579
|
console.log(
|
|
11544
11580
|
`[wa-stream] op=backfill conn=${connId} from=${from} to=${to} turns=${turns.length} bytes=${to - from} aligned=${aligned} reachedStart=${reachedStart}`
|
|
11545
11581
|
);
|
|
@@ -12207,8 +12243,7 @@ app8.get("/backfill", (c) => {
|
|
|
12207
12243
|
console.log(`${TAG19} op=backfill key=${senderShort} from=0 to=0 turns=0 bytes=0 reachedStart=true`);
|
|
12208
12244
|
return c.json({ turns: [], from: 0, reachedStart: true });
|
|
12209
12245
|
}
|
|
12210
|
-
const
|
|
12211
|
-
const { from, aligned } = alignToRow(jsonlPath, rawFrom, to);
|
|
12246
|
+
const { from, aligned } = backfillRangeStart(jsonlPath, to, TAIL_WINDOW_BYTES);
|
|
12212
12247
|
const turnCtx = {};
|
|
12213
12248
|
if (from > 0) seedTurnCtx(jsonlPath, from, turnCtx);
|
|
12214
12249
|
let turns;
|
|
@@ -12226,6 +12261,7 @@ app8.get("/backfill", (c) => {
|
|
|
12226
12261
|
return c.json({ error: "read-failed" }, 500);
|
|
12227
12262
|
}
|
|
12228
12263
|
const reachedStart = from === 0;
|
|
12264
|
+
noteBackfill(sessionId.slice(0, 8));
|
|
12229
12265
|
console.log(
|
|
12230
12266
|
`${TAG19} op=backfill key=${senderShort} from=${from} to=${to} turns=${turns.length} bytes=${to - from} dropped=${dropped} aligned=${aligned} reachedStart=${reachedStart}`
|
|
12231
12267
|
);
|
|
@@ -12288,6 +12324,7 @@ data: ${JSON.stringify(turn)}
|
|
|
12288
12324
|
console.log(
|
|
12289
12325
|
`${TAG19} op=window key=${senderShort} fileBytes=${fileEnd0} budget=${TAIL_WINDOW_BYTES} rawFrom=${rawFrom} alignedFrom=${alignedFrom} aligned=${aligned} source=${windowed ? "windowed" : "full"}`
|
|
12290
12326
|
);
|
|
12327
|
+
noteWindowedOpen(sessionId.slice(0, 8), windowed);
|
|
12291
12328
|
const backlogCtx = {};
|
|
12292
12329
|
if (windowed) {
|
|
12293
12330
|
const seed = seedTurnCtx(jsonlPath, alignedFrom, backlogCtx);
|
|
@@ -32402,7 +32439,7 @@ function runPublicAddressCollisionAudit(deps) {
|
|
|
32402
32439
|
|
|
32403
32440
|
// server/telegram-audit.ts
|
|
32404
32441
|
import { statSync as statSync26 } from "fs";
|
|
32405
|
-
import {
|
|
32442
|
+
import { join as join55 } from "path";
|
|
32406
32443
|
function buildTelegramAuditLines(input) {
|
|
32407
32444
|
const lines = [];
|
|
32408
32445
|
const entries2 = input.accounts.flatMap(
|
|
@@ -32429,22 +32466,30 @@ function buildTelegramAuditLines(input) {
|
|
|
32429
32466
|
if (!known.has(botId)) lines.push(`[telegram-audit] op=secret-orphan botId=${botId} side=file`);
|
|
32430
32467
|
}
|
|
32431
32468
|
for (const { accountId, entry } of entries2) {
|
|
32432
|
-
const last = input.
|
|
32433
|
-
const
|
|
32469
|
+
const last = input.lastActivityByBot(entry.id);
|
|
32470
|
+
const spawnAge = last === null ? "never" : String(input.now - last.spawnMs);
|
|
32471
|
+
const turnAge = last === null || last.turnMs === null ? "never" : String(input.now - last.turnMs);
|
|
32434
32472
|
const agent = entry.role === "admin" ? "admin" : entry.agent;
|
|
32435
32473
|
const secretFile = input.secretFileExists(entry.id) ? "present" : "absent";
|
|
32436
32474
|
lines.push(
|
|
32437
|
-
`[telegram-audit] op=configured botId=${entry.id} accountId=${accountId} agent=${agent} secretFile=${secretFile}
|
|
32475
|
+
`[telegram-audit] op=configured botId=${entry.id} accountId=${accountId} agent=${agent} secretFile=${secretFile} lastSpawnAgeMs=${spawnAge} lastTurnAgeMs=${turnAge}`
|
|
32438
32476
|
);
|
|
32439
32477
|
}
|
|
32440
32478
|
return lines;
|
|
32441
32479
|
}
|
|
32442
32480
|
function newestTelegramSessionByBot() {
|
|
32443
32481
|
const out = /* @__PURE__ */ new Map();
|
|
32444
|
-
for (const { botId,
|
|
32482
|
+
for (const { botId, spawnMs, turnMs } of walkTelegramSidecars()) {
|
|
32445
32483
|
if (botId === null) continue;
|
|
32446
32484
|
const prev = out.get(botId);
|
|
32447
|
-
if (prev === void 0
|
|
32485
|
+
if (prev === void 0) {
|
|
32486
|
+
out.set(botId, { spawnMs, turnMs });
|
|
32487
|
+
continue;
|
|
32488
|
+
}
|
|
32489
|
+
out.set(botId, {
|
|
32490
|
+
spawnMs: Math.max(prev.spawnMs, spawnMs),
|
|
32491
|
+
turnMs: prev.turnMs === null ? turnMs : turnMs === null ? prev.turnMs : Math.max(prev.turnMs, turnMs)
|
|
32492
|
+
});
|
|
32448
32493
|
}
|
|
32449
32494
|
return out;
|
|
32450
32495
|
}
|
|
@@ -32459,27 +32504,33 @@ function* walkTelegramSidecars() {
|
|
|
32459
32504
|
const cfg = claudeConfigDir();
|
|
32460
32505
|
if (!cfg) return;
|
|
32461
32506
|
const projectsRoot = join55(cfg, "projects");
|
|
32462
|
-
for (const { path } of
|
|
32463
|
-
const
|
|
32464
|
-
const meta = readSidecarMeta(join55(dirname17(path), `${sessionId}.meta.json`));
|
|
32507
|
+
for (const { path } of enumerateSessionSidecars(projectsRoot)) {
|
|
32508
|
+
const meta = readSidecarMeta(path);
|
|
32465
32509
|
if (meta.channel !== "telegram" || !meta.accountId) continue;
|
|
32466
|
-
let
|
|
32510
|
+
let spawnMs;
|
|
32467
32511
|
try {
|
|
32468
|
-
|
|
32512
|
+
spawnMs = statSync26(path).mtimeMs;
|
|
32469
32513
|
} catch {
|
|
32470
32514
|
continue;
|
|
32471
32515
|
}
|
|
32516
|
+
let turnMs;
|
|
32517
|
+
try {
|
|
32518
|
+
turnMs = statSync26(path.replace(/\.meta\.json$/, ".jsonl")).mtimeMs;
|
|
32519
|
+
} catch {
|
|
32520
|
+
turnMs = null;
|
|
32521
|
+
}
|
|
32472
32522
|
yield {
|
|
32473
32523
|
accountId: meta.accountId,
|
|
32474
32524
|
botId: parseTelegramChannelKey(meta.senderId ?? "")?.botId ?? null,
|
|
32475
|
-
|
|
32525
|
+
spawnMs,
|
|
32526
|
+
turnMs
|
|
32476
32527
|
};
|
|
32477
32528
|
}
|
|
32478
32529
|
}
|
|
32479
32530
|
|
|
32480
32531
|
// server/telegram-migrate.ts
|
|
32481
32532
|
import { readFileSync as readFileSync45, writeFileSync as writeFileSync18, existsSync as existsSync49, renameSync as renameSync11, mkdirSync as mkdirSync10 } from "fs";
|
|
32482
|
-
import { dirname as
|
|
32533
|
+
import { dirname as dirname17, join as join56 } from "path";
|
|
32483
32534
|
function migrateTelegramTwoSlot(input) {
|
|
32484
32535
|
const out = [];
|
|
32485
32536
|
for (const account of input.accounts) {
|
|
@@ -32540,7 +32591,7 @@ function migrateTelegramTwoSlot(input) {
|
|
|
32540
32591
|
}
|
|
32541
32592
|
function moveSecret(from, to) {
|
|
32542
32593
|
if (!existsSync49(from)) return;
|
|
32543
|
-
mkdirSync10(
|
|
32594
|
+
mkdirSync10(dirname17(to), { recursive: true, mode: 448 });
|
|
32544
32595
|
renameSync11(from, to);
|
|
32545
32596
|
}
|
|
32546
32597
|
|
|
@@ -34388,7 +34439,7 @@ console.log(`${BRAND.productName} listening on http://${hostname}:${port}`);
|
|
|
34388
34439
|
secretFileExists: (botId) => existsSync52(secretPath(botId)),
|
|
34389
34440
|
agentActive: isActiveAgentSlug,
|
|
34390
34441
|
secretFilesOnDisk,
|
|
34391
|
-
|
|
34442
|
+
lastActivityByBot: (botId) => lastByBot.get(botId) ?? null,
|
|
34392
34443
|
now: Date.now()
|
|
34393
34444
|
});
|
|
34394
34445
|
for (const line of lines) console.error(line);
|
|
@@ -34887,7 +34938,7 @@ try {
|
|
|
34887
34938
|
} catch (err) {
|
|
34888
34939
|
console.error(`[graph-health] account-enumeration unavailable reason=${err instanceof Error ? err.message : String(err)}`);
|
|
34889
34940
|
}
|
|
34890
|
-
var configDirForWhatsApp =
|
|
34941
|
+
var configDirForWhatsApp = basename17(MAXY_DIR) || ".maxy";
|
|
34891
34942
|
var bootAccount = resolveAccount();
|
|
34892
34943
|
if (bootAccount) {
|
|
34893
34944
|
migrateRemovedConfigKeys(bootAccount.accountDir);
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{nt as e,ot as t}from"./useMediaQuery-DIm6yGOl.js";import"./useVoiceRecorder-9qVOHhkb.js";import"./AdminShell-BVKfxSgh.js";import{n}from"./page-Dfce3YQd.js";import"./useCopyFeedback-Ae_va0Ps.js";var r=t(),i=e();(0,r.createRoot)(document.getElementById(`root`)).render((0,i.jsx)(n,{}));
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{nt as e,ot as t}from"./useMediaQuery-DIm6yGOl.js";import"./useVoiceRecorder-9qVOHhkb.js";import{t as n}from"./page-DrbfHSQ9.js";import"./graph-labels-Byp2RkVg.js";var r=t(),i=e();(0,r.createRoot)(document.getElementById(`root`)).render((0,i.jsx)(n,{}));
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|