@kimicode/cli 1.0.41 → 1.0.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +21 -17
  2. package/package.json +9 -9
  3. package/web/dist/assets/AssistantsView-Ct3BBpYf.js +1 -0
  4. package/web/dist/assets/AutomationView-CO-jVhee.js +3 -0
  5. package/web/dist/assets/ChannelConfigView-Ct1W584x.js +8 -0
  6. package/web/dist/assets/ChartsView-CAc37Sam.js +1 -0
  7. package/web/dist/assets/ConnectorsView-DP4bbh58.js +1 -0
  8. package/web/dist/assets/FileTreeView-DwsYfssO.js +1 -0
  9. package/web/dist/assets/HookConfigView-uFsqieii.js +2 -0
  10. package/web/dist/assets/InputArea-BY8quOiH.js +14 -0
  11. package/web/dist/assets/MemoryView-Bgd_lcTf.js +1 -0
  12. package/web/dist/assets/{MessageBubble-CV16DZMG.js → MessageBubble-CVGXupVH.js} +20 -20
  13. package/web/dist/assets/ModelsView-B271UV9L.js +1 -0
  14. package/web/dist/assets/PluginsView-Dz4fqQR1.js +2 -0
  15. package/web/dist/assets/ProjectsView-DF-YCV8y.js +1 -0
  16. package/web/dist/assets/SessionGrid-BIREstN2.js +4 -0
  17. package/web/dist/assets/SettingsModal-ZJeoZcCd.js +4 -0
  18. package/web/dist/assets/SkillsView-CH2ghYL2.js +1 -0
  19. package/web/dist/assets/TemplatesTab-BGe7_67s.js +1 -0
  20. package/web/dist/assets/ThreadsView-XditIHZ4.js +2 -0
  21. package/web/dist/assets/ToolsView-BBzsFdVZ.js +1 -0
  22. package/web/dist/assets/{agentIconSet-Btsb_SC4.js → agentIconSet-B5GUQwel.js} +1 -1
  23. package/web/dist/assets/{api-CCt9DRQm.js → api-plEYhRn0.js} +1 -1
  24. package/web/dist/assets/common-Bbatsa0-.js +192 -0
  25. package/web/dist/assets/{icons-BvYhTENi.js → icons-CYDRRPKW.js} +1 -1
  26. package/web/dist/assets/index-CTbLW314.js +133 -0
  27. package/web/dist/assets/index-DdzVrZye.css +1 -0
  28. package/web/dist/assets/{markdown-DAQZeY5V.js → markdown-N5__3T-w.js} +1 -1
  29. package/web/dist/assets/{panels-DYiQiVWh.js → panels-CIPgN61N.js} +1 -1
  30. package/web/dist/assets/{react-vendor-BlngCquv.js → react-vendor-CB4cLN-6.js} +1 -1
  31. package/web/dist/assets/settingsStore-Xqln0d91.js +1 -0
  32. package/web/dist/assets/{state-_ZfNVAsd.js → state-CSZ50keL.js} +1 -1
  33. package/web/dist/assets/sttLanguages-CSNMgUTz.js +2 -0
  34. package/web/dist/assets/ttsSettings-BwXYpDnk.js +2 -0
  35. package/web/dist/assets/useConfirm-Da8iQ_DZ.js +1 -0
  36. package/web/dist/assets/{useTranslation-BGmCDuQI.js → useTranslation-B-mfApCn.js} +1 -1
  37. package/web/dist/assets/{websocket-C9e3h7VU.js → websocket-BnDwh01e.js} +1 -1
  38. package/web/dist/assets/whatsNewStore-LpdLRLGl.js +1 -0
  39. package/web/dist/index.html +18 -18
  40. package/web/dist/vendor/MANIFEST.json +24 -0
  41. package/web/dist/vendor/d3.min.js +2 -0
  42. package/web/dist/vendor/echarts.min.js +45 -0
  43. package/web/dist/assets/AssistantsView-dhdYVIy0.js +0 -1
  44. package/web/dist/assets/AutomationView-D1dU5ZV7.js +0 -1
  45. package/web/dist/assets/ChannelConfigView-CEPVZntU.js +0 -8
  46. package/web/dist/assets/ChartsView-DdN-beHW.js +0 -1
  47. package/web/dist/assets/ConnectorsView-CseCss9C.js +0 -1
  48. package/web/dist/assets/FileTreeView-Dnc3-gRF.js +0 -1
  49. package/web/dist/assets/HookConfigView-DA2h4HdJ.js +0 -1
  50. package/web/dist/assets/InputArea-DAgOOjOc.js +0 -14
  51. package/web/dist/assets/MemoryView-D6OUBi4-.js +0 -1
  52. package/web/dist/assets/ModelsView-BuqD9vWl.js +0 -1
  53. package/web/dist/assets/PluginsView-CIziDHFJ.js +0 -2
  54. package/web/dist/assets/ProjectsView-c6faWy32.js +0 -1
  55. package/web/dist/assets/SessionGrid-BZJHcklh.js +0 -4
  56. package/web/dist/assets/SettingsModal-BqdGEGW-.js +0 -4
  57. package/web/dist/assets/SkillsView-CB6CKkmb.js +0 -1
  58. package/web/dist/assets/TemplatesTab-B8efVwVZ.js +0 -1
  59. package/web/dist/assets/ThreadsView-CDoM0aNb.js +0 -2
  60. package/web/dist/assets/ToolsView-BG-xsWsO.js +0 -1
  61. package/web/dist/assets/cn-rx4uumOJ.js +0 -1
  62. package/web/dist/assets/common-BHXgEvgk.js +0 -192
  63. package/web/dist/assets/index-BNI6CNsY.css +0 -1
  64. package/web/dist/assets/index-BX-d2OBW.js +0 -130
  65. package/web/dist/assets/settingsStore-RLUAWgIk.js +0 -1
  66. package/web/dist/assets/sttLanguages-aqoVC79g.js +0 -2
  67. package/web/dist/assets/ttsSettings-DHo3OsOq.js +0 -15
  68. package/web/dist/assets/whatsNewStore-Bf_7lW8o.js +0 -1
@@ -1,14 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$ as t,Br as n,Bt as r,Cn as i,Cr as a,Dn as o,En as s,Fr as c,Gn as l,Ir as u,Jn as d,Nn as f,O as p,Ot as m,Rn as h,Rr as g,Rt as _,T as v,Tt as y,Ur as b,Ut as x,W as S,_r as C,an as w,br as T,ct as E,er as D,ft as O,g as k,gt as ee,hn as A,ht as te,kt as ne,lt as re,mn as ie,n as ae,ot as j,t as M,u as oe,vn as N,vr as P,xr as se,zt as F}from"./icons-BvYhTENi.js";import{r as I}from"./react-vendor-BlngCquv.js";import{t as L}from"./useTranslation-BGmCDuQI.js";import{S as ce,f as le,l as R,o as ue,s as de}from"./ttsSettings-DHo3OsOq.js";import{n as z,t as B}from"./cn-rx4uumOJ.js";import"./src-49LUQhkG.js";import{a as fe,f as pe,n as me,r as he}from"./workspaceSemantics-RaIRer76.js";import{C as V,St as H,_t as ge,bt as U,ft as W,n as _e,pt as ve,r as ye,t as be,vt as xe,xt as G,yt as Se}from"./MessageBubble-CV16DZMG.js";import{a as Ce,i as we,n as Te,o as Ee,r as De,s as Oe,t as ke}from"./sttLanguages-aqoVC79g.js";import{r as Ae,t as je}from"./settingsStore-RLUAWgIk.js";import{r as Me,t as K}from"./api-CCt9DRQm.js";import{I as Ne}from"./markdown-DAQZeY5V.js";import{A as Pe,C as Fe,E as Ie,T as Le,c as Re,h as ze,j as Be,w as Ve}from"./common-BHXgEvgk.js";import{G as He,H as Ue,V as We,a as Ge,c as Ke,l as qe,n as Je,o as q,r as Ye,s as Xe}from"./index-BX-d2OBW.js";var Ze=/\[Pasted text #(\d+)(?:\s*\+\d+ lines?)?\]/g,Qe=0,$e=new Map;function et(e){let t=++Qe;return $e.set(t,e.replace(/\r\n?/g,`
2
- `)),t}function tt(e){return $e.get(e)}function nt(e){$e.delete(e)}function rt(e){return e.length>800||it(e)>0}function it(e){return(e.match(/\r\n|\r|\n/g)||[]).length}function at(e){let t=et(e),n=it(e);return n===0?{id:t,label:`[Pasted text #${t}]`}:{id:t,label:`[Pasted text #${t} +${n} lines]`}}function ot(e){return Ze.lastIndex=0,e.replace(Ze,(e,t)=>{let n=parseInt(t,10),r=$e.get(n);return r===void 0?e:r})}function st(e){Ze.lastIndex=0;let t=[],n;for(;(n=Ze.exec(e))!==null;){let e=n[1];e!==void 0&&t.push(parseInt(e,10))}return Ze.lastIndex=0,t}function ct(e){for(let t of e)$e.delete(t)}function lt(e){let t=e.match(/\[Pasted text #\d+(?:\s*\+\d+ lines?)?\]$/);return t?t[0]:null}function ut(e){let t=e.match(/^\[Pasted text #\d+(?:\s*\+\d+ lines?)?\]/);return t?t[0]:null}function dt(e){let t=e.match(/#(\d+)/);t&&nt(parseInt(t[1]??``,10))}var J=e(b(),1),Y=Ne();function ft(e,t=28){let n=e.replace(/\s+/g,` `).trim();return n.length>t?`${n.slice(0,t)}…`:n}var pt=`cubic-bezier(0.34, 1.56, 0.64, 1)`,mt=14,ht=7,X=.6,gt=160,_t=440;function vt(){let e=(0,J.useCallback)(()=>typeof window>`u`?_t:Math.max(gt,Math.min(_t,Math.round(window.innerHeight*X))),[]),[t,n]=(0,J.useState)(e);return(0,J.useEffect)(()=>{let t=()=>n(e());return window.addEventListener(`resize`,t),()=>window.removeEventListener(`resize`,t)},[e]),t}var yt=(0,J.memo)(function({items:e,activeId:t,onJump:n}){let{t:r}=L(),[i,a]=(0,J.useState)(!1),o=(0,J.useRef)(null),s=vt(),c=(0,J.useCallback)(()=>{o.current&&window.clearTimeout(o.current),a(!0)},[]),l=(0,J.useCallback)(()=>{o.current&&window.clearTimeout(o.current),o.current=window.setTimeout(()=>a(!1),180)},[]),u=Math.max(ht,Math.min(mt,Math.floor(s/Math.max(1,e.length)))),d=Math.max(1,Math.floor(s/ht)),f=(0,J.useMemo)(()=>{let n=e.length,r=Math.min(n,d),i=n/r,a=t?e.findIndex(e=>e.id===t):-1;return Array.from({length:r},(e,t)=>{let r=Math.round(t*i),o=Math.min(n,Math.max(r+1,Math.round((t+1)*i)));return{start:r,end:o,active:a>=r&&a<o}}).flatMap(t=>{let n=e[t.start];return n?[{...t,key:n.id,first:n}]:[]})},[e,t,d]),p=u>=12?6:u>=9?5:4,m=Math.min(p+2,Math.max(4,u-2)),h=u>=12?`ring-2 ring-accent-blue/25`:`ring-1 ring-accent-blue/30`;return e.length===0?null:(0,Y.jsx)(`div`,{role:`list`,"aria-label":r(`chat.messageRail`),className:`pointer-events-none absolute end-4 top-1/2 z-30 hidden -translate-y-1/2 md:block`,children:(0,Y.jsxs)(`div`,{onMouseEnter:c,onMouseLeave:l,"data-testid":`rail-trigger`,className:`pointer-events-auto relative flex items-center py-3`,children:[(0,Y.jsxs)(`div`,{"aria-hidden":!i,inert:!i,"data-testid":`rail-panel`,className:`absolute end-full top-1/2 flex w-72 -translate-y-1/2 origin-right rtl:origin-left flex-col overflow-hidden rounded-xl border border-dark-border/70 bg-dark-bg/90 shadow-pop backdrop-blur-xl transition-all duration-300 ${i?`translate-x-0 scale-100 opacity-100`:`pointer-events-none translate-x-4 rtl:-translate-x-4 scale-95 opacity-0`}`,style:{transitionTimingFunction:i?pt:`ease`},children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 border-b border-dark-border/60 px-3 py-2`,children:[(0,Y.jsxs)(`span`,{className:`flex items-center gap-1.5 text-meta font-semibold uppercase tracking-[0.08em] text-dark-muted`,children:[(0,Y.jsx)(x,{size:12,className:`text-accent-blue`,"aria-hidden":`true`}),r(`chat.messageIndex`)]}),(0,Y.jsx)(`span`,{className:`rounded-full bg-dark-hover px-1.5 py-0.5 text-badge font-medium tabular-nums text-dark-muted`,children:e.length})]}),(0,Y.jsx)(`div`,{className:`max-h-[55vh] overflow-y-auto p-1.5 custom-scrollbar`,children:e.map((e,r)=>{let a=e.id===t;return(0,Y.jsxs)(`button`,{type:`button`,role:`listitem`,onClick:()=>n(e.id),title:e.content,"aria-current":a?`true`:void 0,tabIndex:i?0:-1,className:`group/item flex w-full items-start gap-2 rounded-lg px-2 py-1.5 text-start transition-all duration-200 ${i?`translate-x-0 opacity-100`:`translate-x-2 rtl:-translate-x-2 opacity-0`} ${a?`bg-accent-blue/10`:`hover:bg-dark-hover`}`,style:{transitionDelay:i?`${Math.min(r*24,264)}ms`:`0ms`},children:[(0,Y.jsx)(`span`,{className:`mt-px flex h-4 w-4 shrink-0 items-center justify-center rounded text-badge font-semibold tabular-nums transition-colors duration-200 ${a?`bg-accent-blue text-accent-fg`:`bg-dark-hover text-dark-muted group-hover/item:bg-dark-border/80 group-hover/item:text-dark-text`}`,children:r+1}),(0,Y.jsx)(`span`,{className:`min-w-0 flex-1`,children:(0,Y.jsx)(`span`,{"data-testid":`rail-entry-content`,className:`block break-words text-xs leading-snug line-clamp-2 group-hover/item:line-clamp-none transition-colors duration-200 ${a?`font-medium text-accent-blue`:`text-dark-text/90`}`,children:e.content})}),(0,Y.jsx)(P,{size:12,"aria-hidden":`true`,className:`mt-0.5 shrink-0 -translate-x-1 rtl:translate-x-1 rtl:rotate-180 text-dark-muted/50 opacity-0 transition-all duration-200 group-hover/item:translate-x-0 group-hover/item:opacity-100`})]},e.id)})})]}),(0,Y.jsx)(`div`,{"data-testid":`rail-dots`,className:`flex flex-col items-end`,style:{maxHeight:s},children:f.map(e=>{let{first:t}=e,r=e.end-e.start>1,i=r?`${e.start+1}–${e.end} (${e.end-e.start})`:`${e.start+1}. ${ft(t.content)}`;return(0,Y.jsx)(`button`,{type:`button`,role:`listitem`,onClick:()=>n(t.id),title:r?`${e.start+1}–${e.end}: ${t.content}`:t.content,"aria-label":i,"aria-current":e.active?`true`:void 0,className:`group/dot pointer-events-auto flex items-center justify-center rounded-full transition-colors duration-200 hover:bg-dark-surface/80`,style:{height:u,width:20},children:(0,Y.jsx)(`span`,{style:{height:e.active?m:p,width:e.active?m:p},className:e.active?`rounded-full bg-accent-blue transition-all duration-300 ease-out group-hover/dot:scale-125 ${h}`:`rounded-full bg-dark-muted/35 transition-all duration-300 ease-out group-hover/dot:scale-125 group-hover/dot:bg-dark-muted`})},e.key)})})]})})});function bt({sessionId:e}){let t=ue(e=>e.compactionProgress),n=le(e=>e.activeSessionId);if(!t||n&&e&&n!==e)return null;let r=t.percent<100;return(0,Y.jsxs)(`div`,{"data-testid":`compaction-indicator`,className:`chat-col flex items-center gap-2 px-4 py-1.5 text-xs text-dark-text sm:px-6`,title:t.message||void 0,children:[(0,Y.jsx)(`span`,{className:`whitespace-nowrap`,children:`compact`}),(0,Y.jsxs)(`span`,{className:`tabular-nums whitespace-nowrap`,children:[t.percent,`%`]}),(0,Y.jsx)(`span`,{className:`h-1.5 w-20 overflow-hidden rounded-full bg-dark-border/70`,children:(0,Y.jsx)(`span`,{className:`block h-full rounded-full bg-dark-text/70 transition-all${r?` animate-pulse-soft`:``}`,style:{width:`${t.percent}%`}})})]})}var xt=24,St=2e3,Ct=150,wt=28;function Tt({label:e}){let t=(0,J.useRef)(Date.now()),n=(0,J.useRef)(null),[r,i]=(0,J.useState)(!1);return(0,J.useEffect)(()=>{let e=window.setTimeout(()=>i(!0),15e3);return()=>window.clearTimeout(e)},[]),(0,J.useEffect)(()=>{if(!r)return;let e=()=>{let e=n.current;if(!e)return;let r=Math.floor((Date.now()-t.current)/1e3);e.textContent=r>=60?`${Math.floor(r/60)}m ${r%60}s`:`${r}s`};e();let i=window.setInterval(e,1e3);return()=>window.clearInterval(i)},[r]),(0,Y.jsxs)(`div`,{className:`chat-col flex items-center gap-2 px-4 py-3 text-xs text-dark-muted sm:px-6`,children:[(0,Y.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full bg-accent-blue animate-blink`}),(0,Y.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full bg-accent-blue animate-blink`,style:{animationDelay:`0.2s`}}),(0,Y.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full bg-accent-blue animate-blink`,style:{animationDelay:`0.4s`}})]}),(0,Y.jsx)(`span`,{className:`text-shimmer`,children:e}),r&&(0,Y.jsxs)(`span`,{className:`flex items-center gap-1 tabular-nums text-dark-muted/70`,children:[(0,Y.jsx)(D,{size:10}),(0,Y.jsx)(`span`,{ref:n,children:`15s`})]})]})}var Et=(0,J.memo)(function({messages:e,isGenerating:t,sessionId:n,onRegenerate:r,onRetryTurn:i,onDeleteMessage:a,onOpenSidebarView:o}){let{t:s}=L(),c=(0,J.useRef)(null),l=(0,J.useRef)(new Map),[u,d]=(0,J.useState)(!0),[f,p]=(0,J.useState)(null),m=(0,J.useRef)(u),h=(0,J.useRef)(f),g=(0,J.useCallback)(e=>{m.current!==e&&(m.current=e,d(e))},[]),_=(0,J.useCallback)(e=>{h.current!==e&&(h.current=e,p(e))},[]),[v,y]=(0,J.useState)(null),[b,x]=(0,J.useState)(0),S=(0,J.useRef)(null),C=(0,J.useRef)(!1),w=(0,J.useRef)(null),E=(0,J.useRef)(!1),D=(0,J.useRef)(null),O=(0,J.useRef)(!1),k=(0,J.useRef)(null),ee=(0,J.useRef)(null),A=(0,J.useRef)(t);A.current=t;let te=(0,J.useRef)(0),[ne,re]=(0,J.useState)({top:0,bottom:0}),ie=(0,J.useRef)(ne),ae=(0,J.useCallback)((e,t)=>{(ie.current.top!==e||ie.current.bottom!==t)&&(ie.current={top:e,bottom:t},re({top:e,bottom:t}))},[]),j=(0,J.useMemo)(()=>e.filter(e=>!e.deleted),[e]),M=(0,J.useMemo)(()=>{if(!t)return!1;let e=j[j.length-1];return!e||e.type!==`assistant`?!1:!e.content},[t,j]),oe=(0,J.useMemo)(()=>j.filter(e=>ce(e)).map(e=>({id:e.id,content:e.content})),[j]),N=(0,J.useMemo)(()=>oe.map(e=>e.id),[oe]),P=(0,J.useCallback)(e=>{if(e){let t=e.dataset.mid;t&&l.current.set(t,e)}},[]);(0,J.useEffect)(()=>{let e=new Set(N);for(let t of l.current.keys())e.has(t)||l.current.delete(t)},[N]);let se=(0,J.useCallback)(()=>{let e=c.current;if(!e||N.length===0){_(null);return}let t=e.getBoundingClientRect(),n=t.top+t.height*.35,r=N[0]??null;for(let e of N){let t=l.current.get(e);if(t&&t.isConnected){if(t.getBoundingClientRect().top<=n)r=e;else break}}e.scrollHeight-e.scrollTop-e.clientHeight<xt&&(r=N[N.length-1]??r),_(r)},[N,_]),F=(0,J.useCallback)(()=>{let e=c.current;if(!e)return;let t=e.scrollTop<=2,n=e.scrollTop+e.clientHeight>=e.scrollHeight-2;ae(t?0:wt,n?0:wt)},[ae]),I=(0,J.useCallback)(()=>{let e=c.current;if(!e)return;let t=e.scrollHeight-e.scrollTop-e.clientHeight,n=t<xt;E.current?n&&(E.current=!1):C.current?t>=xt&&(C.current=!1):g(n),se(),F()},[se,F,g]),le=(0,J.useCallback)(()=>{let e=c.current;if(!e||A.current||C.current||E.current)return;let t=e.scrollHeight-e.scrollTop-e.clientHeight;g(t<xt),F()},[g,F]);(0,J.useLayoutEffect)(()=>{O.current=!0,k.current&&window.clearTimeout(k.current),k.current=window.setTimeout(()=>{O.current=!1},St),w.current&&window.clearTimeout(w.current),C.current=!1,E.current=!1;let e=c.current;e&&(e.scrollTop=e.scrollHeight),g(!0),F()},[n,g,F]),(0,J.useEffect)(()=>{let e=c.current,t=ee.current;if(!e||!t||typeof ResizeObserver>`u`)return;let n=new ResizeObserver(()=>{O.current&&m.current&&(e.scrollTop=e.scrollHeight)});return n.observe(t),()=>n.disconnect()},[]),(0,J.useEffect)(()=>{se(),F()},[e,se,F]),(0,J.useEffect)(()=>{let e=c.current;if(!e)return;let t=()=>{F(),le()},n=()=>{te.current=performance.now(),E.current=!1,O.current=!1},r=e=>{(e.key===`PageUp`||e.key===`PageDown`||e.key===`ArrowUp`||e.key===`ArrowDown`||e.key===`Home`||e.key===`End`)&&n()};return e.addEventListener(`wheel`,n,{passive:!0}),e.addEventListener(`touchmove`,n,{passive:!0}),e.addEventListener(`keydown`,r),window.addEventListener(`resize`,t),()=>{e.removeEventListener(`wheel`,n),e.removeEventListener(`touchmove`,n),e.removeEventListener(`keydown`,r),window.removeEventListener(`resize`,t)}},[F,le]);let R=(0,J.useCallback)(e=>{let t=c.current,n=l.current.get(e);if(!t||!n||!n.isConnected)return;g(!1),y(e),x(e=>e+1),S.current&&window.clearTimeout(S.current),S.current=window.setTimeout(()=>y(null),1600);let r=t.getBoundingClientRect(),i=n.getBoundingClientRect(),a=t.scrollTop+(i.top-r.top)-t.clientHeight/2+i.height/2;w.current&&window.clearTimeout(w.current),C.current=!0,t.scrollTo({top:Math.max(0,a),behavior:`smooth`}),`onscrollend`in t&&t.addEventListener(`scrollend`,()=>{C.current=!1},{once:!0}),w.current=window.setTimeout(()=>{C.current=!1},1500)},[g]);(0,J.useEffect)(()=>()=>{S.current&&window.clearTimeout(S.current),w.current&&window.clearTimeout(w.current),D.current&&window.clearTimeout(D.current),k.current&&window.clearTimeout(k.current)},[]);let ue=(0,J.useCallback)(()=>{w.current&&window.clearTimeout(w.current),C.current=!1;let e=c.current;e&&(e.scrollTop=e.scrollHeight)},[]),de=(0,J.useCallback)(()=>{w.current&&window.clearTimeout(w.current),C.current=!1,g(!0);let e=c.current;e&&(E.current=!0,D.current&&window.clearTimeout(D.current),D.current=window.setTimeout(()=>{E.current=!1},1e3),`onscrollend`in e&&e.addEventListener(`scrollend`,()=>{E.current=!1},{once:!0}),e.scrollTo({top:e.scrollHeight,behavior:`smooth`}))},[g]);(0,J.useEffect)(()=>{t&&(g(!0),ue())},[t,ue,g]);let z=(0,J.useMemo)(()=>{let e=j[j.length-1];return`${j.length}:${e?.id??``}:${e?.content?.length??0}:${e?.textBlocks?.length??0}:${e?.toolCalls?.length??0}:${e?.thinkingBlocks?.length??0}:${e?.thinking?.length??0}`},[j]),B=(0,J.useRef)(z);return(0,J.useEffect)(()=>{u?z!==B.current&&(B.current=z,!(performance.now()-te.current<=Ct)&&ue()):B.current=z},[z,u,ue]),(0,Y.jsxs)(`div`,{className:`relative flex-1 min-h-0`,children:[(0,Y.jsxs)(`div`,{ref:c,onScroll:I,style:{"--ui-fade-top":`${ne.top}px`,"--ui-fade-bottom":`${ne.bottom}px`},className:`fade-mask-y h-full overflow-y-auto custom-scrollbar`,children:[(0,Y.jsx)(`div`,{ref:ee,className:`chat-stack flex flex-col pb-8 pt-5`,children:j.map((e,t)=>{let s=j[t-1],c=s?s.type===e.type?`mt-2`:`mt-5`:``;return(0,Y.jsxs)(`div`,{"data-mid":e.id,ref:P,className:`relative w-full ${c}`,children:[v===e.id&&(0,Y.jsx)(`div`,{className:`animate-rail-flash pointer-events-none absolute inset-0`},b),(0,Y.jsx)(be,{message:e,sessionId:n,onRegenerate:r,onRetryTurn:i,onDeleteMessage:a,onOpenSidebarView:o})]},e.id)})}),(0,Y.jsx)(bt,{sessionId:n}),t&&!M&&(0,Y.jsx)(Tt,{label:s(`chat.thinkingEllipsis`)},n)]}),oe.length>0&&(0,Y.jsx)(yt,{items:oe,activeId:f,onJump:R}),!u&&j.length>0&&(0,Y.jsx)(`button`,{type:`button`,onClick:de,title:s(`chat.backToBottom`),"aria-label":s(`chat.backToBottom`),className:`absolute bottom-5 end-5 z-20 flex h-8 w-8 animate-fade-in-up items-center justify-center rounded-full border border-dark-border/70 bg-dark-surface/90 text-dark-muted shadow-lg backdrop-blur transition-all duration-200 hover:scale-110 hover:text-dark-text hover:shadow-xl`,children:(0,Y.jsx)(T,{size:15})})]})}),Dt=(0,J.memo)(function(){let{t:e}=L(),t=W(e=>e.mode),n=W(e=>e.setAutoLevel),r=ve(e=>e.autoLevel),i=t!==`normal`&&pe(t),a=G(i?r:0),o=(t===`normal`?`act`:fe(t))===`chat`,s=U[a],[c,l]=(0,J.useState)(!1),[u,d]=(0,J.useState)(null),f=(0,J.useId)(),p=u??a,m=U[p],h=(0,J.useRef)(null),g=(0,J.useRef)(null),_=e=>{o||(l(!0),h.current?.contains(e.target)||d(null))},v=e=>{let t=e.relatedTarget;t&&g.current?.contains(t)||(l(!1),d(null))},y=(0,J.useCallback)(e=>{o||e!==a&&n(e)},[o,a,n]),b=(0,J.useRef)(0);(0,J.useEffect)(()=>{let e=g.current;if(!e||o)return;let t=e=>{let t=Math.abs(e.deltaY)>=Math.abs(e.deltaX)?e.deltaY:0;if(t===0||(e.preventDefault(),b.current+=t,Math.abs(b.current)<30))return;let n=b.current>0?1:-1;b.current=0,y(H(a,n>0?-1:1))};return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[y,o,a]);let x=(0,J.useCallback)(e=>{if(o)return;let t=t=>{e.preventDefault(),y(H(a,t))};switch(e.key){case`ArrowUp`:case`ArrowRight`:t(1);break;case`ArrowDown`:case`ArrowLeft`:t(-1);break;case`Home`:e.preventDefault(),y(0);break;case`End`:e.preventDefault(),y(4)}},[y,o,a]),S=t=>{let n=U[t];return`${t}/4 · ${n.label} — ${n.hint}\n${e(`plan.autoAllows`)}: ${n.allows}\n${e(`plan.autoAsks`)}: ${n.asks}`},C=`${e(`plan.autoApprove`)} ${S(a)}`;return(0,Y.jsxs)(`div`,{ref:g,role:`slider`,tabIndex:o?-1:0,"aria-label":e(`plan.autoApprove`),"aria-valuemin":0,"aria-valuemax":4,"aria-valuenow":a,"aria-valuetext":`${s.label} (${a}/4)`,"aria-describedby":c?f:void 0,"aria-disabled":o||void 0,onKeyDown:x,onMouseOver:_,onMouseOut:v,onFocus:()=>l(!o),onBlur:()=>{l(!1),d(null)},title:c?void 0:o?`${e(`plan.autoApprove`)} — chat · ${s.hint}`:C,className:B(`relative flex items-center gap-1.5 rounded-full border px-2 py-0.5 text-xs whitespace-nowrap transition-colors select-none`,o?`border-dark-border text-dark-muted opacity-50 cursor-not-allowed`:B(`cursor-pointer outline-none focus-visible:ring-1 focus-visible:ring-accent-yellow/60`,i?`border-accent-yellow/40 bg-accent-yellow/10 text-accent-yellow`:`border-dark-border text-dark-muted hover:bg-dark-hover`)),children:[(0,Y.jsx)(`span`,{ref:h,className:`flex items-end gap-[2px]`,"aria-hidden":!0,children:Se.map(e=>{let t=e>0&&a>=e;return(0,Y.jsx)(`span`,{title:c?void 0:S(e),onMouseOver:()=>d(e),onMouseDown:t=>{t.preventDefault(),y(e)},className:B(`w-[3px] rounded-sm transition-colors`,t?`bg-accent-yellow`:i?`bg-accent-yellow/25 hover:bg-accent-yellow/60`:`bg-dark-border`,!o&&(i?`hover:bg-accent-yellow/70`:`hover:bg-dark-muted/50`)),style:{height:4+e*2.5}},e)})}),(0,Y.jsx)(`span`,{className:`font-medium tabular-nums`,children:a}),(0,Y.jsx)(`span`,{className:`uppercase tracking-wide`,children:s.label}),c&&(0,Y.jsxs)(`div`,{id:f,role:`tooltip`,className:`pointer-events-none absolute bottom-full left-0 z-50 mb-2 w-max max-w-[min(80vw,30rem)] space-y-1 whitespace-normal break-words rounded-lg border border-dark-border bg-dark-surface px-2.5 py-2 text-start font-normal normal-case tracking-wide text-dark-text shadow-pop`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-1.5`,children:[(0,Y.jsx)(`span`,{className:`font-medium tabular-nums`,children:p}),(0,Y.jsx)(`span`,{className:`uppercase tracking-wide text-accent-yellow`,children:m.label}),(0,Y.jsx)(`span`,{className:`text-dark-muted`,children:m.hint})]}),(0,Y.jsxs)(`div`,{className:`grid grid-cols-[auto_minmax(0,1fr)] gap-x-1.5 gap-y-0.5`,children:[(0,Y.jsx)(`span`,{className:`whitespace-nowrap text-accent-green`,children:e(`plan.autoAllows`)}),(0,Y.jsx)(`span`,{className:`text-dark-muted`,children:m.allows}),(0,Y.jsx)(`span`,{className:`whitespace-nowrap text-accent-yellow`,children:e(`plan.autoAsks`)}),(0,Y.jsx)(`span`,{className:`text-dark-muted`,children:m.asks})]})]})]})}),Ot={act:`border-accent-green/30 text-accent-green bg-accent-green/10`,"auto-act":`border-accent-yellow/30 text-accent-yellow bg-accent-yellow/10`,goal:`border-accent-purple/30 text-accent-purple bg-accent-purple/10`,"auto-goal":`border-accent-red/30 text-accent-red bg-accent-red/10`,chat:`border-accent-cyan/30 text-accent-cyan bg-accent-cyan/10`,normal:`border-accent-green/30 text-accent-green`},kt=(0,J.memo)(function(){let{t:e}=L(),t=W(e=>e.mode),n=W(e=>e.modeSource),r=W(e=>e.setBaseMode),i=fe(t===`normal`?`act`:t),a=n===`user_override`;return(0,Y.jsxs)(`div`,{className:`flex items-center gap-1`,children:[me.map(n=>{let o=i===n,s=he[n],c=t!==`normal`&&o?Ot[t]??`border-dark-border text-dark-muted`:`border-dark-border text-dark-muted hover:bg-dark-hover`;return(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>r(n),className:B(`px-2 py-0.5 rounded-full border text-xs whitespace-nowrap transition-colors cursor-pointer`,c),title:e(`chat.clickToSwitchMode`),"aria-pressed":o,children:[s.label,o&&a&&(0,Y.jsx)(_,{size:10,className:`ms-1 inline-block -mt-px`,"aria-hidden":!0})]},n)}),a&&(0,Y.jsx)(`span`,{className:`flex items-center text-accent-yellow`,title:e(`plan.modeLocked`),"aria-label":e(`plan.modeLocked`),children:(0,Y.jsx)(_,{size:11,"aria-hidden":!0})}),(0,Y.jsx)(Dt,{})]})}),At=(0,J.memo)(function(){let{t:e}=L(),t=le(e=>e.activeSessionId),n=W(e=>t?e.pendingSuggestionsBySession[t]:void 0),r=W(e=>e.clearPendingSuggestion),i=W(e=>e.setBaseMode);if(!n)return null;let a=n.suggestedMode;if(a!==`act`&&a!==`goal`)return null;let o=a,s=he[o]?.label??o,c=he[fe(n.currentMode)]?.label??n.currentMode,l=typeof n.confidence==`number`?` · ${e(`plan.modeSuggestionConfidence`)} ${Math.round(n.confidence*100)}%`:``;return(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-accent-cyan/20 bg-accent-cyan/10 px-4 py-1.5 text-xs`,role:`status`,children:[(0,Y.jsx)(`span`,{className:`shrink-0 font-medium text-accent-cyan`,children:e(`plan.modeSuggestionTitle`)}),(0,Y.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1 text-dark-muted`,children:[(0,Y.jsx)(`span`,{className:`whitespace-nowrap`,children:c}),(0,Y.jsx)(g,{size:11,className:`shrink-0`,"aria-hidden":!0}),(0,Y.jsx)(`span`,{className:`whitespace-nowrap text-dark-text`,children:s}),(0,Y.jsx)(`span`,{className:`shrink-0`,children:l}),n.reason&&(0,Y.jsxs)(`span`,{className:`hidden min-w-0 truncate md:inline`,title:n.reason,children:[`· `,n.reason]})]}),(0,Y.jsxs)(`span`,{className:`ms-auto flex shrink-0 items-center gap-1.5`,children:[(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>{i(o),r(n.sessionId)},className:B(`flex items-center gap-1 rounded-full border border-accent-cyan/40 px-2.5 py-0.5`,`text-accent-cyan transition-colors hover:bg-accent-cyan/20 cursor-pointer`),children:[(0,Y.jsx)(se,{size:11,"aria-hidden":!0}),e(`plan.modeSuggestionApply`,{mode:s})]}),(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>r(n.sessionId),className:B(`flex items-center gap-1 rounded-full border border-dark-border px-2.5 py-0.5`,`text-dark-muted transition-colors hover:bg-dark-hover cursor-pointer`),children:[(0,Y.jsx)(ae,{size:11,"aria-hidden":!0}),e(`plan.modeSuggestionKeep`,{mode:c})]})]})]})}),Z=I();function jt(){return Me.get(`/api/models/cached`)}var Mt=(0,J.memo)(function(){let{t:e}=L(),t=ue(e=>e.model),r=ue(e=>e.modelRef),i=ue(e=>e.setModel),a=ue(e=>e.setModelRef),o=W(e=>e.mode),s=Ae(e=>e.effort),c=Ae(e=>e.setEffort),[u,d]=(0,J.useState)([]),[f,p]=(0,J.useState)(!1),{visible:m,phase:h}=Be(f),g=(0,J.useRef)(null),_=(0,J.useRef)(null),[v,y]=(0,J.useState)(`session`),[b,x]=(0,J.useState)(`user`),C=Re(e=>e.kinds),w=Re(e=>e.load),E=le(e=>e.activeSessionId),[D,O]=(0,J.useState)(`models`),[k,ee]=(0,J.useState)(``),[A,te]=(0,J.useState)(``),[ne,re]=(0,J.useState)({}),[ae,j]=(0,J.useState)({}),[M,oe]=(0,J.useState)(!1),[N,P]=(0,J.useState)(null),[I,ce]=(0,J.useState)([]),R=(0,J.useMemo)(()=>Ke(Array.from(new Set(u.map(e=>e.provider).filter(Boolean))),u,I),[u,I]),de=(0,J.useCallback)(async()=>{try{let e=await K.models.list();e.success&&e.data&&Array.isArray(e.data.models)&&d(e.data.models.filter(e=>e.enabled!==!1))}catch{}},[]),pe=(0,J.useCallback)(async()=>{try{let e=await jt();e.success&&e.data?.providers&&re(e.data.providers)}catch{}},[]),me=(0,J.useCallback)(async t=>{if(t){oe(!0),P(null);try{let n=await K.models.byProvider(t);if(n.success&&n.data){let e=n.data.models||[];j(n=>({...n,[t]:e}))}else P(n.error||e(`chat.loadModelsFailed`))}catch{P(e(`chat.loadModelsFailed`))}finally{oe(!1)}}},[e]);(0,J.useEffect)(()=>{de()},[de]);let[he,V]=(0,J.useState)(0);(0,J.useEffect)(()=>{let e=()=>{de(),pe(),V(e=>e+1)};return window.addEventListener(`models-updated`,e),()=>window.removeEventListener(`models-updated`,e)},[de,pe]);let[H,ge]=(0,J.useState)(null),U=(0,J.useCallback)(()=>{let e=g.current;if(!e)return;let t=e.getBoundingClientRect();ge({left:Math.max(8,Math.min(t.left,window.innerWidth-400-8)),bottom:Math.max(8,window.innerHeight-t.top+6),maxHeight:Math.max(160,t.top-6-8)})},[]),_e=(0,J.useCallback)(()=>{let e=Xe(r)||u.find(e=>e.isGlobalDefault)?.provider||R[0]||``;O(`models`),ee(e),te(``),P(null),U(),p(!0),pe()},[r,u,R,pe,U]);(0,J.useEffect)(()=>{f&&k&&me(k)},[f,k,he,me]),(0,J.useEffect)(()=>{f&&(k&&R.includes(k)||ee(R[0]||``))},[f,k,R]),(0,J.useEffect)(()=>{f&&w()},[f,w]),(0,J.useEffect)(()=>{C.length!==0&&(C.some(e=>e.id===b)||x(C[0].id))},[C,b]);let ve=(0,J.useCallback)(()=>p(!1),[]);(0,J.useEffect)(()=>{if(f)return U(),window.addEventListener(`resize`,U),window.addEventListener(`scroll`,U,!0),()=>{window.removeEventListener(`resize`,U),window.removeEventListener(`scroll`,U,!0)}},[f,U]),(0,J.useEffect)(()=>{if(!f)return;let e=e=>{let t=e.target;g.current?.contains(t)||_.current?.contains(t)||ve()},t=e=>{e.key===`Escape`&&ve()};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[f,ve]);let ye=(0,J.useMemo)(()=>{let e=ae[k];return e&&e.length>0?e:ne[k]?.models??[]},[ae,ne,k]),be=(0,J.useMemo)(()=>qe(Ge(k,ye,u),I,k),[k,ye,u,I]),xe=(0,J.useMemo)(()=>{let e=A.trim().toLowerCase();return e?be.filter(t=>t.id.toLowerCase().includes(e)||t.name.toLowerCase().includes(e)):be},[be,A]),G=e=>{ce(t=>[e,...t.filter(t=>t!==e)].slice(0,20))},Se=async n=>{if(ve(),v===`session`&&!E){z.error(e(`chat.sessionModelNoSession`));return}let s=k,c=`${s}:${n.id}`,l=t,u=r;i(n.id),a(c);try{if(!n.configured){let t=await K.models.create({provider:s,model:{id:n.id,name:n.name||n.id}});if(!t.success){i(l),a(u),z.error(t.error||e(`chat.addModelFailed`));return}}if(v===`session`){let t=await K.models.setSessionModel(E,s,n.id);if(!t.success){i(l),a(u),z.error(t.error||e(`chat.switchModelFailed`));return}G(c),await de();return}if(v===`kind`){let t=Re.getState(),r=C.find(e=>e.id===b)?.labelKey?e(C.find(e=>e.id===b).labelKey):b;if(!await t.saveEntry(b,{...t.entries[b]??{},model:n.id})){i(l),a(u),z.error(t.error||e(`chat.kindBindFailed`));return}if(E){let t=await K.models.setSessionModel(E,s,n.id);if(!t.success){i(l),a(u),z.error(t.error||e(`chat.switchModelFailed`));return}}G(c),z.success(e(`chat.kindBoundToast`,{kind:r,model:n.id})),await de();return}let t=fe(o===`normal`?`act`:o)===`goal`?{goal:c}:{global:c,act:c},r=await K.models.setDefaults(t);if(!r.success){i(l),a(u),z.error(r.error||e(`chat.switchModelFailed`));return}G(c),await de()}catch{i(l),a(u),z.error(e(`chat.addModelFailed`))}},Ce=fe(o===`normal`?`act`:o),we=Ce===`goal`?`isGoalDefault`:`isActDefault`,Te=e=>{let n=`${k}:${e.id}`;return r?r===n:t===n||t===e.id},Ee=u.some(e=>e[we]===!0),De=u.find(e=>e.isGlobalDefault),ke=async()=>{ve();let e=Ce===`goal`?{goal:null}:{act:null};try{(await K.models.setDefaults(e)).success&&(De?(i(De.id),a(`${De.provider}:${De.id}`)):(i(``),a(``)),await de())}catch{}},Me=q(t,r),Ne=A.trim().toLowerCase();return(0,Y.jsxs)(`div`,{className:`relative min-w-0`,ref:g,children:[(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>f?ve():_e(),className:`flex w-full items-center gap-1 px-2 py-0.5 rounded-full border border-dark-border text-dark-muted whitespace-nowrap transition-colors hover:bg-dark-hover cursor-pointer`,title:Me||e(`chat.clickToSelectModel`),"aria-haspopup":`listbox`,"aria-expanded":f,children:[(0,Y.jsx)(l,{size:12,className:`shrink-0`}),(0,Y.jsx)(`span`,{className:`font-medium max-w-[8rem] truncate`,children:Me||e(`chat.selectModel`)}),(0,Y.jsx)(T,{size:12,className:B(`transition-transform`,f&&`rotate-180`)})]}),m&&(0,Z.createPortal)((0,Y.jsxs)(`div`,{ref:_,role:`listbox`,"data-phase":h,"aria-label":e(`chat.selectModel`),style:H?{left:H.left,bottom:H.bottom,maxHeight:H.maxHeight}:void 0,className:`fixed z-50 flex w-[400px] max-w-[92vw] flex-col overflow-hidden rounded-lg border border-dark-border bg-dark-overlay ui-surface-overlay shadow-pop ui-overlay-panel-fade`,children:[(0,Y.jsx)(`div`,{role:`tablist`,"aria-label":e(`chat.selectModel`),className:`flex shrink-0 items-center gap-1 px-2 py-1.5 border-b border-dark-border`,children:[{key:`models`,label:e(`chat.selectModel`),Icon:l},{key:`effort`,label:e(`chat.effort`),Icon:ie}].map(({key:e,label:t,Icon:n})=>(0,Y.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":D===e,onClick:()=>O(e),className:B(`flex items-center gap-1 text-meta px-2 py-0.5 rounded-full border transition-colors cursor-pointer`,D===e?`border-accent-blue text-accent-blue bg-accent-blue/10 font-medium`:`border-dark-border text-dark-muted hover:text-dark-text hover:bg-dark-hover`),children:[(0,Y.jsx)(n,{size:11,className:`shrink-0`}),t]},e))}),D===`models`?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`div`,{className:`flex shrink-0 items-center gap-1 px-2 py-1.5 border-b border-dark-border`,children:[{key:`session`,label:e(`chat.applyScopeSession`),hint:e(`chat.sessionScopeHint`)},{key:`kind`,label:e(`chat.applyScopeKind`),hint:e(`chat.kindScopeHint`)},{key:`global`,label:e(`chat.applyScopeGlobal`),hint:e(`chat.globalScopeHint`)}].map(({key:e,label:t,hint:n})=>(0,Y.jsx)(`button`,{type:`button`,onClick:()=>y(e),title:n,className:B(`text-meta px-2 py-0.5 rounded-full border transition-colors cursor-pointer`,v===e?`border-accent-blue text-accent-blue bg-accent-blue/10 font-medium`:`border-dark-border text-dark-muted hover:text-dark-text hover:bg-dark-hover`),children:t},e))}),v===`kind`&&(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1.5 px-2 py-1.5 border-b border-dark-border text-meta`,children:[(0,Y.jsx)(`span`,{className:`text-dark-muted`,children:e(`chat.kindSelectLabel`)}),(0,Y.jsx)(`select`,{value:b,onChange:e=>x(e.target.value),className:`rounded border border-dark-border bg-dark-surface px-1.5 py-0.5 text-meta text-dark-text`,children:C.map(t=>(0,Y.jsx)(`option`,{value:t.id,children:t.labelKey?e(t.labelKey):t.id},t.id))})]}),Ee&&(0,Y.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":!1,onClick:ke,title:e(`chat.followGlobalDefaultHint`),className:`flex w-full shrink-0 items-center gap-2 px-3 py-2 text-start transition-colors hover:bg-dark-hover border-b border-dark-border/60`,children:[(0,Y.jsx)(n,{size:11,className:`shrink-0 text-accent-green`}),(0,Y.jsxs)(`span`,{className:`flex-1 min-w-0`,children:[(0,Y.jsx)(`span`,{className:`text-xs font-semibold text-accent-green`,children:e(`chat.followGlobalDefault`)}),(0,Y.jsx)(`span`,{className:`block text-badge text-dark-muted mt-0.5 truncate`,children:De?De.name||De.id:e(`chat.noGlobalDefault`)})]})]}),R.length>0?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`div`,{role:`tablist`,"aria-label":e(`chat.selectProvider`),className:`flex shrink-0 items-center gap-1 px-2 py-1.5 border-b border-dark-border overflow-x-auto custom-scrollbar`,children:R.map(e=>{let t=e===k,n=ae[e]?.length||ne[e]?.models.length||0;return(0,Y.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":t,onClick:()=>{ee(e),te(``),P(null)},className:B(`shrink-0 flex items-center gap-1 text-meta px-2 py-0.5 rounded-full border transition-colors cursor-pointer`,t?`border-accent-blue text-accent-blue bg-accent-blue/10 font-medium`:`border-dark-border text-dark-muted hover:text-dark-text hover:bg-dark-hover`),children:[(0,Y.jsx)(`span`,{className:`max-w-[7rem] truncate`,children:e}),n>0&&(0,Y.jsx)(`span`,{className:`text-badge opacity-70`,children:n})]},e)})}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1.5 px-2 py-1.5 border-b border-dark-border`,children:[(0,Y.jsx)(S,{size:11,className:`shrink-0 text-dark-muted`}),(0,Y.jsx)(`input`,{value:A,onChange:e=>te(e.target.value),placeholder:e(`chat.searchModels`),"aria-label":e(`chat.searchModels`),className:`flex-1 min-w-0 bg-dark-surface text-dark-text text-xs px-2 py-1 rounded border border-dark-border placeholder-dark-muted/60 focus:outline-none focus:border-accent-blue`})]}),(0,Y.jsxs)(`div`,{className:`min-h-0 overflow-y-auto py-1 custom-scrollbar`,style:{height:253},children:[M&&xe.length===0&&(0,Y.jsxs)(`div`,{className:`px-3 py-2 text-xs text-dark-muted flex items-center gap-1.5`,children:[(0,Y.jsx)(F,{size:11,className:`animate-spin`}),e(`chat.loadingModels`)]}),!M&&N&&xe.length===0&&(0,Y.jsx)(`div`,{className:`px-3 py-2 text-xs text-accent-red`,children:N}),xe.map(t=>{let n=Te(t);return(0,Y.jsx)(`button`,{type:`button`,role:`option`,"aria-selected":n,onClick:()=>{Se(t)},className:B(`w-full shrink-0 flex items-center gap-2 px-3 py-2 text-start transition-colors`,n?`bg-dark-hover`:`hover:bg-dark-hover`),children:(0,Y.jsxs)(`span`,{className:`flex-1 min-w-0`,children:[(0,Y.jsxs)(`span`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,Y.jsx)(`span`,{className:B(`flex h-3.5 w-3.5 items-center justify-center rounded-full border transition-colors shrink-0`,n?`border-accent-green bg-accent-green/20 text-accent-green`:`border-dark-border text-transparent`),children:(0,Y.jsx)(se,{size:10,strokeWidth:3})}),(0,Y.jsx)(`span`,{className:`text-xs font-semibold text-dark-text truncate`,children:t.name||t.id})]}),(0,Y.jsxs)(`span`,{className:`flex items-center gap-1 mt-0.5 flex-wrap ps-[1.375rem]`,children:[(0,Y.jsx)(`span`,{className:`text-badge text-dark-muted truncate`,children:t.id}),t.isGlobalDefault&&(0,Y.jsx)(`span`,{className:`text-badge px-1 rounded bg-accent-red/20 text-accent-red`,children:e(`chat.globalDefault`)}),t.isActDefault&&!t.isGlobalDefault&&(0,Y.jsx)(`span`,{className:`text-badge px-1 rounded bg-accent-yellow/20 text-accent-yellow`,children:e(`chat.actDefault`)}),t.isGoalDefault&&(0,Y.jsx)(`span`,{className:`text-badge px-1 rounded bg-accent-purple/20 text-accent-purple`,children:e(`chat.goalDefault`)})]})]})},t.id)}),!M&&!N&&xe.length===0&&(0,Y.jsx)(`div`,{className:`px-3 py-2 text-xs text-dark-muted`,children:e(Ne?`chat.noModelsFound`:`chat.noProviderModels`)})]})]}):(0,Y.jsx)(`div`,{className:`px-3 py-2 text-xs text-dark-muted`,children:e(`chat.noConfiguredProviders`)})]}):(0,Y.jsx)(Y.Fragment,{children:(0,Y.jsx)(`div`,{className:`shrink-0 py-1`,children:je.map(t=>{let n=Oe[t],r=t===s;return(0,Y.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":r,onClick:()=>{c(t),ve()},className:B(`w-full flex items-center gap-2 px-3 py-1.5 text-start transition-colors`,r?`bg-dark-hover`:`hover:bg-dark-hover`),children:[(0,Y.jsx)(`span`,{className:B(`flex h-4 w-4 items-center justify-center rounded border transition-colors shrink-0`,r?`border-accent-green bg-accent-green/20 text-accent-green`:`border-dark-border text-transparent`),children:(0,Y.jsx)(se,{size:11,strokeWidth:3})}),(0,Y.jsx)(`span`,{className:`text-xs font-medium ${r?n.color:`text-dark-text`}`,children:e(n.labelKey)})]},t)})})})]}),document.body)]})});function Nt(e){let t=(e??``).toLowerCase();return t?t.includes(`android`)?`android`:t.includes(`iphone`)||t.includes(`ipad`)||t.includes(`ipod`)?`ios`:t.includes(`mac`)||t.includes(`darwin`)?`macos`:t.includes(`win`)?`windows`:t.includes(`linux`)||t.includes(`x11`)||t.includes(`cros`)?`linux`:null:null}function Pt(){if(typeof navigator>`u`)return`unknown`;let e=typeof navigator.userAgent==`string`?navigator.userAgent:``,t=Nt(e);if(t===`android`||t===`ios`)return t;let n=navigator.userAgentData,r=Nt(n?.platform);if(r)return r;let i=typeof navigator.platform==`string`?navigator.platform:``;return Nt(i)===`macos`&&(navigator.maxTouchPoints??0)>1?`ios`:Nt(i)??Nt(e)??`unknown`}function Q(){if(typeof navigator>`u`)return`unknown`;let e=`${navigator.userAgentData?.architecture??``} ${navigator.userAgent??``} ${navigator.platform??``}`.toLowerCase();return/arm|aarch64|apple silicon/.test(e)?`arm64`:/x86_64|amd64|x64|win64|wow64|intel/.test(e)?`x64`:`unknown`}function Ft(){return typeof window<`u`&&window.__TAURI__!==void 0}var It={windows:`chat.desktopDownloadOsWindows`,macos:`chat.desktopDownloadOsMacos`,linux:`chat.desktopDownloadOsLinux`,android:`chat.desktopDownloadOsAndroid`,ios:`chat.desktopDownloadOsIos`,unknown:`chat.desktopDownloadOsUnknown`},Lt=[`windows`,`macos`,`linux`];function Rt(e){if(typeof e!=`number`||!Number.isFinite(e)||e<=0)return null;let t=e/1048576;return t>=10?`${Math.round(t)} MB`:`${t.toFixed(1)} MB`}function zt(e){try{return new URL(e).host}catch{return e}}function Bt(e){return e.url||e.mirrors[0]||``}function Vt(e,t){let n=document.createElement(`a`);n.href=e,n.download=t,n.target=`_blank`,n.rel=`noopener`,n.style.display=`none`,document.body.appendChild(n),n.click(),n.remove()}var Ht=(0,J.memo)(function({onHandoffToAi:e}){let{t}=L(),[n,i]=(0,J.useState)(`idle`),[a,o]=(0,J.useState)(null),[s,c]=(0,J.useState)(!1),l=(0,J.useRef)(null),u=(0,J.useRef)(!0),d=(0,J.useRef)(!1),f=(0,J.useRef)(!1);(0,J.useEffect)(()=>(u.current=!0,()=>{u.current=!1}),[]);let m=(0,J.useMemo)(()=>Pt(),[]),g=(0,J.useMemo)(()=>Q(),[]),_=(0,J.useMemo)(()=>Ft(),[]),v=t(It[m]),b=m===`android`||m===`ios`,x=_?t(`chat.desktopDownloadOtherPlatforms`):t(`chat.desktopDownloadTitle`,{os:v}),S=t(_?`chat.desktopDownloadOtherPlatforms`:`chat.desktopDownloadRecommend`),w=a?.artifacts??{},T=w[m]?.[0],E=a?.page||xe(),D=g===`arm64`&&(m===`windows`||m===`linux`),O=(0,J.useCallback)(()=>{d.current||(d.current=!0,i(`loading`),K.system.desktopDownload().then(e=>{u.current&&(e.success&&e.data?(o(e.data),i(`ready`)):i(`failed`))}).catch(()=>{u.current&&i(`failed`)}))},[]);(0,J.useEffect)(()=>{if(!s)return;let e=e=>{l.current?.contains(e.target)||c(!1)},t=e=>{e.key===`Escape`&&c(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[s]);let k=(0,J.useCallback)(()=>{window.open(E,`_blank`,`noopener`)},[E]),ee=(0,J.useCallback)(e=>{let n=Bt(e);c(!1),n?(Vt(n,e.name),e.url&&e.source===`mirror`&&z.info(t(`chat.desktopDownloadViaMirrorToast`))):(k(),z.warning(t(`chat.desktopDownloadUnavailable`)))},[k,t]),A=(0,J.useCallback)(()=>{b?(k(),z.info(t(`chat.desktopDownloadMobileHint`))):n===`failed`?(k(),z.warning(t(`chat.desktopDownloadUnavailable`))):n===`ready`?T?ee(T):(k(),z.warning(t(`chat.desktopDownloadUnavailable`))):(f.current=!0,O(),z.info(t(`chat.desktopDownloadFetching`)))},[ee,b,k,T,O,n,t]);(0,J.useEffect)(()=>{(n===`ready`||n===`failed`)&&f.current&&(f.current=!1,A())},[n,A]);let te=(0,J.useCallback)(()=>{let n=T?Bt(T):E,r=(T?.mirrors??[]).slice(0,3).join(` `);e(t(`chat.desktopDownloadPrompt`,{os:v,url:n||E,mirrors:r||t(`chat.desktopDownloadPromptNoMirror`)})),c(!1),z.success(t(`chat.desktopDownloadHandToAiHint`))},[e,v,T,E,t]),ne=(e,n,r)=>{let i=Rt(e.size),a=ge(e.name);return(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>ee(e),className:`flex w-full items-center gap-2 px-3 py-1.5 text-start text-xs text-dark-text transition-colors hover:bg-dark-hover`,children:[(0,Y.jsx)(y,{size:12,className:`shrink-0 text-dark-muted`,"aria-hidden":`true`}),(0,Y.jsxs)(`span`,{className:`min-w-0 flex-1 truncate`,children:[(0,Y.jsxs)(`span`,{className:`font-medium`,children:[r?`${t(It[n])} · `:``,a]}),e.source===`mirror`&&(0,Y.jsx)(`span`,{className:`ms-1.5 rounded bg-accent-yellow/15 px-1 py-0.5 text-badge text-accent-yellow`,children:t(`chat.desktopDownloadFromMirror`)}),(0,Y.jsx)(`span`,{className:`mt-0.5 block truncate text-badge text-dark-muted`,children:e.name})]}),i&&(0,Y.jsx)(`span`,{className:`shrink-0 text-badge text-dark-muted`,children:t(`chat.desktopDownloadSize`,{size:i})})]},`${n}-${e.name}`)},re=Lt.filter(e=>e!==m&&(w[e]?.length??0)>0),ie=T?.mirrors??[];return(0,Y.jsxs)(`div`,{className:`relative flex shrink-0 items-center`,ref:l,onPointerEnter:O,onFocus:O,children:[(0,Y.jsxs)(`button`,{type:`button`,onClick:A,className:`flex h-8 items-center gap-1.5 rounded-s-full ps-2.5 pe-1.5 text-meta font-medium text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,title:x,"aria-label":x,children:[(0,Y.jsx)(y,{size:14,className:`shrink-0`,"aria-hidden":`true`}),(0,Y.jsx)(`span`,{className:`hidden whitespace-nowrap sm:inline`,children:S})]}),(0,Y.jsx)(`button`,{type:`button`,onClick:()=>{s||O(),c(!s)},className:`flex h-8 w-4 items-center justify-center rounded-e-full text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,title:t(`chat.desktopDownloadMenu`),"aria-label":t(`chat.desktopDownloadMenu`),"aria-haspopup":`menu`,"aria-expanded":s,children:(0,Y.jsx)(C,{size:11,className:B(`transition-transform`,s&&`rotate-180`),"aria-hidden":`true`})}),s&&(0,Y.jsxs)(`div`,{role:`menu`,"aria-label":t(`chat.desktopDownloadMenu`),className:`absolute bottom-full left-0 mb-1 z-50 w-72 overflow-hidden rounded-lg border border-dark-border bg-dark-overlay ui-surface-overlay shadow-pop`,children:[(0,Y.jsx)(`div`,{className:`border-b border-dark-border px-3 py-1.5 text-badge font-semibold uppercase tracking-wide text-dark-muted`,children:t(`chat.desktopDownloadYourSystem`,{os:v})}),(0,Y.jsx)(`div`,{className:`py-1`,children:(w[m]??[]).length>0?(w[m]??[]).map(e=>ne(e,m,!1)):(0,Y.jsx)(`div`,{className:`px-3 py-1.5 text-meta leading-relaxed text-dark-muted`,children:t(b?`chat.desktopDownloadMobileMenuHint`:n===`failed`?`chat.desktopDownloadUnavailable`:`chat.desktopDownloadLoading`)})}),D&&(0,Y.jsx)(`div`,{className:`border-t border-dark-border px-3 py-1.5 text-badge leading-relaxed text-accent-yellow`,children:t(`chat.desktopDownloadArmHint`)}),re.length>0&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`div`,{className:`border-y border-dark-border px-3 py-1.5 text-badge font-semibold uppercase tracking-wide text-dark-muted`,children:t(`chat.desktopDownloadOtherSystems`)}),(0,Y.jsx)(`div`,{className:`py-1`,children:[...re].flatMap(e=>(w[e]??[]).map(t=>ne(t,e,!0)))})]}),(0,Y.jsx)(`div`,{className:`border-y border-dark-border px-3 py-1.5 text-badge font-semibold uppercase tracking-wide text-dark-muted`,children:t(`chat.desktopDownloadTrouble`)}),(0,Y.jsxs)(`div`,{className:`py-1`,children:[ie.slice(0,2).map(e=>(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>{c(!1),Vt(e,T?.name??``)},className:`flex w-full items-center gap-2 px-3 py-1.5 text-start text-xs text-dark-text transition-colors hover:bg-dark-hover`,children:[(0,Y.jsx)(h,{size:12,className:`shrink-0 text-dark-muted`,"aria-hidden":`true`}),(0,Y.jsx)(`span`,{className:`truncate`,children:t(`chat.desktopDownloadViaMirror`,{host:zt(e)})})]},e)),(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>{c(!1),k()},className:`flex w-full items-center gap-2 px-3 py-1.5 text-start text-xs text-dark-text transition-colors hover:bg-dark-hover`,children:[(0,Y.jsx)(h,{size:12,className:`shrink-0 text-dark-muted`,"aria-hidden":`true`}),(0,Y.jsx)(`span`,{className:`truncate`,children:t(`chat.desktopDownloadOpenRelease`)})]})]}),(0,Y.jsx)(`div`,{className:`border-t border-dark-border`,children:(0,Y.jsxs)(`button`,{type:`button`,onClick:te,className:`flex w-full items-center gap-2 px-3 py-2 text-start text-xs text-accent-blue transition-colors hover:bg-dark-hover`,children:[(0,Y.jsx)(p,{size:12,className:`shrink-0`,"aria-hidden":`true`}),(0,Y.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,Y.jsx)(`span`,{className:`font-medium`,children:t(`chat.desktopDownloadHandToAi`)}),(0,Y.jsx)(`span`,{className:`mt-0.5 block text-badge text-dark-muted`,children:t(`chat.desktopDownloadHandToAiDesc`)})]})]})}),m===`macos`&&(0,Y.jsx)(`div`,{className:`border-t border-dark-border px-3 py-1.5 text-badge leading-relaxed text-dark-muted/80`,children:t(`chat.desktopDownloadMacUnsignedHint`)}),n!==`ready`&&n!==`failed`&&(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 border-t border-dark-border px-3 py-1.5 text-badge text-dark-muted`,children:[(0,Y.jsx)(r,{size:10,className:`animate-spin`,"aria-hidden":`true`}),t(`chat.desktopDownloadFetching`)]})]})]})});function Ut(e,t){if(!e)return t;let n=e.includes(`\\`)?`\\`:`/`;return e.endsWith(n)?e+t:e+n+t}function Wt(e,t=48){let n=e.replace(/[\\/]+$/,``);if(n.length<=t)return n;let r=n.includes(`\\`)?`\\`:`/`;return`…${r}${n.split(/[\\/]+/).filter(Boolean).slice(-2).join(r)}`}function Gt(e){return e.replace(/[\\/]+/g,`/`).replace(/\/+$/,``).toLowerCase()}function Kt({isOpen:e,initial:t,onClose:n,onConfirm:i}){let{t:a}=L(),{visible:o,phase:s}=Be(e),[l,u]=(0,J.useState)(t),[d,f]=(0,J.useState)(null),[p,m]=(0,J.useState)([]),[h,g]=(0,J.useState)(!1),[_,v]=(0,J.useState)(``),[y,b]=(0,J.useState)(t),x=(0,J.useRef)(null),S=(0,J.useCallback)(async e=>{g(!0),v(``);try{let t=await K.dirs.list(e);if(!t.success||!t.data){v(t.error||a(`chat.dirPickerLoadError`));return}u(t.data.path),f(t.data.parent),m(t.data.dirs||[]),b(t.data.path)}catch(e){v(e instanceof Error?e.message:a(`chat.dirPickerLoadError`))}finally{g(!1)}},[a]);(0,J.useEffect)(()=>{e&&S(t)},[e,t,S]),(0,J.useEffect)(()=>{x.current?.focus()},[]),(0,J.useEffect)(()=>{if(!e)return;let t=e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),n())};return document.addEventListener(`keydown`,t),document.body.style.overflow=`hidden`,()=>{document.removeEventListener(`keydown`,t),document.body.style.overflow=``}},[e,n]);let C=(0,J.useCallback)(()=>{let e=y.trim();e&&S(e)},[y,S]),T=(0,J.useCallback)(()=>{d&&S(d)},[d,S]);return o?(0,Y.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center overflow-hidden p-4`,role:`dialog`,"aria-modal":`true`,children:[(0,Y.jsx)(`div`,{className:`absolute inset-0 ui-scrim ui-overlay-backdrop`,"data-phase":s,onClick:n}),(0,Y.jsxs)(`div`,{className:`relative w-full max-w-lg mx-4 bg-dark-overlay ui-surface-overlay border border-dark-border rounded-xl shadow-pop flex flex-col max-h-[70vh] ui-overlay-panel`,"data-phase":s,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2.5 border-b border-dark-border shrink-0`,children:[(0,Y.jsxs)(`span`,{className:`flex items-center gap-2 text-compact font-semibold text-dark-text`,children:[(0,Y.jsx)(N,{size:15,className:`text-accent-blue`,"aria-hidden":`true`}),a(`chat.dirPickerTitle`)]}),(0,Y.jsx)(`button`,{type:`button`,onClick:n,className:`rounded p-1 text-dark-muted hover:bg-dark-hover hover:text-dark-text transition-colors`,"aria-label":a(`a11y.close`),children:(0,Y.jsx)(ae,{size:15,"aria-hidden":`true`})})]}),(0,Y.jsxs)(`div`,{className:`p-4 flex flex-col gap-3 min-h-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsxs)(`div`,{className:`relative flex-1`,children:[(0,Y.jsx)(w,{size:13,className:`absolute start-2.5 top-1/2 -translate-y-1/2 text-dark-muted/60`,"aria-hidden":`true`}),(0,Y.jsx)(`input`,{ref:x,value:y,onChange:e=>b(e.target.value),onKeyDown:e=>{e.key===`Enter`&&C()},placeholder:a(`chat.dirPickerEnterPath`),spellCheck:!1,className:`w-full rounded-lg border border-dark-border bg-dark-surface ps-8 pe-2.5 py-1.5 text-xs font-mono text-dark-text
3
- placeholder-dark-muted/50 focus:outline-none focus:border-accent-blue/50 focus:ring-2 focus:ring-accent-blue/10`})]}),(0,Y.jsx)(`button`,{type:`button`,onClick:C,disabled:h||!y.trim(),className:`shrink-0 rounded-lg border border-dark-border px-2.5 py-1.5 text-xs text-dark-muted
4
- hover:bg-dark-hover hover:text-dark-text disabled:opacity-40 transition-colors`,children:a(`chat.dirPickerGo`)})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`span`,{className:`flex-1 truncate font-mono text-meta text-dark-muted bg-dark-surface rounded-md px-2 py-1 border border-dark-border`,title:l,children:l||a(`chat.noWorkspaceDir`)}),(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>void T(),disabled:h||!l,className:`shrink-0 flex items-center gap-1 rounded-md border border-dark-border px-2 py-1 text-meta text-dark-muted
5
- hover:bg-dark-hover hover:text-dark-text disabled:opacity-40 transition-colors`,children:[(0,Y.jsx)(c,{size:12,"aria-hidden":`true`}),a(`chat.dirPickerUp`)]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar rounded-lg border border-dark-border bg-dark-surface divide-y divide-dark-border/60`,children:h?(0,Y.jsxs)(`div`,{className:`flex items-center justify-center gap-2 py-6 text-xs text-dark-muted`,children:[(0,Y.jsx)(r,{size:14,className:`animate-spin`,"aria-hidden":`true`}),a(`chat.loading`)]}):_?(0,Y.jsx)(`div`,{className:`px-3 py-4 text-xs text-accent-red`,children:_}):p.length===0?(0,Y.jsx)(`div`,{className:`px-3 py-4 text-xs text-dark-muted/60 text-center`,children:a(`chat.dirPickerNoDirs`)}):p.map(e=>{let t=Ut(l,e);return(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>void S(t),className:`w-full flex items-center gap-2 px-3 py-1.5 text-start text-xs text-dark-text
6
- hover:bg-dark-hover transition-colors group`,children:[(0,Y.jsx)(A,{size:13,className:`shrink-0 text-accent-yellow/80 group-hover:text-accent-yellow`,"aria-hidden":`true`}),(0,Y.jsx)(`span`,{className:`truncate`,children:e}),(0,Y.jsx)(P,{size:12,className:`shrink-0 ms-auto text-dark-muted/40`,"aria-hidden":`true`})]},e)})}),(0,Y.jsx)(Pe,{variant:`accent`,className:`w-full`,onClick:()=>i(l),disabled:!l,loading:h,children:a(`chat.dirPickerConfirm`)})]})]})]}):null}var qt=(0,J.memo)(function({workspaceDir:e,onSelect:t,onNewSessionInDir:n}){let{t:r}=L(),i=Ae(e=>e.recentDirs),a=Ue(e=>e.projects),o=Ue(e=>e.hidden),s=Ue(e=>e.sort),c=Ue(e=>e.disabled),l=Ue(e=>e.lastError),[u,d]=(0,J.useState)(!1),[f,p]=(0,J.useState)(!1),m=(0,J.useRef)(null);(0,J.useEffect)(()=>{if(!u)return;let e=Ue.getState();e.disabled||e.lastFetchedAt>0||e.refresh()},[u]),(0,J.useEffect)(()=>{if(!u)return;let e=e=>{m.current&&!m.current.contains(e.target)&&d(!1)},t=e=>{e.key===`Escape`&&d(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[u]);let h=(0,J.useCallback)(e=>{let n=e?.trim?.()||``;n&&(d(!1),p(!1),t(n))},[t]),g=(0,J.useCallback)(e=>{let t=e?.trim?.()||``;t&&n&&(d(!1),p(!1),n(t))},[n]),_=new Set(o),v=c?[]:We(a.filter(e=>e.rootExists&&!_.has(e.projectId)),s),y=new Set(v.map(e=>Gt(e.root))),b=i.filter(e=>!y.has(Gt(e))),x=e?Gt(e):null,S=v.length>0||a.length===0&&!c&&l!==null;return(0,Y.jsxs)(`div`,{className:`relative min-w-0 max-w-[min(70%,26rem)]`,ref:m,children:[(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>d(e=>!e),className:B(`flex w-full items-center gap-1 px-2 py-0.5 rounded-full border text-xs whitespace-nowrap transition-colors cursor-pointer`,u?`border-accent-blue/40 text-accent-blue bg-accent-blue/10`:`border-dark-border text-dark-muted hover:bg-dark-hover hover:text-dark-text`),title:e?`${e}\n${r(`chat.clickToSwitchDir`)}`:r(`chat.clickToSwitchDir`),"aria-label":r(`chat.clickToSwitchDir`),"aria-expanded":u,"aria-haspopup":`menu`,children:[(0,Y.jsx)(N,{size:12,className:`shrink-0 text-accent-blue/80`,"aria-hidden":`true`}),(0,Y.jsx)(`span`,{className:`truncate font-mono text-meta`,children:e?Wt(e):r(`chat.noWorkspaceDir`)}),(0,Y.jsx)(T,{size:11,className:B(`shrink-0 transition-transform`,u&&`rotate-180`),"aria-hidden":`true`})]}),u&&(0,Y.jsxs)(`div`,{role:`menu`,className:`absolute bottom-full right-0 mb-2 w-72 max-w-[calc(100vw-1.5rem)] max-h-[70vh] overflow-y-auto custom-scrollbar rounded-xl border border-dark-border bg-dark-overlay ui-surface-overlay shadow-pop z-40 animate-fade-in`,children:[S&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`div`,{className:`px-3 pt-2.5 pb-1 text-badge font-semibold uppercase tracking-wide text-dark-muted/50 select-none`,children:r(`chat.projectDirs`)}),v.length===0?(0,Y.jsx)(`div`,{className:`px-3 pb-2 text-meta text-accent-red/80 select-none`,children:r(`chat.projectsLoadFailed`)}):(0,Y.jsx)(`div`,{className:`max-h-44 overflow-y-auto custom-scrollbar`,"data-testid":`dir-picker-projects`,children:v.map(e=>{let t=x!==null&&Gt(e.root)===x;return(0,Y.jsxs)(`div`,{className:`flex items-stretch`,children:[(0,Y.jsxs)(`button`,{type:`button`,role:`menuitem`,"data-testid":`dir-picker-project-row`,"data-project-id":e.projectId,onClick:()=>h(e.root),className:B(`min-w-0 flex-1 flex items-center gap-2 px-3 py-1.5 text-start text-xs transition-colors group`,t?`text-accent-blue bg-accent-blue/5`:`text-dark-text hover:bg-dark-hover`),title:`${r(`chat.dirSwitchHere`)}\n${e.root}`,children:[(0,Y.jsx)(A,{size:12,className:B(`shrink-0`,t?`text-accent-blue`:`text-accent-yellow/80 group-hover:text-accent-yellow`),"aria-hidden":`true`}),(0,Y.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,Y.jsx)(`span`,{className:`block truncate`,children:e.name}),(0,Y.jsx)(`span`,{className:`block truncate font-mono text-meta text-dark-muted/60`,children:e.root})]}),t&&(0,Y.jsx)(`span`,{className:`shrink-0 text-badge text-accent-blue`,children:`✓`})]}),n&&(0,Y.jsx)(`button`,{type:`button`,"data-testid":`dir-picker-project-new-session`,"data-project-id":e.projectId,onClick:t=>{t.stopPropagation(),g(e.root)},className:`shrink-0 px-2 text-dark-muted hover:text-accent-blue hover:bg-dark-hover transition-colors`,title:r(`chat.dirNewSessionHere`),"aria-label":`${r(`chat.dirNewSessionHere`)}:${e.name}`,children:(0,Y.jsx)(j,{size:12,"aria-hidden":`true`})})]},e.projectId)})}),(0,Y.jsx)(`div`,{className:`border-t border-dark-border`})]}),(0,Y.jsx)(`div`,{className:`px-3 pt-2.5 pb-1 text-badge font-semibold uppercase tracking-wide text-dark-muted/50 select-none`,children:r(`chat.recentDirs`)}),b.length===0?(0,Y.jsx)(`div`,{className:`px-3 pb-2 text-meta text-dark-muted/50 select-none`,children:r(`chat.noRecentDirs`)}):(0,Y.jsx)(`div`,{className:`max-h-56 overflow-y-auto custom-scrollbar`,children:b.map(e=>{let t=x!==null&&Gt(e)===x;return(0,Y.jsxs)(`div`,{className:`flex items-stretch`,children:[(0,Y.jsxs)(`button`,{type:`button`,role:`menuitem`,"data-testid":`dir-picker-recent-row`,onClick:()=>h(e),className:B(`min-w-0 flex-1 flex items-center gap-2 px-3 py-1.5 text-start text-xs transition-colors group`,t?`text-accent-blue bg-accent-blue/5`:`text-dark-text hover:bg-dark-hover`),title:`${r(`chat.dirSwitchHere`)}\n${e}`,children:[(0,Y.jsx)(A,{size:12,className:B(`shrink-0`,t?`text-accent-blue`:`text-accent-yellow/80 group-hover:text-accent-yellow`),"aria-hidden":`true`}),(0,Y.jsx)(`span`,{className:`min-w-0 flex-1 truncate font-mono text-meta`,children:e}),t&&(0,Y.jsx)(`span`,{className:`ms-auto shrink-0 text-badge text-accent-blue`,children:`✓`})]}),n&&(0,Y.jsx)(`button`,{type:`button`,"data-testid":`dir-picker-recent-new-session`,onClick:t=>{t.stopPropagation(),g(e)},className:`shrink-0 px-2 text-dark-muted hover:text-accent-blue hover:bg-dark-hover transition-colors`,title:r(`chat.dirNewSessionHere`),"aria-label":`${r(`chat.dirNewSessionHere`)}:${e}`,children:(0,Y.jsx)(j,{size:12,"aria-hidden":`true`})})]},e)})}),(0,Y.jsx)(`div`,{className:`border-t border-dark-border`}),(0,Y.jsxs)(`button`,{type:`button`,role:`menuitem`,onClick:()=>{d(!1),p(!0)},className:`w-full flex items-center gap-2 px-3 py-2 text-start text-xs text-accent-blue hover:bg-dark-hover transition-colors`,children:[(0,Y.jsx)(P,{size:13,"aria-hidden":`true`}),r(`chat.chooseOtherDir`)]})]}),(0,Z.createPortal)((0,Y.jsx)(Kt,{isOpen:f,initial:e||``,onClose:()=>p(!1),onConfirm:h}),document.body)]})}),Jt=`__files__`,Yt=`__sessions__`;function Xt(e){return e===`enqueue`?`summarize`:e===`summarize`?`next-step`:e===`next-step`?`direct`:`enqueue`}function Zt(e){return e.replace(/[\\/]+$/,``).replace(/\\/g,`/`).toLowerCase()}function Qt(e){return[{key:Jt,label:e.files},{key:Yt,label:e.sessions}]}function $t(e){return e?Zt(e):`￿`}function en(e,t){return t===`__files__`?e.filter(e=>e.kind===`file`):[...e.filter(e=>e.kind===`session`)].sort((e,t)=>$t(e.kind===`session`?e.dir:``).localeCompare($t(t.kind===`session`?t.dir:``)))}function tn(e,t,n){if(e.length===0)return t;let r=e.indexOf(t),i=r<0?-1:r;return n?e[(i+1)%e.length]:e[((i<0?e.length:i)-1+e.length)%e.length]}var nn=new Set([`running`]);function rn(e){return nn.has(String(e.status||``))?!0:e.live===!0}function an(e,t){let n=[];for(let r of e){let e=String(r.id||r.sessionId||``);if(!e||e===t)continue;let i=String(r.title||e.slice(0,8));n.push({kind:`session`,key:e,label:i,detail:e.slice(0,8),dir:String(r.workspaceDir||``),status:r.status===void 0?void 0:String(r.status),updatedAt:r.updatedAt===void 0?void 0:String(r.updatedAt),messageCount:typeof r.messageCount==`number`?r.messageCount:void 0})}return n}function on(e,t,n=`active`){let r=an(e,t);if(n===`all`)return r;let i=new Map(e.map(e=>[String(e.id||e.sessionId||``),e]));return r.filter(e=>{let t=i.get(e.key);return t?rn(t):!1})}var sn={enqueue:`chat.mentionDeliveryEnqueue`,summarize:`chat.mentionDeliverySummarize`,"next-step":`chat.mentionDeliveryNextStep`,direct:`chat.mentionDeliveryDirect`},cn={enqueue:`text-dark-muted hover:text-dark-text hover:bg-dark-hover`,summarize:`text-dark-muted hover:text-dark-text hover:bg-dark-hover`,"next-step":`bg-accent-blue/20 text-accent-blue font-medium`,direct:`bg-accent-green/20 text-accent-green font-medium`};function ln(e){return e===`running`?`bg-accent-green/15 text-accent-green`:e===`paused`||e===`interrupted`||e===`error`?`bg-accent-yellow/15 text-accent-yellow`:`bg-dark-hover text-dark-muted`}function un(e){return e===`running`?`chat.mentionStatusRunning`:e===`paused`||e===`interrupted`?`chat.mentionStatusPaused`:e===`error`?`chat.mentionStatusError`:e===`stopped`?`chat.mentionStatusStopped`:`chat.mentionStatusIdle`}function dn(e){return e?/^\d{12,}$/.test(e)?Number(e):e:0}function fn({isOpen:e,items:t,selectedIndex:n,query:a,isSearching:o,onSelect:s,onHover:c,selectedCount:l=0,onFinish:u,tabs:d,activeTab:f,onTabChange:p,scope:m=`active`,onToggleScope:h,deliveryMode:g=`enqueue`,onToggleDelivery:_}){let{t:v}=L(),{visible:y,phase:b}=Be(e);if(!y)return null;let x=!!(p&&d&&d.length>1);return(0,Y.jsxs)(`div`,{className:`absolute bottom-full left-0 right-0 mb-2 bg-dark-overlay ui-surface-overlay border border-dark-border rounded-lg shadow-pop overflow-hidden z-50 ui-overlay-panel-fade`,"data-phase":b,children:[(0,Y.jsxs)(`div`,{className:`max-h-60 overflow-y-auto custom-scrollbar`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 text-meta text-dark-muted border-b border-dark-border bg-dark-surface`,children:[(0,Y.jsx)(`span`,{className:`font-medium text-dark-text`,children:a?`@${a}`:`@ ${v(`chat.mentionFilesGroup`)} / ${v(`chat.mentionSessionsGroup`)}`}),(0,Y.jsxs)(`span`,{className:`opacity-70 flex items-center gap-2`,children:[l>0&&(0,Y.jsx)(`span`,{className:`px-1.5 py-0.5 rounded-full bg-accent-blue/20 text-accent-blue font-medium`,children:v(`chat.selectedCountShort`,{n:l})}),(0,Y.jsx)(`span`,{children:v(x?`chat.mentionTabHint`:`chat.fileMentionHelpMulti`)})]})]}),x&&(0,Y.jsx)(`div`,{className:`flex items-center gap-1 px-3 py-1.5 border-b border-dark-border bg-dark-surface overflow-x-auto custom-scrollbar`,children:d.map(e=>{let t=e.key===f;return(0,Y.jsx)(`button`,{type:`button`,onMouseDown:t=>{t.preventDefault(),p(e.key)},className:`px-2 py-0.5 rounded text-meta whitespace-nowrap transition-colors ${t?`bg-accent-blue/20 text-accent-blue font-medium`:`text-dark-muted hover:text-dark-text hover:bg-dark-hover`}`,children:e.label},e.key)})}),t.length===0?(0,Y.jsx)(`div`,{className:`px-3 py-6 text-center text-dark-muted text-xs flex flex-col items-center gap-1`,children:o?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(r,{size:16,className:`animate-spin`}),(0,Y.jsx)(`span`,{children:v(`chat.searchingFiles`)})]}):(0,Y.jsx)(`span`,{children:v(x&&f!==`__files__`?`chat.mentionEmptySessions`:`chat.noMatchingFiles`)})}):t.map((e,r)=>{let a=t[r-1],o=a&&a.kind===`session`?a.dir||``:null,l=e.kind===`session`?e.dir||``:null,u=!a||a.kind!==e.kind||l!==null&&o!==l,d=l===null?v(`chat.mentionFilesGroup`):`📁 ${l||v(`chat.mentionTabUnknownDir`)}`;return(0,Y.jsxs)(`div`,{children:[u&&(0,Y.jsx)(`div`,{className:`px-3 pt-2 pb-1 text-badge uppercase tracking-wide text-dark-muted/70 bg-dark-surface/40 truncate`,title:d,children:d}),(0,Y.jsxs)(`button`,{onClick:()=>s(e),onMouseEnter:()=>c(r),className:`w-full px-3 py-1.5 flex items-center gap-2 text-start text-xs transition-colors border-s-2 ${r===n?`bg-accent-blue/20 text-accent-blue border-accent-blue`:`hover:bg-dark-hover text-dark-text border-transparent`}`,children:[e.kind===`session`?(0,Y.jsx)(oe,{size:12,className:`text-accent-blue shrink-0`}):e.isDir?(0,Y.jsx)(A,{size:12,className:`text-accent-yellow shrink-0`}):(0,Y.jsx)(i,{size:12,className:`text-dark-muted shrink-0`}),(0,Y.jsx)(`span`,{className:`truncate`,children:e.label}),e.kind===`session`?(0,Y.jsxs)(`span`,{className:`ms-auto flex shrink-0 items-center gap-1.5`,children:[e.detail&&(0,Y.jsx)(`span`,{className:`text-badge text-dark-muted truncate`,children:e.detail}),e.updatedAt&&(0,Y.jsx)(`span`,{className:`text-badge text-dark-muted/70`,children:V(dn(e.updatedAt),Date.now(),v)}),e.messageCount!==void 0&&(0,Y.jsx)(`span`,{className:`text-badge text-dark-muted/70`,children:v(`chat.mentionMsgCount`,{count:e.messageCount})}),(0,Y.jsx)(`span`,{className:`px-1.5 py-0.5 rounded-full text-badge whitespace-nowrap ${ln(e.status)}`,children:v(un(e.status))})]}):e.detail&&(0,Y.jsx)(`span`,{className:`text-badge text-dark-muted truncate ms-auto`,children:e.detail})]})]},e.key)})]}),u&&(0,Y.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 border-t border-dark-border bg-dark-surface`,children:[(0,Y.jsxs)(`span`,{className:`flex items-center gap-2 text-badge text-dark-muted`,children:[x&&h&&(0,Y.jsxs)(`button`,{type:`button`,onMouseDown:e=>e.preventDefault(),onClick:h,className:`px-1.5 py-0.5 rounded text-badge transition-colors ${m===`all`?`bg-accent-blue/20 text-accent-blue font-medium`:`text-dark-muted hover:text-dark-text hover:bg-dark-hover`}`,title:v(`chat.mentionScopeHint`),children:[v(`chat.mentionScopeLabel`),v(m===`all`?`chat.mentionScopeAll`:`chat.mentionScopeActive`)]}),x&&_&&(0,Y.jsxs)(`button`,{type:`button`,onMouseDown:e=>e.preventDefault(),onClick:_,className:`px-1.5 py-0.5 rounded text-badge transition-colors ${cn[g]}`,title:v(`chat.mentionDeliveryHint`),children:[v(`chat.mentionDeliveryLabel`),v(sn[g])]}),(0,Y.jsx)(`span`,{children:l>0?v(`chat.selectedFilesCount`,{n:l}):v(`chat.enterInsertMulti`)})]}),(0,Y.jsx)(Pe,{variant:`accent`,size:`sm`,onClick:u,children:v(`chat.finishMention`)})]})]})}function pn({open:e,onClose:n,onSelect:r}){let{t:i}=L(),[a,o]=(0,J.useState)([]),[s,c]=(0,J.useState)(!1),[l,u]=(0,J.useState)(``);(0,J.useEffect)(()=>{e&&(u(``),c(!0),K.skills.list().then(e=>{let t=Array.isArray(e.data)?e.data:[];o(t.filter(e=>e.enabled!==!1))}).catch(()=>o([])).finally(()=>c(!1)))},[e]);let d=(0,J.useMemo)(()=>{let e=l.trim().toLowerCase();return e?a.filter(t=>[t.id,t.name,t.description,t.category,...t.tags||[]].join(` `).toLowerCase().includes(e)):a},[a,l]);return(0,Y.jsx)(ze,{isOpen:e,onClose:n,title:i(`skills.pickTitle`),size:`lg`,children:(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 rounded-lg bg-dark-bg border border-dark-border focus-within:border-accent-blue`,children:[(0,Y.jsx)(S,{size:14,className:`text-dark-muted shrink-0`}),(0,Y.jsx)(`input`,{value:l,onChange:e=>u(e.target.value),placeholder:i(`skills.pickPlaceholder`),autoFocus:!0,className:`flex-1 bg-transparent outline-none text-sm placeholder-dark-muted/60`}),s&&(0,Y.jsx)(t,{size:13,className:`animate-spin text-dark-muted`})]}),s?(0,Y.jsx)(`div`,{className:`flex items-center justify-center py-12`,children:(0,Y.jsx)(t,{size:20,className:`animate-spin text-accent-blue`})}):d.length===0?(0,Y.jsx)(`div`,{className:`text-center py-12 text-sm text-dark-muted`,children:i(`skills.pickEmpty`)}):(0,Y.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-2`,children:d.map(e=>(0,Y.jsxs)(`button`,{onClick:()=>r(e),className:`text-start rounded-lg border border-dark-border p-3 flex flex-col gap-1 transition-colors hover:border-accent-blue/50 hover:bg-dark-hover`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 min-w-0`,children:[(0,Y.jsxs)(`span`,{className:`font-medium text-sm truncate`,children:[e.icon||`⭐`,` `,e.name]}),(0,Y.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-dark-bg border border-dark-border text-dark-muted shrink-0`,children:e.injection||`lazy`})]}),(0,Y.jsxs)(`div`,{className:`text-xs text-dark-muted truncate font-mono`,children:[`$`,e.id]}),e.description&&(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted line-clamp-2`,children:e.description}),(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mt-1`,children:[(0,Y.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-dark-bg border border-dark-border text-dark-muted truncate`,children:e.category||`—`}),(0,Y.jsxs)(`span`,{className:`flex items-center gap-1 text-meta text-accent-blue shrink-0`,children:[(0,Y.jsx)(M,{size:11}),i(`skills.pickUse`)]})]})]},e.id))})]})})}function mn({isOpen:e,items:t,selectedIndex:n,query:i,isLoading:a,onSelect:o,onHover:s}){let{t:c}=L(),{visible:l,phase:u}=Be(e);return l?(0,Y.jsx)(`div`,{className:`absolute bottom-full left-0 right-0 mb-2 bg-dark-overlay ui-surface-overlay border border-dark-border rounded-lg shadow-pop overflow-hidden z-50 ui-overlay-panel-fade`,"data-phase":u,children:(0,Y.jsxs)(`div`,{className:`max-h-60 overflow-y-auto custom-scrollbar`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 text-meta text-dark-muted border-b border-dark-border bg-dark-surface`,children:[(0,Y.jsx)(`span`,{className:`font-medium text-dark-text truncate`,children:i?`$${i}`:c(`chat.skillMenuTitle`)}),(0,Y.jsx)(`span`,{className:`opacity-70 shrink-0`,children:c(`chat.skillMenuHint`)})]}),t.length===0?(0,Y.jsx)(`div`,{className:`px-3 py-6 text-center text-dark-muted text-xs flex flex-col items-center gap-1`,children:a?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(r,{size:16,className:`animate-spin`}),(0,Y.jsx)(`span`,{children:c(`chat.skillMenuLoading`)})]}):(0,Y.jsx)(`span`,{children:c(`chat.skillMenuEmpty`)})}):t.map((e,t)=>(0,Y.jsxs)(`button`,{onClick:()=>o(e),onMouseEnter:()=>s(t),className:`w-full px-3 py-1.5 flex items-center gap-2 text-start text-xs transition-colors border-s-2 ${t===n?`bg-accent-blue/20 text-accent-blue border-accent-blue`:`hover:bg-dark-hover text-dark-text border-transparent`}`,children:[(0,Y.jsx)(`span`,{className:`shrink-0`,"aria-hidden":`true`,children:e.icon||(0,Y.jsx)(p,{size:12,className:`text-accent-blue`})}),(0,Y.jsx)(`span`,{className:`truncate`,children:e.name||e.id}),(0,Y.jsxs)(`span`,{className:`text-badge font-mono text-dark-muted shrink-0`,children:[`$`,e.id]}),e.description&&(0,Y.jsx)(`span`,{className:`text-badge text-dark-muted truncate ms-auto`,children:e.description})]},e.id))]})}):null}function hn(e){for(let t=e.length-1;t>=0;t--)if(e[t]===`$`){if(t>0&&/\w/.test(e.charAt(t-1)))continue;return t}return-1}function gn(e,t){let n=t.filter(e=>e.enabled!==!1);if(!e)return`prefix`;for(let t of n)if(t.id.toLowerCase()===e)return`exact`;for(let t of n)if(t.id.toLowerCase().startsWith(e))return`prefix`;return null}function _n(e,t,n){let r=e.slice(0,t),i=hn(r);if(i===-1)return{active:!1,query:``,start:-1};let a=r.slice(i+1);if(a.length>=200||!/^[\w.\-\\/\s]*$/.test(a))return{active:!1,query:``,start:-1};let o=(a.split(/[\s/\\]/)[0]??``).toLowerCase();return(n.length===0?`prefix`:gn(o,n))===`prefix`?{active:!0,query:a,start:i}:{active:!1,query:``,start:-1}}function vn(e,t){let n=t.trim().toLowerCase();if(!n)return 1;let r=e.id.toLowerCase(),i=(e.name||``).toLowerCase(),a=(e.description||``).toLowerCase(),o=(e.tags||[]).join(` `).toLowerCase();return r===n||i===n?100:r.startsWith(n)?90:i.startsWith(n)?80:r.includes(n)?60:i.includes(n)?55:o.includes(n)?40:a.includes(n)?30:0}function yn(e,t){let n=t.replace(/^\$/,``).trim().split(/\s+/)[0]??``;return e.filter(e=>e.enabled!==!1).map(e=>({skill:e,score:vn(e,n)})).filter(e=>e.score>0).sort((e,t)=>t.score-e.score||e.skill.id.localeCompare(t.skill.id)).map(e=>e.skill)}var bn=class extends Error{code;constructor(e,t){super(t??e),this.code=e,this.name=`ScreenshotError`}};function xn(e){let t=document.createElement(`canvas`);t.width=e.videoWidth,t.height=e.videoHeight;let n=t.getContext(`2d`);if(!n)throw new bn(`failed`,`Canvas 2D context unavailable`);return n.drawImage(e,0,0,t.width,t.height),new Promise((e,n)=>{t.toBlob(t=>t?e(t):n(new bn(`failed`,`canvas.toBlob returned null`)),`image/png`)})}async function Sn(){if(!navigator.mediaDevices?.getDisplayMedia)throw new bn(`unsupported`,`Screen capture is not supported in this browser`);let e=await navigator.mediaDevices.getDisplayMedia({video:!0,audio:!1}).catch(e=>{let t=e instanceof DOMException?e.name:``;throw t===`NotAllowedError`||t===`AbortError`?new bn(`cancelled`,`User dismissed the screen picker`):new bn(`failed`,e instanceof Error?e.message:String(e))}),t=e.getTracks();try{let t=document.createElement(`video`);t.srcObject=e,t.muted=!0,t.playsInline=!0,await t.play().catch(()=>void 0),t.readyState<2&&await new Promise(e=>{let n=()=>e();t.addEventListener(`loadeddata`,n,{once:!0}),setTimeout(n,1e3)}),await new Promise(e=>requestAnimationFrame(()=>e()));let n=t.videoWidth,r=t.videoHeight;if(!n||!r)throw new bn(`failed`,`Captured video frame has no pixels`);let i=await xn(t);t.srcObject=null;let a=new Date().toISOString().replace(/[:.]/g,`-`).slice(0,19);return new File([i],`screenshot-${a}.png`,{type:`image/png`})}finally{for(let e of t)e.stop()}}var Cn=16e3;function wn(){let e=[`audio/webm;codecs=opus`,`audio/webm`,`audio/mp4`];if(typeof MediaRecorder>`u`)return``;for(let t of e)if(MediaRecorder.isTypeSupported(t))return t;return``}async function Tn(e){if(e.sampleRate===Cn&&e.numberOfChannels===1)return e.getChannelData(0);let t=Math.max(1,Math.ceil(e.length*Cn/e.sampleRate)),n=new OfflineAudioContext(1,t,Cn),r=n.createBufferSource();return r.buffer=e,r.connect(n.destination),r.start(0),(await n.startRendering()).getChannelData(0)}function En(e,t){let n=new ArrayBuffer(44+e.length*2),r=new DataView(n),i=(e,t)=>{for(let n=0;n<t.length;n++)r.setUint8(e+n,t.charCodeAt(n))};i(0,`RIFF`),r.setUint32(4,36+e.length*2,!0),i(8,`WAVE`),i(12,`fmt `),r.setUint32(16,16,!0),r.setUint16(20,1,!0),r.setUint16(22,1,!0),r.setUint32(24,t,!0),r.setUint32(28,t*2,!0),r.setUint16(32,2,!0),r.setUint16(34,16,!0),i(36,`data`),r.setUint32(40,e.length*2,!0);let a=44;for(let t=0;t<e.length;t++){let n=Math.max(-1,Math.min(1,e[t]??0));r.setInt16(a,n<0?n*32768:n*32767,!0),a+=2}return n}function Dn(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>{let e=String(r.result||``),n=e.indexOf(`,`);t(n>=0?e.slice(n+1):e)},r.onerror=()=>n(r.error),r.readAsDataURL(e)})}function On(e){let[t,n]=(0,J.useState)(`idle`),[r,i]=(0,J.useState)(0),a=(0,J.useRef)(null),o=(0,J.useRef)(null),s=(0,J.useRef)([]),c=(0,J.useRef)(null),l=(0,J.useRef)(0),u=(0,J.useCallback)(()=>{o.current?.getTracks().forEach(e=>e.stop()),o.current=null},[]),d=(0,J.useCallback)(()=>{c.current&&=(clearInterval(c.current),null)},[]);return(0,J.useEffect)(()=>()=>{d(),a.current&&a.current.state!==`inactive`&&a.current.stop(),u()},[d,u]),{state:t,elapsedMs:r,start:(0,J.useCallback)(async()=>{if(t!==`idle`)return;if(typeof MediaRecorder>`u`)throw Error(`当前浏览器不支持语音输入(需要 MediaRecorder)。请使用 Chrome/Edge/Firefox 或桌面版。`);let e;try{e=await navigator.mediaDevices.getUserMedia({audio:{channelCount:1,echoCancellation:!0,noiseSuppression:!0}})}catch(e){throw e instanceof DOMException&&e.name===`NotAllowedError`?Error(`麦克风权限被拒绝。请在浏览器地址栏允许麦克风权限后重试。`):Error(`无法访问麦克风:`+(e instanceof Error?e.message:String(e)))}o.current=e,s.current=[];let r=new MediaRecorder(e,wn()?{mimeType:wn()}:void 0);r.ondataavailable=e=>{e.data&&e.data.size>0&&s.current.push(e.data)},a.current=r,r.start(),l.current=Date.now(),i(0),n(`recording`),c.current=setInterval(()=>i(Date.now()-l.current),100)},[t]),stop:(0,J.useCallback)(async()=>{let t=a.current;if(!t||t.state===`inactive`)throw Error(`当前没有进行中的录音。`);let r=new Promise(e=>{t.onstop=()=>e()});t.stop(),await r,d(),u(),a.current=null,n(`transcribing`);try{let t=new Blob(s.current,{type:wn()||`audio/webm`});s.current=[];let r=await t.arrayBuffer(),i=new AudioContext,a;try{a=await i.decodeAudioData(r)}finally{i.close()}if(a.duration<.25)return n(`idle`),``;let o=En(await Tn(a),Cn),c=await Dn(new Blob([o],{type:`audio/wav`})),l=await K.stt.transcribe(e,c,`wav`);if(!l.success)throw Error(l.error||`语音转写失败`);return l.data?.text??``}finally{n(`idle`)}},[e,d,u]),cancel:(0,J.useCallback)(()=>{let e=a.current;e&&e.state!==`inactive`&&e.stop(),a.current=null,s.current=[],d(),u(),n(`idle`)},[d,u])}}var kn=({isOpen:e,commands:t,selectedIndex:n,filter:r,onSelect:i,onHover:a,containerRef:o})=>{let{t:s}=L();return!e||t.length===0?null:(0,Y.jsxs)(`div`,{ref:o,className:`absolute bottom-full left-0 right-0 mb-2 bg-dark-overlay ui-surface-overlay border border-dark-border rounded-lg shadow-pop overflow-hidden z-50 max-h-72 overflow-y-auto custom-scrollbar`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 text-meta text-dark-muted border-b border-dark-border bg-dark-surface`,children:[(0,Y.jsx)(`span`,{className:`font-medium text-dark-text`,children:r?`/${r}`:s(`slashCommands.quickCommands`)}),(0,Y.jsx)(`span`,{className:`opacity-70`,children:s(`slashCommands.help`)})]}),t.map((e,t)=>(0,Y.jsxs)(`button`,{"data-index":t,onClick:()=>i(e),onMouseEnter:()=>a(t),className:`w-full px-3 py-2 flex items-start gap-3 text-start transition-colors border-s-2 ${t===n?`bg-accent-blue/10 border-accent-blue`:`border-transparent hover:bg-dark-hover`}`,children:[(0,Y.jsx)(`span`,{className:`text-lg leading-none shrink-0`,"aria-hidden":`true`,children:e.icon}),(0,Y.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(`span`,{className:`text-sm font-medium text-dark-text`,children:[`/`,e.name]}),e.args&&(0,Y.jsx)(`span`,{className:`text-xs text-dark-muted`,children:e.args}),!e.local&&(0,Y.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-accent-blue/20 text-accent-blue shrink-0`,children:s(`slashCommands.backend`)})]}),(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted truncate`,children:e.description})]}),t===n&&(0,Y.jsx)(d,{size:14,className:`text-dark-muted shrink-0 mt-0.5`,"aria-hidden":`true`})]},e.id))]})},An=`xlsx.xls.csv.docx.txt.md.mdx.rst.adoc.ts.tsx.js.jsx.mjs.cjs.mts.cts.json.jsonc.yaml.yml.toml.xml.html.css.scss.less.py.rb.go.rs.java.kt.swift.c.h.cpp.hpp.cc.cs.sh.bash.zsh.ps1.bat.cmd.sql.graphql.proto.vue.svelte.astro.env.gitignore.gitattributes.editorconfig`.split(`.`),jn=RegExp(`(?:\\.(${An.join(`|`)})|dockerfile|makefile)$`,`i`),Mn=[`png`,`jpg`,`jpeg`,`webp`,`gif`,`bmp`,`svg`],Nn=Object.freeze([]),Pn=RegExp(`\\.(${Mn.join(`|`)})$`,`i`),Fn=10485760,In=An.map(e=>`.${e}`).join(`,`)+`,.Dockerfile,.Makefile,`+Mn.map(e=>`.${e}`).join(`,`),Ln=`.agent/attachments`,Rn=52428800,zn=10,Bn=`chat-col`,Vn=72,Hn=.7,Un=`deepseekcode.composerPref`,Wn=550;function Gn(){try{let e=window.localStorage.getItem(Un);return e===`collapsed`||e===`expanded`?e:`auto`}catch{return`auto`}}function Kn(){return typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(hover: hover) and (pointer: fine)`).matches}var qn=/["<>]/g;function Jn(e){return`<image name="${(e||`image`).replace(qn,``)}" />`}var Yn=e=>/\.xlsx?$/i.test(e)?o:/\.(csv|docx|txt|md|mdx|rst|adoc|json|jsonc|yaml|yml|toml|xml|html|css|scss|less|env|gitignore|gitattributes|editorconfig)$/i.test(e)?s:/\.(ts|tsx|js|jsx|mjs|cjs|mts|cts|py|rb|go|rs|java|kt|swift|c|h|cpp|hpp|cc|cs|sh|bash|zsh|ps1|bat|cmd|sql|graphql|proto|vue|svelte|astro|dockerfile|makefile)$/i.test(e)?f:i,Xn=50,Zn=5e3,Qn={enqueue:`chat.mentionDeliveryEnqueue`,summarize:`chat.mentionDeliverySummarize`,"next-step":`chat.mentionDeliveryNextStep`,direct:`chat.mentionDeliveryDirect`},$n={enqueue:`text-dark-muted hover:bg-dark-hover hover:text-dark-text`,summarize:`text-dark-muted hover:bg-dark-hover hover:text-dark-text`,"next-step":`bg-accent-blue/10 text-accent-blue`,direct:`bg-accent-blue/10 text-accent-blue`};function er(e,t){let n=e.slice(0,t),r=n.lastIndexOf(`@`);if(r===-1)return{active:!1,query:``,start:-1};let i=n.slice(r+1);return/^[\p{L}\p{N}_\-./]*$/u.test(i)?{active:!0,query:i,start:r}:{active:!1,query:``,start:-1}}function tr(e,t){let n=e.lastIndexOf(`
7
- `,t-1)+1,r=e.slice(n,t);return!r.startsWith(`/`)||/\s/.test(r)?{active:!1,query:``}:{active:!0,query:r.slice(1)}}var nr=(0,J.memo)(function({sessionId:e,onSend:t,onRunShell:n,onStop:i,onPause:o,onResume:s,slashOptions:l,workspaceDir:d,onWorkspaceSelect:f,onNewSessionInDir:h,focusRequest:g,inputDisabled:_,inputDisabledHint:y}){let{t:b}=L(),x=R(t=>t.sessionInputs?.[e]??``),S=R(e=>e.setSessionInput),w=R(t=>t.generatingSessions?.includes(e)??!1),D=R(t=>t.pausedSessions?.includes(e)??!1),A=R(t=>t.sessionSuggestions?.[e]),ie=R(t=>t.sessionTurns?.[e]??``),j=R(e=>e.clearSessionSuggestion),M=!x&&!w&&!_&&A&&(A.turnId??``)===ie?A.text:``,oe=R(t=>t.pendingBySession?.[e])??Nn,N=oe.length,P=(0,J.useRef)(null),[F,I]=(0,J.useState)(null),ce=(0,J.useRef)(null),[le,fe]=(0,J.useState)(!1),pe=(0,J.useRef)(null),me=(0,J.useRef)(!1),he=(0,J.useRef)(0),[V,H]=(0,J.useState)([]),[ge,U]=(0,J.useState)(!1),[W,ve]=(0,J.useState)(!1),[be,xe]=(0,J.useState)(!1),[G,Se]=(0,J.useState)(!1),[Oe,Ae]=(0,J.useState)(``),[je,Me]=(0,J.useState)(0),[Ne,Pe]=(0,J.useState)([]),[Re,ze]=(0,J.useState)(!1),Be=(0,J.useRef)(-1),Ue=(0,J.useRef)([]);Ue.current=Ne;let We=(0,J.useRef)(null),Ge=(0,J.useCallback)(()=>{let t=R.getState().clearPending(e);t>0&&z.info(b(`toast.queueRevoked`,{count:t}))},[e,b]),Ke=(0,J.useCallback)(t=>{let n=R.getState();n.promotePending(e,t),!n.isGenerating(e)&&!n.isPaused(e)?de(e):z.info(b(`toast.queuePromoted`))},[e,b]),qe=(0,J.useCallback)(t=>{R.getState().removePending(e,t)&&z.info(b(`toast.queueRemoved`))},[e,b]),q=(0,J.useCallback)(t=>{S(e,t)},[e,S]),Xe=(0,J.useCallback)(()=>{let e=A?.text??``;e&&(q(e),requestAnimationFrame(()=>{let t=P.current;t&&(t.focus(),t.selectionStart=t.selectionEnd=e.length)}))},[q,A]),Ze=(0,J.useCallback)(t=>{let n=R.getState().removePending(e,t);if(!n)return;let r=[],i=[],a=(n.display?.content??n.content).replace(/<attachment path="([^"]*)"\s*\/>/g,(e,t)=>(r.push(t),``)).replace(/<image name="([^"]*)"\s*\/>/g,(e,t)=>(i.push(t),``)).trim();if(n.display)for(let e of n.display.pastes){let t=et(e.content),n=it(e.content),r=n>0?`[Pasted text #${t} +${n} lines]`:`[Pasted text #${t}]`;a=a.replace(RegExp(`\\[Pasted text #${e.id}(?:\\s*\\+\\d+ lines?)?\\]`,`g`),r)}for(let e of n.files??[])dn.current.add(e);let o=r.map((e,t)=>({id:`queued-att-${Date.now()}-${t}`,name:e.split(`/`).pop()||e,size:0,uploading:!1,path:e}));(n.images??[]).forEach((e,t)=>{o.push({id:`queued-img-${Date.now()}-${t}`,name:i[t]||`image-${t+1}.png`,size:Math.max(1,Math.round((e.length-e.indexOf(`,`)-1)*3/4)),uploading:!1,imageDataUri:e})}),o.length>0&&H(e=>[...e,...o].slice(-10));let s=R.getState().getSessionInput(e);q(s.trim()?`${s.trimEnd()}\n\n${a}`:a),requestAnimationFrame(()=>P.current?.focus())},[e,q]),Qe=(0,J.useCallback)(e=>e.replace(/<attachment path="[^"]*"\s*\/>/g,``).replace(/<image name="[^"]*"\s*\/>/g,``).trim(),[]),[$e,nt]=(0,J.useState)(we),[ft,pt]=(0,J.useState)(!1),mt=(0,J.useRef)(null),ht=(0,J.useCallback)(e=>{nt(e),De(e),pt(!1)},[]);(0,J.useEffect)(()=>{if(!ft)return;let e=e=>{mt.current&&!mt.current.contains(e.target)&&pt(!1)},t=e=>{e.key===`Escape`&&pt(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[ft]);let X=On($e),gt=(0,J.useRef)(null),_t=(0,J.useCallback)(async()=>{try{if(!gt.current){let e=await K.stt.status();e.success&&e.data&&(gt.current=e.data)}let e=gt.current;if(!e)return!0;if(e.service!==`ok`&&e.service!==`stopped`)return z.warning(b(`stt.backendMissing`)),window.dispatchEvent(new CustomEvent(`switch-tab`,{detail:{tab:`settings`,section:`stt`}})),!1;let t=e.backends?.[$e];return t&&!t.installed?(z.warning(b(`stt.backendMissing`)),window.dispatchEvent(new CustomEvent(`switch-tab`,{detail:{tab:`settings`,section:`stt`}})),!1):!0}catch{return!0}},[b,$e]);(0,J.useEffect)(()=>{let e=()=>{gt.current=null};return window.addEventListener(`stt-backends-changed`,e),()=>window.removeEventListener(`stt-backends-changed`,e)},[]),(0,J.useEffect)(()=>{let e=e=>{let t=Te(e.detail?.lang);nt(t)};return window.addEventListener(`stt-lang-changed`,e),()=>window.removeEventListener(`stt-lang-changed`,e)},[]);let vt=(0,J.useCallback)(e=>{let t=P.current,n=t?.selectionStart??x.length,r=x.slice(0,n)+e+x.slice(n);q(r),requestAnimationFrame(()=>{t?.focus();let r=n+e.length;t&&(t.selectionStart=t.selectionEnd=r)})},[x,q]);(0,J.useEffect)(()=>{if(!g)return;let e=P.current;if(!e)return;e.focus();let t=e.value.length;e.selectionStart=t,e.selectionEnd=t},[g]);let yt=(0,J.useCallback)(async()=>{if(w)z.info(b(`stt.generatingTitle`));else if(X.state===`recording`)try{let e=await X.stop();e?vt(e):z.info(b(`stt.noSpeech`))}catch(e){z.error(e instanceof Error?e.message:String(e))}else if(X.state===`idle`&&await _t())try{await X.start()}catch(e){z.error(e instanceof Error?e.message:String(e))}},[X,vt,_t,b,w]),{isOpen:bt,filter:xt,filteredCommands:St,selectedIndex:Ct,setSelectedIndex:wt,selectNext:Tt,selectPrev:Et,executeCommand:Dt,openMenu:Ot,closeMenu:Z,setFilter:jt,allCommands:Nt,containerRef:Pt}=Ye(l),[Q,Ft]=(0,J.useState)(!1),[It,Lt]=(0,J.useState)(``),[Rt,zt]=(0,J.useState)([]),[Bt,Vt]=(0,J.useState)(0),[Ut,Wt]=(0,J.useState)(!1),[Gt,Kt]=(0,J.useState)(0),Yt=(0,J.useRef)(-1),[Zt,$t]=(0,J.useState)(`active`),nn=(0,J.useRef)(`active`),[rn,an]=(0,J.useState)(`summarize`),sn=(0,J.useRef)(`summarize`);sn.current=rn;let[cn,ln]=(0,J.useState)([]),un=(0,J.useCallback)(()=>{ln(Array.from(hn.current.values()))},[]);nn.current=Zt;let dn=(0,J.useRef)(new Set),hn=(0,J.useRef)(new Map),gn=(0,J.useRef)([]),vn=(0,J.useRef)(0),xn=(0,J.useRef)(!1);(0,J.useEffect)(()=>{let t=t=>{let n=R.getState().getSessionInput(e),r=`@${t} `,i=n.trim()?`${n.trimEnd()} ${r}`:r;dn.current.add(t),S(e,i),Kt(dn.current.size+hn.current.size),requestAnimationFrame(()=>P.current?.focus())};return Fe(t),()=>Le(t)},[e,S]),(0,J.useEffect)(()=>{let t=t=>{let n=R.getState().getSessionInput(e),r=n.trim()?`${n.trimEnd()}\n\n${t}`:t;S(e,r),requestAnimationFrame(()=>P.current?.focus())};return Ve(t),()=>Ie(t)},[e,S]);let Cn=(0,J.useCallback)(t=>{let n=R.getState().getSessionInput(e),r=n.trim()?`${n.trimEnd()}\n\n${t}`:t;S(e,r),requestAnimationFrame(()=>P.current?.focus())},[e,S]),wn=(0,J.useRef)([]),[Tn,En]=(0,J.useState)(Jt),Dn=(0,J.useRef)([]),An=(0,J.useRef)([]),Mn=(0,J.useRef)(0),qn=(0,J.useRef)(``);qn.current=It;let nr=(0,J.useCallback)((e,t)=>{let n=e.map(e=>({kind:`file`,key:e.path,label:e.name,detail:e.path,isDir:e.type===`directory`})),r=Dn.current,i=t.toLowerCase(),a=(i?r.filter(e=>e.label.toLowerCase().includes(i)||e.key.toLowerCase().includes(i)):r).slice(0,Xn);return[...n,...a]},[]),rr=(0,J.useCallback)(async()=>{let e=Date.now();if(An.current.length>0&&e-Mn.current<Zn)return An.current;try{let e=await K.sessions.list(),t=e.success&&e.data?e.data:[];(t.length>0||An.current.length===0)&&(An.current=t),Mn.current=Date.now()}catch{}return An.current},[]),ir=(0,J.useCallback)(async()=>{let t=await rr();return Dn.current=on(t,e,nn.current),Dn.current},[rr,e]),ar=(0,J.useCallback)(e=>{wn.current=e,zt(e)},[]),or=(0,J.useCallback)((e,t)=>{ar(nr(e.slice(0,Xn),t))},[ar,nr]),sr=(0,J.useCallback)(()=>{let t=nn.current===`active`?`all`:`active`;nn.current=t,$t(t),(async()=>{let n=await rr();Dn.current=on(n,e,t),or(gn.current,qn.current.toLowerCase())})()},[rr,e,or]),cr=(0,J.useCallback)(()=>{let e=Xt(sn.current);(e===`direct`||e===`summarize`)&&dn.current.size>0&&(e=`enqueue`),sn.current=e,an(e)},[]),lr=(0,J.useMemo)(()=>Qt({files:b(`chat.mentionTabFiles`),sessions:b(`chat.mentionTabSessions`)}),[b]),ur=lr.some(e=>e.key===Tn)?Tn:Jt,dr=(0,J.useMemo)(()=>en(Rt,ur),[Rt,ur]);(0,J.useEffect)(()=>{dn.current=new Set,hn.current=new Map,un(),xn.current=!1,En(Jt),Dn.current=[],An.current=[],Mn.current=0,vn.current++,Ft(!1),Lt(``),zt([]),wn.current=[],Kt(0),Z()},[e,Z,un]);let fr=(0,J.useDeferredValue)(x),pr=ue(e=>e.estimateTokens),mr=(0,J.useMemo)(()=>pr(fr),[fr,pr]),hr=(0,J.useCallback)(()=>{let e=P.current;e&&(F==null?(e.style.maxHeight=``,e.style.height=`auto`,e.style.height=Math.min(e.scrollHeight,200)+`px`):(e.style.maxHeight=`${F}px`,e.style.height=`${F}px`))},[F]);(0,J.useEffect)(()=>{hr()},[x,V.length,hr]),(0,J.useEffect)(()=>()=>{document.body.style.userSelect=``},[]);let gr=(0,J.useCallback)(e=>{let t=P.current;t&&e.button===0&&(e.preventDefault(),ce.current={startY:e.clientY,startHeight:t.getBoundingClientRect().height,current:0},e.currentTarget.setPointerCapture(e.pointerId),document.body.style.userSelect=`none`,fe(!0))},[]),_r=(0,J.useCallback)(e=>{let t=ce.current,n=P.current;if(!t||!n)return;t.movedY=e.clientY-t.startY;let r=Math.max(Vn,Math.min(Math.round(window.innerHeight*Hn),t.startHeight-(e.clientY-t.startY)));t.current=r,n.style.maxHeight=`${r}px`,n.style.height=`${r}px`},[]),vr=(0,J.useCallback)(e=>{let t=ce.current;if(ce.current=null,document.body.style.userSelect=``,fe(!1),t){try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}t.current>0&&Math.abs(t.movedY??0)>3&&I(t.current)}},[]),yr=(0,J.useCallback)(()=>I(null),[]),br=(0,J.useCallback)(e=>{let t=P.current;if(!t)return;let n=F??t.getBoundingClientRect().height,r=Math.max(Vn,Math.min(Math.round(window.innerHeight*Hn),n+e));I(r)},[F]),xr=(0,J.useCallback)(async e=>{let t=++vn.current;Wt(!0);try{let n=await K.files.search(e);if(t!==vn.current)return null;let r=(n.success&&n.data?n.data.files:[]).map(e=>({id:e,name:e.slice(e.lastIndexOf(`/`)+1),path:e,type:`file`}));return gn.current=r,r}catch{return null}finally{t===vn.current&&Wt(!1)}},[]),Sr=(0,J.useCallback)(async(e,t)=>{if(xn.current){let n=Yt.current;if(n<0||t<n){xn.current=!1,Ft(!1);return}let r=e.slice(n,t);if(/\s/.test(r)){xn.current=!1,Ft(!1);return}Yt.current=n,Lt(r),Ft(!0),Vt(0);let i=r.toLowerCase(),[a]=await Promise.all([xr(i),ir()]);if(!a)return;or(a,i);return}let n=er(e,t);if(!n.active){Q&&Ft(!1);return}Yt.current=n.start,Lt(n.query),Ft(!0),Vt(0);let r=n.query.toLowerCase(),[i]=await Promise.all([xr(r),ir()]);i&&or(i,r)},[Q,xr,ir,or]),Cr=(0,J.useCallback)(async()=>{if(Ue.current.length>0)return Ue.current;if(We.current)return We.current;ze(!0);let e=K.skills.list().then(e=>{let t=Array.isArray(e.data)?e.data:[];return Pe(t),t}).catch(()=>[]).finally(()=>{We.current=null,ze(!1)});return We.current=e,e},[]),wr=(0,J.useMemo)(()=>yn(Ne,Oe),[Ne,Oe]),Tr=(0,J.useCallback)((e,t)=>{let n=_n(e,t,Ue.current);n.active?(Be.current=n.start,Ae(n.query),Me(0),Se(!0),Ue.current.length===0&&Cr()):G&&(Se(!1),Ae(``))},[G,Cr]);(0,J.useEffect)(()=>{if(!G||Ne.length===0)return;let e=P.current;if(!e)return;let t=_n(e.value,e.selectionStart??e.value.length,Ne);t.active?(Be.current=t.start,Ae(t.query)):(Se(!1),Ae(``))},[Ne,G]);let Er=(0,J.useCallback)(e=>{let t=e.target.value,n=e.target.selectionStart??t.length;q(t),Sr(t,n),Tr(t,n);let r=tr(t,n);r.active?(bt||Ot(),jt(r.query),wt(0)):bt&&Z()},[q,Sr,Tr,bt,Ot,jt,wt,Z]),Dr=(0,J.useCallback)(e=>{let t=P.current,n=x,r=Yt.current>=0?Yt.current:t?.selectionStart??n.length,i=Math.min(n.length,r+1+It.length),a,o;if(e.kind===`session`){let t=e.label||e.key;a=/\s/.test(t)?e.key:t,hn.current.set(e.key,t),un(),o=`@${a} `}else a=e.key,dn.current.add(a),o=`@${a} `;let s=n.slice(0,r)+o+n.slice(i);q(s),Ft(!0),Lt(``),(async()=>{let e=await xr(``);e&&or(e,``)})(),Vt(0),Kt(dn.current.size+hn.current.size),Yt.current=r+o.length,xn.current=!0,requestAnimationFrame(()=>{t?.focus(),t&&(t.selectionStart=t.selectionEnd=r+o.length)})},[x,It,q,xr,or]),Or=(0,J.useCallback)(()=>{xn.current=!1,Ft(!1),Lt(``),Kt(0),En(Jt)},[]),kr=(0,J.useCallback)(e=>{let t=P.current;if(!e.args){let n=Dt(e,``);if(n?.message&&(n.success?z.success(n.message):z.error(n.message)),n?.draft){q(n.draft),I(null),requestAnimationFrame(()=>{t?.focus(),t&&(t.selectionStart=t.selectionEnd=n.draft.length)});return}q(``),I(null);return}let n=t?.selectionStart??x.length,r=x.lastIndexOf(`
8
- `,n-1)+1,i=x.slice(0,r)+`/${e.name} `+x.slice(n);q(i),Z(),requestAnimationFrame(()=>{t?.focus();let n=r+e.name.length+2;t&&(t.selectionStart=t.selectionEnd=n)})},[x,q,Dt,Z]),Ar=(0,J.useCallback)(e=>{let t=P.current,n=Be.current>=0?Be.current:t?.selectionStart??x.length,r=Math.min(x.length,n+1+Oe.length),i=`$${e.id} `,a=x.slice(0,n)+i+x.slice(r);q(a),Se(!1),Ae(``),Be.current=-1,requestAnimationFrame(()=>{t?.focus();let e=n+i.length;t&&(t.selectionStart=t.selectionEnd=e)})},[x,Oe,q]),jr=(0,J.useCallback)(()=>{Se(!1),Ae(``),Be.current=-1},[]),Mr=(0,J.useCallback)(e=>{let t=P.current,n=t?.selectionStart??x.length,r=`$${e.id} `,i=x.slice(0,n)+r+x.slice(n);q(i),xe(!1),xn.current=!1,Ft(!1),Lt(``),Se(!1),Ae(``),requestAnimationFrame(()=>{t?.focus();let e=n+r.length;t&&(t.selectionStart=t.selectionEnd=e)})},[x,q]),Nr=2048,Pr=(0,J.useCallback)(e=>new Promise((t,n)=>{let r=()=>{let r=new FileReader;r.onload=()=>t(String(r.result??``)),r.onerror=()=>n(Error(`Failed to read image`)),r.readAsDataURL(e)};(async()=>{let n=null;try{n=await createImageBitmap(e)}catch{r();return}try{let i=Math.max(n.width,n.height);if(i<=Nr){n.close(),r();return}let a=Nr/i,o=document.createElement(`canvas`);o.width=Math.max(1,Math.round(n.width*a)),o.height=Math.max(1,Math.round(n.height*a));let s=o.getContext(`2d`);if(!s){n.close(),r();return}s.drawImage(n,0,0,o.width,o.height),n.close();let c=e.type===`image/jpeg`?`image/jpeg`:`image/png`;t(o.toDataURL(c,c===`image/jpeg`?.9:void 0))}catch{n?.close(),r()}})()}),[]),Fr=(0,J.useCallback)(e=>{let t=Array.from(e);H(e=>{let n=zn-e.length,r=e.slice();for(let e of t.slice(0,n)){let t=Pn.test(e.name);if(!t&&!jn.test(e.name)){z.warning(b(`fileJob.unsupportedType`,{name:e.name}));continue}if(e.size>(t?Fn:Rn)){z.error(b(`fileJob.fileTooLarge`,{name:e.name}));continue}if(r.some(t=>t.name===e.name&&t.size===e.size)){z.warning(b(`fileJob.duplicateFile`,{name:e.name}));continue}let n={id:`att-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,file:e,name:e.name,size:e.size,uploading:!1};t&&Pr(e).then(e=>{H(t=>t.map(t=>t.id===n.id?{...t,imageDataUri:e}:t))}).catch(()=>{H(e=>e.filter(e=>e.id!==n.id)),z.error(b(`fileJob.uploadFailed`,{name:e.name}))}),r.push(n)}return r.length>=zn&&z.warning(b(`fileJob.maxAttachments`,{n:zn})),r})},[b,Pr]),Ir=(0,J.useCallback)(e=>{e.target.files&&e.target.files.length>0&&(Fr(e.target.files),e.target.value=``)},[Fr]),Lr=(0,J.useCallback)(()=>{pe.current?.click()},[]),Rr=(0,J.useCallback)(async()=>{if(!(W||w)){ve(!0);try{let e=await Sn();Fr([e])}catch(e){e instanceof bn&&e.code===`cancelled`||z.error(b(`fileJob.screenshotFailed`))}finally{ve(!1)}}},[Fr,b,W,w]),zr=(0,J.useRef)(Rr);(0,J.useEffect)(()=>{zr.current=Rr},[Rr]),(0,J.useEffect)(()=>{let e=e=>{(e.ctrlKey||e.metaKey)&&e.shiftKey&&(e.key===`s`||e.key===`S`)&&(e.preventDefault(),zr.current())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]);let Br=(0,J.useCallback)(e=>{H(t=>t.filter(t=>t.id!==e))},[]),Vr=(0,J.useCallback)(e=>{e.preventDefault(),U(!0)},[]),Hr=(0,J.useCallback)(e=>{e.preventDefault(),U(!1)},[]),Ur=(0,J.useCallback)(e=>{e.preventDefault(),U(!1),e.dataTransfer.files&&e.dataTransfer.files.length>0&&Fr(e.dataTransfer.files)},[Fr]),Wr=(0,J.useCallback)(async()=>{if(V.length===0)return``;let e=[];for(let t of V){if(t.imageDataUri)continue;if(t.path){e.push(`<attachment path="${t.path}" />`);continue}if(!t.file)continue;H(e=>e.map(e=>e.id===t.id?{...e,uploading:!0,error:void 0}:e));let n=`${Ln}/${t.name}`,r=await K.files.upload(t.file,n);if(r.success&&r.data?.path){let n=r.data.path.replace(/\\/g,`/`);H(e=>e.map(e=>e.id===t.id?{...e,uploading:!1,path:n}:e)),e.push(`<attachment path="${n}" />`)}else H(e=>e.map(e=>e.id===t.id?{...e,uploading:!1,error:r.error||b(`fileJob.uploadFailed`)}:e)),z.error(`${t.name}: ${r.error||b(`fileJob.uploadFailed`)}`)}return e.length>0?`${e.join(`
9
- `)}\n\n`:``},[V,b]),Gr=(0,J.useCallback)(e=>{let t=e.clipboardData.getData(`text/plain`);if(e.clipboardData.files&&e.clipboardData.files.length>0){e.preventDefault(),Fr(e.clipboardData.files);return}if(!t||!rt(t))return;e.preventDefault();let{label:n}=at(t),r=P.current;if(!r)return;let i=r.selectionStart,a=r.selectionEnd,o=r.value,s=o.slice(0,i)+n+o.slice(a);q(s),requestAnimationFrame(()=>{r.selectionStart=r.selectionEnd=i+n.length})},[q,Fr]),Kr=(0,J.useCallback)(async()=>{let r=x.trim()?x:M,i=st(r),a=i.map(e=>({id:e,content:tt(e)??``})).filter(e=>e.content!==``),o=ot(r);ct(i),xn.current=!1,Ft(!1),Z();let s=o.trim(),c=V.length>0;if(!s&&!c)return;let l=o.trim();if(l.startsWith(`/`)&&!c){let e=Je(l);if(e){let t=Nt.find(t=>t.name===e.command);if(t){let n=Dt(t,e.args);if(n?.message&&(n.success?z.success(n.message):z.error(n.message)),n?.draft){q(n.draft),I(null),requestAnimationFrame(()=>{let e=P.current;e&&(e.focus(),e.setSelectionRange(n.draft.length,n.draft.length))});return}q(``),I(null),H([]),dn.current=new Set,hn.current=new Map,un(),Kt(0);return}z.error(b(`slashCommands.unknownCommand`,{cmd:`/${e.command}`}));return}}if(l.startsWith(`!`)&&!c){let e=l.slice(1).trim();if(!e)return;n?.(e),q(``),I(null),H([]),dn.current=new Set,hn.current=new Map,Kt(0);return}let u=Array.from(dn.current).filter(e=>o.includes(`@${e}`)),d=Array.from(hn.current.entries()).map(([e,t])=>({id:e,title:t})).filter(e=>o.includes(`@${e.title}`)||o.includes(`@${e.id}`)),f=``;if(c){if(V.some(e=>e.uploading)){z.warning(b(`fileJob.stillUploading`));return}f=await Wr()}let p=V.filter(e=>e.imageDataUri),m=p.map(e=>e.imageDataUri);if(p.length>0){let e=p.map(e=>Jn(e.name)).join(`
10
- `);f=f?`${f}${e}\n\n`:`${e}\n\n`}let h=(f+o).trim();if(!h&&!c)return;let g=a.length>0?{content:`${f}${x}`,pastes:a}:void 0;t(h||f.trim(),u.length>0?u:void 0,m.length>0?m:void 0,d.length>0?d:void 0,d.length>0?sn.current:void 0,g),q(``),j(e),I(null),H([]),dn.current=new Set,hn.current=new Map,Kt(0),Se(!1),Ae(``)},[x,M,V,t,n,q,j,e,Wr,b,Z,Nt,Dt]),qr=(0,J.useCallback)(e=>{if(!e.nativeEvent.isComposing){if((e.key===`Backspace`||e.key===`Delete`)&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&!e.shiftKey){let t=P.current;if(t&&t.selectionStart===t.selectionEnd){let n=t.selectionStart,r=t.value;if(e.key===`Backspace`&&n>0){let i=lt(r.slice(0,n));if(i){e.preventDefault(),q(r.slice(0,n-i.length)+r.slice(n)),dt(i),requestAnimationFrame(()=>{t.focus();let e=n-i.length;t.selectionStart=t.selectionEnd=e});return}}else if(e.key===`Delete`&&n<r.length){let i=ut(r.slice(n));if(i){e.preventDefault(),q(r.slice(0,n)+r.slice(n+i.length)),dt(i),requestAnimationFrame(()=>{t.focus(),t.selectionStart=t.selectionEnd=n});return}}}}if(e.key===`Backspace`&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&!e.shiftKey&&V.length>0){let t=P.current;if(t&&t.selectionStart===0&&t.selectionEnd===0){let t=V[V.length-1];if(t){e.preventDefault(),Br(t.id);return}}}if(Q&&lr.length>1&&e.key===`Tab`){e.preventDefault();let t=lr.map(e=>e.key);En(n=>tn(t,n,!e.shiftKey)),Vt(0)}else if(Q&&lr.length>1&&e.key===`S`&&!e.ctrlKey&&!e.metaKey&&!e.altKey)e.preventDefault(),sr();else if(Q&&lr.length>1&&e.key===`M`&&!e.ctrlKey&&!e.metaKey&&!e.altKey)e.preventDefault(),cr();else{if(Q&&dr.length>0){if(e.key===`ArrowDown`){e.preventDefault(),Vt(e=>(e+1)%dr.length);return}if(e.key===`ArrowUp`){e.preventDefault(),Vt(e=>(e-1+dr.length)%dr.length);return}if(e.key===`Enter`&&!e.shiftKey&&!e.ctrlKey&&!e.metaKey){let t=dr[Bt];t&&(e.preventDefault(),Dr(t));return}if(e.key===`Escape`){e.preventDefault(),Or();return}}else if(Q&&e.key===`Escape`){e.preventDefault(),Or();return}if(G&&wr.length>0){if(e.key===`ArrowDown`){e.preventDefault(),Me(e=>(e+1)%wr.length);return}if(e.key===`ArrowUp`){e.preventDefault(),Me(e=>(e-1+wr.length)%wr.length);return}if(e.key===`Enter`&&!e.shiftKey&&!e.ctrlKey&&!e.metaKey){let t=wr[je];t&&(e.preventDefault(),Ar(t));return}if(e.key===`Escape`){e.preventDefault(),jr();return}}else if(G&&e.key===`Escape`){e.preventDefault(),jr();return}if(bt&&St.length>0){if(e.key===`ArrowDown`){e.preventDefault(),Tt();return}if(e.key===`ArrowUp`){e.preventDefault(),Et();return}if(e.key===`Enter`&&!e.shiftKey&&!e.ctrlKey&&!e.metaKey){let t=St[Ct];t&&(e.preventDefault(),kr(t));return}if(e.key===`Escape`){e.preventDefault(),Z();return}}else if(bt&&e.key===`Escape`){e.preventDefault(),Z();return}if(e.key===`Tab`&&!e.shiftKey&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&M)e.preventDefault(),Xe();else if(e.key===`Escape`&&w){e.preventDefault();let t=Date.now(),n=He(N,D,he.current,t);he.current=t,n===`revokeQueue`?(Ge(),he.current=0):n===`stop`?i():o()}else(e.key===`Enter`&&(e.ctrlKey||e.metaKey)||e.key===`Enter`&&!e.shiftKey)&&(e.preventDefault(),Kr())}}},[w,D,N,Ge,Kr,o,s,i,Q,Rt,Bt,Dr,Or,lr,sr,cr,G,wr,je,Ar,jr,bt,St,Ct,Tt,Et,kr,Z,q,V,Br,M,Xe]),Jr=(0,J.useCallback)(()=>{me.current=!0},[]),Yr=(0,J.useCallback)(()=>{me.current=!1},[]),[Xr,Zr]=(0,J.useState)(()=>typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(max-width: 767px)`).matches);(0,J.useEffect)(()=>{if(typeof window.matchMedia!=`function`)return;let e=window.matchMedia(`(max-width: 767px)`),t=()=>{Zr(e.matches),e.matches||ri(!1)};return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let[Qr,$r]=(0,J.useState)(()=>Gn()),[ei,ti]=(0,J.useState)(()=>Gn()===`collapsed`),[ni,ri]=(0,J.useState)(!1),[ii,ai]=(0,J.useState)(!1),oi=(0,J.useRef)(!1),si=Qr===`expanded`,ci=(0,J.useCallback)(e=>{$r(e);try{e===`auto`?window.localStorage.removeItem(Un):window.localStorage.setItem(Un,e)}catch{}},[]),li=(0,J.useRef)(null),$=(0,J.useCallback)(()=>{li.current!==null&&(clearTimeout(li.current),li.current=null)},[]);(0,J.useEffect)(()=>$,[$]),(0,J.useEffect)(()=>{Xr&&w&&!si&&ri(!0)},[Xr,w,si]);let[ui,di]=(0,J.useState)(()=>Kn());(0,J.useEffect)(()=>{if(typeof window.matchMedia!=`function`)return;let e=window.matchMedia(`(hover: hover) and (pointer: fine)`),t=()=>di(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let fi=oi.current||me.current||x.trim().length>0||V.length>0||N>0||_||ge||Q||bt||G,pi=ui&&Qr===`auto`&&!ei,mi=ei||Xr&&ni||ii,hi=ii&&!ei&&!(Xr&&ni),gi=(0,J.useCallback)(()=>{$(),ai(!1),ti(!0),ci(`collapsed`)},[$,ci]),_i=(0,J.useCallback)(()=>{$(),ri(!1),ai(!1),Qr===`collapsed`&&(ti(!1),ci(`auto`))},[$,Qr,ci]),vi=(0,J.useCallback)(()=>{$(),si?ci(`auto`):(ai(!1),ri(!1),ti(!1),ci(`expanded`))},[$,si,ci]),yi=(0,J.useCallback)(()=>{$(),ai(!1)},[$]),bi=(0,J.useCallback)(()=>{pi&&($(),li.current=setTimeout(()=>{li.current=null,!fi&&ai(!0)},Wn))},[fi,$,pi]),xi=(0,J.useCallback)(()=>{$(),ai(!1)},[$]),Si=mr>8e3,Ci=!_&&(x.trim().length>0||V.length>0),wi=w?b(`stt.generatingTitle`):X.state===`recording`?b(`stt.stopTitle`):b(`stt.title`),Ti=X.state===`transcribing`||w,Ei=/mac/i.test(navigator.platform||``)?`⌘`:`Ctrl`;return(0,Y.jsxs)(`div`,{className:`chat-composer-shell shrink-0 pb-3 pt-2 max-md:order-4 max-md:mt-auto`,onMouseEnter:yi,onMouseLeave:bi,onDragOver:Vr,onDragLeave:Hr,onDrop:Ur,children:[oe.length>0&&(0,Y.jsxs)(`div`,{className:`${Bn} mb-2 rounded-lg border border-dark-border bg-dark-surface px-2.5 py-1.5 text-xs text-dark-muted`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`span`,{"aria-hidden":`true`,children:`⏳`}),(0,Y.jsx)(`span`,{className:`font-medium text-dark-text`,children:b(`chat.queuedCount`,{count:oe.length})}),(0,Y.jsx)(`span`,{className:`min-w-0 flex-1`}),(0,Y.jsx)(`span`,{className:`shrink-0 text-badge text-dark-muted/60`,children:b(`chat.queuedEscHint`)}),(0,Y.jsx)(`button`,{onClick:Ge,className:`flex h-5 w-5 shrink-0 items-center justify-center rounded-full text-dark-muted transition-colors hover:bg-dark-hover hover:text-accent-red`,title:b(`chat.queuedRevoke`),"aria-label":b(`chat.queuedRevoke`),children:(0,Y.jsx)(ae,{size:12,"aria-hidden":`true`})})]}),(0,Y.jsx)(`ul`,{className:`mt-1 max-h-40 space-y-0.5 overflow-y-auto`,children:oe.map((e,t)=>(0,Y.jsxs)(`li`,{className:`group flex items-center gap-2 rounded px-1 py-0.5 transition-colors hover:bg-dark-hover/60`,children:[(0,Y.jsx)(`span`,{className:`w-4 shrink-0 text-center text-badge tabular-nums text-dark-muted/60`,children:t+1}),(0,Y.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-dark-muted/80`,title:Qe(e.content),children:Qe(e.content)||b(`chat.queuedEmptyPreview`)}),(0,Y.jsxs)(`span`,{className:`flex shrink-0 items-center gap-0.5 opacity-0 transition-opacity group-hover:opacity-100 group-focus-within:opacity-100`,children:[(0,Y.jsx)(`button`,{onClick:()=>Ke(e.id),className:`flex h-5 w-5 items-center justify-center rounded text-dark-muted transition-colors hover:bg-dark-hover hover:text-accent-blue`,title:b(`chat.queuedSendNow`),"aria-label":b(`chat.queuedSendNow`),children:(0,Y.jsx)(u,{size:12,"aria-hidden":`true`})}),(0,Y.jsx)(`button`,{onClick:()=>Ze(e.id),className:`flex h-5 w-5 items-center justify-center rounded text-dark-muted transition-colors hover:bg-dark-hover hover:text-accent-blue`,title:b(`chat.queuedEdit`),"aria-label":b(`chat.queuedEdit`),children:(0,Y.jsx)(O,{size:12,"aria-hidden":`true`})}),(0,Y.jsx)(`button`,{onClick:()=>qe(e.id),className:`flex h-5 w-5 items-center justify-center rounded text-dark-muted transition-colors hover:bg-dark-hover hover:text-accent-red`,title:b(`chat.queuedDelete`),"aria-label":b(`chat.queuedDelete`),children:(0,Y.jsx)(k,{size:12,"aria-hidden":`true`})})]})]},e.id))})]}),V.length>0&&(0,Y.jsx)(`div`,{className:`${Bn} mb-2 flex flex-wrap gap-1.5`,children:V.map(e=>{let t=Yn(e.name),n=e.imageDataUri,i=(0,Y.jsxs)(Y.Fragment,{children:[n?(0,Y.jsx)(ye,{src:n,name:e.name,size:13,hoverPreview:!1,thumb:!0}):e.uploading?(0,Y.jsx)(r,{size:13,className:`animate-spin`}):(0,Y.jsx)(t,{size:13}),(0,Y.jsx)(`span`,{className:`max-w-[140px] truncate`,children:e.name}),(0,Y.jsx)(`span`,{className:`text-badge text-dark-muted`,children:e.size>1048576?`${(e.size/1024/1024).toFixed(1)} MB`:`${Math.max(1,Math.round(e.size/1024))} KB`}),!e.uploading&&(0,Y.jsx)(`button`,{onClick:()=>Br(e.id),className:`rounded p-0.5 text-dark-muted hover:text-accent-red hover:bg-accent-red/10 transition-colors`,"aria-label":b(`a11y.close`),children:(0,Y.jsx)(ae,{size:11})})]}),a=B(`flex items-center gap-1.5 rounded-lg border text-xs transition-colors ${n?`p-1 pe-2`:`px-2 py-1`}`,e.error?`border-accent-red/40 bg-accent-red/5 text-accent-red`:e.uploading?`border-accent-blue/40 bg-accent-blue/5 text-accent-blue`:`border-dark-border bg-dark-surface text-dark-text`,n&&`cursor-zoom-in hover:border-accent-blue/40`);return n?(0,Y.jsx)(_e,{src:n,alt:e.name,className:`min-w-0`,children:(0,Y.jsx)(`div`,{className:a,children:i})},e.id):(0,Y.jsx)(`div`,{className:a,children:i},e.id)})}),ge&&(0,Y.jsx)(`div`,{className:`${Bn} mb-2 rounded-xl border-2 border-dashed border-accent-blue/50 bg-accent-blue/5 py-3 text-center text-xs text-accent-blue`,children:b(`fileJob.dropHint`)}),(0,Y.jsx)(At,{}),(0,Y.jsxs)(`div`,{className:`chat-composer-card relative rounded-xl border ${le?``:`transition-all duration-150`} ${Bn} ${mi?`flex items-end gap-1 px-2 py-1.5`:``} ${hi?`pointer-events-none opacity-0`:``}`,children:[!mi&&(0,Y.jsx)(`div`,{role:`separator`,"aria-orientation":`horizontal`,"aria-label":b(`chat.resizeHint`),title:b(`chat.resizeHint`),tabIndex:0,onPointerDown:gr,onPointerMove:_r,onPointerUp:vr,onPointerCancel:vr,onDoubleClick:yr,onKeyDown:e=>{e.key===`ArrowUp`?(e.preventDefault(),br(24)):e.key===`ArrowDown`&&(e.preventDefault(),br(-24))},className:`group absolute inset-x-0 top-0 z-10 flex h-2.5 cursor-row-resize touch-none items-center justify-center rounded-t-xl outline-none focus-visible:bg-accent-blue/10`,children:(0,Y.jsx)(`span`,{"aria-hidden":`true`,className:`h-1 w-9 rounded-full bg-dark-border transition-colors group-hover:bg-accent-blue/70 group-focus-visible:bg-accent-blue/70`})}),!mi&&(0,Y.jsx)(`div`,{className:`flex items-center justify-end gap-2 px-3 pt-2.5`,children:f&&(0,Y.jsx)(qt,{workspaceDir:d,onSelect:f,onNewSessionInDir:h})}),Q&&(0,Y.jsx)(`div`,{onMouseDown:e=>e.preventDefault(),"aria-hidden":!Q,children:(0,Y.jsx)(fn,{isOpen:Q,items:dr,selectedIndex:Bt,query:It,isSearching:Ut,onSelect:Dr,onHover:Vt,selectedCount:Gt,onFinish:Or,tabs:lr,activeTab:ur,onTabChange:En,scope:Zt,onToggleScope:sr,deliveryMode:rn,onToggleDelivery:cr})}),G&&(0,Y.jsx)(`div`,{onMouseDown:e=>e.preventDefault(),"aria-hidden":!G,children:(0,Y.jsx)(mn,{isOpen:G,items:wr,selectedIndex:je,query:Oe,isLoading:Re,onSelect:Ar,onHover:Me})}),bt&&(0,Y.jsx)(`div`,{onMouseDown:e=>e.preventDefault(),"aria-hidden":!bt,children:(0,Y.jsx)(kn,{isOpen:bt,commands:St,selectedIndex:Ct,filter:xt,onSelect:kr,onHover:wt,containerRef:Pt})}),(0,Y.jsxs)(`div`,{className:mi?`relative flex min-w-0 flex-1 items-start`:`relative`,children:[M&&(0,Y.jsx)(`div`,{"aria-hidden":`true`,className:mi?`pointer-events-none absolute inset-0 overflow-hidden px-1.5 py-1.5 text-sm leading-relaxed`:`pointer-events-none absolute inset-0 overflow-hidden px-4 pt-2 pb-3 text-sm leading-relaxed`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Y.jsx)(`button`,{type:`button`,tabIndex:-1,onMouseDown:e=>e.preventDefault(),onClick:Xe,className:`pointer-events-auto relative z-20 min-w-0 cursor-pointer whitespace-pre-wrap break-words border-0 bg-transparent p-0 text-start text-dark-muted/70 transition-colors hover:text-dark-muted`,title:b(`chat.suggestionAccept`),"aria-label":b(`chat.suggestionAccept`),children:M}),(0,Y.jsx)(`span`,{className:`mt-0.5 shrink-0 rounded border border-dark-border px-1.5 py-0.5 text-badge text-dark-muted/70`,"aria-hidden":`true`,children:b(`chat.suggestionAccept`)}),(0,Y.jsx)(`button`,{type:`button`,tabIndex:-1,onMouseDown:e=>e.preventDefault(),onClick:()=>j(e),className:`pointer-events-auto relative z-20 mt-0.5 shrink-0 rounded border border-dark-border px-1.5 py-0.5 text-badge text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,title:b(`chat.suggestionDismiss`),"aria-label":b(`chat.suggestionDismiss`),children:b(`chat.suggestionDismiss`)})]})}),(0,Y.jsx)(`textarea`,{ref:P,value:x,onChange:Er,onKeyDown:qr,onPaste:Gr,onFocus:()=>{oi.current=!0,xi()},onBlur:()=>{oi.current=!1,Q&&Or(),Z(),G&&jr()},onCompositionStart:Jr,onCompositionEnd:Yr,placeholder:M?``:_&&y?y:b(mi?`chat.inputPlaceholderCollapsed`:w?`chat.generatingPlaceholder`:`chat.inputPlaceholder`),rows:1,"aria-label":`Message input`,disabled:_,className:mi?`w-full flex-1 bg-transparent px-1.5 py-1.5 text-sm text-dark-text placeholder-dark-muted/60 resize-none focus:outline-none min-h-[36px] max-h-[28vh] leading-relaxed${M?` relative z-10`:``}`:`w-full bg-transparent px-4 pt-2 pb-3 text-sm text-dark-text placeholder-dark-muted/60
11
- resize-none focus:outline-none min-h-[72px] max-h-[40vh] leading-relaxed${M?` relative z-10`:``}`})]}),mi&&(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center gap-0.5 pb-0.5`,children:[(0,Y.jsx)(`button`,{type:`button`,onClick:_i,className:`flex h-8 w-8 items-center justify-center rounded-full text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,title:b(`chat.composerExpand`),"aria-label":b(`chat.composerExpand`),children:(0,Y.jsx)(C,{size:15,"aria-hidden":`true`})}),(0,Y.jsx)(`button`,{type:`button`,onClick:()=>void yt(),disabled:Ti,className:B(`flex h-8 w-8 items-center justify-center rounded-full text-dark-muted transition-colors`,X.state===`recording`?`bg-accent-red/15 text-accent-red animate-pulse`:`hover:bg-dark-hover hover:text-dark-text`,`disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent`),title:wi,"aria-label":wi,children:X.state===`transcribing`?(0,Y.jsx)(r,{size:15,className:`animate-spin`,"aria-hidden":`true`}):X.state===`recording`?(0,Y.jsx)(ne,{size:15,"aria-hidden":`true`}):(0,Y.jsx)(m,{size:15,"aria-hidden":`true`})}),X.state===`recording`&&(0,Y.jsxs)(`span`,{className:`text-badge tabular-nums text-accent-red`,"aria-hidden":`true`,children:[(X.elapsedMs/1e3).toFixed(0),`s`]}),w&&(0,Y.jsx)(`button`,{onClick:i,className:`flex h-8 w-8 items-center justify-center rounded-full bg-accent-red/80 text-accent-fg transition-all hover:opacity-85 active:scale-95`,title:b(`chat.stopGen`),"aria-label":b(`chat.stopGen`),children:(0,Y.jsx)(v,{size:13,"aria-hidden":`true`})}),(0,Y.jsx)(`button`,{onClick:()=>void Kr(),disabled:!Ci,className:`flex h-8 w-8 items-center justify-center rounded-full bg-dark-text text-dark-bg transition-all
12
- hover:opacity-80 active:scale-95 disabled:opacity-25 disabled:cursor-not-allowed`,title:b(w?`chat.sendQueuedBtn`:`chat.sendBtn`),"aria-label":b(w?`chat.sendQueuedBtn`:`chat.sendBtn`),children:(0,Y.jsx)(c,{size:15,"aria-hidden":`true`})})]}),!mi&&(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-1.5 px-3 pb-3 lg:flex-nowrap`,children:[(0,Y.jsxs)(`div`,{className:`flex min-w-0 items-center gap-x-2`,children:[(0,Y.jsx)(`button`,{type:`button`,onClick:gi,className:`flex h-8 w-8 items-center justify-center rounded-full text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,title:b(`chat.composerCollapse`),"aria-label":b(`chat.composerCollapse`),children:(0,Y.jsx)(T,{size:15,"aria-hidden":`true`})}),(0,Y.jsx)(`button`,{type:`button`,onClick:vi,"aria-pressed":si,className:`flex h-8 w-8 items-center justify-center rounded-full transition-colors ${si?`bg-accent-blue/15 text-accent-blue hover:bg-accent-blue/25`:`text-dark-muted hover:bg-dark-hover hover:text-dark-text`}`,title:b(si?`chat.composerUnpin`:`chat.composerPin`),"aria-label":b(si?`chat.composerUnpin`:`chat.composerPin`),children:(0,Y.jsx)(re,{size:15,"aria-hidden":`true`})}),(0,Y.jsx)(kt,{}),(0,Y.jsx)(`span`,{className:`hidden min-w-0 sm:block`,children:(0,Y.jsx)(Mt,{})}),(0,Y.jsx)(Ee,{}),(0,Y.jsx)(Ht,{onHandoffToAi:Cn}),cn.length>0&&(0,Y.jsx)(`button`,{type:`button`,onClick:cr,className:B(`flex h-8 min-w-0 items-center rounded-full px-2.5 text-meta font-medium transition-colors`,$n[rn]),title:b(`chat.mentionDeliveryHint`),children:(0,Y.jsx)(`span`,{className:`max-w-[180px] truncate`,children:b(`chat.mentionDeliveryChip`,{titles:cn.join(`、`),mode:b(Qn[rn])})})})]}),(0,Y.jsx)(`div`,{className:`flex-1`}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1.5`,children:[mr>0&&x.length>0&&(0,Y.jsxs)(`span`,{className:`text-badge tabular-nums ${Si?`text-accent-red font-medium`:`text-dark-muted/60`}`,children:[`~`,mr,` tokens`,Si?` · ${b(`chat.nearLimit`)}`:``]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,Y.jsxs)(`div`,{ref:mt,className:`relative`,children:[(0,Y.jsxs)(`button`,{onClick:()=>pt(e=>!e),disabled:X.state!==`idle`||w,className:`flex h-8 items-center justify-center gap-0.5 rounded-full px-2 text-meta font-semibold text-dark-muted transition-colors
13
- hover:bg-dark-hover hover:text-dark-text disabled:opacity-40 disabled:hover:bg-transparent disabled:cursor-not-allowed`,title:b(w?`stt.generatingTitle`:`stt.langToggle`),"aria-label":b(w?`stt.generatingTitle`:`stt.langToggle`),"aria-haspopup":`listbox`,"aria-expanded":ft,children:[Ce($e).short,(0,Y.jsx)(C,{size:11,"aria-hidden":`true`})]}),ft&&(0,Y.jsxs)(`div`,{role:`listbox`,"aria-label":b(`stt.langToggle`),className:`absolute bottom-full right-0 mb-2 z-50 w-44 rounded-lg border border-dark-border bg-dark-overlay ui-surface-overlay shadow-lg py-1 max-h-72 overflow-auto custom-scrollbar`,children:[ke.map(e=>(0,Y.jsxs)(`button`,{role:`option`,"aria-selected":e.code===$e,onClick:()=>ht(e.code),className:B(`flex w-full items-center justify-between gap-2 px-3 py-1.5 text-xs transition-colors`,e.code===$e?`text-accent-blue bg-accent-blue/10`:`text-dark-text hover:bg-dark-hover`),children:[(0,Y.jsx)(`span`,{className:`font-medium`,children:e.label}),(0,Y.jsxs)(`span`,{className:`flex items-center gap-1.5 text-badge text-dark-muted`,children:[`Whisper`,e.code===$e&&(0,Y.jsx)(se,{size:12,"aria-hidden":`true`})]})]},e.code)),(0,Y.jsx)(`div`,{className:`mt-1 border-t border-dark-border px-3 pt-1.5 pb-0.5 text-badge leading-relaxed text-dark-muted/70`,children:b(`stt.multiHint`)})]})]}),(0,Y.jsx)(`button`,{onClick:()=>void yt(),disabled:Ti,className:B(`flex h-8 w-8 items-center justify-center rounded-full text-dark-muted transition-colors`,X.state===`recording`?`bg-accent-red/15 text-accent-red animate-pulse`:`hover:bg-dark-hover hover:text-dark-text`,`disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent`),title:wi,"aria-label":wi,children:X.state===`transcribing`?(0,Y.jsx)(r,{size:15,className:`animate-spin`,"aria-hidden":`true`}):X.state===`recording`?(0,Y.jsx)(ne,{size:15,"aria-hidden":`true`}):(0,Y.jsx)(m,{size:15,"aria-hidden":`true`})}),X.state===`recording`&&(0,Y.jsxs)(`span`,{className:`text-badge tabular-nums text-accent-red`,"aria-hidden":`true`,children:[(X.elapsedMs/1e3).toFixed(0),`s`]})]}),!w&&(0,Y.jsx)(`button`,{onClick:()=>xe(!0),className:`flex h-8 w-8 items-center justify-center rounded-full text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,title:b(`skills.pickTitle`),"aria-label":b(`skills.pickTitle`),children:(0,Y.jsx)(p,{size:15,"aria-hidden":`true`})}),!w&&(0,Y.jsx)(`button`,{onClick:()=>void Rr(),disabled:W,className:`flex h-8 w-8 items-center justify-center rounded-full text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text disabled:opacity-40 disabled:cursor-not-allowed`,title:`${b(`fileJob.screenshot`)} (${Ei}+Shift+S)`,"aria-label":`${b(`fileJob.screenshot`)} (${Ei}+Shift+S)`,children:W?(0,Y.jsx)(r,{size:15,className:`animate-spin`,"aria-hidden":`true`}):(0,Y.jsx)(a,{size:15,"aria-hidden":`true`})}),!w&&(0,Y.jsx)(`button`,{onClick:()=>void Lr(),className:`flex h-8 w-8 items-center justify-center rounded-full text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,title:b(`fileJob.attach`),"aria-label":b(`fileJob.attach`),children:(0,Y.jsx)(ee,{size:15,"aria-hidden":`true`})}),(0,Y.jsx)(`input`,{ref:pe,type:`file`,multiple:!0,accept:In,className:`hidden`,onChange:Ir}),w&&!Ci?(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[D?(0,Y.jsx)(`button`,{onClick:s,className:`flex h-8 w-8 items-center justify-center rounded-full bg-accent-green text-accent-fg transition-all hover:opacity-85 active:scale-95`,title:b(`chat.resumeGen`),"aria-label":b(`chat.resumeGen`),children:(0,Y.jsx)(E,{size:14,"aria-hidden":`true`})}):(0,Y.jsx)(`button`,{onClick:o,className:`flex h-8 w-8 items-center justify-center rounded-full bg-accent-yellow text-accent-fg transition-all hover:opacity-85 active:scale-95`,title:b(`chat.pauseGen`),"aria-label":b(`chat.pauseGen`),children:(0,Y.jsx)(te,{size:14,"aria-hidden":`true`})}),(0,Y.jsx)(`button`,{onClick:i,className:`flex h-8 w-8 items-center justify-center rounded-full bg-accent-red text-accent-fg transition-all hover:opacity-85 active:scale-95`,title:b(`chat.stopGen`),"aria-label":b(`chat.stopGen`),children:(0,Y.jsx)(v,{size:13,"aria-hidden":`true`})})]}):(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[w&&(0,Y.jsx)(`button`,{onClick:i,className:`flex h-8 w-8 items-center justify-center rounded-full bg-accent-red/80 text-accent-fg transition-all hover:opacity-85 active:scale-95`,title:b(`chat.stopGen`),"aria-label":b(`chat.stopGen`),children:(0,Y.jsx)(v,{size:13,"aria-hidden":`true`})}),(0,Y.jsx)(`button`,{onClick:()=>void Kr(),disabled:!Ci,className:`flex h-8 w-8 items-center justify-center rounded-full bg-dark-text text-dark-bg transition-all
14
- hover:opacity-80 active:scale-95 disabled:opacity-25 disabled:cursor-not-allowed`,title:b(w?`chat.sendQueuedBtn`:`chat.sendBtn`),"aria-label":b(w?`chat.sendQueuedBtn`:`chat.sendBtn`),children:(0,Y.jsx)(c,{size:15,"aria-hidden":`true`})})]})]})]})]}),(0,Y.jsxs)(`div`,{className:`mt-1.5 hidden select-none items-center justify-center gap-3 text-badge text-dark-muted/55 transition-opacity duration-150 sm:flex ${hi?`opacity-0`:``}`,children:[(0,Y.jsx)(`span`,{children:b(`chat.shiftEnter`)}),(0,Y.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,Y.jsx)(`span`,{children:b(`chat.escHint`)}),(0,Y.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,Y.jsx)(`span`,{children:`${Ei}+Shift+S ${b(`shortcuts.screenshot`)}`}),(0,Y.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,Y.jsx)(`span`,{children:b(`chat.bangHint`)})]}),(0,Y.jsx)(pn,{open:be,onClose:()=>xe(!1),onSelect:Mr})]})});export{Kt as n,Et as r,nr as t};
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$ as t,Un as n,Ur as r,br as i,g as a,vr as o,yr as s}from"./icons-BvYhTENi.js";import{t as c}from"./useTranslation-BGmCDuQI.js";import{n as l,r as u}from"./settingsStore-RLUAWgIk.js";import{r as d}from"./api-CCt9DRQm.js";import{I as f}from"./markdown-DAQZeY5V.js";var p=e(r(),1),m=f(),ee=[`fact`,`code_change`,`user_preference`,`error_fix`,`decision`,`convention`,`goal`,`interaction`],h=6e3,g=500;function te(e){if(!Number.isFinite(e))return 50;let t=Math.floor(e);return t>=5&&t<=g?t:50}function _(e){if(!Number.isFinite(e)||e<=0)return`—`;try{return new Date(e).toLocaleString()}catch{return`—`}}function v(){let{t:e}=c(),r=te(u(e=>e.memoryPageSize)),a=u(e=>e.setMemoryPageSize),s=(0,p.useMemo)(()=>l.includes(r)?l:[...l,r].sort((e,t)=>e-t),[r]),[f,_]=(0,p.useState)([]),[v,b]=(0,p.useState)(null),[x,re]=(0,p.useState)(null),[S,C]=(0,p.useState)(!1),[w,T]=(0,p.useState)(null),[E,ie]=(0,p.useState)(`all`),[D,ae]=(0,p.useState)(`all`),[O,oe]=(0,p.useState)(`time`),[k,A]=(0,p.useState)({}),[j,M]=(0,p.useState)(null),[N,P]=(0,p.useState)([]),[F,I]=(0,p.useState)([]),[L,R]=(0,p.useState)(1),z=(0,p.useRef)(null),B=(0,p.useRef)(null),V=(0,p.useRef)(null),[H,U]=(0,p.useState)(null),W=(0,p.useCallback)(e=>{R(e),V.current&&(V.current.scrollTop=0)},[]),G=(0,p.useCallback)(async()=>{C(!0),T(null);let[t,n]=await Promise.all([d.get(`/api/memory/status`),d.get(`/api/memory/list?limit=${g}`)]);t.success&&t.data?b(t.data):T(t.error??e(`memory.loadFailed`)),n.success&&n.data?(_(n.data.items??[]),re(n.data.stats??null),A(n.data.usage??{}),M(n.data.usageSummary??null),P([]),n.data.warnings?.length&&T(e(`memory.partialRead`,{reason:n.data.warnings[0]}))):T(n.error??e(`memory.loadFailed`)),C(!1)},[e]);(0,p.useEffect)(()=>{G()},[G]);let K=(0,p.useCallback)(async t=>{z.current!==null&&(window.clearTimeout(z.current),z.current=null),B.current=null,U(null);let n=await d.post(`/api/memory/delete`,{id:t});if(n.success&&n.data?.deleted===!0){T(e(`memory.deleted`));return}let r=n.success?n.data?.reason??e(`memory.deleteUnavailable`):n.error??``;P(e=>e.filter(e=>e!==t)),T(e(`memory.deleteFailed`,{reason:r}))},[e]),q=(0,p.useCallback)(e=>{B.current&&K(B.current.id),P(t=>t.includes(e.id)?t:[...t,e.id]);let t={id:e.id,content:e.content};B.current=t,U(t),z.current=window.setTimeout(()=>{K(e.id)},h)},[K]),se=(0,p.useCallback)(()=>{let t=B.current;t&&(z.current!==null&&(window.clearTimeout(z.current),z.current=null),B.current=null,U(null),P(e=>e.filter(e=>e!==t.id)),T(e(`memory.undoDone`)))},[e]);(0,p.useEffect)(()=>()=>{z.current!==null&&window.clearTimeout(z.current);let e=B.current;e&&d.post(`/api/memory/delete`,{id:e.id})},[]);let J=(0,p.useMemo)(()=>{let e=new Set(N);return f.filter(t=>!(e.has(t.id)||E!==`all`&&t.scope!==E||D!==`all`&&t.type!==D))},[f,N,E,D]),Y=(0,p.useMemo)(()=>{let e=new Map;for(let t of J){let n=t.subject?`s:${t.subject}|${t.layer??`fact`}`:`i:${t.id}`,r=e.get(n);r?r.push(t):e.set(n,[t])}let t=[];for(let[n,r]of e){let[e,...i]=[...r].sort((e,t)=>t.timestamp-e.timestamp);e&&t.push({key:n,head:e,rest:i})}return t.sort((e,t)=>{if(O===`usage`){let n=(k[t.head.id]?.count??0)-(k[e.head.id]?.count??0);if(n!==0)return n}return t.head.timestamp-e.head.timestamp})},[J,O,k]),X=Math.max(1,Math.ceil(Y.length/r)),Z=Math.min(L,X),ce=(0,p.useMemo)(()=>Y.slice((Z-1)*r,Z*r),[Y,Z,r]),le=e=>{I(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},Q=v!=null&&!v.tombstones,$=(0,p.useMemo)(()=>{let e=new Set(f.map(e=>e.scope));return[`global`,`workspace`].filter(t=>e.has(t))},[f]);return(0,m.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,m.jsxs)(`div`,{className:`flex h-12 shrink-0 items-center gap-3 border-b border-dark-border px-4`,children:[(0,m.jsx)(n,{size:16,className:`shrink-0 text-dark-muted`,"aria-hidden":`true`}),(0,m.jsx)(`span`,{className:`truncate text-sm font-medium text-dark-text`,children:e(`memory.title`)}),v?.workspaceHash?(0,m.jsx)(`span`,{className:`truncate text-[11px] text-dark-muted opacity-60`,children:v.workspaceHash}):null,(0,m.jsx)(`span`,{className:`ms-auto truncate text-[11px] text-dark-muted`,children:e(`memory.recallElsewhere`)})]}),v&&!v.active?(0,m.jsxs)(`div`,{className:`mx-4 mt-3 rounded border border-amber-500/40 bg-amber-500/10 px-3 py-2 text-xs text-amber-200`,children:[(0,m.jsx)(`div`,{className:`font-medium`,children:e(`memory.disabled`)}),(0,m.jsx)(`div`,{className:`mt-1 text-amber-200/80`,children:v.reason??e(`memory.disabledHint`)}),(0,m.jsxs)(`div`,{className:`mt-1 text-amber-200/60`,children:[e(`memory.backendLabel`),`: `,v.backend,v.cause?` · ${v.cause}`:``]})]}):null,(0,m.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-2 border-b border-dark-border px-4 py-2`,children:[(0,m.jsxs)(`label`,{className:`flex items-center gap-1 text-xs text-dark-muted`,children:[e(`memory.filterScope`),(0,m.jsxs)(`select`,{value:E,onChange:e=>{ie(e.target.value),W(1)},className:`rounded border border-dark-border bg-dark-surface px-1.5 py-1 text-xs text-dark-text`,children:[(0,m.jsx)(`option`,{value:`all`,children:e(`memory.all`)}),($.length>0?$:[`global`,`workspace`]).map(t=>(0,m.jsx)(`option`,{value:t,children:e(t===`global`?`memory.scopeGlobal`:`memory.scopeWorkspace`)},t))]})]}),(0,m.jsxs)(`label`,{className:`flex items-center gap-1 text-xs text-dark-muted`,children:[e(`memory.filterCategory`),(0,m.jsxs)(`select`,{value:D,onChange:e=>{ae(e.target.value),W(1)},className:`rounded border border-dark-border bg-dark-surface px-1.5 py-1 text-xs text-dark-text`,children:[(0,m.jsx)(`option`,{value:`all`,children:e(`memory.all`)}),ee.map(t=>(0,m.jsx)(`option`,{value:t,children:e(`memory.category.${t}`)},t))]})]}),(0,m.jsxs)(`label`,{className:`flex items-center gap-1 text-xs text-dark-muted`,children:[e(`memory.sortBy`),(0,m.jsxs)(`select`,{value:O,onChange:e=>{oe(e.target.value),W(1)},className:`rounded border border-dark-border bg-dark-surface px-1.5 py-1 text-xs text-dark-text`,children:[(0,m.jsx)(`option`,{value:`time`,children:e(`memory.sortTime`)}),(0,m.jsx)(`option`,{value:`usage`,children:e(`memory.sortUsage`)})]})]}),(0,m.jsxs)(`label`,{className:`flex items-center gap-1 text-xs text-dark-muted`,children:[e(`memory.pageSize`),(0,m.jsx)(`select`,{"data-testid":`memory-page-size`,value:r,onChange:e=>{a(Number(e.target.value)),W(1)},className:`rounded border border-dark-border bg-dark-surface px-1.5 py-1 text-xs text-dark-text`,children:s.map(t=>(0,m.jsx)(`option`,{value:t,children:e(`memory.pageSizeOption`,{count:t})},t))})]}),(0,m.jsxs)(`span`,{className:`text-xs text-dark-muted`,children:[e(`memory.count`,{count:J.length}),x?` · ${e(`memory.totalCount`,{count:x.totalItems})}`:``,x?.truncated?` (${e(`memory.truncated`)})`:``]}),j?(0,m.jsx)(`span`,{className:`text-[11px] text-dark-muted opacity-70`,title:j.ledgerPath??void 0,children:j.enabled?e(`memory.usageSummary`,{events:j.totalEvents,ids:j.distinctIds}):e(`memory.usageOff`)}):null,(0,m.jsxs)(`button`,{type:`button`,onClick:()=>void G(),disabled:S,className:`ms-auto flex items-center gap-1 rounded px-2 py-1 text-xs text-dark-muted hover:bg-dark-hover hover:text-dark-text disabled:opacity-50`,children:[(0,m.jsx)(t,{size:13,className:S?`animate-spin`:void 0,"aria-hidden":`true`}),e(`memory.refresh`)]})]}),Q?(0,m.jsxs)(`div`,{className:`mx-4 mt-2 rounded border border-dark-border bg-dark-surface px-3 py-2 text-xs text-dark-muted`,children:[(0,m.jsx)(`span`,{className:`text-dark-text`,children:e(`memory.localDeleteOff`)}),(0,m.jsx)(`span`,{className:`ms-1`,children:e(`memory.localDeleteOffHint`)})]}):null,w?(0,m.jsx)(`div`,{className:`mx-4 mt-2 rounded border border-dark-border bg-dark-surface px-3 py-2 text-xs text-dark-text`,children:w}):null,(0,m.jsx)(`div`,{ref:V,className:`flex-1 overflow-y-auto px-4 py-3`,children:S&&f.length===0?(0,m.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e(`memory.loading`)}):Y.length===0?(0,m.jsxs)(`div`,{className:`text-xs text-dark-muted`,children:[(0,m.jsx)(`div`,{children:e(`memory.empty`)}),(0,m.jsx)(`div`,{className:`mt-1 text-dark-muted/70`,children:e(`memory.emptyHint`)})]}):(0,m.jsx)(`ul`,{className:`space-y-2`,children:ce.map(({key:t,head:n,rest:r})=>{let a=F.includes(t);return(0,m.jsxs)(`li`,{className:`rounded border border-dark-border bg-dark-surface p-3`,children:[(0,m.jsx)(y,{item:n,usage:k[n.id],onDelete:Q?void 0:q,muted:!1}),r.length>0?(0,m.jsxs)(m.Fragment,{children:[(0,m.jsxs)(`button`,{type:`button`,onClick:()=>le(t),className:`mt-2 flex items-center gap-1 text-xs text-dark-muted hover:text-dark-text`,children:[a?(0,m.jsx)(i,{size:12,"aria-hidden":`true`}):(0,m.jsx)(o,{size:12,"aria-hidden":`true`}),e(`memory.collapsed`,{count:r.length})]}),a?(0,m.jsx)(`ul`,{className:`mt-2 space-y-2 border-s border-dark-border ps-3`,children:r.map(e=>(0,m.jsx)(`li`,{children:(0,m.jsx)(y,{item:e,usage:k[e.id],onDelete:Q?void 0:q,muted:!0})},e.id))}):null]}):null]},t)})})}),X>1?(0,m.jsx)(ne,{page:Z,pageCount:X,onChange:W}):null,H?(0,m.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-3 border-t border-dark-border bg-dark-surface px-4 py-2`,children:[(0,m.jsxs)(`span`,{className:`min-w-0 flex-1 truncate text-xs text-dark-muted`,children:[e(`memory.pendingDelete`),`: `,H.content]}),(0,m.jsx)(`button`,{type:`button`,onClick:se,className:`shrink-0 rounded border border-dark-border px-2 py-1 text-xs text-dark-text hover:bg-dark-hover`,children:e(`memory.undo`)})]}):null]})}function y({item:e,usage:t,onDelete:n,muted:r}){let{t:i}=c();return(0,m.jsxs)(`div`,{className:r?`opacity-60`:void 0,children:[(0,m.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,m.jsx)(`p`,{className:`min-w-0 flex-1 whitespace-pre-wrap break-words text-sm text-dark-text`,children:e.content}),n?(0,m.jsx)(`button`,{type:`button`,onClick:()=>n(e),title:i(`memory.delete`),"aria-label":i(`memory.delete`),className:`shrink-0 rounded p-1 text-dark-muted hover:bg-dark-hover hover:text-red-400`,children:(0,m.jsx)(a,{size:13,"aria-hidden":`true`})}):null]}),(0,m.jsxs)(`div`,{className:`mt-1.5 flex flex-wrap items-center gap-x-2 gap-y-1 text-[11px] text-dark-muted`,children:[(0,m.jsx)(`span`,{className:`rounded bg-dark-hover px-1.5 py-0.5`,children:i(e.scope===`global`?`memory.scopeGlobal`:e.scope===`session`?`memory.scopeSession`:`memory.scopeWorkspace`)}),(0,m.jsx)(`span`,{className:`rounded bg-dark-hover px-1.5 py-0.5`,children:i(`memory.category.${e.type}`,{defaultValue:e.type})}),e.layer===`experience`?(0,m.jsxs)(`span`,{className:`rounded bg-dark-hover px-1.5 py-0.5 text-amber-300/90`,children:[i(`memory.layerExperience`),e.boundaryEnvs?.length?`: ${e.boundaryEnvs.join(`, `)}`:``]}):null,e.subject?(0,m.jsxs)(`span`,{className:`rounded bg-dark-hover px-1.5 py-0.5`,children:[`#`,e.subject]}):null,(0,m.jsx)(`span`,{children:i(`memory.confidenceShort`,{value:Math.round((e.confidence??0)*100)})}),(0,m.jsx)(`span`,{className:t?.count?`text-emerald-300/90`:`opacity-70`,children:t?.count?i(`memory.usageUsed`,{count:t.count}):i(`memory.usageNever`)}),t?.lastUsedAt?(0,m.jsx)(`span`,{className:`opacity-70`,children:i(`memory.usageLastAt`,{time:_(t.lastUsedAt)})}):null,(0,m.jsx)(`span`,{children:_(e.timestamp)}),e.id?(0,m.jsx)(`span`,{className:`truncate opacity-60`,children:e.id}):null]})]})}function b(e,t){if(t<=7)return Array.from({length:t},(e,t)=>t+1);let n=[1],r=Math.max(2,e-1),i=Math.min(t-1,e+1);r>2&&n.push(null);for(let e=r;e<=i;e+=1)n.push(e);return i<t-1&&n.push(null),n.push(t),n}function ne({page:e,pageCount:t,onChange:n}){let{t:r}=c(),i=`rounded border border-dark-border p-1 text-dark-muted hover:bg-dark-hover hover:text-dark-text disabled:cursor-not-allowed disabled:opacity-40`;return(0,m.jsxs)(`div`,{"data-testid":`memory-pager`,className:`flex shrink-0 items-center justify-end gap-1 border-t border-dark-border px-4 py-2`,children:[(0,m.jsx)(`button`,{type:`button`,onClick:()=>n(e-1),disabled:e<=1,"aria-label":r(`common.prevPage`),className:i,children:(0,m.jsx)(s,{size:13,"aria-hidden":`true`})}),b(e,t).map((t,r)=>t===null?(0,m.jsx)(`span`,{className:`px-1 text-xs text-dark-muted opacity-60`,children:`…`},`gap-${r}`):(0,m.jsx)(`button`,{type:`button`,"data-testid":`memory-page-${t}`,onClick:()=>n(t),"aria-current":t===e?`page`:void 0,className:t===e?`min-w-[1.75rem] rounded border border-accent-blue/60 bg-accent-blue/15 px-1.5 py-1 text-xs text-dark-text`:`min-w-[1.75rem] rounded border border-dark-border px-1.5 py-1 text-xs text-dark-muted hover:bg-dark-hover hover:text-dark-text`,children:t},t)),(0,m.jsx)(`button`,{type:`button`,onClick:()=>n(e+1),disabled:e>=t,"aria-label":r(`common.nextPage`),className:i,children:(0,m.jsx)(o,{size:13,"aria-hidden":`true`})})]})}export{v as MemoryView};
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$ as t,Ln as n,O as r,Or as i,Qt as a,Ur as o,Vn as s,W as c,_r as l,a as u,dr as d,g as f,i as p,m as ee,mt as te,n as ne,ot as re,st as ie}from"./icons-BvYhTENi.js";import{t as m}from"./useTranslation-BGmCDuQI.js";import{n as h,t as g}from"./cn-rx4uumOJ.js";import{t as _}from"./src-49LUQhkG.js";import{l as ae}from"./workspaceSemantics-RaIRer76.js";import{t as v}from"./api-CCt9DRQm.js";import{I as y}from"./markdown-DAQZeY5V.js";import{A as oe,c as b,d as se,f as ce,h as le}from"./common-BHXgEvgk.js";import{d as x,f as S,u as ue}from"./index-BX-d2OBW.js";var C=e(o(),1),w=y();function T(e){return e==null?``:String(e)}function de({provider:e,modelId:t,current:n,catalog:r,onSaved:i,className:a}){let{t:o}=m(),[s,c]=(0,C.useState)(!1),[l,u]=(0,C.useState)({input:T(n?.input),output:T(n?.output),cacheRead:T(n?.cacheRead),cacheWrite:T(n?.cacheWrite)}),d=(0,C.useRef)(!1),f=`${n?.input??``}|${n?.output??``}|${n?.cacheRead??``}|${n?.cacheWrite??``}`;(0,C.useEffect)(()=>{d.current||u({input:T(n?.input),output:T(n?.output),cacheRead:T(n?.cacheRead),cacheWrite:T(n?.cacheWrite)})},[f]);let p=(0,C.useMemo)(()=>(r.input??0)>0||(r.output??0)>0?{input:String(r.input),output:String(r.output),cacheRead:String(r.cacheRead||r.input),cacheWrite:String(r.cacheWrite||r.input)}:{input:`—`,output:`—`,cacheRead:`—`,cacheWrite:`—`},[r.input,r.output,r.cacheRead,r.cacheWrite]),ee=async()=>{let r={};for(let e of[`input`,`output`,`cacheRead`,`cacheWrite`]){let t=l[e].trim();if(t===``)continue;let n=Number(t);if(!Number.isFinite(n)||n<0){h.error(o(`models.priceInvalid`,{field:o(`models.price_${e}`)}));return}r[e]=n}let a=Object.keys(r).length===0;if((n?.input??void 0)!==r.input||(n?.output??void 0)!==r.output||(n?.cacheRead??void 0)!==r.cacheRead||(n?.cacheWrite??void 0)!==r.cacheWrite){c(!0),d.current=!0;try{await v.models.update(e,t,{model:{pricing:a?null:r}}),h.success(o(`models.priceSaved`,{model:t})),i?.()}catch(e){h.error(e instanceof Error?e.message:o(`models.priceSaveFailed`))}finally{c(!1),window.setTimeout(()=>{d.current=!1},0)}}};return(0,w.jsxs)(`div`,{className:g(`flex flex-wrap items-center gap-2 text-xs`,a),children:[(0,w.jsx)(`span`,{className:`text-dark-muted whitespace-nowrap`,title:o(`models.priceHint`),children:o(`models.priceOverride`)}),[`input`,`output`,`cacheRead`,`cacheWrite`].map(e=>(0,w.jsxs)(`label`,{className:`flex items-center gap-1`,children:[(0,w.jsx)(`span`,{className:`text-dark-tertiary whitespace-nowrap`,children:o(`models.price_${e}`)}),(0,w.jsx)(`input`,{type:`number`,min:0,step:`0.001`,inputMode:`decimal`,value:l[e],placeholder:p[e],disabled:s,onChange:t=>u(n=>({...n,[e]:t.target.value})),onBlur:()=>void ee(),onKeyDown:e=>{e.key===`Enter`&&ee()},className:g(`w-20 rounded border bg-dark-bg px-1.5 py-0.5 text-xs text-dark-text disabled:opacity-50`,l[e].trim()===``?`border-dark-border`:`border-accent-yellow`),title:`${o(`models.price_${e}`)} · ${o(`models.pricePerMillion`)}`})]},e)),(0,w.jsx)(`span`,{className:`text-badge text-dark-tertiary`,children:o(`models.pricePerMillion`)})]})}function fe({modelId:e,className:t}){let{t:n}=m(),r=b(e=>e.kinds),i=b(e=>e.entries),a=b(e=>e.saving),o=b(e=>e.saveEntry),s=b(e=>e.load);if((0,C.useEffect)(()=>{s()},[s]),r.length===0)return null;let c=e=>{let t=r.find(t=>t.id===e);return t?.labelKey?n(t.labelKey):e},l=async t=>{let r=i[t],a=r?.model===e,s=r?.model,l={...r??{}};a?(delete l.model,delete l.provider):l.model=e;let u=Object.values(l).some(e=>e!==void 0);await o(t,u?l:null)&&(a?h.success(n(`models.kindUnboundToast`,{kind:c(t),model:e})):s&&s!==e?h.success(n(`models.kindRebindToast`,{kind:c(t),from:s,to:e})):h.success(n(`models.kindBoundToast`,{kind:c(t),model:e})))};return(0,w.jsxs)(`div`,{className:g(`flex flex-wrap items-center gap-1.5 text-xs`,t),children:[(0,w.jsx)(`span`,{className:`text-dark-muted whitespace-nowrap`,title:n(`models.kindTagsHint`),children:n(`models.kindTags`)}),r.map(t=>{let r=i[t.id]?.model,o=r===e,s=!o&&r?r:null;return(0,w.jsx)(`button`,{type:`button`,disabled:a,onClick:()=>void l(t.id),title:s?n(`models.kindTakenHint`,{kind:c(t.id),model:s}):n(`models.kindTagsHint`),className:g(`px-1.5 py-0.5 rounded border transition-colors disabled:opacity-50`,o?`bg-accent-blue/20 border-accent-blue text-accent-blue font-medium`:s?`bg-dark-bg border-dark-border text-dark-tertiary`:`bg-dark-bg border-dark-border text-dark-muted hover:border-accent-blue/60 hover:text-dark-text`),children:c(t.id)},t.id)})]})}function pe({className:e}){let{t}=m(),n=b(e=>e.kinds),r=b(e=>e.entries);if(n.length===0)return null;let i=e=>{let r=n.find(t=>t.id===e);return r?.labelKey?t(r.labelKey):e},a=n.filter(e=>r[e.id]?.model).length;return(0,w.jsxs)(`div`,{className:g(`flex flex-wrap items-center gap-1.5 text-xs`,e),children:[(0,w.jsx)(`span`,{className:`text-dark-muted whitespace-nowrap`,title:t(`models.kindOverviewHint`),children:t(`models.kindOverview`)}),n.map(e=>{let n=r[e.id]?.model;return(0,w.jsxs)(`span`,{className:g(`inline-flex items-center gap-1 rounded border px-1.5 py-0.5`,n?`border-accent-blue/50 bg-accent-blue/10 text-accent-blue`:`border-dark-border bg-dark-bg text-dark-tertiary`),title:n?t(`models.kindOverviewBound`,{kind:i(e.id),model:n}):t(`models.kindOverviewInherit`,{kind:i(e.id)}),children:[(0,w.jsx)(`span`,{children:i(e.id)}),(0,w.jsx)(`span`,{className:`opacity-80`,children:`·`}),(0,w.jsx)(`span`,{className:`max-w-[12rem] truncate`,children:n||t(`models.kindInheritShort`)})]},e.id)}),(0,w.jsx)(`span`,{className:`text-badge text-dark-tertiary tabular-nums`,children:t(`models.kindOverviewCount`,{bound:a,total:n.length})})]})}var E=46,D=132;function me({points:e,showValueLabels:t=!1}){let{t:n}=m();if(e.length===0)return(0,w.jsx)(`div`,{className:`flex h-32 items-center justify-center text-xs text-dark-muted`,children:n(`insights.noUsageData`)});let r=Math.max(...e.map(e=>e.totalTokens),1),i=Math.max(...e.filter(e=>e.priced).map(e=>e.costDollars),0),a=e.length*E,o=e=>e<=0?0:Math.max(2,e/r*94),s=e=>i<=0?110:110-e/i*94,c=[],l=!1;return e.forEach((e,t)=>{let n=t*E+E/2;if(!e.priced){l=!1;return}let r=s(e.costDollars);c.push(`${l?`L`:`M`} ${n.toFixed(1)} ${r.toFixed(1)}`),l=!0}),(0,w.jsxs)(`div`,{className:`overflow-x-auto`,children:[(0,w.jsxs)(`svg`,{width:a,height:D,className:`min-w-full`,role:`img`,"aria-label":n(`insights.usageTrend`),children:[e.map((e,r)=>{let i=r*E+E/2,a=o(e.totalTokens);return(0,w.jsxs)(`g`,{children:[(0,w.jsx)(`rect`,{x:i-11,y:110,width:22,height:1,className:`fill-dark-border`}),a>0&&(0,w.jsx)(`rect`,{"data-testid":`daily-bar`,"data-day":e.day,x:i-11,y:110-a,width:22,height:a,rx:2,className:`fill-accent-blue/70`,children:(0,w.jsx)(`title`,{children:`${e.day} · ${x(e.totalTokens)} token · ${e.priced?S(e.costDollars):n(`insights.costUnknown`)}`})}),t&&e.totalTokens>0&&(0,w.jsx)(`text`,{"data-testid":`daily-value`,x:i,y:110-a-4,textAnchor:`middle`,className:e.priced?`fill-dark-text`:`fill-dark-muted`,style:{fontSize:9},children:e.priced?S(e.costDollars):`—`}),(0,w.jsx)(`text`,{x:i,y:123,textAnchor:`middle`,className:`fill-dark-muted`,style:{fontSize:9},children:e.day.slice(5)})]},e.day)}),c.length>0&&(0,w.jsx)(`path`,{d:c.join(` `),fill:`none`,className:`stroke-accent-green`,strokeWidth:1.6,strokeLinejoin:`round`,strokeLinecap:`round`})]}),(0,w.jsxs)(`div`,{className:`mt-1 flex items-center gap-3 text-badge text-dark-muted`,children:[(0,w.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,w.jsx)(`span`,{className:`inline-block h-2 w-2 rounded-sm bg-accent-blue/70`}),n(`insights.legendTokens`)]}),(0,w.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,w.jsx)(`span`,{className:`inline-block h-0.5 w-3 bg-accent-green`}),n(`insights.legendCost`)]})]})]})}var he=14;function O(e){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`}function ge(e){if(!e||typeof e!=`object`)return null;let t=e,n=typeof t.day==`string`?t.day:typeof t.date==`string`?t.date:void 0;if(!n)return null;let r=e=>typeof e==`number`&&Number.isFinite(e)?e:0;return{day:n,costDollars:r(t.costDollars),requests:r(t.requests),inputTokens:r(t.inputTokens),outputTokens:r(t.outputTokens),totalTokens:r(t.totalTokens),cacheReadTokens:r(t.cacheReadTokens),cacheWriteTokens:r(t.cacheWriteTokens),priced:t.priced===!0}}function _e({className:e}){let{t:n}=m(),[r,i]=(0,C.useState)(null),[a,o]=(0,C.useState)(!1),[s,c]=(0,C.useState)(null),[l,u]=(0,C.useState)(0);(0,C.useEffect)(()=>{let e=()=>u(e=>e+1);return window.addEventListener(`models-updated`,e),()=>window.removeEventListener(`models-updated`,e)},[]),(0,C.useEffect)(()=>{let e=!1;return o(!0),c(null),(async()=>{try{let t=await v.observability.costs();if(e)return;t.success&&t.data?i(t.data):c(t.error||n(`models.usageLoadFailed`))}catch(t){e||c(t instanceof Error?t.message:n(`models.usageLoadFailed`))}finally{e||o(!1)}})(),()=>{e=!0}},[l]);let d=(0,C.useMemo)(()=>{let e=new Map;for(let t of r?.daily??[]){let n=ge(t);n&&e.set(n.day,n)}let t=[],n=new Date;for(let r=13;r>=0;r--){let i=O(new Date(n.getFullYear(),n.getMonth(),n.getDate()-r)),a=e.get(i);t.push(a?{...a,empty:!1}:{day:i,costDollars:0,requests:0,inputTokens:0,outputTokens:0,totalTokens:0,cacheReadTokens:0,cacheWriteTokens:0,priced:!1,empty:!0})}return t},[r]),f=(0,C.useMemo)(()=>{let e=0,t=0,n=0,r=0;for(let i of d)e+=i.totalTokens,t+=i.requests,n+=i.cacheReadTokens,r+=i.inputTokens;return{tokens:e,requests:t,inputTokens:r,cacheReadTokens:n}},[d]),p=(0,C.useMemo)(()=>{let e=[...r?.byModel??[]].sort((e,t)=>t.totalCostDollars-e.totalCostDollars),t=Math.max(1e-9,...e.map(e=>e.totalCostDollars));return{rows:e.slice(0,5),maxCost:t}},[r]),ee=!!(r&&(r.totalCostDollars>0||f.tokens>0||(r.byModel?.length??0)>0));return(0,w.jsxs)(`div`,{className:g(`rounded-lg border border-dark-border bg-dark-surface/40 p-3`,e),children:[(0,w.jsxs)(`div`,{className:`mb-2 flex items-center justify-between gap-2`,children:[(0,w.jsx)(`h3`,{className:`text-sm font-medium`,children:n(`models.usageTitle`)}),(0,w.jsxs)(`button`,{type:`button`,onClick:()=>u(e=>e+1),disabled:a,className:`inline-flex items-center gap-1 rounded border border-dark-border px-2 py-0.5 text-xs text-dark-muted hover:text-dark-text disabled:opacity-50`,title:n(`models.usageRefresh`),children:[(0,w.jsx)(t,{size:11,className:a?`animate-spin`:void 0}),n(`models.usageRefresh`)]})]}),s&&(0,w.jsx)(`div`,{className:`text-xs text-accent-red`,children:s}),!s&&!ee&&!a&&(0,w.jsx)(`div`,{className:`py-6 text-center text-xs text-dark-muted`,children:n(`models.usageEmpty`)}),ee&&(0,w.jsxs)(w.Fragment,{children:[(0,w.jsxs)(`div`,{className:`mb-3 grid grid-cols-2 gap-2 sm:grid-cols-4`,children:[(0,w.jsx)(k,{label:n(`models.usageTotalCost`),value:S(r.totalCostDollars),tone:`cost`}),(0,w.jsx)(k,{label:n(`models.usageWindowTokens`,{days:he}),value:x(f.tokens)}),(0,w.jsx)(k,{label:n(`models.usageWindowRequests`,{days:he}),value:String(f.requests)}),(0,w.jsx)(k,{label:n(`models.usageCacheHitRate`),value:ue(f.cacheReadTokens,f.inputTokens,0)})]}),(0,w.jsx)(`div`,{className:`mb-1 flex items-baseline justify-between`,children:(0,w.jsx)(`span`,{className:`text-badge text-dark-muted`,children:n(`models.usageDailyTitle`)})}),(0,w.jsx)(me,{points:d,showValueLabels:!0}),p.rows.length>0&&(0,w.jsxs)(`div`,{className:`mt-3 border-t border-dark-border/60 pt-2`,children:[(0,w.jsx)(`div`,{className:`mb-1 text-badge text-dark-muted`,children:n(`models.usageTopModels`)}),(0,w.jsx)(`div`,{className:`space-y-1`,children:p.rows.map(e=>(0,w.jsxs)(`div`,{className:`flex items-center gap-2 text-xs`,children:[(0,w.jsx)(`span`,{className:`w-40 shrink-0 truncate text-dark-text`,title:e.modelId,children:e.modelId}),(0,w.jsx)(`div`,{className:`h-2 flex-1 overflow-hidden rounded-full bg-dark-border/40`,children:(0,w.jsx)(`div`,{className:`h-full rounded-full bg-accent-purple/70`,style:{width:`${Math.max(1,e.totalCostDollars/p.maxCost*100)}%`}})}),(0,w.jsx)(`span`,{className:`w-20 shrink-0 text-end tabular-nums text-accent-yellow`,children:S(e.totalCostDollars)}),(0,w.jsx)(`span`,{className:`w-20 shrink-0 text-end tabular-nums text-dark-muted`,children:x(e.totalInputTokens+e.totalOutputTokens)}),(0,w.jsxs)(`span`,{className:`w-16 shrink-0 text-end tabular-nums text-dark-tertiary`,children:[e.requestCount,`×`]})]},e.modelId))})]}),d.some(e=>!e.priced&&!e.empty)&&(0,w.jsx)(`div`,{className:`mt-2 text-badge text-accent-yellow`,children:n(`models.usageCostUnknownHint`)})]})]})}function k({label:e,value:t,tone:n}){return(0,w.jsxs)(`div`,{className:`rounded border border-dark-border/60 bg-dark-bg px-2 py-1.5`,children:[(0,w.jsx)(`div`,{className:`text-badge text-dark-muted truncate`,children:e}),(0,w.jsx)(`div`,{className:g(`text-sm font-semibold tabular-nums`,n===`cost`?`text-accent-yellow`:`text-dark-text`),children:t})]})}function ve(){let[e,t]=(0,C.useState)([]),[n,r]=(0,C.useState)(`1.0`),[i,a]=(0,C.useState)(!0),[o,s]=(0,C.useState)(!0),[c,l]=(0,C.useState)(null),u=(0,C.useCallback)(async()=>{s(!0),l(null);try{let e=await v.providers.presets();e.success&&e.data?(t(Array.isArray(e.data.providers)?e.data.providers:[]),r(e.data.version||`1.0`),a(e.data.customSupported!==!1)):l(e.error||`获取 Provider 列表失败`)}catch(e){l(e instanceof Error?e.message:`未知错误`)}finally{s(!1)}},[]);return(0,C.useEffect)(()=>{u()},[u]),{presets:e,loading:o,error:c,version:n,customSupported:i,reload:u}}var ye=[{key:`global`,labelKey:`chat.globalDefault`,color:`text-accent-red`,bg:`bg-accent-red/20`},{key:`goal`,labelKey:`chat.goalDefault`,color:`text-accent-purple`,bg:`bg-accent-purple/20`}];function be(e){let t=Number((e??``).trim());return Number.isFinite(t)&&t>0?Math.floor(t):null}var xe={providerKey:``,apiKeys:[],modelIds:``,baseUrl:``,apiType:``,fullPath:!1,setDefault:!1,modelOverrides:{}},Se=_,Ce={"openai-chat-completions":`OpenAI Chat`,"openai-completions":`OpenAI Compatible`,"openai-responses":`OpenAI Responses`,"anthropic-messages":`Anthropic Messages`,"codex-responses":`Codex (本机登录)`,"claude-code":`Claude Code (本机登录)`};function A(e){return e.trim().split(`|`)[0].trim()}function we(e){let t=e.toLowerCase();return t.startsWith(`claude-code://`)||t.includes(`/backend-api/codex`)?t.startsWith(`claude-code://`)?`claude-code`:`codex-responses`:t.includes(`/anthropic`)||t.includes(`/coding`)||t.includes(`/claude`)||t.includes(`/messages`)?`anthropic-messages`:t.includes(`/responses`)?`openai-responses`:`openai-completions`}function Te(e){if(!e)return{};let t={};for(let n of e.models){let r={};n.apiType&&n.apiType!==e.apiType&&(r.apiType=n.apiType),n.baseUrl&&(r.baseUrl=n.baseUrl),typeof n.contextWindow==`number`&&n.contextWindow!==e.contextWindow&&(r.maxInput=String(n.contextWindow)),typeof n.maxTokens==`number`&&n.maxTokens!==e.maxTokens&&(r.maxOutput=String(n.maxTokens)),Object.keys(r).length>0&&(t[n.id]=r)}return t}var Ee={"opencode-free":5,"opencode-go":6,commandcode:7,deepseek:10,moonshotai:20,"moonshotai-cn":21,"kimi-for-coding":22,zhipuai:30,zai:31,"alibaba-cn":40,alibaba:41,minimax:50,"minimax-cn":51,moark:60,siliconflow:70,"siliconflow-cn":71,"stepfun-ai":80,stepfun:81,modelscope:90,openai:100,anthropic:110,google:120,"google-vertex":121,meta:130,mistral:140,groq:150,xai:160,cohere:170,openrouter:180,huggingface:190};function De(){let{presets:e,loading:o,reload:g}=ve(),{t:_}=m(),[y,b]=(0,C.useState)([]),[x,S]=(0,C.useState)(null),[ue,T]=(0,C.useState)(!0),[E,D]=(0,C.useState)(null),[me,he]=(0,C.useState)(null),[O,ge]=(0,C.useState)(null),[k,De]=(0,C.useState)([]),[ke,M]=(0,C.useState)(!1),[Ae,N]=(0,C.useState)(`select`),[P,F]=(0,C.useState)(null),[I,L]=(0,C.useState)(xe),[je,R]=(0,C.useState)(``),[Me,Ne]=(0,C.useState)(!1),[Pe,z]=(0,C.useState)(null),[Fe,B]=(0,C.useState)(!1),[Ie,Le]=(0,C.useState)(!1),[V,Re]=(0,C.useState)(``),[ze,Be]=(0,C.useState)(!1),[H,U]=(0,C.useState)([]),[Ve,W]=(0,C.useState)(new Set),[He,G]=(0,C.useState)(null),[Ue,K]=(0,C.useState)(``),[We,Ge]=(0,C.useState)(!1),[Ke,qe]=(0,C.useState)(!1),[q,J]=(0,C.useState)(null),Je=(0,C.useMemo)(()=>{let e=Ue.trim().toLowerCase();return e?H.filter(t=>t.id.toLowerCase().includes(e)||t.name.toLowerCase().includes(e)):H},[H,Ue]),Y=(0,C.useCallback)(async()=>{try{let e=await v.config.provider.get();e.success&&e.data&&(ge(e.data),De(Array.isArray(e.data.entries)?e.data.entries:[]))}catch{}},[]),X=(0,C.useCallback)(async()=>{T(!0),D(null);try{let[e,t]=await Promise.all([v.models.list(),v.system.status()]);if(await Y(),e.success&&e.data&&Array.isArray(e.data.models)&&b(e.data.models),t.success&&t.data){let e=t.data.models||{total:0,online:0,offline:0};S({overallStatus:e.offline===0?`healthy`:e.online>0?`degraded`:`unhealthy`,healthRate:e.total>0?e.online/e.total:0,healthyInstances:e.online,totalInstances:e.total,totalRequests:0})}}catch{D(_(`models.loadFailed`))}finally{T(!1)}},[Y,_]);(0,C.useEffect)(()=>{X()},[X]),(0,C.useEffect)(()=>{let e=()=>{X(),Y()};return window.addEventListener(`models-updated`,e),()=>window.removeEventListener(`models-updated`,e)},[X,Y]);let Ye=(0,C.useCallback)(e=>`${e.provider}:${e.id}`,[]),Z=(0,C.useMemo)(()=>{let t=[...e];return t.find(e=>e.key===`custom`)||t.push({key:`custom`,name:`Custom`,baseUrl:``,apiType:`openai-completions`,defaultModel:``,isCustom:!0}),t},[e]),Xe=(0,C.useMemo)(()=>[...Z].sort((e,t)=>{if(e.isCustom)return-1;if(t.isCustom)return 1;let n=Ee[e.key],r=Ee[t.key];return n!==void 0&&r!==void 0?n-r:n===void 0?r===void 0?e.name.localeCompare(t.name):1:-1}),[Z]),Ze=(0,C.useMemo)(()=>{let e=V.trim().toLowerCase();return e?Xe.filter(t=>t.name.toLowerCase().includes(e)||t.key.toLowerCase().includes(e)||(t.defaultModel||``).toLowerCase().includes(e)||(t.baseUrl||``).toLowerCase().includes(e)||(t.models||[]).some(t=>String(t).toLowerCase().includes(e))):Xe},[Xe,V]),Q=(0,C.useMemo)(()=>{let e=O?.providers||{},t=new Set(Z.map(e=>e.key)),n=Object.entries(e).filter(([e])=>!t.has(e));if(n.length!==0)return{keys:n.map(([e])=>e),modelCount:n.reduce((e,[,t])=>e+(t.modelCount||0),0),hasApiKey:n.some(([,e])=>e.hasApiKey),baseUrl:n.find(([,e])=>e.baseUrl)?.[1]?.baseUrl||``,apiType:n.find(([,e])=>e.apiType)?.[1]?.apiType||`openai-completions`}},[O,Z]),$=P===`custom`?I.providerKey.trim():P||``,Qe=(0,C.useMemo)(()=>$?y.filter(e=>e.provider===$):[],[y,$]),$e=(0,C.useMemo)(()=>{let e=new Map;for(let t of y)e.has(t.provider)||e.set(t.provider,[]),e.get(t.provider).push(t);for(let t of k)e.has(t.key)||e.set(t.key,[]);let t=[...e.keys()];return t.sort((e,t)=>{let n=Ee[e],r=Ee[t];return n!==void 0&&r!==void 0?n-r:n===void 0?r===void 0?e.localeCompare(t):1:-1}),t.map(t=>({provider:t,models:e.get(t)||[]}))},[y,k]),et=(0,C.useCallback)(e=>{let t=O?.providers?.[e.key],n=k.find(t=>t.key===e.key),r=y.filter(t=>t.provider===e.key).map(e=>e.id),i=e.models?.slice(0,3).join(`, `)||e.defaultModel,a=r.length>0?r.join(`, `):i;F(e.key),R(``),L({providerKey:e.key,apiKeys:[``],modelIds:a,baseUrl:t?.baseUrl||e.baseUrl,apiType:t?.apiType||e.apiType,fullPath:t?.fullPath===!0,setDefault:O?.defaultProvider!==e.key,modelOverrides:Te(n)}),N(`form`),M(!0),z(null),B(!1),U([]),W(new Set),G(null),K(``)},[y,O,k]),tt=(0,C.useCallback)(e=>{let t=O?.providers?.[e],n=k.find(t=>t.key===e),r=y.filter(t=>t.provider===e).map(e=>e.id).join(`, `);F(`custom`),R(e),L({providerKey:e,apiKeys:[``],modelIds:r,baseUrl:t?.baseUrl||``,apiType:t?.apiType||``,fullPath:t?.fullPath===!0,setDefault:O?.defaultProvider!==e,modelOverrides:Te(n)}),z(null),B(!1),U([]),W(new Set),G(null),K(``)},[O,y,k]),nt=(0,C.useCallback)(()=>{F(`custom`),R(``),L({providerKey:``,apiKeys:[``],modelIds:``,baseUrl:``,apiType:``,fullPath:!1,setDefault:!O?.configured,modelOverrides:{}}),N(`form`),M(!0),z(null),B(!1),U([]),W(new Set),G(null),K(``)},[O]),rt=(0,C.useCallback)(async()=>{let e=I.baseUrl;if(!e){G(_(`models.baseUrlRequired`));return}Be(!0),G(null),U([]),W(new Set);let t=Z.find(e=>e.key===P)||null,n=!!t&&!t.isCustom&&(I.baseUrl||``)===t.baseUrl&&I.fullPath!==!0;try{let r=(I.apiKeys||[]).map(e=>e.trim()).filter(Boolean)[0]||``,i=r.replace(/[^\x00-\xFF]/g,``);i!==r&&h.warning(_(`models.apiKeySanitized`));let a=await v.models.fetch(e,i,I.fullPath===!0,n?t.key:void 0);if(a.success&&a.data?.models){let e=a.data.models;U(e),Ge(!0);let t={};for(let n of e)n.protocol&&n.protocol!==I.apiType&&(t[n.id]={apiType:n.protocol});Object.keys(t).length>0&&L(e=>{let n={...e.modelOverrides};for(let[e,r]of Object.entries(t))n[e]?.apiType||(n[e]={...n[e]||{},...r});return{...e,modelOverrides:n}});let n=new Set(e.map(e=>e.id)),r=I.modelIds.split(`,`).map(e=>e.trim()).filter(Boolean),i=r.filter(e=>n.has(e.split(`|`)[0].trim())),o=r.filter(e=>!n.has(e.split(`|`)[0].trim()));if(W(new Set(i.map(e=>e.split(`|`)[0].trim()))),o.length>0){let e=o.map(e=>e.split(`|`)[0].trim());L(e=>({...e,modelIds:i.join(`, `)})),h.warning(_(`models.autoRemovedMissingModels`,{models:e.join(`, `)}))}h.success(_(`models.fetchedCount`,{n:e.length}))}else G(a.error||_(`models.fetchFailed`))}catch(e){G(e instanceof Error?e.message:_(`models.requestFailed`))}finally{Be(!1)}},[I.baseUrl,I.apiKeys,I.modelIds,I.apiType,I.fullPath,P,Z,_]),it=(0,C.useCallback)((e,t,n)=>{if(n!==`supported`&&n!==`unsupported`&&n!==`unknown`)return;let r=n,i=r===`supported`?`Supported`:r===`unsupported`?`Unsupported`:`Unknown`;return{id:e,verdict:r,group:_(`models.${t}Label`),label:_(`models.${t}${i}`),hint:r===`supported`?``:_(`models.${t}Hint${i}`)}},[_]),at=(0,C.useCallback)(async()=>{let e=I.baseUrl;if(!e){J({ok:!1,message:_(`models.baseUrlRequired`)});return}let t=A((I.modelIds||``).split(`,`)[0]||``);qe(!0),J(null);try{let n=(I.apiKeys||[]).map(e=>e.trim()).filter(Boolean)[0]||``,r=n.replace(/[^\x00-\xFF]/g,``);r!==n&&h.warning(_(`models.apiKeySanitized`));let i=await v.providers.testConnection(e,r,t);if(i.success&&i.data?.reachable){let e=i.data,t={};e.resolvedBaseUrl&&e.resolvedBaseUrl!==I.baseUrl&&(t.baseUrl=e.resolvedBaseUrl),e.detectedApiType&&I.apiType===``&&(t.apiType=e.detectedApiType),Object.keys(t).length>0&&L(e=>({...e,...t}));let n=[];t.baseUrl&&n.push(_(`models.baseUrlAutoCompleted`,{url:t.baseUrl})),t.apiType&&n.push(_(`models.apiTypeAutoSelected`,{type:Ce[t.apiType]}));let r=e.message||_(`models.connectionSuccess`),a=[it(`tools`,`toolProbe`,e.tools?.verdict),it(`jsonMode`,`jsonProbe`,e.jsonMode?.verdict)].filter(e=>e!==void 0);J({ok:!0,message:n.length>0?_(`models.connectionSuccessWithHints`,{message:r,hints:n.join(_(`models.hintJoiner`))}):r,probes:a})}else J({ok:!1,message:i.data?.message||i.error||_(`models.connectionFailed`)})}catch(e){J({ok:!1,message:e instanceof Error?e.message:_(`models.requestFailed`)})}finally{qe(!1)}},[I.baseUrl,I.apiKeys,I.apiType,I.modelIds,it,_]),ot=(0,C.useCallback)(e=>{let t=new Set(Ve);t.has(e)?t.delete(e):t.add(e),W(t),L(e=>({...e,modelIds:Array.from(t).join(`, `)}))},[Ve]),st=(0,C.useCallback)(e=>{let t=I.modelIds.split(`,`).map(e=>e.trim()).filter(Boolean),n=t.some(t=>A(t)===e.id)?t.filter(t=>A(t)!==e.id):[...t,e.name&&e.name!==e.id?`${e.id}|${e.name}`:e.id];L(e=>({...e,modelIds:n.join(`, `)}));let r=new Set(H.map(e=>e.id));W(new Set(n.map(A).filter(e=>r.has(e))))},[I.modelIds,H]),[ct,lt]=(0,C.useState)(!1),[ut,dt]=(0,C.useState)(``),[ft,pt]=(0,C.useState)([]),[mt,ht]=(0,C.useState)(!1),[gt,_t]=(0,C.useState)(null),[vt,yt]=(0,C.useState)(!1),[bt,xt]=(0,C.useState)(!0),St=(0,C.useCallback)(()=>{dt(``),pt([]),_t(null),lt(!0),Ct(``,{reason:!1,tool:!0})},[]),Ct=(0,C.useCallback)(async(e,t)=>{ht(!0),_t(null);try{let n=await v.models.catalogSearch({q:e,reasoning:t?.reason??!1,toolCall:t?.tool??!0,limit:30});n.success&&n.data?pt(n.data.hits||[]):(_t(n.error||_(`models.catalogSearchFailed`)),pt([]))}catch(e){_t(e instanceof Error?e.message:_(`models.requestFailed`)),pt([])}finally{ht(!1)}},[_]),wt=(0,C.useCallback)(e=>{L(t=>{let n=t.modelIds.split(`,`).map(e=>e.trim()).filter(Boolean);if(n.includes(e.model.id))return t;let r=e.model.limit?.context,i=e.model.limit?.output,a={...t.modelOverrides[e.model.id]||{},...typeof r==`number`&&r>0?{maxInput:String(r)}:{},...typeof i==`number`&&i>0?{maxOutput:String(i)}:{}};return{...t,modelIds:[...n,e.model.id].join(`, `),modelOverrides:Object.keys(a).length>0?{...t.modelOverrides,[e.model.id]:a}:t.modelOverrides}}),h.success(_(`models.addedModel`,{id:e.model.id}))},[_]),[Tt,Et]=(0,C.useState)(null),Dt=(0,C.useCallback)(e=>{dt(e),Tt&&clearTimeout(Tt),Et(setTimeout(()=>{Ct(e,{reason:vt,tool:bt})},300))},[Tt,vt,bt,Ct]),Ot=async e=>{let t=e.provider,n=e.id,r=e.enabled!==!1,i=e.name||n,a=e=>r&&/default model/i.test(e);try{let e=await v.models.toggle(t,n);if(e.success){await X();return}let r=e.error||``;a(r)?h.error(_(`models.defaultModelDisableBlocked`,{name:i})):h.error(r||_(`models.operationFailed`))}catch(e){let t=e instanceof Error?e.message:``;a(t)?h.error(_(`models.defaultModelDisableBlocked`,{name:i})):h.error(t||_(`models.operationFailed`))}},kt=async e=>{let t=Ye(e);he(t);try{await v.models.test(e.id),await X()}finally{he(null)}},At=async(e,t)=>{if(confirm(_(`models.deleteModelConfirm`,{id:t})))try{(await v.models.delete(e,t)).success&&await X()}catch{}},jt=(0,C.useCallback)(e=>{let t=k.find(t=>t.key===e),n=Z.find(t=>t.key===e),r=!n||n.isCustom,i=O?.providers?.[e];F(r?`custom`:e),R(r?e:``),L({providerKey:e,apiKeys:[``],modelIds:t?.models.map(e=>e.name&&e.name!==e.id?`${e.id}|${e.name}`:e.id).join(`, `)||``,baseUrl:t?.baseUrl||i?.baseUrl||n?.baseUrl||``,apiType:t?.apiType||i?.apiType||n?.apiType||``,fullPath:t?.fullPath===!0||i?.fullPath===!0,setDefault:O?.defaultProvider!==e,modelOverrides:Te(t)}),N(`form`),M(!0),z(null),B(!1),U([]),W(new Set),G(null),K(``)},[k,Z,O]),Mt=e=>{jt(e.provider)},Nt=async()=>{let e=Z.find(e=>e.key===P)||null,t=P===`custom`?I.providerKey.trim():e?.key||``;if(!t){z(_(`models.providerNameRequired`));return}let n=(I.apiKeys||[]).map(e=>e.trim()).filter(Boolean),r=!!O?.providers?.[t]?.hasApiKey;if(n.length===0&&!r){z(_(`models.apiKeyRequired`));return}let i=e||{key:t,name:t,baseUrl:``,apiType:`openai-completions`,defaultModel:``},a=n.map(e=>e.replace(/[^\x00-\xFF]/g,``)).filter(Boolean),o=H.length>0?new Set(H.map(e=>e.id)):null,s=(I.modelIds||i.defaultModel||``).split(`,`).map(e=>e.trim()).filter(Boolean),c=o?s.filter(e=>o.has(e.split(`|`)[0].trim())):s,l=o?s.filter(e=>!o.has(e.split(`|`)[0].trim())):[];l.length>0&&h.warning(_(`models.autoSkippedMissingModels`,{models:l.map(e=>e.split(`|`)[0].trim()).join(`, `)}));let u=c.map(A).filter(Boolean),d=new Set;for(let e of y)e.provider!==t||u.includes(e.id)||(e.isGlobalDefault&&d.add(`global`),e.isGoalDefault&&d.add(`goal`));let f={provider:t,name:t,baseUrl:I.baseUrl||i.baseUrl,fullPath:I.fullPath===!0,apiType:I.apiType||we(I.baseUrl||i.baseUrl)||i.apiType,models:c.map((t,n)=>{let r=t.trim().split(`|`).map(e=>e.trim()).filter(Boolean),i=r[0]||``,a=I.modelOverrides[i],o=a?.apiType||e?.modelApiTypes?.[i];return{id:i,name:r[1]||i,aliases:r.length>2?r.slice(2):void 0,enabled:!0,priority:10+n,...o?{apiType:o}:{},...a?.baseUrl?{baseUrl:a.baseUrl}:{},contextWindow:be(a?.maxInput),maxTokens:be(a?.maxOutput)}}).filter(e=>e.id.length>0)};a.length>0&&(f.apiKeys=a),(!O?.configured||I.setDefault)&&(f.setDefault=!0),Ne(!0),z(null);try{let e=await v.config.provider.save(f);if(e.success){if(d.size>0){let e=u[0]||``,n={};if(e){let r=`${t}:${e}`;for(let e of d)n[e]=r}else{let e=y.find(e=>e.provider!==t);for(let t of d)t===`goal`?n[t]=null:e&&(n[t]=`${e.provider}:${e.id}`)}Object.keys(n).length>0&&(await v.models.setDefaults(n)).success&&h.success(_(`models.defaultsAutoUpdated`))}M(!1),N(`select`),F(null),R(``),await Y(),await X()}else z(e.error||_(`models.saveFailed`))}catch(e){z(e instanceof Error?e.message:_(`models.unknownError`))}finally{Ne(!1)}},Pt=async e=>{if(confirm(_(`models.removeConfirm`,{providerKey:e})))try{await v.config.provider.delete(e),await Y(),await X()}catch{}},Ft=e=>{switch(e){case`online`:return`text-accent-green`;case`offline`:return`text-dark-muted`;case`error`:return`text-accent-red`;default:return`text-dark-muted`}},It=e=>{switch(e){case`online`:return(0,w.jsx)(p,{size:14});case`offline`:return(0,w.jsx)(u,{size:14});case`error`:return(0,w.jsx)(ee,{size:14});default:return(0,w.jsx)(u,{size:14})}},Lt=(0,C.useMemo)(()=>Z.find(e=>e.key===P)||null,[P,Z]);return ue?(0,w.jsx)(`div`,{className:`h-64 overflow-y-auto p-4`,role:`status`,"aria-label":_(`models.loading`),children:(0,w.jsx)(ce,{count:4})}):E?(0,w.jsx)(`div`,{className:`flex h-64 items-center justify-center text-accent-red`,children:E}):(0,w.jsx)(`div`,{className:`ui-page flex-1 min-h-0`,children:(0,w.jsxs)(`div`,{className:`ui-page-inner space-y-6`,children:[(0,w.jsx)(`div`,{className:`text-meta text-dark-muted`,children:_(`models.kindBindingHint`)}),(0,w.jsx)(pe,{}),(0,w.jsx)(_e,{}),(0,w.jsxs)(`div`,{children:[(0,w.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,w.jsx)(`h2`,{className:`text-base font-semibold`,children:_(`models.providerConfig`)}),(0,w.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,w.jsxs)(`button`,{onClick:async()=>{try{await v.providers.refresh(),h.success(_(`models.providerListRefreshed`)),Le(!0),await g(),setTimeout(()=>{g()},3e3)}catch{h.error(_(`models.refreshFailed`))}},className:`btn btn-secondary px-3 py-2 text-xs`,title:_(`models.refreshListTitle`),children:[(0,w.jsx)(t,{size:12}),_(`models.refreshList`)]}),(0,w.jsxs)(`button`,{onClick:()=>{Ie&&Re(``),Le(e=>!e)},className:`btn btn-accent px-3 py-2 text-xs`,children:[Ie?(0,w.jsx)(l,{size:12}):(0,w.jsx)(re,{size:12}),_(Ie?`models.collapse`:`models.addProvider`)]})]})]}),Ie&&(0,w.jsxs)(`div`,{children:[(0,w.jsxs)(`div`,{className:`relative mb-3 max-w-md`,children:[(0,w.jsx)(c,{size:13,className:`absolute start-2.5 top-1/2 -translate-y-1/2 text-dark-muted`}),(0,w.jsx)(`input`,{value:V,onChange:e=>Re(e.target.value),className:`w-full ps-8 pe-8 py-1.5 text-xs bg-dark-bg border border-dark-border rounded focus:outline-none focus:border-accent-blue`,placeholder:_(`models.providerSearchPlaceholder`)}),V&&(0,w.jsx)(`button`,{onClick:()=>Re(``),className:`absolute end-2 top-1/2 -translate-y-1/2 text-dark-muted hover:text-dark-text`,title:_(`models.clear`),"aria-label":_(`models.clearSearch`),children:(0,w.jsx)(ne,{size:13})})]}),(0,w.jsx)(`div`,{className:`grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-3 max-h-[420px] overflow-y-auto custom-scrollbar pe-1`,children:o?Array.from({length:10}).map((e,t)=>(0,w.jsxs)(`div`,{className:`ui-card p-4`,"aria-hidden":`true`,children:[(0,w.jsx)(se,{variant:`text`,width:`45%`,height:16,className:`mb-2`}),(0,w.jsx)(se,{variant:`text`,width:`85%`,height:11,className:`mb-1.5`}),(0,w.jsx)(se,{variant:`text`,width:`70%`,height:11,className:`mb-1.5`}),(0,w.jsx)(se,{variant:`text`,width:`55%`,height:11})]},`preset-skeleton-${t}`)):Ze.length===0?(0,w.jsxs)(`div`,{className:`col-span-full border border-accent-red/30 bg-accent-red/10 rounded-lg p-4 text-center`,children:[(0,w.jsx)(`div`,{className:`text-sm text-accent-red font-medium mb-1`,children:_(`models.noMatchingProviders`)}),(0,w.jsx)(`div`,{className:`text-xs text-dark-muted mb-3`,children:_(`models.noMatchingProvidersHint`,{query:V})}),(0,w.jsxs)(`div`,{className:`flex items-center justify-center gap-2`,children:[(0,w.jsxs)(`button`,{onClick:()=>Re(``),className:`inline-flex items-center gap-1 px-2.5 py-1 text-xs border border-dark-border rounded hover:bg-dark-hover`,children:[(0,w.jsx)(ne,{size:12}),_(`models.clearSearch`)]}),(0,w.jsx)(oe,{variant:`accent`,size:`sm`,leftIcon:(0,w.jsx)(re,{size:12}),onClick:nt,children:_(`models.addCustomProvider`)})]})]}):Ze.map(e=>{let t=e.key===`custom`,n=t?Q:O?.providers?.[e.key],r=n?.hasApiKey,i=t?!!O?.defaultProvider&&(Q?.keys||[]).includes(O.defaultProvider):O?.defaultProvider===e.key;return(0,w.jsxs)(`div`,{className:`reveal-on-scroll ui-card-interactive text-start p-4 relative ${r?`border-accent-green/30 bg-dark-surface hover:border-accent-green/50`:`border-dark-border bg-dark-surface hover:border-dark-hover`}`,children:[(0,w.jsxs)(`div`,{onClick:()=>e.key===`custom`?nt():et(e),className:`cursor-pointer`,children:[(0,w.jsxs)(`div`,{className:`flex items-center justify-between mb-1`,children:[(0,w.jsx)(`span`,{className:`text-sm font-medium`,children:e.name}),r&&(0,w.jsx)(d,{size:14,className:`text-accent-green`})]}),(0,w.jsxs)(`div`,{className:`text-badge text-dark-muted space-y-0.5`,children:[(0,w.jsx)(`div`,{className:`truncate`,children:t?n?.baseUrl||_(`models.customBaseUrl`):e.baseUrl||_(`models.customBaseUrl`)}),(0,w.jsx)(`div`,{className:`truncate`,children:t&&Q?`${Q.keys.join(`, `)}`:e.defaultModel||_(`models.noDefaultModel`)}),(0,w.jsxs)(`div`,{children:[n?_(`models.configuredCount`,{n:n.modelCount}):_(`models.availableCount`,{n:e.models?.length||0}),e.models&&e.models.length>0&&!n&&(0,w.jsx)(`span`,{className:`text-accent-blue`,children:` ✓`})]})]}),i&&(0,w.jsx)(`div`,{className:`mt-1 text-badge text-accent-red`,children:_(`models.defaultProviderBadge`)})]}),r&&e.key!==`custom`&&(0,w.jsx)(`button`,{onClick:t=>{t.stopPropagation(),Pt(e.key)},className:`absolute top-1.5 end-1.5 p-1 rounded text-dark-muted hover:bg-accent-red/10 hover:text-accent-red transition-colors`,title:_(`models.deleteProvider`),"aria-label":_(`models.deleteProviderNamed`,{name:e.name}),children:(0,w.jsx)(f,{size:13})})]},e.key)})})]})]}),x&&(0,w.jsxs)(`div`,{className:`grid grid-cols-4 gap-4`,children:[(0,w.jsx)(Oe,{title:_(`models.overallStatus`),value:x.totalInstances===0?_(`models.notConfigured`):x.overallStatus===`healthy`?_(`models.healthy`):x.overallStatus===`degraded`?_(`models.degraded`):_(`models.abnormal`),color:x.totalInstances===0?`blue`:x.overallStatus===`healthy`?`green`:x.overallStatus===`degraded`?`yellow`:`red`}),(0,w.jsx)(Oe,{title:_(`models.healthRate`),value:x.totalInstances===0?`N/A`:`${(x.healthRate*100).toFixed(0)}%`,color:x.totalInstances===0?`blue`:x.healthRate>.8?`green`:x.healthRate>.5?`yellow`:`red`}),(0,w.jsx)(Oe,{title:_(`models.onlineInstances`),value:x.totalInstances===0?_(`models.none`):`${x.healthyInstances}/${x.totalInstances}`,color:x.healthyInstances>0?`green`:`red`}),(0,w.jsx)(Oe,{title:_(`models.totalRequests`),value:x.totalRequests>0?x.totalRequests.toLocaleString():`0`,color:`blue`})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,w.jsx)(`h3`,{className:`text-sm font-medium`,children:_(`models.configuredModels`)}),(0,w.jsx)(`span`,{className:`text-badge text-dark-muted`,title:_(`models.actIsGlobalHint`),children:_(`models.actIsGlobalHint`)})]}),(0,w.jsxs)(`div`,{className:`space-y-4 max-h-[640px] overflow-y-auto custom-scrollbar pe-1`,children:[$e.map(e=>{let n=k.find(t=>t.key===e.provider),r=O?.providers?.[e.provider];return(0,w.jsxs)(`div`,{className:`rounded-lg border border-dark-border overflow-hidden`,children:[(0,w.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-3 py-2 bg-dark-bg border-b border-dark-border`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0 flex-wrap`,children:[(0,w.jsx)(`span`,{className:`text-xs font-semibold whitespace-nowrap text-accent-purple`,children:e.provider}),O?.defaultProvider===e.provider&&(0,w.jsx)(`span`,{className:`text-avatar px-1.5 py-0.5 rounded bg-accent-red/20 text-accent-red whitespace-nowrap`,children:_(`models.defaultShort`)}),(0,w.jsx)(`span`,{className:`text-badge text-dark-muted truncate`,children:r?.baseUrl||n?.baseUrl||``}),(0,w.jsx)(`span`,{className:`text-badge text-dark-muted whitespace-nowrap`,children:n?.apiType||r?.apiType||``}),r?.hasApiKey||n?.hasApiKey?(0,w.jsx)(`span`,{className:`text-avatar px-1.5 py-0.5 rounded bg-accent-green/20 text-accent-green whitespace-nowrap`,children:_(`models.hasKey`)}):(0,w.jsx)(`span`,{className:`text-avatar px-1.5 py-0.5 rounded bg-accent-red/20 text-accent-red whitespace-nowrap`,children:_(`models.noKey`)})]}),(0,w.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[(0,w.jsx)(`button`,{onClick:()=>jt(e.provider),className:`p-1.5 rounded hover:bg-accent-blue/10 text-dark-muted hover:text-accent-blue`,title:_(`models.editProviderNamed`,{name:e.provider}),children:(0,w.jsx)(te,{size:13})}),(0,w.jsx)(`button`,{onClick:()=>Pt(e.provider),className:`p-1.5 rounded hover:bg-accent-red/10 text-dark-muted hover:text-accent-red`,title:_(`models.deleteProviderNamed`,{name:e.provider}),children:(0,w.jsx)(f,{size:13})})]})]}),(0,w.jsxs)(`div`,{className:`space-y-2 p-2 bg-dark-surface/40`,children:[e.models.map(r=>{let i=n?.models.find(e=>e.id===r.id),a=!!(i?.apiType&&i.apiType!==n?.apiType);return(0,w.jsx)(`div`,{className:`bg-dark-surface border rounded-lg p-3 ${r.status===`online`?`border-accent-green`:`border-dark-border`} ${r.enabled===!1?`opacity-60`:``}`,children:(0,w.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,w.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-2 mb-1 flex-wrap`,children:[(0,w.jsx)(`span`,{className:Ft(r.status),children:It(r.status)}),(0,w.jsx)(`span`,{className:`font-medium text-sm text-accent-blue`,children:r.name}),(0,w.jsx)(`span`,{className:`text-badge text-accent-purple px-1.5 py-0.5 bg-accent-purple/10 rounded`,children:r.provider}),r.apiType&&(0,w.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded ${r.apiType===`anthropic-messages`||r.apiType===`openai-responses`?`bg-accent-purple/20 text-accent-purple`:`bg-accent-blue/20 text-accent-blue`}`,children:Ce[r.apiType]||r.apiType}),a&&(0,w.jsx)(`span`,{className:`text-avatar px-1 py-0.5 rounded bg-accent-yellow/20 text-accent-yellow font-medium`,title:_(`models.overrideTitle`),children:_(`models.overrideBadge`)}),r.isGlobalDefault&&(0,w.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-accent-red/20 text-accent-red font-medium`,title:_(`models.globalDefaultUnsettable`),children:_(`chat.globalDefault`)}),r.isActDefault&&!r.isGlobalDefault&&(0,w.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-accent-yellow/20 text-accent-yellow font-medium`,children:_(`chat.actDefault`)}),r.isGoalDefault&&(0,w.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-accent-purple/20 text-accent-purple font-medium`,children:_(`chat.goalDefault`)})]}),(0,w.jsxs)(`div`,{className:`grid grid-cols-2 sm:grid-cols-3 md:grid-cols-6 gap-3 text-xs`,children:[(0,w.jsx)(j,{label:_(`models.loadLabel`),value:`${r.load}/${r.maxLoad}`}),(0,w.jsx)(j,{label:_(`models.tokenUsageLabel`),value:`${ae(r.tokens)}/${ae(r.maxTokens)}`}),(0,w.jsx)(j,{label:_(`models.inputPrice`),value:r.price.input===void 0?`—`:`$${r.price.input}/M`}),(0,w.jsx)(j,{label:_(`models.outputPrice`),value:r.price.output===void 0?`—`:`$${r.price.output}/M`}),(0,w.jsx)(j,{label:_(`models.cacheReadPrice`),value:r.price.cacheRead===void 0?`—`:`$${r.price.cacheRead}/M`}),(0,w.jsx)(j,{label:_(`models.cacheWritePrice`),value:r.price.cacheWrite===void 0?`—`:`$${r.price.cacheWrite}/M`})]}),(0,w.jsxs)(`div`,{className:`mt-3 grid grid-cols-2 sm:grid-cols-4 gap-3 text-xs`,children:[(0,w.jsx)(j,{label:_(`models.inputTokensLabel`),value:ae(r.usage?.input??0)}),(0,w.jsx)(j,{label:_(`models.outputTokensLabel`),value:ae(r.usage?.output??0)}),(0,w.jsx)(j,{label:_(`models.totalTokensLabel`),value:ae(r.usage?.total??0)}),(0,w.jsx)(j,{label:_(`models.usageRequestsLabel`),value:String(r.usage?.requests??0)})]}),(0,w.jsx)(de,{className:`mt-3 pt-2 border-t border-dark-border/60`,provider:e.provider,modelId:r.id,current:i?.pricing,catalog:{input:r.price.input,output:r.price.output,cacheRead:r.price.cacheRead,cacheWrite:r.price.cacheWrite},onSaved:X}),(0,w.jsx)(fe,{modelId:r.id,className:`mt-2`})]}),(0,w.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[ye.map(e=>{let t=e.key===`global`?r.isGlobalDefault:r.isGoalDefault,n=e.key===`global`?_(`models.setGlobalDefaultTitle`):_(`models.setGoalDefaultTitle`),i=_(`models.unsetGoalDefaultTitle`),a=_(`models.unsetGoalDefaultFailed`),o=_(`models.setGoalDefaultFailed`);return t?e.key===`global`?(0,w.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-1 rounded text-badge border ${e.bg} ${e.color} font-medium`,title:_(`chat.globalDefault`),children:[(0,w.jsx)(d,{size:11}),_(e.labelKey)]},e.key):(0,w.jsxs)(`button`,{onClick:async()=>{try{await v.models.setDefaults({[e.key]:null}),await X()}catch(e){D(e instanceof Error?e.message:a)}},className:`inline-flex items-center gap-1 px-2 py-1 rounded text-badge border ${e.bg} ${e.color} font-medium cursor-pointer hover:opacity-80`,title:i,children:[(0,w.jsx)(d,{size:11}),_(e.labelKey)]},e.key):r.enabled===!1?null:(0,w.jsx)(`button`,{onClick:async()=>{try{await v.models.setDefaults({[e.key]:`${r.provider}:${r.id}`}),await X()}catch(e){D(e instanceof Error?e.message:o)}},className:`px-2 py-1 rounded text-badge border border-dark-border text-dark-muted hover:text-dark-text hover:border-dark-hover`,title:n,children:_(e.labelKey)},e.key)}),(0,w.jsx)(`button`,{onClick:()=>Mt(r),className:`p-1.5 rounded hover:bg-accent-blue/10 text-dark-muted hover:text-accent-blue`,title:_(`models.editModel`),children:(0,w.jsx)(te,{size:13})}),(0,w.jsx)(`button`,{onClick:()=>At(r.provider,r.id),className:`p-1.5 rounded hover:bg-accent-red/10 text-dark-muted hover:text-accent-red`,title:_(`models.deleteModel`),children:(0,w.jsx)(f,{size:13})}),(0,w.jsx)(`button`,{onClick:()=>kt(r),disabled:me===Ye(r),className:`p-1.5 rounded hover:bg-dark-hover disabled:opacity-50`,title:_(`models.refresh`),children:(0,w.jsx)(t,{size:13,className:me===Ye(r)?`animate-spin`:``})}),(0,w.jsx)(`button`,{onClick:()=>Ot(r),className:`px-2 py-0.5 rounded text-xs transition-colors ${r.enabled===!1?`bg-accent-green/20 text-accent-green hover:bg-accent-green/30`:`bg-accent-red/20 text-accent-red hover:bg-accent-red/30`}`,children:r.enabled===!1?_(`models.enable`):_(`models.disable`)})]})]})},Ye(r))}),e.models.length===0&&(0,w.jsx)(`div`,{className:`text-center text-meta text-dark-muted py-3`,children:_(`models.noModelsInProvider`)})]})]},e.provider)}),y.length===0&&k.length===0&&(0,w.jsxs)(`div`,{className:`text-center text-dark-muted py-6`,children:[(0,w.jsx)(i,{size:36,className:`mx-auto mb-2 opacity-40`}),(0,w.jsx)(`p`,{className:`text-sm`,children:_(`models.emptyHint`)})]})]})]}),(0,w.jsx)(le,{isOpen:ke,onClose:()=>{M(!1),N(`select`),F(null),R(``)},title:Ae===`select`?_(`chat.selectProvider`):Lt?.name||_(`models.providerConfig`),size:`xl`,children:Ae===`select`?(0,w.jsx)(`div`,{className:`space-y-4`,children:(0,w.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-3`,children:[Xe.filter(e=>e.key!==`custom`).map(e=>(0,w.jsxs)(`button`,{onClick:()=>et(e),className:`text-start p-3 rounded-lg border border-dark-border bg-dark-bg hover:border-accent-blue transition-colors`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-2 mb-1`,children:[(0,w.jsx)(d,{size:14,className:`text-accent-blue`}),(0,w.jsx)(`span`,{className:`text-sm font-medium`,children:e.name})]}),(0,w.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e.defaultModel})]},e.key)),(0,w.jsxs)(`button`,{onClick:nt,className:`text-start p-3 rounded-lg border border-dashed border-dark-border bg-dark-bg hover:border-accent-blue transition-colors`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-2 mb-1`,children:[(0,w.jsx)(r,{size:14,className:`text-accent-blue`}),(0,w.jsx)(`span`,{className:`text-sm font-medium`,children:_(`models.customProvider`)})]}),(0,w.jsx)(`div`,{className:`text-xs text-dark-muted`,children:_(`models.customProviderDesc`)})]})]})}):(0,w.jsxs)(`div`,{className:`space-y-3`,children:[P===`custom`&&(0,w.jsxs)(`div`,{className:`space-y-3`,children:[Q&&Q.keys.length>0&&(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:_(`models.editExistingConfig`)}),(0,w.jsxs)(`select`,{value:je,onChange:e=>{let t=e.target.value;t?tt(t):(R(``),L(e=>({...e,providerKey:``,modelIds:``,baseUrl:``,apiType:``,apiKeys:[``]})))},className:`w-full px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue`,children:[(0,w.jsx)(`option`,{value:``,children:_(`models.newCustomProviderOption`)}),Q.keys.map(e=>(0,w.jsx)(`option`,{value:e,children:e},e))]}),(0,w.jsx)(`div`,{className:`text-meta text-dark-muted/60 mt-1`,children:_(`models.editExistingConfigHint`)})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:_(`models.providerNameLabel`)}),(0,w.jsx)(`input`,{value:I.providerKey,onChange:e=>L(t=>({...t,providerKey:e.target.value})),className:`w-full px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue`,placeholder:_(`models.providerNamePlaceholder`)})]})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsxs)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:[`API Keys`,O?.providers?.[P===`custom`?I.providerKey.trim():P||``]?.hasApiKey?``:` *`,(0,w.jsx)(`span`,{className:`text-dark-muted/60 text-xs`,children:O?.providers?.[P===`custom`?I.providerKey.trim():P||``]?.hasApiKey?_(`models.apiKeysHintConfigured`):_(`models.apiKeysHintNew`)})]}),(0,w.jsx)(`div`,{className:`space-y-1.5`,children:(I.apiKeys?.length?I.apiKeys:[``]).map((e,t)=>(0,w.jsxs)(`div`,{className:`flex gap-1.5 items-center`,children:[(0,w.jsxs)(`div`,{className:`relative flex-1`,children:[(0,w.jsx)(`input`,{type:Fe?`text`:`password`,value:e,autoComplete:`off`,spellCheck:!1,onChange:e=>L(n=>({...n,apiKeys:n.apiKeys.map((n,r)=>r===t?e.target.value:n)})),className:`w-full px-3 py-2 pe-9 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue`,placeholder:_(`models.apiKeyDefaultPlaceholder`)}),(0,w.jsx)(`button`,{type:`button`,onClick:()=>B(e=>!e),className:`absolute end-2 top-1/2 -translate-y-1/2 text-dark-muted hover:text-dark-text`,title:_(Fe?`models.hideKeyTitle`:`models.showKeyTitle`),children:Fe?(0,w.jsx)(n,{size:14}):(0,w.jsx)(a,{size:14})})]}),t===0?(0,w.jsxs)(`button`,{type:`button`,onClick:()=>L(e=>({...e,apiKeys:[...e.apiKeys,``]})),className:`shrink-0 inline-flex items-center gap-1 px-3 py-2 rounded text-sm border border-dashed border-dark-border text-dark-muted hover:text-accent-blue hover:border-accent-blue/50 transition-colors`,title:_(`models.addApiKeyTitle`),children:[(0,w.jsx)(re,{size:14}),(0,w.jsx)(`span`,{className:`hidden sm:inline`,children:_(`models.addApiKey`)})]}):(0,w.jsx)(`button`,{type:`button`,onClick:()=>L(e=>({...e,apiKeys:e.apiKeys.filter((e,n)=>n!==t)})),className:`shrink-0 inline-flex items-center px-3 py-2 rounded text-sm text-dark-muted hover:text-accent-red hover:bg-accent-red/10 transition-colors`,title:_(`models.removeApiKeyTitle`),children:(0,w.jsx)(ne,{size:14})})]},t))})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:_(`models.modelIdLabel`)}),(0,w.jsxs)(`div`,{className:`flex gap-2`,children:[(0,w.jsx)(`input`,{value:I.modelIds,onChange:e=>{let t=e.target.value;L(e=>({...e,modelIds:t})),W(()=>{let e=new Set;for(let n of t.split(`,`)){let t=n.trim().split(`|`)[0].trim();t&&H.some(e=>e.id===t)&&e.add(t)}return e})},className:`flex-1 px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue`,placeholder:Lt?.defaultModel||_(`models.modelIdPlaceholder`)}),(0,w.jsxs)(`button`,{onClick:rt,disabled:ze||!I.baseUrl,className:`inline-flex items-center gap-1 px-3 py-2 rounded text-sm border border-accent-blue/30 text-accent-blue hover:bg-accent-blue/10 disabled:opacity-50 whitespace-nowrap`,title:_(`models.fetchModelsTitle`),children:[ze?(0,w.jsx)(t,{size:13,className:`animate-spin`}):(0,w.jsx)(s,{size:13}),_(ze?`models.fetchingModels`:`models.fetchModels`)]}),(0,w.jsxs)(`button`,{onClick:at,disabled:Ke||!I.baseUrl,className:`inline-flex items-center gap-1 px-3 py-2 rounded text-sm border border-accent-yellow/30 text-accent-yellow hover:bg-accent-yellow/10 disabled:opacity-50 whitespace-nowrap`,title:_(`models.testConnectionTitle`),children:[Ke?(0,w.jsx)(t,{size:13,className:`animate-spin`}):(0,w.jsx)(ie,{size:13}),_(Ke?`models.testingConnection`:`models.testConnection`)]}),(0,w.jsxs)(`button`,{onClick:St,className:`inline-flex items-center gap-1 px-3 py-2 rounded text-sm border border-accent-green/30 text-accent-green hover:bg-accent-green/10 whitespace-nowrap`,title:_(`models.catalogSearchTitle`),children:[(0,w.jsx)(c,{size:13}),_(`models.catalogSearch`)]})]}),q&&(0,w.jsxs)(`div`,{className:`mt-1 text-xs ${q.ok?`text-accent-green`:`text-accent-red`}`,children:[q.ok?`✓ `:`✗ `,q.message,q.probes?.map(e=>(0,w.jsxs)(`div`,{className:`mt-0.5 ${e.verdict===`supported`?`text-accent-green`:e.verdict===`unsupported`?`text-accent-red`:`text-dark-muted`}`,children:[e.group,`: `,e.label,e.hint&&(0,w.jsxs)(`span`,{className:`opacity-70`,children:[` — `,e.hint]})]},e.id))]}),He&&(0,w.jsx)(`div`,{className:`mt-1 text-xs text-accent-red`,children:He}),H.length===0&&Qe.length>0&&(0,w.jsxs)(`div`,{className:`mt-2 border border-dark-border rounded-lg bg-dark-bg p-2`,children:[(0,w.jsx)(`div`,{className:`flex items-center justify-between mb-2`,children:(0,w.jsxs)(`span`,{className:`text-xs text-dark-muted`,children:[_(`models.configuredPanelPrefix`),(0,w.jsx)(`strong`,{className:`text-dark-text`,children:Qe.length}),_(`models.configuredPanelSuffix`),(0,w.jsx)(`span`,{className:`text-accent-green/70`,children:_(`models.configuredPanelHint`)})]})}),(0,w.jsx)(`div`,{className:`max-h-48 overflow-y-auto custom-scrollbar grid grid-cols-2 sm:grid-cols-3 gap-1`,children:Qe.map(e=>{let t=I.modelIds.split(`,`).map(A).filter(Boolean).includes(e.id);return(0,w.jsxs)(`div`,{role:`checkbox`,"aria-checked":t,title:e.name&&e.name!==e.id?`${e.id} — ${e.name}`:e.name||e.id,tabIndex:-1,onMouseDown:e=>e.preventDefault(),onClick:()=>st(e),className:`flex items-start gap-1.5 px-2 py-1 rounded cursor-pointer text-xs transition-colors select-none ${t?`bg-accent-green/20 text-accent-green border border-accent-green/30`:`hover:bg-dark-hover border border-transparent`}`,children:[(0,w.jsx)(`span`,{className:`shrink-0 mt-[3px]`,children:t?(0,w.jsx)(d,{size:10}):(0,w.jsx)(`div`,{className:`w-2.5 h-2.5 rounded border border-dark-border`})}),(0,w.jsx)(`span`,{className:`min-w-0 flex-1 break-words leading-snug`,children:e.name||e.id}),e.isGlobalDefault&&(0,w.jsx)(`span`,{className:`text-avatar px-1 rounded bg-accent-red/20 text-accent-red shrink-0`,children:_(`models.globalShort`)}),e.isActDefault&&!e.isGlobalDefault&&(0,w.jsx)(`span`,{className:`text-avatar px-1 rounded bg-accent-yellow/20 shrink-0`,children:`Act`}),e.isGoalDefault&&(0,w.jsx)(`span`,{className:`text-avatar px-1 rounded bg-accent-purple/20 shrink-0`,children:`Goal`})]},e.id)})})]}),H.length>0&&(0,w.jsxs)(`div`,{className:`mt-2 border border-dark-border rounded-lg bg-dark-bg p-2`,children:[(0,w.jsxs)(`div`,{className:`flex items-center justify-between mb-2`,children:[(0,w.jsxs)(`span`,{className:`text-xs text-dark-muted`,children:[_(`models.fetchedPanelPrefix`),(0,w.jsx)(`strong`,{className:`text-dark-text`,children:H.length}),_(`models.fetchedPanelMiddle`),(0,w.jsx)(`strong`,{className:`text-accent-blue`,children:Ve.size}),_(`models.fetchedPanelSuffix`),(0,w.jsx)(`span`,{className:`text-accent-blue/70`,children:_(`models.fetchedPanelHint`)})]}),(0,w.jsx)(`button`,{onClick:()=>{U([]),W(new Set)},className:`px-2 py-0.5 text-badge border border-dark-border rounded hover:bg-dark-hover`,children:_(`models.close`)})]}),(0,w.jsxs)(`div`,{className:`relative mb-2`,children:[(0,w.jsx)(c,{size:12,className:`absolute start-2 top-1/2 -translate-y-1/2 text-dark-muted`}),(0,w.jsx)(`input`,{value:Ue,onChange:e=>{let t=e.target.value;K(t),t.trim()&&Ge(!1)},className:`w-full ps-7 pe-2 py-1 text-xs bg-dark-bg border border-dark-border rounded focus:outline-none focus:border-accent-blue`,placeholder:_(`models.modelSearchPlaceholder`)})]}),Ue.trim()!==``&&(0,w.jsxs)(`div`,{className:`mb-1 text-badge text-dark-muted`,children:[_(`models.searchMatchPrefix`),(0,w.jsx)(`strong`,{className:`text-accent-blue`,children:Je.length}),_(`models.searchMatchSuffix`,{total:H.length})]}),(0,w.jsx)(`div`,{className:`max-h-72 overflow-y-auto custom-scrollbar grid grid-cols-1 sm:grid-cols-2 gap-1`,children:Je.map(e=>{let t=Ve.has(e.id);return(0,w.jsxs)(`div`,{role:`checkbox`,"aria-checked":t,title:e.name&&e.name!==e.id?`${e.id} — ${e.name}`:e.id,tabIndex:-1,onMouseDown:e=>e.preventDefault(),onClick:()=>ot(e.id),className:`${We?`reveal-on-scroll `:``}flex items-start gap-1.5 px-2 py-1 rounded cursor-pointer text-xs transition-colors select-none ${t?`bg-accent-blue/20 text-accent-blue border border-accent-blue/30`:`hover:bg-dark-hover border border-transparent`}`,children:[(0,w.jsx)(`span`,{className:`shrink-0 mt-[3px]`,children:t?(0,w.jsx)(d,{size:10}):(0,w.jsx)(`div`,{className:`w-2.5 h-2.5 rounded border border-dark-border`})}),(0,w.jsx)(`span`,{className:`min-w-0 flex-1 break-all leading-snug`,children:e.id})]},e.id)})})]})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:`Base URL`}),(0,w.jsx)(`input`,{value:I.baseUrl,onChange:e=>{L(t=>({...t,baseUrl:e.target.value})),J(null)},className:`w-full px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue`,placeholder:`https://api.example.com/v1`}),(0,w.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer select-none mt-2`,children:[(0,w.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":I.fullPath,onClick:()=>{L(e=>({...e,fullPath:!e.fullPath})),J(null)},className:`relative w-9 h-5 rounded-full transition-colors shrink-0 ${I.fullPath?`bg-accent-green`:`bg-dark-border`}`,children:(0,w.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${I.fullPath?`translate-x-[18px]`:`translate-x-0.5`}`})}),(0,w.jsx)(`span`,{className:`text-sm text-dark-muted`,children:_(`models.fullPathLabel`)})]}),(0,w.jsx)(`div`,{className:`text-meta text-dark-muted/60 mt-1`,children:_(`models.fullPathHint`)})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:_(`models.apiTypeLabel`)}),(0,w.jsxs)(`select`,{value:I.apiType,onChange:e=>{L(t=>({...t,apiType:e.target.value})),J(null)},className:`w-full px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue`,children:[(0,w.jsx)(`option`,{value:``,children:_(`models.apiTypeAutoDetect`)}),Se.map(e=>(0,w.jsx)(`option`,{value:e,children:Ce[e]},e))]}),(0,w.jsx)(`div`,{className:`text-meta text-dark-muted/60 mt-1`,children:_(`models.apiTypeHint`)})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsxs)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:[_(`models.modelApiTypeLabel`),(0,w.jsx)(`span`,{className:`text-dark-muted/60 text-xs`,children:_(`models.modelApiTypeHint`)})]}),(0,w.jsx)(`div`,{className:`border border-dark-border rounded-lg divide-y divide-dark-border max-h-64 overflow-y-auto custom-scrollbar`,children:(()=>{let e=I.modelIds.split(`,`).map(A).filter(Boolean);if(e.length===0)return(0,w.jsx)(`div`,{className:`px-3 py-2 text-xs text-dark-muted`,children:_(`models.modelApiTypeEmpty`)});let t=k.find(e=>e.key===$),n=t?.contextWindow??2e5,r=t?.maxTokens??8e3,i=(e,t)=>L(n=>({...n,modelOverrides:{...n.modelOverrides,[e]:{...n.modelOverrides[e]||{},...t}}}));return e.map(e=>{let t=I.modelOverrides[e]||{};return(0,w.jsxs)(`div`,{className:`px-3 py-2 space-y-1.5`,children:[(0,w.jsx)(`div`,{className:`text-xs min-w-0 break-all leading-snug text-dark-text`,title:e,children:e}),(0,w.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-3 gap-1.5`,children:[(0,w.jsxs)(`label`,{className:`block`,children:[(0,w.jsx)(`span`,{className:`block text-badge text-dark-muted/70 mb-0.5`,children:_(`models.apiTypeLabel`)}),(0,w.jsxs)(`select`,{value:t.apiType||``,onChange:t=>i(e,{apiType:t.target.value}),className:`w-full px-2 py-1 text-xs bg-dark-bg border border-dark-border rounded focus:outline-none focus:border-accent-blue`,children:[(0,w.jsx)(`option`,{value:``,children:_(`models.inheritProvider`)}),Se.map(e=>(0,w.jsx)(`option`,{value:e,children:Ce[e]},e))]})]}),(0,w.jsxs)(`label`,{className:`block`,children:[(0,w.jsx)(`span`,{className:`block text-badge text-dark-muted/70 mb-0.5`,children:_(`models.maxInputTokensLabel`)}),(0,w.jsx)(`input`,{type:`number`,min:1,inputMode:`numeric`,value:t.maxInput??``,onChange:t=>i(e,{maxInput:t.target.value}),placeholder:String(n),title:_(`models.maxInputTokensTitle`),className:`w-full px-2 py-1 text-xs bg-dark-bg border border-dark-border rounded focus:outline-none focus:border-accent-blue`})]}),(0,w.jsxs)(`label`,{className:`block`,children:[(0,w.jsx)(`span`,{className:`block text-badge text-dark-muted/70 mb-0.5`,children:_(`models.maxOutputTokensLabel`)}),(0,w.jsx)(`input`,{type:`number`,min:1,inputMode:`numeric`,value:t.maxOutput??``,onChange:t=>i(e,{maxOutput:t.target.value}),placeholder:String(r),title:_(`models.maxOutputTokensTitle`),className:`w-full px-2 py-1 text-xs bg-dark-bg border border-dark-border rounded focus:outline-none focus:border-accent-blue`})]})]})]},e)})})()}),(0,w.jsx)(`div`,{className:`text-meta text-dark-muted/60 mt-1`,children:_(`models.contextBudgetHint`)})]}),(0,w.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer`,children:[(0,w.jsx)(`input`,{type:`checkbox`,checked:I.setDefault,onChange:e=>L(t=>({...t,setDefault:e.target.checked})),className:`accent-accent-blue`}),(0,w.jsx)(`span`,{className:`text-sm text-dark-muted`,children:_(`models.setDefaultProvider`)})]}),Pe&&(0,w.jsx)(`div`,{className:`text-sm text-accent-red`,children:Pe}),(0,w.jsxs)(`div`,{className:`flex justify-between gap-2 pt-2`,children:[(0,w.jsx)(`div`,{children:$&&O?.providers?.[$]?.hasApiKey&&(0,w.jsx)(`button`,{onClick:async()=>{if(confirm(_(`models.deleteProviderConfirm`,{key:$})))try{await v.config.provider.delete($),M(!1),N(`select`),F(null),R(``),await Y(),await X()}catch{}},className:`px-4 py-2 rounded border border-accent-red/30 text-accent-red hover:bg-accent-red/10 transition-colors text-sm`,children:_(`models.deleteProvider`)})}),(0,w.jsx)(`button`,{onClick:()=>{N(`select`),F(null),R(``),M(!1)},className:`px-4 py-2 rounded border border-dark-border hover:bg-dark-hover transition-colors text-sm`,children:_(`common.cancel`)}),(0,w.jsx)(oe,{variant:`accent`,onClick:Nt,loading:Me,children:_(`common.save`)})]})]})}),(0,w.jsx)(le,{isOpen:ct,onClose:()=>lt(!1),title:(0,w.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,w.jsx)(c,{size:15,className:`text-accent-green`}),_(`models.catalogTitle`)]}),size:`2xl`,children:(0,w.jsxs)(`div`,{className:`space-y-3`,children:[(0,w.jsxs)(`div`,{className:`flex gap-2`,children:[(0,w.jsxs)(`div`,{className:`relative flex-1`,children:[(0,w.jsx)(c,{size:14,className:`absolute start-3 top-1/2 -translate-y-1/2 text-dark-muted`}),(0,w.jsx)(`input`,{value:ut,onChange:e=>Dt(e.target.value),className:`w-full ps-9 pe-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-green`,placeholder:_(`models.catalogSearchPlaceholder`),autoFocus:!0})]}),(0,w.jsxs)(`label`,{className:`inline-flex items-center gap-1.5 text-xs text-dark-muted whitespace-nowrap cursor-pointer`,children:[(0,w.jsx)(`input`,{type:`checkbox`,checked:bt,onChange:e=>{let t=e.target.checked;xt(t),Ct(ut,{reason:vt,tool:t})},className:`accent-accent-green`}),_(`models.catalogOnlyToolCall`)]}),(0,w.jsxs)(`label`,{className:`inline-flex items-center gap-1.5 text-xs text-dark-muted whitespace-nowrap cursor-pointer`,children:[(0,w.jsx)(`input`,{type:`checkbox`,checked:vt,onChange:e=>{let t=e.target.checked;yt(t),Ct(ut,{reason:t,tool:bt})},className:`accent-accent-green`}),_(`models.catalogOnlyReasoning`)]})]}),gt&&(0,w.jsx)(`div`,{className:`text-xs text-accent-red bg-accent-red/10 p-2 rounded`,children:gt}),mt?(0,w.jsxs)(`div`,{className:`flex items-center justify-center py-10 text-dark-muted`,children:[(0,w.jsx)(t,{size:18,className:`animate-spin me-2`}),` `,_(`models.searching`)]}):(0,w.jsx)(`div`,{className:`max-h-96 overflow-y-auto custom-scrollbar border border-dark-border rounded-lg divide-y divide-dark-border`,children:ft.length===0?(0,w.jsx)(`div`,{className:`py-10 text-center text-dark-muted text-sm`,children:_(`models.catalogNoResults`)}):ft.map(e=>(0,w.jsxs)(`div`,{className:`flex items-center gap-3 px-3 py-2 hover:bg-dark-hover`,children:[(0,w.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,w.jsx)(`span`,{className:`text-sm font-medium text-dark-text truncate`,children:e.model.name||e.model.id}),(0,w.jsx)(`code`,{className:`text-badge px-1.5 py-0.5 bg-dark-bg border border-dark-border rounded text-dark-muted truncate`,children:e.model.id}),e.model.reasoning&&(0,w.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 bg-accent-yellow/10 text-accent-yellow rounded`,children:_(`models.badgeReasoning`)}),e.model.tool_call&&(0,w.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 bg-accent-blue/10 text-accent-blue rounded`,children:_(`models.badgeToolCall`)}),e.model.attachment&&(0,w.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 bg-accent-green/10 text-accent-green rounded`,children:_(`models.badgeMultimodal`)})]}),(0,w.jsxs)(`div`,{className:`text-meta text-dark-muted mt-0.5`,children:[e.providerName,e.model.limit?.context?` · ${_(`models.ctxLimit`,{k:(e.model.limit.context/1e3).toFixed(0)})}`:``,e.model.limit?.output?` · ${_(`models.outLimit`,{k:(e.model.limit.output/1e3).toFixed(0)})}`:``,e.model.cost?.input===void 0?``:` · $${e.model.cost.input}/M in / $${e.model.cost.output}/M out`]})]}),(0,w.jsxs)(`button`,{onClick:()=>wt(e),className:`shrink-0 inline-flex items-center gap-1 px-2.5 py-1 text-xs border border-accent-green/30 text-accent-green rounded hover:bg-accent-green/10 whitespace-nowrap`,title:_(`models.catalogAddTitle`),children:[(0,w.jsx)(re,{size:12}),` `,_(`models.add`)]})]},`${e.providerId}:${e.model.id}`))}),(0,w.jsx)(`div`,{className:`text-meta text-dark-muted/60`,children:_(`models.catalogSourceHint`)})]})})]})})}function Oe({title:e,value:t,color:n}){return(0,w.jsxs)(`div`,{className:`${{green:`bg-accent-green/10 text-accent-green`,yellow:`bg-accent-yellow/10 text-accent-yellow`,red:`bg-accent-red/10 text-accent-red`,blue:`bg-accent-blue/10 text-accent-blue`}[n]} rounded-lg p-3`,children:[(0,w.jsx)(`div`,{className:`text-xs opacity-70`,children:e}),(0,w.jsx)(`div`,{className:`text-xl font-semibold`,children:t})]})}function j({label:e,value:t}){return(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`div`,{className:`text-dark-muted`,children:e}),(0,w.jsx)(`div`,{children:t})]})}export{De as ModelsView,De as default};
@@ -1,2 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$ as t,Ur as n,Vn as r,W as i,at as a,b as o,g as s,it as c,m as l,n as u,st as d,vr as ee,xr as f,yr as p}from"./icons-BvYhTENi.js";import{t as m}from"./useTranslation-BGmCDuQI.js";import{r as h}from"./api-CCt9DRQm.js";import{I as g}from"./markdown-DAQZeY5V.js";import{A as te,f as ne,m as re}from"./common-BHXgEvgk.js";var _=e(n(),1),v=g();function ie(e){return(0,v.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-meta border ${e===`bundled`?`bg-accent-blue/15 text-accent-blue border-accent-blue`:e===`npm`?`bg-accent-purple/15 text-accent-purple border-accent-purple`:e===`local`?`bg-accent-blue/15 text-accent-blue border-accent-blue`:`bg-dark-hover text-dark-muted border-dark-border`}`,children:e})}function y(e){return e?(0,v.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-meta border ${e===`builtin`?`bg-dark-hover text-dark-muted border-dark-border`:e===`openclaw`?`bg-accent-yellow/15 text-accent-yellow border-accent-yellow`:e===`deepseek-harness`?`bg-accent-green/15 text-accent-green border-accent-green`:e===`claude-mods`?`bg-accent-purple/15 text-accent-purple border-accent-purple`:`bg-dark-hover text-dark-muted border-dark-border`}`,children:e}):null}var ae={queued:`queued`,resolve:`resolve`,fetch:`fetch`,verify:`verify`,load:`load`,register:`register`,activate:`activate`,done:`done`,error:`error`},b={queued:`Queued`,resolve:`Resolving market entry`,fetch:`Downloading package`,verify:`Verifying manifest`,load:`Loading plugin`,register:`Registering`,activate:`Activating`,done:`Done`,error:`Failed`};function x(e,t){let n=`plugins.installStages.${ae[e]}`,r=t(n);return r===n?b[e]:r}function S({job:e,error:t,onClose:n,onRetry:r}){let{t:i}=m(),a=(0,_.useRef)(null),s=e?.status===`running`,c=e?.status===`error`||!!t,d=Math.max(0,Math.min(100,e?.progress??0)),ee=e?.stage??`error`,p=e?.logs??[];(0,_.useEffect)(()=>{let e=a.current;e&&(e.scrollTop=e.scrollHeight)},[p.length]);let h=c?`bg-accent-red`:e?.status===`done`?`bg-accent-green`:`bg-accent-blue`;return(0,v.jsxs)(`div`,{"data-testid":`plugin-install-console`,className:`mt-2 rounded-md border border-dark-border bg-dark-bg px-2 py-1.5`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[c?(0,v.jsx)(l,{size:12,className:`shrink-0 text-accent-red`}):e?.status===`done`?(0,v.jsx)(f,{size:12,className:`shrink-0 text-accent-green`}):(0,v.jsx)(`div`,{className:`h-3 w-3 shrink-0 animate-spin rounded-full border-2 border-accent-blue border-t-transparent`}),(0,v.jsx)(`span`,{className:`text-meta text-dark-text truncate`,children:e?.alreadyInstalled&&s?i(`plugins.installAlreadyInstalled`):x(ee,i)}),(0,v.jsx)(`div`,{className:`flex-1`}),e&&(0,v.jsxs)(`span`,{className:`text-meta tabular-nums text-dark-muted shrink-0`,children:[d,`%`]}),r&&c&&(0,v.jsx)(`button`,{type:`button`,onClick:r,className:`px-1.5 py-0.5 rounded border border-dark-border bg-dark-hover text-meta text-dark-muted hover:text-dark-text transition-colors`,children:i(`plugins.installRetry`)}),(0,v.jsx)(`button`,{type:`button`,onClick:n,title:i(`plugins.installClose`),className:`p-0.5 rounded text-dark-muted hover:text-dark-text transition-colors`,children:(0,v.jsx)(u,{size:12})})]}),e&&(0,v.jsx)(`div`,{className:`mt-1 h-1 rounded-full bg-dark-hover overflow-hidden`,children:(0,v.jsx)(`div`,{className:`h-full ${h} transition-[width] duration-300 ease-out`,style:{width:`${d}%`}})}),(e?.error||t)&&(0,v.jsx)(`div`,{className:`mt-1 rounded border border-accent-red bg-accent-red/15 px-1.5 py-1 text-meta text-accent-red break-words`,children:e?.error||t}),e&&(0,v.jsxs)(`details`,{open:!0,className:`mt-1 group`,children:[(0,v.jsxs)(`summary`,{className:`flex items-center gap-1 cursor-pointer select-none text-meta text-dark-muted hover:text-dark-text transition-colors`,children:[(0,v.jsx)(o,{size:11}),i(`plugins.installLogs`,{count:p.length})]}),(0,v.jsx)(`pre`,{ref:a,className:`mt-1 max-h-32 overflow-auto rounded border border-dark-border bg-dark-surface px-1.5 py-1 font-mono text-meta text-dark-muted whitespace-pre-wrap break-all`,children:p.length?p.join(`
2
- `):i(`plugins.installLogsEmpty`)})]})]})}function oe({plugin:e,job:t,error:n,onInstall:i,onDismiss:a}){let{t:o}=m(),s=t?.status===`running`,c=t&&s?x(t.stage,o):null,l=e.marketId??e.id;return(0,v.jsxs)(`div`,{"data-install-card":l,className:`rounded-lg border border-dark-border bg-dark-surface p-3`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,v.jsx)(`span`,{className:`text-compact font-medium text-dark-text truncate`,children:e.name||e.id}),e.version&&(0,v.jsx)(`span`,{className:`text-meta text-dark-muted shrink-0`,children:e.version}),ie(e.source),y(e.market),e.category&&(0,v.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-meta bg-dark-hover text-dark-muted border border-dark-border shrink-0`,children:e.category}),(0,v.jsx)(`div`,{className:`flex-1`}),(0,v.jsx)(`span`,{className:`text-meta text-dark-muted font-mono shrink-0`,children:e.id})]}),e.description&&(0,v.jsx)(`p`,{className:`mt-1 text-xs text-dark-muted`,children:e.description}),(0,v.jsxs)(`div`,{className:`mt-2 flex items-center gap-1.5`,children:[(0,v.jsxs)(`button`,{onClick:()=>i(l,!0),disabled:s,className:`flex items-center gap-1 px-2 py-1 rounded bg-accent-blue/20 border border-accent-blue/40 text-accent-blue text-meta hover:bg-accent-blue/30 disabled:opacity-50 transition-colors`,children:[s?(0,v.jsx)(r,{size:11,className:`animate-pulse`}):(0,v.jsx)(r,{size:11}),c??o(`plugins.installActivate`)]}),(0,v.jsxs)(`button`,{onClick:()=>i(l,!1),disabled:s,className:`flex items-center gap-1 px-2 py-1 rounded bg-dark-hover border border-dark-border text-dark-muted text-meta hover:text-dark-text disabled:opacity-50 transition-colors`,children:[(0,v.jsx)(r,{size:11}),` `,o(`plugins.installOnly`)]})]}),(t||n)&&(0,v.jsx)(S,{job:t??null,error:n??null,onClose:a,onRetry:t?.status===`error`||!t&&n?()=>i(l,t?.activate??!0):void 0})]})}function se({jobs:e,onSelect:t}){let{t:n}=m(),i=e.filter(e=>e.status===`running`);return i.length===0?null:(0,v.jsxs)(`div`,{"data-testid":`plugin-install-status-bar`,className:`shrink-0 mx-3 mt-2 rounded-lg border border-accent-blue/40 bg-accent-blue/10 px-2 py-1.5`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-1.5 px-0.5 pb-1`,children:[(0,v.jsx)(r,{size:11,className:`shrink-0 text-accent-blue`}),(0,v.jsx)(`span`,{className:`text-meta tabular-nums text-dark-text`,children:i.length})]}),(0,v.jsx)(`ul`,{className:`space-y-0.5`,children:i.map(e=>{let r=Math.max(0,Math.min(100,e.progress));return(0,v.jsx)(`li`,{children:(0,v.jsxs)(`button`,{type:`button`,onClick:()=>t(e.marketId),className:`w-full flex items-center gap-1.5 rounded px-1 py-0.5 text-start hover:bg-dark-hover transition-colors`,children:[(0,v.jsx)(`span`,{className:`h-2.5 w-2.5 shrink-0 animate-spin rounded-full border-2 border-accent-blue border-t-transparent`}),(0,v.jsx)(`span`,{className:`shrink-0 max-w-[10rem] truncate font-mono text-meta text-dark-text`,children:e.marketId}),(0,v.jsx)(`span`,{className:`shrink-0 text-meta text-dark-muted`,children:e.alreadyInstalled?n(`plugins.installAlreadyInstalled`):x(e.stage,n)}),(0,v.jsx)(`span`,{className:`flex-1 h-1 rounded-full bg-dark-hover overflow-hidden`,children:(0,v.jsx)(`span`,{className:`block h-full bg-accent-blue transition-[width] duration-300 ease-out`,style:{width:`${r}%`}})}),(0,v.jsxs)(`span`,{className:`shrink-0 text-meta tabular-nums text-dark-muted`,children:[r,`%`]})]})},e.marketId)})})]})}var C=700;function w(e,t){if(!(t in e))return e;let n={...e};return delete n[t],n}function ce(){let[e,t]=(0,_.useState)({}),[n,r]=(0,_.useState)({}),[i,a]=(0,_.useState)(0),o=(0,_.useRef)(new Map),s=(0,_.useCallback)(e=>{let t=o.current.get(e);t!==void 0&&(window.clearTimeout(t),o.current.delete(e))},[]),c=(0,_.useCallback)((e,n)=>{s(e);let i=async()=>{let c=await h.get(`/api/plugins/install/${encodeURIComponent(n)}`);if(!c.success||!c.data){r(t=>({...t,[e]:c.error??`Lost install job`})),s(e),a(e=>e+1);return}let l=c.data;t(t=>({...t,[e]:l})),l.status===`running`?o.current.set(e,window.setTimeout(()=>void i(),C)):(o.current.delete(e),a(e=>e+1))};i()},[s]),l=(0,_.useCallback)(async(e,n)=>{s(e),r(t=>w(t,e));let i=await h.post(`/api/plugins/install`,{id:e,activate:n});if(!i.success){let t=i.error??`Install request failed`;return r(n=>({...n,[e]:t})),{job:null,error:t}}if(!i.data?.jobId)return{job:null,error:null};let a=i.data;return t(t=>({...t,[e]:a})),c(e,a.jobId),{job:a,error:null}},[c,s]);return(0,_.useEffect)(()=>{let e=o.current;return()=>{for(let t of e.values())window.clearTimeout(t);e.clear()}},[]),{jobs:e,errors:n,settledCount:i,start:l,dismiss:(0,_.useCallback)(n=>{let i=e[n];i&&i.status===`running`||(t(e=>w(e,n)),r(e=>w(e,n)))},[e])}}var T=12,E=`other`,le=[`all`,`builtin`,`openclaw`,`deepseek-harness`,`claude-mods`];function ue(e){return e===`wired`?`bg-accent-green/15 text-accent-green border-accent-green`:e===`pending`||e===`pending_wiring`?`bg-accent-yellow/15 text-accent-yellow border-accent-yellow`:`bg-dark-hover text-dark-muted border-dark-border`}function de(e){return e.category?.trim()||E}function fe(e,t){let n=t.trim().toLowerCase();return!n||[e.id,e.name,e.description,e.category,...e.tags??[]].filter(e=>typeof e==`string`).join(` `).toLowerCase().includes(n)}function D(){let{t:e}=m(),[n,r]=(0,_.useState)(`installed`),[o,g]=(0,_.useState)([]),[y,ae]=(0,_.useState)([]),[b,x]=(0,_.useState)([]),[S,C]=(0,_.useState)(null),[w,E]=(0,_.useState)(!0),[D,pe]=(0,_.useState)(null),[O,me]=(0,_.useState)(null),[he,ge]=(0,_.useState)(null),[k,_e]=(0,_.useState)(null),[A,j]=(0,_.useState)(null),[ve,M]=(0,_.useState)(null),[N,P]=(0,_.useState)(``),[F,I]=(0,_.useState)(null),[L,R]=(0,_.useState)(null),[z,B]=(0,_.useState)(1),V=(0,_.useCallback)((e,t)=>{_e({kind:e,text:t}),window.setTimeout(()=>_e(null),4e3)},[]),H=(0,_.useCallback)(async()=>{E(!0),pe(null);let[e,t]=await Promise.all([h.get(`/api/plugins`),h.get(`/api/plugins/market`)]);e.success&&e.data?(g(e.data.plugins),C(e.data.schemaVersion??null),ae(e.data.issues??[])):pe(e.error??`Failed to load plugins`),t.success&&t.data&&x(t.data.plugins),E(!1)},[]);(0,_.useEffect)(()=>{H()},[H]);let U=(0,_.useMemo)(()=>o.filter(e=>e.installable!==!0),[o]),W=(0,_.useMemo)(()=>[...o.filter(e=>e.installable===!0),...b.filter(e=>!o.some(t=>t.id===e.id||t.marketId===e.id))],[o,b]),G=(0,_.useCallback)(e=>e.filter(e=>F&&de(e)!==F||L&&(e.market??null)!==L?!1:fe(e,N)),[F,N,L]),K=(0,_.useMemo)(()=>G(U),[G,U]),q=(0,_.useMemo)(()=>G(W),[G,W]),ye=(0,_.useMemo)(()=>{let e=new Set;for(let t of W)e.add(de(t));return[`all`,...Array.from(e).sort()]},[W]),J=(0,_.useMemo)(()=>{let e=new Set;for(let t of W)t.market&&e.add(t.market);return le.filter(t=>t===`all`||e.has(t))},[W]),be=e=>Math.max(1,Math.ceil(e/T)),xe=(e,t)=>e.slice((t-1)*T,t*T),Y=be(K.length),X=be(q.length),Se=(0,_.useMemo)(()=>xe(K,Math.min(z,Y)),[K,z,Y]),Ce=(0,_.useMemo)(()=>xe(q,Math.min(z,X)),[q,z,X]);(0,_.useEffect)(()=>{B(1)},[n,N,F,L]),(0,_.useEffect)(()=>{L!==null&&!J.includes(L)&&R(null)},[L,J]);let we=N.trim().length>0||F!==null||L!==null,Z=(0,_.useCallback)(async(e,t,n)=>{me(e),ge(t);try{let r=await n();r&&r.success===!1?V(`err`,String(r.error??`Request failed`)):(V(`ok`,`${t} ${e} ✓`),await H())}catch(e){V(`err`,e instanceof Error?e.message:String(e))}finally{me(null),ge(null)}},[H,V]),Q=ce(),Te=async(e,t)=>{let{job:n,error:r}=await Q.start(e,t);if(!n){if(r)return V(`err`,r);V(`ok`,`installed ${e} ✓`),await H()}},Ee=Q.settledCount;(0,_.useEffect)(()=>{Ee>0&&H()},[Ee,H]);let De=(0,_.useMemo)(()=>Object.values(Q.jobs),[Q.jobs]),Oe=(0,_.useCallback)(e=>{r(`available`),P(``),I(null),R(null);let t=W.findIndex(t=>((`marketId`in t?t.marketId:void 0)??t.id)===e);t>=0&&B(Math.floor(t/T)+1),requestAnimationFrame(()=>{Array.from(document.querySelectorAll(`[data-install-card]`)).find(t=>t.getAttribute(`data-install-card`)===e)?.scrollIntoView({block:`center`,behavior:`smooth`})})},[W]),ke=e=>Z(e,`activated`,()=>h.post(`/api/plugins/${encodeURIComponent(e)}/activate`)),Ae=e=>Z(e,`deactivated`,()=>h.post(`/api/plugins/${encodeURIComponent(e)}/deactivate`)),je=e=>Z(e,`uninstalled`,()=>h.delete(`/api/plugins/${encodeURIComponent(e)}`)),Me=async e=>{M(e);try{let t=await h.post(`/api/plugins/l2/provider/${encodeURIComponent(e)}`);t.success&&t.data?(V(`ok`,`Provider ${t.data.applied} applied to config ✓`),await H()):V(`err`,t.error??`Apply failed`)}catch(e){V(`err`,e instanceof Error?e.message:String(e))}finally{M(null)}},Ne=(t,n)=>n>1?(0,v.jsxs)(`div`,{className:`flex items-center justify-center gap-3 pt-3 pb-1 select-none`,children:[(0,v.jsxs)(`button`,{onClick:()=>B(e=>Math.max(1,e-1)),disabled:z<=1,className:`flex items-center gap-1 px-2 py-1 rounded border border-dark-border bg-dark-hover text-dark-muted text-meta hover:text-dark-text disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,children:[(0,v.jsx)(p,{size:12}),` `,e(`plugins.prevPage`)]}),(0,v.jsx)(`span`,{className:`text-meta text-dark-muted`,children:e(`plugins.pageInfo`,{page:Math.min(z,n),pages:n,count:t})}),(0,v.jsxs)(`button`,{onClick:()=>B(e=>Math.min(n,e+1)),disabled:z>=n,className:`flex items-center gap-1 px-2 py-1 rounded border border-dark-border bg-dark-hover text-dark-muted text-meta hover:text-dark-text disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,children:[e(`plugins.nextPage`),` `,(0,v.jsx)(ee,{size:12})]})]}):null,$=t=>(0,v.jsx)(`div`,{className:`mt-8 text-center text-xs text-dark-muted`,children:we?e(`plugins.noMatch`):t});return(0,v.jsxs)(`div`,{className:`h-full flex flex-col min-h-0 bg-dark-bg`,children:[(0,v.jsxs)(`div`,{className:`h-11 flex items-center gap-2 px-3 border-b border-dark-border bg-dark-bg shrink-0 select-none`,children:[(0,v.jsx)(d,{size:15,className:`text-accent-blue`}),(0,v.jsx)(`span`,{className:`truncate text-compact font-medium text-dark-text`,children:e(`nav.plugins`)}),S!==null&&(0,v.jsxs)(`span`,{className:`px-1.5 py-0.5 rounded text-badge bg-dark-hover text-dark-muted border border-dark-border`,children:[`schema v`,S]}),(0,v.jsx)(`div`,{className:`flex-1`}),(0,v.jsx)(`button`,{onClick:()=>void H(),className:`p-1.5 rounded hover:bg-dark-hover text-dark-muted hover:text-dark-text transition-colors`,title:`Refresh`,children:(0,v.jsx)(t,{size:14,className:w?`animate-spin`:``})})]}),y.length>0&&(0,v.jsxs)(`div`,{className:`shrink-0 mx-3 mt-2 rounded-lg border border-accent-yellow/40 bg-accent-yellow/10`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5`,children:[(0,v.jsx)(l,{size:13,className:`shrink-0 text-accent-yellow`}),(0,v.jsx)(`span`,{className:`text-xs text-dark-text`,children:e(`plugins.issues.title`,{count:y.length})}),(0,v.jsx)(`div`,{className:`flex-1`}),(0,v.jsx)(te,{variant:`ghost`,size:`sm`,onClick:()=>r(`available`),children:e(`plugins.issues.goMarket`)})]}),(0,v.jsx)(`ul`,{className:`max-h-28 space-y-1 overflow-y-auto px-3 pb-2`,children:y.map(t=>(0,v.jsxs)(`li`,{className:`flex items-baseline gap-1.5 text-meta`,children:[(0,v.jsx)(`span`,{className:`shrink-0 rounded border border-dark-border bg-dark-hover px-1 text-dark-muted`,children:e(`plugins.issues.stage.${t.stage}`)}),(0,v.jsx)(`span`,{className:`shrink-0 font-mono text-dark-text`,children:t.marketId??t.id}),t.channelType&&(0,v.jsx)(`span`,{className:`shrink-0 text-dark-muted`,children:e(`plugins.issues.channelType`,{type:t.channelType})}),t.message&&(0,v.jsx)(`span`,{className:`truncate text-dark-muted`,title:t.message,children:t.message})]},`${t.stage}:${t.id}`))})]}),(0,v.jsx)(`div`,{className:`flex items-center gap-1 px-3 pt-2 shrink-0`,children:[`installed`,`available`].map(t=>(0,v.jsx)(`button`,{onClick:()=>r(t),className:`px-3 py-1.5 rounded-t text-xs transition-colors ${n===t?`bg-dark-surface text-accent-blue border border-b-0 border-dark-border`:`text-dark-muted hover:text-dark-text`}`,children:t===`installed`?e(`plugins.installedTab`,{count:U.length}):e(`plugins.availableTab`,{count:W.length})},t))}),(0,v.jsx)(se,{jobs:De,onSelect:Oe}),(0,v.jsxs)(`div`,{className:`shrink-0 px-3 pt-2 pb-1 space-y-2 bg-dark-bg`,children:[(0,v.jsxs)(`div`,{className:`relative`,children:[(0,v.jsx)(i,{size:13,className:`absolute start-2.5 top-1/2 -translate-y-1/2 text-dark-muted pointer-events-none`}),(0,v.jsx)(`input`,{value:N,onChange:e=>P(e.target.value),placeholder:e(`plugins.searchPlaceholder`),className:`w-full ps-8 pe-8 py-1.5 rounded bg-dark-hover border border-dark-border text-xs text-dark-text placeholder-dark-muted outline-none focus:border-accent-blue/50 transition-colors`}),N&&(0,v.jsx)(`button`,{onClick:()=>P(``),className:`absolute end-2 top-1/2 -translate-y-1/2 p-0.5 rounded text-dark-muted hover:text-dark-text transition-colors`,title:e(`plugins.clear`),children:(0,v.jsx)(u,{size:12})})]}),n===`available`&&ye.length>2&&(0,v.jsx)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:ye.map(t=>(0,v.jsx)(`button`,{onClick:()=>I(t===`all`?null:t),className:`px-2 py-0.5 rounded-full text-meta border transition-colors ${t===`all`&&F===null||F===t?`bg-accent-blue/20 text-accent-blue border-accent-blue/40`:`bg-dark-hover text-dark-muted border-dark-border hover:text-dark-text`}`,children:t===`all`?e(`plugins.allCategories`):t},t))}),n===`available`&&(0,v.jsx)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:J.map(t=>{let n=t===`all`?e(`plugins.marketFilterAll`):t===`builtin`?e(`plugins.marketFilterBuiltin`):t;return(0,v.jsx)(`button`,{onClick:()=>R(t===`all`?null:t),className:`px-2 py-0.5 rounded-full text-meta border transition-colors ${t===`all`&&L===null||L===t?`bg-accent-blue/20 text-accent-blue border-accent-blue/40`:`bg-dark-hover text-dark-muted border-dark-border hover:text-dark-text`}`,children:n},t)})})]}),(0,v.jsxs)(`div`,{className:`flex-1 min-h-0 overflow-y-auto px-3 pb-4`,children:[D&&(0,v.jsxs)(`div`,{className:`mt-3 flex items-center gap-2 px-3 py-2 rounded bg-accent-red/15 border border-accent-red text-accent-red text-xs`,children:[(0,v.jsx)(l,{size:14}),` `,D]}),w&&!D&&(0,v.jsx)(`div`,{className:`mt-8 px-4`,role:`status`,children:(0,v.jsx)(ne,{count:4})}),!w&&n===`installed`&&(0,v.jsxs)(`div`,{className:`mt-3 space-y-2`,children:[K.length===0&&$(e(`plugins.emptyInstalled`)),Se.map(t=>{let n=t.l2??[],r=t.status===`active`;return(0,v.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-surface p-3`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,v.jsx)(`span`,{className:`text-compact font-medium text-dark-text truncate`,children:t.name||t.id}),t.version&&(0,v.jsx)(`span`,{className:`text-meta text-dark-muted shrink-0`,children:t.version}),ie(t.source),(0,v.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-meta border shrink-0 ${r?`bg-accent-green/15 text-accent-green border-accent-green`:`bg-dark-hover text-dark-muted border-dark-border`}`,children:r?`active`:`installed`}),t.httpMounted&&(0,v.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-meta bg-accent-green/15 text-accent-green border border-accent-green shrink-0`,children:`http mounted`}),(0,v.jsx)(`div`,{className:`flex-1`}),(0,v.jsx)(`span`,{className:`text-meta text-dark-muted font-mono shrink-0`,children:t.id})]}),t.description&&(0,v.jsx)(`p`,{className:`mt-1 text-xs text-dark-muted`,children:t.description}),n.length>0&&(0,v.jsxs)(`div`,{className:`mt-2 flex flex-wrap gap-1.5`,children:[n.map(e=>(0,v.jsxs)(`span`,{title:e.note||e.id,className:`px-1.5 py-0.5 rounded text-meta border cursor-help ${ue(e.status)}`,children:[e.kind,` · `,e.status,e.status===`wired`&&(0,v.jsx)(f,{size:10,className:`inline ms-0.5`})]},`${e.kind}-${e.id}`)),n.filter(e=>e.kind===`provider`&&e.status===`wired`).map(t=>(0,v.jsx)(`button`,{disabled:ve===t.id,onClick:()=>void Me(t.id),className:`px-1.5 py-0.5 rounded text-meta border border-accent-blue/40 text-accent-blue hover:bg-accent-blue/10 disabled:opacity-50 transition-colors`,title:e(`plugins.applyProviderTitle`),children:ve===t.id?`applying…`:`apply provider`},`apply-${t.id}`))]}),(0,v.jsxs)(`div`,{className:`mt-2 flex items-center gap-1.5`,children:[r?(0,v.jsxs)(`button`,{onClick:()=>void Ae(t.id),disabled:O===t.id,className:`flex items-center gap-1 px-2 py-1 rounded bg-accent-yellow/15 border border-accent-yellow text-accent-yellow text-meta hover:bg-accent-yellow/15 disabled:opacity-50 transition-colors`,children:[(0,v.jsx)(a,{size:11}),` `,O===t.id?`${he}…`:e(`plugins.deactivate`)]}):(0,v.jsxs)(`button`,{onClick:()=>void ke(t.id),disabled:O===t.id,className:`flex items-center gap-1 px-2 py-1 rounded bg-accent-green/15 border border-accent-green text-accent-green text-meta hover:bg-accent-green/15 disabled:opacity-50 transition-colors`,children:[(0,v.jsx)(c,{size:11}),` `,O===t.id?`${he}…`:e(`plugins.activate`)]}),(0,v.jsxs)(`button`,{onClick:()=>j(t.id),disabled:O===t.id,className:`flex items-center gap-1 px-2 py-1 rounded bg-dark-hover border border-dark-border text-dark-muted text-meta hover:text-accent-red hover:border-accent-red disabled:opacity-50 transition-colors`,children:[(0,v.jsx)(s,{size:11}),` `,e(`plugins.uninstall`)]})]})]},t.id)}),Ne(K.length,Y)]}),!w&&n===`available`&&(0,v.jsxs)(`div`,{className:`mt-3 space-y-2`,children:[q.length===0&&$(e(`plugins.emptyMarket`)),Ce.map(e=>{let t=(`marketId`in e?e.marketId:void 0)??e.id;return(0,v.jsx)(oe,{plugin:e,job:Q.jobs[t],error:Q.errors[t]??null,onInstall:(e,t)=>void Te(e,t),onDismiss:()=>Q.dismiss(t)},e.id)}),Ne(q.length,X)]})]}),k&&(0,v.jsxs)(`div`,{className:`fixed bottom-4 end-4 z-50 flex items-center gap-2 px-3 py-2 rounded-lg border text-xs shadow-lg ${k.kind===`ok`?`bg-accent-green/15 border-accent-green text-accent-green`:`bg-accent-red/15 border-accent-red text-accent-red`}`,children:[k.kind===`ok`?(0,v.jsx)(f,{size:13}):(0,v.jsx)(u,{size:13}),` `,k.text]}),(0,v.jsx)(re,{isOpen:A!==null,title:e(`plugins.uninstallTitle`),message:e(`plugins.uninstallConfirm`,{id:A??``}),onConfirm:()=>{A&&je(A),j(null)},onClose:()=>j(null)})]})}export{D as PluginsView};