@runfusion/fusion 0.42.0 → 0.43.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.
Files changed (63) hide show
  1. package/dist/bin.js +2287 -1591
  2. package/dist/client/.vite/manifest.json +71 -71
  3. package/dist/client/assets/{AgentDetailView-C5Lb3fd3.js → AgentDetailView-FUKwQxBP.js} +1 -1
  4. package/dist/client/assets/{AgentPermissionPolicyEditor-DtRcvE6M.js → AgentPermissionPolicyEditor-DMDUhF1n.js} +2 -2
  5. package/dist/client/assets/{AgentsView-BVW-NOYD.js → AgentsView-BrQLd-yI.js} +3 -3
  6. package/dist/client/assets/ChatView-Wz_0goif.js +6 -0
  7. package/dist/client/assets/{DevServerView-DLsFSP4s.js → DevServerView-DRqQpHsc.js} +1 -1
  8. package/dist/client/assets/{DirectoryPicker-_QawX-uL.js → DirectoryPicker-BFot4CVM.js} +1 -1
  9. package/dist/client/assets/{DocumentsView-DierUJsj.js → DocumentsView-hamhUcvL.js} +1 -1
  10. package/dist/client/assets/{EvalsView-B83lYKQl.js → EvalsView-DAXqDqn2.js} +1 -1
  11. package/dist/client/assets/{ExperimentalAgentOnboardingModal-CTctYTPU.js → ExperimentalAgentOnboardingModal-B4aZ1y0n.js} +1 -1
  12. package/dist/client/assets/{GoalsView-CKn8i0i0.js → GoalsView-2QOp9DA0.js} +1 -1
  13. package/dist/client/assets/{InsightsView-EpRHCD8G.js → InsightsView-D5fzFy-F.js} +1 -1
  14. package/dist/client/assets/{MemoryView-Df_ocTc5.js → MemoryView-B082KoR-.js} +1 -1
  15. package/dist/client/assets/{NodesView-DF7xJ_3z.js → NodesView-BA3pKMZu.js} +1 -1
  16. package/dist/client/assets/{PiExtensionsManager-BOooOEDx.js → PiExtensionsManager-C4I11iKm.js} +1 -1
  17. package/dist/client/assets/{PluginManager-CHrDAzK6.js → PluginManager-BzTzTMXZ.js} +1 -1
  18. package/dist/client/assets/{PullRequestView-CJU21OZ6.js → PullRequestView-11xJ565q.js} +1 -1
  19. package/dist/client/assets/{ReliabilityView-uHkW1Qeu.js → ReliabilityView-CpELpGqw.js} +1 -1
  20. package/dist/client/assets/{ResearchView-oZ2-vbjL.js → ResearchView-BHiXfjzE.js} +1 -1
  21. package/dist/client/assets/{SecretsView-BpkqSV_E.js → SecretsView-CC5OYoCn.js} +1 -1
  22. package/dist/client/assets/{SessionTerminal-D9IW4cDj.js → SessionTerminal-G70Jwkzs.js} +1 -1
  23. package/dist/client/assets/{SettingsModal-BmB5l2bA.js → SettingsModal-BKEbtdqR.js} +1 -1
  24. package/dist/client/assets/{SettingsModal-C8gsAazm.js → SettingsModal-C0M1CqOu.js} +6 -6
  25. package/dist/client/assets/SettingsModal-DpAxDq6M.css +1 -0
  26. package/dist/client/assets/{SetupWizardModal-BYLEU_7o.js → SetupWizardModal-CBfItlP6.js} +1 -1
  27. package/dist/client/assets/{SkillsView-8GgQ8Z_Z.js → SkillsView-DbcW87-E.js} +1 -1
  28. package/dist/client/assets/{StashRecoveryView-CT1t1Uf2.js → StashRecoveryView-CH9RPtzX.js} +1 -1
  29. package/dist/client/assets/{TodoView-BUj6ITAb.js → TodoView-ToviJ0SV.js} +1 -1
  30. package/dist/client/assets/{WorkflowNodeEditor-CN7GPmvV.js → WorkflowNodeEditor-BTu0D9c5.js} +1 -1
  31. package/dist/client/assets/WorkflowNodeEditor-BokhW3de.css +1 -0
  32. package/dist/client/assets/{app-DCot4oXA.js → app-CUu1sm3x.js} +2 -2
  33. package/dist/client/assets/{dashboard-view-CrYwb0oQ.js → dashboard-view-DtgLZ_LM.js} +1 -1
  34. package/dist/client/assets/{folder-open-CREXTATY.js → folder-open-BlPyIWyf.js} +1 -1
  35. package/dist/client/assets/index-DqhCiU35.css +1 -0
  36. package/dist/client/assets/index-bZCpHtGq.js +793 -0
  37. package/dist/client/assets/{upload-BvLUlwaH.js → upload-B-qmm1NH.js} +1 -1
  38. package/dist/client/assets/{users-CjhbU-sF.js → users-D6C5TXf2.js} +1 -1
  39. package/dist/client/index.html +2 -2
  40. package/dist/client/version.json +1 -1
  41. package/dist/droid-cli/package.json +1 -1
  42. package/dist/extension.js +1726 -1080
  43. package/dist/pi-claude-cli/package.json +1 -1
  44. package/dist/plugin-sdk/index.d.ts +6258 -86
  45. package/dist/plugins/fusion-plugin-acp-runtime/package.json +1 -1
  46. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  47. package/dist/plugins/fusion-plugin-compound-engineering/bundled.js +177 -18
  48. package/dist/plugins/fusion-plugin-compound-engineering/package.json +1 -1
  49. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  50. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  51. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  52. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  53. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  54. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  55. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  56. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  57. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  58. package/package.json +1 -9
  59. package/dist/client/assets/ChatView-Dy-oIkrK.js +0 -6
  60. package/dist/client/assets/SettingsModal-bJvc9aHl.css +0 -1
  61. package/dist/client/assets/WorkflowNodeEditor-aPj8cv81.css +0 -1
  62. package/dist/client/assets/index-2kYpdJrx.js +0 -793
  63. package/dist/client/assets/index-CJUfvGdC.css +0 -1
@@ -1,6 +0,0 @@
1
- import{r as s,b as Hn,j as t,R as Un}from"./vendor-react-D37HfzIf.js";import{c as On,a9 as Ks,a7 as Gs,bf as Vs,bg as bs,aG as zt,bh as Ws,ac as qs,bi as ds,t as Bn,bj as Kn,bk as gt,bl as Xs,bm as Gn,bn as Dt,w as Vn,bo as Wn,bp as qn,bq as Xn,br as Yn,bs as Jn,bt as Qn,aW as Zn,bu as ea,bv as ta,s as sa,bw as na,j as aa,k as fn,bx as gn,by as ra,bz as oa,bA as ia,bB as pn,bC as ca,bD as la,bE as da,p as ua,bF as ma,bG as ha,bH as fa,bI as ga,ah as bn,ai as vn,bJ as pa,bK as ba,S as va,U as us,P as bt,J as pt,aw as xa,bL as Ys,a as $t,bM as Js,bN as Qs,bO as Zs,B as vt,ae as wa,af as ya,b4 as Ht,bP as en,bQ as Ca,T as Sa,bR as ka,bS as Na,b1 as ja,au as tn,m as Ma,bT as sn}from"./index-2kYpdJrx.js";import{u as xt}from"./vendor-i18n-CV0mwX_-.js";import{SessionTerminal as nn}from"./SessionTerminal-D9IW4cDj.js";import"./vendor-reactflow-CRZcPCXF.js";import"./vendor-xterm-tcedd2Jt.js";import"./vendor-codemirror-jBKmHyH0.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 Ra=[["path",{d:"M5 3h14",key:"7usisc"}],["path",{d:"m18 13-6-6-6 6",key:"1kf1n9"}],["path",{d:"M12 7v14",key:"1akyts"}]],Aa=On("arrow-up-to-line",Ra),ms="kb-chat-active-session";function an(n){const r=typeof n=="string"?n.trim():"",u=r.indexOf("/");return!r||u<=0||u>=r.length-1?{}:{modelProvider:r.slice(0,u),modelId:r.slice(u+1)}}function Ta(n){const r=n?.toolCalls;if(!Array.isArray(r))return;const u=r.map(o=>{if(!o||typeof o!="object")return null;const i=o,p=typeof i.toolName=="string"?i.toolName:"";if(!p)return null;const v=i.args;return{toolName:p,...v&&typeof v=="object"?{args:v}:{},isError:!!i.isError,result:i.result,status:"completed"}}).filter(o=>o!==null);return u.length>0?u:void 0}function Ea(n){const r=n?.fallback;if(!r||typeof r!="object")return;const u=r,o=typeof u.primaryModel=="string"?u.primaryModel:"",i=typeof u.fallbackModel=="string"?u.fallbackModel:"",p=u.triggerPoint;if(!(!o||!i||p!=="session-creation"&&p!=="prompt-time"))return{primaryModel:o,fallbackModel:i,triggerPoint:p}}function Ia(n){const r=n?.failureInfo;if(!r||typeof r!="object")return;const u=r,o=typeof u.summary=="string"?u.summary.trim():"";if(!o)return;const i=(()=>{const p=u.reference;if(!p||typeof p!="object")return;const v=p,g=typeof v.kind=="string"?v.kind.trim():"",k=typeof v.id=="string"?v.id.trim():"";if(!(!g||!k))return{kind:g,id:k,...typeof v.label=="string"&&v.label.trim()?{label:v.label.trim()}:{}}})();return{summary:o,...typeof u.errorClass=="string"&&u.errorClass.trim()?{errorClass:u.errorClass.trim()}:{},...typeof u.code=="string"&&u.code.trim()?{code:u.code.trim()}:{},...typeof u.detail=="string"&&u.detail.trim()?{detail:u.detail.trim()}:{},...i?{reference:i}:{}}}function rn(n,r){const u="Failed to get response";return typeof n=="string"?{summary:n.trim()||u}:{summary:typeof n.summary=="string"&&n.summary.trim()?n.summary.trim():u,...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 hs(n){return{id:n.id,sessionId:n.sessionId,role:n.role,content:n.content,thinkingOutput:n.thinkingOutput,toolCalls:Ta(n.metadata),fallbackInfo:Ea(n.metadata),failureInfo:Ia(n.metadata),attachments:n.attachments,createdAt:n.createdAt}}function Pa(n,r){const u=s.useCallback(l=>l?`${Ks.CHAT_SESSIONS_PREFIX}${l}`:null,[]),o=s.useCallback((l,f)=>l&&f?`${Ks.CHAT_MESSAGES_PREFIX}${l}:${f}`:null,[]),i=s.useCallback(l=>{const f=u(l);return f?Gs(f,{maxAgeMs:Vs})??[]:[]},[u]),[p,v]=s.useState(()=>i(n)),[g,k]=s.useState(null),[z,H]=s.useState(()=>i(n).length===0),[W,w]=s.useState([]),[U,_]=s.useState(!1),[M,R]=s.useState(!1),[q,N]=s.useState(""),[te,j]=s.useState(""),[ee,S]=s.useState([]),[ne,V]=s.useState(""),[X,ke]=s.useState(""),[ae,m]=s.useState(!1),{agentsMap:b}=bs(n),y=s.useRef(null),d=s.useRef(null),ye=s.useRef(!1),J=s.useRef(""),D=s.useRef(null),Ce=s.useRef(p),$=s.useRef(g),je=s.useRef(W),Y=s.useRef(M);Ce.current=p,$.current=g,je.current=W,Y.current=M,s.useEffect(()=>{J.current=ne},[ne]);const Me=s.useRef(new Set),$e=s.useRef(0),Fe=s.useRef(n);Fe.current!==n&&(zt({view:"useChat",trigger:"project-context-change",projectId:n,replayAttempted:!1,detail:{previousProjectId:Fe.current??null}}),Fe.current=n,$e.current++);const he=s.useCallback(async()=>{Ce.current.length===0&&H(!0);try{const f=[...(await Ws(n)).sessions].sort((A,G)=>new Date(G.updatedAt).getTime()-new Date(A.updatedAt).getTime());v(f);const x=u(n);x&&qs(x,f,{maxBytes:5e5})}catch{const l=i(n);if(Ce.current.length===0&&l.length===0){const f=u(n);f&&ds(f)}}finally{H(!1)}},[u,n]);s.useEffect(()=>{const l=i(n);v(l),H(l.length===0)},[n,i]),s.useEffect(()=>{he()},[he,n]);const be=s.useRef(()=>{}),ve=s.useRef(!1);s.useEffect(()=>{ve.current=!1,d.current=null},[n]),s.useEffect(()=>{if(z||ve.current||$.current)return;const l=Bn(ms,n);if(!l){ve.current=!0;return}const f=p.find(x=>x.id===l);if(f){ve.current=!0,be.current(l,f);return}ve.current=!0},[z,p,n]);const Le=s.useCallback((l,f)=>{const x=o(l,f);return x?Gs(x,{maxAgeMs:Vs})??[]:[]},[o]),wt=s.useCallback(l=>{const f=Le(n,l);return f.length>0?(w(f),_(!1),!0):(w([]),!1)},[n,Le]),re=s.useCallback(async(l,f)=>{const x=typeof f?.offset=="number"&&f.offset>0||typeof f?.before=="string",A=o(n,l),G=x?[]:Le(n,l),T=G.length>0;!x&&T?(w(G),_(!1)):_(!0);try{const O=await Kn(l,{limit:50,order:"desc",...f},n),B=O.messages.slice().reverse().map(hs);x?$.current?.id===l&&(w(P=>[...B,...P]),m(O.messages.length>=50)):$.current?.id===l&&(w(B),m(O.messages.length>=50),A&&qs(A,B,{maxBytes:5e5}))}catch{!x&&je.current.length===0&&T&&(w(G),_(!1))}finally{_(!1)}},[o,n,Le]),Ve=s.useCallback(()=>{D.current?.(),D.current=null,J.current="",V(""),N(""),j(""),S([]),R(!1)},[]),Se=s.useCallback(()=>{gt($.current?.id),J.current="",V("")},[]),se=s.useCallback(()=>{const l=J.current.trim();l&&(gt($.current?.id),J.current="",V(""),We.current(l))},[]),oe=s.useCallback((l,f,x)=>{if(y.current||!l)return!0;ye.current=!1,f&&(N(f.streamingText),j(f.streamingThinking),S(f.toolCalls)),R(!0);const{handlers:A}=Xs({sessionId:l,tempUserMessageId:"",setStreamingText:N,setStreamingThinking:j,setStreamingToolCalls:S,cancelStreamingFlushesRef:D,addToast:x?.silent?void 0:r,onFallbackSession:(T,O)=>{const B=an(T.fallbackModel);v(P=>P.map(K=>K.id===O?{...K,...B}:K)),k(P=>P&&P.id===O?{...P,...B}:P)},onDone:()=>{N(""),j(""),S([]),R(!1),Y.current=!1,y.current=null,d.current=null,re(l),se()},onError:T=>{N(""),j(""),S([]),R(!1),Y.current=!1,y.current=null,d.current=null;const O=rn(T);x?.silent||r?.(O.summary,"error"),re(l),se()}});zt({view:"useChat",trigger:"sse-open",projectId:n,replayAttempted:typeof f?.replayFromEventId=="number",replayFromEventId:f?.replayFromEventId??null,lastEventId:f?.replayFromEventId??null});const G=Gn(l,A,n,{...typeof f?.replayFromEventId=="number"?{lastEventId:f.replayFromEventId}:{}});return y.current=G,d.current={sessionId:l,replayFromEventId:typeof f?.replayFromEventId=="number"?f.replayFromEventId:null},!0},[r,re,n,se]),_e=s.useCallback((l,f)=>{const x=$.current?.id??null;if(l&&x===l&&!f)return;y.current&&(y.current.close(),y.current=null),d.current=null;const A=f??p.find(G=>G.id===l);k(A||null),l&&Dt(l,n).then(({session:G})=>{!G.isGenerating||!G.inFlightGeneration||k(T=>!T||T.id!==l?T:{...T,...G})}).catch(()=>{}),Ve(),m(!1),l?(wt(l),re(l)):w([]),A?.isGenerating&&oe(A.id,A.inFlightGeneration),l?Vn(ms,l,n):Wn(ms,n)},[oe,wt,p,re,n,Ve]);be.current=_e,s.useEffect(()=>{const l=g?.id;if(!l)return;const f=qn(l);if(!f)return;J.current=f,V(f);let x=!1;return Dt(l,n).then(({session:A})=>{if(!(x||$.current?.id!==l||J.current.trim().length===0)){if(A.isGenerating){y.current||oe(l,A.inFlightGeneration);return}!Y.current&&!y.current&&se()}}).catch(()=>{}),()=>{x=!0}},[g?.id,oe,se,n]);const rt=s.useCallback(async l=>{const f=$.current?.id,x=await Xn(l,n);y.current&&(y.current.close(),y.current=null),d.current=null;const A={id:x.session.id,title:x.session.title,agentId:x.session.agentId,status:x.session.status,modelProvider:x.session.modelProvider,modelId:x.session.modelId,createdAt:x.session.createdAt,updatedAt:x.session.updatedAt};return v(G=>G.some(T=>T.id===A.id)?G:[A,...G]),gt(f),Ve(),_e(A.id,A),A},[n,Ve,_e]),Ut=s.useCallback(async l=>{gt(l),await Yn(l,{status:"archived"},n),v(f=>f.filter(x=>x.id!==l)),g?.id===l&&(d.current=null,k(null),w([]))},[g,n]),ze=s.useCallback(async l=>{gt(l),g?.id===l&&y.current&&(y.current.close(),y.current=null),g?.id===l&&(d.current=null),await Jn(l,n);const f=o(n,l);f&&ds(f),v(x=>x.filter(A=>A.id!==l)),g?.id===l&&(k(null),w([]))},[g,o,n]),He=s.useCallback(async()=>{if(!g||!ae)return;const l=je.current[0]?.createdAt;l&&await re(g.id,{before:l})},[g,ae,re]),ot=s.useCallback(()=>{g&&(ye.current=!0,D.current?.(),D.current=null,y.current?.close(),y.current=null,d.current=null,Qn(g.id,n).catch(()=>{}),R(!1),Y.current=!1,N(""),j(""),S([]),se())},[g,n,se]),We=s.useRef(()=>{}),qe=Zn(),Ue=s.useCallback(async l=>{try{await he();const f=await Dt(l,n);$.current?.id===l&&k(x=>!x||x.id!==l?x:{...x,...f.session}),f.session.isGenerating?(N(""),j(""),S([]),R(!0),Y.current=!0,oe(l,f.session.inFlightGeneration,{silent:!0})):(N(""),j(""),S([]),R(!1),Y.current=!1,await re(l))}catch{}},[oe,re,n,he]),Re=s.useCallback((l,f)=>{if(!g)return;if(Y.current){J.current=l,V(l),ea(g.id,l);return}ye.current=!1,y.current&&(y.current.close(),y.current=null),d.current=null;const x=`temp-${Date.now()}`,A={id:x,sessionId:g.id,role:"user",content:l,createdAt:new Date().toISOString()};w(T=>[...T,A]),N(""),j(""),S([]),R(!0);const{handlers:G}=Xs({sessionId:g.id,tempUserMessageId:x,setStreamingText:N,setStreamingThinking:j,setStreamingToolCalls:S,cancelStreamingFlushesRef:D,addToast:r,onFallbackSession:(T,O)=>{const B=an(T.fallbackModel);v(P=>P.map(K=>K.id===O?{...K,...B}:K)),k(P=>P&&P.id===O?{...P,...B}:P)},onDone:({messageId:T,message:O,accumulated:B})=>{const P=O?{...hs(O),...B.text.length>0?{content:B.text}:{}}:{id:T||`msg-${Date.now()}`,sessionId:g.id,role:"assistant",content:B.text,thinkingOutput:B.thinking,toolCalls:B.toolCalls.length>0?B.toolCalls:void 0,fallbackInfo:B.fallbackInfo,createdAt:new Date().toISOString()};Me.current.add(P.id),w(K=>[...K,P]),N(""),j(""),S([]),R(!1),Y.current=!1,y.current=null,d.current=null,setTimeout(()=>{Me.current.delete(P.id)},1e3),he(),se()},onError:(T,O)=>{const B=rn(T),P=typeof T=="string"?T:B.summary,K=na(P);w(Q=>{const F=Q.filter(Z=>Z.id!==O);return K?F:[...F,{id:`error-${Date.now()}`,sessionId:g.id,role:"assistant",content:B.summary,failureInfo:B,createdAt:new Date().toISOString()}]}),N(""),j(""),S([]),R(!1),Y.current=!1,y.current=null,d.current=null,console.error("[useChat] Stream error:",T),K?(console.info("[useChat] Suppressed tab-suspension stream error:",T),g?.id&&(N(""),j(""),S([]),R(!0),Y.current=!0,Ue(g.id))):(r?.(B.summary,"error"),he()),ye.current||se()}});y.current=ta(g.id,l,G,f,n)},[g,n,he,r,oe,Ue,se]);We.current=Re;const Oe=X?p.filter(l=>l.title?.toLowerCase().includes(X.toLowerCase())||l.agentId.toLowerCase().includes(X.toLowerCase())):p;return s.useEffect(()=>{if(!g?.id||g.isGenerating!==!0||y.current)return;const l=typeof g.inFlightGeneration?.replayFromEventId=="number"?g.inFlightGeneration.replayFromEventId:null,f=d.current;f?.sessionId===g.id&&f.replayFromEventId===l||oe(g.id,g.inFlightGeneration,{silent:!0})},[g?.id,g?.isGenerating,g?.inFlightGeneration,oe]),s.useEffect(()=>{if(!$.current?.isGenerating||(y.current||oe($.current.id,$.current.inFlightGeneration),!Y.current||y.current||!$.current))return;const l=setInterval(async()=>{if(!Y.current||y.current||!$.current){clearInterval(l);return}try{(await Ws(n)).sessions.find(A=>A.id===$.current?.id)?.isGenerating||(clearInterval(l),await re($.current.id),N(""),j(""),S([]),R(!1),Y.current=!1,se())}catch{}},3e3);return()=>clearInterval(l)},[oe,re,n,g,se]),s.useEffect(()=>qe.onBecameVisible(()=>{const f=$.current;if(!f||y.current)return;const x=$e.current;Dt(f.id,n).then(A=>{if(!($e.current!==x||y.current)){if(A.session.isGenerating){N(""),j(""),S([]),R(!0),Y.current=!0,oe(f.id,A.session.inFlightGeneration,{silent:!0});return}Y.current&&(N(""),j(""),S([]),R(!1),Y.current=!1,se(),re(f.id))}}).catch(()=>{})}),[oe,re,n,qe,se]),s.useEffect(()=>{const l=$e.current,f=n?`?projectId=${encodeURIComponent(n)}`:"",x=()=>$e.current!==l,A=K=>{if(x())return;const Q=JSON.parse(K.data);v(F=>F.some(Z=>Z.id===Q.id)?F:[Q,...F])},G=K=>{if(x())return;const Q=JSON.parse(K.data);v(F=>[...F.map(le=>le.id===Q.id?Q:le)]),$.current?.id===Q.id&&(k(Q),Q.isGenerating&&!y.current&&oe(Q.id,Q.inFlightGeneration))},T=K=>{if(x())return;const{id:Q}=JSON.parse(K.data);v(Z=>Z.filter(le=>le.id!==Q));const F=o(n,Q);F&&ds(F),$.current?.id===Q&&(k(null),w([]))},O=K=>{if(x())return;const Q=JSON.parse(K.data),F=hs(Q);if(!Me.current.has(F.id)){if($.current?.id===F.sessionId&&Y.current&&!y.current&&F.role==="assistant"){w(Z=>Z.some(le=>le.id===F.id)?Z:[...Z,F]),N(""),j(""),S([]),R(!1),Y.current=!1,se();return}$.current?.id===F.sessionId&&!Y.current&&w(Z=>{if(Z.some(le=>le.id===F.id))return Z;if(F.role==="user"){const le=Z.findIndex(fe=>fe.role==="user"&&fe.id.startsWith("temp-")&&fe.content.trim()===F.content.trim());if(le>=0){const fe=[...Z];return fe[le]=F,fe}}return[...Z,F]})}},B=K=>{if(x())return;const{id:Q}=JSON.parse(K.data);w(F=>F.filter(Z=>Z.id!==Q))};return sa(`/api/events${f}`,{events:{"chat:session:created":A,"chat:session:updated":G,"chat:session:deleted":T,"chat:message:added":O,"chat:message:deleted":B}})},[oe,o,n,se]),s.useEffect(()=>()=>{y.current&&(y.current.close(),y.current=null),d.current=null},[]),{sessions:p,activeSession:g,sessionsLoading:z,messages:W,messagesLoading:U,isStreaming:M,streamingText:q,streamingThinking:te,streamingToolCalls:ee,pendingMessage:ne,selectSession:_e,createSession:rt,archiveSession:Ut,deleteSession:ze,sendMessage:Re,stopStreaming:ot,clearPendingMessage:Se,loadMoreMessages:He,hasMoreMessages:ae,searchQuery:X,setSearchQuery:ke,filteredSessions:Oe,refreshSessions:he,agentsMap:b}}function Da(n,r=[],u){const o=n.trim().replace(/^#/,""),i=(v,g)=>u?u(v,g):g;if(!o)return{ok:!1,error:i("createRoom.nameRequired","Room name is required.")};if(/[A-Z]/.test(o))return{ok:!1,error:i("createRoom.lowercase","Use lowercase letters only.")};const p=o.toLowerCase();return p.length>80?{ok:!1,error:i("createRoom.maxLength","Room names can be at most 80 characters.")}:/^[a-z0-9_-]+$/.test(p)?/^[-_]|[-_]$/.test(p)?{ok:!1,error:i("createRoom.noEdgeChars","Room names cannot start or end with a hyphen or underscore.")}:r.some(v=>v.toLowerCase()===p)?{ok:!1,error:i("createRoom.duplicate","A room with this name already exists.")}:{ok:!0,name:p}:{ok:!1,error:i("createRoom.validChars","Use lowercase letters, numbers, hyphens, or underscores only.")}}function $a({isOpen:n,onClose:r,onCreate:u,projectId:o,existingRoomNames:i=[]}){const{t:p}=xt("app"),[v,g]=s.useState(""),[k,z]=s.useState([]),[H,W]=s.useState(""),[w,U]=s.useState([]),[_,M]=s.useState(!1),[R,q]=s.useState(null),[N,te]=s.useState(!1),j=s.useRef(null),ee=s.useRef(null);s.useEffect(()=>{n&&(ee.current=document.activeElement instanceof HTMLElement?document.activeElement:null,M(!0),q(null),aa(void 0,o).then(m=>z(m)).catch(()=>{z([]),q(p("createRoom.failedLoadAgents","Failed to load agents."))}).finally(()=>M(!1)))},[n,o]),s.useEffect(()=>{if(!n){g(""),W(""),U([]),q(null),te(!1);return}const m=window.requestAnimationFrame(()=>j.current?.focus());return()=>window.cancelAnimationFrame(m)},[n]),s.useEffect(()=>{if(!n)return;const m=b=>{b.key==="Escape"&&r()};return document.addEventListener("keydown",m),()=>document.removeEventListener("keydown",m)},[n,r]),s.useEffect(()=>{n||ee.current?.focus()},[n]);const S=s.useMemo(()=>Da(v,i,p),[v,i,p]),ne=s.useMemo(()=>{const m=H.trim().toLowerCase();return m?k.filter(b=>b.name.toLowerCase().includes(m)):k},[k,H]),V=s.useMemo(()=>k.filter(m=>w.includes(m.id)),[k,w]),X=S.ok&&w.length>0&&!N&&!_;if(!n)return null;const ke=m=>{N||U(b=>b.includes(m)?b.filter(y=>y!==m):[...b,m])},ae=async()=>{if(!S.ok){q(S.error);return}if(w.length===0){q(p("createRoom.selectMember","Select at least one member."));return}q(null),te(!0);try{await u({name:S.name,displayName:`#${S.name}`,memberAgentIds:w}),r()}catch(m){q(m instanceof Error?m.message:p("createRoom.failedCreate","Failed to create room."))}finally{te(!1)}};return Hn.createPortal(t.jsx("div",{className:"modal-overlay open",onClick:m=>m.target===m.currentTarget&&r(),children:t.jsxs("div",{className:"modal modal-lg create-room-modal",role:"dialog","aria-modal":"true","aria-label":p("createRoom.title","Create room"),onClick:m=>m.stopPropagation(),children:[t.jsxs("div",{className:"modal-header",children:[t.jsx("h3",{children:p("createRoom.title","Create room")}),t.jsx("button",{type:"button",className:"modal-close","aria-label":p("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:p("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:j,id:"create-room-name",className:"input",value:v,disabled:N,onChange:m=>{const b=m.target.value.replace(/^#/,"").replace(/\s+/g,"-").toLowerCase();g(b)}})]}),!S.ok&&t.jsx("div",{className:"form-error",children:S.error})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"create-room-member-search",children:p("createRoom.members","Members")}),t.jsx("input",{id:"create-room-member-search",className:"input",placeholder:p("createRoom.searchAgents","Search agents"),value:H,disabled:N,onChange:m=>W(m.target.value)})]}),V.length>0&&t.jsx("div",{className:"create-room-modal-selected","data-testid":"create-room-selected-chips",children:V.map(m=>t.jsxs("button",{type:"button",className:"btn btn-sm create-room-modal-chip",onClick:()=>ke(m.id),disabled:N,children:[m.name," ×"]},m.id))}),t.jsx("div",{className:"create-room-modal-member-list","data-testid":"create-room-member-list",children:_?t.jsx("div",{className:"create-room-modal-empty",children:p("createRoom.loadingAgents","Loading agents...")}):ne.length===0?t.jsx("div",{className:"create-room-modal-empty",children:k.length===0?p("createRoom.noAgents","No agents in this project yet."):p("createRoom.noMatch","No agents match your search.")}):ne.map(m=>{const b=w.includes(m.id);return t.jsxs("button",{type:"button",className:`create-room-modal-member-row${b?" create-room-modal-member-row--selected":""}`,onClick:()=>ke(m.id),disabled:N,children:[t.jsx(fn,{agent:m,size:20}),t.jsx("span",{children:m.name}),t.jsx("span",{className:"create-room-modal-member-role",children:m.role})]},m.id)})}),R&&t.jsx("div",{className:"form-group",children:t.jsx("div",{className:"form-error",children:R})}),t.jsxs("div",{className:"modal-actions",children:[t.jsx("button",{type:"button",className:"btn",onClick:r,disabled:N,children:p("actions.cancel","Cancel")}),t.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>void ae(),disabled:!X,children:N?p("createRoom.creating","Creating..."):p("createRoom.create","Create room")})]})]})}),document.body)}function Fa({cliSessionId:n,tier:r,projectId:u,renderTranscript:o,renderComposer:i,queuedCount:p=0,terminalProps:v}){const{t:g}=xt("app"),k=r==="generic",[z,H]=s.useState(k?"terminal":"transcript");if(k)return t.jsx("div",{className:"cli-chat-surface cli-chat-surface--generic","data-tier":"generic",children:t.jsx(nn,{sessionId:n,projectId:u,...v})});const W=z==="terminal";return t.jsxs("div",{className:"cli-chat-surface","data-tier":r,"data-view":z,children:[t.jsxs("div",{className:"cli-chat-surface__toolbar",role:"tablist","aria-label":g("cliChat.viewToggleLabel","Chat view"),children:[t.jsxs("button",{type:"button",role:"tab","aria-selected":!W,className:`cli-chat-surface__tab${W?"":" is-active"}`,onClick:()=>H("transcript"),children:[t.jsx(gn,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:g("cliChat.transcriptTab","Transcript")})]}),t.jsxs("button",{type:"button",role:"tab","aria-selected":W,className:`cli-chat-surface__tab${W?" is-active":""}`,onClick:()=>H("terminal"),children:[t.jsx(ra,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:g("cliChat.terminalTab","Terminal")})]})]}),t.jsx("div",{className:"cli-chat-surface__body",children:W?t.jsx(nn,{sessionId:n,projectId:u,...v}):o()}),!W&&t.jsxs("div",{className:"cli-chat-surface__composer",children:[p>0&&t.jsx("div",{className:"cli-chat-surface__queued",role:"status","aria-live":"polite",children:g("cliChat.queued","{{count}} message queued — will send when the agent is ready",{count:p})}),i()]})]})}const vs=640,La=200,on="__SKIP__";let fs=!1;function _a(n,r=vs){return n>r?"auto":"hidden"}function za(n,r=vs){return Math.max(40,Math.min(n,r))}function xn(n,r){const u=new Date(n),i=new Date().getTime()-u.getTime(),p=Math.floor(i/1e3),v=Math.floor(p/60),g=Math.floor(v/60),k=Math.floor(g/24);return p<60?r("chat.relativeTimeJustNow","just now"):v<60?r("chat.relativeTimeMinutes","{{count}}m ago",{count:v}):g<24?r("chat.relativeTimeHours","{{count}}h ago",{count:g}):k<7?r("chat.relativeTimeDays","{{count}}d ago",{count:k}):u.toLocaleDateString()}function cn(n,r){if(!n||!r)return null;const u=r.toLowerCase();if(u.includes("claude")){let i=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 i=i.replace(/\s+/g," "),i.length>30?i.slice(0,30)+"…":i}if(u.includes("gpt")||u.includes("openai")){const i=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 i.length>30?i.slice(0,30)+"…":i}if(u.includes("gemini")){const i=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 i.length>30?i.slice(0,30)+"…":i}const o=r.replace(/-/g," ").replace(/^\w/,i=>i.toUpperCase()).replace(/\s+/g," ").trim();return o.length>30?o.slice(0,30)+"…":o}function _t(n,r){return n.length<=r?n:`${n.slice(0,r)}…`}function Ha(n){if(!n)return null;const r=Object.entries(n);return r.length===0?null:r.map(([u,o])=>{const i=typeof o=="string"?o:(()=>{try{return JSON.stringify(o)}catch{return String(o)}})();return`${u}=${_t(i,50)}`}).join(", ")}function Ua(n){if(n===void 0)return null;if(typeof n=="string")return _t(n,200);try{return _t(JSON.stringify(n),200)}catch{return _t(String(n),200)}}function Oa(n){if(!n)return null;if(n.kind==="mailbox"||n.kind==="mailbox-message"){const r=typeof window>"u"?"/":window.location.pathname||"/",u=new URLSearchParams(typeof window>"u"?"":window.location.search);return u.set("view","mailbox"),u.set("mailbox-message",n.id),`${r}?${u.toString()}#message-${encodeURIComponent(n.id)}`}return null}function Ba(n,r){if(!n)return null;const u=n.label??`${n.kind} ${n.id}`,o=Oa(n),i=`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:u}),o?t.jsx("a",{className:"btn btn-sm chat-message-failure-reference-link",href:o,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:i,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 wn(n,r){if(!n||n.length===0)return null;const u=(w,U)=>{const _=w.status==="running",M=w.status==="completed"&&w.isError,R=Ha(w.args),q=Ua(w.result),N=_?R:q?`${r("chat.toolCallResultPrefix","result")}: ${q}`:R?`${r("chat.toolCallArgsPrefix","args")}: ${R}`:null,te=_?r("chat.toolCallStatusRunning","running"):M?r("chat.toolCallStatusError","error"):r("chat.toolCallStatusCompleted","completed");return t.jsxs("details",{className:`chat-tool-call${_?" chat-tool-call--running":""}${M?" chat-tool-call--error":""}`,open:_,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:w.toolName,children:w.toolName}),N&&t.jsx("span",{className:"chat-tool-call-preview",title:N,children:N}),t.jsx("span",{className:"chat-tool-call-status-text",children:te})]}),t.jsxs("div",{className:"chat-tool-call-content",children:[R&&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:R})]}),q&&t.jsxs("div",{className:`chat-tool-call-row${M?" 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:q})]})]})]},`${w.toolName}-${U}`)},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(sn,{size:12,"aria-hidden":"true"}),t.jsx("span",{children:r("chat.toolCallsHeader","Tool calls")})]}),u(n[0],0)]});const i=n.filter(w=>w.status==="running").length,p=n.filter(w=>w.status==="completed"&&w.isError).length,v=i>0,g=Array.from(new Set(n.map(w=>w.toolName))),k=g.slice(0,5),z=Math.max(0,g.length-k.length),H=z>0?`${k.join(", ")}, +${z} more`:k.join(", "),W=v?`(${i} ${r("chat.toolCallStatusRunning","running")})`:p>0?`(${p} ${p===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:v,children:[t.jsxs("summary",{className:"chat-tool-calls-group-summary",children:[t.jsx(sn,{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:H,children:H}),W&&t.jsx("span",{className:"chat-tool-calls-group-status",children:W})]}),n.map((w,U)=>u(w,U))]})})}const yn={p:({children:n,...r})=>t.jsx("p",{...r,children:en(n)}),li:({children:n,...r})=>t.jsx("li",{...r,children:en(n)}),pre:({children:n,...r})=>t.jsx("pre",{...r,className:"chat-markdown-pre",children:n}),code:({children:n,...r})=>{const u=typeof n=="string"?n:Un.Children.toArray(n).join(""),o=Ht(u);return o.length===1&&typeof o[0]=="string"?t.jsx("code",{...r,children:n}):t.jsx("code",{...r,children:o})},table:({children:n,...r})=>t.jsx("table",{...r,className:"chat-markdown-table",children:n})},at="__fn_agent__",Ka=280,Ft=180,Lt=500,ln="fusion:chat-sidebar-width",gs="fusion:chat-scope",Ga="fusion:chat-draft:";function dn(n,r){return r?`${Ga}${n}:${r}`:null}function un(n){if(!n)return"";try{return localStorage.getItem(n)??""}catch{return""}}const Va=["image/png","image/jpeg","image/gif","image/webp","text/plain","application/json","text/yaml","text/markdown","text/csv","application/xml","text/x-log"];function mn(n){const r=/(^|[\s])\/([^\s]*)$/.exec(n);if(!r)return null;const u=r[1]??"",o=r[2]??"",i=r.index+u.length;return{filter:o,start:i,end:n.length}}function Wa(n,r){const u=n.slice(0,r),o=/(^|[\s\n])@([\w-]*)$/.exec(u);if(!o)return null;const i=o[2]??"",p=u.length-i.length-1;return{filter:i,start:p,end:r}}function qa(n){const r=n?.runtimeConfig;if(!r||typeof r!="object")return null;const u=Reflect.get(r,"modelProvider"),o=Reflect.get(r,"modelId");return typeof u!="string"||u.trim().length===0||typeof o!="string"||o.trim().length===0?null:{provider:u,modelId:o}}function hn(n,r,u){if(n?.modelProvider&&n?.modelId)return{provider:n.modelProvider,modelId:n.modelId};const o=qa(r??void 0);return o||(u.provider&&u.modelId?{provider:u.provider,modelId:u.modelId}:null)}function Xa({projectId:n,defaultModel:r,onClose:u,onCreate:o}){const{t:i}=xt("app"),[p,v]=s.useState("agent"),{agents:g,loading:k}=bs(n),[z,H]=s.useState(""),{models:W,favoriteProviders:w,favoriteModels:U,loading:_,refresh:M}=pn(),R=r.provider&&r.modelId?`${r.provider}/${r.modelId}`:"",[q,N]=s.useState(R),[te,j]=s.useState(w),[ee,S]=s.useState(U);s.useEffect(()=>{j(w)},[w]),s.useEffect(()=>{S(U)},[U]),s.useEffect(()=>{R&&N(m=>m||R)},[R]);const ne=s.useCallback(async m=>{const b=te,d=b.includes(m)?b.filter(ye=>ye!==m):[m,...b];j(d);try{await tn({favoriteProviders:d,favoriteModels:ee}),await M()}catch{j(b)}},[te,ee,M]),V=s.useCallback(async m=>{const b=ee,d=b.includes(m)?b.filter(ye=>ye!==m):[m,...b];S(d);try{await tn({favoriteProviders:te,favoriteModels:d}),await M()}catch{S(b)}},[ee,te,M]),X=q||R,ke=m=>{if(m.preventDefault(),p==="agent"){if(!z)return;o({agentId:z});return}if(!X)return;const b=X.indexOf("/");if(b<=0)return;const y=X.slice(0,b),d=X.slice(b+1);o({agentId:at,modelProvider:y,modelId:d})},ae=p==="agent"?!z:!X;return t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:u,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:m=>m.stopPropagation(),children:[t.jsx("h3",{children:i("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${p==="agent"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-agent",onClick:()=>{v("agent")},children:i("chat.newChatModeAgent","Agent")}),t.jsx("button",{type:"button",className:`chat-new-dialog-mode-btn${p==="model"?" chat-new-dialog-mode-btn--active":""}`,"data-testid":"chat-new-dialog-mode-model",onClick:()=>{v("model"),H(""),N(m=>m||R)},children:i("chat.newChatModeModel","Model")})]}),t.jsxs("form",{onSubmit:ke,children:[p==="agent"&&t.jsxs("label",{className:"chat-new-dialog-model-label",children:[i("chat.newChatModeAgent","Agent"),k?t.jsx("div",{className:"chat-new-dialog-loading",children:i("chat.loadingAgents","Loading agents...")}):g.length===0?t.jsx("div",{className:"chat-new-dialog-empty",children:i("chat.noAgentsAvailable","No agents available")}):t.jsx("div",{className:"chat-new-dialog-agent-list",children:g.map(m=>t.jsxs("button",{type:"button",className:`chat-new-dialog-agent-item${z===m.id?" chat-new-dialog-agent-item--selected":""}`,onClick:()=>H(m.id),"data-testid":`agent-option-${m.id}`,children:[t.jsx(vt,{size:16}),t.jsx("span",{className:"chat-new-dialog-agent-name",children:m.name}),t.jsx("span",{className:"chat-new-dialog-agent-role",children:m.role})]},m.id))})]}),p==="model"&&t.jsx("div",{className:"chat-new-dialog-model-dropdown","data-testid":"chat-new-dialog-model-section",children:_?t.jsx("div",{className:"chat-new-dialog-loading",children:i("chat.loadingModels","Loading models...")}):t.jsx(Ma,{models:W,value:q,onChange:N,label:i("chat.newChatModeModel","Model"),placeholder:i("chat.selectModel","Select a model"),favoriteProviders:te,onToggleFavorite:ne,favoriteModels:ee,onToggleModelFavorite:V})}),t.jsxs("div",{className:"chat-new-dialog-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:u,children:i("chat.cancel","Cancel")}),t.jsx("button",{type:"submit",className:"btn btn-sm btn-primary",disabled:ae,children:i("chat.create","Create")})]})]})]})})}const ps=s.memo(function({message:r,forcePlain:u,agentName:o,hideAssistantIdentity:i,showAssistantModelTag:p,activeModelTag:v,activeModelProvider:g,activeSessionId:k,mentionAgentsByName:z,roomContext:H,copyAction:W,onScrollToTop:w}){const{t:U}=xt("app"),_=r.role==="assistant",M=_?r.failureInfo:void 0,R=_&&(!i||!!M),q=s.useMemo(()=>{if(_)return null;const j=r.content,ee=/@([\w-]+)/g,S=[];let ne=0,V=ee.exec(j);for(;V;){const[X,ke=""]=V,ae=V.index;ae>ne&&S.push(j.slice(ne,ae));const m=ke.replace(/_/g," ").toLowerCase(),b=z.get(m);if(b){const y=!!(H&&!H.memberIds.has(b.id)),d=y?U("chat.mentionNonMember","Not a member of {{roomName}}",{roomName:H?.roomName}):void 0;S.push(t.jsxs("span",{className:`chat-mention-chip${y?" chat-mention-chip--non-member":""}`,title:d,"aria-label":d,children:["@",b.name.replace(/\s+/g,"_")]},`${b.id}-${ae}`))}else S.push(X);ne=ae+X.length,V=ee.exec(j)}return ne<j.length&&S.push(j.slice(ne)),S.length===0?j:S},[_,r.content,z,H]),N=s.useMemo(()=>{const j=r.attachments;if(!j||j.length===0)return null;const ee=r.roomId?`/api/chat/rooms/${encodeURIComponent(r.roomId)}/attachments/`:k?`/api/chat/sessions/${encodeURIComponent(k)}/attachments/`:null;return ee?t.jsx("div",{className:"chat-message-attachments",children:j.map(S=>{const ne=S.mimeType.startsWith("image/"),V=S.id||S.filename,X=`${ee}${encodeURIComponent(S.filename)}`;return ne?t.jsx("a",{className:"chat-message-attachment-link","data-testid":"chat-message-attachment",href:X,target:"_blank",rel:"noopener noreferrer",children:t.jsx("img",{className:"chat-message-attachment",src:X,alt:S.originalName})},V):t.jsxs("a",{className:"chat-message-attachment-file","data-testid":"chat-message-attachment",href:X,target:"_blank",rel:"noopener noreferrer",children:[t.jsx(Ca,{size:14}),t.jsx("span",{children:S.originalName})]},V)})}):null},[r.attachments,r.roomId,k]),te=s.useMemo(()=>_?M?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:U("chat.responseFailed","Response failed")})]}),t.jsx("div",{className:"chat-message-failure-summary",children:M.summary}),(M.errorClass||M.code)&&t.jsxs("div",{className:"chat-message-failure-badges",children:[M.errorClass&&t.jsx("span",{className:"chat-message-failure-badge",children:M.errorClass}),M.code&&t.jsx("span",{className:"chat-message-failure-badge",children:M.code})]}),(M.detail||M.reference)&&t.jsxs("details",{className:"chat-message-failure-details",children:[t.jsxs("summary",{children:[t.jsx(Sa,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:U("chat.failureDetails","Failure details")})]}),M.detail&&t.jsx("pre",{className:"chat-message-failure-detail",children:Ht(M.detail)}),Ba(M.reference,U)]})]}):u?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(bn,{remarkPlugins:[vn],components:yn,children:r.content})}):null,[M,u,_,r.content]);return t.jsxs("div",{className:`chat-message chat-message--${r.role}${M?" chat-message--failure":""}`,"data-testid":`chat-message-${r.id}`,"data-message-id":r.id,children:[R&&t.jsxs("div",{className:"chat-message-avatar",children:[g?t.jsx(bt,{provider:g,size:"sm"}):t.jsx(vt,{size:14}),t.jsx("span",{children:o}),p&&v&&t.jsx("span",{className:"chat-model-tag",children:v})]}),_?te:t.jsx("div",{className:"chat-message-content",children:q}),_&&!M&&(W||w)&&t.jsxs("div",{className:"chat-message-actions",children:[W,w&&t.jsx("button",{type:"button",className:"btn-icon chat-message-scroll-to-top-action","aria-label":U("chat.scrollMessageToTop","Scroll message to top"),"data-testid":`chat-message-scroll-to-top-${r.id}`,onClick:()=>w(r.id),children:t.jsx(Aa,{size:14})})]}),wn(r.toolCalls,U),r.thinkingOutput&&t.jsxs("details",{className:"chat-message-thinking",children:[t.jsx("summary",{children:U("chat.thinking","Thinking")}),t.jsx("pre",{className:"chat-message-thinking-content",children:Ht(r.thinkingOutput)})]}),N,t.jsx("div",{className:"chat-message-time",children:xn(r.createdAt,U)})]})});function nr({projectId:n,addToast:r,experimentalFeatures:u}){const{t:o}=xt("app");s.useEffect(()=>(zt({view:"ChatView",trigger:fs?"route-active":"remount",projectId:n,replayAttempted:!1}),fs=!1,()=>{fs=!0,zt({view:"ChatView",trigger:"route-inactive",projectId:n,replayAttempted:!1})}),[n]);const{activeSession:i,sessionsLoading:p,messages:v,messagesLoading:g,isStreaming:k,streamingText:z,streamingThinking:H,streamingToolCalls:W,selectSession:w,createSession:U,archiveSession:_,deleteSession:M,sendMessage:R,stopStreaming:q,pendingMessage:N,clearPendingMessage:te,loadMoreMessages:j,hasMoreMessages:ee,searchQuery:S,setSearchQuery:ne,filteredSessions:V,agentsMap:X}=Pa(n,r),[ke,ae]=s.useState(!1),m=u?.chatRooms===!0,[b,y]=s.useState(()=>{try{if(localStorage.getItem(gs)==="rooms"&&m)return"rooms"}catch{}return"direct"}),d=oa(n,r),{isUnread:ye,markRead:J}=ia(n),[D,Ce]=s.useState(()=>{const e=dn(b,b==="rooms"?d.activeRoom?.id:i?.id);return un(e)}),[$,je]=s.useState(null),[Y,Me]=s.useState(null),[$e,Fe]=s.useState(null),[he,be]=s.useState(!0),[ve,Le]=s.useState(Ka),[wt,re]=s.useState(!1),{agentsMap:Ve}=bs(n),Se=s.useMemo(()=>X.size>0?X:Ve,[Ve,X]),{defaultProvider:se,defaultModelId:oe}=pn(),_e=s.useMemo(()=>({provider:se,modelId:oe}),[oe,se]),{skills:rt,loading:Ut}=ca(n),[ze,He]=s.useState(!1),[ot,We]=s.useState(""),[qe,Ue]=s.useState(0),[Re,Oe]=s.useState(""),[l,f]=s.useState(!1),[x,A]=s.useState(0),[G,T]=s.useState(-1),[O,B]=s.useState(!1),[P,K]=s.useState([]),[Q,F]=s.useState(!1),[Z,le]=s.useState(!1),[fe,xs]=s.useState({}),[yt,Ye]=s.useState(!1),[Ct,it]=s.useState(!1),{pushNav:ws}=la(),[,St]=s.useState(!1),[Cn,Sn]=s.useState({top:0,left:0}),L=da({projectId:n}),Ot=s.useCallback(e=>{if(!e||!L.mentionActive)return;const a=e.getBoundingClientRect();Sn({top:a.top-260,left:a.left+8})},[L.mentionActive]),ys=s.useRef(null),Cs=s.useRef(null),Ss=s.useRef(null),ks=s.useRef(null),me=s.useRef(!1),kt=s.useRef(null),Ns=s.useRef(null),Be=s.useRef(null),Nt=s.useRef(0),Bt=s.useRef(null),ct=s.useRef(null),Ae=s.useRef(null),ge=s.useRef(null),Kt=s.useRef(null),jt=s.useRef(!1),Te=s.useRef(null),Ee=s.useRef(null),ue=s.useRef(null),js=s.useRef(null),Ms=s.useRef([]),Je=s.useRef(0),lt=s.useRef(new Map),Gt=s.useRef(!1),Qe=s.useRef(null),Mt=ua(),E=Mt==="mobile",dt=Mt==="tablet";s.useEffect(()=>{i?.id&&J("direct",i.id,i.lastMessageAt??i.updatedAt)},[i?.id,i?.lastMessageAt,i?.updatedAt,J]),s.useEffect(()=>{d.activeRoom?.id&&J("room",d.activeRoom.id,d.activeRoom.updatedAt)},[d.activeRoom?.id,d.activeRoom?.updatedAt,J]),s.useEffect(()=>{if(!i?.id||v.length===0)return;const e=v[v.length-1];J("direct",i.id,e?.createdAt??i.lastMessageAt??i.updatedAt)},[i?.id,i?.lastMessageAt,i?.updatedAt,J,v]),s.useEffect(()=>{if(!d.activeRoom?.id||d.messages.length===0)return;const e=d.messages[d.messages.length-1];J("room",d.activeRoom.id,e?.createdAt??d.activeRoom.updatedAt)},[J,d.activeRoom?.id,d.activeRoom?.updatedAt,d.messages]),s.useEffect(()=>{try{const e=localStorage.getItem(ln);if(!e)return;const a=Number.parseInt(e,10);if(Number.isNaN(a))return;const c=Math.max(Ft,Math.min(Lt,a));Le(c)}catch{}},[]),s.useEffect(()=>{try{const e=localStorage.getItem(gs);if(e==="direct"){y("direct");return}e==="rooms"&&m&&y("rooms")}catch{}},[m]),s.useEffect(()=>{if(!m&&b==="rooms"){y("direct");return}try{localStorage.setItem(gs,b)}catch{}},[m,b]);const pe=dn(b,b==="rooms"?d.activeRoom?.id:i?.id),Vt=s.useRef(pe);s.useEffect(()=>{pe!==Vt.current&&(Vt.current=pe,Ce(un(pe)))},[pe]),s.useEffect(()=>{if(!(!pe||Vt.current!==pe))try{if(D){localStorage.setItem(pe,D);return}localStorage.removeItem(pe)}catch{}},[pe,D]);const ie=m&&b==="rooms"&&!!d.activeRoom,{keyboardOverlap:Rs,keyboardOpen:Ze}=ma({enabled:(E||dt)&&(!!i||ie),allowNonMobileViewport:dt}),ut=dt&&Ze;s.useEffect(()=>{if(!dt){Qe.current=null;return}if(Ze){be(e=>(Qe.current===null&&(Qe.current=e),e&&!1));return}if(Qe.current!==null){const e=Qe.current;Qe.current=null,be(e)}},[dt,Ze]);const xe=s.useMemo(()=>{const e=ot.trim().toLowerCase();return(e?rt.filter(c=>c.name.toLowerCase().includes(e)):rt).slice(0,10)},[rt,ot]),et=s.useMemo(()=>Array.from(Se.values()),[Se]),Ie=s.useMemo(()=>!m||b!=="rooms"||!d.activeRoom?null:{roomId:d.activeRoom.id,roomName:d.activeRoom.name,memberIds:new Set(d.activeRoomMembers.map(e=>e.agentId))},[m,b,d.activeRoom,d.activeRoomMembers]),Xe=s.useMemo(()=>{const e=et.filter(h=>ha(h.name,Re));if(!Ie)return e;const a=e.filter(h=>Ie.memberIds.has(h.id));if(Re.trim().length===0)return a;const c=e.filter(h=>!Ie.memberIds.has(h.id));return[...a,...c]},[et,Re,Ie]),Wt=s.useMemo(()=>{const e=new Map;for(const a of et)e.set(a.name.toLowerCase(),a);return e},[et]),kn=s.useMemo(()=>xe.map(e=>e.id).join("\0"),[xe]);s.useEffect(()=>{Ue(0)},[kn]),s.useEffect(()=>{A(0)},[Re,l]),s.useEffect(()=>()=>{Ae.current!==null&&window.clearTimeout(Ae.current)},[]),s.useEffect(()=>{const e=Cs.current;if(!e||!ee||g)return;const a=new IntersectionObserver(c=>{c[0].isIntersecting&&j()},{threshold:.1});return a.observe(e),()=>a.disconnect()},[ee,g,j]);const tt=s.useCallback(()=>ie?d.activeRoom?.id??null:i?.id??null,[ie,d.activeRoom?.id,i?.id]),As=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,'\\"')}"]`),[]),Rt=s.useCallback(()=>{const e=ge.current,a=tt();if(!e||!a)return;const c=e.scrollTop,h=e.querySelectorAll(".chat-message[data-message-id]"),C=Array.from(h).find(ce=>ce.offsetTop+ce.offsetHeight>=c)??h[0]??null,I=C?.getAttribute("data-message-id")??null,de=C?C.offsetTop-c:0;ct.current={threadId:a,scrollTop:c,scrollHeight:e.scrollHeight,clientHeight:e.clientHeight,anchorMessageId:I,anchorOffset:de,wasPinnedBefore:!me.current,capturedAtMs:typeof performance<"u"?performance.now():Date.now()}},[tt]),Ts=s.useCallback(()=>{const e=ge.current;if(!e)return;const c=e.scrollTop+e.clientHeight>=e.scrollHeight-50;le(!c),me.current=!c,Rt()},[Rt]),Pe=s.useCallback((e,a)=>{if(!e.isConnected||!a?.force&&me.current)return;let c=0,h=0,C=-1;const I=6,de=()=>{if(e.isConnected&&!(!a?.force&&me.current)){if(e.scrollTop=e.scrollHeight,e.scrollHeight===C?h+=1:(h=0,C=e.scrollHeight),c+=1,c>=I||h>=2){le(!1),me.current=!1;return}window.requestAnimationFrame(de)}};de()},[]),mt=ie?d.messages:v;s.useLayoutEffect(()=>{const e=ge.current,a=tt(),c=ct.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,de=c.scrollTop<=0&&c.anchorOffset<=0&&C;if(!me.current||I||de){ct.current=null;return}let ce=c.scrollTop;if(c.anchorMessageId){const De=As(e,c.anchorMessageId);De?ce=De.offsetTop-c.anchorOffset:ce=c.scrollTop+(e.scrollHeight-c.scrollHeight)}else ce=c.scrollTop+(e.scrollHeight-c.scrollHeight);e.scrollTop=Math.max(0,ce),me.current=!0,le(!0),ct.current=null},[mt,tt,As]);const qt=s.useCallback(e=>{},[mt.length,ie]),Ne=s.useCallback(e=>{qt(e);const a=ge.current;a&&(ct.current=null,me.current=!1,Pe(a))},[Pe,qt]);s.useLayoutEffect(()=>{Be.current!==null&&(window.clearTimeout(Be.current),Be.current=null);const e=ie?d.activeRoom?.id??null:i?.id??null;if(!e){kt.current=null;return}const a={threadId:e,loaded:ie?!d.messagesLoading:!g,hasMessages:ie?d.messages.length>0:v.length>0},c=kt.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 ce=ge.current;if(ce)return qt(h?"thread-change":C?"finished-loading":I?"first-messages":"mount"),Pe(ce,{force:!0}),ie||(Be.current=window.setTimeout(()=>{if(Be.current=null,me.current)return;const De=ge.current;De&&Pe(De)},250)),kt.current=a,()=>{Be.current!==null&&(window.clearTimeout(Be.current),Be.current=null)}},[ie,d.activeRoom?.id,d.messages.length,d.messagesLoading,i?.id,v.length,g,Pe]),s.useEffect(()=>{!k||me.current||Ne("streaming")},[k,z,H,Ne]),s.useEffect(()=>{const e=tt();if(!e){Nt.current=0,Bt.current=null;return}if(Bt.current!==e){Bt.current=e,Nt.current=mt.length;return}const a=Nt.current,c=mt.length,h=c>a,C=!me.current;Nt.current=c,h&&C&&Ne("new-message")},[mt,tt,Ne]),s.useEffect(()=>{Rs<=0||!ge.current||Ne("keyboard")},[Rs,Ne]),fa(E&&Ze),s.useLayoutEffect(()=>{if(!E||!i&&!ie||typeof window>"u")return;const e=Kt.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(jt.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 de=(C>0||I>0)&&c(document.activeElement);e.classList.toggle("chat-thread--keyboard-active",de),de&&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=""}},[i,E,ie]),s.useEffect(()=>{const e=()=>je(null);if($)return document.addEventListener("click",e),()=>document.removeEventListener("click",e)},[$]),s.useEffect(()=>{if(!E||!Ze)return;const e=a=>{a.target?.closest(".chat-messages")||a.preventDefault()};return document.addEventListener("touchmove",e,{passive:!1}),()=>{document.removeEventListener("touchmove",e)}},[E,Ze]),s.useEffect(()=>{const e=Ns.current;if(Ns.current=b,b==="rooms"&&!d.activeRoom){kt.current=null;return}if(!(b==="direct"&&(e===null||e==="rooms"))&&!(b==="rooms"&&(e===null||e==="direct")))return;const h=ge.current;h&&(Pe(h,{force:!0}),me.current=!1,le(!1))},[b,d.activeRoom,Pe]),s.useEffect(()=>{if(!i&&!ie||ie&&!E)return;const e=()=>{const c=!me.current;Rt(),c&&E&&ge.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)}},[E,i,ie,Rt,Ne]),s.useEffect(()=>{if(ie||typeof ResizeObserver>"u")return;const e=ge.current;if(!e)return;const a=new ResizeObserver(()=>{me.current||Pe(e)});return a.observe(e),()=>{a.disconnect()}},[ie,Pe,i?.id,b]),s.useEffect(()=>{Ms.current=P},[P]),s.useEffect(()=>()=>{for(const e of Ms.current)e.previewUrl&&URL.revokeObjectURL(e.previewUrl);for(const e of lt.current.values())window.clearTimeout(e);lt.current.clear()},[]);const At=s.useCallback(e=>{if(!e||e.length===0)return;const a=[];for(const c of Array.from(e)){if(!Va.includes(c.type))continue;const h=c.type.startsWith("image/");a.push({file:c,previewUrl:h?URL.createObjectURL(c):""})}a.length>0&&K(c=>[...c,...a])},[]),Nn=s.useCallback(e=>{K(a=>{const c=a[e];return c?.previewUrl&&URL.revokeObjectURL(c.previewUrl),a.filter((h,C)=>C!==e)})},[]),jn=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&&At(c)},[At]),Mn=s.useCallback(async e=>{try{await U(e),ae(!1),E&&be(!1)}catch{r(o("chat.failedToCreateSession","Failed to create chat session"),"error")}},[U,r,E]),we=s.useCallback(e=>{const a=e??ue.current;if(!a)return;const c=Mt==="tablet"?La:vs;a.style.height="auto",a.style.height=`${za(a.scrollHeight,c)}px`,a.style.overflowY=_a(a.scrollHeight,c)},[Mt]),Es=s.useCallback(e=>{ue.current=e,e&&we(e)},[we]);s.useLayoutEffect(()=>{we()},[b,D,i?.id,d.activeRoom?.id,we]);const st=s.useCallback(()=>{if(Ce(""),pe)try{localStorage.removeItem(pe)}catch{}He(!1),We(""),f(!1),Oe(""),T(-1),K(e=>{for(const a of e)a.previewUrl&&URL.revokeObjectURL(a.previewUrl);return[]})},[pe]),Xt=s.useCallback(()=>{const e=D.trim(),a=P.map(c=>c.file);if(!(!e&&a.length===0||!i)){if(e==="/clear"||e==="/new"){st(),te(),q(),U({agentId:i.agentId,modelProvider:i.modelProvider??void 0,modelId:i.modelId??void 0}).catch(()=>{r(o("chat.failedToClearConversation","Failed to clear conversation"),"error")});return}st(),R(e,a)}},[D,P,i,st,q,te,U,r,R]),Yt=s.useCallback(async()=>{const e=D.trim();if(e){if(m&&b==="rooms"){if(!d.activeRoom)return;if(e==="/clear"||e==="/new"){st();try{await d.clearRoom(d.activeRoom.id)}catch{r(o("chat.failedToClearRoomConversation","Failed to clear room conversation"),"error")}return}if(Gt.current)return;Gt.current=!0;const a=D;st();try{await d.sendRoomMessage(e,{files:P.map(c=>c.file)})}catch(c){if(c instanceof ga){const C=c.message.trim()?c.message:o("chat.messageSentButReplyFailed","Message sent, but assistant reply failed");r(o("chat.messageSentButReplyFailedDetail","Message sent, but assistant reply failed: {{detail}}",{detail:C}),"error");return}Ce(a);const h=c instanceof Error&&c.message.trim()?c.message:o("chat.failedToSendRoomMessage","Failed to send room message");r(h,"error")}finally{Gt.current=!1}return}Xt()}},[D,P,m,b,d,d.clearRoom,st,r,Xt]),Jt=s.useCallback(e=>{Ce(a=>{const c=mn(a);if(!c)return a;const h=`/skill:${e.name} `,C=a.slice(0,c.start)+h+a.slice(c.end);return window.requestAnimationFrame(()=>{ue.current&&(we(ue.current),ue.current.focus())}),C}),He(!1),We(""),Ue(0)},[we]),Tt=s.useCallback(e=>{const a=ue.current;if(!a||G<0)return;const c=a.selectionStart??Je.current,h=a.selectionEnd??c,C=Math.max(c,h),I=Math.min(G,C),ce=`${`@${e.name.replace(/\s+/g,"_")}`} `,De=D.slice(0,I)+ce+D.slice(C),nt=I+ce.length;Ce(De),f(!1),Oe(""),A(0),T(-1),window.requestAnimationFrame(()=>{ue.current&&(we(ue.current),ue.current.focus(),ue.current.setSelectionRange(nt,nt))})},[G,D,we]),ht=s.useCallback((e,a)=>{const h=ue.current?.selectionStart??Je.current,C=D.lastIndexOf("#",h),I=C>=0?C+a.length:e.length;Ce(e),L.dismissMention(),St(!1),window.requestAnimationFrame(()=>{ue.current&&(we(ue.current),ue.current.focus(),ue.current.setSelectionRange(I,I))})},[L,D,we]),Is=s.useCallback(e=>{if(Je.current=e.currentTarget.selectionStart??Je.current,L.mentionActive&&L.combinedItems.length>0){if(L.handleKeyDown(e,D),e.key==="Enter"||e.key==="Tab"){const a=L.combinedItems[L.selectedIndex];a?.kind==="task"?ht(L.selectTask(a.task,D),`#${a.task.id}`):a?.kind==="file"&&ht(L.selectFile(a.file,D),`#${a.file.path}`)}return}if(l&&e.key==="ArrowDown"){e.preventDefault(),Xe.length>0&&A(a=>(a+1)%Xe.length);return}if(l&&e.key==="ArrowUp"){e.preventDefault(),Xe.length>0&&A(a=>a===0?Xe.length-1:a-1);return}if(l&&e.key==="Enter"){e.preventDefault();const a=Xe[x]??Xe[0];a&&Tt(a);return}if(l&&e.key==="Escape"){e.preventDefault(),f(!1),Oe(""),T(-1);return}if(ze&&e.key==="ArrowDown"){e.preventDefault(),xe.length>0&&Ue(a=>(a+1)%xe.length);return}if(ze&&e.key==="ArrowUp"){e.preventDefault(),xe.length>0&&Ue(a=>a===0?xe.length-1:a-1);return}if(ze&&(e.key==="Enter"||e.key==="Tab")&&xe.length>0){e.preventDefault();const a=xe[qe]??xe[0];a&&Jt(a);return}if(ze&&e.key==="Escape"){e.preventDefault(),He(!1);return}e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),Yt())},[l,Xe,x,Tt,ze,xe,qe,Jt,Yt,L,ht,D]),Et=s.useCallback((e,a)=>{const c=Wa(e,a);if(c){f(!0),Oe(c.filter),T(c.start);return}f(!1),Oe(""),T(-1)},[]),Ps=s.useCallback(e=>{const a=e.target,c=a.value,h=a.selectionStart??c.length;we(a),Je.current=h,Ce(c);const C=mn(c);C?(He(!0),We(C.filter)):(He(!1),We("")),Et(c,h),L.detectMention(c,h),St(L.mentionActive),L.mentionActive&&Ot(a)},[Et,we]),It=s.useCallback(e=>{const a=e.currentTarget,c=a.selectionStart??a.value.length;Je.current=c,Et(a.value,c),L.detectMention(a.value,c),St(L.mentionActive),L.mentionActive&&Ot(a)},[Et,L,Ot]),Ds=s.useCallback(e=>{e.key!=="Escape"&&It(e)},[It]),$s=s.useCallback(()=>{typeof window<"u"&&window.innerWidth<=768&&(jt.current=!0,Te.current!==null&&window.clearTimeout(Te.current),Te.current=window.setTimeout(()=>{jt.current=!1,Te.current=null},450),(window.scrollY!==0||window.scrollX!==0)&&window.scrollTo(0,0),Ee.current!==null&&window.clearTimeout(Ee.current),Ee.current=window.setTimeout(()=>{Ee.current=null,document.activeElement?.tagName!=="TEXTAREA"&&(window.scrollY!==0||window.scrollX!==0)&&window.scrollTo(0,0)},350)),Ae.current!==null&&window.clearTimeout(Ae.current),Ae.current=window.setTimeout(()=>{He(!1),f(!1),Oe(""),T(-1),St(!1),L.dismissMention(),Ae.current=null},120)},[L]),Fs=s.useCallback(()=>{jt.current=!1,Te.current!==null&&(window.clearTimeout(Te.current),Te.current=null),Ae.current!==null&&(window.clearTimeout(Ae.current),Ae.current=null),Ee.current!==null&&(window.clearTimeout(Ee.current),Ee.current=null)},[]);s.useEffect(()=>()=>{Te.current!==null&&window.clearTimeout(Te.current),Ee.current!==null&&window.clearTimeout(Ee.current)},[]);const Rn=s.useCallback(async e=>{je(null);try{await _(e),r(o("chat.conversationArchived","Conversation archived"),"success")}catch{r(o("chat.failedToArchiveConversation","Failed to archive conversation"),"error")}},[_,r]),An=s.useCallback(async e=>{Me(null),je(null);try{await M(e),r(o("chat.conversationDeleted","Conversation deleted"),"success")}catch{r(o("chat.failedToDeleteConversation","Failed to delete conversation"),"error")}},[M,r]),ft=s.useCallback(e=>{try{localStorage.setItem(ln,String(e))}catch{}},[]),Tn=s.useCallback(e=>{if(E||ut)return;e.preventDefault(),e.stopPropagation();const a=e.currentTarget;typeof a.setPointerCapture=="function"&&a.setPointerCapture(e.pointerId);const c=e.clientX,h=ve;let C=h;document.body.style.userSelect="none";const I=ce=>{const De=ce.clientX-c,nt=Math.max(Ft,Math.min(Lt,h+De));C=nt,Le(nt),ft(nt)},de=ce=>{typeof a.releasePointerCapture=="function"&&a.releasePointerCapture(ce.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",I),document.removeEventListener("pointerup",de),ft(C)};document.addEventListener("pointermove",I),document.addEventListener("pointerup",de)},[E,ft,ve,ut]),En=s.useCallback(e=>{if(E||ut||e.key!=="ArrowLeft"&&e.key!=="ArrowRight")return;e.preventDefault();const a=e.shiftKey?50:10,c=e.key==="ArrowLeft"?-a:a,h=Math.max(Ft,Math.min(Lt,ve+c));Le(h),ft(h)},[E,ft,ve,ut]),Ls=s.useCallback(e=>{const a=V.find(c=>c.id===e);J("direct",e,a?.lastMessageAt??a?.updatedAt),w(e),Ye(!1),E&&be(!1)},[V,E,J,w]),Qt=s.useCallback(()=>{w(""),be(!0),Ye(!1)},[w]),Zt=s.useCallback(()=>{d.selectRoom(null),be(!0),Ye(!1)},[d]),In=()=>t.jsxs("div",{className:"chat-empty-state",children:[t.jsx(gn,{size:48,strokeWidth:1.5}),t.jsx("h2",{children:o("chat.startNewConversation","Start a new conversation")}),t.jsxs("button",{className:"btn btn-primary",onClick:()=>ae(!0),children:[t.jsx(pt,{size:16}),o("chat.newChat","New Chat")]})]}),es=hn(i,i?.agentId?Se.get(i.agentId)??null:null,_e),Ke=cn(es?.provider,es?.modelId),Ge=es?.provider??null,ts=!!(i||k||v.length>0),Pt=b==="rooms"?ie:!!i,_s=s.useRef(Pt);s.useEffect(()=>{const e=_s.current;_s.current=Pt,E&&(e||!Pt||ws({type:"view",revert:b==="rooms"?Zt:Qt}))},[b,Qt,Zt,Pt,E,ws]);const ss=i?.agentId===at?Ke??"Fusion":i?.title||Se.get(i?.agentId??"")?.name||i?.agentId||"Chat",zs=!!(Ke&&Ke!==ss),Pn=E&&b==="direct"&&!!i,ns=Se.get(i?.agentId??"")?.name||(i?.agentId===at?Ke??"Fusion":i?.agentId?.slice(0,30)??"Fusion"),as=!1,rs=i?.agentId===at,Dn=N.length>50?`${N.slice(0,50)}…`:N,$n=s.useCallback(()=>{B(e=>!e)},[]);s.useEffect(()=>{if(!yt)return;const e=a=>{Ss.current?.contains(a.target)||Ye(!1)};return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[yt]),s.useEffect(()=>{if(!Ct)return;const e=c=>{ks.current?.contains(c.target)||it(!1)},a=c=>{c.key==="Escape"&&it(!1)};return document.addEventListener("mousedown",e),document.addEventListener("keydown",a),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",a)}},[Ct]),s.useEffect(()=>{(!E||b!=="direct"||he)&&Ye(!1)},[E,b,he]),s.useEffect(()=>{it(!1)},[d.activeRoom?.id]);const os=s.useCallback((e,a)=>{const c=lt.current.get(e);c&&window.clearTimeout(c),xs(C=>({...C,[e]:a}));const h=window.setTimeout(()=>{xs(C=>{const{[e]:I,...de}=C;return de}),lt.current.delete(e)},2e3);lt.current.set(e,h)},[]),Hs=s.useCallback(async(e,a)=>{try{if(!navigator.clipboard?.writeText)throw new Error("Clipboard API unavailable");await navigator.clipboard.writeText(a),os(e,"success")}catch{os(e,"error")}},[os]),Fn=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(bn,{remarkPlugins:[vn],components:yn,children:e})}),[]),is=i?.agentId===at,cs=s.useCallback((e,a,c)=>t.jsx("button",{type:"button",className:`btn-icon chat-message-copy-action${fe[e]==="success"?" chat-message-copy-action--success":""}${fe[e]==="error"?" chat-message-copy-action--error":""}`,"data-testid":c??`chat-copy-response-${e}`,"aria-label":fe[e]==="success"?o("chat.responseCopied","Response copied"):fe[e]==="error"?o("chat.copyFailed","Copy failed"):o("chat.copyResponse","Copy response"),onClick:()=>{Hs(e,a)},children:fe[e]==="success"?t.jsx(pa,{size:14}):t.jsx(ba,{size:14})}),[fe,Hs]),ls=s.useCallback(e=>{const a=ge.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"})},[]),Us=i?.cliExecutorAdapterId??null,Ln=!!Us,_n=Us==="generic"?"generic":"hybrid",zn=i?.cliSessionFile||i?.id||"",Os=()=>t.jsxs("div",{className:"chat-messages",ref:ge,onScroll:Ts,children:[t.jsx("div",{ref:Cs,className:"chat-load-more-sentinel",children:ee&&g&&t.jsx("div",{className:"chat-loading-older",children:o("chat.loadingOlderMessages","Loading older messages…")})}),k?t.jsxs(t.Fragment,{children:[v.map(e=>t.jsx(ps,{message:e,forcePlain:O,agentName:ns,hideAssistantIdentity:rs,showAssistantModelTag:as,activeModelTag:Ke,activeModelProvider:Ge,activeSessionId:i?.id??null,mentionAgentsByName:Wt,roomContext:null,copyAction:is&&e.role==="assistant"?cs(e.id,e.content):void 0,onScrollToTop:ls},e.id)),t.jsxs("div",{className:"chat-message chat-message--assistant chat-message--streaming",children:[!rs&&t.jsxs("div",{className:"chat-message-avatar",children:[Ge?t.jsx(bt,{provider:Ge,size:"sm"}):t.jsx(vt,{size:14}),t.jsx("span",{children:ns}),as]}),z?Fn(z,O):t.jsx("div",{className:"chat-message-content chat-message-content--waiting",children:H?o("chat.thinkingStatus","Thinking…"):o("chat.connectingStatus","Connecting…")}),is&&z&&cs("__streaming__",z,"chat-copy-response-streaming"),wn(W,o),H&&t.jsxs("details",{className:"chat-message-thinking",children:[t.jsx("summary",{children:o("chat.thinking","Thinking")}),t.jsx("pre",{className:"chat-message-thinking-content",children:Ht(H)})]}),t.jsxs("div",{className:"chat-typing-indicator",children:[t.jsx("span",{}),t.jsx("span",{}),t.jsx("span",{})]})]})]}):g?t.jsx("div",{className:"chat-empty-state",children:o("chat.loadingMessages","Loading messages...")}):v.length===0&&!i?In():v.length===0&&i?t.jsx("div",{className:"chat-empty-state",children:o("chat.noMessagesYet","No messages yet. Start the conversation!")}):t.jsx(t.Fragment,{children:v.map(e=>t.jsx(ps,{message:e,forcePlain:O,agentName:ns,hideAssistantIdentity:rs,showAssistantModelTag:as,activeModelTag:Ke,activeModelProvider:Ge,activeSessionId:i?.id??null,mentionAgentsByName:Wt,roomContext:null,copyAction:is&&e.role==="assistant"?cs(e.id,e.content):void 0,onScrollToTop:ls},e.id))}),t.jsx("div",{ref:ys})]}),Bs=()=>t.jsxs("div",{className:"chat-input-area",children:[t.jsx("input",{ref:js,type:"file",accept:"image/*,.txt,.json,.yaml,.yml,.log,.csv,.xml,.md",multiple:!0,style:{display:"none"},onChange:e=>{At(e.target.files),e.target.value=""}}),ze&&t.jsx("div",{className:"chat-skill-menu","data-testid":"chat-skill-menu",role:"listbox","aria-label":o("chat.skillSuggestions","Skill suggestions"),children:Ut?t.jsx("div",{className:"chat-skill-menu-empty",children:o("chat.loadingSkills","Loading skills…")}):xe.length===0?t.jsx("div",{className:"chat-skill-menu-empty",children:ot?o("chat.noSkillsFound","No skills found"):o("chat.noSkillsAvailable","No skills available")}):xe.map((e,a)=>t.jsxs("button",{type:"button",role:"option","aria-selected":a===qe,className:`chat-skill-menu-item${a===qe?" chat-skill-menu-item--highlighted":""}`,onMouseDown:c=>c.preventDefault(),onMouseEnter:()=>Ue(a),onClick:()=>Jt(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))}),P.length>0&&t.jsx("div",{className:"chat-attachment-previews","data-testid":"chat-attachment-previews",children:P.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:()=>Nn(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":o("chat.attachFiles","Attach files"),onClick:()=>js.current?.click(),children:t.jsx(ka,{size:16})}),t.jsxs("div",{className:`chat-input-wrapper${Q?" chat-input-wrapper--dragover":""}`,onDragOver:e=>{e.preventDefault(),F(!0)},onDragLeave:()=>F(!1),onDrop:e=>{e.preventDefault(),F(!1),At(e.dataTransfer.files)},children:[t.jsx("textarea",{ref:Es,className:"chat-input-textarea",placeholder:o("chat.typeMessage","Type a message..."),value:D,onChange:Ps,onKeyDown:Is,onKeyUp:Ds,onClick:It,onBlur:$s,onFocus:Fs,onPaste:jn,onTouchStart:e=>{typeof window>"u"||window.innerWidth>768||Js()&&(document.activeElement,e.currentTarget)},rows:1,"data-testid":"chat-input"}),t.jsx(Qs,{agents:et,filter:Re,highlightedIndex:x,visible:l,onSelect:Tt,position:"below",roomMemberIds:Ie?.memberIds,roomName:Ie?.roomName}),t.jsx(Na,{visible:L.mentionActive&&!l,position:Cn,tasks:L.tasks,files:L.files,selectedIndex:L.selectedIndex,onSelectTask:e=>{ht(L.selectTask(e,D),`#${e.id}`)},onSelectFile:e=>{ht(L.selectFile(e,D),`#${e.path}`)},loading:L.loading}),N&&t.jsxs("div",{className:"chat-pending-message","data-testid":"chat-pending-indicator",children:[t.jsx("span",{children:o("chat.queuedMessage","Queued: {{preview}}",{preview:Dn})}),t.jsx("button",{type:"button",className:"chat-pending-message-dismiss","aria-label":o("chat.dismissQueuedMessage","Dismiss queued message"),"data-testid":"chat-pending-dismiss",onClick:te,children:"×"})]})]}),k?t.jsx("button",{className:"chat-input-stop",onClick:q,"aria-label":o("chat.stopGeneration","Stop generation"),"data-testid":"chat-stop-btn",children:t.jsx(ja,{size:14})}):t.jsx("button",{type:"button",className:"chat-input-send",onPointerDown:e=>{e.pointerType&&e.pointerType!=="mouse"&&e.preventDefault()},onMouseDown:e=>{e.preventDefault()},onClick:()=>{Xt()},disabled:!D.trim()&&P.length===0,"data-testid":"chat-send-btn",style:{touchAction:"manipulation"},children:t.jsx(Zs,{size:16})})]})]});return t.jsxs("div",{className:"chat-view",children:[t.jsxs("div",{className:`chat-sidebar${he?"":" chat-sidebar--hidden"}`,style:E?void 0:{width:`${ve}px`},children:[m&&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${b==="direct"?" chat-sidebar-scope-btn--active":""}`,"aria-selected":b==="direct","data-testid":"chat-sidebar-scope-direct",onClick:()=>y("direct"),children:o("chat.scopeDirect","Direct")}),t.jsx("button",{type:"button",role:"tab",className:`chat-sidebar-scope-btn${b==="rooms"?" chat-sidebar-scope-btn--active":""}`,"aria-selected":b==="rooms","data-testid":"chat-sidebar-scope-rooms",onClick:()=>y("rooms"),children:o("chat.scopeRooms","Rooms")})]}),!m||b==="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(va,{size:14,className:"chat-sidebar-search-icon"}),t.jsx("input",{type:"text",className:"chat-sidebar-search",placeholder:o("chat.searchConversations","Search conversations..."),value:S,onChange:e=>ne(e.target.value),"data-testid":"chat-search-input"})]})}),t.jsx("div",{className:"chat-session-list chat-sidebar-list",children:p?t.jsx("div",{className:"chat-empty-state chat-empty-state--padded",children:o("chat.loadingConversations","Loading...")}):V.length===0?t.jsx("div",{className:"chat-empty-state chat-empty-state--padded",children:o("chat.noConversationsYet","No conversations yet")}):V.map(e=>{const a=i?.id===e.id,c=!a&&ye("direct",e.id,e.lastMessageAt??e.updatedAt),h=hn(e,Se.get(e.agentId)??null,_e),C=cn(h?.provider,h?.modelId)??"Fusion";return t.jsxs("div",{className:`chat-session-item${a?" chat-session-item--active":""}`,onClick:()=>Ls(e.id),onContextMenu:I=>{I.preventDefault(),je({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(),Me(e.id)},"data-testid":"chat-session-delete-btn","aria-label":o("chat.deleteConversation","Delete conversation"),children:t.jsx(us,{size:14})}),t.jsxs("div",{className:"chat-session-title",children:[e.title||o("chat.untitledSession","Untitled"),c?t.jsx("span",{className:"chat-unread-dot","data-testid":`chat-unread-dot-${e.id}`,"aria-label":o("chat.unreadMessages","Unread messages")}):null]}),t.jsx("div",{className:"chat-session-preview",children:e.lastMessagePreview||o("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(bt,{provider:h.provider,size:"sm"}):null,t.jsx("span",{children:Se.get(e.agentId)?.name||(e.agentId===at?C:e.agentId.slice(0,30))})]}),t.jsx("span",{children:e.updatedAt?xn(e.updatedAt,o):""})]})]},e.id)})})]}):t.jsxs("div",{className:"chat-sidebar-rooms","data-testid":"chat-sidebar-rooms",children:[!E&&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:()=>re(!0),children:[t.jsx(pt,{size:14}),o("chat.createRoom","Create room")]})}),d.rooms.length===0?t.jsx("div",{className:"chat-sidebar-rooms-empty","data-testid":"chat-sidebar-rooms-empty",children:o("chat.noRoomsYet","No rooms yet.")}):t.jsx("div",{className:"chat-session-list chat-sidebar-list",children:d.rooms.map(e=>{const a=d.activeRoom?.id===e.id,c=!a&&ye("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:()=>{J("room",e.id,e.updatedAt),d.selectRoom(e.id),E&&be(!1)},onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),J("room",e.id,e.updatedAt),d.selectRoom(e.id),E&&be(!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":o("chat.unreadMessages","Unread messages")}):null]}),a?t.jsx("span",{className:"chat-room-item-meta",children:o("chat.roomMemberCount","{{count}} member",{count:d.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":o("chat.deleteRoom","Delete room {{name}}",{name:e.name}),onClick:h=>{h.stopPropagation(),Fe(e.id)},children:t.jsx(us,{size:14})})]},e.id)})})]}),b==="rooms"?E?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:()=>re(!0),children:[t.jsx(pt,{size:14}),o("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:()=>ae(!0),"data-testid":"chat-new-btn",children:[t.jsx(pt,{size:14}),o("chat.newChat","New Chat")]})})]}),!E&&he&&!ut&&t.jsx("div",{className:"chat-sidebar-resize-handle",role:"separator","aria-orientation":"vertical","aria-valuemin":Ft,"aria-valuemax":Lt,"aria-valuenow":ve,"aria-label":o("chat.resizeSidebar","Resize chat sidebar"),tabIndex:0,onPointerDown:Tn,onKeyDown:En}),$&&t.jsxs("div",{className:"chat-session-context-menu",style:{top:$.y,left:$.x},onClick:e=>e.stopPropagation(),children:[t.jsxs("button",{onClick:()=>Rn($.sessionId),"data-testid":"chat-context-archive",children:[t.jsx(xa,{size:14}),o("chat.archive","Archive")]}),t.jsxs("button",{onClick:()=>{je(null),Me($.sessionId)},"data-testid":"chat-context-delete",children:[t.jsx(us,{size:14}),o("chat.delete","Delete")]})]}),Y&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>Me(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{children:o("chat.deleteConversationTitle","Delete Conversation?")}),t.jsx("p",{className:"chat-view-delete-dialog-copy",children:o("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:()=>Me(null),children:o("chat.cancel","Cancel")}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>void An(Y),children:o("chat.delete","Delete")})]})]})}),m&&$e&&t.jsx("div",{className:"chat-new-dialog-backdrop chat-view-dialog-backdrop",onClick:()=>Fe(null),children:t.jsxs("div",{className:"chat-new-dialog chat-view-dialog",onClick:e=>e.stopPropagation(),children:[t.jsx("h3",{children:o("chat.deleteRoomTitle","Delete Room?")}),t.jsx("p",{className:"chat-view-delete-dialog-copy",children:o("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:()=>Fe(null),children:o("chat.cancel","Cancel")}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>{(async()=>{try{await d.deleteRoom($e),Fe(null)}catch{r(o("chat.failedToDeleteRoom","Failed to delete room"),"error")}})()},children:o("chat.delete","Delete")})]})]})}),m&&b==="rooms"?t.jsxs("div",{ref:Kt,className:"chat-thread",children:[d.activeRoom?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"chat-room-thread-header",children:[E&&t.jsx("button",{className:"btn-icon",onClick:Zt,"data-testid":"chat-back-btn",children:t.jsx(Ys,{size:16})}),t.jsxs("div",{className:"chat-room-switcher-menu",ref:ks,children:[t.jsxs("button",{type:"button",className:"chat-room-switcher-trigger","data-testid":"chat-room-switcher-trigger","aria-haspopup":"menu","aria-expanded":Ct,onClick:()=>it(e=>!e),children:[t.jsxs("span",{className:"chat-thread-header-title",children:["#",d.activeRoom.name]}),t.jsx($t,{size:16,"aria-hidden":"true"})]}),Ct&&t.jsx("div",{role:"menu",className:"chat-room-switcher-dropdown","data-testid":"chat-room-switcher-dropdown",children:d.rooms.map(e=>t.jsxs("button",{type:"button",role:"menuitem",className:`chat-room-switcher-option${e.id===d.activeRoom?.id?" chat-room-switcher-option--active":""}`,"data-testid":`chat-room-switcher-option-${e.id}`,onClick:()=>{J("room",e.id,e.updatedAt),d.selectRoom(e.id),it(!1)},children:["#",e.name]},e.id))})]}),t.jsx("div",{className:"chat-room-thread-members",children:d.activeRoomMembers.map(e=>t.jsx(fn,{agent:Se.get(e.agentId)??{id:e.agentId,name:e.agentId.slice(0,30)}},e.agentId))})]}),t.jsxs("div",{className:"chat-messages",ref:ge,onScroll:Ts,children:[d.messagesLoading?t.jsx("div",{className:"chat-empty-state",children:o("chat.loadingMessages","Loading messages...")}):d.messages.filter(e=>e.content.trim()!==on).length===0?t.jsx("div",{className:"chat-empty-state",children:o("chat.noMessagesYet","No messages yet. Start the conversation!")}):d.messages.filter(e=>e.content.trim()!==on).map(e=>{const a=e.senderAgentId?Se.get(e.senderAgentId)?.name??e.senderAgentId.slice(0,30):o("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(ps,{message:c,forcePlain:O,agentName:a,hideAssistantIdentity:!1,showAssistantModelTag:!1,activeModelTag:null,activeModelProvider:null,activeSessionId:d.activeRoom?.id??null,mentionAgentsByName:Wt,roomContext:Ie,onScrollToTop:ls},e.id)}),t.jsx("div",{ref:ys})]}),d.activeRoom&&Z&&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($t,{size:14}),o("chat.latest","Latest")]})]}):t.jsx("div",{className:"chat-room-empty-pane","data-testid":"chat-rooms-empty-pane",children:o("chat.selectRoomOrCreate","Select a room or create one")}),d.activeRoom&&t.jsx("div",{className:"chat-input-area",children:t.jsxs("div",{className:"chat-input-row",children:[t.jsxs("div",{className:"chat-input-wrapper",children:[t.jsx("textarea",{ref:Es,className:"chat-input-textarea",placeholder:o("chat.typeMessage","Type a message..."),value:D,onChange:Ps,onKeyDown:Is,onKeyUp:Ds,onClick:It,onBlur:$s,onFocus:Fs,onTouchStart:e=>{typeof window>"u"||window.innerWidth>768||Js()&&(document.activeElement,e.currentTarget)},rows:1,"data-testid":"chat-input"}),t.jsx(Qs,{agents:et,filter:Re,highlightedIndex:x,visible:l,onSelect:Tt,position:"below",roomMemberIds:Ie?.memberIds,roomName:Ie?.roomName})]}),t.jsx("button",{type:"button",className:"chat-input-send",onPointerDown:e=>{e.pointerType&&e.pointerType!=="mouse"&&e.preventDefault()},onMouseDown:e=>{e.preventDefault()},onClick:()=>{Yt()},disabled:!D.trim(),"data-testid":"chat-send-btn",style:{touchAction:"manipulation"},children:t.jsx(Zs,{size:16})})]})})]}):t.jsxs("div",{ref:Kt,className:"chat-thread",children:[(ts||!E)&&t.jsxs("div",{className:"chat-thread-header",children:[E&&ts&&t.jsx("button",{className:"btn-icon",onClick:Qt,"data-testid":"chat-back-btn",children:t.jsx(Ys,{size:16})}),t.jsx("div",{className:"chat-thread-header-identity","data-testid":"chat-thread-header-identity",children:Pn?t.jsxs("div",{className:"chat-mobile-session-menu",ref:Ss,children:[t.jsxs("button",{type:"button",className:"btn chat-mobile-session-trigger","data-testid":"chat-mobile-session-trigger","aria-haspopup":"menu","aria-expanded":yt,onClick:()=>Ye(e=>!e),children:[Ge?t.jsx(bt,{provider:Ge,size:"md"}):t.jsx(vt,{size:16}),t.jsx("span",{className:"chat-thread-header-title",children:ss}),zs&&t.jsx("span",{className:"chat-model-tag",children:Ke}),t.jsx($t,{size:16,"aria-hidden":"true"})]}),yt&&t.jsx("div",{className:"chat-mobile-session-dropdown",role:"menu","data-testid":"chat-mobile-session-dropdown",children:V.map(e=>t.jsx("button",{type:"button",role:"menuitem",className:`chat-mobile-session-option${i?.id===e.id?" chat-mobile-session-option--active":""}`,"data-testid":`chat-mobile-session-option-${e.id}`,onClick:()=>Ls(e.id),children:t.jsx("span",{className:"chat-mobile-session-option-title",children:e.title||o("chat.untitledSession","Untitled")})},e.id))})]}):t.jsxs(t.Fragment,{children:[Ge?t.jsx(bt,{provider:Ge,size:"md"}):t.jsx(vt,{size:16}),t.jsx("span",{className:"chat-thread-header-title",children:ss}),zs&&t.jsx("span",{className:"chat-model-tag",children:Ke})]})}),ts&&t.jsx("button",{type:"button",className:`chat-thread-header-render-toggle${O?" chat-thread-header-render-toggle--plain":""}`,"data-testid":"chat-thread-render-toggle","aria-label":O?o("chat.showRenderedMarkdown","Show all messages as rendered Markdown"):o("chat.showPlainText","Show all messages as plain text"),onClick:$n,children:O?t.jsx(wa,{size:14}):t.jsx(ya,{size:14})}),!E&&t.jsxs("button",{className:"btn btn-sm btn-primary chat-thread-header-new-chat",onClick:()=>ae(!0),"data-testid":"chat-thread-new-chat-btn",children:[t.jsx(pt,{size:14}),o("chat.newChat","New Chat")]})]}),Ln?t.jsx(Fa,{cliSessionId:zn,tier:_n,projectId:n,renderTranscript:Os,renderComposer:()=>i?Bs():null}):t.jsxs(t.Fragment,{children:[Os(),Z&&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($t,{size:14}),o("chat.latest","Latest")]}),i&&Bs()]})]}),m&&t.jsx($a,{isOpen:wt,onClose:()=>re(!1),projectId:n,existingRoomNames:d.rooms.map(e=>e.name),onCreate:async e=>{await d.createRoom({name:e.name,memberAgentIds:e.memberAgentIds}),b!=="rooms"&&y("rooms"),re(!1),E&&be(!1)}}),ke&&t.jsx(Xa,{projectId:n,defaultModel:_e,onClose:()=>ae(!1),onCreate:Mn})]})}export{nr as ChatView,za as clampChatInputHeight,_a as resolveChatInputOverflowY,hn as resolveSessionProvider};
@@ -1 +0,0 @@
1
- .settings-header-actions{--settings-header-action-height: calc(var(--space-md) * 2 + var(--space-xs) / 2);display:flex;align-items:stretch;gap:var(--space-xs);margin-left:auto;margin-right:var(--space-sm)}.settings-header-actions>.settings-github-star-btn,.settings-header-actions>.settings-header-discord-btn{height:var(--settings-header-action-height);box-sizing:border-box}.settings-header-discord-btn,.settings-footer-help-btn{display:inline-flex;align-items:center}@media(max-width:768px){.settings-modal .modal-header{flex-wrap:nowrap;align-items:center;column-gap:var(--space-sm)}.settings-modal-heading{flex:1 1 0;min-width:0}.settings-header-actions{margin-left:auto;margin-right:var(--space-sm)}}.settings-github-star-btn{display:inline-flex;align-items:stretch;border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-pill);background:var(--card);color:var(--text);font-size:12px;font-weight:500;text-decoration:none;overflow:hidden;transition:border-color var(--transition-fast),background var(--transition-fast)}.settings-github-star-btn:hover{border-color:var(--text-muted);background:var(--card-hover)}.settings-github-star-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);border-color:var(--todo)}.settings-github-star-btn__action{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) calc(var(--space-sm) + var(--space-xs) / 2)}.settings-github-star-btn__count{display:inline-flex;align-items:center;padding:var(--space-xs) calc(var(--space-sm) + var(--space-xs) / 4);border-left:var(--btn-border-width) solid var(--border);background:color-mix(in srgb,var(--surface) 60%,var(--card));color:var(--text-muted);font-variant-numeric:tabular-nums}.settings-modal{width:min(95vw,1100px);max-width:95vw;min-width:520px;height:80vh;min-height:480px;max-height:calc(100dvh - var(--overlay-padding-top, 10vh) - 16px);overflow:hidden;resize:both}@media(max-width:768px){.modal-overlay.settings-modal-overlay,.modal-overlay:has(.settings-modal){padding:0;inset:0;align-items:stretch;justify-content:stretch}.modal.settings-modal{width:100vw;min-width:0;max-width:100vw;height:100dvh;min-height:100dvh;max-height:100dvh;margin:0;border:none;border-radius:0;resize:none;flex:1 1 auto}.modal.settings-modal[style*=--keyboard-overlap]{height:var(--vv-height, 100dvh);min-height:var(--vv-height, 100dvh);max-height:var(--vv-height, 100dvh);transform:translateY(var(--vv-offset-top, 0px));will-change:transform}}.settings-modal-heading{display:flex;flex-direction:column;gap:var(--space-xs)}.settings-modal-heading h3{margin:0}.settings-modal-version{margin:0;font-size:.85rem;color:var(--text-muted);font-weight:500}.settings-modal-footer-version{display:flex;align-items:center;gap:var(--space-xs);margin-right:var(--space-sm);min-width:0}.settings-update-check{display:flex;align-items:center;gap:var(--space-sm);min-width:0}@media(max-width:768px){.settings-modal-footer-version{flex:1 1 100%;margin-right:0}.settings-update-check{flex-wrap:wrap;row-gap:var(--space-xs)}.settings-footer-help-btn{flex-shrink:0}}.settings-version-check-btn{--settings-inline-touch-target: calc(var(--space-lg) + var(--space-lg) + var(--space-xs));display:inline-flex;align-items:center;gap:var(--space-xs);margin:0;min-height:var(--settings-inline-touch-target);padding:var(--space-xs) var(--space-sm);border:none;background:transparent;color:var(--text-muted);cursor:pointer;transition:opacity var(--transition-fast),box-shadow var(--transition-fast)}.settings-version-check-btn:hover:not(:disabled){opacity:.85}.settings-version-check-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);border-radius:var(--radius-sm)}.settings-version-check-btn:disabled{cursor:default;opacity:.7}.settings-version-check-btn svg{color:var(--text-muted)}.settings-version-check-btn svg.spinning{animation:settings-update-spin 1s linear infinite}.settings-update-result{font-size:.85rem;font-weight:500}.settings-update-result--up-to-date{color:var(--color-success)}.settings-update-result--available{color:var(--color-info)}.settings-update-result--error{color:var(--text-muted)}.settings-update-result-link{color:var(--color-info);text-decoration:underline;transition:color var(--transition-fast),box-shadow var(--transition-fast)}.settings-update-result-link:hover{color:color-mix(in srgb,var(--color-info) 80%,var(--text))}.settings-update-result-link:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);border-radius:var(--radius-sm)}@keyframes settings-update-spin{to{transform:rotate(360deg)}}.backup-stats{display:flex;align-items:center;gap:var(--space-lg);padding:var(--space-sm) var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:color-mix(in srgb,var(--surface) 85%,transparent)}.backup-stat{display:flex;flex:1 1 0;flex-direction:column;align-items:center;gap:var(--space-xs);min-width:0}.backup-stat-value{color:var(--text);font-size:1rem;font-weight:600;font-variant-numeric:tabular-nums}.backup-stat-label{color:var(--text-muted);font-size:.75rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase}.backup-list{margin-top:var(--space-sm)}.backup-list summary{padding:var(--space-sm) 0;color:var(--text-muted);cursor:pointer;transition:color var(--transition-fast)}.backup-list summary:hover{color:var(--text)}.backup-list summary:focus-visible{outline:none;border-radius:var(--radius-sm);box-shadow:var(--focus-ring-strong)}.backup-list ul{display:flex;flex-direction:column;gap:var(--space-xs);margin:0;margin-top:var(--space-sm);padding:0;list-style:none}.backup-list li{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm) 0;border-top:var(--btn-border-width) solid color-mix(in srgb,var(--border) 80%,transparent)}.backup-list li code{min-width:0;color:var(--text);font-family:var(--font-mono);font-size:.75rem;white-space:nowrap;overflow-x:auto}.backup-size{color:var(--text-muted);font-family:var(--font-mono);font-size:.75rem;text-align:right;white-space:nowrap}@media(max-width:768px){.backup-stats{flex-direction:column;align-items:stretch;gap:var(--space-sm)}.backup-stat{align-items:flex-start}.backup-list ul{max-height:calc(var(--space-xl) * 9 + var(--space-md));overflow-y:auto;-webkit-overflow-scrolling:touch}.backup-list li code{white-space:normal;overflow-wrap:anywhere;word-break:normal}}.settings-layout{display:flex;flex:1;flex-direction:row;min-height:0;overflow:hidden}.settings-mobile-section-picker{display:none}.settings-sidebar{width:170px;min-width:170px;border-right:1px solid var(--border);display:flex;flex-direction:column;overflow-y:auto;padding:var(--space-sm) var(--space-sm);gap:calc(var(--space-xs) / 2);background:color-mix(in srgb,var(--text) 10%,transparent);scrollbar-color:var(--border) transparent;scrollbar-width:thin}.settings-sidebar::-webkit-scrollbar{width:6px}.settings-sidebar::-webkit-scrollbar-track{background:transparent}.settings-sidebar::-webkit-scrollbar-thumb{background:var(--border);border-radius:var(--radius-sm)}.settings-sidebar::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.settings-research-source-locked{cursor:default;color:var(--text-muted)!important}.settings-research-source-locked input[type=checkbox]{cursor:not-allowed}.settings-research-source-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm);min-width:0}.settings-research-source-grid>*{min-width:0}.settings-research-limits-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-sm);min-width:0}.settings-research-limits-grid>*{min-width:0}.settings-research-limit-field{display:flex;flex-direction:column;gap:var(--space-xs);min-width:0}.settings-research-limits-error{grid-column:1 / -1}@media(max-width:768px){.settings-research-source-grid,.settings-research-limits-grid{grid-template-columns:1fr}}.settings-nav-item{display:block;width:100%;padding:var(--space-sm) var(--space-md);font-size:13px;font-weight:500;color:var(--text-muted);background:none;border:none;border-left:3px solid transparent;border-radius:0 var(--radius-md) var(--radius-md) 0;cursor:pointer;text-align:left;transition:background var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast)}.settings-nav-item:hover{background:var(--bg);color:var(--text);border-left-color:var(--border)}.settings-nav-item:focus-visible{box-shadow:var(--focus-ring-strong);outline:none}.settings-nav-item.active{background:var(--bg);color:var(--todo);font-weight:600;border-left-color:var(--todo)}.settings-group-header{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);padding:var(--space-md) var(--space-md) var(--space-xs);margin-top:var(--space-sm);user-select:none}.settings-group-header:first-child{margin-top:0}.settings-content{flex:1;overflow-x:hidden;overflow-y:auto;padding:4px 0 12px;scrollbar-color:var(--border) transparent;scrollbar-width:thin}.settings-content::-webkit-scrollbar{width:6px}.settings-content::-webkit-scrollbar-track{background:transparent}.settings-content::-webkit-scrollbar-thumb{background:var(--border);border-radius:var(--radius-sm)}.settings-content::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}.settings-content>*{animation:settingsFadeIn var(--duration-normal) ease}@keyframes settingsFadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.settings-section-heading{font-size:14px;font-weight:600;padding:var(--space-lg) var(--space-xl) var(--space-md);margin:0 0 var(--space-md);color:var(--text);border-bottom:1px solid var(--border)}.settings-content>.settings-section-heading:first-child,.settings-modal-section>.settings-section-heading:first-child{padding-top:var(--space-md)}.settings-section-heading--spaced{margin-top:var(--space-lg)}.settings-section-description{margin:0;padding:0 var(--space-xl);margin-bottom:var(--space-sm);color:var(--text-muted);font-size:13px;line-height:1.5}.settings-plugins-subsection-toggle{display:inline-flex;gap:var(--space-xs);padding:0 var(--space-xl);margin:var(--space-md) 0}.settings-plugins-subsection-btn{display:inline-flex;align-items:center;justify-content:center;border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-pill);background:var(--surface);color:var(--text-muted);font-size:.85rem;font-weight:600;padding:var(--space-xs) var(--space-md);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast),box-shadow var(--transition-fast)}.settings-plugins-subsection-btn:hover{background:var(--surface-hover, color-mix(in srgb, var(--text) 6%, transparent));color:var(--text)}.settings-plugins-subsection-btn:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.settings-plugins-subsection-btn.active{background:color-mix(in srgb,var(--todo) 14%,transparent);border-color:color-mix(in srgb,var(--todo) 45%,var(--border));color:var(--todo)}.settings-plugins-subsection-panel{padding-bottom:var(--space-md)}.settings-scope-icon{margin-right:6px;display:inline-flex;vertical-align:middle;color:var(--text-muted)}.settings-scope-banner{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-xl);margin:0 var(--space-xl) var(--space-xs);font-size:12px;border-radius:var(--radius-md);color:var(--text-muted)}.settings-scope-global{background:color-mix(in srgb,var(--color-info) 8%,transparent);border-left:3px solid color-mix(in srgb,var(--color-info) 40%,transparent)}.settings-scope-project{background:color-mix(in srgb,var(--color-success) 8%,transparent);border-left:3px solid color-mix(in srgb,var(--color-success) 40%,transparent)}.settings-scope-mixed{background:color-mix(in srgb,var(--triage) 8%,transparent);border-left:3px solid color-mix(in srgb,var(--triage) 40%,transparent)}.settings-note{display:block;padding:0 var(--space-xl);margin-top:var(--space-xs);font-size:12px;color:var(--text-muted)}.form-inline-group{display:flex;align-items:center;gap:var(--space-sm)}.form-inline-group .input{flex:1;min-width:0}.btn-link{background:none;border:none;padding:0;font-size:12px;color:var(--accent, #4a90e2);cursor:pointer;text-decoration:underline;white-space:nowrap}.btn-link:hover{text-decoration:none}.settings-overlap-ignore-group code{font-family:var(--font-mono);font-size:.9em}.settings-button-row{display:flex;flex-wrap:wrap;gap:var(--space-sm);margin-top:var(--space-sm)}.settings-raw-output{margin:var(--space-sm) 0 0;padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-muted);max-height:calc(var(--space-2xl) * 7);overflow:auto;font-family:var(--font-mono);font-size:calc(var(--space-sm) + var(--space-xs))}.settings-url-output{display:block;margin-top:var(--space-xs);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-muted);font-family:var(--font-mono);font-size:calc(var(--space-sm) + var(--space-xs));overflow-wrap:anywhere;word-break:break-word;overflow-x:auto;max-width:100%}.settings-qr-preview{margin-top:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-sm)}.settings-qr-preview-label{margin:0;font-size:calc(var(--space-sm) + var(--space-xs));color:var(--text-muted)}.settings-qr-preview-image-wrap{width:fit-content;max-width:100%;padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--card)}.settings-qr-preview-image{display:block;width:min(calc(var(--space-2xl) * 6),100%);height:auto;aspect-ratio:1 / 1}.remote-provider-selector{display:flex;gap:var(--space-xs);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);padding:var(--space-xs);background:var(--surface)}.remote-provider-option{position:relative;flex:1;cursor:pointer}.remote-provider-option input{position:absolute;opacity:0;width:0;height:0}.remote-provider-option span{display:block;padding:var(--space-sm) var(--space-md);text-align:center;border-radius:var(--radius-sm);border:var(--btn-border-width) solid transparent;color:var(--text-muted);transition:background var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast)}.remote-provider-option-content{display:inline-flex;align-items:center;gap:var(--space-xs)}.remote-provider-option input:checked+span{background:var(--card);color:var(--text);border-color:var(--border)}.remote-provider-option input:focus-visible+span{box-shadow:var(--focus-ring-strong)}.remote-status-bar{--status-color: var(--text-muted);display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);margin:0 var(--space-xl) var(--space-md);background:color-mix(in srgb,var(--status-color) 10%,transparent)}.remote-status-bar--running{--status-color: var(--color-success)}.remote-status-bar--starting{--status-color: var(--color-warning)}.remote-status-bar--error{--status-color: var(--color-error)}.remote-status-bar--stopped{--status-color: var(--text-muted)}.remote-share-block{display:flex;flex-direction:column;gap:var(--space-sm);margin:0 var(--space-xl) var(--space-md);padding:var(--space-sm) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:color-mix(in srgb,var(--text-muted) 5%,transparent)}.remote-share-row{display:flex;flex-direction:column;gap:var(--space-xs)}.remote-share-row .settings-qr-preview-image{margin-top:var(--space-xs)}.remote-status-dot{width:var(--space-sm);height:var(--space-sm);border-radius:50%;display:inline-block;flex-shrink:0}.remote-status-dot--running{background:var(--color-success)}.remote-status-dot--starting{background:var(--color-warning)}.remote-status-dot--error{background:var(--color-error)}.remote-status-dot--stopped{background:var(--text-muted)}.remote-status-url{margin-left:auto;font-family:var(--font-mono);overflow-wrap:anywhere;word-break:break-word;user-select:all}.remote-provider-settings{display:flex;flex-direction:column;gap:var(--space-sm)}.remote-cli-detection{display:flex;align-items:flex-start;gap:var(--space-sm);margin:0 var(--space-xl) var(--space-md);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm)}.remote-cli-detection--available{background:color-mix(in srgb,var(--color-success) 10%,transparent);color:var(--color-success)}.remote-cli-detection--missing{background:color-mix(in srgb,var(--color-warning) 10%,transparent);color:var(--color-warning)}.remote-cli-detection-content{display:flex;flex-direction:column;gap:var(--space-xs);color:var(--text)}.remote-cli-detection .btn{align-self:flex-start}.remote-cli-install-error{color:var(--color-error)}.remote-cli-manual{color:var(--text-dim)}.remote-external-tunnel-panel{display:flex;flex-direction:column;gap:var(--space-sm);margin:0 var(--space-xl) var(--space-md);padding:var(--space-sm) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:color-mix(in srgb,var(--color-info) 10%,transparent)}.remote-external-tunnel-header{display:flex;align-items:center;gap:var(--space-sm);color:var(--color-info)}.remote-external-tunnel-qr{display:flex;flex-direction:column;gap:var(--space-xs)}.remote-external-tunnel-actions{display:flex;flex-direction:column;gap:var(--space-sm)}.remote-advanced-details{margin:var(--space-lg) var(--space-xl) 0;border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);padding:var(--space-md);background:var(--surface)}.remote-advanced-details>summary{cursor:pointer;color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));list-style:none}.remote-advanced-details>summary::-webkit-details-marker{display:none}.remote-advanced-details>summary:before{content:"▸";margin-right:var(--space-xs)}.remote-advanced-details[open]>summary:before{content:"▾"}.settings-option-details{margin-top:var(--space-xs)}.settings-research-provider-group{display:flex;flex-direction:column;gap:var(--space-sm);min-width:0}.settings-research-provider-advanced-details{min-width:0;padding-inline-start:var(--space-md)}.settings-research-provider-advanced-body{display:flex;flex-direction:column;gap:var(--space-sm);min-width:0;padding-top:var(--space-sm)}.settings-research-provider-advanced-body>.form-group{margin-top:0;padding:0;min-width:0}.settings-research-provider-advanced-body .input{width:100%;min-width:0}.settings-research-empty-state{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-sm);min-width:0}@media(max-width:768px){.settings-research-provider-advanced-details{padding-inline-start:0}}.settings-option-details>summary{cursor:pointer;color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));list-style:none}.settings-option-details>summary::-webkit-details-marker{display:none}.settings-option-details>summary:before{content:"▸";margin-right:var(--space-xs)}.settings-option-details[open]>summary:before{content:"▾"}.remote-cf-advanced-details{margin-top:var(--space-xs)}.remote-cf-advanced-details>summary{cursor:pointer;color:var(--text-muted);font-size:calc(var(--space-sm) + var(--space-xs));list-style:none}.remote-cf-advanced-details>summary::-webkit-details-marker{display:none}.remote-cf-advanced-details>summary:before{content:"▸";margin-right:var(--space-xs)}.remote-cf-advanced-details[open]>summary:before{content:"▾"}.remote-cf-advanced-fields{display:flex;flex-direction:column;gap:var(--space-sm);margin-top:var(--space-sm)}.remote-tunnel-actions{margin-top:var(--space-md)}.remote-tunnel-actions .btn{width:100%}.settings-overlap-ignore-list{display:flex;flex-direction:column;gap:var(--space-sm);margin:var(--space-sm) 0}.settings-overlap-ignore-row,.settings-overlap-ignore-path-controls{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--space-sm);align-items:center}.settings-overlap-path-picker-modal{max-width:min(960px,calc(100vw - var(--space-2xl)))}.settings-overlap-path-picker-body{display:flex;flex-direction:column;gap:var(--space-sm);max-height:min(70vh,720px)}.settings-overlap-path-picker-note{margin:0;font-size:12px;color:var(--text-muted)}.settings-section-divider{border-top:1px solid var(--border);margin:var(--space-lg) var(--space-xl)}@media(max-width:768px){.settings-note{padding:0 var(--space-lg)}.settings-overlap-ignore-row,.settings-overlap-ignore-path-controls{grid-template-columns:minmax(0,1fr)}.settings-overlap-ignore-row>.btn{justify-self:start}.settings-overlap-path-picker-modal{max-width:calc(100vw - var(--space-md))}.remote-provider-selector{flex-direction:column}.remote-status-bar{flex-wrap:wrap;margin:0 var(--space-lg) var(--space-md)}.remote-share-block{margin:0 var(--space-lg) var(--space-md)}.remote-status-url{width:100%;margin-left:0;font-size:.8em}.remote-provider-option,.remote-tunnel-actions .btn{min-height:36px}.remote-cli-detection,.remote-external-tunnel-panel{margin:0 var(--space-lg) var(--space-md)}}.ntfy-advanced-disclosure{margin-top:var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.ntfy-advanced-disclosure>summary{cursor:pointer;list-style:none;padding:var(--space-sm) var(--space-md);font-size:12px;font-weight:600;color:var(--text)}.ntfy-advanced-disclosure>summary::-webkit-details-marker{display:none}.ntfy-advanced-content{padding:0 var(--space-md) var(--space-md);display:flex;flex-direction:column;gap:var(--space-sm)}.settings-inline-link{color:var(--todo);text-decoration:none;transition:text-decoration var(--transition-fast)}.settings-inline-link:hover{text-decoration:underline}.settings-inline-link:focus-visible{outline:none;box-shadow:var(--focus-ring-strong);border-radius:var(--radius-sm)}.notification-provider-card{border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-lg);background:var(--surface);margin:0 var(--space-xl) var(--space-lg);overflow:hidden}.notification-provider-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-md) var(--space-lg);border-bottom:var(--btn-border-width) solid var(--border)}.notification-provider-body{padding:var(--space-lg);display:flex;flex-direction:column;gap:var(--space-lg)}.notification-provider-actions{display:flex;flex-wrap:wrap;gap:var(--space-sm);padding-top:var(--space-md);border-top:var(--btn-border-width) solid var(--border);margin-top:var(--space-md)}.notification-test-feedback{display:flex;flex-direction:column;gap:var(--space-xs);margin-top:var(--space-sm)}.notification-test-feedback-item{border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-sm);padding:var(--space-xs) var(--space-sm)}.notification-test-feedback-item--success{border-color:color-mix(in srgb,var(--color-success) 45%,var(--border));background:color-mix(in srgb,var(--color-success) 8%,transparent);color:var(--color-success)}.notification-test-feedback-item--error{border-color:color-mix(in srgb,var(--color-error) 45%,var(--border));background:color-mix(in srgb,var(--color-error) 8%,transparent);color:var(--color-error)}@media(max-width:768px){.notification-provider-actions{flex-direction:column}.notification-provider-actions .btn{width:100%}}.memory-status-message{display:flex;gap:var(--space-md);align-items:center;justify-content:space-between;margin-bottom:var(--space-md)}.memory-status-message span{min-width:0}.memory-retrieval-test{margin-top:var(--space-lg)}.memory-test-result{margin:0 var(--space-xl) var(--space-lg);padding:var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:var(--card)}.memory-test-result strong,.memory-test-result span{color:var(--text);font-size:12px}.memory-test-result small{display:block;margin-top:var(--space-xs);color:var(--text-muted);font-size:12px}.memory-test-result ul{margin:var(--space-md) 0 0;padding:0;list-style:none}.memory-test-result li{padding-top:var(--space-sm);border-top:var(--btn-border-width) solid var(--border)}.memory-test-result li+li{margin-top:var(--space-sm)}.memory-test-result p{margin:var(--space-xs) 0 0;color:var(--text-muted);font-size:12px;line-height:1.5;overflow-wrap:anywhere}.memory-editor-section{margin-top:var(--space-lg);display:flex;flex:1 1 auto;flex-direction:column;min-height:0}.memory-editor-form-group{display:flex;flex:1 1 auto;flex-direction:column;min-height:0}.memory-file-summary{display:grid;grid-template-columns:auto minmax(0,1fr);gap:var(--space-xs) var(--space-md);align-items:center;margin:0 var(--space-xl) var(--space-md);padding:var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:var(--card)}.memory-file-summary span{display:inline-flex;align-items:center;justify-content:center;padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-pill);color:var(--color-info);background:color-mix(in srgb,var(--color-info) 12%,transparent);font-size:11px;font-weight:600}.memory-file-summary strong{min-width:0;overflow-wrap:anywhere;color:var(--text);font-family:var(--font-mono);font-size:12px}.memory-file-summary small{grid-column:2;color:var(--text-muted);font-size:12px}.memory-editor-frame{min-height:50vh;border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);overflow:hidden;display:flex;flex:1 1 auto;flex-direction:column;min-width:0}.auth-panel-body{padding-inline:var(--space-md)}.auth-section-hint{padding:var(--space-md) var(--space-lg);margin-bottom:var(--space-md);background:var(--bg-tertiary);border-radius:var(--radius-md);font-size:13px;color:var(--text-muted);border-left:3px solid var(--text-muted)}.auth-provider-group{margin-bottom:calc(var(--space-sm) + var(--space-xs) / 2)}.auth-group-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted);margin-bottom:var(--space-xs);padding:0 4px}.auth-provider-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);margin-bottom:var(--space-xs);overflow:hidden;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.auth-provider-card:hover{border-color:var(--text-dim)}.auth-provider-card--authenticated{border-color:color-mix(in srgb,var(--color-success) 40%,var(--border));background:color-mix(in srgb,var(--color-success) 5%,var(--surface))}.auth-provider-card--authenticated:hover{border-color:color-mix(in srgb,var(--color-success) 60%,var(--border))}.auth-provider-header{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--space-sm) var(--space-md);gap:12px}.auth-provider-info{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex:1;min-width:0}.auth-provider-info strong{font-weight:500;color:var(--text)}.auth-provider-icon-slot{display:inline-flex;align-items:center;justify-content:center;inline-size:calc(var(--space-md) + var(--space-xs) * 2);block-size:calc(var(--space-md) + var(--space-xs) * 2);flex-shrink:0}.auth-provider-icon-slot .provider-icon{display:inline-flex}.auth-hint{display:block;padding:12px 4px 0;font-size:12px;color:var(--text-muted);border-top:1px solid var(--border);margin-top:8px}.auth-apikey-section{display:flex;flex-direction:column;gap:var(--space-xs);align-items:flex-end;flex-shrink:0}.auth-apikey-input-row{display:flex;gap:6px;align-items:center}.auth-apikey-input{background:var(--bg-input);border:1px solid var(--border);border-radius:6px;color:var(--text);padding:6px 10px;font-size:13px;width:180px;font-family:monospace}.auth-apikey-input:focus{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring)}.auth-apikey-input:disabled{opacity:.6}.auth-apikey-progress{font-size:calc(var(--space-sm) + var(--space-xs) * .75);color:var(--text-muted);padding-right:4px}.auth-apikey-error{font-size:11px;color:var(--color-error);padding-right:4px}.auth-provider-actions-row{display:flex;width:100%;align-items:center;gap:var(--space-sm)}.auth-device-code-panel{width:100%;margin-top:var(--space-sm);padding:var(--space-sm);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:color-mix(in srgb,var(--surface) 85%,transparent);display:flex;flex-direction:column;gap:var(--space-sm)}.auth-device-code-pill{font-family:var(--font-mono);font-size:calc(var(--space-md) + var(--space-xs) * .5);letter-spacing:var(--space-xs);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-pill);border:var(--btn-border-width) solid var(--border);background:var(--card);color:var(--text);display:flex;align-self:stretch}.auth-key-hint{font-family:var(--font-mono);font-size:12px;color:var(--text-muted);display:inline-block;margin-top:var(--space-xs);user-select:none}.settings-lane-badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:500;white-space:nowrap}.settings-lane-badge--override{background-color:color-mix(in srgb,var(--todo) 20%,transparent);color:var(--todo)}.settings-lane-badge--inherited{background-color:color-mix(in srgb,var(--text-muted) 15%,transparent);color:var(--text-muted)}.settings-description{font-size:13px;color:var(--text-dim);padding-inline:var(--space-xl);margin-block:0 var(--space-md);line-height:1.5}.settings-token-cap-row{display:flex;align-items:center;gap:var(--space-sm)}.settings-model-lane-label-row{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-xs)}.settings-model-lane-control-row{display:flex;align-items:center;gap:var(--space-sm)}.settings-model-lane-control-main{flex:1}.settings-model-lane-actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-sm);padding:var(--space-md) var(--space-xl) var(--space-lg);margin-block:var(--space-sm) var(--space-lg);border-bottom:var(--btn-border-width) solid var(--border)}.settings-error{color:var(--color-error)}.settings-summarization-actions{justify-content:flex-start}.settings-model-presets{display:flex;flex-direction:column;gap:var(--space-md)}.settings-preset-list{display:flex;flex-direction:column;gap:var(--space-sm)}.settings-preset-item{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);padding:var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:var(--card)}.settings-preset-item-meta{display:flex;flex-direction:column;gap:var(--space-xs);min-width:0}.settings-preset-item-meta strong{color:var(--text);overflow-wrap:anywhere}.settings-preset-summary{font-size:12px;overflow-wrap:anywhere}.settings-preset-item-actions{display:flex;gap:var(--space-xs);flex-wrap:wrap;justify-content:flex-end}.settings-preset-actions{display:flex;justify-content:flex-start}.settings-preset-editor{display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-md);border:var(--btn-border-width) solid var(--border);border-radius:var(--radius-md);background:color-mix(in srgb,var(--surface) 85%,var(--card))}.settings-preset-editor-fields{display:flex;flex-direction:column;gap:var(--space-sm)}.settings-preset-editor .form-group{padding:0}.settings-preset-editor-actions{justify-content:flex-start;margin-top:0;padding:0}.settings-preset-auto-select{margin-top:var(--space-sm)}.settings-preset-size-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-sm)}.settings-preset-size-row{padding:0}@media(max-width:768px){.settings-layout{flex-direction:column;min-height:0}.settings-mobile-section-picker{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-md) var(--space-lg);border-bottom:var(--btn-border-width) solid var(--border);background:var(--surface)}.settings-mobile-section-picker label{color:var(--text-muted);font-weight:600;text-transform:uppercase}.settings-mobile-section-picker select{width:100%}.settings-mobile-section-picker select:focus-visible{outline:none;border-color:var(--todo);box-shadow:var(--focus-ring-strong)}.settings-sidebar{display:none}.settings-nav-item{display:flex;align-items:center;justify-content:center;gap:var(--space-xs);border-left:none;border-bottom:2px solid transparent;border-radius:var(--radius-md) var(--radius-md) 0 0;padding:calc(var(--space-xs) + var(--space-xs) / 2) var(--space-md);white-space:nowrap}.settings-nav-item:hover{border-left-color:transparent;border-bottom-color:var(--border)}.settings-nav-item.active{border-left-color:transparent;border-bottom-color:var(--todo)}.settings-group-header{display:none}.notification-provider-card{margin:0 var(--space-lg) var(--space-md)}.notification-provider-header{padding:var(--space-sm) var(--space-md)}.notification-provider-body{padding:var(--space-md)}.settings-scope-icon{margin-right:0}.settings-content{flex:1;min-height:0;overflow-x:hidden;overflow-y:auto}.settings-content .form-group small{overflow-wrap:break-word;word-break:normal}.settings-content input,.settings-content select,.settings-content textarea{font-size:16px}.settings-section-heading{padding:var(--space-lg) var(--space-lg) var(--space-md);margin:0 0 var(--space-md)}.settings-plugins-subsection-toggle{display:flex;width:100%;padding:0 var(--space-lg)}.settings-plugins-subsection-btn{flex:1;min-height:36px}.settings-plugins-subsection-panel{padding-left:var(--space-lg);padding-right:var(--space-lg)}.form-group{padding:0 calc(var(--space-md) + var(--space-xs) / 2)}.settings-scope-banner{padding:var(--space-sm) var(--space-lg)}.memory-editor-frame{min-height:65vh}.memory-file-summary{grid-template-columns:1fr;margin:0 var(--space-lg) var(--space-md)}.memory-status-message{align-items:stretch;flex-direction:column}.memory-file-summary span{justify-content:flex-start}.memory-file-summary small{grid-column:auto}.settings-description{padding:0 var(--space-lg)}.settings-model-lane-actions{align-items:stretch;flex-direction:column;padding-inline:calc(var(--space-md) + var(--space-xs) / 2)}.settings-content .btn,.settings-preset-item-actions .btn{min-height:36px}.auth-provider-row{flex-wrap:wrap;padding:var(--space-md) calc(var(--space-md) + var(--space-xs) / 2);gap:var(--space-sm)}.auth-section-hint{margin:0 calc(var(--space-md) + var(--space-xs) / 2) var(--space-md);padding:calc(var(--space-sm) + var(--space-xs) / 2) calc(var(--space-md) + var(--space-xs) / 2)}.auth-provider-group{margin-bottom:var(--space-md)}.auth-group-label{padding:0 calc(var(--space-md) + var(--space-xs) / 2)}.auth-provider-card{margin:0 calc(var(--space-md) + var(--space-xs) / 2) var(--space-sm)}.auth-provider-header{flex-wrap:wrap;padding:calc(var(--space-sm) + var(--space-xs) / 2) calc(var(--space-md) + var(--space-xs) / 2);gap:10px}.auth-provider-header>div:not(.auth-provider-info):not(.auth-apikey-section){margin-left:auto}.auth-provider-actions-row{width:100%;justify-content:flex-end}.auth-device-code-panel{width:100%}.auth-device-code-pill{max-width:100%;overflow-wrap:anywhere}.auth-provider-info{width:100%;flex-basis:100%}.auth-apikey-section{width:100%;flex-basis:100%;align-items:flex-end}.auth-apikey-input-row{width:100%;flex-wrap:wrap;justify-content:flex-end}.auth-apikey-input{flex:1;min-width:120px;width:auto}.auth-apikey-input-row .btn{flex-shrink:0;margin-left:auto}.auth-hint{padding:var(--space-md) calc(var(--space-md) + var(--space-xs) / 2) 0}.settings-model-presets{gap:var(--space-sm)}.settings-preset-item{flex-direction:column;align-items:stretch;padding:var(--space-sm) var(--space-md)}.settings-preset-item-actions{justify-content:flex-start}.settings-preset-editor{padding:var(--space-sm) var(--space-md)}.settings-preset-editor-actions{flex-wrap:wrap}.settings-preset-size-grid{grid-template-columns:1fr;gap:var(--space-xs)}.settings-node-routing-note{padding:var(--space-sm) var(--space-md);font-size:12px}}.settings-node-routing-note{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-md) var(--space-lg);margin-top:var(--space-sm);color:var(--text-muted);font-size:13px;line-height:1.5}.settings-node-status{display:inline-flex;align-items:center;gap:var(--space-xs);margin-top:var(--space-sm);font-size:12px;color:var(--text-muted)}.auth-advanced-disclosure{margin-top:var(--space-md);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface)}.auth-advanced-disclosure>summary{cursor:pointer;padding:var(--space-sm) var(--space-md)}.auth-advanced-content{display:flex;flex-direction:column;gap:var(--space-sm);padding:0 var(--space-md) var(--space-md)}.auth-custom-provider-item{display:flex;justify-content:space-between;align-items:center;gap:var(--space-sm)}.auth-custom-provider-actions{display:flex;gap:var(--space-sm)}.settings-warning-banner{margin-top:var(--space-sm);padding:var(--space-sm) var(--space-md);border:1px solid var(--color-warning);border-radius:var(--radius-md);background:color-mix(in srgb,var(--color-warning) 12%,transparent);color:var(--text);font-size:var(--font-sm, .875rem);line-height:1.4}.settings-warning-banner strong{color:var(--color-warning);margin-right:var(--space-xs)}.settings-sync-workflow-note{margin-top:var(--space-md);font-size:var(--font-size-sm);color:var(--text-muted)}@media(max-width:768px){.auth-custom-provider-item{flex-direction:column;align-items:flex-start}.settings-warning-banner{padding:var(--space-sm)}}
@@ -1 +0,0 @@
1
- .wf-editor-modal{--wf-editor-touch-target: calc(var(--space-xl) + var(--space-lg) + var(--space-xs));display:flex;flex-direction:column;width:min(1200px,95vw);height:min(820px,92vh);min-width:640px;min-height:480px;resize:both;overflow:hidden;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-md)}.wf-create-modal{--wf-editor-touch-target: calc(var(--space-xl) + var(--space-lg) + var(--space-xs))}.wf-editor-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-md);border-bottom:1px solid var(--border)}.wf-editor-header h2{margin:0;font-size:1rem;color:var(--text)}.wf-editor-close{display:inline-flex;align-items:center;background:transparent;border:none;color:var(--text-muted);cursor:pointer}.wf-migration-notice{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--accent-subtle, color-mix(in srgb, #3b82f6 12%, transparent));border-bottom:1px solid var(--border);color:var(--text);font-size:.85rem}.wf-migration-notice-text{flex:1}.wf-migration-notice-dismiss{display:inline-flex;align-items:center;background:transparent;border:none;color:var(--text-muted);cursor:pointer;flex-shrink:0}.wf-migration-notice-dismiss:hover,.wf-editor-close:hover{color:var(--text)}.wf-editor-body{display:flex;flex:1;min-width:0;min-height:0}.wf-editor-sidebar{display:flex;flex-direction:column;gap:var(--space-xs);width:300px;min-width:0;padding:var(--space-sm);border-right:1px solid var(--border);overflow-x:hidden;overflow-y:auto}.wf-sidebar-panels{display:flex;flex-direction:column;gap:var(--space-xs);min-width:0;margin-top:var(--space-sm);padding-top:var(--space-sm);border-top:1px solid var(--border)}.wf-sidebar-section{display:flex;flex-direction:column;gap:var(--space-xs);min-width:0}.wf-sidebar-section-toggle{display:flex;align-items:center;gap:var(--space-xs);width:100%;min-width:0;padding:var(--space-xs) var(--space-sm);background:transparent;border:none;border-radius:var(--radius-sm);color:var(--text);font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;cursor:pointer}.wf-sidebar-section-toggle:hover{background:var(--bg-secondary)}.wf-sidebar-section .wf-column-panel,.wf-sidebar-section .wf-fields-panel{width:auto;min-width:0;padding:0 var(--space-xs) var(--space-xs);border-left:none;overflow-y:visible}.wf-sidebar-section .wf-column-panel-header h3,.wf-sidebar-section .wf-fields-panel-header h3{display:none}.wf-sidebar-section .wf-column-panel-header,.wf-sidebar-section .wf-fields-panel-header{justify-content:flex-end}.wf-editor-new{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);cursor:pointer}.wf-editor-new:hover{background:var(--bg-tertiary)}.wf-editor-import{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);cursor:pointer}.wf-editor-import:hover{background:var(--bg-tertiary)}.wf-editor-import:disabled{opacity:.6;cursor:default}.wf-editor-import-error{padding:var(--space-xs) var(--space-sm);background:color-mix(in srgb,var(--ws-error) 8%,var(--bg-secondary));border:1px solid var(--ws-error);border-radius:var(--radius-sm);color:var(--ws-error);font-size:.8rem}.wf-editor-import-warnings{padding:var(--space-xs) var(--space-sm);background:color-mix(in srgb,var(--ws-warning) 8%,var(--bg-secondary));border:1px solid var(--ws-warning);border-radius:var(--radius-sm);color:var(--ws-warning);font-size:.8rem}.wf-editor-import-warning{margin:0}.wf-editor-import-warning+.wf-editor-import-warning{margin-top:var(--space-xs)}.wf-editor-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px;min-width:0}.wf-editor-list li{min-width:0}.wf-editor-list-item{width:100%;min-width:0;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap;padding:var(--space-xs) var(--space-sm);background:transparent;border:1px solid transparent;border-radius:var(--radius-sm);color:var(--text);cursor:pointer}.wf-editor-list-item:hover{background:var(--bg-secondary)}.wf-editor-list-item.active{background:var(--bg-tertiary);border-color:var(--border)}.wf-editor-empty{display:flex;align-items:center;gap:var(--space-xs);padding:var(--space-md);color:var(--text-muted);font-size:.85rem}.wf-editor-select-note{padding:var(--space-sm) var(--space-md);background:color-mix(in srgb,var(--ws-info) 8%,var(--bg-secondary));border:1px solid var(--ws-info);border-radius:var(--radius-sm);color:var(--text);font-size:.85rem}.wf-editor-canvas-wrap{display:flex;flex-direction:column;flex:1;min-width:0}.wf-editor-mobile-back{display:none}.wf-editor-canvas-empty{flex:1;justify-content:center}.wf-editor-onboard{flex-direction:column;text-align:center;gap:var(--space-sm);padding:var(--space-lg)}.wf-editor-onboard-icon{color:var(--text-muted)}.wf-editor-onboard-title{margin:0;font-size:1rem;color:var(--text)}.wf-editor-onboard-text{margin:0;max-width:36ch;color:var(--text-muted)}.wf-editor-onboard-cta{margin-top:var(--space-xs)}.wf-trivial-hint{position:absolute;top:var(--space-sm);left:50%;transform:translate(-50%);z-index:5;pointer-events:none;max-width:min(90%,42ch);padding:var(--space-xs) var(--space-sm);background:color-mix(in srgb,var(--ws-info) 8%,var(--bg-secondary));border:1px solid var(--ws-info);border-radius:var(--radius-sm);color:var(--ws-info);font-size:.8rem;text-align:center}.wf-editor-toolbar{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);padding:var(--space-sm);border-bottom:1px solid var(--border);flex-wrap:wrap}.wf-editor-palette{display:flex;gap:var(--space-xs);flex-wrap:wrap;min-width:0}.wf-palette-btn,.wf-editor-action,.wf-editor-delete,.wf-editor-save{display:inline-flex;align-items:center;gap:var(--space-xs);min-width:0;padding:var(--space-xs) var(--space-sm);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);cursor:pointer;overflow-wrap:anywhere;transition:background var(--transition-fast)}.wf-palette-btn:hover,.wf-editor-action:hover,.wf-editor-delete:hover{background:var(--bg-tertiary)}.wf-editor-action:disabled{opacity:.6;cursor:default}.wf-editor-actions{display:flex;align-items:center;gap:var(--space-xs)}.wf-editor-readonly-note{font-size:.75rem;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.04em}.wf-templates{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-sm);border-bottom:1px solid var(--border)}.wf-templates-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.wf-templates-toggle{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);background:transparent;border:none;border-radius:var(--radius-sm);color:var(--text);font-weight:600;cursor:pointer}.wf-templates-toggle:hover{background:var(--bg-tertiary)}.wf-templates-filter{flex:0 1 220px;padding:var(--space-xs) var(--space-sm);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-size:.8rem}.wf-templates-body{display:flex;flex-direction:column;gap:var(--space-sm)}.wf-templates-conflict{padding:var(--space-xs) var(--space-sm);background:color-mix(in srgb,var(--ws-error) 8%,var(--bg-secondary));border:1px solid var(--ws-error);border-radius:var(--radius-sm);color:var(--ws-error);font-size:.8rem}.wf-templates-group{display:flex;flex-direction:column;gap:var(--space-xs)}.wf-templates-group-title{margin:0;font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-tertiary)}.wf-templates-entries{display:flex;flex-wrap:wrap;gap:var(--space-xs)}.wf-templates-entry{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-size:.8rem;cursor:pointer;transition:background var(--transition-fast)}.wf-templates-entry:hover{background:var(--bg-tertiary)}.wf-templates-entry:disabled{opacity:.6;cursor:default}.wf-templates-badge{padding:0 var(--space-xs);background:var(--accent-subtle, color-mix(in srgb, #3b82f6 12%, transparent));border-radius:var(--radius-sm);color:var(--text-muted);font-size:.7rem}.wf-inspector-fields{display:contents;border:none;margin:0;padding:0;min-inline-size:0}.wf-editor-save{background:var(--todo);border-color:var(--todo);color:var(--bg)}.wf-editor-save:disabled{opacity:.6;cursor:default}.wf-editor-delete{color:var(--ws-error)}.wf-inspector-delete{margin-top:var(--space-sm);justify-content:center}.wf-editor-banner{padding:var(--space-sm) var(--space-md);background:var(--bg-secondary);border-bottom:1px solid var(--ws-warning);color:var(--ws-warning);font-size:.85rem}.wf-editor-banner--info{border-bottom-color:var(--ws-info);color:var(--ws-info);background:color-mix(in srgb,var(--ws-info) 6%,var(--bg-secondary))}.wf-editor-canvas{flex:1;width:100%;min-width:0;min-height:0;overflow:hidden;position:relative}.wf-mobile-shell{display:none}.wf-layout-toggle{display:inline-flex;align-items:center;gap:var(--space-xs);width:fit-content;min-height:30px;padding:var(--space-xs) var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-secondary);color:var(--text-muted);font:inherit;font-size:.8rem;cursor:pointer}.wf-layout-toggle:hover{background:var(--bg-tertiary);color:var(--text)}.wf-layout-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.wf-editor-body--simple-layout :where(.wf-editor-readonly-banner),.wf-editor-body--simple-layout :where(.wf-editor-toolbar),.wf-editor-body--simple-layout :where(.wf-templates),.wf-editor-body--simple-layout :where(.wf-editor-canvas){display:none}.wf-editor-body--simple-layout .wf-mobile-shell{display:flex;flex:1 1 auto;min-height:0;flex-direction:column;border-top:1px solid var(--border);overflow:hidden}.wf-mobile-tabs{display:flex;flex:0 0 auto;gap:var(--space-xs);padding:var(--space-sm);overflow-x:auto;overflow-y:visible;border-bottom:1px solid var(--border)}.wf-mobile-tab{flex:0 0 auto;min-height:var(--wf-editor-touch-target);padding:var(--space-sm) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-secondary);color:var(--text);cursor:pointer;transition:background var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast)}.wf-mobile-tab--active{border-color:var(--accent, var(--ws-info));background:var(--bg-tertiary)}.wf-mobile-tab:hover{background:var(--bg-tertiary)}.wf-mobile-tab:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.wf-mobile-tab:active{transform:scale(.97)}.wf-mobile-panel{flex:1 1 auto;min-height:0;overflow-y:auto}.wf-mobile-add,.wf-mobile-actions,.wf-mobile-destination{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-sm)}.wf-mobile-add-section{display:flex;flex-direction:column;gap:var(--space-sm)}.wf-mobile-add-section h3,.wf-mobile-template-group h4{margin:0;color:var(--text);font-size:.85rem}.wf-mobile-add-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-xs)}.wf-mobile-add-option,.wf-mobile-template-option{display:inline-flex;align-items:center;justify-content:flex-start;gap:var(--space-xs);min-width:0;min-height:var(--wf-editor-touch-target);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-secondary);color:var(--text);cursor:pointer;text-align:left;overflow-wrap:anywhere;transition:background var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast)}.wf-mobile-add-option:hover,.wf-mobile-template-option:hover{background:var(--bg-tertiary)}.wf-mobile-add-option:focus-visible,.wf-mobile-template-option:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.wf-mobile-add-option:active,.wf-mobile-template-option:active{transform:scale(.97)}.wf-mobile-template-filter{width:100%}.wf-mobile-template-group{display:flex;flex-direction:column;gap:var(--space-xs)}.wf-mobile-actions .wf-editor-action,.wf-mobile-actions .wf-editor-delete,.wf-mobile-actions .wf-editor-save{justify-content:center;min-height:var(--wf-editor-touch-target)}.wf-mobile-ai-panel{position:static;inset:auto;width:100%;box-shadow:none}.wf-editor-inspector{display:flex;flex-direction:column;gap:var(--space-sm);width:280px;padding:var(--space-md);border-left:1px solid var(--border);overflow-y:auto}.wf-editor-inspector h3{margin:0;font-size:.9rem;color:var(--text)}.wf-inspector-heading{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm)}.wf-inspector-toggle{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-secondary);color:var(--text);font:inherit;cursor:pointer}.wf-inspector-toggle:hover{background:var(--bg-tertiary)}.wf-inspector-toggle--collapsed{position:absolute;right:var(--space-sm);bottom:var(--space-sm);z-index:5;box-shadow:var(--shadow-sm)}.wf-field{display:flex;flex-direction:column;gap:var(--space-xs);font-size:.8rem;color:var(--text-muted)}.wf-field input,.wf-field textarea,.wf-field select{padding:var(--space-xs) var(--space-sm);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font:inherit}.wf-field input:focus,.wf-field textarea:focus,.wf-field select:focus{outline:none;box-shadow:var(--focus-ring)}.wf-prompt-editor{position:relative}.wf-prompt-editor--fullscreen{position:fixed;inset:0;z-index:10000;background:var(--surface);padding:max(var(--space-lg),env(safe-area-inset-top,0)) max(var(--space-lg),env(safe-area-inset-right,0)) max(var(--space-lg),env(safe-area-inset-bottom,0)) max(var(--space-lg),env(safe-area-inset-left,0));display:flex;flex-direction:column}.wf-prompt-editor--fullscreen .wf-field{flex:1;display:flex;flex-direction:column}.wf-prompt-editor--fullscreen textarea{flex:1;min-height:unset;resize:none;border-radius:var(--radius-md);font-size:.9375rem;line-height:1.6}.wf-prompt-fullscreen-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-md);font-size:.8125rem;font-weight:600;color:var(--text-muted)}.wf-prompt-expand-btn{display:inline-flex;align-items:center;gap:var(--space-xs)}.wf-prompt-expand-btn--inline{position:absolute;top:calc(var(--space-xs) + 1.2em + var(--space-xs));right:var(--space-xs);z-index:2;color:var(--text-muted);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:calc(var(--space-xs) / 2) var(--space-xs)}.wf-prompt-expand-btn--inline:hover{background:var(--bg-tertiary);color:var(--text)}.wf-prompt-editor:not(.wf-prompt-editor--fullscreen) textarea{padding-right:calc(var(--space-xl) + var(--space-md))}.wf-inspector-note{margin:0;font-size:.78rem;color:var(--text-tertiary)}.wf-inspector-note--info{color:var(--ws-warning)}.wf-field--checkbox{flex-direction:row;align-items:center;gap:var(--space-sm);cursor:pointer}.wf-field--checkbox input[type=checkbox]{width:auto;padding:0;margin:0;background:none;border:none;accent-color:var(--todo);cursor:pointer}.wf-node{display:flex;flex-direction:column;gap:2px;box-sizing:border-box;width:200px;max-width:240px;padding:var(--space-xs) var(--space-sm);background:var(--bg-secondary);border:1px solid var(--border);border-left:3px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-size:.8rem}.wf-node-header{display:flex;align-items:center;gap:var(--space-xs);min-width:0}.wf-node-summary{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.68rem;color:var(--text-muted)}.wf-node-start{border-left-color:var(--ws-success)}.wf-node-end{border-left-color:var(--text-muted)}.wf-node-prompt{border-left-color:var(--accent, var(--todo));background:color-mix(in srgb,var(--accent, var(--todo)) 5%,var(--bg-secondary))}.wf-node-script{border-left-color:var(--text-muted);font-family:var(--font-mono, monospace)}.wf-node-gate{border-left-color:var(--ws-warning);background:color-mix(in srgb,var(--ws-warning) 6%,var(--bg-secondary))}.wf-node-hold{border-left-color:var(--ws-warning)}.wf-node-split,.wf-node-join{border-left-color:var(--accent, var(--ws-info))}.wf-node-merge{border-left-color:var(--ws-info);border-style:dashed}.wf-node-step-execute{border-left-color:var(--accent, var(--ws-info));background:color-mix(in srgb,var(--accent, var(--ws-info)) 5%,var(--bg-secondary))}.wf-node-step-review{border-left-color:var(--ws-info);background:color-mix(in srgb,var(--ws-info) 6%,var(--bg-secondary))}.wf-node-parse-steps{border-left-color:var(--ws-info)}.wf-node-code{border-left-color:var(--text-muted);font-family:var(--font-mono, monospace)}.wf-foreach-group{width:100%;height:100%;box-sizing:border-box;border:1px dashed var(--accent, var(--ws-info));border-radius:var(--radius-md);background:color-mix(in srgb,var(--accent, var(--ws-info)) 6%,transparent);padding:var(--space-xs)}.wf-foreach-group.wf-node--error{border-color:var(--ws-error)}.wf-foreach-header{display:inline-flex;align-items:center;gap:var(--space-xs);font-size:.8rem;color:var(--text)}.wf-foreach-empty{margin-top:var(--space-sm);padding:var(--space-sm);border:1px dashed var(--border);border-radius:var(--radius-sm);font-size:.7rem;color:var(--text-muted);text-align:center}.wf-edge-rework .react-flow__edge-path{stroke:var(--accent, var(--ws-info));stroke-dasharray:5 4;stroke-width:2}.react-flow__edge.wf-edge-failure .react-flow__edge-path{stroke:var(--ws-error);stroke-dasharray:2 4;stroke-width:2}.wf-code-source{font-family:var(--font-mono, monospace);font-size:.72rem;white-space:pre;overflow-x:auto}.wf-editor-sidebar .wf-code-source{overflow-x:hidden;overflow-wrap:anywhere;white-space:pre-wrap}.wf-node-icon{display:inline-flex;flex-shrink:0;color:var(--text-muted)}.wf-node-label{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wf-node-badge{flex-shrink:0;font-size:.65rem;text-transform:uppercase;padding:1px var(--space-xs);border-radius:var(--radius-sm);background:var(--ws-warning);color:var(--bg)}.wf-spin{animation:wf-spin 1s linear infinite}@keyframes wf-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.wf-column-band{border:1px dashed var(--border);background:color-mix(in srgb,var(--bg-secondary) 65%,transparent);border-radius:var(--radius-md);pointer-events:none}.wf-node--error{border-color:var(--ws-error);border-left-color:var(--ws-error)}.wf-node-error-badge{display:inline-flex;align-items:center;gap:var(--space-xs);flex-shrink:0;font-size:.65rem;padding:1px var(--space-xs);border-radius:var(--radius-sm);background:var(--ws-error);color:var(--bg)}.wf-editor-readonly-banner{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding:var(--space-sm) var(--space-md);background:var(--bg-tertiary);border-bottom:1px solid var(--border)}.wf-editor-duplicate-primary{font-weight:600}.wf-editor-banner--warn{background:var(--ws-warning);color:var(--bg)}.wf-name-strip{display:flex;align-items:baseline;gap:var(--space-sm);padding:var(--space-xs) var(--space-sm);border-bottom:1px solid var(--border);flex-wrap:wrap}.wf-workflow-name,.wf-workflow-name--readonly{font-size:.95rem;font-weight:600;color:var(--text);background:none;border:1px solid transparent;border-radius:var(--radius-sm);padding:2px var(--space-xs);cursor:pointer;text-align:left}.wf-workflow-name:hover{background:var(--bg-tertiary)}.wf-workflow-name--readonly{cursor:default}.wf-workflow-name-input{font-size:.95rem;font-weight:600;color:var(--text);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:2px var(--space-xs)}.wf-workflow-description,.wf-workflow-description--readonly{font-size:.78rem;color:var(--text-tertiary);background:none;border:1px solid transparent;border-radius:var(--radius-sm);padding:2px var(--space-xs);cursor:pointer;text-align:left}.wf-workflow-description:hover{background:var(--bg-tertiary)}.wf-workflow-description--readonly{cursor:default}.wf-workflow-description-input{font-size:.78rem;color:var(--text);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:2px var(--space-xs);min-width:220px}.wf-template-list{display:flex;flex-direction:column;gap:var(--space-xs);max-height:220px;overflow-y:auto;padding:var(--space-xs);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-secondary)}.wf-template-section{margin:var(--space-xs) 0 var(--space-xs);font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-tertiary)}.wf-template-option{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-xs) var(--space-sm);border:1px solid transparent;border-radius:var(--radius-sm);cursor:pointer;color:var(--text)}.wf-template-option:hover{background:var(--bg-hover)}.wf-template-option.selected{border-color:var(--accent);background:var(--bg-active)}.wf-template-option:focus-visible{outline:none;box-shadow:var(--focus-ring)}.wf-template-option-name{font-size:.85rem;font-weight:600}.wf-template-option-desc{font-size:.78rem;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wf-template-option-count{font-size:.72rem;color:var(--text-tertiary)}.wf-create-error{margin:var(--space-xs) 0 0;font-size:.8rem;color:var(--ws-error)}.wf-column-panel{display:flex;flex-direction:column;gap:var(--space-sm);width:280px;min-width:260px;padding:var(--space-md);border-left:1px solid var(--border);overflow-y:auto}.wf-column-panel-header{display:flex;align-items:center;justify-content:space-between}.wf-column-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-sm)}.wf-column-item{border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-xs)}.wf-column-item--error{border-color:var(--ws-error)}.wf-column-item-head{display:flex;align-items:center;gap:var(--space-xs)}.wf-column-name{flex:1;min-width:0}.wf-column-item-actions{display:flex;gap:2px}.wf-column-violation{display:flex;align-items:center;gap:var(--space-xs);font-size:.7rem;color:var(--ws-error);margin:0}.wf-column-trait-options{display:flex;flex-wrap:wrap;gap:var(--space-xs)}.wf-column-trait{display:inline-flex;align-items:center;gap:2px;font-size:.7rem;color:var(--text-muted)}.wf-column-traits-label{font-size:.65rem;text-transform:uppercase;color:var(--text-tertiary)}.wf-ai-create{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-secondary)}.wf-ai-toggle{display:inline-flex;align-items:center;gap:var(--space-xs);align-self:flex-start;padding:var(--space-xs) var(--space-xs);background:transparent;border:none;border-radius:var(--radius-sm);color:var(--accent);font-size:.82rem;font-weight:600;cursor:pointer}.wf-ai-toggle:hover{background:var(--bg-hover)}.wf-ai-create-body{display:flex;flex-direction:column;gap:var(--space-xs)}.wf-ai-prompt{width:100%;resize:vertical;padding:var(--space-xs) var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);color:var(--text);font-size:.85rem}.wf-ai-prompt:focus-visible{outline:none;box-shadow:var(--focus-ring)}.wf-ai-actions{display:flex;gap:var(--space-xs)}.wf-ai-edit-wrap{position:relative}.wf-ai-panel{position:absolute;top:calc(100% + var(--space-xs));right:0;z-index:20;width:320px;display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg);box-shadow:var(--shadow-md)}@media(max-width:768px){.wf-prompt-editor--fullscreen{padding:var(--space-sm)}.modal-overlay:has(.wf-editor-modal),.modal-overlay:has(.wf-create-modal){padding-top:0;align-items:stretch;justify-content:stretch}.wf-editor-modal,.wf-create-modal{width:100vw;min-width:0;max-width:100vw;height:100vh;height:100dvh;min-height:0;max-height:100dvh;margin:0;border:none;border-radius:0;resize:none;flex:1 1 auto}.wf-editor-header,.wf-migration-notice,.wf-editor-readonly-banner{flex-wrap:wrap}.wf-migration-notice,.wf-editor-readonly-banner{gap:var(--space-sm)}.wf-editor-body{flex-direction:column;width:100%;min-width:0;overflow-x:hidden}.wf-editor-body--list-stage .wf-editor-sidebar{display:flex;width:100%;min-width:0;flex:1 1 auto;max-height:none;border-right:none;border-bottom:none;overflow-x:hidden;overflow-y:auto}.wf-editor-body--list-stage .wf-editor-canvas-wrap,.wf-editor-body--list-stage .wf-editor-inspector,.wf-editor-body--editor-stage .wf-editor-sidebar{display:none}.wf-editor-body--editor-stage .wf-editor-canvas-wrap{display:flex;flex:0 1 auto;width:100%;min-width:0;min-height:0;overflow:hidden}.wf-editor-body--editor-stage .wf-editor-canvas{flex:1 1 auto;min-height:0}.wf-editor-body--editor-stage .wf-editor-inspector{width:100%;min-width:0;max-height:none;flex:1 1 auto;min-height:0;border-left:none;border-top:1px solid var(--border);overflow-y:auto}.wf-editor-mobile-back{display:inline-flex;align-items:center;align-self:flex-start;gap:var(--space-xs);min-height:var(--wf-editor-touch-target);margin:var(--space-sm) var(--space-sm) 0;padding:var(--space-sm) var(--space-md);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);font-size:.8rem;cursor:pointer}.wf-editor-sidebar .wf-column-panel{width:100%;min-width:0;border-left:none;border-top:1px solid var(--border)}.wf-editor-body .wf-settings-panel{width:100%;min-width:0;max-height:50vh;border-left:none;border-top:1px solid var(--border);overflow-y:auto}.wf-editor-canvas-wrap{flex:1 1 auto;width:100%;min-width:0;min-height:0}.wf-editor-canvas{width:100%;min-width:0;max-width:100%;overflow:hidden}.wf-editor-body--editor-stage :where(.wf-editor-readonly-banner),.wf-editor-body--editor-stage :where(.wf-editor-toolbar),.wf-editor-body--editor-stage :where(.wf-templates),.wf-editor-body--editor-stage :where(.wf-editor-canvas){display:none}.wf-mobile-shell{display:flex;flex:1 1 auto;min-height:0;flex-direction:column;border-top:1px solid var(--border);overflow:hidden}.wf-editor-canvas .react-flow,.wf-editor-canvas .react-flow__renderer,.wf-editor-canvas .react-flow__pane,.wf-editor-canvas .react-flow__viewport{width:100%;min-width:0;max-width:100%;height:100%}.wf-editor-list-item,.wf-editor-new,.wf-editor-import,.wf-sidebar-section-toggle,.wf-palette-btn,.wf-editor-action,.wf-editor-delete,.wf-editor-save,.wf-templates-toggle,.wf-templates-entry,.wf-template-option,.wf-ai-toggle,.wf-workflow-name,.wf-workflow-name-input,.wf-column-panel button,.wf-fields-panel button,.wf-settings-panel button{min-height:var(--wf-editor-touch-target)}.wf-editor-list-item,.wf-editor-new,.wf-editor-import,.wf-palette-btn,.wf-editor-action,.wf-editor-delete,.wf-editor-save,.wf-templates-toggle,.wf-templates-entry,.wf-ai-toggle{padding:var(--space-sm) var(--space-md)}.wf-field input,.wf-field textarea,.wf-field select,.wf-templates-filter,.wf-ai-prompt{min-height:var(--wf-editor-touch-target);padding:var(--space-sm) var(--space-md)}.wf-template-list{max-height:40vh}.wf-editor-toolbar{flex-wrap:nowrap;overflow-x:auto}.wf-editor-palette,.wf-editor-actions{flex:0 0 auto;flex-wrap:nowrap}.wf-templates{flex:0 0 auto}.wf-templates-header{flex-wrap:nowrap}.wf-templates-toggle{flex:0 0 auto}.wf-inspector-toggle{min-height:var(--wf-editor-touch-target);padding:var(--space-sm) var(--space-md)}.wf-ai-panel{position:fixed;inset:var(--space-sm);top:auto;right:auto;z-index:30;width:auto}.wf-editor-inspector{width:100%;max-height:40vh;border-left:none;border-top:1px solid var(--border);overflow-y:auto}.wf-editor-body--mobile-node-detail .wf-editor-canvas-wrap{display:none;min-height:0}.wf-editor-body--mobile-node-detail .wf-editor-inspector{display:flex;flex:1 1 auto;width:100%;min-width:0;min-height:0;max-height:none;border-left:none;border-top:none;overflow-y:auto}.wf-editor-body--mobile-edge-detail .wf-editor-canvas-wrap{display:none;min-height:0}.wf-editor-body--mobile-edge-detail .wf-editor-inspector{display:flex;flex:1 1 auto;width:100%;min-width:0;min-height:0;max-height:none;border-left:none;border-top:none;overflow-y:auto}}.wf-fields-panel{display:flex;flex-direction:column;gap:var(--space-sm);width:300px;min-width:280px;padding:var(--space-md);border-left:1px solid var(--border);overflow-y:auto}.wf-fields-panel-header{display:flex;align-items:center;justify-content:space-between}.wf-fields-add{display:inline-flex;align-items:center;gap:4px}.wf-fields-panel-empty{font-size:.75rem;color:var(--text-muted);margin:0}.wf-fields-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-sm)}.wf-field-item{border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-xs)}.wf-field-item-head{display:flex;align-items:center;gap:var(--space-xs)}.wf-field-name{flex:1;min-width:0}.wf-field-id-row{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-xs)}.wf-field-id-static{font-family:var(--font-mono, monospace);font-size:.7rem;color:var(--text-tertiary);background:var(--surface-2, color-mix(in srgb, #ffffff 4%, transparent));padding:1px 6px;border-radius:var(--radius-sm)}.wf-field-id-edit{font-size:.65rem;background:none;border:none;color:var(--accent, #4f7cff);cursor:pointer;padding:0}.wf-field-id-warn{display:flex;align-items:center;gap:4px;width:100%;margin:0;font-size:.65rem;color:var(--ws-warning, #f59e0b)}.wf-field-row{display:flex;align-items:flex-end;gap:var(--space-sm)}.wf-field-sub{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0;font-size:.7rem;color:var(--text-muted)}.wf-field-sub>span{font-size:.65rem;text-transform:uppercase;color:var(--text-tertiary)}.wf-field--checkbox{display:inline-flex;align-items:center;gap:4px;font-size:.7rem;color:var(--text-muted)}.wf-field-required{flex:0 0 auto;white-space:nowrap}.wf-field-options{display:flex;flex-direction:column;gap:var(--space-xs);padding-top:var(--space-xs);border-top:1px dashed var(--border)}.wf-field-options-label{font-size:.65rem;text-transform:uppercase;color:var(--text-tertiary)}.wf-field-option-row{display:flex;align-items:center;gap:4px}.wf-field-option-value,.wf-field-option-label{flex:1;min-width:0}.wf-field-option-colors{display:inline-flex;gap:2px}.wf-field-color-swatch{width:14px;height:14px;border-radius:50%;border:1px solid var(--border);padding:0;cursor:pointer}.wf-field-color-swatch.is-active{outline:2px solid var(--text-primary, #fff);outline-offset:1px}.wf-field-option-add{display:inline-flex;align-items:center;gap:4px;align-self:flex-start;font-size:.7rem}.wf-field-render{display:flex;flex-direction:column;gap:var(--space-xs);padding-top:var(--space-xs);border-top:1px dashed var(--border)}.wf-field-preview{padding-top:var(--space-xs)}@media(max-width:768px){.wf-fields-panel{width:100%;min-width:0;padding:var(--space-sm);border-left:none;border-top:1px solid var(--border)}.wf-field-row,.wf-field-option-row{flex-wrap:wrap}}.settings-field-row{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-sm) 0}.settings-field-row.is-disabled{opacity:.6}.settings-field-row-head{display:flex;align-items:center;gap:var(--space-xs);flex-wrap:wrap}.settings-field-row-label{font-size:.8rem;font-weight:500;color:var(--text)}.settings-field-row-scope{font-size:.6rem;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);background:var(--surface-muted, color-mix(in srgb, #ffffff 4%, transparent));border:1px solid var(--border);border-radius:var(--radius-sm);padding:1px 6px}.settings-field-row-scope--global{color:var(--accent, #7c5cbf);border-color:var(--accent, #7c5cbf)}.settings-field-row-control{display:flex;align-items:center;gap:var(--space-xs)}.settings-field-row-control>input:not([type=checkbox]),.settings-field-row-control>select,.settings-field-row-control>textarea{flex:1;min-width:0}.settings-field-row-clear{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;background:none;border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-muted);cursor:pointer;padding:2px;transition:color var(--duration-fast) ease,border-color var(--duration-fast) ease}.settings-field-row-clear:hover:not(:disabled){color:var(--text);border-color:var(--text-muted)}.settings-field-row-clear:disabled{cursor:default;opacity:.5}.settings-field-row-help{margin:0;font-size:.7rem;color:var(--text-muted)}.settings-field-row-error{margin:0;font-size:.7rem;color:var(--color-error, #f85149)}.settings-toggle{display:inline-flex;align-items:center}.settings-toggle>input[type=checkbox]{cursor:pointer}.settings-toggle>input[type=checkbox]:disabled{cursor:default}.settings-number,.settings-select,.settings-text{width:100%}.settings-textarea{width:100%;resize:vertical;font-family:inherit}.settings-section{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-md) 0;border-bottom:1px solid var(--border)}.settings-section:last-child{border-bottom:none}.settings-section-head{display:flex;flex-direction:column;gap:var(--space-xs)}.settings-section-title{margin:0;font-size:.9rem;font-weight:600;color:var(--text)}.settings-section-desc{margin:0;font-size:.75rem;color:var(--text-muted)}.settings-section-body{display:flex;flex-direction:column;gap:var(--space-xs)}.wf-settings-panel-wrap{display:flex;min-height:0}.wf-settings-panel{display:flex;flex-direction:column;gap:var(--space-sm);width:320px;min-width:300px;padding:var(--space-md);border-left:1px solid var(--border);overflow-y:auto;color:var(--text)}.wf-settings-panel-header{display:flex;align-items:center;justify-content:space-between}.wf-settings-tabs{display:flex;gap:2px;border-bottom:1px solid var(--border)}.wf-settings-tab{flex:1;padding:6px 8px;font-size:.72rem;background:none;border:none;border-bottom:2px solid transparent;color:var(--text-muted);cursor:pointer;transition:color var(--duration-fast) ease,border-color var(--duration-fast) ease}.wf-settings-tab.is-active{color:var(--text);border-bottom-color:var(--accent, #4f7cff)}.wf-settings-tabpanel{display:flex;flex-direction:column;gap:var(--space-sm)}.wf-settings-tabpanel-head{display:flex;align-items:center;justify-content:flex-end}.wf-settings-add,.wf-settings-save-values,.wf-settings-option-add{display:inline-flex;align-items:center;gap:4px}.wf-settings-empty{font-size:.75rem;color:var(--text-muted);margin:0}.wf-settings-note{display:flex;align-items:center;gap:4px;margin:0;font-size:.7rem}.wf-settings-note--info,.wf-settings-note--muted{color:var(--text-muted)}.wf-settings-note--warn{color:var(--ws-warning, #f59e0b)}.wf-settings-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-sm)}.wf-setting-item{border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-sm);display:flex;flex-direction:column;gap:var(--space-xs)}.wf-setting-item-head{display:flex;align-items:center;gap:var(--space-xs)}.wf-setting-name{flex:1;min-width:0}.wf-setting-id-row{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-xs)}.wf-setting-id-static{font-family:var(--font-mono, monospace);font-size:.7rem;color:var(--text-muted);background:var(--surface-2, color-mix(in srgb, #ffffff 4%, transparent));padding:1px 6px;border-radius:var(--radius-sm)}.wf-setting-id-edit{font-size:.65rem;background:none;border:none;color:var(--accent, #4f7cff);cursor:pointer;padding:0}.wf-setting-id-warn{display:flex;align-items:center;gap:4px;width:100%;margin:0;font-size:.65rem;color:var(--ws-warning, #f59e0b)}.wf-setting-row{display:flex;align-items:flex-end;gap:var(--space-sm)}.wf-setting-sub{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0;font-size:.7rem;color:var(--text-muted)}.wf-setting-sub>span{font-size:.65rem;text-transform:uppercase;color:var(--text-muted)}.wf-setting--checkbox{display:inline-flex;align-items:center;gap:4px;font-size:.7rem;color:var(--text-muted)}.wf-setting-options{display:flex;flex-direction:column;gap:var(--space-xs);padding-top:var(--space-xs);border-top:1px dashed var(--border)}.wf-setting-options-label{font-size:.65rem;text-transform:uppercase;color:var(--text-muted)}.wf-setting-option-row{display:flex;align-items:center;gap:4px}.wf-setting-option-value,.wf-setting-option-label{flex:1;min-width:0}.wf-setting-option-colors{display:inline-flex;gap:2px}.wf-setting-color-swatch{width:14px;height:14px;border-radius:50%;border:1px solid var(--border);padding:0;cursor:pointer}.wf-setting-color-swatch.is-active{outline:2px solid var(--text);outline-offset:1px}.wf-settings-values-head{display:flex;align-items:center;justify-content:flex-end}.wf-settings-values-list{display:flex;flex-direction:column;gap:var(--space-md)}.wf-settings-value-group{display:flex;flex-direction:column;gap:var(--space-xs)}.wf-settings-value-group-title{margin:0;font-size:.72rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:0}.wf-settings-value-item{position:relative;display:flex;flex-direction:column;gap:2px}.wf-settings-customized{align-self:flex-start;font-size:.6rem;text-transform:uppercase;letter-spacing:.04em;color:var(--accent, #4f7cff)}.wf-settings-reset-hint{display:flex;align-items:center;gap:4px;margin:0;font-size:.65rem;color:var(--text-muted)}.wf-settings-orphaned{border-top:1px dashed var(--border);padding-top:var(--space-xs)}.wf-settings-orphaned-toggle{display:inline-flex;align-items:center;gap:4px;background:none;border:none;color:var(--text-muted);font-size:.72rem;cursor:pointer;padding:0}.wf-settings-orphaned-body{display:flex;flex-direction:column;gap:var(--space-xs);padding-top:var(--space-xs)}.wf-settings-orphaned-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}.wf-settings-orphaned-row{display:flex;align-items:center;gap:var(--space-xs)}.wf-settings-orphan-id{font-family:var(--font-mono, monospace);font-size:.7rem;color:var(--text-muted)}.wf-settings-orphan-value{flex:1;min-width:0;font-size:.7rem;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wf-settings-orphan-delete{background:none;border:none;color:var(--text-muted);cursor:pointer;padding:0}@media(max-width:768px){.wf-settings-panel-wrap{flex-direction:column}.wf-settings-panel{width:100%;min-width:0;padding:var(--space-sm);border-left:none;border-top:1px solid var(--border)}.wf-setting-row,.wf-setting-option-row,.wf-settings-orphaned-row{flex-wrap:wrap}}.mobile-wf-graph{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-sm);overflow-y:auto}.mobile-wf-node-group{display:flex;flex-direction:column;gap:var(--space-xs)}.mobile-wf-node-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--space-xs);padding-left:calc(var(--mobile-wf-depth, 0) * var(--space-md))}.mobile-wf-node-main{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--space-sm);min-width:0;min-height:var(--wf-editor-touch-target, 44px);padding:var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-secondary);color:var(--text);text-align:left;cursor:pointer;transition:background var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast)}.mobile-wf-node-main:hover{background:var(--bg-tertiary)}.mobile-wf-node-main:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.mobile-wf-node-main:active{transform:scale(.97)}.mobile-wf-node-row--selected .mobile-wf-node-main{border-color:var(--accent, var(--ws-info));box-shadow:var(--focus-ring)}.mobile-wf-node-kind{min-width:4.5rem;max-width:6rem;padding:calc(var(--space-xs) / 2) var(--space-xs);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-muted);font-size:.7rem;text-align:center;overflow-wrap:anywhere}.mobile-wf-node-text{display:flex;flex-direction:column;min-width:0;gap:calc(var(--space-xs) / 2)}.mobile-wf-node-title,.mobile-wf-node-summary,.mobile-wf-edge-target{min-width:0;overflow-wrap:anywhere}.mobile-wf-node-title{color:var(--text);font-size:.9rem;font-weight:600}.mobile-wf-node-summary{color:var(--text-muted);font-size:.78rem}.mobile-wf-node-expand{display:inline-flex;align-items:center;justify-content:center;width:var(--wf-editor-touch-target, 44px);min-height:var(--wf-editor-touch-target, 44px);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-secondary);color:var(--text);cursor:pointer;transition:background var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast)}.mobile-wf-node-expand:hover{background:var(--bg-tertiary)}.mobile-wf-node-expand:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.mobile-wf-node-expand:active{transform:scale(.97)}.mobile-wf-node-meta{display:flex;flex-wrap:wrap;gap:var(--space-xs);padding-left:calc((var(--mobile-wf-depth, 0) * var(--space-md)) + var(--space-xs))}.mobile-wf-column-chip,.mobile-wf-edge-chip{display:inline-flex;align-items:center;gap:var(--space-xs);min-height:34px;max-width:100%;padding:var(--space-xs) var(--space-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);color:var(--text-muted);font-size:.75rem}.mobile-wf-edge-chip{color:var(--text);cursor:pointer;transition:background var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast)}.mobile-wf-edge-chip:hover{background:var(--bg-secondary)}.mobile-wf-edge-chip:focus-visible{outline:none;box-shadow:var(--focus-ring-strong)}.mobile-wf-edge-chip:active{transform:scale(.97)}.mobile-wf-edge-chip--selected{border-color:var(--accent, var(--ws-info))}.mobile-wf-edge-target{color:var(--text-muted)}.mobile-wf-node-children{display:flex;flex-direction:column;gap:var(--space-sm)}.mobile-wf-graph-empty{padding:var(--space-lg);color:var(--text-muted);text-align:center}