@rubytech/create-maxy-code 0.1.187 → 0.1.188

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 (149) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/lib/graph-mcp/dist/index.js +4 -3
  3. package/payload/platform/lib/graph-mcp/dist/index.js.map +1 -1
  4. package/payload/platform/lib/graph-mcp/src/index.ts +4 -3
  5. package/payload/platform/package.json +1 -0
  6. package/payload/platform/plugins/.claude-plugin/marketplace.json +5 -0
  7. package/payload/platform/plugins/admin/PLUGIN.md +1 -0
  8. package/payload/platform/plugins/admin/hooks/lib/maxy-mcp-plugins.txt +16 -0
  9. package/payload/platform/plugins/admin/hooks/mcp-tool-missing.sh +94 -0
  10. package/payload/platform/plugins/admin/hooks/turn-completed-graph-write.sh +7 -0
  11. package/payload/platform/plugins/admin/skills/publish-site/SKILL.md +3 -3
  12. package/payload/platform/plugins/admin/skills/stream-log-review/references/analysis-patterns.md +11 -7
  13. package/payload/platform/plugins/docs/references/admin-ui.md +3 -4
  14. package/payload/platform/plugins/docs/references/deployment.md +1 -1
  15. package/payload/platform/plugins/docs/references/internals.md +6 -4
  16. package/payload/platform/plugins/docs/references/plugins-guide.md +2 -2
  17. package/payload/platform/plugins/graph/.claude-plugin/plugin.json +8 -0
  18. package/payload/platform/plugins/graph/PLUGIN.md +37 -0
  19. package/payload/platform/plugins/memory/PLUGIN.md +2 -0
  20. package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.d.ts +1 -1
  21. package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.js +1 -1
  22. package/payload/platform/plugins/memory/references/graph-primitives.md +36 -27
  23. package/payload/platform/plugins/obsidian-import/PLUGIN.md +1 -1
  24. package/payload/platform/scripts/check-canonical-tool-names.mjs +110 -0
  25. package/payload/platform/scripts/generate-canonical-tool-names.mjs +63 -0
  26. package/payload/platform/scripts/lib/canonical-tool-names.mjs +88 -0
  27. package/payload/platform/scripts/setup-account.sh +6 -0
  28. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.d.ts +7 -0
  29. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.d.ts.map +1 -0
  30. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts +5 -0
  31. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -0
  32. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +204 -0
  33. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -0
  34. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.js +23 -0
  35. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.js.map +1 -0
  36. package/payload/platform/services/claude-session-manager/dist/index.js +30 -6
  37. package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
  38. package/payload/platform/services/claude-session-manager/dist/mcp-tools-probe.d.ts +6 -4
  39. package/payload/platform/services/claude-session-manager/dist/mcp-tools-probe.d.ts.map +1 -1
  40. package/payload/platform/services/claude-session-manager/dist/mcp-tools-probe.js.map +1 -1
  41. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +1 -0
  42. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  43. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +50 -26
  44. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  45. package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts +40 -0
  46. package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts.map +1 -0
  47. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +200 -0
  48. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -0
  49. package/payload/platform/services/claude-session-manager/dist/specialist-drift.d.ts.map +1 -1
  50. package/payload/platform/services/claude-session-manager/dist/specialist-drift.js +50 -34
  51. package/payload/platform/services/claude-session-manager/dist/specialist-drift.js.map +1 -1
  52. package/payload/platform/services/claude-session-manager/dist/tool-surface.d.ts.map +1 -1
  53. package/payload/platform/services/claude-session-manager/dist/tool-surface.js +23 -13
  54. package/payload/platform/services/claude-session-manager/dist/tool-surface.js.map +1 -1
  55. package/payload/platform/templates/specialists/agents/content-producer.md +3 -3
  56. package/payload/platform/templates/specialists/agents/librarian.md +2 -2
  57. package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -1
  58. package/payload/platform/templates/specialists/agents/project-manager.md +1 -1
  59. package/payload/platform/templates/specialists/agents/research-assistant.md +1 -1
  60. package/payload/server/{chunk-EFJ2EXZK.js → chunk-WWD4TCJJ.js} +0 -16
  61. package/payload/server/maxy-edge.js +1 -1
  62. package/payload/server/public/assets/Checkbox-ChWmQ7if.js +1 -0
  63. package/payload/server/public/assets/admin-BLi_fAKQ.js +216 -0
  64. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-DZoOzmjE.js → architectureDiagram-Q4EWVU46-DSqzB21V.js} +1 -1
  65. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-DG3yufCR.js → blockDiagram-DXYQGD6D--otTO_UB.js} +1 -1
  66. package/payload/server/public/assets/brand-Djtb-tLQ.js +9 -0
  67. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-BBx5wXuZ.js → c4Diagram-AHTNJAMY-CBszqa9W.js} +1 -1
  68. package/payload/server/public/assets/channel-C-SJYogg.js +1 -0
  69. package/payload/server/public/assets/{chunk-336JU56O-DwP7g5ns.js → chunk-336JU56O-ClAJP2KY.js} +2 -2
  70. package/payload/server/public/assets/{chunk-426QAEUC-DXzGdc22.js → chunk-426QAEUC-CgLucS4H.js} +1 -1
  71. package/payload/server/public/assets/{chunk-4TB4RGXK-1LDRjk0E.js → chunk-4TB4RGXK-BvOX6mSk.js} +1 -1
  72. package/payload/server/public/assets/{chunk-5FUZZQ4R-BHjWhwhn.js → chunk-5FUZZQ4R-uyN4XtrW.js} +1 -1
  73. package/payload/server/public/assets/{chunk-5PVQY5BW-CwPHRVN8.js → chunk-5PVQY5BW-B6xHEzh2.js} +1 -1
  74. package/payload/server/public/assets/{chunk-EDXVE4YY-7443hrYZ.js → chunk-EDXVE4YY-9objw8tW.js} +1 -1
  75. package/payload/server/public/assets/{chunk-ENJZ2VHE-BTnmmnmX.js → chunk-ENJZ2VHE-pQpbHIJL.js} +1 -1
  76. package/payload/server/public/assets/{chunk-ICPOFSXX-CPnMJplL.js → chunk-ICPOFSXX-qS23jC3x.js} +1 -1
  77. package/payload/server/public/assets/{chunk-OYMX7WX6-DCQ5Q4RS.js → chunk-OYMX7WX6-C9YUwGqp.js} +1 -1
  78. package/payload/server/public/assets/{chunk-U2HBQHQK-BmfZG8e4.js → chunk-U2HBQHQK-D_pYedRJ.js} +1 -1
  79. package/payload/server/public/assets/{chunk-X2U36JSP-Da2yJL2u.js → chunk-X2U36JSP-nxf6GHD-.js} +1 -1
  80. package/payload/server/public/assets/{chunk-YZCP3GAM-BdUmMUJ6.js → chunk-YZCP3GAM-DqKT124V.js} +1 -1
  81. package/payload/server/public/assets/{chunk-ZZ45TVLE-abkGirrZ.js → chunk-ZZ45TVLE-CLwvpbvu.js} +1 -1
  82. package/payload/server/public/assets/classDiagram-6PBFFD2Q-OBkxl5to.js +1 -0
  83. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-CkTyus-1.js +1 -0
  84. package/payload/server/public/assets/clone-VufdPzJ-.js +1 -0
  85. package/payload/server/public/assets/{dagre-BVVuAEsU.js → dagre-COCXt23n.js} +1 -1
  86. package/payload/server/public/assets/{dagre-KV5264BT-VG2kNj19.js → dagre-KV5264BT-DmuVMrt4.js} +1 -1
  87. package/payload/server/public/assets/data-TlJbMIfa.js +1 -0
  88. package/payload/server/public/assets/{diagram-5BDNPKRD-DRiVy69K.js → diagram-5BDNPKRD-DOiLSgj_.js} +1 -1
  89. package/payload/server/public/assets/{diagram-G4DWMVQ6-DtpiRTYX.js → diagram-G4DWMVQ6-quY6PSZQ.js} +1 -1
  90. package/payload/server/public/assets/{diagram-MMDJMWI5-Da3t99fY.js → diagram-MMDJMWI5-tN2yiz0C.js} +1 -1
  91. package/payload/server/public/assets/{diagram-TYMM5635-BzQmLTJQ.js → diagram-TYMM5635-CjrRQNQ0.js} +1 -1
  92. package/payload/server/public/assets/{erDiagram-SMLLAGMA-D3Ll-GDw.js → erDiagram-SMLLAGMA-CrNNMxkA.js} +1 -1
  93. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-D17bje6d.js → flowDiagram-DWJPFMVM-CCUsJph7.js} +1 -1
  94. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-BjeQ-Bun.js → ganttDiagram-T4ZO3ILL-18276bri.js} +1 -1
  95. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-LtX4pvZS.js → gitGraphDiagram-UUTBAWPF-CsLsKMjN.js} +1 -1
  96. package/payload/server/public/assets/graph-D2Yvni5R.js +1 -0
  97. package/payload/server/public/assets/graph-labels-uksnCgSC.js +1 -0
  98. package/payload/server/public/assets/{graphlib-CzwsfZOw.js → graphlib-CmtUzIni.js} +1 -1
  99. package/payload/server/public/assets/{infoDiagram-42DDH7IO-DOgH4i52.js → infoDiagram-42DDH7IO-Dny_ZNz3.js} +1 -1
  100. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-DYqy5BFj.js → ishikawaDiagram-UXIWVN3A-kUhIUQE-.js} +1 -1
  101. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-CsFpIULJ.js → journeyDiagram-VCZTEJTY-DekMvAKB.js} +1 -1
  102. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-5uZuArw7.js → kanban-definition-6JOO6SKY-st0HNZZo.js} +1 -1
  103. package/payload/server/public/assets/lib-Ca7uCvl9.js +33 -0
  104. package/payload/server/public/assets/{line-BY8PmCSW.js → line-BaNk-I7J.js} +1 -1
  105. package/payload/server/public/assets/{mermaid-parser.core-CJ_9xqwK.js → mermaid-parser.core-CRCHYQ_F.js} +1 -1
  106. package/payload/server/public/assets/{mermaid.core-CXznBkX7.js → mermaid.core-BaIYEciF.js} +3 -3
  107. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-DZbHBud5.js → mindmap-definition-QFDTVHPH-D4u4KU2v.js} +1 -1
  108. package/payload/server/public/assets/{page-CfN7nw1J.js → page-DayPduMN.js} +2 -2
  109. package/payload/server/public/assets/page-QQmuB04w.js +1 -0
  110. package/payload/server/public/assets/{pieDiagram-DEJITSTG-QmOi4DRG.js → pieDiagram-DEJITSTG-BItWEilY.js} +1 -1
  111. package/payload/server/public/assets/public-Dze4yArS.js +7 -0
  112. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-Cpidq6Xj.js → quadrantDiagram-34T5L4WZ-CeWDBvmH.js} +1 -1
  113. package/payload/server/public/assets/{requirementDiagram-MS252O5E-CBqtfbzR.js → requirementDiagram-MS252O5E-CcosjedW.js} +1 -1
  114. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-4BiY4dV9.js → sankeyDiagram-XADWPNL6-DNGeFpUj.js} +1 -1
  115. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-DVlL-l2u.js → sequenceDiagram-FGHM5R23-Cqy_deB6.js} +1 -1
  116. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-CAm9dW68.js → stateDiagram-FHFEXIEX-2yoAqEsA.js} +1 -1
  117. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Dc5siYvu.js +1 -0
  118. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-CD-tZc4y.js → timeline-definition-GMOUNBTQ-Dmeghpw1.js} +1 -1
  119. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-Davcm0TF.js → vennDiagram-DHZGUBPP-TX5D-Zzp.js} +1 -1
  120. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-40LBYw_Y.js → wardleyDiagram-NUSXRM2D-B7mcpl5E.js} +1 -1
  121. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-DEPT-__v.js → xychartDiagram-5P7HB3ND-DH77CxKf.js} +1 -1
  122. package/payload/server/public/brand/Archive/favicon.ico +0 -0
  123. package/payload/server/public/brand/Archive/maxy-black.png +0 -0
  124. package/payload/server/public/brand/Archive/maxy-horizontal.png +0 -0
  125. package/payload/server/public/brand/Archive/maxy-monochrome.png +0 -0
  126. package/payload/server/public/brand/Archive/maxy-square.png +0 -0
  127. package/payload/server/public/brand/Archive/maxy.png +0 -0
  128. package/payload/server/public/brand/Archive/star.png +0 -0
  129. package/payload/server/public/brand/Archive.zip +0 -0
  130. package/payload/server/public/data.html +5 -5
  131. package/payload/server/public/graph.html +6 -6
  132. package/payload/server/public/index.html +8 -8
  133. package/payload/server/public/public.html +5 -5
  134. package/payload/server/server.js +312 -793
  135. package/payload/server/public/assets/ChatInput-CvRaT05l.js +0 -13
  136. package/payload/server/public/assets/Checkbox-BJKNkUYu.js +0 -1
  137. package/payload/server/public/assets/admin-BNy4N2d6.js +0 -217
  138. package/payload/server/public/assets/channel-DdtUtt5g.js +0 -1
  139. package/payload/server/public/assets/classDiagram-6PBFFD2Q-CKk2DFZe.js +0 -1
  140. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E--YvfDQCh.js +0 -1
  141. package/payload/server/public/assets/clone-Cw6UfPGM.js +0 -1
  142. package/payload/server/public/assets/data-uBpwaldK.js +0 -1
  143. package/payload/server/public/assets/graph-labels-Cn9jAE6I.js +0 -1
  144. package/payload/server/public/assets/graph-tvTPvBaz.js +0 -1
  145. package/payload/server/public/assets/lib-p4ylk2XS.js +0 -29
  146. package/payload/server/public/assets/page-B3VYaBcf.js +0 -1
  147. package/payload/server/public/assets/public-Bbew78md.js +0 -7
  148. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-B2EzXi50.js +0 -1
  149. /package/payload/server/public/assets/{ChatInput-DzacFNMk.css → brand-DzacFNMk.css} +0 -0
@@ -1 +0,0 @@
1
- import{o as e}from"./chunk-DD-I1_y5.js";import{d as t,g as n,u as r,y as i}from"./ChatInput-CvRaT05l.js";import{d as a,h as o,i as s,s as c,t as l,x as u,y as d}from"./graph-labels-Cn9jAE6I.js";var f=n(`circle-arrow-up`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m16 12-4-4-4 4`,key:`177agl`}],[`path`,{d:`M12 16V8`,key:`1sbj14`}]]),p=n(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]),m=n(`file`,[[`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`}]]),h=n(`folder`,[[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`,key:`1kt360`}]]),g=n(`upload`,[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]);function _(e){let t=new Set,n=[];for(let r of e)for(let e of r.labels)e&&(t.has(e)||l.has(e)&&(t.add(e),n.push(e)));return n}var v=80;function y(e){let t=b(e.properties)??e.labels[0]??``,n=t.length>v?t.slice(0,v):t;return`/graph?${new URLSearchParams({nodeId:e.nodeId,label:n}).toString()}`}function b(e){for(let t of[`title`,`name`,`summary`,`headline`]){let n=e[t];if(typeof n==`string`&&n.length>0)return n}return null}var x=e(i(),1),S=r();function C(){let[e,t]=(0,x.useState)(null),[n,r]=(0,x.useState)(!1),[i,o]=(0,x.useState)(void 0),[c,l]=(0,x.useState)(null),[f,p]=(0,x.useState)(void 0),[m,h]=(0,x.useState)(null),[g,_]=(0,x.useState)(null);(0,x.useEffect)(()=>{let e=!1,n=null;try{n=sessionStorage.getItem(`maxy-admin-session-key`)}catch{}if(!n){t(null),r(!0);return}return fetch(`/api/admin/session?session_key=${encodeURIComponent(n)}`).then(async i=>{if(!e){if(i.status===401){try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}window.location.href=`/`;return}if(i.ok)try{let e=await i.json();typeof e.businessName==`string`&&o(e.businessName),e.sessionId!==void 0&&l(e.sessionId??null),_(e.role??null),p(e.userName===void 0?null:e.userName),h(e.avatar??null)}catch{}t(n),r(!0)}}).catch(()=>{e||(t(n),r(!0))}),()=>{e=!0}},[]);let v=(0,x.useCallback)(()=>{try{sessionStorage.removeItem(`maxy-admin-session-key`)}catch{}window.location.href=`/`},[]);return n?e?(0,S.jsxs)(s,{cacheKey:e,businessName:i,sessionId:c,onLogout:v,userName:f,userAvatar:m,role:g,children:[(0,S.jsx)(a,{}),(0,S.jsxs)(`div`,{className:`data-page`,children:[(0,S.jsx)(`header`,{className:`data-header`,children:(0,S.jsxs)(`h1`,{className:`data-title`,children:[(0,S.jsx)(u,{size:18}),` Data`]})}),(0,S.jsx)(w,{cacheKey:e})]})]}):(0,S.jsxs)(`div`,{className:`data-page`,children:[(0,S.jsx)(`header`,{className:`data-header`,children:(0,S.jsxs)(`h1`,{className:`data-title`,children:[(0,S.jsx)(u,{size:18}),` Data`]})}),(0,S.jsxs)(`div`,{className:`data-empty`,children:[(0,S.jsx)(`p`,{children:`You are not signed in.`}),(0,S.jsxs)(`p`,{children:[`Open the `,(0,S.jsx)(`a`,{href:`/`,className:`data-link`,children:`main admin page`}),` and log in, then return here.`]})]})]}):(0,S.jsx)(`div`,{className:`data-page`,children:(0,S.jsxs)(`div`,{className:`data-loading`,children:[(0,S.jsx)(d,{size:18,className:`spin`}),` Loading…`]})})}function w({cacheKey:e,onOpenInGraph:t}){let{adminFetch:n,cacheKey:r,sessionRefetchNonce:i,banner:a,reloadToLogin:o}=c({initialCacheKey:e,surface:`data`});return(0,S.jsxs)(`main`,{className:`data-main`,children:[a&&(0,S.jsx)(`button`,{type:`button`,className:`data-session-banner`,onClick:o,"data-reason":a.reason,children:a.message}),(0,S.jsx)(T,{adminFetch:n,sessionRefetchNonce:i,onOpenInGraph:t}),(0,S.jsx)(A,{adminFetch:n,cacheKey:r,sessionRefetchNonce:i})]})}function T({adminFetch:e,sessionRefetchNonce:t,onOpenInGraph:n}){let[r,i]=(0,x.useState)(``),[a,s]=(0,x.useState)(``),[c,l]=(0,x.useState)(null),[u,f]=(0,x.useState)(`hybrid`),[p,m]=(0,x.useState)(!1),[h,g]=(0,x.useState)(null),[v,b]=(0,x.useState)(null),[C,w]=(0,x.useState)(0),[T,O]=(0,x.useState)(!1);(0,x.useEffect)(()=>{let e=r.trim();if(!e){s(``),l(null);return}O(!1);let t=setTimeout(()=>s(e),300);return()=>clearTimeout(t)},[r]),(0,x.useEffect)(()=>{if(!a)return;let t=!1;return m(!0),g(null),e(`/api/admin/graph-search?q=${encodeURIComponent(a)}&labels=*&limit=20${T?`&threshold=0`:``}`).then(async e=>{let t=await e.json().catch(()=>({error:`HTTP ${e.status}`}));if(!e.ok)throw Error(t.error??`HTTP ${e.status}`);return t}).then(e=>{t||(l(e.results),f(e.mode??`hybrid`),w(typeof e.suppressed==`number`?e.suppressed:0))}).catch(e=>{t||g(e instanceof Error?e.message:String(e))}).finally(()=>{t||m(!1)}),()=>{t=!0}},[a,e,t,T]);let k=(0,x.useMemo)(()=>c?_(c):[],[c]),A=v&&k.includes(v)?v:null,j=(0,x.useMemo)(()=>c?A?c.filter(e=>e.labels.includes(A)):c:null,[c,A]),M=(0,x.useCallback)(e=>{if(n){n(e);return}window.location.href=y(e)},[n]);return(0,S.jsxs)(`section`,{className:`data-panel`,children:[(0,S.jsx)(`h2`,{className:`data-panel-title`,children:`Search`}),(0,S.jsx)(`p`,{className:`data-panel-subtitle`,children:`Find anything in your knowledge base by keyword.`}),(0,S.jsxs)(`div`,{className:`data-search-input`,children:[(0,S.jsx)(o,{size:14}),(0,S.jsx)(`input`,{type:`text`,placeholder:`Search your knowledge…`,value:r,onChange:e=>i(e.target.value),autoFocus:!0,autoComplete:`off`,spellCheck:!1}),p&&(0,S.jsx)(d,{size:14,className:`spin`})]}),h&&(0,S.jsxs)(`div`,{className:`data-error`,children:[`Search failed: `,h]}),k.length>0&&(0,S.jsx)(`div`,{className:`data-chip-row`,role:`group`,"aria-label":`Filter by type`,children:k.map(e=>{let t=e===A;return(0,S.jsx)(`button`,{type:`button`,className:`data-chip`,"data-active":t,onClick:()=>b(t?null:e),children:D([e])??e},e)})}),c&&!p&&(0,S.jsxs)(`div`,{className:`data-results-meta`,children:[j.length,` of `,c.length,` result`,c.length===1?``:`s`]}),c&&!p&&!A&&C>0&&!T&&(0,S.jsxs)(`button`,{type:`button`,className:`data-suppressed-banner`,onClick:()=>O(!0),children:[C,` low-confidence result`,C===1?``:`s`,` hidden — show all`]}),c&&!p&&!A&&T&&(0,S.jsx)(`button`,{type:`button`,className:`data-suppressed-banner`,onClick:()=>O(!1),children:`Showing all results — hide low-confidence`}),c&&c.length===0&&!p&&(0,S.jsx)(`div`,{className:`data-empty-results`,children:`No matches. Try a different keyword.`}),j&&j.length>0&&(0,S.jsx)(`ul`,{className:`data-results`,children:j.map(e=>(0,S.jsx)(E,{hit:e,mode:u,onOpenInGraph:M},e.nodeId))})]})}function E({hit:e,mode:t,onOpenInGraph:n}){let r=O(e.properties),i=k(e.properties),a=D(e.labels),[o,s]=(0,x.useState)(!1),c=i&&i.length>280,l=o||!c?i:i?.slice(0,280)+`…`,u=t===`bm25`?`bm25 ${e.bm25Score.toFixed(2)}`:`vector ${e.vectorScore.toFixed(2)} · bm25 ${e.bm25Score.toFixed(2)} · combined ${e.score.toFixed(2)}`;return(0,S.jsxs)(`li`,{className:`data-result`,children:[(0,S.jsxs)(`div`,{role:`button`,tabIndex:0,className:`data-result-open`,onClick:()=>n(e),onKeyDown:t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),n(e))},"aria-label":`Open ${r??a??`node`} in graph`,children:[a&&(0,S.jsx)(`div`,{className:`data-result-header`,children:(0,S.jsx)(`span`,{className:`data-result-labels`,children:a})}),r&&(0,S.jsx)(`div`,{className:`data-result-title`,children:r}),i&&(0,S.jsx)(`pre`,{className:`data-result-body`,children:l}),(0,S.jsx)(`div`,{className:`data-result-scores`,children:u})]}),c&&(0,S.jsx)(`button`,{type:`button`,className:`data-result-toggle`,onClick:()=>s(e=>!e),children:o?`Show less`:`Show more`})]})}function D(e){if(e.length===0)return null;let t=e[0].replace(/([a-z])([A-Z])/g,`$1 $2`);return t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()}function O(e){for(let t of[`title`,`name`,`summary`,`headline`]){let n=e[t];if(typeof n==`string`&&n.length>0)return n.length>140?n.slice(0,140)+`…`:n}return null}function k(e){for(let t of[`content`,`summary`,`body`,`description`,`text`]){let n=e[t];if(typeof n==`string`&&n.length>0)return n}return null}function A({adminFetch:e,cacheKey:n,sessionRefetchNonce:r}){let[i,a]=(0,x.useState)(`.`),[o,s]=(0,x.useState)(null),[c,l]=(0,x.useState)([]),[u,_]=(0,x.useState)(!1),[v,y]=(0,x.useState)(null),[b,C]=(0,x.useState)(!1),[w,T]=(0,x.useState)(null),[E,D]=(0,x.useState)(null),[O,k]=(0,x.useState)(null),[A,N]=(0,x.useState)(null),P=(0,x.useRef)(null),[F,I]=(0,x.useState)(0);(0,x.useEffect)(()=>{let t=!1;return _(!0),y(null),e(`/api/admin/files?path=${encodeURIComponent(i===`.`?``:i)}`).then(async e=>{let t=await e.json().catch(()=>({error:`HTTP ${e.status}`}));if(!e.ok)throw Error(t.error??`HTTP ${e.status}`);return t}).then(e=>{t||(s(e.entries),l(e.displayPath??[]))}).catch(e=>{t||(s([]),l([]),y(e instanceof Error?e.message:String(e)))}).finally(()=>{t||_(!1)}),()=>{t=!0}},[e,i,F,r]);let L=(0,x.useCallback)(e=>{a(e)},[]),R=(0,x.useCallback)(()=>{if(i===`.`||i===``)return;let e=i.split(`/`).filter(Boolean);e.pop(),a(e.length===0?`.`:e.join(`/`))},[i]),z=(0,x.useCallback)(e=>{let t=i===`.`?e.name:`${i}/${e.name}`,r=`/api/admin/files/download?session_key=${encodeURIComponent(n)}&path=${encodeURIComponent(t)}`,a=document.createElement(`a`);a.href=r,a.rel=`noopener noreferrer`,document.body.appendChild(a),a.click(),a.remove()},[i,n]),B=(0,x.useCallback)(()=>{P.current?.click()},[]),V=(0,x.useCallback)(e=>{D(null),N(e.name)},[]),H=(0,x.useCallback)(()=>{N(null)},[]),U=(0,x.useCallback)(async t=>{let n=i===`.`?t.name:`${i}/${t.name}`;D(null),N(null),k(t.name);try{let t=await e(`/api/admin/files?path=${encodeURIComponent(n)}`,{method:`DELETE`}),r=await t.json().catch(()=>({error:`HTTP ${t.status}`}));if(!t.ok)throw Error(r.error??`HTTP ${t.status}`);I(e=>e+1)}catch(e){D(e instanceof Error?e.message:String(e))}finally{k(null)}},[i,e]);(0,x.useEffect)(()=>{if(!A)return;let e=e=>{e.key===`Escape`&&N(null)};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[A]);let W=(0,x.useCallback)(async e=>{T(null),C(!0);try{let t=new FormData;t.append(`session_key`,n),t.append(`file`,e);let r=await fetch(`/api/admin/files/upload`,{method:`POST`,body:t}),i=await r.json().catch(()=>({error:`HTTP ${r.status}`}));if(!r.ok)throw Error(i.error??`HTTP ${r.status}`);a(i.path.split(`/`).slice(0,-1).join(`/`)||`.`),I(e=>e+1)}catch(e){T(e instanceof Error?e.message:String(e))}finally{C(!1),P.current&&(P.current.value=``)}},[n]);return(0,S.jsxs)(`section`,{className:`data-panel`,children:[(0,S.jsxs)(`div`,{className:`data-panel-heading`,children:[(0,S.jsx)(`h2`,{className:`data-panel-title`,children:`Files`}),(0,S.jsxs)(`div`,{className:`data-file-actions`,children:[(0,S.jsxs)(`button`,{type:`button`,className:`data-btn`,onClick:B,disabled:b,children:[b?(0,S.jsx)(d,{size:14,className:`spin`}):(0,S.jsx)(g,{size:14}),` Upload`]}),(0,S.jsx)(`input`,{type:`file`,ref:P,hidden:!0,onChange:e=>{let t=e.target.files?.[0];t&&W(t)}})]})]}),(0,S.jsxs)(`p`,{className:`data-panel-subtitle`,children:[`Everything under your install's `,(0,S.jsx)(`code`,{children:`data/`}),` directory. Click a folder to open it, a file to download it. Uploads go to `,(0,S.jsx)(`code`,{children:`data/uploads/`}),`.`]}),(0,S.jsxs)(`div`,{className:`data-breadcrumbs`,children:[(0,S.jsx)(`button`,{type:`button`,className:`data-crumb`,onClick:()=>L(`.`),children:`data`}),c.map((e,t)=>{let n=c.slice(0,t+1).map(e=>e.name).join(`/`);return(0,S.jsxs)(`span`,{className:`data-crumb-wrap`,children:[(0,S.jsx)(`span`,{className:`data-crumb-sep`,children:`/`}),(0,S.jsx)(`button`,{type:`button`,className:`data-crumb`,onClick:()=>L(n),title:e.name,children:e.displayName??e.name})]},n)}),i!==`.`&&(0,S.jsxs)(`button`,{type:`button`,className:`data-btn data-btn-ghost data-up-btn`,onClick:R,children:[(0,S.jsx)(f,{size:14}),` Up`]})]}),w&&(0,S.jsxs)(`div`,{className:`data-error`,children:[`Upload failed: `,w]}),E&&(0,S.jsxs)(`div`,{className:`data-error`,children:[`Delete failed: `,E]}),v&&(0,S.jsx)(`div`,{className:`data-error`,children:v}),u&&(0,S.jsxs)(`div`,{className:`data-loading`,children:[(0,S.jsx)(d,{size:14,className:`spin`}),` Loading…`]}),!u&&o&&o.length===0&&!v&&(0,S.jsx)(`div`,{className:`data-empty-results`,children:`Empty directory.`}),!u&&o&&o.length>0&&(0,S.jsx)(`ul`,{className:`data-entries`,children:o.map(e=>{let n=e.displayName??e.name,r=O===e.name,a=A===e.name;return(0,S.jsx)(`li`,{className:`data-entry`,children:e.kind===`directory`?(0,S.jsxs)(`button`,{type:`button`,className:`data-entry-btn`,onClick:()=>L(i===`.`?e.name:`${i}/${e.name}`),children:[(0,S.jsx)(h,{size:14}),(0,S.jsx)(`span`,{className:`data-entry-name`,title:e.name,children:n})]}):e.kind===`file`?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsxs)(`button`,{type:`button`,className:`data-entry-btn`,onClick:()=>z(e),title:`Download ${n}`,disabled:a,children:[(0,S.jsx)(m,{size:14}),(0,S.jsx)(`span`,{className:`data-entry-name`,title:e.name,children:n}),(0,S.jsxs)(`span`,{className:`data-entry-meta`,title:`Modified ${M(e.modifiedAt)}`,children:[j(e.sizeBytes),` · `,M(e.modifiedAt)]}),(0,S.jsx)(p,{size:12,className:`data-entry-download-icon`})]}),a?(0,S.jsxs)(`div`,{className:`data-entry-confirm`,role:`group`,"aria-label":`Confirm delete ${n}`,children:[(0,S.jsx)(`span`,{className:`data-entry-confirm-label`,children:`Delete?`}),(0,S.jsx)(`button`,{type:`button`,className:`data-entry-confirm-yes`,onClick:()=>U(e),autoFocus:!0,children:`Yes`}),(0,S.jsx)(`button`,{type:`button`,className:`data-entry-confirm-no`,onClick:H,children:`No`})]}):(0,S.jsx)(`button`,{type:`button`,className:`data-entry-delete`,onClick:()=>V(e),disabled:r,title:`Delete ${n}`,"aria-label":`Delete ${n}`,children:r?(0,S.jsx)(d,{size:14,className:`spin`}):(0,S.jsx)(t,{size:14})})]}):(0,S.jsxs)(`div`,{className:`data-entry-btn data-entry-disabled`,children:[(0,S.jsx)(m,{size:14}),(0,S.jsx)(`span`,{className:`data-entry-name`,children:n}),(0,S.jsx)(`span`,{className:`data-entry-meta`,children:`special`})]})},e.name)})})]})}function j(e){return e==null?``:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/1024/1024).toFixed(1)} MB`:`${(e/1024/1024/1024).toFixed(1)} GB`}function M(e){try{let t=new Date(e);if(isNaN(t.getTime()))return`—`;let n=typeof navigator<`u`?navigator.languages&&navigator.languages.length>0?[...navigator.languages]:[navigator.language]:void 0;return t.toLocaleString(n,{dateStyle:`medium`,timeStyle:`short`})}catch{return`—`}}export{p as i,w as n,b as r,C as t};
@@ -1,7 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mermaid.core-CXznBkX7.js","assets/dist-Bd4S37oi.js","assets/chunk-DD-I1_y5.js","assets/chunk-U2HBQHQK-BmfZG8e4.js","assets/src-B6XdH6xq.js","assets/chunk-5PVQY5BW-CwPHRVN8.js","assets/chunk-ICPOFSXX-CPnMJplL.js","assets/_baseFor-BHtDrjIo.js","assets/isEmpty-BWl67LAZ.js","assets/chunk-336JU56O-DwP7g5ns.js","assets/chunk-5FUZZQ4R-BHjWhwhn.js","assets/chunk-X2U36JSP-Da2yJL2u.js","assets/chunk-ZZ45TVLE-abkGirrZ.js","assets/rough.esm-DKRO8IF-.js","assets/chunk-ENJZ2VHE-BTnmmnmX.js","assets/line-BY8PmCSW.js","assets/path-B0Ik7Tu9.js","assets/array-DetWRiSa.js","assets/chunk-BSJP7CBP-DP7LTBll.js","assets/chunk-426QAEUC-DXzGdc22.js","assets/chunk-XPW4576I-m1Y_r88I.js"])))=>i.map(i=>d[i]);
2
- import{o as e}from"./chunk-DD-I1_y5.js";import{_ as t,a as n,c as r,d as i,f as a,g as o,h as s,i as c,m as l,n as u,o as d,p as f,r as p,s as m,t as h,u as g,y as _}from"./ChatInput-CvRaT05l.js";import{t as v}from"./Checkbox-BJKNkUYu.js";import{n as y,r as b,t as x}from"./lib-p4ylk2XS.js";var S=o(`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`}]]),C=o(`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`}]]),w=o(`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`}]]),T=o(`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`}]]),E=o(`square-check-big`,[[`path`,{d:`M21 10.656V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.344`,key:`2acyp4`}],[`path`,{d:`m9 11 3 3L22 4`,key:`1pflzl`}]]),D=o(`square-plus`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M8 12h8`,key:`1wcyev`}],[`path`,{d:`M12 8v8`,key:`napkw2`}]]),O=t(),k=e(_(),1),A=`image/jpeg,image/png,image/gif,image/webp,application/pdf,text/plain,text/markdown,text/csv,text/html,text/calendar,audio/ogg,audio/opus,audio/mp4,audio/mpeg,audio/webm,audio/wav,.opus,.ogg,.m4a,.mp3,.wav,.webm`,j=new Set(A.split(`,`).filter(e=>!e.startsWith(`.`))),M=50*1024*1024,N=typeof window<`u`&&/^(localhost|127\.0\.0\.1|[a-z0-9-]+\.local)(:|$)/.test(window.location.hostname);function P(){let e=crypto.getRandomValues(new Uint8Array(16));e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=[...e].map(e=>e.toString(16).padStart(2,`0`)).join(``);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}function F(){let e=window.location.pathname;if(e.startsWith(`/g/`))return;let t=e.match(/^\/([a-z][a-z0-9-]{2,49})$/);return t?t[1]:void 0}function ee(){let e=window.location.pathname.match(/^\/g\/([a-z0-9][a-z0-9-]{0,49})$/);return e?e[1]:void 0}function te(e){let[t,n]=(0,k.useState)(null),[r,i]=(0,k.useState)(null),[a,o]=(0,k.useState)(`loading`),[s,c]=(0,k.useState)(``),[l,u]=(0,k.useState)(null),[d,f]=(0,k.useState)(null),[p,m]=(0,k.useState)(!1),[h,g]=(0,k.useState)(null),_=(0,k.useMemo)(()=>F(),[]),v=(0,k.useMemo)(()=>ee(),[]),[y,b]=(0,k.useState)(null),x=(0,k.useRef)(_||``),S=(0,k.useRef)(null),C=(0,k.useRef)(null),w=(0,k.useRef)(!1),T=(0,k.useRef)(null),[E,D]=(0,k.useState)(`request-link`),[O,A]=(0,k.useState)(null),j=(0,k.useRef)(null),M=(0,k.useRef)(null);(0,k.useEffect)(()=>{try{let e=sessionStorage.getItem(`maxy_session`);e&&(M.current=e)}catch{}},[]);let te=(0,k.useCallback)(t=>{S.current=t,n(t);try{sessionStorage.setItem(`maxy_session`,t)}catch{}o(`chat`),e(t)},[e]),I=(0,k.useCallback)(()=>{S.current=null;try{sessionStorage.removeItem(`maxy_session`)}catch{}n(null),o(`auth-required`),D(`request-link`)},[]),L=(0,k.useCallback)(async e=>{D(`verifying`);try{let t=x.current,n=await fetch(`/api/access/verify-token`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({token:e,agentSlug:t})});if(window.history.replaceState({},``,window.location.pathname),n.ok){let e=await n.json().catch(()=>({}));return e?.displayName&&A({displayName:e.displayName,contactValue:``,expiresAt:null,status:`active`}),!0}return D(`verify-failed`),!1}catch{return D(`verify-failed`),!1}},[]),R=(0,k.useCallback)(async()=>{if(S.current)return S.current;if(C.current)return C.current;let e=(async()=>{try{let e=M.current,t=await fetch(`/api/session`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({session_id:P(),..._?{agent:_}:{},...v?{group_slug:v}:{},...e?{session_key:e}:{}})});if(!t.ok){let e=await t.json().catch(()=>({error:``}));return N&&console.error(`[session] POST /api/session failed: ${t.status} ${t.statusText}`,e),t.status===404?i(e.error||`Agent not found`):t.status===503&&i(e.error||`Service unavailable`),null}let r=await t.json();if(r.auth_required){r.agent_id&&(x.current=r.agent_id),c(r.displayName||``),r.agentImage&&u(r.agentImage),r.agentImageShape&&f(r.agentImageShape),r.showAgentName&&m(r.showAgentName),r.branding&&g(r.branding),o(`auth-required`);let e=new URLSearchParams(window.location.search).get(`token`);return e?await L(e)&&window.location.reload():D(`request-link`),null}S.current=r.session_key,n(r.session_key),r.displayName&&c(r.displayName),r.agentImage&&u(r.agentImage),r.agentImageShape&&f(r.agentImageShape),r.showAgentName&&m(r.showAgentName),r.branding&&g(r.branding),o(`chat`),r.resumed&&r.messages&&(w.current=!0,T.current=r.messages),r.group&&b({groupSlug:r.groupSlug,groupName:r.groupName,participants:r.participants??[]});try{sessionStorage.setItem(`maxy_session`,r.session_key)}catch{}return r.session_key}catch(e){return N&&console.error(`[session] fetch /api/session threw:`,e),i(`Unable to connect. Please check your connection and try again.`),null}finally{C.current=null}})();return C.current=e,e},[_,v,L]);return{sessionId:t,cacheKeyRef:S,sessionError:r,pageState:a,setPageState:o,agentDisplayName:s,agentImage:l,agentImageShape:d,showAgentName:p,agentSlug:_,branding:h,resolvedSlugRef:x,ensureSession:R,startNewSession:(0,k.useCallback)(async()=>{S.current=null,C.current=null,M.current=null,w.current=!1,T.current=null,n(null),i(null);try{sessionStorage.removeItem(`maxy_session`)}catch{}let t=await R();t&&e(t)},[R,e]),enterChat:te,enterGate:I,resumedRef:w,resumeMessagesRef:T,gateState:E,setGateState:D,grantInfo:O,setGrantInfo:A,gateCacheKeyRef:j,groupContext:y,groupSlug:v}}async function*I(e){let t=e.body?.getReader();if(!t)throw Error(`No response stream`);let n=new TextDecoder,r=``;try{for(;;){let{done:e,value:i}=await t.read();if(e)break;r+=n.decode(i,{stream:!0});let a=r.split(`
3
- `);r=a.pop();for(let e of a){if(!e.startsWith(`data: `))continue;let t=e.slice(6);if(t===`[DONE]`)continue;let n;try{n=JSON.parse(t)}catch{continue}yield n}}}finally{t.cancel()}}function L({cacheKeyRef:e,ensureSession:t,sessionError:n,pageState:r,inputRef:i}){let[a,o]=(0,k.useState)([]),[s,c]=(0,k.useState)(!1),l=(0,k.useRef)(!1),u=e=>{l.current=e,c(e)},d=(0,k.useCallback)(async a=>{if(!l.current){u(!0),o([{role:`maxy`,content:``,timestamp:Date.now()}]);try{let n=await fetch(`/api/chat`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({greeting:!0,session_key:a})});if(n.status===401){e.current=null;try{sessionStorage.removeItem(`maxy_session`)}catch{}N&&console.warn(`[greeting] stale session, retrying with fresh session`);let r=await t();if(!r)return;n=await fetch(`/api/chat`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({greeting:!0,session_key:r})})}if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error||`Something went wrong`)}let r=``,i=``,s=()=>{i&&(r+=i,i=``,o(e=>{let t=[...e];return t[0]={...t[0],content:r},t}))},c=setInterval(s,60);try{for await(let e of I(n)){if(e.error)throw Object.assign(Error(e.error),{fromSSE:!0});e.text&&(i+=e.text),e.type===`component`&&(s(),o(t=>{let n=[...t],r={...n[0]},i=[...r.components||[]];return i.push({name:e.name,data:e.data,submitted:!1}),n[0]={...r,components:i},n}))}}finally{clearInterval(c),s()}}catch(e){if(N&&console.error(`[chat] greeting failed:`,e),r===`auth-required`)return;let t=e instanceof Error?e.message:String(e);o([{role:`maxy`,content:e instanceof Error&&e.fromSSE?t:n??`I'm having trouble connecting right now. Try refreshing the page.`,timestamp:Date.now()}])}finally{u(!1),r===`chat`&&i.current?.focus()}}},[e,t,n,r,i]),f=(0,k.useCallback)(async(a,s)=>{let c=s?.hidden??!1,d=s?.files??[];if(!a&&d.length===0||l.current)return;u(!0);let f=d.map(e=>({filename:e.name,mimeType:e.type})),p={role:`visitor`,content:a,attachments:f.length>0?f:void 0,timestamp:Date.now(),hidden:c},m;o(e=>{let t=[...e,p,{role:`maxy`,content:``,timestamp:Date.now()}];return m=t.length-1,t});try{let n=await t();if(!n)throw Error(`session`);let r=e=>{if(d.length>0){let t=new FormData;t.append(`message`,a),t.append(`session_key`,e);for(let e of d)t.append(`attachments`,e);return{body:t,headers:{}}}return{body:JSON.stringify({message:a,session_key:e}),headers:{"Content-Type":`application/json`}}},{body:i,headers:s}=r(n),c=await fetch(`/api/chat`,{method:`POST`,headers:s,body:i});if(c.status===401){e.current=null;try{sessionStorage.removeItem(`maxy_session`)}catch{}N&&console.warn(`[session-expired] stale key cleared, retrying with fresh session`);let n=await t();if(!n)throw Error(`session`);({body:i,headers:s}=r(n)),c=await fetch(`/api/chat`,{method:`POST`,headers:s,body:i})}if(!c.ok){let e=await c.json().catch(()=>({}));throw Error(e.error||`Something went wrong`)}let l=``,u=``,f=()=>{u&&(l+=u,u=``,o(e=>{let t=[...e];return t[m]={...t[m],content:l},t}))},p=setInterval(f,60);try{for await(let e of I(c)){if(e.error)throw Object.assign(Error(e.error),{fromSSE:!0});e.text&&(u+=e.text),e.type===`component`&&(f(),o(t=>{let n=[...t],r={...n[m]},i=[...r.components||[]];return i.push({name:e.name,data:e.data,submitted:!1}),n[m]={...r,components:i},n}))}}finally{clearInterval(p),f()}}catch(e){if(N&&console.error(`[chat] sendMessage failed:`,e),r===`auth-required`)return;let t=e instanceof Error?e.message:String(e),i=e instanceof Error&&e.fromSSE;o(e=>{let r=[...e];return r[m]={...r[m],content:i?t:t===`session`?n??`I'm having trouble connecting right now. Try refreshing the page.`:`Sorry, I hit a snag. Try again in a moment.`},r})}finally{u(!1),r===`chat`&&i.current?.focus()}},[e,t,n,r,i]);return{messages:a,setMessages:o,isStreaming:s,sendMessage:f,sendGreeting:d,handleComponentSubmit:(0,k.useCallback)((e,t,n)=>{o(n=>{let r=[...n],i={...r[e]},a=[...i.components||[]];return a[t]={...a[t],submitted:!0},r[e]={...i,components:a},r}),f(n,{hidden:!0})},[f])}}function R({cacheKeyRef:e,groupSlug:t,isStreaming:n,setMessages:r}){let i=(0,k.useRef)(new Date().toISOString()),a=(0,k.useRef)(!0);(0,k.useEffect)(()=>{let e=()=>{a.current=document.visibilityState===`visible`};return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[]);let o=(0,k.useCallback)(async()=>{let n=e.current;if(!(!n||!t))try{let e=await fetch(`/api/group/messages?session_key=${encodeURIComponent(n)}&since=${encodeURIComponent(i.current)}`);if(!e.ok)return;let t=await e.json();if(!t.messages||t.messages.length===0)return;let a=t.messages[t.messages.length-1];a.timestamp&&(i.current=new Date(a.timestamp).toISOString()),r(e=>{let n=new Set(e.filter(e=>e.messageId).map(e=>e.messageId)),r=t.messages.filter(e=>!n.has(e.messageId)).map(e=>({role:e.role,content:e.content,timestamp:e.timestamp,senderName:e.senderName??void 0,senderVisitorId:e.senderVisitorId??void 0,messageId:e.messageId}));if(r.length===0)return e;let i=[...e,...r];return i.sort((e,t)=>e.timestamp-t.timestamp),i})}catch(e){console.error(`[group-poll] failed: ${e instanceof Error?e.message:String(e)}`)}},[e,t,r]);(0,k.useEffect)(()=>{if(!t)return;let e,r=!1;function i(){if(r)return;let t=a.current?3e3:3e4;e=setTimeout(async()=>{n||await o(),i()},t)}return i(),()=>{r=!0,clearTimeout(e)}},[t,n,o])}var z=g();function ne({gateState:e,setGateState:t,grantInfo:n,resolvedSlugRef:r}){let[i,a]=(0,k.useState)(``),[o,s]=(0,k.useState)(!1),[c,l]=(0,k.useState)(null);async function u(e){e.preventDefault();let n=i.trim().toLowerCase();if(!n){l(`Enter the email you were invited on.`);return}s(!0),l(null);try{let e=await fetch(`/api/access/request-magic-link`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({contactValue:n,agentSlug:r.current})});if(e.status===429){l((await e.json().catch(()=>({})))?.error||`Too many requests. Try again later.`);return}t(`request-sent`)}catch{l(`Could not reach the server. Check your connection and try again.`)}finally{s(!1)}}return(0,z.jsxs)(`div`,{className:`access-gate`,children:[e===`verifying`&&(0,z.jsxs)(`div`,{className:`access-gate-message`,children:[(0,z.jsx)(`h2`,{children:`Verifying your link…`}),(0,z.jsx)(`p`,{children:`This takes a moment.`})]}),e===`verify-failed`&&(0,z.jsxs)(`div`,{className:`access-gate-message`,children:[(0,z.jsx)(`h2`,{children:`That link did not work`}),(0,z.jsx)(`p`,{children:`It may have expired, already been used, or been for a different agent. You can request a fresh one below.`}),(0,z.jsx)(b,{onClick:()=>{t(`request-link`),l(null)},children:`Request a new link`})]}),e===`request-link`&&(0,z.jsxs)(`form`,{className:`access-gate-form`,onSubmit:u,children:[(0,z.jsx)(`h2`,{children:n?.displayName?`Welcome back, ${n.displayName}`:`Sign in`}),(0,z.jsx)(`p`,{children:`Enter the email you were invited on and we will send you a fresh link.`}),(0,z.jsx)(`label`,{htmlFor:`access-email`,children:`Email`}),(0,z.jsx)(`input`,{id:`access-email`,type:`email`,inputMode:`email`,autoComplete:`email`,value:i,onChange:e=>a(e.target.value),disabled:o}),c&&(0,z.jsx)(`p`,{className:`access-gate-error`,children:c}),(0,z.jsx)(b,{type:`submit`,disabled:o||!i.trim(),children:o?`Sending…`:`Send me a link`})]}),e===`request-sent`&&(0,z.jsxs)(`div`,{className:`access-gate-message`,children:[(0,z.jsx)(`h2`,{children:`Check your email`}),(0,z.jsx)(`p`,{children:`If that address is on the invite list, a fresh link is on the way. It expires in 15 minutes.`}),(0,z.jsx)(b,{onClick:()=>{t(`request-link`),a(``),l(null)},children:`Try a different email`})]})]})}var B=`modulepreload`,V=function(e){return`/`+e},H={},U=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=V(t,n),t in H)return;H[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:B,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},W=null;function re(){return W||=U(async()=>{let{default:e}=await import(`./mermaid.core-CXznBkX7.js`);return{default:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20])).then(({default:e})=>(e.initialize({startOnLoad:!1,theme:`neutral`}),e)),W}function G({source:e}){let t=(0,k.useRef)(null),[n,r]=(0,k.useState)(null);return(0,k.useEffect)(()=>{let n=!1,i=`mermaid-${Math.random().toString(36).slice(2,9)}`;return re().then(t=>t.render(i,e)).then(({svg:e})=>{!n&&t.current&&(t.current.innerHTML=e)}).catch(t=>{n||(console.error(`[MermaidBlock] render failed:`,e,t),r(t instanceof Error?t.message:`Diagram render failed`))}),()=>{n=!0}},[e]),n?(0,z.jsxs)(`div`,{className:`md-mermaid md-mermaid-error`,children:[(0,z.jsx)(`div`,{className:`md-mermaid-error-label`,children:`Diagram render error`}),(0,z.jsx)(`pre`,{className:`md-pre`,children:(0,z.jsx)(`code`,{className:`md-code`,children:e})})]}):(0,z.jsx)(`div`,{className:`md-mermaid`,ref:t})}var K=/\.(mp4|webm|mov)(\?.*)?$/i,ie=/(?:youtube\.com\/watch\?v=|youtu\.be\/)([\w-]+)/,q=/vimeo\.com\/(\d+)/;function J(e){return!!e&&K.test(e)}function Y(e){if(!e)return null;let t=e.match(ie);return t?t[1]:null}function X(e){if(!e)return null;let t=e.match(q);return t?t[1]:null}function Z({src:e}){return(0,z.jsx)(`video`,{className:`md-video`,controls:!0,playsInline:!0,preload:`metadata`,children:(0,z.jsx)(`source`,{src:e})})}function ae({videoId:e}){return(0,z.jsx)(`div`,{className:`md-video-iframe`,children:(0,z.jsx)(`iframe`,{src:`https://www.youtube-nocookie.com/embed/${e}`,allow:`accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture`,allowFullScreen:!0,loading:`lazy`})})}function Q({videoId:e}){return(0,z.jsx)(`div`,{className:`md-video-iframe`,children:(0,z.jsx)(`iframe`,{src:`https://player.vimeo.com/video/${e}`,allow:`autoplay; fullscreen; picture-in-picture`,allowFullScreen:!0,loading:`lazy`})})}function $(e){if(J(e))return(0,z.jsx)(Z,{src:e});let t=Y(e);if(t)return(0,z.jsx)(ae,{videoId:t});let n=X(e);return n?(0,z.jsx)(Q,{videoId:n}):null}var oe={p:({children:e})=>(0,z.jsx)(`p`,{className:`md-p`,children:e}),h1:({children:e})=>(0,z.jsx)(`h1`,{className:`md-heading`,children:e}),h2:({children:e})=>(0,z.jsx)(`h2`,{className:`md-heading`,children:e}),h3:({children:e})=>(0,z.jsx)(`h3`,{className:`md-heading`,children:e}),code:({children:e,className:t})=>t===`language-mermaid`?(0,z.jsx)(G,{source:String(e).replace(/\n$/,``)}):(0,z.jsx)(`code`,{className:`md-code ${t||``}`.trim(),children:e}),pre:({children:e,node:t})=>{let n=t?.children?.[0];return n?.type===`element`&&n.tagName===`code`&&(n.properties?.className??[]).includes(`language-mermaid`)?(0,z.jsx)(z.Fragment,{children:e}):(0,z.jsx)(`pre`,{className:`md-pre`,children:e})},ul:({children:e})=>(0,z.jsx)(`ul`,{className:`md-list`,children:e}),ol:({children:e})=>(0,z.jsx)(`ol`,{className:`md-list md-list-ordered`,children:e}),li:({children:e})=>(0,z.jsx)(`li`,{className:`md-list-item`,children:e}),hr:()=>(0,z.jsx)(`hr`,{className:`md-hr`}),strong:({children:e})=>(0,z.jsx)(`strong`,{className:`md-strong`,children:e}),img:({src:e,alt:t})=>$(e)||(0,z.jsx)(`a`,{href:e,target:`_blank`,rel:`noopener noreferrer`,children:(0,z.jsx)(`img`,{className:`md-img`,src:e,alt:t||``,loading:`lazy`})}),a:({href:e,children:t})=>$(e)||(0,z.jsx)(`a`,{href:e,className:`md-link`,target:`_blank`,rel:`noopener noreferrer`,children:t}),table:({children:e})=>(0,z.jsx)(`table`,{className:`md-table`,children:e}),thead:({children:e})=>(0,z.jsx)(`thead`,{className:`md-thead`,children:e}),tbody:({children:e})=>(0,z.jsx)(`tbody`,{children:e}),tr:({children:e})=>(0,z.jsx)(`tr`,{className:`md-tr`,children:e}),th:({children:e})=>(0,z.jsx)(`th`,{className:`md-th`,children:e}),td:({children:e})=>(0,z.jsx)(`td`,{className:`md-td`,children:e})};function se({content:e,elapsedSeconds:t,timestamp:n}){return(0,z.jsxs)(`div`,{className:`markdown-message`,children:[(0,z.jsx)(y,{remarkPlugins:[x],components:oe,children:e}),t!==void 0&&(0,z.jsxs)(`div`,{className:`message-meta`,children:[t,`s`]}),n&&(0,z.jsx)(`span`,{className:`message-timestamp`,children:n})]})}function ce(e){let t=new Date(e),n=new Date,r=String(t.getHours()).padStart(2,`0`),i=String(t.getMinutes()).padStart(2,`0`),a=String(t.getSeconds()).padStart(2,`0`);return t.toDateString()===n.toDateString()?`${r}:${i}:${a}`:`${String(t.getDate()).padStart(2,`0`)}-${String(t.getMonth()+1).padStart(2,`0`)}-${t.getFullYear()} ${r}:${i}:${a}`}function le({messages:e,isStreaming:t,sessionError:n,selectionMode:r,selectedItems:i,toggleSelectItem:a,remainingSuggestions:o,onSuggestionClick:c,isAtBottom:l,setIsAtBottom:u,isGroup:d,sessionId:p}){let[m,h]=(0,k.useState)(new Set),[g,_]=(0,k.useState)(new Set),y=(0,k.useRef)(null),x=(0,k.useRef)(null),C=(0,k.useRef)(null),w=(0,k.useRef)(!1),T=(0,k.useRef)(!1),E=(0,k.useRef)(!1),D=(0,k.useRef)(0),O=(0,k.useRef)(!1),A=(0,k.useRef)(new Map);O.current=t,(0,k.useEffect)(()=>{t&&!w.current&&l&&(T.current=!0)},[t,l]),(0,k.useEffect)(()=>{if(!T.current&&!l){w.current=t,E.current=!1;return}if(w.current&&!t&&C.current&&x.current){let e=C.current;if(e.offsetHeight>x.current.clientHeight){T.current=!1,E.current=!0,e.scrollIntoView({behavior:`smooth`,block:`start`}),w.current=t;return}}(l||T.current)&&!E.current&&y.current?.scrollIntoView({behavior:`smooth`}),w.current&&!t&&(T.current=!1),w.current=t},[e,l,t]),(0,k.useEffect)(()=>{let e=x.current;if(!e)return;let t=()=>{let t=e.scrollTop;O.current&&t<D.current&&(T.current=!1),D.current=t,u(e.scrollHeight-e.scrollTop-e.clientHeight<80)};return e.addEventListener(`scroll`,t,{passive:!0}),t(),()=>e.removeEventListener(`scroll`,t)},[u]),(0,k.useEffect)(()=>{function e(){_(e=>{let t=new Set;return A.current.forEach((n,r)=>{n.isConnected&&(m.has(r)?e.has(r)&&t.add(r):n.scrollHeight>n.clientHeight+2&&t.add(r))}),e.size===t.size&&[...e].every(e=>t.has(e))?e:t})}e();let t=new ResizeObserver(e);return A.current.forEach(e=>t.observe(e)),()=>t.disconnect()},[e.length,m]);let j=[...e].sort((e,t)=>e.timestamp-t.timestamp);(0,k.useEffect)(()=>{r&&console.log(`[selection] entered`,{sessionId:p??`unknown`,order:j.map(e=>({ts:e.timestamp,role:e.role,id:e.messageId}))})},[r]);let M=j.reduce((e,t,n)=>t.role===`maxy`&&!t.hidden?n:e,-1);return(0,z.jsxs)(`div`,{className:`chat-messages-wrap`,children:[r&&(0,z.jsx)(`div`,{className:`selection-overlay-band`}),(0,z.jsxs)(`div`,{className:`chat-messages`,ref:x,children:[n&&e.length===0&&(0,z.jsx)(`div`,{className:`session-error`,children:(0,z.jsx)(`p`,{children:n})}),j.map((e,n)=>{if(e.hidden)return null;let o=t&&n===j.length-1,c=`${e.timestamp}_${e.role}`,l=i.has(c);return(0,z.jsxs)(`div`,{ref:n===M?C:void 0,className:`message ${e.role}${l?` selected`:``}`,children:[r&&!o&&(0,z.jsx)(`div`,{className:`message-select-check`,children:(0,z.jsx)(v,{checked:l,onChange:()=>a(c)})}),(0,z.jsxs)(`div`,{className:`bubble`,children:[d&&e.role===`visitor`&&e.senderName&&(0,z.jsx)(`span`,{className:`bubble-sender`,children:e.senderName}),e.role===`visitor`&&e.content?(()=>{let t=m.has(n),r=g.has(n);return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`div`,{ref:e=>{e?A.current.set(n,e):A.current.delete(n)},className:t?`bubble-content`:`bubble-content clamped${r?` overflowing`:``}`,children:e.content}),r&&(0,z.jsx)(`div`,{className:`bubble-expand`,children:(0,z.jsx)(b,{variant:`icon`,className:t?`expanded`:``,onClick:()=>h(e=>{let t=new Set(e);return t.has(n)?t.delete(n):t.add(n),t}),"aria-label":t?`Collapse message`:`Expand message`,children:(0,z.jsx)(s,{size:14})})})]})})():e.content?(0,z.jsx)(se,{content:e.content,timestamp:ce(e.timestamp)}):(0,z.jsxs)(`span`,{className:`typing-indicator`,children:[(0,z.jsx)(`span`,{className:`typing-dot`}),(0,z.jsx)(`span`,{className:`typing-dot`}),(0,z.jsx)(`span`,{className:`typing-dot`})]}),e.attachments&&e.attachments.length>0&&(0,z.jsx)(`div`,{className:`message-attachments`,children:e.attachments.map((e,t)=>(0,z.jsxs)(`span`,{className:`message-attachment-chip no-action`,children:[e.mimeType===`application/pdf`?(0,z.jsx)(f,{size:12}):e.mimeType.startsWith(`text/`)?(0,z.jsx)(S,{size:12}):null,(0,z.jsx)(`span`,{children:e.filename})]},t))}),e.role===`visitor`&&(0,z.jsx)(`span`,{className:`message-timestamp`,children:ce(e.timestamp)})]})]},n)}),!t&&o.length>0&&(0,z.jsx)(`div`,{className:`chat-suggestions`,children:o.map(e=>(0,z.jsx)(b,{variant:`suggestion`,onClick:()=>c(e),children:e},e))}),(0,z.jsx)(`div`,{ref:y})]}),!l&&(0,z.jsx)(`button`,{className:`scroll-to-bottom`,onClick:()=>y.current?.scrollIntoView({behavior:`smooth`}),"aria-label":`Scroll to bottom`,children:(0,z.jsx)(s,{size:18})})]})}function ue({selectedItems:e,messages:t,isStreaming:n,copySelected:r,selectAll:i,exitSelection:a,showCopyToast:o}){let[s,c]=(0,k.useState)(!1),u=(0,k.useRef)(null),d=(0,k.useRef)(!1);function f(e){let n=e.lastIndexOf(`_`),r=e.slice(0,n),i=e.slice(n+1),a=parseInt(r,10);return t.find(e=>e.timestamp===a&&e.role===i)?.content??``}function m(e,t){return parseInt(e.slice(0,e.lastIndexOf(`_`)),10)-parseInt(t.slice(0,t.lastIndexOf(`_`)),10)}function h(){let e=[...t].sort((e,t)=>e.timestamp-t.timestamp),n=[];for(let t of e){if(t.hidden||!t.content)continue;let e=t.role===`visitor`?`Visitor`:`Maxy`;n.push(`${e}:\n${t.content}`)}return n.join(`
4
-
5
- ---
6
-
7
- `)}k.useEffect(()=>{if(!s)return;let e=e=>{e.target.closest(`.selection-copy-wrap`)||c(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[s]);function g(){u.current!==null&&(clearTimeout(u.current),u.current=null)}let _=[...t].sort((e,t)=>e.timestamp-t.timestamp),v=_.reduce((e,t,r)=>(t.hidden||n&&r===_.length-1||e.push(`${t.timestamp}_${t.role}`),e),[]),y=v.length>0&&v.every(t=>e.has(t));return(0,z.jsx)(`div`,{className:`chat-input-area`,children:(0,z.jsxs)(`div`,{className:`selection-bar`,children:[(0,z.jsxs)(`div`,{className:`selection-bar-left`,children:[(0,z.jsxs)(`button`,{type:`button`,className:`selection-select-all`,onClick:()=>i(v),disabled:v.length===0,"aria-label":y?`Deselect all`:`Select all`,title:y?`Deselect all`:`Select all`,children:[(0,z.jsx)(E,{size:16}),(0,z.jsx)(`span`,{children:y?`Deselect all`:`Select all`})]}),(0,z.jsxs)(`span`,{className:`selection-count`,children:[e.size,` Selected`]})]}),(0,z.jsxs)(`div`,{className:`selection-copy-wrap`,children:[(0,z.jsxs)(`button`,{type:`button`,className:`selection-copy`,onPointerDown:()=>{if(s){c(!1);return}d.current=!1,u.current=setTimeout(()=>{d.current=!0,c(!0),u.current=null},500)},onPointerUp:g,onPointerLeave:g,onPointerCancel:g,onClick:async()=>{d.current||await r(f,m)},children:[(0,z.jsx)(l,{size:18}),(0,z.jsx)(`span`,{children:`Copy`})]}),s&&(0,z.jsx)(`div`,{className:`copy-menu`,children:(0,z.jsx)(`button`,{type:`button`,className:`copy-menu-item`,onClick:async()=>{let e=h();e&&o(await p(e)),a()},children:`Copy all`})})]}),(0,z.jsx)(`button`,{type:`button`,className:`selection-cancel`,onClick:a,children:`Cancel`})]})})}function de(e){return`${Math.floor(e/60)}:${(e%60).toString().padStart(2,`0`)}`}function fe({data:e,active:t}){let n=[];if(e&&e.length>0&&t){let t=Math.floor(e.length/24);for(let r=0;r<24;r++){let i=e[r*t]??128,a=Math.abs(i-128)/128;n.push(Math.max(.15,a))}}else for(let e=0;e<24;e++)n.push(.15);return(0,z.jsx)(`div`,{className:`voice-waveform`,"aria-hidden":`true`,children:n.map((e,t)=>(0,z.jsx)(`div`,{className:`voice-waveform-bar`,style:{height:`${Math.round(e*100)}%`}},t))})}function pe({state:e,elapsedSeconds:t,waveform:n,onTogglePause:r,onDiscard:o,onSend:s}){if(e===`idle`||e===`error`)return null;let c=e===`recording`,l=e===`paused`,u=e===`sending`;return(0,z.jsxs)(`div`,{className:`voice-recorder`,role:`region`,"aria-label":`Voice recording`,"aria-live":`polite`,children:[(0,z.jsx)(`button`,{type:`button`,className:`voice-trash`,onClick:o,disabled:u,"aria-label":`Discard recording`,children:(0,z.jsx)(i,{size:16})}),(0,z.jsx)(`span`,{className:`voice-timer`,"aria-live":`polite`,"aria-atomic":`true`,children:de(t)}),(0,z.jsx)(fe,{data:n,active:c}),(0,z.jsx)(`button`,{type:`button`,className:`voice-pause`,onClick:r,disabled:u,"aria-label":l?`Resume recording`:`Pause recording`,children:l?(0,z.jsx)(a,{size:14}):(0,z.jsx)(T,{size:14})}),(0,z.jsx)(b,{variant:`send`,type:`button`,onClick:s,disabled:u,loading:u,"aria-label":`Send voice note`,children:(0,z.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,z.jsx)(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`}),(0,z.jsx)(`polyline`,{points:`12 5 19 12 12 19`})]})})]})}var me=[`audio/ogg;codecs=opus`,`audio/webm;codecs=opus`,`audio/webm`,`audio/mp4`];function he(){for(let e of me)if(MediaRecorder.isTypeSupported(e))return e;return``}function ge(e){return e.split(`;`)[0]}function _e(){let[e,t]=(0,k.useState)(`idle`),[n,r]=(0,k.useState)(0),[i,a]=(0,k.useState)(null),[o,s]=(0,k.useState)(null),c=(0,k.useRef)(null),l=(0,k.useRef)(null),u=(0,k.useRef)([]),d=(0,k.useRef)(``),f=(0,k.useRef)(null),p=(0,k.useRef)(0),m=(0,k.useRef)(0),h=(0,k.useRef)(null),g=(0,k.useRef)(null),_=(0,k.useRef)(0),v=(0,k.useCallback)(()=>{if(f.current&&=(clearInterval(f.current),null),_.current&&=(cancelAnimationFrame(_.current),0),c.current&&c.current.state!==`inactive`)try{c.current.stop()}catch{}c.current=null,u.current=[],l.current&&=(l.current.getTracks().forEach(e=>e.stop()),null),h.current&&(h.current.close().catch(()=>{}),h.current=null,g.current=null),m.current=0,p.current=0},[]);(0,k.useEffect)(()=>v,[v]);let y=(0,k.useCallback)(()=>{p.current=Date.now(),f.current=setInterval(()=>{let e=Date.now()-p.current,t=m.current+e;r(Math.floor(t/1e3))},200)},[]),b=(0,k.useCallback)(()=>{f.current&&=(clearInterval(f.current),null);let e=Date.now()-p.current;m.current+=e},[]),x=(0,k.useCallback)(()=>{let e=g.current;if(!e)return;let t=new Uint8Array(e.frequencyBinCount),n=()=>{e.getByteTimeDomainData(t),a(new Uint8Array(t)),_.current=requestAnimationFrame(n)};n()},[]),S=(0,k.useCallback)(()=>{_.current&&=(cancelAnimationFrame(_.current),0)},[]),C=(0,k.useCallback)(async()=>{if(!(e!==`idle`&&e!==`error`)){if(s(null),typeof window<`u`&&!window.isSecureContext){t(`error`),s(`Voice recording requires a secure connection (HTTPS). Use your tunnel URL for voice notes.`);return}if(typeof navigator>`u`||!navigator.mediaDevices?.getUserMedia){t(`error`),s(`Voice recording is not supported in this browser.`);return}if(typeof MediaRecorder>`u`){t(`error`),s(`Voice recording is not supported in this browser.`);return}try{let e=await navigator.mediaDevices.getUserMedia({audio:!0});l.current=e;let n=new AudioContext;h.current=n;let i=n.createMediaStreamSource(e),o=n.createAnalyser();o.fftSize=256,i.connect(o),g.current=o;let s=he();d.current=s;let f=new MediaRecorder(e,s?{mimeType:s}:void 0);c.current=f,u.current=[],f.ondataavailable=e=>{e.data.size>0&&u.current.push(e.data)},e.getAudioTracks()[0]?.addEventListener(`ended`,()=>{v(),t(`idle`),r(0),a(null)}),f.start(1e3),t(`recording`),r(0),y(),x()}catch(e){v(),t(`error`),e instanceof DOMException?e.name===`NotAllowedError`?s(`Microphone access was denied. Check your browser permissions to enable voice recording.`):e.name===`NotFoundError`?s(`No microphone found. Connect a microphone to use voice recording.`):s(`Microphone error: ${e.message}`):s(`Could not start recording.`)}}},[e,v,y,x]),w=(0,k.useCallback)(()=>{let n=c.current;n&&(e===`recording`&&n.state===`recording`?(n.pause(),b(),S(),t(`paused`)):e===`paused`&&n.state===`paused`&&(n.resume(),y(),x(),t(`recording`)))},[e,b,y,x,S]),T=(0,k.useCallback)(()=>{e!==`recording`&&e!==`paused`||(v(),t(`idle`),r(0),a(null))},[e,v]),E=(0,k.useCallback)(async()=>{if(e!==`recording`&&e!==`paused`)return null;let n=c.current;if(!n)return null;let i=e===`recording`?Date.now()-p.current:0;return m.current+i<1e3?(T(),null):(t(`sending`),b(),S(),new Promise(e=>{n.onstop=()=>{let i=d.current||n.mimeType||`audio/webm`,o=new Blob(u.current,{type:ge(i)});v(),t(`idle`),r(0),a(null),e(o.size>0?o:null)},n.stop()}))},[e,T,b,S,v]);return(0,k.useEffect)(()=>{if(e!==`error`)return;let n=setTimeout(()=>{t(`idle`),s(null)},8e3);return()=>clearTimeout(n)},[e]),{state:e,elapsedSeconds:n,waveform:i,errorMessage:o,start:C,togglePause:w,discard:T,send:E}}function ve(e,t){let n=e.split(`;`)[0].trim().toLowerCase();return t.has(n)}function ye({input:e,setInput:t,isStreaming:n,pendingFiles:r,setPendingFiles:i,attachError:a,setAttachError:o,isDragOver:s,setIsDragOver:c,inputRef:l,onSubmit:d,onSendVoiceNote:p}){let m=(0,k.useRef)(null),g=_e(),_=g.state===`recording`||g.state===`paused`||g.state===`sending`,v=!_&&!n&&!e.trim()&&r.length===0;async function y(){let e=await g.send();if(!e)return;let t=e.type===`audio/ogg`?`.ogg`:e.type===`audio/mp4`?`.m4a`:`.webm`;p(new File([e],`voice-note${t}`,{type:e.type}))}function x(e){o(null);let t=e.find(e=>!ve(e.type,j));if(t){o(`Unsupported file type: "${t.type}". Supported: images, PDF, plain text, markdown, CSV, calendar, voice notes.`);return}let n=e.find(e=>e.size>M);if(n){o(`"${n.name}" exceeds the 50 MB limit.`);return}i(t=>[...t,...e].slice(0,5))}function T(e){e.preventDefault(),c(!0)}function E(){c(!1)}function D(e){e.preventDefault(),c(!1),x([...e.dataTransfer.files])}return(0,z.jsxs)(`div`,{className:`chat-input-area`,children:[(0,z.jsx)(`input`,{ref:m,type:`file`,multiple:!0,accept:A,style:{display:`none`},onChange:e=>{e.target.files&&x([...e.target.files]),e.target.value=``}}),r.length>0&&(0,z.jsx)(`div`,{className:`attachment-strip`,children:r.map((e,t)=>(0,z.jsxs)(`div`,{className:`attachment-chip`,children:[e.type.startsWith(`image/`)?(0,z.jsx)(`img`,{src:URL.createObjectURL(e),alt:e.name,className:`attachment-chip-thumb`}):e.type.startsWith(`audio/`)?(0,z.jsx)(C,{size:14}):e.type===`application/pdf`?(0,z.jsx)(f,{size:14}):(0,z.jsx)(S,{size:14}),(0,z.jsx)(`span`,{className:`attachment-chip-name`,children:e.name}),(0,z.jsx)(`button`,{type:`button`,className:`attachment-chip-remove`,onClick:()=>i(e=>e.filter((e,n)=>n!==t)),"aria-label":`Remove ${e.name}`,children:`×`})]},t))}),a&&(0,z.jsx)(`p`,{className:`attach-error`,children:a}),g.state===`error`&&g.errorMessage&&(0,z.jsxs)(`p`,{className:`voice-error`,role:`alert`,children:[(0,z.jsx)(C,{size:14}),g.errorMessage]}),(0,z.jsx)(u,{inputRef:l}),_?(0,z.jsx)(`div`,{className:`chat-form voice-active`,children:(0,z.jsx)(pe,{state:g.state,elapsedSeconds:g.elapsedSeconds,waveform:g.waveform,onTogglePause:g.togglePause,onDiscard:g.discard,onSend:y})}):(0,z.jsxs)(`form`,{className:`chat-form${s?` drag-over`:``}`,onSubmit:d,onDragOver:T,onDragLeave:E,onDrop:D,onPaste:e=>{let t=e.clipboardData?.items;if(!t)return;let n=[];for(let e of t){if(e.kind!==`file`)continue;let t=e.getAsFile();if(!t)continue;let r=t.type.split(`/`)[1]?.replace(`jpeg`,`jpg`)||`png`;n.push(new File([t],`pasted-image-${Date.now()}.${r}`,{type:t.type}))}n.length>0&&x(n)},children:[(0,z.jsx)(b,{variant:`icon`,type:`button`,onClick:()=>m.current?.click(),disabled:n,"aria-label":`Attach file`,children:(0,z.jsx)(w,{size:14})}),(0,z.jsx)(h,{ref:l,value:e,onChange:t}),v?(0,z.jsx)(b,{variant:`send`,type:`button`,onClick:g.start,disabled:n,"aria-label":`Record voice note`,children:(0,z.jsx)(C,{size:14})}):(0,z.jsx)(b,{variant:`send`,type:`submit`,disabled:n||!e.trim()&&r.length===0,"aria-label":`Send message`,children:(0,z.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,z.jsx)(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`}),(0,z.jsx)(`polyline`,{points:`12 5 19 12 12 19`})]})})]})]})}var be=[];function xe(){let[e,t]=(0,k.useState)(``),[i,a]=(0,k.useState)([]),[o,s]=(0,k.useState)(!1),[l,u]=(0,k.useState)(null),[f,p]=(0,k.useState)(be),[h,g]=(0,k.useState)(!0),_=(0,k.useRef)(null),{selectionMode:v,selectedItems:y,copyToast:b,exitSelection:x,enterSelection:S,toggleSelectItem:C,selectAll:w,copySelected:T,showCopyToast:O}=c(),A=(0,k.useRef)(()=>{}),j=te((0,k.useCallback)(e=>{A.current(e)},[])),{sessionId:M,cacheKeyRef:N,sessionError:P,pageState:F,agentDisplayName:ee,agentImage:I,agentImageShape:B,showAgentName:V,branding:H,ensureSession:U,startNewSession:W,resumedRef:re,resumeMessagesRef:G,groupContext:K,groupSlug:ie}=j,{messages:q,setMessages:J,isStreaming:Y,sendMessage:X,sendGreeting:Z}=L({cacheKeyRef:N,ensureSession:U,sessionError:P,pageState:F,inputRef:_});(0,k.useEffect)(()=>{A.current=Z},[Z]),R({cacheKeyRef:N,groupSlug:ie,isStreaming:Y,setMessages:J}),(0,k.useEffect)(()=>{let e=!1;return(async()=>{let t=await U();if(!e&&t){if(re.current&&G.current&&G.current.length>0){let e=G.current.map(e=>({role:e.role,content:e.content,timestamp:e.timestamp}));e.sort((e,t)=>e.timestamp-t.timestamp),J(e),G.current=null;return}Z(t)}})(),()=>{e=!0}},[]),(0,k.useEffect)(()=>{F===`chat`&&_.current?.focus()},[F]),(0,k.useEffect)(()=>{if(F!==`chat`)return;history.pushState({maxyChat:!0},``);function e(){history.pushState({maxyChat:!0},``)}return window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[F]),(0,k.useEffect)(()=>{if(!H)return;let e=document.documentElement;if(H.primaryColor&&(e.style.setProperty(`--sage`,H.primaryColor),e.style.setProperty(`--sage-hover`,H.primaryColor),e.style.setProperty(`--sage-subtle`,H.primaryColor+`14`),e.style.setProperty(`--sage-glow`,H.primaryColor+`26`)),H.accentColor&&e.style.setProperty(`--visitor-bubble`,H.accentColor),H.backgroundColor&&e.style.setProperty(`--bg`,H.backgroundColor),document.title=H.name,H.primaryColor){let e=document.querySelector(`meta[name="theme-color"]`);e||(e=document.createElement(`meta`),e.name=`theme-color`,document.head.appendChild(e)),e.content=H.primaryColor}if(H.faviconUrl){let e=document.querySelector(`link[rel="icon"]`);e||(e=document.createElement(`link`),e.rel=`icon`,document.head.appendChild(e)),e.href=H.faviconUrl}},[H]),(0,k.useEffect)(()=>{function e(e){e.key===`Escape`&&v&&x()}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[v,x]);function ae(){Y||(J([]),p(be),W())}function Q(e){if(!e&&i.length===0||Y)return;J(e=>e.map(e=>e.components?.some(e=>!e.submitted)?{...e,components:e.components.map(e=>e.submitted?e:{...e,submitted:!0})}:e)),p(t=>t.filter(t=>t!==e)),g(!0);let n=[...i];t(``),a([]),u(null),X(e,{files:n})}function $(t){t.preventDefault(),Q(e.trim()),_.current?.resetHeight()}return(0,z.jsxs)(`div`,{className:`chat-page`,children:[(0,z.jsxs)(`header`,{className:`chat-header`,children:[(0,z.jsx)(`img`,{src:I||H?.logoUrl||r,alt:H?.name||n.productName,className:`chat-logo${I&&B===`circle`?` chat-logo--circle`:``}${I&&B===`rounded`?` chat-logo--rounded`:``}`,onError:e=>{e.target.src=H?.logoUrl||r}}),(0,z.jsxs)(`div`,{className:`chat-header-text`,children:[V!==`none`&&(0,z.jsx)(`h1`,{className:`chat-tagline`,children:K?.groupName||V&&ee||H?.name||n.productName}),(0,z.jsx)(`p`,{className:`chat-intro`,children:K?`${K.participants.length} participants`:H?.tagline||``}),(0,z.jsx)(`p`,{className:`chat-ai-indicator`,children:`AI assistant`})]}),F===`chat`&&!v&&(0,z.jsxs)(`div`,{className:`chat-header-actions`,children:[(0,z.jsx)(`button`,{className:`chat-header-action`,onClick:ae,disabled:Y,title:`New conversation`,"aria-label":`New conversation`,children:(0,z.jsx)(D,{size:16})}),(0,z.jsx)(`button`,{className:`chat-header-action`,onClick:S,title:`Select messages`,"aria-label":`Select messages`,children:(0,z.jsx)(E,{size:16})})]})]}),F===`loading`&&(0,z.jsx)(`div`,{className:`gate-wrap`,children:(0,z.jsx)(`div`,{className:`gate-loading`,children:(0,z.jsx)(`span`,{className:`spinner`})})}),F===`auth-required`&&(0,z.jsx)(ne,{gateState:j.gateState,setGateState:j.setGateState,grantInfo:j.grantInfo,resolvedSlugRef:j.resolvedSlugRef}),F===`chat`&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(le,{messages:q,isStreaming:Y,sessionError:P,selectionMode:v,selectedItems:y,toggleSelectItem:C,remainingSuggestions:f,onSuggestionClick:Q,isAtBottom:h,setIsAtBottom:g,isGroup:!!K,sessionId:M}),v?(0,z.jsx)(ue,{selectedItems:y,messages:q,isStreaming:Y,copySelected:T,selectAll:w,exitSelection:x,showCopyToast:O}):(0,z.jsx)(ye,{input:e,setInput:t,isStreaming:Y,pendingFiles:i,setPendingFiles:a,attachError:l,setAttachError:u,isDragOver:o,setIsDragOver:s,inputRef:_,onSubmit:$,onSendVoiceNote:e=>{t(``),a([]),u(null),X(`[Voice note]`,{files:[e]})}})]}),b&&(0,z.jsx)(`span`,{className:`copy-toast${b===`failed`?` copy-toast-failed`:``}`,children:b===`copied`?`Copied`:`Copy failed`}),(0,z.jsxs)(`footer`,{className:`chat-footer`,children:[(0,z.jsxs)(`a`,{href:m,children:[d,` `,`↗`]}),M&&(0,z.jsxs)(`span`,{style:{opacity:.35,fontSize:`10px`,fontFamily:`monospace`,marginLeft:`1rem`},children:[`Conversation · `,M.slice(0,8)]})]})]})}(0,O.createRoot)(document.getElementById(`root`)).render((0,z.jsx)(xe,{}));export{U as t};
@@ -1 +0,0 @@
1
- import{h as e}from"./src-B6XdH6xq.js";import"./chunk-ICPOFSXX-CPnMJplL.js";import"./dist-Bd4S37oi.js";import"./chunk-5PVQY5BW-CwPHRVN8.js";import"./chunk-U2HBQHQK-BmfZG8e4.js";import"./chunk-BSJP7CBP-DP7LTBll.js";import"./chunk-ZZ45TVLE-abkGirrZ.js";import"./chunk-55IACEB6-BRJOZLpU.js";import"./chunk-EDXVE4YY-7443hrYZ.js";import"./chunk-X2U36JSP-Da2yJL2u.js";import"./chunk-5FUZZQ4R-BHjWhwhn.js";import"./chunk-ENJZ2VHE-BTnmmnmX.js";import"./chunk-336JU56O-DwP7g5ns.js";import{i as t,n,r,t as i}from"./chunk-OYMX7WX6-DCQ5Q4RS.js";var a={parser:n,get db(){return new i(2)},renderer:r,styles:t,init:e(e=>{e.state||={},e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};