tmex-cli 0.16.1 → 0.16.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -50
- package/dist/runtime/server.js +392 -106
- package/package.json +1 -1
- package/resources/fe-dist/assets/DevicePage-CgDkuNLp.js +24 -0
- package/resources/fe-dist/assets/{DevicesPage-sJHXbS_f.js → DevicesPage-B_jvUZtl.js} +1 -1
- package/resources/fe-dist/assets/{FilePage-7FFd1YcW.js → FilePage-DTSmWM1D.js} +1 -1
- package/resources/fe-dist/assets/SettingsPage-LTHV37Rj.js +39 -0
- package/resources/fe-dist/assets/agent-tab-vPjPGa5f.js +38 -0
- package/resources/fe-dist/assets/{api-DV7-9Pvt.js → api-D_FToAy0.js} +1 -1
- package/resources/fe-dist/assets/{arc-PDHKfnGP.js → arc-BSCyoyGW.js} +1 -1
- package/resources/fe-dist/assets/{architectureDiagram-3BPJPVTR-BiPHTh1e.js → architectureDiagram-3BPJPVTR-CBO0dAe2.js} +1 -1
- package/resources/fe-dist/assets/{blockDiagram-GPEHLZMM-DP_BRHKg.js → blockDiagram-GPEHLZMM-0ONANm30.js} +1 -1
- package/resources/fe-dist/assets/{c4Diagram-AAUBKEIU-D16QYgyT.js → c4Diagram-AAUBKEIU-DpvhCnF8.js} +1 -1
- package/resources/fe-dist/assets/{card-DmfNw0hd.js → card-CD9i-fLq.js} +1 -1
- package/resources/fe-dist/assets/channel-DBhb6_En.js +1 -0
- package/resources/fe-dist/assets/{chunk-2J33WTMH-DOjtL7ww.js → chunk-2J33WTMH-MmS9_ur_.js} +1 -1
- package/resources/fe-dist/assets/{chunk-4BX2VUAB-BbT67ZXa.js → chunk-4BX2VUAB-CLd4Yxwh.js} +1 -1
- package/resources/fe-dist/assets/{chunk-55IACEB6-CnnXwmY_.js → chunk-55IACEB6-DgCH4WwT.js} +1 -1
- package/resources/fe-dist/assets/{chunk-727SXJPM-TyUdLEW5.js → chunk-727SXJPM-B9DM5PB4.js} +1 -1
- package/resources/fe-dist/assets/{chunk-AQP2D5EJ-BMpK4dqa.js → chunk-AQP2D5EJ-DQwC9D9W.js} +1 -1
- package/resources/fe-dist/assets/{chunk-FMBD7UC4-Dx0HVCZZ.js → chunk-FMBD7UC4-BnvyNYGh.js} +1 -1
- package/resources/fe-dist/assets/{chunk-ND2GUHAM-BQCoMEti.js → chunk-ND2GUHAM-BzcZgEWG.js} +1 -1
- package/resources/fe-dist/assets/{chunk-QZHKN3VN-ilmf5OgK.js → chunk-QZHKN3VN-C9BaHIUI.js} +1 -1
- package/resources/fe-dist/assets/classDiagram-4FO5ZUOK-9V2iXOG7.js +1 -0
- package/resources/fe-dist/assets/classDiagram-v2-Q7XG4LA2-9V2iXOG7.js +1 -0
- package/resources/fe-dist/assets/{copy-Ct5TNzGp.js → copy-DzIk8AxV.js} +1 -1
- package/resources/fe-dist/assets/{cose-bilkent-S5V4N54A-CpWhM7Za.js → cose-bilkent-S5V4N54A-NkTc0ObP.js} +1 -1
- package/resources/fe-dist/assets/{dagre-BM42HDAG-CWJttTzC.js → dagre-BM42HDAG-BdFDBfE_.js} +1 -1
- package/resources/fe-dist/assets/{diagram-2AECGRRQ-BD8ny_Yg.js → diagram-2AECGRRQ-Ba4Y0igR.js} +1 -1
- package/resources/fe-dist/assets/{diagram-5GNKFQAL-CeHcPWRz.js → diagram-5GNKFQAL-B4_Or8Vp.js} +1 -1
- package/resources/fe-dist/assets/{diagram-KO2AKTUF-tVlrBE8C.js → diagram-KO2AKTUF-DbmmHTYj.js} +1 -1
- package/resources/fe-dist/assets/{diagram-LMA3HP47-DGUn-oQn.js → diagram-LMA3HP47-CRrd6lc4.js} +1 -1
- package/resources/fe-dist/assets/{diagram-OG6HWLK6-xKCd1kwA.js → diagram-OG6HWLK6-BOEazFIu.js} +1 -1
- package/resources/fe-dist/assets/en_US-BihUhDmr.js +1 -0
- package/resources/fe-dist/assets/{erDiagram-TEJ5UH35-C6M5qkGl.js → erDiagram-TEJ5UH35-Dk-UowK8.js} +1 -1
- package/resources/fe-dist/assets/{files-tab-BWkYfaye.js → files-tab-D2vddvsj.js} +1 -1
- package/resources/fe-dist/assets/{flowDiagram-I6XJVG4X-D0MZDHnB.js → flowDiagram-I6XJVG4X-BhbGYx-g.js} +1 -1
- package/resources/fe-dist/assets/{ganttDiagram-6RSMTGT7-YeduSSa_.js → ganttDiagram-6RSMTGT7-iezClDTv.js} +1 -1
- package/resources/fe-dist/assets/{gitGraphDiagram-PVQCEYII-Nem1Mvvg.js → gitGraphDiagram-PVQCEYII-Ncqf3CQw.js} +1 -1
- package/resources/fe-dist/assets/{index-iee3U_rD.js → index-DOfY8kwB.js} +1 -1
- package/resources/fe-dist/assets/{index-B3ddLSja.js → index-UoApkLSY.js} +63 -63
- package/resources/fe-dist/assets/index-j9kTGUS5.css +1 -0
- package/resources/fe-dist/assets/{infoDiagram-5YYISTIA-Bh6bbh_V.js → infoDiagram-5YYISTIA-CUg3PkAb.js} +1 -1
- package/resources/fe-dist/assets/{ishikawaDiagram-YF4QCWOH-CsZHu48j.js → ishikawaDiagram-YF4QCWOH-DU0ekJw5.js} +1 -1
- package/resources/fe-dist/assets/ja_JP-f5sXmz8W.js +1 -0
- package/resources/fe-dist/assets/{journeyDiagram-JHISSGLW-CPgnovXt.js → journeyDiagram-JHISSGLW-Ji7WtMH7.js} +1 -1
- package/resources/fe-dist/assets/{kanban-definition-UN3LZRKU-D4OAuDsS.js → kanban-definition-UN3LZRKU-B8zVyM8Q.js} +1 -1
- package/resources/fe-dist/assets/{linear-CcA4wV7f.js → linear-tNPPicfI.js} +1 -1
- package/resources/fe-dist/assets/{markdown-preview-CBGlxpTs.js → markdown-preview-CzbcKxcJ.js} +3 -3
- package/resources/fe-dist/assets/{mermaid.core-D-CshtYr.js → mermaid.core-BoNU6G1d.js} +5 -5
- package/resources/fe-dist/assets/{mindmap-definition-RKZ34NQL-DBpI1nMC.js → mindmap-definition-RKZ34NQL-D_v1LaNP.js} +1 -1
- package/resources/fe-dist/assets/{pieDiagram-4H26LBE5-D4kh0_Y0.js → pieDiagram-4H26LBE5-B1CHCpFf.js} +1 -1
- package/resources/fe-dist/assets/{quadrantDiagram-W4KKPZXB-DNw3oGHQ.js → quadrantDiagram-W4KKPZXB-DvA3zgR7.js} +1 -1
- package/resources/fe-dist/assets/{requirementDiagram-4Y6WPE33-DqtMaND0.js → requirementDiagram-4Y6WPE33-BCna6ZG5.js} +1 -1
- package/resources/fe-dist/assets/{sankeyDiagram-5OEKKPKP-D-m9Pyie.js → sankeyDiagram-5OEKKPKP-KEllFLAf.js} +1 -1
- package/resources/fe-dist/assets/{send-DaOB9hLq.js → send-BgCF67Uc.js} +1 -1
- package/resources/fe-dist/assets/{sequenceDiagram-3UESZ5HK-CjrimNJf.js → sequenceDiagram-3UESZ5HK-DRsq_jg_.js} +1 -1
- package/resources/fe-dist/assets/{stateDiagram-AJRCARHV-BT5d8Z8W.js → stateDiagram-AJRCARHV-DhATBo8D.js} +1 -1
- package/resources/fe-dist/assets/stateDiagram-v2-BHNVJYJU-Dn_gMFVD.js +1 -0
- package/resources/fe-dist/assets/{terminal-settings-panel-DDhlnbRH.js → terminal-settings-panel-DsMMZFBi.js} +1 -1
- package/resources/fe-dist/assets/{timeline-definition-PNZ67QCA-BeocAFDX.js → timeline-definition-PNZ67QCA-Det7AzPd.js} +1 -1
- package/resources/fe-dist/assets/{transfer-toast-DXl4RHsV.js → transfer-toast-CHcCj3qf.js} +1 -1
- package/resources/fe-dist/assets/{triangle-alert-FQRTtbTP.js → triangle-alert-BjHP6Ipw.js} +1 -1
- package/resources/fe-dist/assets/{vennDiagram-CIIHVFJN-CYlmUB5_.js → vennDiagram-CIIHVFJN-BF4R466L.js} +1 -1
- package/resources/fe-dist/assets/{wardley-L42UT6IY-CTyaodt9.js → wardley-L42UT6IY-DLHZ_6-V.js} +1 -1
- package/resources/fe-dist/assets/{wardleyDiagram-YWT4CUSO-DNlEcEwQ.js → wardleyDiagram-YWT4CUSO-CekN3Ye6.js} +1 -1
- package/resources/fe-dist/assets/{xychartDiagram-2RQKCTM6-7Zi-6P-I.js → xychartDiagram-2RQKCTM6-CJD3yg0M.js} +1 -1
- package/resources/fe-dist/assets/{zap-BFIAXPXd.js → zap-Dx7JTXJN.js} +1 -1
- package/resources/fe-dist/assets/zh_CN-CPdvelFW.js +1 -0
- package/resources/fe-dist/index.html +2 -2
- package/resources/gateway-drizzle/0012_naive_lizard.sql +8 -0
- package/resources/gateway-drizzle/0013_bored_blindfold.sql +1 -0
- package/resources/gateway-drizzle/meta/_journal.json +14 -0
- package/resources/fe-dist/assets/DevicePage-Ccz8gNji.js +0 -24
- package/resources/fe-dist/assets/SettingsPage-FrEtqZyI.js +0 -39
- package/resources/fe-dist/assets/agent-tab-9THUj7Cf.js +0 -38
- package/resources/fe-dist/assets/channel-Dzz9b4fW.js +0 -1
- package/resources/fe-dist/assets/classDiagram-4FO5ZUOK-BB9_4XLL.js +0 -1
- package/resources/fe-dist/assets/classDiagram-v2-Q7XG4LA2-BB9_4XLL.js +0 -1
- package/resources/fe-dist/assets/en_US-CjVU4anP.js +0 -1
- package/resources/fe-dist/assets/index-CuFTSN9i.css +0 -1
- package/resources/fe-dist/assets/ja_JP-Bq-BwOH_.js +0 -1
- package/resources/fe-dist/assets/stateDiagram-v2-BHNVJYJU-kSh9IuUW.js +0 -1
- package/resources/fe-dist/assets/zh_CN-BuxyXhCT.js +0 -1
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import{Y as Ye,u as Ie,j as i,aD as Tt,aE as Ct,aF as jt,aG as Nt,aH as Mt,at as Pt,r as n,d as O,af as pe,ai as ut,ah as dt,ag as kt,aj as It,aI as Lt,aJ as At,o as ke,aK as _t,D as zt,p as Dt,q as $t,s as Bt,aL as tt,aw as ft,b as ht,aM as nt,aN as Ft,c as rt,aC as mt,aO as je,aP as Wt,ay as Ht,aq as Ke,y as Ot,a2 as Xt,B as Ce,T as qt,aQ as Yt,aR as Ut,aS as Vt,aT as Kt,aU as Gt,$ as Qt,aV as Jt,A as Zt,f as en,g as tn,i as nn,k as rn,l as sn,m as on,n as cn}from"./index-B3ddLSja.js";import{T as an,C as ln,c as un,F as dn,a as wt,R as fn,A as hn,f as mn,t as wn,S as pn}from"./terminal-settings-panel-DDhlnbRH.js";import{e as gn}from"./selection-clipboard-D3gUQQ7L.js";import{C as xn}from"./copy-Ct5TNzGp.js";import{S as ct,K as vn}from"./send-DaOB9hLq.js";const bn=/^[0-9a-fA-F]{4}$/;function Sn(t){if(typeof t!="string"||t.length<6)return null;const e=t.slice(0,4);if(!bn.test(e)||t[4]!==",")return null;const s={input:t,pos:5},c=pt(s);return!c||s.pos!==t.length?null:{checksum:e,root:c}}function De(t){const e=t.pos;for(;t.pos<t.input.length;){const s=t.input.charCodeAt(t.pos);if(s<48||s>57)break;t.pos+=1}return t.pos===e?null:Number.parseInt(t.input.slice(e,t.pos),10)}function $e(t,e){return t.input[t.pos]!==e?!1:(t.pos+=1,!0)}function pt(t){const e=De(t);if(e===null||!$e(t,"x"))return null;const s=De(t);if(s===null||!$e(t,","))return null;const c=De(t);if(c===null||!$e(t,","))return null;const l=De(t);if(l===null)return null;const p=t.input[t.pos];if(p===","){t.pos+=1;const v=De(t);return v===null?null:{type:"leaf",paneNumId:v,width:e,height:s,x:c,y:l}}if(p==="{"||p==="["){const v=p==="{"?"}":"]";t.pos+=1;const b=[];for(;;){const R=pt(t);if(!R)return null;if(b.push(R),!$e(t,",")){if($e(t,v))break;return null}}return b.length<2?null:{type:p==="{"?"row":"column",width:e,height:s,x:c,y:l,children:b}}return null}function Ge(t){return`%${t.paneNumId}`}/**
|
|
2
|
-
* @license lucide-react v0.564.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 yn=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M12 3v18",key:"108xh3"}]],En=Ye("columns-2",yn);/**
|
|
7
|
-
* @license lucide-react v0.564.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const Rn=[["path",{d:"m13.5 8.5-5 5",key:"1cs55j"}],["path",{d:"m8.5 8.5 5 5",key:"a8mexj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]],Tn=Ye("search-x",Rn);/**
|
|
12
|
-
* @license lucide-react v0.564.0 - ISC
|
|
13
|
-
*
|
|
14
|
-
* This source code is licensed under the ISC license.
|
|
15
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
-
*/const Cn=[["path",{d:"M14 17H5",key:"gfn3mx"}],["path",{d:"M19 7h-9",key:"6i9tg"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]],jn=Ye("settings-2",Cn);/**
|
|
17
|
-
* @license lucide-react v0.564.0 - ISC
|
|
18
|
-
*
|
|
19
|
-
* This source code is licensed under the ISC license.
|
|
20
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
21
|
-
*/const Nn=[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]],Mn=Ye("smartphone",Nn);function Pn({open:t,onOpenChange:e}){const{t:s}=Ie();return i.jsx(Tt,{open:t,onOpenChange:e,children:i.jsxs(Ct,{side:"bottom",className:"max-h-[88dvh] overflow-y-auto pb-[var(--tmex-safe-area-bottom)] sm:mx-auto sm:max-w-md sm:rounded-t-2xl sm:border sm:border-b-0","data-testid":"keyboard-behavior-sheet",children:[i.jsxs(jt,{children:[i.jsx(Nt,{children:s("settings.terminal.title")}),i.jsx(Mt,{children:s("settings.terminal.savedInBrowser")})]}),i.jsx("div",{className:"px-4 pb-4",children:i.jsx(an,{})})]})})}function kn({visible:t,canPaste:e,onCopy:s,onPaste:c,onDismiss:l}){const{t:p}=Ie();if(!t)return null;const v=b=>{b.preventDefault()};return i.jsxs("div",{className:"absolute top-2 left-1/2 z-20 flex -translate-x-1/2 items-center gap-1 rounded-lg border bg-background/95 p-1 shadow-md backdrop-blur","data-testid":"terminal-selection-toolbar",children:[i.jsxs("button",{type:"button",className:"flex h-9 items-center gap-1.5 rounded-md px-3 text-sm font-medium hover:bg-accent hover:text-accent-foreground",onMouseDown:v,onClick:s,"data-testid":"terminal-selection-copy",children:[i.jsx(xn,{className:"h-4 w-4"}),p("terminal.copy")]}),e&&i.jsxs("button",{type:"button",className:"flex h-9 items-center gap-1.5 rounded-md px-3 text-sm font-medium hover:bg-accent hover:text-accent-foreground",onMouseDown:v,onClick:c,"data-testid":"terminal-selection-paste",children:[i.jsx(ln,{className:"h-4 w-4"}),p("terminal.paste")]}),i.jsx("button",{type:"button",className:"flex h-9 w-9 items-center justify-center rounded-md text-muted-foreground hover:bg-accent hover:text-accent-foreground",onMouseDown:v,onClick:l,"aria-label":p("terminal.clearSelection"),"data-testid":"terminal-selection-dismiss",children:i.jsx(Pt,{className:"h-4 w-4"})})]})}function gt(t){if(!t)return t;const e=t.replace(/\r\n/g,`
|
|
22
|
-
`);return(e.endsWith(`
|
|
23
|
-
`)?e.slice(0,-1):e).replace(/\n/g,`\r
|
|
24
|
-
`)}const In="\x1B[?1049h\x1B[H\x1B[2J";function Ln(t){return In+gt(t)}function An(t,e){let s=e,c=0;for(const b of t)b===10&&!s&&(c+=1),s=b===13;const l=s;if(c===0)return{normalized:t,endedWithCR:l};const p=new Uint8Array(t.length+c);let v=0;s=e;for(const b of t)b===10&&!s&&(p[v]=13,v+=1),p[v]=b,v+=1,s=b===13;return{normalized:p,endedWithCR:l}}const _n=1.3,zn=36,Dn=500,$n=12;function Bn(t,e){const s=n.useRef(!1);return n.useEffect(()=>{const c=t.current;if(!c||!(window.innerWidth<768||navigator.maxTouchPoints>0||"ontouchstart"in window))return;s.current=!0;let p=0,v=null,b=!1,R=0,B=0,$=0,T=null,U=!1;const r=()=>{T!==null&&(clearTimeout(T),T=null)},ae=S=>S?!!(S.closest(".scrollbar")||S.closest(".slider")||S.closest(".xterm-scroll-area")):!1,V=(S,h,M)=>{const W=M instanceof Element?M:null;if(ae(W))return!0;const A=document.elementFromPoint(S,h);if(ae(A))return!0;const H=c.querySelector(".xterm");if(!(H instanceof HTMLElement))return!1;const u=H.getBoundingClientRect(),N=S>=u.left&&S<=u.right,X=h>=u.top&&h<=u.bottom;return!N||!X?!1:S>=u.right-zn},C=()=>[c.querySelector(".xterm-viewport"),c.querySelector(".xterm-scrollable-element")].filter(h=>h instanceof HTMLElement),le=S=>{if(v===null)return null;for(let h=0;h<S.length;h+=1){const M=S.item(h);if(M&&M.identifier===v)return M}return null},se=S=>{if(r(),S.touches.length!==1)return;const h=S.touches.item(0);h&&(v=h.identifier,p=h.clientY,R=0,b=V(h.clientX,h.clientY,S.target),B=h.clientX,$=h.clientY,U=!1,b||(T=setTimeout(()=>{var W;T=null;const M=(e==null?void 0:e())??null;(W=M==null?void 0:M.startTouchSelection)!=null&&W.call(M,B,$,"word")&&(U=!0)},Dn)))},de=S=>{var N,X,J,I,Y,te,me,fe,we;const h=le(S.touches)??S.touches.item(0);if(!h)return;if(U){const _=(e==null?void 0:e())??null;(N=_==null?void 0:_.updateTouchSelection)==null||N.call(_,h.clientX,h.clientY),S.cancelable&&S.preventDefault();return}if(T!==null&&Math.hypot(h.clientX-B,h.clientY-$)>$n&&r(),b||(b=V(h.clientX,h.clientY,S.target),b&&(R=0)),b)return;const M=h.clientY,W=p-M;if(p=M,W===0)return;let A=!1,H=!1;const u=(e==null?void 0:e())??null;if(u){const _=u==null?void 0:u._core,Q=((Y=(I=(J=(X=_==null?void 0:_._renderService)==null?void 0:X.dimensions)==null?void 0:J.css)==null?void 0:I.cell)==null?void 0:Y.height)??18;R+=W*_n;const Z=R>0?Math.floor(R/Q):Math.ceil(R/Q);if(typeof u.handleViewportGesture=="function")Z!==0&&(A=u.handleViewportGesture({source:"touch",deltaY:Z*Q,clientX:h.clientX,clientY:h.clientY}),R-=Z*Q);else if(Z!==0){const j=((me=(te=u.buffer)==null?void 0:te.active)==null?void 0:me.viewportY)??0;u.scrollLines(Z);const a=((we=(fe=u.buffer)==null?void 0:fe.active)==null?void 0:we.viewportY)??0;A=j!==a,H=Z<0&&j<=0&&a<=0,R-=Z*Q}}else{const _=C();if(_.length===0)return;for(const Q of _){const Z=Q.scrollTop;Q.scrollTop+=W;const j=Q.scrollTop;Math.abs(j-Z)>0&&(A=!0),W<0&&j<=0&&(H=!0)}if(!A){const Q=c.querySelector(".xterm");if(Q instanceof HTMLElement){const Z=new WheelEvent("wheel",{bubbles:!0,cancelable:!0,deltaMode:WheelEvent.DOM_DELTA_PIXEL,deltaY:W}),j=Q.dispatchEvent(Z);A=Z.defaultPrevented||!j}}}S.cancelable&&(A||H)&&S.preventDefault()},re=S=>{var M;if(r(),!(v===null||!le(S.changedTouches))&&(v=null,R=0,b=!1,U)){U=!1;const W=(e==null?void 0:e())??null;(M=W==null?void 0:W.endTouchSelection)==null||M.call(W)}},f=S=>{U&&S.preventDefault()};return c.addEventListener("touchstart",se,{passive:!0}),c.addEventListener("touchmove",de,{passive:!1}),c.addEventListener("touchend",re,{passive:!0}),c.addEventListener("touchcancel",re,{passive:!0}),c.addEventListener("contextmenu",f),()=>{s.current=!1,r(),c.removeEventListener("touchstart",se),c.removeEventListener("touchmove",de),c.removeEventListener("touchend",re),c.removeEventListener("touchcancel",re),c.removeEventListener("contextmenu",f)}},[t,e]),s}function Fn({now:t,remoteSize:e,pendingLocalSize:s,ttlMs:c=2e3}){return!s||t-s.at>c?!0:s.cols===e.cols&&s.rows===e.rows}function Wn({currentSize:t,containerSize:e,force:s=!1}){return s?!0:t.cols!==e.cols||t.rows!==e.rows}function Hn({deviceId:t,paneId:e,deviceConnected:s,isSelectionInvalid:c,sizingMode:l="report",onResize:p,onSync:v,getContainerRect:b}){const R=n.useRef(null),B=n.useRef(null),$=n.useRef(null),T=n.useRef(null),U=n.useRef(0),r=n.useRef([]),ae=n.useRef(null),V=n.useRef(null),C=n.useRef(b),le=n.useRef(!1),se=n.useRef(p),de=n.useRef(v);n.useEffect(()=>{se.current=p},[p]),n.useEffect(()=>{de.current=v},[v]),n.useEffect(()=>{C.current=b},[b]);const re=n.useCallback(()=>{var me,fe,we,_,Q,Z,j,a,m,E;const u=V.current,N=ae.current;if(!u||!N||!u.element)return null;let X;try{const y=N.proposeDimensions();if(!y)throw new Error("fitAddon.proposeDimensions() returned null");X=Math.max(2,y.cols)}catch{const y=u._core,q=((_=(we=(fe=(me=y==null?void 0:y._renderService)==null?void 0:me.dimensions)==null?void 0:fe.css)==null?void 0:we.cell)==null?void 0:_.width)??9,oe=(Q=C.current)==null?void 0:Q.call(C);if(!oe||oe.width===0)return null;X=Math.max(2,Math.floor(oe.width/q))}const J=(Z=C.current)==null?void 0:Z.call(C);if(!J||J.height===0)return null;const I=u._core,Y=((E=(m=(a=(j=I==null?void 0:I._renderService)==null?void 0:j.dimensions)==null?void 0:a.css)==null?void 0:m.cell)==null?void 0:E.height)??17,te=Math.max(2,Math.floor(J.height/Y));return{cols:X,rows:te}},[]),f=n.useCallback((u,N)=>{const X=V.current;X&&(X.cols===u&&X.rows===N||X.resize(u,N))},[]),S=n.useCallback((u,N=!1)=>{if(l==="follow"||!t||!e||!s||c&&u!=="sync"||!N&&Date.now()<U.current||!V.current)return!1;const J=re();if(!J)return!1;const{cols:I,rows:Y}=J,te=$.current;return!N&&te&&te.cols===I&&te.rows===Y?(f(I,Y),!0):(f(I,Y),u==="sync"?de.current(I,Y):se.current(I,Y),$.current={cols:I,rows:Y},T.current={cols:I,rows:Y,at:Date.now()},!0)},[f,s,t,c,re,e,l]),h=n.useCallback((u="resize",N={})=>{const{immediate:X=!1,force:J=!1}=N;B.current!==null&&(window.clearTimeout(B.current),B.current=null),R.current!==null&&(cancelAnimationFrame(R.current),R.current=null);const I=()=>{R.current=requestAnimationFrame(()=>{R.current=null,S(u,J)})};if(X){I();return}B.current=window.setTimeout(()=>{B.current=null,I()},150)},[S]),M=n.useCallback(()=>{for(const u of r.current)window.clearTimeout(u);r.current=[]},[]),W=n.useCallback(()=>{var N;M(),h("sync",{immediate:!0,force:!0});const u=window.setTimeout(()=>{h("sync",{immediate:!0,force:!0})},60);r.current.push(u),typeof document<"u"&&"fonts"in document&&((N=document.fonts)!=null&&N.ready)&&document.fonts.ready.then(()=>{h("sync",{immediate:!0,force:!0})}).catch(()=>{})},[M,h]);n.useEffect(()=>{let u=null;const N=()=>{u!==null&&cancelAnimationFrame(u),u=requestAnimationFrame(()=>{u=null,h("resize")})};return window.addEventListener("resize",N),()=>{window.removeEventListener("resize",N),u!==null&&cancelAnimationFrame(u)}},[h]),n.useEffect(()=>{const u=()=>{var me;const I=V.current,Y=re();if(!I||!Y)return;if(!Wn({currentSize:{cols:Math.max(2,I.cols),rows:Math.max(2,I.rows)},containerSize:Y})){(me=I.forceFullRepaint)==null||me.call(I);return}h("sync",{force:!0})},N=()=>{if(document.visibilityState!=="visible"){le.current=!0;return}le.current&&(le.current=!1,u())},X=()=>{le.current=!0},J=()=>{le.current&&(le.current=!1,u())};return document.addEventListener("visibilitychange",N),window.addEventListener("blur",X),window.addEventListener("focus",J),()=>{document.removeEventListener("visibilitychange",N),window.removeEventListener("blur",X),window.removeEventListener("focus",J)}},[re,h]),n.useEffect(()=>()=>{M(),B.current!==null&&window.clearTimeout(B.current),R.current!==null&&cancelAnimationFrame(R.current)},[M]);const A=n.useCallback(u=>{ae.current=u},[]),H=n.useCallback(u=>{V.current=u},[]);return{scheduleResize:h,runPostSelectResize:W,clearPostSelectResizeTimers:M,setFitAddon:A,setTerminal:H,lastReportedSize:$,pendingLocalSize:T,suppressLocalResizeUntil:U}}const On=1e4,Je="tmex:terminal-mode-cache";function Xn(t,e){try{const s=sessionStorage.getItem(Je);return s?JSON.parse(s)[`${t}:${e}`]??null:null}catch{return null}}function qn(t,e,s){try{const c=sessionStorage.getItem(Je),l=c?JSON.parse(c):{},p=`${t}:${e}`;s?l[p]=s:delete l[p],sessionStorage.setItem(Je,JSON.stringify(l))}catch{}}function Yn(){return{mouseX10:!1,mouseNormal:!0,mouseButton:!1,mouseAny:!1,mouseUtf8:!1,mouseSgr:!0,mouseSgrPixels:!1,mouseUrxvt:!1,altScroll:!0,altScreen1047:!1,altScreen1049:!1}}function Un(t,e){if(!e)return t?{...t,mouseX10:!1,mouseNormal:!1,mouseButton:!1,mouseAny:!1,mouseUtf8:!1,mouseSgrPixels:!1,mouseUrxvt:!1,altScreen1047:!1,altScreen1049:!1}:null;const s=Yn();if(!t)return s;const c=t.mouseNormal||t.mouseButton||t.mouseAny;return{...t,mouseX10:!1,mouseUtf8:!1,mouseSgr:!0,mouseSgrPixels:!1,mouseUrxvt:!1,altScroll:!0,altScreen1047:!1,altScreen1049:!1,mouseNormal:c?t.mouseNormal:s.mouseNormal}}function Vn(t){var s;const e=globalThis;e.__tmexE2eXterm=t,e.__tmexE2eTerminal=t,e.__tmexE2eTerminalEngine=wt,e.__tmexE2eTerminalRenderer=((s=t.getRendererKind)==null?void 0:s.call(t))??null}function Kn(t){if(!t)return;const e=globalThis;e.__tmexE2eTerminal!==t&&e.__tmexE2eXterm!==t||(e.__tmexE2eXterm=null,e.__tmexE2eTerminal=null,e.__tmexE2eTerminalEngine=null,e.__tmexE2eTerminalRenderer=null,e.__tmexE2eTerminalSelectionText=null)}const st=n.forwardRef(({deviceId:t,paneId:e,theme:s,inputMode:c,deviceConnected:l,isSelectionInvalid:p,sizingMode:v="report",autoFocus:b=!0,focused:R=!0,onResize:B,onSync:$,children:T},U)=>{const[r,ae]=n.useState(null),[V,C]=n.useState(!1),le=O(d=>d.sendInput),se=pe(d=>d.terminalFontId),de=pe(d=>d.terminalFontSize),re=pe(d=>d.terminalLineHeight),{t:f}=Ie(),S=n.useMemo(()=>{switch(s){case"light":return dt;default:return ut}},[s]),h=n.useRef(null),M=n.useRef(null),W=n.useRef(null),A=n.useRef(t),H=n.useRef(e),u=n.useRef(t),N=n.useRef(e),X=n.useRef(l&&!p),J=n.useRef(c),I=n.useRef(S),Y=n.useRef(!1),te=n.useRef(!1),me=n.useRef(null),fe=n.useRef(!1),we=n.useCallback((d,x,L)=>{!(d!=null&&d.exportModeSnapshot)||!x||!L||qn(x,L,d.exportModeSnapshot())},[]),_=n.useCallback(()=>r,[r]);Bn(h,_),n.useEffect(()=>{A.current=t,H.current=e,te.current=!1},[t,e]),n.useEffect(()=>{X.current=l&&!p},[l,p]),n.useEffect(()=>{J.current=c},[c]),n.useEffect(()=>{I.current=S},[S]);const Q=n.useCallback(d=>{if(!d||c!=="direct"||!X.current)return;const x=A.current,L=H.current;!x||!L||le(x,L,d,!1)},[c,le]),{pendingLocalSize:Z,scheduleResize:j,runPostSelectResize:a,setFitAddon:m,setTerminal:E}=Hn({deviceId:t,paneId:e,deviceConnected:l,isSelectionInvalid:p,sizingMode:v,onResize:B,onSync:$,getContainerRect:()=>{const d=h.current;if(!d)return null;const x=d.getBoundingClientRect();return{width:x.width,height:x.height}}});n.useEffect(()=>{let d=!1,x=null;return(async()=>{if(await kt(se,de),d)return;const L=await un({fontFamily:It(se),fontSize:de,lineHeight:re,scrollback:On,theme:I.current,disableStdin:J.current==="editor"});if(d){L.dispose();return}x=L,M.current&&L.open(M.current),ae(L)})(),()=>{d=!0,ae(null),Kn(x),x==null||x.dispose()}},[se,de,re]),n.useEffect(()=>{!r||!b||Vn(r)},[r,b]),n.useEffect(()=>{var d;(d=r==null?void 0:r.setFocused)==null||d.call(r,R)},[r,R]),n.useEffect(()=>{!r||!("setTheme"in r)||r.setTheme(S)},[r,S]),n.useEffect(()=>{!r||!("setDisableStdin"in r)||r.setDisableStdin(c==="editor")},[r,c]),n.useEffect(()=>{if(!(r!=null&&r.getCursorViewportRect))return;const d=()=>{var x;return((x=r.getCursorViewportRect)==null?void 0:x.call(r))??null};return _t(d),()=>Lt(d)},[r]),n.useEffect(()=>{!r||c!=="direct"||!b||window.innerWidth<768||"ontouchstart"in window||r.focus()},[r,c,b]);const y=n.useMemo(()=>r?{onReset:()=>{we(r,u.current,N.current),fe.current=!0,r.reset(),Y.current=!1,a()},onApplyHistory:(d,x)=>{var P,ie;const L=Un(Xn(A.current,H.current),x);L&&((P=r.restoreModeSnapshot)==null||P.call(r,L));const z=x?Ln(d):gt(d);te.current=!0,r.write(z),(ie=r.forceFullRepaint)==null||ie.call(r),fe.current=!1,u.current=A.current,N.current=H.current,we(r,A.current,H.current)},onOutput:d=>{const x=An(d,Y.current);Y.current=x.endedWithCR,r.write(x.normalized),te.current&&(r.buffer.active.baseY<=1&&r.scrollToTop(),te.current=!1),u.current=A.current,N.current=H.current,we(r,A.current,H.current)}}:null,[r,we,a]);n.useEffect(()=>{r?me.current!==r&&(Y.current=!1,u.current=A.current,N.current=H.current,me.current=r):me.current=null},[r]),n.useEffect(()=>{if(!(!r||!t||!e))return()=>{if(fe.current){fe.current=!1;return}we(r,u.current,N.current)}},[t,r,e,we]),n.useEffect(()=>{if(!(!y||!t||!e))return At(t,e,y)},[y,t,e]),n.useEffect(()=>{if(!r){W.current=null,m(null),E(null);return}const d=new dn;return r.loadAddon(d),W.current=d,m(d),E(r),a(),()=>{try{d.dispose()}finally{W.current=null,m(null),E(null)}}},[r,a,m,E]),n.useEffect(()=>{const d=h.current;if(!d)return;let x=null;const L=new ResizeObserver(()=>{x!==null&&cancelAnimationFrame(x),x=requestAnimationFrame(()=>{x=null,j("resize")})});return L.observe(d),()=>{L.disconnect(),x!==null&&cancelAnimationFrame(x)}},[j]),n.useEffect(()=>{if(!r||!t||!e)return;const d=r.onData(x=>{!l||p||Q(x)});return r.attachCustomKeyEventHandler(x=>!l||p||x.type!=="keydown"||c!=="direct"?!0:x.shiftKey&&x.key==="Enter"?(x.preventDefault(),Q("\x1B[13;2u"),!1):!0),()=>{d.dispose(),r.attachCustomKeyEventHandler(()=>!0)}},[r,l,p,c,Q,t,e]),n.useEffect(()=>{if(!(r!=null&&r.onLinkActivated))return;const d=r.onLinkActivated(x=>{window.open(x,"_blank","noopener,noreferrer")});return()=>d.dispose()},[r]),n.useEffect(()=>{if(!(r!=null&&r.onSelectionChange)){C(!1);return}const d=r.onSelectionChange(x=>{C(!!x)});return()=>{d.dispose(),C(!1)}},[r]);const q=n.useCallback(()=>{var x;if(!r)return;const d=((x=r.getSelection)==null?void 0:x.call(r))??"";d&&gn(d).then(()=>{ke.success(f("terminal.copied"))}).catch(()=>{ke.error(f("terminal.copyFailed"))}).finally(()=>{var L;(L=r.clearSelection)==null||L.call(r),r.focus()})},[r,f]),oe=n.useCallback(()=>{var x;if(!r)return;((x=navigator.clipboard)!=null&&x.readText?navigator.clipboard.readText():Promise.reject(new Error("clipboard unavailable"))).then(L=>{var z;L&&r.paste(L),(z=r.clearSelection)==null||z.call(r),r.focus()}).catch(()=>{ke.error(f("terminal.pasteFailed"))})},[r,f]),he=n.useCallback(()=>{var d;(d=r==null?void 0:r.clearSelection)==null||d.call(r),r==null||r.focus()},[r]);return n.useImperativeHandle(U,()=>({write:d=>r==null?void 0:r.write(d),reset:()=>{r==null||r.reset(),Y.current=!1},scrollToBottom:()=>r==null?void 0:r.scrollToBottom(),resize:(d,x)=>r==null?void 0:r.resize(d,x),getTerminal:()=>r??null,getSize:()=>r?{cols:Math.max(2,r.cols),rows:Math.max(2,r.rows)}:null,runPostSelectResize:()=>a(),scheduleResize:(d,x)=>j(d,x),calculateSizeFromContainer:()=>{var ge,F,ee,D,K,G,ce,ye,Ee,xe,Pe,Le,_e,ue,Ae,Ne;const d=h.current,x=r,L=W.current;if(!d||!x)return null;const z=d.getBoundingClientRect();if(z.width===0||z.height===0)return null;const P=x._core;let ie;if(L)try{const Te=L.proposeDimensions();if(Te)ie=Math.max(2,Te.cols);else{const Fe=((D=(ee=(F=(ge=P==null?void 0:P._renderService)==null?void 0:ge.dimensions)==null?void 0:F.css)==null?void 0:ee.cell)==null?void 0:D.width)??9;ie=Math.max(2,Math.floor(z.width/Fe))}}catch{const Te=((ye=(ce=(G=(K=P==null?void 0:P._renderService)==null?void 0:K.dimensions)==null?void 0:G.css)==null?void 0:ce.cell)==null?void 0:ye.width)??9;ie=Math.max(2,Math.floor(z.width/Te))}else{const Te=((Le=(Pe=(xe=(Ee=P==null?void 0:P._renderService)==null?void 0:Ee.dimensions)==null?void 0:xe.css)==null?void 0:Pe.cell)==null?void 0:Le.width)??9;ie=Math.max(2,Math.floor(z.width/Te))}const Re=((Ne=(Ae=(ue=(_e=P==null?void 0:P._renderService)==null?void 0:_e.dimensions)==null?void 0:ue.css)==null?void 0:Ae.cell)==null?void 0:Ne.height)??17,Se=Math.max(2,Math.floor(z.height/Re));return{cols:ie,rows:Se}},getPendingLocalSize:()=>Z.current,getCellSize:()=>{var L,z,P;const d=r==null?void 0:r._core,x=(P=(z=(L=d==null?void 0:d._renderService)==null?void 0:L.dimensions)==null?void 0:z.css)==null?void 0:P.cell;return!(x!=null&&x.width)||!(x!=null&&x.height)?null:{width:x.width,height:x.height}}}),[r,Z,a,j]),i.jsxs("div",{className:"flex h-full w-full flex-col",style:{backgroundColor:S.background},"data-terminal-engine":wt,children:[i.jsxs("div",{ref:h,className:"relative min-h-0 w-full flex-1",children:[i.jsx("div",{ref:M,className:"absolute inset-0"}),i.jsx(kn,{visible:V,canPaste:c==="direct"&&l&&!p,onCopy:q,onPaste:oe,onDismiss:he})]}),T]})});st.displayName="Terminal";function Gn({window:t,currentPaneId:e,onSelectPane:s}){const{t:c}=Ie();return i.jsxs(zt,{children:[i.jsxs(Dt,{"data-testid":"pane-switcher-button","aria-label":c("window.switchPane"),title:c("window.switchPane"),className:"relative inline-flex size-7 items-center justify-center rounded-[min(var(--radius-md),12px)] text-sm hover:bg-muted hover:text-foreground data-popup-open:bg-muted",children:[i.jsx(En,{className:"h-4 w-4"}),i.jsx("span",{className:"absolute -right-0.5 -top-0.5 flex h-3.5 min-w-3.5 items-center justify-center rounded-full bg-primary px-0.5 text-[9px] font-medium leading-none text-primary-foreground",children:t.panes.length})]}),i.jsx($t,{align:"end",backdrop:!0,className:"min-w-56 max-w-[80vw]","data-testid":"pane-switcher-menu",children:t.panes.map(l=>{const p=l.id===e;return i.jsxs(Bt,{"data-testid":"pane-switcher-item","data-pane-id":l.id,className:`py-2 [@media(any-pointer:coarse)]:py-2.5 ${p?"bg-primary/10 text-primary":l.active?"bg-accent text-accent-foreground":""}`,onClick:()=>{p||s(l.id)},children:[i.jsxs("span",{className:"min-w-0 flex-1",children:[i.jsx("span",{className:"font-mono text-[11px] leading-tight font-medium line-clamp-2 [overflow-wrap:break-word]",children:l.customName||l.title||c("window.pane")}),l.currentCommand&&i.jsx("span",{className:"font-mono text-[10.5px] leading-tight text-muted-foreground line-clamp-1 break-all",children:l.currentPath?`${l.currentCommand}@${l.currentPath}`:l.currentCommand})]}),p&&i.jsx("span",{className:"h-1.5 w-1.5 shrink-0 rounded-full bg-primary"})]},l.id)})})]})}const We=2;function He(t){if(t.type==="leaf")return We;if(t.type==="row"){let s=t.children.length-1;for(const c of t.children)s+=He(c);return s}let e=We;for(const s of t.children)e=Math.max(e,He(s));return e}function Oe(t){if(t.type==="leaf")return We;if(t.type==="column"){let s=t.children.length-1;for(const c of t.children)s+=Oe(c);return s}let e=We;for(const s of t.children)e=Math.max(e,Oe(s));return e}function Ze(t){return t.type==="leaf"?t:t.type==="row"?Ze(t.children[t.children.length-1]):Ze(t.children[0])}function et(t){return t.type==="leaf"?t:t.type==="column"?et(t.children[t.children.length-1]):et(t.children[0])}function Qn(t,e){const s=[],c=[],l=p=>{if(p.type==="leaf"){s.push({paneId:Ge(p),cols:p.width,rows:p.height,rect:{left:p.x*e.width,top:p.y*e.height,width:p.width*e.width,height:p.height*e.height}});return}for(let v=0;v<p.children.length;v+=1){const b=p.children[v];if(l(b),v===p.children.length-1)continue;const R=p.children[v+1];if(p.type==="row"){const B=Ze(b);c.push({axis:"x",rect:{left:(b.x+b.width)*e.width,top:p.y*e.height,width:e.width,height:p.height*e.height},edgeLeafPaneId:Ge(B),edgeLeafSizeCells:B.width,minDeltaCells:-(b.width-He(b)),maxDeltaCells:R.width-He(R)})}else{const B=et(b);c.push({axis:"y",rect:{left:p.x*e.width,top:(b.y+b.height)*e.height,width:p.width*e.width,height:e.height},edgeLeafPaneId:Ge(B),edgeLeafSizeCells:B.height,minDeltaCells:-(b.height-Oe(b)),maxDeltaCells:R.height-Oe(R)})}}};return l(t),{panes:s,gutters:c}}function Xe(t){if(t.type==="leaf")return 1;if(t.type==="column"){let s=0;for(const c of t.children)s+=Xe(c);return s}let e=1;for(const s of t.children)e=Math.max(e,Xe(s));return e}function qe(t){if(t.type==="leaf")return 1;if(t.type==="row"){let s=0;for(const c of t.children)s+=qe(c);return s}let e=1;for(const s of t.children)e=Math.max(e,qe(s));return e}function Jn(t,e){const s=Xe(t),c=qe(t),l=Math.max(0,e.viewport.width-c*e.paneChrome.width),p=Math.max(0,e.viewport.height-s*e.paneChrome.height),v=Math.max(2,Math.floor(l/e.cell.width)),b=Math.max(2,Math.floor(p/e.cell.height));return{cols:v,rows:b}}function Zn(t,e){const s=Math.min(1,Math.max(0,t)),c=Math.min(1,Math.max(0,e)),l=[["left",s],["right",1-s],["top",c],["bottom",1-c]];return l.sort((p,v)=>p[1]-v[1]),l[0][0]}const at=150,er=200,tr=15,nr=46,rr=38,sr=12,or=6;function lt(t){var e,s;return((e=t==null?void 0:t.customName)==null?void 0:e.trim())||((s=t==null?void 0:t.title)==null?void 0:s.trim())||"Pane"}function ir(t){var c,l;const e=(c=t==null?void 0:t.currentCommand)==null?void 0:c.trim();if(!e)return null;const s=(l=t==null?void 0:t.currentPath)==null?void 0:l.trim();return s?`${e}@${s}`:e}const cr={left:"left-0 top-0 bottom-0 w-1/2",right:"right-0 top-0 bottom-0 w-1/2",top:"left-0 right-0 top-0 h-1/2",bottom:"left-0 right-0 bottom-0 h-1/2"};function ar({deviceId:t,window:e,focusedPaneId:s,theme:c,inputMode:l,deviceConnected:p,focusedTerminalRef:v,onUserSelectPane:b,onWindowResize:R}){var Q,Z,j;const B=n.useRef(null),$=n.useRef(new Map),[T,U]=n.useState(null),[r,ae]=n.useState(null),{t:V}=Ie(),C=O(a=>a.subscribePanes),le=O(a=>a.fetchPaneHistory),se=O(a=>a.resizePaneInWindow),de=O(a=>a.movePane),re=O(a=>a.breakPane),f=O(a=>a.closePane),S=n.useMemo(()=>{const a=new Map;for(const m of e.panes)a.set(m.id,m);return a},[e.panes]),h=n.useMemo(()=>e.layout?Sn(e.layout):null,[e.layout]),M=n.useMemo(()=>h?Qn(h.root,{width:1,height:1}):null,[h]),W=n.useRef(M);W.current=M;const A=(h==null?void 0:h.root.width)??1,H=(h==null?void 0:h.root.height)??1,u=e.panes.map(a=>a.id).join(",");n.useEffect(()=>(C(t,u?u.split(","):[]),()=>{C(t,[])}),[t,u,C]);const N=n.useRef({key:"",fetched:new Set});n.useEffect(()=>{const a=`${t}:${e.id}`;N.current.key!==a&&(N.current={key:a,fetched:new Set});for(const m of u?u.split(","):[])N.current.fetched.has(m)||m!==s&&(N.current.fetched.add(m),le(t,m))},[t,e.id,u,s,le]),n.useEffect(()=>{var m,E;l!=="direct"||window.innerWidth<768||"ontouchstart"in window||(E=(m=$.current.get(s))==null?void 0:m.getTerminal())==null||E.focus()},[s,l]);const X=n.useCallback(()=>{var a;for(const m of[s,...$.current.keys()]){const E=(a=$.current.get(m))==null?void 0:a.getCellSize();if(E)return E}return null},[s]);n.useEffect(()=>{var a;if(M)for(const m of M.panes)(a=$.current.get(m.paneId))==null||a.resize(m.cols,m.rows)},[M]);const J=n.useMemo(()=>h?Xe(h.root):1,[h]),I=n.useMemo(()=>h?qe(h.root):1,[h]),Y=n.useCallback(()=>{const a=B.current;if(!a||!h)return!1;const m=a.getBoundingClientRect();if(m.width<1||m.height<1)return!1;const E=X();if(!E)return!1;const{cols:y,rows:q}=Jn(h.root,{viewport:{width:m.width,height:m.height},cell:E,paneChrome:{width:sr,height:nr}});return R(y,q),!0},[X,h,R]),te=n.useRef(Y);n.useEffect(()=>{te.current=Y},[Y]),n.useEffect(()=>{const a=B.current;if(!a)return;let m=null,E=null,y=0;const q=()=>{if(te.current()){y=0;return}y<tr&&(y+=1,E=setTimeout(q,er))},oe=new ResizeObserver(()=>{m&&clearTimeout(m),m=setTimeout(q,at)});return oe.observe(a),()=>{oe.disconnect(),m&&clearTimeout(m),E&&clearTimeout(E)}},[]),n.useEffect(()=>{const a=setTimeout(()=>{te.current()},at);return()=>clearTimeout(a)},[J,I]);const me=n.useCallback((a,m,E)=>{E.preventDefault();const y=B.current;if(!y)return;const q=E.clientX,oe=E.clientY,he=E.currentTarget;he.setPointerCapture(E.pointerId),U({gutterIndex:a,deltaPx:0});const d=P=>{const ie=m.axis==="x"?P.clientX-q:P.clientY-oe;U({gutterIndex:a,deltaPx:ie})},x=(P,ie)=>{if(he.removeEventListener("pointermove",d),he.removeEventListener("pointerup",L),he.removeEventListener("pointercancel",z),window.removeEventListener("pointerup",L),window.removeEventListener("pointercancel",z),U(null),!ie)return;const Re=X();if(!Re)return;const Se=m.axis==="x"?P.clientX-q:P.clientY-oe,ge=m.axis==="x"?Re.width:Re.height;if(ge<=0)return;const F=Math.round(Se/ge);if(F===0)return;const ee=y.querySelector(`[data-pane-id="${m.edgeLeafPaneId}"]`);if(!ee)return;const D=ee.getBoundingClientRect(),G=(m.axis==="x"?Math.floor(D.width/ge):Math.floor(D.height/ge))+F;G<2||(te.current(),se(t,m.edgeLeafPaneId,m.axis==="x"?{cols:G}:{rows:G}))},L=P=>x(P,!0),z=P=>x(P,!1);he.addEventListener("pointermove",d),window.addEventListener("pointerup",L),window.addEventListener("pointercancel",z)},[t,X,se]),fe=n.useCallback((a,m)=>{const E=B.current,y=M;if(!E||!y)return;m.preventDefault();const q=m.clientX,oe=m.clientY,he=m.currentTarget;he.setPointerCapture(m.pointerId);let d=!1;const x=(F,ee)=>{const D=E.getBoundingClientRect();if(D.width<1||D.height<1)return null;const K=(F-D.left)/D.width*Math.max(1,A),G=(ee-D.top)/D.height*Math.max(1,H);for(const ce of y.panes)if(K>=ce.rect.left&&K<=ce.rect.left+ce.rect.width&&G>=ce.rect.top&&G<=ce.rect.top+ce.rect.height){const ye=(K-ce.rect.left)/Math.max(1e-6,ce.rect.width),Ee=(G-ce.rect.top)/Math.max(1e-6,ce.rect.height);return{paneId:ce.paneId,position:Zn(ye,Ee)}}return null},L=(F,ee,D)=>F>=D.left&&F<=D.right&&ee>=D.top&&ee<=D.bottom,z=(F,ee)=>{for(const D of Array.from(document.querySelectorAll('[data-testid^="window-item-"]'))){const K=D.getBoundingClientRect();if(K.width<1||!L(F,ee,K))continue;const G=(D.getAttribute("data-testid")??"").replace("window-item-","");return!G||G===e.id?null:{type:"window",windowId:G,rect:{left:K.left,top:K.top,width:K.width,height:K.height}}}for(const D of Array.from(document.querySelectorAll('[data-slot="sidebar"]'))){const K=D.getBoundingClientRect();if(!(K.width<1||!L(F,ee,K)))return{type:"break",rect:{left:K.left,top:K.top,width:K.width,height:K.height}}}return null},P=(F,ee)=>{const D=x(F,ee);return D?D.paneId===a?null:{type:"pane",...D}:z(F,ee)},ie=F=>{const ee=Math.hypot(F.clientX-q,F.clientY-oe);!d&&ee<or||(d=!0,ae({srcPaneId:a,active:!0,pointerX:F.clientX,pointerY:F.clientY,target:P(F.clientX,F.clientY)}))},Re=(F,ee)=>{var K,G;if(he.removeEventListener("pointermove",ie),he.removeEventListener("pointerup",Se),he.removeEventListener("pointercancel",ge),window.removeEventListener("pointerup",Se),window.removeEventListener("pointercancel",ge),ae(null),!ee||!d)return;const D=P(F.clientX,F.clientY);if(D){if(D.type==="pane"){de(t,a,D.paneId,D.position);return}if(D.type==="window"){const ce=(G=(K=O.getState().snapshots[t])==null?void 0:K.session)==null?void 0:G.windows,ye=ce==null?void 0:ce.find(xe=>xe.id===D.windowId),Ee=(ye==null?void 0:ye.panes.find(xe=>xe.active))??(ye==null?void 0:ye.panes[0]);Ee&&de(t,a,Ee.id,"right");return}re(t,a)}},Se=F=>Re(F,!0),ge=F=>Re(F,!1);he.addEventListener("pointermove",ie),window.addEventListener("pointerup",Se),window.addEventListener("pointercancel",ge)},[t,M,de,re,A,H,e.id]),we=n.useCallback(a=>m=>{var E;if(m){$.current.set(a,m);const y=(E=W.current)==null?void 0:E.panes.find(q=>q.paneId===a);y&&m.resize(y.cols,y.rows)}else $.current.delete(a);a===s&&v(m)},[s,v]);if(n.useEffect(()=>{v($.current.get(s)??null)},[s,v]),!M)return null;const _=(a,m)=>`${a/Math.max(1,m)*100}%`;return i.jsxs("div",{ref:B,className:"relative h-full w-full min-h-0 min-w-0","data-testid":"split-terminal-area",children:[M.panes.map(a=>{var he;const m=a.paneId===s,E=S.get(a.paneId),y=ir(E),q=(r==null?void 0:r.active)&&r.srcPaneId===a.paneId,oe=r!=null&&r.active&&((he=r.target)==null?void 0:he.type)==="pane"&&r.target.paneId===a.paneId?r.target.position:null;return i.jsxs("div",{className:`absolute flex flex-col overflow-hidden ${q?"opacity-60":""}`,"data-testid":"split-pane","data-pane-id":a.paneId,"data-focused":m||void 0,style:{left:_(a.rect.left,A),top:_(a.rect.top,H),width:_(a.rect.width,A),height:_(a.rect.height,H)},onPointerDownCapture:()=>{m||b(e.id,a.paneId)},children:[i.jsx("div",{className:"shrink-0 px-1.5 pt-1.5 pb-2",style:{height:rr},children:i.jsxs("div",{"data-testid":"split-pane-titlebar","data-active":m||void 0,className:`flex h-6 cursor-grab touch-none select-none items-center gap-1.5 rounded-md px-2.5 transition-colors active:cursor-grabbing ${m?"bg-foreground/10":"bg-foreground/[0.04]"}`,onPointerDown:d=>fe(a.paneId,d),children:[i.jsx("span",{className:`shrink-0 truncate font-mono text-[10.5px] leading-none ${m?"text-foreground/90":"text-foreground/50"}`,children:lt(E)}),y&&i.jsx("span",{className:`min-w-0 flex-1 truncate font-mono text-[10px] leading-none ${m?"text-muted-foreground":"text-muted-foreground/60"}`,children:y}),i.jsx("button",{type:"button","data-testid":`split-pane-close-${a.paneId}`,"aria-label":V("window.closePane"),title:V("window.closePane"),className:"ml-auto flex h-4 w-4 shrink-0 items-center justify-center rounded text-muted-foreground/50 hover:bg-foreground/10 hover:text-foreground",onPointerDown:d=>d.stopPropagation(),onClick:d=>{d.stopPropagation(),f(t,a.paneId)},children:i.jsx("span",{className:"text-xs leading-none",children:"×"})})]})}),i.jsx("div",{className:"relative min-h-0 flex-1 overflow-hidden px-1.5 pb-2","data-pane-content-id":a.paneId,children:i.jsx(st,{ref:we(a.paneId),deviceId:t,paneId:a.paneId,theme:c,inputMode:l,deviceConnected:p,isSelectionInvalid:!1,sizingMode:"follow",autoFocus:m,focused:m,onResize:()=>{},onSync:()=>{}},`${t}:${a.paneId}`)}),oe&&i.jsx("div",{"data-testid":"split-pane-drop-preview","data-position":oe,className:`pointer-events-none absolute z-30 rounded-sm bg-primary/20 ring-1 ring-inset ring-primary/60 ${cr[oe]}`})]},a.paneId)}),(T!==null||(r==null?void 0:r.active))&&i.jsx("div",{"data-testid":"split-drag-shield",className:`absolute inset-0 z-30 ${T!==null?((Q=M.gutters[T.gutterIndex])==null?void 0:Q.axis)==="x"?"cursor-col-resize":"cursor-row-resize":"cursor-grabbing"}`}),(r==null?void 0:r.active)&&r.target&&r.target.type!=="pane"&&i.jsx("div",{"data-testid":"split-pane-sidebar-drop","data-drop-type":r.target.type,className:"pointer-events-none fixed z-40 rounded-lg bg-primary/15 ring-1 ring-inset ring-primary/50",style:{left:r.target.rect.left,top:r.target.rect.top,width:r.target.rect.width,height:r.target.rect.height}}),(r==null?void 0:r.active)&&i.jsxs("div",{className:"pointer-events-none fixed z-50 rounded border border-primary/40 bg-popover/95 px-2 py-1 font-mono text-[10.5px] text-popover-foreground shadow-md",style:{left:r.pointerX+12,top:r.pointerY+12},children:[i.jsx("div",{children:lt(S.get(r.srcPaneId))}),((Z=r.target)==null?void 0:Z.type)==="window"&&i.jsx("div",{className:"text-[9.5px] text-muted-foreground",children:V("window.moveToWindow")}),((j=r.target)==null?void 0:j.type)==="break"&&i.jsx("div",{className:"text-[9.5px] text-muted-foreground",children:V("window.breakToWindow")})]}),M.gutters.map((a,m)=>{const E=a.axis==="x",y=(T==null?void 0:T.gutterIndex)===m;return i.jsxs("div",{className:"absolute z-20",style:{left:_(a.rect.left,A),top:_(a.rect.top,H),width:_(E?1:a.rect.width,A),height:_(E?a.rect.height:1,H)},children:[i.jsx("div",{"data-testid":"split-gutter","data-axis":a.axis,className:`absolute touch-none select-none ${E?"-inset-x-1 inset-y-0 cursor-col-resize":"inset-x-0 -inset-y-1 cursor-row-resize"}`,onPointerDown:q=>me(m,a,q),children:i.jsx("div",{className:`absolute bg-foreground/[0.08] transition-colors hover:bg-primary/50 ${E?"inset-y-0 left-1/2 w-px -translate-x-1/2":"inset-x-0 top-1/2 h-px -translate-y-1/2"} ${y?"bg-primary":""}`})}),y&&T&&i.jsx("div",{className:"pointer-events-none absolute bg-primary/70",style:E?{top:0,bottom:0,width:2,left:`calc(50% + ${T.deltaPx}px)`}:{left:0,right:0,height:2,top:`calc(50% + ${T.deltaPx}px)`}})]},`${e.layout??""}:${m}`)})]})}const lr=1200,ur=2e3;function Me(t,e){return!t||!e?!1:t.windowId===e.windowId&&t.paneId===e.paneId}function xt(t,e){const s=t.filter(c=>e-c.at<lr);return s.length===0?null:s.reduce((c,l)=>l.at>c.at?l:c)}function Be(t,e=Date.now()){return!t||e-t.at>ur?null:t}function dr(t){const e=t.now??Date.now(),s=xt(t.recentSelectRequests,e),c=p=>!!(p&&p.paneId===t.activePaneFromEvent.paneId&&p.windowId!==t.activePaneFromEvent.windowId);if(s&&!Me(s,t.activePaneFromEvent)&&!c(s)||Me(t.currentRoute,t.activePaneFromEvent)||Me(t.lastHandledActive,t.activePaneFromEvent))return!0;const l=Be(t.pendingUserSelection,e);return!!(l&&!Me(l,t.activePaneFromEvent)&&!c(l))}function fr(t){const e=t.now??Date.now(),s=xt(t.recentSelectRequests,e),c=Be(t.pendingUserSelection,e);return!!(c&&!Me(c,t.snapshotActive)||s&&!Me(s,t.snapshotActive))}function hr(t){const e=t.now??Date.now(),s=Be(t.pendingUserSelection,e);return!(s&&Me(s,t.routeTarget)||t.snapshotActive&&Me(t.snapshotActive,t.routeTarget))}const Qe=n.memo(function({onActivate:e,disabled:s}){const{data:c}=rt({queryKey:wn,queryFn:mn,staleTime:6e4}),l=(c==null?void 0:c.items)??[];return l.length===0?null:i.jsx("div",{className:"terminal-shortcuts-strip","data-testid":"terminal-shortcuts-strip",children:i.jsx(pn,{items:l,useIcons:(c==null?void 0:c.useIcons)??!1,onActivate:e,disabled:s,preventFocusSteal:!0,rowTestId:"terminal-shortcuts-row",idPrefix:"terminal-shortcut"})})});function vr(){var it;const{t}=Ie(),{deviceId:e,windowId:s,paneId:c}=tt(),l=ft(),p=n.useRef(null),v=n.useRef(null),b=n.useRef(null),R=n.useRef(null),B=n.useRef(!1),$=n.useRef(!1),T=n.useRef(null),U=O(o=>o.selectPane),r=O(o=>o.focusPane),ae=O(o=>e?o.snapshots[e]:void 0),V=O(o=>{var g;return e?(g=o.deviceErrors)==null?void 0:g[e]:void 0}),C=O(o=>{var g;return e?((g=o.deviceConnected)==null?void 0:g[e])??!1:!1}),se=!!O(o=>{var g;return e?(g=o.deviceReconnecting)==null?void 0:g[e]:void 0}),de=O(o=>e?o.connectedDevices.has(e):!1),re=ht(o=>{var g;return((g=o.settings)==null?void 0:g.siteName)??"tmex"}),f=n.useMemo(()=>nt(c),[c]),S=n.useMemo(()=>e&&f?`${e}:${f}`:null,[e,f]),[h,M]=n.useState(!1),W=n.useRef(!1);n.useEffect(()=>{W.current=h},[h]);const[A,H]=n.useState(""),u=n.useRef(!1),N=!C||!f,[X,J]=n.useState(!1),I=pe(o=>o.inputMode),Y=pe(o=>o.theme),te=pe(o=>o.editorSendWithEnter),me=pe(o=>o.setEditorSendWithEnter),fe=pe(o=>o.addEditorHistory),we=pe(o=>o.setEditorDraft),_=pe(o=>o.removeEditorDraft),Q=pe(o=>S?o.editorDrafts[S]??"":""),Z=n.useMemo(()=>Ft(),[]),j=(it=ae==null?void 0:ae.session)==null?void 0:it.windows,a=Y==="light"?dt:ut,{data:m}=rt({queryKey:["devices"],queryFn:async()=>{const o=await fetch("/api/devices");if(!o.ok)throw new Error("Failed to fetch devices");return o.json()},throwOnError:!1}),E=n.useMemo(()=>{if(e)return m==null?void 0:m.devices.find(o=>o.id===e)},[e,m==null?void 0:m.devices]),y=n.useMemo(()=>{if(!(!s||!j))return j.find(o=>o.id===s)},[s,j]),q=n.useMemo(()=>{if(!(!f||!y))return y.panes.find(o=>o.id===f)},[f,y]),oe=!!j,x=oe&&!!s&&!y?t("terminal.windowClosed"):oe&&!!s&&!!f&&!!y&&!q?t("terminal.paneClosed"):null,L=!!x,z=!!(C&&f&&!L),P=!!(!h&&y&&y.panes.length>1&&y.layout&&!L),ie=n.useRef(P);n.useEffect(()=>{ie.current=P},[P]);const Re=n.useMemo(()=>{if(!y||!q)return null;const o=(E==null?void 0:E.name)??e;return mt({paneCustomName:q.customName,paneTitle:q.title,windowName:y.name,windowCustomName:y.customName,deviceName:o})},[E==null?void 0:E.name,e,q,y]),Se=n.useMemo(()=>{if(!j||j.length===0)return null;const o=j.find(w=>w.active),g=o==null?void 0:o.panes.find(w=>w.active);return!o||!g?null:{windowId:o.id,paneId:g.id}},[j]),ge=h&&y&&y.panes.length>1?y.id:null,F=n.useRef(ge);n.useEffect(()=>{F.current=ge},[ge]);const ee=n.useRef(!1);n.useEffect(()=>{ee.current=!!j&&!!s},[j,s]);const D=n.useCallback((o,g)=>{if(!e||!f)return;const w=F.current;if(w){O.getState().applyStackedLayout(e,w,o,g);return}W.current&&!ee.current||O.getState().resizePane(e,f,o,g)},[e,f]),K=n.useCallback((o,g)=>{if(!e||!f)return;const w=F.current;if(w){O.getState().applyStackedLayout(e,w,o,g);return}W.current&&!ee.current||O.getState().syncPaneSize(e,f,o,g)},[e,f]),G=n.useCallback((o,g)=>{var ze;const w=R.current;if(ie.current){const be=(ze=p.current)==null?void 0:ze.getBoundingClientRect(),Ve=w==null?void 0:w.getCellSize();return be&&Ve&&be.width>0&&be.height>0?{cols:Math.max(2,Math.floor(be.width/Ve.width)),rows:Math.max(2,Math.floor(be.height/Ve.height))}:void 0}if(W.current)return;const k=(w==null?void 0:w.calculateSizeFromContainer())??(w==null?void 0:w.getSize())??void 0;if(k)return k;if(!o||!g||!j)return;const ne=j.find(be=>be.id===o),ve=ne==null?void 0:ne.panes.find(be=>be.id===g);if(!(!ve||ve.width<=1||ve.height<=1))return{cols:ve.width,rows:ve.height}},[j]),ce=n.useCallback((o,g)=>{e&&(T.current={windowId:o,paneId:g,at:Date.now()},l(`/devices/${e}/windows/${o}/panes/${je(g)}`,{replace:!0}))},[e,l]),ye=n.useCallback(o=>{R.current=o},[]);n.useEffect(()=>{const o=()=>{M(window.innerWidth<768||"ontouchstart"in window)};return o(),window.addEventListener("resize",o),()=>window.removeEventListener("resize",o)},[]),n.useEffect(()=>{if(!h||!Z||$.current)return;$.current=!0;const o=()=>{window.scrollTo(0,1)},g=window.requestAnimationFrame(o),w=window.setTimeout(o,120),k=window.setTimeout(o,420);return()=>{window.cancelAnimationFrame(g),window.clearTimeout(w),window.clearTimeout(k)}},[Z,h]),n.useEffect(()=>{e&&(B.current=!1,Ae.current=null,Ne.current=null,T.current=null,Ee.current=[])},[e]),n.useEffect(()=>{C||(B.current=!1)},[C]),n.useEffect(()=>{if(!e||!C||!s||!j)return;if(j.length===0){l("/devices",{replace:!0});return}const o=j.find(w=>w.id===s);if(!o)return;if(!f){const w=o.panes.find(k=>k.active)??o.panes[0];w&&l(`/devices/${e}/windows/${s}/panes/${je(w.id)}`,{replace:!0});return}if(!o.panes.find(w=>w.id===f)){const w=j.find(ne=>ne.panes.some(ve=>ve.id===f));if(w){l(`/devices/${e}/windows/${w.id}/panes/${je(f)}`,{replace:!0});return}const k=o.panes.find(ne=>ne.active)??o.panes[0];k&&l(`/devices/${e}/windows/${s}/panes/${je(k.id)}`,{replace:!0});return}},[e,C,j,s,f,l]),n.useEffect(()=>{if(!e||!C||!j||j.length===0||s&&f||B.current)return;const o=j.find(w=>w.active)??j[0],g=o.panes.find(w=>w.active)??o.panes[0];g&&(B.current=!0,l(`/devices/${e}/windows/${o.id}/panes/${je(g.id)}`,{replace:!0}))},[C,e,l,f,s,j]);const Ee=n.useRef([]),xe=n.useCallback((o,g)=>{const w=Date.now(),k=[...Ee.current.filter(ne=>w-ne.at<2e3),{windowId:o,paneId:g,at:w}];Ee.current=k.slice(-8)},[]),Pe=n.useRef(null);n.useEffect(()=>{Pe.current=null},[e,f]);const Le=n.useRef(null),_e=n.useRef(P);n.useEffect(()=>{_e.current!==P&&(_e.current=P,Pe.current=null,Le.current=null)},[P]),n.useEffect(()=>{if(!e||!s||!f||N||!C)return;const o=`${e}:${s}:${f}`;if(Pe.current===o)return;Pe.current=o;const g=P&&Le.current===`${e}:${s}`&&!!(y!=null&&y.panes.some(k=>k.id===f));if(xe(s,f),g){r(e,s,f);return}const w=G(s,f);U(e,s,f,w),Le.current=`${e}:${s}`},[C,e,r,G,N,P,xe,f,U,y,s]),n.useEffect(()=>{if(!e||!C||!s||!f)return;const o={windowId:s,paneId:f};hr({routeTarget:o,snapshotActive:Se,pendingUserSelection:T.current})&&(T.current={windowId:o.windowId,paneId:o.paneId,at:Date.now()})},[C,e,f,Se,s]);const ue=O(o=>e?o.activePaneFromEvent[e]:void 0),Ae=n.useRef(null);n.useEffect(()=>{if(!e||!C||!s||!f||!ue)return;const o=Date.now(),g=Be(T.current,o);if(T.current=g,dr({now:o,pendingUserSelection:g,activePaneFromEvent:ue,currentRoute:{windowId:s,paneId:f},recentSelectRequests:Ee.current,lastHandledActive:Ae.current}))return;if(Ae.current={...ue},g&&g.windowId===ue.windowId&&g.paneId===ue.paneId&&(T.current=null),!(ie.current&&ue.windowId===s)){const k=G(ue.windowId,ue.paneId);xe(ue.windowId,ue.paneId),U(e,ue.windowId,ue.paneId,k)}l(`/devices/${e}/windows/${ue.windowId}/panes/${je(ue.paneId)}`,{replace:!0})},[e,C,s,f,ue,xe,G,U,l]);const Ne=n.useRef(null);n.useEffect(()=>{if(!e||!C||!j||j.length===0)return;const o=Ee.current,g=j.find(be=>be.active);if(!g)return;const w=g.panes.find(be=>be.active);if(!w)return;const k={windowId:g.id,paneId:w.id},ne=Date.now(),ve=Be(T.current,ne);if(T.current=ve,fr({now:ne,pendingUserSelection:ve,snapshotActive:k,recentSelectRequests:o})||Ne.current&&Ne.current.windowId===k.windowId&&Ne.current.paneId===k.paneId||(Ne.current={...k},ve&&ve.windowId===k.windowId&&ve.paneId===k.paneId&&(T.current=null),s===k.windowId&&f===k.paneId))return;if(!(ie.current&&k.windowId===s)){const be=G(k.windowId,k.paneId);xe(k.windowId,k.paneId),U(e,k.windowId,k.paneId,be)}l(`/devices/${e}/windows/${k.windowId}/panes/${je(k.paneId)}`,{replace:!0})},[e,C,j,s,f,xe,G,U,l]);const Te=O(o=>e?o.pendingCreateWindowAt[e]:void 0);n.useEffect(()=>{if(!e||!C||!Te)return;const o=5e3,g=Date.now()-Te;if(g>o){O.getState().clearPendingCreateWindow(e);return}if(!Se){const ne=window.setTimeout(()=>{O.getState().clearPendingCreateWindow(e)},o-g);return()=>window.clearTimeout(ne)}const w=Se;if(s===w.windowId&&f===w.paneId){const ne=window.setTimeout(()=>{O.getState().clearPendingCreateWindow(e)},o-g);return()=>window.clearTimeout(ne)}T.current={windowId:w.windowId,paneId:w.paneId,at:Date.now()};const k=G(w.windowId,w.paneId);xe(w.windowId,w.paneId),U(e,w.windowId,w.paneId,k),l(`/devices/${e}/windows/${w.windowId}/panes/${je(w.paneId)}`,{replace:!0}),O.getState().clearPendingCreateWindow(e)},[e,C,Te,Se,s,f,xe,G,U,l]),n.useEffect(()=>{if(P||!z||!q||N)return;const o=R.current,g=o==null?void 0:o.getTerminal();if(!g)return;const w=Math.max(2,Math.floor(q.width||0)),k=Math.max(2,Math.floor(q.height||0));if(!w||!k)return;const ne=Date.now(),ve={cols:w,rows:k},ze=(o==null?void 0:o.getPendingLocalSize())??null;Fn({now:ne,remoteSize:ve,pendingLocalSize:ze})&&(g.cols===w&&g.rows===k||g.resize(w,k))},[z,N,P,q]),n.useEffect(()=>{const o=window.requestAnimationFrame(()=>{var w;(w=R.current)==null||w.scrollToBottom()}),g=window.setTimeout(()=>{var w;(w=R.current)==null||w.scrollToBottom()},120);return()=>{window.cancelAnimationFrame(o),window.clearTimeout(g)}},[I]),n.useEffect(()=>{V!=null&&V.message&&ke.error(V.message)},[V==null?void 0:V.message]),n.useEffect(()=>(document.title=Wt(Re),()=>{document.title=re}),[re,Re]),n.useEffect(()=>{const o=()=>{var g;(g=R.current)==null||g.scrollToBottom()};return window.addEventListener("tmex:jump-to-latest",o),()=>{window.removeEventListener("tmex:jump-to-latest",o)}},[]),n.useEffect(()=>{const o=g=>{const{deviceId:w,windowId:k,paneId:ne}=g.detail;w===e&&(T.current={windowId:k,paneId:ne,at:Date.now()})};return window.addEventListener("tmex:user-initiated-selection",o),()=>{window.removeEventListener("tmex:user-initiated-selection",o)}},[e]),n.useEffect(()=>{H(Q)},[Q]);const Fe=n.useCallback(o=>{if(!e||!f||!z)return;O.getState().sendInput(e,f,o,!1)},[z,e,f]),Ue=n.useCallback(o=>{var g,w;if(o.type==="action"){if(o.action==="toggleKeyboard"){pe.getState().setInputMode(I==="direct"?"editor":"direct");return}if(o.action==="scrollToBottom"){(g=R.current)==null||g.scrollToBottom();return}}if(o.type==="send"){o.payload&&Fe(o.payload);return}if(!(!e||!f||!z))switch(o.action){case"paste":{((w=navigator.clipboard)!=null&&w.readText?navigator.clipboard.readText():Promise.reject(new Error("clipboard unavailable"))).then(ne=>{ne&&O.getState().paste(e,f,ne)}).catch(()=>ke.error(t("terminal.pasteFailed")));break}case"newAgentSession":Ht.getState().startDraft(e,f,null),pe.getState().setSidebarCollapsed(!1),pe.getState().setSidebarTab("agent");break}},[z,e,Fe,I,f,t]),vt=n.useCallback(()=>{if(!z){ke.error(t("wsError.checkGateway"));return}if(!e||!f||!A.trim())return;J(!0),window.setTimeout(()=>J(!1),150);const o=te?`${A}\r`:A;O.getState().sendInput(e,f,o,!1),fe(A),S&&_(S),H("")},[fe,z,e,S,te,A,_,f,t]),bt=n.useCallback(()=>{if(!z){ke.error(t("wsError.checkGateway"));return}if(!e||!f||!A.trim())return;J(!0),window.setTimeout(()=>J(!1),150);const o=A.split(/\r?\n/),g=O.getState();for(const w of o)w.trim()&&g.sendInput(e,f,`${w}\r`,!1);fe(A),S&&_(S),H("")},[fe,z,e,S,A,_,f,t]),St=n.useCallback(()=>{var o;(o=b.current)==null||o.focus({preventScroll:!0})},[]);if(!e)return i.jsx("div",{className:"flex h-full items-center justify-center p-4",children:i.jsx("div",{className:"rounded-lg border border-dashed border-border px-4 py-3 text-sm text-muted-foreground",children:t("device.noDevices")})});const yt=!!f&&!L&&(C||se),Et=C&&!!f&&!L&&!q,Rt=de&&!C&&!V&&!se,ot=i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"h-12 w-12 rounded-full bg-muted flex items-center justify-center mx-auto",children:i.jsx(Ke,{className:"h-6 w-6 text-muted-foreground animate-spin"})}),i.jsx("h3",{className:"text-lg font-medium",children:t("terminal.connecting")})]});return i.jsxs("div",{className:"flex h-full min-h-0 flex-col bg-background","data-testid":"device-page",children:[i.jsx("div",{className:`flex-1 relative overflow-hidden min-h-0 min-w-0 ${h&&I==="editor"?"pb-1":""}`,children:i.jsxs("div",{className:"h-full px-3 py-1 min-h-0 min-w-0 w-full relative flex rounded-xl",style:{backgroundColor:a.background},children:[L?i.jsx("div",{className:"absolute inset-0 flex flex-col items-center justify-center p-8 text-center",children:i.jsxs("div",{className:"max-w-sm space-y-4",children:[i.jsx("div",{className:"h-12 w-12 rounded-full bg-muted flex items-center justify-center mx-auto",children:i.jsx(Tn,{className:"h-6 w-6 text-muted-foreground"})}),i.jsx("p",{className:"text-sm text-muted-foreground","data-testid":"terminal-selection-invalid",children:x})]})}):yt&&f?P&&y?i.jsxs("div",{className:"flex h-full min-h-0 w-full flex-1 flex-col","data-virtual-keyboard-avoid":!0,children:[i.jsx("div",{ref:p,className:"relative min-h-0 flex-1",children:i.jsx(ar,{deviceId:e,window:y,focusedPaneId:f,theme:Y,inputMode:I,deviceConnected:C,focusedTerminalRef:ye,onUserSelectPane:ce,onWindowResize:D},`${e}:${y.id}`)}),I==="direct"&&i.jsx("div",{className:"kb-floating-shortcuts",style:{backgroundColor:a.background},children:i.jsx(Qe,{onActivate:Ue,disabled:!z})})]}):i.jsx("div",{ref:p,className:"flex-1 h-full min-h-0 w-full","data-virtual-keyboard-avoid":!0,children:i.jsx(st,{ref:R,deviceId:e,paneId:f,theme:Y,inputMode:I,deviceConnected:C,isSelectionInvalid:L,onResize:D,onSync:K,children:I==="direct"&&i.jsx("div",{className:"kb-floating-shortcuts",style:{backgroundColor:a.background},children:i.jsx(Qe,{onActivate:Ue,disabled:!z})})},`${e}:${f}`)}):i.jsx("div",{className:"absolute inset-0 flex flex-col items-center justify-center p-8 text-center",children:i.jsx("div",{className:"max-w-sm space-y-4",children:Rt?ot:!C&&!se?i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"h-12 w-12 rounded-full bg-muted flex items-center justify-center mx-auto",children:i.jsx("span",{className:"text-2xl text-muted-foreground",children:"🔌"})}),i.jsx("h3",{className:"text-lg font-medium",children:t("device.disconnected")}),i.jsx("p",{className:"text-sm text-muted-foreground",children:t("device.connectToStart")})]}):s?ot:i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"h-12 w-12 rounded-full bg-muted flex items-center justify-center mx-auto",children:i.jsx("span",{className:"text-2xl text-muted-foreground",children:"📋"})}),i.jsx("h3",{className:"text-lg font-medium",children:t("window.noWindowSelected")}),i.jsx("p",{className:"text-sm text-muted-foreground",children:t("window.selectWindowToStart")})]})})}),se&&i.jsx("div",{className:"pointer-events-none absolute inset-x-0 top-2 z-10 flex justify-center","data-testid":"terminal-reconnecting-indicator",children:i.jsx(Ot,{deviceId:e,className:"shadow-sm"})}),Et&&i.jsx("div",{className:"absolute inset-0 flex items-center justify-center bg-background/85 backdrop-blur-sm","data-testid":"terminal-status-overlay",children:i.jsxs("div",{className:"flex flex-col items-center gap-2 rounded-lg border border-border bg-card/90 px-4 py-3 shadow-sm",children:[i.jsx("div",{className:"h-7 w-7 rounded-full border-2 border-primary border-t-transparent animate-spin"}),i.jsx("span",{className:"text-xs text-muted-foreground","data-testid":"terminal-status-text",children:t("terminal.connecting")})]})})]})}),I==="editor"&&i.jsxs("div",{ref:v,"data-virtual-keyboard-avoid":!0,className:"editor-mode-input bg-card/85 backdrop-blur-sm",children:[h&&i.jsx(Qe,{onActivate:o=>{Ue(o),o.type==="send"&&St()},disabled:!z}),i.jsx("textarea",{ref:b,"data-testid":"editor-input",className:"min-h-[88px] max-h-[28vh] w-full resize-y rounded-lg border border-border bg-background px-3 py-2 text-sm text-foreground shadow-xs outline-none transition-colors focus:border-ring",value:A,onChange:o=>{const g=o.target.value;if(H(g),!!S){if(g){we(S,g);return}_(S)}},placeholder:t("terminal.inputPlaceholder"),onCompositionStart:()=>{u.current=!0},onCompositionEnd:()=>{u.current=!1}}),i.jsx("div",{className:"actions mt-2",children:i.jsxs("div",{className:"send-row flex flex-wrap items-center justify-end gap-2","data-testid":"editor-send-row",children:[i.jsxs("div",{className:"send-with-enter-toggle mr-auto flex items-center gap-2 text-xs text-muted-foreground","data-testid":"editor-send-with-enter-toggle",children:[i.jsx(Xt,{size:"sm",checked:te,onCheckedChange:o=>me(!!o)}),i.jsx("span",{children:t("terminal.editorSendWithEnter")})]}),i.jsxs(Ce,{variant:"outline",size:"sm","data-testid":"editor-clear",onMouseDown:o=>o.preventDefault(),onClick:()=>{var o;H(""),S&&_(S),h&&I==="editor"&&((o=b.current)==null||o.focus({preventScroll:!0}))},title:t("terminal.clear"),children:[i.jsx(qt,{className:"h-4 w-4"}),t("terminal.clear")]}),i.jsxs(Ce,{variant:"secondary",size:"sm","data-testid":"editor-send-line-by-line",onMouseDown:o=>o.preventDefault(),onClick:()=>{var o;bt(),h&&I==="editor"&&((o=b.current)==null||o.focus({preventScroll:!0}))},disabled:!z||X,children:[X?i.jsx(Ke,{className:"h-4 w-4 animate-spin"}):i.jsx(ct,{className:"h-4 w-4"}),t("terminal.editorSendLineByLine")]}),i.jsxs(Ce,{variant:"default",size:"sm","data-testid":"editor-send",onMouseDown:o=>o.preventDefault(),onClick:()=>{var o;vt(),h&&I==="editor"&&((o=b.current)==null||o.focus({preventScroll:!0}))},disabled:!z||X,children:[X?i.jsx(Ke,{className:"h-4 w-4 animate-spin"}):i.jsx(ct,{className:"h-4 w-4"}),t("common.send")]})]})})]})]})}function br(){const{deviceId:t,windowId:e,paneId:s}=tt(),c=s?nt(s):void 0,l=O($=>$.snapshots),p=ht($=>{var T;return((T=$.settings)==null?void 0:T.siteName)??"tmex"}),v=t?l[t]:void 0,b=n.useMemo(()=>{var $;if(!(!e||!(($=v==null?void 0:v.session)!=null&&$.windows)))return v.session.windows.find(T=>T.id===e)},[e,v]),R=n.useMemo(()=>{if(!(!c||!b))return b.panes.find($=>$.id===c)},[c,b]),B=n.useMemo(()=>b&&R?mt({paneCustomName:R.customName,paneTitle:R.title,windowName:b.name,windowCustomName:b.customName,deviceName:p}):t??"",[b,R,p,t]);return i.jsx(i.Fragment,{children:B})}function Sr(){const{t}=Ie(),{deviceId:e,windowId:s,paneId:c}=tt(),l=ft(),p=Yt(),v=c?nt(c):void 0,b=pe(u=>u.inputMode),R=pe(u=>u.setInputMode),B=O(u=>{var N;return e?((N=u.deviceConnected)==null?void 0:N[e])??!1:!1}),$=O(u=>e?u.snapshots[e]:void 0),T=n.useMemo(()=>{var u;if(!(!s||!((u=$==null?void 0:$.session)!=null&&u.windows)))return $.session.windows.find(N=>N.id===s)},[s,$]),U=n.useCallback(u=>{!e||!s||l(`/devices/${e}/windows/${s}/panes/${je(u)}`,{replace:!0})},[e,s,l]),r=n.useMemo(()=>{if(!(!v||!T))return T.panes.find(u=>u.id===v)},[v,T]),ae=n.useCallback(u=>{!e||!v||O.getState().splitPane(e,v,u,r==null?void 0:r.currentPath)},[e,v,r==null?void 0:r.currentPath]),[V,C]=n.useState(!1),[le,se]=n.useState(!1),[de,re]=n.useState(!1),f=!!(v&&B),h=(rt({queryKey:Vt(e??"",v??""),queryFn:()=>Ut(e??"",v??""),enabled:!!(e&&v),throwOnError:!1}).data??[]).some(u=>u.enabled),M=()=>{R(b==="direct"?"editor":"direct")},W=()=>{window.dispatchEvent(new CustomEvent("tmex:jump-to-latest"))},A=()=>{C(!0)},H=()=>{window.location.reload()};return i.jsxs(i.Fragment,{children:[p&&v&&T&&T.panes.length>1&&i.jsx(Gn,{window:T,currentPaneId:v,onSelectPane:U}),!p&&i.jsxs(i.Fragment,{children:[i.jsx(Ce,{variant:"ghost",size:"icon-sm",onClick:()=>ae("right"),disabled:!f,"data-testid":"split-right-button","aria-label":t("window.splitRight"),title:t("window.splitRight"),children:i.jsx(Kt,{className:"h-4 w-4"})}),i.jsx(Ce,{variant:"ghost",size:"icon-sm",onClick:()=>ae("down"),disabled:!f,"data-testid":"split-down-button","aria-label":t("window.splitDown"),title:t("window.splitDown"),children:i.jsx(Gt,{className:"h-4 w-4"})})]}),i.jsx(Ce,{variant:"ghost",size:"icon-sm",onClick:A,"aria-label":t("nav.refreshPage"),title:t("nav.refreshPage"),children:i.jsx(fn,{className:"h-4 w-4"})}),i.jsx(Ce,{variant:"ghost",size:"icon-sm",onClick:M,disabled:!f,"data-testid":"terminal-input-mode-toggle","aria-label":t(b==="direct"?"nav.switchToEditor":"nav.switchToDirect"),title:t(b==="direct"?"nav.switchToEditor":"nav.switchToDirect"),children:b==="direct"?i.jsx(vn,{className:"h-4 w-4"}):i.jsx(Mn,{className:"h-4 w-4"})}),i.jsx(Ce,{variant:"ghost",size:"icon-sm",onClick:W,disabled:!f,"aria-label":t("nav.jumpToLatest"),title:t("nav.jumpToLatest"),children:i.jsx(hn,{className:"h-4 w-4"})}),i.jsxs(Ce,{variant:"ghost",size:"icon-sm",className:"relative",onClick:()=>se(!0),disabled:!v,"data-testid":"watch-open-button","aria-label":t("watch.title"),title:t("watch.title"),children:[i.jsx(Qt,{className:"h-4 w-4"}),h&&i.jsx("span",{className:"absolute right-1 top-1 h-1.5 w-1.5 rounded-full bg-primary","data-testid":"watch-active-indicator"})]}),i.jsx(Ce,{variant:"ghost",size:"icon-sm",onClick:()=>re(!0),"data-testid":"keyboard-behavior-open-button","aria-label":t("settings.terminal.title"),title:t("settings.terminal.title"),children:i.jsx(jn,{className:"h-4 w-4"})}),i.jsx(Pn,{open:de,onOpenChange:re}),e&&v&&i.jsx(Jt,{open:le,onOpenChange:se,deviceId:e,paneId:v}),i.jsx(Zt,{open:V,onOpenChange:C,children:i.jsxs(en,{children:[i.jsxs(tn,{children:[i.jsx(nn,{children:t("nav.refreshPage")}),i.jsx(rn,{children:t("nav.refreshPageConfirm")})]}),i.jsxs(sn,{children:[i.jsx(on,{onClick:()=>C(!1),children:t("common.cancel")}),i.jsx(cn,{onClick:H,children:t("common.confirm")})]})]})})]})}export{Sr as PageActions,br as PageTitle,vr as default};
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import{Y as ce,u as F,j as e,L as It,M as Ze,z as Lt,r as w,c as Q,B as k,P as ge,a as O,e as M,o as b,a2 as D,v as De,T as te,A as xe,f as fe,g as pe,h as $t,i as we,k as ye,l as je,m as ve,n as be,C as ae,F as ne,H as ie,I as re,J as Ne,N as Ce,O as Ee,Q as ke,R as Se,U as le,K as B,W as de,aq as U,G as Bt,x as xt,at as Dt,b as Oe,t as et,bs as $,X as ft,af as nt,bt as Ot,bu as _t,aB as zt,bv as qt,bw as Kt,bx as Qt,by as Ut,bz as it,Z as Ht}from"./index-B3ddLSja.js";import{C as H,b as G,c as J,d as pt,a as V}from"./card-DmfNw0hd.js";import{e as Vt,h as wt,F as We,i as Wt,j as Gt,D as Jt}from"./api-DV7-9Pvt.js";import{R as tt,T as Yt,b as Xt,d as Zt}from"./terminal-settings-panel-DDhlnbRH.js";import{S as yt}from"./send-DaOB9hLq.js";import{M as es}from"./markdown-preview-CBGlxpTs.js";import{T as jt}from"./triangle-alert-FQRTtbTP.js";import"./selection-clipboard-D3gUQQ7L.js";import"./index-iee3U_rD.js";/**
|
|
2
|
-
* @license lucide-react v0.564.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 ts=[["path",{d:"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z",key:"lc1i9w"}],["path",{d:"m7 16.5-4.74-2.85",key:"1o9zyk"}],["path",{d:"m7 16.5 5-3",key:"va8pkn"}],["path",{d:"M7 16.5v5.17",key:"jnp8gn"}],["path",{d:"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z",key:"8zsnat"}],["path",{d:"m17 16.5-5-3",key:"8arw3v"}],["path",{d:"m17 16.5 4.74-2.85",key:"8rfmw"}],["path",{d:"M17 16.5v5.17",key:"k6z78m"}],["path",{d:"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z",key:"1xygjf"}],["path",{d:"M12 8 7.26 5.15",key:"1vbdud"}],["path",{d:"m12 8 4.74-2.85",key:"3rx089"}],["path",{d:"M12 13.5V8",key:"1io7kd"}]],ss=ce("boxes",ts);/**
|
|
7
|
-
* @license lucide-react v0.564.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const as=[["rect",{width:"5",height:"5",x:"3",y:"3",rx:"1",key:"1tu5fj"}],["rect",{width:"5",height:"5",x:"16",y:"3",rx:"1",key:"1v8r4q"}],["rect",{width:"5",height:"5",x:"3",y:"16",rx:"1",key:"1x03jg"}],["path",{d:"M21 16h-3a2 2 0 0 0-2 2v3",key:"177gqh"}],["path",{d:"M21 21v.01",key:"ents32"}],["path",{d:"M12 7v3a2 2 0 0 1-2 2H7",key:"8crl2c"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M12 3h.01",key:"n36tog"}],["path",{d:"M12 16v.01",key:"133mhm"}],["path",{d:"M16 12h1",key:"1slzba"}],["path",{d:"M21 12v.01",key:"1lwtk9"}],["path",{d:"M12 21v-1",key:"1880an"}]],Ge=ce("qr-code",as);/**
|
|
12
|
-
* @license lucide-react v0.564.0 - ISC
|
|
13
|
-
*
|
|
14
|
-
* This source code is licensed under the ISC license.
|
|
15
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
-
*/const ns=[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]],Z=ce("save",ns);/**
|
|
17
|
-
* @license lucide-react v0.564.0 - ISC
|
|
18
|
-
*
|
|
19
|
-
* This source code is licensed under the ISC license.
|
|
20
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
21
|
-
*/const is=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],rs=ce("server",is);/**
|
|
22
|
-
* @license lucide-react v0.564.0 - ISC
|
|
23
|
-
*
|
|
24
|
-
* This source code is licensed under the ISC license.
|
|
25
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
26
|
-
*/const os=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]],rt=ce("shield",os);/**
|
|
27
|
-
* @license lucide-react v0.564.0 - ISC
|
|
28
|
-
*
|
|
29
|
-
* This source code is licensed under the ISC license.
|
|
30
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
31
|
-
*/const ls=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],cs=ce("users",ls);function ds(){const{t}=F();return e.jsxs(H,{className:"border-0 ring-0",children:[e.jsxs(G,{children:[e.jsx(J,{children:t("settings.deviceManagement.title")}),e.jsx(pt,{children:t("settings.deviceManagement.description")})]}),e.jsx(V,{children:e.jsxs(It,{to:"/devices","data-testid":"settings-device-management-link",className:Lt({variant:"secondary"}),children:[e.jsx(Ze,{className:"h-4 w-4"}),t("settings.deviceManagement.openButton")]})})]})}function $e({type:t,className:o}){return t==="ssh"?e.jsx(Bt,{className:o}):e.jsx(Ze,{className:o})}function ms(){var r,m;const{t}=F(),[o,s]=w.useState(!1),[l,c]=w.useState(void 0),h=Q({queryKey:["files","roots"],queryFn:Vt}),p=Q({queryKey:["devices"],queryFn:async()=>{const d=await fetch("/api/devices");if(!d.ok)throw new Error(`HTTP ${d.status}`);return await d.json()},throwOnError:!1}),f=((r=h.data)==null?void 0:r.roots)??[],a=((m=p.data)==null?void 0:m.devices)??[],n=()=>{c(void 0),s(!0)},i=d=>{c(d),s(!0)};return e.jsxs(e.Fragment,{children:[e.jsxs(H,{className:"border-0 ring-0","data-testid":"settings-files-section",children:[e.jsxs(G,{className:"flex flex-row items-center justify-between gap-2",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(J,{children:t("settings.files.title")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("settings.files.description")})]}),e.jsxs(k,{variant:"secondary","data-testid":"settings-files-root-add",onClick:n,children:[e.jsx(ge,{className:"h-4 w-4"}),t("settings.files.addRoot")]})]}),e.jsxs(V,{className:"space-y-3",children:[h.isLoading&&e.jsx("div",{className:"text-sm text-muted-foreground",children:t("common.loading")}),!h.isLoading&&f.length===0&&e.jsx("div",{className:"text-sm text-muted-foreground","data-testid":"settings-files-empty",children:t("settings.files.empty")}),f.map(d=>e.jsx(us,{root:d,onEdit:i},d.id))]})]}),e.jsx(hs,{open:o,onOpenChange:s,root:l,devices:a})]})}function us({root:t,onEdit:o}){const{t:s}=F(),l=O(),[c,h]=w.useState(!1),p=M({mutationFn:({id:a,enabled:n})=>wt(a,{enabled:n}),onSuccess:async()=>{await l.invalidateQueries({queryKey:["files"]})},onError:()=>{b.error(s("settings.files.toggleFailed"))}}),f=M({mutationFn:a=>Wt(a),onSuccess:async()=>{await l.invalidateQueries({queryKey:["files"]}),b.success(s("common.success"))},onError:a=>{const n=a instanceof We?a.message:s("settings.files.deleteFailed");b.error(n)}});return e.jsxs("div",{className:"flex items-center gap-3 rounded-lg border border-border p-3","data-testid":`settings-files-root-${t.id}`,children:[e.jsx(D,{checked:t.enabled,disabled:p.isPending,onCheckedChange:a=>p.mutate({id:t.id,enabled:!!a}),"data-testid":`settings-files-root-enabled-${t.id}`}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[e.jsx($e,{type:t.deviceType,className:"h-3.5 w-3.5 shrink-0"}),t.deviceName===null?e.jsx("span",{className:"text-destructive",children:s("settings.files.missing")}):e.jsx("span",{className:"truncate",children:t.deviceName})]}),e.jsx("div",{className:"truncate font-mono text-xs",children:t.path}),e.jsx("div",{className:"truncate text-xs text-muted-foreground",children:t.name})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[e.jsx(k,{variant:"ghost",size:"icon-sm",title:s("common.edit"),"data-testid":`settings-files-root-edit-${t.id}`,onClick:()=>o(t),children:e.jsx(De,{className:"h-4 w-4"})}),e.jsx(k,{variant:"ghost",size:"icon-sm",title:s("common.delete"),"data-testid":`settings-files-root-delete-${t.id}`,onClick:()=>h(!0),disabled:f.isPending,children:e.jsx(te,{className:"h-4 w-4 text-destructive"})})]}),e.jsx(xe,{open:c,onOpenChange:h,children:e.jsxs(fe,{children:[e.jsxs(pe,{children:[e.jsx($t,{className:"bg-destructive/10",children:e.jsx(te,{className:"h-5 w-5 text-destructive"})}),e.jsx(we,{children:s("settings.files.deleteTitle")}),e.jsx(ye,{children:s("settings.files.deleteDesc",{path:t.path})})]}),e.jsxs(je,{children:[e.jsx(ve,{children:s("common.cancel")}),e.jsx(be,{variant:"destructive","data-testid":`settings-files-root-delete-confirm-${t.id}`,onClick:()=>{f.mutate(t.id),h(!1)},children:s("common.delete")})]})]})})]})}const ot="h-9 w-full";function hs({open:t,onOpenChange:o,root:s,devices:l}){const{t:c}=F(),h=O(),p=!!s,[f,a]=w.useState(""),[n,i]=w.useState(""),[r,m]=w.useState(!0);w.useEffect(()=>{t&&(a((s==null?void 0:s.deviceId)??""),i((s==null?void 0:s.path)??""),m((s==null?void 0:s.enabled)??!0))},[t,s]);const d=M({mutationFn:()=>{const E={deviceId:f,path:n.trim(),enabled:r};return Gt(E)},onSuccess:async()=>{await h.invalidateQueries({queryKey:["files"]}),b.success(c("common.success")),o(!1)},onError:E=>{const z=E instanceof We?E.message:c("settings.files.addFailed");b.error(z)}}),u=M({mutationFn:()=>{if(!s)throw new Error(c("settings.files.updateFailed"));const E={path:n.trim(),enabled:r};return wt(s.id,E)},onSuccess:async()=>{await h.invalidateQueries({queryKey:["files"]}),b.success(c("common.success")),o(!1)},onError:E=>{const z=E instanceof We?E.message:c("settings.files.updateFailed");b.error(z)}}),y=d.isPending||u.isPending,C=n.trim().startsWith("/")&&(p||f.length>0),x=()=>{!C||y||(p?u.mutate():d.mutate())},N=l.find(E=>E.id===f);return e.jsx(ae,{open:t,onOpenChange:o,children:e.jsxs(ne,{className:"sm:max-w-lg","data-testid":p?`settings-files-edit-modal-${s==null?void 0:s.id}`:"settings-files-add-modal",children:[e.jsxs(ie,{children:[e.jsx(re,{children:c(p?"settings.files.modalEditTitle":"settings.files.modalAddTitle")}),e.jsx(Ne,{children:c("settings.files.description")})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:"files-form-device",children:c("settings.files.device")}),p?e.jsxs("div",{className:"flex h-9 items-center gap-1.5 rounded-lg border border-input bg-muted/30 px-2.5 text-sm",children:[e.jsx($e,{type:(s==null?void 0:s.deviceType)??null,className:"h-4 w-4 shrink-0"}),e.jsx("span",{className:"truncate",children:(s==null?void 0:s.deviceName)??c("settings.files.missing")})]}):e.jsxs(Ce,{value:f,onValueChange:E=>{E&&a(E)},children:[e.jsx(Ee,{id:"files-form-device","data-testid":"settings-files-device-select",className:ot,disabled:l.length===0,children:e.jsx(ke,{children:N?e.jsxs("span",{className:"flex items-center gap-1.5",children:[e.jsx($e,{type:N.type,className:"h-4 w-4 shrink-0"}),N.name]}):e.jsx("span",{className:"text-muted-foreground",children:c("settings.files.devicePlaceholder")})})}),e.jsx(Se,{children:l.map(E=>e.jsxs(le,{value:E.id,children:[e.jsx($e,{type:E.type,className:"h-4 w-4 shrink-0"}),E.name]},E.id))})]}),!p&&l.length===0&&e.jsx("p",{className:"text-xs text-destructive",children:c("settings.files.noDevices")})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:"files-form-path",children:c("settings.files.path")}),e.jsx(B,{id:"files-form-path","data-testid":"settings-files-path-input",value:n,onChange:E=>i(E.target.value),placeholder:c("settings.files.pathPlaceholder"),className:`${ot} font-mono`}),e.jsx("p",{className:"text-xs text-muted-foreground",children:c("settings.files.pathHint")})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(D,{checked:r,onCheckedChange:E=>m(!!E),"data-testid":"settings-files-enabled-switch"}),e.jsx("label",{className:"text-sm font-medium",htmlFor:"settings-files-enabled-switch",children:c("settings.files.enabled")})]})]}),e.jsxs(de,{children:[e.jsx(k,{variant:"outline",onClick:()=>o(!1),disabled:y,children:c("common.cancel")}),e.jsxs(k,{variant:"secondary","data-testid":"settings-files-form-submit",onClick:x,disabled:!C||y,children:[y?e.jsx(U,{className:"h-4 w-4 animate-spin"}):e.jsx(Z,{className:"h-4 w-4"}),c("common.save")]})]})]})})}async function X(t,o){try{return(await t.json()).error??o}catch{return o}}const gs=["openai-chat","openai-responses"],Re="h-9 w-full";function xs({open:t,onOpenChange:o,provider:s}){const{t:l}=F(),c=O(),h=!!s,[p,f]=w.useState(""),[a,n]=w.useState(""),[i,r]=w.useState("openai-chat"),[m,d]=w.useState("");w.useEffect(()=>{t&&(f((s==null?void 0:s.name)??""),n((s==null?void 0:s.baseUrl)??""),r((s==null?void 0:s.protocol)??"openai-chat"),d(""))},[t,s]);const u=M({mutationFn:async()=>{const x={name:p.trim(),protocol:i,baseUrl:a.trim(),apiKey:m.trim(),enabled:!0},N=await fetch("/api/llm/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(x)});if(!N.ok)throw new Error(await X(N,l("settings.llm.createFailed")));return await N.json()},onSuccess:async x=>{await c.invalidateQueries({queryKey:["llm-providers"]}),x.modelsError?b.warning(l("settings.llm.modelsFetchFailed",{error:x.modelsError})):b.success(l("common.success")),o(!1)},onError:x=>{b.error(x instanceof Error?x.message:l("common.error"))}}),y=M({mutationFn:async()=>{if(!s)throw new Error(l("settings.llm.updateFailed"));const x={name:p.trim(),baseUrl:a.trim(),protocol:i};m.trim()&&(x.apiKey=m.trim());const N=await fetch(`/api/llm/providers/${s.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(x)});if(!N.ok)throw new Error(await X(N,l("settings.llm.updateFailed")));return await N.json()},onSuccess:async x=>{await c.invalidateQueries({queryKey:["llm-providers"]}),x.modelsError?b.warning(l("settings.llm.modelsFetchFailed",{error:x.modelsError})):b.success(l("common.success")),o(!1)},onError:x=>{b.error(x instanceof Error?x.message:l("common.error"))}}),j=u.isPending||y.isPending,g=p.trim().length>0&&a.trim().length>0&&(h||m.trim().length>0),C=()=>{!g||j||(h?y.mutate():u.mutate())};return e.jsx(ae,{open:t,onOpenChange:o,children:e.jsxs(ne,{className:"sm:max-w-lg","data-testid":h?`llm-provider-edit-modal-${s==null?void 0:s.id}`:"llm-provider-add-modal",children:[e.jsxs(ie,{children:[e.jsx(re,{children:l(h?"settings.llm.editProvider":"settings.llm.addProvider")}),e.jsx(Ne,{children:l("settings.llm.formHint")})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:"llm-form-name",children:l("settings.llm.name")}),e.jsx(B,{id:"llm-form-name","data-testid":"llm-provider-name-input",value:p,onChange:x=>f(x.target.value),placeholder:l("settings.llm.namePlaceholder"),className:Re})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:"llm-form-baseurl",children:l("settings.llm.baseUrl")}),e.jsx(B,{id:"llm-form-baseurl","data-testid":"llm-provider-baseurl-input",value:a,onChange:x=>n(x.target.value),placeholder:l("settings.llm.baseUrlPlaceholder"),className:Re}),e.jsx("p",{className:"text-xs text-muted-foreground",children:l("settings.llm.baseUrlHint")})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:"llm-form-protocol",children:l("settings.llm.protocol")}),e.jsxs(Ce,{value:i,onValueChange:x=>{x&&r(x)},children:[e.jsx(Ee,{id:"llm-form-protocol","data-testid":"llm-provider-protocol-select",className:Re,children:e.jsx(ke,{})}),e.jsx(Se,{children:gs.map(x=>e.jsx(le,{value:x,children:x},x))})]})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:"llm-form-apikey",children:l("settings.llm.apiKey")}),e.jsx(B,{id:"llm-form-apikey","data-testid":"llm-provider-apikey-input","data-key-set":s!=null&&s.hasApiKey?"true":"false",type:"password",value:m,onChange:x=>d(x.target.value),placeholder:s!=null&&s.hasApiKey?l("settings.llm.apiKeySetPlaceholder"):l("settings.llm.apiKeyPlaceholder"),className:Re})]})]}),e.jsxs(de,{children:[e.jsx(k,{variant:"outline",onClick:()=>o(!1),disabled:j,children:l("common.cancel")}),e.jsxs(k,{variant:"secondary","data-testid":"llm-provider-form-submit",onClick:C,disabled:!g||j,children:[j?e.jsx(U,{className:"h-4 w-4 animate-spin"}):e.jsx(Z,{className:"h-4 w-4"}),l("common.save")]})]})]})})}function fs({models:t,onChange:o}){const{t:s}=F(),[l,c]=w.useState(""),h=(a,n)=>{o(t.map(i=>i.id===a?{...i,enabled:n}:i))},p=a=>{o(t.filter(n=>n.id!==a))},f=()=>{const a=l.trim();if(a){if(t.some(n=>n.id===a)){c("");return}o([...t,{id:a,source:"manual",enabled:!0}]),c("")}};return e.jsxs("div",{className:"space-y-3","data-testid":"llm-provider-models",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(B,{value:l,onChange:a=>c(a.target.value),onKeyDown:a=>{a.key==="Enter"&&(a.preventDefault(),f())},placeholder:s("settings.llm.addModelPlaceholder"),className:"h-9","data-testid":"llm-provider-add-model-input"}),e.jsxs(k,{type:"button",variant:"outline",size:"lg",onClick:f,disabled:!l.trim(),"data-testid":"llm-provider-add-model",children:[e.jsx(ge,{className:"h-4 w-4"}),s("common.add")]})]}),t.length===0?e.jsx("p",{className:"text-xs text-muted-foreground",children:s("settings.llm.modelsNotFetched")}):e.jsx("ul",{className:"max-h-56 space-y-1 overflow-y-auto rounded-lg border border-border bg-background p-2",children:t.map(a=>e.jsxs("li",{className:"flex items-center justify-between gap-2 rounded-md px-2 py-1.5","data-testid":`llm-provider-model-${a.id}`,children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[e.jsx(D,{checked:a.enabled,onCheckedChange:n=>h(a.id,!!n),"data-testid":`llm-provider-model-toggle-${a.id}`}),e.jsx("span",{className:"truncate font-mono text-xs",children:a.id}),a.source==="manual"&&e.jsx(xt,{variant:"secondary",children:s("settings.llm.modelManual")})]}),a.source==="manual"&&e.jsx(k,{type:"button",variant:"ghost",size:"icon-sm",onClick:()=>p(a.id),"data-testid":`llm-provider-model-remove-${a.id}`,children:e.jsx(Dt,{className:"h-4 w-4"})})]},a.id))})]})}function ps(t){return t.modelDetails.map(o=>({id:o.id,source:o.source,enabled:o.enabled}))}function ws({open:t,onOpenChange:o,provider:s}){const{t:l}=F(),c=O(),[h,p]=w.useState([]);w.useEffect(()=>{t&&p(ps(s))},[t,s]);const f=M({mutationFn:async()=>{const a=h.filter(m=>m.source==="manual").map(m=>m.id),n=h.filter(m=>!m.enabled).map(m=>m.id),i={manualModels:a,disabledModels:n},r=await fetch(`/api/llm/providers/${s.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!r.ok)throw new Error(await X(r,l("settings.llm.updateFailed")));return await r.json()},onSuccess:async a=>{await c.invalidateQueries({queryKey:["llm-providers"]}),a.modelsError?b.warning(l("settings.llm.modelsFetchFailed",{error:a.modelsError})):b.success(l("common.success")),o(!1)},onError:a=>{b.error(a instanceof Error?a.message:l("common.error"))}});return e.jsx(ae,{open:t,onOpenChange:o,children:e.jsxs(ne,{className:"sm:max-w-lg","data-testid":`llm-provider-models-modal-${s.id}`,children:[e.jsxs(ie,{children:[e.jsx(re,{children:l("settings.llm.modelsTitle",{name:s.name})}),e.jsx(Ne,{children:l("settings.llm.modelsHint")})]}),e.jsx(fs,{models:h,onChange:p}),e.jsxs(de,{children:[e.jsx(k,{variant:"outline",onClick:()=>o(!1),disabled:f.isPending,children:l("common.cancel")}),e.jsxs(k,{variant:"secondary","data-testid":`llm-provider-models-save-${s.id}`,onClick:()=>f.mutate(),disabled:f.isPending,children:[f.isPending?e.jsx(U,{className:"h-4 w-4 animate-spin"}):e.jsx(Z,{className:"h-4 w-4"}),l("common.save")]})]})]})})}function ys(t){try{const o=new URL(t);return`${o.protocol}//${o.host}${o.pathname==="/"?"":o.pathname}`}catch{return t}}function js({provider:t,onEdit:o}){const{t:s}=F(),l=O(),[c,h]=w.useState(!1),[p,f]=w.useState(!1),a=M({mutationFn:async r=>{const m=await fetch(`/api/llm/providers/${t.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({enabled:r})});if(!m.ok)throw new Error(await X(m,s("settings.llm.updateFailed")))},onSuccess:async()=>{await l.invalidateQueries({queryKey:["llm-providers"]})},onError:r=>{b.error(r instanceof Error?r.message:s("common.error"))}}),n=M({mutationFn:async()=>{const r=await fetch(`/api/llm/providers/${t.id}/refresh-models`,{method:"POST"});if(!r.ok)throw new Error(await X(r,s("settings.llm.refreshModelsFailed")))},onSuccess:async()=>{await l.invalidateQueries({queryKey:["llm-providers"]}),b.success(s("common.success"))},onError:r=>{b.error(r instanceof Error?r.message:s("common.error"))}}),i=M({mutationFn:async()=>{const r=await fetch(`/api/llm/providers/${t.id}`,{method:"DELETE"});if(!r.ok)throw new Error(await X(r,s("settings.llm.deleteFailed")))},onSuccess:async()=>{await l.invalidateQueries({queryKey:["llm-providers"]}),await l.invalidateQueries({queryKey:["llm-settings"]}),b.success(s("common.success"))},onError:r=>{b.error(r instanceof Error?r.message:s("common.error"))}});return e.jsxs("div",{className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-3 sm:flex-row sm:items-center sm:justify-between","data-testid":`llm-provider-row-${t.id}`,"data-provider-name":t.name,children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-3",children:[e.jsx(D,{checked:t.enabled,disabled:a.isPending,onCheckedChange:r=>a.mutate(!!r),"data-testid":`llm-provider-enabled-${t.id}`}),e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"truncate font-medium",children:t.name}),e.jsx(xt,{variant:"outline",children:t.protocol})]}),e.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[e.jsx("span",{className:"truncate font-mono",children:ys(t.baseUrl)}),e.jsx("span",{"aria-hidden":!0,children:"·"}),e.jsx("span",{className:"whitespace-nowrap",children:s("settings.llm.modelsCount",{total:t.models.length})})]})]})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[e.jsx(k,{variant:"ghost",size:"icon-sm",title:s("settings.llm.refreshModels"),"data-testid":`llm-provider-refresh-models-${t.id}`,onClick:()=>n.mutate(),disabled:n.isPending,children:n.isPending?e.jsx(U,{className:"h-4 w-4 animate-spin"}):e.jsx(tt,{className:"h-4 w-4"})}),e.jsx(k,{variant:"ghost",size:"icon-sm",title:s("settings.llm.models"),"data-testid":`llm-provider-models-${t.id}`,onClick:()=>f(!0),children:e.jsx(ss,{className:"h-4 w-4"})}),e.jsx(k,{variant:"ghost",size:"icon-sm",title:s("common.edit"),"data-testid":`llm-provider-edit-${t.id}`,onClick:()=>o(t),children:e.jsx(De,{className:"h-4 w-4"})}),e.jsx(k,{variant:"ghost",size:"icon-sm",title:s("common.delete"),"data-testid":`llm-provider-delete-${t.id}`,onClick:()=>h(!0),disabled:i.isPending,children:e.jsx(te,{className:"h-4 w-4 text-destructive"})})]}),e.jsx(ws,{open:p,onOpenChange:f,provider:t}),e.jsx(xe,{open:c,onOpenChange:h,children:e.jsxs(fe,{children:[e.jsxs(pe,{children:[e.jsx(we,{children:s("settings.llm.deleteProvider")}),e.jsx(ye,{children:s("settings.llm.deleteConfirm",{name:t.name})})]}),e.jsxs(je,{children:[e.jsx(ve,{onClick:()=>h(!1),children:s("common.cancel")}),e.jsx(be,{variant:"destructive","data-testid":`llm-provider-delete-confirm-${t.id}`,onClick:()=>{i.mutate(),h(!1)},children:s("common.confirm")})]})]})})]})}function vs(){var n;const{t}=F(),[o,s]=w.useState(!1),[l,c]=w.useState(void 0),h=Q({queryKey:["llm-providers"],queryFn:async()=>{const i=await fetch("/api/llm/providers");if(!i.ok)throw new Error(await X(i,t("settings.llm.loadFailed")));return await i.json()}}),p=((n=h.data)==null?void 0:n.providers)??[],f=()=>{c(void 0),s(!0)},a=i=>{c(i),s(!0)};return e.jsxs(e.Fragment,{children:[e.jsxs(H,{className:"border-0 ring-0","data-testid":"llm-providers-section",children:[e.jsxs(G,{className:"flex flex-row items-center justify-between gap-2",children:[e.jsx(J,{children:t("settings.llm.title")}),e.jsxs(k,{variant:"secondary","data-testid":"llm-provider-add",onClick:f,children:[e.jsx(ge,{className:"h-4 w-4"}),t("settings.llm.addProvider")]})]}),e.jsxs(V,{className:"space-y-3",children:[h.isLoading&&e.jsx("div",{className:"text-sm text-muted-foreground",children:t("common.loading")}),!h.isLoading&&p.length===0&&e.jsx("div",{className:"text-sm text-muted-foreground","data-testid":"llm-providers-empty",children:t("settings.llm.empty")}),p.map(i=>e.jsx(js,{provider:i,onEdit:a},i.id))]})]}),e.jsx(xs,{open:o,onOpenChange:s,provider:l}),e.jsx(bs,{providers:p})]})}const ze="__none__";function bs({providers:t}){var y,j;const{t:o}=F(),s=O(),[l,c]=w.useState(null),[h,p]=w.useState(""),f=Q({queryKey:["llm-settings"],queryFn:async()=>{const g=await fetch("/api/llm/settings");if(!g.ok)throw new Error(await X(g,o("settings.llm.settingsLoadFailed")));return await g.json()}}),a=((y=f.data)==null?void 0:y.settings.defaultProviderId)??null,n=((j=f.data)==null?void 0:j.settings.defaultModelId)??"",i=!!f.data;w.useEffect(()=>{i&&(c(a),p(n))},[i,a,n]);const r=M({mutationFn:async()=>{const g={defaultProviderId:l,defaultModelId:h.trim()||null},C=await fetch("/api/llm/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(g)});if(!C.ok)throw new Error(await X(C,o("settings.llm.settingsSaveFailed")))},onSuccess:async()=>{await s.invalidateQueries({queryKey:["llm-settings"]}),b.success(o("common.success"))},onError:g=>{b.error(g instanceof Error?g.message:o("common.error"))}}),m=t.filter(g=>g.enabled),d=t.find(g=>g.id===l),u=(d==null?void 0:d.models)??[];return e.jsxs(H,{className:"border-0 ring-0","data-testid":"llm-defaults-section",children:[e.jsx(G,{children:e.jsx(J,{children:o("settings.llm.defaults")})}),e.jsxs(V,{className:"space-y-6",children:[e.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:"llm-default-provider-select",children:o("settings.llm.defaultProvider")}),e.jsxs(Ce,{value:l??ze,onValueChange:g=>{g&&c(g===ze?null:g)},children:[e.jsx(Ee,{id:"llm-default-provider-select","data-testid":"llm-default-provider-select",className:"h-9 w-full",children:e.jsx(ke,{children:(d==null?void 0:d.name)??o("settings.llm.defaultProviderNone")})}),e.jsxs(Se,{children:[e.jsx(le,{value:ze,children:o("settings.llm.defaultProviderNone")}),m.map(g=>e.jsx(le,{value:g.id,children:g.name},g.id))]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:"llm-default-model-input",children:o("settings.llm.defaultModel")}),e.jsx(B,{id:"llm-default-model-input","data-testid":"llm-default-model-input",list:"llm-default-model-options",value:h,onChange:g=>p(g.target.value),placeholder:o("settings.llm.defaultModelPlaceholder"),className:"h-9"}),e.jsx("datalist",{id:"llm-default-model-options",children:u.map(g=>e.jsx("option",{value:g},g))})]})]}),e.jsx("div",{className:"flex justify-end",children:e.jsxs(k,{variant:"secondary","data-testid":"llm-defaults-save",onClick:()=>r.mutate(),disabled:r.isPending||f.isLoading,className:"w-full sm:w-auto",children:[r.isPending?e.jsx(U,{className:"h-4 w-4 animate-spin"}):e.jsx(Z,{className:"h-4 w-4"}),o("settings.llm.saveDefaults")]})})]})]})}const Ns=["none","tavily","brave"];async function qe(t,o){try{return(await t.json()).error??o}catch{return o}}function Cs(){var j;const{t}=F(),o=O(),[s,l]=w.useState("none"),[c,h]=w.useState(""),[p,f]=w.useState(""),[a,n]=w.useState(null),i=Q({queryKey:["llm-settings"],queryFn:async()=>{const g=await fetch("/api/llm/settings");if(!g.ok)throw new Error(await qe(g,t("settings.search.loadFailed")));return await g.json()}}),r=(j=i.data)==null?void 0:j.settings,m=r==null?void 0:r.searchProvider;w.useEffect(()=>{m&&l(m)},[m]);const d=M({mutationFn:async()=>{const g={searchProvider:s};c.trim()&&(g.tavilyApiKey=c.trim()),p.trim()&&(g.braveApiKey=p.trim());const C=await fetch("/api/llm/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(g)});if(!C.ok)throw new Error(await qe(C,t("settings.search.saveFailed")))},onSuccess:async()=>{h(""),f(""),await o.invalidateQueries({queryKey:["llm-settings"]}),b.success(t("common.success"))},onError:g=>{b.error(g instanceof Error?g.message:t("common.error"))}}),u=M({mutationFn:async g=>{const C={[g]:""},x=await fetch("/api/llm/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(C)});if(!x.ok)throw new Error(await qe(x,t("settings.search.saveFailed")))},onSuccess:async()=>{await o.invalidateQueries({queryKey:["llm-settings"]}),b.success(t("common.success"))},onError:g=>{b.error(g instanceof Error?g.message:t("common.error"))}}),y=g=>g==="none"?t("settings.search.providerNone"):g==="tavily"?"Tavily":"Brave";return e.jsxs(H,{className:"border-0 ring-0","data-testid":"settings-search-section",children:[e.jsx(G,{children:e.jsx(J,{children:t("settings.search.title")})}),e.jsxs(V,{className:"space-y-6",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:"search-provider-select",children:t("settings.search.provider")}),e.jsxs(Ce,{value:s,onValueChange:g=>{g&&l(g)},children:[e.jsx(Ee,{id:"search-provider-select","data-testid":"settings-search-provider-select",className:"w-full min-h-10",children:e.jsx(ke,{children:y(s)})}),e.jsx(Se,{children:Ns.map(g=>e.jsx(le,{value:g,children:y(g)},g))})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t("settings.search.responsesApiHint")})]}),e.jsx(lt,{id:"search-tavily-key-input",testId:"settings-search-tavily",label:t("settings.search.tavilyApiKey"),value:c,hasKey:(r==null?void 0:r.hasTavilyApiKey)??!1,onChange:h,onClear:()=>n("tavilyApiKey"),clearing:u.isPending&&u.variables==="tavilyApiKey"}),e.jsx(lt,{id:"search-brave-key-input",testId:"settings-search-brave",label:t("settings.search.braveApiKey"),value:p,hasKey:(r==null?void 0:r.hasBraveApiKey)??!1,onChange:f,onClear:()=>n("braveApiKey"),clearing:u.isPending&&u.variables==="braveApiKey"}),e.jsx(xe,{open:a!==null,onOpenChange:g=>{g||n(null)},children:e.jsxs(fe,{children:[e.jsxs(pe,{children:[e.jsx(we,{children:t("settings.search.clearKey")}),e.jsx(ye,{children:t("settings.search.clearKeyConfirm")})]}),e.jsxs(je,{children:[e.jsx(ve,{children:t("common.cancel")}),e.jsx(be,{"data-testid":"settings-search-clear-confirm",onClick:()=>{a&&u.mutate(a),n(null)},children:t("settings.search.clearKey")})]})]})}),e.jsx("div",{className:"flex justify-end",children:e.jsxs(k,{variant:"secondary","data-testid":"settings-search-save",onClick:()=>d.mutate(),disabled:d.isPending||i.isLoading,className:"w-full sm:w-auto",children:[d.isPending?e.jsx(U,{className:"h-4 w-4 animate-spin"}):e.jsx(Z,{className:"h-4 w-4"}),t("common.save")]})})]})]})}function lt({id:t,testId:o,label:s,value:l,hasKey:c,onChange:h,onClear:p,clearing:f}){const{t:a}=F();return e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:t,children:s}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(B,{id:t,"data-testid":`${o}-input`,"data-key-set":c?"true":"false",type:"password",value:l,onChange:n=>h(n.target.value),placeholder:a(c?"settings.search.keySetPlaceholder":"settings.search.keyPlaceholder"),className:"min-h-10"}),c&&e.jsxs(k,{variant:"outline",size:"sm","data-testid":`${o}-clear`,onClick:p,disabled:f,className:"shrink-0",children:[e.jsx(te,{className:"h-4 w-4"}),a("settings.search.clearKey")]})]})]})}const ct="min-h-10";async function dt(t,o){try{return(await t.json()).error??o}catch{return o}}function Es({open:t,onOpenChange:o,bot:s}){const{t:l}=F(),c=O(),h=!!s,[p,f]=w.useState(""),[a,n]=w.useState(""),[i,r]=w.useState(!0);w.useEffect(()=>{t&&(f((s==null?void 0:s.name)??""),n(""),r((s==null?void 0:s.allowAuthRequests)??!0))},[t,s]);const m=M({mutationFn:async()=>{const g=await fetch("/api/settings/telegram/bots",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:p.trim(),token:a.trim(),enabled:!0,allowAuthRequests:i})});if(!g.ok)throw new Error(await dt(g,l("telegram.createFailed")))},onSuccess:async()=>{await c.invalidateQueries({queryKey:["telegram-bots"]}),b.success(l("common.success")),o(!1)},onError:g=>{b.error(g instanceof Error?g.message:l("common.error"))}}),d=M({mutationFn:async()=>{if(!s)throw new Error(l("telegram.updateFailed"));const g={name:p.trim(),allowAuthRequests:i};a.trim()&&(g.token=a.trim());const C=await fetch(`/api/settings/telegram/bots/${s.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(g)});if(!C.ok)throw new Error(await dt(C,l("telegram.updateFailed")))},onSuccess:async()=>{await c.invalidateQueries({queryKey:["telegram-bots"]}),b.success(l("common.success")),o(!1)},onError:g=>{b.error(g instanceof Error?g.message:l("common.error"))}}),u=m.isPending||d.isPending,y=p.trim().length>0&&(h||a.trim().length>0),j=()=>{!y||u||(h?d.mutate():m.mutate())};return e.jsx(ae,{open:t,onOpenChange:o,children:e.jsxs(ne,{className:"sm:max-w-lg","data-testid":h?`telegram-bot-edit-modal-${s==null?void 0:s.id}`:"telegram-bot-add-modal",children:[e.jsx(ie,{children:e.jsx(re,{children:l(h?"telegram.editBot":"telegram.addBot")})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:"telegram-bot-name",children:l("telegram.botName")}),e.jsx(B,{id:"telegram-bot-name","data-testid":"telegram-bot-name-input",value:p,onChange:g=>f(g.target.value),placeholder:l("telegram.botNamePlaceholder"),className:ct})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:"telegram-bot-token",children:l("telegram.botToken")}),e.jsx(B,{id:"telegram-bot-token","data-testid":"telegram-bot-token-input",type:"password",value:a,onChange:g=>n(g.target.value),placeholder:l(h?"telegram.tokenPlaceholder":"telegram.botTokenPlaceholder"),className:ct})]}),e.jsxs("div",{className:"flex min-h-10 items-center justify-between gap-3 rounded-lg border border-border bg-background px-3 py-2.5",children:[e.jsx("span",{className:"text-sm font-medium",children:l("telegram.allowAuthRequests")}),e.jsx(D,{checked:i,"data-testid":"telegram-bot-allow-auth",onCheckedChange:g=>r(!!g)})]})]}),e.jsxs(de,{children:[e.jsx(k,{variant:"outline",onClick:()=>o(!1),disabled:u,children:l("common.cancel")}),e.jsxs(k,{variant:"secondary","data-testid":"telegram-bot-form-submit",onClick:j,disabled:!y||u,children:[u?e.jsx(U,{className:"h-4 w-4 animate-spin"}):e.jsx(Z,{className:"h-4 w-4"}),l("common.save")]})]})]})})}async function Ie(t,o){try{return(await t.json()).error??o}catch{return o}}function ks({open:t,onOpenChange:o,botId:s,botName:l}){var m;const{t:c}=F(),h=O(),p=Q({queryKey:["telegram-bot-chats",s],enabled:t,queryFn:async()=>{const d=await fetch(`/api/settings/telegram/bots/${s}/chats`);if(!d.ok)throw new Error(await Ie(d,c("telegram.loadChatsFailed")));return await d.json()}}),f=w.useMemo(()=>{var u;const d=((u=p.data)==null?void 0:u.chats)??[];return{pending:d.filter(y=>y.status==="pending"),authorized:d.filter(y=>y.status==="authorized")}},[(m=p.data)==null?void 0:m.chats]),a=async()=>{await Promise.all([h.invalidateQueries({queryKey:["telegram-bots"]}),h.invalidateQueries({queryKey:["telegram-bot-chats",s]})])},n=M({mutationFn:async d=>{const u=await fetch(`/api/settings/telegram/bots/${s}/chats/${encodeURIComponent(d)}/approve`,{method:"POST"});if(!u.ok)throw new Error(await Ie(u,c("telegram.approveFailed")))},onSuccess:async()=>{await a(),b.success(c("common.success"))},onError:d=>{b.error(d instanceof Error?d.message:c("common.error"))}}),i=M({mutationFn:async d=>{const u=await fetch(`/api/settings/telegram/bots/${s}/chats/${encodeURIComponent(d)}`,{method:"DELETE"});if(!u.ok)throw new Error(await Ie(u,c("telegram.removeFailed")))},onSuccess:async()=>{await a(),b.success(c("common.success"))},onError:d=>{b.error(d instanceof Error?d.message:c("common.error"))}}),r=M({mutationFn:async d=>{const u=await fetch(`/api/settings/telegram/bots/${s}/chats/${encodeURIComponent(d)}/test`,{method:"POST"});if(!u.ok)throw new Error(await Ie(u,c("telegram.testMessageFailed")))},onSuccess:()=>{b.success(c("common.success"))},onError:d=>{b.error(d instanceof Error?d.message:c("common.error"))}});return e.jsx(ae,{open:t,onOpenChange:o,children:e.jsxs(ne,{className:"sm:max-w-2xl","data-testid":`telegram-bot-chats-modal-${s}`,children:[e.jsxs(ie,{children:[e.jsx(re,{children:c("telegram.chats")}),e.jsx(Ne,{children:l})]}),e.jsxs("div",{className:"grid grid-cols-1 gap-4 lg:grid-cols-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("h3",{className:"flex items-center gap-1 text-sm font-semibold",children:[e.jsx(rt,{className:"h-4 w-4"}),c("telegram.pendingChats")]}),f.pending.length===0&&e.jsx("div",{className:"text-xs text-muted-foreground",children:c("telegram.noPendingChats")}),f.pending.map(d=>e.jsx(mt,{chat:d,pending:!0,onApprove:()=>n.mutate(d.chatId),onDelete:()=>i.mutate(d.chatId)},`${d.botId}-${d.chatId}`))]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("h3",{className:"flex items-center gap-1 text-sm font-semibold",children:[e.jsx(rt,{className:"h-4 w-4"}),c("telegram.chats")]}),f.authorized.length===0&&e.jsx("div",{className:"text-xs text-muted-foreground",children:c("telegram.noAuthorizedChats")}),f.authorized.map(d=>e.jsx(mt,{chat:d,pending:!1,onTest:()=>r.mutate(d.chatId),onDelete:()=>i.mutate(d.chatId)},`${d.botId}-${d.chatId}`))]}),p.isLoading&&e.jsx("div",{className:"text-xs text-muted-foreground lg:col-span-2",children:c("common.loading")})]})]})})}function mt({chat:t,pending:o,onApprove:s,onDelete:l,onTest:c}){const{t:h}=F(),p=Oe(f=>{var a;return((a=f.settings)==null?void 0:a.language)??"en_US"});return e.jsxs("div",{className:"space-y-2 rounded border-0 bg-background p-3",children:[e.jsx("div",{className:"truncate text-sm font-medium",title:t.displayName,children:t.displayName}),e.jsxs("div",{className:"text-xs text-muted-foreground",children:[h("telegram.chatId"),":",t.chatId]}),e.jsx("div",{className:"text-xs text-muted-foreground",children:new Date(t.appliedAt).toLocaleString(et(p))}),e.jsx("div",{className:"flex items-center justify-end gap-2 pt-1",children:o?e.jsxs(e.Fragment,{children:[e.jsx(k,{variant:"outline",size:"sm",onClick:l,children:h("telegram.reject")}),e.jsx(k,{variant:"secondary",size:"sm",onClick:s,children:h("telegram.authorize")})]}):e.jsxs(e.Fragment,{children:[e.jsxs(k,{variant:"secondary",size:"sm",onClick:c,children:[e.jsx(yt,{className:"h-3.5 w-3.5"}),h("telegram.sendTestMessage")]}),e.jsx(k,{variant:"destructive",size:"sm",onClick:l,children:h("common.delete")})]})})]})}async function ut(t,o){try{return(await t.json()).error??o}catch{return o}}function Ss({bot:t,onEdit:o}){const{t:s}=F(),l=O(),[c,h]=w.useState(!1),p=M({mutationFn:async a=>{const n=await fetch(`/api/settings/telegram/bots/${t.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({enabled:a})});if(!n.ok)throw new Error(await ut(n,s("telegram.updateFailed")))},onSuccess:async()=>{await l.invalidateQueries({queryKey:["telegram-bots"]})},onError:a=>{b.error(a instanceof Error?a.message:s("common.error"))}}),f=M({mutationFn:async()=>{const a=await fetch(`/api/settings/telegram/bots/${t.id}`,{method:"DELETE"});if(!a.ok)throw new Error(await ut(a,s("telegram.deleteFailed")))},onSuccess:async()=>{await l.invalidateQueries({queryKey:["telegram-bots"]}),b.success(s("common.success"))},onError:a=>{b.error(a instanceof Error?a.message:s("common.error"))}});return e.jsxs("div",{className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-3 sm:flex-row sm:items-center sm:justify-between","data-testid":`telegram-bot-card-${t.id}`,"data-bot-name":t.name,children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-3",children:[e.jsx(D,{checked:t.enabled,disabled:p.isPending,onCheckedChange:a=>p.mutate(!!a),"data-testid":`telegram-bot-enabled-${t.id}`}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"truncate font-medium",children:t.name}),e.jsx("div",{className:"text-xs text-muted-foreground",children:s("telegram.authCount",{authorized:t.authorizedCount,pending:t.pendingCount})})]})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[e.jsx(k,{variant:"ghost",size:"icon-sm",title:s("telegram.chats"),"data-testid":`telegram-bot-chats-${t.id}`,onClick:()=>h(!0),children:e.jsx(cs,{className:"h-4 w-4"})}),e.jsx(k,{variant:"ghost",size:"icon-sm",title:s("common.edit"),"data-testid":`telegram-bot-edit-${t.id}`,onClick:()=>o(t),children:e.jsx(De,{className:"h-4 w-4"})}),e.jsx(k,{variant:"ghost",size:"icon-sm",title:s("telegram.deleteBot"),"data-testid":`telegram-bot-delete-${t.id}`,onClick:()=>f.mutate(),disabled:f.isPending,children:e.jsx(te,{className:"h-4 w-4 text-destructive"})})]}),e.jsx(ks,{open:c,onOpenChange:h,botId:t.id,botName:t.name})]})}async function Ms(t,o){try{return(await t.json()).error??o}catch{return o}}function Ps(){var n;const{t}=F(),[o,s]=w.useState(!1),[l,c]=w.useState(void 0),h=Q({queryKey:["telegram-bots"],queryFn:async()=>{const i=await fetch("/api/settings/telegram/bots");if(!i.ok)throw new Error(await Ms(i,t("telegram.loadBotsFailed")));return await i.json()}}),p=((n=h.data)==null?void 0:n.bots)??[],f=()=>{c(void 0),s(!0)},a=i=>{c(i),s(!0)};return e.jsxs(e.Fragment,{children:[e.jsxs(H,{className:"border-0 ring-0",children:[e.jsxs(G,{className:"flex flex-row items-center justify-between gap-2",children:[e.jsx(J,{children:t("telegram.title")}),e.jsxs(k,{variant:"secondary","data-testid":"telegram-add-bot",onClick:f,children:[e.jsx(ge,{className:"h-4 w-4"}),t("telegram.addBot")]})]}),e.jsxs(V,{className:"space-y-3",children:[h.isLoading&&e.jsx("div",{className:"text-sm text-muted-foreground",children:t("common.loading")}),!h.isLoading&&p.length===0&&e.jsx("div",{className:"text-sm text-muted-foreground",children:t("telegram.noBots")}),p.map(i=>e.jsx(Ss,{bot:i,onEdit:a},i.id))]})]}),e.jsx(Es,{open:o,onOpenChange:s,bot:l})]})}function Fs(){const{t}=F();return e.jsxs("div",{className:"space-y-4",children:[e.jsxs(H,{className:"border-0 ring-0",children:[e.jsx(G,{children:e.jsx(J,{children:t("settings.terminal.title")})}),e.jsx(V,{children:e.jsx(Yt,{showShortcuts:!1})})]}),e.jsxs(H,{className:"border-0 ring-0",children:[e.jsxs(G,{children:[e.jsx(J,{children:t("settings.terminal.shortcuts.title")}),e.jsx(pt,{children:t("settings.terminal.shortcuts.savedOnServer")})]}),e.jsx(V,{children:e.jsx(Xt,{})})]})]})}async function Ke(t,o){try{return(await t.json()).error??o}catch{return o}}function Qe({label:t,value:o}){return e.jsxs("div",{className:"flex min-h-10 items-center justify-between gap-4 rounded-lg border border-border bg-card px-4 py-2.5",children:[e.jsx("div",{className:"min-w-0 pr-2 text-sm font-medium",children:t}),e.jsx("div",{className:"min-w-0 truncate text-right text-sm text-muted-foreground",children:o})]})}function As(){const{t}=F(),o=O(),s=Oe(x=>{var N;return((N=x.settings)==null?void 0:N.language)??"en_US"}),[l,c]=w.useState(!1),[h,p]=w.useState(!1),f=w.useRef(!1),n=Q({queryKey:["system-info"],queryFn:async()=>{const x=await fetch("/api/system/info");if(!x.ok)throw new Error(await Ke(x,t("settings.loadFailed")));return await x.json()}}).data,i=Q({queryKey:["system-update-check"],enabled:!1,gcTime:0,queryFn:async()=>{const x=await fetch("/api/system/update-check");if(!x.ok)throw new Error(await Ke(x,t("settings.version.checkFailed")));return await x.json()}}),r=i.data,d=Q({queryKey:["system-upgrade-status"],enabled:h,refetchInterval:x=>{var E;const N=(E=x.state.data)==null?void 0:E.state;return h||N&&N!=="idle"?2e3:!1},retry:!0,queryFn:async()=>{const x=await fetch("/api/system/upgrade");if(!x.ok)throw new Error("status");return await x.json()}}).data;w.useEffect(()=>{if(!h)return;const x=d==null?void 0:d.state;x&&x!=="idle"?f.current=!0:x==="idle"&&(d!=null&&d.error)?(f.current=!1,p(!1),b.error(d.error)):x==="idle"&&f.current&&(f.current=!1,p(!1),o.invalidateQueries({queryKey:["system-info"]}),o.removeQueries({queryKey:["system-update-check"]}),b.success(t("common.success")))},[h,d,o,t]);const u=M({mutationFn:async x=>{const N=await fetch("/api/system/upgrade",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({version:x})});if(!N.ok)throw new Error(await Ke(N,t("common.error")));return await N.json()},onSuccess:x=>{f.current=!1,p(!0),o.setQueryData(["system-upgrade-status"],x),b.success(t("settings.version.upgradeStarted"))},onError:x=>{b.error(x instanceof Error?x.message:t("common.error"))}}),y=x=>t(x==="launchd"?"settings.version.deploymentLaunchd":x==="systemd"?"settings.version.deploymentSystemd":"settings.version.deploymentNone"),j=h&&(d==null?void 0:d.state)!==void 0,g=(d==null?void 0:d.state)==="downloading"?t("settings.version.stateDownloading"):(d==null?void 0:d.state)==="executing"?t("settings.version.stateExecuting"):null,C=n!=null&&n.canSelfUpdate?null:n!=null&&n.isProd?n!=null&&n.installedViaCli?null:t("settings.version.upgradeDisabledNonCli"):t("settings.version.upgradeDisabledDev");return e.jsxs(H,{className:"border-0 ring-0",children:[e.jsx(G,{children:e.jsx(J,{children:t("settings.version.title")})}),e.jsxs(V,{className:"space-y-6",children:[e.jsxs("div",{className:"space-y-3",children:[e.jsx(Qe,{label:t("settings.version.currentVersion"),value:e.jsx("span",{"data-testid":"settings-version-current",className:"font-mono",children:n?n.version:t("common.loading")})}),e.jsx(Qe,{label:t("settings.version.installMethod"),value:n?n.installedViaCli?t("settings.version.installMethodCli"):t("settings.version.installMethodNonCli"):"-"}),e.jsx(Qe,{label:t("settings.version.deployment"),value:n?y(n.deployment):"-"})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsxs(k,{variant:"outline","data-testid":"settings-version-check",onClick:()=>i.refetch(),disabled:i.isFetching||j,children:[i.isFetching?e.jsx(U,{className:"h-4 w-4 animate-spin"}):e.jsx(tt,{className:"h-4 w-4"}),i.isFetching?t("settings.version.checking"):t("settings.version.checkUpdate")]}),r&&e.jsxs("span",{className:"text-sm text-muted-foreground","data-testid":"settings-version-latest",children:[r.hasUpdate&&r.latestVersion?t("settings.version.updateAvailable",{version:r.latestVersion}):t("settings.version.upToDate"),r.publishedAt?` · ${t("settings.version.publishedAt",{date:new Date(r.publishedAt).toLocaleDateString(et(s))})}`:""]})]}),i.isError&&e.jsx("div",{className:"text-sm text-destructive",children:t("settings.version.checkFailed")}),(r==null?void 0:r.hasUpdate)&&e.jsxs("div",{className:"space-y-3",children:[e.jsx("div",{className:"text-sm font-semibold",children:t("settings.version.changelog")}),e.jsx("div",{className:"rounded-lg border border-border bg-card px-4 py-3",children:r.changelog?e.jsx(es,{source:r.changelog,basePath:"/"}):e.jsx("div",{className:"text-sm text-muted-foreground",children:t("settings.version.changelogUnavailable")})}),n!=null&&n.canSelfUpdate?e.jsxs(k,{variant:"secondary","data-testid":"settings-version-upgrade",disabled:j||u.isPending,onClick:()=>c(!0),children:[j?e.jsx(U,{className:"h-4 w-4 animate-spin"}):e.jsx(Jt,{className:"h-4 w-4"}),t("settings.version.upgrade")]}):e.jsxs("div",{className:"space-y-1",children:[C&&e.jsx("div",{className:"text-sm text-muted-foreground",children:C}),e.jsx("div",{className:"text-xs text-muted-foreground font-mono",children:t("settings.version.terminalHint")})]})]}),j&&g&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-border bg-card px-4 py-3","data-testid":"settings-version-upgrade-status",children:[e.jsx(U,{className:"mt-0.5 h-4 w-4 shrink-0 animate-spin text-primary"}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-sm font-medium",children:g}),e.jsx("div",{className:"text-xs text-muted-foreground",children:t("settings.version.interruptNotice")})]})]})]}),e.jsx(xe,{open:l,onOpenChange:c,children:e.jsxs(fe,{children:[e.jsxs(pe,{children:[e.jsxs(we,{className:"flex items-center gap-2",children:[e.jsx(jt,{className:"h-5 w-5 text-destructive"}),t("settings.version.upgradeWarningTitle")]}),e.jsx(ye,{children:t("settings.version.upgradeWarningBody")})]}),e.jsxs(je,{children:[e.jsx(ve,{onClick:()=>c(!1),children:t("common.cancel")}),e.jsx(be,{variant:"destructive","data-testid":"settings-version-upgrade-confirm",onClick:()=>{c(!1),r!=null&&r.latestVersion&&u.mutate(r.latestVersion)},children:t("settings.version.upgrade")})]})]})})]})}const Ue=["terminal_bell","terminal_notification","tmux_window_close","tmux_pane_close","device_tmux_missing","device_disconnect","session_created","session_closed","agent_confirmation_pending","agent_turn_finished","agent_error","watch_triggered","watch_model_unavailable","watch_rule_error"];async function He(t,o){try{return(await t.json()).error??o}catch{return o}}function Ts(){var d;const{t}=F(),o=O(),s=Oe(u=>{var y;return((y=u.settings)==null?void 0:y.language)??"en_US"}),[l,c]=w.useState(""),[h,p]=w.useState(""),[f,a]=w.useState(Ue),n=Q({queryKey:["webhooks"],queryFn:async()=>{const u=await fetch("/api/webhooks");if(!u.ok)throw new Error(await He(u,t("webhook.loadFailed")));return await u.json()}}),i=M({mutationFn:async()=>{const u=await fetch("/api/webhooks",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:l,secret:h,eventMask:f})});if(!u.ok)throw new Error(await He(u,t("webhook.createFailed")))},onSuccess:async()=>{c(""),p(""),a(Ue),await o.invalidateQueries({queryKey:["webhooks"]}),b.success(t("common.success"))},onError:u=>{b.error(u instanceof Error?u.message:t("common.error"))}}),r=M({mutationFn:async u=>{const y=await fetch(`/api/webhooks/${u}`,{method:"DELETE"});if(!y.ok)throw new Error(await He(y,t("webhook.deleteFailed")))},onSuccess:async()=>{await o.invalidateQueries({queryKey:["webhooks"]}),b.success(t("common.success"))},onError:u=>{b.error(u instanceof Error?u.message:t("common.error"))}}),m=((d=n.data)==null?void 0:d.webhooks)??[];return e.jsxs(H,{className:"border-0 ring-0",children:[e.jsx(G,{children:e.jsx(J,{children:t("webhook.title")})}),e.jsxs(V,{className:"space-y-6",children:[e.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-12 md:items-end",children:[e.jsxs("div",{className:"md:col-span-6 space-y-2",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:"webhook-url-input",children:t("webhook.url")}),e.jsx(B,{id:"webhook-url-input","data-testid":"webhook-url-input",value:l,onChange:u=>c(u.target.value),placeholder:"https://example.com/webhook",className:"min-h-10"})]}),e.jsxs("div",{className:"md:col-span-4 space-y-2",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:"webhook-secret-input",children:t("webhook.secret")}),e.jsx(B,{id:"webhook-secret-input","data-testid":"webhook-secret-input",value:h,onChange:u=>p(u.target.value),placeholder:t("webhook.secretPlaceholder"),className:"min-h-10"})]}),e.jsx("div",{className:"md:col-span-2",children:e.jsxs(k,{variant:"secondary",className:"w-full md:w-auto","data-testid":"webhook-add",onClick:()=>i.mutate(),disabled:i.isPending||!l.trim()||!h.trim()||f.length===0,children:[i.isPending?e.jsx(U,{className:"h-4 w-4 animate-spin"}):e.jsx(Z,{className:"h-4 w-4"}),t("webhook.add")]})})]}),e.jsxs("div",{className:"space-y-3 rounded-lg border border-border bg-card px-4 py-3",children:[e.jsx("div",{className:"text-sm font-medium",children:t("webhook.eventMask")}),e.jsx("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",children:Ue.map(u=>{const y=f.includes(u);return e.jsxs("div",{className:"flex min-h-10 items-center justify-between gap-4 rounded-lg border border-border bg-background px-3 py-2",children:[e.jsx("div",{className:"min-w-0 pr-2 text-sm font-medium",children:t(`notification.eventType.${u}`)}),e.jsx(D,{checked:y,"data-testid":`webhook-event-${u}`,onCheckedChange:j=>{a(g=>j?g.includes(u)?g:[...g,u]:g.filter(C=>C!==u))}})]},u)})})]}),e.jsxs("div",{className:"space-y-2",children:[n.isLoading&&e.jsx("div",{className:"text-sm text-muted-foreground",children:t("common.loading")}),!n.isLoading&&m.length===0&&e.jsx("div",{className:"text-sm text-muted-foreground",children:t("webhook.empty")}),m.map(u=>e.jsxs("div",{"data-testid":"webhook-item","data-webhook-url":u.url,className:"flex items-center justify-between gap-3 rounded-lg border border-border bg-card px-4 py-2.5",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"truncate text-sm font-medium",children:u.url}),e.jsx("div",{className:"text-xs text-muted-foreground",children:new Date(u.createdAt).toLocaleString(et(s))})]}),e.jsx(k,{variant:"ghost",size:"icon-sm","data-testid":"webhook-delete",onClick:()=>r.mutate(u.id),disabled:r.isPending,"aria-label":t("common.delete"),title:t("common.delete"),children:e.jsx(te,{className:"h-4 w-4"})})]},u.id))]})]})]})}var Rs=Object.defineProperty,Be=Object.getOwnPropertySymbols,vt=Object.prototype.hasOwnProperty,bt=Object.prototype.propertyIsEnumerable,ht=(t,o,s)=>o in t?Rs(t,o,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[o]=s,Je=(t,o)=>{for(var s in o||(o={}))vt.call(o,s)&&ht(t,s,o[s]);if(Be)for(var s of Be(o))bt.call(o,s)&&ht(t,s,o[s]);return t},Ye=(t,o)=>{var s={};for(var l in t)vt.call(t,l)&&o.indexOf(l)<0&&(s[l]=t[l]);if(t!=null&&Be)for(var l of Be(t))o.indexOf(l)<0&&bt.call(t,l)&&(s[l]=t[l]);return s};/**
|
|
32
|
-
* @license QR Code generator library (TypeScript)
|
|
33
|
-
* Copyright (c) Project Nayuki.
|
|
34
|
-
* SPDX-License-Identifier: MIT
|
|
35
|
-
*/var se;(t=>{const o=class S{constructor(a,n,i,r){if(this.version=a,this.errorCorrectionLevel=n,this.modules=[],this.isFunction=[],a<S.MIN_VERSION||a>S.MAX_VERSION)throw new RangeError("Version value out of range");if(r<-1||r>7)throw new RangeError("Mask value out of range");this.size=a*4+17;let m=[];for(let u=0;u<this.size;u++)m.push(!1);for(let u=0;u<this.size;u++)this.modules.push(m.slice()),this.isFunction.push(m.slice());this.drawFunctionPatterns();const d=this.addEccAndInterleave(i);if(this.drawCodewords(d),r==-1){let u=1e9;for(let y=0;y<8;y++){this.applyMask(y),this.drawFormatBits(y);const j=this.getPenaltyScore();j<u&&(r=y,u=j),this.applyMask(y)}}c(0<=r&&r<=7),this.mask=r,this.applyMask(r),this.drawFormatBits(r),this.isFunction=[]}static encodeText(a,n){const i=t.QrSegment.makeSegments(a);return S.encodeSegments(i,n)}static encodeBinary(a,n){const i=t.QrSegment.makeBytes(a);return S.encodeSegments([i],n)}static encodeSegments(a,n,i=1,r=40,m=-1,d=!0){if(!(S.MIN_VERSION<=i&&i<=r&&r<=S.MAX_VERSION)||m<-1||m>7)throw new RangeError("Invalid value");let u,y;for(u=i;;u++){const x=S.getNumDataCodewords(u,n)*8,N=p.getTotalBits(a,u);if(N<=x){y=N;break}if(u>=r)throw new RangeError("Data too long")}for(const x of[S.Ecc.MEDIUM,S.Ecc.QUARTILE,S.Ecc.HIGH])d&&y<=S.getNumDataCodewords(u,x)*8&&(n=x);let j=[];for(const x of a){s(x.mode.modeBits,4,j),s(x.numChars,x.mode.numCharCountBits(u),j);for(const N of x.getData())j.push(N)}c(j.length==y);const g=S.getNumDataCodewords(u,n)*8;c(j.length<=g),s(0,Math.min(4,g-j.length),j),s(0,(8-j.length%8)%8,j),c(j.length%8==0);for(let x=236;j.length<g;x^=253)s(x,8,j);let C=[];for(;C.length*8<j.length;)C.push(0);return j.forEach((x,N)=>C[N>>>3]|=x<<7-(N&7)),new S(u,n,C,m)}getModule(a,n){return 0<=a&&a<this.size&&0<=n&&n<this.size&&this.modules[n][a]}getModules(){return this.modules}drawFunctionPatterns(){for(let i=0;i<this.size;i++)this.setFunctionModule(6,i,i%2==0),this.setFunctionModule(i,6,i%2==0);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);const a=this.getAlignmentPatternPositions(),n=a.length;for(let i=0;i<n;i++)for(let r=0;r<n;r++)i==0&&r==0||i==0&&r==n-1||i==n-1&&r==0||this.drawAlignmentPattern(a[i],a[r]);this.drawFormatBits(0),this.drawVersion()}drawFormatBits(a){const n=this.errorCorrectionLevel.formatBits<<3|a;let i=n;for(let m=0;m<10;m++)i=i<<1^(i>>>9)*1335;const r=(n<<10|i)^21522;c(r>>>15==0);for(let m=0;m<=5;m++)this.setFunctionModule(8,m,l(r,m));this.setFunctionModule(8,7,l(r,6)),this.setFunctionModule(8,8,l(r,7)),this.setFunctionModule(7,8,l(r,8));for(let m=9;m<15;m++)this.setFunctionModule(14-m,8,l(r,m));for(let m=0;m<8;m++)this.setFunctionModule(this.size-1-m,8,l(r,m));for(let m=8;m<15;m++)this.setFunctionModule(8,this.size-15+m,l(r,m));this.setFunctionModule(8,this.size-8,!0)}drawVersion(){if(this.version<7)return;let a=this.version;for(let i=0;i<12;i++)a=a<<1^(a>>>11)*7973;const n=this.version<<12|a;c(n>>>18==0);for(let i=0;i<18;i++){const r=l(n,i),m=this.size-11+i%3,d=Math.floor(i/3);this.setFunctionModule(m,d,r),this.setFunctionModule(d,m,r)}}drawFinderPattern(a,n){for(let i=-4;i<=4;i++)for(let r=-4;r<=4;r++){const m=Math.max(Math.abs(r),Math.abs(i)),d=a+r,u=n+i;0<=d&&d<this.size&&0<=u&&u<this.size&&this.setFunctionModule(d,u,m!=2&&m!=4)}}drawAlignmentPattern(a,n){for(let i=-2;i<=2;i++)for(let r=-2;r<=2;r++)this.setFunctionModule(a+r,n+i,Math.max(Math.abs(r),Math.abs(i))!=1)}setFunctionModule(a,n,i){this.modules[n][a]=i,this.isFunction[n][a]=!0}addEccAndInterleave(a){const n=this.version,i=this.errorCorrectionLevel;if(a.length!=S.getNumDataCodewords(n,i))throw new RangeError("Invalid argument");const r=S.NUM_ERROR_CORRECTION_BLOCKS[i.ordinal][n],m=S.ECC_CODEWORDS_PER_BLOCK[i.ordinal][n],d=Math.floor(S.getNumRawDataModules(n)/8),u=r-d%r,y=Math.floor(d/r);let j=[];const g=S.reedSolomonComputeDivisor(m);for(let x=0,N=0;x<r;x++){let E=a.slice(N,N+y-m+(x<u?0:1));N+=E.length;const z=S.reedSolomonComputeRemainder(E,g);x<u&&E.push(0),j.push(E.concat(z))}let C=[];for(let x=0;x<j[0].length;x++)j.forEach((N,E)=>{(x!=y-m||E>=u)&&C.push(N[x])});return c(C.length==d),C}drawCodewords(a){if(a.length!=Math.floor(S.getNumRawDataModules(this.version)/8))throw new RangeError("Invalid argument");let n=0;for(let i=this.size-1;i>=1;i-=2){i==6&&(i=5);for(let r=0;r<this.size;r++)for(let m=0;m<2;m++){const d=i-m,y=(i+1&2)==0?this.size-1-r:r;!this.isFunction[y][d]&&n<a.length*8&&(this.modules[y][d]=l(a[n>>>3],7-(n&7)),n++)}}c(n==a.length*8)}applyMask(a){if(a<0||a>7)throw new RangeError("Mask value out of range");for(let n=0;n<this.size;n++)for(let i=0;i<this.size;i++){let r;switch(a){case 0:r=(i+n)%2==0;break;case 1:r=n%2==0;break;case 2:r=i%3==0;break;case 3:r=(i+n)%3==0;break;case 4:r=(Math.floor(i/3)+Math.floor(n/2))%2==0;break;case 5:r=i*n%2+i*n%3==0;break;case 6:r=(i*n%2+i*n%3)%2==0;break;case 7:r=((i+n)%2+i*n%3)%2==0;break;default:throw new Error("Unreachable")}!this.isFunction[n][i]&&r&&(this.modules[n][i]=!this.modules[n][i])}}getPenaltyScore(){let a=0;for(let m=0;m<this.size;m++){let d=!1,u=0,y=[0,0,0,0,0,0,0];for(let j=0;j<this.size;j++)this.modules[m][j]==d?(u++,u==5?a+=S.PENALTY_N1:u>5&&a++):(this.finderPenaltyAddHistory(u,y),d||(a+=this.finderPenaltyCountPatterns(y)*S.PENALTY_N3),d=this.modules[m][j],u=1);a+=this.finderPenaltyTerminateAndCount(d,u,y)*S.PENALTY_N3}for(let m=0;m<this.size;m++){let d=!1,u=0,y=[0,0,0,0,0,0,0];for(let j=0;j<this.size;j++)this.modules[j][m]==d?(u++,u==5?a+=S.PENALTY_N1:u>5&&a++):(this.finderPenaltyAddHistory(u,y),d||(a+=this.finderPenaltyCountPatterns(y)*S.PENALTY_N3),d=this.modules[j][m],u=1);a+=this.finderPenaltyTerminateAndCount(d,u,y)*S.PENALTY_N3}for(let m=0;m<this.size-1;m++)for(let d=0;d<this.size-1;d++){const u=this.modules[m][d];u==this.modules[m][d+1]&&u==this.modules[m+1][d]&&u==this.modules[m+1][d+1]&&(a+=S.PENALTY_N2)}let n=0;for(const m of this.modules)n=m.reduce((d,u)=>d+(u?1:0),n);const i=this.size*this.size,r=Math.ceil(Math.abs(n*20-i*10)/i)-1;return c(0<=r&&r<=9),a+=r*S.PENALTY_N4,c(0<=a&&a<=2568888),a}getAlignmentPatternPositions(){if(this.version==1)return[];{const a=Math.floor(this.version/7)+2,n=this.version==32?26:Math.ceil((this.version*4+4)/(a*2-2))*2;let i=[6];for(let r=this.size-7;i.length<a;r-=n)i.splice(1,0,r);return i}}static getNumRawDataModules(a){if(a<S.MIN_VERSION||a>S.MAX_VERSION)throw new RangeError("Version number out of range");let n=(16*a+128)*a+64;if(a>=2){const i=Math.floor(a/7)+2;n-=(25*i-10)*i-55,a>=7&&(n-=36)}return c(208<=n&&n<=29648),n}static getNumDataCodewords(a,n){return Math.floor(S.getNumRawDataModules(a)/8)-S.ECC_CODEWORDS_PER_BLOCK[n.ordinal][a]*S.NUM_ERROR_CORRECTION_BLOCKS[n.ordinal][a]}static reedSolomonComputeDivisor(a){if(a<1||a>255)throw new RangeError("Degree out of range");let n=[];for(let r=0;r<a-1;r++)n.push(0);n.push(1);let i=1;for(let r=0;r<a;r++){for(let m=0;m<n.length;m++)n[m]=S.reedSolomonMultiply(n[m],i),m+1<n.length&&(n[m]^=n[m+1]);i=S.reedSolomonMultiply(i,2)}return n}static reedSolomonComputeRemainder(a,n){let i=n.map(r=>0);for(const r of a){const m=r^i.shift();i.push(0),n.forEach((d,u)=>i[u]^=S.reedSolomonMultiply(d,m))}return i}static reedSolomonMultiply(a,n){if(a>>>8||n>>>8)throw new RangeError("Byte out of range");let i=0;for(let r=7;r>=0;r--)i=i<<1^(i>>>7)*285,i^=(n>>>r&1)*a;return c(i>>>8==0),i}finderPenaltyCountPatterns(a){const n=a[1];c(n<=this.size*3);const i=n>0&&a[2]==n&&a[3]==n*3&&a[4]==n&&a[5]==n;return(i&&a[0]>=n*4&&a[6]>=n?1:0)+(i&&a[6]>=n*4&&a[0]>=n?1:0)}finderPenaltyTerminateAndCount(a,n,i){return a&&(this.finderPenaltyAddHistory(n,i),n=0),n+=this.size,this.finderPenaltyAddHistory(n,i),this.finderPenaltyCountPatterns(i)}finderPenaltyAddHistory(a,n){n[0]==0&&(a+=this.size),n.pop(),n.unshift(a)}};o.MIN_VERSION=1,o.MAX_VERSION=40,o.PENALTY_N1=3,o.PENALTY_N2=3,o.PENALTY_N3=40,o.PENALTY_N4=10,o.ECC_CODEWORDS_PER_BLOCK=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],o.NUM_ERROR_CORRECTION_BLOCKS=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]],t.QrCode=o;function s(f,a,n){if(a<0||a>31||f>>>a)throw new RangeError("Value out of range");for(let i=a-1;i>=0;i--)n.push(f>>>i&1)}function l(f,a){return(f>>>a&1)!=0}function c(f){if(!f)throw new Error("Assertion error")}const h=class R{constructor(a,n,i){if(this.mode=a,this.numChars=n,this.bitData=i,n<0)throw new RangeError("Invalid argument");this.bitData=i.slice()}static makeBytes(a){let n=[];for(const i of a)s(i,8,n);return new R(R.Mode.BYTE,a.length,n)}static makeNumeric(a){if(!R.isNumeric(a))throw new RangeError("String contains non-numeric characters");let n=[];for(let i=0;i<a.length;){const r=Math.min(a.length-i,3);s(parseInt(a.substring(i,i+r),10),r*3+1,n),i+=r}return new R(R.Mode.NUMERIC,a.length,n)}static makeAlphanumeric(a){if(!R.isAlphanumeric(a))throw new RangeError("String contains unencodable characters in alphanumeric mode");let n=[],i;for(i=0;i+2<=a.length;i+=2){let r=R.ALPHANUMERIC_CHARSET.indexOf(a.charAt(i))*45;r+=R.ALPHANUMERIC_CHARSET.indexOf(a.charAt(i+1)),s(r,11,n)}return i<a.length&&s(R.ALPHANUMERIC_CHARSET.indexOf(a.charAt(i)),6,n),new R(R.Mode.ALPHANUMERIC,a.length,n)}static makeSegments(a){return a==""?[]:R.isNumeric(a)?[R.makeNumeric(a)]:R.isAlphanumeric(a)?[R.makeAlphanumeric(a)]:[R.makeBytes(R.toUtf8ByteArray(a))]}static makeEci(a){let n=[];if(a<0)throw new RangeError("ECI assignment value out of range");if(a<128)s(a,8,n);else if(a<16384)s(2,2,n),s(a,14,n);else if(a<1e6)s(6,3,n),s(a,21,n);else throw new RangeError("ECI assignment value out of range");return new R(R.Mode.ECI,0,n)}static isNumeric(a){return R.NUMERIC_REGEX.test(a)}static isAlphanumeric(a){return R.ALPHANUMERIC_REGEX.test(a)}getData(){return this.bitData.slice()}static getTotalBits(a,n){let i=0;for(const r of a){const m=r.mode.numCharCountBits(n);if(r.numChars>=1<<m)return 1/0;i+=4+m+r.bitData.length}return i}static toUtf8ByteArray(a){a=encodeURI(a);let n=[];for(let i=0;i<a.length;i++)a.charAt(i)!="%"?n.push(a.charCodeAt(i)):(n.push(parseInt(a.substring(i+1,i+3),16)),i+=2);return n}};h.NUMERIC_REGEX=/^[0-9]*$/,h.ALPHANUMERIC_REGEX=/^[A-Z0-9 $%*+.\/:-]*$/,h.ALPHANUMERIC_CHARSET="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";let p=h;t.QrSegment=h})(se||(se={}));(t=>{(o=>{const s=class{constructor(c,h){this.ordinal=c,this.formatBits=h}};s.LOW=new s(0,1),s.MEDIUM=new s(1,0),s.QUARTILE=new s(2,3),s.HIGH=new s(3,2),o.Ecc=s})(t.QrCode||(t.QrCode={}))})(se||(se={}));(t=>{(o=>{const s=class{constructor(c,h){this.modeBits=c,this.numBitsCharCount=h}numCharCountBits(c){return this.numBitsCharCount[Math.floor((c+7)/17)]}};s.NUMERIC=new s(1,[10,12,14]),s.ALPHANUMERIC=new s(2,[9,11,13]),s.BYTE=new s(4,[8,16,16]),s.KANJI=new s(8,[8,10,12]),s.ECI=new s(7,[0,0,0]),o.Mode=s})(t.QrSegment||(t.QrSegment={}))})(se||(se={}));var oe=se;/**
|
|
36
|
-
* @license qrcode.react
|
|
37
|
-
* Copyright (c) Paul O'Shannessy
|
|
38
|
-
* SPDX-License-Identifier: ISC
|
|
39
|
-
*/var Is={L:oe.QrCode.Ecc.LOW,M:oe.QrCode.Ecc.MEDIUM,Q:oe.QrCode.Ecc.QUARTILE,H:oe.QrCode.Ecc.HIGH},Nt=128,Ct="L",Et="#FFFFFF",kt="#000000",St=!1,Mt=1,Ls=4,$s=0,Bs=.1;function Pt(t,o=0){const s=[];return t.forEach(function(l,c){let h=null;l.forEach(function(p,f){if(!p&&h!==null){s.push(`M${h+o} ${c+o}h${f-h}v1H${h+o}z`),h=null;return}if(f===l.length-1){if(!p)return;h===null?s.push(`M${f+o},${c+o} h1v1H${f+o}z`):s.push(`M${h+o},${c+o} h${f+1-h}v1H${h+o}z`);return}p&&h===null&&(h=f)})}),s.join("")}function Ft(t,o){return t.slice().map((s,l)=>l<o.y||l>=o.y+o.h?s:s.map((c,h)=>h<o.x||h>=o.x+o.w?c:!1))}function Ds(t,o,s,l){if(l==null)return null;const c=t.length+s*2,h=Math.floor(o*Bs),p=c/o,f=(l.width||h)*p,a=(l.height||h)*p,n=l.x==null?t.length/2-f/2:l.x*p,i=l.y==null?t.length/2-a/2:l.y*p,r=l.opacity==null?1:l.opacity;let m=null;if(l.excavate){let u=Math.floor(n),y=Math.floor(i),j=Math.ceil(f+n-u),g=Math.ceil(a+i-y);m={x:u,y,w:j,h:g}}const d=l.crossOrigin;return{x:n,y:i,h:a,w:f,excavation:m,opacity:r,crossOrigin:d}}function Os(t,o){return o!=null?Math.max(Math.floor(o),0):t?Ls:$s}function At({value:t,level:o,minVersion:s,includeMargin:l,marginSize:c,imageSettings:h,size:p,boostLevel:f}){let a=$.useMemo(()=>{const u=(Array.isArray(t)?t:[t]).reduce((y,j)=>(y.push(...oe.QrSegment.makeSegments(j)),y),[]);return oe.QrCode.encodeSegments(u,Is[o],s,void 0,void 0,f)},[t,o,s,f]);const{cells:n,margin:i,numCells:r,calculatedImageSettings:m}=$.useMemo(()=>{let d=a.getModules();const u=Os(l,c),y=d.length+u*2,j=Ds(d,p,u,h);return{cells:d,margin:u,numCells:y,calculatedImageSettings:j}},[a,p,h,l,c]);return{qrcode:a,margin:i,cells:n,numCells:r,calculatedImageSettings:m}}var _s=(function(){try{new Path2D().addPath(new Path2D)}catch{return!1}return!0})(),zs=$.forwardRef(function(o,s){const l=o,{value:c,size:h=Nt,level:p=Ct,bgColor:f=Et,fgColor:a=kt,includeMargin:n=St,minVersion:i=Mt,boostLevel:r,marginSize:m,imageSettings:d}=l,y=Ye(l,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","marginSize","imageSettings"]),{style:j}=y,g=Ye(y,["style"]),C=d==null?void 0:d.src,x=$.useRef(null),N=$.useRef(null),E=$.useCallback(q=>{x.current=q,typeof s=="function"?s(q):s&&(s.current=q)},[s]),[z,P]=$.useState(!1),{margin:A,cells:T,numCells:I,calculatedImageSettings:L}=At({value:c,level:p,minVersion:i,boostLevel:r,includeMargin:n,marginSize:m,imageSettings:d,size:h});$.useEffect(()=>{if(x.current!=null){const q=x.current,W=q.getContext("2d");if(!W)return;let me=T;const ee=N.current,Me=L!=null&&ee!==null&&ee.complete&&ee.naturalHeight!==0&&ee.naturalWidth!==0;Me&&L.excavation!=null&&(me=Ft(T,L.excavation));const Pe=window.devicePixelRatio||1;q.height=q.width=h*Pe;const Fe=h/I*Pe;W.scale(Fe,Fe),W.fillStyle=f,W.fillRect(0,0,I,I),W.fillStyle=a,_s?W.fill(new Path2D(Pt(me,A))):T.forEach(function(ue,Ae){ue.forEach(function(_e,Te){_e&&W.fillRect(Te+A,Ae+A,1,1)})}),L&&(W.globalAlpha=L.opacity),Me&&W.drawImage(ee,L.x+A,L.y+A,L.w,L.h)}}),$.useEffect(()=>{P(!1)},[C]);const Y=Je({height:h,width:h},j);let _=null;return C!=null&&(_=$.createElement("img",{src:C,key:C,style:{display:"none"},onLoad:()=>{P(!0)},ref:N,crossOrigin:L==null?void 0:L.crossOrigin})),$.createElement($.Fragment,null,$.createElement("canvas",Je({style:Y,height:h,width:h,ref:E,role:"img"},g)),_)});zs.displayName="QRCodeCanvas";var Tt=$.forwardRef(function(o,s){const l=o,{value:c,size:h=Nt,level:p=Ct,bgColor:f=Et,fgColor:a=kt,includeMargin:n=St,minVersion:i=Mt,boostLevel:r,title:m,marginSize:d,imageSettings:u}=l,y=Ye(l,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","title","marginSize","imageSettings"]),{margin:j,cells:g,numCells:C,calculatedImageSettings:x}=At({value:c,level:p,minVersion:i,boostLevel:r,includeMargin:n,marginSize:d,imageSettings:u,size:h});let N=g,E=null;u!=null&&x!=null&&(x.excavation!=null&&(N=Ft(g,x.excavation)),E=$.createElement("image",{href:u.src,height:x.h,width:x.w,x:x.x+j,y:x.y+j,preserveAspectRatio:"none",opacity:x.opacity,crossOrigin:x.crossOrigin}));const z=Pt(N,j);return $.createElement("svg",Je({height:h,width:h,viewBox:`0 0 ${C} ${C}`,ref:s,role:"img"},y),!!m&&$.createElement("title",null,m),$.createElement("path",{fill:f,d:`M0,0 h${C}v${C}H0z`,shapeRendering:"crispEdges"}),$.createElement("path",{fill:a,d:z,shapeRendering:"crispEdges"}),E)});Tt.displayName="QRCodeSVG";const Le=1500;async function he(t,o){try{return(await t.json()).error??o}catch{return o}}function Rt({open:t,onOpenChange:o,accountId:s,accountName:l}){const{t:c}=F(),h=O(),[p,f]=w.useState(null),[a,n]=w.useState("starting"),[i,r]=w.useState(null),m=w.useRef(null),d=w.useRef(0),u=w.useRef(null),y=w.useCallback(()=>{m.current!==null&&(clearTimeout(m.current),m.current=null)},[]),j=w.useCallback(()=>{var P;y(),(P=u.current)==null||P.abort(),u.current=null,d.current+=1},[y]),g=w.useCallback(async()=>{j(),await h.invalidateQueries({queryKey:["weixin-accounts"]}),b.success(c("weixin.bindSuccess")),o(!1)},[j,o,h,c]),C=w.useCallback(async(P,A,T)=>{try{const I=await fetch(`/api/settings/weixin/accounts/${s}/users`,{signal:A});if(d.current!==P)return;if(!I.ok)throw new Error(await he(I,c("weixin.loginFailed")));const L=await I.json();if(d.current!==P)return;const Y=L.users.find(_=>!T.has(_.userId)||_.lastInboundAt!==T.get(_.userId));if(Y){if(n("binding"),r(c("weixin.bindingInProgress")),Y.status==="pending"){const _=await fetch(`/api/settings/weixin/accounts/${s}/users/${encodeURIComponent(Y.userId)}/approve`,{method:"POST",signal:A});if(d.current!==P)return;if(!_.ok)throw new Error(await he(_,c("weixin.approveFailed")))}await g();return}m.current=setTimeout(()=>void C(P,A,T),Le)}catch(I){if(A.aborted||d.current!==P)return;n("error"),r(I instanceof Error?I.message:c("weixin.loginFailed"))}},[s,g,c]),x=w.useCallback(async(P,A)=>{try{const T=await fetch(`/api/settings/weixin/accounts/${s}/login/status`,{signal:A});if(d.current!==P)return;if(!T.ok)throw new Error(await he(T,c("weixin.loginFailed")));const I=await T.json();if(d.current!==P)return;if(I.status==="expired"){n("expired"),r(c("weixin.loginExpired"));return}if(I.status==="error"){n("error"),r(c("weixin.loginError",{message:I.message??""}));return}if(I.loggedIn||I.status==="confirmed"){const L=await fetch(`/api/settings/weixin/accounts/${s}/users`,{signal:A});if(d.current!==P)return;if(!L.ok)throw new Error(await he(L,c("weixin.loginFailed")));const Y=await L.json();if(d.current!==P)return;const _=new Map(Y.users.map(q=>[q.userId,q.lastInboundAt]));n("awaitMessage"),r(c("weixin.scanConfirmedSendHint")),m.current=setTimeout(()=>void C(P,A,_),Le);return}n("scanning"),r(c("weixin.scanQrcodeHint")),m.current=setTimeout(()=>void x(P,A),Le)}catch(T){if(A.aborted||d.current!==P)return;n("error"),r(T instanceof Error?T.message:c("weixin.loginFailed"))}},[s,C,c]),N=w.useCallback(async()=>{j();const P=d.current,A=new AbortController;u.current=A,n("starting"),r(null),f(null);try{const T=await fetch(`/api/settings/weixin/accounts/${s}/login/start`,{method:"POST",signal:A.signal});if(d.current!==P)return;if(!T.ok)throw new Error(await he(T,c("weixin.loginFailed")));const I=await T.json();if(d.current!==P)return;f(I.qrcodeUrl),n("scanning"),r(c("weixin.scanQrcodeHint")),m.current=setTimeout(()=>void x(P,A.signal),Le)}catch(T){if(A.signal.aborted||d.current!==P)return;n("error"),r(T instanceof Error?T.message:c("weixin.loginFailed"))}},[s,j,x,c]);w.useEffect(()=>{if(!t){j();return}return N(),j},[t,s]);const E=a==="starting",z=a==="expired"||a==="error";return e.jsx(ae,{open:t,onOpenChange:o,children:e.jsxs(ne,{className:"sm:max-w-sm","data-testid":`weixin-account-login-modal-${s}`,children:[e.jsxs(ie,{children:[e.jsx(re,{children:c("weixin.scanToLogin")}),e.jsx(Ne,{children:l})]}),e.jsxs("div",{className:"flex flex-col items-center gap-3 py-2",children:[e.jsxs("div",{className:"flex h-56 w-56 items-center justify-center rounded-lg border border-border bg-white",children:[E&&e.jsx(U,{className:"h-8 w-8 animate-spin text-muted-foreground"}),!E&&p&&e.jsx(Tt,{value:p,size:208,marginSize:3,"data-testid":`weixin-account-login-qrcode-${s}`}),!E&&!p&&e.jsx(Ge,{className:"h-10 w-10 text-muted-foreground"})]}),i&&e.jsx("p",{className:"text-center text-sm font-medium","data-testid":`weixin-account-login-status-${s}`,children:i})]}),e.jsxs(de,{children:[z&&e.jsxs(k,{variant:"secondary","data-testid":"weixin-account-login-refresh",onClick:()=>void N(),children:[e.jsx(tt,{className:"h-4 w-4"}),c("weixin.refreshQrcode")]}),e.jsx(k,{variant:"outline",onClick:()=>o(!1),children:c("weixin.closeLogin")})]})]})})}const qs="min-h-10";async function gt(t,o){try{return(await t.json()).error??o}catch{return o}}function Ks({open:t,onOpenChange:o,account:s}){const{t:l}=F(),c=O(),h=!!s,[p,f]=w.useState(""),[a,n]=w.useState(!0),[i,r]=w.useState(null);w.useEffect(()=>{t&&(f((s==null?void 0:s.name)??""),n((s==null?void 0:s.enabled)??!0))},[t,s]);const m=M({mutationFn:async()=>{const g=await fetch("/api/settings/weixin/accounts",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:p.trim(),enabled:a,allowAuthRequests:!0})});if(!g.ok)throw new Error(await gt(g,l("weixin.createFailed")));return await g.json()},onSuccess:async g=>{await c.invalidateQueries({queryKey:["weixin-accounts"]}),b.success(l("weixin.accountCreated")),o(!1),r({id:g.accountId,name:p.trim()})},onError:g=>{b.error(g instanceof Error?g.message:l("common.error"))}}),d=M({mutationFn:async()=>{if(!s)throw new Error(l("weixin.updateFailed"));const g=await fetch(`/api/settings/weixin/accounts/${s.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:p.trim(),enabled:a})});if(!g.ok)throw new Error(await gt(g,l("weixin.updateFailed")))},onSuccess:async()=>{await c.invalidateQueries({queryKey:["weixin-accounts"]}),b.success(l("weixin.accountUpdated")),o(!1)},onError:g=>{b.error(g instanceof Error?g.message:l("common.error"))}}),u=m.isPending||d.isPending,y=p.trim().length>0,j=()=>{!y||u||(h?d.mutate():m.mutate())};return e.jsxs(e.Fragment,{children:[e.jsx(ae,{open:t,onOpenChange:o,children:e.jsxs(ne,{className:"sm:max-w-lg","data-testid":h?`weixin-account-edit-modal-${s==null?void 0:s.id}`:"weixin-account-add-modal",children:[e.jsx(ie,{children:e.jsx(re,{children:l(h?"weixin.editAccount":"weixin.addAccount")})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:"weixin-account-name",children:l("weixin.accountName")}),e.jsx(B,{id:"weixin-account-name","data-testid":"weixin-account-name-input",value:p,onChange:g=>f(g.target.value),placeholder:l("weixin.accountNamePlaceholder"),className:qs})]}),e.jsxs("div",{className:"flex min-h-10 items-center justify-between gap-3 rounded-lg border border-border bg-background px-3 py-2.5",children:[e.jsx("span",{className:"text-sm font-medium",children:l("weixin.enableAccount")}),e.jsx(D,{checked:a,"data-testid":"weixin-account-enabled",onCheckedChange:g=>n(!!g)})]})]}),e.jsxs(de,{children:[e.jsx(k,{variant:"outline",onClick:()=>o(!1),disabled:u,children:l("common.cancel")}),e.jsxs(k,{variant:"secondary","data-testid":"weixin-account-form-submit",onClick:j,disabled:!y||u,children:[u?e.jsx(U,{className:"h-4 w-4 animate-spin"}):e.jsx(Z,{className:"h-4 w-4"}),l("common.save")]})]})]})}),i&&e.jsx(Rt,{open:!!i,onOpenChange:g=>{g||r(null)},accountId:i.id,accountName:i.name})]})}async function Ve(t,o){try{return(await t.json()).error??o}catch{return o}}function Qs({account:t,onEdit:o}){const{t:s}=F(),l=O(),[c,h]=w.useState(!1),p=t.loggedIn&&t.authorizedCount>0,f=M({mutationFn:async r=>{const m=await fetch(`/api/settings/weixin/accounts/${t.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({enabled:r})});if(!m.ok)throw new Error(await Ve(m,s("weixin.updateFailed")))},onSuccess:async()=>{await l.invalidateQueries({queryKey:["weixin-accounts"]})},onError:r=>{b.error(r instanceof Error?r.message:s("common.error"))}}),a=M({mutationFn:async()=>{const r=await fetch(`/api/settings/weixin/accounts/${t.id}/test`,{method:"POST"});if(!r.ok)throw new Error(await Ve(r,s("weixin.testMessageFailed")))},onSuccess:()=>{b.success(s("weixin.testMessageSent"))},onError:r=>{b.error(r instanceof Error?r.message:s("weixin.testMessageFailed"))}}),n=M({mutationFn:async()=>{const r=await fetch(`/api/settings/weixin/accounts/${t.id}`,{method:"DELETE"});if(!r.ok)throw new Error(await Ve(r,s("weixin.deleteFailed")))},onSuccess:async()=>{await l.invalidateQueries({queryKey:["weixin-accounts"]}),b.success(s("weixin.accountDeleted"))},onError:r=>{b.error(r instanceof Error?r.message:s("common.error"))}}),i=t.loggedIn?p?{label:s("weixin.bound"),tone:"success"}:{label:s("weixin.unbound"),tone:"muted"}:{label:s("weixin.notLoggedIn"),tone:"muted"};return e.jsxs("div",{className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-3 sm:flex-row sm:items-center sm:justify-between","data-testid":`weixin-account-card-${t.id}`,"data-account-name":t.name,children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-3",children:[e.jsx(D,{checked:t.enabled,disabled:f.isPending,onCheckedChange:r=>f.mutate(!!r),"data-testid":`weixin-account-enabled-${t.id}`}),e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"truncate font-medium",children:t.name}),e.jsx("span",{className:ft("shrink-0 rounded px-1.5 py-0.5 text-xs font-medium",i.tone==="success"?"bg-emerald-500/15 text-emerald-600 dark:text-emerald-400":"bg-muted text-muted-foreground"),"data-testid":`weixin-account-login-state-${t.id}`,children:i.label}),p&&t.needsReactivationCount>0&&e.jsxs("span",{className:"flex shrink-0 items-center gap-1 rounded bg-destructive/15 px-1.5 py-0.5 text-xs font-medium text-destructive",title:s("weixin.reactivationHint"),"data-testid":`weixin-account-needs-reactivation-${t.id}`,children:[e.jsx(jt,{className:"h-3.5 w-3.5"}),s("weixin.needsReactivation")]})]}),p&&t.needsReactivationCount>0&&e.jsx("div",{className:"mt-0.5 text-xs text-muted-foreground",children:s("weixin.reactivationHint")})]})]}),e.jsxs("div",{className:"flex shrink-0 flex-wrap items-center justify-end gap-1",children:[p?e.jsxs(e.Fragment,{children:[e.jsxs(k,{variant:"ghost",size:"sm","data-testid":`weixin-account-relogin-${t.id}`,onClick:()=>h(!0),children:[e.jsx(Ge,{className:"h-4 w-4"}),s("weixin.relogin")]}),e.jsxs(k,{variant:"ghost",size:"sm","data-testid":`weixin-account-test-${t.id}`,onClick:()=>a.mutate(),disabled:a.isPending,children:[e.jsx(yt,{className:"h-4 w-4"}),s("weixin.testMessage")]})]}):e.jsxs(k,{variant:"secondary",size:"sm","data-testid":`weixin-account-login-${t.id}`,onClick:()=>h(!0),children:[e.jsx(Ge,{className:"h-4 w-4"}),s("weixin.bindAction")]}),e.jsx(k,{variant:"ghost",size:"icon-sm",title:s("common.edit"),"data-testid":`weixin-account-edit-${t.id}`,onClick:()=>o(t),children:e.jsx(De,{className:"h-4 w-4"})}),e.jsx(k,{variant:"ghost",size:"icon-sm",title:s("weixin.deleteAccount"),"data-testid":`weixin-account-delete-${t.id}`,onClick:()=>n.mutate(),disabled:n.isPending,children:e.jsx(te,{className:"h-4 w-4 text-destructive"})})]}),e.jsx(Rt,{open:c,onOpenChange:h,accountId:t.id,accountName:t.name})]})}async function Us(t,o){try{return(await t.json()).error??o}catch{return o}}function Hs(){var n;const{t}=F(),[o,s]=w.useState(!1),[l,c]=w.useState(void 0),h=Q({queryKey:["weixin-accounts"],queryFn:async()=>{const i=await fetch("/api/settings/weixin/accounts");if(!i.ok)throw new Error(await Us(i,t("weixin.loadAccountsFailed")));return await i.json()}}),p=((n=h.data)==null?void 0:n.accounts)??[],f=()=>{c(void 0),s(!0)},a=i=>{c(i),s(!0)};return e.jsxs(e.Fragment,{children:[e.jsxs(H,{className:"border-0 ring-0",children:[e.jsxs(G,{className:"flex flex-row items-start justify-between gap-2",children:[e.jsxs("div",{className:"min-w-0 space-y-1",children:[e.jsx(J,{children:t("weixin.title")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("weixin.subtitle")})]}),e.jsxs(k,{variant:"secondary","data-testid":"weixin-add-account",onClick:f,children:[e.jsx(ge,{className:"h-4 w-4"}),t("weixin.addAccount")]})]}),e.jsxs(V,{className:"space-y-3",children:[e.jsx("p",{className:"rounded-lg border border-border bg-muted/40 p-3 text-xs text-muted-foreground",children:t("weixin.replyOnlyNotice")}),h.isLoading&&e.jsx("div",{className:"text-sm text-muted-foreground",children:t("common.loading")}),!h.isLoading&&p.length===0&&e.jsx("div",{className:"text-sm text-muted-foreground",children:t("weixin.noAccounts")}),p.map(i=>e.jsx(Qs,{account:i,onEdit:a},i.id))]})]}),e.jsx(Ks,{open:o,onOpenChange:s,account:l})]})}async function Xe(t,o){try{return(await t.json()).error??o}catch{return o}}function na(){var st,at;const{t}=F(),o=O(),{refreshSettings:s}=Oe(),[l,c]=w.useState("general"),h=nt(v=>v.theme),p=nt(v=>v.setTheme),f=h==="dark",[a,n]=w.useState("tmex"),[i,r]=w.useState(window.location.origin),[m,d]=w.useState("en_US"),[u,y]=w.useState(6),[j,g]=w.useState(3),[C,x]=w.useState(!0),[N,E]=w.useState(!0),[z,P]=w.useState(!0),[A,T]=w.useState(!0),[I,L]=w.useState(!1),[Y,_]=w.useState(!1),[q,W]=w.useState(2),[me,ee]=w.useState(10),[Me,Pe]=w.useState(!1),Fe=v=>{const K=v?"dark":"light";p(K),document.documentElement.classList.toggle("dark",K==="dark")},ue=Q({queryKey:["site-settings"],queryFn:async()=>{const v=await fetch("/api/settings/site");if(!v.ok)throw new Error(await Xe(v,t("settings.loadFailed")));return await v.json()}});w.useEffect(()=>{var K;const v=(K=ue.data)==null?void 0:K.settings;v&&(n(v.siteName),r(v.siteUrl),d(v.language??"en_US"),y(v.bellThrottleSeconds),g(v.notificationThrottleSeconds??3),x(v.enableBrowserBellToast??!0),E(v.enableBrowserNotificationToast??!0),P(v.enableTelegramBellPush??!0),T(v.enableTelegramNotificationPush??!0),L(v.enableWeixinBellPush??!1),_(v.enableWeixinNotificationPush??!1),W(v.sshReconnectMaxRetries),ee(v.sshReconnectDelaySeconds))},[(st=ue.data)==null?void 0:st.settings]);const Ae=M({mutationFn:async()=>{const K=await fetch("/api/settings/site",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({siteName:a,siteUrl:i,language:m,bellThrottleSeconds:u,notificationThrottleSeconds:j,enableBrowserBellToast:C,enableBrowserNotificationToast:N,enableTelegramBellPush:z,enableTelegramNotificationPush:A,enableWeixinBellPush:I,enableWeixinNotificationPush:Y,sshReconnectMaxRetries:q,sshReconnectDelaySeconds:me})});if(!K.ok)throw new Error(await Xe(K,t("settings.saveFailed")))},onSuccess:async()=>{var v,K;await Promise.all([o.invalidateQueries({queryKey:["site-settings"]}),s()]),b.success(t("settings.settingsSaved")),((K=(v=ue.data)==null?void 0:v.settings)==null?void 0:K.language)!==m&&(Ht.changeLanguage(m),Pe(!0))},onError:v=>{b.error(v instanceof Error?v.message:t("common.error"))}}),_e=[{value:"general",label:t("settings.tabGroup.general"),icon:Ot,testId:"settings-tab-general"},{value:"terminal",label:t("settings.tabGroup.terminal"),icon:Ze,testId:"settings-tab-terminal"},{value:"devicesAndFiles",label:t("settings.tabGroup.devicesAndFiles"),icon:rs,testId:"settings-tab-devicesAndFiles"},{value:"notifications",label:t("settings.tabGroup.notifications"),icon:_t,testId:"settings-tab-notifications"},{value:"ai",label:t("settings.tabGroup.ai"),icon:zt,testId:"settings-tab-ai"}],Te=e.jsx("div",{className:"flex justify-end pt-2",children:e.jsxs(k,{variant:"secondary","data-testid":"settings-save",onClick:()=>Ae.mutate(),disabled:Ae.isPending,className:"w-full sm:w-auto",children:[e.jsx(Z,{className:"h-4 w-4"}),t("common.save")]})});return e.jsxs("div",{className:"mx-auto flex w-full max-w-6xl flex-col gap-4 p-3 pb-[calc(2rem+env(safe-area-inset-bottom))] sm:gap-6 sm:p-5","data-testid":"settings-page",children:[e.jsx(qt,{value:l,onValueChange:v=>c(v),children:e.jsx(Kt,{className:"w-full gap-1 !justify-start overflow-x-auto rounded-xl border border-border/60 p-1.5 group-data-horizontal/tabs:h-12 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:_e.map(v=>{const K=v.icon;return e.jsxs(Qt,{value:v.value,"data-testid":v.testId,className:ft(Ut,"min-w-max gap-2 px-3.5"),children:[e.jsx(K,{}),v.label]},v.value)})})}),l==="general"&&e.jsxs(e.Fragment,{children:[e.jsxs(H,{className:"border-0 ring-0",children:[e.jsx(G,{children:e.jsx(J,{children:t("settings.siteSettings")})}),e.jsxs(V,{className:"space-y-6",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:"site-name-input",children:t("settings.siteName")}),e.jsx(B,{id:"site-name-input",value:a,onChange:v=>n(v.target.value),placeholder:t("settings.siteNamePlaceholder"),className:"min-h-10"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:"site-url-input",children:t("settings.siteUrl")}),e.jsx(B,{id:"site-url-input",value:i,onChange:v=>r(v.target.value),placeholder:t("settings.siteUrlPlaceholder"),className:"min-h-10"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:"language-select",children:t("settings.language")}),e.jsxs(Ce,{value:m,onValueChange:v=>{v&&d(v)},children:[e.jsx(Ee,{id:"language-select","data-testid":"settings-language-select",className:"w-full min-h-10",children:e.jsx(ke,{placeholder:t("settings.language"),children:((at=it.locales.find(v=>v.code===m))==null?void 0:at.nativeName)??m})}),e.jsx(Se,{className:"max-h-[var(--tmex-viewport-height)]",children:it.locales.map(v=>e.jsx(le,{value:v.code,children:v.nativeName},v.code))})]}),Me&&e.jsx("p",{className:"mt-1 text-xs text-primary","data-testid":"settings-refresh-notice",children:t("settings.refreshToApply")})]}),e.jsx("div",{className:"space-y-3",children:e.jsxs("div",{className:"flex min-h-10 items-center justify-between gap-4 rounded-lg border border-border bg-card px-4 py-2.5",children:[e.jsx("div",{className:"min-w-0 pr-2",children:e.jsx("div",{className:"text-sm font-medium",children:t("settings.theme")})}),e.jsx(D,{checked:f,onCheckedChange:v=>Fe(!!v),"data-testid":"settings-theme-toggle"})]})}),Te]})]}),e.jsx(As,{})]}),l==="devicesAndFiles"&&e.jsxs(e.Fragment,{children:[e.jsx(ds,{}),e.jsx(ms,{})]}),l==="notifications"&&e.jsxs(e.Fragment,{children:[e.jsx(H,{className:"border-0 ring-0",children:e.jsxs(V,{className:"space-y-6 pt-6",children:[e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex min-h-10 items-center justify-between gap-4 rounded-lg border border-border bg-card px-4 py-2.5",children:[e.jsx("div",{className:"min-w-0 pr-2",children:e.jsx("div",{className:"text-sm font-medium",children:t("settings.enableBrowserBellToast")})}),e.jsx(D,{checked:C,onCheckedChange:v=>x(!!v),"data-testid":"settings-enable-browser-bell-toast"})]}),e.jsxs("div",{className:"flex min-h-10 items-center justify-between gap-4 rounded-lg border border-border bg-card px-4 py-2.5",children:[e.jsx("div",{className:"min-w-0 pr-2",children:e.jsx("div",{className:"text-sm font-medium",children:t("settings.enableTelegramBellPush")})}),e.jsx(D,{checked:z,onCheckedChange:v=>P(!!v),"data-testid":"settings-enable-telegram-bell-push"})]}),e.jsxs("div",{className:"flex min-h-10 items-center justify-between gap-4 rounded-lg border border-border bg-card px-4 py-2.5",children:[e.jsx("div",{className:"min-w-0 pr-2",children:e.jsx("div",{className:"text-sm font-medium",children:t("settings.enableBrowserNotificationToast")})}),e.jsx(D,{checked:N,onCheckedChange:v=>E(!!v),"data-testid":"settings-enable-browser-notification-toast"})]}),e.jsxs("div",{className:"flex min-h-10 items-center justify-between gap-4 rounded-lg border border-border bg-card px-4 py-2.5",children:[e.jsx("div",{className:"min-w-0 pr-2",children:e.jsx("div",{className:"text-sm font-medium",children:t("settings.enableTelegramNotificationPush")})}),e.jsx(D,{checked:A,onCheckedChange:v=>T(!!v),"data-testid":"settings-enable-telegram-notification-push"})]}),e.jsxs("div",{className:"flex min-h-10 items-center justify-between gap-4 rounded-lg border border-border bg-card px-4 py-2.5",children:[e.jsx("div",{className:"min-w-0 pr-2",children:e.jsx("div",{className:"text-sm font-medium",children:t("settings.enableWeixinBellPush")})}),e.jsx(D,{checked:I,onCheckedChange:v=>L(!!v),"data-testid":"settings-enable-weixin-bell-push"})]}),e.jsxs("div",{className:"flex min-h-10 items-center justify-between gap-4 rounded-lg border border-border bg-card px-4 py-2.5",children:[e.jsx("div",{className:"min-w-0 pr-2",children:e.jsx("div",{className:"text-sm font-medium",children:t("settings.enableWeixinNotificationPush")})}),e.jsx(D,{checked:Y,onCheckedChange:v=>_(!!v),"data-testid":"settings-enable-weixin-notification-push"})]})]}),e.jsxs("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-3",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:"bell-throttle-input",children:t("settings.bellThrottle")}),e.jsx(B,{id:"bell-throttle-input",type:"number",value:u,min:0,max:300,onChange:v=>y(Number(v.target.value)),className:"min-h-10"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:"notification-throttle-input",children:t("settings.notificationThrottle")}),e.jsx(B,{id:"notification-throttle-input",type:"number",value:j,min:0,max:300,onChange:v=>g(Number(v.target.value)),className:"min-h-10"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:"ssh-reconnect-retries-input",children:t("settings.sshReconnectMaxRetries")}),e.jsx(B,{id:"ssh-reconnect-retries-input",type:"number",value:q,min:0,max:20,onChange:v=>W(Number(v.target.value)),className:"min-h-10"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"block text-sm font-medium",htmlFor:"ssh-reconnect-delay-input",children:t("settings.sshReconnectDelay")}),e.jsx(B,{id:"ssh-reconnect-delay-input",type:"number",value:me,min:1,max:300,onChange:v=>ee(Number(v.target.value)),className:"min-h-10"})]})]}),Te]})}),e.jsx(Ps,{}),e.jsx(Hs,{}),e.jsx(Ts,{})]}),l==="ai"&&e.jsxs(e.Fragment,{children:[e.jsx(vs,{}),e.jsx(Cs,{})]}),l==="terminal"&&e.jsx(Fs,{})]})}function ia(){const{t}=F();return e.jsx(e.Fragment,{children:t("sidebar.settings")})}function ra(){const{t}=F(),[o,s]=w.useState(!1),l=M({mutationFn:async()=>{const c=await fetch("/api/settings/restart",{method:"POST"});if(!c.ok)throw new Error(await Xe(c,t("settings.restartFailed")))},onSuccess:()=>{b.success(t("settings.restartScheduled"))},onError:c=>{b.error(c instanceof Error?c.message:t("common.error"))}});return e.jsxs(e.Fragment,{children:[e.jsx(k,{variant:"ghost",size:"icon-sm",onClick:()=>s(!0),disabled:l.isPending,"aria-label":t("settings.restartGateway"),title:t("settings.restartGateway"),className:"text-destructive hover:text-destructive hover:bg-destructive/10",children:e.jsx(Zt,{className:"h-4 w-4"})}),e.jsx(xe,{open:o,onOpenChange:s,children:e.jsxs(fe,{children:[e.jsxs(pe,{children:[e.jsx(we,{children:t("settings.restartGateway")}),e.jsx(ye,{children:t("settings.restartConfirm")})]}),e.jsxs(je,{children:[e.jsx(ve,{onClick:()=>s(!1),children:t("common.cancel")}),e.jsx(be,{variant:"destructive",onClick:()=>{l.mutate(),s(!1)},children:t("common.confirm")})]})]})})]})}export{ra as PageActions,ia as PageTitle,na as default};
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import{Y as _,r as N,j as e,X as C,u as k,an as Y,ao as ee,ap as te,aq as se,ar as ne,am as F,as as B,at as H,B as y,G as be,M as ve,x as Ne,c as K,N as ye,O as ke,R as Ie,U as X,au as Ce,av as Se,V as re,v as Me,aw as _e,af as ze,ax as Te,ay as g,d as Ee,az as Be,aA as qe,P as $e,aB as Pe,a2 as Ae,aC as Re}from"./index-B3ddLSja.js";import{M as Fe,r as He}from"./index-iee3U_rD.js";import{K as Ke,S as Z}from"./send-DaOB9hLq.js";import{Z as ae}from"./zap-BFIAXPXd.js";/**
|
|
2
|
-
* @license lucide-react v0.564.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 Le=[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]],Oe=_("arrow-down",Le);/**
|
|
7
|
-
* @license lucide-react v0.564.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const We=[["path",{d:"M12 18V5",key:"adv99a"}],["path",{d:"M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4",key:"1e3is1"}],["path",{d:"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5",key:"1gqd8o"}],["path",{d:"M17.997 5.125a4 4 0 0 1 2.526 5.77",key:"iwvgf7"}],["path",{d:"M18 18a4 4 0 0 0 2-7.464",key:"efp6ie"}],["path",{d:"M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517",key:"1gq6am"}],["path",{d:"M6 18a4 4 0 0 1-2-7.464",key:"k1g0md"}],["path",{d:"M6.003 5.125a4 4 0 0 0-2.526 5.77",key:"q97ue3"}]],Ge=_("brain",We);/**
|
|
12
|
-
* @license lucide-react v0.564.0 - ISC
|
|
13
|
-
*
|
|
14
|
-
* This source code is licensed under the ISC license.
|
|
15
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
-
*/const Ue=[["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"M3 10a2 2 0 0 0 2 2h3",key:"1npucw"}],["path",{d:"M3 5v12a2 2 0 0 0 2 2h3",key:"x1gjn2"}]],Qe=_("list-tree",Ue);/**
|
|
17
|
-
* @license lucide-react v0.564.0 - ISC
|
|
18
|
-
*
|
|
19
|
-
* This source code is licensed under the ISC license.
|
|
20
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
21
|
-
*/const Ve=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],Je=_("search",Ve);/**
|
|
22
|
-
* @license lucide-react v0.564.0 - ISC
|
|
23
|
-
*
|
|
24
|
-
* This source code is licensed under the ISC license.
|
|
25
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
26
|
-
*/const Xe=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]],Ze=_("square",Xe);/**
|
|
27
|
-
* @license lucide-react v0.564.0 - ISC
|
|
28
|
-
*
|
|
29
|
-
* This source code is licensed under the ISC license.
|
|
30
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
31
|
-
*/const De=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],Ye=_("terminal",De);/**
|
|
32
|
-
* @license lucide-react v0.564.0 - ISC
|
|
33
|
-
*
|
|
34
|
-
* This source code is licensed under the ISC license.
|
|
35
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
36
|
-
*/const et=[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]],tt=_("wrench",et);function st(t){const s=t.split(`
|
|
37
|
-
`),a=[];let d=[],o=!1;const i=()=>{const l=d.join(`
|
|
38
|
-
`);l.trim()&&a.push(l),d=[]};for(const l of s){if(/^\s*(```|~~~)/.test(l)){o=!o,d.push(l);continue}if(!o&&l.trim()===""){i();continue}d.push(l)}return i(),a}const nt={a:({node:t,...s})=>e.jsx("a",{...s,target:"_blank",rel:"noopener noreferrer",className:"text-primary underline underline-offset-2 break-all"}),pre:({node:t,...s})=>e.jsx("pre",{...s,className:"bg-muted overflow-x-auto rounded-md p-2 font-mono text-xs leading-relaxed"}),code:({node:t,className:s,...a})=>e.jsx("code",{...a,className:C("bg-muted rounded px-1 font-mono text-xs",s)}),ul:({node:t,...s})=>e.jsx("ul",{...s,className:"list-disc pl-5"}),ol:({node:t,...s})=>e.jsx("ol",{...s,className:"list-decimal pl-5"}),blockquote:({node:t,...s})=>e.jsx("blockquote",{...s,className:"border-border text-muted-foreground border-l-2 pl-2"}),h1:({node:t,...s})=>e.jsx("h1",{...s,className:"text-base font-semibold"}),h2:({node:t,...s})=>e.jsx("h2",{...s,className:"text-sm font-semibold"}),h3:({node:t,...s})=>e.jsx("h3",{...s,className:"text-sm font-semibold"}),table:({node:t,...s})=>e.jsx("div",{className:"overflow-x-auto",children:e.jsx("table",{...s,className:"border-border w-full border-collapse border text-xs"})}),th:({node:t,...s})=>e.jsx("th",{...s,className:"border-border bg-muted border px-2 py-1 text-left"}),td:({node:t,...s})=>e.jsx("td",{...s,className:"border-border border px-2 py-1"})},rt=N.memo(function({content:s}){return e.jsx(Fe,{remarkPlugins:[He],components:nt,children:s})});function at({text:t,streaming:s=!1,className:a}){const d=N.useMemo(()=>st(t),[t]);return e.jsxs("div",{className:C("flex min-w-0 flex-col gap-2 text-sm leading-relaxed",a),children:[d.map((o,i)=>e.jsx(rt,{content:o},i)),s&&e.jsx("span",{"data-testid":"agent-streaming-cursor",className:"bg-foreground inline-block h-4 w-2 animate-pulse self-start"})]})}function ot({text:t,streaming:s=!1,className:a}){return e.jsx("div",{"data-testid":"agent-assistant-message",className:C("min-w-0 max-w-full self-start",a),children:e.jsx(at,{text:t,streaming:s})})}function it({text:t,streaming:s=!1,className:a}){const{t:d}=k();return e.jsxs(Y,{"data-testid":"agent-reasoning-block",className:C("min-w-0 max-w-full self-start",a),children:[e.jsxs(ee,{className:"text-muted-foreground hover:text-foreground group flex items-center gap-1 text-xs",children:[e.jsx(te,{className:"size-3 transition-transform group-data-[panel-open]:rotate-90"}),e.jsx(Ge,{className:"size-3"}),e.jsx("span",{children:d("agent.reasoning.title")}),s&&e.jsx(se,{className:"size-3 animate-spin"})]}),e.jsx(ne,{children:e.jsx("div",{className:"text-muted-foreground border-border mt-1 border-l-2 pl-2 text-xs whitespace-pre-wrap break-words",children:t})})]})}function M(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function L(t){if(typeof t=="string")return t;try{return JSON.stringify(t,null,2)}catch{return String(t)}}function dt(t){return M(t.output)&&typeof t.output.error=="string"?t.output.error:t.isError?L(t.output):null}function lt(t){switch(t){case"send_input":return e.jsx(Ke,{className:"size-3.5"});case"read_screen":return e.jsx(ve,{className:"size-3.5"});case"web_search":return e.jsx(Je,{className:"size-3.5"});case"fetch_url":return e.jsx(be,{className:"size-3.5"});default:return e.jsx(tt,{className:"size-3.5"})}}function E({label:t,text:s}){return e.jsxs(Y,{children:[e.jsxs(ee,{className:"text-muted-foreground hover:text-foreground group flex items-center gap-1 text-xs",children:[e.jsx(te,{className:"size-3 transition-transform group-data-[panel-open]:rotate-90"}),e.jsx("span",{children:t})]}),e.jsx(ne,{children:e.jsx("pre",{className:"bg-muted mt-1 max-h-64 overflow-auto rounded-md p-2 font-mono text-xs whitespace-pre-wrap break-all",children:s})})]})}function ct(t){if(typeof t!="string")return null;try{const s=JSON.parse(t);return Array.isArray(s)?s.filter(M).map(a=>({title:typeof a.title=="string"?a.title:"",url:typeof a.url=="string"?a.url:"",snippet:typeof a.snippet=="string"?a.snippet:""})).filter(a=>a.url):null}catch{return null}}function ut({call:t}){const{t:s}=k(),a=M(t.input)?t.input:{},d=typeof a.text=="string"?a.text:"",o=Array.isArray(a.keys)?a.keys.filter(u=>typeof u=="string"):[],i=M(t.output)?t.output:{},l=typeof i.screenTail=="string"?i.screenTail:"";return e.jsxs("div",{className:"flex flex-col gap-1.5",children:[d&&e.jsx("pre",{className:"bg-muted max-h-40 overflow-auto rounded-md p-2 font-mono text-xs whitespace-pre-wrap break-all",children:d}),o.length>0&&e.jsx("div",{className:"flex flex-wrap items-center gap-1",children:o.map((u,c)=>e.jsx(Ne,{variant:"outline",className:"font-mono",children:u},`${c}-${u}`))}),l&&e.jsx(E,{label:s("agent.tool.result"),text:l})]})}function mt({call:t}){const{t:s}=k(),a=M(t.output)?t.output:{},d=typeof a.screen=="string"?a.screen:"";return d?e.jsx(E,{label:s("agent.tool.screen"),text:d}):null}function xt({call:t}){const{t:s}=k(),a=M(t.input)?t.input:{},d=typeof a.query=="string"?a.query:"",o=t.resolved&&!t.isError&&!t.denied?ct(t.output):null;return e.jsxs("div",{className:"flex flex-col gap-1.5",children:[d&&e.jsxs("p",{className:"text-muted-foreground text-xs break-words",children:["“",d,"”"]}),o&&o.length>0&&e.jsx("ul",{className:"flex flex-col gap-1",children:o.map(i=>e.jsxs("li",{className:"min-w-0 text-xs",children:[e.jsx("a",{href:i.url,target:"_blank",rel:"noopener noreferrer",className:"text-primary block truncate underline underline-offset-2",title:i.title||i.url,children:i.title||i.url}),i.snippet&&e.jsx("p",{className:"text-muted-foreground line-clamp-2 break-words",children:i.snippet})]},i.url))}),t.resolved&&!t.isError&&!t.denied&&!o&&typeof t.output=="string"&&e.jsx(E,{label:s("agent.tool.result"),text:t.output})]})}function pt({call:t}){const{t:s}=k(),a=M(t.input)?t.input:{},d=typeof a.url=="string"?a.url:"",o=typeof t.output=="string"?t.output:"";return e.jsxs("div",{className:"flex flex-col gap-1.5",children:[d&&e.jsx("a",{href:d,target:"_blank",rel:"noopener noreferrer",className:"text-primary block truncate text-xs underline underline-offset-2",title:d,children:d}),t.resolved&&!t.isError&&!t.denied&&o&&e.jsx(E,{label:s("agent.tool.result"),text:o})]})}const ft=/^[A-Za-z0-9+/]{256,}={0,2}$/,gt=/^https?:\/\/\S+\.(png|jpe?g|webp|gif)(\?\S*)?$/i;function ht(t){return typeof t!="string"||t.length===0?null:t.startsWith("data:image/")||gt.test(t)?t:ft.test(t.replace(/\s/g,""))?`data:image/png;base64,${t.replace(/\s/g,"")}`:null}function jt(t){if(!t.resolved||t.isError||t.denied)return[];const s=[],a=(d,o)=>{if(s.length>=8||o>3)return;const i=ht(d);if(i){s.push(i);return}if(Array.isArray(d)){for(const l of d)a(l,o+1);return}if(M(d))for(const l of["result","image","images","url","b64_json","data"])l in d&&a(d[l],o+1)};return a(t.output,0),[...new Set(s)]}function wt({images:t}){return t.length===0?null:e.jsx("div",{className:"flex flex-wrap gap-2",children:t.map((s,a)=>e.jsx("a",{href:s,target:"_blank",rel:"noopener noreferrer",className:"block",children:e.jsx("img",{src:s,alt:"generated",className:"max-h-64 max-w-full rounded-md border border-border object-contain",loading:"lazy"})},a))})}function bt({call:t,hideOutput:s}){const{t:a}=k();return e.jsxs("div",{className:"flex flex-col gap-1.5",children:[t.input!==void 0&&e.jsx(E,{label:a("agent.tool.input"),text:L(t.input)}),!s&&t.resolved&&!t.isError&&!t.denied&&t.output!==void 0&&e.jsx(E,{label:a("agent.tool.result"),text:L(t.output)})]})}function vt({call:t,confirmationId:s,onDecide:a,className:d}){const{t:o}=k(),i=!!s&&!t.resolved,l=t.resolved&&t.denied,u=t.resolved&&!l?dt(t):null,c=!t.resolved&&!i,j=l&&typeof t.output=="string"?t.output:"",h=`agent.tool.${t.toolName}`,p=["send_input","read_screen","web_search","fetch_url"].includes(t.toolName)?o(h):t.toolName,b=jt(t);return e.jsxs("div",{"data-testid":`agent-tool-card-${t.toolCallId}`,"data-tool-name":t.toolName,"data-tool-denied":l||void 0,className:C("border-border bg-card flex max-w-full min-w-0 flex-col gap-1.5 self-start rounded-lg border p-2",u!==null&&"border-destructive/50",l&&"opacity-80",d),children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-xs font-medium",children:[lt(t.toolName),e.jsx("span",{className:"min-w-0 truncate",children:p}),c&&e.jsx(se,{className:"text-muted-foreground size-3 animate-spin"}),t.resolved&&!l&&u===null&&e.jsx(F,{className:"size-3 text-emerald-500"}),u!==null&&e.jsx(B,{className:"text-destructive size-3"}),l&&e.jsxs("span",{className:"text-destructive flex items-center gap-0.5",children:[e.jsx(H,{className:"size-3"}),o("agent.tool.denied")]})]}),t.toolName==="send_input"&&e.jsx(ut,{call:t}),t.toolName==="read_screen"&&e.jsx(mt,{call:t}),t.toolName==="web_search"&&e.jsx(xt,{call:t}),t.toolName==="fetch_url"&&e.jsx(pt,{call:t}),!["send_input","read_screen","web_search","fetch_url"].includes(t.toolName)&&e.jsx(bt,{call:t,hideOutput:b.length>0}),e.jsx(wt,{images:b}),u!==null&&e.jsx("p",{className:"text-destructive text-xs break-words whitespace-pre-wrap",children:u}),j&&e.jsx("p",{className:"text-muted-foreground text-xs break-words whitespace-pre-wrap",children:j}),i&&s&&e.jsxs("div",{"data-testid":`agent-tool-approval-${t.toolCallId}`,className:"flex items-center gap-2 pt-1",children:[e.jsx("span",{className:"text-muted-foreground min-w-0 flex-1 text-xs",children:o("agent.confirm.title")}),e.jsxs(y,{"data-testid":"agent-confirm-approve",size:"xs",variant:"secondary",onClick:()=>a==null?void 0:a(s,!0),children:[e.jsx(F,{}),o("agent.confirm.approve")]}),e.jsxs(y,{"data-testid":"agent-confirm-deny",size:"xs",variant:"destructive",onClick:()=>a==null?void 0:a(s,!1),children:[e.jsx(H,{}),o("agent.confirm.deny")]})]})]})}function Nt({text:t,className:s}){return e.jsx("div",{"data-testid":"agent-user-message",className:C("bg-primary text-primary-foreground max-w-[85%] self-end rounded-2xl px-3 py-2 text-sm whitespace-pre-wrap break-words",s),children:t})}const yt=48;function kt(){return e.jsxs("div",{"data-testid":"agent-running-indicator",className:"flex items-center gap-1 self-start px-1",children:[e.jsx("span",{className:"bg-muted-foreground size-1.5 animate-pulse rounded-full"}),e.jsx("span",{className:"bg-muted-foreground size-1.5 animate-pulse rounded-full [animation-delay:150ms]"}),e.jsx("span",{className:"bg-muted-foreground size-1.5 animate-pulse rounded-full [animation-delay:300ms]"})]})}function It({blocks:t,running:s,emptyText:a,confirmationByToolCallId:d,onDecide:o,className:i}){const{t:l}=k(),u=N.useRef(null),c=N.useRef(!0),[j,h]=N.useState(!1),p=()=>{const m=u.current;m&&(m.scrollTop=m.scrollHeight,c.current=!0,h(!1))};N.useEffect(()=>{if(c.current){const m=u.current;m&&(m.scrollTop=m.scrollHeight)}else h(!0)},[t,s]);const b=()=>{const m=u.current;if(!m)return;const w=m.scrollHeight-m.scrollTop-m.clientHeight<yt;c.current=w,h(!w)};return t.length===0&&!s?e.jsx("div",{"data-testid":"agent-chat-thread",className:C("flex min-h-0 flex-1 items-center justify-center p-4",i),children:e.jsx("p",{className:"text-muted-foreground text-sm",children:a})}):e.jsxs("div",{className:C("relative min-h-0 flex-1",i),children:[e.jsx("div",{ref:u,"data-testid":"agent-chat-thread",className:"h-full overflow-y-auto p-3",onScroll:b,children:e.jsxs("div",{className:"flex flex-col gap-3",children:[t.map(m=>{switch(m.kind){case"user":return e.jsx(Nt,{text:m.text},m.key);case"assistant-text":return e.jsx(ot,{text:m.text,streaming:m.streaming},m.key);case"reasoning":return e.jsx(it,{text:m.text,streaming:m.streaming},m.key);case"tool-call":return e.jsx(vt,{call:m.call,confirmationId:d.get(m.call.toolCallId),onDecide:o},m.key);default:return null}}),s&&e.jsx(kt,{})]})}),j&&e.jsx(y,{"data-testid":"agent-scroll-to-bottom",size:"icon-sm",variant:"secondary",className:"absolute right-3 bottom-3 z-10 rounded-full shadow-md",onClick:p,"aria-label":l("agent.panel.scrollToBottom"),children:e.jsx(Oe,{})})]})}const O="::";function D(t,s){return`${t??""}${O}${s}`}function Ct(t){const s=t.indexOf(O);return s<0?{providerId:null,modelId:t}:{providerId:t.slice(0,s)||null,modelId:t.slice(s+O.length)}}function St({providerId:t,modelId:s,onChange:a,disabled:d,className:o}){var w;const{t:i}=k(),{data:l}=K({queryKey:["llm-providers"],queryFn:async()=>{const x=await fetch("/api/llm/providers");if(!x.ok)throw new Error("Failed to load providers");return await x.json()},throwOnError:!1}),{data:u}=K({queryKey:["llm-settings"],queryFn:async()=>{const x=await fetch("/api/llm/settings");if(!x.ok)throw new Error("Failed to load settings");return await x.json()},throwOnError:!1}),c=((l==null?void 0:l.providers)??[]).filter(x=>x.enabled&&x.models.length>0),j=t??(u==null?void 0:u.settings.defaultProviderId)??null,h=s??(u==null?void 0:u.settings.defaultModelId)??null,p=h?D(j,h):"",b=c.some(x=>x.id===j&&x.models.includes(h??"")),m=((w=c.find(x=>x.id===j))==null?void 0:w.name)??null,z=h?m?`${m}/${h}`:h:i("agent.model.placeholder");return e.jsxs(ye,{value:p,onValueChange:x=>{if(typeof x!="string"||!x)return;const n=Ct(x);a(n.providerId,n.modelId)},disabled:d||c.length===0,children:[e.jsx(ke,{size:"sm",className:C("h-7 w-full min-w-0 border-transparent bg-transparent text-muted-foreground text-xs hover:border-border/40 dark:bg-transparent dark:hover:bg-transparent",o),"data-testid":"agent-model-picker","aria-label":i("agent.model.select"),children:e.jsx("span",{className:"min-w-0 truncate",children:z})}),e.jsxs(Ie,{children:[!b&&h&&e.jsx(X,{value:p,className:"text-muted-foreground",children:h}),c.map(x=>e.jsxs(Ce,{children:[e.jsx(Se,{children:x.name}),x.models.map(n=>e.jsx(X,{value:D(x.id,n),children:n},`${x.id}:${n}`))]},x.id))]})]})}function Mt({queued:t,onEdit:s,onWithdraw:a,onSteer:d}){const{t:o}=k(),[i,l]=N.useState(null),[u,c]=N.useState("");if(t.length===0)return null;const j=p=>{l(p.id),c(p.text)},h=p=>{const b=u.trim();b&&s(p,b),l(null)};return e.jsxs("div",{"data-testid":"agent-queue",className:"bg-muted/50 mx-3 mb-2 flex shrink-0 flex-col gap-1.5 rounded-xl px-2.5 py-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-muted-foreground text-xs font-medium",children:o("agent.queue.title",{count:t.length})}),e.jsxs(y,{"data-testid":"agent-queue-steer",size:"xs",variant:"outline",onClick:d,title:o("agent.queue.steerHint"),children:[e.jsx(ae,{}),o("agent.queue.steer")]})]}),e.jsx("ul",{className:"flex flex-col gap-1",children:t.map(p=>e.jsx("li",{"data-testid":`agent-queue-item-${p.id}`,className:"bg-background/60 flex items-start gap-1.5 rounded-lg px-2 py-1",children:i===p.id?e.jsxs(e.Fragment,{children:[e.jsx(re,{value:u,onChange:b=>c(b.target.value),onKeyDown:b=>{b.key==="Enter"&&!b.shiftKey&&(b.preventDefault(),h(p.id)),b.key==="Escape"&&l(null)},rows:1,className:"max-h-32 min-h-7 flex-1 resize-none text-xs",autoFocus:!0}),e.jsx(y,{size:"icon-sm",variant:"ghost",onClick:()=>h(p.id),"aria-label":o("common.save"),children:e.jsx(F,{})})]}):e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"min-w-0 flex-1 truncate text-xs",children:p.text}),e.jsx(y,{size:"icon-sm",variant:"ghost",onClick:()=>j(p),"aria-label":o("common.edit"),children:e.jsx(Me,{})}),e.jsx(y,{"data-testid":`agent-queue-withdraw-${p.id}`,size:"icon-sm",variant:"ghost",onClick:()=>a(p.id),"aria-label":o("agent.queue.withdraw"),children:e.jsx(H,{})})]})},p.id))})]})}function _t({onSend:t,onSteer:s,onStop:a,running:d,steerable:o,disabled:i,modelPicker:l,writeModeControl:u}){const{t:c}=k(),[j,h]=N.useState(""),p=g(w=>{var x;return((x=w.draft)==null?void 0:x.prompt)??null}),b=N.useRef(null);N.useEffect(()=>{p&&p!==b.current&&(b.current=p,h(p))},[p]);const m=()=>{const w=j.trim();!w||i||(t==null||t(w),h(""))},z=()=>{const w=j.trim();!w||i||(s==null||s(w),h(""))};return e.jsxs("div",{"data-testid":"agent-chat-input",className:"bg-chat-surface flex shrink-0 flex-col gap-2 mx-3 mb-2.5 rounded-xl mt-1.5 focus-within:ring-1 focus-within:ring-ring/30",children:[e.jsx(re,{"data-testid":"agent-chat-input-textarea",value:j,onChange:w=>h(w.target.value),onKeyDown:w=>{w.key==="Enter"&&!w.shiftKey&&!w.nativeEvent.isComposing&&(w.preventDefault(),m())},placeholder:c("agent.panel.inputPlaceholder"),disabled:i,className:"max-h-40 min-h-[4.5rem] w-full resize-none border-transparent bg-transparent p-3 text-[13px] shadow-none focus-visible:border-transparent focus-visible:ring-0 disabled:bg-transparent dark:bg-transparent dark:disabled:bg-transparent",rows:3}),e.jsxs("div",{className:"flex min-w-0 flex-wrap items-center gap-2 px-2.5 pb-2.5",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-2",children:[u,l&&e.jsx("div",{className:"min-w-0 flex-1",children:l})]}),d?e.jsxs("div",{className:"ml-auto flex shrink-0 items-center gap-1.5",children:[o&&e.jsx(y,{"data-testid":"agent-chat-steer",size:"icon",variant:"outline",disabled:i||j.trim().length===0,onClick:z,"aria-label":c("agent.queue.steer"),title:c("agent.queue.steerHint"),children:e.jsx(ae,{})}),e.jsx(y,{"data-testid":"agent-chat-send",size:"icon",variant:"secondary",disabled:i||j.trim().length===0,onClick:m,"aria-label":c("agent.panel.send"),children:e.jsx(Z,{})}),e.jsx(y,{"data-testid":"agent-chat-stop",size:"icon",variant:"destructive",onClick:()=>a==null?void 0:a(),"aria-label":c("agent.panel.stop"),children:e.jsx(Ze,{})})]}):e.jsx(y,{"data-testid":"agent-chat-send",size:"icon",className:"ml-auto shrink-0",disabled:i||j.trim().length===0,onClick:m,"aria-label":c("agent.panel.send"),children:e.jsx(Z,{})})]})]})}function zt(t,s,a){var i;if(!t.deviceId||!t.paneId)return null;const d=((i=a==null?void 0:a.find(l=>l.id===t.deviceId))==null?void 0:i.name)??null,o=s[t.deviceId];if(!(o!=null&&o.session))return{label:`${t.paneId}@${d??"?"}`,state:"unknown",windowId:null};for(const l of o.session.windows){const u=l.panes.find(c=>c.id===t.paneId);if(u)return{label:Re({paneCustomName:u.customName,paneTitle:u.title,windowName:l.name,windowCustomName:l.customName,deviceName:d}),state:"valid",windowId:l.id}}return{label:`${t.paneId}@${d??"?"}`,state:"invalid",windowId:null}}function $t(){var V;const{t}=k(),s=_e(),a=ze(r=>r.setSidebarTab),d=Te("/devices/:deviceId/windows/:windowId/panes/:paneId"),o=(d==null?void 0:d.params.deviceId)??null,i=(d==null?void 0:d.params.paneId)??null,l=g(r=>r.sessions),u=g(r=>r.activeSessionId),c=g(r=>r.draft),j=g(r=>r.activeSessionId?r.messages[r.activeSessionId]:void 0),h=g(r=>r.activeSessionId?r.inProgress[r.activeSessionId]:void 0),p=g(r=>r.activeSessionId?r.pendingConfirmations[r.activeSessionId]:void 0),b=g(r=>r.activeSessionId?r.sending[r.activeSessionId]:void 0),m=g(r=>r.activeSessionId?r.queued[r.activeSessionId]:void 0),z=g(r=>r.defaultWriteMode),w=Ee(r=>r.snapshots),{data:x}=K({queryKey:["devices"],queryFn:async()=>{const r=await fetch("/api/devices");if(!r.ok)throw new Error("Failed to load devices");return r.json()},throwOnError:!1});N.useEffect(()=>{const r=g.getState();r.ensureInitialized(),r.loadSessions()},[]);const n=u?l[u]:void 0,q=N.useMemo(()=>{var f,S;if(!o||!i)return null;const r=(S=(f=w[o])==null?void 0:f.session)==null?void 0:S.windows;for(const I of r??[]){const J=I.panes.find(we=>we.id===i);if(J)return J.title??null}return null},[o,i,w]);N.useEffect(()=>{!n&&!c&&o&&i&&g.getState().startDraft(o,i,q)},[n,c,o,i,q]);const oe=N.useMemo(()=>{const r=new Map;for(const f of p??[])r.set(f.toolCallId,f.id);return r},[p]),ie=N.useMemo(()=>{const r=Be(j,h),f=new Set;for(const I of r)I.kind==="tool-call"&&f.add(I.call.toolCallId);const S=[];for(const I of p??[])f.has(I.toolCallId)||S.push({kind:"tool-call",key:`confirmation-${I.id}`,call:{toolCallId:I.toolCallId,toolName:I.toolName,input:I.input,isError:!1,denied:!1,resolved:!1}});return S.length>0?[...r,...S]:r},[j,h,p]),W=n??(c?{deviceId:c.deviceId,paneId:c.paneId}:null),v=W?zt(W,w,x==null?void 0:x.devices):null,de=!!(n&&i&&o&&(n.paneId!==i||n.deviceId!==o)),$=(n==null?void 0:n.status)==="running",G=qe(j),T=!!(n&&(!n.deviceId||!((V=x==null?void 0:x.devices)!=null&&V.some(r=>r.id===n.deviceId))||(v==null?void 0:v.state)==="invalid")),P=m??[],le=(r,f)=>{u&&g.getState().decideConfirmation(u,r,f)},U=()=>{if(n!=null&&n.deviceId){if((v==null?void 0:v.state)==="valid"&&v.windowId&&n.paneId){s(`/devices/${n.deviceId}/windows/${v.windowId}/panes/${encodeURIComponent(n.paneId)}`);return}(v==null?void 0:v.state)==="unknown"&&s(`/devices/${n.deviceId}`)}},ce=()=>{!o||!i||g.getState().startDraft(o,i,q)},ue=(r,f)=>{n?g.getState().setSessionModel(n.id,r,f):c&&g.getState().updateDraft({providerId:r,modelId:f})},me=r=>{const f=g.getState();if(n){n.status==="running"?f.enqueueMessage(n.id,r):f.sendMessage(n.id,r);return}c&&(async()=>{const S=await f.materializeDraft();S&&await f.sendMessage(S.id,r)})()},xe=r=>{n&&g.getState().enqueueMessage(n.id,r,!0)},pe=()=>{if(!n)return;const r=P[0];if(!r)return;const f=g.getState();(async()=>(await f.withdrawQueuedMessage(n.id,r.id),await f.enqueueMessage(n.id,r.text,!0)))()},fe=n?n.providerId:(c==null?void 0:c.providerId)??null,ge=n?n.modelId:(c==null?void 0:c.modelId)??null,A=!!(n||c),R=!!(c&&!n),Q=n?n.writeMode:z,he=!!(n&&((j==null?void 0:j.length)??0)>0),je=T||!A||(n==null?void 0:n.status)==="waiting_confirmation"||!!b;return e.jsxs("div",{"data-testid":"agent-tab",className:"flex h-full min-h-0 flex-col",children:[e.jsxs("div",{className:"flex shrink-0 items-center gap-2 px-3 py-2",children:[v?e.jsxs("button",{type:"button","data-testid":"agent-binding-chip","data-binding-state":v.state,className:C("border-border flex min-w-0 items-center gap-1 rounded-full border px-2 py-0.5 text-xs",n&&v.state==="valid"?"hover:bg-muted cursor-pointer":"text-muted-foreground",v.state==="invalid"&&"opacity-60"),onClick:U,disabled:!n||v.state==="invalid",children:[e.jsx(Ye,{className:"size-3 shrink-0"}),e.jsx("span",{className:"min-w-0 truncate",children:v.label}),v.state==="invalid"&&e.jsxs("span",{className:"shrink-0",children:["· ",t("agent.binding.invalid")]})]}):e.jsx("div",{className:"min-w-0 flex-1"}),e.jsxs("div",{className:"ml-auto flex shrink-0 items-center gap-1",children:[e.jsx(y,{"data-testid":"agent-session-switch",size:"icon-sm",variant:"ghost",onClick:()=>a("panes"),"aria-label":t("agent.session.switch"),title:t("agent.session.switch"),children:e.jsx(Qe,{})}),he&&e.jsx(y,{"data-testid":"agent-session-new",size:"icon-sm",variant:"ghost",disabled:!o||!i,onClick:ce,"aria-label":t("agent.session.new"),title:t(!o||!i?"agent.session.selectPaneHint":"agent.session.new"),children:e.jsx($e,{})})]})]}),T&&e.jsxs("div",{"data-testid":"agent-orphan-banner",className:"bg-muted/50 text-muted-foreground mx-3 mb-1.5 flex shrink-0 items-start gap-2 rounded-lg px-2 py-1.5 text-xs",children:[e.jsx(B,{className:"mt-0.5 size-3.5 shrink-0"}),e.jsx("span",{className:"min-w-0 flex-1",children:t("agent.orphan.readonly")})]}),n&&!T&&de&&e.jsxs("div",{"data-testid":"agent-pane-mismatch",className:"bg-muted/50 mx-3 mb-1.5 flex shrink-0 flex-wrap items-center gap-2 rounded-lg px-2 py-1.5 text-xs",children:[e.jsx(B,{className:"text-muted-foreground size-3.5 shrink-0"}),e.jsx("span",{className:"text-muted-foreground min-w-0 flex-1",children:t("agent.binding.mismatchTitle")}),(v==null?void 0:v.state)==="valid"&&e.jsx(y,{"data-testid":"agent-binding-goto",size:"xs",variant:"outline",onClick:U,children:t("agent.binding.goTo")}),i&&e.jsx(y,{"data-testid":"agent-binding-rebind",size:"xs",variant:"outline",onClick:()=>{g.getState().rebindPane(n.id,i)},children:t("agent.binding.rebind")})]}),(n==null?void 0:n.status)==="error"&&n.lastError&&e.jsxs("div",{"data-testid":"agent-error-banner",className:"bg-destructive/10 text-destructive mx-3 mb-1.5 flex shrink-0 items-start gap-2 rounded-lg px-2 py-1.5 text-xs",children:[e.jsx(B,{className:"mt-0.5 size-3.5 shrink-0"}),e.jsx("span",{className:"min-w-0 flex-1 break-words",children:n.lastError}),G&&!T&&e.jsx(y,{"data-testid":"agent-error-retry",size:"xs",variant:"outline",className:"shrink-0",disabled:!!b,onClick:()=>{g.getState().sendMessage(n.id,G)},children:t("agent.panel.retry")})]}),!R&&e.jsx(It,{blocks:n?ie:[],running:!!$,emptyText:t(A?"agent.panel.empty":"agent.session.selectPaneHint"),confirmationByToolCallId:oe,onDecide:le,className:"bg-chat-surface mx-3 mb-2 overflow-hidden rounded-xl"},(n==null?void 0:n.id)??(c?"draft":"none")),n&&!T&&P.length>0&&e.jsx(Mt,{queued:P,onEdit:(r,f)=>void g.getState().editQueuedMessage(n.id,r,f),onWithdraw:r=>void g.getState().withdrawQueuedMessage(n.id,r),onSteer:pe}),A&&e.jsxs("div",{className:R?"flex min-h-0 flex-1 flex-col justify-center":"contents",children:[R&&e.jsxs("div",{className:"flex flex-col items-center gap-2 px-6 pb-6 text-center",children:[e.jsx(Pe,{className:"text-muted-foreground size-9"}),e.jsx("h3",{className:"text-sm font-medium",children:t("agent.welcome.title")}),e.jsx("p",{className:"text-muted-foreground text-xs",children:t("agent.welcome.subtitle")})]}),e.jsx(_t,{disabled:je,running:!!$,steerable:!!n,onSend:me,onSteer:xe,onStop:()=>{n&&g.getState().stopSession(n.id)},modelPicker:e.jsx(St,{providerId:fe,modelId:ge,onChange:ue,disabled:$}),writeModeControl:e.jsxs("div",{className:"flex shrink-0 items-center gap-1.5",children:[e.jsx("span",{className:"text-muted-foreground text-xs",children:t(Q==="auto"?"agent.writeMode.auto":"agent.writeMode.confirm")}),e.jsx(Ae,{"data-testid":"agent-write-mode-switch",checked:Q==="auto",disabled:!!n&&T,onCheckedChange:r=>{const f=r?"auto":"confirm";g.getState().setDefaultWriteMode(f),n&&g.getState().setWriteMode(n.id,f)}})]})})]})]})}export{$t as AgentTab};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{ai as o,aj as n}from"./mermaid.core-D-CshtYr.js";const t=(a,r)=>o.lang.round(n.parse(a)[r]);export{t as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,c as s,a as e,C as t}from"./chunk-727SXJPM-TyUdLEW5.js";import{_ as i}from"./mermaid.core-D-CshtYr.js";import"./chunk-FMBD7UC4-Dx0HVCZZ.js";import"./chunk-ND2GUHAM-BQCoMEti.js";import"./chunk-55IACEB6-CnnXwmY_.js";import"./chunk-2J33WTMH-DOjtL7ww.js";import"./index-B3ddLSja.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,c as s,a as e,C as t}from"./chunk-727SXJPM-TyUdLEW5.js";import{_ as i}from"./mermaid.core-D-CshtYr.js";import"./chunk-FMBD7UC4-Dx0HVCZZ.js";import"./chunk-ND2GUHAM-BQCoMEti.js";import"./chunk-55IACEB6-CnnXwmY_.js";import"./chunk-2J33WTMH-DOjtL7ww.js";import"./index-B3ddLSja.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
|