@runfusion/fusion 0.76.0-beta.1 → 0.76.0-beta.2

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 (138) hide show
  1. package/dist/bin.js +503 -213
  2. package/dist/child-process-worker.js +466 -207
  3. package/dist/client/.vite/manifest.json +260 -260
  4. package/dist/client/assets/{AgentDetailView-Cbl1sw6i.js → AgentDetailView-gak4EWTI.js} +1 -1
  5. package/dist/client/assets/{AgentPermissionPolicyEditor-DD1U5M9p.js → AgentPermissionPolicyEditor-DP1QbZL-.js} +1 -1
  6. package/dist/client/assets/{AgentsView-BMcCbple.js → AgentsView-DAMRTKzI.js} +3 -3
  7. package/dist/client/assets/ChatView-iE-2gf5P.js +13 -0
  8. package/dist/client/assets/{CommandCenter-D7mcD61V.js → CommandCenter-B6RnkLYm.js} +1 -1
  9. package/dist/client/assets/{DevServerView-DaqCn0p5.js → DevServerView-DcFL_LzK.js} +1 -1
  10. package/dist/client/assets/{DirectoryPicker-CLdqqqYN.js → DirectoryPicker-CtjqrYoO.js} +1 -1
  11. package/dist/client/assets/{DocumentsView-BOROVxPm.js → DocumentsView-BkAe2S4H.js} +1 -1
  12. package/dist/client/assets/{EvalsView-BQMXRUlQ.js → EvalsView-CbGA9dMn.js} +1 -1
  13. package/dist/client/assets/{ExperimentalAgentOnboardingModal-1GNeCIQT.js → ExperimentalAgentOnboardingModal-CMgO_S8T.js} +1 -1
  14. package/dist/client/assets/{GoalsView-Cr3c_2GC.js → GoalsView-_3P9J5sf.js} +1 -1
  15. package/dist/client/assets/{InsightsView-DgVBVQM4.js → InsightsView-DOhO7xH5.js} +1 -1
  16. package/dist/client/assets/{MemoryView-C0VzzMSw.js → MemoryView-DwJas8vi.js} +1 -1
  17. package/dist/client/assets/{PiExtensionsManager-D1kkkVtP.js → PiExtensionsManager-B_LiW_e9.js} +1 -1
  18. package/dist/client/assets/{PluginManager-BW-_Zyo5.js → PluginManager-BkB6WLQc.js} +1 -1
  19. package/dist/client/assets/{PullRequestView-Cmlo4nWA.js → PullRequestView-DcH5tmYc.js} +1 -1
  20. package/dist/client/assets/{ReportModal-BWuaroTF.js → ReportModal-BOEbqtqG.js} +1 -1
  21. package/dist/client/assets/{ResearchView-BmkF_vZU.js → ResearchView-Dp6V42pI.js} +1 -1
  22. package/dist/client/assets/{SecretsView-DVc8Hky0.js → SecretsView-BCqXHB2L.js} +1 -1
  23. package/dist/client/assets/{SessionTerminal-DCXrxA57.js → SessionTerminal-CkdoQv4y.js} +1 -1
  24. package/dist/client/assets/{SettingsModal-DZ32F1c-.js → SettingsModal-D4Fn4GlS.js} +3 -3
  25. package/dist/client/assets/{SettingsModal-DqwpLnDU.js → SettingsModal-Dc7YG6KB.js} +1 -1
  26. package/dist/client/assets/{SettingsTextareaRow-B5spAoOY.js → SettingsTextareaRow-WSkBoAOO.js} +1 -1
  27. package/dist/client/assets/{SetupWizardModal-VTBLyFzr.js → SetupWizardModal-VTrJAsKd.js} +2 -2
  28. package/dist/client/assets/{SkillsView-CR91ey9d.js → SkillsView-CXeXOxfF.js} +1 -1
  29. package/dist/client/assets/{WorkflowNodeEditor-BzGh_Fd9.js → WorkflowNodeEditor-DoxLGPRF.js} +1 -1
  30. package/dist/client/assets/{agent-import-generation-D27NKQsr.js → agent-import-generation-upc0yw-M.js} +1 -1
  31. package/dist/client/assets/{agentsOrgChartLayout-C2K_M3x3.js → agentsOrgChartLayout-C3iumMrW.js} +1 -1
  32. package/dist/client/assets/{architectureDiagram-3BPJPVTR-BQy8UcRx.js → architectureDiagram-3BPJPVTR-D6jqc3fJ.js} +1 -1
  33. package/dist/client/assets/{blockDiagram-GPEHLZMM-CZG1bqFQ.js → blockDiagram-GPEHLZMM-DY3AKuPD.js} +1 -1
  34. package/dist/client/assets/{c4Diagram-AAUBKEIU-CZmO_kg3.js → c4Diagram-AAUBKEIU-CpD52V4g.js} +1 -1
  35. package/dist/client/assets/channel-CaxOu15c.js +1 -0
  36. package/dist/client/assets/{chunk-2J33WTMH-jsad6DTE.js → chunk-2J33WTMH-CPeIHyAX.js} +1 -1
  37. package/dist/client/assets/{chunk-4BX2VUAB-DX7SuvwP.js → chunk-4BX2VUAB-ivAwI4xM.js} +1 -1
  38. package/dist/client/assets/{chunk-55IACEB6-De20xFgU.js → chunk-55IACEB6-BtVQ5XaZ.js} +1 -1
  39. package/dist/client/assets/{chunk-727SXJPM-CNiri9yW.js → chunk-727SXJPM-1eap1vDU.js} +1 -1
  40. package/dist/client/assets/{chunk-AQP2D5EJ-DvDqG-ax.js → chunk-AQP2D5EJ-B2NB3BW9.js} +1 -1
  41. package/dist/client/assets/{chunk-FMBD7UC4-DkMdKaUq.js → chunk-FMBD7UC4-Hk_smNYv.js} +1 -1
  42. package/dist/client/assets/{chunk-ND2GUHAM-Do5BwIrI.js → chunk-ND2GUHAM-BmGCAojk.js} +1 -1
  43. package/dist/client/assets/{chunk-QZHKN3VN-BnJgt9vl.js → chunk-QZHKN3VN-D0aXZ8CV.js} +1 -1
  44. package/dist/client/assets/classDiagram-4FO5ZUOK-DXIkGbsl.js +1 -0
  45. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DXIkGbsl.js +1 -0
  46. package/dist/client/assets/{cose-bilkent-S5V4N54A-D-ivAzzF.js → cose-bilkent-S5V4N54A-DAbu_gnF.js} +1 -1
  47. package/dist/client/assets/{dagre-BM42HDAG-Bpd9L0or.js → dagre-BM42HDAG-BdmLlrDJ.js} +1 -1
  48. package/dist/client/assets/{dashboard-view-DSvVO6Vr.js → dashboard-view-BoFBSXUn.js} +1 -1
  49. package/dist/client/assets/{dashboard-view-CgBo8Ctn.js → dashboard-view-CULL1yhL.js} +1 -1
  50. package/dist/client/assets/{dashboard-view-C-XU9CVv.js → dashboard-view-CxXMDfNY.js} +1 -1
  51. package/dist/client/assets/{dashboard-view-DbaRE8Ma.js → dashboard-view-PRCWCSLm.js} +1 -1
  52. package/dist/client/assets/{diagram-2AECGRRQ-B6TT1NWU.js → diagram-2AECGRRQ-PpqLbVUA.js} +1 -1
  53. package/dist/client/assets/{diagram-5GNKFQAL-DpRS2yRw.js → diagram-5GNKFQAL-9rkGmTwh.js} +1 -1
  54. package/dist/client/assets/{diagram-KO2AKTUF-BVbZr02C.js → diagram-KO2AKTUF-BT-efOMo.js} +1 -1
  55. package/dist/client/assets/{diagram-LMA3HP47-DzENbfal.js → diagram-LMA3HP47-w79OWFxg.js} +1 -1
  56. package/dist/client/assets/{diagram-OG6HWLK6-BIePG5SY.js → diagram-OG6HWLK6-Bye9I5IO.js} +1 -1
  57. package/dist/client/assets/{erDiagram-TEJ5UH35-CQo3WBwo.js → erDiagram-TEJ5UH35-aodREgDf.js} +1 -1
  58. package/dist/client/assets/{flowDiagram-I6XJVG4X-Ct2H4jYo.js → flowDiagram-I6XJVG4X-D0DKItY3.js} +1 -1
  59. package/dist/client/assets/{folder-open-DAh8mpTX.js → folder-open-CqvaMJvx.js} +1 -1
  60. package/dist/client/assets/{ganttDiagram-6RSMTGT7-DyOLCG4B.js → ganttDiagram-6RSMTGT7-CZVApkvw.js} +1 -1
  61. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-sC28-su3.js → gitGraphDiagram-PVQCEYII-D_ynwJ4p.js} +1 -1
  62. package/dist/client/assets/index-DWRJyaa3.js +2818 -0
  63. package/dist/client/assets/{infoDiagram-5YYISTIA-Q81_5aBZ.js → infoDiagram-5YYISTIA-pJG6zxjk.js} +1 -1
  64. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-Cwkjs0z5.js → ishikawaDiagram-YF4QCWOH-nFZ5laUo.js} +1 -1
  65. package/dist/client/assets/{journeyDiagram-JHISSGLW-BXcBV1Bc.js → journeyDiagram-JHISSGLW-CWpCaAIe.js} +1 -1
  66. package/dist/client/assets/{kanban-definition-UN3LZRKU-BI7hW892.js → kanban-definition-UN3LZRKU-ATkPspKa.js} +1 -1
  67. package/dist/client/assets/{mermaid.core-B8oDA6jj.js → mermaid.core-CDXPNs7a.js} +4 -4
  68. package/dist/client/assets/{mindmap-definition-RKZ34NQL-COG6_9eD.js → mindmap-definition-RKZ34NQL-BkqS9tpe.js} +1 -1
  69. package/dist/client/assets/{pieDiagram-4H26LBE5-D11brZ_N.js → pieDiagram-4H26LBE5-DEUyVLs-.js} +1 -1
  70. package/dist/client/assets/{puzzle-D3_Z_rlW.js → puzzle-DQ0y1-XK.js} +1 -1
  71. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-jmhDVZcv.js → quadrantDiagram-W4KKPZXB-ESBJNK5c.js} +1 -1
  72. package/dist/client/assets/{requirementDiagram-4Y6WPE33-BKCUWI1E.js → requirementDiagram-4Y6WPE33-CqPs7zcv.js} +1 -1
  73. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-HsZdEl2t.js → sankeyDiagram-5OEKKPKP-CkFN0m14.js} +1 -1
  74. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-CsDf7Fup.js → sequenceDiagram-3UESZ5HK-Dx2nDuMO.js} +1 -1
  75. package/dist/client/assets/{shield-alert-C16k8wNu.js → shield-alert-BS05s4RM.js} +1 -1
  76. package/dist/client/assets/{standing-instructions-template-BqAyftqe.js → standing-instructions-template-xprxYNHm.js} +1 -1
  77. package/dist/client/assets/{stateDiagram-AJRCARHV-fvzWhltB.js → stateDiagram-AJRCARHV-EUPmRFGd.js} +1 -1
  78. package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-cnt42Sr_.js → stateDiagram-v2-BHNVJYJU-DcQ2mhi5.js} +1 -1
  79. package/dist/client/assets/{timeline-definition-PNZ67QCA-DsZFCSMb.js → timeline-definition-PNZ67QCA-D4YO_3V-.js} +1 -1
  80. package/dist/client/assets/{upload-_s5sL5Pq.js → upload-BjyBtxo7.js} +1 -1
  81. package/dist/client/assets/{users-DH1U5ISc.js → users-D5ogZ7WQ.js} +1 -1
  82. package/dist/client/assets/{vennDiagram-CIIHVFJN-B3KDWS-e.js → vennDiagram-CIIHVFJN-BT5_XuQL.js} +1 -1
  83. package/dist/client/assets/{wardley-L42UT6IY-BKs5MtQS.js → wardley-L42UT6IY-X_ZMW457.js} +1 -1
  84. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-CNsEoXVB.js → wardleyDiagram-YWT4CUSO-GK9nONHU.js} +1 -1
  85. package/dist/client/assets/{xychartDiagram-2RQKCTM6-kq_gW4QC.js → xychartDiagram-2RQKCTM6-Dw3zXHAq.js} +1 -1
  86. package/dist/client/index.html +1 -1
  87. package/dist/client/version.json +1 -1
  88. package/dist/droid-cli/package.json +1 -1
  89. package/dist/extension.js +647 -207
  90. package/dist/migrations/0057_fn_9004_project_ownership_default_reconciliation.sql +13 -0
  91. package/dist/migrations/0058_fn_9014_message_archive.sql +13 -0
  92. package/dist/pi-claude-cli/package.json +5 -5
  93. package/dist/plugin-sdk/index.js +69 -23
  94. package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +69 -23
  95. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  96. package/dist/plugins/fusion-plugin-claude-runtime/bundled.js +69 -23
  97. package/dist/plugins/fusion-plugin-claude-runtime/package.json +1 -1
  98. package/dist/plugins/fusion-plugin-cli-printing-press/bundled.js +69 -23
  99. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  100. package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +69 -23
  101. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  102. package/dist/plugins/fusion-plugin-cursor-runtime/bundled.js +69 -23
  103. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  104. package/dist/plugins/fusion-plugin-dependency-graph/bundled.js +69 -23
  105. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  106. package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +71 -25
  107. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  108. package/dist/plugins/fusion-plugin-grok-runtime/bundled.js +69 -23
  109. package/dist/plugins/fusion-plugin-grok-runtime/package.json +1 -1
  110. package/dist/plugins/fusion-plugin-hermes-runtime/bundled.js +69 -23
  111. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  112. package/dist/plugins/fusion-plugin-linear-import/bundled.js +69 -23
  113. package/dist/plugins/fusion-plugin-linear-import/package.json +1 -1
  114. package/dist/plugins/fusion-plugin-omp-runtime/bundled.js +69 -23
  115. package/dist/plugins/fusion-plugin-omp-runtime/package.json +1 -1
  116. package/dist/plugins/fusion-plugin-openclaw-runtime/bundled.js +69 -23
  117. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  118. package/dist/plugins/fusion-plugin-paperclip-runtime/bundled.js +69 -23
  119. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  120. package/dist/plugins/fusion-plugin-quality/bundled.js +69 -23
  121. package/dist/plugins/fusion-plugin-quality/package.json +1 -1
  122. package/dist/plugins/fusion-plugin-reports/bundled.js +69 -23
  123. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  124. package/dist/plugins/fusion-plugin-roadmap/bundled.js +69 -23
  125. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  126. package/dist/plugins/fusion-plugin-todos/bundled.js +69 -23
  127. package/dist/plugins/fusion-plugin-todos/package.json +1 -1
  128. package/dist/plugins/fusion-plugin-whatsapp-chat/bundled.js +69 -23
  129. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  130. package/package.json +3 -3
  131. package/skill/fusion/SKILL.md +1 -1
  132. package/skill/fusion/references/extension-tools.md +22 -0
  133. package/skill/fusion/references/fusion-capabilities.md +2 -0
  134. package/dist/client/assets/ChatView-DcM-ARpZ.js +0 -13
  135. package/dist/client/assets/channel-Cwl9FefC.js +0 -1
  136. package/dist/client/assets/classDiagram-4FO5ZUOK-BZtWCoHC.js +0 -1
  137. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-BZtWCoHC.js +0 -1
  138. package/dist/client/assets/index-BlGpMJSZ.js +0 -2818
@@ -1,13 +0,0 @@
1
- import{r as a,j as t}from"./vendor-react-SZ_qB27O.js";import{c as ti,ar as Et,ap as bt,aq as xa,bz as Ns,dr as Hi,ds as Ui,dt as ca,av as X,du as Ki,dv as Dt,dw as At,dx as ya,dy as Vi,dz as Wi,dA as Xi,dB as qi,dC as Gi,dD as Qi,bh as Yi,cZ as ka,dE as ke,aZ as Ji,bN as ni,ci as xn,dF as Zi,am as yn,dG as eo,dH as to,c6 as no,F as ao,aJ as so,b3 as bn,Y as io,d8 as oo,dI as ro,dJ as co,f as lo,aX as uo,dK as mo,dL as ai,dM as si,dN as ho,dO as fo,K as go,dP as po,dQ as vo,dR as Rs,dS as bo,dT as wo,dU as js,y as xo,dV as yo,q as ko,u as Co,aH as So,dW as la,C as mn,dX as hn,dY as As,v as da,P as gt,V as Mo,c8 as Ts,db as Es,da as No,X as Ds,aI as Ro,dZ as jo,x as ua,bM as Ao,d_ as ma,d$ as Is,e0 as ha,e1 as Ls,e2 as Ps,e3 as Fs,e4 as To,e5 as Eo,bK as $s}from"./index-BlGpMJSZ.js";import{u as Be}from"./vendor-i18n-Duky4gdQ.js";import{SessionTerminal as _s}from"./SessionTerminal-DCXrxA57.js";import"./vendor-codemirror-CcrtqoCy.js";import"./vendor-reactflow-BlIeoTu4.js";import"./vendor-xterm-BNq00GSj.js";import"./shield-alert-C16k8wNu.js";/**
2
- * @license lucide-react v1.7.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const Do=[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]],ii=ti("hash",Do);/**
7
- * @license lucide-react v1.7.0 - ISC
8
- *
9
- * This source code is licensed under the ISC license.
10
- * See the LICENSE file in the root directory of this source tree.
11
- */const Io=[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]],Lo=ti("tag",Io);function fn(){return typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now()}function Po(){try{typeof import.meta<"u"}catch{}try{if(typeof localStorage<"u")return localStorage.getItem("kb-debug-room-open")==="1"}catch{}return!1}function fa(s,r){const m=Po(),g=r?.warm===!0,u=fn(),h=new Map;let k=!1,C=!1;return{mark(j){k||C||!m||h.has(j)||h.set(j,fn())},complete:j=>{if(!m||k||C){k=!0;return}k=!0,h.set("complete",fn());const I=Array.from(h.entries()).sort((E,N)=>E[1]-N[1]);let M=u;const i={};for(const[E,N]of I)i[E]=Math.max(0,N-M),M=N;const v=Math.max(0,fn()-u);try{console.debug("[room-open]",{roomId:s,warm:g,totalMs:v,phases:i,...j??{}})}catch{}},cancel(){C=!0,k=!0}}}const ze="fusion:chat-active-room";class oi extends Error{roomId;constructor(r,m){super(r),this.name="RoomMessageDeliveredButReplyFailedError",this.roomId=m}}function Ca(s){return[...s].sort((r,m)=>new Date(m.updatedAt).getTime()-new Date(r.updatedAt).getTime())}function Ge(s,r){const m=s.findIndex(u=>u.id===r.id);if(m===-1)return Ca([r,...s]);const g=[...s];return g[m]=r,Ca(g)}function Le(s){try{return JSON.parse(s.data)}catch{return null}}function ga(s){return s.slice().reverse()}function Fo(s,r,m){return{id:`temp-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,roomId:s,role:"user",content:r,thinkingOutput:null,metadata:null,senderAgentId:null,mentions:[],...m?.length?{attachments:m}:{},createdAt:new Date().toISOString()}}function zs(s,r,m){if(s.some(u=>u.id===r.id))return s;const g=m?s.findIndex(u=>u.id===m):-1;if(g>=0){const u=[...s];return u[g]=r,u}if(r.role==="user"){const u=s.findIndex(h=>h.role==="user"&&h.id.startsWith("temp-")&&h.content.trim()===r.content.trim());if(u>=0){const h=[...s];return h[u]=r,h}}return[...s,r]}function $o(s,r){const{t:m}=Be("app"),g=`${Et.CHAT_ROOMS}:${s??"global"}`,u=`${Et.ACTIVE_CHAT_ROOM_ID}:${s??"global"}`,h=a.useCallback(c=>`${Et.CHAT_ROOM_MESSAGES_PREFIX}${s??"global"}:${c}`,[s]),k=a.useCallback(c=>`${Et.CHAT_ROOM_MEMBERS_PREFIX}${s??"global"}:${c}`,[s]),[C,b]=a.useState(()=>{const c=bt(g,{maxAgeMs:xa});return Array.isArray(c)?c:[]}),[j,I]=a.useState(()=>C.length===0),[M,i]=a.useState(null),[v,E]=a.useState(()=>{const c=bt(u,{maxAgeMs:Ns});return c?C.find(p=>p.id===c)??null:null}),[N,S]=a.useState([]),[l,L]=a.useState([]),[F,U]=a.useState(!1),B=a.useRef(C),T=a.useRef(v),Q=a.useRef(0),se=a.useRef(s);B.current=C,T.current=v,se.current!==s&&(se.current=s,Q.current+=1);const Y=a.useCallback(async c=>{if(!c){S([]),L([]),U(!1);return}const p=fa(c.id,{warm:!1});p.mark("select");const y=bt(h(c.id),{maxAgeMs:Hi}),f=bt(k(c.id),{maxAgeMs:xa}),A=Array.isArray(y)&&y.length>0,_=Array.isArray(f)&&f.length>0;A||_?(p.mark("cache-hit"),A&&(L(y),p.mark("hydrate")),_&&S(f),U(!1)):(L([]),U(!0));try{const[J,pe]=await Promise.all([Ui(c.id,s),ca(c.id,{limit:100,order:"desc"},s)]);p.mark("members-fetch"),p.mark("messages-fetch"),X(k(c.id),J.members,{maxBytes:5e5});const Z=ga(pe.messages);X(h(c.id),Z,{maxBytes:5e5}),T.current?.id===c.id&&(S(J.members),L(Z),p.mark("hydrate"))}catch{!A&&!_&&(S([]),L([]))}finally{U(!1),p.complete({warm:A,membersCached:_})}},[k,h,s]),D=a.useCallback(async()=>{B.current.length===0&&I(!0);try{const c=await Ki({},s),p=Ca(c.rooms);b(p),X(g,p,{maxBytes:5e5}),i(null);const y=bt(u,{maxAgeMs:Ns})??Dt(ze,s);if(y){const f=p.find(A=>A.id===y)??null;f?(E(f),Y(f)):(At(ze,s),X(u,"",{maxBytes:5e5}))}}catch(c){const p=c instanceof Error?c.message:m("chatRooms.error.failedToLoad","Failed to load chat rooms");i(p),r?.(p,"error")}finally{I(!1)}},[u,r,Y,s,g]),O=a.useCallback(c=>{if(!c){T.current=null,E(null),At(ze,s),X(u,"",{maxBytes:5e5}),Y(null);return}const p=B.current.find(y=>y.id===c)??null;T.current=p,E(p),p&&(ya(ze,p.id,s),X(u,p.id,{maxBytes:5e5}),Y(p))},[u,Y,s]),R=a.useCallback(async c=>{const y=(await Vi({name:c.name,memberAgentIds:c.memberAgentIds},s)).room;return b(f=>Ge(f,y)),T.current=y,E(y),ya(ze,y.id,s),X(u,y.id,{maxBytes:5e5}),await Y(y),y},[u,Y,s]),$=a.useCallback(async(c,p)=>{const f=(await Wi(c,p,s)).room;return b(A=>Ge(A,f)),T.current?.id===f.id&&(T.current=f,E(f)),f},[s]),ie=a.useCallback(async c=>{await Xi(c,s),b(p=>p.filter(y=>y.id!==c)),X(h(c),[],{maxBytes:5e5}),X(k(c),[],{maxBytes:5e5}),T.current?.id===c&&(T.current=null,E(null),S([]),L([]),At(ze,s),X(u,"",{maxBytes:5e5}))},[u,k,h,s]),ae=a.useCallback(async(c,p)=>{const y=T.current,f=y?.id;if(!f)throw new Error(m("chatRooms.error.selectRoomFirst","Select a room before sending a message"));const A=fa(f,{warm:!1}),_=p?.files?.map(Z=>({id:`upload-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,filename:Z.name,originalName:Z.name,mimeType:Z.type||"application/octet-stream",size:Z.size,createdAt:new Date().toISOString()})),J=Fo(f,c,_?.length?_:p?.attachments);T.current?.id===f&&L(Z=>{const le=[...Z,J];return X(h(f),le,{maxBytes:5e5}),le});let pe=!1;try{const Z=[];if(p?.files?.length)for(const ve of p.files)try{const Pe=await qi(f,ve,s);Z.push(Pe.attachment)}catch{throw new Error(m("chatRooms.error.failedToUpload","Failed to upload attachment: {{filename}}",{filename:ve.name}))}const le=[...p?.attachments??[],...Z],Ce=await Gi(f,{content:c,...le.length?{attachments:le}:{}},s);pe=!0;try{p?.onDelivered?.()}catch{}Ce.message?.createdAt&&y&&b(ve=>Ge(ve,{...y,updatedAt:Ce.message.createdAt})),T.current?.id===f&&L(ve=>{const Pe=zs(ve,Ce.message,J.id);return X(h(f),Pe,{maxBytes:5e5}),Pe});const de=await ca(f,{limit:100,order:"desc"},s),Se=ga(de.messages);if(X(h(f),Se,{maxBytes:5e5}),T.current?.id!==f)return;L(Se),A.mark("hydrate")}catch(Z){let le=null;try{const de=await ca(f,{limit:100,order:"desc"},s);le=ga(de.messages),X(h(f),le,{maxBytes:5e5}),T.current?.id===f&&(L(le),A.mark("hydrate"))}catch{!pe&&T.current?.id===f&&L(de=>{const Se=de.filter(ve=>ve.id!==J.id);return X(h(f),Se,{maxBytes:5e5}),Se})}const Ce=le?.some(de=>de.role==="user"&&de.content.trim()===J.content.trim());if(pe||Ce){const de=Z instanceof Error&&Z.message.trim()?Z.message:m("chatRooms.error.deliveredButRefreshFailed","Message delivered, but failed to refresh room replies");throw new oi(de,f)}throw Z}finally{A.complete({source:"send-room-message"})}},[h,s]),ge=a.useCallback(async c=>{!c||!B.current.some(p=>p.id===c)||(await Qi(c,s),X(h(c),[],{maxBytes:5e5}),T.current?.id===c&&L([]))},[h,s]);return a.useEffect(()=>{D()},[D]),a.useEffect(()=>{const c=Q.current,p=s?`/api/events?projectId=${encodeURIComponent(s)}`:"/api/events";return Yi(p,{onReconnect:()=>{ka({view:"useChatRooms",trigger:"sse-reconnect",projectId:s,replayAttempted:!1});const y=T.current?.id;if(y){const f=fa(y,{warm:!0});f.mark("sse-reconnect-refresh"),D().finally(()=>f.complete({source:"sse-reconnect"}));return}D()},events:{"chat:room:created":y=>{if(Q.current!==c)return;const f=Le(y);f&&b(A=>Ge(A,f))},"chat:room:updated":y=>{if(Q.current!==c)return;const f=Le(y);f&&(b(A=>Ge(A,f)),T.current?.id===f.id&&(T.current=f,E(f)))},"chat:room:deleted":y=>{if(Q.current!==c)return;const f=Le(y);f?.id&&(b(A=>A.filter(_=>_.id!==f.id)),X(h(f.id),[],{maxBytes:5e5}),X(k(f.id),[],{maxBytes:5e5}),T.current?.id===f.id&&(T.current=null,E(null),S([]),L([]),At(ze,s),X(u,"",{maxBytes:5e5})))},"chat:room:member:added":y=>{if(Q.current!==c)return;const f=Le(y);!f||T.current?.id!==f.roomId||S(A=>{if(A.some(J=>J.agentId===f.agentId))return A;const _=[...A,f];return X(k(f.roomId),_,{maxBytes:5e5}),_})},"chat:room:member:removed":y=>{if(Q.current!==c)return;const f=Le(y);!f||T.current?.id!==f.roomId||S(A=>{const _=A.filter(J=>J.agentId!==f.agentId);return X(k(f.roomId),_,{maxBytes:5e5}),_})},"chat:room:message:added":y=>{if(Q.current!==c)return;const f=Le(y);f&&(b(A=>{const _=A.find(J=>J.id===f.roomId);return _?Ge(A,{..._,updatedAt:f.createdAt}):A}),T.current?.id===f.roomId&&L(A=>{const _=zs(A,f);return _===A?A:(X(h(f.roomId),_,{maxBytes:5e5}),_)}))},"chat:room:message:updated":y=>{if(Q.current!==c)return;const f=Le(y);!f||T.current?.id!==f.roomId||L(A=>{const _=A.map(J=>J.id===f.id?f:J);return X(h(f.roomId),_,{maxBytes:5e5}),_})},"chat:room:message:deleted":y=>{if(Q.current!==c)return;const f=Le(y);f?.id&&L(A=>{const _=A.filter(pe=>pe.id!==f.id),J=T.current?.id;return J&&X(h(J),_,{maxBytes:5e5}),_})},"chat:room:messages:cleared":y=>{if(Q.current!==c)return;const f=Le(y);f?.roomId&&(X(h(f.roomId),[],{maxBytes:5e5}),T.current?.id===f.roomId&&L([]),b(A=>{const _=A.find(J=>J.id===f.roomId);return _?Ge(A,{..._,updatedAt:new Date().toISOString()}):A}))}}})},[u,k,h,s,D]),a.useEffect(()=>{v&&(C.some(c=>c.id===v.id)||(T.current=null,E(null),S([]),L([]),At(ze,s),X(u,"",{maxBytes:5e5})))},[v,u,s,C]),{rooms:C,roomsLoading:j,roomsError:M,activeRoom:v,activeRoomMembers:N,messages:l,messagesLoading:F,selectRoom:O,createRoom:R,updateRoomSettings:$,deleteRoom:ie,sendRoomMessage:ae,clearRoom:ge,refreshRooms:D}}const Tt={direct:"fusion:chat-unread:direct",room:"fusion:chat-unread:rooms"},Bs=200;function Sa(s){if(!s)return null;const r=new Date(s).getTime();return Number.isFinite(r)?r:null}function ri(s){const r=Object.entries(s);if(r.length<=Bs)return s;const m=r.map(([g,u])=>({id:g,timestamp:u,value:Sa(u)??0})).sort((g,u)=>u.value-g.value).slice(0,Bs);return Object.fromEntries(m.map(({id:g,timestamp:u})=>[g,u]))}function gn(s){if(!s)return{};try{const r=JSON.parse(s);if(!r||typeof r!="object")return{};const m={};for(const[g,u]of Object.entries(r))typeof g=="string"&&typeof u=="string"&&(m[g]=u);return ri(m)}catch{return{}}}function _o(s){const[r,m]=a.useState(()=>{try{return gn(Dt(Tt.direct,s))}catch{return{}}}),[g,u]=a.useState(()=>{try{return gn(Dt(Tt.room,s))}catch{return{}}});a.useEffect(()=>{try{m(gn(Dt(Tt.direct,s)))}catch{m({})}try{u(gn(Dt(Tt.room,s)))}catch{u({})}},[s]);const h=a.useMemo(()=>({direct:r,room:g}),[r,g]),k=a.useCallback((M,i)=>{const v=ri(i);try{ya(Tt[M],JSON.stringify(v),s)}catch{}return v},[s]),C=a.useCallback((M,i)=>{if(M==="direct"){m(v=>k(M,i(v)));return}u(v=>k(M,i(v)))},[k]),b=a.useCallback((M,i,v)=>{const E=Sa(v);if(E===null)return!1;const N=h[M][i],S=Sa(N);return S===null?!0:E>S},[h]),j=a.useCallback((M,i,v)=>{if(!i)return;const E=v??new Date().toISOString();C(M,N=>({...N,[i]:E}))},[C]),I=a.useCallback((M,i)=>{i.length!==0&&C(M,v=>{const E={...v};for(const N of i)N.id&&(E[N.id]=N.lastActivityAt??new Date().toISOString());return E})},[C]);return{isUnread:b,markRead:j,markAllRead:I}}const zo=["",...Zi];function Os({level:s,onChange:r,defaultThinkingLevel:m="off",showTargetSection:g=!0,models:u=[],favoriteProviders:h=[],favoriteModels:k=[],agents:C=[],agentId:b,modelProvider:j,modelId:I,onChangeModel:M,disabled:i=!1}){const{t:v}=Be("app"),[E,N]=a.useState(!1),[S,l]=a.useState(()=>b&&b!==ke?"agent":"model"),L=a.useRef(null),F=s??"",U=j&&I?`${j}/${I}`:"",B=b&&b!==ke?b:"",T=F!==""||g&&(!!U||!!B),Q="chat-thinking-level-listbox";a.useEffect(()=>{if(!E)return;const c=p=>{const y=p.target;if(!(y instanceof Node))return;const f=L.current?.contains(y),A=y instanceof Element&&!!y.closest(".model-combobox-dropdown--portal");!f&&!A&&N(!1)};return document.addEventListener("pointerdown",c),()=>document.removeEventListener("pointerdown",c)},[E]),a.useEffect(()=>{N(!1),l(B?"agent":"model")},[F,B,U]);const se=a.useMemo(()=>C.find(c=>c.id===B),[C,B]),Y=c=>c===""?v("modelSelection.thinkingDefault","Default ({{level}})",{level:m??"off"}):v(`models.options.${c}`,c==="xhigh"?"Very High":c.charAt(0).toUpperCase()+c.slice(1)),D=c=>{N(!1),r(c)},O=c=>{const p=c.indexOf("/");p<=0||(N(!1),M?.({modelProvider:c.slice(0,p),modelId:c.slice(p+1)}))},R=c=>{c&&(N(!1),M?.({agentId:c}))},$=c=>{l(c)},ie=c=>{c.key==="Escape"&&N(!1)},ae=(c,p)=>{if(c.key==="Escape"){c.preventDefault(),N(!1);return}(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),D(p))},ge=(c,p)=>{if(c.key==="Escape"){c.preventDefault(),N(!1);return}(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),R(p))};return t.jsxs("div",{className:"chat-thinking-level-root",ref:L,children:[t.jsx("button",{type:"button",className:`btn-icon chat-thinking-btn${T?" chat-thinking-btn--active":""}`,"data-testid":"chat-thinking-btn","aria-haspopup":"dialog","aria-expanded":E,"aria-controls":Q,"aria-label":v("chat.thinkingLevelButton","Thinking level"),title:v("chat.thinkingLevelButton","Thinking level"),disabled:i,onClick:()=>N(c=>!c),onKeyDown:ie,children:t.jsx(Ji,{size:16})}),E?t.jsxs("div",{className:"chat-thinking-popover",role:"presentation","data-testid":"chat-thinking-popover",children:[g?t.jsxs("section",{className:"chat-thinking-target-section","aria-label":v("chat.modelAgentSection","Model / Agent"),children:[t.jsx("div",{className:"chat-thinking-section-title",children:v("chat.modelAgentSection","Model / Agent")}),t.jsxs("div",{className:"chat-thinking-mode-toggle","data-testid":"chat-thinking-mode-toggle",children:[t.jsx("button",{type:"button",className:`chat-thinking-mode-btn${S==="model"?" chat-thinking-mode-btn--active":""}`,"data-testid":"chat-thinking-mode-model","aria-pressed":S==="model",onPointerDown:c=>{c.button===0&&$("model")},onClick:c=>{c.detail===0&&$("model")},children:v("chat.newChatModeModel","Model")}),t.jsx("button",{type:"button",className:`chat-thinking-mode-btn${S==="agent"?" chat-thinking-mode-btn--active":""}`,"data-testid":"chat-thinking-mode-agent","aria-pressed":S==="agent",onPointerDown:c=>{c.button===0&&$("agent")},onClick:c=>{c.detail===0&&$("agent")},children:v("chat.newChatModeAgent","Agent")})]}),S==="model"?t.jsxs("div",{className:"chat-thinking-model-picker","data-testid":"chat-thinking-model-picker",children:[t.jsx(ni,{models:u,value:U,onChange:O,label:v("chat.newChatModeModel","Model"),placeholder:v("chat.selectModel","Select a model"),disabled:!M||u.length===0,favoriteProviders:h,favoriteModels:k,menuWidth:"readable"}),u.length===0?t.jsx("div",{className:"chat-thinking-empty","data-testid":"chat-thinking-model-empty",children:v("chat.noModelsAvailable","No models available")}):null]}):t.jsx("div",{className:"chat-thinking-agent-list","data-testid":"chat-thinking-agent-list",children:C.length===0?t.jsx("div",{className:"chat-thinking-empty","data-testid":"chat-thinking-agent-empty",children:v("chat.noAgentsAvailable","No agents available")}):C.map(c=>{const p=B===c.id;return t.jsxs("button",{type:"button",className:`chat-thinking-agent-item${p?" chat-thinking-agent-item--selected":""}`,"data-testid":`chat-thinking-agent-${c.id}`,"aria-pressed":p,disabled:!M,onClick:()=>R(c.id),onKeyDown:y=>ge(y,c.id),children:[t.jsx(xn,{size:16}),t.jsx("span",{className:"chat-thinking-agent-name",children:c.name||c.id}),c.role?t.jsx("span",{className:"chat-thinking-agent-role",children:c.role}):null]},c.id)})}),se?t.jsx("div",{className:"chat-thinking-current-target","data-testid":"chat-thinking-current-agent",children:v("chat.currentAgentTarget","Current agent: {{name}}",{name:se.name||se.id})}):U?t.jsx("div",{className:"chat-thinking-current-target","data-testid":"chat-thinking-current-model",children:v("chat.currentModelTarget","Current model: {{model}}",{model:U})}):t.jsx("div",{className:"chat-thinking-current-target","data-testid":"chat-thinking-current-default",children:v("chat.currentDefaultTarget","Using the default chat target")})]}):null,t.jsxs("section",{className:"chat-thinking-level-section","aria-label":v("chat.thinkingLevelButton","Thinking level"),children:[t.jsx("div",{className:"chat-thinking-section-title",children:v("chat.thinkingLevelSection","Thinking level")}),t.jsx("div",{id:Q,className:"chat-thinking-popover-list",role:"listbox","aria-label":v("chat.thinkingLevelButton","Thinking level"),children:zo.map(c=>{const p=F===c;return t.jsx("button",{type:"button",role:"option","aria-selected":p,className:`chat-thinking-popover-option${p?" active":""}`,"data-testid":`chat-thinking-option-${c||"default"}`,onClick:()=>D(c),onKeyDown:y=>ae(y,c),children:Y(c)},c||"default")})})]})]}):null]})}function Hs(s){return s.trim().toLowerCase().replace(/[\s-]+/g,"_").replace(/_+/g,"_")}function ci(s,r){const m=r.trim();if(!m)return!0;const g=Hs(m);return Hs(s).includes(g)||s.toLowerCase().includes(m.toLowerCase())}function Us({agents:s,filter:r,highlightedIndex:m,visible:g,onSelect:u,position:h="below",roomMemberIds:k,roomName:C}){const{t:b}=Be("app"),j=a.useMemo(()=>s.filter(N=>ci(N.name,r)),[s,r]),I=!!k,M=I&&r.trim().length>0,i=a.useMemo(()=>I?j.filter(N=>k?.has(N.id)):j,[j,k,I]),v=a.useMemo(()=>I?j.filter(N=>!k?.has(N.id)):[],[j,k,I]),E=M?[...i,...v]:i;return g?t.jsx("div",{className:`agent-mention-popup agent-mention-popup--${h}`,"data-testid":"agent-mention-popup",role:"listbox","aria-label":b("agentMention.suggestionsLabel","Agent mention suggestions"),children:E.length===0?t.jsx("div",{className:"agent-mention-empty",children:b("agentMention.noAgentsFound","No agents found")}):t.jsxs(t.Fragment,{children:[I&&t.jsx("div",{className:"agent-mention-section-header","data-testid":"agent-mention-members-header",children:C?b("agentMention.membersOf","Members of #{{roomName}}",{roomName:C}):b("agentMention.roomMembers","Room members")}),i.map((N,S)=>t.jsxs("button",{type:"button",className:`agent-mention-item${S===m?" agent-mention-item--highlighted":""}`,"data-testid":`agent-mention-item-${N.id}`,onMouseDown:l=>l.preventDefault(),onClick:()=>u(N),role:"option","aria-selected":S===m,children:[t.jsx(yn,{agent:N,size:20}),I&&t.jsx("span",{className:"status-dot agent-mention-member-dot","aria-label":b("agentMention.roomMemberBadge","Room member")}),t.jsx("span",{className:"agent-mention-name",children:N.name}),t.jsx("span",{className:"agent-mention-role",children:N.role})]},N.id)),I&&!M&&v.length>0&&t.jsx("div",{className:"agent-mention-hint","data-testid":"agent-mention-other-hint",children:b("agentMention.typeToSearch","Type to search other agents")}),I&&M&&v.length>0&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"agent-mention-section-header","data-testid":"agent-mention-others-header",children:b("agentMention.otherAgents","Other agents")}),v.map((N,S)=>{const l=i.length+S;return t.jsxs("button",{type:"button",className:`agent-mention-item${l===m?" agent-mention-item--highlighted":""}`,"data-testid":`agent-mention-item-${N.id}`,onMouseDown:L=>L.preventDefault(),onClick:()=>u(N),role:"option","aria-selected":l===m,children:[t.jsx(yn,{agent:N,size:20}),t.jsx("span",{className:"agent-mention-name",children:N.name}),t.jsx("span",{className:"agent-mention-role",children:N.role})]},N.id)})]})]})}):null}function Bo(s,r){return s+r}function Oo({visible:s,position:r,tasks:m,files:g,selectedIndex:u,onSelectTask:h,onSelectFile:k,loading:C}){const{t:b}=Be("app");if(!s)return null;const j=m.length>0,I=g.length>0;return t.jsxs("div",{className:"file-mention-popup",style:{top:r.top,left:r.left},"data-testid":"file-mention-popup",onMouseDown:M=>{M.preventDefault()},children:[C&&t.jsx("div",{className:"file-mention-popup-loading","data-testid":"file-mention-loading",children:t.jsx("span",{className:"spinner"})}),!C&&!j&&!I&&t.jsx("div",{className:"file-mention-popup-empty","data-testid":"file-mention-empty",children:b("fileMention.empty","No tasks or files found")}),!C&&(j||I)&&t.jsxs("div",{className:"file-mention-popup-groups",children:[j&&t.jsxs("div",{className:"file-mention-popup-group",children:[t.jsx("div",{className:"file-mention-popup-group-header",children:b("fileMention.taskHeader","Tasks")}),t.jsx("ul",{className:"file-mention-popup-list",role:"listbox","aria-label":b("fileMention.taskMatches","Task matches"),children:m.map((M,i)=>{const v=i;return t.jsxs("li",{className:`file-mention-popup-item${v===u?" file-mention-popup-item--selected":""}`,onClick:()=>h(M),role:"option","aria-selected":v===u,"data-testid":`task-mention-item-${v}`,children:[t.jsx("span",{className:"file-mention-popup-icon",children:t.jsx(ii,{})}),t.jsxs("div",{className:"file-mention-popup-info",children:[t.jsxs("div",{className:"file-mention-popup-task-row",children:[t.jsx("span",{className:"file-mention-popup-task-id",children:M.id}),t.jsx("span",{className:`file-mention-popup-column-badge file-mention-popup-column-badge--${M.column}`,children:M.column})]}),t.jsx("span",{className:"file-mention-popup-item-path",children:M.title})]})]},M.id)})})]}),I&&t.jsxs("div",{className:"file-mention-popup-group",children:[t.jsx("div",{className:"file-mention-popup-group-header",children:b("fileMention.fileHeader","Files")}),t.jsx("ul",{className:"file-mention-popup-list",role:"listbox","aria-label":b("fileMention.fileMatches","File matches"),children:g.map((M,i)=>{const v=Bo(m.length,i),E=eo(M.path);return t.jsxs("li",{className:`file-mention-popup-item${v===u?" file-mention-popup-item--selected":""}`,onClick:()=>k(M),role:"option","aria-selected":v===u,"data-testid":`file-mention-item-${v}`,children:[t.jsx("span",{className:"file-mention-popup-icon",children:t.jsx(to,{})}),t.jsxs("div",{className:"file-mention-popup-info",children:[t.jsx("span",{className:"file-mention-popup-item-name",children:M.name}),E&&t.jsx("span",{className:"file-mention-popup-item-path",children:E})]})]},M.path)})})]})]})]})}function Ho(s,r=[],m){const g=s.trim().replace(/^#/,""),u=(k,C)=>m?m(k,C):C;if(!g)return{ok:!1,error:u("createRoom.nameRequired","Room name is required.")};if(/[A-Z]/.test(g))return{ok:!1,error:u("createRoom.lowercase","Use lowercase letters only.")};const h=g.toLowerCase();return h.length>80?{ok:!1,error:u("createRoom.maxLength","Room names can be at most 80 characters.")}:/^[a-z0-9_-]+$/.test(h)?/^[-_]|[-_]$/.test(h)?{ok:!1,error:u("createRoom.noEdgeChars","Room names cannot start or end with a hyphen or underscore.")}:r.some(k=>k.toLowerCase()===h)?{ok:!1,error:u("createRoom.duplicate","A room with this name already exists.")}:{ok:!0,name:h}:{ok:!1,error:u("createRoom.validChars","Use lowercase letters, numbers, hyphens, or underscores only.")}}function Uo({isOpen:s,onClose:r,onCreate:m,projectId:g,existingRoomNames:u=[]}){const{t:h}=Be("app"),[k,C]=a.useState(""),[b,j]=a.useState([]),[I,M]=a.useState(""),[i,v]=a.useState([]),[E,N]=a.useState(!1),[S,l]=a.useState(null),[L,F]=a.useState(!1),U=a.useRef(null),B=a.useRef(null);a.useEffect(()=>{s&&(B.current=document.activeElement instanceof HTMLElement?document.activeElement:null,N(!0),l(null),no(void 0,g).then(R=>j(R)).catch(()=>{j([]),l(h("createRoom.failedLoadAgents","Failed to load agents."))}).finally(()=>N(!1)))},[s,g]),a.useEffect(()=>{if(!s){C(""),M(""),v([]),l(null),F(!1);return}const R=window.requestAnimationFrame(()=>U.current?.focus());return()=>window.cancelAnimationFrame(R)},[s]),a.useEffect(()=>{if(!s)return;const R=$=>{$.key==="Escape"&&r()};return document.addEventListener("keydown",R),()=>document.removeEventListener("keydown",R)},[s,r]),a.useEffect(()=>{s||B.current?.focus()},[s]);const T=a.useMemo(()=>Ho(k,u,h),[k,u,h]),Q=a.useMemo(()=>{const R=I.trim().toLowerCase();return R?b.filter($=>$.name.toLowerCase().includes(R)):b},[b,I]),se=a.useMemo(()=>b.filter(R=>i.includes(R.id)),[b,i]),Y=T.ok&&i.length>0&&!L&&!E;if(!s)return null;const D=R=>{L||v($=>$.includes(R)?$.filter(ie=>ie!==R):[...$,R])},O=async()=>{if(!T.ok){l(T.error);return}if(i.length===0){l(h("createRoom.selectMember","Select at least one member."));return}l(null),F(!0);try{await m({name:T.name,displayName:`#${T.name}`,memberAgentIds:i}),r()}catch(R){l(R instanceof Error?R.message:h("createRoom.failedCreate","Failed to create room."))}finally{F(!1)}};return t.jsx(ao,{windowKey:"create-room",title:h("createRoom.title","Create room"),ariaLabel:h("createRoom.title","Create room"),onClose:r,modal:!0,hideHeader:!0,dragHandleSelector:".modal-header",className:"floating-window--create-room",defaultSize:{width:640,height:640},minSize:{width:360,height:400},persistGeometryKey:"floating-window:create-room",suspendGeometryPersistenceOnMobile:!0,suspendGeometryPersistenceOnShortViewport:!0,closeOnOutsidePointerDown:!0,layer:"utility",children:t.jsxs("div",{className:"modal create-room-modal",children:[t.jsxs("div",{className:"modal-header",children:[t.jsx("h3",{children:h("createRoom.title","Create room")}),t.jsx("button",{type:"button",className:"modal-close","aria-label":h("actions.close","Close"),onClick:r,children:"×"})]}),t.jsxs("div",{className:"form-group create-room-modal-name-group",children:[t.jsx("label",{htmlFor:"create-room-name",children:h("createRoom.nameLabel","Room name")}),t.jsxs("div",{className:"create-room-modal-name-field",children:[t.jsx("span",{"aria-hidden":"true",className:"create-room-modal-name-hash",children:"#"}),t.jsx("input",{ref:U,id:"create-room-name",className:"input",value:k,disabled:L,onChange:R=>{const $=R.target.value.replace(/^#/,"").replace(/\s+/g,"-").toLowerCase();C($)}})]}),!T.ok&&t.jsx("div",{className:"form-error",children:T.error})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"create-room-member-search",children:h("createRoom.members","Members")}),t.jsx("input",{id:"create-room-member-search",className:"input",placeholder:h("createRoom.searchAgents","Search agents"),value:I,disabled:L,onChange:R=>M(R.target.value)})]}),se.length>0&&t.jsx("div",{className:"create-room-modal-selected","data-testid":"create-room-selected-chips",children:se.map(R=>t.jsxs("button",{type:"button",className:"btn btn-sm create-room-modal-chip",onClick:()=>D(R.id),disabled:L,children:[R.name," ×"]},R.id))}),t.jsx("div",{className:"create-room-modal-member-list","data-testid":"create-room-member-list",children:E?t.jsx("div",{className:"create-room-modal-empty",children:t.jsx(so,{label:h("createRoom.loadingAgents","Loading agents...")})}):Q.length===0?t.jsx("div",{className:"create-room-modal-empty",children:b.length===0?h("createRoom.noAgents","No agents in this project yet."):h("createRoom.noMatch","No agents match your search.")}):Q.map(R=>{const $=i.includes(R.id);return t.jsxs("button",{type:"button",className:`create-room-modal-member-row${$?" create-room-modal-member-row--selected":""}`,onClick:()=>D(R.id),disabled:L,children:[t.jsx(yn,{agent:R,size:20}),t.jsx("span",{children:R.name}),t.jsx("span",{className:"create-room-modal-member-role",children:R.role})]},R.id)})}),S&&t.jsx("div",{className:"form-group",children:t.jsx("div",{className:"form-error",children:S})}),t.jsxs("div",{className:"modal-actions",children:[t.jsx("button",{type:"button",className:"btn",onClick:r,disabled:L,children:h("actions.cancel","Cancel")}),t.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>void O(),disabled:!Y,children:L?h("createRoom.creating","Creating..."):h("createRoom.create","Create room")})]})]})})}function Ko({cliSessionId:s,tier:r,projectId:m,renderTranscript:g,renderComposer:u,queuedCount:h=0,terminalProps:k}){const{t:C}=Be("app"),b=r==="generic",[j,I]=a.useState(b?"terminal":"transcript");if(b)return t.jsx("div",{className:"cli-chat-surface cli-chat-surface--generic","data-tier":"generic",children:t.jsx(_s,{sessionId:s,projectId:m,...k})});const M=j==="terminal";return t.jsxs("div",{className:"cli-chat-surface","data-tier":r,"data-view":j,children:[t.jsxs("div",{className:"cli-chat-surface__toolbar",role:"tablist","aria-label":C("cliChat.viewToggleLabel","Chat view"),children:[t.jsxs("button",{type:"button",role:"tab","aria-selected":!M,className:`cli-chat-surface__tab${M?"":" is-active"}`,onClick:()=>I("transcript"),children:[t.jsx(bn,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:C("cliChat.transcriptTab","Transcript")})]}),t.jsxs("button",{type:"button",role:"tab","aria-selected":M,className:`cli-chat-surface__tab${M?" is-active":""}`,onClick:()=>I("terminal"),children:[t.jsx(io,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:C("cliChat.terminalTab","Terminal")})]})]}),t.jsx("div",{className:"cli-chat-surface__body",children:M?t.jsx(_s,{sessionId:s,projectId:m,...k}):g()}),!M&&t.jsxs("div",{className:"cli-chat-surface__composer",children:[h>0&&t.jsx("div",{className:"cli-chat-surface__queued",role:"status","aria-live":"polite",children:C("cliChat.queued","{{count}} message queued — will send when the agent is ready",{count:h})}),u()]})]})}const Vo=200,Wo=8,Xo=8;function Ks(){return new DOMException("The operation was aborted.","AbortError")}function Vs(s,r){return r.aborted?Promise.reject(Ks()):new Promise((m,g)=>{const u=()=>g(Ks());r.addEventListener("abort",u,{once:!0}),s.then(h=>{r.removeEventListener("abort",u),m(h)},h=>{r.removeEventListener("abort",u),g(h)})})}function Ws(s,r,m){const g=s.slice(0,r),u=s.slice(r+1),h=u.match(/[\s]|$/),k=h?h.index??u.length:u.length,C=u.slice(k);return`${g}${m}${C}`}function qo(s={}){const{projectId:r,workspace:m="project"}=s,[g,u]=a.useState(!1),[h,k]=a.useState(""),[C,b]=a.useState(-1),[j,I]=a.useState([]),[M,i]=a.useState([]),[v,E]=a.useState(!1),[N,S]=a.useState(0),l=a.useRef(null),L=a.useRef(null),F=[...j.map(D=>({kind:"task",task:D})),...M.map(D=>({kind:"file",file:D}))];a.useEffect(()=>()=>{l.current&&clearTimeout(l.current),L.current?.abort()},[]);const U=a.useCallback((D,O)=>{if(O<0||O>D.length){u(!1);return}const R=$=>/[a-zA-Z0-9/_.-]/.test($);for(let $=O-1;$>=0;$--){if(D[$]==="#"){if($===0){const ae=D.slice($+1,O);b($),k(ae),S(0),u(!0);return}const ie=D[$-1];if(/[\s,.;:!?'"()[\]{}]/.test(ie)){const ae=D.slice($+1,O);b($),k(ae),S(0),u(!0);return}u(!1);return}if(!R(D[$])){u(!1);return}}u(!1)},[]),B=a.useCallback(()=>{L.current?.abort(),u(!1),k(""),b(-1),I([]),i([]),S(0),E(!1)},[]),T=a.useCallback(async D=>{if(!D.trim()){I([]),i([]),E(!1);return}L.current?.abort();const O=new AbortController;L.current=O;try{E(!0);const[R,$]=await Promise.allSettled([Vs(oo(20,0,r,D),O.signal),Vs(ro(D,m,r),O.signal)]);if(O.signal.aborted)return;const ie=R.status==="fulfilled"?R.value.slice(0,Wo).map(ge=>({id:ge.id,title:ge.title??"",column:ge.column})):[],ae=$.status==="fulfilled"?$.value.files.slice(0,Xo):[];I(ie),i(ae),S(0)}catch(R){R.name!=="AbortError"&&(I([]),i([]))}finally{O.signal.aborted||E(!1)}},[m,r]);a.useEffect(()=>{if(g)return l.current&&clearTimeout(l.current),l.current=setTimeout(()=>{T(h)},Vo),()=>{l.current&&clearTimeout(l.current)}},[h,g,T]);const Q=a.useCallback((D,O)=>!g||C<0?O:Ws(O,C,`#${D.id}`),[g,C]),se=a.useCallback((D,O)=>!g||C<0?O:Ws(O,C,`#${D.path}`),[g,C]),Y=a.useCallback((D,O)=>{if(!g||F.length===0)return!1;switch(D.key){case"ArrowDown":return D.preventDefault(),S(R=>Math.min(R+1,F.length-1)),!0;case"ArrowUp":return D.preventDefault(),S(R=>Math.max(R-1,0)),!0;case"Enter":case"Tab":return F[N]?(D.preventDefault(),!0):!1;case"Escape":return D.preventDefault(),B(),!0;default:return!1}},[g,F,N,B]);return{mentionActive:g,tasks:j,files:M,combinedItems:F,loading:v,mentionQuery:h,selectedIndex:N,setSelectedIndex:S,detectMention:U,selectTask:Q,selectFile:se,dismissMention:B,handleKeyDown:Y}}const pa=new Map,wn=new Map;function Na(s){return s??"global"}function Ma(s){return`${Et.DISCOVERED_SKILLS_PREFIX}${Na(s)}`}function pt(s){return bt(Ma(s),{maxAgeMs:xa})}function Go(s,r){for(const m of wn.get(s)??[])m(r)}async function Qo(s){const r=Na(s),m=pa.get(r);if(m)return m;const g=lo(s).finally(()=>{pa.delete(r)});return pa.set(r,g),g}function Yo(s){const[r,m]=a.useState(()=>pt(s)??[]),[g,u]=a.useState(()=>pt(s)===null),h=a.useRef(pt(s)!==null),k=Na(s);a.useEffect(()=>{const j=pt(s)??[];m(j),u(pt(s)===null),h.current=pt(s)!==null},[s]),a.useEffect(()=>{const j=wn.get(k)??new Set;return j.add(m),wn.set(k,j),()=>{j.delete(m),j.size===0&&wn.delete(k)}},[k]);const C=a.useCallback(async()=>{try{const j=await Qo(s);h.current=!0,X(Ma(s),j,{maxBytes:5e5}),Go(k,j)}catch{h.current||co(Ma(s))}finally{u(!1)}},[s,k]);a.useEffect(()=>{C()},[C]);const b=a.useCallback(async()=>{u(!0),await C()},[C]);return{skills:r,loading:g,refresh:b}}function Jo(s,r){const m=s.reduce((g,u)=>g+(u.content?.length??0),0)+(r?.length??0);return Math.ceil(m/4)}function Xs(s){if(!Number.isFinite(s)||s<=0)return"0";if(s<1e3)return String(Math.round(s));const r=s/1e3;return r<10?`~${Number(r.toFixed(1))}k`:`${Math.round(r)}k`}const Ra=640,Zo=200,er=200,vt=8;function wr(s){const r=s.trim();return r?`${r}
12
-
13
- `:""}function tr(s,r,m,g,u,h,k){const C=Math.max(vt,h-g-vt),b=Math.max(vt,k-u-vt),j=m?s-g:s;return{x:Math.min(Math.max(vt,j),C),y:Math.min(Math.max(vt,r),b)}}const qs="__SKIP__";let va=!1;function nr(s,r=Ra){return s>r?"auto":"hidden"}function ar(s,r=Ra){return Math.max(40,Math.min(s,r))}function sr(s,r){const m=new Date(s),u=new Date().getTime()-m.getTime(),h=Math.floor(u/1e3),k=Math.floor(h/60),C=Math.floor(k/60),b=Math.floor(C/24);return h<60?r("chat.relativeTimeJustNow","just now"):k<60?r("chat.relativeTimeMinutes","{{count}}m ago",{count:k}):C<24?r("chat.relativeTimeHours","{{count}}h ago",{count:C}):b<7?r("chat.relativeTimeDays","{{count}}d ago",{count:b}):m.toLocaleDateString()}const ir=280,pn=180,vn=500,Gs="fusion:chat-sidebar-width",ba="fusion:chat-scope",or="fusion:chat-draft:";function Qs(s,r){return s.slice(r+1).find(m=>m.role==="user")?.content}function Ys(s,r){return r?`${or}${s}:${r}`:null}function Js(s){if(!s)return"";try{return localStorage.getItem(s)??""}catch{return""}}const rr=["image/png","image/jpeg","image/gif","image/webp","video/mp4","video/webm","video/quicktime","text/plain","text/markdown","application/json","text/yaml","text/x-toml","text/csv","application/xml"],Zs="image/png,image/jpeg,image/gif,image/webp,video/mp4,video/webm,video/quicktime,.txt,.md,.json,.yaml,.yml,.toml,.csv,.xml",wa=To;function cr(s,r){const m=s.slice(0,r),g=/(^|[\s\n])@([\w-]*)$/.exec(m);if(!g)return null;const u=g[2]??"",h=m.length-u.length-1;return{filter:u,start:h,end:r}}function lr(s){const r=s?.runtimeConfig;if(!r||typeof r!="object")return null;const m=Reflect.get(r,"modelProvider"),g=Reflect.get(r,"modelId");return typeof m!="string"||m.trim().length===0||typeof g!="string"||g.trim().length===0?null:{provider:m,modelId:g}}function ei(s,r,m){if(s?.modelProvider&&s?.modelId)return{provider:s.modelProvider,modelId:s.modelId};const g=lr(r??void 0);return g||(m.provider&&m.modelId?{provider:m.provider,modelId:m.modelId}:null)}function dr({projectId:s,defaultModel:r,defaultKind:m,defaultAgentId:g,defaultThinkingLevel:u,defaultSelectedThinkingLevel:h,onClose:k,onCreate:C}){const{t:b}=Be("app"),[j,I]=a.useState(m??"agent"),{agents:M,loading:i}=ai(s),[v,E]=a.useState(g??""),{models:N,favoriteProviders:S,favoriteModels:l,loading:L,refresh:F}=si(),U=r.provider&&r.modelId?`${r.provider}/${r.modelId}`:"",[B,T]=a.useState(U),[Q,se]=a.useState(h??""),[Y,D]=a.useState(S),[O,R]=a.useState(l);a.useEffect(()=>{D(S)},[S]),a.useEffect(()=>{R(l)},[l]),a.useEffect(()=>{m&&I(m)},[m]),a.useEffect(()=>{g&&E(p=>p||g)},[g]),a.useEffect(()=>{U&&T(p=>p||U)},[U]),a.useEffect(()=>{h&&se(p=>p||h)},[h]);const $=a.useCallback(async p=>{const y=Y,A=y.includes(p)?y.filter(_=>_!==p):[p,...y];D(A);try{await $s({favoriteProviders:A,favoriteModels:O}),await F()}catch{D(y)}},[Y,O,F]),ie=a.useCallback(async p=>{const y=O,A=y.includes(p)?y.filter(_=>_!==p):[p,...y];R(A);try{await $s({favoriteProviders:Y,favoriteModels:A}),await F()}catch{R(y)}},[O,Y,F]),ae=B||U,ge=p=>{if(p.preventDefault(),j==="agent"){if(!v)return;C({agentId:v});return}if(!ae)return;const y=ae.indexOf("/");if(y<=0)return;const f=ae.slice(0,y),A=ae.slice(y+1);C({agentId:ke,modelProvider:f,modelId:A,thinkingLevel:Q||void 0})},c=j==="agent"?!v:!ae;return t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:k,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:p=>p.stopPropagation(),children:[t.jsx("h3",{children:b("chat.newChatTitle","New Chat")}),t.jsxs("div",{className:"chat-new-dialog-mode-toggle","data-testid":"chat-new-dialog-mode-toggle",children:[t.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${j==="agent"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-agent",onClick:()=>{I("agent")},children:b("chat.newChatModeAgent","Agent")}),t.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${j==="model"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-model",onClick:()=>{I("model"),E(""),T(p=>p||U)},children:b("chat.newChatModeModel","Model")})]}),t.jsxs("form",{onSubmit:ge,children:[j==="agent"&&t.jsxs("label",{className:"chat-new-dialog-model-label",children:[b("chat.newChatModeAgent","Agent"),i?t.jsx("div",{className:"chat-new-dialog-loading",children:b("chat.loadingAgents","Loading agents...")}):M.length===0?t.jsx("div",{className:"chat-new-dialog-empty",children:b("chat.noAgentsAvailable","No agents available")}):t.jsx("div",{className:"chat-new-dialog-agent-list",children:M.map(p=>t.jsxs("button",{type:"button",className:`chat-new-dialog-agent-item${v===p.id?" chat-new-dialog-agent-item--selected":""}`,onClick:()=>E(p.id),"data-testid":`agent-option-${p.id}`,children:[t.jsx(xn,{size:16}),t.jsx("span",{className:"chat-new-dialog-agent-name",children:p.name}),t.jsx("span",{className:"chat-new-dialog-agent-role",children:p.role})]},p.id))})]}),j==="model"&&t.jsx("div",{className:"chat-new-dialog-model-dropdown","data-testid":"chat-new-dialog-model-section",children:L?t.jsx("div",{className:"chat-new-dialog-loading",children:b("chat.loadingModels","Loading models...")}):t.jsx(ni,{models:N,value:B,onChange:T,label:b("chat.newChatModeModel","Model"),placeholder:b("chat.selectModel","Select a model"),favoriteProviders:Y,onToggleFavorite:$,favoriteModels:O,onToggleModelFavorite:ie,showThinkingLevel:!0,thinkingLevel:Q,onThinkingLevelChange:se,defaultThinkingLevel:u??"off"})}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:k,children:b("chat.cancel","Cancel")}),t.jsx("button",{type:"submit",className:"btn btn-sm btn-primary",disabled:c,children:b("chat.create","Create")})]})]})]})})}function xr({projectId:s,addToast:r,floating:m=!1,compactLayout:g=!1,onPopOut:u,onMaximize:h,onMinimize:k,onClose:C,chatCommandContext:b,initialComposerDraft:j,initialComposerDraftNonce:I,onSendAsReport:M}){const{t:i}=Be("app");a.useEffect(()=>(ka({view:"ChatView",trigger:va?"route-active":"remount",projectId:s,replayAttempted:!1}),va=!1,()=>{va=!0,ka({view:"ChatView",trigger:"route-inactive",projectId:s,replayAttempted:!1})}),[s]);const[v,E]=a.useState(null);a.useEffect(()=>{let e=!1;return E(null),uo(s).then(n=>{e||E(n)}).catch(()=>{e||E(null)}),()=>{e=!0}},[s]);const N=v?.defaultThinkingLevel??"off",S=a.useMemo(()=>v?.chatDefaultKind==="agent"&&v.chatDefaultAgentId?{kind:"agent",agentId:v.chatDefaultAgentId}:v?.chatDefaultKind==="model"&&v.chatDefaultModelProvider&&v.chatDefaultModelId?{kind:"model",modelProvider:v.chatDefaultModelProvider,modelId:v.chatDefaultModelId,thinkingLevel:v.chatDefaultThinkingLevel}:null,[v]),{activeSession:l,sessionsLoading:L,messages:F,messagesLoading:U,isStreaming:B,streamingText:T,streamingThinking:Q,streamingToolCalls:se,selectSession:Y,createSession:D,archiveSession:O,renameSession:R,pinSession:$,pinnedCount:ie,setSessionModel:ae,setSessionThinkingLevel:ge,deleteSession:c,tags:p=[],selectedTagId:y,setSelectedTagId:f,createTag:A,renameTag:_,deleteTag:J,setSessionTags:pe,sendMessage:Z,editMessageAndResend:le,stopStreaming:Ce,pendingMessages:de,clearPendingMessage:Se,loadMoreMessages:ve,hasMoreMessages:Pe,searchQuery:li,setSearchQuery:di,filteredSessions:Fe,agentsMap:kn}=mo(s,r),[ui,Cn]=a.useState(!1),Oe=!0,[P,Qe]=a.useState(()=>{try{if(localStorage.getItem(ba)==="rooms"&&Oe)return"rooms"}catch{}return"direct"}),x=$o(s,r),{isUnread:ja,markRead:ue}=_o(s),[q,oe]=a.useState(()=>{const e=Ys(P,P==="rooms"?x.activeRoom?.id:l?.id);return Js(e)}),[G,Me]=a.useState(null),Sn=a.useRef(null),Aa=(e,n,o,d)=>{typeof window>"u"||Me({sessionId:e,anchorX:n,anchorY:o,anchorRight:d?.anchorRight??!1,x:n,y:o})};a.useLayoutEffect(()=>{if(!G||!Sn.current||typeof window>"u")return;const e=Sn.current,n=e.getBoundingClientRect(),o=n.width||e.offsetWidth||er,d=n.height||e.offsetHeight,w=tr(G.anchorX,G.anchorY,G.anchorRight,o,d,window.innerWidth,window.innerHeight);(w.x!==G.x||w.y!==G.y)&&Me({...G,...w})},[G]);const[It,Lt]=a.useState(null),[Mn,Nn]=a.useState(""),[Ta,Pt]=a.useState(null),[Ea,Ft]=a.useState(null),[Rn,Da]=a.useState(""),[jn,wt]=a.useState(null),[An,Ia]=a.useState(""),[La,$t]=a.useState(null),[xt,He]=a.useState(!0),[Ye,Tn]=a.useState(ir),[mi,_t]=a.useState(!1),{agentsMap:Pa}=ai(s),be=a.useMemo(()=>kn.size>0?kn:Pa,[Pa,kn]),{models:En,favoriteProviders:hi,favoriteModels:fi,defaultProvider:Fa,defaultModelId:$a}=si(),zt=a.useMemo(()=>({provider:Fa,modelId:$a}),[$a,Fa]),gi=a.useMemo(()=>S?.kind==="model"?{provider:S.modelProvider,modelId:S.modelId}:zt,[S,zt]),{skills:Dn,loading:pi}=Yo(s),[Je,Ue]=a.useState(!1),[yt,kt]=a.useState(""),[Ze,Ke]=a.useState(0),[et,tt]=a.useState(""),[Ne,nt]=a.useState(!1),[Bt,Ot]=a.useState(0),[In,at]=a.useState(-1),[he,Ht]=a.useState([]),[_a,st]=a.useState(!1),[za,Ut]=a.useState(!1),[it,Ba]=a.useState({}),[Kt,Re]=a.useState(!1),[Vt,Ct]=a.useState(!1),{pushNav:Oa}=ho(),[,Wt]=a.useState(!1),[vi,bi]=a.useState({top:0,left:0}),K=qo({projectId:s}),Ln=a.useCallback(e=>{if(!e||!K.mentionActive)return;const n=e.getBoundingClientRect();bi({top:n.top-260,left:n.left+8})},[K.mentionActive]),Ha=a.useRef(null),Ua=a.useRef(null),Ka=a.useRef(null),Va=a.useRef(null),ce=a.useRef(!1),Xt=a.useRef(null),Wa=a.useRef(null),$e=a.useRef(null),qt=a.useRef(0),Pn=a.useRef(null),St=a.useRef(null),je=a.useRef(null),re=a.useRef(null),Fn=a.useRef(null),ot=a.useRef(null),[$n,wi]=a.useState(()=>new Set),Gt=a.useRef(!1),Ae=a.useRef(null),Te=a.useRef(null),ee=a.useRef(null),Qt=a.useRef(null),Xa=a.useRef(void 0),_n=a.useRef(!1),Yt=a.useRef(null),qa=a.useRef([]),rt=a.useRef(0),Mt=a.useRef(new Map),zn=a.useRef(!1),Jt=fo(),Ve=Jt==="mobile",Bn=Jt==="tablet",Ga=a.useRef(null),[xi,Qa]=a.useState(!1);a.useLayoutEffect(()=>{if(!m){Qa(!1);return}const e=Ga.current;if(!e||typeof ResizeObserver>"u")return;const n=()=>{Qa(e.getBoundingClientRect().width<=768)};n();const o=new ResizeObserver(n);return o.observe(e),()=>o.disconnect()},[m]);const H=Ve||xi||g;a.useEffect(()=>{l?.id&&ue("direct",l.id,l.lastMessageAt??l.updatedAt)},[l?.id,l?.lastMessageAt,l?.updatedAt,ue]),a.useEffect(()=>{x.activeRoom?.id&&ue("room",x.activeRoom.id,x.activeRoom.updatedAt)},[x.activeRoom?.id,x.activeRoom?.updatedAt,ue]),a.useEffect(()=>{if(!l?.id||F.length===0)return;const e=F[F.length-1];ue("direct",l.id,e?.createdAt??l.lastMessageAt??l.updatedAt)},[l?.id,l?.lastMessageAt,l?.updatedAt,ue,F]),a.useEffect(()=>{if(!x.activeRoom?.id||x.messages.length===0)return;const e=x.messages[x.messages.length-1];ue("room",x.activeRoom.id,e?.createdAt??x.activeRoom.updatedAt)},[ue,x.activeRoom?.id,x.activeRoom?.updatedAt,x.messages]),a.useEffect(()=>{try{const e=localStorage.getItem(Gs);if(!e)return;const n=Number.parseInt(e,10);if(Number.isNaN(n))return;const o=Math.max(pn,Math.min(vn,n));Tn(o)}catch{}},[]),a.useEffect(()=>{try{const e=localStorage.getItem(ba);if(e==="direct"){Qe("direct");return}e==="rooms"&&Oe&&Qe("rooms")}catch{}},[Oe]),a.useEffect(()=>{try{localStorage.setItem(ba,P)}catch{}},[Oe,P]);const me=Ys(P,P==="rooms"?x.activeRoom?.id:l?.id),On=a.useRef(me),Hn=a.useRef(!1);a.useEffect(()=>{if(me!==On.current){if(On.current=me,Hn.current){Hn.current=!1;return}oe(Js(me))}},[me]),a.useEffect(()=>{if(!(!me||On.current!==me))try{if(q){localStorage.setItem(me,q);return}localStorage.removeItem(me)}catch{}},[me,q]);const te=P==="rooms"&&!!x.activeRoom,{keyboardOverlap:Ya,keyboardOpen:Zt}=go({enabled:(H||Bn)&&(!!l||te),allowNonMobileViewport:Bn}),Nt=Bn&&Zt,en=a.useMemo(()=>{const e=yt.trim().toLowerCase();return(e?Dn.filter(o=>o.name.toLowerCase().includes(e)):Dn).slice(0,10)},[Dn,yt]),Un=a.useMemo(()=>b?po(yt,Fs):[],[b,yt]),we=a.useMemo(()=>{const e=Un.map(o=>({kind:"command",command:o,disabled:!b?.agentRunning})),n=en.map(o=>({kind:"skill",skill:o}));return[...e,...n]},[Un,en,b]),ct=a.useMemo(()=>Array.from(be.values()),[be]),Ee=a.useMemo(()=>P!=="rooms"||!x.activeRoom?null:{roomId:x.activeRoom.id,roomName:x.activeRoom.name,memberIds:new Set(x.activeRoomMembers.map(e=>e.agentId))},[Oe,P,x.activeRoom,x.activeRoomMembers]),We=a.useMemo(()=>{const e=ct.filter(d=>ci(d.name,et));if(!Ee)return e;const n=e.filter(d=>Ee.memberIds.has(d.id));if(et.trim().length===0)return n;const o=e.filter(d=>!Ee.memberIds.has(d.id));return[...n,...o]},[ct,et,Ee]),Kn=a.useMemo(()=>{const e=new Map;for(const n of ct)e.set(n.name.toLowerCase(),n);return e},[ct]),yi=a.useMemo(()=>en.map(e=>e.id).join("\0"),[en]);a.useEffect(()=>{Ke(0)},[yi]),a.useEffect(()=>{Ot(0)},[et,Ne]),a.useEffect(()=>()=>{je.current!==null&&window.clearTimeout(je.current)},[]),a.useEffect(()=>{const e=Ua.current;if(!e||!Pe||U)return;const n=new IntersectionObserver(o=>{o[0].isIntersecting&&ve()},{threshold:.1});return n.observe(e),()=>n.disconnect()},[Pe,U,ve]);const lt=a.useCallback(()=>te?x.activeRoom?.id??null:l?.id??null,[te,x.activeRoom?.id,l?.id]),Ja=a.useCallback((e,n)=>typeof CSS<"u"&&typeof CSS.escape=="function"?e.querySelector(`.chat-message[data-message-id="${CSS.escape(n)}"]`):e.querySelector(`.chat-message[data-message-id="${n.replace(/"/g,'\\"')}"]`),[]),Za=a.useCallback(()=>{const e=re.current;if(!e)return;const n=e.getBoundingClientRect().top,o=new Set;e.querySelectorAll(".chat-message--assistant:not(.chat-message--failure)[data-message-id]").forEach(d=>{const w=d.getAttribute("data-message-id");w&&d.getBoundingClientRect().top<n&&o.add(w)}),wi(d=>d.size===o.size&&Array.from(d).every(w=>o.has(w))?d:o)},[]),tn=a.useCallback(()=>{!re.current||ot.current!==null||(ot.current=window.requestAnimationFrame(()=>{ot.current=null,Za()}))},[Za]),nn=a.useCallback(()=>{const e=re.current,n=lt();if(!e||!n)return;const o=e.scrollTop,d=e.querySelectorAll(".chat-message[data-message-id]"),w=Array.from(d).find(W=>W.offsetTop+W.offsetHeight>=o)??d[0]??null,z=w?.getAttribute("data-message-id")??null,V=w?w.offsetTop-o:0;St.current={threadId:n,scrollTop:o,scrollHeight:e.scrollHeight,clientHeight:e.clientHeight,anchorMessageId:z,anchorOffset:V,wasPinnedBefore:!ce.current,capturedAtMs:typeof performance<"u"?performance.now():Date.now()}},[lt]),es=a.useCallback(()=>{const e=re.current;if(!e)return;const o=e.scrollTop+e.clientHeight>=e.scrollHeight-50;Ut(!o),ce.current=!o,nn(),tn()},[nn,tn]),De=a.useCallback((e,n)=>{if(!e.isConnected||!n?.force&&ce.current)return;let o=0,d=0,w=-1;const z=6,V=()=>{if(e.isConnected&&!(!n?.force&&ce.current)){if(e.scrollTop=e.scrollHeight,e.scrollHeight===w?d+=1:(d=0,w=e.scrollHeight),o+=1,o>=z||d>=2){Ut(!1),ce.current=!1;return}window.requestAnimationFrame(V)}};V()},[]),dt=te?x.messages:F;a.useLayoutEffect(()=>(tn(),()=>{ot.current!==null&&(window.cancelAnimationFrame(ot.current),ot.current=null)}),[dt,tn]),a.useLayoutEffect(()=>{const e=re.current,n=lt(),o=St.current;if(!e||!n||!o||o.threadId!==n||o.wasPinnedBefore)return;const d=(typeof performance<"u"?performance.now():Date.now())-o.capturedAtMs,w=e.scrollHeight>e.clientHeight,z=d>3e3,V=o.scrollTop<=0&&o.anchorOffset<=0&&w;if(!ce.current||z||V){St.current=null;return}let W=o.scrollTop;if(o.anchorMessageId){const fe=Ja(e,o.anchorMessageId);fe?W=fe.offsetTop-o.anchorOffset:W=o.scrollTop+(e.scrollHeight-o.scrollHeight)}else W=o.scrollTop+(e.scrollHeight-o.scrollHeight);e.scrollTop=Math.max(0,W),ce.current=!0,Ut(!0),St.current=null},[dt,lt,Ja]);const Vn=a.useCallback(e=>{},[dt.length,te]),xe=a.useCallback(e=>{Vn(e);const n=re.current;n&&(St.current=null,ce.current=!1,De(n))},[De,Vn]);a.useLayoutEffect(()=>{$e.current!==null&&(window.clearTimeout($e.current),$e.current=null);const e=te?x.activeRoom?.id??null:l?.id??null;if(!e){Xt.current=null;return}const n={threadId:e,loaded:te?!x.messagesLoading:!U,hasMessages:te?x.messages.length>0:F.length>0},o=Xt.current,d=o?.threadId!==e,w=o?.threadId===e&&!o.loaded&&n.loaded,z=o?.threadId===e&&!o.hasMessages&&n.hasMessages;if(!(o===null||d||w||z))return;const W=re.current;if(W)return Vn(d?"thread-change":w?"finished-loading":z?"first-messages":"mount"),De(W,{force:!0}),te||($e.current=window.setTimeout(()=>{if($e.current=null,ce.current)return;const fe=re.current;fe&&De(fe)},250)),Xt.current=n,()=>{$e.current!==null&&(window.clearTimeout($e.current),$e.current=null)}},[te,x.activeRoom?.id,x.messages.length,x.messagesLoading,l?.id,F.length,U,De]),a.useEffect(()=>{!B||ce.current||xe("streaming")},[B,T,Q,xe]),a.useEffect(()=>{const e=lt();if(!e){qt.current=0,Pn.current=null;return}if(Pn.current!==e){Pn.current=e,qt.current=dt.length;return}const n=qt.current,o=dt.length,d=o>n,w=!ce.current;qt.current=o,d&&w&&xe("new-message")},[dt,lt,xe]),a.useEffect(()=>{Ya<=0||!re.current||xe("keyboard")},[Ya,xe]),vo(Ve&&Zt),a.useLayoutEffect(()=>{if(!Ve||!l&&!te||typeof window>"u")return;const e=Fn.current,n=window.visualViewport;if(!e||!n)return;const o=w=>{if(!(w instanceof HTMLElement))return!1;if(w.tagName==="TEXTAREA")return!0;if(w.tagName!=="INPUT")return!1;const z=w.type.toLowerCase();return["","text","search","email","url","tel","password","number"].includes(z)},d=()=>{if(Gt.current){e.classList.remove("chat-thread--keyboard-active"),e.style.setProperty("--chat-keyboard-accessory-clearance","0px"),e.style.transform="",e.style.willChange="";return}const w=Math.max(0,window.innerHeight-n.offsetTop-n.height),z=n.offsetTop||0;e.style.setProperty("--vv-height",`${n.height}px`),e.style.setProperty("--vv-offset-top",`${z}px`),e.style.setProperty("--keyboard-overlap",`${w}px`);const V=(w>0||z>0)&&o(document.activeElement);e.classList.toggle("chat-thread--keyboard-active",V),e.style.setProperty("--chat-keyboard-accessory-clearance",V&&ha()?"calc(var(--space-2xl) + var(--space-md))":"0px"),V&&z>0?(e.style.transform=`translateY(${z}px)`,e.style.willChange="transform"):(e.style.transform="",e.style.willChange="")};return d(),n.addEventListener("resize",d),n.addEventListener("scroll",d),document.addEventListener("focusin",d),document.addEventListener("focusout",d),window.addEventListener("pageshow",d),document.addEventListener("visibilitychange",d),()=>{n.removeEventListener("resize",d),n.removeEventListener("scroll",d),document.removeEventListener("focusin",d),document.removeEventListener("focusout",d),window.removeEventListener("pageshow",d),document.removeEventListener("visibilitychange",d),e.classList.remove("chat-thread--keyboard-active"),e.style.setProperty("--chat-keyboard-accessory-clearance","0px"),e.style.transform="",e.style.willChange=""}},[l,Ve,te]),a.useEffect(()=>{const e=()=>Me(null);if(G)return document.addEventListener("click",e),()=>document.removeEventListener("click",e)},[G]),a.useEffect(()=>{if(!Ve||!Zt)return;const e=n=>{n.target?.closest(".chat-messages")||n.preventDefault()};return document.addEventListener("touchmove",e,{passive:!1}),()=>{document.removeEventListener("touchmove",e)}},[Ve,Zt]),a.useEffect(()=>{const e=Wa.current;if(Wa.current=P,P==="rooms"&&!x.activeRoom){Xt.current=null;return}if(!(P==="direct"&&(e===null||e==="rooms"))&&!(P==="rooms"&&(e===null||e==="direct")))return;const d=re.current;d&&(De(d,{force:!0}),ce.current=!1,Ut(!1))},[P,x.activeRoom,De]),a.useEffect(()=>{if(!l&&!te||te&&!H)return;const e=()=>{const o=!ce.current;nn(),o&&H&&re.current&&xe("visibility-restore")},n=()=>{document.visibilityState==="visible"&&e()};return document.addEventListener("visibilitychange",n),window.addEventListener("pageshow",e),()=>{document.removeEventListener("visibilitychange",n),window.removeEventListener("pageshow",e)}},[H,Ve,l,te,nn,xe]),a.useEffect(()=>{if(te||typeof ResizeObserver>"u")return;const e=re.current;if(!e)return;const n=new ResizeObserver(()=>{ce.current||De(e)});return n.observe(e),()=>{n.disconnect()}},[te,De,l?.id,P]),a.useEffect(()=>{qa.current=he},[he]),a.useEffect(()=>()=>{for(const e of qa.current)e.previewUrl&&URL.revokeObjectURL(e.previewUrl);for(const e of Mt.current.values())window.clearTimeout(e);Mt.current.clear()},[]);const ut=a.useCallback(e=>{if(!e||e.length===0)return;const n=[];for(const o of Array.from(e)){if(!rr.includes(o.type))continue;const d=o.type.startsWith("image/");n.push({file:o,previewUrl:d?URL.createObjectURL(o):""})}n.length>0&&Ht(o=>[...o,...n])},[]),ts=a.useCallback(e=>{Ht(n=>{const o=n[e];return o?.previewUrl&&URL.revokeObjectURL(o.previewUrl),n.filter((d,w)=>w!==e)})},[]),ns=a.useCallback(e=>{ut(e.clipboardData?.files)},[ut]),mt=a.useCallback(async e=>{try{return await D(e),Cn(!1),H&&He(!1),!0}catch{return r(i("chat.failedToCreateSession","Failed to create chat session"),"error"),!1}},[D,r,H,i]),an=a.useCallback(()=>{if(v?.chatNewSessionMode==="always-default"&&S){if(S.kind==="agent"){mt({agentId:S.agentId});return}mt({agentId:ke,modelProvider:S.modelProvider,modelId:S.modelId,thinkingLevel:S.thinkingLevel});return}Cn(!0)},[S,v?.chatNewSessionMode,mt]),ne=a.useCallback(e=>{const n=e??ee.current;if(!n)return;const o=Jt==="tablet"?Zo:Ra;n.style.height="auto",n.style.height=`${ar(n.scrollHeight,o)}px`,n.style.overflowY=nr(n.scrollHeight,o)},[Jt]),ki=Rs({textareaRef:ee,value:q,onChange:oe,onResize:()=>ne(ee.current),projectId:s}),Ci=Rs({textareaRef:Qt,value:q,onChange:oe,onResize:()=>ne(Qt.current),projectId:s}),Si=a.useCallback(e=>{ee.current=e,e&&ne(e)},[ne]),Mi=a.useCallback(e=>{Qt.current=e,e&&ne(e)},[ne]);a.useLayoutEffect(()=>{ne(P==="rooms"?Qt.current:ee.current),_n.current&&(_n.current=!1,ee.current?.focus())},[P,q,l?.id,x.activeRoom?.id,ne]),a.useEffect(()=>{if(I===void 0||I===Xa.current||!j?.trim())return;Xa.current=I;const e=n=>{n&&(Hn.current=!0),Qe("direct"),_n.current=!0,oe(j)};if(!B&&v?.chatNewSessionMode==="always-default"&&S){const n=S.kind==="agent"?{agentId:S.agentId}:{agentId:ke,modelProvider:S.modelProvider,modelId:S.modelId,thinkingLevel:S.thinkingLevel};mt(n).then(o=>e(o||P!=="direct"));return}e(P!=="direct")},[S,P,v?.chatNewSessionMode,mt,j,I,B,ne]);const ht=a.useCallback(()=>{if(oe(""),me)try{localStorage.removeItem(me)}catch{}Ue(!1),kt(""),nt(!1),tt(""),at(-1),Ht(e=>{for(const n of e)n.previewUrl&&URL.revokeObjectURL(n.previewUrl);return[]})},[me]),Xe=a.useCallback(e=>{Ht(n=>{const o=n.filter(d=>e.has(d.file));for(const d of o)d.previewUrl&&URL.revokeObjectURL(d.previewUrl);return n.filter(d=>!e.has(d.file))})},[]),Wn=a.useCallback(()=>{const e=q.trim(),n=he.map(d=>d.file);if(!e&&n.length===0||!l)return;if(b){const d=bo(e,Fs);if(d){if(!b.agentRunning){r(i("chat.commandNoRunningAgent","No running agent to steer"),"warning");return}if(n.length>0){r(i("chat.commandNoAttachments","Attachments aren't supported with commands — remove them before sending"),"warning");return}ht(),d.command.run({taskId:b.taskId,projectId:b.projectId,remainder:d.remainder}).then(()=>{r(i("chat.commandSteerSuccess","Sent to the running agent"),"success")}).catch(w=>{const z=w instanceof Error&&w.message.trim()?w.message:i("chat.commandSteerFailed","Failed to send to the running agent");r(z,"error")});return}}if(e==="/clear"||e==="/new"){if(n.length>0){r(i("chat.clearNoAttachments","Remove the attachments before running /clear or /new — they would be discarded unsent"),"warning");return}if(l.agentId.startsWith(wo)){ht(),r(i("chat.newNotAllowedForTaskChat","This chat is tied to a task — /new and /clear can't clear it"),"warning");return}ht(),Se(),Ce(),D({agentId:l.agentId,modelProvider:l.modelProvider??void 0,modelId:l.modelId??void 0,thinkingLevel:l.thinkingLevel??void 0}).catch(()=>{r(i("chat.failedToClearConversation","Failed to clear conversation"),"error")});return}if(B&&n.length>0){r(i("chat.attachmentsNotQueued","Attachments can't be queued while a reply is streaming — wait for it to finish"),"warning");return}const o=new Set(n);oe("");try{Z(e,n,{onAccepted:()=>Xe(o),onDelivered:()=>Xe(o),onFailed:()=>{oe(d=>d||e)}})}catch{oe(e)}},[q,he,l,ht,Ce,Se,D,r,Z,b,B,Xe,i]),Xn=a.useCallback(async()=>{const e=q.trim(),n=he.map(o=>o.file);if(!(!e&&n.length===0)){if(P==="rooms"){if(!x.activeRoom)return;if(e==="/clear"||e==="/new"){if(n.length>0){r(i("chat.clearNoAttachments","Remove the attachments before running /clear or /new — they would be discarded unsent"),"warning");return}ht();try{await x.clearRoom(x.activeRoom.id)}catch{r(i("chat.failedToClearRoomConversation","Failed to clear room conversation"),"error")}return}if(zn.current)return;zn.current=!0;const o=q,d=new Set(n);oe("");try{await x.sendRoomMessage(e,{files:n,onDelivered:()=>Xe(d)}),Xe(d)}catch(w){if(w instanceof oi){Xe(d);const V=w.message.trim()?w.message:i("chat.messageSentButReplyFailed","Message sent, but assistant reply failed");r(i("chat.messageSentButReplyFailedDetail","Message sent, but assistant reply failed: {{detail}}",{detail:V}),"error");return}oe(o);const z=w instanceof Error&&w.message.trim()?w.message:i("chat.failedToSendRoomMessage","Failed to send room message");r(z,"error")}finally{zn.current=!1}return}Wn()}},[q,he,Oe,P,x,x.clearRoom,ht,r,Wn,Xe]),sn=a.useCallback(async e=>{if(P==="rooms"){if(!x.activeRoom)return;try{await x.sendRoomMessage(e)}catch(n){const o=n instanceof Error&&n.message.trim()?n.message:i("chat.failedToSendRoomMessage","Failed to send room message");r(o,"error")}return}l&&Z(e)},[l,r,Oe,P,x,Z,i]),qn=a.useCallback(e=>{oe(n=>{const o=wa(n);if(!o)return n;const d=`/skill:${e.name} `,w=n.slice(0,o.start)+d+n.slice(o.end);return window.requestAnimationFrame(()=>{ee.current&&(ne(ee.current),ee.current.focus())}),w}),Ue(!1),kt(""),Ke(0)},[ne]),Gn=a.useCallback((e,n)=>{if(n){r(i("chat.commandNoRunningAgent","No running agent to steer"),"warning");return}oe(o=>{const d=wa(o);if(!d)return o;const w=`${e.trigger} `,z=o.slice(0,d.start)+w+o.slice(d.end);return window.requestAnimationFrame(()=>{ee.current&&(ne(ee.current),ee.current.focus())}),z}),Ue(!1),kt(""),Ke(0)},[ne,r,i]),on=a.useCallback(e=>{const n=ee.current;if(!n||In<0)return;const o=n.selectionStart??rt.current,d=n.selectionEnd??o,w=Math.max(o,d),z=Math.min(In,w),W=`${`@${e.name.replace(/\s+/g,"_")}`} `,fe=q.slice(0,z)+W+q.slice(w),ft=z+W.length;oe(fe),nt(!1),tt(""),Ot(0),at(-1),window.requestAnimationFrame(()=>{ee.current&&(ne(ee.current),ee.current.focus(),ee.current.setSelectionRange(ft,ft))})},[In,q,ne]),Rt=a.useCallback((e,n)=>{const d=ee.current?.selectionStart??rt.current,w=q.lastIndexOf("#",d),z=w>=0?w+n.length:e.length;oe(e),K.dismissMention(),Wt(!1),window.requestAnimationFrame(()=>{ee.current&&(ne(ee.current),ee.current.focus(),ee.current.setSelectionRange(z,z))})},[K,q,ne]),as=a.useCallback(e=>{if(rt.current=e.currentTarget.selectionStart??rt.current,K.mentionActive&&K.combinedItems.length>0){if(K.handleKeyDown(e,q),e.key==="Enter"||e.key==="Tab"){const n=K.combinedItems[K.selectedIndex];n?.kind==="task"?Rt(K.selectTask(n.task,q),`#${n.task.id}`):n?.kind==="file"&&Rt(K.selectFile(n.file,q),`#${n.file.path}`)}return}if(Ne&&e.key==="ArrowDown"){e.preventDefault(),We.length>0&&Ot(n=>(n+1)%We.length);return}if(Ne&&e.key==="ArrowUp"){e.preventDefault(),We.length>0&&Ot(n=>n===0?We.length-1:n-1);return}if(Ne&&e.key==="Enter"){e.preventDefault();const n=We[Bt]??We[0];n&&on(n);return}if(Ne&&e.key==="Escape"){e.preventDefault(),nt(!1),tt(""),at(-1);return}if(Je&&e.key==="ArrowDown"){e.preventDefault(),we.length>0&&Ke(n=>(n+1)%we.length);return}if(Je&&e.key==="ArrowUp"){e.preventDefault(),we.length>0&&Ke(n=>n===0?we.length-1:n-1);return}if(Je&&(e.key==="Enter"||e.key==="Tab")&&we.length>0){e.preventDefault();const n=we[Ze]??we[0];n?.kind==="skill"?qn(n.skill):n?.kind==="command"&&Gn(n.command,n.disabled);return}if(Je&&e.key==="Escape"){e.preventDefault(),Ue(!1);return}e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),Xn())},[Ne,We,Bt,on,Je,we,Ze,qn,Gn,Xn,K,Rt,q]),rn=a.useCallback((e,n)=>{const o=cr(e,n);if(o){nt(!0),tt(o.filter),at(o.start);return}nt(!1),tt(""),at(-1)},[]),ss=a.useCallback(e=>{const n=e.target,o=n.value,d=n.selectionStart??o.length;ne(n),rt.current=d,oe(o);const w=wa(o);w?(Ue(!0),kt(w.filter)):(Ue(!1),kt("")),rn(o,d),K.detectMention(o,d),Wt(K.mentionActive),K.mentionActive&&Ln(n)},[rn,ne]),cn=a.useCallback(e=>{const n=e.currentTarget,o=n.selectionStart??n.value.length;rt.current=o,rn(n.value,o),K.detectMention(n.value,o),Wt(K.mentionActive),K.mentionActive&&Ln(n)},[rn,K,Ln]),is=a.useCallback(e=>{e.key!=="Escape"&&cn(e)},[cn]),os=a.useCallback(()=>{typeof window<"u"&&window.innerWidth<=768&&(Gt.current=!0,Ae.current!==null&&window.clearTimeout(Ae.current),Ae.current=window.setTimeout(()=>{Gt.current=!1,Ae.current=null},450),(window.scrollY!==0||window.scrollX!==0)&&window.scrollTo(0,0),Te.current!==null&&window.clearTimeout(Te.current),Te.current=window.setTimeout(()=>{Te.current=null,document.activeElement?.tagName!=="TEXTAREA"&&(window.scrollY!==0||window.scrollX!==0)&&window.scrollTo(0,0)},350)),je.current!==null&&window.clearTimeout(je.current),je.current=window.setTimeout(()=>{Ue(!1),nt(!1),tt(""),at(-1),Wt(!1),K.dismissMention(),je.current=null},120)},[K]),rs=a.useCallback(()=>{Gt.current=!1,Ae.current!==null&&(window.clearTimeout(Ae.current),Ae.current=null),je.current!==null&&(window.clearTimeout(je.current),je.current=null),Te.current!==null&&(window.clearTimeout(Te.current),Te.current=null)},[]);a.useEffect(()=>()=>{Ae.current!==null&&window.clearTimeout(Ae.current),Te.current!==null&&window.clearTimeout(Te.current)},[]);const Ni=a.useCallback(async e=>{Me(null);try{await O(e),r(i("chat.conversationArchived","Conversation archived"),"success")}catch{r(i("chat.failedToArchiveConversation","Failed to archive conversation"),"error")}},[O,r]),cs=a.useCallback(e=>{const n=Fe.find(o=>o.id===e)??(l?.id===e?l:null);Me(null),Re(!1),Nn(n?.title??""),Lt({sessionId:e,title:n?.title??""})},[l,Fe]),ls=a.useCallback(async()=>{if(It)try{await R(It.sessionId,Mn),Lt(null),Nn(""),r(i("chat.conversationRenamed","Conversation renamed"),"success")}catch{}},[r,It,R,Mn,i]),ds=a.useCallback(async(e,n)=>{Me(null),Re(!1);try{await $(e,n),r(n?i("chat.conversationPinned","Conversation pinned"):i("chat.conversationUnpinned","Conversation unpinned"),"success")}catch{}},[r,$,i]),Ri=a.useCallback(async e=>{Pt(null),Me(null);try{await c(e),r(i("chat.conversationDeleted","Conversation deleted"),"success")}catch{r(i("chat.failedToDeleteConversation","Failed to delete conversation"),"error")}},[c,r]),jt=a.useCallback(e=>{try{localStorage.setItem(Gs,String(e))}catch{}},[]),ji=a.useCallback(e=>{if(H||Nt)return;e.preventDefault(),e.stopPropagation();const n=e.currentTarget;typeof n.setPointerCapture=="function"&&n.setPointerCapture(e.pointerId);const o=e.clientX,d=Ye;let w=d;document.body.style.userSelect="none";const z=W=>{const fe=W.clientX-o,ft=Math.max(pn,Math.min(vn,d+fe));w=ft,Tn(ft),jt(ft)},V=W=>{typeof n.releasePointerCapture=="function"&&n.releasePointerCapture(W.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",z),document.removeEventListener("pointerup",V),jt(w)};document.addEventListener("pointermove",z),document.addEventListener("pointerup",V)},[H,jt,Ye,Nt]),Ai=a.useCallback(e=>{if(H||Nt||e.key!=="ArrowLeft"&&e.key!=="ArrowRight")return;e.preventDefault();const n=e.shiftKey?50:10,o=e.key==="ArrowLeft"?-n:n,d=Math.max(pn,Math.min(vn,Ye+o));Tn(d),jt(d)},[H,jt,Ye,Nt]),us=a.useCallback(e=>{const n=Fe.find(o=>o.id===e);ue("direct",e,n?.lastMessageAt??n?.updatedAt),Y(e),Re(!1),H&&He(!1)},[Fe,H,ue,Y]),Qn=a.useCallback(()=>{Y(""),He(!0),Re(!1)},[Y]),Yn=a.useCallback(()=>{x.selectRoom(null),He(!0),Re(!1)},[x]),Ti=()=>t.jsxs("div",{className:"chat-empty-state",children:[t.jsx(bn,{size:48,strokeWidth:1.5}),t.jsx("h2",{children:i("chat.startNewConversation","Start a new conversation")}),t.jsxs("button",{className:"btn btn-primary",onClick:an,children:[t.jsx(gt,{size:16}),i("chat.newChat","New Chat")]})]}),Ie=ei(l,l?.agentId?be.get(l.agentId)??null:null,zt),Jn=a.useMemo(()=>{if(!Ie?.provider||!Ie.modelId)return null;const e=En.find(n=>n.provider===Ie.provider&&n.id===Ie.modelId);return e?.contextWindow?e.contextWindow:null},[Ie?.modelId,Ie?.provider,En]),Ei=a.useMemo(()=>Jo(F,B?T:void 0),[B,F,T]),_e=js(Ie?.provider,Ie?.modelId),qe=Ie?.provider??null,Zn=!!(l||B||F.length>0),ln=H&&!xt&&(P==="rooms"?te:Zn),dn=H?ln:P==="rooms"?te:!!l,ms=a.useRef(dn);a.useEffect(()=>{const e=ms.current;ms.current=dn,H&&(e||!dn||Oa({type:"view",revert:P==="rooms"?Yn:Qn}))},[P,Qn,Yn,dn,H,Oa]);const hs=l?.agentId===ke?_e??"Fusion":l?.title||be.get(l?.agentId??"")?.name||l?.agentId||"Chat",Di=l?.title||i("chat.untitledSession","Untitled"),Ii=!!(_e&&_e!==hs),Li=!H&&Zn&&Jn!==null,fs=Xs(Ei),un=Jn!==null?Xs(Jn):null,ea=un?i("chat.contextWindowAria","Estimated {{used}} of {{total}} context tokens",{used:fs,total:un}):null,Pi=ln&&P==="direct"&&!!l,gs=ln&&P==="direct",ps=ln&&P==="rooms",ta=be.get(l?.agentId??"")?.name||(l?.agentId===ke?_e??"Fusion":l?.agentId?.slice(0,30)??"Fusion"),na=!1,aa=l?.agentId===ke,Fi=e=>e.length>50?`${e.slice(0,50)}…`:e;a.useEffect(()=>{if(!Kt)return;const e=n=>{Ka.current?.contains(n.target)||Re(!1)};return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[Kt]),a.useEffect(()=>{if(!Vt)return;const e=o=>{Va.current?.contains(o.target)||Ct(!1)},n=o=>{o.key==="Escape"&&Ct(!1)};return document.addEventListener("mousedown",e),document.addEventListener("keydown",n),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",n)}},[Vt]),a.useEffect(()=>{(!H||P!=="direct"||xt)&&Re(!1)},[H,P,xt]),a.useEffect(()=>{Ct(!1)},[x.activeRoom?.id]);const vs=a.useCallback((e,n)=>{const o=Mt.current.get(e);o&&window.clearTimeout(o),Ba(w=>({...w,[e]:n}));const d=window.setTimeout(()=>{Ba(w=>{const{[e]:z,...V}=w;return V}),Mt.current.delete(e)},2e3);Mt.current.set(e,d)},[]),bs=a.useCallback(async(e,n)=>{const o=await xo(n);vs(e,o?"success":"error")},[vs]),sa=l?.agentId===ke,ia=a.useCallback((e,n,o,d,w=!0)=>{const z=sa&&o==="assistant",V=w&&o==="assistant"&&M?yo(n,i("chat.reportFallbackTitle","Chat report")):null;if(!(!z&&!V?.handoff))return t.jsxs(t.Fragment,{children:[z&&t.jsx("button",{type:"button",className:`btn-icon chat-message-copy-action${it[e]==="success"?" chat-message-copy-action--success":""}${it[e]==="error"?" chat-message-copy-action--error":""}`,"data-testid":d??`chat-copy-response-${e}`,"aria-label":it[e]==="success"?i("chat.responseCopied","Response copied"):it[e]==="error"?i("chat.copyFailed","Copy failed"):i("chat.copyResponse","Copy response"),onClick:()=>{bs(e,n)},children:it[e]==="success"?t.jsx(ko,{size:14}):t.jsx(Co,{size:14})}),V?.handoff&&t.jsx("button",{type:"button",className:"btn-icon","data-testid":`chat-send-as-report-${e}`,"aria-label":i("chat.sendAsReport","Send as report"),onClick:()=>{V.truncated&&r(i("chat.reportTrimmed","Message trimmed to 2000 characters for mail"),"warning"),M?.(V.handoff)},children:t.jsx(So,{size:14})})]})},[r,it,bs,M,sa,i]),oa=a.useCallback(e=>{const n=re.current;if(!n)return;const o=`[data-testid="chat-message-${e}"]`,d=n.querySelector(o);if(!d)return;const w=d.getBoundingClientRect().top-n.getBoundingClientRect().top+n.scrollTop,z=typeof window<"u"&&window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;n.scrollTo({top:w,behavior:z?"auto":"smooth"})},[]),ws=l?.cliExecutorAdapterId??null,ra=!!ws,$i=ws==="generic"?"generic":"hybrid",_i=l?.cliSessionFile||l?.id||"",xs=!ra&&!B,ys=()=>t.jsxs("div",{className:"chat-messages",ref:re,onScroll:es,children:[t.jsx("div",{ref:Ua,className:"chat-load-more-sentinel",children:Pe&&U&&t.jsx("div",{className:"chat-loading-older",children:i("chat.loadingOlderMessages","Loading older messages…")})}),B?t.jsxs(t.Fragment,{children:[F.map((e,n)=>t.jsx(ma,{message:e,forcePlain:!1,agentName:ta,hideAssistantIdentity:aa,showAssistantModelTag:na,activeModelTag:_e,activeModelProvider:qe,activeSessionId:l?.id??null,projectId:s,mentionAgentsByName:Kn,roomContext:null,copyAction:ia(e.id,e.content,e.role),onScrollToTop:oa,isTopClipped:$n.has(e.id),isAwaitingQuestionAnswer:e.role==="assistant"&&n===F.length-1&&!B,submittedQuestionAnswer:Qs(F,n),onQuestionSubmit:sn,canEdit:xs,onEditMessage:le},e.id)),t.jsx(Eo,{streamingText:T,streamingThinking:Q,streamingToolCalls:se,forcePlain:!1,agentName:ta,hideAssistantIdentity:aa,showAssistantModelTag:na,activeModelTag:_e,activeModelProvider:qe,copyAction:sa&&T?ia("__streaming__",T,"assistant","chat-copy-response-streaming",!1):void 0,onQuestionSubmit:sn})]}):U?t.jsx("div",{className:"chat-empty-state",children:i("chat.loadingMessages","Loading messages...")}):F.length===0&&!l?Ti():F.length===0&&l?t.jsx("div",{className:"chat-empty-state",children:i("chat.noMessagesYet","No messages yet. Start the conversation!")}):t.jsx(t.Fragment,{children:F.map((e,n)=>t.jsx(ma,{message:e,forcePlain:!1,agentName:ta,hideAssistantIdentity:aa,showAssistantModelTag:na,activeModelTag:_e,activeModelProvider:qe,activeSessionId:l?.id??null,projectId:s,mentionAgentsByName:Kn,roomContext:null,copyAction:ia(e.id,e.content,e.role),onScrollToTop:oa,isTopClipped:$n.has(e.id),isAwaitingQuestionAnswer:e.role==="assistant"&&n===F.length-1&&!B,submittedQuestionAnswer:Qs(F,n),onQuestionSubmit:sn,canEdit:xs,onEditMessage:le},e.id))}),t.jsx("div",{ref:Ha})]}),ks=()=>t.jsxs("div",{className:"chat-input-area",children:[t.jsx("input",{ref:Yt,type:"file","data-testid":"chat-file-input",accept:Zs,multiple:!0,style:{display:"none"},onChange:e=>{ut(e.target.files),e.target.value=""}}),Je&&t.jsx("div",{className:"chat-skill-menu","data-testid":"chat-skill-menu",role:"listbox","aria-label":i("chat.skillSuggestions","Skill suggestions"),children:pi&&Un.length===0?t.jsx("div",{className:"chat-skill-menu-empty",children:i("chat.loadingSkills","Loading skills…")}):we.length===0?t.jsx("div",{className:"chat-skill-menu-empty",children:yt?i("chat.noSkillsFound","No skills found"):i("chat.noSkillsAvailable","No skills available")}):we.map((e,n)=>e.kind==="command"?t.jsxs("button",{type:"button",role:"option","aria-selected":n===Ze,"aria-disabled":e.disabled,className:`chat-skill-menu-item chat-command-menu-item${n===Ze?" chat-skill-menu-item--highlighted":""}${e.disabled?" chat-command-menu-item--disabled":""}`,onMouseDown:o=>o.preventDefault(),onMouseEnter:()=>Ke(n),onClick:()=>Gn(e.command,e.disabled),children:[t.jsx("span",{className:"chat-skill-menu-item-name",children:e.command.trigger}),t.jsx("span",{className:"chat-skill-menu-item-description",children:e.disabled?i("chat.commandNoRunningAgentHint","No running agent to steer"):e.command.description})]},`command-${e.command.trigger}`):t.jsxs("button",{type:"button",role:"option","aria-selected":n===Ze,className:`chat-skill-menu-item${n===Ze?" chat-skill-menu-item--highlighted":""}`,onMouseDown:o=>o.preventDefault(),onMouseEnter:()=>Ke(n),onClick:()=>qn(e.skill),children:[t.jsx("span",{className:"chat-skill-menu-item-name",children:e.skill.name}),t.jsx("span",{className:"chat-skill-menu-item-description",title:e.skill.relativePath,children:e.skill.relativePath})]},e.skill.id))}),he.length>0&&t.jsx("div",{className:"chat-attachment-previews","data-testid":"chat-attachment-previews",children:he.map((e,n)=>t.jsxs("div",{className:"chat-attachment-preview","data-testid":`chat-attachment-preview-${n}`,children:[e.previewUrl?t.jsx("img",{src:e.previewUrl,alt:e.file.name}):t.jsx("span",{className:"chat-attachment-preview-name",children:e.file.name}),t.jsx("button",{type:"button",className:"chat-attachment-remove",onClick:()=>ts(n),"data-testid":`chat-attachment-remove-${n}`,"aria-label":`Remove ${e.file.name}`,children:"×"})]},e.previewUrl||`${e.file.name}-${n}`))}),de.length>0&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"chat-pending-stack","data-testid":"chat-pending-stack",children:de.map((e,n)=>t.jsxs("div",{className:"chat-pending-message","data-testid":"chat-pending-indicator",children:[t.jsx("span",{children:i("chat.queuedMessage","Queued: {{preview}}",{preview:Fi(e)})}),t.jsx("button",{type:"button",className:"chat-pending-message-dismiss","aria-label":i("chat.dismissQueuedMessage","Dismiss queued message"),"data-testid":`chat-pending-dismiss-${n}`,onClick:()=>Se(n),children:"×"})]},`${n}-${e}`))}),t.jsx("div",{className:"chat-pending-divider","aria-hidden":"true"})]}),t.jsxs("div",{className:"chat-input-row",children:[t.jsx("button",{type:"button",className:"btn-icon chat-attach-btn","data-testid":"chat-attach-btn","aria-label":i("chat.attachFiles","Attach files"),onClick:()=>Yt.current?.click(),children:t.jsx(Is,{size:16})}),!ra&&t.jsx(Os,{level:l?.thinkingLevel,defaultThinkingLevel:N,models:En,favoriteProviders:hi,favoriteModels:fi,agents:Array.from(be.values()),agentId:l?.agentId,modelProvider:l?.modelProvider,modelId:l?.modelId,onChange:e=>{l&&ge(l.id,e)},onChangeModel:e=>{l&&ae(l.id,e)},disabled:!l}),t.jsxs("div",{className:`chat-input-wrapper${_a?" chat-input-wrapper--dragover":""}`,onDragOver:e=>{e.preventDefault(),st(!0)},onDragLeave:()=>st(!1),onDrop:e=>{e.preventDefault(),st(!1),ut(e.dataTransfer.files)},children:[t.jsx("textarea",{ref:Si,className:"chat-input-textarea",placeholder:i("chat.typeMessage","Type a message..."),value:q,onChange:ss,onKeyDown:as,onKeyUp:is,onClick:cn,onBlur:os,onFocus:rs,onPaste:ns,onTouchStart:e=>{typeof window>"u"||window.innerWidth>768||ha()&&(document.activeElement,e.currentTarget)},rows:1,"data-testid":"chat-input"}),t.jsx(Us,{agents:ct,filter:et,highlightedIndex:Bt,visible:Ne,onSelect:on,position:"below",roomMemberIds:Ee?.memberIds,roomName:Ee?.roomName}),t.jsx(Oo,{visible:K.mentionActive&&!Ne,position:vi,tasks:K.tasks,files:K.files,selectedIndex:K.selectedIndex,onSelectTask:e=>{Rt(K.selectTask(e,q),`#${e.id}`)},onSelectFile:e=>{Rt(K.selectFile(e,q),`#${e.path}`)},loading:K.loading})]}),t.jsx(Ls,{...ki.micProps}),t.jsx(Ps,{isStreaming:B,canSend:!!(q.trim()||he.length>0),onSend:Wn,onStop:Ce})]})]}),zi=H?void 0:{width:`${Ye}px`},Cs=Fe.filter(e=>e.pinnedAt!=null),Ss=Fe.filter(e=>e.pinnedAt==null),ye=G?Fe.find(e=>e.id===G.sessionId)??(l?.id===G.sessionId?l:void 0):void 0,Ms=a.useCallback(async()=>{const e=Rn.trim();if(!e)return;let n;try{n=await A(e)}catch{r(i("chat.failedToCreateTag","Failed to create tag"),"error");return}if(G?.sessionId){const o=(ye?.tags??[]).map(d=>d.id);if(!o.includes(n.id))try{await pe(G.sessionId,[...o,n.id])}catch{r(i("chat.failedToUpdateTags","Failed to update tags"),"error");return}}Da("")},[r,G,ye,A,Rn,pe,i]),Bi=Pi?t.jsxs("div",{className:"chat-mobile-session-menu",ref:Ka,children:[t.jsxs("button",{type:"button",className:"btn chat-mobile-session-trigger","data-testid":"chat-mobile-session-trigger","aria-haspopup":"menu","aria-expanded":Kt,onClick:()=>Re(e=>!e),children:[qe?t.jsx(la,{provider:qe,size:"md"}):t.jsx(xn,{size:16}),t.jsx("span",{className:"chat-thread-header-title",children:Di}),t.jsx(mn,{size:16,"aria-hidden":"true"})]}),Kt&&t.jsxs("div",{className:"chat-mobile-session-dropdown",role:"menu","data-testid":"chat-mobile-session-dropdown",children:[[{id:"pinned",label:i("chat.pinned","Pinned"),testId:"chat-mobile-pinned-divider",sessions:Cs},{id:"recent",label:i("chat.recent","Recent"),testId:"chat-mobile-recent-divider",sessions:Ss}].filter(e=>e.sessions.length>0).map(e=>t.jsxs("section",{className:"chat-session-section","data-testid":`chat-mobile-session-section-${e.id}`,children:[t.jsx("div",{className:"chat-pinned-divider","data-testid":e.testId,children:e.label}),e.sessions.map(n=>t.jsxs("div",{className:`chat-mobile-session-option-row${l?.id===n.id?" chat-mobile-session-option-row--active":""}`,role:"none",children:[t.jsx("button",{type:"button",role:"menuitem",className:`chat-mobile-session-option${l?.id===n.id?" chat-mobile-session-option--active":""}`,"data-testid":`chat-mobile-session-option-${n.id}`,onClick:()=>us(n.id),children:t.jsxs("span",{className:"chat-mobile-session-option-title",children:[n.title||i("chat.untitledSession","Untitled"),n.pinnedAt?t.jsx(hn,{className:"chat-session-pinned-indicator",size:14,"data-testid":`chat-session-pinned-indicator-${n.id}`,"aria-label":i("chat.pinned","Pinned")}):null]})}),t.jsx("button",{type:"button",className:"btn-icon chat-mobile-session-pin","data-testid":`chat-mobile-session-pin-${n.id}`,"aria-label":n.pinnedAt?i("chat.unpinConversationAria","Unpin conversation {{title}}",{title:n.title||i("chat.untitledSession","Untitled")}):i("chat.pinConversationAria","Pin conversation {{title}}",{title:n.title||i("chat.untitledSession","Untitled")}),title:!n.pinnedAt&&ie>=3?i("chat.pinLimit","You can pin up to 3 conversations"):void 0,disabled:!n.pinnedAt&&ie>=3,onClick:()=>ds(n.id,!n.pinnedAt),children:n.pinnedAt?t.jsx(As,{size:14}):t.jsx(hn,{size:14})}),t.jsx("button",{type:"button",className:"btn-icon chat-mobile-session-rename","data-testid":`chat-mobile-session-rename-${n.id}`,"aria-label":i("chat.renameConversationAria","Rename conversation {{title}}",{title:n.title||i("chat.untitledSession","Untitled")}),onClick:()=>cs(n.id),children:t.jsx(da,{size:14})})]},n.id))]},e.id)),t.jsxs("button",{type:"button",role:"menuitem",className:"chat-mobile-session-new","data-testid":"chat-mobile-session-new",onClick:()=>{Re(!1),an()},children:[t.jsx(gt,{size:16,"aria-hidden":"true"}),t.jsx("span",{children:i("chat.newChat","New Chat")})]})]})]}):null,Oi=t.jsxs("div",{className:"chat-sidebar-scope-toggle chat-view-header-scope-toggle",role:"tablist","data-testid":"chat-sidebar-scope-toggle",children:[t.jsxs("button",{type:"button",role:"tab",className:`chat-sidebar-scope-btn${P==="direct"?" chat-sidebar-scope-btn--active":""}`,"aria-selected":P==="direct","data-testid":"chat-sidebar-scope-direct",onClick:()=>Qe("direct"),children:[t.jsx(bn,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:i("chat.scopeDirect","Direct")})]}),t.jsxs("button",{type:"button",role:"tab",className:`chat-sidebar-scope-btn${P==="rooms"?" chat-sidebar-scope-btn--active":""}`,"aria-selected":P==="rooms","data-testid":"chat-sidebar-scope-rooms",onClick:()=>Qe("rooms"),children:[t.jsx(ii,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:i("chat.scopeRooms","Rooms")})]})]});return t.jsxs("div",{ref:Ga,className:`chat-view${m?" chat-view--floating":""}${H?" chat-view--narrow":""}${gs?" chat-view--mobile-direct-thread":""}`,children:[t.jsx(Mo,{icon:bn,title:i("chat.title","Chat"),actions:t.jsxs(t.Fragment,{children:[gs?t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn-icon chat-back-btn",onClick:Qn,"data-testid":"chat-back-btn","aria-label":i("chat.backToConversations","Back to conversations"),children:t.jsx(Ts,{size:16})}),Bi]}):Oi,H?null:t.jsxs("button",{className:"btn btn-sm btn-primary chat-view-header-new-chat",onClick:an,"data-testid":"chat-new-btn",children:[t.jsx(gt,{size:14}),i("chat.newChat","New Chat")]}),!m&&u?t.jsx("button",{type:"button",className:"btn-icon chat-view-header-icon",onClick:u,"aria-label":i("chat.popOut","Pop out chat"),title:i("chat.popOut","Pop out chat"),"data-testid":"chat-pop-out",children:t.jsx(Es,{size:16})}):null,m&&h?t.jsx("button",{type:"button",className:"btn-icon chat-view-header-icon",onClick:h,"aria-label":i("chat.maximizeToChatView","Open in Chat view"),title:i("chat.maximizeToChatView","Open in Chat view"),"data-testid":"chat-modal-maximize",children:t.jsx(Es,{size:16})}):null,m&&k?t.jsx("button",{type:"button",className:"btn-icon chat-view-header-icon",onClick:k,"aria-label":i("chat.minimizeToQuickChat","Minimize to quick chat"),title:i("chat.minimizeToQuickChat","Minimize to quick chat"),"data-testid":"chat-modal-minimize",children:t.jsx(No,{size:16})}):null,m&&C?t.jsx("button",{type:"button",className:"btn-icon chat-view-header-icon",onClick:C,"aria-label":i("chat.closeChat","Close chat"),title:i("chat.closeChat","Close chat"),"data-testid":"chat-modal-close",children:t.jsx(Ds,{size:16})}):null]})}),t.jsxs("div",{className:"chat-view__body",children:[t.jsxs("div",{className:`chat-sidebar${xt?"":" chat-sidebar--hidden"}`,style:zi,children:[P==="direct"?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"chat-sidebar-search-container",children:[t.jsxs("div",{className:"chat-sidebar-search-wrapper",children:[t.jsx(Ro,{size:14,className:"chat-sidebar-search-icon"}),t.jsx("input",{type:"text",className:"chat-sidebar-search",placeholder:i("chat.searchConversations","Search conversations..."),value:li,onChange:e=>di(e.target.value),"data-testid":"chat-search-input"})]}),t.jsxs("label",{className:"chat-tag-filter",htmlFor:"chat-tag-filter",children:[t.jsx(Lo,{size:14,"aria-hidden":"true"}),t.jsxs("select",{id:"chat-tag-filter",value:y??"",onChange:e=>f(e.target.value||null),"data-testid":"chat-tag-filter","aria-label":i("chat.filterByTag","Filter conversations by tag"),children:[t.jsx("option",{value:"",children:i("chat.allTags","All tags")}),p.map(e=>t.jsx("option",{value:e.id,children:e.name},e.id))]}),y?t.jsx("button",{type:"button",className:"btn-icon","aria-label":i("chat.clearTagFilter","Clear tag filter"),onClick:()=>f(null),children:t.jsx(Ds,{size:14})}):null]})]}),t.jsx("div",{className:"chat-session-list chat-sidebar-list",children:L?t.jsx("div",{className:"chat-empty-state chat-empty-state--padded",children:i("chat.loadingConversations","Loading...")}):Fe.length===0?t.jsx("div",{className:"chat-empty-state chat-empty-state--padded",children:i("chat.noConversationsYet","No conversations yet")}):t.jsx(t.Fragment,{children:[{id:"pinned",label:i("chat.pinned","Pinned"),testId:"chat-pinned-divider",sessions:Cs},{id:"recent",label:i("chat.recent","Recent"),testId:"chat-recent-divider",sessions:Ss}].filter(e=>e.sessions.length>0).map(e=>t.jsxs("section",{className:"chat-session-section","data-testid":`chat-session-section-${e.id}`,children:[t.jsx("div",{className:"chat-pinned-divider","data-testid":e.testId,children:e.label}),e.sessions.map(n=>{const o=l?.id===n.id,d=!o&&ja("direct",n.id,n.lastMessageAt??n.updatedAt),w=ei(n,be.get(n.agentId)??null,zt),z=js(w?.provider,w?.modelId)??"Fusion",V=n.title||i("chat.untitledSession","Untitled");return t.jsxs("div",{className:`chat-session-item${o?" chat-session-item--active":""}`,onClick:()=>us(n.id),onContextMenu:W=>{W.preventDefault(),Aa(n.id,W.clientX,W.clientY)},"data-testid":`chat-session-${n.id}`,children:[t.jsx("button",{type:"button",className:"btn-icon chat-session-menu-btn","data-testid":"chat-session-menu-btn","aria-label":i("chat.conversationActionsAria","Conversation actions for {{title}}",{title:V}),"aria-haspopup":"menu","aria-expanded":G?.sessionId===n.id,onClick:W=>{if(W.stopPropagation(),G?.sessionId===n.id){Me(null);return}const fe=W.currentTarget.getBoundingClientRect();Aa(n.id,fe.right,fe.bottom,{anchorRight:!0})},children:t.jsx(jo,{size:14})}),t.jsxs("div",{className:"chat-session-title",children:[V,n.pinnedAt?t.jsx(hn,{className:"chat-session-pinned-indicator",size:14,"data-testid":`chat-session-pinned-indicator-${n.id}`,"aria-label":i("chat.pinned","Pinned")}):null,d?t.jsx("span",{className:"chat-unread-dot","data-testid":`chat-unread-dot-${n.id}`,"aria-label":i("chat.unreadMessages","Unread messages")}):null]}),t.jsx("div",{className:"chat-session-preview",children:n.lastMessagePreview||i("chat.noMessages","No messages")}),(n.tags??[]).length>0?t.jsx("div",{className:"chat-session-tags","data-testid":`chat-session-tags-${n.id}`,children:(n.tags??[]).map(W=>t.jsx("span",{className:"chat-session-tag",children:W.name},W.id))}):null,n.matchedMessagePreview?t.jsx("div",{className:"chat-session-preview chat-session-preview--matched","data-testid":`chat-session-matched-preview-${n.id}`,children:i("chat.matchedInMessage",'Matched: "{{preview}}"',{preview:n.matchedMessagePreview})}):null,t.jsxs("div",{className:"chat-session-meta",children:[t.jsxs("span",{className:"chat-session-meta-model",children:[w?.provider?t.jsx(la,{provider:w.provider,size:"sm"}):null,t.jsx("span",{children:be.get(n.agentId)?.name||(n.agentId===ke?z:n.agentId.slice(0,30))})]}),t.jsx("span",{children:n.updatedAt?sr(n.updatedAt,i):""})]})]},n.id)})]},e.id))})})]}):t.jsxs("div",{className:"chat-sidebar-rooms","data-testid":"chat-sidebar-rooms",children:[!H&&t.jsx("div",{className:"chat-sidebar-rooms-header","data-testid":"chat-sidebar-rooms-header",children:t.jsxs("button",{type:"button",className:"btn btn-sm btn-primary","data-testid":"chat-create-room-btn",onClick:()=>_t(!0),children:[t.jsx(gt,{size:14}),i("chat.createRoom","Create room")]})}),x.rooms.length===0?t.jsx("div",{className:"chat-sidebar-rooms-empty","data-testid":"chat-sidebar-rooms-empty",children:i("chat.noRoomsYet","No rooms yet.")}):t.jsx("div",{className:"chat-session-list chat-sidebar-list",children:x.rooms.map(e=>{const n=x.activeRoom?.id===e.id,o=!n&&ja("room",e.id,e.updatedAt);return t.jsxs("div",{role:"button",tabIndex:0,className:`chat-room-item${n?" chat-room-item--active":""}`,"data-testid":`chat-room-item-${e.slug}`,onClick:()=>{ue("room",e.id,e.updatedAt),x.selectRoom(e.id),H&&He(!1)},onKeyDown:d=>{(d.key==="Enter"||d.key===" ")&&(d.preventDefault(),ue("room",e.id,e.updatedAt),x.selectRoom(e.id),H&&He(!1))},children:[t.jsxs("span",{className:"chat-room-item-details",children:[t.jsxs("span",{className:"chat-room-item-name-row",children:[t.jsxs("span",{className:"chat-room-item-name",children:["#",e.name]}),o?t.jsx("span",{className:"chat-unread-dot","data-testid":`chat-unread-dot-${e.id}`,"aria-label":i("chat.unreadMessages","Unread messages")}):null]}),n?t.jsx("span",{className:"chat-room-item-meta",children:i("chat.roomMemberCount","{{count}} member",{count:x.activeRoomMembers.length,defaultValue_one:"{{count}} member",defaultValue_other:"{{count}} members"})}):null]}),t.jsx("button",{type:"button",className:"btn-icon chat-room-item-delete","data-testid":`chat-room-delete-${e.slug}`,"aria-label":i("chat.deleteRoom","Delete room {{name}}",{name:e.name}),onClick:d=>{d.stopPropagation(),Ft(e.id)},children:t.jsx(ua,{size:14})})]},e.id)})})]}),P==="rooms"?H?t.jsx("div",{className:"chat-sidebar-footer",children:t.jsxs("button",{type:"button",className:"btn btn-sm btn-primary chat-sidebar-footer-btn","data-testid":"chat-create-room-btn",onClick:()=>_t(!0),children:[t.jsx(gt,{size:14}),i("chat.createRoom","Create room")]})}):null:H?t.jsx("div",{className:"chat-sidebar-footer",children:t.jsxs("button",{className:"btn btn-sm btn-primary chat-sidebar-footer-btn",onClick:an,"data-testid":"chat-new-btn",children:[t.jsx(gt,{size:14}),i("chat.newChat","New Chat")]})}):null]}),!H&&xt&&!Nt&&t.jsx("div",{className:"chat-sidebar-resize-handle",role:"separator","aria-orientation":"vertical","aria-valuemin":pn,"aria-valuemax":vn,"aria-valuenow":Ye,"aria-label":i("chat.resizeSidebar","Resize chat sidebar"),tabIndex:0,onPointerDown:ji,onKeyDown:Ai}),G&&t.jsxs("div",{className:"chat-session-context-menu",ref:Sn,role:"menu",style:{top:G.y,left:G.x},onClick:e=>e.stopPropagation(),children:[t.jsxs("button",{onClick:()=>ds(G.sessionId,!ye?.pinnedAt),"data-testid":"chat-context-pin",title:ie>=3&&!ye?.pinnedAt?i("chat.pinLimit","You can pin up to 3 conversations"):void 0,disabled:ie>=3&&!ye?.pinnedAt,children:[ye?.pinnedAt?t.jsx(As,{size:14}):t.jsx(hn,{size:14}),ye?.pinnedAt?i("chat.unpin","Unpin"):i("chat.pin","Pin")]}),t.jsxs("button",{onClick:()=>cs(G.sessionId),"data-testid":"chat-context-rename",children:[t.jsx(da,{size:14}),i("chat.rename","Rename")]}),t.jsxs("div",{className:"chat-session-tag-menu",role:"group","aria-label":i("chat.conversationTags","Conversation tags"),children:[p.map(e=>{const n=(ye?.tags??[]).some(o=>o.id===e.id);return t.jsxs("div",{className:"chat-tag-menu-item",children:[t.jsxs("button",{type:"button",role:"menuitemcheckbox","aria-checked":n,"data-testid":`chat-context-tag-${e.id}`,onClick:()=>void pe(G.sessionId,n?(ye?.tags??[]).filter(o=>o.id!==e.id).map(o=>o.id):[...(ye?.tags??[]).map(o=>o.id),e.id]).catch(()=>r(i("chat.failedToUpdateTags","Failed to update tags"),"error")),children:[n?"✓ ":"",e.name]}),t.jsx("button",{type:"button",className:"btn-icon","aria-label":i("chat.renameTag","Rename tag {{name}}",{name:e.name}),"data-testid":`chat-context-rename-tag-${e.id}`,onClick:o=>{o.stopPropagation(),Ia(e.name),wt(e)},children:t.jsx(da,{size:14})}),t.jsx("button",{type:"button",className:"btn-icon","aria-label":i("chat.deleteTag","Delete tag {{name}}",{name:e.name}),"data-testid":`chat-context-delete-tag-${e.id}`,onClick:o=>{o.stopPropagation(),$t(e)},children:t.jsx(ua,{size:14})})]},e.id)}),t.jsxs("div",{className:"chat-tag-create-row",children:[t.jsx("input",{className:"input",value:Rn,placeholder:i("chat.newTag","New tag"),"aria-label":i("chat.newTag","New tag"),onChange:e=>Da(e.target.value),onKeyDown:e=>{e.key==="Enter"&&(e.preventDefault(),Ms())}}),t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>void Ms(),children:i("chat.addTag","Add")})]})]}),t.jsxs("button",{onClick:()=>Ni(G.sessionId),"data-testid":"chat-context-archive",children:[t.jsx(Ao,{size:14}),i("chat.archive","Archive")]}),t.jsxs("button",{onClick:()=>{Me(null),Pt(G.sessionId)},"data-testid":"chat-context-delete",children:[t.jsx(ua,{size:14}),i("chat.delete","Delete")]})]}),It&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>Lt(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",role:"dialog","aria-modal":"true","aria-labelledby":"chat-rename-dialog-title",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{id:"chat-rename-dialog-title",children:i("chat.renameConversationTitle","Rename Conversation")}),t.jsx("p",{className:"chat-view-delete-dialog-copy",children:i("chat.renameConversationBody","Choose a new name for this conversation. Leave it blank to show Untitled.")}),t.jsx("label",{className:"chat-rename-label",htmlFor:"chat-rename-input",children:i("chat.conversationName","Conversation name")}),t.jsx("input",{id:"chat-rename-input",className:"input chat-rename-input",type:"text",value:Mn,placeholder:i("chat.renamePlaceholder","Untitled"),"data-testid":"chat-rename-input",onChange:e=>Nn(e.target.value),onKeyDown:e=>{e.key==="Enter"&&(e.preventDefault(),ls())},autoFocus:!0}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>Lt(null),children:i("chat.cancel","Cancel")}),t.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>void ls(),"data-testid":"chat-rename-save",children:i("chat.save","Save")})]})]})}),jn&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>wt(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",role:"dialog","aria-modal":"true","aria-labelledby":"chat-rename-tag-dialog-title",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{id:"chat-rename-tag-dialog-title",children:i("chat.renameTagTitle","Rename tag")}),t.jsx("label",{className:"chat-rename-label",htmlFor:"chat-rename-tag-input",children:i("chat.tagName","Tag name")}),t.jsx("input",{id:"chat-rename-tag-input",className:"input chat-rename-input",value:An,"data-testid":"chat-rename-tag-input",onChange:e=>Ia(e.target.value),onKeyDown:e=>{e.key==="Enter"&&(e.preventDefault(),_(jn.id,An).then(()=>wt(null)).catch(()=>r(i("chat.failedToRenameTag","Failed to rename tag"),"error")))},autoFocus:!0}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>wt(null),children:i("chat.cancel","Cancel")}),t.jsx("button",{className:"btn btn-sm btn-primary","data-testid":"chat-rename-tag-save",onClick:()=>void _(jn.id,An).then(()=>wt(null)).catch(()=>r(i("chat.failedToRenameTag","Failed to rename tag"),"error")),children:i("chat.save","Save")})]})]})}),La&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>$t(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",role:"dialog","aria-modal":"true","aria-labelledby":"chat-delete-tag-dialog-title",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{id:"chat-delete-tag-dialog-title",children:i("chat.deleteTagTitle","Delete tag?")}),t.jsx("p",{className:"chat-view-delete-dialog-copy",children:i("chat.deleteTagBody","This removes the tag from all conversations, but does not delete conversations.")}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>$t(null),children:i("chat.cancel","Cancel")}),t.jsx("button",{className:"btn btn-sm btn-danger","data-testid":"chat-delete-tag-confirm",onClick:()=>void J(La.id).then(()=>$t(null)).catch(()=>r(i("chat.failedToDeleteTag","Failed to delete tag"),"error")),children:i("chat.delete","Delete")})]})]})}),Ta&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>Pt(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{children:i("chat.deleteConversationTitle","Delete Conversation?")}),t.jsx("p",{className:"chat-view-delete-dialog-copy",children:i("chat.deleteConversationBody","This action cannot be undone. All messages in this conversation will be permanently deleted.")}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>Pt(null),children:i("chat.cancel","Cancel")}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void Ri(Ta),children:i("chat.delete","Delete")})]})]})}),Ea&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>Ft(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{children:i("chat.deleteRoomTitle","Delete Room?")}),t.jsx("p",{className:"chat-view-delete-dialog-copy",children:i("chat.deleteRoomBody","This action cannot be undone. This room and all its messages will be permanently deleted.")}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>Ft(null),children:i("chat.cancel","Cancel")}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>{(async()=>{try{await x.deleteRoom(Ea),Ft(null)}catch{r(i("chat.failedToDeleteRoom","Failed to delete room"),"error")}})()},children:i("chat.delete","Delete")})]})]})}),P==="rooms"?t.jsxs("div",{ref:Fn,className:"chat-thread",children:[x.activeRoom?t.jsxs(t.Fragment,{children:[(!H||ps)&&t.jsxs("div",{className:"chat-room-thread-header",children:[ps&&t.jsx("button",{className:"btn-icon",onClick:Yn,"data-testid":"chat-back-btn",children:t.jsx(Ts,{size:16})}),t.jsxs("div",{className:"chat-room-switcher-menu",ref:Va,children:[t.jsxs("button",{type:"button",className:"chat-room-switcher-trigger","data-testid":"chat-room-switcher-trigger","aria-haspopup":"menu","aria-expanded":Vt,onClick:()=>Ct(e=>!e),children:[t.jsxs("span",{className:"chat-thread-header-title",children:["#",x.activeRoom.name]}),t.jsx(mn,{size:16,"aria-hidden":"true"})]}),Vt&&t.jsx("div",{role:"menu",className:"chat-room-switcher-dropdown","data-testid":"chat-room-switcher-dropdown",children:x.rooms.map(e=>t.jsxs("button",{type:"button",role:"menuitem",className:`chat-room-switcher-option${e.id===x.activeRoom?.id?" chat-room-switcher-option--active":""}`,"data-testid":`chat-room-switcher-option-${e.id}`,onClick:()=>{ue("room",e.id,e.updatedAt),x.selectRoom(e.id),Ct(!1)},children:["#",e.name]},e.id))})]}),t.jsx("div",{className:"chat-room-thread-members",children:x.activeRoomMembers.map(e=>t.jsx(yn,{agent:be.get(e.agentId)??{id:e.agentId,name:e.agentId.slice(0,30)}},e.agentId))})]}),t.jsxs("div",{className:"chat-messages",ref:re,onScroll:es,children:[x.messagesLoading?t.jsx("div",{className:"chat-empty-state",children:i("chat.loadingMessages","Loading messages...")}):x.messages.filter(e=>e.content.trim()!==qs).length===0?t.jsx("div",{className:"chat-empty-state",children:i("chat.noMessagesYet","No messages yet. Start the conversation!")}):x.messages.filter(e=>e.content.trim()!==qs).map(e=>{const n=e.senderAgentId?be.get(e.senderAgentId)?.name??e.senderAgentId.slice(0,30):i("chat.you","You"),o={id:e.id,sessionId:e.roomId,role:e.role,content:e.content,thinkingOutput:e.thinkingOutput??void 0,toolCalls:void 0,fallbackInfo:void 0,attachments:e.attachments,createdAt:e.createdAt};return t.jsx(ma,{message:o,forcePlain:!1,agentName:n,hideAssistantIdentity:!1,showAssistantModelTag:!1,activeModelTag:null,activeModelProvider:null,activeSessionId:x.activeRoom?.id??null,projectId:s,mentionAgentsByName:Kn,roomContext:Ee,onScrollToTop:oa,isTopClipped:$n.has(e.id),isAwaitingQuestionAnswer:!1,onQuestionSubmit:sn},e.id)}),t.jsx("div",{ref:Ha})]}),x.activeRoom&&za&&t.jsxs("button",{type:"button",className:"btn btn-sm chat-jump-to-latest","data-testid":"chat-jump-to-latest",onClick:()=>xe("fab-click"),children:[t.jsx(mn,{size:14}),i("chat.latest","Latest")]})]}):t.jsx("div",{className:"chat-room-empty-pane","data-testid":"chat-rooms-empty-pane",children:i("chat.selectRoomOrCreate","Select a room or create one")}),x.activeRoom&&t.jsxs("div",{className:"chat-input-area",children:[t.jsx("input",{ref:Yt,type:"file",accept:Zs,multiple:!0,style:{display:"none"},onChange:e=>{ut(e.target.files),e.target.value=""}}),he.length>0&&t.jsx("div",{className:"chat-attachment-previews","data-testid":"chat-attachment-previews",children:he.map((e,n)=>t.jsxs("div",{className:"chat-attachment-preview","data-testid":`chat-attachment-preview-${n}`,children:[e.previewUrl?t.jsx("img",{src:e.previewUrl,alt:e.file.name}):t.jsx("span",{className:"chat-attachment-preview-name",children:e.file.name}),t.jsx("button",{type:"button",className:"chat-attachment-remove",onClick:()=>ts(n),"data-testid":`chat-attachment-remove-${n}`,"aria-label":`Remove ${e.file.name}`,children:"×"})]},e.previewUrl||`${e.file.name}-${n}`))}),t.jsxs("div",{className:"chat-input-row",children:[t.jsx("button",{type:"button",className:"btn-icon chat-attach-btn","data-testid":"chat-attach-btn","aria-label":i("chat.attachFiles","Attach files"),onClick:()=>Yt.current?.click(),children:t.jsx(Is,{size:16})}),t.jsx(Os,{level:x.activeRoom.thinkingLevel,defaultThinkingLevel:N,showTargetSection:!1,onChange:e=>{x.updateRoomSettings(x.activeRoom.id,{thinkingLevel:e||null}).catch(()=>{r(i("chat.failedToUpdateRoomThinkingLevel","Failed to update room thinking effort"),"error")})}}),t.jsxs("div",{className:`chat-input-wrapper${_a?" chat-input-wrapper--dragover":""}`,onDragOver:e=>{e.preventDefault(),st(!0)},onDragLeave:()=>st(!1),onDrop:e=>{e.preventDefault(),st(!1),ut(e.dataTransfer.files)},children:[t.jsx("textarea",{ref:Mi,className:"chat-input-textarea",placeholder:i("chat.typeMessage","Type a message..."),value:q,onChange:ss,onKeyDown:as,onKeyUp:is,onClick:cn,onBlur:os,onFocus:rs,onPaste:ns,onTouchStart:e=>{typeof window>"u"||window.innerWidth>768||ha()&&(document.activeElement,e.currentTarget)},rows:1,"data-testid":"chat-input"}),t.jsx(Us,{agents:ct,filter:et,highlightedIndex:Bt,visible:Ne,onSelect:on,position:"below",roomMemberIds:Ee?.memberIds,roomName:Ee?.roomName})]}),t.jsx(Ls,{...Ci.micProps}),t.jsx(Ps,{isStreaming:!1,canSend:!!(q.trim()||he.length>0),onSend:Xn})]})]})]}):t.jsxs("div",{ref:Fn,className:"chat-thread",children:[!H&&(Zn||!H)&&t.jsx("div",{className:"chat-thread-header",children:t.jsxs("div",{className:"chat-thread-header-identity","data-testid":"chat-thread-header-identity",children:[qe?t.jsx(la,{provider:qe,size:"md"}):t.jsx(xn,{size:16}),t.jsx("span",{className:"chat-thread-header-title",children:hs}),Ii&&t.jsx("span",{className:"chat-model-tag",children:_e}),Li&&un&&ea?t.jsxs("span",{className:"chat-thread-header-context","data-testid":"chat-thread-context-window",title:ea,"aria-label":ea,children:[fs," / ",un]}):null]})}),ra?t.jsx(Ko,{cliSessionId:_i,tier:$i,projectId:s,renderTranscript:ys,renderComposer:()=>l?ks():null}):t.jsxs(t.Fragment,{children:[ys(),za&&t.jsxs("button",{type:"button",className:"btn btn-sm chat-jump-to-latest","data-testid":"chat-jump-to-latest",onClick:()=>xe("fab-click"),children:[t.jsx(mn,{size:14}),i("chat.latest","Latest")]}),l&&ks()]})]}),t.jsx(Uo,{isOpen:mi,onClose:()=>_t(!1),projectId:s,existingRoomNames:x.rooms.map(e=>e.name),onCreate:async e=>{await x.createRoom({name:e.name,memberAgentIds:e.memberAgentIds}),P!=="rooms"&&Qe("rooms"),_t(!1),H&&He(!1)}})]}),ui&&t.jsx(dr,{projectId:s,defaultModel:gi,defaultKind:S?.kind,defaultAgentId:S?.kind==="agent"?S.agentId:void 0,defaultThinkingLevel:N,defaultSelectedThinkingLevel:S?.kind==="model"?S.thinkingLevel:void 0,onClose:()=>Cn(!1),onCreate:mt})]})}export{xr as ChatView,wr as buildIssueChatPrefill,ar as clampChatInputHeight,tr as resolveChatContextMenuPosition,nr as resolveChatInputOverflowY,ei as resolveSessionProvider};
@@ -1 +0,0 @@
1
- import{U as a,C as n}from"./mermaid.core-B8oDA6jj.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as t,C as e}from"./chunk-727SXJPM-CNiri9yW.js";import{_ as i}from"./mermaid.core-B8oDA6jj.js";import"./vendor-reactflow-BlIeoTu4.js";import"./chunk-FMBD7UC4-DkMdKaUq.js";import"./chunk-ND2GUHAM-Do5BwIrI.js";import"./chunk-55IACEB6-De20xFgU.js";import"./chunk-2J33WTMH-jsad6DTE.js";import"./index-BlGpMJSZ.js";import"./vendor-react-SZ_qB27O.js";import"./vendor-i18n-Duky4gdQ.js";import"./vendor-codemirror-CcrtqoCy.js";import"./vendor-xterm-BNq00GSj.js";import"./step-yuy0qJer.js";var k={parser:t,get db(){return new e},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{k as diagram};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as t,C as e}from"./chunk-727SXJPM-CNiri9yW.js";import{_ as i}from"./mermaid.core-B8oDA6jj.js";import"./vendor-reactflow-BlIeoTu4.js";import"./chunk-FMBD7UC4-DkMdKaUq.js";import"./chunk-ND2GUHAM-Do5BwIrI.js";import"./chunk-55IACEB6-De20xFgU.js";import"./chunk-2J33WTMH-jsad6DTE.js";import"./index-BlGpMJSZ.js";import"./vendor-react-SZ_qB27O.js";import"./vendor-i18n-Duky4gdQ.js";import"./vendor-codemirror-CcrtqoCy.js";import"./vendor-xterm-BNq00GSj.js";import"./step-yuy0qJer.js";var k={parser:t,get db(){return new e},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{k as diagram};