@rubytech/create-sitedesk-code 0.1.516 → 0.1.518

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 (193) hide show
  1. package/dist/__tests__/tier-flag.test.js +10 -6
  2. package/dist/index.js +1 -1
  3. package/dist/tier-flag.js +10 -5
  4. package/package.json +1 -1
  5. package/payload/platform/lib/entitlement/dist/index.d.ts +24 -0
  6. package/payload/platform/lib/entitlement/dist/index.d.ts.map +1 -1
  7. package/payload/platform/lib/entitlement/dist/index.js +40 -2
  8. package/payload/platform/lib/entitlement/dist/index.js.map +1 -1
  9. package/payload/platform/plugins/admin/mcp/dist/index.js +5 -9
  10. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  11. package/payload/platform/plugins/admin/skills/admin-user-management/SKILL.md +1 -1
  12. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +205 -2
  13. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +10 -0
  14. package/payload/platform/plugins/docs/references/admin-ui.md +1 -1
  15. package/payload/platform/scripts/generate-entitlement-fixture.mjs +1 -1
  16. package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts.map +1 -1
  17. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +16 -1
  18. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
  19. package/payload/platform/services/claude-session-manager/dist/slice-memory-policy.d.ts.map +1 -1
  20. package/payload/platform/services/claude-session-manager/dist/slice-memory-policy.js +15 -0
  21. package/payload/platform/services/claude-session-manager/dist/slice-memory-policy.js.map +1 -1
  22. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts +12 -1
  23. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts.map +1 -1
  24. package/payload/platform/services/whatsapp-channel/dist/notification.js +10 -2
  25. package/payload/platform/services/whatsapp-channel/dist/notification.js.map +1 -1
  26. package/payload/platform/services/whatsapp-channel/dist/server.d.ts.map +1 -1
  27. package/payload/platform/services/whatsapp-channel/dist/server.js +17 -2
  28. package/payload/platform/services/whatsapp-channel/dist/server.js.map +1 -1
  29. package/payload/server/public/activity.html +4 -4
  30. package/payload/server/public/agents.html +3 -3
  31. package/payload/server/public/assets/{AdminLoginScreens-B5qKb3YK.js → AdminLoginScreens-CDpNkwkf.js} +1 -1
  32. package/payload/server/public/assets/AdminLoginScreens-CDpNkwkf.js.br +0 -0
  33. package/payload/server/public/assets/AdminLoginScreens-CDpNkwkf.js.gz +0 -0
  34. package/payload/server/public/assets/{AdminShell-BgJEq2zJ.js → AdminShell-TSa8KgID.js} +2 -2
  35. package/payload/server/public/assets/AdminShell-TSa8KgID.js.br +0 -0
  36. package/payload/server/public/assets/AdminShell-TSa8KgID.js.gz +0 -0
  37. package/payload/server/public/assets/{activity-DmnVUDYO.js → activity-BE9gv5xL.js} +1 -1
  38. package/payload/server/public/assets/activity-BE9gv5xL.js.br +0 -0
  39. package/payload/server/public/assets/activity-BE9gv5xL.js.gz +0 -0
  40. package/payload/server/public/assets/{admin-Dpge4OG9.js → admin-Cb0BZriv.js} +1 -1
  41. package/payload/server/public/assets/admin-Cb0BZriv.js.br +0 -0
  42. package/payload/server/public/assets/admin-Cb0BZriv.js.gz +0 -0
  43. package/payload/server/public/assets/{agents-Bmq9X7P3.js → agents-B-x0Ai2v.js} +1 -1
  44. package/payload/server/public/assets/agents-B-x0Ai2v.js.br +0 -0
  45. package/payload/server/public/assets/agents-B-x0Ai2v.js.gz +0 -0
  46. package/payload/server/public/assets/{browser-B1G-W80B.js → browser-ZEQUkPfs.js} +1 -1
  47. package/payload/server/public/assets/browser-ZEQUkPfs.js.br +0 -0
  48. package/payload/server/public/assets/browser-ZEQUkPfs.js.gz +0 -0
  49. package/payload/server/public/assets/{calendar-CHgrOFIN.js → calendar-DsRxrW0G.js} +1 -1
  50. package/payload/server/public/assets/calendar-DsRxrW0G.js.br +0 -0
  51. package/payload/server/public/assets/calendar-DsRxrW0G.js.gz +0 -0
  52. package/payload/server/public/assets/chat-BS9B9lDo.js +1 -0
  53. package/payload/server/public/assets/chat-BS9B9lDo.js.br +1 -0
  54. package/payload/server/public/assets/chat-BS9B9lDo.js.gz +0 -0
  55. package/payload/server/public/assets/chevron-left-DLtGuH6K.js +1 -0
  56. package/payload/server/public/assets/chevron-right-CY_trg5L.js +1 -0
  57. package/payload/server/public/assets/chevron-right-CY_trg5L.js.br +0 -0
  58. package/payload/server/public/assets/clock-oM5driJm.js +1 -0
  59. package/payload/server/public/assets/clock-oM5driJm.js.br +0 -0
  60. package/payload/server/public/assets/clock-oM5driJm.js.gz +0 -0
  61. package/payload/server/public/assets/data-Cio6PO0F.js +1 -0
  62. package/payload/server/public/assets/data-Cio6PO0F.js.br +2 -0
  63. package/payload/server/public/assets/data-Cio6PO0F.js.gz +0 -0
  64. package/payload/server/public/assets/{file-text-BVqqaDun.js → file-text-BTV6EdBv.js} +1 -1
  65. package/payload/server/public/assets/file-text-BTV6EdBv.js.br +0 -0
  66. package/payload/server/public/assets/file-text-BTV6EdBv.js.gz +0 -0
  67. package/payload/server/public/assets/{graph-CEcME0lp.js → graph-hD_gPbbL.js} +1 -1
  68. package/payload/server/public/assets/graph-hD_gPbbL.js.br +0 -0
  69. package/payload/server/public/assets/graph-hD_gPbbL.js.gz +0 -0
  70. package/payload/server/public/assets/{graph-labels-Zl32_AOH.js → graph-labels-CY1T19PY.js} +1 -1
  71. package/payload/server/public/assets/graph-labels-CY1T19PY.js.br +0 -0
  72. package/payload/server/public/assets/graph-labels-CY1T19PY.js.gz +0 -0
  73. package/payload/server/public/assets/{maximize-2-rkkMyAhf.js → maximize-2-BFV9VKHO.js} +1 -1
  74. package/payload/server/public/assets/maximize-2-BFV9VKHO.js.br +0 -0
  75. package/payload/server/public/assets/maximize-2-BFV9VKHO.js.gz +0 -0
  76. package/payload/server/public/assets/{operator-DlL023ch.js → operator-Dxze8CwV.js} +1 -1
  77. package/payload/server/public/assets/operator-Dxze8CwV.js.br +0 -0
  78. package/payload/server/public/assets/operator-Dxze8CwV.js.gz +0 -0
  79. package/payload/server/public/assets/{page-k0BhBkA2.js → page-Bi86QF6_.js} +1 -1
  80. package/payload/server/public/assets/page-Bi86QF6_.js.br +0 -0
  81. package/payload/server/public/assets/page-Bi86QF6_.js.gz +0 -0
  82. package/payload/server/public/assets/{page-BAmYYqxp.js → page-BnXly9aN.js} +1 -1
  83. package/payload/server/public/assets/page-BnXly9aN.js.br +0 -0
  84. package/payload/server/public/assets/page-BnXly9aN.js.gz +0 -0
  85. package/payload/server/public/assets/{public-Cqgfmo1D.js → public-D6Tnj5LU.js} +1 -1
  86. package/payload/server/public/assets/public-D6Tnj5LU.js.br +0 -0
  87. package/payload/server/public/assets/public-D6Tnj5LU.js.gz +0 -0
  88. package/payload/server/public/assets/{rotate-ccw-O3RmqoTy.js → rotate-ccw-C-RfQUza.js} +1 -1
  89. package/payload/server/public/assets/rotate-ccw-C-RfQUza.js.br +0 -0
  90. package/payload/server/public/assets/rotate-ccw-C-RfQUza.js.gz +0 -0
  91. package/payload/server/public/assets/{routines-DMYObMUy.js → routines-NIMElUzV.js} +1 -1
  92. package/payload/server/public/assets/routines-NIMElUzV.js.br +0 -0
  93. package/payload/server/public/assets/routines-NIMElUzV.js.gz +0 -0
  94. package/payload/server/public/assets/{skills-DON1BKu5.js → skills-N0ZlHosx.js} +1 -1
  95. package/payload/server/public/assets/skills-N0ZlHosx.js.br +0 -0
  96. package/payload/server/public/assets/skills-N0ZlHosx.js.gz +0 -0
  97. package/payload/server/public/assets/{tasks-C2PhUSrf.js → tasks-BsB_0duv.js} +1 -1
  98. package/payload/server/public/assets/tasks-BsB_0duv.js.br +0 -0
  99. package/payload/server/public/assets/tasks-BsB_0duv.js.gz +0 -0
  100. package/payload/server/public/assets/{time-entry-format-4zgmuQI0.js → time-entry-format-jQxlRPoI.js} +1 -1
  101. package/payload/server/public/assets/time-entry-format-jQxlRPoI.js.br +0 -0
  102. package/payload/server/public/assets/time-entry-format-jQxlRPoI.js.gz +0 -0
  103. package/payload/server/public/assets/{triangle-alert-By5D7wuI.js → triangle-alert-wUS4rpzv.js} +1 -1
  104. package/payload/server/public/assets/triangle-alert-wUS4rpzv.js.br +0 -0
  105. package/payload/server/public/assets/triangle-alert-wUS4rpzv.js.gz +0 -0
  106. package/payload/server/public/assets/{useCopyFeedback-Dx0vtm9s.js → useCopyFeedback-BRix_wIl.js} +1 -1
  107. package/payload/server/public/assets/useCopyFeedback-BRix_wIl.js.br +0 -0
  108. package/payload/server/public/assets/useCopyFeedback-BRix_wIl.js.gz +0 -0
  109. package/payload/server/public/assets/{useSubAccountSwitcher-CRWoQXuU.js → useSubAccountSwitcher-DWMWxvYo.js} +6 -1
  110. package/payload/server/public/assets/useSubAccountSwitcher-DWMWxvYo.js.br +0 -0
  111. package/payload/server/public/assets/useSubAccountSwitcher-DWMWxvYo.js.gz +0 -0
  112. package/payload/server/public/assets/{useVoiceRecorder-BgwOCCwj.js → useVoiceRecorder-1TAfCP2k.js} +1 -1
  113. package/payload/server/public/assets/useVoiceRecorder-1TAfCP2k.js.br +0 -0
  114. package/payload/server/public/assets/useVoiceRecorder-1TAfCP2k.js.gz +0 -0
  115. package/payload/server/public/assets/{wrench-CHfMwLza.js → wrench-sDivAjhf.js} +1 -1
  116. package/payload/server/public/assets/wrench-sDivAjhf.js.br +0 -0
  117. package/payload/server/public/assets/wrench-sDivAjhf.js.gz +0 -0
  118. package/payload/server/public/browser.html +3 -3
  119. package/payload/server/public/calendar.html +6 -6
  120. package/payload/server/public/chat.html +12 -12
  121. package/payload/server/public/data.html +10 -10
  122. package/payload/server/public/graph.html +8 -8
  123. package/payload/server/public/index.html +13 -13
  124. package/payload/server/public/operator.html +13 -13
  125. package/payload/server/public/public.html +12 -12
  126. package/payload/server/public/routines.html +5 -5
  127. package/payload/server/public/skills.html +4 -4
  128. package/payload/server/public/tasks.html +5 -5
  129. package/payload/server/server.js +36 -9
  130. package/payload/platform/plugins/email/Archive.zip +0 -0
  131. package/payload/server/public/assets/AdminLoginScreens-B5qKb3YK.js.br +0 -0
  132. package/payload/server/public/assets/AdminLoginScreens-B5qKb3YK.js.gz +0 -0
  133. package/payload/server/public/assets/AdminShell-BgJEq2zJ.js.br +0 -0
  134. package/payload/server/public/assets/AdminShell-BgJEq2zJ.js.gz +0 -0
  135. package/payload/server/public/assets/activity-DmnVUDYO.js.br +0 -0
  136. package/payload/server/public/assets/activity-DmnVUDYO.js.gz +0 -0
  137. package/payload/server/public/assets/admin-Dpge4OG9.js.br +0 -0
  138. package/payload/server/public/assets/admin-Dpge4OG9.js.gz +0 -0
  139. package/payload/server/public/assets/agents-Bmq9X7P3.js.br +0 -0
  140. package/payload/server/public/assets/agents-Bmq9X7P3.js.gz +0 -0
  141. package/payload/server/public/assets/browser-B1G-W80B.js.br +0 -0
  142. package/payload/server/public/assets/browser-B1G-W80B.js.gz +0 -0
  143. package/payload/server/public/assets/calendar-CHgrOFIN.js.br +0 -0
  144. package/payload/server/public/assets/calendar-CHgrOFIN.js.gz +0 -0
  145. package/payload/server/public/assets/chat-CIwmmtwP.js +0 -1
  146. package/payload/server/public/assets/chat-CIwmmtwP.js.br +0 -0
  147. package/payload/server/public/assets/chat-CIwmmtwP.js.gz +0 -0
  148. package/payload/server/public/assets/chevron-left-EQjfaQ-n.js +0 -1
  149. package/payload/server/public/assets/chevron-left-EQjfaQ-n.js.br +0 -0
  150. package/payload/server/public/assets/chevron-right-Ct8jZUGP.js +0 -1
  151. package/payload/server/public/assets/chevron-right-Ct8jZUGP.js.br +0 -0
  152. package/payload/server/public/assets/clock-Cxz5ybck.js +0 -1
  153. package/payload/server/public/assets/clock-Cxz5ybck.js.br +0 -0
  154. package/payload/server/public/assets/clock-Cxz5ybck.js.gz +0 -0
  155. package/payload/server/public/assets/data-BQVXKVsJ.js +0 -1
  156. package/payload/server/public/assets/data-BQVXKVsJ.js.br +0 -1
  157. package/payload/server/public/assets/data-BQVXKVsJ.js.gz +0 -0
  158. package/payload/server/public/assets/file-text-BVqqaDun.js.br +0 -0
  159. package/payload/server/public/assets/file-text-BVqqaDun.js.gz +0 -0
  160. package/payload/server/public/assets/graph-CEcME0lp.js.br +0 -0
  161. package/payload/server/public/assets/graph-CEcME0lp.js.gz +0 -0
  162. package/payload/server/public/assets/graph-labels-Zl32_AOH.js.br +0 -0
  163. package/payload/server/public/assets/graph-labels-Zl32_AOH.js.gz +0 -0
  164. package/payload/server/public/assets/maximize-2-rkkMyAhf.js.br +0 -0
  165. package/payload/server/public/assets/maximize-2-rkkMyAhf.js.gz +0 -0
  166. package/payload/server/public/assets/operator-DlL023ch.js.br +0 -0
  167. package/payload/server/public/assets/operator-DlL023ch.js.gz +0 -0
  168. package/payload/server/public/assets/page-BAmYYqxp.js.br +0 -0
  169. package/payload/server/public/assets/page-BAmYYqxp.js.gz +0 -0
  170. package/payload/server/public/assets/page-k0BhBkA2.js.br +0 -0
  171. package/payload/server/public/assets/page-k0BhBkA2.js.gz +0 -0
  172. package/payload/server/public/assets/public-Cqgfmo1D.js.br +0 -0
  173. package/payload/server/public/assets/public-Cqgfmo1D.js.gz +0 -0
  174. package/payload/server/public/assets/rotate-ccw-O3RmqoTy.js.br +0 -0
  175. package/payload/server/public/assets/rotate-ccw-O3RmqoTy.js.gz +0 -0
  176. package/payload/server/public/assets/routines-DMYObMUy.js.br +0 -0
  177. package/payload/server/public/assets/routines-DMYObMUy.js.gz +0 -0
  178. package/payload/server/public/assets/skills-DON1BKu5.js.br +0 -0
  179. package/payload/server/public/assets/skills-DON1BKu5.js.gz +0 -0
  180. package/payload/server/public/assets/tasks-C2PhUSrf.js.br +0 -0
  181. package/payload/server/public/assets/tasks-C2PhUSrf.js.gz +0 -0
  182. package/payload/server/public/assets/time-entry-format-4zgmuQI0.js.br +0 -0
  183. package/payload/server/public/assets/time-entry-format-4zgmuQI0.js.gz +0 -0
  184. package/payload/server/public/assets/triangle-alert-By5D7wuI.js.br +0 -0
  185. package/payload/server/public/assets/triangle-alert-By5D7wuI.js.gz +0 -0
  186. package/payload/server/public/assets/useCopyFeedback-Dx0vtm9s.js.br +0 -0
  187. package/payload/server/public/assets/useCopyFeedback-Dx0vtm9s.js.gz +0 -0
  188. package/payload/server/public/assets/useSubAccountSwitcher-CRWoQXuU.js.br +0 -0
  189. package/payload/server/public/assets/useSubAccountSwitcher-CRWoQXuU.js.gz +0 -0
  190. package/payload/server/public/assets/useVoiceRecorder-BgwOCCwj.js.br +0 -0
  191. package/payload/server/public/assets/useVoiceRecorder-BgwOCCwj.js.gz +0 -0
  192. package/payload/server/public/assets/wrench-CHfMwLza.js.br +0 -0
  193. package/payload/server/public/assets/wrench-CHfMwLza.js.gz +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-CRWoQXuU.js";import{n as s,t as c}from"./maximize-2-rkkMyAhf.js";import{n as l,t as u}from"./time-entry-format-4zgmuQI0.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-DWMWxvYo.js";import{n as s,t as c}from"./maximize-2-BFV9VKHO.js";import{n as l,t as u}from"./time-entry-format-jQxlRPoI.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-CRWoQXuU.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-DWMWxvYo.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};
@@ -5,10 +5,10 @@
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-B1G-W80B.js"></script>
8
+ <script type="module" crossorigin src="/assets/browser-ZEQUkPfs.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-CRWoQXuU.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-BgJEq2zJ.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DWMWxvYo.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-TSa8KgID.js">
12
12
  <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-UQQDcj0B.css">
13
13
  <link rel="stylesheet" href="/brand-defaults.css">
14
14
  </head>
@@ -5,13 +5,13 @@
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-CHgrOFIN.js"></script>
8
+ <script type="module" crossorigin src="/assets/calendar-DsRxrW0G.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-CRWoQXuU.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-BgJEq2zJ.js">
12
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-EQjfaQ-n.js">
13
- <link rel="modulepreload" crossorigin href="/assets/chevron-right-Ct8jZUGP.js">
14
- <link rel="modulepreload" crossorigin href="/assets/clock-Cxz5ybck.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DWMWxvYo.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-TSa8KgID.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-DLtGuH6K.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/chevron-right-CY_trg5L.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/clock-oM5driJm.js">
15
15
  <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-UQQDcj0B.css">
16
16
  <link rel="stylesheet" href="/brand-defaults.css">
17
17
  </head>
@@ -5,20 +5,20 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Chat — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/chat-CIwmmtwP.js"></script>
8
+ <script type="module" crossorigin src="/assets/chat-BS9B9lDo.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-CRWoQXuU.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-BgJEq2zJ.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DWMWxvYo.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-TSa8KgID.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-BQrMkyGX.js">
13
- <link rel="modulepreload" crossorigin href="/assets/time-entry-format-4zgmuQI0.js">
14
- <link rel="modulepreload" crossorigin href="/assets/maximize-2-rkkMyAhf.js">
15
- <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-BgwOCCwj.js">
16
- <link rel="modulepreload" crossorigin href="/assets/useCopyFeedback-Dx0vtm9s.js">
17
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-EQjfaQ-n.js">
18
- <link rel="modulepreload" crossorigin href="/assets/file-text-BVqqaDun.js">
19
- <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-O3RmqoTy.js">
20
- <link rel="modulepreload" crossorigin href="/assets/wrench-CHfMwLza.js">
21
- <link rel="modulepreload" crossorigin href="/assets/page-k0BhBkA2.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/time-entry-format-jQxlRPoI.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/maximize-2-BFV9VKHO.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-1TAfCP2k.js">
16
+ <link rel="modulepreload" crossorigin href="/assets/useCopyFeedback-BRix_wIl.js">
17
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-DLtGuH6K.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/file-text-BTV6EdBv.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-C-RfQUza.js">
20
+ <link rel="modulepreload" crossorigin href="/assets/wrench-sDivAjhf.js">
21
+ <link rel="modulepreload" crossorigin href="/assets/page-Bi86QF6_.js">
22
22
  <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-UQQDcj0B.css">
23
23
  <link rel="stylesheet" href="/brand-defaults.css">
24
24
  </head>
@@ -5,18 +5,18 @@
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-BQVXKVsJ.js"></script>
8
+ <script type="module" crossorigin src="/assets/data-Cio6PO0F.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-CRWoQXuU.js">
11
- <link rel="modulepreload" crossorigin href="/assets/graph-labels-Zl32_AOH.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DWMWxvYo.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/graph-labels-CY1T19PY.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-BQrMkyGX.js">
13
- <link rel="modulepreload" crossorigin href="/assets/time-entry-format-4zgmuQI0.js">
14
- <link rel="modulepreload" crossorigin href="/assets/maximize-2-rkkMyAhf.js">
15
- <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-BgwOCCwj.js">
16
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-EQjfaQ-n.js">
17
- <link rel="modulepreload" crossorigin href="/assets/file-text-BVqqaDun.js">
18
- <link rel="modulepreload" crossorigin href="/assets/triangle-alert-By5D7wuI.js">
19
- <link rel="modulepreload" crossorigin href="/assets/page-BAmYYqxp.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/time-entry-format-jQxlRPoI.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/maximize-2-BFV9VKHO.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-1TAfCP2k.js">
16
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-DLtGuH6K.js">
17
+ <link rel="modulepreload" crossorigin href="/assets/file-text-BTV6EdBv.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/triangle-alert-wUS4rpzv.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/page-BnXly9aN.js">
20
20
  <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-UQQDcj0B.css">
21
21
  <link rel="stylesheet" href="/brand-defaults.css">
22
22
  </head>
@@ -5,15 +5,15 @@
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-CEcME0lp.js"></script>
8
+ <script type="module" crossorigin src="/assets/graph-hD_gPbbL.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-CRWoQXuU.js">
11
- <link rel="modulepreload" crossorigin href="/assets/graph-labels-Zl32_AOH.js">
12
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-BgJEq2zJ.js">
13
- <link rel="modulepreload" crossorigin href="/assets/useCopyFeedback-Dx0vtm9s.js">
14
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-EQjfaQ-n.js">
15
- <link rel="modulepreload" crossorigin href="/assets/maximize-2-rkkMyAhf.js">
16
- <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-O3RmqoTy.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DWMWxvYo.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/graph-labels-CY1T19PY.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-TSa8KgID.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/useCopyFeedback-BRix_wIl.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-DLtGuH6K.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/maximize-2-BFV9VKHO.js">
16
+ <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-C-RfQUza.js">
17
17
  <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-UQQDcj0B.css">
18
18
  <link rel="stylesheet" href="/brand-defaults.css">
19
19
  </head>
@@ -5,21 +5,21 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>SiteDesk</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/admin-Dpge4OG9.js"></script>
8
+ <script type="module" crossorigin src="/assets/admin-Cb0BZriv.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-CRWoQXuU.js">
11
- <link rel="modulepreload" crossorigin href="/assets/graph-labels-Zl32_AOH.js">
12
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-BgJEq2zJ.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DWMWxvYo.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/graph-labels-CY1T19PY.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-TSa8KgID.js">
13
13
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-BQrMkyGX.js">
14
- <link rel="modulepreload" crossorigin href="/assets/time-entry-format-4zgmuQI0.js">
15
- <link rel="modulepreload" crossorigin href="/assets/maximize-2-rkkMyAhf.js">
16
- <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-BgwOCCwj.js">
17
- <link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-B5qKb3YK.js">
18
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-EQjfaQ-n.js">
19
- <link rel="modulepreload" crossorigin href="/assets/file-text-BVqqaDun.js">
20
- <link rel="modulepreload" crossorigin href="/assets/triangle-alert-By5D7wuI.js">
21
- <link rel="modulepreload" crossorigin href="/assets/page-BAmYYqxp.js">
22
- <link rel="modulepreload" crossorigin href="/assets/chevron-right-Ct8jZUGP.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/time-entry-format-jQxlRPoI.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/maximize-2-BFV9VKHO.js">
16
+ <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-1TAfCP2k.js">
17
+ <link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-CDpNkwkf.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-DLtGuH6K.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/file-text-BTV6EdBv.js">
20
+ <link rel="modulepreload" crossorigin href="/assets/triangle-alert-wUS4rpzv.js">
21
+ <link rel="modulepreload" crossorigin href="/assets/page-BnXly9aN.js">
22
+ <link rel="modulepreload" crossorigin href="/assets/chevron-right-CY_trg5L.js">
23
23
  <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-UQQDcj0B.css">
24
24
  <link rel="stylesheet" crossorigin href="/assets/AdminLoginScreens-CWMpccrR.css">
25
25
  <link rel="stylesheet" href="/brand-defaults.css">
@@ -5,21 +5,21 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Operator — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/operator-DlL023ch.js"></script>
8
+ <script type="module" crossorigin src="/assets/operator-Dxze8CwV.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-CRWoQXuU.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-BgJEq2zJ.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DWMWxvYo.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-TSa8KgID.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-BQrMkyGX.js">
13
- <link rel="modulepreload" crossorigin href="/assets/time-entry-format-4zgmuQI0.js">
14
- <link rel="modulepreload" crossorigin href="/assets/maximize-2-rkkMyAhf.js">
15
- <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-BgwOCCwj.js">
16
- <link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-B5qKb3YK.js">
17
- <link rel="modulepreload" crossorigin href="/assets/useCopyFeedback-Dx0vtm9s.js">
18
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-EQjfaQ-n.js">
19
- <link rel="modulepreload" crossorigin href="/assets/file-text-BVqqaDun.js">
20
- <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-O3RmqoTy.js">
21
- <link rel="modulepreload" crossorigin href="/assets/wrench-CHfMwLza.js">
22
- <link rel="modulepreload" crossorigin href="/assets/page-k0BhBkA2.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/time-entry-format-jQxlRPoI.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/maximize-2-BFV9VKHO.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-1TAfCP2k.js">
16
+ <link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-CDpNkwkf.js">
17
+ <link rel="modulepreload" crossorigin href="/assets/useCopyFeedback-BRix_wIl.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-DLtGuH6K.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/file-text-BTV6EdBv.js">
20
+ <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-C-RfQUza.js">
21
+ <link rel="modulepreload" crossorigin href="/assets/wrench-sDivAjhf.js">
22
+ <link rel="modulepreload" crossorigin href="/assets/page-Bi86QF6_.js">
23
23
  <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-UQQDcj0B.css">
24
24
  <link rel="stylesheet" crossorigin href="/assets/AdminLoginScreens-CWMpccrR.css">
25
25
  <link rel="stylesheet" href="/brand-defaults.css">
@@ -5,20 +5,20 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>SiteDesk</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/public-Cqgfmo1D.js"></script>
8
+ <script type="module" crossorigin src="/assets/public-D6Tnj5LU.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-CRWoQXuU.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-BgJEq2zJ.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DWMWxvYo.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-TSa8KgID.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-BQrMkyGX.js">
13
- <link rel="modulepreload" crossorigin href="/assets/time-entry-format-4zgmuQI0.js">
14
- <link rel="modulepreload" crossorigin href="/assets/maximize-2-rkkMyAhf.js">
15
- <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-BgwOCCwj.js">
16
- <link rel="modulepreload" crossorigin href="/assets/useCopyFeedback-Dx0vtm9s.js">
17
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-EQjfaQ-n.js">
18
- <link rel="modulepreload" crossorigin href="/assets/file-text-BVqqaDun.js">
19
- <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-O3RmqoTy.js">
20
- <link rel="modulepreload" crossorigin href="/assets/wrench-CHfMwLza.js">
21
- <link rel="modulepreload" crossorigin href="/assets/page-k0BhBkA2.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/time-entry-format-jQxlRPoI.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/maximize-2-BFV9VKHO.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/useVoiceRecorder-1TAfCP2k.js">
16
+ <link rel="modulepreload" crossorigin href="/assets/useCopyFeedback-BRix_wIl.js">
17
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-DLtGuH6K.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/file-text-BTV6EdBv.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-C-RfQUza.js">
20
+ <link rel="modulepreload" crossorigin href="/assets/wrench-sDivAjhf.js">
21
+ <link rel="modulepreload" crossorigin href="/assets/page-Bi86QF6_.js">
22
22
  <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-UQQDcj0B.css">
23
23
  <link rel="stylesheet" href="/brand-defaults.css">
24
24
  </head>
@@ -5,12 +5,12 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Routines — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/routines-DMYObMUy.js"></script>
8
+ <script type="module" crossorigin src="/assets/routines-NIMElUzV.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-CRWoQXuU.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-BgJEq2zJ.js">
12
- <link rel="modulepreload" crossorigin href="/assets/clock-Cxz5ybck.js">
13
- <link rel="modulepreload" crossorigin href="/assets/wrench-CHfMwLza.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DWMWxvYo.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-TSa8KgID.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/clock-oM5driJm.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/wrench-sDivAjhf.js">
14
14
  <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-UQQDcj0B.css">
15
15
  <link rel="stylesheet" href="/brand-defaults.css">
16
16
  </head>
@@ -5,11 +5,11 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Skills — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/skills-DON1BKu5.js"></script>
8
+ <script type="module" crossorigin src="/assets/skills-N0ZlHosx.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-CRWoQXuU.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-BgJEq2zJ.js">
12
- <link rel="modulepreload" crossorigin href="/assets/file-text-BVqqaDun.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DWMWxvYo.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-TSa8KgID.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/file-text-BTV6EdBv.js">
13
13
  <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-UQQDcj0B.css">
14
14
  <link rel="stylesheet" href="/brand-defaults.css">
15
15
  </head>
@@ -5,12 +5,12 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Tasks — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/tasks-C2PhUSrf.js"></script>
8
+ <script type="module" crossorigin src="/assets/tasks-BsB_0duv.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CltuBf4Z.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-CRWoQXuU.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-BgJEq2zJ.js">
12
- <link rel="modulepreload" crossorigin href="/assets/time-entry-format-4zgmuQI0.js">
13
- <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-O3RmqoTy.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-DWMWxvYo.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-TSa8KgID.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/time-entry-format-jQxlRPoI.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-C-RfQUza.js">
14
14
  <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-UQQDcj0B.css">
15
15
  <link rel="stylesheet" href="/brand-defaults.css">
16
16
  </head>
@@ -13051,6 +13051,16 @@ function openStream(connId, channel, startedAt) {
13051
13051
  return reg;
13052
13052
  }
13053
13053
 
13054
+ // app/lib/whatsapp/connection-key-from-message-id.ts
13055
+ var LIVE_NAMESPACE = "whatsapp-live";
13056
+ function connectionKeyFromMessageId(messageId) {
13057
+ if (!messageId) return null;
13058
+ const parts = messageId.split(":");
13059
+ if (parts.length < 4) return null;
13060
+ if (parts[0] !== LIVE_NAMESPACE) return null;
13061
+ return parts[1] || null;
13062
+ }
13063
+
13054
13064
  // app/admin-types.ts
13055
13065
  var ACCEPT_MIME = "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";
13056
13066
  var SUPPORTED_MIME_SET = new Set(ACCEPT_MIME.split(",").filter((t) => !t.startsWith(".")));
@@ -14071,14 +14081,20 @@ app5.post("/reply", requireAdminSession, async (c) => {
14071
14081
  }
14072
14082
  resolvedRefs.push({ absolute, mime });
14073
14083
  }
14074
- const res = resolveSocket(accountId);
14084
+ const connKey = connectionKeyFromMessageId(convo[convo.length - 1]?.messageId);
14085
+ if (!connKey) {
14086
+ console.log(`${MANUAL_TAG} op=socket sendId=${sendId} storeAccount=${accountId} connKey=none result=unresolvable`);
14087
+ exit("error");
14088
+ return c.json({ error: `No WhatsApp connection can be resolved for this conversation: its stored messages name no connection. This is an account-keying mismatch, not a dropped connection.` }, 503);
14089
+ }
14090
+ const res = resolveSocket(connKey);
14075
14091
  if (!res.ok) {
14076
- console.log(`${MANUAL_TAG} op=socket sendId=${sendId} accountId=${accountId} result=${res.reason} presentKeys=${res.presentKeys.join(",") || "none"}`);
14092
+ console.log(`${MANUAL_TAG} op=socket sendId=${sendId} storeAccount=${accountId} connKey=${connKey} result=${res.reason} presentKeys=${res.presentKeys.join(",") || "none"}`);
14077
14093
  exit("error");
14078
- if (res.reason === "key-miss") return c.json({ error: `No WhatsApp socket is registered for account "${accountId}" (present: ${res.presentKeys.join(", ") || "none"}). This is an account-keying mismatch, not a dropped connection.` }, 503);
14079
- return c.json({ error: `WhatsApp account "${accountId}" is registered but its socket is disconnected.` }, 503);
14094
+ if (res.reason === "key-miss") return c.json({ error: `No WhatsApp socket is registered for connection "${connKey}" (present: ${res.presentKeys.join(", ") || "none"}). This is an account-keying mismatch, not a dropped connection.` }, 503);
14095
+ return c.json({ error: `WhatsApp connection "${connKey}" is registered but its socket is disconnected.` }, 503);
14080
14096
  }
14081
- console.log(`${MANUAL_TAG} op=socket sendId=${sendId} accountId=${accountId} result=ok socketAccountId=${res.accountId}`);
14097
+ console.log(`${MANUAL_TAG} op=socket sendId=${sendId} storeAccount=${accountId} connKey=${connKey} result=ok socketAccountId=${res.accountId}`);
14082
14098
  const record = (waMessageId, body, attachmentId) => {
14083
14099
  const nowIso = (/* @__PURE__ */ new Date()).toISOString();
14084
14100
  const rec = {
@@ -29633,8 +29649,19 @@ function createWaChannelRoutes(deps) {
29633
29649
  }
29634
29650
  const interactive = body?.interactive === true;
29635
29651
  const finalText = typeof body?.finalText === "string" ? body.finalText : "";
29652
+ const num = (v) => typeof v === "number" && Number.isFinite(v) ? v : -1;
29653
+ const finalBytes = num(body?.finalBytes);
29654
+ const queueDepth = num(body?.queueDepth);
29655
+ const pendingTurns = num(body?.pendingTurns);
29636
29656
  const sid = sessionId.slice(0, 8);
29637
29657
  const deliver = interactive && !replied && finalText.trim().length > 0;
29658
+ const decision = `sessionId=${sid} replied=${replied ? "yes" : "no"} interactive=${interactive ? "yes" : "no"} finalBytes=${finalBytes} queueDepth=${queueDepth} pendingTurns=${pendingTurns}`;
29659
+ if (!replied && finalBytes > 0 && !deliver) {
29660
+ const op = interactive ? "turn-answer-dropped" : "turn-answer-withheld";
29661
+ console.error(
29662
+ `[whatsapp-native] op=${op} sessionId=${sid} interactive=${interactive ? "yes" : "no"} finalBytes=${finalBytes} queueDepth=${queueDepth}`
29663
+ );
29664
+ }
29638
29665
  if (deliver) {
29639
29666
  const bytes = Buffer.byteLength(finalText, "utf8");
29640
29667
  try {
@@ -29646,14 +29673,14 @@ function createWaChannelRoutes(deps) {
29646
29673
  );
29647
29674
  return c.json({ ok: true, delivered: "undelivered" });
29648
29675
  }
29649
- console.error(`[whatsapp-native] op=turn-end sessionId=${sid} replied=${replied ? "yes" : "no"} delivered=fallback bytes=${bytes}`);
29676
+ console.error(`[whatsapp-native] op=turn-end ${decision} delivered=fallback bytes=${bytes}`);
29650
29677
  return c.json({ ok: true, delivered: "fallback" });
29651
29678
  }
29652
29679
  if (replied) {
29653
- console.error(`[whatsapp-native] op=turn-end sessionId=${sid} replied=yes delivered=reply`);
29680
+ console.error(`[whatsapp-native] op=turn-end ${decision} delivered=reply`);
29654
29681
  return c.json({ ok: true, delivered: "reply" });
29655
29682
  }
29656
- console.error(`[whatsapp-native] op=turn-end sessionId=${sid} replied=no delivered=none`);
29683
+ console.error(`[whatsapp-native] op=turn-end ${decision} delivered=none`);
29657
29684
  return c.json({ ok: true, delivered: "none" });
29658
29685
  });
29659
29686
  return app70;
@@ -31990,7 +32017,7 @@ function memoKey(mtimeMs, account) {
31990
32017
  const bucket = Math.floor(Date.now() / 6e4);
31991
32018
  return `${mtimeMs}:${bucket}:${account.accountId}:${account.customerEmail ?? ""}`;
31992
32019
  }
31993
- var VALID_TIERS = /* @__PURE__ */ new Set(["solo", "family", "pro"]);
32020
+ var VALID_TIERS = /* @__PURE__ */ new Set(["solo", "family", "pro", "max"]);
31994
32021
  function resolveEntitlement(brand, account) {
31995
32022
  if (brand.commercialMode !== true) {
31996
32023
  return logResolved(implicitTrust(account), null);