@runfusion/fusion 0.43.1 → 0.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/automation-store-EKXXEE2S.js +10 -0
- package/dist/automation-store-PLNG3X72.js +10 -0
- package/dist/automation-store-RDDYZFUJ.js +10 -0
- package/dist/bin.js +8097 -1796
- package/dist/chunk-2JI3F6MG.js +948 -0
- package/dist/chunk-4L6CLWJC.js +8345 -0
- package/dist/chunk-4VNS5WPM.js +42 -0
- package/dist/chunk-5RGECGQL.js +1139 -0
- package/dist/chunk-6JDLN7IL.js +409 -0
- package/dist/chunk-AICJATVW.js +948 -0
- package/dist/chunk-AWKNRUOR.js +1148 -0
- package/dist/chunk-BHM3UYWS.js +4651 -0
- package/dist/chunk-BMUXDSBF.js +4647 -0
- package/dist/chunk-GETECT6V.js +353 -0
- package/dist/chunk-GUV4QQT3.js +1143 -0
- package/dist/chunk-JKQO7YYZ.js +8369 -0
- package/dist/chunk-LYZVU6UV.js +409 -0
- package/dist/chunk-MAN4WYHO.js +353 -0
- package/dist/chunk-MCUG2Z7M.js +4651 -0
- package/dist/chunk-PSDYB45U.js +948 -0
- package/dist/chunk-RR2HM46R.js +8345 -0
- package/dist/chunk-RXMQ5OMY.js +9226 -0
- package/dist/chunk-S2EVJUY3.js +353 -0
- package/dist/chunk-UXR5XZFZ.js +409 -0
- package/dist/client/.vite/manifest.json +272 -261
- package/dist/client/assets/{AgentDetailView-BGN03dyz.css → AgentDetailView-CanIeYHg.css} +1 -1
- package/dist/client/assets/{AgentDetailView-DKMz3r04.js → AgentDetailView-DxV8pFHX.js} +3 -3
- package/dist/client/assets/{AgentPermissionPolicyEditor-BiY1a4KR.js → AgentPermissionPolicyEditor--YS4iMUY.js} +2 -2
- package/dist/client/assets/AgentsView-BVILQjdS.css +1 -0
- package/dist/client/assets/{AgentsView-Co-k4vjh.js → AgentsView-CTzbcvhK.js} +3 -3
- package/dist/client/assets/ChatView-COygcnyk.js +6 -0
- package/dist/client/assets/CommandCenter-CTaopaC0.css +1 -0
- package/dist/client/assets/CommandCenter-DoKX2HWm.js +56 -0
- package/dist/client/assets/DevServerView-Cyevyvqx.js +1 -0
- package/dist/client/assets/{DirectoryPicker-DTKtd8L2.css → DirectoryPicker-0rspvcMz.css} +1 -1
- package/dist/client/assets/{DirectoryPicker-CkcGjyv0.js → DirectoryPicker-DBdyXEhR.js} +1 -1
- package/dist/client/assets/DocumentsView-BzSMyrns.js +1 -0
- package/dist/client/assets/{EvalsView-CUfyj5GW.js → EvalsView-ikz00o9g.js} +1 -1
- package/dist/client/assets/ExperimentalAgentOnboardingModal-CZ_jbgep.css +1 -0
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-Dau9RTU_.js → ExperimentalAgentOnboardingModal-D-rzCCET.js} +10 -10
- package/dist/client/assets/GoalsView-Bfu1Oy2-.js +2 -0
- package/dist/client/assets/GoalsView-rg9VSIza.css +1 -0
- package/dist/client/assets/{InsightsView-BQPxHxKI.js → InsightsView-Cgmf5nES.js} +1 -1
- package/dist/client/assets/InsightsView-LMv1M1dU.css +1 -0
- package/dist/client/assets/MemoryView-DkEuDKQs.js +2 -0
- package/dist/client/assets/{NodesView-CSMvGwDU.js → NodesView-B_KYfS4o.js} +3 -3
- package/dist/client/assets/{PiExtensionsManager-BtqXF3fl.js → PiExtensionsManager-Dz69kkKs.js} +2 -2
- package/dist/client/assets/PluginManager-DSiHizRD.css +1 -0
- package/dist/client/assets/{PluginManager-CSSDb3VO.js → PluginManager-LHCVcduP.js} +1 -1
- package/dist/client/assets/PullRequestView-3AdbS2a1.css +1 -0
- package/dist/client/assets/{PullRequestView-Bjyfffdu.js → PullRequestView-DBJutLLl.js} +2 -2
- package/dist/client/assets/{ResearchView-CRU_NPho.js → ResearchView-gpn1XcVy.js} +1 -1
- package/dist/client/assets/{SecretsView-Bs8ySyC5.js → SecretsView-B7YqIowt.js} +1 -1
- package/dist/client/assets/SessionTerminal-9l4bdKcn.js +2 -0
- package/dist/client/assets/SessionTerminal-BNgtmXb3.css +1 -0
- package/dist/client/assets/SettingsModal-BGEK9_9A.js +31 -0
- package/dist/client/assets/{SettingsModal-DpAxDq6M.css → SettingsModal-CKv0TJfM.css} +1 -1
- package/dist/client/assets/SettingsModal-CXogw-Er.css +1 -0
- package/dist/client/assets/{SettingsModal-Nw5cTKAK.js → SettingsModal-DIIoHGUH.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-CE79myEy.js → SetupWizardModal-BcVeMxeX.js} +1 -1
- package/dist/client/assets/{SkillsView-Dc8YskAX.js → SkillsView-BxSJ4PHL.js} +1 -1
- package/dist/client/assets/{StashRecoveryView-CqKOFiXT.js → StashRecoveryView-BhFQ2FsP.js} +1 -1
- package/dist/client/assets/{TodoView-BqIRwcZw.js → TodoView-BZpewjy0.js} +2 -2
- package/dist/client/assets/WorkflowNodeEditor-Yn1FRF2v.css +1 -0
- package/dist/client/assets/WorkflowNodeEditor-tWsgCdVt.js +8 -0
- package/dist/client/assets/{addon-fit-B4jkcKk4.js → addon-fit-SnYDEvGm.js} +1 -1
- package/dist/client/assets/{addon-unicode11-Cdne2Sj4.js → addon-unicode11-s5GoZCpi.js} +1 -1
- package/dist/client/assets/{addon-web-links-CRNLzj7m.js → addon-web-links-jjt2f_oV.js} +1 -1
- package/dist/client/assets/{addon-webgl-CeCSULF1.js → addon-webgl-Icn-RnEx.js} +1 -1
- package/dist/client/assets/{app-sEkTyT-w.js → app-BmGA0Hiz.js} +3 -3
- package/dist/client/assets/{app-BffGU_HQ.js → app-CEVYlVuJ.js} +3 -3
- package/dist/client/assets/{app-C8AHhs5N.js → app-CbBFax2C.js} +3 -3
- package/dist/client/assets/{app-B2ZxMfJT.js → app-DORKrGAz.js} +3 -3
- package/dist/client/assets/{app-Ri9Te2Dv.js → app-DQibuQ9z.js} +3 -3
- package/dist/client/assets/app-k76GrQP0.js +13 -0
- package/dist/client/assets/{createLucideIcon-BYvOGRiO.js → createLucideIcon-DmVITl5d.js} +1 -1
- package/dist/client/assets/{dashboard-view-C3SsjXo1.js → dashboard-view-B4LXCv5H.js} +4 -4
- package/dist/client/assets/{dashboard-view-DlKsVySD.js → dashboard-view-BFoyhTYF.js} +1 -1
- package/dist/client/assets/{dashboard-view-BhbN8LPh.js → dashboard-view-Cxzm_eqc.js} +1 -1
- package/dist/client/assets/dashboard-view-_8yfNwju.css +1 -0
- package/dist/client/assets/{folder-open-Bw1mxVfa.js → folder-open-33WGVnbp.js} +1 -1
- package/dist/client/assets/index-Bglw05rM.js +791 -0
- package/dist/client/assets/index-FYgnflWD.css +1 -0
- package/dist/client/assets/shield-alert-CqeGWBUK.js +6 -0
- package/dist/client/assets/{upload-BCmd-1I0.js → upload-C11J2diI.js} +1 -1
- package/dist/client/assets/{users-DO_t3V1p.js → users-a-ELbyyZ.js} +1 -1
- package/dist/client/assets/{vendor-i18n-CV0mwX_-.js → vendor-i18n-DYlSUfot.js} +1 -1
- package/dist/client/assets/vendor-react-BTgM5bbZ.js +49 -0
- package/dist/client/assets/{vendor-reactflow-CRZcPCXF.js → vendor-reactflow-ZasuEfF9.js} +3 -3
- package/dist/client/assets/{vendor-xterm-tcedd2Jt.js → vendor-xterm-ea7-K05z.js} +1 -1
- package/dist/client/assets/{x-CqNX_9E2.js → x-PItWc-wQ.js} +1 -1
- package/dist/client/assets/{zoom-out-CSTHbJgD.js → zoom-out-CzlHv0Kj.js} +1 -1
- package/dist/client/icons/icon-192.png +0 -0
- package/dist/client/icons/icon-512.png +0 -0
- package/dist/client/index.html +6 -6
- package/dist/client/sw.js +1 -1
- package/dist/client/theme-data.css +288 -285
- package/dist/client/version.json +1 -1
- package/dist/droid-cli/package.json +1 -1
- package/dist/droid-cli/src/__tests__/execsync-guard.test.ts +17 -0
- package/dist/droid-cli/src/__tests__/process-manager.test.ts +1 -45
- package/dist/extension.js +4780 -793
- package/dist/extract-zip-WL55Z3AU.js +2497 -0
- package/dist/index.min-CHQ3ABYJ.js +2926 -0
- package/dist/memory-dreams-7USISKVE.js +32 -0
- package/dist/memory-dreams-PBPISUDD.js +32 -0
- package/dist/memory-dreams-XNO2B2QF.js +32 -0
- package/dist/migration-EH2YOCYQ.js +15 -0
- package/dist/migration-PLGTTKL5.js +15 -0
- package/dist/migration-WZEZK22R.js +15 -0
- package/dist/pi-claude-cli/index.ts +47 -8
- package/dist/pi-claude-cli/package.json +4 -1
- package/dist/pi-claude-cli/src/__tests__/acp-dispatch.test.ts +80 -0
- package/dist/pi-claude-cli/src/__tests__/acp-driver.test.ts +423 -0
- package/dist/pi-claude-cli/src/__tests__/execsync-guard.test.ts +14 -0
- package/dist/pi-claude-cli/src/__tests__/process-manager.test.ts +1 -45
- package/dist/pi-claude-cli/src/__tests__/provider.test.ts +0 -1
- package/dist/pi-claude-cli/src/acp-driver.ts +585 -0
- package/dist/pi-claude-cli/src/event-bridge.ts +7 -0
- package/dist/pi-claude-cli/src/mcp-config.ts +29 -0
- package/dist/pi-claude-cli/src/process-manager.ts +6 -38
- package/dist/plugin-sdk/index.d.ts +5179 -5144
- package/dist/plugins/fusion-plugin-acp-runtime/bundled.js +263 -19
- package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +37 -7
- package/dist/plugins/fusion-plugin-compound-engineering/manifest.json +4 -4
- package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/bundled.js +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/src/__tests__/index.test.ts +5 -1
- package/dist/routine-store-GIJ6MXWY.js +10 -0
- package/dist/routine-store-HTVC2PUQ.js +10 -0
- package/dist/routine-store-KGHZBPDF.js +10 -0
- package/package.json +1 -1
- package/skill/fusion/references/engine-tools.md +6 -4
- package/dist/client/assets/AgentsView-DfznJDek.css +0 -1
- package/dist/client/assets/ChatView-BkAG99bj.js +0 -6
- package/dist/client/assets/DevServerView-C6DC0URX.js +0 -1
- package/dist/client/assets/DocumentsView-OCK1Vsw_.js +0 -1
- package/dist/client/assets/ExperimentalAgentOnboardingModal-BNpveCEk.css +0 -1
- package/dist/client/assets/GoalsView-CNLTn0rX.js +0 -2
- package/dist/client/assets/GoalsView-DI66UsjT.css +0 -1
- package/dist/client/assets/InsightsView-C9-mqVvf.css +0 -1
- package/dist/client/assets/MemoryView-D3xQIFjj.js +0 -2
- package/dist/client/assets/PluginManager-UHVLvWWl.css +0 -1
- package/dist/client/assets/PullRequestView-WQIS0zUC.css +0 -1
- package/dist/client/assets/ReliabilityView-QKMUDebT.js +0 -1
- package/dist/client/assets/ReliabilityView-eoKBhBc4.css +0 -1
- package/dist/client/assets/SessionTerminal-BiigPP2l.css +0 -1
- package/dist/client/assets/SessionTerminal-Dk1NgmN2.js +0 -2
- package/dist/client/assets/SettingsModal-JCaNvdAb.js +0 -31
- package/dist/client/assets/SettingsModal-nF_GaeeK.css +0 -1
- package/dist/client/assets/WorkflowNodeEditor-2jDuk2FR.js +0 -8
- package/dist/client/assets/WorkflowNodeEditor-BokhW3de.css +0 -1
- package/dist/client/assets/app-CUu1sm3x.js +0 -13
- package/dist/client/assets/dashboard-view-Du53JbmQ.css +0 -1
- package/dist/client/assets/index-CpTBp1RG.js +0 -793
- package/dist/client/assets/index-DqhCiU35.css +0 -1
- package/dist/client/assets/vendor-react-D37HfzIf.js +0 -49
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{r as s,b as aa,j as t,R as ra}from"./vendor-react-BTgM5bbZ.js";import{c as ia,a9 as rn,a7 as on,bh as cn,bi as Ms,aI as Xt,bj as ln,ac as dn,bk as ys,t as oa,bl as ca,bm as wt,bn as un,bo as la,bp as Gt,w as da,bq as ua,br as ma,bs as ha,bt as mn,bu as fa,bv as ga,aY as pa,bw as ba,bx as va,s as wa,by as xa,j as ya,k as Dn,bz as Pn,bA as Ca,bB as Sa,bC as ka,bD as $n,bE as ja,bF as Na,bG as Ra,p as Ma,bH as Aa,bI as Ta,bJ as Ea,bK as Ia,aj as Fn,ak as Ln,bL as Da,bM as Pa,S as $a,U as Cs,P as yt,J as xt,b8 as hn,ay as Fa,bN as fn,a as Vt,bO as gn,bP as pn,bQ as bn,bR as vn,B as Ct,ag as La,ah as _a,b6 as Yt,bS as wn,bT as za,T as Ha,bU as Ua,b3 as Oa,aw as xn,m as Ba,bV as yn,bW as Ka,bX as Ga}from"./index-Bglw05rM.js";import{u as St}from"./vendor-i18n-DYlSUfot.js";import{SessionTerminal as Cn}from"./SessionTerminal-9l4bdKcn.js";import"./vendor-reactflow-ZasuEfF9.js";import"./vendor-xterm-ea7-K05z.js";import"./vendor-codemirror-jBKmHyH0.js";import"./shield-alert-CqeGWBUK.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 Va=[["path",{d:"M5 3h14",key:"7usisc"}],["path",{d:"m18 13-6-6-6 6",key:"1kf1n9"}],["path",{d:"M12 7v14",key:"1akyts"}]],Wa=ia("arrow-up-to-line",Va),Ss="kb-chat-active-session";function Sn(n){const r=typeof n=="string"?n.trim():"",d=r.indexOf("/");return!r||d<=0||d>=r.length-1?{}:{modelProvider:r.slice(0,d),modelId:r.slice(d+1)}}function qa(n){const r=n?.toolCalls;if(!Array.isArray(r))return;const d=r.map(i=>{if(!i||typeof i!="object")return null;const o=i,b=typeof o.toolName=="string"?o.toolName:"";if(!b)return null;const v=o.args;return{toolName:b,...v&&typeof v=="object"?{args:v}:{},isError:!!o.isError,result:o.result,status:"completed"}}).filter(i=>i!==null);return d.length>0?d:void 0}function Qa(n){const r=n?.fallback;if(!r||typeof r!="object")return;const d=r,i=typeof d.primaryModel=="string"?d.primaryModel:"",o=typeof d.fallbackModel=="string"?d.fallbackModel:"",b=d.triggerPoint;if(!(!i||!o||b!=="session-creation"&&b!=="prompt-time"))return{primaryModel:i,fallbackModel:o,triggerPoint:b}}function Xa(n){const r=n?.failureInfo;if(!r||typeof r!="object")return;const d=r,i=typeof d.summary=="string"?d.summary.trim():"";if(!i)return;const o=(()=>{const b=d.reference;if(!b||typeof b!="object")return;const v=b,p=typeof v.kind=="string"?v.kind.trim():"",S=typeof v.id=="string"?v.id.trim():"";if(!(!p||!S))return{kind:p,id:S,...typeof v.label=="string"&&v.label.trim()?{label:v.label.trim()}:{}}})();return{summary:i,...typeof d.errorClass=="string"&&d.errorClass.trim()?{errorClass:d.errorClass.trim()}:{},...typeof d.code=="string"&&d.code.trim()?{code:d.code.trim()}:{},...typeof d.detail=="string"&&d.detail.trim()?{detail:d.detail.trim()}:{},...o?{reference:o}:{}}}function kn(n,r){const d="Failed to get response";return typeof n=="string"?{summary:n.trim()||d}:{summary:typeof n.summary=="string"&&n.summary.trim()?n.summary.trim():d,...typeof n.errorClass=="string"&&n.errorClass.trim()?{errorClass:n.errorClass.trim()}:{},...typeof n.code=="string"&&n.code.trim()?{code:n.code.trim()}:{},...typeof n.detail=="string"&&n.detail.trim()?{detail:n.detail.trim()}:{},...n.reference?{reference:n.reference}:{}}}function ks(n){return{id:n.id,sessionId:n.sessionId,role:n.role,content:n.content,thinkingOutput:n.thinkingOutput,toolCalls:qa(n.metadata),fallbackInfo:Qa(n.metadata),failureInfo:Xa(n.metadata),attachments:n.attachments,createdAt:n.createdAt}}function Ya(n,r){const d=s.useCallback(l=>l?`${rn.CHAT_SESSIONS_PREFIX}${l}`:null,[]),i=s.useCallback((l,g)=>l&&g?`${rn.CHAT_MESSAGES_PREFIX}${l}:${g}`:null,[]),o=s.useCallback(l=>{const g=d(l);return g?on(g,{maxAgeMs:cn})??[]:[]},[d]),[b,v]=s.useState(()=>o(n)),[p,S]=s.useState(null),[W,Q]=s.useState(()=>o(n).length===0),[X,R]=s.useState([]),[T,ee]=s.useState(!1),[ne,k]=s.useState(!1),[H,x]=s.useState(""),[Y,D]=s.useState(""),[oe,M]=s.useState([]),[J,te]=s.useState(""),[P,re]=s.useState(""),[ce,f]=s.useState(!1),{agentsMap:y}=Ms(n),m=s.useRef(null),L=s.useRef(null),u=s.useRef(!1),fe=s.useRef(""),Z=s.useRef(null),G=s.useRef(b),U=s.useRef(p),pe=s.useRef(X),q=s.useRef(ne);G.current=b,U.current=p,pe.current=X,q.current=ne,s.useEffect(()=>{fe.current=J},[J]);const ze=s.useRef(new Set),je=s.useRef(0),Ke=s.useRef(n);Ke.current!==n&&(Xt({view:"useChat",trigger:"project-context-change",projectId:n,replayAttempted:!1,detail:{previousProjectId:Ke.current??null}}),Ke.current=n,je.current++);const we=s.useCallback(async()=>{G.current.length===0&&Q(!0);try{const g=[...(await ln(n)).sessions].sort((j,$)=>new Date($.updatedAt).getTime()-new Date(j.updatedAt).getTime());v(g);const w=d(n);w&&dn(w,g,{maxBytes:5e5})}catch{const l=o(n);if(G.current.length===0&&l.length===0){const g=d(n);g&&ys(g)}}finally{Q(!1)}},[d,n]);s.useEffect(()=>{const l=o(n);v(l),Q(l.length===0)},[n,o]),s.useEffect(()=>{we()},[we,n]);const ot=s.useRef(()=>{}),Se=s.useRef(!1);s.useEffect(()=>{Se.current=!1,L.current=null},[n]),s.useEffect(()=>{if(W||Se.current||U.current)return;const l=oa(Ss,n);if(!l){Se.current=!0;return}const g=b.find(w=>w.id===l);if(g){Se.current=!0,ot.current(l,g);return}Se.current=!0},[W,b,n]);const Ge=s.useCallback((l,g)=>{const w=i(l,g);return w?on(w,{maxAgeMs:cn})??[]:[]},[i]),Re=s.useCallback((l,g)=>{const w=Ge(n,l);return w.length>0?(R(w),ee(!1),!0):(g?.clearOnMiss!==!1&&R([]),!1)},[n,Ge]),ae=s.useCallback(async(l,g)=>{const w=typeof g?.offset=="number"&&g.offset>0||typeof g?.before=="string",j=i(n,l),$=w?[]:Ge(n,l),N=$.length>0;!w&&N?(R($),ee(!1)):ee(!0);try{const B=await ca(l,{limit:50,order:"desc",...g},n),A=B.messages.slice().reverse().map(ks),K=U.current?.id===l||g?.commitForStreamingAttach===!0&&L.current?.sessionId===l;w?K&&(R(O=>[...A,...O]),f(B.messages.length>=50)):K&&(R(A),f(B.messages.length>=50),j&&dn(j,A,{maxBytes:5e5}))}catch{!w&&pe.current.length===0&&N&&(R($),ee(!1))}finally{ee(!1)}},[i,n,Ge]),xe=s.useCallback(()=>{Z.current?.(),Z.current=null,fe.current="",te(""),x(""),D(""),M([]),k(!1)},[]),He=s.useCallback(()=>{wt(U.current?.id),fe.current="",te("")},[]),se=s.useCallback(()=>{const l=fe.current.trim();l&&(wt(U.current?.id),fe.current="",te(""),Rt.current(l))},[]),le=s.useCallback((l,g,w)=>{if(m.current||!l)return!0;u.current=!1;const j=pe.current,$=j.length===0||j[0]?.sessionId!==l;L.current={sessionId:l,replayFromEventId:typeof g?.replayFromEventId=="number"?g.replayFromEventId:null},$&&!w?.priorThreadLoadAlreadyStarted&&(Re(l,{clearOnMiss:!1}),ae(l,{commitForStreamingAttach:!0})),g&&(x(g.streamingText),D(g.streamingThinking),M(g.toolCalls)),k(!0);const{handlers:N}=un({sessionId:l,tempUserMessageId:"",initialText:g?.streamingText,initialThinking:g?.streamingThinking,initialToolCalls:g?.toolCalls,setStreamingText:x,setStreamingThinking:D,setStreamingToolCalls:M,cancelStreamingFlushesRef:Z,addToast:w?.silent?void 0:r,onFallbackSession:(A,K)=>{const O=Sn(A.fallbackModel);v(E=>E.map(_=>_.id===K?{..._,...O}:_)),S(E=>E&&E.id===K?{...E,...O}:E)},onDone:()=>{x(""),D(""),M([]),k(!1),q.current=!1,m.current=null,L.current=null,ae(l),se()},onError:A=>{x(""),D(""),M([]),k(!1),q.current=!1,m.current=null,L.current=null;const K=kn(A);w?.silent||r?.(K.summary,"error"),ae(l),se()}});Xt({view:"useChat",trigger:"sse-open",projectId:n,replayAttempted:typeof g?.replayFromEventId=="number",replayFromEventId:g?.replayFromEventId??null,lastEventId:g?.replayFromEventId??null});const B=la(l,N,n,{...typeof g?.replayFromEventId=="number"?{lastEventId:g.replayFromEventId}:{}});return m.current=B,!0},[r,Re,ae,n,se]),Me=s.useCallback((l,g)=>{const w=U.current?.id??null;if(l&&w===l&&!g)return;m.current&&(m.current.close(),m.current=null),L.current=null;const j=g??b.find($=>$.id===l);S(j||null),U.current=j||null,l&&Gt(l,n).then(({session:$})=>{!$.isGenerating||!$.inFlightGeneration||S(N=>!N||N.id!==l?N:{...N,...$})}).catch(()=>{}),xe(),f(!1),l?(Re(l),ae(l)):R([]),j?.isGenerating&&le(j.id,j.inFlightGeneration,{priorThreadLoadAlreadyStarted:!0}),l?da(Ss,l,n):ua(Ss,n)},[le,Re,b,ae,n,xe]);ot.current=Me,s.useEffect(()=>{const l=p?.id;if(!l)return;const g=ma(l);if(!g)return;fe.current=g,te(g);let w=!1;return Gt(l,n).then(({session:j})=>{if(!(w||U.current?.id!==l||fe.current.trim().length===0)){if(j.isGenerating){m.current||le(l,j.inFlightGeneration);return}!q.current&&!m.current&&se()}}).catch(()=>{}),()=>{w=!0}},[p?.id,le,se,n]);const kt=s.useCallback(async l=>{const g=U.current?.id,w=await ha(l,n);m.current&&(m.current.close(),m.current=null),L.current=null;const j={id:w.session.id,title:w.session.title,agentId:w.session.agentId,status:w.session.status,modelProvider:w.session.modelProvider,modelId:w.session.modelId,createdAt:w.session.createdAt,updatedAt:w.session.updatedAt};return v($=>$.some(N=>N.id===j.id)?$:[j,...$]),wt(g),xe(),Me(j.id,j),j},[n,xe,Me]),ke=s.useCallback(async l=>{wt(l),await mn(l,{status:"archived"},n),v(g=>g.filter(w=>w.id!==l)),p?.id===l&&(L.current=null,S(null),R([]))},[p,n]),jt=s.useCallback(async(l,g)=>{const w=g.trim()||null,j=b,$=p;v(N=>N.map(B=>B.id===l?{...B,title:w}:B)),S(N=>N?.id===l?{...N,title:w}:N);try{const B=(await mn(l,{title:w},n)).session;v(A=>A.map(K=>K.id===l?{...K,title:B.title,updatedAt:B.updatedAt}:K)),S(A=>A?.id===l?{...A,title:B.title,updatedAt:B.updatedAt}:A)}catch(N){throw v(j),S($),r?.("Failed to rename conversation","error"),N}},[p,r,n,b]),Nt=s.useCallback(async l=>{wt(l),p?.id===l&&m.current&&(m.current.close(),m.current=null),p?.id===l&&(L.current=null),await fa(l,n);const g=i(n,l);g&&ys(g),v(w=>w.filter(j=>j.id!==l)),p?.id===l&&(S(null),R([]))},[p,i,n]),ct=s.useCallback(async()=>{if(!p||!ce)return;const l=pe.current[0]?.createdAt;l&&await ae(p.id,{before:l})},[p,ce,ae]),lt=s.useCallback(()=>{p&&(u.current=!0,Z.current?.(),Z.current=null,m.current?.close(),m.current=null,L.current=null,ga(p.id,n).catch(()=>{}),k(!1),q.current=!1,x(""),D(""),M([]),se())},[p,n,se]),Rt=s.useRef(()=>{}),Ae=pa(),Te=s.useCallback(async l=>{try{await we();const g=await Gt(l,n);U.current?.id===l&&S(w=>!w||w.id!==l?w:{...w,...g.session}),g.session.isGenerating?(x(""),D(""),M([]),k(!0),q.current=!0,le(l,g.session.inFlightGeneration,{silent:!0})):(x(""),D(""),M([]),k(!1),q.current=!1,await ae(l))}catch{}},[le,ae,n,we]),qe=s.useCallback((l,g)=>{if(!p)return;if(q.current){fe.current=l,te(l),ba(p.id,l);return}u.current=!1,m.current&&(m.current.close(),m.current=null),L.current=null;const w=`temp-${Date.now()}`,j={id:w,sessionId:p.id,role:"user",content:l,createdAt:new Date().toISOString()};R(N=>[...N,j]),x(""),D(""),M([]),k(!0);const{handlers:$}=un({sessionId:p.id,tempUserMessageId:w,setStreamingText:x,setStreamingThinking:D,setStreamingToolCalls:M,cancelStreamingFlushesRef:Z,addToast:r,onFallbackSession:(N,B)=>{const A=Sn(N.fallbackModel);v(K=>K.map(O=>O.id===B?{...O,...A}:O)),S(K=>K&&K.id===B?{...K,...A}:K)},onDone:({messageId:N,message:B,accumulated:A})=>{const K=B?{...ks(B),...A.text.length>0?{content:A.text}:{}}:{id:N||`msg-${Date.now()}`,sessionId:p.id,role:"assistant",content:A.text,thinkingOutput:A.thinking,toolCalls:A.toolCalls.length>0?A.toolCalls:void 0,fallbackInfo:A.fallbackInfo,createdAt:new Date().toISOString()};ze.current.add(K.id),R(O=>[...O,K]),x(""),D(""),M([]),k(!1),q.current=!1,m.current=null,L.current=null,setTimeout(()=>{ze.current.delete(K.id)},1e3),we(),se()},onError:(N,B)=>{const A=kn(N),K=typeof N=="string"?N:A.summary,O=xa(K);R(E=>{const _=E.filter(z=>z.id!==B);return O?_:[..._,{id:`error-${Date.now()}`,sessionId:p.id,role:"assistant",content:A.summary,failureInfo:A,createdAt:new Date().toISOString()}]}),x(""),D(""),M([]),k(!1),q.current=!1,m.current=null,L.current=null,console.error("[useChat] Stream error:",N),O?(console.info("[useChat] Suppressed tab-suspension stream error:",N),p?.id&&(x(""),D(""),M([]),k(!0),q.current=!0,Te(p.id))):(r?.(A.summary,"error"),we()),u.current||se()}});m.current=va(p.id,l,$,g,n)},[p,n,we,r,le,Te,se]);Rt.current=qe;const Qe=P?b.filter(l=>l.title?.toLowerCase().includes(P.toLowerCase())||l.agentId.toLowerCase().includes(P.toLowerCase())):b;return s.useEffect(()=>{if(!p?.id||p.isGenerating!==!0||m.current)return;const l=typeof p.inFlightGeneration?.replayFromEventId=="number"?p.inFlightGeneration.replayFromEventId:null,g=L.current;g?.sessionId===p.id&&g.replayFromEventId===l||le(p.id,p.inFlightGeneration,{silent:!0})},[p?.id,p?.isGenerating,p?.inFlightGeneration,le]),s.useEffect(()=>{if(!U.current?.isGenerating||(m.current||le(U.current.id,U.current.inFlightGeneration),!q.current||m.current||!U.current))return;const l=setInterval(async()=>{if(!q.current||m.current||!U.current){clearInterval(l);return}try{(await ln(n)).sessions.find(j=>j.id===U.current?.id)?.isGenerating||(clearInterval(l),await ae(U.current.id),x(""),D(""),M([]),k(!1),q.current=!1,se())}catch{}},3e3);return()=>clearInterval(l)},[le,ae,n,p,se]),s.useEffect(()=>Ae.onBecameVisible(()=>{const g=U.current;if(!g||m.current)return;const w=je.current;Gt(g.id,n).then(j=>{if(!(je.current!==w||m.current)){if(j.session.isGenerating){x(""),D(""),M([]),k(!0),q.current=!0,le(g.id,j.session.inFlightGeneration,{silent:!0});return}q.current&&(x(""),D(""),M([]),k(!1),q.current=!1,se(),ae(g.id))}}).catch(()=>{})}),[le,ae,n,Ae,se]),s.useEffect(()=>{const l=je.current,g=n?`?projectId=${encodeURIComponent(n)}`:"",w=()=>je.current!==l,j=O=>{if(w())return;const E=JSON.parse(O.data);v(_=>_.some(z=>z.id===E.id)?_:[E,..._])},$=O=>{if(w())return;const E=JSON.parse(O.data);v(_=>[..._.map(me=>me.id===E.id?E:me)]),U.current?.id===E.id&&(S(E),E.isGenerating&&!m.current&&le(E.id,E.inFlightGeneration))},N=O=>{if(w())return;const{id:E}=JSON.parse(O.data);v(z=>z.filter(me=>me.id!==E));const _=i(n,E);_&&ys(_),U.current?.id===E&&(S(null),R([]))},B=O=>{if(w())return;const E=JSON.parse(O.data),_=ks(E);if(!ze.current.has(_.id)){if(U.current?.id===_.sessionId&&q.current&&!m.current&&_.role==="assistant"){R(z=>z.some(me=>me.id===_.id)?z:[...z,_]),x(""),D(""),M([]),k(!1),q.current=!1,se();return}U.current?.id===_.sessionId&&!q.current&&R(z=>{if(z.some(me=>me.id===_.id))return z;if(_.role==="user"){const me=z.findIndex(Ee=>Ee.role==="user"&&Ee.id.startsWith("temp-")&&Ee.content.trim()===_.content.trim());if(me>=0){const Ee=[...z];return Ee[me]=_,Ee}}return[...z,_]})}},A=O=>{if(w())return;const{id:E}=JSON.parse(O.data);R(_=>_.filter(z=>z.id!==E))};return wa(`/api/events${g}`,{events:{"chat:session:created":j,"chat:session:updated":$,"chat:session:deleted":N,"chat:message:added":B,"chat:message:deleted":A}})},[le,i,n,se]),s.useEffect(()=>()=>{m.current&&(m.current.close(),m.current=null),L.current=null},[]),{sessions:b,activeSession:p,sessionsLoading:W,messages:X,messagesLoading:T,isStreaming:ne,streamingText:H,streamingThinking:Y,streamingToolCalls:oe,pendingMessage:J,selectSession:Me,createSession:kt,archiveSession:ke,renameSession:jt,deleteSession:Nt,sendMessage:qe,stopStreaming:lt,clearPendingMessage:He,loadMoreMessages:ct,hasMoreMessages:ce,searchQuery:P,setSearchQuery:re,filteredSessions:Qe,refreshSessions:we,agentsMap:y}}function Ja(n,r=[],d){const i=n.trim().replace(/^#/,""),o=(v,p)=>d?d(v,p):p;if(!i)return{ok:!1,error:o("createRoom.nameRequired","Room name is required.")};if(/[A-Z]/.test(i))return{ok:!1,error:o("createRoom.lowercase","Use lowercase letters only.")};const b=i.toLowerCase();return b.length>80?{ok:!1,error:o("createRoom.maxLength","Room names can be at most 80 characters.")}:/^[a-z0-9_-]+$/.test(b)?/^[-_]|[-_]$/.test(b)?{ok:!1,error:o("createRoom.noEdgeChars","Room names cannot start or end with a hyphen or underscore.")}:r.some(v=>v.toLowerCase()===b)?{ok:!1,error:o("createRoom.duplicate","A room with this name already exists.")}:{ok:!0,name:b}:{ok:!1,error:o("createRoom.validChars","Use lowercase letters, numbers, hyphens, or underscores only.")}}function Za({isOpen:n,onClose:r,onCreate:d,projectId:i,existingRoomNames:o=[]}){const{t:b}=St("app"),[v,p]=s.useState(""),[S,W]=s.useState([]),[Q,X]=s.useState(""),[R,T]=s.useState([]),[ee,ne]=s.useState(!1),[k,H]=s.useState(null),[x,Y]=s.useState(!1),D=s.useRef(null),oe=s.useRef(null);s.useEffect(()=>{n&&(oe.current=document.activeElement instanceof HTMLElement?document.activeElement:null,ne(!0),H(null),ya(void 0,i).then(f=>W(f)).catch(()=>{W([]),H(b("createRoom.failedLoadAgents","Failed to load agents."))}).finally(()=>ne(!1)))},[n,i]),s.useEffect(()=>{if(!n){p(""),X(""),T([]),H(null),Y(!1);return}const f=window.requestAnimationFrame(()=>D.current?.focus());return()=>window.cancelAnimationFrame(f)},[n]),s.useEffect(()=>{if(!n)return;const f=y=>{y.key==="Escape"&&r()};return document.addEventListener("keydown",f),()=>document.removeEventListener("keydown",f)},[n,r]),s.useEffect(()=>{n||oe.current?.focus()},[n]);const M=s.useMemo(()=>Ja(v,o,b),[v,o,b]),J=s.useMemo(()=>{const f=Q.trim().toLowerCase();return f?S.filter(y=>y.name.toLowerCase().includes(f)):S},[S,Q]),te=s.useMemo(()=>S.filter(f=>R.includes(f.id)),[S,R]),P=M.ok&&R.length>0&&!x&&!ee;if(!n)return null;const re=f=>{x||T(y=>y.includes(f)?y.filter(m=>m!==f):[...y,f])},ce=async()=>{if(!M.ok){H(M.error);return}if(R.length===0){H(b("createRoom.selectMember","Select at least one member."));return}H(null),Y(!0);try{await d({name:M.name,displayName:`#${M.name}`,memberAgentIds:R}),r()}catch(f){H(f instanceof Error?f.message:b("createRoom.failedCreate","Failed to create room."))}finally{Y(!1)}};return aa.createPortal(t.jsx("div",{className:"modal-overlay open",onClick:f=>f.target===f.currentTarget&&r(),children:t.jsxs("div",{className:"modal modal-lg create-room-modal",role:"dialog","aria-modal":"true","aria-label":b("createRoom.title","Create room"),onClick:f=>f.stopPropagation(),children:[t.jsxs("div",{className:"modal-header",children:[t.jsx("h3",{children:b("createRoom.title","Create room")}),t.jsx("button",{type:"button",className:"modal-close","aria-label":b("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:b("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:D,id:"create-room-name",className:"input",value:v,disabled:x,onChange:f=>{const y=f.target.value.replace(/^#/,"").replace(/\s+/g,"-").toLowerCase();p(y)}})]}),!M.ok&&t.jsx("div",{className:"form-error",children:M.error})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"create-room-member-search",children:b("createRoom.members","Members")}),t.jsx("input",{id:"create-room-member-search",className:"input",placeholder:b("createRoom.searchAgents","Search agents"),value:Q,disabled:x,onChange:f=>X(f.target.value)})]}),te.length>0&&t.jsx("div",{className:"create-room-modal-selected","data-testid":"create-room-selected-chips",children:te.map(f=>t.jsxs("button",{type:"button",className:"btn btn-sm create-room-modal-chip",onClick:()=>re(f.id),disabled:x,children:[f.name," ×"]},f.id))}),t.jsx("div",{className:"create-room-modal-member-list","data-testid":"create-room-member-list",children:ee?t.jsx("div",{className:"create-room-modal-empty",children:b("createRoom.loadingAgents","Loading agents...")}):J.length===0?t.jsx("div",{className:"create-room-modal-empty",children:S.length===0?b("createRoom.noAgents","No agents in this project yet."):b("createRoom.noMatch","No agents match your search.")}):J.map(f=>{const y=R.includes(f.id);return t.jsxs("button",{type:"button",className:`create-room-modal-member-row${y?" create-room-modal-member-row--selected":""}`,onClick:()=>re(f.id),disabled:x,children:[t.jsx(Dn,{agent:f,size:20}),t.jsx("span",{children:f.name}),t.jsx("span",{className:"create-room-modal-member-role",children:f.role})]},f.id)})}),k&&t.jsx("div",{className:"form-group",children:t.jsx("div",{className:"form-error",children:k})}),t.jsxs("div",{className:"modal-actions",children:[t.jsx("button",{type:"button",className:"btn",onClick:r,disabled:x,children:b("actions.cancel","Cancel")}),t.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>void ce(),disabled:!P,children:x?b("createRoom.creating","Creating..."):b("createRoom.create","Create room")})]})]})}),document.body)}function er({cliSessionId:n,tier:r,projectId:d,renderTranscript:i,renderComposer:o,queuedCount:b=0,terminalProps:v}){const{t:p}=St("app"),S=r==="generic",[W,Q]=s.useState(S?"terminal":"transcript");if(S)return t.jsx("div",{className:"cli-chat-surface cli-chat-surface--generic","data-tier":"generic",children:t.jsx(Cn,{sessionId:n,projectId:d,...v})});const X=W==="terminal";return t.jsxs("div",{className:"cli-chat-surface","data-tier":r,"data-view":W,children:[t.jsxs("div",{className:"cli-chat-surface__toolbar",role:"tablist","aria-label":p("cliChat.viewToggleLabel","Chat view"),children:[t.jsxs("button",{type:"button",role:"tab","aria-selected":!X,className:`cli-chat-surface__tab${X?"":" is-active"}`,onClick:()=>Q("transcript"),children:[t.jsx(Pn,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:p("cliChat.transcriptTab","Transcript")})]}),t.jsxs("button",{type:"button",role:"tab","aria-selected":X,className:`cli-chat-surface__tab${X?" is-active":""}`,onClick:()=>Q("terminal"),children:[t.jsx(Ca,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:p("cliChat.terminalTab","Terminal")})]})]}),t.jsx("div",{className:"cli-chat-surface__body",children:X?t.jsx(Cn,{sessionId:n,projectId:d,...v}):i()}),!X&&t.jsxs("div",{className:"cli-chat-surface__composer",children:[b>0&&t.jsx("div",{className:"cli-chat-surface__queued",role:"status","aria-live":"polite",children:p("cliChat.queued","{{count}} message queued — will send when the agent is ready",{count:b})}),o()]})]})}const As=640,tr=200,jn="__SKIP__";let js=!1;function sr(n,r=As){return n>r?"auto":"hidden"}function nr(n,r=As){return Math.max(40,Math.min(n,r))}function _n(n,r){const d=new Date(n),o=new Date().getTime()-d.getTime(),b=Math.floor(o/1e3),v=Math.floor(b/60),p=Math.floor(v/60),S=Math.floor(p/24);return b<60?r("chat.relativeTimeJustNow","just now"):v<60?r("chat.relativeTimeMinutes","{{count}}m ago",{count:v}):p<24?r("chat.relativeTimeHours","{{count}}h ago",{count:p}):S<7?r("chat.relativeTimeDays","{{count}}d ago",{count:S}):d.toLocaleDateString()}function Nn(n,r){if(!n||!r)return null;const d=r.toLowerCase();if(d.includes("claude")){let o=r.replace(/^claude[- ]/i,"Claude ").replace(/sonnet[- ](\d+)[- ](\d+)/i,"Sonnet $1.$2").replace(/sonnet[- ](\d+)/i,"Sonnet $1").replace(/haiku[- ](\d+)/i,"Haiku $1").replace(/opus[- ](\d+)/i,"Opus $1").replace(/sonnet/i,"Sonnet").replace(/haiku/i,"Haiku").replace(/opus/i,"Opus").replace(/-/g," ").trim();return o=o.replace(/\s+/g," "),o.length>30?o.slice(0,30)+"…":o}if(d.includes("gpt")||d.includes("openai")){const o=r.replace(/^gpt-4-turbo$/i,"GPT-4 Turbo").replace(/^gpt-4o-mini$/i,"GPT-4o Mini").replace(/^gpt-4o$/i,"GPT-4o").replace(/^gpt-4$/i,"GPT-4").replace(/^gpt-o1-preview$/i,"GPT-o1 Preview").replace(/^gpt-o1-mini$/i,"GPT-o1 Mini").replace(/^gpt-o1$/i,"GPT-o1").replace(/^gpt/i,"GPT").trim();return o.length>30?o.slice(0,30)+"…":o}if(d.includes("gemini")){const o=r.replace(/^gemini[- ]/i,"Gemini ").replace(/pro[- ](\d+)[- ](\d+)/i,"Pro $1.$2").replace(/pro[- ](\d+)/i,"Pro $1").replace(/-/g," ").replace(/\s+/g," ").trim();return o.length>30?o.slice(0,30)+"…":o}const i=r.replace(/-/g," ").replace(/^\w/,o=>o.toUpperCase()).replace(/\s+/g," ").trim();return i.length>30?i.slice(0,30)+"…":i}function Qt(n,r){return n.length<=r?n:`${n.slice(0,r)}…`}function ar(n){if(!n)return null;const r=Object.entries(n);return r.length===0?null:r.map(([d,i])=>{const o=typeof i=="string"?i:(()=>{try{return JSON.stringify(i)}catch{return String(i)}})();return`${d}=${Qt(o,50)}`}).join(", ")}function rr(n){if(n===void 0)return null;if(typeof n=="string")return Qt(n,200);try{return Qt(JSON.stringify(n),200)}catch{return Qt(String(n),200)}}function ir(n){if(!n)return null;if(n.kind==="mailbox"||n.kind==="mailbox-message"){const r=typeof window>"u"?"/":window.location.pathname||"/",d=new URLSearchParams(typeof window>"u"?"":window.location.search);return d.set("view","mailbox"),d.set("mailbox-message",n.id),`${r}?${d.toString()}#message-${encodeURIComponent(n.id)}`}return null}function or(n,r){if(!n)return null;const d=n.label??`${n.kind} ${n.id}`,i=ir(n),o=`chat-failure-reference-${n.kind}-${n.id}`.replace(/[^a-zA-Z0-9_-]+/g,"-").toLowerCase();return t.jsxs("div",{className:"chat-message-failure-reference",children:[t.jsx("span",{className:"chat-message-failure-reference-label",children:r("chat.failureReferenceLabel","Reference")}),t.jsx("span",{className:"chat-message-failure-reference-value",children:d}),i?t.jsx("a",{className:"btn btn-sm chat-message-failure-reference-link",href:i,children:r("chat.openMailboxMessage","Open mailbox message")}):t.jsxs("details",{className:"chat-message-failure-reference-details",children:[t.jsx("summary",{className:"btn btn-sm chat-message-failure-reference-link",children:r("chat.viewFailureDetails","View failure details")}),t.jsxs("dl",{className:"chat-message-failure-reference-meta",id:o,children:[t.jsxs("div",{children:[t.jsx("dt",{children:r("chat.failureReferenceKind","Kind")}),t.jsx("dd",{children:n.kind})]}),t.jsxs("div",{children:[t.jsx("dt",{children:r("chat.failureReferenceId","ID")}),t.jsx("dd",{children:n.id})]}),n.label&&t.jsxs("div",{children:[t.jsx("dt",{children:r("chat.failureReferenceMetaLabel","Label")}),t.jsx("dd",{children:n.label})]})]})]})]})}function zn(n,r,d){if(!n||n.length===0)return null;const i=(T,ee)=>{const ne=Ka(T);if(ne){const M=d?.isAwaitingAnswer===!0;return t.jsx(Ga,{parsed:ne,answered:!M,submittedAnswer:d?.submittedAnswer,disabled:!M,onSubmit:(J,te)=>d?.onQuestionSubmit?.(J,te)},`${T.toolName}-${ee}`)}const k=T.status==="running",H=T.status==="completed"&&T.isError,x=ar(T.args),Y=rr(T.result),D=k?x:Y?`${r("chat.toolCallResultPrefix","result")}: ${Y}`:x?`${r("chat.toolCallArgsPrefix","args")}: ${x}`:null,oe=k?r("chat.toolCallStatusRunning","running"):H?r("chat.toolCallStatusError","error"):r("chat.toolCallStatusCompleted","completed");return t.jsxs("details",{className:`chat-tool-call${k?" chat-tool-call--running":""}${H?" chat-tool-call--error":""}`,open:k,children:[t.jsxs("summary",{children:[t.jsx("span",{className:"chat-tool-call-status-dot","aria-hidden":"true"}),t.jsx("span",{className:"chat-tool-call-name",title:T.toolName,children:T.toolName}),D&&t.jsx("span",{className:"chat-tool-call-preview",title:D,children:D}),t.jsx("span",{className:"chat-tool-call-status-text",children:oe})]}),t.jsxs("div",{className:"chat-tool-call-content",children:[x&&t.jsxs("div",{className:"chat-tool-call-row",children:[t.jsx("span",{className:"chat-tool-call-label",children:r("chat.toolCallArgsPrefix","args")}),t.jsx("span",{className:"chat-tool-call-value",children:x})]}),Y&&t.jsxs("div",{className:`chat-tool-call-row${H?" chat-tool-call-row--error":""}`,children:[t.jsx("span",{className:"chat-tool-call-label",children:r("chat.toolCallResultPrefix","result")}),t.jsx("span",{className:"chat-tool-call-value",children:Y})]})]})]},`${T.toolName}-${ee}`)},o="chat-tool-calls";if(n.length===1)return t.jsxs("div",{className:o,"data-testid":"chat-tool-calls",children:[t.jsxs("div",{className:"chat-tool-calls-header",children:[t.jsx(yn,{size:12,"aria-hidden":"true"}),t.jsx("span",{children:r("chat.toolCallsHeader","Tool calls")})]}),i(n[0],0)]});const b=n.filter(T=>T.status==="running").length,v=n.filter(T=>T.status==="completed"&&T.isError).length,p=b>0,S=Array.from(new Set(n.map(T=>T.toolName))),W=S.slice(0,5),Q=Math.max(0,S.length-W.length),X=Q>0?`${W.join(", ")}, +${Q} more`:W.join(", "),R=p?`(${b} ${r("chat.toolCallStatusRunning","running")})`:v>0?`(${v} ${v===1?r("chat.toolCallStatusError","error"):r("chat.toolCallStatusErrors","errors")})`:null;return t.jsx("div",{className:o,"data-testid":"chat-tool-calls",children:t.jsxs("details",{className:"chat-tool-calls-group","data-testid":"chat-tool-calls-group",open:p,children:[t.jsxs("summary",{className:"chat-tool-calls-group-summary",children:[t.jsx(yn,{size:12,"aria-hidden":"true"}),t.jsx("span",{className:"chat-tool-calls-count",children:r("chat.toolCallsCount","{{count}} tool calls",{count:n.length})}),t.jsx("span",{className:"chat-tool-calls-names",title:X,children:X}),R&&t.jsx("span",{className:"chat-tool-calls-group-status",children:R})]}),n.map((T,ee)=>i(T,ee))]})})}const Hn={p:({children:n,...r})=>t.jsx("p",{...r,children:wn(n)}),li:({children:n,...r})=>t.jsx("li",{...r,children:wn(n)}),pre:({children:n,...r})=>t.jsx("pre",{...r,className:"chat-markdown-pre",children:n}),code:({children:n,...r})=>{const d=typeof n=="string"?n:ra.Children.toArray(n).join(""),i=Yt(d);return i.length===1&&typeof i[0]=="string"?t.jsx("code",{...r,children:n}):t.jsx("code",{...r,children:i})},table:({children:n,...r})=>t.jsx("table",{...r,className:"chat-markdown-table",children:n})},it="__fn_agent__",cr=280,Wt=180,qt=500,Rn="fusion:chat-sidebar-width",Ns="fusion:chat-scope",lr="fusion:chat-draft:";function Mn(n,r){return r?`${lr}${n}:${r}`:null}function An(n){if(!n)return"";try{return localStorage.getItem(n)??""}catch{return""}}const dr=["image/png","image/jpeg","image/gif","image/webp","text/plain","application/json","text/yaml","text/markdown","text/csv","application/xml","text/x-log"];function Tn(n){const r=/(^|[\s])\/([^\s]*)$/.exec(n);if(!r)return null;const d=r[1]??"",i=r[2]??"",o=r.index+d.length;return{filter:i,start:o,end:n.length}}function ur(n,r){const d=n.slice(0,r),i=/(^|[\s\n])@([\w-]*)$/.exec(d);if(!i)return null;const o=i[2]??"",b=d.length-o.length-1;return{filter:o,start:b,end:r}}function mr(n){const r=n?.runtimeConfig;if(!r||typeof r!="object")return null;const d=Reflect.get(r,"modelProvider"),i=Reflect.get(r,"modelId");return typeof d!="string"||d.trim().length===0||typeof i!="string"||i.trim().length===0?null:{provider:d,modelId:i}}function En(n,r,d){if(n?.modelProvider&&n?.modelId)return{provider:n.modelProvider,modelId:n.modelId};const i=mr(r??void 0);return i||(d.provider&&d.modelId?{provider:d.provider,modelId:d.modelId}:null)}function hr({projectId:n,defaultModel:r,onClose:d,onCreate:i}){const{t:o}=St("app"),[b,v]=s.useState("agent"),{agents:p,loading:S}=Ms(n),[W,Q]=s.useState(""),{models:X,favoriteProviders:R,favoriteModels:T,loading:ee,refresh:ne}=$n(),k=r.provider&&r.modelId?`${r.provider}/${r.modelId}`:"",[H,x]=s.useState(k),[Y,D]=s.useState(R),[oe,M]=s.useState(T);s.useEffect(()=>{D(R)},[R]),s.useEffect(()=>{M(T)},[T]),s.useEffect(()=>{k&&x(f=>f||k)},[k]);const J=s.useCallback(async f=>{const y=Y,L=y.includes(f)?y.filter(u=>u!==f):[f,...y];D(L);try{await xn({favoriteProviders:L,favoriteModels:oe}),await ne()}catch{D(y)}},[Y,oe,ne]),te=s.useCallback(async f=>{const y=oe,L=y.includes(f)?y.filter(u=>u!==f):[f,...y];M(L);try{await xn({favoriteProviders:Y,favoriteModels:L}),await ne()}catch{M(y)}},[oe,Y,ne]),P=H||k,re=f=>{if(f.preventDefault(),b==="agent"){if(!W)return;i({agentId:W});return}if(!P)return;const y=P.indexOf("/");if(y<=0)return;const m=P.slice(0,y),L=P.slice(y+1);i({agentId:it,modelProvider:m,modelId:L})},ce=b==="agent"?!W:!P;return t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:d,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:f=>f.stopPropagation(),children:[t.jsx("h3",{children:o("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${b==="agent"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-agent",onClick:()=>{v("agent")},children:o("chat.newChatModeAgent","Agent")}),t.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${b==="model"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-model",onClick:()=>{v("model"),Q(""),x(f=>f||k)},children:o("chat.newChatModeModel","Model")})]}),t.jsxs("form",{onSubmit:re,children:[b==="agent"&&t.jsxs("label",{className:"chat-new-dialog-model-label",children:[o("chat.newChatModeAgent","Agent"),S?t.jsx("div",{className:"chat-new-dialog-loading",children:o("chat.loadingAgents","Loading agents...")}):p.length===0?t.jsx("div",{className:"chat-new-dialog-empty",children:o("chat.noAgentsAvailable","No agents available")}):t.jsx("div",{className:"chat-new-dialog-agent-list",children:p.map(f=>t.jsxs("button",{type:"button",className:`chat-new-dialog-agent-item${W===f.id?" chat-new-dialog-agent-item--selected":""}`,onClick:()=>Q(f.id),"data-testid":`agent-option-${f.id}`,children:[t.jsx(Ct,{size:16}),t.jsx("span",{className:"chat-new-dialog-agent-name",children:f.name}),t.jsx("span",{className:"chat-new-dialog-agent-role",children:f.role})]},f.id))})]}),b==="model"&&t.jsx("div",{className:"chat-new-dialog-model-dropdown","data-testid":"chat-new-dialog-model-section",children:ee?t.jsx("div",{className:"chat-new-dialog-loading",children:o("chat.loadingModels","Loading models...")}):t.jsx(Ba,{models:X,value:H,onChange:x,label:o("chat.newChatModeModel","Model"),placeholder:o("chat.selectModel","Select a model"),favoriteProviders:Y,onToggleFavorite:J,favoriteModels:oe,onToggleModelFavorite:te})}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:d,children:o("chat.cancel","Cancel")}),t.jsx("button",{type:"submit",className:"btn btn-sm btn-primary",disabled:ce,children:o("chat.create","Create")})]})]})]})})}function In(n,r){return n.slice(r+1).find(d=>d.role==="user")?.content}const Rs=s.memo(function({message:r,forcePlain:d,agentName:i,hideAssistantIdentity:o,showAssistantModelTag:b,activeModelTag:v,activeModelProvider:p,activeSessionId:S,mentionAgentsByName:W,roomContext:Q,copyAction:X,onScrollToTop:R,isAwaitingQuestionAnswer:T,submittedQuestionAnswer:ee,onQuestionSubmit:ne}){const{t:k}=St("app"),H=r.role==="assistant",x=H?r.failureInfo:void 0,Y=H&&(!o||!!x),D=s.useMemo(()=>{if(H)return null;const J=r.content,te=/@([\w-]+)/g,P=[];let re=0,ce=te.exec(J);for(;ce;){const[f,y=""]=ce,m=ce.index;m>re&&P.push(J.slice(re,m));const L=y.replace(/_/g," ").toLowerCase(),u=W.get(L);if(u){const fe=!!(Q&&!Q.memberIds.has(u.id)),Z=fe?k("chat.mentionNonMember","Not a member of {{roomName}}",{roomName:Q?.roomName}):void 0;P.push(t.jsxs("span",{className:`chat-mention-chip${fe?" chat-mention-chip--non-member":""}`,title:Z,"aria-label":Z,children:["@",u.name.replace(/\s+/g,"_")]},`${u.id}-${m}`))}else P.push(f);re=m+f.length,ce=te.exec(J)}return re<J.length&&P.push(J.slice(re)),P.length===0?J:P},[H,r.content,W,Q]),oe=s.useMemo(()=>{const J=r.attachments;if(!J||J.length===0)return null;const te=r.roomId?`/api/chat/rooms/${encodeURIComponent(r.roomId)}/attachments/`:S?`/api/chat/sessions/${encodeURIComponent(S)}/attachments/`:null;return te?t.jsx("div",{className:"chat-message-attachments",children:J.map(P=>{const re=P.mimeType.startsWith("image/"),ce=P.id||P.filename,f=`${te}${encodeURIComponent(P.filename)}`;return re?t.jsx("a",{className:"chat-message-attachment-link","data-testid":"chat-message-attachment",href:f,target:"_blank",rel:"noopener noreferrer",children:t.jsx("img",{className:"chat-message-attachment",src:f,alt:P.originalName})},ce):t.jsxs("a",{className:"chat-message-attachment-file","data-testid":"chat-message-attachment",href:f,target:"_blank",rel:"noopener noreferrer",children:[t.jsx(za,{size:14}),t.jsx("span",{children:P.originalName})]},ce)})}):null},[r.attachments,r.roomId,S]),M=s.useMemo(()=>H?x?t.jsxs("div",{className:"chat-message-content chat-message-content--failure",children:[t.jsxs("div",{className:"chat-message-failure-summary-row",children:[t.jsx("span",{className:"status-dot status-dot--error","aria-hidden":"true"}),t.jsx("span",{className:"chat-message-failure-label",children:k("chat.responseFailed","Response failed")})]}),t.jsx("div",{className:"chat-message-failure-summary",children:x.summary}),(x.errorClass||x.code)&&t.jsxs("div",{className:"chat-message-failure-badges",children:[x.errorClass&&t.jsx("span",{className:"chat-message-failure-badge",children:x.errorClass}),x.code&&t.jsx("span",{className:"chat-message-failure-badge",children:x.code})]}),(x.detail||x.reference)&&t.jsxs("details",{className:"chat-message-failure-details",children:[t.jsxs("summary",{children:[t.jsx(Ha,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:k("chat.failureDetails","Failure details")})]}),x.detail&&t.jsx("pre",{className:"chat-message-failure-detail",children:Yt(x.detail)}),or(x.reference,k)]})]}):d?t.jsx("div",{className:"chat-message-content chat-message-content--plain",children:r.content}):t.jsx("div",{className:"chat-message-content chat-message-content--markdown",children:t.jsx(Fn,{remarkPlugins:[Ln],components:Hn,children:r.content})}):null,[x,d,H,r.content]);return t.jsxs("div",{className:`chat-message chat-message--${r.role}${x?" chat-message--failure":""}`,"data-testid":`chat-message-${r.id}`,"data-message-id":r.id,children:[Y&&t.jsxs("div",{className:"chat-message-avatar",children:[p?t.jsx(yt,{provider:p,size:"sm"}):t.jsx(Ct,{size:14}),t.jsx("span",{children:i}),b&&v&&t.jsx("span",{className:"chat-model-tag",children:v})]}),H?M:t.jsx("div",{className:"chat-message-content",children:D}),H&&!x&&(X||R)&&t.jsxs("div",{className:"chat-message-actions",children:[X,R&&t.jsx("button",{type:"button",className:"btn-icon chat-message-scroll-to-top-action","aria-label":k("chat.scrollMessageToTop","Scroll message to top"),"data-testid":`chat-message-scroll-to-top-${r.id}`,onClick:()=>R(r.id),children:t.jsx(Wa,{size:14})})]}),zn(r.toolCalls,k,{isAwaitingAnswer:T,submittedAnswer:ee,onQuestionSubmit:ne}),r.thinkingOutput&&t.jsxs("details",{className:"chat-message-thinking",children:[t.jsx("summary",{children:k("chat.thinking","Thinking")}),t.jsx("pre",{className:"chat-message-thinking-content",children:Yt(r.thinkingOutput)})]}),oe,t.jsx("div",{className:"chat-message-time",children:_n(r.createdAt,k)})]})});function Cr({projectId:n,addToast:r,experimentalFeatures:d}){const{t:i}=St("app");s.useEffect(()=>(Xt({view:"ChatView",trigger:js?"route-active":"remount",projectId:n,replayAttempted:!1}),js=!1,()=>{js=!0,Xt({view:"ChatView",trigger:"route-inactive",projectId:n,replayAttempted:!1})}),[n]);const{activeSession:o,sessionsLoading:b,messages:v,messagesLoading:p,isStreaming:S,streamingText:W,streamingThinking:Q,streamingToolCalls:X,selectSession:R,createSession:T,archiveSession:ee,renameSession:ne,deleteSession:k,sendMessage:H,stopStreaming:x,pendingMessage:Y,clearPendingMessage:D,loadMoreMessages:oe,hasMoreMessages:M,searchQuery:J,setSearchQuery:te,filteredSessions:P,agentsMap:re}=Ya(n,r),[ce,f]=s.useState(!1),y=d?.chatRooms===!0,[m,L]=s.useState(()=>{try{if(localStorage.getItem(Ns)==="rooms"&&y)return"rooms"}catch{}return"direct"}),u=Sa(n,r),{isUnread:fe,markRead:Z}=ka(n),[G,U]=s.useState(()=>{const e=Mn(m,m==="rooms"?u.activeRoom?.id:o?.id);return An(e)}),[pe,q]=s.useState(null),[ze,je]=s.useState(null),[Ke,we]=s.useState(""),[ot,Se]=s.useState(null),[Ge,Re]=s.useState(null),[ae,xe]=s.useState(!0),[He,se]=s.useState(cr),[le,Me]=s.useState(!1),{agentsMap:kt}=Ms(n),ke=s.useMemo(()=>re.size>0?re:kt,[kt,re]),{defaultProvider:jt,defaultModelId:Nt}=$n(),ct=s.useMemo(()=>({provider:jt,modelId:Nt}),[Nt,jt]),{skills:lt,loading:Rt}=ja(n),[Ae,Te]=s.useState(!1),[qe,Qe]=s.useState(""),[l,g]=s.useState(0),[w,j]=s.useState(""),[$,N]=s.useState(!1),[B,A]=s.useState(0),[K,O]=s.useState(-1),[E,_]=s.useState(!1),[z,me]=s.useState([]),[Ee,Xe]=s.useState(!1),[Ts,Mt]=s.useState(!1),[Ye,Es]=s.useState({}),[At,Ve]=s.useState(!1),[Tt,dt]=s.useState(!1),{pushNav:Is}=Na(),[,Et]=s.useState(!1),[Un,On]=s.useState({top:0,left:0}),V=Ra({projectId:n}),Jt=s.useCallback(e=>{if(!e||!V.mentionActive)return;const a=e.getBoundingClientRect();On({top:a.top-260,left:a.left+8})},[V.mentionActive]),Ds=s.useRef(null),Ps=s.useRef(null),$s=s.useRef(null),Fs=s.useRef(null),ge=s.useRef(!1),It=s.useRef(null),Ls=s.useRef(null),Ue=s.useRef(null),Dt=s.useRef(0),Zt=s.useRef(null),ut=s.useRef(null),Ie=s.useRef(null),be=s.useRef(null),es=s.useRef(null),Pt=s.useRef(!1),De=s.useRef(null),Pe=s.useRef(null),he=s.useRef(null),$t=s.useRef(null),_s=s.useRef([]),Je=s.useRef(0),mt=s.useRef(new Map),ts=s.useRef(!1),Ft=s.useRef(!1),$e=s.useRef(null),ss=s.useRef(!1),Lt=Ma(),F=Lt==="mobile",ns=Lt==="tablet";s.useEffect(()=>{o?.id&&Z("direct",o.id,o.lastMessageAt??o.updatedAt)},[o?.id,o?.lastMessageAt,o?.updatedAt,Z]),s.useEffect(()=>{u.activeRoom?.id&&Z("room",u.activeRoom.id,u.activeRoom.updatedAt)},[u.activeRoom?.id,u.activeRoom?.updatedAt,Z]),s.useEffect(()=>{if(!o?.id||v.length===0)return;const e=v[v.length-1];Z("direct",o.id,e?.createdAt??o.lastMessageAt??o.updatedAt)},[o?.id,o?.lastMessageAt,o?.updatedAt,Z,v]),s.useEffect(()=>{if(!u.activeRoom?.id||u.messages.length===0)return;const e=u.messages[u.messages.length-1];Z("room",u.activeRoom.id,e?.createdAt??u.activeRoom.updatedAt)},[Z,u.activeRoom?.id,u.activeRoom?.updatedAt,u.messages]),s.useEffect(()=>{try{const e=localStorage.getItem(Rn);if(!e)return;const a=Number.parseInt(e,10);if(Number.isNaN(a))return;const c=Math.max(Wt,Math.min(qt,a));se(c)}catch{}},[]),s.useEffect(()=>{try{const e=localStorage.getItem(Ns);if(e==="direct"){L("direct");return}e==="rooms"&&y&&L("rooms")}catch{}},[y]),s.useEffect(()=>{if(!y&&m==="rooms"){L("direct");return}try{localStorage.setItem(Ns,m)}catch{}},[y,m]);const ve=Mn(m,m==="rooms"?u.activeRoom?.id:o?.id),as=s.useRef(ve);s.useEffect(()=>{ve!==as.current&&(as.current=ve,U(An(ve)))},[ve]),s.useEffect(()=>{if(!(!ve||as.current!==ve))try{if(G){localStorage.setItem(ve,G);return}localStorage.removeItem(ve)}catch{}},[ve,G]);const ie=y&&m==="rooms"&&!!u.activeRoom,{keyboardOverlap:zs,keyboardOpen:_t}=Aa({enabled:(F||ns)&&(!!o||ie),allowNonMobileViewport:ns}),ht=ns&&_t,ye=s.useMemo(()=>{const e=qe.trim().toLowerCase();return(e?lt.filter(c=>c.name.toLowerCase().includes(e)):lt).slice(0,10)},[lt,qe]),Ze=s.useMemo(()=>Array.from(ke.values()),[ke]),Fe=s.useMemo(()=>!y||m!=="rooms"||!u.activeRoom?null:{roomId:u.activeRoom.id,roomName:u.activeRoom.name,memberIds:new Set(u.activeRoomMembers.map(e=>e.agentId))},[y,m,u.activeRoom,u.activeRoomMembers]),We=s.useMemo(()=>{const e=Ze.filter(h=>Ta(h.name,w));if(!Fe)return e;const a=e.filter(h=>Fe.memberIds.has(h.id));if(w.trim().length===0)return a;const c=e.filter(h=>!Fe.memberIds.has(h.id));return[...a,...c]},[Ze,w,Fe]),rs=s.useMemo(()=>{const e=new Map;for(const a of Ze)e.set(a.name.toLowerCase(),a);return e},[Ze]),Bn=s.useMemo(()=>ye.map(e=>e.id).join("\0"),[ye]);s.useEffect(()=>{g(0)},[Bn]),s.useEffect(()=>{A(0)},[w,$]),s.useEffect(()=>()=>{Ie.current!==null&&window.clearTimeout(Ie.current)},[]),s.useEffect(()=>{const e=Ps.current;if(!e||!M||p)return;const a=new IntersectionObserver(c=>{c[0].isIntersecting&&oe()},{threshold:.1});return a.observe(e),()=>a.disconnect()},[M,p,oe]);const et=s.useCallback(()=>ie?u.activeRoom?.id??null:o?.id??null,[ie,u.activeRoom?.id,o?.id]),Hs=s.useCallback((e,a)=>typeof CSS<"u"&&typeof CSS.escape=="function"?e.querySelector(`.chat-message[data-message-id="${CSS.escape(a)}"]`):e.querySelector(`.chat-message[data-message-id="${a.replace(/"/g,'\\"')}"]`),[]),zt=s.useCallback(()=>{const e=be.current,a=et();if(!e||!a)return;const c=e.scrollTop,h=e.querySelectorAll(".chat-message[data-message-id]"),C=Array.from(h).find(de=>de.offsetTop+de.offsetHeight>=c)??h[0]??null,I=C?.getAttribute("data-message-id")??null,ue=C?C.offsetTop-c:0;ut.current={threadId:a,scrollTop:c,scrollHeight:e.scrollHeight,clientHeight:e.clientHeight,anchorMessageId:I,anchorOffset:ue,wasPinnedBefore:!ge.current,capturedAtMs:typeof performance<"u"?performance.now():Date.now()}},[et]),Us=s.useCallback(()=>{const e=be.current;if(!e)return;const c=e.scrollTop+e.clientHeight>=e.scrollHeight-50;Mt(!c),ge.current=!c,zt()},[zt]),Le=s.useCallback((e,a)=>{if(!e.isConnected||!a?.force&&ge.current)return;let c=0,h=0,C=-1;const I=6,ue=()=>{if(e.isConnected&&!(!a?.force&&ge.current)){if(e.scrollTop=e.scrollHeight,e.scrollHeight===C?h+=1:(h=0,C=e.scrollHeight),c+=1,c>=I||h>=2){Mt(!1),ge.current=!1;return}window.requestAnimationFrame(ue)}};ue()},[]),ft=ie?u.messages:v;s.useLayoutEffect(()=>{const e=be.current,a=et(),c=ut.current;if(!e||!a||!c||c.threadId!==a||c.wasPinnedBefore)return;const h=(typeof performance<"u"?performance.now():Date.now())-c.capturedAtMs,C=e.scrollHeight>e.clientHeight,I=h>3e3,ue=c.scrollTop<=0&&c.anchorOffset<=0&&C;if(!ge.current||I||ue){ut.current=null;return}let de=c.scrollTop;if(c.anchorMessageId){const _e=Hs(e,c.anchorMessageId);_e?de=_e.offsetTop-c.anchorOffset:de=c.scrollTop+(e.scrollHeight-c.scrollHeight)}else de=c.scrollTop+(e.scrollHeight-c.scrollHeight);e.scrollTop=Math.max(0,de),ge.current=!0,Mt(!0),ut.current=null},[ft,et,Hs]);const is=s.useCallback(e=>{},[ft.length,ie]),Ne=s.useCallback(e=>{is(e);const a=be.current;a&&(ut.current=null,ge.current=!1,Le(a))},[Le,is]);s.useLayoutEffect(()=>{Ue.current!==null&&(window.clearTimeout(Ue.current),Ue.current=null);const e=ie?u.activeRoom?.id??null:o?.id??null;if(!e){It.current=null;return}const a={threadId:e,loaded:ie?!u.messagesLoading:!p,hasMessages:ie?u.messages.length>0:v.length>0},c=It.current,h=c?.threadId!==e,C=c?.threadId===e&&!c.loaded&&a.loaded,I=c?.threadId===e&&!c.hasMessages&&a.hasMessages;if(!(c===null||h||C||I))return;const de=be.current;if(de)return is(h?"thread-change":C?"finished-loading":I?"first-messages":"mount"),Le(de,{force:!0}),ie||(Ue.current=window.setTimeout(()=>{if(Ue.current=null,ge.current)return;const _e=be.current;_e&&Le(_e)},250)),It.current=a,()=>{Ue.current!==null&&(window.clearTimeout(Ue.current),Ue.current=null)}},[ie,u.activeRoom?.id,u.messages.length,u.messagesLoading,o?.id,v.length,p,Le]),s.useEffect(()=>{!S||ge.current||Ne("streaming")},[S,W,Q,Ne]),s.useEffect(()=>{const e=et();if(!e){Dt.current=0,Zt.current=null;return}if(Zt.current!==e){Zt.current=e,Dt.current=ft.length;return}const a=Dt.current,c=ft.length,h=c>a,C=!ge.current;Dt.current=c,h&&C&&Ne("new-message")},[ft,et,Ne]),s.useEffect(()=>{zs<=0||!be.current||Ne("keyboard")},[zs,Ne]),Ea(F&&_t),s.useLayoutEffect(()=>{if(!F||!o&&!ie||typeof window>"u")return;const e=es.current,a=window.visualViewport;if(!e||!a)return;const c=C=>{if(!(C instanceof HTMLElement))return!1;if(C.tagName==="TEXTAREA")return!0;if(C.tagName!=="INPUT")return!1;const I=C.type.toLowerCase();return["","text","search","email","url","tel","password","number"].includes(I)},h=()=>{if(Pt.current){e.classList.remove("chat-thread--keyboard-active"),e.style.transform="",e.style.willChange="";return}const C=Math.max(0,window.innerHeight-a.offsetTop-a.height),I=a.offsetTop||0;e.style.setProperty("--vv-height",`${a.height}px`),e.style.setProperty("--vv-offset-top",`${I}px`),e.style.setProperty("--keyboard-overlap",`${C}px`);const ue=(C>0||I>0)&&c(document.activeElement);e.classList.toggle("chat-thread--keyboard-active",ue),ue&&I>0?(e.style.transform=`translateY(${I}px)`,e.style.willChange="transform"):(e.style.transform="",e.style.willChange="")};return h(),a.addEventListener("resize",h),a.addEventListener("scroll",h),document.addEventListener("focusin",h),document.addEventListener("focusout",h),window.addEventListener("pageshow",h),document.addEventListener("visibilitychange",h),()=>{a.removeEventListener("resize",h),a.removeEventListener("scroll",h),document.removeEventListener("focusin",h),document.removeEventListener("focusout",h),window.removeEventListener("pageshow",h),document.removeEventListener("visibilitychange",h),e.classList.remove("chat-thread--keyboard-active"),e.style.transform="",e.style.willChange=""}},[o,F,ie]),s.useEffect(()=>{const e=()=>q(null);if(pe)return document.addEventListener("click",e),()=>document.removeEventListener("click",e)},[pe]),s.useEffect(()=>{if(!F||!_t)return;const e=a=>{a.target?.closest(".chat-messages")||a.preventDefault()};return document.addEventListener("touchmove",e,{passive:!1}),()=>{document.removeEventListener("touchmove",e)}},[F,_t]),s.useEffect(()=>{const e=Ls.current;if(Ls.current=m,m==="rooms"&&!u.activeRoom){It.current=null;return}if(!(m==="direct"&&(e===null||e==="rooms"))&&!(m==="rooms"&&(e===null||e==="direct")))return;const h=be.current;h&&(Le(h,{force:!0}),ge.current=!1,Mt(!1))},[m,u.activeRoom,Le]),s.useEffect(()=>{if(!o&&!ie||ie&&!F)return;const e=()=>{const c=!ge.current;zt(),c&&F&&be.current&&Ne("visibility-restore")},a=()=>{document.visibilityState==="visible"&&e()};return document.addEventListener("visibilitychange",a),window.addEventListener("pageshow",e),()=>{document.removeEventListener("visibilitychange",a),window.removeEventListener("pageshow",e)}},[F,o,ie,zt,Ne]),s.useEffect(()=>{if(ie||typeof ResizeObserver>"u")return;const e=be.current;if(!e)return;const a=new ResizeObserver(()=>{ge.current||Le(e)});return a.observe(e),()=>{a.disconnect()}},[ie,Le,o?.id,m]),s.useEffect(()=>{_s.current=z},[z]),s.useEffect(()=>()=>{for(const e of _s.current)e.previewUrl&&URL.revokeObjectURL(e.previewUrl);for(const e of mt.current.values())window.clearTimeout(e);mt.current.clear()},[]);const tt=s.useCallback(e=>{if(!e||e.length===0)return;const a=[];for(const c of Array.from(e)){if(!dr.includes(c.type))continue;const h=c.type.startsWith("image/");a.push({file:c,previewUrl:h?URL.createObjectURL(c):""})}a.length>0&&me(c=>[...c,...a])},[]),Os=s.useCallback(e=>{me(a=>{const c=a[e];return c?.previewUrl&&URL.revokeObjectURL(c.previewUrl),a.filter((h,C)=>C!==e)})},[]),Bs=s.useCallback(e=>{const a=e.clipboardData?.files;if(!a||a.length===0)return;const c=Array.from(a).filter(h=>h.type.startsWith("image/"));c.length!==0&&tt(c)},[tt]),Kn=s.useCallback(async e=>{try{await T(e),f(!1),F&&xe(!1)}catch{r(i("chat.failedToCreateSession","Failed to create chat session"),"error")}},[T,r,F]),Ce=s.useCallback(e=>{const a=e??he.current;if(!a)return;const c=Lt==="tablet"?tr:As;a.style.height="auto",a.style.height=`${nr(a.scrollHeight,c)}px`,a.style.overflowY=sr(a.scrollHeight,c)},[Lt]),Ks=s.useCallback(e=>{he.current=e,e&&Ce(e)},[Ce]);s.useLayoutEffect(()=>{Ce()},[m,G,o?.id,u.activeRoom?.id,Ce]);const st=s.useCallback(()=>{if(U(""),ve)try{localStorage.removeItem(ve)}catch{}Te(!1),Qe(""),N(!1),j(""),O(-1),me(e=>{for(const a of e)a.previewUrl&&URL.revokeObjectURL(a.previewUrl);return[]})},[ve]),nt=s.useCallback(()=>{Ft.current=!0,$e.current!=null&&clearTimeout($e.current),$e.current=window.setTimeout(()=>{Ft.current=!1,$e.current=null},700)},[]),at=s.useCallback(()=>ss.current?!1:(ss.current=!0,window.setTimeout(()=>{ss.current=!1},0),!0),[]),os=s.useCallback(()=>Ft.current?(Ft.current=!1,$e.current!=null&&(clearTimeout($e.current),$e.current=null),!0):!1,[]);s.useEffect(()=>()=>{$e.current!=null&&clearTimeout($e.current)},[]);const gt=s.useCallback(()=>{const e=G.trim(),a=z.map(c=>c.file);if(!(!e&&a.length===0||!o)){if(e==="/clear"||e==="/new"){st(),D(),x(),T({agentId:o.agentId,modelProvider:o.modelProvider??void 0,modelId:o.modelId??void 0}).catch(()=>{r(i("chat.failedToClearConversation","Failed to clear conversation"),"error")});return}st(),H(e,a)}},[G,z,o,st,x,D,T,r,H]),pt=s.useCallback(async()=>{const e=G.trim(),a=z.map(c=>c.file);if(!(!e&&a.length===0)){if(y&&m==="rooms"){if(!u.activeRoom)return;if(e==="/clear"||e==="/new"){st();try{await u.clearRoom(u.activeRoom.id)}catch{r(i("chat.failedToClearRoomConversation","Failed to clear room conversation"),"error")}return}if(ts.current)return;ts.current=!0;const c=G;st();try{await u.sendRoomMessage(e,{files:a})}catch(h){if(h instanceof Ia){const I=h.message.trim()?h.message:i("chat.messageSentButReplyFailed","Message sent, but assistant reply failed");r(i("chat.messageSentButReplyFailedDetail","Message sent, but assistant reply failed: {{detail}}",{detail:I}),"error");return}U(c);const C=h instanceof Error&&h.message.trim()?h.message:i("chat.failedToSendRoomMessage","Failed to send room message");r(C,"error")}finally{ts.current=!1}return}gt()}},[G,z,y,m,u,u.clearRoom,st,r,gt]),Ht=s.useCallback(async e=>{if(y&&m==="rooms"){if(!u.activeRoom)return;try{await u.sendRoomMessage(e)}catch(a){const c=a instanceof Error&&a.message.trim()?a.message:i("chat.failedToSendRoomMessage","Failed to send room message");r(c,"error")}return}o&&H(e)},[o,r,y,m,u,H,i]),cs=s.useCallback(e=>{U(a=>{const c=Tn(a);if(!c)return a;const h=`/skill:${e.name} `,C=a.slice(0,c.start)+h+a.slice(c.end);return window.requestAnimationFrame(()=>{he.current&&(Ce(he.current),he.current.focus())}),C}),Te(!1),Qe(""),g(0)},[Ce]),Ut=s.useCallback(e=>{const a=he.current;if(!a||K<0)return;const c=a.selectionStart??Je.current,h=a.selectionEnd??c,C=Math.max(c,h),I=Math.min(K,C),de=`${`@${e.name.replace(/\s+/g,"_")}`} `,_e=G.slice(0,I)+de+G.slice(C),rt=I+de.length;U(_e),N(!1),j(""),A(0),O(-1),window.requestAnimationFrame(()=>{he.current&&(Ce(he.current),he.current.focus(),he.current.setSelectionRange(rt,rt))})},[K,G,Ce]),bt=s.useCallback((e,a)=>{const h=he.current?.selectionStart??Je.current,C=G.lastIndexOf("#",h),I=C>=0?C+a.length:e.length;U(e),V.dismissMention(),Et(!1),window.requestAnimationFrame(()=>{he.current&&(Ce(he.current),he.current.focus(),he.current.setSelectionRange(I,I))})},[V,G,Ce]),Gs=s.useCallback(e=>{if(Je.current=e.currentTarget.selectionStart??Je.current,V.mentionActive&&V.combinedItems.length>0){if(V.handleKeyDown(e,G),e.key==="Enter"||e.key==="Tab"){const a=V.combinedItems[V.selectedIndex];a?.kind==="task"?bt(V.selectTask(a.task,G),`#${a.task.id}`):a?.kind==="file"&&bt(V.selectFile(a.file,G),`#${a.file.path}`)}return}if($&&e.key==="ArrowDown"){e.preventDefault(),We.length>0&&A(a=>(a+1)%We.length);return}if($&&e.key==="ArrowUp"){e.preventDefault(),We.length>0&&A(a=>a===0?We.length-1:a-1);return}if($&&e.key==="Enter"){e.preventDefault();const a=We[B]??We[0];a&&Ut(a);return}if($&&e.key==="Escape"){e.preventDefault(),N(!1),j(""),O(-1);return}if(Ae&&e.key==="ArrowDown"){e.preventDefault(),ye.length>0&&g(a=>(a+1)%ye.length);return}if(Ae&&e.key==="ArrowUp"){e.preventDefault(),ye.length>0&&g(a=>a===0?ye.length-1:a-1);return}if(Ae&&(e.key==="Enter"||e.key==="Tab")&&ye.length>0){e.preventDefault();const a=ye[l]??ye[0];a&&cs(a);return}if(Ae&&e.key==="Escape"){e.preventDefault(),Te(!1);return}e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),pt())},[$,We,B,Ut,Ae,ye,l,cs,pt,V,bt,G]),Ot=s.useCallback((e,a)=>{const c=ur(e,a);if(c){N(!0),j(c.filter),O(c.start);return}N(!1),j(""),O(-1)},[]),Vs=s.useCallback(e=>{const a=e.target,c=a.value,h=a.selectionStart??c.length;Ce(a),Je.current=h,U(c);const C=Tn(c);C?(Te(!0),Qe(C.filter)):(Te(!1),Qe("")),Ot(c,h),V.detectMention(c,h),Et(V.mentionActive),V.mentionActive&&Jt(a)},[Ot,Ce]),Bt=s.useCallback(e=>{const a=e.currentTarget,c=a.selectionStart??a.value.length;Je.current=c,Ot(a.value,c),V.detectMention(a.value,c),Et(V.mentionActive),V.mentionActive&&Jt(a)},[Ot,V,Jt]),Ws=s.useCallback(e=>{e.key!=="Escape"&&Bt(e)},[Bt]),qs=s.useCallback(()=>{typeof window<"u"&&window.innerWidth<=768&&(Pt.current=!0,De.current!==null&&window.clearTimeout(De.current),De.current=window.setTimeout(()=>{Pt.current=!1,De.current=null},450),(window.scrollY!==0||window.scrollX!==0)&&window.scrollTo(0,0),Pe.current!==null&&window.clearTimeout(Pe.current),Pe.current=window.setTimeout(()=>{Pe.current=null,document.activeElement?.tagName!=="TEXTAREA"&&(window.scrollY!==0||window.scrollX!==0)&&window.scrollTo(0,0)},350)),Ie.current!==null&&window.clearTimeout(Ie.current),Ie.current=window.setTimeout(()=>{Te(!1),N(!1),j(""),O(-1),Et(!1),V.dismissMention(),Ie.current=null},120)},[V]),Qs=s.useCallback(()=>{Pt.current=!1,De.current!==null&&(window.clearTimeout(De.current),De.current=null),Ie.current!==null&&(window.clearTimeout(Ie.current),Ie.current=null),Pe.current!==null&&(window.clearTimeout(Pe.current),Pe.current=null)},[]);s.useEffect(()=>()=>{De.current!==null&&window.clearTimeout(De.current),Pe.current!==null&&window.clearTimeout(Pe.current)},[]);const Gn=s.useCallback(async e=>{q(null);try{await ee(e),r(i("chat.conversationArchived","Conversation archived"),"success")}catch{r(i("chat.failedToArchiveConversation","Failed to archive conversation"),"error")}},[ee,r]),Xs=s.useCallback(e=>{const a=P.find(c=>c.id===e)??(o?.id===e?o:null);q(null),Ve(!1),we(a?.title??""),je({sessionId:e,title:a?.title??""})},[o,P]),Ys=s.useCallback(async()=>{if(ze)try{await ne(ze.sessionId,Ke),je(null),we(""),r(i("chat.conversationRenamed","Conversation renamed"),"success")}catch{}},[r,ze,ne,Ke,i]),Vn=s.useCallback(async e=>{Se(null),q(null);try{await k(e),r(i("chat.conversationDeleted","Conversation deleted"),"success")}catch{r(i("chat.failedToDeleteConversation","Failed to delete conversation"),"error")}},[k,r]),vt=s.useCallback(e=>{try{localStorage.setItem(Rn,String(e))}catch{}},[]),Wn=s.useCallback(e=>{if(F||ht)return;e.preventDefault(),e.stopPropagation();const a=e.currentTarget;typeof a.setPointerCapture=="function"&&a.setPointerCapture(e.pointerId);const c=e.clientX,h=He;let C=h;document.body.style.userSelect="none";const I=de=>{const _e=de.clientX-c,rt=Math.max(Wt,Math.min(qt,h+_e));C=rt,se(rt),vt(rt)},ue=de=>{typeof a.releasePointerCapture=="function"&&a.releasePointerCapture(de.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",I),document.removeEventListener("pointerup",ue),vt(C)};document.addEventListener("pointermove",I),document.addEventListener("pointerup",ue)},[F,vt,He,ht]),qn=s.useCallback(e=>{if(F||ht||e.key!=="ArrowLeft"&&e.key!=="ArrowRight")return;e.preventDefault();const a=e.shiftKey?50:10,c=e.key==="ArrowLeft"?-a:a,h=Math.max(Wt,Math.min(qt,He+c));se(h),vt(h)},[F,vt,He,ht]),Js=s.useCallback(e=>{const a=P.find(c=>c.id===e);Z("direct",e,a?.lastMessageAt??a?.updatedAt),R(e),Ve(!1),F&&xe(!1)},[P,F,Z,R]),ls=s.useCallback(()=>{R(""),xe(!0),Ve(!1)},[R]),ds=s.useCallback(()=>{u.selectRoom(null),xe(!0),Ve(!1)},[u]),Qn=()=>t.jsxs("div",{className:"chat-empty-state",children:[t.jsx(Pn,{size:48,strokeWidth:1.5}),t.jsx("h2",{children:i("chat.startNewConversation","Start a new conversation")}),t.jsxs("button",{className:"btn btn-primary",onClick:()=>f(!0),children:[t.jsx(xt,{size:16}),i("chat.newChat","New Chat")]})]}),us=En(o,o?.agentId?ke.get(o.agentId)??null:null,ct),Oe=Nn(us?.provider,us?.modelId),Be=us?.provider??null,ms=!!(o||S||v.length>0),Kt=m==="rooms"?ie:!!o,Zs=s.useRef(Kt);s.useEffect(()=>{const e=Zs.current;Zs.current=Kt,F&&(e||!Kt||Is({type:"view",revert:m==="rooms"?ds:ls}))},[m,ls,ds,Kt,F,Is]);const hs=o?.agentId===it?Oe??"Fusion":o?.title||ke.get(o?.agentId??"")?.name||o?.agentId||"Chat",en=!!(Oe&&Oe!==hs),Xn=F&&m==="direct"&&!!o,fs=ke.get(o?.agentId??"")?.name||(o?.agentId===it?Oe??"Fusion":o?.agentId?.slice(0,30)??"Fusion"),gs=!1,ps=o?.agentId===it,Yn=Y.length>50?`${Y.slice(0,50)}…`:Y,Jn=s.useCallback(()=>{_(e=>!e)},[]);s.useEffect(()=>{if(!At)return;const e=a=>{$s.current?.contains(a.target)||Ve(!1)};return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[At]),s.useEffect(()=>{if(!Tt)return;const e=c=>{Fs.current?.contains(c.target)||dt(!1)},a=c=>{c.key==="Escape"&&dt(!1)};return document.addEventListener("mousedown",e),document.addEventListener("keydown",a),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",a)}},[Tt]),s.useEffect(()=>{(!F||m!=="direct"||ae)&&Ve(!1)},[F,m,ae]),s.useEffect(()=>{dt(!1)},[u.activeRoom?.id]);const bs=s.useCallback((e,a)=>{const c=mt.current.get(e);c&&window.clearTimeout(c),Es(C=>({...C,[e]:a}));const h=window.setTimeout(()=>{Es(C=>{const{[e]:I,...ue}=C;return ue}),mt.current.delete(e)},2e3);mt.current.set(e,h)},[]),tn=s.useCallback(async(e,a)=>{try{if(!navigator.clipboard?.writeText)throw new Error("Clipboard API unavailable");await navigator.clipboard.writeText(a),bs(e,"success")}catch{bs(e,"error")}},[bs]),Zn=s.useCallback((e,a=!1)=>a?t.jsx("div",{className:"chat-message-content chat-message-content--plain",children:e}):t.jsx("div",{className:"chat-message-content chat-message-content--markdown",children:t.jsx(Fn,{remarkPlugins:[Ln],components:Hn,children:e})}),[]),vs=o?.agentId===it,ws=s.useCallback((e,a,c)=>t.jsx("button",{type:"button",className:`btn-icon chat-message-copy-action${Ye[e]==="success"?" chat-message-copy-action--success":""}${Ye[e]==="error"?" chat-message-copy-action--error":""}`,"data-testid":c??`chat-copy-response-${e}`,"aria-label":Ye[e]==="success"?i("chat.responseCopied","Response copied"):Ye[e]==="error"?i("chat.copyFailed","Copy failed"):i("chat.copyResponse","Copy response"),onClick:()=>{tn(e,a)},children:Ye[e]==="success"?t.jsx(Da,{size:14}):t.jsx(Pa,{size:14})}),[Ye,tn]),xs=s.useCallback(e=>{const a=be.current;if(!a)return;const c=`[data-testid="chat-message-${e}"]`,h=a.querySelector(c);if(!h)return;const C=h.getBoundingClientRect().top-a.getBoundingClientRect().top+a.scrollTop,I=typeof window<"u"&&window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;a.scrollTo({top:C,behavior:I?"auto":"smooth"})},[]),sn=o?.cliExecutorAdapterId??null,ea=!!sn,ta=sn==="generic"?"generic":"hybrid",sa=o?.cliSessionFile||o?.id||"",nn=()=>t.jsxs("div",{className:"chat-messages",ref:be,onScroll:Us,children:[t.jsx("div",{ref:Ps,className:"chat-load-more-sentinel",children:M&&p&&t.jsx("div",{className:"chat-loading-older",children:i("chat.loadingOlderMessages","Loading older messages…")})}),S?t.jsxs(t.Fragment,{children:[v.map((e,a)=>t.jsx(Rs,{message:e,forcePlain:E,agentName:fs,hideAssistantIdentity:ps,showAssistantModelTag:gs,activeModelTag:Oe,activeModelProvider:Be,activeSessionId:o?.id??null,mentionAgentsByName:rs,roomContext:null,copyAction:vs&&e.role==="assistant"?ws(e.id,e.content):void 0,onScrollToTop:xs,isAwaitingQuestionAnswer:e.role==="assistant"&&a===v.length-1&&!S,submittedQuestionAnswer:In(v,a),onQuestionSubmit:Ht},e.id)),t.jsxs("div",{className:"chat-message chat-message--assistant chat-message--streaming",children:[!ps&&t.jsxs("div",{className:"chat-message-avatar",children:[Be?t.jsx(yt,{provider:Be,size:"sm"}):t.jsx(Ct,{size:14}),t.jsx("span",{children:fs}),gs]}),W?Zn(W,E):t.jsx("div",{className:"chat-message-content chat-message-content--waiting",children:Q?i("chat.thinkingStatus","Thinking…"):i("chat.workingStatus","Working…")}),vs&&W&&ws("__streaming__",W,"chat-copy-response-streaming"),zn(X,i,{isAwaitingAnswer:!0,onQuestionSubmit:Ht}),Q&&t.jsxs("details",{className:"chat-message-thinking",children:[t.jsx("summary",{children:i("chat.thinking","Thinking")}),t.jsx("pre",{className:"chat-message-thinking-content",children:Yt(Q)})]}),t.jsxs("div",{className:"chat-typing-indicator",children:[t.jsx("span",{}),t.jsx("span",{}),t.jsx("span",{})]})]})]}):p?t.jsx("div",{className:"chat-empty-state",children:i("chat.loadingMessages","Loading messages...")}):v.length===0&&!o?Qn():v.length===0&&o?t.jsx("div",{className:"chat-empty-state",children:i("chat.noMessagesYet","No messages yet. Start the conversation!")}):t.jsx(t.Fragment,{children:v.map((e,a)=>t.jsx(Rs,{message:e,forcePlain:E,agentName:fs,hideAssistantIdentity:ps,showAssistantModelTag:gs,activeModelTag:Oe,activeModelProvider:Be,activeSessionId:o?.id??null,mentionAgentsByName:rs,roomContext:null,copyAction:vs&&e.role==="assistant"?ws(e.id,e.content):void 0,onScrollToTop:xs,isAwaitingQuestionAnswer:e.role==="assistant"&&a===v.length-1&&!S,submittedQuestionAnswer:In(v,a),onQuestionSubmit:Ht},e.id))}),t.jsx("div",{ref:Ds})]}),an=()=>t.jsxs("div",{className:"chat-input-area",children:[t.jsx("input",{ref:$t,type:"file",accept:"image/*,.txt,.json,.yaml,.yml,.log,.csv,.xml,.md",multiple:!0,style:{display:"none"},onChange:e=>{tt(e.target.files),e.target.value=""}}),Ae&&t.jsx("div",{className:"chat-skill-menu","data-testid":"chat-skill-menu",role:"listbox","aria-label":i("chat.skillSuggestions","Skill suggestions"),children:Rt?t.jsx("div",{className:"chat-skill-menu-empty",children:i("chat.loadingSkills","Loading skills…")}):ye.length===0?t.jsx("div",{className:"chat-skill-menu-empty",children:qe?i("chat.noSkillsFound","No skills found"):i("chat.noSkillsAvailable","No skills available")}):ye.map((e,a)=>t.jsxs("button",{type:"button",role:"option","aria-selected":a===l,className:`chat-skill-menu-item${a===l?" chat-skill-menu-item--highlighted":""}`,onMouseDown:c=>c.preventDefault(),onMouseEnter:()=>g(a),onClick:()=>cs(e),children:[t.jsx("span",{className:"chat-skill-menu-item-name",children:e.name}),t.jsx("span",{className:"chat-skill-menu-item-description",title:e.relativePath,children:e.relativePath})]},e.id))}),z.length>0&&t.jsx("div",{className:"chat-attachment-previews","data-testid":"chat-attachment-previews",children:z.map((e,a)=>t.jsxs("div",{className:"chat-attachment-preview","data-testid":`chat-attachment-preview-${a}`,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:()=>Os(a),"data-testid":`chat-attachment-remove-${a}`,"aria-label":`Remove ${e.file.name}`,children:"×"})]},e.previewUrl||`${e.file.name}-${a}`))}),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:()=>$t.current?.click(),children:t.jsx(gn,{size:16})}),t.jsxs("div",{className:`chat-input-wrapper${Ee?" chat-input-wrapper--dragover":""}`,onDragOver:e=>{e.preventDefault(),Xe(!0)},onDragLeave:()=>Xe(!1),onDrop:e=>{e.preventDefault(),Xe(!1),tt(e.dataTransfer.files)},children:[t.jsx("textarea",{ref:Ks,className:"chat-input-textarea",placeholder:i("chat.typeMessage","Type a message..."),value:G,onChange:Vs,onKeyDown:Gs,onKeyUp:Ws,onClick:Bt,onBlur:qs,onFocus:Qs,onPaste:Bs,onTouchStart:e=>{typeof window>"u"||window.innerWidth>768||pn()&&(document.activeElement,e.currentTarget)},rows:1,"data-testid":"chat-input"}),t.jsx(bn,{agents:Ze,filter:w,highlightedIndex:B,visible:$,onSelect:Ut,position:"below",roomMemberIds:Fe?.memberIds,roomName:Fe?.roomName}),t.jsx(Ua,{visible:V.mentionActive&&!$,position:Un,tasks:V.tasks,files:V.files,selectedIndex:V.selectedIndex,onSelectTask:e=>{bt(V.selectTask(e,G),`#${e.id}`)},onSelectFile:e=>{bt(V.selectFile(e,G),`#${e.path}`)},loading:V.loading}),Y&&t.jsxs("div",{className:"chat-pending-message","data-testid":"chat-pending-indicator",children:[t.jsx("span",{children:i("chat.queuedMessage","Queued: {{preview}}",{preview:Yn})}),t.jsx("button",{type:"button",className:"chat-pending-message-dismiss","aria-label":i("chat.dismissQueuedMessage","Dismiss queued message"),"data-testid":"chat-pending-dismiss",onClick:D,children:"×"})]})]}),S?t.jsx("button",{className:"chat-input-stop",onPointerDown:e=>{if(e.pointerType&&e.pointerType!=="mouse"){if(e.preventDefault(),!at())return;nt(),x()}},onTouchStart:e=>{e.preventDefault(),at()&&(nt(),x())},onMouseDown:e=>{e.preventDefault()},onClick:()=>{os()||x()},"aria-label":i("chat.stopGeneration","Stop generation"),"data-testid":"chat-stop-btn",children:t.jsx(Oa,{size:14})}):t.jsx("button",{type:"button",className:"chat-input-send",onPointerDown:e=>{if(e.pointerType&&e.pointerType!=="mouse"){if(e.preventDefault(),!at())return;nt(),gt()}},onTouchStart:e=>{e.preventDefault(),at()&&(nt(),gt())},onMouseDown:e=>{e.preventDefault()},onClick:()=>{os()||gt()},disabled:!G.trim()&&z.length===0,"data-testid":"chat-send-btn",style:{touchAction:"manipulation"},children:t.jsx(vn,{size:16})})]})]}),na=F?void 0:{width:`${He}px`};return t.jsxs("div",{className:"chat-view",children:[t.jsxs("div",{className:`chat-sidebar${ae?"":" chat-sidebar--hidden"}`,style:na,children:[y&&t.jsxs("div",{className:"chat-sidebar-scope-toggle",role:"tablist","data-testid":"chat-sidebar-scope-toggle",children:[t.jsx("button",{type:"button",role:"tab",className:`chat-sidebar-scope-btn${m==="direct"?" chat-sidebar-scope-btn--active":""}`,"aria-selected":m==="direct","data-testid":"chat-sidebar-scope-direct",onClick:()=>L("direct"),children:i("chat.scopeDirect","Direct")}),t.jsx("button",{type:"button",role:"tab",className:`chat-sidebar-scope-btn${m==="rooms"?" chat-sidebar-scope-btn--active":""}`,"aria-selected":m==="rooms","data-testid":"chat-sidebar-scope-rooms",onClick:()=>L("rooms"),children:i("chat.scopeRooms","Rooms")})]}),!y||m==="direct"?t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"chat-sidebar-search-container",children:t.jsxs("div",{className:"chat-sidebar-search-wrapper",children:[t.jsx($a,{size:14,className:"chat-sidebar-search-icon"}),t.jsx("input",{type:"text",className:"chat-sidebar-search",placeholder:i("chat.searchConversations","Search conversations..."),value:J,onChange:e=>te(e.target.value),"data-testid":"chat-search-input"})]})}),t.jsx("div",{className:"chat-session-list chat-sidebar-list",children:b?t.jsx("div",{className:"chat-empty-state chat-empty-state--padded",children:i("chat.loadingConversations","Loading...")}):P.length===0?t.jsx("div",{className:"chat-empty-state chat-empty-state--padded",children:i("chat.noConversationsYet","No conversations yet")}):P.map(e=>{const a=o?.id===e.id,c=!a&&fe("direct",e.id,e.lastMessageAt??e.updatedAt),h=En(e,ke.get(e.agentId)??null,ct),C=Nn(h?.provider,h?.modelId)??"Fusion";return t.jsxs("div",{className:`chat-session-item${a?" chat-session-item--active":""}`,onClick:()=>Js(e.id),onContextMenu:I=>{I.preventDefault(),q({sessionId:e.id,x:I.clientX,y:I.clientY})},"data-testid":`chat-session-${e.id}`,children:[t.jsx("button",{className:"chat-session-delete-btn",onClick:I=>{I.stopPropagation(),Se(e.id)},"data-testid":"chat-session-delete-btn","aria-label":i("chat.deleteConversation","Delete conversation"),children:t.jsx(Cs,{size:14})}),t.jsxs("div",{className:"chat-session-title",children:[e.title||i("chat.untitledSession","Untitled"),c?t.jsx("span",{className:"chat-unread-dot","data-testid":`chat-unread-dot-${e.id}`,"aria-label":i("chat.unreadMessages","Unread messages")}):null]}),t.jsx("div",{className:"chat-session-preview",children:e.lastMessagePreview||i("chat.noMessages","No messages")}),t.jsxs("div",{className:"chat-session-meta",children:[t.jsxs("span",{className:"chat-session-meta-model",children:[h?.provider?t.jsx(yt,{provider:h.provider,size:"sm"}):null,t.jsx("span",{children:ke.get(e.agentId)?.name||(e.agentId===it?C:e.agentId.slice(0,30))})]}),t.jsx("span",{children:e.updatedAt?_n(e.updatedAt,i):""})]})]},e.id)})})]}):t.jsxs("div",{className:"chat-sidebar-rooms","data-testid":"chat-sidebar-rooms",children:[!F&&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:()=>Me(!0),children:[t.jsx(xt,{size:14}),i("chat.createRoom","Create room")]})}),u.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:u.rooms.map(e=>{const a=u.activeRoom?.id===e.id,c=!a&&fe("room",e.id,e.updatedAt);return t.jsxs("div",{role:"button",tabIndex:0,className:`chat-room-item${a?" chat-room-item--active":""}`,"data-testid":`chat-room-item-${e.slug}`,onClick:()=>{Z("room",e.id,e.updatedAt),u.selectRoom(e.id),F&&xe(!1)},onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),Z("room",e.id,e.updatedAt),u.selectRoom(e.id),F&&xe(!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]}),c?t.jsx("span",{className:"chat-unread-dot","data-testid":`chat-unread-dot-${e.id}`,"aria-label":i("chat.unreadMessages","Unread messages")}):null]}),a?t.jsx("span",{className:"chat-room-item-meta",children:i("chat.roomMemberCount","{{count}} member",{count:u.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:h=>{h.stopPropagation(),Re(e.id)},children:t.jsx(Cs,{size:14})})]},e.id)})})]}),m==="rooms"?F?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:()=>Me(!0),children:[t.jsx(xt,{size:14}),i("chat.createRoom","Create room")]})}):null:t.jsx("div",{className:"chat-sidebar-footer",children:t.jsxs("button",{className:"btn btn-sm btn-primary chat-sidebar-footer-btn",onClick:()=>f(!0),"data-testid":"chat-new-btn",children:[t.jsx(xt,{size:14}),i("chat.newChat","New Chat")]})})]}),!F&&ae&&!ht&&t.jsx("div",{className:"chat-sidebar-resize-handle",role:"separator","aria-orientation":"vertical","aria-valuemin":Wt,"aria-valuemax":qt,"aria-valuenow":He,"aria-label":i("chat.resizeSidebar","Resize chat sidebar"),tabIndex:0,onPointerDown:Wn,onKeyDown:qn}),pe&&t.jsxs("div",{className:"chat-session-context-menu",style:{top:pe.y,left:pe.x},onClick:e=>e.stopPropagation(),children:[t.jsxs("button",{onClick:()=>Xs(pe.sessionId),"data-testid":"chat-context-rename",children:[t.jsx(hn,{size:14}),i("chat.rename","Rename")]}),t.jsxs("button",{onClick:()=>Gn(pe.sessionId),"data-testid":"chat-context-archive",children:[t.jsx(Fa,{size:14}),i("chat.archive","Archive")]}),t.jsxs("button",{onClick:()=>{q(null),Se(pe.sessionId)},"data-testid":"chat-context-delete",children:[t.jsx(Cs,{size:14}),i("chat.delete","Delete")]})]}),ze&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>je(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{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:Ke,placeholder:i("chat.renamePlaceholder","Untitled"),"data-testid":"chat-rename-input",onChange:e=>we(e.target.value),onKeyDown:e=>{e.key==="Enter"&&(e.preventDefault(),Ys())},autoFocus:!0}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>je(null),children:i("chat.cancel","Cancel")}),t.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>void Ys(),"data-testid":"chat-rename-save",children:i("chat.save","Save")})]})]})}),ot&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>Se(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:()=>Se(null),children:i("chat.cancel","Cancel")}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void Vn(ot),children:i("chat.delete","Delete")})]})]})}),y&&Ge&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>Re(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:()=>Re(null),children:i("chat.cancel","Cancel")}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>{(async()=>{try{await u.deleteRoom(Ge),Re(null)}catch{r(i("chat.failedToDeleteRoom","Failed to delete room"),"error")}})()},children:i("chat.delete","Delete")})]})]})}),y&&m==="rooms"?t.jsxs("div",{ref:es,className:"chat-thread",children:[u.activeRoom?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"chat-room-thread-header",children:[F&&t.jsx("button",{className:"btn-icon",onClick:ds,"data-testid":"chat-back-btn",children:t.jsx(fn,{size:16})}),t.jsxs("div",{className:"chat-room-switcher-menu",ref:Fs,children:[t.jsxs("button",{type:"button",className:"chat-room-switcher-trigger","data-testid":"chat-room-switcher-trigger","aria-haspopup":"menu","aria-expanded":Tt,onClick:()=>dt(e=>!e),children:[t.jsxs("span",{className:"chat-thread-header-title",children:["#",u.activeRoom.name]}),t.jsx(Vt,{size:16,"aria-hidden":"true"})]}),Tt&&t.jsx("div",{role:"menu",className:"chat-room-switcher-dropdown","data-testid":"chat-room-switcher-dropdown",children:u.rooms.map(e=>t.jsxs("button",{type:"button",role:"menuitem",className:`chat-room-switcher-option${e.id===u.activeRoom?.id?" chat-room-switcher-option--active":""}`,"data-testid":`chat-room-switcher-option-${e.id}`,onClick:()=>{Z("room",e.id,e.updatedAt),u.selectRoom(e.id),dt(!1)},children:["#",e.name]},e.id))})]}),t.jsx("div",{className:"chat-room-thread-members",children:u.activeRoomMembers.map(e=>t.jsx(Dn,{agent:ke.get(e.agentId)??{id:e.agentId,name:e.agentId.slice(0,30)}},e.agentId))})]}),t.jsxs("div",{className:"chat-messages",ref:be,onScroll:Us,children:[u.messagesLoading?t.jsx("div",{className:"chat-empty-state",children:i("chat.loadingMessages","Loading messages...")}):u.messages.filter(e=>e.content.trim()!==jn).length===0?t.jsx("div",{className:"chat-empty-state",children:i("chat.noMessagesYet","No messages yet. Start the conversation!")}):u.messages.filter(e=>e.content.trim()!==jn).map(e=>{const a=e.senderAgentId?ke.get(e.senderAgentId)?.name??e.senderAgentId.slice(0,30):i("chat.you","You"),c={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(Rs,{message:c,forcePlain:E,agentName:a,hideAssistantIdentity:!1,showAssistantModelTag:!1,activeModelTag:null,activeModelProvider:null,activeSessionId:u.activeRoom?.id??null,mentionAgentsByName:rs,roomContext:Fe,onScrollToTop:xs,isAwaitingQuestionAnswer:!1,onQuestionSubmit:Ht},e.id)}),t.jsx("div",{ref:Ds})]}),u.activeRoom&&Ts&&t.jsxs("button",{type:"button",className:"btn btn-sm chat-jump-to-latest","data-testid":"chat-jump-to-latest",onClick:()=>Ne("fab-click"),children:[t.jsx(Vt,{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")}),u.activeRoom&&t.jsxs("div",{className:"chat-input-area",children:[t.jsx("input",{ref:$t,type:"file",accept:"image/*,.txt,.json,.yaml,.yml,.log,.csv,.xml,.md",multiple:!0,style:{display:"none"},onChange:e=>{tt(e.target.files),e.target.value=""}}),z.length>0&&t.jsx("div",{className:"chat-attachment-previews","data-testid":"chat-attachment-previews",children:z.map((e,a)=>t.jsxs("div",{className:"chat-attachment-preview","data-testid":`chat-attachment-preview-${a}`,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:()=>Os(a),"data-testid":`chat-attachment-remove-${a}`,"aria-label":`Remove ${e.file.name}`,children:"×"})]},e.previewUrl||`${e.file.name}-${a}`))}),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:()=>$t.current?.click(),children:t.jsx(gn,{size:16})}),t.jsxs("div",{className:`chat-input-wrapper${Ee?" chat-input-wrapper--dragover":""}`,onDragOver:e=>{e.preventDefault(),Xe(!0)},onDragLeave:()=>Xe(!1),onDrop:e=>{e.preventDefault(),Xe(!1),tt(e.dataTransfer.files)},children:[t.jsx("textarea",{ref:Ks,className:"chat-input-textarea",placeholder:i("chat.typeMessage","Type a message..."),value:G,onChange:Vs,onKeyDown:Gs,onKeyUp:Ws,onClick:Bt,onBlur:qs,onFocus:Qs,onPaste:Bs,onTouchStart:e=>{typeof window>"u"||window.innerWidth>768||pn()&&(document.activeElement,e.currentTarget)},rows:1,"data-testid":"chat-input"}),t.jsx(bn,{agents:Ze,filter:w,highlightedIndex:B,visible:$,onSelect:Ut,position:"below",roomMemberIds:Fe?.memberIds,roomName:Fe?.roomName})]}),t.jsx("button",{type:"button",className:"chat-input-send",onPointerDown:e=>{if(e.pointerType&&e.pointerType!=="mouse"){if(e.preventDefault(),!at())return;nt(),pt()}},onTouchStart:e=>{e.preventDefault(),at()&&(nt(),pt())},onMouseDown:e=>{e.preventDefault()},onClick:()=>{os()||pt()},disabled:!G.trim()&&z.length===0,"data-testid":"chat-send-btn",style:{touchAction:"manipulation"},children:t.jsx(vn,{size:16})})]})]})]}):t.jsxs("div",{ref:es,className:"chat-thread",children:[(ms||!F)&&t.jsxs("div",{className:"chat-thread-header",children:[F&&ms&&t.jsx("button",{className:"btn-icon",onClick:ls,"data-testid":"chat-back-btn",children:t.jsx(fn,{size:16})}),t.jsx("div",{className:"chat-thread-header-identity","data-testid":"chat-thread-header-identity",children:Xn?t.jsxs("div",{className:"chat-mobile-session-menu",ref:$s,children:[t.jsxs("button",{type:"button",className:"btn chat-mobile-session-trigger","data-testid":"chat-mobile-session-trigger","aria-haspopup":"menu","aria-expanded":At,onClick:()=>Ve(e=>!e),children:[Be?t.jsx(yt,{provider:Be,size:"md"}):t.jsx(Ct,{size:16}),t.jsx("span",{className:"chat-thread-header-title",children:hs}),en&&t.jsx("span",{className:"chat-model-tag",children:Oe}),t.jsx(Vt,{size:16,"aria-hidden":"true"})]}),At&&t.jsx("div",{className:"chat-mobile-session-dropdown",role:"menu","data-testid":"chat-mobile-session-dropdown",children:P.map(e=>t.jsxs("div",{className:`chat-mobile-session-option-row${o?.id===e.id?" chat-mobile-session-option-row--active":""}`,role:"none",children:[t.jsx("button",{type:"button",role:"menuitem",className:`chat-mobile-session-option${o?.id===e.id?" chat-mobile-session-option--active":""}`,"data-testid":`chat-mobile-session-option-${e.id}`,onClick:()=>Js(e.id),children:t.jsx("span",{className:"chat-mobile-session-option-title",children:e.title||i("chat.untitledSession","Untitled")})}),t.jsx("button",{type:"button",className:"btn-icon chat-mobile-session-rename","data-testid":`chat-mobile-session-rename-${e.id}`,"aria-label":i("chat.renameConversationAria","Rename conversation {{title}}",{title:e.title||i("chat.untitledSession","Untitled")}),onClick:()=>Xs(e.id),children:t.jsx(hn,{size:14})})]},e.id))})]}):t.jsxs(t.Fragment,{children:[Be?t.jsx(yt,{provider:Be,size:"md"}):t.jsx(Ct,{size:16}),t.jsx("span",{className:"chat-thread-header-title",children:hs}),en&&t.jsx("span",{className:"chat-model-tag",children:Oe})]})}),ms&&t.jsx("button",{type:"button",className:`chat-thread-header-render-toggle${E?" chat-thread-header-render-toggle--plain":""}`,"data-testid":"chat-thread-render-toggle","aria-label":E?i("chat.showRenderedMarkdown","Show all messages as rendered Markdown"):i("chat.showPlainText","Show all messages as plain text"),onClick:Jn,children:E?t.jsx(La,{size:14}):t.jsx(_a,{size:14})}),!F&&t.jsxs("button",{className:"btn btn-sm btn-primary chat-thread-header-new-chat",onClick:()=>f(!0),"data-testid":"chat-thread-new-chat-btn",children:[t.jsx(xt,{size:14}),i("chat.newChat","New Chat")]})]}),ea?t.jsx(er,{cliSessionId:sa,tier:ta,projectId:n,renderTranscript:nn,renderComposer:()=>o?an():null}):t.jsxs(t.Fragment,{children:[nn(),Ts&&t.jsxs("button",{type:"button",className:"btn btn-sm chat-jump-to-latest","data-testid":"chat-jump-to-latest",onClick:()=>Ne("fab-click"),children:[t.jsx(Vt,{size:14}),i("chat.latest","Latest")]}),o&&an()]})]}),y&&t.jsx(Za,{isOpen:le,onClose:()=>Me(!1),projectId:n,existingRoomNames:u.rooms.map(e=>e.name),onCreate:async e=>{await u.createRoom({name:e.name,memberAgentIds:e.memberAgentIds}),m!=="rooms"&&L("rooms"),Me(!1),F&&xe(!1)}}),ce&&t.jsx(hr,{projectId:n,defaultModel:ct,onClose:()=>f(!1),onCreate:Kn})]})}export{Cr as ChatView,nr as clampChatInputHeight,sr as resolveChatInputOverflowY,En as resolveSessionProvider};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.cc-date-range{position:relative;display:inline-block}.cc-date-range-trigger{display:inline-flex;align-items:center;gap:var(--space-xs)}.cc-date-range-popover{position:absolute;top:calc(100% + var(--space-xs));right:0;z-index:20;min-width:16rem;padding:var(--space-md);background:var(--surface-1, #1c1c1c);border:1px solid var(--border-subtle, color-mix(in srgb, #7f7f7f 25%, transparent));border-radius:var(--radius-md, 8px);box-shadow:var(--shadow-md);display:flex;flex-direction:column;gap:var(--space-md)}.cc-date-range-presets{display:flex;flex-wrap:wrap;gap:var(--space-sm)}.cc-date-range-custom{display:flex;flex-direction:column;gap:var(--space-sm)}.cc-date-range-field{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);font-size:.8125rem;color:var(--text-muted)}.cc-date-range-field input{background:var(--surface-2, color-mix(in srgb, #7f7f7f 12%, transparent));border:1px solid var(--border-subtle, color-mix(in srgb, #7f7f7f 25%, transparent));border-radius:var(--radius-sm, 4px);color:var(--text);padding:var(--space-xs) var(--space-sm)}.cc-bar-chart,.cc-stacked-bar,.cc-sparkline,.cc-token-series,.cc-token-series-plot,.cc-token-series-axis,.cc-line-chart,.cc-radial-gauge,.cc-funnel,.cc-funnel-stage{min-inline-size:0;max-inline-size:100%}.cc-bar-chart{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-sm)}.cc-bar-row{display:grid;grid-template-columns:minmax(calc(var(--space-2xl) * 2 + var(--space-lg)),32%) minmax(0,1fr) auto;align-items:center;gap:var(--space-sm)}.cc-bar-label{min-inline-size:0;font-size:.8125rem;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cc-bar-track{min-inline-size:0;position:relative;block-size:var(--space-md);background:var(--surface-2);border-radius:var(--radius-sm);overflow:hidden}.cc-bar-fill{block-size:100%;background:var(--accent);border-radius:var(--radius-sm);transition:width var(--transition-normal)}.cc-bar-value{min-inline-size:0;font-size:.8125rem;font-variant-numeric:tabular-nums;color:var(--text);overflow-wrap:anywhere;text-align:end}.cc-stacked-bar{display:flex;flex-direction:column;gap:var(--space-sm)}.cc-stacked-track{display:flex;block-size:var(--space-md);background:var(--surface-2);border-radius:var(--radius-sm);overflow:hidden}.cc-stacked-segment{block-size:100%;background:var(--accent);transition:width var(--transition-normal)}.cc-stacked-legend{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:var(--space-md)}.cc-stacked-legend-item{min-inline-size:0;display:flex;align-items:center;gap:var(--space-xs);font-size:.8125rem;color:var(--text-muted);overflow-wrap:anywhere}.cc-stacked-swatch{inline-size:var(--space-sm);block-size:var(--space-sm);border-radius:var(--radius-sm);background:var(--accent);display:inline-block}.cc-sparkline{display:flex;align-items:flex-end;gap:1px;block-size:var(--space-2xl)}.cc-sparkline-bar{flex:1 1 0;min-inline-size:1px;background:var(--accent);border-radius:1px;transition:height var(--transition-normal)}.cc-token-series{display:flex;flex-direction:column;gap:var(--space-sm);min-inline-size:0}.cc-token-series-plot{display:flex;align-items:flex-end;gap:var(--space-xs);block-size:clamp(calc(var(--space-2xl) * 2),24vw,calc(var(--space-2xl) * 5));padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 10%,transparent),transparent),var(--surface-1);overflow:hidden}.cc-token-series-bar{flex:1 1 0;min-inline-size:var(--space-xs);border-radius:var(--radius-sm) var(--radius-sm) 0 0;background:linear-gradient(180deg,var(--accent),color-mix(in srgb,var(--accent) 45%,var(--surface-2)));box-shadow:0 0 var(--space-sm) color-mix(in srgb,var(--accent) 24%,transparent);transition:height var(--transition-normal);animation:cc-token-series-rise var(--duration-normal) ease-out both}.cc-token-series-empty{inline-size:100%;block-size:2px;align-self:flex-end;border-radius:var(--radius-pill);background:var(--border-subtle)}.cc-token-series-axis{display:flex;justify-content:space-between;gap:var(--space-sm);color:var(--text-muted);font-size:.75rem;font-variant-numeric:tabular-nums}.cc-token-series-axis span{min-inline-size:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cc-token-series-axis span:last-child{text-align:end}@keyframes cc-token-series-rise{0%{transform:scaleY(.82);opacity:.72}to{transform:scaleY(1);opacity:1}}@media(prefers-reduced-motion:reduce){.cc-token-series-bar{transition:none;animation:none}}@media(max-width:768px){.cc-token-series-plot{block-size:clamp(calc(var(--space-2xl) + var(--space-xl)),38vw,calc(var(--space-2xl) * 4));padding:var(--space-sm)}}.cc-line-chart{display:block;inline-size:100%;block-size:clamp(calc(var(--space-2xl) * 2),22vw,calc(var(--space-2xl) * 5));aspect-ratio:5 / 2;color:var(--accent);overflow:hidden}.cc-line-chart-series{color:var(--accent)}.cc-line-chart-series:nth-child(2n){color:var(--color-success)}.cc-line-chart-series:nth-child(3n){color:var(--color-warning)}.cc-line-chart-path{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:100;stroke-dashoffset:100;animation:cc-line-chart-draw calc(var(--duration-slow) * 4) ease-out forwards}.cc-line-chart-point{fill:var(--surface-1);stroke:currentColor;stroke-width:2px}@keyframes cc-line-chart-draw{to{stroke-dashoffset:0}}@media(prefers-reduced-motion:reduce){.cc-line-chart-path{animation:none;stroke-dashoffset:0}}@media(max-width:768px){.cc-line-chart{block-size:clamp(calc(var(--space-2xl) * 2),44vw,calc(var(--space-2xl) * 4));aspect-ratio:auto}}.cc-recharts-chart,.cc-recharts-empty{inline-size:100%;block-size:calc(var(--space-2xl) * 7 + var(--space-lg));min-inline-size:0}.cc-radial-gauge{min-inline-size:0;display:grid;place-items:center;gap:var(--space-sm);color:var(--text)}.cc-radial-gauge-ring{position:relative;display:grid;place-items:center;inline-size:clamp(calc(var(--space-2xl) * 3),32vw,calc(var(--space-2xl) * 4 + var(--space-lg)));aspect-ratio:1;border-radius:50%;background:radial-gradient(circle at center,var(--surface-1) 0 54%,transparent 55%),conic-gradient(var(--accent) var(--cc-radial-value),var(--surface-2) 0);box-shadow:0 0 var(--space-lg) color-mix(in srgb,var(--accent) 35%,transparent);isolation:isolate;animation:cc-radial-gauge-pulse calc(var(--duration-slow) * 6) ease-in-out infinite}.cc-radial-gauge-ring:before{content:"";position:absolute;inset:var(--space-sm);border-radius:inherit;border:1px solid color-mix(in srgb,var(--accent) 45%,transparent);box-shadow:inset 0 0 var(--space-md) color-mix(in srgb,var(--accent) 22%,transparent);animation:cc-radial-gauge-sweep calc(var(--duration-slow) * 8) linear infinite}.cc-radial-gauge-core{position:relative;z-index:1;display:grid;place-items:center;inline-size:58%;aspect-ratio:1;background:var(--surface-1);border-radius:50%;box-shadow:inset 0 0 var(--space-md) var(--surface-2)}.cc-radial-gauge-value{font-size:1.5rem;font-weight:700;font-variant-numeric:tabular-nums}.cc-radial-gauge-label{max-inline-size:100%;color:var(--text-muted);font-size:.8125rem;overflow-wrap:anywhere;text-align:center}@keyframes cc-radial-gauge-pulse{0%,to{filter:saturate(1)}50%{filter:saturate(1.35)}}@keyframes cc-radial-gauge-sweep{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@media(prefers-reduced-motion:reduce){.cc-radial-gauge-ring,.cc-radial-gauge-ring:before{animation:none}}.cc-funnel{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-sm)}.cc-funnel-stage{display:flex;flex-direction:column;gap:var(--space-xs)}.cc-funnel-header{min-inline-size:0;display:flex;justify-content:space-between;gap:var(--space-sm);font-size:.8125rem;color:var(--text-muted)}.cc-funnel-label,.cc-funnel-conversion,.cc-funnel-value{min-inline-size:0;overflow-wrap:anywhere}.cc-funnel-conversion{flex:0 1 auto;text-align:end}.cc-funnel-conversion{font-variant-numeric:tabular-nums}.cc-funnel-track{block-size:var(--space-lg);background:var(--surface-2);border-radius:var(--radius-sm);overflow:hidden}.cc-funnel-fill{block-size:100%;background:var(--accent);border-radius:var(--radius-sm);transition:width var(--transition-normal)}.cc-funnel-value{font-size:.8125rem;font-variant-numeric:tabular-nums;color:var(--text)}.cc-chart-skeleton{block-size:var(--space-md);border-radius:var(--radius-sm);background:var(--surface-2);animation:cc-chart-pulse var(--duration-slow) ease-in-out infinite}@keyframes cc-chart-pulse{0%,to{opacity:.4}50%{opacity:.9}}@media(max-width:768px){.cc-bar-row{grid-template-columns:minmax(0,1fr) minmax(calc(var(--space-2xl) + var(--space-lg)),2fr);align-items:start}.cc-bar-value{grid-column:1 / -1;justify-self:end;max-inline-size:100%}.cc-radial-gauge-ring{inline-size:clamp(calc(var(--space-2xl) * 2 + var(--space-lg)),44vw,calc(var(--space-2xl) * 4))}.cc-sparkline{block-size:clamp(var(--space-2xl),18vw,calc(var(--space-2xl) + var(--space-xl)))}}.cc-area{display:flex;flex-direction:column;gap:var(--space-lg);min-inline-size:0}.cc-area-section{display:flex;flex-direction:column;gap:var(--space-md);min-inline-size:0}.cc-area-section-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.cc-area-section-title{margin:0;font-size:.8125rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.cc-area .cc-recharts-chart,.cc-area .cc-recharts-empty{inline-size:100%;block-size:calc(var(--space-2xl) * 7 + var(--space-lg));min-inline-size:0}.cc-area .cc-stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,calc(var(--space-2xl) * 5)),1fr));gap:var(--space-md)}.cc-stat-sub{font-size:.75rem;color:var(--text-muted)}.cc-token-granularity{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--space-xs)}.cc-token-granularity .btn.active{border-color:var(--accent);color:var(--text);background:color-mix(in srgb,var(--accent) 14%,var(--surface-1))}@media(prefers-reduced-motion:reduce){.cc-token-count-live{animation:none}}@media(max-width:768px){.cc-area-section-header{align-items:flex-start;flex-direction:column}.cc-token-granularity{justify-content:flex-start;inline-size:100%}}.cc-table-wrap{max-inline-size:100%;border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1);overflow-x:auto;overflow-y:hidden}.cc-table{inline-size:100%;border-collapse:collapse;font-size:.8125rem;font-variant-numeric:tabular-nums}.cc-table th,.cc-table td{padding:var(--space-sm) var(--space-md);text-align:right;border-bottom:1px solid var(--border-subtle);white-space:nowrap}.cc-table th:first-child,.cc-table td:first-child{text-align:left}.cc-table thead th{color:var(--text-muted);font-weight:600}.cc-table th.cc-sortable{cursor:pointer;user-select:none}.cc-table th.cc-sortable:hover{color:var(--text)}.cc-table tbody tr{cursor:pointer}.cc-table tbody tr.cc-row-selected{background:var(--surface-2)}.cc-table tbody tr.cc-row-selected td{color:var(--text)}.cc-sort-caret{margin-inline-start:var(--space-xs);font-size:.7em;color:var(--accent)}.cc-unavailable{color:var(--text-muted);cursor:help;border-bottom:1px dotted var(--border-subtle)}.cc-loading-inline{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-lg);color:var(--text-muted)}.cc-area-empty,.cc-area-error{display:flex;flex-direction:column;align-items:center;gap:var(--space-sm);padding:var(--space-xl);color:var(--text-muted);text-align:center}.cc-area-error{color:var(--color-error)}.cc-pricing-note{font-size:.75rem;color:var(--text-muted)}.cc-team-chart-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-md)}.cc-team-chart-panel{display:flex;flex-direction:column;gap:var(--space-md);min-inline-size:0;padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1);animation:cc-team-panel-reveal var(--duration-fast) ease-out both}.cc-team-spark-panel{grid-column:1 / -1}.cc-muted-hint,.cc-team-agent-role{color:var(--text-muted)}.cc-muted-hint{margin:0;font-size:.8125rem}.cc-team-agent-cell{display:inline-flex;align-items:center;gap:var(--space-sm);min-inline-size:0}.cc-team-agent-name,.cc-team-agent-role{display:block}.cc-team-agent-name{color:var(--text);font-weight:600}.cc-team-agent-role{font-size:.75rem;text-transform:capitalize}@keyframes cc-team-panel-reveal{0%{opacity:0;transform:translateY(var(--space-xs))}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.cc-team-chart-panel{animation:none}}@media(min-width:769px)and (max-width:1024px){.cc-area .cc-stat-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,calc(var(--space-2xl) * 5)),1fr))}.cc-team-chart-grid{min-inline-size:0;grid-template-columns:minmax(0,1fr)}.cc-team-spark-panel{grid-column:auto}}@media(max-width:768px){.cc-team-chart-grid{min-inline-size:0;grid-template-columns:minmax(0,1fr)}.cc-team-spark-panel{grid-column:auto}.cc-team-chart-panel{padding:var(--space-sm)}}.cc-system-refresh{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-sm);color:var(--text-muted);font-size:.8125rem}.cc-system-refresh .btn-icon{flex:0 0 auto}.cc-system-gauges .cc-stat-card{min-block-size:100%}.cc-system-chart-grid{min-inline-size:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-md)}.cc-system-chart-grid .cc-stat-card{gap:var(--space-md)}.cc-system-section-title-with-icon{display:inline-flex;align-items:center;gap:var(--space-sm)}.cc-system-section-title-with-icon svg{color:var(--text-muted)}.cc-system-vitest-card{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-md);padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1)}.cc-system-vitest-card .btn,.cc-system-toggle-row,.cc-system-threshold-row,.cc-system-threshold-controls{display:inline-flex;align-items:center;gap:var(--space-sm)}.cc-system-toggle-row,.cc-system-threshold-row{color:var(--text);font-size:.8125rem}.cc-system-threshold-controls input[type=range]{accent-color:var(--accent)}.cc-system-threshold-controls .input{inline-size:5rem}.cc-system-note{margin:0;color:var(--text-muted);font-size:.8125rem}.cc-system-note--error,.cc-system-value--critical{color:var(--color-error)}.cc-system-value--warning{color:var(--color-warning)}.cc-system-note--success{color:var(--color-success)}@media(max-width:768px){.cc-system-refresh{align-items:flex-start;justify-content:flex-start;flex-direction:column}.cc-system-chart-grid{grid-template-columns:minmax(0,1fr)}.cc-system-vitest-card,.cc-system-toggle-row,.cc-system-threshold-row,.cc-system-threshold-controls{align-items:stretch;flex-direction:column;inline-size:100%}.cc-system-vitest-card .btn,.cc-system-threshold-controls .input{inline-size:100%}}.cc-mission-control{display:flex;flex-direction:column;gap:var(--space-lg)}.cc-mc-columns{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-lg)}.cc-mc-section{display:flex;flex-direction:column;gap:var(--space-sm);min-width:0}.cc-mc-muted{color:var(--text-muted);font-size:.85rem;margin:0}.cc-mc-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-xs)}.cc-mc-session,.cc-mc-node{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm);border:1px solid var(--border-subtle, color-mix(in srgb, #ffffff 8%, transparent));border-radius:var(--radius-sm, 6px);background:var(--surface-1, color-mix(in srgb, #ffffff 2%, transparent));min-width:0}.cc-mc-node.inactive{opacity:.55}.cc-mc-session-purpose,.cc-mc-node-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.cc-mc-session-meta,.cc-mc-node-meta{display:flex;align-items:center;gap:var(--space-sm);flex-shrink:0}.cc-mc-badge{font-size:.7rem;text-transform:uppercase;letter-spacing:.03em;padding:2px 6px;border-radius:var(--radius-sm, 6px);background:var(--surface-2, color-mix(in srgb, #3b82f6 15%, transparent));color:var(--text)}.cc-mc-badge.inactive{background:var(--surface-2, color-mix(in srgb, #ffffff 6%, transparent));color:var(--text-muted)}.cc-mc-task,.cc-mc-node-count{font-size:.75rem;color:var(--text-muted)}@media(max-width:768px),(max-height:480px){.cc-mc-columns{grid-template-columns:1fr}}.reliability-view{display:flex;flex:1 1 auto;flex-direction:column;gap:var(--space-lg);height:100%;min-height:0;min-width:0;overflow-y:auto;-webkit-overflow-scrolling:touch}.reliability-card{padding:var(--space-lg);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card)}.reliability-loading{display:flex;flex:1 1 auto;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);height:100%;min-width:0;padding:var(--space-2xl);color:var(--text-muted)}.reliability-error{display:flex;flex:1 1 auto;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-md);height:100%;min-width:0;padding:var(--space-2xl);text-align:center}.reliability-error p{color:var(--text-muted);margin:0}.reliability-headline-card{display:flex;flex-direction:column;gap:var(--space-sm)}.reliability-headline{font-size:1.75rem;font-weight:700}.reliability-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-lg)}.reliability-section-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.reliability-table{width:100%;border-collapse:collapse;margin-top:var(--space-sm)}.reliability-table th,.reliability-table td{text-align:left;padding:var(--space-xs) var(--space-sm);border-bottom:1px solid var(--border)}.reliability-stat-row{display:flex;justify-content:space-between;align-items:center;padding:var(--space-xs) 0}.reliability-muted{color:var(--text-muted)}.reliability-details{margin-top:var(--space-sm)}.reliability-details summary{color:var(--text-muted);cursor:pointer}.reliability-details-content{margin-top:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-xs);color:var(--text-muted)}.reliability-histogram{list-style:none;margin:var(--space-sm) 0 0;padding:0;display:flex;flex-direction:column;gap:var(--space-sm)}.reliability-histogram li{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,6fr) minmax(0,1fr);align-items:center;gap:var(--space-sm)}.reliability-histogram-bar-wrap{width:100%;border-radius:var(--radius-pill);background:color-mix(in srgb,var(--color-info) 15%,transparent);overflow:hidden}.reliability-histogram-bar{height:var(--space-md);background:var(--color-info)}@media(max-width:768px){.reliability-view,.reliability-loading,.reliability-error{padding-bottom:calc(var(--space-lg) + var(--mobile-nav-height) + env(safe-area-inset-bottom,0px) + var(--standalone-bottom-gap))}.reliability-grid{grid-template-columns:minmax(0,1fr)}.reliability-section-header{flex-direction:column;align-items:flex-start}}.cc-area[data-testid=cc-area-funnel] .cc-area-section+.cc-area-section{margin-top:var(--space-lg)}.command-center{display:flex;flex:1;flex-direction:column;gap:var(--space-lg);min-height:0;inline-size:100%;padding:var(--space-lg)}.cc-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;gap:var(--space-md)}.cc-title{display:flex;align-items:center;gap:var(--space-sm);margin:0;font-size:1.125rem}.cc-tablist{display:flex;flex-shrink:0;flex-wrap:wrap;gap:var(--space-xs);border-bottom:1px solid var(--border-subtle)}.cc-tab{appearance:none;background:none;border:none;border-bottom:2px solid transparent;color:var(--text-muted);padding:var(--space-sm) var(--space-md);cursor:pointer;font-size:.8125rem;transition:color var(--transition-fast),border-color var(--transition-fast)}.cc-tab:hover{color:var(--text)}.cc-tab.active{color:var(--text);border-bottom-color:var(--accent)}.cc-tabpanel{flex:1;min-height:0;min-inline-size:0;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;outline:none;-webkit-overflow-scrolling:touch}@media(max-width:768px){.cc-tabpanel{padding-bottom:calc(var(--space-lg) + env(safe-area-inset-bottom,0) + var(--standalone-bottom-gap))}}.cc-overview{min-inline-size:0;display:flex;flex-direction:column;gap:var(--space-lg)}.cc-stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,calc(var(--space-2xl) * 5)),1fr));gap:var(--space-md)}.cc-stat-card{display:flex;flex-direction:column;gap:var(--space-sm);min-inline-size:0;padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-1)}.cc-stat-label{font-size:.8125rem;color:var(--text-muted)}.cc-stat-value{font-size:1.5rem;font-variant-numeric:tabular-nums;color:var(--text)}.cc-stat-card--gauge{align-items:center;text-align:center}.cc-github-backfill-actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-sm)}.cc-github-backfill-status{display:flex;flex-direction:column;gap:var(--space-xs);color:var(--text-muted);font-size:.75rem}.cc-github-backfill-status--error{color:var(--color-error)}.cc-github-backfill-status--warning{color:var(--color-warning)}@media(max-width:768px){.cc-github-backfill-actions{align-items:stretch;flex-direction:column}.cc-github-backfill-actions .btn{justify-content:center;inline-size:100%}}.cc-live-strip{position:relative;display:grid;grid-template-columns:minmax(calc(var(--space-2xl) * 5),1fr) minmax(calc(var(--space-2xl) * 8),2fr) minmax(calc(var(--space-2xl) * 5),1fr);align-items:center;gap:var(--space-md);padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 7%,transparent),transparent),var(--surface-1);box-shadow:0 0 var(--space-lg) color-mix(in srgb,var(--accent) 9%,transparent);overflow:hidden;font-size:.8125rem}.cc-live-strip:before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--accent) 10%,transparent),transparent);opacity:.25;transform:translate(-100%);animation:cc-live-signal-sweep calc(var(--duration-slow) * 8) linear infinite;pointer-events:none}.cc-live-strip-heading,.cc-live-strip-metrics,.cc-live-trend{min-inline-size:0;position:relative;z-index:1}.cc-live-strip-heading{display:flex;align-items:center;gap:var(--space-sm)}.cc-live-strip-label{color:var(--text);font-weight:600}.cc-live-strip-metrics{min-inline-size:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-sm)}.cc-live-metric{min-inline-size:0;display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-sm);border-radius:var(--radius-sm);background:color-mix(in srgb,var(--surface-2) 70%,transparent);animation:cc-live-signal-pulse calc(var(--duration-slow) * 6) ease-in-out infinite}.cc-live-metric-value{color:var(--text);font-size:1.125rem;font-weight:700;font-variant-numeric:tabular-nums}.cc-token-count-live{animation:cc-token-count-pop var(--duration-normal) ease-out both}@keyframes cc-token-count-pop{0%{transform:translateY(var(--space-xs));opacity:.7}to{transform:translateY(0);opacity:1}}.cc-live-metric-label,.cc-live-trend-label{color:var(--text-muted);font-size:.75rem;text-transform:uppercase;letter-spacing:.04em}.cc-live-trend{min-inline-size:0;display:flex;flex-direction:column;gap:var(--space-sm)}.cc-live-trend .cc-sparkline{block-size:calc(var(--space-2xl) + var(--space-sm))}.cc-live-trend .cc-sparkline-bar{box-shadow:0 0 var(--space-sm) color-mix(in srgb,var(--accent) 28%,transparent);animation:cc-live-signal-pulse calc(var(--duration-slow) * 5) ease-in-out infinite}@keyframes cc-live-signal-sweep{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes cc-live-signal-pulse{0%,to{opacity:.78}50%{opacity:1}}@media(prefers-reduced-motion:reduce){.cc-live-strip:before,.cc-live-metric,.cc-live-trend .cc-sparkline-bar,.cc-token-count-live{animation:none}}.cc-overview-charts{min-inline-size:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-md);align-items:stretch}.cc-overview-chart-card{min-inline-size:0;position:relative;display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-md);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:linear-gradient(145deg,color-mix(in srgb,var(--accent) 6%,transparent),transparent),var(--surface-1);box-shadow:0 0 var(--space-lg) color-mix(in srgb,var(--accent) 7%,transparent);overflow:hidden;animation:cc-overview-chart-rise var(--duration-normal) ease-out both}.cc-overview-chart-card--trend{grid-column:1 / -1}.cc-overview-chart-card:before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--accent) 8%,transparent),transparent);opacity:0;pointer-events:none;animation:cc-overview-chart-sheen calc(var(--duration-slow) * 7) ease-in-out infinite}.cc-overview-chart-header{position:relative;z-index:1;display:flex;flex-direction:column;gap:var(--space-xs)}.cc-overview-chart-header p{margin:0;color:var(--text-muted);font-size:.8125rem}.cc-overview-chart-card .cc-bar-chart,.cc-overview-chart-card .cc-sparkline,.cc-overview-chart-card .cc-recharts-chart,.cc-overview-chart-card .cc-recharts-empty{position:relative;z-index:1}.cc-overview-chart-card .cc-recharts-chart,.cc-overview-chart-card .cc-recharts-empty{inline-size:100%;block-size:calc(var(--space-2xl) * 7 + var(--space-lg));min-inline-size:0}.cc-overview-chart-card .cc-sparkline{block-size:calc(var(--space-2xl) * 2)}.cc-overview-chart-card .cc-bar-fill,.cc-overview-chart-card .cc-sparkline-bar{box-shadow:0 0 var(--space-sm) color-mix(in srgb,var(--accent) 30%,transparent)}@keyframes cc-overview-chart-rise{0%{opacity:0;transform:translateY(var(--space-sm))}to{opacity:1;transform:translateY(0)}}@keyframes cc-overview-chart-sheen{0%{opacity:0;transform:translate(-100%)}45%,55%{opacity:.35}to{opacity:0;transform:translate(100%)}}@media(prefers-reduced-motion:reduce){.cc-overview-chart-card,.cc-overview-chart-card:before{animation:none}}@media(min-width:769px)and (max-width:1024px){.command-center{flex:1;min-block-size:0;overflow:hidden}.cc-tabpanel{flex:1;min-block-size:0;overflow-x:hidden;overflow-y:auto}.cc-live-strip,.cc-overview-charts,.cc-team-chart-grid{min-inline-size:0;grid-template-columns:minmax(0,1fr)}.cc-live-strip-metrics{min-inline-size:0;grid-template-columns:repeat(2,minmax(0,1fr))}.cc-overview-chart-card--trend,.cc-team-spark-panel{grid-column:auto}.cc-stat-grid,.cc-area .cc-stat-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,calc(var(--space-2xl) * 5)),1fr))}}@media(max-width:768px){.cc-live-strip{grid-template-columns:1fr}.cc-live-strip-metrics,.cc-overview-charts{min-inline-size:0;grid-template-columns:1fr}.cc-overview-chart-card--trend{grid-column:auto}}.cc-loading,.cc-error,.cc-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-xl);color:var(--text-muted);text-align:center}.cc-error{color:var(--color-error)}.cc-loading .cc-chart-skeleton{block-size:var(--space-lg);border-radius:var(--radius-sm);background:var(--surface-2);animation:cc-shell-pulse var(--duration-slow) ease-in-out infinite}@keyframes cc-shell-pulse{0%,to{opacity:.4}50%{opacity:.9}}
|