@rubytech/create-realagent-code 0.1.506 → 0.1.507

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 (106) hide show
  1. package/package.json +2 -2
  2. package/payload/platform/config/brand.json +92 -32
  3. package/payload/platform/lib/account-schema-regions/dist/index.d.ts +17 -5
  4. package/payload/platform/lib/account-schema-regions/dist/index.d.ts.map +1 -1
  5. package/payload/platform/lib/account-schema-regions/dist/index.js +20 -6
  6. package/payload/platform/lib/account-schema-regions/dist/index.js.map +1 -1
  7. package/payload/platform/lib/account-schema-regions/src/index.ts +20 -6
  8. package/payload/platform/plugins/admin/PLUGIN.md +36 -0
  9. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +48 -2
  10. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +7 -0
  11. package/payload/platform/plugins/aeo/PLUGIN.md +3 -0
  12. package/payload/platform/plugins/browser/PLUGIN.md +18 -0
  13. package/payload/platform/plugins/connector/PLUGIN.md +4 -0
  14. package/payload/platform/plugins/contacts/PLUGIN.md +9 -0
  15. package/payload/platform/plugins/docs/references/admin-ui.md +21 -1
  16. package/payload/platform/plugins/docs/references/plugins-guide.md +26 -0
  17. package/payload/platform/plugins/email/PLUGIN.md +17 -0
  18. package/payload/platform/plugins/filesystem/PLUGIN.md +6 -0
  19. package/payload/platform/plugins/google/PLUGIN.md +12 -0
  20. package/payload/platform/plugins/graph/PLUGIN.md +3 -0
  21. package/payload/platform/plugins/graph-viewer/PLUGIN.md +1 -0
  22. package/payload/platform/plugins/ledger/PLUGIN.md +7 -0
  23. package/payload/platform/plugins/memory/PLUGIN.md +41 -0
  24. package/payload/platform/plugins/outlook/PLUGIN.md +24 -0
  25. package/payload/platform/plugins/quickbooks/PLUGIN.md +15 -0
  26. package/payload/platform/plugins/replicate/PLUGIN.md +3 -0
  27. package/payload/platform/plugins/scheduling/PLUGIN.md +10 -0
  28. package/payload/platform/plugins/storage-broker/PLUGIN.md +12 -0
  29. package/payload/platform/plugins/url-get/PLUGIN.md +1 -0
  30. package/payload/platform/plugins/voice-mirror/PLUGIN.md +5 -0
  31. package/payload/platform/plugins/whatsapp/PLUGIN.md +12 -0
  32. package/payload/platform/plugins/work/PLUGIN.md +15 -0
  33. package/payload/platform/plugins/workflows/PLUGIN.md +8 -0
  34. package/payload/platform/scripts/check-risk-class.mjs +145 -0
  35. package/payload/platform/scripts/lib/__pycache__/account-schema-owned-dirs.cpython-314.pyc +0 -0
  36. package/payload/platform/scripts/lib/provision-account-dir.sh +4 -1
  37. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  38. package/payload/platform/services/claude-session-manager/dist/http-server.js +4 -0
  39. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  40. package/payload/platform/services/claude-session-manager/dist/index.js +8 -0
  41. package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
  42. package/payload/platform/services/claude-session-manager/dist/tool-surface.d.ts +13 -0
  43. package/payload/platform/services/claude-session-manager/dist/tool-surface.d.ts.map +1 -1
  44. package/payload/platform/services/claude-session-manager/dist/tool-surface.js +33 -8
  45. package/payload/platform/services/claude-session-manager/dist/tool-surface.js.map +1 -1
  46. package/payload/premium-plugins/real-agent/plugins/buyers/PLUGIN.md +8 -0
  47. package/payload/premium-plugins/real-agent/plugins/estate-sales/PLUGIN.md +5 -0
  48. package/payload/premium-plugins/real-agent/plugins/loop/PLUGIN.md +27 -0
  49. package/payload/premium-plugins/real-agent/plugins/property-data/PLUGIN.md +22 -0
  50. package/payload/server/{chunk-5ADBNEJA.js → chunk-2WAXM5N2.js} +111 -111
  51. package/payload/server/maxy-edge.js +1 -1
  52. package/payload/server/public/activity.html +5 -5
  53. package/payload/server/public/agents.html +4 -4
  54. package/payload/server/public/assets/{AdminLoginScreens-D5KOQA8S.js → AdminLoginScreens-YT7jsh_H.js} +1 -1
  55. package/payload/server/public/assets/{AdminShell-C8wazpnz.js → AdminShell-Ckht9hmU.js} +1 -1
  56. package/payload/server/public/assets/{activity-CFqkDhTs.js → activity-DH3Wgc3O.js} +1 -1
  57. package/payload/server/public/assets/admin-DetvulAu.js +1 -0
  58. package/payload/server/public/assets/{agents-DPulfmrd.js → agents-X_IvDHLZ.js} +1 -1
  59. package/payload/server/public/assets/{browser-T_5xbnJh.js → browser-Bym8QhfA.js} +1 -1
  60. package/payload/server/public/assets/{calendar-CKjuiG8c.js → calendar-CFnufJOy.js} +1 -1
  61. package/payload/server/public/assets/chat-wrckyIpw.js +1 -0
  62. package/payload/server/public/assets/chevron-left-Dtk3jEK5.js +1 -0
  63. package/payload/server/public/assets/chevron-right-Dih6IZ8B.js +1 -0
  64. package/payload/server/public/assets/clock-iJCrrmWM.js +1 -0
  65. package/payload/server/public/assets/data-D76--TYs.js +1 -0
  66. package/payload/server/public/assets/{file-text-c6cA4Evd.js → file-text-zch0E1GJ.js} +1 -1
  67. package/payload/server/public/assets/{graph-DIk-o45J.js → graph-BavHLzpV.js} +1 -1
  68. package/payload/server/public/assets/{graph-labels-5bjxhC_p.js → graph-labels-CBwh4g-6.js} +1 -1
  69. package/payload/server/public/assets/{maximize-2-BCQkFb1_.js → maximize-2-bTn_Ozpi.js} +1 -1
  70. package/payload/server/public/assets/{operator-0UnNo2ms.js → operator-a4IOwf62.js} +1 -1
  71. package/payload/server/public/assets/page-3T2mE63b.js +1 -0
  72. package/payload/server/public/assets/{page-HVtUfub2.js → page-D6M1CmPe.js} +4 -4
  73. package/payload/server/public/assets/{public-CKEYyIPn.js → public-B3y_YU1G.js} +1 -1
  74. package/payload/server/public/assets/{rotate-ccw-dTpO5dhL.js → rotate-ccw-BGvzNB1b.js} +1 -1
  75. package/payload/server/public/assets/{routines-C6P1-Dto.js → routines-C7Dr16am.js} +1 -1
  76. package/payload/server/public/assets/{skills-ClrpVqlz.js → skills-DFeb3XO3.js} +1 -1
  77. package/payload/server/public/assets/{tasks-C8SNhSFC.js → tasks-CSfnCKJe.js} +1 -1
  78. package/payload/server/public/assets/{time-entry-format-CCO6N6XZ.js → time-entry-format-BgZqOOqG.js} +1 -1
  79. package/payload/server/public/assets/{triangle-alert-CHjdKpag.js → triangle-alert-DBJ7xz_t.js} +1 -1
  80. package/payload/server/public/assets/{useCopyFeedback-BTUu3-l8.js → useCopyFeedback-BFOujMl-.js} +1 -1
  81. package/payload/server/public/assets/useSubAccountSwitcher-BkQ5tA8A.css +1 -0
  82. package/payload/server/public/assets/{useVoiceRecorder-BeNqxmm2.js → useVoiceRecorder-BP6CpYQD.js} +1 -1
  83. package/payload/server/public/assets/{wrench-CeNnc7oO.js → wrench-DdaRhfzS.js} +1 -1
  84. package/payload/server/public/brand/real-agent-mark.svg +23 -0
  85. package/payload/server/public/brand-defaults.css +55 -20
  86. package/payload/server/public/browser.html +4 -4
  87. package/payload/server/public/calendar.html +7 -7
  88. package/payload/server/public/chat.html +13 -13
  89. package/payload/server/public/data.html +11 -11
  90. package/payload/server/public/graph.html +9 -9
  91. package/payload/server/public/index.html +14 -14
  92. package/payload/server/public/operator.html +14 -14
  93. package/payload/server/public/public.html +13 -13
  94. package/payload/server/public/routines.html +6 -6
  95. package/payload/server/public/skills.html +5 -5
  96. package/payload/server/public/tasks.html +6 -6
  97. package/payload/server/server.js +702 -586
  98. package/payload/server/public/assets/admin-B-EGUWS4.js +0 -1
  99. package/payload/server/public/assets/chat-DWLYAA70.js +0 -1
  100. package/payload/server/public/assets/chevron-left-DBMCTKlT.js +0 -1
  101. package/payload/server/public/assets/chevron-right-SBAr6zzc.js +0 -1
  102. package/payload/server/public/assets/clock-kkzt7Scf.js +0 -1
  103. package/payload/server/public/assets/data-CV8N9qcy.js +0 -1
  104. package/payload/server/public/assets/page-JJa2xdzf.js +0 -1
  105. package/payload/server/public/assets/useSubAccountSwitcher-DyrH8DA8.css +0 -1
  106. /package/payload/server/public/assets/{useSubAccountSwitcher-DSW9vDi2.js → useSubAccountSwitcher-0PfRrN6i.js} +0 -0
@@ -1,2 +1,2 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/pdf-render-C257cidb.js","assets/preload-helper-BQrMkyGX.js"])))=>i.map(i=>d[i]);
2
- import{o as e}from"./chunk-CltuBf4Z.js";import{B as t,K as n,P as r,g as i,k as a,r as o}from"./useSubAccountSwitcher-DSW9vDi2.js";import{n as s,t as c}from"./maximize-2-BCQkFb1_.js";import{n as l,t as u}from"./time-entry-format-CCO6N6XZ.js";import{t as d}from"./preload-helper-BQrMkyGX.js";var f=`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`,p=new Set(f.split(`,`).filter(e=>!e.startsWith(`.`))),m=50*1024*1024;function h(e){switch(e){case`expanded`:return!0;case`collapsed`:return!1;default:return}}var g=r(`check-check`,[[`path`,{d:`M18 6 7 17l-5-5`,key:`116fxf`}],[`path`,{d:`m22 10-7.5 7.5L13 16`,key:`ke71qq`}]]),_=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`}]]),v=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`}]]),y=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`}]]),b=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`}]]),x=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`}]]),S=e(n(),1),C=t();function w({children:e,tail:t=null,repinSignals:n}){let r=(0,S.useRef)(null),i=(0,S.useRef)(null),a=(0,S.useRef)(!0),[o,s]=(0,S.useState)(!0),c=(0,S.useRef)(0),l=(0,S.useRef)(0),u=()=>{let e=r.current;if(!e)return;let t=e.clientHeight,n=e.scrollHeight,i=t!==c.current||n!==l.current;if(c.current=t,l.current=n,i){a.current&&(e.scrollTop=e.scrollHeight);return}let o=n-e.scrollTop-t<=32;a.current=o,s(e=>e===o?e:o)},d=()=>{let e=r.current;e&&(e.scrollTop=e.scrollHeight,l.current=e.scrollHeight,c.current=e.clientHeight,a.current=!0,s(!0))},f=t!=null;return(0,S.useLayoutEffect)(()=>{let e=r.current;e&&a.current&&(e.scrollTop=e.scrollHeight),e&&(l.current=e.scrollHeight,c.current=e.clientHeight)},[...n,f]),(0,S.useLayoutEffect)(()=>{if(typeof ResizeObserver>`u`)return;let e=new ResizeObserver(()=>u());return r.current&&e.observe(r.current),i.current&&e.observe(i.current),()=>e.disconnect()},[]),(0,C.jsxs)(`div`,{className:`wa-reader`,children:[(0,C.jsx)(`div`,{className:`wa-reader-thread`,ref:r,onScroll:u,children:(0,C.jsxs)(`div`,{className:`wa-thread-scroll`,ref:i,children:[e,t]})}),!o&&(0,C.jsx)(`button`,{type:`button`,className:`wa-jump`,onClick:d,"aria-label":`Jump to latest message`,title:`Jump to latest message`,children:`↓`})]})}var T={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.`},E={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 D(e,t=`admin`){return t===`public`?E[e]:T[e]}function O(e){return e===`whatsapp`?` · via WhatsApp`:e===`webchat`?` · via web`:``}var k=56,A=5;function j(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 M({src:e,filename:t,onDecodeFail:n,onMediaError:r}){let i=(0,S.useRef)(null),a=(0,S.useRef)(null),o=(0,S.useRef)(!1),[s,c]=(0,S.useState)([]),[d,f]=(0,S.useState)(void 0),[p,m]=(0,S.useState)(!1),[h,g]=(0,S.useState)(0),[_,v]=(0,S.useState)(0);(0,S.useEffect)(()=>{let t=!1,r=null,i=window.AudioContext??window.webkitAudioContext,a=()=>{t||o.current||(o.current=!0,n())};if(!i){a();return}let s=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),f(r);let a=await s.decodeAudioData(await i.arrayBuffer());if(t)return;c(j(a.getChannelData(0),k)),Number.isFinite(a.duration)&&a.duration>0&&v(a.duration)}catch{a()}finally{try{s.close()}catch{}}})(),()=>{t=!0,r&&URL.revokeObjectURL(r)}},[e]);let y=()=>{let e=i.current;e&&(p?e.pause():Promise.resolve(e.play()).catch(()=>{}))},x=e=>{let t=i.current;if(!t||!(_>0))return;let n=Math.min(_,Math.max(0,e));t.currentTime=n,g(n)},w=e=>{let t=a.current;if(!t||!(_>0))return;let n=t.getBoundingClientRect();x(Math.min(1,Math.max(0,(e-n.left)/n.width))*_)},T=e=>{w(e.clientX);let t=e=>w(e.clientX),n=()=>{window.removeEventListener(`mousemove`,t),window.removeEventListener(`mouseup`,n)};window.addEventListener(`mousemove`,t),window.addEventListener(`mouseup`,n)},E=e=>{if(!(_>0))return;let t=i.current?.currentTime??0;switch(e.key){case`ArrowRight`:case`ArrowUp`:x(t+A),e.preventDefault();break;case`ArrowLeft`:case`ArrowDown`:x(t-A),e.preventDefault();break;case`Home`:x(0),e.preventDefault();break;case`End`:x(_),e.preventDefault();break;default:break}},D=_>0?Math.min(1,h/_):0,O=Math.round(D*k),M=u(h>0?h:_);return(0,C.jsxs)(`div`,{className:`voice-note`,children:[(0,C.jsx)(`button`,{type:`button`,className:`voice-note-play`,"aria-label":`${p?`Pause`:`Play`} ${t}`,onClick:y,children:p?(0,C.jsx)(b,{size:16,"aria-hidden":!0}):(0,C.jsx)(l,{size:16,"aria-hidden":!0})}),(0,C.jsx)(`div`,{ref:a,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:T,onKeyDown:E,children:(s.length?s:Array.from({length:k},()=>0)).map((e,t)=>(0,C.jsx)(`span`,{className:`voice-note-bar${t<O?` is-played`:``}`,style:{height:`${Math.max(10,Math.round(e*100))}%`}},t))}),(0,C.jsx)(`span`,{className:`voice-note-time`,children:M}),(0,C.jsx)(`audio`,{ref:i,className:`voice-note-audio`,preload:`metadata`,src:d,"aria-label":t,onPlay:()=>m(!0),onPause:()=>m(!1),onEnded:()=>m(!1),onError:()=>r?.(),onLoadedMetadata:e=>{let t=e.currentTarget.duration;Number.isFinite(t)&&t>0&&v(t)},onTimeUpdate:e=>g(e.currentTarget.currentTime)})]})}var N=/\.(png|jpe?g|gif|webp|svg|bmp)$/i,P=/\.pdf$/i;function ee(e,t){return(t?t.startsWith(`image/`):N.test(e))?`image`:t&&t.startsWith(`audio/`)?`audio`:(t?t===`application/pdf`:P.test(e))?`pdf`:`file`}function F(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 I(e,t,n,r){return t===`public`?`/api/public-reader/attachment/${e}?sessionId=${encodeURIComponent(n)}`:`/api/admin/attachment/${e}?session_key=${encodeURIComponent(r)}`}function te(e,t,n){return`/api/admin/session-upload?session_key=${encodeURIComponent(n)}&session_id=${encodeURIComponent(e)}&file=${encodeURIComponent(t)}`}function L(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 R({href:e,filename:t,label:n}){return(0,C.jsxs)(`a`,{className:`chat-attachment-chip`,href:e,download:t,children:[(0,C.jsx)(y,{size:14,"aria-hidden":!0}),n]})}function z({href:e,filename:t,className:n,size:r=14,onClick:i}){return(0,C.jsx)(`a`,{className:n,href:e,download:t,"aria-label":`Download ${t}`,onClick:i,children:(0,C.jsx)(a,{size:r,"aria-hidden":!0})})}function ne({src:e,filename:t,sizeBytes:n,expandable:r,onFail:i}){let[a,o]=(0,S.useState)(!1),[s,c]=(0,S.useState)(!1),l=n==null?t:`${t} · ${L(n)}`;return s?(0,C.jsx)(R,{href:e,filename:t,label:l}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`span`,{className:`chat-attachment-image-wrap`,children:[(0,C.jsx)(`img`,{className:`chat-attachment-image`,src:e,alt:t,onClick:r?()=>o(!0):void 0,onError:()=>{c(!0),i?.(`fetch`)}}),(0,C.jsx)(z,{href:e,filename:t,className:`chat-attachment-download`})]}),r&&a&&(0,C.jsx)(`div`,{className:`chat-attachment-overlay`,role:`dialog`,"aria-label":t,onClick:()=>o(!1),children:(0,C.jsx)(`img`,{className:`chat-attachment-overlay-image`,src:e,alt:t})})]})}var re=280,ie=360,ae=16;function B({src:e,filename:t,sizeBytes:n,onFail:r}){let[i,a]=(0,S.useState)(!1),[o,s]=(0,S.useState)(!1),l=(0,S.useRef)(null),u=n==null?t:`${t} · ${L(n)}`;return(0,S.useEffect)(()=>{let t=!1,n=null;return(async()=>{try{let{loadPdf:r,renderPageToFit:i}=await d(async()=>{let{loadPdf:e,renderPageToFit:t}=await import(`./pdf-render-C257cidb.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,re,ie)}catch{t||(s(!0),r?.(`render`))}})(),()=>{t=!0;try{n?.destroy()}catch{}}},[e]),o?(0,C.jsx)(R,{href:e,filename:t,label:u}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`div`,{className:`chat-attachment-pdf`,children:[(0,C.jsx)(`canvas`,{ref:l,className:`chat-attachment-pdf-canvas`,"aria-label":t}),(0,C.jsx)(z,{href:e,filename:t,className:`chat-attachment-download`}),(0,C.jsx)(`button`,{type:`button`,className:`chat-attachment-pdf-expand`,"aria-label":`Expand ${t}`,onClick:()=>a(!0),children:(0,C.jsx)(c,{size:14,"aria-hidden":!0})})]}),i&&(0,C.jsx)(oe,{src:e,filename:t,label:u,onClose:()=>a(!1),onFail:r})]})}function oe({src:e,filename:t,label:n,onClose:r,onFail:a}){let o=(0,S.useRef)(null),s=(0,S.useRef)(null),[c,l]=(0,S.useState)(null),[u,f]=(0,S.useState)(!1);return(0,S.useEffect)(()=>{let t=!1;return(async()=>{try{let{loadPdf:n}=await d(async()=>{let{loadPdf:e}=await import(`./pdf-render-C257cidb.js`);return{loadPdf:e}},__vite__mapDeps([0,1])),r=await n(e);if(t){try{r.destroy()}catch{}return}s.current=r,l(r.numPages)}catch{t||(f(!0),a?.(`render`))}})(),()=>{t=!0;try{s.current?.destroy()}catch{}}},[e]),(0,S.useEffect)(()=>{if(c==null)return;let e=o.current,t=s.current;if(!e||!t)return;let n=!1;return(async()=>{try{let{renderPageToWidth:r}=await d(async()=>{let{renderPageToWidth:e}=await import(`./pdf-render-C257cidb.js`);return{renderPageToWidth:e}},__vite__mapDeps([0,1])),i=Array.from(e.querySelectorAll(`canvas.chat-attachment-overlay-page`)),a=Math.max(e.clientWidth-ae*2,1);for(let e=0;e<i.length;e++){if(n)return;await r(t,e+1,i[e],a)}}catch{n||(f(!0),a?.(`render`))}})(),()=>{n=!0}},[c]),(0,C.jsxs)(`div`,{className:`chat-attachment-overlay`,role:`dialog`,"aria-label":t,onClick:r,children:[(0,C.jsx)(`div`,{ref:o,className:`chat-attachment-overlay-pdf`,onClick:e=>e.stopPropagation(),children:u?(0,C.jsx)(R,{href:e,filename:t,label:n}):Array.from({length:c??0},(e,n)=>(0,C.jsx)(`canvas`,{className:`chat-attachment-overlay-page`,"aria-label":`${t} page ${n+1}`},n))}),(0,C.jsx)(z,{href:e,filename:t,className:`chat-attachment-overlay-download`,size:20,onClick:e=>e.stopPropagation()}),(0,C.jsx)(`button`,{type:`button`,className:`chat-attachment-overlay-close`,"aria-label":`Close`,onClick:r,children:(0,C.jsx)(i,{size:20,"aria-hidden":!0})})]})}function se({src:e,filename:t,onFail:n}){let[r,i]=(0,S.useState)(!1);return r?(0,C.jsx)(`audio`,{className:`chat-attachment-audio`,controls:!0,preload:`metadata`,src:e,"aria-label":t,onError:()=>n?.(`fetch`)}):(0,C.jsx)(M,{src:e,filename:t,onDecodeFail:()=>{i(!0),n?.(`render`)},onMediaError:()=>{i(!0),n?.(`fetch`)}})}function V({filename:e,href:t,mimeType:n,sizeBytes:r,expandable:i,telemetry:a}){let o=ee(e,n);(0,S.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,C.jsx)(ne,{src:t,filename:e,sizeBytes:r,expandable:i,onFail:s});if(o===`audio`&&t)return(0,C.jsx)(se,{src:t,filename:e,onFail:s});if(o===`pdf`&&t)return(0,C.jsx)(B,{src:t,filename:e,sizeBytes:r,onFail:s});let c=r==null?e:`${e} · ${L(r)}`;return t?(0,C.jsx)(R,{href:t,filename:e,label:c}):(0,C.jsxs)(`p`,{className:`chat-doc`,children:[(0,C.jsx)(y,{size:14,"aria-hidden":!0,style:{verticalAlign:`text-bottom`}}),` `,c]})}function ce(e,t,n,r=`/api/whatsapp-reader/stream`,i=e,a=!0){let[o,s]=(0,S.useState)([]),[c,l]=(0,S.useState)(`open`),[u,d]=(0,S.useState)(null),f=(0,S.useRef)([]);return(0,S.useEffect)(()=>{f.current=o},[o]),(0,S.useEffect)(()=>{s([]),f.current=[],d(null)},[i,t,n,r]),(0,S.useEffect)(()=>{if(l(`open`),!a)return;let i=f.current.slice(),o=i.map(H),c=0,u=i.length>0,p=`${r}?sessionId=${encodeURIComponent(e)}&projectDir=${encodeURIComponent(t)}&session_key=${encodeURIComponent(n)}`,m=new EventSource(p);return m.onopen=()=>{console.info(`[admin-ui] wa-stream onopen sessionId=${e}`),l(`open`)},m.onmessage=e=>{let t;try{t=JSON.parse(e.data)}catch{return}if(u){if(c<o.length&&H(t)===o[c]){c+=1;return}u=!1}s(e=>[...e,t])},m.addEventListener(`activity`,e=>{try{d(JSON.parse(e.data))}catch{}}),m.addEventListener(`activity-clear`,()=>d(null)),m.onerror=()=>{m.readyState===2&&(console.error(`[admin-ui] wa-stream onerror readyState=${m.readyState}`),l(`error`))},()=>m.close()},[e,t,n,r,i,a]),{turns:o,status:c,subagentActivity:u}}function H(e){return JSON.stringify(e)}function le(e,t,n,r=!0){let[i,a]=(0,S.useState)([]),[o,s]=(0,S.useState)(`open`);return(0,S.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(`reaction`,e=>{let t;try{t=JSON.parse(e.data)}catch{return}a(e=>e.map(e=>e.kind===`whatsapp-persisted`&&e.msgKeyId===t.targetMsgKeyId?{...e,reactions:t.reactions}:e))}),o.onerror=()=>{o.readyState===2&&s(`error`)},()=>o.close()},[e,t,n,r]),{turns:i,status:o}}var U=e=>{if(!e)return 1/0;let t=new Date(e).getTime();return Number.isNaN(t)?1/0:t};function ue(e,t){let n=[],r=0;return e.forEach((e,t)=>n.push({sort:U(e.ts),sub:1,ins:r++,item:{kind:`turn`,turn:e,idx:t}})),t.forEach(e=>n.push({sort:U(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 de(e,t,n=!0){let[r,i]=(0,S.useState)([]);return(0,S.useEffect)(()=>{if(!n||typeof fetch!=`function`)return;let r=!0,a=`/api/whatsapp-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 fe=new Set([`operator-inbound`,`operator-typed`,`agent-reply`,`agent-reply-document`,`agent-file`,`agent-error`,`agent-webchat-final`,`whatsapp-persisted`]);function W(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:t.toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})}function G(e){let t=e.lastIndexOf(`/`);return t===-1?e:e.slice(t+1)}var pe=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],me=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function K(e){let t=String(e.getMonth()+1).padStart(2,`0`),n=String(e.getDate()).padStart(2,`0`);return`${e.getFullYear()}-${t}-${n}`}function q(e){if(!e)return null;let t=new Date(e);return Number.isNaN(t.getTime())?null:K(t)}function he(e,t=new Date){if(!e)return``;let n=new Date(e);if(Number.isNaN(n.getTime()))return``;let r=K(n);if(r===K(t))return`Today`;let i=new Date(t);return i.setDate(i.getDate()-1),r===K(i)?`Yesterday`:`${pe[n.getDay()]} ${n.getDate()} ${me[n.getMonth()]} ${n.getFullYear()}`}function J(e){return e.kind===`turn`?e.turn.ts:e.entry.ts}function Y({ts:e}){return(0,C.jsx)(`div`,{className:`day-divider`,role:`separator`,children:(0,C.jsx)(`span`,{className:`day-divider-label`,children:he(e)})})}function X(){return(0,C.jsx)(`div`,{className:`session-divider`,role:`separator`,children:(0,C.jsx)(`span`,{className:`session-divider-label`,children:`Conversation continued`})})}function Z({label:e,ts:t}){return(0,C.jsxs)(`div`,{className:`wa-turn-head`,children:[(0,C.jsx)(`span`,{className:`wa-who`,children:e}),(0,C.jsx)(`time`,{className:`wa-time`,children:W(t)})]})}function ge({turn:e}){let[t,n]=(0,S.useState)(!1),r=e.kind===`tool-result`,i=r?`wa-turn wa-turn-result${e.isError?` is-error`:``}`:`wa-turn wa-turn-tool`,a=r?e.isError?`result (error)`:`result`:`↳ ${e.name}`,o=r?e.text:JSON.stringify(e.input,null,2);return(0,C.jsxs)(`div`,{className:i,children:[(0,C.jsxs)(`button`,{type:`button`,className:`wa-tool-toggle`,"aria-expanded":t,onClick:()=>n(e=>!e),children:[(0,C.jsx)(`span`,{className:`wa-chevron`,children:t?`▾`:`▸`}),(0,C.jsx)(`span`,{className:`wa-who`,children:a}),(0,C.jsx)(`time`,{className:`wa-time`,children:W(e.ts)})]}),t&&(0,C.jsx)(`pre`,{className:`wa-code`,children:o})]})}function Q({entry:e,sessionId:t,sessionKey:n}){let[r,i]=(0,S.useState)(!1),[a,o]=(0,S.useState)(null),s=()=>{let s=!r;if(i(s),s&&a===null&&typeof fetch==`function`){let r=`/api/whatsapp-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,C.jsxs)(`div`,{className:`wa-turn wa-turn-directive`,children:[(0,C.jsxs)(`button`,{type:`button`,className:`wa-tool-toggle`,"aria-expanded":r,onClick:s,children:[(0,C.jsx)(`span`,{className:`wa-chevron`,children:r?`▾`:`▸`}),(0,C.jsxs)(`span`,{className:`wa-who`,children:[`⚙ directive injected (`,e.len,` B)`]}),(0,C.jsx)(`time`,{className:`wa-time`,children:W(e.ts)})]}),r&&(0,C.jsx)(`pre`,{className:`wa-code`,children:a??`Loading…`})]})}function _e(e){return`text`in e&&typeof e.text==`string`?e.text:``}function ve(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,C.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,C.jsx)(C.Fragment,{children:a})}var $={onRender:({kind:e,mime:t,served:n})=>console.info(`[operator-ui] op=reader-attachment kind=${e} mime=${t??``} served=${n}`),onFail:({kind:e,mime:t,reason:n})=>console.info(`[operator-ui] op=reader-attachment-fail kind=${e} mime=${t??``} reason=${n}`)};function ye(e,t,n){switch(e.kind){case`operator-inbound`:return(0,C.jsxs)(`div`,{className:`wa-turn wa-turn-in`,children:[(0,C.jsx)(Z,{label:`Operator${O(e.source)}`,ts:e.ts}),e.text&&(0,C.jsx)(`p`,{className:`wa-body`,children:e.text}),e.attachments&&e.attachments.length>0&&(0,C.jsx)(`div`,{className:`chat-attachment-list`,children:e.attachments.map((e,t)=>(0,C.jsx)(V,{expandable:!0,filename:e.filename,mimeType:e.mimeType,sizeBytes:e.sizeBytes,href:I(e.attachmentId,n.audience,n.sessionId,n.sessionKey),telemetry:$},t))})]},t);case`operator-typed`:return(0,C.jsxs)(`div`,{className:`wa-turn wa-turn-in wa-turn-typed`,children:[(0,C.jsx)(Z,{label:`Operator (web)`,ts:e.ts}),(0,C.jsx)(`p`,{className:`wa-body`,children:e.text})]},t);case`agent-text`:return(0,C.jsxs)(`div`,{className:`wa-turn wa-turn-think`,children:[(0,C.jsx)(Z,{label:`Agent`,ts:e.ts}),(0,C.jsx)(`p`,{className:`wa-body`,children:e.text})]},t);case`agent-reply`:return(0,C.jsxs)(`div`,{className:`wa-turn wa-turn-out`,children:[(0,C.jsx)(Z,{label:`Agent`,ts:e.ts}),(0,C.jsx)(`p`,{className:`wa-body`,children:e.text})]},t);case`agent-reply-document`:return(0,C.jsxs)(`div`,{className:`wa-turn wa-turn-out`,children:[(0,C.jsx)(Z,{label:`Agent`,ts:e.ts}),(0,C.jsxs)(`p`,{className:`wa-doc`,children:[(0,C.jsx)(y,{size:14,"aria-hidden":!0,style:{verticalAlign:`text-bottom`}}),` `,`sent document(s): `,e.files.map(G).join(`, `)]}),e.caption&&(0,C.jsx)(`p`,{className:`wa-body`,children:e.caption})]},t);case`agent-file`:return(0,C.jsxs)(`div`,{className:`wa-turn wa-turn-out`,children:[(0,C.jsx)(Z,{label:`Agent`,ts:e.ts}),e.files.map((t,r)=>{let i=G(t),a=e.downloads?.[r];return(0,C.jsx)(V,{expandable:!0,filename:i,href:a?F(a,n.sessionId,n.sessionKey,P.test(i)?`inline`:void 0):void 0,telemetry:$},r)}),e.caption&&(0,C.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`;return(0,C.jsxs)(`div`,{className:`wa-turn ${e.fromMe?`wa-turn-out`:`wa-turn-in`}${r?` wa-op-manual`:``}`,children:[n.onReplyTo&&e.msgKeyId&&(0,C.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,C.jsx)(x,{size:14})}),n.showCopy&&e.text&&(0,C.jsx)(`button`,{type:`button`,className:`wa-bubble-copy`,"aria-label":`Copy this message`,onClick:()=>{let t=e.text;o(t).then(e=>e?console.info(`[operator-ui] op=wa-copy len=${t.length} ok=true`):console.warn(`[operator-ui] op=wa-copy-fail reason=clipboard-unavailable`))},children:(0,C.jsx)(s,{size:14})}),e.quoted&&(0,C.jsxs)(`div`,{className:`wa-quoted`,children:[(0,C.jsx)(`span`,{className:`wa-quoted-who`,children:e.quoted.fromMe?`You`:e.quoted.sender??`Contact`}),(0,C.jsx)(`span`,{className:`wa-quoted-body`,children:e.quoted.body||`Message`})]}),(0,C.jsx)(Z,{label:i,ts:e.ts}),e.text&&(0,C.jsx)(`p`,{className:`wa-body`,children:ve(e.text,n.highlight)}),e.attachments&&e.attachments.length>0&&(0,C.jsx)(`div`,{className:`chat-attachment-list`,children:e.attachments.map((e,t)=>(0,C.jsx)(V,{expandable:!0,filename:e.filename,mimeType:e.mimeType,sizeBytes:e.sizeBytes,href:I(e.attachmentId,n.audience,n.sessionId,n.sessionKey),telemetry:$},t))}),e.reactions&&e.reactions.length>0&&(0,C.jsx)(`div`,{className:`wa-reactions`,children:e.reactions.map((e,t)=>(0,C.jsx)(`span`,{className:`wa-reaction`,title:e.reactorName??void 0,children:e.emoji},t))}),(0,C.jsxs)(`span`,{className:`wa-bubble-meta`,children:[r&&(0,C.jsx)(`span`,{className:`wa-op-tag`,children:`You`}),(0,C.jsx)(`time`,{className:`wa-bubble-time`,children:W(e.ts)}),e.fromMe&&(0,C.jsx)(g,{size:14,className:`wa-bubble-tick`,"aria-hidden":!0})]})]},t)}case`session-continued`:return(0,C.jsx)(X,{},t);case`harness-internal`:return null;case`tool-call`:case`tool-result`:return(0,C.jsx)(ge,{turn:e},t);case`agent-error`:return(0,C.jsxs)(`div`,{className:`wa-turn wa-turn-error`,role:`alert`,children:[(0,C.jsx)(Z,{label:`Agent`,ts:e.ts}),(0,C.jsx)(`p`,{className:`wa-body wa-error-body`,children:D(e.code,`admin`)}),e.code===`agent_error`&&e.raw&&(0,C.jsx)(`pre`,{className:`wa-code`,children:e.raw})]},t)}}function be(e,t,n,r=`admin`,i,a,o){let s={sessionId:t,sessionKey:n,audience:r,highlight:i,onReplyTo:a,showCopy:o},c=[],l=null;return e.forEach((e,r)=>{let i=J(e),a=q(i);a!==null&&a!==l&&(c.push((0,C.jsx)(Y,{ts:i},`day-${r}`)),l=a),c.push(e.kind===`turn`?ye(e.turn,r,s):(0,C.jsx)(Q,{entry:e.entry,sessionId:t,sessionKey:n},r))}),c}function xe(e){return e.filter(e=>e.kind===`turn`&&fe.has(e.turn.kind)&&!(e.turn.kind===`operator-inbound`&&e.turn.scheduled))}var Se=(0,S.memo)(function({sessionId:e,projectDir:t,sessionKey:n,renderItems:r=be,clean:i,onToggleClean:a,forceDeliveredOnly:o=!1,streamEndpoint:s=`/api/whatsapp-reader/stream`,suppressDirectives:c=!1,tail:l=null,resetKey:u,onTurnsChange:d,onActivityChange:f,store:p,search:m,onReplyTo:h}){let g=!!p,_=ce(e,t,n,s,u,!g),v=le(p?.accountId??``,p?.remoteJid??``,n,g),{turns:y,status:b}=g?{turns:v.turns,status:v.status}:{turns:_.turns,status:_.status},x=g?null:_.subagentActivity;(0,S.useEffect)(()=>{f?.(x)},[x,f]),(0,S.useEffect)(()=>{d?.(y.length)},[y.length,d]);let T=ue(y,de(e,n,!c)),E=a==null?!1:!!i,D=o||E?xe(T):T,O=(m??``).trim().toLowerCase(),k=O.length>0,A=k?D.filter(e=>e.kind===`turn`&&_e(e.turn).toLowerCase().includes(O)):D,j=k?D.filter(e=>e.kind===`turn`).length:0;return(0,S.useEffect)(()=>{k&&console.info(`[operator-ui] op=wa-search q=${O} matches=${A.length} ofTurns=${j}`)},[O,k,A.length,j]),(0,C.jsxs)(w,{repinSignals:[y,E,k],tail:l,children:[b===`error`&&(0,C.jsx)(`div`,{className:`wa-reader-error`,children:`Stream disconnected.`}),!k&&y.length===0&&b===`open`&&(0,C.jsx)(`div`,{className:`wa-reader-placeholder`,children:`No messages in this conversation yet.`}),k&&A.length===0&&(0,C.jsxs)(`div`,{className:`wa-reader-placeholder`,children:[`No matches for "`,m,`".`]}),g?be(A,e,n,`admin`,m,h,!0):r(D,e,n)]})});function Ce(e,t){let n=e.split(`;`)[0].trim().toLowerCase();return t.has(n)}var we=[`audio/ogg;codecs=opus`,`audio/webm;codecs=opus`,`audio/webm`,`audio/mp4`];function Te(){for(let e of we)if(MediaRecorder.isTypeSupported(e))return e;return``}function Ee(e){return e.split(`;`)[0]}async function De(){return typeof navigator>`u`||!navigator.mediaDevices?.enumerateDevices?[]:(await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===`audioinput`)}function Oe(e){let[t,n]=(0,S.useState)(`idle`),[r,i]=(0,S.useState)(0),[a,o]=(0,S.useState)(null),[s,c]=(0,S.useState)(null),l=(0,S.useRef)(null),u=(0,S.useRef)(null),d=(0,S.useRef)([]),f=(0,S.useRef)(``),p=(0,S.useRef)(null),m=(0,S.useRef)(0),h=(0,S.useRef)(0),g=(0,S.useRef)(null),_=(0,S.useRef)(null),v=(0,S.useRef)(0),y=(0,S.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,S.useEffect)(()=>y,[y]);let b=(0,S.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,S.useCallback)(()=>{p.current&&=(clearInterval(p.current),null);let e=Date.now()-m.current;h.current+=e},[]),C=(0,S.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()},[]),w=(0,S.useCallback)(()=>{v.current&&=(cancelAnimationFrame(v.current),0)},[]),T=e?.onResult,E=(0,S.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=Te();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(),C(),T?.({ok:!0})}catch(e){y(),n(`error`),e instanceof DOMException?(T?.({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}`)):(T?.({ok:!1}),c(`Could not start recording.`))}}},[t,y,b,C,T]),D=(0,S.useCallback)(()=>{let e=l.current;e&&(t===`recording`&&e.state===`recording`?(e.pause(),x(),w(),n(`paused`)):t===`paused`&&e.state===`paused`&&(e.resume(),b(),C(),n(`recording`)))},[t,x,b,C,w]),O=(0,S.useCallback)(()=>{t!==`recording`&&t!==`paused`||(y(),n(`idle`),i(0),o(null))},[t,y]),k=(0,S.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(),w(),new Promise(t=>{e.onstop=()=>{let r=f.current||e.mimeType||`audio/webm`,a=new Blob(d.current,{type:Ee(r)});y(),n(`idle`),i(0),o(null),t(a.size>0?a:null)},e.stop()}))},[t,O,x,w,y]);return(0,S.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:E,togglePause:D,discard:O,send:k}}export{_ as C,h as D,p as E,v as S,m as T,F as _,Q as a,b,G as c,J as d,V as f,I as g,P as h,Y as i,q as l,N as m,Oe as n,X as o,B as p,Ce as r,Se as s,De as t,W as u,te as v,f as w,y as x,D as y};
2
+ import{o as e}from"./chunk-CltuBf4Z.js";import{B as t,K as n,P as r,g as i,k as a,r as o}from"./useSubAccountSwitcher-0PfRrN6i.js";import{n as s,t as c}from"./maximize-2-bTn_Ozpi.js";import{n as l,t as u}from"./time-entry-format-BgZqOOqG.js";import{t as d}from"./preload-helper-BQrMkyGX.js";var f=`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`,p=new Set(f.split(`,`).filter(e=>!e.startsWith(`.`))),m=50*1024*1024;function h(e){switch(e){case`expanded`:return!0;case`collapsed`:return!1;default:return}}var g=r(`check-check`,[[`path`,{d:`M18 6 7 17l-5-5`,key:`116fxf`}],[`path`,{d:`m22 10-7.5 7.5L13 16`,key:`ke71qq`}]]),_=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`}]]),v=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`}]]),y=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`}]]),b=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`}]]),x=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`}]]),S=e(n(),1),C=t();function w({children:e,tail:t=null,repinSignals:n}){let r=(0,S.useRef)(null),i=(0,S.useRef)(null),a=(0,S.useRef)(!0),[o,s]=(0,S.useState)(!0),c=(0,S.useRef)(0),l=(0,S.useRef)(0),u=()=>{let e=r.current;if(!e)return;let t=e.clientHeight,n=e.scrollHeight,i=t!==c.current||n!==l.current;if(c.current=t,l.current=n,i){a.current&&(e.scrollTop=e.scrollHeight);return}let o=n-e.scrollTop-t<=32;a.current=o,s(e=>e===o?e:o)},d=()=>{let e=r.current;e&&(e.scrollTop=e.scrollHeight,l.current=e.scrollHeight,c.current=e.clientHeight,a.current=!0,s(!0))},f=t!=null;return(0,S.useLayoutEffect)(()=>{let e=r.current;e&&a.current&&(e.scrollTop=e.scrollHeight),e&&(l.current=e.scrollHeight,c.current=e.clientHeight)},[...n,f]),(0,S.useLayoutEffect)(()=>{if(typeof ResizeObserver>`u`)return;let e=new ResizeObserver(()=>u());return r.current&&e.observe(r.current),i.current&&e.observe(i.current),()=>e.disconnect()},[]),(0,C.jsxs)(`div`,{className:`wa-reader`,children:[(0,C.jsx)(`div`,{className:`wa-reader-thread`,ref:r,onScroll:u,children:(0,C.jsxs)(`div`,{className:`wa-thread-scroll`,ref:i,children:[e,t]})}),!o&&(0,C.jsx)(`button`,{type:`button`,className:`wa-jump`,onClick:d,"aria-label":`Jump to latest message`,title:`Jump to latest message`,children:`↓`})]})}var T={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.`},E={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 D(e,t=`admin`){return t===`public`?E[e]:T[e]}function O(e){return e===`whatsapp`?` · via WhatsApp`:e===`webchat`?` · via web`:``}var k=56,A=5;function j(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 M({src:e,filename:t,onDecodeFail:n,onMediaError:r}){let i=(0,S.useRef)(null),a=(0,S.useRef)(null),o=(0,S.useRef)(!1),[s,c]=(0,S.useState)([]),[d,f]=(0,S.useState)(void 0),[p,m]=(0,S.useState)(!1),[h,g]=(0,S.useState)(0),[_,v]=(0,S.useState)(0);(0,S.useEffect)(()=>{let t=!1,r=null,i=window.AudioContext??window.webkitAudioContext,a=()=>{t||o.current||(o.current=!0,n())};if(!i){a();return}let s=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),f(r);let a=await s.decodeAudioData(await i.arrayBuffer());if(t)return;c(j(a.getChannelData(0),k)),Number.isFinite(a.duration)&&a.duration>0&&v(a.duration)}catch{a()}finally{try{s.close()}catch{}}})(),()=>{t=!0,r&&URL.revokeObjectURL(r)}},[e]);let y=()=>{let e=i.current;e&&(p?e.pause():Promise.resolve(e.play()).catch(()=>{}))},x=e=>{let t=i.current;if(!t||!(_>0))return;let n=Math.min(_,Math.max(0,e));t.currentTime=n,g(n)},w=e=>{let t=a.current;if(!t||!(_>0))return;let n=t.getBoundingClientRect();x(Math.min(1,Math.max(0,(e-n.left)/n.width))*_)},T=e=>{w(e.clientX);let t=e=>w(e.clientX),n=()=>{window.removeEventListener(`mousemove`,t),window.removeEventListener(`mouseup`,n)};window.addEventListener(`mousemove`,t),window.addEventListener(`mouseup`,n)},E=e=>{if(!(_>0))return;let t=i.current?.currentTime??0;switch(e.key){case`ArrowRight`:case`ArrowUp`:x(t+A),e.preventDefault();break;case`ArrowLeft`:case`ArrowDown`:x(t-A),e.preventDefault();break;case`Home`:x(0),e.preventDefault();break;case`End`:x(_),e.preventDefault();break;default:break}},D=_>0?Math.min(1,h/_):0,O=Math.round(D*k),M=u(h>0?h:_);return(0,C.jsxs)(`div`,{className:`voice-note`,children:[(0,C.jsx)(`button`,{type:`button`,className:`voice-note-play`,"aria-label":`${p?`Pause`:`Play`} ${t}`,onClick:y,children:p?(0,C.jsx)(b,{size:16,"aria-hidden":!0}):(0,C.jsx)(l,{size:16,"aria-hidden":!0})}),(0,C.jsx)(`div`,{ref:a,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:T,onKeyDown:E,children:(s.length?s:Array.from({length:k},()=>0)).map((e,t)=>(0,C.jsx)(`span`,{className:`voice-note-bar${t<O?` is-played`:``}`,style:{height:`${Math.max(10,Math.round(e*100))}%`}},t))}),(0,C.jsx)(`span`,{className:`voice-note-time`,children:M}),(0,C.jsx)(`audio`,{ref:i,className:`voice-note-audio`,preload:`metadata`,src:d,"aria-label":t,onPlay:()=>m(!0),onPause:()=>m(!1),onEnded:()=>m(!1),onError:()=>r?.(),onLoadedMetadata:e=>{let t=e.currentTarget.duration;Number.isFinite(t)&&t>0&&v(t)},onTimeUpdate:e=>g(e.currentTarget.currentTime)})]})}var N=/\.(png|jpe?g|gif|webp|svg|bmp)$/i,P=/\.pdf$/i;function ee(e,t){return(t?t.startsWith(`image/`):N.test(e))?`image`:t&&t.startsWith(`audio/`)?`audio`:(t?t===`application/pdf`:P.test(e))?`pdf`:`file`}function F(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 I(e,t,n,r){return t===`public`?`/api/public-reader/attachment/${e}?sessionId=${encodeURIComponent(n)}`:`/api/admin/attachment/${e}?session_key=${encodeURIComponent(r)}`}function te(e,t,n){return`/api/admin/session-upload?session_key=${encodeURIComponent(n)}&session_id=${encodeURIComponent(e)}&file=${encodeURIComponent(t)}`}function L(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 R({href:e,filename:t,label:n}){return(0,C.jsxs)(`a`,{className:`chat-attachment-chip`,href:e,download:t,children:[(0,C.jsx)(y,{size:14,"aria-hidden":!0}),n]})}function z({href:e,filename:t,className:n,size:r=14,onClick:i}){return(0,C.jsx)(`a`,{className:n,href:e,download:t,"aria-label":`Download ${t}`,onClick:i,children:(0,C.jsx)(a,{size:r,"aria-hidden":!0})})}function ne({src:e,filename:t,sizeBytes:n,expandable:r,onFail:i}){let[a,o]=(0,S.useState)(!1),[s,c]=(0,S.useState)(!1),l=n==null?t:`${t} · ${L(n)}`;return s?(0,C.jsx)(R,{href:e,filename:t,label:l}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`span`,{className:`chat-attachment-image-wrap`,children:[(0,C.jsx)(`img`,{className:`chat-attachment-image`,src:e,alt:t,onClick:r?()=>o(!0):void 0,onError:()=>{c(!0),i?.(`fetch`)}}),(0,C.jsx)(z,{href:e,filename:t,className:`chat-attachment-download`})]}),r&&a&&(0,C.jsx)(`div`,{className:`chat-attachment-overlay`,role:`dialog`,"aria-label":t,onClick:()=>o(!1),children:(0,C.jsx)(`img`,{className:`chat-attachment-overlay-image`,src:e,alt:t})})]})}var re=280,ie=360,ae=16;function B({src:e,filename:t,sizeBytes:n,onFail:r}){let[i,a]=(0,S.useState)(!1),[o,s]=(0,S.useState)(!1),l=(0,S.useRef)(null),u=n==null?t:`${t} · ${L(n)}`;return(0,S.useEffect)(()=>{let t=!1,n=null;return(async()=>{try{let{loadPdf:r,renderPageToFit:i}=await d(async()=>{let{loadPdf:e,renderPageToFit:t}=await import(`./pdf-render-C257cidb.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,re,ie)}catch{t||(s(!0),r?.(`render`))}})(),()=>{t=!0;try{n?.destroy()}catch{}}},[e]),o?(0,C.jsx)(R,{href:e,filename:t,label:u}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`div`,{className:`chat-attachment-pdf`,children:[(0,C.jsx)(`canvas`,{ref:l,className:`chat-attachment-pdf-canvas`,"aria-label":t}),(0,C.jsx)(z,{href:e,filename:t,className:`chat-attachment-download`}),(0,C.jsx)(`button`,{type:`button`,className:`chat-attachment-pdf-expand`,"aria-label":`Expand ${t}`,onClick:()=>a(!0),children:(0,C.jsx)(c,{size:14,"aria-hidden":!0})})]}),i&&(0,C.jsx)(oe,{src:e,filename:t,label:u,onClose:()=>a(!1),onFail:r})]})}function oe({src:e,filename:t,label:n,onClose:r,onFail:a}){let o=(0,S.useRef)(null),s=(0,S.useRef)(null),[c,l]=(0,S.useState)(null),[u,f]=(0,S.useState)(!1);return(0,S.useEffect)(()=>{let t=!1;return(async()=>{try{let{loadPdf:n}=await d(async()=>{let{loadPdf:e}=await import(`./pdf-render-C257cidb.js`);return{loadPdf:e}},__vite__mapDeps([0,1])),r=await n(e);if(t){try{r.destroy()}catch{}return}s.current=r,l(r.numPages)}catch{t||(f(!0),a?.(`render`))}})(),()=>{t=!0;try{s.current?.destroy()}catch{}}},[e]),(0,S.useEffect)(()=>{if(c==null)return;let e=o.current,t=s.current;if(!e||!t)return;let n=!1;return(async()=>{try{let{renderPageToWidth:r}=await d(async()=>{let{renderPageToWidth:e}=await import(`./pdf-render-C257cidb.js`);return{renderPageToWidth:e}},__vite__mapDeps([0,1])),i=Array.from(e.querySelectorAll(`canvas.chat-attachment-overlay-page`)),a=Math.max(e.clientWidth-ae*2,1);for(let e=0;e<i.length;e++){if(n)return;await r(t,e+1,i[e],a)}}catch{n||(f(!0),a?.(`render`))}})(),()=>{n=!0}},[c]),(0,C.jsxs)(`div`,{className:`chat-attachment-overlay`,role:`dialog`,"aria-label":t,onClick:r,children:[(0,C.jsx)(`div`,{ref:o,className:`chat-attachment-overlay-pdf`,onClick:e=>e.stopPropagation(),children:u?(0,C.jsx)(R,{href:e,filename:t,label:n}):Array.from({length:c??0},(e,n)=>(0,C.jsx)(`canvas`,{className:`chat-attachment-overlay-page`,"aria-label":`${t} page ${n+1}`},n))}),(0,C.jsx)(z,{href:e,filename:t,className:`chat-attachment-overlay-download`,size:20,onClick:e=>e.stopPropagation()}),(0,C.jsx)(`button`,{type:`button`,className:`chat-attachment-overlay-close`,"aria-label":`Close`,onClick:r,children:(0,C.jsx)(i,{size:20,"aria-hidden":!0})})]})}function se({src:e,filename:t,onFail:n}){let[r,i]=(0,S.useState)(!1);return r?(0,C.jsx)(`audio`,{className:`chat-attachment-audio`,controls:!0,preload:`metadata`,src:e,"aria-label":t,onError:()=>n?.(`fetch`)}):(0,C.jsx)(M,{src:e,filename:t,onDecodeFail:()=>{i(!0),n?.(`render`)},onMediaError:()=>{i(!0),n?.(`fetch`)}})}function V({filename:e,href:t,mimeType:n,sizeBytes:r,expandable:i,telemetry:a}){let o=ee(e,n);(0,S.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,C.jsx)(ne,{src:t,filename:e,sizeBytes:r,expandable:i,onFail:s});if(o===`audio`&&t)return(0,C.jsx)(se,{src:t,filename:e,onFail:s});if(o===`pdf`&&t)return(0,C.jsx)(B,{src:t,filename:e,sizeBytes:r,onFail:s});let c=r==null?e:`${e} · ${L(r)}`;return t?(0,C.jsx)(R,{href:t,filename:e,label:c}):(0,C.jsxs)(`p`,{className:`chat-doc`,children:[(0,C.jsx)(y,{size:14,"aria-hidden":!0,style:{verticalAlign:`text-bottom`}}),` `,c]})}function ce(e,t,n,r=`/api/whatsapp-reader/stream`,i=e,a=!0){let[o,s]=(0,S.useState)([]),[c,l]=(0,S.useState)(`open`),[u,d]=(0,S.useState)(null),f=(0,S.useRef)([]);return(0,S.useEffect)(()=>{f.current=o},[o]),(0,S.useEffect)(()=>{s([]),f.current=[],d(null)},[i,t,n,r]),(0,S.useEffect)(()=>{if(l(`open`),!a)return;let i=f.current.slice(),o=i.map(H),c=0,u=i.length>0,p=`${r}?sessionId=${encodeURIComponent(e)}&projectDir=${encodeURIComponent(t)}&session_key=${encodeURIComponent(n)}`,m=new EventSource(p);return m.onopen=()=>{console.info(`[admin-ui] wa-stream onopen sessionId=${e}`),l(`open`)},m.onmessage=e=>{let t;try{t=JSON.parse(e.data)}catch{return}if(u){if(c<o.length&&H(t)===o[c]){c+=1;return}u=!1}s(e=>[...e,t])},m.addEventListener(`activity`,e=>{try{d(JSON.parse(e.data))}catch{}}),m.addEventListener(`activity-clear`,()=>d(null)),m.onerror=()=>{m.readyState===2&&(console.error(`[admin-ui] wa-stream onerror readyState=${m.readyState}`),l(`error`))},()=>m.close()},[e,t,n,r,i,a]),{turns:o,status:c,subagentActivity:u}}function H(e){return JSON.stringify(e)}function le(e,t,n,r=!0){let[i,a]=(0,S.useState)([]),[o,s]=(0,S.useState)(`open`);return(0,S.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(`reaction`,e=>{let t;try{t=JSON.parse(e.data)}catch{return}a(e=>e.map(e=>e.kind===`whatsapp-persisted`&&e.msgKeyId===t.targetMsgKeyId?{...e,reactions:t.reactions}:e))}),o.onerror=()=>{o.readyState===2&&s(`error`)},()=>o.close()},[e,t,n,r]),{turns:i,status:o}}var U=e=>{if(!e)return 1/0;let t=new Date(e).getTime();return Number.isNaN(t)?1/0:t};function ue(e,t){let n=[],r=0;return e.forEach((e,t)=>n.push({sort:U(e.ts),sub:1,ins:r++,item:{kind:`turn`,turn:e,idx:t}})),t.forEach(e=>n.push({sort:U(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 de(e,t,n=!0){let[r,i]=(0,S.useState)([]);return(0,S.useEffect)(()=>{if(!n||typeof fetch!=`function`)return;let r=!0,a=`/api/whatsapp-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 fe=new Set([`operator-inbound`,`operator-typed`,`agent-reply`,`agent-reply-document`,`agent-file`,`agent-error`,`agent-webchat-final`,`whatsapp-persisted`]);function W(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:t.toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})}function G(e){let t=e.lastIndexOf(`/`);return t===-1?e:e.slice(t+1)}var pe=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],me=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function K(e){let t=String(e.getMonth()+1).padStart(2,`0`),n=String(e.getDate()).padStart(2,`0`);return`${e.getFullYear()}-${t}-${n}`}function q(e){if(!e)return null;let t=new Date(e);return Number.isNaN(t.getTime())?null:K(t)}function he(e,t=new Date){if(!e)return``;let n=new Date(e);if(Number.isNaN(n.getTime()))return``;let r=K(n);if(r===K(t))return`Today`;let i=new Date(t);return i.setDate(i.getDate()-1),r===K(i)?`Yesterday`:`${pe[n.getDay()]} ${n.getDate()} ${me[n.getMonth()]} ${n.getFullYear()}`}function J(e){return e.kind===`turn`?e.turn.ts:e.entry.ts}function Y({ts:e}){return(0,C.jsx)(`div`,{className:`day-divider`,role:`separator`,children:(0,C.jsx)(`span`,{className:`day-divider-label`,children:he(e)})})}function X(){return(0,C.jsx)(`div`,{className:`session-divider`,role:`separator`,children:(0,C.jsx)(`span`,{className:`session-divider-label`,children:`Conversation continued`})})}function Z({label:e,ts:t}){return(0,C.jsxs)(`div`,{className:`wa-turn-head`,children:[(0,C.jsx)(`span`,{className:`wa-who`,children:e}),(0,C.jsx)(`time`,{className:`wa-time`,children:W(t)})]})}function ge({turn:e}){let[t,n]=(0,S.useState)(!1),r=e.kind===`tool-result`,i=r?`wa-turn wa-turn-result${e.isError?` is-error`:``}`:`wa-turn wa-turn-tool`,a=r?e.isError?`result (error)`:`result`:`↳ ${e.name}`,o=r?e.text:JSON.stringify(e.input,null,2);return(0,C.jsxs)(`div`,{className:i,children:[(0,C.jsxs)(`button`,{type:`button`,className:`wa-tool-toggle`,"aria-expanded":t,onClick:()=>n(e=>!e),children:[(0,C.jsx)(`span`,{className:`wa-chevron`,children:t?`▾`:`▸`}),(0,C.jsx)(`span`,{className:`wa-who`,children:a}),(0,C.jsx)(`time`,{className:`wa-time`,children:W(e.ts)})]}),t&&(0,C.jsx)(`pre`,{className:`wa-code`,children:o})]})}function Q({entry:e,sessionId:t,sessionKey:n}){let[r,i]=(0,S.useState)(!1),[a,o]=(0,S.useState)(null),s=()=>{let s=!r;if(i(s),s&&a===null&&typeof fetch==`function`){let r=`/api/whatsapp-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,C.jsxs)(`div`,{className:`wa-turn wa-turn-directive`,children:[(0,C.jsxs)(`button`,{type:`button`,className:`wa-tool-toggle`,"aria-expanded":r,onClick:s,children:[(0,C.jsx)(`span`,{className:`wa-chevron`,children:r?`▾`:`▸`}),(0,C.jsxs)(`span`,{className:`wa-who`,children:[`⚙ directive injected (`,e.len,` B)`]}),(0,C.jsx)(`time`,{className:`wa-time`,children:W(e.ts)})]}),r&&(0,C.jsx)(`pre`,{className:`wa-code`,children:a??`Loading…`})]})}function _e(e){return`text`in e&&typeof e.text==`string`?e.text:``}function ve(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,C.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,C.jsx)(C.Fragment,{children:a})}var $={onRender:({kind:e,mime:t,served:n})=>console.info(`[operator-ui] op=reader-attachment kind=${e} mime=${t??``} served=${n}`),onFail:({kind:e,mime:t,reason:n})=>console.info(`[operator-ui] op=reader-attachment-fail kind=${e} mime=${t??``} reason=${n}`)};function ye(e,t,n){switch(e.kind){case`operator-inbound`:return(0,C.jsxs)(`div`,{className:`wa-turn wa-turn-in`,children:[(0,C.jsx)(Z,{label:`Operator${O(e.source)}`,ts:e.ts}),e.text&&(0,C.jsx)(`p`,{className:`wa-body`,children:e.text}),e.attachments&&e.attachments.length>0&&(0,C.jsx)(`div`,{className:`chat-attachment-list`,children:e.attachments.map((e,t)=>(0,C.jsx)(V,{expandable:!0,filename:e.filename,mimeType:e.mimeType,sizeBytes:e.sizeBytes,href:I(e.attachmentId,n.audience,n.sessionId,n.sessionKey),telemetry:$},t))})]},t);case`operator-typed`:return(0,C.jsxs)(`div`,{className:`wa-turn wa-turn-in wa-turn-typed`,children:[(0,C.jsx)(Z,{label:`Operator (web)`,ts:e.ts}),(0,C.jsx)(`p`,{className:`wa-body`,children:e.text})]},t);case`agent-text`:return(0,C.jsxs)(`div`,{className:`wa-turn wa-turn-think`,children:[(0,C.jsx)(Z,{label:`Agent`,ts:e.ts}),(0,C.jsx)(`p`,{className:`wa-body`,children:e.text})]},t);case`agent-reply`:return(0,C.jsxs)(`div`,{className:`wa-turn wa-turn-out`,children:[(0,C.jsx)(Z,{label:`Agent`,ts:e.ts}),(0,C.jsx)(`p`,{className:`wa-body`,children:e.text})]},t);case`agent-reply-document`:return(0,C.jsxs)(`div`,{className:`wa-turn wa-turn-out`,children:[(0,C.jsx)(Z,{label:`Agent`,ts:e.ts}),(0,C.jsxs)(`p`,{className:`wa-doc`,children:[(0,C.jsx)(y,{size:14,"aria-hidden":!0,style:{verticalAlign:`text-bottom`}}),` `,`sent document(s): `,e.files.map(G).join(`, `)]}),e.caption&&(0,C.jsx)(`p`,{className:`wa-body`,children:e.caption})]},t);case`agent-file`:return(0,C.jsxs)(`div`,{className:`wa-turn wa-turn-out`,children:[(0,C.jsx)(Z,{label:`Agent`,ts:e.ts}),e.files.map((t,r)=>{let i=G(t),a=e.downloads?.[r];return(0,C.jsx)(V,{expandable:!0,filename:i,href:a?F(a,n.sessionId,n.sessionKey,P.test(i)?`inline`:void 0):void 0,telemetry:$},r)}),e.caption&&(0,C.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`;return(0,C.jsxs)(`div`,{className:`wa-turn ${e.fromMe?`wa-turn-out`:`wa-turn-in`}${r?` wa-op-manual`:``}`,children:[n.onReplyTo&&e.msgKeyId&&(0,C.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,C.jsx)(x,{size:14})}),n.showCopy&&e.text&&(0,C.jsx)(`button`,{type:`button`,className:`wa-bubble-copy`,"aria-label":`Copy this message`,onClick:()=>{let t=e.text;o(t).then(e=>e?console.info(`[operator-ui] op=wa-copy len=${t.length} ok=true`):console.warn(`[operator-ui] op=wa-copy-fail reason=clipboard-unavailable`))},children:(0,C.jsx)(s,{size:14})}),e.quoted&&(0,C.jsxs)(`div`,{className:`wa-quoted`,children:[(0,C.jsx)(`span`,{className:`wa-quoted-who`,children:e.quoted.fromMe?`You`:e.quoted.sender??`Contact`}),(0,C.jsx)(`span`,{className:`wa-quoted-body`,children:e.quoted.body||`Message`})]}),(0,C.jsx)(Z,{label:i,ts:e.ts}),e.text&&(0,C.jsx)(`p`,{className:`wa-body`,children:ve(e.text,n.highlight)}),e.attachments&&e.attachments.length>0&&(0,C.jsx)(`div`,{className:`chat-attachment-list`,children:e.attachments.map((e,t)=>(0,C.jsx)(V,{expandable:!0,filename:e.filename,mimeType:e.mimeType,sizeBytes:e.sizeBytes,href:I(e.attachmentId,n.audience,n.sessionId,n.sessionKey),telemetry:$},t))}),e.reactions&&e.reactions.length>0&&(0,C.jsx)(`div`,{className:`wa-reactions`,children:e.reactions.map((e,t)=>(0,C.jsx)(`span`,{className:`wa-reaction`,title:e.reactorName??void 0,children:e.emoji},t))}),(0,C.jsxs)(`span`,{className:`wa-bubble-meta`,children:[r&&(0,C.jsx)(`span`,{className:`wa-op-tag`,children:`You`}),(0,C.jsx)(`time`,{className:`wa-bubble-time`,children:W(e.ts)}),e.fromMe&&(0,C.jsx)(g,{size:14,className:`wa-bubble-tick`,"aria-hidden":!0})]})]},t)}case`session-continued`:return(0,C.jsx)(X,{},t);case`harness-internal`:return null;case`tool-call`:case`tool-result`:return(0,C.jsx)(ge,{turn:e},t);case`agent-error`:return(0,C.jsxs)(`div`,{className:`wa-turn wa-turn-error`,role:`alert`,children:[(0,C.jsx)(Z,{label:`Agent`,ts:e.ts}),(0,C.jsx)(`p`,{className:`wa-body wa-error-body`,children:D(e.code,`admin`)}),e.code===`agent_error`&&e.raw&&(0,C.jsx)(`pre`,{className:`wa-code`,children:e.raw})]},t)}}function be(e,t,n,r=`admin`,i,a,o){let s={sessionId:t,sessionKey:n,audience:r,highlight:i,onReplyTo:a,showCopy:o},c=[],l=null;return e.forEach((e,r)=>{let i=J(e),a=q(i);a!==null&&a!==l&&(c.push((0,C.jsx)(Y,{ts:i},`day-${r}`)),l=a),c.push(e.kind===`turn`?ye(e.turn,r,s):(0,C.jsx)(Q,{entry:e.entry,sessionId:t,sessionKey:n},r))}),c}function xe(e){return e.filter(e=>e.kind===`turn`&&fe.has(e.turn.kind)&&!(e.turn.kind===`operator-inbound`&&e.turn.scheduled))}var Se=(0,S.memo)(function({sessionId:e,projectDir:t,sessionKey:n,renderItems:r=be,clean:i,onToggleClean:a,forceDeliveredOnly:o=!1,streamEndpoint:s=`/api/whatsapp-reader/stream`,suppressDirectives:c=!1,tail:l=null,resetKey:u,onTurnsChange:d,onActivityChange:f,store:p,search:m,onReplyTo:h}){let g=!!p,_=ce(e,t,n,s,u,!g),v=le(p?.accountId??``,p?.remoteJid??``,n,g),{turns:y,status:b}=g?{turns:v.turns,status:v.status}:{turns:_.turns,status:_.status},x=g?null:_.subagentActivity;(0,S.useEffect)(()=>{f?.(x)},[x,f]),(0,S.useEffect)(()=>{d?.(y.length)},[y.length,d]);let T=ue(y,de(e,n,!c)),E=a==null?!1:!!i,D=o||E?xe(T):T,O=(m??``).trim().toLowerCase(),k=O.length>0,A=k?D.filter(e=>e.kind===`turn`&&_e(e.turn).toLowerCase().includes(O)):D,j=k?D.filter(e=>e.kind===`turn`).length:0;return(0,S.useEffect)(()=>{k&&console.info(`[operator-ui] op=wa-search q=${O} matches=${A.length} ofTurns=${j}`)},[O,k,A.length,j]),(0,C.jsxs)(w,{repinSignals:[y,E,k],tail:l,children:[b===`error`&&(0,C.jsx)(`div`,{className:`wa-reader-error`,children:`Stream disconnected.`}),!k&&y.length===0&&b===`open`&&(0,C.jsx)(`div`,{className:`wa-reader-placeholder`,children:`No messages in this conversation yet.`}),k&&A.length===0&&(0,C.jsxs)(`div`,{className:`wa-reader-placeholder`,children:[`No matches for "`,m,`".`]}),g?be(A,e,n,`admin`,m,h,!0):r(D,e,n)]})});function Ce(e,t){let n=e.split(`;`)[0].trim().toLowerCase();return t.has(n)}var we=[`audio/ogg;codecs=opus`,`audio/webm;codecs=opus`,`audio/webm`,`audio/mp4`];function Te(){for(let e of we)if(MediaRecorder.isTypeSupported(e))return e;return``}function Ee(e){return e.split(`;`)[0]}async function De(){return typeof navigator>`u`||!navigator.mediaDevices?.enumerateDevices?[]:(await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===`audioinput`)}function Oe(e){let[t,n]=(0,S.useState)(`idle`),[r,i]=(0,S.useState)(0),[a,o]=(0,S.useState)(null),[s,c]=(0,S.useState)(null),l=(0,S.useRef)(null),u=(0,S.useRef)(null),d=(0,S.useRef)([]),f=(0,S.useRef)(``),p=(0,S.useRef)(null),m=(0,S.useRef)(0),h=(0,S.useRef)(0),g=(0,S.useRef)(null),_=(0,S.useRef)(null),v=(0,S.useRef)(0),y=(0,S.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,S.useEffect)(()=>y,[y]);let b=(0,S.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,S.useCallback)(()=>{p.current&&=(clearInterval(p.current),null);let e=Date.now()-m.current;h.current+=e},[]),C=(0,S.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()},[]),w=(0,S.useCallback)(()=>{v.current&&=(cancelAnimationFrame(v.current),0)},[]),T=e?.onResult,E=(0,S.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=Te();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(),C(),T?.({ok:!0})}catch(e){y(),n(`error`),e instanceof DOMException?(T?.({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}`)):(T?.({ok:!1}),c(`Could not start recording.`))}}},[t,y,b,C,T]),D=(0,S.useCallback)(()=>{let e=l.current;e&&(t===`recording`&&e.state===`recording`?(e.pause(),x(),w(),n(`paused`)):t===`paused`&&e.state===`paused`&&(e.resume(),b(),C(),n(`recording`)))},[t,x,b,C,w]),O=(0,S.useCallback)(()=>{t!==`recording`&&t!==`paused`||(y(),n(`idle`),i(0),o(null))},[t,y]),k=(0,S.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(),w(),new Promise(t=>{e.onstop=()=>{let r=f.current||e.mimeType||`audio/webm`,a=new Blob(d.current,{type:Ee(r)});y(),n(`idle`),i(0),o(null),t(a.size>0?a:null)},e.stop()}))},[t,O,x,w,y]);return(0,S.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:E,togglePause:D,discard:O,send:k}}export{_ as C,h as D,p as E,v as S,m as T,F as _,Q as a,b,G as c,J as d,V as f,I as g,P as h,Y as i,q as l,N as m,Oe as n,X as o,B as p,Ce as r,Se as s,De as t,W as u,te as v,f as w,y as x,D as y};
@@ -1 +1 @@
1
- import{P as e}from"./useSubAccountSwitcher-DSW9vDi2.js";var t=e(`wrench`,[[`path`,{d:`M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z`,key:`1ngwbx`}]]);export{t};
1
+ import{P as e}from"./useSubAccountSwitcher-0PfRrN6i.js";var t=e(`wrench`,[[`path`,{d:`M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z`,key:`1ngwbx`}]]);export{t};
@@ -0,0 +1,23 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512" role="img" aria-label="Real Agent">
2
+ <title>Real Agent</title>
3
+ <!--
4
+ Real Agent mark. Both colours are brand tokens, not literals chosen here:
5
+ #CDFF00 color.global.brand.lime (swatch 1, the accent)
6
+ #0F0F0F color.global.brand.ink (swatch 2, the neutral black)
7
+ Ink on lime measures 16.34:1. The palette's rule is that lime always carries
8
+ ink on top and is never used as type on white, which is what this mark does.
9
+
10
+ A 512 grid, so every coordinate is an integer at 1x, 2x and 4x. The corner
11
+ radius is 112/512 = 21.9% of the side, expressed as a ratio so the
12
+ silhouette is identical at every export size.
13
+
14
+ The slash is a parallelogram rather than a rotated rectangle: its top and
15
+ bottom edges stay exactly horizontal, so the stroke terminates flat like a
16
+ drawn slash instead of showing the angled ends a rotated bar would give.
17
+ Stroke measures 76 units across the horizontal (14.8% of the tile), spans
18
+ y 132 to 380 (48% of the height), and leans 72 over 248, about 16 degrees
19
+ off vertical. Its x range is 182 to 330, centred exactly on 256.
20
+ -->
21
+ <rect width="512" height="512" rx="112" ry="112" fill="#CDFF00"/>
22
+ <path d="M330 132 L258 380 L182 380 L254 132 Z" fill="#0F0F0F"/>
23
+ </svg>
@@ -43,10 +43,6 @@
43
43
 
44
44
  :root {
45
45
  /* Brand defaults — generated by bundle.js from brands/realagent-code/brand.json */
46
- --sage: #0E0E0E;
47
- --sage-hover: #262626;
48
- --sage-subtle: rgba(14, 14, 14, 0.06);
49
- --sage-glow: rgba(204, 255, 0, 0.30);
50
46
  --visitor-bubble: #EEF8C8;
51
47
  --bg: #FAFAF8;
52
48
  --maxy-bubble: #ECECE8;
@@ -65,45 +61,70 @@
65
61
  --color-global-neutral-400: #ABABA6; /* Disabled / strikethrough — cool neutral, not warm putty */
66
62
  --color-global-neutral-500: #767672; /* Muted / secondary text — cool neutral, matches the carbon identity */
67
63
  --color-global-neutral-700: #33332F; /* Body text */
68
- --color-global-neutral-900: #0E0E0E; /* Carbon ink — headings, strong text */
64
+ --color-global-neutral-900: #0F0F0F; /* Ink. */
69
65
  --color-global-brand-claudeOrange: #262626; /* Activity / copper accent — carbon-dark on the lime brand */
70
- --color-global-accent-blue-100: #CCFF00; /* Lime signature fill primary action background */
71
- --color-global-accent-blue-500: #0E0E0E; /* Carbon links, inline code, primary action foreground */
66
+ --color-global-brand-ink: #0F0F0F; /* Swatch 2. Neutral black; replaces the blue-cast #12141A. */
67
+ --color-global-brand-lime: #CDFF00; /* Swatch 1. Accent. */
68
+ --color-global-brand-graphite: #2C2C2C; /* Swatch 3. */
69
+ --color-global-brand-silver: #C7C7C7; /* Swatch 4. Borders; 1.69:1 on white, a hairline, never text. */
70
+ --color-global-brand-white: #FFFFFF; /* Swatch 5. */
71
+ --color-global-brand-slate: #6B6B6B; /* DERIVED. Muted text at 5.33:1 on white. The swatch set has no passing mid grey: Silver is 1.69:1 and Graphite 13.97:1 reads as black. */
72
+ --color-global-brand-mist: #F4F4F4; /* DERIVED. Surface tint, a 1.10:1 step under a white card. The swatch set has nothing between White and Silver. */
73
+ --color-global-accent-blue-100: #CDFF00; /* Lime signature fill. */
74
+ --color-global-accent-blue-500: #0F0F0F; /* Ink. Links, primary action foreground. */
72
75
  --color-global-semantic-danger-100: #FEE2E2; /* Destructive action hover wash */
73
76
  --color-global-semantic-danger-500: #B91C1C; /* Destructive action background (End / Purge confirm). Added 2026-05-16; DESIGN.md v1 did not define a danger family. */
74
77
  --color-alias-surface-canvas: #FFFFFF;
75
78
  --color-alias-surface-chrome: #F4F4F1;
76
79
  --color-alias-surface-raisedSubtle: #ECECE8;
77
80
  --color-alias-surface-accentWash: rgba(14,14,14,.05); /* Task 1856: carbon hover/active/selection tint */
78
- --color-alias-text-primary: #0E0E0E;
81
+ --color-alias-surface-page: #F4F4F4; /* Mist. Gives the white card a value step to rise off. */
82
+ --color-alias-surface-raised: #FFFFFF; /* White. The card plane. */
83
+ --color-alias-surface-inset: #F4F4F4; /* Mist. Recedes from the card. */
84
+ --color-alias-surface-inverse: #0F0F0F; /* Ink. The one inverted band per page. */
85
+ --color-alias-text-primary: #0F0F0F; /* Ink. 19.17:1 on white. */
79
86
  --color-alias-text-body: #33332F;
80
- --color-alias-text-muted: #767672;
87
+ --color-alias-text-muted: #6B6B6B; /* Slate. 5.33:1 on white. */
81
88
  --color-alias-text-disabled: #ABABA6;
82
- --color-alias-text-link: #0E0E0E;
83
- --color-alias-text-onAccent: #0E0E0E;
84
- --color-alias-border-subtle: #E2E2DD;
89
+ --color-alias-text-link: #0F0F0F;
90
+ --color-alias-text-onAccent: #0F0F0F;
91
+ --color-alias-text-onInverse: #FFFFFF; /* White on Ink; the ramp is neutral, so no warm tint. */
92
+ --color-alias-border-subtle: #C7C7C7; /* Silver. */
85
93
  --color-alias-border-strong: #ABABA6; /* Second border tier: secondary-button and checkbox borders. Separate from `subtle` so the two-tier system survives a brand override; every brand supplies neutral.400 in its own ramp. */
86
- --color-alias-action-primaryBg: #CCFF00;
87
- --color-alias-action-primaryFg: #0E0E0E;
88
- --color-alias-action-ctaBg: #CCFF00; /* Task 1856: lime signature CTA fill */
89
- --color-alias-action-ctaFg: #0E0E0E; /* Task 1856: carbon text on the lime CTA */
94
+ --color-alias-border-card: #C7C7C7; /* Silver. */
95
+ --color-alias-action-primaryBg: #CDFF00;
96
+ --color-alias-action-primaryFg: #0F0F0F;
97
+ --color-alias-action-ctaBg: #CDFF00; /* Lime. */
98
+ --color-alias-action-ctaFg: #0F0F0F; /* Ink on Lime, 16.34:1. Never white on lime. */
90
99
  --color-alias-action-dangerBg: #B91C1C; /* Destructive confirm button background */
91
100
  --color-alias-action-dangerFg: #FFFFFF; /* Destructive confirm button text */
92
101
  --color-alias-action-dangerWash: #FEE2E2; /* Destructive hover background */
93
102
  --color-alias-status-activity: #262626; /* Agent-running indicator */
103
+ --color-alias-status-success-solid: #0E7A4B; /* Task 2002: success solid fill. Carries white text. */
104
+ --color-alias-status-success-tint: #E7F4ED; /* Task 2002: success pale tint. Carries textOnTint, never white. */
105
+ --color-alias-status-success-textOnTint: #0A5836; /* Task 2002: success text on its own tint. */
106
+ --color-alias-status-warning-solid: #B45309; /* Task 2002: warning solid fill. Carries white text. */
107
+ --color-alias-status-warning-tint: #FCF0E0; /* Task 2002: warning pale tint. Carries textOnTint, never white. */
108
+ --color-alias-status-warning-textOnTint: #843D07; /* Task 2002: warning text on its own tint. */
109
+ --color-alias-status-error-solid: #B42318; /* Task 2002: error solid fill. Carries white text. */
110
+ --color-alias-status-error-tint: #FBEAE8; /* Task 2002: error pale tint. Carries textOnTint, never white. */
111
+ --color-alias-status-error-textOnTint: #851A12; /* Task 2002: error text on its own tint. */
112
+ --color-alias-status-info-solid: #1D4ED8; /* Task 2002: info solid fill. Carries white text. */
113
+ --color-alias-status-info-tint: #E8EDFC; /* Task 2002: info pale tint. Carries textOnTint, never white. */
114
+ --color-alias-status-info-textOnTint: #16389E; /* Task 2002: info text on its own tint. */
94
115
  --color-component-sidebar-background: #F4F4F1;
95
116
  --color-component-sidebar-itemRest: transparent;
96
117
  --color-component-sidebar-itemSelected: #ECECE8;
97
118
  --color-component-sidebar-itemText: #33332F;
98
- --color-component-sidebar-sectionLabel: #767672;
119
+ --color-component-sidebar-sectionLabel: #6B6B6B;
99
120
  --color-component-tab-rest: transparent;
100
121
  --color-component-tab-active: #ECECE8;
101
- --color-component-codeInline-text: #0E0E0E;
122
+ --color-component-codeInline-text: #0F0F0F;
102
123
  --color-component-taskItem-completedText: #ABABA6;
103
124
  --color-component-taskItem-pendingText: #33332F;
104
125
  --color-component-input-background: #FFFFFF;
105
- --color-component-input-border: #E2E2DD;
106
- --color-component-input-placeholder: #767672;
126
+ --color-component-input-border: #C7C7C7;
127
+ --color-component-input-placeholder: #6B6B6B;
107
128
 
108
129
  /* typography */
109
130
  --typography-fontFamily-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; /* Body, UI */
@@ -112,13 +133,20 @@
112
133
  --typography-fontSize-sm: 13px; /* Sidebar items */
113
134
  --typography-fontSize-base: 15px; /* Body content / task list */
114
135
  --typography-fontSize-lg: 17px;
136
+ --typography-fontSize-xl: 20px; /* Task 2002: card counts, tabular numerals. */
137
+ --typography-fontSize-metric: clamp(1.4rem, 0.55vw + 1.23rem, 1.75rem); /* Task 2002: 22.4px floor, 28px at >=1513w. */
138
+ --typography-fontSize-display: clamp(1.6rem, 0.62vw + 1.41rem, 2rem); /* Task 2002: 25.6px floor, 32px at >=1523w. Page titles. */
115
139
  --typography-fontWeight-regular: 400;
116
140
  --typography-fontWeight-medium: 500;
117
141
  --typography-fontWeight-semibold: 600;
118
142
  --typography-fontWeight-display: 600; /* Archivo semibold admin headings */
143
+ --typography-fontWeight-displayTier: 700;
119
144
  --typography-lineHeight-tight: 1.3;
120
145
  --typography-lineHeight-normal: 1.5;
121
146
  --typography-lineHeight-relaxed: 1.7; /* Task list rows */
147
+ --typography-lineHeight-display: 0.92;
148
+ --typography-letterSpacing-display: -0.045em;
149
+ --typography-letterSpacing-eyebrow: 0.22em;
122
150
 
123
151
  /* space */
124
152
  --space-0: 0px;
@@ -137,6 +165,8 @@
137
165
  --radius-lg: 10px; /* Action buttons ('commit and merge') */
138
166
  --radius-pill: 9999px;
139
167
  --radius-brand: 4px; /* Task 1856: RealAgent control radius */
168
+ --radius-card: 16px;
169
+ --radius-control: 9999px;
140
170
 
141
171
  /* borderWidth */
142
172
  --borderWidth-hairline: 1px;
@@ -146,10 +176,15 @@
146
176
 
147
177
  /* elevation */
148
178
  --elevation-0: none; /* Flat UI — no shadows visible in source */
179
+ --elevation-raised: 0 22px 44px -20px rgba(20,20,20,.32);
180
+ --elevation-floating: 0 40px 80px -30px rgba(14,14,14,.55), 0 12px 30px -14px rgba(14,14,14,.4);
149
181
 
150
182
  /* icon */
151
183
  --icon-size-sm: 14px; /* Inline w/ body text */
152
184
  --icon-size-md: 16px; /* Sidebar items, buttons */
153
185
  --icon-size-lg: 20px; /* Tab headers */
154
186
  --icon-strokeWidth-default: 1.75;
187
+
188
+ /* motion */
189
+ --motion-lift: -3px;
155
190
  }
@@ -5,11 +5,11 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Browser — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/browser-T_5xbnJh.js"></script>
8
+ <script type="module" crossorigin src="/assets/browser-Bym8QhfA.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DSW9vDi2.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-C8wazpnz.js">
12
- <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-DyrH8DA8.css">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-0PfRrN6i.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-Ckht9hmU.js">
12
+ <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-BkQ5tA8A.css">
13
13
  <link rel="stylesheet" href="/brand-defaults.css">
14
14
  </head>
15
15
  <body>
@@ -5,14 +5,14 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Calendar — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/calendar-CKjuiG8c.js"></script>
8
+ <script type="module" crossorigin src="/assets/calendar-CFnufJOy.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DSW9vDi2.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-C8wazpnz.js">
12
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-DBMCTKlT.js">
13
- <link rel="modulepreload" crossorigin href="/assets/chevron-right-SBAr6zzc.js">
14
- <link rel="modulepreload" crossorigin href="/assets/clock-kkzt7Scf.js">
15
- <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-DyrH8DA8.css">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-0PfRrN6i.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-Ckht9hmU.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-Dtk3jEK5.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/chevron-right-Dih6IZ8B.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/clock-iJCrrmWM.js">
15
+ <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-BkQ5tA8A.css">
16
16
  <link rel="stylesheet" href="/brand-defaults.css">
17
17
  </head>
18
18
  <body>
@@ -5,21 +5,21 @@
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-DWLYAA70.js"></script>
8
+ <script type="module" crossorigin src="/assets/chat-wrckyIpw.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DSW9vDi2.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-C8wazpnz.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-0PfRrN6i.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-Ckht9hmU.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-BQrMkyGX.js">
13
- <link rel="modulepreload" crossorigin href="/assets/time-entry-format-CCO6N6XZ.js">
14
- <link rel="modulepreload" crossorigin href="/assets/maximize-2-BCQkFb1_.js">
15
- <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-BeNqxmm2.js">
16
- <link rel="modulepreload" crossorigin href="/assets/useCopyFeedback-BTUu3-l8.js">
17
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-DBMCTKlT.js">
18
- <link rel="modulepreload" crossorigin href="/assets/file-text-c6cA4Evd.js">
19
- <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-dTpO5dhL.js">
20
- <link rel="modulepreload" crossorigin href="/assets/wrench-CeNnc7oO.js">
21
- <link rel="modulepreload" crossorigin href="/assets/page-HVtUfub2.js">
22
- <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-DyrH8DA8.css">
13
+ <link rel="modulepreload" crossorigin href="/assets/time-entry-format-BgZqOOqG.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/maximize-2-bTn_Ozpi.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-BP6CpYQD.js">
16
+ <link rel="modulepreload" crossorigin href="/assets/useCopyFeedback-BFOujMl-.js">
17
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-Dtk3jEK5.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/file-text-zch0E1GJ.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-BGvzNB1b.js">
20
+ <link rel="modulepreload" crossorigin href="/assets/wrench-DdaRhfzS.js">
21
+ <link rel="modulepreload" crossorigin href="/assets/page-D6M1CmPe.js">
22
+ <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-BkQ5tA8A.css">
23
23
  <link rel="stylesheet" href="/brand-defaults.css">
24
24
  </head>
25
25
  <body>
@@ -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-CV8N9qcy.js"></script>
8
+ <script type="module" crossorigin src="/assets/data-D76--TYs.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DSW9vDi2.js">
11
- <link rel="modulepreload" crossorigin href="/assets/graph-labels-5bjxhC_p.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-0PfRrN6i.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/graph-labels-CBwh4g-6.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-BQrMkyGX.js">
13
- <link rel="modulepreload" crossorigin href="/assets/time-entry-format-CCO6N6XZ.js">
14
- <link rel="modulepreload" crossorigin href="/assets/maximize-2-BCQkFb1_.js">
15
- <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-BeNqxmm2.js">
16
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-DBMCTKlT.js">
17
- <link rel="modulepreload" crossorigin href="/assets/file-text-c6cA4Evd.js">
18
- <link rel="modulepreload" crossorigin href="/assets/triangle-alert-CHjdKpag.js">
19
- <link rel="modulepreload" crossorigin href="/assets/page-JJa2xdzf.js">
20
- <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-DyrH8DA8.css">
13
+ <link rel="modulepreload" crossorigin href="/assets/time-entry-format-BgZqOOqG.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/maximize-2-bTn_Ozpi.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-BP6CpYQD.js">
16
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-Dtk3jEK5.js">
17
+ <link rel="modulepreload" crossorigin href="/assets/file-text-zch0E1GJ.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/triangle-alert-DBJ7xz_t.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/page-3T2mE63b.js">
20
+ <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-BkQ5tA8A.css">
21
21
  <link rel="stylesheet" href="/brand-defaults.css">
22
22
  </head>
23
23
  <body>
@@ -5,16 +5,16 @@
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-DIk-o45J.js"></script>
8
+ <script type="module" crossorigin src="/assets/graph-BavHLzpV.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DSW9vDi2.js">
11
- <link rel="modulepreload" crossorigin href="/assets/graph-labels-5bjxhC_p.js">
12
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-C8wazpnz.js">
13
- <link rel="modulepreload" crossorigin href="/assets/useCopyFeedback-BTUu3-l8.js">
14
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-DBMCTKlT.js">
15
- <link rel="modulepreload" crossorigin href="/assets/maximize-2-BCQkFb1_.js">
16
- <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-dTpO5dhL.js">
17
- <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-DyrH8DA8.css">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-0PfRrN6i.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/graph-labels-CBwh4g-6.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-Ckht9hmU.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/useCopyFeedback-BFOujMl-.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-Dtk3jEK5.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/maximize-2-bTn_Ozpi.js">
16
+ <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-BGvzNB1b.js">
17
+ <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-BkQ5tA8A.css">
18
18
  <link rel="stylesheet" href="/brand-defaults.css">
19
19
  </head>
20
20
  <body>
@@ -5,22 +5,22 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Real Agent</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/admin-B-EGUWS4.js"></script>
8
+ <script type="module" crossorigin src="/assets/admin-DetvulAu.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DSW9vDi2.js">
11
- <link rel="modulepreload" crossorigin href="/assets/graph-labels-5bjxhC_p.js">
12
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-C8wazpnz.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-0PfRrN6i.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/graph-labels-CBwh4g-6.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-Ckht9hmU.js">
13
13
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-BQrMkyGX.js">
14
- <link rel="modulepreload" crossorigin href="/assets/time-entry-format-CCO6N6XZ.js">
15
- <link rel="modulepreload" crossorigin href="/assets/maximize-2-BCQkFb1_.js">
16
- <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-BeNqxmm2.js">
17
- <link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-D5KOQA8S.js">
18
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-DBMCTKlT.js">
19
- <link rel="modulepreload" crossorigin href="/assets/file-text-c6cA4Evd.js">
20
- <link rel="modulepreload" crossorigin href="/assets/triangle-alert-CHjdKpag.js">
21
- <link rel="modulepreload" crossorigin href="/assets/page-JJa2xdzf.js">
22
- <link rel="modulepreload" crossorigin href="/assets/chevron-right-SBAr6zzc.js">
23
- <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-DyrH8DA8.css">
14
+ <link rel="modulepreload" crossorigin href="/assets/time-entry-format-BgZqOOqG.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/maximize-2-bTn_Ozpi.js">
16
+ <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-BP6CpYQD.js">
17
+ <link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-YT7jsh_H.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-Dtk3jEK5.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/file-text-zch0E1GJ.js">
20
+ <link rel="modulepreload" crossorigin href="/assets/triangle-alert-DBJ7xz_t.js">
21
+ <link rel="modulepreload" crossorigin href="/assets/page-3T2mE63b.js">
22
+ <link rel="modulepreload" crossorigin href="/assets/chevron-right-Dih6IZ8B.js">
23
+ <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-BkQ5tA8A.css">
24
24
  <link rel="stylesheet" crossorigin href="/assets/AdminLoginScreens-CWMpccrR.css">
25
25
  <link rel="stylesheet" href="/brand-defaults.css">
26
26
  </head>
@@ -5,22 +5,22 @@
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-0UnNo2ms.js"></script>
8
+ <script type="module" crossorigin src="/assets/operator-a4IOwf62.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DSW9vDi2.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-C8wazpnz.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-0PfRrN6i.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-Ckht9hmU.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-BQrMkyGX.js">
13
- <link rel="modulepreload" crossorigin href="/assets/time-entry-format-CCO6N6XZ.js">
14
- <link rel="modulepreload" crossorigin href="/assets/maximize-2-BCQkFb1_.js">
15
- <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-BeNqxmm2.js">
16
- <link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-D5KOQA8S.js">
17
- <link rel="modulepreload" crossorigin href="/assets/useCopyFeedback-BTUu3-l8.js">
18
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-DBMCTKlT.js">
19
- <link rel="modulepreload" crossorigin href="/assets/file-text-c6cA4Evd.js">
20
- <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-dTpO5dhL.js">
21
- <link rel="modulepreload" crossorigin href="/assets/wrench-CeNnc7oO.js">
22
- <link rel="modulepreload" crossorigin href="/assets/page-HVtUfub2.js">
23
- <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-DyrH8DA8.css">
13
+ <link rel="modulepreload" crossorigin href="/assets/time-entry-format-BgZqOOqG.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/maximize-2-bTn_Ozpi.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-BP6CpYQD.js">
16
+ <link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-YT7jsh_H.js">
17
+ <link rel="modulepreload" crossorigin href="/assets/useCopyFeedback-BFOujMl-.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-Dtk3jEK5.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/file-text-zch0E1GJ.js">
20
+ <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-BGvzNB1b.js">
21
+ <link rel="modulepreload" crossorigin href="/assets/wrench-DdaRhfzS.js">
22
+ <link rel="modulepreload" crossorigin href="/assets/page-D6M1CmPe.js">
23
+ <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-BkQ5tA8A.css">
24
24
  <link rel="stylesheet" crossorigin href="/assets/AdminLoginScreens-CWMpccrR.css">
25
25
  <link rel="stylesheet" href="/brand-defaults.css">
26
26
  </head>
@@ -5,21 +5,21 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Real Agent</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/public-CKEYyIPn.js"></script>
8
+ <script type="module" crossorigin src="/assets/public-B3y_YU1G.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DSW9vDi2.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-C8wazpnz.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-0PfRrN6i.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-Ckht9hmU.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-BQrMkyGX.js">
13
- <link rel="modulepreload" crossorigin href="/assets/time-entry-format-CCO6N6XZ.js">
14
- <link rel="modulepreload" crossorigin href="/assets/maximize-2-BCQkFb1_.js">
15
- <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-BeNqxmm2.js">
16
- <link rel="modulepreload" crossorigin href="/assets/useCopyFeedback-BTUu3-l8.js">
17
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-DBMCTKlT.js">
18
- <link rel="modulepreload" crossorigin href="/assets/file-text-c6cA4Evd.js">
19
- <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-dTpO5dhL.js">
20
- <link rel="modulepreload" crossorigin href="/assets/wrench-CeNnc7oO.js">
21
- <link rel="modulepreload" crossorigin href="/assets/page-HVtUfub2.js">
22
- <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-DyrH8DA8.css">
13
+ <link rel="modulepreload" crossorigin href="/assets/time-entry-format-BgZqOOqG.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/maximize-2-bTn_Ozpi.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-BP6CpYQD.js">
16
+ <link rel="modulepreload" crossorigin href="/assets/useCopyFeedback-BFOujMl-.js">
17
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-Dtk3jEK5.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/file-text-zch0E1GJ.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-BGvzNB1b.js">
20
+ <link rel="modulepreload" crossorigin href="/assets/wrench-DdaRhfzS.js">
21
+ <link rel="modulepreload" crossorigin href="/assets/page-D6M1CmPe.js">
22
+ <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-BkQ5tA8A.css">
23
23
  <link rel="stylesheet" href="/brand-defaults.css">
24
24
  </head>
25
25
  <body class="public-surface">