pikiclaw 0.2.73 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +2 -0
  2. package/dashboard/dist/assets/AgentTab-DarwJ-6D.js +1 -0
  3. package/dashboard/dist/assets/BrandIcon-B9y9j0jh.js +1 -0
  4. package/dashboard/dist/assets/DirBrowser-D4Y8bm_k.js +1 -0
  5. package/dashboard/dist/assets/ExtensionsTab-DvPbSlc8.js +1 -0
  6. package/dashboard/dist/assets/IMAccessTab-AL06xxWE.js +1 -0
  7. package/dashboard/dist/assets/Modals-CSIL3K6j.js +1 -0
  8. package/dashboard/dist/assets/PermissionsTab-4L-PgQ1X.js +1 -0
  9. package/dashboard/dist/assets/SessionPanel-DTILWbVA.js +14 -0
  10. package/dashboard/dist/assets/SessionsTab-BzDzSqml.js +3 -0
  11. package/dashboard/dist/assets/SystemTab-D_Q8vDMf.js +1 -0
  12. package/dashboard/dist/assets/appium-Ra-JU1qL.png +0 -0
  13. package/dashboard/dist/assets/codex-DYadqqp0.png +0 -0
  14. package/dashboard/dist/assets/feishu-C4OMrjCW.ico +0 -0
  15. package/dashboard/dist/assets/gemini-BYkEpiWr.svg +1 -0
  16. package/dashboard/dist/assets/index-BxuA85oI.js +3 -0
  17. package/dashboard/dist/assets/index-NO1v_zlB.css +1 -0
  18. package/dashboard/dist/assets/markdown-Chkk3cWU.js +29 -0
  19. package/dashboard/dist/assets/playwright-BldPFZgC.ico +0 -0
  20. package/dashboard/dist/assets/react-vendor-C7Sl8SE7.js +9 -0
  21. package/dashboard/dist/assets/router-Rwafsu7Y.js +3 -0
  22. package/dashboard/dist/assets/shared-rdDL3t6R.js +1 -0
  23. package/dashboard/dist/index.html +16 -0
  24. package/dist/agent-auto-update.js +36 -5
  25. package/dist/bot-command-ui.js +6 -1
  26. package/dist/bot-commands.js +11 -2
  27. package/dist/bot-feishu-render.js +0 -130
  28. package/dist/bot-feishu.js +15 -13
  29. package/dist/bot-orchestration.js +1 -0
  30. package/dist/bot-telegram-live-preview.js +0 -5
  31. package/dist/bot-telegram.js +22 -20
  32. package/dist/bot.js +313 -51
  33. package/dist/channel-base.js +0 -4
  34. package/dist/channel-feishu.js +39 -42
  35. package/dist/channel-telegram.js +28 -28
  36. package/dist/cli-channels.js +0 -2
  37. package/dist/cli.js +1 -5
  38. package/dist/code-agent.js +516 -188
  39. package/dist/config-validation.js +2 -2
  40. package/dist/driver-claude.js +246 -12
  41. package/dist/driver-codex.js +502 -50
  42. package/dist/driver-gemini.js +70 -5
  43. package/dist/feishu-markdown.js +108 -0
  44. package/dist/logging.js +98 -0
  45. package/dist/mcp-playwright-proxy.js +11 -16
  46. package/dist/mcp-session-server.js +10 -16
  47. package/dist/onboarding.js +3 -8
  48. package/dist/project-skills.js +167 -0
  49. package/dist/routes/agents.js +252 -0
  50. package/dist/routes/config.js +413 -0
  51. package/dist/routes/sessions.js +490 -0
  52. package/dist/run.js +6 -5
  53. package/dist/runtime-config.js +83 -0
  54. package/dist/runtime.js +253 -0
  55. package/dist/server.js +145 -0
  56. package/dist/session-control.js +36 -0
  57. package/dist/session-hub.js +216 -0
  58. package/dist/tools/types.js +2 -5
  59. package/dist/user-config.js +141 -0
  60. package/package.json +10 -5
  61. package/dist/bot-handler.js +0 -115
  62. package/dist/dashboard-routes-agent.js +0 -375
  63. package/dist/dashboard-routes-config.js +0 -381
  64. package/dist/dashboard-ui.js +0 -31
  65. package/dist/dashboard.js +0 -438
package/README.md CHANGED
@@ -16,6 +16,8 @@ npx pikiclaw@latest
16
16
  <a href="https://nodejs.org"><img src="https://img.shields.io/badge/Node.js-18+-green.svg" alt="Node.js 18+"></a>
17
17
  </p>
18
18
 
19
+ <img src="docs/workspace.png" alt="Workspace" width="700">
20
+
19
21
  </div>
20
22
 
21
23
  ## Demo
@@ -0,0 +1 @@
1
+ import{r as o,j as e}from"./react-vendor-C7Sl8SE7.js";import{u as K,a as ae,b as _,h as O,e as k,M as ne,g as de,L,l as $,E as ie,S as B,B as G,c as re}from"./index-BxuA85oI.js";import{B as oe}from"./BrandIcon-B9y9j0jh.js";import{S as U}from"./shared-rdDL3t6R.js";import"./router-Rwafsu7Y.js";const ce=["claude","codex","gemini"];function fe(t){return t==="zh-CN"?{defaultsTitle:"新会话默认值",defaultsHint:"新会话会默认采用这里的智能体、模型和推理强度。",defaultsEditTitle:"编辑新会话默认值",defaultsEditHint:"在弹窗中选择默认智能体、模型和推理强度,保存后对新会话生效。",defaultsSaved:"新会话默认值已保存",editDefaults:"修改默认值",agentsTitle:"可用智能体",defaultAgent:"默认智能体",defaultModel:"默认模型",defaultEffort:"推理强度",status:"状态",model:"模型",models:"模型",version:"版本",defaultBadge:"默认",installed:"已安装",notInstalled:"未安装",noModel:"暂无可选模型",currentModelPrefix:"当前模型",availableModelsSuffix:"个可选",availableModels:"可用模型",recommendedFor:"建议场景",currentConfig:"当前配置",effort:"推理强度",readyHint:"已安装,可直接作为新会话执行智能体。",installHint:"尚未安装,需要先完成本地 CLI 安装。",noVersion:"版本未知",moreModels:s=>`+${s}`,install:"安装",installing:"安装中...",noEffort:"不支持调整",loadFailed:"无法加载智能体状态"}:{defaultsTitle:"New Session Defaults",defaultsHint:"New sessions use this agent, model, and effort by default.",defaultsEditTitle:"Edit New Session Defaults",defaultsEditHint:"Choose the default agent, model, and effort in the modal, then save them for new sessions.",defaultsSaved:"New session defaults saved",editDefaults:"Edit Defaults",agentsTitle:"Available Agents",defaultAgent:"Default Agent",defaultModel:"Default Model",defaultEffort:"Effort",status:"Status",model:"Model",models:"Models",version:"Version",defaultBadge:"Default",installed:"Installed",notInstalled:"Not installed",noModel:"No selectable models",currentModelPrefix:"Current model",availableModelsSuffix:"available",availableModels:"Available models",recommendedFor:"Recommended for",currentConfig:"Current config",effort:"Effort",readyHint:"Installed and ready for new sessions.",installHint:"Not installed locally yet.",noVersion:"Version unavailable",moreModels:s=>`+${s}`,install:"Install",installing:"Installing...",noEffort:"Not supported",loadFailed:"Failed to load agent status"}}function ue(t,s){const l=t.filter(r=>r.installed);return(l.length?l:t).map(r=>({value:r.agent,label:`${O(r.agent).label} · ${r.installed?r.version||s.installed:s.notInstalled}`}))}function me(t){if(!t)return[];const s=t.models.map(l=>({value:l.id,label:l.alias?`${l.alias} · ${l.id}`:l.id}));return t.selectedModel&&!s.some(l=>l.value===t.selectedModel)&&s.unshift({value:t.selectedModel,label:t.selectedModel}),s}function xe(t){return t?ie[t.agent].map(s=>({value:s,label:s})):[]}function ge(t,s){if(!t.models.length)return s.noModel;const l=t.selectedModel?t.models.find(r=>r.id===t.selectedModel):t.models[0],n=l?.alias||l?.id||s.noModel;return`${s.currentModelPrefix}: ${n} · ${t.models.length} ${s.availableModelsSuffix}`}function J(t){return t?t.alias||t.id:"—"}function Q(t,s){if(!t.models.length)return s.noModel;const l=t.selectedModel?t.models.find(n=>n.id===t.selectedModel):t.models[0];return J(l)}function he(t,s=4){const l=new Set;return t.models.map(r=>({key:r.id,label:J(r)})).filter(r=>l.has(r.key)?!1:(l.add(r.key),!0)).slice(0,s)}function R(t,s){t({defaultAgent:s.defaultAgent,agents:s.agents})}function q(t,s){return{agent:t?.agent||s,model:t?.selectedModel||"",effort:t?.selectedEffort||""}}function V({label:t,value:s,hint:l,loading:n=!1}){return e.jsxs("div",{className:"rounded-lg border border-edge bg-panel-alt px-3.5 py-2.5",children:[e.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-[0.14em] text-fg-5",children:t}),e.jsxs("div",{className:"mt-1 flex items-center gap-2 text-[13px] font-semibold text-fg-2",children:[n&&e.jsx(B,{className:"h-3.5 w-3.5"}),e.jsx("span",{children:s})]}),l&&e.jsx("div",{className:"mt-0.5 text-[10px] leading-relaxed text-fg-5",children:l})]})}function pe({agent:t,copy:s,t:l,installing:n,onInstall:r,loading:c=!1}){const E=O(t.agent),C=ge(t,s),D=Q(t,s),I=E.advantageKey?l(E.advantageKey):"—",m=he(t),w=Math.max(0,t.models.length-m.length),S=t.selectedEffort||s.noEffort,F=t.version||s.noVersion,N=c?l("status.loading"):t.installed?s.installed:s.notInstalled,v=c?"muted":t.installed?"ok":"warn",i=c?l("status.loading"):t.installed?s.readyHint:s.installHint,M=c?l("status.loading"):D,y=c?l("status.loading"):S,x=c?l("status.loading"):I,g=c?l("status.loading"):C;return e.jsx("div",{className:"glass rounded-md border border-edge px-4 py-3 shadow-[0_1px_0_rgba(255,255,255,0.02),0_4px_12px_rgba(15,23,42,0.05)]",children:e.jsxs("div",{className:"grid gap-x-5 gap-y-3 xl:grid-cols-[220px_130px_220px_minmax(0,1fr)_auto] xl:items-start",children:[e.jsx("div",{className:"min-w-0",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex h-10 w-10 shrink-0 items-center justify-center rounded-md border border-edge bg-panel-alt",children:e.jsx(oe,{brand:t.agent,size:22})}),e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("div",{className:"text-[15px] font-semibold text-fg",children:E.label}),t.isDefault&&e.jsx(G,{variant:"accent",children:s.defaultBadge})]}),e.jsxs("div",{className:"mt-1 text-[12px] leading-relaxed text-fg-5",children:[s.version,": ",F]})]})]})}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-[0.16em] text-fg-5",children:s.status}),e.jsx("div",{className:"mt-1.5",children:e.jsxs(G,{variant:v,children:[c&&e.jsx(B,{className:"h-3 w-3"}),N]})}),e.jsx("div",{className:"mt-1.5 text-[12px] leading-relaxed text-fg-5",children:i})]}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-[0.16em] text-fg-5",children:s.currentConfig}),e.jsxs("div",{className:"mt-1.5 space-y-1.5 text-[13px] leading-relaxed text-fg-3",children:[e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"w-16 shrink-0 text-fg-5",children:s.model}),e.jsx("span",{className:"min-w-0 break-words text-fg-2",children:M})]}),e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"w-16 shrink-0 text-fg-5",children:s.effort}),e.jsx("span",{className:"text-fg-2",children:y})]})]})]}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-[0.16em] text-fg-5",children:s.recommendedFor}),e.jsx("div",{className:"mt-1.5 text-[13px] leading-relaxed text-fg-3",children:x}),e.jsx("div",{className:"mt-2.5 text-[10px] font-semibold uppercase tracking-[0.16em] text-fg-5",children:s.availableModels}),e.jsxs("div",{className:"mt-1.5 flex flex-wrap items-center gap-1.5",children:[!c&&m.length>0?m.map(h=>e.jsx("span",{className:"inline-flex h-6 max-w-full items-center rounded-md border border-edge bg-panel-alt px-2 text-[11px] text-fg-3",title:h.key,children:e.jsx("span",{className:"truncate",children:h.label})},h.key)):e.jsx("span",{className:"text-[12px] text-fg-5",children:c?l("status.loading"):s.noModel}),!c&&w>0&&e.jsx("span",{className:"inline-flex h-6 items-center rounded-md border border-edge bg-panel-alt px-2 text-[11px] text-fg-5",children:s.moreModels(w)})]}),e.jsx("div",{className:"mt-1.5 text-[12px] leading-relaxed text-fg-5",children:g})]}),e.jsxs("div",{className:re("flex justify-start xl:justify-end",t.installed&&"xl:self-start"),children:[c&&e.jsxs("div",{className:"inline-flex h-7 items-center gap-2 rounded-md border border-edge bg-transparent px-2.5 text-[11px] text-fg-5",children:[e.jsx(B,{className:"h-3 w-3"}),l("status.loading")]}),!c&&!t.installed&&e.jsx(k,{variant:"outline",size:"sm",disabled:n,onClick:()=>r(t),children:n?s.installing:s.install})]})]})})}function we(){const t=K(a=>a.locale),s=K(a=>a.toast),l=o.useMemo(()=>ae(t),[t]),n=fe(t),[r,c]=o.useState(null),[E,C]=o.useState(!0),[D,I]=o.useState(null),[m,w]=o.useState(!1),[S,F]=o.useState(null),[N,v]=o.useState(!1),[i,M]=o.useState({agent:"codex",model:"",effort:""}),y=o.useRef(!1),x=o.useCallback(async()=>{y.current||C(!0);try{const a=await _.getAgentStatus();return R(c,a),I(null),y.current=!0,a}catch(a){const d=a instanceof Error?a.message:n.loadFailed;return I(d),y.current||s(d,!1),null}finally{C(!1)}},[n.loadFailed,s]);o.useEffect(()=>{x()},[x]);const g=o.useMemo(()=>{const a=r?.agents||[],d=new Map(a.map(f=>[f.agent,f]));return ce.map(f=>{const A=d.get(f);if(A)return A;const p=O(f);return{agent:f,label:p.label,installed:!1,version:void 0,installCommand:void 0,selectedModel:null,selectedEffort:null,isDefault:r?.defaultAgent===f,models:[],usage:null}})},[r]),h=r?.defaultAgent||"codex",j=g.find(a=>a.agent===h)||null,z=g.filter(a=>a.installed).length>0,W=ue(g,n),u=g.find(a=>a.agent===i.agent)||null,H=me(u),T=xe(u),P=o.useCallback(async a=>{w(!0);try{const d=await _.updateRuntimeAgent(a);if(!d.ok)throw new Error(d.error||l("config.applyFailed"));return R(c,d),d}catch(d){const f=d instanceof Error?d.message:l("config.applyFailed");return s(f,!1),x(),null}finally{w(!1)}},[x,l,s]);o.useEffect(()=>{N&&M(q(j,h))},[h,j,N]),o.useEffect(()=>{if(!N||!u)return;const a=u.selectedModel||"",d=!i.model||H.some(p=>p.value===i.model),f=u.selectedEffort||"",A=!i.effort||T.some(p=>p.value===i.effort);d&&A||M(p=>({...p,model:d?p.model:a,effort:A?p.effort:f}))},[N,i.effort,i.model,u,T,H]);const X=o.useCallback(a=>{const d=g.find(f=>f.agent===a);d?.installed&&M(q(d,d.agent))},[g]),Y=o.useCallback(async()=>{if(!u?.installed)return;const a={};if(i.agent!==h&&(a.defaultAgent=i.agent),i.model&&i.model!==(u.selectedModel||"")&&(a.agent=i.agent,a.model=i.model),i.effort&&i.effort!==(u.selectedEffort||"")&&(a.agent=i.agent,a.effort=i.effort),Object.keys(a).length===0){v(!1);return}await P(a)&&(s(n.defaultsSaved),v(!1))},[n.defaultsSaved,h,i.agent,i.effort,i.model,u,s,P]),Z=o.useCallback(async a=>{if(!S){F(a.agent);try{const d=await _.installAgent(a.agent);if(!d.ok)throw new Error(d.error||l("config.agentInstallFailed"));R(c,d),s(l("config.agentInstalled"))}catch(d){const f=d instanceof Error?d.message:l("config.agentInstallFailed");s(f,!1),x()}finally{F(d=>d===a.agent?null:d)}}},[S,x,l,s]),b=E&&!r,ee=b?l("status.loading"):j?O(j.agent).label:n.notInstalled,te=b?l("status.loading"):j?.installed?n.installed:n.notInstalled,se=b?l("status.loading"):j?Q(j,n):n.noModel,le=b?l("status.loading"):j?.selectedEffort||n.noEffort;return e.jsxs("div",{className:"animate-in space-y-4",children:[e.jsx("section",{className:"space-y-3",children:e.jsxs(U,{className:"space-y-3",children:[e.jsxs("div",{className:"flex flex-col gap-3 lg:flex-row lg:items-start lg:justify-between",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-base font-semibold tracking-tight text-fg",children:n.defaultsTitle}),e.jsx("div",{className:"mt-0.5 text-[13px] leading-relaxed text-fg-4",children:n.defaultsHint})]}),e.jsx("div",{className:"flex justify-end",children:e.jsx(k,{variant:"secondary",onClick:()=>v(!0),disabled:m||!z,children:n.editDefaults})})]}),e.jsxs("div",{className:"grid gap-2.5 lg:grid-cols-3",children:[e.jsx(V,{label:n.defaultAgent,value:ee,hint:te,loading:b}),e.jsx(V,{label:n.defaultModel,value:se,loading:b}),e.jsx(V,{label:n.defaultEffort,value:le,loading:b})]})]})}),e.jsxs("section",{className:"space-y-3",children:[e.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-[0.18em] text-fg-5",children:n.agentsTitle}),e.jsx("div",{className:"space-y-3",children:g.map(a=>e.jsx(pe,{agent:a,copy:n,t:l,installing:S===a.agent,loading:b,onInstall:Z},a.agent))})]}),D&&e.jsx(U,{className:"border-amber-500/20 bg-amber-500/5",children:e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[e.jsx("div",{className:"text-[13px] text-fg-2",children:D}),e.jsx(k,{variant:"outline",size:"sm",onClick:()=>{x()},children:l("sessions.retry")})]})}),e.jsxs(ne,{open:N,onClose:()=>v(!1),children:[e.jsx(de,{title:n.defaultsEditTitle,description:n.defaultsEditHint,onClose:()=>v(!1)}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(L,{children:n.defaultAgent}),e.jsx($,{value:i.agent,options:W,onChange:X,disabled:m||!z,placeholder:n.notInstalled})]}),e.jsxs("div",{children:[e.jsx(L,{children:n.defaultModel}),e.jsx($,{value:i.model,options:H,onChange:a=>M(d=>({...d,model:a})),disabled:m||!u?.installed||H.length===0,placeholder:n.noModel})]}),e.jsxs("div",{children:[e.jsx(L,{children:n.defaultEffort}),e.jsx($,{value:i.effort,options:T,onChange:a=>M(d=>({...d,effort:a})),disabled:m||!u?.installed||T.length===0,placeholder:n.noEffort})]})]}),e.jsxs("div",{className:"mt-6 flex justify-end gap-2",children:[e.jsx(k,{variant:"ghost",onClick:()=>v(!1),children:l("modal.cancel")}),e.jsx(k,{variant:"primary",disabled:m||!u?.installed,onClick:()=>{Y()},children:l(m?"config.validating":"modal.save")})]})]})]})}export{we as AgentTab,we as default};
@@ -0,0 +1 @@
1
+ import{j as t}from"./react-vendor-C7Sl8SE7.js";import{c as s}from"./index-BxuA85oI.js";const o="data:image/png;base64,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",g="/assets/codex-DYadqqp0.png",r="/assets/feishu-C4OMrjCW.ico",a="/assets/gemini-BYkEpiWr.svg",n="data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='16px'%20height='16px'%20viewBox='0%200%2016%2016'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3cdefs%3e%3clinearGradient%20x1='50%25'%20y1='0%25'%20x2='50%25'%20y2='100%25'%20id='linearGradient-1'%3e%3cstop%20stop-color='%2338AEEB'%20offset='0%25'%3e%3c/stop%3e%3cstop%20stop-color='%23279AD1'%20offset='100%25'%3e%3c/stop%3e%3c/linearGradient%3e%3c/defs%3e%3cg%20id='Artboard'%20stroke='none'%20stroke-width='1'%20fill='none'%20fill-rule='evenodd'%3e%3ccircle%20id='Oval'%20fill='url(%23linearGradient-1)'%20cx='8'%20cy='8'%20r='8'%3e%3c/circle%3e%3cpath%20d='M3.17026167,7.83635602%20C5.78750201,6.74265999%207.53273882,6.02162863%208.40597211,5.67326193%20C10.8992306,4.67860423%2011.2454541,4.53439191%2011.5831299,4.52864956%20C11.6573986,4.52743168%2011.8385417,4.55776042%2011.9798438,4.67645833%20C12.1211458,4.79515625%2012.1635786,4.87206678%2012.1755371,4.93908691%20C12.1874957,5.00610705%2012.1862759,5.21456762%2012.1744385,5.3338623%20C12.0393279,6.69547283%2011.5259342,9.83829771%2011.2285121,11.3633248%20C11.1026617,12.008621%2010.8548582,12.2249854%2010.6149558,12.2461596%20C10.0935924,12.2921758%209.69769267,11.9156852%209.19272668,11.5981993%20C8.40255458,11.1013965%208.13911734,10.9180161%207.3721185,10.4332283%20C6.48571864,9.87297217%206.85080034,9.6784879%207.35595703,9.17524981%20C7.48815894,9.04355001%209.67825076,7.04590073%209.71077046,6.86250183%20C9.7391276,6.70257812%209.7494847,6.68189389%209.67664063,6.60973958%20C9.60379655,6.53758527%209.51674192,6.54658941%209.46083149,6.55876051%20C9.38158015,6.57601267%208.17521836,7.33962686%205.84174612,8.84960308%20C5.48344358,9.08558775%205.15890428,9.20056741%204.86812819,9.19454205%20C4.54757089,9.18789957%203.93094724,9.02070014%203.47255094,8.87778221%20C2.91030922,8.70248755%202.46345069,8.609808%202.50236203,8.31210343%20C2.52262946,8.15704047%202.74526267,7.998458%203.17026167,7.83635602%20Z'%20id='Path-3'%20fill='%23FFFFFF'%3e%3c/path%3e%3c/g%3e%3c/svg%3e",d="data:image/svg+xml,%3csvg%20width='128'%20height='128'%20viewBox='0%200%20128%20128'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20width='128'%20height='128'%20rx='28'%20fill='%2307C160'/%3e%3cpath%20d='M42%2033c-16.569%200-30%2011.64-30%2026%200%208.084%204.283%2015.306%2011.008%2020.073L18%2095l20.832-8.102A37.33%2037.33%200%200%200%2042%2087c16.569%200%2030-11.64%2030-26S58.569%2033%2042%2033Z'%20fill='%23fff'/%3e%3cpath%20d='M85%2048c-13.807%200-25%209.402-25%2021%200%2011.598%2011.193%2021%2025%2021%202.545%200%205-.319%207.29-.91L109%2095l-4.772-12.27C109.078%2079.05%20112%2074.232%20112%2069c0-11.598-12.193-21-27-21Z'%20fill='%23fff'%20opacity='.95'/%3e%3ccircle%20cx='33'%20cy='56'%20r='4.5'%20fill='%2307C160'/%3e%3ccircle%20cx='50'%20cy='56'%20r='4.5'%20fill='%2307C160'/%3e%3ccircle%20cx='77'%20cy='66'%20r='4'%20fill='%2307C160'/%3e%3ccircle%20cx='92'%20cy='66'%20r='4'%20fill='%2307C160'/%3e%3c/svg%3e",w="/assets/playwright-BldPFZgC.ico",h="/assets/appium-Ra-JU1qL.png",x="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3e%3cpath%20d='M23.15%202.587L18.21.21a1.494%201.494%200%200%200-1.705.29l-9.46%208.63-4.12-3.128a.999.999%200%200%200-1.276.057L.327%207.261A1%201%200%200%200%20.326%208.74L3.899%2012%20.326%2015.26a1%201%200%200%200%20.001%201.479L1.65%2017.94a.999.999%200%200%200%201.276.057l4.12-3.128%209.46%208.63a1.492%201.492%200%200%200%201.704.29l4.942-2.377A1.5%201.5%200%200%200%2024%2020.06V3.939a1.5%201.5%200%200%200-.85-1.352zm-5.146%2014.861L10.826%2012l7.178-5.448v10.896z'%20fill='%23007ACC'/%3e%3c/svg%3e",f="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3e%3crect%20width='24'%20height='24'%20rx='5.5'%20fill='%2319191C'/%3e%3cpath%20d='M7%205l10%207-4.5%201.5L15.5%2019l-2.2.8-3-5.5L7%2017z'%20fill='%23fff'/%3e%3c/svg%3e",A="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3e%3crect%20width='24'%20height='24'%20rx='5.5'%20fill='%230BA48A'/%3e%3cpath%20d='M8%2018l2-12h2.5l-1.2%205h4.2L10%2018H8zm3.5-3.5l3-7.5'%20fill='%23fff'%20fill-rule='evenodd'/%3e%3c/svg%3e",v="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3e%3crect%20width='24'%20height='24'%20rx='5.5'%20fill='%234A90D9'/%3e%3crect%20x='5'%20y='5'%20width='14'%20height='12'%20rx='1.5'%20fill='%236DB3F2'/%3e%3crect%20x='5'%20y='5'%20width='14'%20height='3.5'%20rx='1.5'%20fill='%233D7ABF'/%3e%3ccircle%20cx='8.5'%20cy='6.8'%20r='.8'%20fill='%23FF5F57'/%3e%3ccircle%20cx='11'%20cy='6.8'%20r='.8'%20fill='%23FEBC2E'/%3e%3ccircle%20cx='13.5'%20cy='6.8'%20r='.8'%20fill='%2328C840'/%3e%3crect%20x='7'%20y='10.5'%20width='10'%20height='1'%20rx='.5'%20fill='%23fff'%20opacity='.7'/%3e%3crect%20x='7'%20y='13'%20width='7'%20height='1'%20rx='.5'%20fill='%23fff'%20opacity='.5'/%3e%3c/svg%3e",L={claude:o,codex:g,gemini:a,telegram:n,feishu:r,weixin:d,playwright:w,appium:h,vscode:x,cursor:f,windsurf:A,finder:v};function C({brand:i,size:e=18,className:l}){const c=L[i];return c?t.jsx("img",{src:c,alt:"","aria-hidden":"true",draggable:!1,className:s("shrink-0 object-contain select-none",l),style:{width:e,height:e}}):null}export{C as B};
@@ -0,0 +1 @@
1
+ import{r,j as e}from"./react-vendor-C7Sl8SE7.js";import{b as I,B as P,S as z}from"./index-BxuA85oI.js";function W({initialPath:x,maxHeight:j=420,minHeight:N=200,onSelect:p,compact:l,t:o}){const[y,k]=r.useState(""),[h,m]=r.useState(""),[g,w]=r.useState([]),[i,S]=r.useState(""),[C,$]=r.useState(!1),[D,B]=r.useState([]),[E,c]=r.useState(!1),[u,d]=r.useState(""),a=r.useCallback(async t=>{c(!0),d("");try{const s=await I.lsDir(t);if(!s.ok){d(s.error||o("modal.cannotRead")),c(!1);return}k(s.path),m(s.path),w(s.dirs),S(s.parent),$(s.isGit);const G=s.path.split("/").filter(Boolean);let v="";B(G.map(b=>(v+="/"+b,{label:b,path:v}))),p?.(s.path,s.isGit)}catch{d(o("modal.loadFailed"))}finally{c(!1)}},[o,p]);r.useEffect(()=>{x!==void 0&&a(x||void 0)},[]);const n=l?"text-[11px]":"text-xs",f=l?"py-[5px]":"py-[7px]";return e.jsxs("div",{children:[e.jsxs("div",{className:`flex items-center gap-1 ${l?"text-[10px]":"text-[11px]"} font-mono text-fg-4 mb-2 flex-wrap`,children:[e.jsx("span",{className:"cursor-pointer hover:text-fg-2 transition-colors",onClick:()=>a("/"),children:"~"}),D.map((t,s)=>e.jsxs("span",{children:[e.jsx("span",{className:"text-fg-6",children:"/"}),e.jsx("span",{className:"cursor-pointer hover:text-fg-2 transition-colors",onClick:()=>a(t.path),children:t.label})]},s)),C&&e.jsx(P,{variant:"accent",className:"ml-1 !text-[9px] !py-0 !px-1.5",children:"git"})]}),e.jsxs("div",{className:"relative",children:[!l&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"pointer-events-none absolute inset-x-0 top-0 z-10 h-5 rounded-t-lg",style:{background:"linear-gradient(to bottom, var(--th-panel-alt), rgba(0, 0, 0, 0))"}}),e.jsx("div",{className:"pointer-events-none absolute inset-x-0 bottom-0 z-10 h-5 rounded-b-lg",style:{background:"linear-gradient(to top, var(--th-panel-alt), rgba(0, 0, 0, 0))"}})]}),e.jsx("div",{className:"border border-edge rounded-lg overflow-y-auto overscroll-contain scroll-smooth bg-panel-alt",style:{maxHeight:j,minHeight:N,scrollbarGutter:"stable"},children:E?e.jsx("div",{className:`${n} text-fg-5 p-4 text-center flex items-center justify-center gap-2`,children:e.jsx(z,{className:"h-3 w-3 text-fg-5"})}):u?e.jsx("div",{className:`${n} text-red-500/70 p-4`,children:u}):e.jsxs(e.Fragment,{children:[i&&i!==y&&e.jsxs("div",{className:`flex items-center gap-2 px-3 ${f} cursor-pointer hover:bg-panel transition-colors border-b border-edge`,onClick:()=>a(i),children:[e.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",className:"text-fg-5 shrink-0",children:e.jsx("polyline",{points:"15 18 9 12 15 6"})}),e.jsx("span",{className:`${n} text-fg-4`,children:".."})]}),g.length===0&&!i&&e.jsx("div",{className:`${n} text-fg-5 p-4 text-center`,children:o("modal.emptyDir")}),g.map(t=>e.jsxs("div",{className:`flex items-center gap-2 px-3 ${f} cursor-pointer hover:bg-panel transition-colors`,onClick:()=>a(t.path),children:[e.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:t.name===".git"?"var(--th-primary)":"currentColor",strokeWidth:"1.8",className:"text-fg-5 shrink-0",children:e.jsx("path",{d:"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"})}),e.jsx("span",{className:`${n} text-fg-3`,children:t.name})]},t.path))]})})]}),e.jsx("div",{className:"mt-2",children:e.jsx("input",{className:`w-full rounded-lg border border-edge bg-inset px-2.5 py-1.5 ${n} font-mono text-fg outline-none placeholder:text-fg-5 focus:border-edge-h transition-colors`,placeholder:o("modal.manualInput"),value:h,onChange:t=>m(t.target.value),onKeyDown:t=>{t.key==="Enter"&&a(h)}})})]})}export{W as D};
@@ -0,0 +1 @@
1
+ import{r as m,j as s}from"./react-vendor-C7Sl8SE7.js";import{u as p,a as B,b as R,e as g,B as w,S as N}from"./index-BxuA85oI.js";import{B as S}from"./BrandIcon-B9y9j0jh.js";import{a as k,b as C,c as b,d as y}from"./shared-rdDL3t6R.js";import"./router-Rwafsu7Y.js";function t(a,e,n){return a==="zh-CN"?e:n}function _(a,e,n){const r=a?.browser;return r?r.enabled?r.status==="chrome_missing"?{label:t(e,"Chrome 未安装","Chrome missing"),variant:"err"}:r.status==="needs_setup"?{label:t(e,"需要配置","Needs setup"),variant:"warn"}:r.running?{label:t(e,"浏览器已打开","Browser open"),variant:"ok"}:r.status==="ready"?{label:t(e,"已就绪","Available"),variant:"ok"}:{label:t(e,"需要检查","Needs attention"),variant:"warn"}:{label:t(e,"已关闭","Disabled"),variant:"muted"}:{label:n("status.loading"),variant:"muted"}}function E(a,e,n){const r=a?.desktop;return r?r.installed?r.running?{label:t(e,"运行中","Running"),variant:"ok"}:r.enabled?{label:t(e,"已启用","Enabled"),variant:"accent"}:{label:t(e,"已关闭","Disabled"),variant:"muted"}:{label:t(e,"未安装","Not installed"),variant:"muted"}:{label:n("status.loading"),variant:"muted"}}function V(a,e){const n=t(e,"配置文件","Profile"),r=t(e,"运行方式","Mode"),o=t(e,"Chrome","Chrome"),l=a?.profileCreated?t(e,"已创建","Created"):t(e,"待创建","Not created"),d=a?.enabled?a.headlessMode==="headed"?t(e,"可见窗口","Visible window"):t(e,"后台运行","Headless"):t(e,"已关闭","Disabled"),u=a?.chromeInstalled?t(e,"已安装","Installed"):t(e,"未安装","Not installed");return[{label:n,value:l},{label:r,value:d},{label:o,value:u}]}function z(a,e){const n=t(e,"连接地址","Address"),r=t(e,"驱动","Driver"),o=t(e,"服务状态","Service"),l=a?.appiumUrl||"http://127.0.0.1:4723",d=t(e,"Appium Mac2","Appium Mac2"),u=a?a.running?t(e,"运行中","Running"):a.enabled?t(e,"已启用","Enabled"):t(e,"已关闭","Disabled"):t(e,"加载中","Loading");return[{label:n,value:l},{label:r,value:d},{label:o,value:u}]}function L(a,e){return a?a.enabled?a.running?t(e,"独立浏览器已打开,可继续补充登录态。","The managed browser is open and ready for login."):a.status==="ready"?t(e,"已就绪,可在后续会话中直接使用。","Ready for upcoming sessions."):a.status==="chrome_missing"?t(e,"本机未检测到 Chrome。","Chrome was not detected on this machine."):a.detail||t(e,"需要先完成一次浏览器配置。","Setup is required before browser automation can be used."):t(e,"当前不会向 Agent 会话注入 browser MCP。","Browser MCP will not be injected into agent sessions."):t(e,"正在读取浏览器状态。","Loading browser status.")}function T(a,e){return a?a.installed?a.running?t(e,"桌面自动化服务已启动。","The desktop automation service is running."):a.enabled?t(e,"已启用,可在后续会话中直接调用。","Enabled and ready for upcoming sessions."):t(e,"当前不会向 Agent 会话注入桌面自动化能力。","Desktop automation will not be injected into agent sessions."):t(e,"需要先安装 Appium Mac2 驱动。","Appium Mac2 must be installed first."):t(e,"正在读取桌面自动化状态。","Loading desktop automation status.")}function U({onOpenBrowserSetup:a,onOpenDesktopSetup:e}){const n=p(i=>i.locale),r=p(i=>i.toast),o=p(i=>i.state),l=m.useMemo(()=>B(n),[n]),[d,u]=m.useState(null),[M,h]=m.useState(!1),f=m.useCallback(async()=>{h(!0);try{u(await R.getBrowser())}catch(i){r(i instanceof Error?i.message:l("config.applyFailed"),!1)}finally{h(!1)}},[l,r]);m.useEffect(()=>{f()},[f,o]);const c=d?.browser,x=d?.desktop,v=_(d,n,l),j=E(d,n,l),D=V(c,n),A=z(x,n);return s.jsxs("div",{className:"animate-in space-y-3",children:[s.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-end sm:justify-between",children:[s.jsx("div",{className:"min-w-0 flex-1",children:s.jsx("div",{className:"text-[13px] leading-relaxed text-fg-4",children:l("ext.hint")})}),s.jsx(g,{variant:"outline",size:"sm",onClick:()=>{f()},disabled:M,children:l("perm.guideRefresh")})]}),s.jsxs(k,{className:"xl:grid-cols-[minmax(0,235px)_minmax(240px,0.95fr)_minmax(0,1.1fr)_auto]",children:[s.jsx(C,{icon:s.jsx(S,{brand:"playwright",size:22}),title:l("ext.browser"),subtitle:l("ext.browserDesc")}),s.jsxs(b,{label:t(n,"状态","Status"),children:[s.jsx("div",{className:"flex flex-wrap items-center gap-1.5",children:s.jsxs(w,{variant:v.variant,children:[!d&&s.jsx(N,{}),v.label]})}),s.jsx("div",{className:"mt-1 text-[13px] leading-relaxed text-fg-3",children:L(c,n)})]}),s.jsx(b,{label:t(n,"当前配置","Current config"),children:s.jsx("div",{className:"space-y-1.5 text-[13px] leading-relaxed text-fg-3",children:D.map(i=>s.jsxs("div",{className:"flex items-start gap-2",children:[s.jsx("span",{className:"w-16 shrink-0 text-fg-5",children:i.label}),s.jsx("span",{className:"min-w-0 break-words",children:i.value})]},i.label))})}),s.jsx(y,{children:s.jsx(g,{variant:c?.enabled?"outline":"primary",size:"sm",onClick:a,children:c?.enabled?t(n,"管理","Manage"):l("ext.setup")})})]}),s.jsxs(k,{className:"xl:grid-cols-[minmax(0,235px)_minmax(240px,0.95fr)_minmax(0,1.1fr)_auto]",children:[s.jsx(C,{icon:s.jsx(S,{brand:"appium",size:22}),title:l("ext.desktop"),subtitle:l("ext.desktopDesc")}),s.jsxs(b,{label:t(n,"状态","Status"),children:[s.jsx("div",{className:"flex flex-wrap items-center gap-1.5",children:s.jsxs(w,{variant:j.variant,children:[!d&&s.jsx(N,{}),j.label]})}),s.jsx("div",{className:"mt-1 text-[13px] leading-relaxed text-fg-3",children:T(x,n)})]}),s.jsx(b,{label:t(n,"当前配置","Current config"),children:s.jsx("div",{className:"space-y-1.5 text-[13px] leading-relaxed text-fg-3",children:A.map(i=>s.jsxs("div",{className:"flex items-start gap-2",children:[s.jsx("span",{className:"w-16 shrink-0 text-fg-5",children:i.label}),s.jsx("span",{className:/^https?:\/\//.test(i.value)?"min-w-0 break-words font-mono text-[12px]":"min-w-0 break-words",children:i.value})]},i.label))})}),s.jsx(y,{children:s.jsx(g,{variant:x?.enabled?"outline":"primary",size:"sm",onClick:e,children:x?.enabled?t(n,"管理","Manage"):l("ext.setup")})})]})]})}export{U as ExtensionsTab};
@@ -0,0 +1 @@
1
+ import{r as S,j as i}from"./react-vendor-C7Sl8SE7.js";import{u as p,m as y,B as v,S as C,e as D}from"./index-BxuA85oI.js";import{B as A}from"./BrandIcon-B9y9j0jh.js";import{a as j,b as V,c as w,d as N}from"./shared-rdDL3t6R.js";import"./router-Rwafsu7Y.js";function L(t){return t==="zh-CN"?{status:"状态",summary:"接入摘要",loading:"加载中",chats:"个 chat",notConnected:"未接入",configuring:"配置中",connected:"已接入",failed:"配置异常",configure:"去配置",continueSetup:"继续配置",viewSettings:"查看设置",noWeixin:"尚未登录微信账号",noTelegram:"未配置 Bot Token",noFeishu:"未配置 App ID 与应用凭证",pendingValidation:"凭证已保存,等待验证。",connectedReady:"机器人已可正常接收消息。",validationFailed:"校验失败,请检查凭证或网络。",accountLinked:"已绑定账号",tokenSaved:"Token 已保存",appCredentialsSaved:"应用凭证已保存",allowedChats:"允许",notConnectedDetail:"尚未配置账号与接入凭证。"}:{status:"Status",summary:"Summary",loading:"Loading",chats:"chats",notConnected:"Not connected",configuring:"Configuring",connected:"Connected",failed:"Needs attention",configure:"Configure",continueSetup:"Continue setup",viewSettings:"View settings",noWeixin:"Weixin account not connected yet",noTelegram:"Bot token not configured",noFeishu:"App ID and credentials not configured",pendingValidation:"Credentials are saved and waiting for validation.",connectedReady:"This channel can receive messages.",validationFailed:"Validation failed. Check credentials or network.",accountLinked:"Account linked",tokenSaved:"Token saved",appCredentialsSaved:"Credentials saved",allowedChats:"Allows",notConnectedDetail:"Account and access credentials have not been configured yet."}}function g(t,e=4,a=4){const s=t.trim();return s?s.length<=e+a+3?s:`${s.slice(0,e)}...${s.slice(-a)}`:""}function B(t){return String(t||"").split(/[\n,;]/).map(e=>e.trim()).filter(Boolean).length}function u(t,e){return String(t?.[e]||"").trim()}function R(t,e){if(!t)return e;try{return new URL(t).host||t}catch{return t}}function h(t,e,a){if(t==="weixin"){const n=u(e,"weixinAccountId"),l=u(e,"weixinBaseUrl");return n?l?`${g(n)} · ${R(l,l)}`:`${a.accountLinked} ${g(n)}`:a.noWeixin}if(t==="telegram"){const n=u(e,"telegramBotToken"),l=B(u(e,"telegramAllowedChatIds"));return n?l>0?`${a.tokenSaved} · ${a.allowedChats} ${l} ${a.chats}`:a.tokenSaved:a.noTelegram}const s=u(e,"feishuAppId"),o=u(e,"feishuAppSecret");return!s||!o?a.noFeishu:`App ID ${g(s)} · ${a.appCredentialsSaved}`}function f(t,e){return!t||!t.configured?{statusLabel:e.notConnected,statusVariant:"muted",statusDescription:t?.detail||e.notConnectedDetail,actionLabel:e.configure}:t.ready?{statusLabel:e.connected,statusVariant:"ok",statusDescription:t.detail||e.connectedReady,actionLabel:e.viewSettings}:y(t)?{statusLabel:e.configuring,statusVariant:"accent",statusDescription:t.detail||e.pendingValidation,actionLabel:e.continueSetup}:{statusLabel:e.failed,statusVariant:"warn",statusDescription:t.detail||e.validationFailed,actionLabel:e.continueSetup}}function $({meta:t,locale:e}){const a=L(e);return i.jsxs(j,{children:[i.jsx(V,{icon:i.jsx(A,{brand:t.key,size:22}),title:t.title,subtitle:t.subtitle}),i.jsxs(w,{label:a.status,children:[i.jsx("div",{className:"flex flex-wrap items-center gap-1.5",children:i.jsxs(v,{variant:t.statusVariant,children:[t.loading&&i.jsx(C,{className:"h-3 w-3"}),t.statusLabel]})}),i.jsx("div",{className:"mt-1 text-[13px] leading-relaxed text-fg-3 xl:truncate xl:whitespace-nowrap",title:t.statusDescription,children:t.statusDescription})]}),i.jsx(w,{label:t.summaryLabel,children:i.jsx("div",{className:"break-words text-[13px] leading-relaxed text-fg-3",children:t.summary})}),i.jsx(N,{children:i.jsxs(D,{variant:t.channel?.ready?"outline":"primary",size:"sm",onClick:t.onAction,disabled:t.actionDisabled,children:[t.loading&&i.jsx(C,{className:"h-3 w-3"}),t.actionLabel]})})]})}function M({onOpenWeixin:t,onOpenTelegram:e,onOpenFeishu:a}){const s=p(r=>r.state),o=p(r=>r.locale),n=L(o),l=!s,d=s?.setupState?.channels||[],m=s?.config||{},k=S.useMemo(()=>{const r=d.find(c=>c.channel==="weixin")||null,b=d.find(c=>c.channel==="telegram")||null,x=d.find(c=>c.channel==="feishu")||null;return l?[{key:"weixin",title:"Weixin",subtitle:o==="zh-CN"?"二维码登录与账号接入":"QR login and account routing",channel:null,loading:!0,summary:n.loading,summaryLabel:n.summary,statusLabel:n.loading,statusVariant:"muted",statusDescription:n.loading,actionLabel:n.loading,actionDisabled:!0,onAction:t},{key:"telegram",title:"Telegram",subtitle:o==="zh-CN"?"Bot Token 与 chat allowlist":"Bot token and chat allowlist",channel:null,loading:!0,summary:n.loading,summaryLabel:n.summary,statusLabel:n.loading,statusVariant:"muted",statusDescription:n.loading,actionLabel:n.loading,actionDisabled:!0,onAction:e},{key:"feishu",title:"Feishu",subtitle:o==="zh-CN"?"应用凭证与机器人身份":"App credentials and bot identity",channel:null,loading:!0,summary:n.loading,summaryLabel:n.summary,statusLabel:n.loading,statusVariant:"muted",statusDescription:n.loading,actionLabel:n.loading,actionDisabled:!0,onAction:a}]:[{key:"weixin",title:"Weixin",subtitle:o==="zh-CN"?"二维码登录与账号接入":"QR login and account routing",channel:r,summary:h("weixin",m,n),summaryLabel:n.summary,...f(r,n),actionDisabled:!1,onAction:t},{key:"telegram",title:"Telegram",subtitle:o==="zh-CN"?"Bot Token 与 chat allowlist":"Bot token and chat allowlist",channel:b,summary:h("telegram",m,n),summaryLabel:n.summary,...f(b,n),actionDisabled:!1,onAction:e},{key:"feishu",title:"Feishu",subtitle:o==="zh-CN"?"应用凭证与机器人身份":"App credentials and bot identity",channel:x,summary:h("feishu",m,n),summaryLabel:n.summary,...f(x,n),actionDisabled:!1,onAction:a}]},[d,m,n,l,o,a,e,t]);return i.jsx("div",{className:"animate-in space-y-3",children:k.map(r=>i.jsx($,{meta:r,locale:o},r.key))})}export{M as IMAccessTab};
@@ -0,0 +1 @@
1
+ import{r as a,j as e}from"./react-vendor-C7Sl8SE7.js";import{u as j,a as U,M as A,g as L,L as M,p as R,e as I,b as C,B as K}from"./index-BxuA85oI.js";import{D as X}from"./DirBrowser-D4Y8bm_k.js";import"./router-Rwafsu7Y.js";const P="https://ilinkai.weixin.qq.com";function Q(d){return d instanceof Error&&(d.name==="AbortError"||/aborted/i.test(d.message))}function H(d,h){return d instanceof Error&&/timed out/i.test(d.message)?h("modal.requestTimeout"):h("modal.networkError")}function te({open:d,onClose:h}){const S=j(n=>n.state),c=j(n=>n.toast),B=j(n=>n.reloadUntil),t=j(n=>n.locale),s=a.useMemo(()=>U(t),[t]),[u,v]=a.useState(""),[g,b]=a.useState(""),[y,w]=a.useState(!1),[k,l]=a.useState(!1),[x,i]=a.useState(null),o=a.useRef(null),F=a.useRef(S);F.current=S,a.useEffect(()=>{d?(v(F.current?.config.telegramBotToken||""),b(F.current?.config.telegramAllowedChatIds||""),w(!1),i(null)):(o.current?.abort(),o.current=null,l(!1))},[d]),a.useEffect(()=>()=>{o.current?.abort(),o.current=null},[]);const m=async()=>{if(!u.trim()){c(s("modal.inputToken"),!1);return}o.current?.abort();const n=new AbortController;o.current=n,l(!0),i(null);let f=!1;try{const N=await C.validateTelegramConfig(u.trim(),g.trim(),{signal:n.signal,timeoutMs:12e3});if(!N.ok){i({ok:!1,text:"✗ "+(N.error||s("modal.validationFailed"))});return}const r=N.normalizedAllowedChatIds??g.trim();i({ok:!0,text:"✓ @"+(N.bot?.username||"bot")+(N.bot?.displayName?" ("+N.bot.displayName+")":"")});const p=new Set((S?.setupState?.channels||[]).filter(D=>(D.ready||D.configured)&&D.channel!=="telegram").map(D=>D.channel));if(p.add("telegram"),await C.saveConfig({telegramBotToken:u.trim(),telegramAllowedChatIds:r,channels:[...p]}),!await B(D=>{const q=D.setupState?.channels?.find(z=>z.channel==="telegram");return D.config.telegramBotToken===u.trim()&&(D.config.telegramAllowedChatIds||"")===r&&!!q?.ready},{attempts:10,intervalMs:350})){i({ok:!1,text:"✗ "+s("modal.refreshStateFailed")}),c(s("modal.refreshStateFailed"),!1);return}c(s("modal.tgSaved")),f=!0}catch(N){if(Q(N))return;const r=H(N,s);i({ok:!1,text:"✗ "+r}),c(r,!1)}finally{o.current===n&&(o.current=null),l(!1),f&&h()}},T=()=>{o.current?.abort(),o.current=null,h()};return e.jsxs(A,{open:d,onClose:T,children:[e.jsx(L,{title:s("modal.configureTelegram"),onClose:T}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(M,{children:s("modal.botToken")}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(R,{type:y?"text":"password",className:"flex-1 font-mono text-xs",placeholder:s("modal.pasteToken"),value:u,onChange:n=>v(n.target.value)}),e.jsx(I,{variant:"ghost",size:"sm",className:"!w-[34px] !p-0",onClick:()=>w(!y),children:e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",children:[e.jsx("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),e.jsx("circle",{cx:"12",cy:"12",r:"3"})]})})]})]}),x&&e.jsx("div",{className:"text-xs",style:{color:x.ok?"var(--th-ok)":"var(--th-err)"},children:x.text}),e.jsxs("div",{children:[e.jsxs(M,{children:[s("modal.allowedIds")," ",e.jsxs("span",{className:"text-fg-5",children:["(",s("modal.optional"),")"]})]}),e.jsx(R,{className:"font-mono text-xs",placeholder:s("modal.commaSep"),value:g,onChange:n=>b(n.target.value)})]})]}),e.jsxs("div",{className:"flex justify-end gap-2 mt-6",children:[e.jsx(I,{variant:"ghost",onClick:T,children:s("modal.cancel")}),e.jsx(I,{variant:"primary",disabled:k,onClick:m,children:s(k?"modal.validating":"modal.validateSave")})]})]})}function se({open:d,onClose:h}){const S=j(m=>m.state),c=j(m=>m.toast),B=j(m=>m.reloadUntil),t=j(m=>m.locale),s=a.useMemo(()=>U(t),[t]),[u,v]=a.useState(""),[g,b]=a.useState(""),[y,w]=a.useState(!1),[k,l]=a.useState(null),x=a.useRef(null),i=a.useRef(S);i.current=S,a.useEffect(()=>{d?(v(i.current?.config.feishuAppId||""),b(i.current?.config.feishuAppSecret||""),l(null)):(x.current?.abort(),x.current=null,w(!1))},[d]),a.useEffect(()=>()=>{x.current?.abort(),x.current=null},[]);const o=async()=>{if(!u.trim()){c(s("modal.inputAppId"),!1);return}x.current?.abort();const m=new AbortController;x.current=m,w(!0),l(null);let T=!1;try{const n=await C.validateFeishuConfig(u.trim(),g.trim(),{signal:m.signal,timeoutMs:2e4});if(!n.ok){l({ok:!1,text:"✗ "+(n.error||s("modal.validationFailed"))});return}l({ok:!0,text:"✓ "+(n.app?.displayName||n.app?.appId||u.trim())});const f=new Set((S?.setupState?.channels||[]).filter(r=>(r.ready||r.configured)&&r.channel!=="feishu").map(r=>r.channel));if(f.add("feishu"),await C.saveConfig({feishuAppId:u.trim(),feishuAppSecret:g.trim(),channels:[...f]}),!await B(r=>{const p=r.setupState?.channels?.find(W=>W.channel==="feishu");return r.config.feishuAppId===u.trim()&&r.config.feishuAppSecret===g.trim()&&!!p?.ready},{attempts:10,intervalMs:350})){l({ok:!1,text:"✗ "+s("modal.refreshStateFailed")}),c(s("modal.refreshStateFailed"),!1);return}c(s("modal.feishuSaved")),T=!0}catch(n){if(Q(n))return;const f=H(n,s);l({ok:!1,text:"✗ "+f}),c(f,!1)}finally{x.current===m&&(x.current=null),w(!1),T&&h()}},F=()=>{x.current?.abort(),x.current=null,h()};return e.jsxs(A,{open:d,onClose:F,children:[e.jsx(L,{title:s("modal.configureFeishu"),onClose:F}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(M,{children:s("modal.appId")}),e.jsx(R,{className:"font-mono text-xs",placeholder:s("modal.feishuPlaceholder"),value:u,onChange:m=>v(m.target.value)})]}),e.jsxs("div",{children:[e.jsx(M,{children:s("modal.appSecret")}),e.jsx(R,{type:"password",className:"font-mono text-xs",placeholder:s("modal.appSecret"),value:g,onChange:m=>b(m.target.value)})]}),k&&e.jsx("div",{className:"text-xs",style:{color:k.ok?"var(--th-ok)":"var(--th-err)"},children:k.text})]}),e.jsxs("div",{className:"flex justify-end gap-2 mt-6",children:[e.jsx(I,{variant:"ghost",onClick:F,children:s("modal.cancel")}),e.jsx(I,{variant:"primary",disabled:y,onClick:o,children:s(y?"modal.validating":"modal.validateSave")})]})]})}function ae({open:d,onClose:h}){const S=j(f=>f.state),c=j(f=>f.toast),B=j(f=>f.reloadUntil),t=j(f=>f.locale),s=a.useMemo(()=>U(t),[t]),[u,v]=a.useState(P),[g,b]=a.useState(!1),[y,w]=a.useState(""),[k,l]=a.useState(""),[x,i]=a.useState(null),o=a.useRef(null),F=a.useRef(S);F.current=S,a.useEffect(()=>{d?(v(F.current?.config.weixinBaseUrl||P),b(!1),w(""),l(""),i(null)):(o.current?.abort(),o.current=null,b(!1))},[d]),a.useEffect(()=>()=>{o.current?.abort(),o.current=null},[]);const m=()=>{o.current?.abort(),o.current=null,h()},T=a.useCallback(async(f,N,r)=>{for(;!f.signal.aborted;){const p=await C.waitWeixinLogin(N,r,{signal:f.signal,timeoutMs:45e3});if(!p.ok&&!p.connected)return i({ok:!1,text:"✗ "+(p.error||p.message||s("modal.validationFailed"))}),!1;if(p.qrcodeUrl&&w(p.qrcodeUrl),p.status==="scaned"?i({ok:!0,text:s("modal.weixinScanned")}):p.status==="expired"?i({ok:!0,text:s("modal.weixinQrRefreshed")}):p.connected||i({ok:!0,text:s("modal.weixinWaitingScan")}),!p.connected)continue;i({ok:!0,text:s("modal.weixinLoginSuccess")});const W=p.baseUrl||r,D=p.botToken||"",q=p.accountId||"",z=await C.validateWeixinConfig(W,D,q,{signal:f.signal,timeoutMs:12e3});if(!z.ok)return i({ok:!1,text:"✗ "+(z.error||s("modal.validationFailed"))}),!1;const _=z.normalizedBaseUrl||W,G=new Set((F.current?.setupState?.channels||[]).filter(E=>(E.ready||E.configured)&&E.channel!=="weixin").map(E=>E.channel));return G.add("weixin"),await C.saveConfig({weixinBaseUrl:_,weixinBotToken:D,weixinAccountId:q,channels:[...G]}),await B(E=>{const O=E.setupState?.channels?.find(V=>V.channel==="weixin");return E.config.weixinBaseUrl===_&&E.config.weixinBotToken===D&&E.config.weixinAccountId===q&&!!O?.ready},{attempts:12,intervalMs:350})?(c(s("modal.weixinSaved")),!0):(i({ok:!1,text:"✗ "+s("modal.refreshStateFailed")}),c(s("modal.refreshStateFailed"),!1),!1)}return!1},[B,s,c]),n=async()=>{if(!u.trim()){c(s("modal.inputWeixinBaseUrl"),!1);return}o.current?.abort();const f=new AbortController;o.current=f,b(!0),w(""),l(""),i(null);let N=!1;try{const r=await C.startWeixinLogin(u.trim(),{signal:f.signal,timeoutMs:12e3});if(!r.ok||!r.qrcodeUrl){i({ok:!1,text:"✗ "+(r.error||r.message||s("modal.validationFailed"))});return}w(r.qrcodeUrl),l(r.sessionKey),i({ok:!0,text:s("modal.weixinWaitingScan")}),N=await T(f,r.sessionKey,u.trim())}catch(r){if(Q(r))return;const p=H(r,s);i({ok:!1,text:"✗ "+p}),c(p,!1)}finally{o.current===f&&(o.current=null),b(!1),N&&h()}};return e.jsxs(A,{open:d,onClose:m,children:[e.jsx(L,{title:s("modal.configureWeixin"),onClose:m}),e.jsxs("div",{className:"space-y-4",children:[e.jsx("div",{className:"text-xs leading-relaxed text-fg-4",children:s("modal.weixinScanHint")}),e.jsxs("div",{children:[e.jsx(M,{children:s("modal.weixinBaseUrl")}),e.jsx(R,{className:"font-mono text-xs",value:u,onChange:f=>v(f.target.value),placeholder:P}),e.jsx("div",{className:"mt-1 text-[11px] text-fg-5",children:s("modal.weixinDefaultBaseUrlHint")})]}),y&&e.jsxs("div",{className:"rounded-xl border border-edge bg-panel-alt p-4",children:[e.jsx("img",{src:y,alt:s("modal.weixinQrAlt"),className:"mx-auto h-56 w-56 rounded-lg bg-white p-3 object-contain"}),k&&e.jsx("div",{className:"mt-2 truncate text-center font-mono text-[10px] text-fg-5",children:k})]}),x&&e.jsx("div",{className:"text-xs",style:{color:x.ok?"var(--th-ok)":"var(--th-err)"},children:x.text})]}),e.jsxs("div",{className:"mt-6 flex justify-end gap-2",children:[e.jsx(I,{variant:"ghost",onClick:m,children:s("modal.cancel")}),e.jsx(I,{variant:"primary",disabled:g,onClick:n,children:s(g?y?"modal.validating":"modal.weixinGeneratingQr":y?"modal.weixinRetry":"modal.weixinGenerateQr")})]})]})}function le({open:d,onClose:h}){const S=j(l=>l.state),c=j(l=>l.toast),B=j(l=>l.reload),t=j(l=>l.locale),s=a.useMemo(()=>U(t),[t]),u=S?.bot?.workdir||S?.runtimeWorkdir||"",[v,g]=a.useState(""),[b,y]=a.useState(0);a.useEffect(()=>{d&&(g(u),y(l=>l+1))},[d,u]);const w=a.useCallback(l=>{g(l)},[]),k=async()=>{const l=v.trim();if(!l){c(s("modal.selectDirFirst"),!1);return}try{const x=await C.switchWorkdir(l);x.ok?(c(s("modal.switchedTo")+x.workdir),h(),setTimeout(B,300)):c(x.error||s("modal.switchFailed"),!1)}catch{c(s("modal.switchFailed"),!1)}};return e.jsxs(A,{open:d,onClose:h,panelStyle:{width:"min(500px, calc(100vw - 2rem))",maxWidth:"min(500px, calc(100vw - 2rem))"},children:[e.jsx(L,{title:s("modal.switchWorkdir"),onClose:h}),e.jsx(X,{initialPath:u,onSelect:w,t:s},b),e.jsxs("div",{className:"flex justify-end gap-2 mt-4",children:[e.jsx(I,{variant:"ghost",onClick:h,children:s("modal.cancel")}),e.jsx(I,{variant:"primary",onClick:k,children:s("modal.selectDir")})]})]})}function re({open:d,onClose:h,onSaved:S}){const c=j(r=>r.toast),B=j(r=>r.locale),t=a.useMemo(()=>U(B),[B]),[s,u]=a.useState(null),[v,g]=a.useState(!1),[b,y]=a.useState(!1),[w,k]=a.useState(null);a.useEffect(()=>{d&&(g(!1),k(null),C.getBrowser().then(r=>{u(r),y(!!r.browser.enabled)}).catch(()=>u(null)))},[d]);const l=s?.browser,x=!!l?.enabled,i=!!l&&x!==b,o=l?.profileDir||"",F=t("ext.profileDir"),m=o,T=!!l?.chromeInstalled&&!!l?.profileCreated,n=s?l?.enabled?T?t("ext.browserReady"):l?.chromeInstalled?t("ext.chromeInstalled"):t("ext.needsSetup"):t("ext.disabled"):t("status.loading"),f=s&&l?.enabled?T?"ok":l?.chromeInstalled?"warn":"err":"muted",N=async()=>{g(!0),k(null);try{await C.saveConfig({browserEnabled:b});const r=await C.getBrowser();u(r),S?.()}catch{k({ok:!1,text:"✗ "+t("ext.browserModeSaveFailed")}),c(t("ext.browserModeSaveFailed"),!1),g(!1);return}if(!b){k({ok:!0,text:"✓ "+t("ext.browserDisabledSaved")}),c(t("ext.browserDisabledSaved")),g(!1);return}try{const r=await C.setupBrowser();if(!r.ok){k({ok:!1,text:"✗ "+(r.error||t("ext.browserLaunchFailed"))}),c(r.error||t("ext.browserLaunchFailed"),!1);return}u(p=>p?{...p,browser:r.browser}:{browser:r.browser,desktop:{enabled:!1,installed:!1,running:!1,appiumUrl:""}}),k({ok:!0,text:"✓ "+t("ext.browserEnabledLaunched")}),c(t("ext.browserEnabledLaunched")),S?.()}catch{k({ok:!1,text:"✗ "+t("ext.browserLaunchFailed")}),c(t("ext.browserLaunchFailed"),!1)}finally{g(!1)}};return e.jsxs(A,{open:d,onClose:h,children:[e.jsx(L,{title:t("ext.setupBrowser"),description:t("ext.setupBrowserDesc"),onClose:h}),e.jsxs("div",{className:"space-y-5",children:[e.jsxs("div",{className:"rounded-lg border border-edge bg-panel-alt p-4",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(K,{variant:f,children:n}),l&&e.jsxs(e.Fragment,{children:[e.jsx(K,{variant:x?"accent":"muted",children:t(x?"ext.enabled":"ext.disabled")}),i&&e.jsx(K,{variant:"warn",children:t("ext.pendingModeChange")}),l.running&&e.jsxs(K,{variant:"accent",children:[t("ext.browserOpen"),l.pid?` · PID ${l.pid}`:""]})]})]}),e.jsxs("div",{className:"mt-3",children:[e.jsx(M,{children:F}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(R,{className:"font-mono text-xs flex-1",value:m||"—",readOnly:!0,onClick:r=>r.target.select()}),e.jsx(I,{variant:"outline",size:"sm",disabled:!m,onClick:()=>{m&&(navigator.clipboard.writeText(m),c(t("ext.step2Copied")))},children:t("ext.copyPath")})]})]}),e.jsx("div",{className:"mt-3 text-xs text-fg-5",children:t(b?"ext.profileModeDesc":"ext.browserDescDisabled")}),l?.detail&&e.jsx("div",{className:"mt-2 text-xs text-fg-5",children:l.detail}),w&&e.jsx("div",{className:"mt-3 text-xs",style:{color:w.ok?"var(--th-ok)":"var(--th-err)"},children:w.text})]}),e.jsx("div",{className:"rounded-lg border border-edge bg-panel-alt p-4",children:e.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[e.jsx("input",{type:"checkbox",checked:b,onChange:r=>y(r.target.checked),className:"mt-0.5 h-4 w-4 rounded border border-edge bg-inset"}),e.jsxs("div",{children:[e.jsx("div",{className:"text-sm font-medium text-fg-2 mb-1",children:t("ext.browserEnableToggle")}),e.jsx("div",{className:"text-xs text-fg-4",children:t("ext.browserEnableToggleDesc")})]})]})}),e.jsxs("div",{className:"rounded-lg border border-edge bg-panel-alt p-4",children:[e.jsx("div",{className:"text-sm font-medium text-fg-2 mb-1",children:t(b?"ext.step2Title":"ext.browserDisabledStepTitle")}),e.jsx("div",{className:"text-xs text-fg-4",children:t(b?"ext.step2Desc":"ext.browserDisabledHint")})]})]}),e.jsxs("div",{className:"flex justify-end gap-2 mt-6",children:[e.jsx(I,{variant:"ghost",onClick:h,children:t("modal.cancel")}),e.jsx(I,{variant:"primary",disabled:v,onClick:N,children:t(v?"ext.launching":b?"ext.enableAndLaunchBrowser":"ext.saveBrowserDisabled")})]})]})}function ne({open:d,onClose:h,onSaved:S}){const c=j(n=>n.toast),B=j(n=>n.locale),t=a.useMemo(()=>U(B),[B]),[s,u]=a.useState(!1),[v,g]=a.useState(!1),[b,y]=a.useState(!1),[w,k]=a.useState(!1),[l,x]=a.useState(!1),[i,o]=a.useState(null);a.useEffect(()=>{d&&(u(!1),k(!1),x(!1),o(null),C.getBrowser().then(n=>{g(n.desktop.installed),y(n.desktop.enabled)}).catch(()=>{}))},[d]);const F=async()=>{u(!0),o(null);try{const n=await C.desktopInstall();n.ok?(g(!0),o({ok:!0,text:"✓ "+t("ext.desktopInstalled")}),c(t("ext.desktopInstalled"))):o({ok:!1,text:"✗ "+(n.error||t("ext.desktopInstallFailed"))})}catch{o({ok:!1,text:"✗ "+t("ext.desktopInstallFailed")})}finally{u(!1)}},m=async()=>{k(!0),o(null);try{const n=await C.desktopToggle(!0);n.ok?(y(!0),o({ok:!0,text:"✓ "+t("ext.desktopStarted")}),c(t("ext.desktopStarted")),S?.()):o({ok:!1,text:"✗ "+(n.error||t("ext.desktopInstallFailed"))})}catch{o({ok:!1,text:"✗ "+t("ext.desktopInstallFailed")})}finally{k(!1)}},T=async()=>{x(!0),o(null);try{const n=await C.desktopToggle(!1);n.ok?(y(!1),o({ok:!0,text:"✓ "+t("ext.desktopStopped")}),c(t("ext.desktopStopped")),S?.()):o({ok:!1,text:"✗ "+(n.error||t("ext.desktopInstallFailed"))})}catch{o({ok:!1,text:"✗ "+t("ext.desktopInstallFailed")})}finally{x(!1)}};return e.jsxs(A,{open:d,onClose:h,children:[e.jsx(L,{title:t("ext.setupDesktop"),description:t("ext.setupDesktopDesc"),onClose:h}),e.jsxs("div",{className:"space-y-5",children:[e.jsxs("div",{className:"rounded-lg border border-edge bg-panel-alt p-4",children:[e.jsx("div",{className:"text-sm font-medium text-fg-2 mb-1",children:t("ext.desktopStep1Title")}),e.jsx("div",{className:"text-xs text-fg-4 mb-3",children:t("ext.desktopStep1Desc")}),i&&!v&&e.jsx("div",{className:"mb-2 text-xs",style:{color:i.ok?"var(--th-ok)":"var(--th-err)"},children:i.text}),e.jsx(I,{variant:v?"ghost":"outline",size:"sm",disabled:s||v,onClick:F,children:t(s?"ext.desktopInstalling":v?"ext.desktopStep1Done":"ext.desktopStep1Action")})]}),e.jsxs("div",{className:"rounded-lg border border-edge bg-panel-alt p-4",children:[e.jsx("div",{className:"text-sm font-medium text-fg-2 mb-1",children:t("ext.desktopStep2Title")}),e.jsx("div",{className:"text-xs text-fg-4 mb-3",children:t("ext.desktopStep2Desc")}),i&&v&&e.jsx("div",{className:"mb-2 text-xs",style:{color:i.ok?"var(--th-ok)":"var(--th-err)"},children:i.text}),e.jsx("div",{className:"flex items-center gap-2",children:b?e.jsx(I,{variant:"outline",size:"sm",disabled:l,onClick:T,children:t(l?"ext.desktopStopping":"ext.disable")}):e.jsx(I,{variant:"primary",size:"sm",disabled:!v||w,onClick:m,children:t(w?"ext.desktopStarting":"ext.desktopStep2Action")})})]})]}),e.jsx("div",{className:"flex justify-end gap-2 mt-6",children:e.jsx(I,{variant:"ghost",onClick:h,children:t("modal.cancel")})})]})}export{re as BrowserSetupModal,ne as DesktopSetupModal,se as FeishuModal,te as TelegramModal,ae as WeixinModal,le as WorkdirModal};
@@ -0,0 +1 @@
1
+ import{r as l,j as e}from"./react-vendor-C7Sl8SE7.js";import{u,a as R,b as D,e as f,B as N}from"./index-BxuA85oI.js";import{a as L,b as O,c as j,d as z}from"./shared-rdDL3t6R.js";import"./router-Rwafsu7Y.js";const E=[{key:"accessibility",labelKey:"perm.accessibility",reasonZh:"允许控制桌面应用、点击和输入。",reasonEn:"Allows controlling desktop apps with clicks and typing.",guidePathKey:"perm.pathAccessibility",icon:e.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("circle",{cx:"12",cy:"5",r:"1.8"}),e.jsx("path",{d:"M12 7.7v10.2"}),e.jsx("path",{d:"M8.4 10h7.2"}),e.jsx("path",{d:"M9.6 19.2 12 15.1l2.4 4.1"})]})},{key:"screenRecording",labelKey:"perm.screenRecording",reasonZh:"允许读取屏幕内容,用于截图和界面分析。",reasonEn:"Allows reading the screen for screenshots and UI inspection.",guidePathKey:"perm.pathScreenRecording",icon:e.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("rect",{x:"4",y:"5.5",width:"11.5",height:"10",rx:"2.4"}),e.jsx("path",{d:"m17.5 8.4 2.7-1.5v7.2l-2.7-1.5"}),e.jsx("circle",{cx:"9.75",cy:"10.5",r:"1.1",fill:"currentColor",stroke:"none"})]})},{key:"fullDiskAccess",labelKey:"perm.fullDiskAccess",reasonZh:"允许访问桌面、下载等受保护目录。",reasonEn:"Allows access to protected folders like Desktop and Downloads.",guidePathKey:"perm.pathFullDiskAccess",icon:e.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("rect",{x:"6.2",y:"10.1",width:"11.6",height:"8.6",rx:"2.6"}),e.jsx("path",{d:"M9 10V7.8a3 3 0 1 1 6 0V10"}),e.jsx("circle",{cx:"12",cy:"13.5",r:"0.9",fill:"currentColor",stroke:"none"}),e.jsx("path",{d:"M12 14.6v1.8"})]})}];function K(o){return o==="zh-CN"?{introWithHost:"请在 macOS 中为 {hostApp} 开启以下权限。",intro:"请在 macOS 中开启以下权限。",status:"状态",summary:"系统位置",loading:"检查中",needsGrant:"需要授权",granted:"已授权",authorize:"授权",openSettings:"前往设置",refreshState:"刷新状态",checking:"检查中...",hostGranted:"{hostApp} 已可直接使用此权限。",hostGrantedFallback:"当前宿主应用已可直接使用此权限。",needsGrantDetail:"尚未授权,可通过右侧按钮发起系统授权。",needsSettingsDetail:"需要在系统设置中手动开启此权限。"}:{introWithHost:"Grant the following permissions to {hostApp} in macOS.",intro:"Grant the following permissions in macOS.",status:"Status",summary:"System path",loading:"Checking",needsGrant:"Needs access",granted:"Granted",authorize:"Authorize",openSettings:"Open settings",refreshState:"Refresh status",checking:"Checking...",hostGranted:"{hostApp} can use this permission now.",hostGrantedFallback:"The current host app can use this permission now.",needsGrantDetail:"Access has not been granted yet. Use the button on the right to trigger the macOS prompt.",needsSettingsDetail:"This permission needs to be enabled manually in System Settings."}}function B(){const o=u(t=>t.state),d=u(t=>t.locale),h=u(t=>t.reload),i=u(t=>t.toast),a=l.useMemo(()=>R(d),[d]),s=K(d),g=o?.permissions||{},p=o?.hostApp||null,c=!o,[m,x]=l.useState(null),b=l.useMemo(()=>E.map(t=>({...t,permission:g[t.key]})),[g]),S=l.useCallback(async t=>{if(!m){x(t);try{const n=await D.requestPermission(t);if(!n.ok){i(n.error||a("perm.requestFailed"),!1);return}n.action==="already_granted"?i(a("perm.alreadyGranted")):n.action==="prompted"?i(a("perm.promptOpened")):i(a("perm.settingsOpened")),await h()}catch(n){i(n instanceof Error?n.message:a("perm.requestFailed"),!1)}finally{x(n=>n===t?null:n)}}},[h,m,a,i]),k=l.useCallback(async()=>{await h()},[h]);return e.jsxs("div",{className:"animate-in space-y-3",children:[e.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx("div",{className:"min-w-0 flex-1",children:e.jsx("div",{className:"text-[13px] leading-relaxed text-fg-4",children:p?s.introWithHost.replace("{hostApp}",p):s.intro})}),e.jsx(f,{variant:"outline",size:"sm",onClick:()=>{k()},children:s.refreshState})]}),b.map(t=>{const n=t.permission,r=!!n?.granted,y=!!n&&n.checkable,w=c?s.loading:n&&r?s.granted:s.needsGrant,v=c?"muted":r?"ok":"warn",A=c?s.loading:r?p?s.hostGranted.replace("{hostApp}",p):s.hostGrantedFallback:y?s.needsGrantDetail:s.needsSettingsDetail,G=c?s.checking:r?s.refreshState:y?s.authorize:s.openSettings,C=r?k:()=>{S(t.key)};return e.jsxs(L,{children:[e.jsx(O,{icon:t.icon,title:a(t.labelKey),subtitle:d==="zh-CN"?t.reasonZh:t.reasonEn}),e.jsxs(j,{label:s.status,children:[e.jsx("div",{className:"flex flex-wrap items-center gap-1.5",children:e.jsx(N,{variant:v,children:w})}),e.jsx("div",{className:"mt-1 text-[13px] leading-relaxed text-fg-3",children:A})]}),e.jsx(j,{label:s.summary,children:e.jsx("div",{className:"break-words text-[13px] leading-relaxed text-fg-3",children:a(t.guidePathKey)})}),e.jsx(z,{children:e.jsx(f,{variant:r?"outline":"primary",size:"sm",disabled:c||!!m,onClick:C,children:m===t.key?s.checking:G})})]},t.key)})]})}export{B as PermissionsTab};
@@ -0,0 +1,14 @@
1
+ import{r,j as e,a as we}from"./react-vendor-C7Sl8SE7.js";import{u as _e,a as We,h as je,s as Ue,b as A,d as Se,S as oe,c as P,E as Fe}from"./index-BxuA85oI.js";import{B as ie}from"./BrandIcon-B9y9j0jh.js";import{h as te,P as Ee}from"./SessionsTab-BzDzSqml.js";import{M as de,r as ue}from"./markdown-Chkk3cWU.js";import"./router-Rwafsu7Y.js";import"./DirBrowser-D4Y8bm_k.js";const Ce=12,Te=160,De=96,bt=r.memo(function({session:s,workdir:n,active:o=!0}){const u=_e(c=>c.locale),i=r.useMemo(()=>We(u),[u]),d=je(s.agent||""),a=Ue(s),[m,p]=r.useState(null),[b,C]=r.useState(!0),[g,y]=r.useState(!1),[k,T]=r.useState(null),[G,N]=r.useState(!1),[Q,F]=r.useState(null),[D,I]=r.useState(0),[E,O]=r.useState(null),[X,J]=r.useState(null),L=r.useRef(null),j=r.useRef(null),B=r.useRef(!0),M=r.useRef(!1),$=r.useRef(!1),H=r.useRef(!1),R=r.useRef(!1),q=r.useCallback(async c=>{try{const x=await A.getSessionMessages(n,s.agent||"",s.sessionId,{rich:!0,turnOffset:c.turnOffset,turnLimit:c.turnLimit,lastNTurns:c.lastNTurns});return x.ok?$e(x):null}catch{return null}},[n,s.agent,s.sessionId]),S=r.useCallback(async({keepOlder:c})=>{if($.current)return!1;$.current=!0;try{const x=await q({turnOffset:0,turnLimit:Ce});return x?(p(w=>!w||!c?x:Ke(w,x)),!0):!1}finally{$.current=!1}},[q]),z=r.useCallback(async()=>{if(!m?.hasOlder||H.current)return;const c=L.current;c&&(j.current={scrollHeight:c.scrollHeight,scrollTop:c.scrollTop}),H.current=!0,y(!0);try{const x=await q({turnOffset:Math.max(0,m.totalTurns-m.startTurn),turnLimit:Ce});x?p(w=>w?qe(w,x):x):j.current=null}finally{H.current=!1,y(!1)}},[q,m]),K=r.useCallback(()=>{R.current=!0,I(c=>c+1)},[]);r.useEffect(()=>{let c=!1;return C(!0),p(null),T(null),N(!1),F(null),B.current=!0,M.current=!0,S({keepOlder:!1}).finally(()=>{c||C(!1)}),()=>{c=!0}},[S]),r.useEffect(()=>{o&&S({keepOlder:!0})},[o,S]),r.useEffect(()=>{if(!o)return;let c=!0,x=null,w=null;const _=()=>{w&&(clearInterval(w),w=null)},ee=()=>{w||(w=setInterval(()=>{pe()},800))},pe=async()=>{if(c)try{const V=await A.getSessionStreamState(s.agent||"",s.sessionId);if(!c)return;const v=V.state,ne=v?.phase??null,W=Se(a,R.current,ne,x);if(!v){x==="streaming"?(T(null),N(!1),B.current&&(M.current=!0),S({keepOlder:!0})):x==="done"&&T(null),(x==="queued"||x==="streaming"||x==="done")&&(R.current=!1),F(null),x=null,W?ee():_();return}F(v.phase),v.phase==="streaming"?(O(null),T({phase:"streaming",text:v.text||"",thinking:v.thinking||"",activity:v.activity,plan:v.plan??null}),N(!0),B.current&&(M.current=!0)):v.phase==="queued"?(T(null),N(!1)):v.phase==="done"&&(O(null),T(te(v.plan)||v.text||v.thinking||v.activity?{phase:"done",text:v.text||"",thinking:v.thinking||"",activity:v.activity||"",plan:v.plan??null}:null),N(!1),x!=="done"&&(B.current&&(M.current=!0),S({keepOlder:!0})),R.current=!1),W?ee():_(),x=v.phase}catch{}};return Se(a,R.current,null,null)&&ee(),pe(),()=>{c=!1,_()}},[o,a,S,s.agent,s.sessionId,D]),r.useEffect(()=>{if(!o||a!=="running"||G)return;const c=setInterval(()=>{S({keepOlder:!0})},3e3);return()=>clearInterval(c)},[o,a,S,G]),r.useLayoutEffect(()=>{const c=j.current,x=L.current;!c||!x||(j.current=null,x.scrollTop=c.scrollTop+(x.scrollHeight-c.scrollHeight))},[m?.turns.length]),r.useLayoutEffect(()=>{if(!M.current)return;const c=L.current;c&&(M.current=!1,c.scrollTop=c.scrollHeight)},[m?.turns.length,k]),r.useLayoutEffect(()=>{if(!E)return;const c=L.current;c&&(c.scrollTop=c.scrollHeight)},[E]),r.useEffect(()=>{if(!m?.hasOlder||b||g)return;const c=L.current;c&&c.scrollHeight<=c.clientHeight+Te&&z()},[m?.hasOlder,m?.turns.length,z,b,g]);const Y=r.useCallback(()=>{const c=L.current;if(!c)return;const x=c.scrollHeight-c.scrollTop-c.clientHeight;B.current=x<=De,c.scrollTop<=Te&&z()},[z]),se=s.title||s.lastQuestion?.slice(0,80)||s.sessionId.slice(0,16),Z=m?.turns||[];return e.jsxs("div",{className:"flex flex-col h-full overflow-hidden",children:[e.jsxs("div",{className:"shrink-0 flex items-center gap-2.5 px-5 h-10 border-b border-edge/50 bg-panel/40 backdrop-blur-md z-10",children:[e.jsx(ie,{brand:s.agent||"",size:14}),e.jsx("span",{className:"flex-1 min-w-0 text-[13px] font-medium text-fg truncate",children:se}),s.model&&e.jsx("span",{className:"text-[10px] font-mono text-fg-5 px-1.5 py-0.5 rounded bg-panel-alt/40",children:s.model}),a==="running"&&e.jsxs("span",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"h-[5px] w-[5px] rounded-full bg-ok animate-pulse"}),e.jsx("span",{className:"text-[10px] text-ok font-medium",children:i("status.running")})]})]}),e.jsx("div",{ref:L,onScroll:Y,className:"flex-1 overflow-y-auto overscroll-contain",children:b?e.jsx("div",{className:"flex items-center justify-center py-20",children:e.jsx(oe,{className:"h-5 w-5 text-fg-4"})}):Z.length===0&&!E&&!k?e.jsx("div",{className:"py-20 text-center text-[13px] text-fg-5",children:i("hub.noMessages")}):e.jsxs("div",{className:"max-w-[900px] mx-auto px-6 py-6 space-y-0",children:[(m?.hasOlder||g)&&e.jsxs("div",{className:"mb-4 flex items-center justify-center gap-2 text-[11px] text-fg-5",children:[g?e.jsx(oe,{className:"h-3 w-3 text-fg-5"}):e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-fg-5/35"}),e.jsx("span",{children:i(g?"hub.loadingOlderTurns":"hub.loadOlderTurnsHint")})]}),Z.map((c,x)=>e.jsx(Qe,{turn:c,agent:s.agent||"",meta:d,t:i,onResend:w=>{M.current=!0,O(w),A.sendSessionMessage(n,s.agent||"",s.sessionId,w).then(_=>{_.ok&&K()}).catch(()=>{O(null)})},onEdit:w=>J(w)},`${m?.startTurn||0}:${x}`)),E&&!k&&e.jsxs("div",{className:"session-turn",children:[e.jsx(ve,{text:E,t:i}),e.jsx(ae,{agent:s.agent||"",meta:d}),e.jsx("div",{className:"mb-6",children:e.jsxs("div",{className:"flex items-center gap-2.5 rounded-md border border-fg-6 bg-panel px-3.5 py-3 shadow-sm",children:[e.jsxs("span",{className:"relative flex h-4 w-4 items-center justify-center",children:[e.jsx("span",{className:"absolute h-full w-full rounded-full bg-fg-4/20 animate-ping"}),e.jsx("span",{className:"relative h-2 w-2 rounded-full bg-fg-4/60"})]}),e.jsx("span",{className:"text-[12.5px] text-fg-4",children:i("hub.sending")})]})})]}),k&&e.jsxs("div",{className:"mb-6",children:[!E&&e.jsx(ae,{agent:s.agent||"",meta:d}),E&&e.jsxs(e.Fragment,{children:[e.jsx(ve,{text:E,t:i}),e.jsx(ae,{agent:s.agent||"",meta:d})]}),e.jsx(Ye,{stream:k,t:i})]}),e.jsx("div",{className:"h-4"})]})}),e.jsx(ct,{session:s,workdir:n,onStreamQueued:K,onSendStart:O,t:i,streamPhase:Q,editDraft:X,onEditDraftConsumed:()=>J(null)})]})});function $e(t){const s=t.richMessages?.length?t.richMessages:t.messages?.map(d=>({role:d.role,text:d.text,blocks:[{type:"text",content:d.text}]}))||[],n=Ge(s),o=Math.max(t.window?.totalTurns??t.totalTurns??n.length,n.length),u=t.window?.endTurn??o,i=t.window?.startTurn??Math.max(0,u-n.length);return{turns:n,startTurn:i,endTurn:u,totalTurns:o,hasOlder:t.window?.hasOlder??i>0}}function qe(t,s){const n=Math.max(0,t.startTurn-s.startTurn);return{turns:[...s.turns.slice(0,n),...t.turns],startTurn:s.startTurn,endTurn:t.endTurn,totalTurns:Math.max(t.totalTurns,s.totalTurns),hasOlder:s.hasOlder}}function Ke(t,s){if(s.startTurn<=t.startTurn)return s;const n=Math.max(0,s.startTurn-t.startTurn);return{turns:[...t.turns.slice(0,n),...s.turns],startTurn:t.startTurn,endTurn:s.endTurn,totalTurns:s.totalTurns,hasOlder:t.startTurn>0}}function Ve(t,s){const n=[t.text,s.text].filter(Boolean);return{role:t.role,text:n.join(`
2
+
3
+ `),blocks:[...t.blocks,...s.blocks]}}function Ge(t){const s=[];let n={user:null,assistant:null};for(const o of t)o.role==="user"?((n.user||n.assistant)&&(s.push(n),n={user:null,assistant:null}),n.user=o):n.assistant?n.assistant=Ve(n.assistant,o):n.assistant=o;return(n.user||n.assistant)&&s.push(n),s}const Qe=r.memo(function({turn:s,agent:n,meta:o,t:u,onResend:i,onEdit:d}){const a=s.user&&!s.assistant&&Xe(s.user.text);return e.jsxs("div",{className:"session-turn",children:[s.user&&!a&&e.jsx(ve,{text:s.user.text,blocks:s.user.blocks,t:u,onResend:i,onEdit:d}),a&&s.user&&e.jsx("div",{className:"mb-4 px-4 py-3 rounded-lg bg-[rgba(255,255,255,0.02)] border border-edge/20 text-[12.5px] leading-[1.7] text-fg-4",children:e.jsx(de,{remarkPlugins:[ue],components:xe,children:s.user.text})}),s.assistant&&e.jsx(ae,{agent:n,meta:o}),s.assistant&&e.jsx("div",{className:"mb-6",children:e.jsx(Je,{message:s.assistant,t:u})})]})});function Xe(t){return t.length>800?!0:["continued from a previous","summary below covers","earlier portion of the conversation","Summary:","Key Technical Concepts"].some(n=>t.includes(n))}function Le({src:t,onClose:s}){return r.useEffect(()=>{const n=o=>{o.key==="Escape"&&s()};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[s]),we.createPortal(e.jsx("div",{className:"fixed inset-0 z-[9999] flex items-center justify-center bg-black/80 backdrop-blur-sm cursor-zoom-out",onClick:s,children:e.jsx("img",{src:t,className:"max-w-[90vw] max-h-[90vh] object-contain rounded-lg shadow-2xl",onClick:n=>n.stopPropagation()})}),document.body)}function ve({text:t,blocks:s,t:n,onResend:o,onEdit:u}){const[i,d]=r.useState(!1),[a,m]=r.useState(!1),[p,b]=r.useState(null),C=!!(o||u),g=s?.filter(k=>k.type==="image")||[],y=()=>{navigator.clipboard.writeText(t).then(()=>{m(!0),setTimeout(()=>m(!1),1500)}).catch(()=>{})};return e.jsxs("div",{className:"flex flex-col items-end mb-5 group/bubble",onMouseEnter:()=>d(!0),onMouseLeave:()=>d(!1),children:[e.jsxs("div",{className:"max-w-[72%] rounded-md border border-fg-6 bg-panel px-4 py-3 text-[13.5px] leading-[1.72] text-fg shadow-sm",children:[t&&e.jsx("div",{className:"whitespace-pre-wrap break-words",children:t}),g.length>0&&e.jsx("div",{className:P("flex flex-wrap gap-2",t&&"mt-2"),children:g.map((k,T)=>e.jsx("img",{src:k.content,className:"max-w-[280px] max-h-[200px] rounded border border-fg-6/50 object-cover cursor-zoom-in hover:opacity-90 transition-opacity",onClick:()=>b(k.content)},T))})]}),p&&e.jsx(Le,{src:p,onClose:()=>b(null)}),C&&e.jsxs("div",{className:P("flex items-center gap-1 mt-1.5 mr-1 transition-all duration-200",i?"opacity-100 translate-y-0":"opacity-0 -translate-y-1 pointer-events-none"),children:[e.jsx(ge,{label:n(a?"hub.copied":"hub.copy"),onClick:y,children:a?e.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"#34d399",strokeWidth:"2",children:e.jsx("polyline",{points:"20 6 9 17 4 12"})}):e.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[e.jsx("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2"}),e.jsx("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]})}),o&&e.jsx(ge,{label:n("hub.rerun"),onClick:()=>o(t),children:e.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[e.jsx("polyline",{points:"23 4 23 10 17 10"}),e.jsx("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"})]})}),u&&e.jsx(ge,{label:n("hub.edit"),onClick:()=>u(t),children:e.jsxs("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[e.jsx("path",{d:"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"}),e.jsx("path",{d:"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"})]})})]})]})}function ge({label:t,onClick:s,children:n}){return e.jsx("button",{onClick:s,title:t,className:"flex items-center justify-center w-7 h-7 rounded border border-fg-6 bg-panel text-fg-4 shadow-sm hover:text-fg-2 hover:border-edge-h hover:bg-panel-h transition-colors",children:n})}function ae({agent:t,meta:s}){return e.jsxs("div",{className:"flex items-center gap-3 my-4",children:[e.jsx("div",{className:"flex-1 h-px bg-edge/60"}),e.jsxs("div",{className:"flex items-center gap-1.5 text-[11px] text-fg-5",children:[e.jsx(ie,{brand:t,size:12}),e.jsx("span",{style:{color:s.color,opacity:.6},className:"font-medium",children:s.label})]}),e.jsx("div",{className:"flex-1 h-px bg-edge/60"})]})}function Je({message:t,t:s}){const{activityBlocks:n,thinkingBlocks:o,processNotes:u,planBlocks:i,outputBlocks:d}=Ze(t.blocks),a=[...i].reverse().find(m=>te(m.plan));return e.jsxs("div",{className:"space-y-3",children:[(n.length>0||u.length>0)&&e.jsx(et,{blocks:n,notes:u,t:s}),a?.plan&&e.jsx(Ee,{plan:a.plan,phase:"done",t:s,className:"max-w-[760px]"}),o.length>0&&e.jsx(st,{blocks:o,t:s}),d.length>0&&e.jsx(rt,{blocks:d})]})}function Ye({stream:t,t:s}){const n=te(t.plan),[o,u]=r.useState(!1),[i,d]=r.useState(!1),a=r.useRef(null),m=r.useRef(null),p=!!t.text||!!t.activity||!!t.thinking,b=r.useMemo(()=>(t.activity||"").split(`
4
+ `).filter(Boolean),[t.activity]),C=b[b.length-1]||"";return r.useLayoutEffect(()=>{const g=a.current;g&&o&&(g.scrollTop=g.scrollHeight)},[o,t.activity]),r.useLayoutEffect(()=>{const g=m.current;g&&i&&(g.scrollTop=g.scrollHeight)},[i,t.thinking]),e.jsxs("div",{className:"space-y-3 animate-in",children:[n&&e.jsx(Ee,{plan:t.plan,phase:t.phase,t:s,className:"mb-1 max-w-[760px]"}),b.length>0&&e.jsxs("div",{className:"rounded-md border border-fg-6 bg-panel overflow-hidden shadow-sm",children:[e.jsxs("button",{onClick:()=>u(g=>!g),className:"w-full flex items-center gap-2.5 px-3.5 py-2.5 text-left hover:bg-white/[0.02] transition-colors",children:[e.jsx("span",{className:"h-[7px] w-[7px] rounded-full bg-cyan-400/60 shrink-0 animate-pulse"}),e.jsx("span",{className:"text-[10.5px] font-semibold uppercase tracking-[0.14em] text-fg-5",children:s("hub.activity")}),e.jsx("span",{className:"flex-1 min-w-0 text-[12px] text-fg-4 truncate",children:C}),b.length>1&&e.jsx("span",{className:"rounded border border-fg-6 bg-inset px-1.5 py-0.5 text-[10px] font-mono text-fg-5",children:b.length}),e.jsx(ce,{open:o})]}),o&&e.jsx("div",{ref:a,className:"border-t border-fg-6 px-3.5 py-2.5 space-y-0.5 max-h-[240px] overflow-y-auto",children:b.map((g,y)=>e.jsxs("div",{className:"flex items-center gap-1.5 py-[2px]",children:[e.jsx("span",{className:"w-1 h-1 rounded-full shrink-0 bg-fg-5/30"}),e.jsx("span",{className:"text-[11px] font-mono text-fg-5/60 truncate",children:g})]},y))})]}),t.thinking&&e.jsxs("div",{className:"rounded-md border border-fg-6 bg-panel overflow-hidden shadow-sm",children:[e.jsxs("button",{onClick:()=>d(g=>!g),className:"w-full flex items-center gap-2.5 px-3.5 py-2 text-left hover:bg-white/[0.02] transition-colors",children:[e.jsx("span",{className:"h-[6px] w-[6px] rounded-full bg-violet-400/50 shrink-0 animate-pulse"}),e.jsx("span",{className:"text-[10.5px] font-semibold uppercase tracking-[0.14em] text-fg-5",children:s("hub.thinking")}),e.jsx("div",{className:"flex-1"}),e.jsx(ce,{open:i})]}),!i&&e.jsx("div",{className:"px-3.5 pb-2.5 -mt-0.5 text-[12px] text-fg-4 leading-[1.65] whitespace-pre-wrap break-words line-clamp-3",children:Me(t.thinking,3)}),i&&e.jsx("div",{ref:m,className:"border-t border-fg-6 px-3.5 py-3 text-[12px] text-fg-4 leading-[1.7] whitespace-pre-wrap break-words max-h-[280px] overflow-y-auto",children:t.thinking})]}),t.text&&e.jsxs("div",{className:"session-md text-[13.5px] leading-[1.75] text-fg-2",children:[e.jsx(de,{remarkPlugins:[ue],components:xe,children:t.text}),t.phase==="streaming"&&e.jsx("span",{className:"inline-block w-[2px] h-[16px] bg-fg-3 animate-pulse ml-0.5 align-text-bottom"})]}),!n&&!p&&e.jsxs("div",{className:"flex items-center gap-2.5 py-1",children:[e.jsx(oe,{className:"h-3.5 w-3.5 text-fg-5"}),e.jsx("span",{className:"text-[12px] text-fg-5",children:s("status.running")})]})]})}function Ze(t){const s=t.filter(a=>a.type==="plan"||a.type==="tool_use"||a.type==="tool_result"||a.type==="image"||!!a.content.trim()),n=s.some(a=>a.type==="text"&&!!a.phase);if(!s.some(a=>a.type!=="text"&&a.type!=="image")&&!n)return{activityBlocks:[],thinkingBlocks:[],processNotes:[],planBlocks:[],outputBlocks:s};if(n)return{activityBlocks:s.filter(a=>a.type==="tool_use"||a.type==="tool_result"),thinkingBlocks:s.filter(a=>a.type==="thinking"),processNotes:s.filter(a=>a.type==="text"&&a.phase==="commentary"),planBlocks:s.filter(a=>a.type==="plan"&&te(a.plan)),outputBlocks:s.filter(a=>a.type==="image"||a.type==="text"&&a.phase!=="commentary")};let u=s.length;for(;u>0&&(s[u-1].type==="text"||s[u-1].type==="image");)u--;const i=u<s.length?s.slice(0,u):s,d=u<s.length?s.slice(u):[];return{activityBlocks:i.filter(a=>a.type==="tool_use"||a.type==="tool_result"),thinkingBlocks:i.filter(a=>a.type==="thinking"),planBlocks:i.filter(a=>a.type==="plan"&&te(a.plan)),processNotes:i.filter(a=>a.type==="text"),outputBlocks:[...d,...i.filter(a=>a.type==="image")]}}function et({blocks:t,notes:s,t:n}){const[o,u]=r.useState(!1),i=t.filter(p=>p.type==="tool_use").map(p=>p.toolName||"tool").filter((p,b,C)=>C.indexOf(p)===b),d=t.length+s.length,a=s.map(p=>p.content.split(`
5
+ `).find(Boolean)?.trim()||"").find(Boolean)||"",m=i.length>0?i.join(" · "):a;return e.jsxs("div",{className:"rounded-md border border-fg-6 bg-panel overflow-hidden shadow-sm",children:[e.jsxs("button",{onClick:()=>u(p=>!p),className:"w-full flex items-center gap-2.5 px-3.5 py-2.5 text-left hover:bg-white/[0.02] transition-colors",children:[e.jsx("span",{className:"h-[7px] w-[7px] rounded-full bg-cyan-400/60 shrink-0"}),e.jsx("span",{className:"text-[10.5px] font-semibold uppercase tracking-[0.14em] text-fg-5",children:n("hub.activity")}),e.jsx("span",{className:"flex-1 min-w-0 text-[11.5px] font-mono text-fg-4 truncate",children:m}),d>0&&e.jsx("span",{className:"rounded border border-fg-6 bg-inset px-1.5 py-0.5 text-[10px] font-mono text-fg-5",children:d}),e.jsx(ce,{open:o})]}),o&&e.jsxs("div",{className:"border-t border-fg-6 px-3.5 py-2.5 space-y-0.5",children:[t.map((p,b)=>e.jsx(tt,{block:p},b)),s.length>0&&e.jsx("div",{className:"mt-2 space-y-1.5",children:s.map((p,b)=>e.jsx("div",{className:"rounded-md border border-fg-6 bg-inset px-3 py-2 session-md text-[12px] leading-[1.7] text-fg-4",children:e.jsx(de,{remarkPlugins:[ue],components:xe,children:p.content})},`note-${b}`))})]})]})}function tt({block:t}){const[s,n]=r.useState(!1),o=t.type==="tool_use";return e.jsxs("div",{children:[e.jsxs("button",{onClick:()=>t.content&&n(u=>!u),className:"flex items-center gap-1.5 py-[2px] w-full text-left group",children:[e.jsx("span",{className:P("w-1 h-1 rounded-full shrink-0",o?"bg-fg-5/30":"bg-emerald-400/30")}),e.jsx("span",{className:"text-[11px] font-mono text-fg-5/50 group-hover:text-fg-3 transition-colors truncate",children:o?t.toolName||"tool":"result"})]}),s&&t.content&&e.jsx("pre",{className:"ml-3 mt-1 mb-2 p-3 rounded-md bg-inset border border-fg-6 text-[11px] leading-[1.6] text-fg-4 font-mono whitespace-pre-wrap break-words max-h-[240px] overflow-y-auto",children:t.content.length>3e3?t.content.slice(0,3e3)+`
6
+ …`:t.content})]})}function st({blocks:t,t:s}){const[n,o]=r.useState(!1),u=r.useRef(null),i=t.map(a=>a.content).filter(Boolean).join(`
7
+
8
+ `).trim();if(!i)return null;const d=Me(i,3);return e.jsxs("div",{className:"rounded-md border border-fg-6 bg-panel overflow-hidden shadow-sm",children:[e.jsxs("button",{onClick:()=>o(a=>!a),className:"w-full flex items-center gap-2.5 px-3.5 py-2 text-left hover:bg-white/[0.02] transition-colors",children:[e.jsx("span",{className:"h-[6px] w-[6px] rounded-full bg-violet-400/50 shrink-0"}),e.jsx("span",{className:"text-[10.5px] font-semibold uppercase tracking-[0.14em] text-fg-5",children:s("hub.thinking")}),e.jsx("div",{className:"flex-1"}),e.jsx(ce,{open:n})]}),!n&&d&&e.jsx("div",{className:"px-3.5 pb-2.5 -mt-0.5 text-[12px] text-fg-4 leading-[1.65] whitespace-pre-wrap break-words line-clamp-3",children:d}),n&&e.jsx(nt,{scrollRef:u,text:i})]})}function nt({scrollRef:t,text:s}){return r.useLayoutEffect(()=>{const n=t.current;n&&(n.scrollTop=n.scrollHeight)},[t]),e.jsx("div",{ref:t,className:"border-t border-fg-6 px-3.5 py-3 text-[12px] text-fg-4 leading-[1.7] whitespace-pre-wrap break-words max-h-[320px] overflow-y-auto",children:s})}function Me(t,s){const n=t.split(`
9
+ `).filter(o=>o.trim());return n.length<=s?n.join(`
10
+ `):n.slice(-s).join(`
11
+ `)}function rt({blocks:t}){const s=t.filter(d=>d.type==="text"),n=t.filter(d=>d.type==="image"),o=s.map(d=>d.content).filter(Boolean).join(`
12
+
13
+ `),[u,i]=r.useState(null);return!o.trim()&&n.length===0?null:e.jsxs(e.Fragment,{children:[o.trim()&&e.jsx("div",{className:"session-md text-[13.5px] leading-[1.75] text-fg-2",children:e.jsx(de,{remarkPlugins:[ue],components:xe,children:o})}),n.length>0&&e.jsx("div",{className:"flex flex-wrap gap-2 mt-2",children:n.map((d,a)=>e.jsx("img",{src:d.content,className:"max-w-[400px] max-h-[300px] rounded-md border border-fg-6/50 object-contain cursor-zoom-in hover:opacity-90 transition-opacity",onClick:()=>i(d.content)},a))}),u&&e.jsx(Le,{src:u,onClose:()=>i(null)})]})}function lt({text:t}){const[s,n]=r.useState(!1),o=()=>{navigator.clipboard.writeText(t).then(()=>{n(!0),setTimeout(()=>n(!1),2e3)}).catch(()=>{})};return e.jsx("button",{onClick:o,className:"flex items-center text-fg-5/50 hover:text-fg-3 transition-colors",children:s?e.jsx("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"#34d399",strokeWidth:"2",children:e.jsx("polyline",{points:"20 6 9 17 4 12"})}):e.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[e.jsx("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2"}),e.jsx("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]})})}function at(t){const s=/^[.~/].*\.\w+$/.test(t)||/^[a-z][\w-]*\//.test(t),n=/^(npm |npx |git |python|pip |yarn |pnpm |cargo |go |make )/.test(t);return s?"bg-blue-500/8 border-blue-400/12 text-blue-300/90":n?"bg-amber-500/8 border-amber-400/10 text-amber-300/80":"bg-[rgba(255,255,255,0.06)] border-edge/20 text-fg-3"}const xe={h1:({children:t})=>e.jsx("h2",{className:"text-[16px] font-bold text-fg mt-4 mb-2",children:t}),h2:({children:t})=>e.jsx("h3",{className:"text-[14.5px] font-semibold text-fg mt-4 mb-1.5",children:t}),h3:({children:t})=>e.jsx("h4",{className:"text-[13.5px] font-semibold text-fg mt-3 mb-1",children:t}),p:({children:t})=>e.jsx("p",{className:"my-1.5 whitespace-pre-wrap break-words",children:t}),strong:({children:t})=>e.jsx("strong",{className:"font-semibold text-fg",children:t}),em:({children:t})=>e.jsx("em",{className:"italic text-fg-3",children:t}),a:({href:t,children:s})=>e.jsx("span",{className:"text-blue-400 underline underline-offset-2 decoration-blue-400/30 cursor-pointer",children:s}),ul:({children:t})=>e.jsx("ul",{className:"space-y-1 my-2 ml-1",children:t}),ol:({children:t})=>e.jsx("ol",{className:"space-y-1 my-2 ml-1 list-decimal list-inside",children:t}),li:({children:t})=>e.jsxs("li",{className:"flex gap-2 items-start",children:[e.jsx("span",{className:"shrink-0 mt-[10px] w-[5px] h-[5px] rounded-full bg-fg-5/40"}),e.jsx("span",{className:"flex-1",children:t})]}),blockquote:({children:t})=>e.jsx("blockquote",{className:"border-l-2 border-fg-5/30 pl-3 my-2 text-fg-4 italic",children:t}),hr:()=>e.jsx("hr",{className:"border-edge/30 my-4"}),code:({className:t,children:s,...n})=>{const o=String(s).replace(/\n$/,""),u=/language-(\w+)/.exec(t||"");if(!u&&!t)return e.jsx("code",{className:P("px-1.5 py-[1px] rounded text-[12px] font-mono border",at(o)),children:o});const i=u?.[1]||"";return e.jsxs("div",{className:"rounded-lg overflow-hidden border border-edge/30 bg-[rgba(0,0,0,0.25)] my-3 not-prose",children:[e.jsxs("div",{className:"flex items-center justify-between px-3.5 py-1.5 border-b border-edge/15 bg-[rgba(0,0,0,0.12)]",children:[e.jsx("span",{className:"text-[10px] font-mono text-fg-5/50",children:i||"text"}),e.jsx(lt,{text:o})]}),e.jsx("pre",{className:"px-3.5 py-3 text-[12px] leading-[1.65] text-fg-3 font-mono whitespace-pre-wrap break-words overflow-x-auto",children:e.jsx("code",{children:o})})]})},pre:({children:t})=>e.jsx(e.Fragment,{children:t}),table:({children:t})=>e.jsx("div",{className:"my-3 overflow-x-auto rounded-lg border border-edge/30",children:e.jsx("table",{className:"w-full text-[12.5px]",children:t})}),thead:({children:t})=>e.jsx("thead",{className:"bg-[rgba(0,0,0,0.1)]",children:t}),th:({children:t})=>e.jsx("th",{className:"px-3 py-1.5 text-left font-semibold text-fg-3 border-b border-edge/30",children:t}),td:({children:t})=>e.jsx("td",{className:"px-3 py-1.5 text-fg-4 border-t border-edge/12",children:t}),tr:({children:t})=>e.jsx("tr",{className:"even:bg-[rgba(255,255,255,0.015)]",children:t})};function ce({open:t}){return e.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:P("text-fg-5/30 transition-transform duration-200 ml-0.5",t&&"rotate-180"),children:e.jsx("polyline",{points:"6 9 12 15 18 9"})})}function ot(t){return{id:`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,file:t,previewUrl:URL.createObjectURL(t)}}function Be(t){for(const s of t)URL.revokeObjectURL(s.previewUrl)}function Oe(t){if(!Number.isFinite(t)||t<=0)return"0 B";if(t<1024)return`${t} B`;const s=t/1024;if(s<1024)return`${s.toFixed(s>=100?0:1)} KB`;const n=s/1024;return`${n.toFixed(n>=100?0:1)} MB`}async function it(t){if(typeof ClipboardItem>"u"||!navigator.clipboard?.write)return!1;try{return await navigator.clipboard.write([new ClipboardItem({[t.type||"image/png"]:t})]),!0}catch{return!1}}const ct=r.memo(function({session:s,workdir:n,onStreamQueued:o,onSendStart:u,t:i,streamPhase:d,editDraft:a,onEditDraftConsumed:m}){const[p,b]=r.useState(""),[C,g]=r.useState(!1),[y,k]=r.useState(null),[T,G]=r.useState([]),[N,Q]=r.useState([]),[F,D]=r.useState(null),[I,E]=r.useState(null),[O,X]=r.useState(null),[J,L]=r.useState(null),[j,B]=r.useState("closed"),[M,$]=r.useState(null),H=r.useRef(null),R=r.useRef(null),q=r.useRef(null),S=r.useRef(null),z=r.useRef([]),K=r.useCallback(()=>{A.getAgentStatus().then(l=>G(l.agents||[])).catch(()=>{})},[]);r.useEffect(()=>{K()},[K]),r.useEffect(()=>{z.current=N},[N]),r.useEffect(()=>()=>Be(z.current),[]),r.useEffect(()=>{a!=null&&(b(a),m?.(),requestAnimationFrame(()=>{const l=H.current;l&&(l.focus(),l.setSelectionRange(a.length,a.length))}))},[a,m]),r.useEffect(()=>{if(j==="closed")return;const l=f=>{const h=f.target;S.current?.contains(h)||document.getElementById("cascade-portal")?.contains(h)||(B("closed"),E(null),X(null),L(null))};return document.addEventListener("mousedown",l),()=>document.removeEventListener("mousedown",l)},[j]),r.useLayoutEffect(()=>{if(j==="closed"||!S.current){$(null);return}const l=S.current.getBoundingClientRect();$({left:l.left,bottom:window.innerHeight-l.top+8})},[j]),r.useEffect(()=>{y&&d!=="queued"&&d!==null&&k(null)},[d,y]),r.useEffect(()=>{const l=H.current;l&&(l.style.height="auto",l.style.height=Math.min(l.scrollHeight,200)+"px")},[p]);const Y=r.useCallback(l=>{const f=Array.from(l||[]).filter(h=>h.type.startsWith("image/"));f.length&&Q(h=>[...h,...f.map(ot)])},[]),se=r.useCallback(()=>{D(null),Q(l=>(Be(l),[]))},[]),Z=r.useCallback(l=>{Q(f=>{const h=f.find(U=>U.id===l);return h&&URL.revokeObjectURL(h.previewUrl),f.filter(U=>U.id!==l)}),D(f=>f===l?null:f)},[]),c=r.useCallback(()=>{const l=p.trim(),f=N.map(h=>h.file);!l&&f.length===0||C||(g(!0),b(""),se(),l&&u(l),A.sendSessionMessage(n,s.agent||"",s.sessionId,l,f).then(h=>{h.ok&&o(),h.taskId&&k(h.taskId)}).catch(()=>{}).finally(()=>g(!1)))},[se,N,p,u,o,C,s.agent,s.sessionId,n]),x=r.useCallback(async()=>{if(y)try{await A.recallSessionMessage(y),k(null)}catch{}},[y]),w=r.useCallback(async()=>{if(y)try{await A.steerSession(y),k(null)}catch{}},[y]),_=l=>{l.key==="Enter"&&!l.shiftKey&&(l.preventDefault(),c())},ee=r.useCallback(l=>{const f=Array.from(l.clipboardData?.items||[]).filter(h=>h.kind==="file"&&h.type.startsWith("image/")).map(h=>h.getAsFile()).filter(h=>!!h);f.length&&(l.preventDefault(),Y(f))},[Y]),V=T.find(l=>l.isDefault)||T.find(l=>l.agent===s.agent),ne=(I?T.find(l=>l.agent===I):V)?.models||[],W=V?.selectedModel||s.model||"",ye=V?.selectedEffort||"",re=V?.agent||s.agent||"",Pe=Fe[I||re]||["low","medium","high"],Ie=F&&N.find(l=>l.id===F)||null,ke=(!!p.trim()||N.length>0)&&!C,fe=()=>{E(null),X(null),L(null)},Re=r.useCallback(async(l,f,h)=>{const U={defaultAgent:l,agent:l,model:f};h&&(U.effort=h);try{const me=await A.updateRuntimeAgent(U);me.ok&&me.agents&&G(me.agents)}catch{}fe(),B("closed")},[]),Ae=()=>{j==="closed"?(fe(),K(),B("agent")):(fe(),B("closed"))},Ne=I||re,He=je(Ne),le=O||W,he=J||ye,ze=[He.label,le?le.length>18?le.slice(0,18)+"…":le:null,he?he.charAt(0).toUpperCase()+he.slice(1):null].filter(Boolean).join(" / ");return e.jsxs("div",{className:"shrink-0",ref:q,children:[y&&d==="queued"&&e.jsxs("div",{className:"flex items-center gap-2 px-5 py-2 border-t border-edge/40 bg-warn/[0.04]",children:[e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-warn animate-pulse"}),e.jsx("span",{className:"text-[11px] text-warn font-medium",children:i("hub.queued")}),e.jsxs("div",{className:"ml-auto flex gap-1",children:[e.jsx("button",{onClick:x,className:"px-2.5 py-1 rounded-md text-[11px] font-medium text-fg-4 hover:text-err hover:bg-err/10 transition-colors",children:i("hub.recall")}),e.jsx("button",{onClick:w,className:"px-2.5 py-1 rounded-md text-[11px] font-medium text-fg-4 hover:text-blue-400 hover:bg-blue-400/10 transition-colors",children:i("hub.steer")})]})]}),e.jsx("div",{className:"max-w-[680px] mx-auto px-6 pb-5 pt-3",children:e.jsxs("div",{className:"relative rounded-md border border-fg-6 bg-panel shadow-sm",children:[e.jsx("input",{ref:R,type:"file",accept:"image/*",multiple:!0,className:"hidden",onChange:l=>{Y(l.target.files),l.target.value=""}}),N.length>0&&e.jsx("div",{className:"px-3 pt-3",children:e.jsx("div",{className:"flex gap-2 overflow-x-auto pb-1",children:N.map(l=>e.jsxs("div",{className:"relative shrink-0",children:[e.jsxs("button",{type:"button",onClick:()=>D(l.id),title:i("hub.previewImage"),className:"group relative h-[84px] w-[84px] overflow-hidden rounded-md border border-fg-6 bg-panel-alt/40",children:[e.jsx("img",{src:l.previewUrl,alt:l.file.name,className:"h-full w-full object-cover transition-transform duration-200 group-hover:scale-[1.03]"}),e.jsxs("div",{className:"pointer-events-none absolute inset-x-0 bottom-0 bg-gradient-to-t from-black/65 via-black/15 to-transparent px-2 pb-1.5 pt-4 text-left",children:[e.jsx("div",{className:"truncate text-[9px] font-medium text-white/92",children:l.file.name}),e.jsx("div",{className:"text-[9px] text-white/65",children:Oe(l.file.size)})]})]}),e.jsx("button",{type:"button",onClick:f=>{f.stopPropagation(),Z(l.id)},title:i("hub.removeImage"),className:"absolute -right-1.5 -top-1.5 flex h-6 w-6 items-center justify-center rounded-full border border-white/10 bg-black/70 text-white/80 transition-colors hover:bg-black/85 hover:text-white",children:e.jsxs("svg",{width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.2",strokeLinecap:"round",children:[e.jsx("path",{d:"M18 6 6 18"}),e.jsx("path",{d:"M6 6l12 12"})]})})]},l.id))})}),e.jsx("textarea",{ref:H,value:p,onChange:l=>b(l.target.value),onPaste:ee,onKeyDown:_,placeholder:i("hub.inputPlaceholder"),rows:1,className:"w-full resize-none bg-transparent px-4 pt-3 pb-2 text-[13px] text-fg outline-none placeholder:text-fg-5/30 leading-[1.65]",style:{maxHeight:200,overflow:p.split(`
14
+ `).length>6?"auto":"hidden"}}),e.jsxs("div",{className:"flex items-center gap-2 px-3 pb-2.5 pt-0.5",children:[e.jsx("button",{type:"button",onClick:()=>R.current?.click(),title:i("hub.addImages"),className:"flex h-[28px] w-[28px] items-center justify-center rounded-lg border border-transparent text-fg-5/60 transition-colors hover:border-edge/40 hover:bg-panel-h/50 hover:text-fg-3",children:e.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.1",strokeLinecap:"round",children:[e.jsx("path",{d:"M12 5v14"}),e.jsx("path",{d:"M5 12h14"})]})}),e.jsxs("button",{ref:S,onClick:Ae,className:P("flex items-center gap-1.5 h-[28px] px-2.5 rounded-lg text-[11px] font-medium transition-all duration-200 select-none",j!=="closed"?"bg-panel-h border border-edge-h text-fg-3":"text-fg-5/60 hover:text-fg-4 hover:bg-panel-h/50 border border-transparent"),children:[e.jsx(ie,{brand:Ne,size:12}),e.jsx("span",{className:"max-w-[200px] truncate",children:ze}),e.jsx("svg",{width:"9",height:"9",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",className:P("text-fg-5/30 transition-transform duration-200",j!=="closed"&&"rotate-180"),children:e.jsx("polyline",{points:"6 9 12 15 18 9"})})]}),j!=="closed"&&M&&we.createPortal(e.jsxs("div",{id:"cascade-portal",className:"fixed z-[200] w-[220px] rounded-md border border-fg-6 bg-[var(--th-dropdown)] backdrop-blur-xl shadow-lg overflow-hidden animate-in",style:{left:M.left,bottom:M.bottom},children:[e.jsxs("div",{className:"flex items-center gap-2 px-3 pt-2.5 pb-1.5 border-b border-edge/20",children:[j!=="agent"&&e.jsx("button",{onClick:()=>B(j==="effort"?"model":"agent"),className:"p-0.5 rounded text-fg-5/50 hover:text-fg-3 transition-colors",children:e.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",children:e.jsx("polyline",{points:"15 18 9 12 15 6"})})}),e.jsx("span",{className:"text-[10px] font-semibold text-fg-5 uppercase tracking-wider",children:i(j==="agent"?"hub.selectAgent":j==="model"?"hub.selectModel":"hub.selectEffort")}),e.jsx("div",{className:"ml-auto flex items-center gap-0.5",children:["agent","model","effort"].map((l,f)=>e.jsx("span",{className:P("w-1.5 h-1.5 rounded-full transition-colors",j===l?"bg-primary":f<["agent","model","effort"].indexOf(j)?"bg-primary/40":"bg-fg-5/15")},l))})]}),e.jsxs("div",{className:"max-h-[200px] overflow-y-auto py-1",children:[j==="agent"&&T.filter(l=>l.installed).map(l=>{const f=je(l.agent);return e.jsxs(be,{selected:l.agent===(I||re),onClick:()=>{E(l.agent),B("model")},children:[e.jsx(ie,{brand:l.agent,size:14}),e.jsx("span",{style:{color:f.color},children:f.label})]},l.agent)}),j==="model"&&e.jsxs(e.Fragment,{children:[ne.map(l=>e.jsx(be,{selected:l.id===(O||W)||l.alias===(O||W),onClick:()=>{X(l.id),B("effort")},children:e.jsx("span",{className:"font-mono text-[11px]",children:l.alias||l.id})},l.id)),ne.length===0&&e.jsx("div",{className:"px-3 py-3 text-[11px] text-fg-5 text-center",children:i("config.noModel")})]}),j==="effort"&&Pe.map(l=>e.jsx(be,{selected:l===(J||ye),onClick:()=>{L(l),Re(I||re,O||W,l)},children:l.charAt(0).toUpperCase()+l.slice(1)},l))]})]}),document.body),e.jsx("div",{className:"flex-1"}),e.jsx("button",{onClick:c,disabled:!ke,className:P("flex items-center justify-center w-8 h-8 rounded-md transition-all duration-200",ke?"bg-primary text-primary-fg hover:brightness-110 shadow-sm":"bg-fg/6 text-fg-5/20"),children:C?e.jsx(oe,{className:"h-3.5 w-3.5"}):e.jsxs("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("line",{x1:"12",y1:"19",x2:"12",y2:"5"}),e.jsx("polyline",{points:"5 12 12 5 19 12"})]})})]})]})}),e.jsx(dt,{attachment:Ie,onClose:()=>D(null),onRemove:Z,t:i})]})});function dt({attachment:t,onClose:s,onRemove:n,t:o}){const[u,i]=r.useState(!1);return r.useEffect(()=>{i(!1)},[t?.id]),r.useEffect(()=>{if(!t)return;const d=a=>{a.key==="Escape"&&s()};return document.addEventListener("keydown",d),()=>document.removeEventListener("keydown",d)},[t,s]),t?we.createPortal(e.jsx("div",{className:"fixed inset-0 z-[220] flex items-center justify-center bg-black/72 px-4 py-6 backdrop-blur-sm",onClick:s,children:e.jsxs("div",{className:"w-full max-w-[1024px]",onClick:d=>d.stopPropagation(),children:[e.jsxs("div",{className:"mb-3 flex items-center gap-2 text-[11px] text-white/72",children:[e.jsx("span",{className:"truncate font-medium text-white/90",children:t.file.name}),e.jsx("span",{children:Oe(t.file.size)}),e.jsxs("div",{className:"ml-auto flex items-center gap-2",children:[e.jsx("button",{type:"button",onClick:async()=>{await it(t.file)&&(i(!0),window.setTimeout(()=>i(!1),1600))},className:"rounded-lg border border-white/12 bg-white/10 px-3 py-1.5 text-[11px] font-medium text-white/88 transition-colors hover:bg-white/14",children:o(u?"hub.copied":"hub.copyImage")}),e.jsx("button",{type:"button",onClick:()=>n(t.id),className:"rounded-lg border border-white/12 bg-white/10 px-3 py-1.5 text-[11px] font-medium text-white/88 transition-colors hover:bg-white/14",children:o("hub.removeImage")}),e.jsx("button",{type:"button",onClick:s,className:"flex h-9 w-9 items-center justify-center rounded-full border border-white/12 bg-white/10 text-white/88 transition-colors hover:bg-white/14",children:e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.2",strokeLinecap:"round",children:[e.jsx("path",{d:"M18 6 6 18"}),e.jsx("path",{d:"M6 6l12 12"})]})})]})]}),e.jsx("div",{className:"overflow-hidden rounded-[24px] border border-white/10 bg-black/35 shadow-[0_20px_70px_rgba(0,0,0,0.45)]",children:e.jsx("img",{src:t.previewUrl,alt:t.file.name,className:"max-h-[80vh] w-full object-contain"})})]})}),document.body):null}function be({selected:t,onClick:s,children:n}){return e.jsxs("button",{onClick:s,className:P("flex items-center gap-2 w-full px-3 py-2 text-[12px] text-left transition-colors",t?"text-fg bg-panel-h font-medium":"text-fg-3 hover:bg-panel-alt/50 hover:text-fg-2"),children:[n,t&&e.jsx("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",className:"ml-auto text-ok",children:e.jsx("polyline",{points:"20 6 9 17 4 12"})}),!t&&e.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"ml-auto text-fg-5/20",children:e.jsx("polyline",{points:"9 6 15 12 9 18"})})]})}export{bt as SessionPanel};
@@ -0,0 +1,3 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/SessionPanel-DTILWbVA.js","assets/react-vendor-C7Sl8SE7.js","assets/index-BxuA85oI.js","assets/router-Rwafsu7Y.js","assets/index-NO1v_zlB.css","assets/BrandIcon-B9y9j0jh.js","assets/markdown-Chkk3cWU.js","assets/DirBrowser-D4Y8bm_k.js"])))=>i.map(i=>d[i]);
2
+ import{r as o,j as e}from"./react-vendor-C7Sl8SE7.js";import{c as y,u as A,a as oe,b as T,s as H,S as $,_ as ie,d as Z,B as z,f as ee,I as le,e as K,M as ce,g as de,h as ue,i as xe,j as he,k as pe,D as fe}from"./index-BxuA85oI.js";import{B as te}from"./BrandIcon-B9y9j0jh.js";import{D as ge}from"./DirBrowser-D4Y8bm_k.js";function se(s){return!!s?.steps?.length}function me(s,t){let a=s;for(const[i,r]of Object.entries(t))a=a.replace(new RegExp(`\\{${i}\\}`,"g"),r);return a}function be({status:s}){return s==="completed"?e.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",className:"text-ok",children:e.jsx("polyline",{points:"20 6 9 17 4 12"})}):s==="inProgress"?e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-cyan-400 animate-pulse"}):e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-fg-5/25"})}function je({open:s}){return e.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:y("text-fg-5/30 transition-transform duration-200 ml-0.5",s&&"rotate-180"),children:e.jsx("polyline",{points:"6 9 12 15 18 9"})})}function ve({plan:s,phase:t,t:a,className:i}){const[r,l]=o.useState(!1);if(!se(s))return null;const u=s.steps.length,f=s.steps.filter(d=>d.status==="completed").length,h=t==="done"||f===u,w=me(a("hub.planProgress"),{done:String(f),total:String(u)}),m=h?"bg-emerald-400/60":"bg-cyan-400/60";return e.jsxs("div",{className:y("rounded-md border border-fg-6 bg-panel overflow-hidden shadow-sm",i),children:[e.jsxs("button",{onClick:()=>l(d=>!d),className:"w-full flex items-center gap-2.5 px-3.5 py-2.5 text-left hover:bg-white/[0.02] transition-colors",children:[e.jsx("span",{className:y("h-[7px] w-[7px] rounded-full shrink-0",m)}),e.jsx("span",{className:"text-[10.5px] font-semibold uppercase tracking-[0.14em] text-fg-5",children:w}),s.explanation&&e.jsx("span",{className:"flex-1 min-w-0 text-[11.5px] text-fg-4 truncate",children:s.explanation}),!s.explanation&&e.jsx("span",{className:"flex-1"}),e.jsx("span",{className:y("rounded border px-1.5 py-0.5 text-[10px] font-mono",h?"border-ok/20 text-ok":"border-fg-6 text-fg-5"),children:a(h?"hub.planDone":"hub.planInProgress")}),e.jsx(je,{open:r})]}),r&&e.jsx("div",{className:"border-t border-fg-6 px-3.5 py-2.5 space-y-1",children:s.steps.map((d,b)=>{const g=d.status==="completed"?"text-fg-5 line-through decoration-fg-5/40":d.status==="inProgress"?"text-fg-3":"text-fg-4";return e.jsxs("div",{className:"flex items-center gap-2 py-[2px]",children:[e.jsx("span",{className:"shrink-0 flex items-center justify-center w-[10px]",children:e.jsx(be,{status:d.status})}),e.jsx("span",{className:y("text-[12px] leading-[1.5]",g),children:d.step})]},`${b}:${d.step}`)})})]})}const ke=o.lazy(async()=>({default:(await ie(async()=>{const{SessionPanel:s}=await import("./SessionPanel-DTILWbVA.js");return{SessionPanel:s}},__vite__mapDeps([0,1,2,3,4,5,6,7]))).SessionPanel})),U=5,we=5e3,V=(s,t)=>`${s}:${t}`;function ye(s){return s==="vscode"||s==="cursor"||s==="windsurf"||s==="finder"||s==="default"}function J(s,t){const a=String(s||"").toLowerCase();return a.includes("cursor")?"cursor":a.includes("windsurf")?"windsurf":a.includes("code")||t==="darwin"?"vscode":"default"}function ne(s){switch(s){case"cursor":return"hub.openTargetCursor";case"windsurf":return"hub.openTargetWindsurf";case"finder":return"hub.openTargetFinder";case"default":return"hub.openTargetDefault";default:return"hub.openTargetVsCode"}}const Ne=o.memo(function({active:t=!0}){const a=A(n=>n.locale),i=A(n=>n.state?.runtimeWorkdir??null),r=o.useMemo(()=>oe(a),[a]),[l,u]=o.useState([]),[f,h]=o.useState({}),[w,m]=o.useState({}),[d,b]=o.useState(null),[g,k]=o.useState(!1),[v,C]=o.useState(""),[N,j]=o.useState("all"),I=o.useRef(!1),B=o.useRef({}),W=o.useCallback(async()=>{try{const n=await T.getWorkspaces(),c=n.ok?n.workspaces:[];c.length&&u(c),I.current=!0}catch{I.current=!0}},[]);o.useEffect(()=>{W()},[W]);const S=o.useCallback(async(n,c={})=>{if(!B.current[n]){B.current[n]=!0,c.background||m(x=>({...x,[n]:!0}));try{const x=await T.getWorkspaceSessions(n);h(L=>({...L,[n]:x.sessions||[]}))}catch{c.background||h(x=>({...x,[n]:[]}))}finally{B.current[n]=!1,c.background||m(x=>({...x,[n]:!1}))}}},[]);o.useEffect(()=>{if(t)for(const n of l)!f[n.path]&&!w[n.path]&&S(n.path)},[t,S,w,f,l]),o.useEffect(()=>{if(!t||!I.current||l.length===0)return;const c=setInterval(()=>{if(!(typeof document<"u"&&document.visibilityState==="hidden"))for(const x of l)S(x.path,{background:!0})},we);return()=>clearInterval(c)},[t,l,S]),o.useEffect(()=>{if(!t||!I.current||l.length===0)return;const n=()=>{if(!(typeof document<"u"&&document.visibilityState==="hidden"))for(const x of l)S(x.path,{background:!0})};if(n(),typeof document>"u"||typeof window>"u")return;const c=()=>{document.visibilityState==="visible"&&n()};return document.addEventListener("visibilitychange",c),window.addEventListener("focus",c),()=>{document.removeEventListener("visibilitychange",c),window.removeEventListener("focus",c)}},[t,S,l]);const D=o.useCallback(async n=>{try{(await T.addWorkspace(n)).ok&&(k(!1),await W(),S(n))}catch{}},[W,S]),R=o.useCallback(async n=>{try{await T.removeWorkspace(n),u(c=>c.filter(x=>x.path!==n)),h(c=>{const x={...c};return delete x[n],x}),b(c=>c?.workdir===n?null:c)}catch{}},[]),F=o.useCallback((n,c)=>{b({agent:n.agent||"",sessionId:n.sessionId,workdir:c})},[]),P=o.useCallback(n=>{let c=n;if(N==="running"?c=c.filter(x=>H(x)==="running"):N==="review"&&(c=c.filter(x=>H(x)==="incomplete")),v.trim()){const x=v.toLowerCase();c=c.filter(L=>(L.lastMessageText||"").toLowerCase().includes(x)||(L.lastQuestion||"").toLowerCase().includes(x)||(L.lastAnswer||"").toLowerCase().includes(x)||(L.title||"").toLowerCase().includes(x)||(L.agent||"").toLowerCase().includes(x))}return c},[N,v]),M=o.useMemo(()=>{const n={};for(const c of l)n[c.path]=P(f[c.path]||[]);return n},[l,f,P]),E=o.useMemo(()=>d?(f[d.workdir]||[]).find(n=>n.sessionId===d.sessionId&&n.agent===d.agent)??null:null,[d,f]),p=d?V(d.agent,d.sessionId):null;return e.jsxs("div",{className:"h-full overflow-hidden p-4 flex gap-3 mx-auto max-w-[1680px]",children:[e.jsxs("div",{className:"panel-isolated w-[252px] shrink-0 flex flex-col overflow-hidden rounded-xl border border-edge bg-panel backdrop-blur-sm",style:{boxShadow:"var(--th-card-shadow)"},children:[e.jsxs("div",{className:"px-3 pt-3 pb-2 space-y-2",children:[e.jsxs("div",{className:"relative group",children:[e.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-fg-5/40 group-focus-within:text-fg-4 transition-colors",children:[e.jsx("circle",{cx:"11",cy:"11",r:"8"}),e.jsx("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]}),e.jsx("input",{value:v,onChange:n=>C(n.target.value),placeholder:r("hub.search"),className:"w-full rounded-lg border border-edge/40 bg-inset/50 pl-8 pr-7 py-1.5 text-[12px] text-fg outline-none placeholder:text-fg-5/30 focus:border-primary/30 focus:bg-inset focus:shadow-[0_0_0_3px_rgba(99,102,241,0.06)] transition-all duration-200"}),v&&e.jsx("button",{onClick:()=>C(""),className:"absolute right-2 top-1/2 -translate-y-1/2 p-0.5 rounded text-fg-5/30 hover:text-fg-4 transition-colors",children:e.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:[e.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),e.jsx("div",{className:"flex items-center rounded-lg bg-inset/30 border border-edge/20 p-0.5",children:["all","running","review"].map(n=>e.jsx("button",{onClick:()=>j(n),className:y("flex-1 px-2 py-[5px] rounded-md text-[11px] font-medium transition-all duration-200",N===n?"bg-panel-h text-fg-2 shadow-[0_1px_2px_rgba(0,0,0,0.1),inset_0_1px_0_rgba(255,255,255,0.04)]":"text-fg-5/60 hover:text-fg-4"),children:r(`hub.filter${n[0].toUpperCase()+n.slice(1)}`)},n))})]}),e.jsx("div",{className:"flex-1 overflow-y-auto",children:l.length===0&&!g?e.jsx("div",{className:"py-12 text-center text-[13px] text-fg-5",children:r("hub.noWorkspaces")}):l.map(n=>e.jsx(Ce,{workspace:n,sessions:M[n.path]||[],loading:!!w[n.path],selectedKey:p,onSelectSession:F,onRefresh:S,onRemove:R,t:r},n.path))}),e.jsx("div",{className:"shrink-0 px-3 py-2 border-t border-edge/20",children:e.jsxs("button",{onClick:()=>k(n=>!n),className:"flex items-center justify-center gap-1.5 w-full px-2 py-1.5 rounded-lg text-[11px] font-medium text-fg-5/60 hover:text-fg-3 hover:bg-panel-h/60 border border-transparent hover:border-edge/20 transition-all duration-200",children:[e.jsxs("svg",{width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",children:[e.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),e.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]}),r("hub.addWorkspace")]})})]}),e.jsx("div",{className:"panel-scroll-safe flex-1 min-w-0 overflow-hidden rounded-xl border border-edge bg-panel",style:{boxShadow:"var(--th-card-shadow)"},children:!E||!d?e.jsx("div",{className:"flex h-full items-center justify-center",children:e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"text-[14px] text-fg-4",children:r("hub.selectSession")}),e.jsx("div",{className:"mt-1 text-[12px] text-fg-5",children:r("hub.selectSessionHint")})]})}):e.jsx(o.Suspense,{fallback:e.jsx("div",{className:"flex h-full items-center justify-center",children:e.jsxs("div",{className:"flex items-center gap-2 text-sm text-fg-4",children:[e.jsx($,{}),"Loading session..."]})}),children:e.jsx(ke,{session:E,workdir:d.workdir,active:t},V(d.agent,d.sessionId))})}),e.jsx(Pe,{session:E,workdir:d?.workdir||"",active:t,t:r}),e.jsx(Se,{open:g,initialPath:i||void 0,onAdd:D,onClose:()=>k(!1),t:r})]})});function Se({open:s,initialPath:t,onAdd:a,onClose:i,t:r}){const[l,u]=o.useState(""),f=o.useCallback(h=>u(h),[]);return o.useEffect(()=>{s&&u("")},[s]),e.jsxs(ce,{open:s,onClose:i,children:[e.jsx(de,{title:r("hub.addWorkspace"),onClose:i}),e.jsx(ge,{initialPath:t,maxHeight:360,minHeight:200,onSelect:f,t:r}),e.jsxs("div",{className:"flex gap-2 mt-4",children:[e.jsx(K,{disabled:!l,onClick:()=>l&&a(l),className:"flex-1",children:r("hub.add")}),e.jsx(K,{variant:"secondary",onClick:i,className:"flex-1",children:r("hub.cancel")})]})]})}const Ce=o.memo(function({workspace:t,sessions:a,loading:i,selectedKey:r,onSelectSession:l,onRefresh:u,onRemove:f,t:h}){const[w,m]=o.useState(!0),[d,b]=o.useState(U),[g,k]=o.useState(!1);o.useEffect(()=>{b(U)},[a.length]);const v=a.slice(0,d),C=a.length-d,N=t.path;return e.jsxs("div",{className:"border-b border-edge/30",children:[e.jsxs("div",{className:"flex items-center gap-2 px-3 py-2 cursor-pointer hover:bg-panel-h/50 transition-colors",onClick:()=>m(j=>!j),onMouseEnter:()=>k(!0),onMouseLeave:()=>k(!1),children:[e.jsx("svg",{width:"9",height:"9",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",className:y("shrink-0 text-fg-5 transition-transform duration-150",w&&"rotate-90"),children:e.jsx("polyline",{points:"9 6 15 12 9 18"})}),e.jsx("span",{className:"flex-1 min-w-0 truncate text-[12px] font-semibold text-fg-3",children:t.name}),e.jsx("span",{className:"shrink-0 text-[10px] text-fg-5 tabular-nums",children:i?"":`(${a.length})`}),g&&e.jsxs("div",{className:"flex items-center gap-0.5 shrink-0",children:[e.jsx("button",{onClick:j=>{j.stopPropagation(),u(N)},className:"p-0.5 rounded text-fg-5 hover:text-fg-2 transition-colors",children:e.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[e.jsx("polyline",{points:"23 4 23 10 17 10"}),e.jsx("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"})]})}),e.jsx("button",{onClick:j=>{j.stopPropagation(),f(N)},className:"p-0.5 rounded text-fg-5 hover:text-red-400 transition-colors",children:e.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]})]}),w&&e.jsx("div",{className:"pb-1",children:i?e.jsx("div",{className:"flex items-center justify-center py-4",children:e.jsx($,{className:"h-3 w-3 text-fg-5"})}):a.length===0?e.jsx("div",{className:"py-3 text-center text-[11px] text-fg-5",children:h("sessions.noSessions")}):e.jsxs(e.Fragment,{children:[v.map(j=>e.jsx(Le,{session:j,isSelected:r===V(j.agent||"",j.sessionId),onClick:()=>l(j,N)},V(j.agent||"",j.sessionId))),C>0&&e.jsxs("button",{onClick:()=>b(j=>j+U),className:"flex items-center gap-1.5 w-full px-3 py-1.5 text-[11px] text-fg-5 hover:text-fg-3 hover:bg-panel-h/50 transition-colors",children:[e.jsxs("span",{children:["+ ",h("hub.nMore").replace("{n}",String(C))]}),e.jsx("svg",{width:"8",height:"8",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:e.jsx("polyline",{points:"6 9 12 15 18 9"})})]})]})})]})}),Le=o.memo(function({session:t,isSelected:a,onClick:i}){const r=ue(t.agent||""),l=H(t),u=xe(t).slice(0,500)||t.sessionId.slice(0,16),f=he(t,u).slice(0,500),h=t.model?pe(t.model):null;return e.jsxs("button",{onClick:i,className:y("w-full px-3 py-2 text-left transition-all duration-100","hover:bg-panel-h/60",a&&"bg-panel-h/80"),style:a?{borderLeft:`2px solid ${r.color}`,paddingLeft:10}:void 0,children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] text-fg-5",children:[e.jsx(te,{brand:t.agent||"",size:10}),e.jsx("span",{className:"font-medium shrink-0",style:{color:r.color},children:r.shortLabel}),h&&e.jsx("span",{className:"truncate max-w-[72px] font-mono text-fg-5/40 text-[9px]",children:h}),e.jsxs("div",{className:"ml-auto flex items-center gap-1.5 shrink-0",children:[!!t.numTurns&&e.jsxs("span",{className:"flex items-center gap-0.5 text-fg-5/50 tabular-nums",children:[e.jsx("svg",{width:"9",height:"9",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",className:"opacity-50",children:e.jsx("path",{d:"M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"})}),t.numTurns]}),e.jsx("span",{className:"tabular-nums",children:ee(t.runUpdatedAt||t.createdAt)})]})]}),e.jsxs("div",{className:"mt-1 flex items-center gap-1.5",children:[e.jsx(fe,{variant:l==="running"?"ok":l==="incomplete"?"warn":"idle",pulse:l==="running"}),e.jsx("span",{className:"truncate text-[12px] leading-snug text-fg-2",children:u})]}),f&&e.jsx("div",{className:"mt-0.5 pl-[11px]",children:e.jsx("span",{className:"block truncate text-[10px] leading-snug text-fg-5",children:f})})]})});function X(s){return s&&s[0].toUpperCase()+s.slice(1)}function We(s){if(s.userStatus)return s.userStatus;switch(s.classification?.outcome){case"answer":return"done";case"partial":return"active";case"proposal":case"implementation":case"blocked":case"conversation":return"review";default:return"inbox"}}function Te(s){switch(s){case"done":return"ok";case"review":return"warn";case"active":return"accent";default:return"muted"}}function Ie(s){switch(s){case"blocked":return"err";case"partial":return"warn";case"implementation":case"proposal":return"accent";case"answer":return"ok";default:return"muted"}}function Me(s,t){const a=s.classification?.summary?.trim();if(a)return a;const i=s.lastAnswer?.split(`
3
+ `).find(l=>l.trim())?.trim();if(i)return i.length>180?i.slice(0,177)+"...":i;const r=s.runDetail?.trim();return r||t("hub.noSummary")}function Be(s,t,a){const i=s.classification?.suggestedNextAction?.trim();return i||a(t==="incomplete"?"hub.continueTask":"hub.noNextAction")}const Pe=o.memo(function({session:t,workdir:a,active:i,t:r}){const l=A(p=>p.state?.hostApp??null),u=A(p=>p.state?.platform??null),f=A(p=>p.toast),h=t?H(t):"completed",w=t?.agent||"",m=t?.sessionId||"",[d,b]=o.useState("vscode"),[g,k]=o.useState(!0),[v,C]=o.useState(null),N=o.useRef(!1);o.useEffect(()=>{b(p=>{if(p==="finder"&&u!=="darwin")return J(l,u);if(N.current)return p;const n=J(l,u);return p===n?p:n})},[l,u]),o.useEffect(()=>{if(!i||!t){C(null);return}let p=!0,n=null,c=null;const x=()=>{c&&(clearInterval(c),c=null)},L=()=>{c||(c=setInterval(()=>{q()},1200))},q=async()=>{try{const _=await T.getSessionStreamState(t.agent||"",t.sessionId);if(!p)return;const Q=_.state?.phase??null;C(_.state?{phase:_.state.phase,activity:_.state.activity,thinking:_.state.thinking,plan:_.state.plan??null}:null),Z(h,!1,Q,n)?L():x(),n=Q}catch{}};return q(),Z(h,!1,null,null)&&L(),()=>{p=!1,x()}},[i,h,t,w,m]);const j=(u==="darwin"?["vscode","finder"]:["vscode"]).map(p=>({value:p,label:r(ne(p))})),I=o.useCallback(async p=>{try{const n=await T.openInEditor(p,d);if(!n.ok)throw new Error(n.error||`Failed to open ${p}`)}catch(n){f(n?.message||String(n),!1)}},[d,f]);if(!t||!a)return e.jsx("div",{className:"panel-isolated w-[252px] shrink-0 flex flex-col overflow-hidden rounded-xl border border-edge bg-panel backdrop-blur-sm",style:{boxShadow:"var(--th-card-shadow)"},children:e.jsx("div",{className:"flex h-full items-center justify-center px-6 text-center text-[12px] text-fg-5",children:r("hub.selectSessionHint")})});const B=We(t),W=t.classification?.outcome||null,S=Me(t,r),D=Be(t,h,r),R=v?.activity?.trim()||(v?.thinking?r("hub.thinkingLive"):""),F=se(v?.plan)?v.plan:null,P=t.workspacePath||a,M=!!t.workspacePath,E=t.linkedSessions?.length||0;return e.jsxs("div",{className:"panel-isolated w-[252px] shrink-0 flex flex-col overflow-hidden rounded-xl border border-edge bg-panel backdrop-blur-sm",style:{boxShadow:"var(--th-card-shadow)"},children:[e.jsx("div",{className:"shrink-0 px-3 pt-3 pb-2",children:e.jsx("div",{className:"text-[12px] font-semibold text-fg-3",children:r("hub.result")})}),e.jsxs("div",{className:"flex-1 overflow-y-auto px-2 pb-2 space-y-3",children:[e.jsxs("div",{className:"rounded-lg border border-edge/50 bg-panel-alt/40 px-3 py-3 space-y-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[e.jsx(z,{variant:Te(B),children:r(`hub.status${X(B)}`)}),W&&e.jsx(z,{variant:Ie(W),children:r(`hub.outcome${X(W)}`)}),h==="running"&&e.jsx(z,{variant:"accent",children:r("hub.live")})]}),e.jsx(Y,{label:r("hub.summary"),content:S}),e.jsx(Y,{label:r("hub.nextAction"),content:D,muted:D===r("hub.noNextAction")}),F&&e.jsx(ve,{plan:F,phase:v?.phase??null,t:r,compact:!0}),R&&e.jsxs("div",{className:"rounded-md border border-ok/15 bg-ok/[0.06] px-2.5 py-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"h-[6px] w-[6px] rounded-full bg-ok animate-pulse shrink-0"}),e.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wider text-ok",children:r("hub.live")})]}),e.jsx("div",{className:"mt-1 pl-[14px] text-[11px] text-fg-4 font-mono break-words",children:R})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2 text-[11px]",children:[e.jsx(O,{label:r("hub.lastUpdated"),value:ee(t.runUpdatedAt||t.createdAt)}),e.jsx(O,{label:r("hub.turns"),value:t.numTurns?String(t.numTurns):"—"}),e.jsx(O,{label:r("hub.workspace"),value:r(M?"hub.artifacts":"hub.projectFiles")}),e.jsx(O,{label:r("hub.linked"),value:E?String(E):"—"})]})]}),e.jsxs("div",{className:"px-2 flex items-center gap-2",children:[e.jsx(le,{value:d,options:j,onChange:p=>{ye(p)&&(N.current=!0,b(p))},renderIcon:p=>e.jsx(re,{target:p,size:18})}),e.jsx(K,{size:"sm",variant:"outline",onClick:()=>I(a),className:"flex-1 min-w-0",children:r("hub.openProject")})]}),e.jsx(Ee,{title:r(M?"hub.artifacts":"hub.projectFiles"),open:g,onToggle:()=>k(p=>!p)}),g&&(P?e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"rounded-lg border border-edge/40 bg-panel-alt/20 px-3 py-2",children:[e.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-wider text-fg-5",children:r(M?"hub.workspacePath":"hub.projectPath")}),e.jsx("div",{className:"mt-1 break-all font-mono text-[10px] leading-[1.5] text-fg-4",children:P}),!M&&e.jsx("div",{className:"mt-1 text-[10px] leading-[1.5] text-fg-5",children:r("hub.projectFilesHint")})]}),e.jsx(_e,{basePath:P,includeHidden:M,openTarget:d,onOpenPath:I,t:r})]}):e.jsx("div",{className:"py-3 text-center text-[11px] text-fg-5",children:r("hub.noFiles")}))]})]})});function Y({label:s,content:t,muted:a}){return e.jsxs("div",{children:[e.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-wider text-fg-5",children:s}),e.jsx("div",{className:y("mt-1 text-[12px] leading-[1.6] text-fg-2",a&&"text-fg-5"),children:t})]})}function O({label:s,value:t}){return e.jsxs("div",{className:"rounded-md border border-edge/30 bg-panel/40 px-2 py-1.5",children:[e.jsx("div",{className:"text-[10px] text-fg-5",children:s}),e.jsx("div",{className:"mt-0.5 text-[11px] font-medium text-fg-2",children:t})]})}function re({target:s,size:t=16}){return s==="default"?e.jsxs("svg",{width:t,height:t,viewBox:"0 0 16 16",className:"shrink-0 text-fg-4",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("path",{d:"M6 3H4a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-2"}),e.jsx("path",{d:"M9 2h5v5"}),e.jsx("path",{d:"M14 2L7 9"})]}):e.jsx(te,{brand:s,size:t})}function Ee({title:s,badge:t,open:a,onToggle:i}){return e.jsxs("button",{onClick:i,className:"flex items-center gap-1.5 w-full px-1 pt-2.5 pb-1",children:[e.jsx("svg",{width:"8",height:"8",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",className:y("shrink-0 text-fg-5/50 transition-transform duration-150",a&&"rotate-90"),children:e.jsx("polyline",{points:"9 6 15 12 9 18"})}),e.jsx("span",{className:"text-[10px] font-semibold text-fg-5 uppercase tracking-wider",children:s}),t!=null&&t>0&&e.jsx("span",{className:"ml-auto text-[9px] font-medium text-fg-5 bg-panel-h rounded-full px-1.5 py-0.5 tabular-nums",children:t})]})}function _e({basePath:s,includeHidden:t=!1,openTarget:a,onOpenPath:i,t:r}){const[l,u]=o.useState([]),[f,h]=o.useState(!0);o.useEffect(()=>{let m=!1;return h(!0),T.lsDir(s,!0,t).then(d=>{!m&&d.ok&&u(d.dirs.slice(0,50).map(b=>({entry:b,expanded:!1,children:null,loading:!1})))}).catch(()=>{}).finally(()=>{m||h(!1)}),()=>{m=!0}},[s,t]);const w=o.useCallback(m=>{const d=b=>b.map(g=>g.entry.path===m?g.expanded?{...g,expanded:!1}:g.children===null?(T.lsDir(m,!0,t).then(k=>{k.ok&&u(v=>G(v,m,{children:k.dirs.slice(0,50).map(C=>({entry:C,expanded:!1,children:null,loading:!1})),loading:!1}))}).catch(()=>{u(k=>G(k,m,{children:[],loading:!1}))}),{...g,loading:!0,expanded:!0}):{...g,expanded:!0}:g.children?{...g,children:d(g.children)}:g);u(b=>d(b))},[t]);return f?e.jsx("div",{className:"flex justify-center py-3",children:e.jsx($,{className:"h-3 w-3 text-fg-5"})}):l.length===0?e.jsx("div",{className:"py-3 text-center text-[11px] text-fg-5",children:"—"}):e.jsx("div",{className:"space-y-px",children:e.jsx(ae,{nodes:l,depth:0,onToggle:w,openTarget:a,onOpenPath:i,t:r})})}function ae({nodes:s,depth:t,onToggle:a,openTarget:i,onOpenPath:r,t:l}){return e.jsx(e.Fragment,{children:s.map(u=>e.jsx(Ae,{node:u,depth:t,onToggle:a,openTarget:i,onOpenPath:r,t:l},u.entry.path))})}function Ae({node:s,depth:t,onToggle:a,openTarget:i,onOpenPath:r,t:l}){const{entry:u,expanded:f,children:h,loading:w}=s,m=t*14,[d,b]=o.useState(!1),g=l(ne(i)),k=l("hub.openWithTarget").replace("{target}",g);return e.jsxs(e.Fragment,{children:[e.jsxs("div",{onClick:u.isDir?()=>a(u.path):void 0,onMouseEnter:()=>b(!0),onMouseLeave:()=>b(!1),className:y("flex items-center gap-1.5 py-1 rounded text-[11px] text-fg-3 transition-colors",u.isDir?"hover:bg-panel-h/50 cursor-pointer":"hover:bg-panel-h/50 cursor-default"),style:{paddingLeft:8+m,paddingRight:8},children:[u.isDir?w?e.jsx($,{className:"h-2 w-2 text-fg-5 shrink-0"}):e.jsx("svg",{width:"8",height:"8",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",className:y("shrink-0 text-fg-5/40 transition-transform duration-150",f&&"rotate-90"),children:e.jsx("polyline",{points:"9 6 15 12 9 18"})}):e.jsx("span",{className:"w-2 shrink-0"}),u.isDir?e.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",className:"shrink-0 text-blue-400/70",children:e.jsx("path",{d:"M2 6a2 2 0 012-2h5l2 2h9a2 2 0 012 2v10a2 2 0 01-2 2H4a2 2 0 01-2-2V6z",fill:"currentColor",opacity:"0.25",stroke:"currentColor",strokeWidth:"1.5"})}):e.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",className:"shrink-0 text-fg-5",children:[e.jsx("path",{d:"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"}),e.jsx("polyline",{points:"14 2 14 8 20 8"})]}),e.jsx("span",{className:"truncate flex-1",children:u.name}),d&&e.jsxs("div",{className:"flex items-center gap-0.5 shrink-0",children:[e.jsx("button",{onClick:v=>{v.stopPropagation(),r(u.path)},className:"inline-flex items-center gap-1 rounded px-1 py-0.5 text-fg-5 hover:text-blue-400 transition-colors",title:k,children:e.jsx(re,{target:i,subtle:!0})}),!u.isDir&&e.jsx(De,{filePath:u.path,t:l})]})]}),u.isDir&&f&&h&&h.length>0&&e.jsx(ae,{nodes:h,depth:t+1,onToggle:a,openTarget:i,onOpenPath:r,t:l})]})}function De({filePath:s,t}){const[a,i]=o.useState(!1);return e.jsx("button",{onClick:r=>{r.stopPropagation(),navigator.clipboard.writeText(s).then(()=>{i(!0),setTimeout(()=>i(!1),1500)}).catch(()=>{})},className:y("p-0.5 rounded transition-colors",a?"text-ok":"text-fg-5 hover:text-fg-3"),title:t("hub.copied"),children:a?e.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:e.jsx("polyline",{points:"20 6 9 17 4 12"})}):e.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[e.jsx("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2"}),e.jsx("path",{d:"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"})]})})}function G(s,t,a){return s.map(i=>i.entry.path===t?{...i,...a}:i.children?{...i,children:G(i.children,t,a)}:i)}function Re({active:s=!0}){return e.jsx(Ne,{active:s})}const ze=Object.freeze(Object.defineProperty({__proto__:null,SessionsTab:Re},Symbol.toStringTag,{value:"Module"}));export{ve as P,ze as S,se as h};
@@ -0,0 +1 @@
1
+ import{j as s,r as j}from"./react-vendor-C7Sl8SE7.js";import{n as f,c as d,o as b,u as g,a as w,e as k}from"./index-BxuA85oI.js";import{S as u}from"./shared-rdDL3t6R.js";import"./router-Rwafsu7Y.js";function h(e){switch(e){case"ok":return"text-emerald-200";case"warn":return"text-amber-200";case"err":return"text-red-200";default:return"text-fg-2"}}function P(e){return e>=85?"bg-red-500 shadow-[0_0_8px_var(--th-err-glow)]":e>=65?"bg-amber-500 shadow-[0_0_8px_var(--th-warn-glow)]":"bg-primary shadow-[0_0_8px_var(--th-glow-a)]"}function m(e){return Number.isFinite(e??NaN)?Math.max(0,Math.min(100,Number(e))):null}function y(e){return Number.isFinite(e??NaN)?Number(e).toFixed(2):null}function $(e){return e?[e.hostName||"—",e.platform,e.arch].filter(Boolean).join(" · "):""}function S(e,t){if(!e)return[];const a=e.totalMem||0,i=e.memoryUsed||a-(e.freeMem||0),r=m(e.memoryPercent||(a>0?i/a*100:0)),n=m(e.cpuUsage?.usedPercent),l=e.loadAverage||null,o=y(l?.one),v=y(l?.five),N=y(l?.fifteen),x=m(l?l.one/Math.max(e.cpuCount||1,1)*100:null),p=[{key:"cpu",label:t("sessions.cpu"),value:n!=null?`${n.toFixed(0)}%`:`${e.cpuCount} cores`,detail:[`${e.cpuCount} cores`,e.cpuModel||""].filter(Boolean),tone:n!=null&&n>=85?"warn":"ok",progressPercent:n},...o&&v&&N?[{key:"cpu-load",label:t("system.cpuLoad"),value:`1m ${o}`,detail:[`5m ${v}`,`15m ${N}`],tone:x!=null&&x>=85?"warn":"muted",progressPercent:x}]:[],{key:"memory",label:t("sessions.memory"),value:`${b(i)} / ${b(a)}`,detail:r!=null?`${r.toFixed(0)}%`:void 0,tone:r!=null&&r>=85?"warn":"ok",progressPercent:r}];if(e.disk){const c=m(parseFloat(String(e.disk.percent).replace("%","")));p.push({key:"disk",label:t("sessions.disk"),value:`${e.disk.used} / ${e.disk.total}`,detail:e.disk.percent,tone:c!=null&&c>=85?"warn":"muted",progressPercent:c})}else if(e.battery){const c=m(parseFloat(String(e.battery.percent).replace("%","")));p.push({key:"battery",label:t("sessions.battery"),value:e.battery.percent,detail:e.battery.state,tone:c!=null&&c<=20?"warn":"muted",progressPercent:c})}return p}function F({items:e,loading:t,compact:a,className:i}){if(t){const r=a?2:4;return s.jsx("div",{className:d("grid gap-3 sm:grid-cols-2 xl:grid-cols-3",i),children:Array.from({length:r},(n,l)=>s.jsxs(u,{className:"space-y-3 !p-4",children:[s.jsx(f,{className:"h-3 w-14"}),s.jsx(f,{className:"h-5 w-24"}),s.jsx(f,{className:"h-2 w-full"})]},l))})}return s.jsx("div",{className:d("grid gap-3 sm:grid-cols-2 xl:grid-cols-3",i),children:e.map(r=>s.jsxs(u,{className:d("space-y-2.5 !p-4",a&&"!p-3.5"),children:[s.jsx("div",{className:"text-[10px] uppercase tracking-[0.14em] text-fg-5",children:r.label}),s.jsx("div",{className:d("text-[13px] font-medium leading-snug",h(r.tone),r.mono&&"font-mono text-[12px]"),children:r.value}),Array.isArray(r.detail)?s.jsx("div",{className:"space-y-1 text-[10px] leading-relaxed text-fg-5",children:r.detail.map(n=>s.jsx("div",{children:n},n))}):r.detail?s.jsx("div",{className:"text-[10px] leading-relaxed text-fg-5",children:r.detail}):null,r.progressPercent!=null&&s.jsx("div",{className:"h-1 overflow-hidden rounded-full bg-panel",children:s.jsx("div",{className:d("h-1 rounded-full transition-all duration-500",P(r.progressPercent)),style:{width:`${r.progressPercent.toFixed(0)}%`}})})]},r.key))})}function B({onOpenWorkdir:e}){const t=g(o=>o.state),a=g(o=>o.host),i=g(o=>o.locale),r=j.useMemo(()=>w(i),[i]),n=t?.bot?.workdir||t?.runtimeWorkdir||t?.config.workdir||"",l=$(a);return s.jsxs("div",{className:"animate-in space-y-3",children:[s.jsx(u,{className:"space-y-3",children:s.jsxs("div",{className:"flex flex-col gap-2 lg:flex-row lg:items-start lg:justify-between",children:[s.jsxs("div",{className:"min-w-0",children:[s.jsx("div",{className:"text-base font-semibold tracking-tight text-fg",children:r("config.workdir")}),s.jsx("div",{className:"mt-0.5 text-[13px] leading-relaxed text-fg-4",children:r("config.workspaceHint")}),s.jsx("div",{className:"mt-2.5 break-words font-mono text-[12px] leading-relaxed text-fg-2",children:n||r("sidebar.notSet")})]}),s.jsx(k,{variant:"outline",size:"sm",onClick:e,children:r("sidebar.switchDir")})]})}),s.jsxs(u,{className:"space-y-3",children:[s.jsxs("div",{className:"flex flex-col gap-2 lg:flex-row lg:items-start lg:justify-between",children:[s.jsxs("div",{className:"min-w-0",children:[s.jsx("div",{className:"text-base font-semibold tracking-tight text-fg",children:r("app.systemInfo")}),s.jsx("div",{className:"mt-0.5 text-[13px] leading-relaxed text-fg-4",children:l||r("status.loading")})]}),s.jsxs("div",{className:"text-[12px] leading-relaxed text-fg-5",children:[t?.version?`Pikiclaw v${t.version}`:"Pikiclaw",t?.nodeVersion?` · Node ${t.nodeVersion}`:""]})]}),s.jsx(F,{items:S(a,r),loading:!a})]})]})}export{B as SystemTab};
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Layer_1" viewBox="0 0 192 192"><defs><clipPath id="clippath"><path d="M164.93 86.68c-13.56-5.84-25.42-13.84-35.6-24.01-10.17-10.17-18.18-22.04-24.01-35.6-2.23-5.19-4.04-10.54-5.42-16.02C99.45 9.26 97.85 8 96 8s-3.45 1.26-3.9 3.05c-1.38 5.48-3.18 10.81-5.42 16.02-5.84 13.56-13.84 25.43-24.01 35.6-10.17 10.16-22.04 18.17-35.6 24.01-5.19 2.23-10.54 4.04-16.02 5.42C9.26 92.55 8 94.15 8 96s1.26 3.45 3.05 3.9c5.48 1.38 10.81 3.18 16.02 5.42 13.56 5.84 25.42 13.84 35.6 24.01 10.17 10.17 18.18 22.04 24.01 35.6 2.24 5.2 4.04 10.54 5.42 16.02A4.03 4.03 0 0 0 96 184c1.85 0 3.45-1.26 3.9-3.05 1.38-5.48 3.18-10.81 5.42-16.02 5.84-13.56 13.84-25.42 24.01-35.6 10.17-10.17 22.04-18.18 35.6-24.01 5.2-2.24 10.54-4.04 16.02-5.42A4.03 4.03 0 0 0 184 96c0-1.85-1.26-3.45-3.05-3.9-5.48-1.38-10.81-3.18-16.02-5.42" class="st0"/></clipPath><clipPath id="clippath-1"><path d="M164.93 86.68c-13.56-5.84-25.42-13.84-35.6-24.01-10.17-10.17-18.18-22.04-24.01-35.6-2.23-5.19-4.04-10.54-5.42-16.02C99.45 9.26 97.85 8 96 8s-3.45 1.26-3.9 3.05c-1.38 5.48-3.18 10.81-5.42 16.02-5.84 13.56-13.84 25.43-24.01 35.6-10.17 10.16-22.04 18.17-35.6 24.01-5.19 2.23-10.54 4.04-16.02 5.42C9.26 92.55 8 94.15 8 96s1.26 3.45 3.05 3.9c5.48 1.38 10.81 3.18 16.02 5.42 13.56 5.84 25.42 13.84 35.6 24.01 10.17 10.17 18.18 22.04 24.01 35.6 2.24 5.2 4.04 10.54 5.42 16.02A4.03 4.03 0 0 0 96 184c1.85 0 3.45-1.26 3.9-3.05 1.38-5.48 3.18-10.81 5.42-16.02 5.84-13.56 13.84-25.42 24.01-35.6 10.17-10.17 22.04-18.18 35.6-24.01 5.2-2.24 10.54-4.04 16.02-5.42A4.03 4.03 0 0 0 184 96c0-1.85-1.26-3.45-3.05-3.9-5.48-1.38-10.81-3.18-16.02-5.42" class="st0"/></clipPath><radialGradient id="radial-gradient" cx="-122.49" cy="-223.53" r="110.98" fx="-122.49" fy="-223.53" gradientTransform="matrix(1 0 0 -.54 0 -.93)" gradientUnits="userSpaceOnUse"><stop offset=".31" stop-color="#3186ff"/><stop offset=".42" stop-color="#4491ff"/><stop offset=".45" stop-color="#4c96ff"/><stop offset=".81" stop-color="#e7f1ff"/><stop offset=".89" stop-color="#fff"/></radialGradient><style>.st0{fill:none}</style></defs><g style="clip-path:url(#clippath)"><image xlink:href="data:image/jpeg;base64,/9j/4S5+aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA5LjEtYzAwMyAxLjAwMDAwMCwgMDAwMC8wMC8wMC0wMDowMDowMCAgICAgICAgIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBHSW1nPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvZy9pbWcvIgogICAgICAgICAgICB4bWxuczppbGx1c3RyYXRvcj0iaHR0cDovL25zLmFkb2JlLmNvbS9pbGx1c3RyYXRvci8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBJbGx1c3RyYXRvciAyOS42IChNYWNpbnRvc2gpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDI1LTA2LTI1VDExOjE4OjIxLTA3OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpUaHVtYm5haWxzPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOndpZHRoPjI1NjwveG1wR0ltZzp3aWR0aD4KICAgICAgICAgICAgICAgICAgPHhtcEdJbWc6aGVpZ2h0PjI1MjwveG1wR0ltZzpoZWlnaHQ+CiAgICAgICAgICAgICAgICAgIDx4bXBHSW1nOmZvcm1hdD5KUEVHPC94bXBHSW1nOmZvcm1hdD4KICAgICAgICAgICAgICAgICAgPHhtcEdJbWc6aW1hZ2U+LzlqLzRBQVFTa1pKUmdBQkFnRUFBQUFBQUFELzdRQXNVR2h2ZEc5emFHOXdJRE11TUFBNFFrbE5BKzBBQUFBQUFCQUFBQUFBQUFFQSYjeEE7QVFBQUFBQUFBUUFCLys0QURrRmtiMkpsQUdUQUFBQUFBZi9iQUlRQUJnUUVCQVVFQmdVRkJna0dCUVlKQ3dnR0JnZ0xEQW9LQ3dvSyYjeEE7REJBTURBd01EQXdRREE0UEVBOE9EQk1URkJRVEV4d2JHeHNjSHg4Zkh4OGZIeDhmSHdFSEJ3Y05EQTBZRUJBWUdoVVJGUm9mSHg4ZiYjeEE7SHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmLzhBQUVRZ0EvQUVBQXdFUiYjeEE7QUFJUkFRTVJBZi9FQWFJQUFBQUhBUUVCQVFFQUFBQUFBQUFBQUFRRkF3SUdBUUFIQ0FrS0N3RUFBZ0lEQVFFQkFRRUFBQUFBQUFBQSYjeEE7QVFBQ0F3UUZCZ2NJQ1FvTEVBQUNBUU1EQWdRQ0JnY0RCQUlHQW5NQkFnTVJCQUFGSVJJeFFWRUdFMkVpY1lFVU1wR2hCeFd4UWlQQiYjeEE7VXRIaE14Wmk4Q1J5Z3ZFbFF6UlRrcUt5WTNQQ05VUW5rNk96TmhkVVpIVEQwdUlJSm9NSkNoZ1poSlJGUnFTMFZ0TlZLQnJ5NC9QRSYjeEE7MU9UMFpYV0ZsYVcxeGRYbDlXWjJocGFtdHNiVzV2WTNSMWRuZDRlWHA3ZkgxK2YzT0VoWWFIaUltS2k0eU5qbytDazVTVmxwZVltWiYjeEE7cWJuSjJlbjVLanBLV21wNmlwcXF1c3JhNnZvUkFBSUNBUUlEQlFVRUJRWUVDQU1EYlFFQUFoRURCQ0VTTVVFRlVSTmhJZ1p4Z1pFeSYjeEE7b2JId0ZNSFI0U05DRlZKaWN2RXpKRFJEZ2hhU1V5V2lZN0xDQjNQU05lSkVneGRVa3dnSkNoZ1pKalpGR2lka2RGVTM4cU96d3lncCYjeEE7MCtQemhKU2t0TVRVNVBSbGRZV1ZwYlhGMWVYMVJsWm1kb2FXcHJiRzF1YjJSMWRuZDRlWHA3ZkgxK2YzT0VoWWFIaUltS2k0eU5qbyYjeEE7K0RsSldXbDVpWm1wdWNuWjZma3FPa3BhYW5xS21xcTZ5dHJxK3YvYUFBd0RBUUFDRVFNUkFEOEE5VTRxN0ZYWXE3RlhZcTdGWFlxNyYjeEE7RlhZcTdGWFlxN0ZYWXE2dUt0VnhTMVhBclJiRkxYTEZhYTU0cHB2bGlpbkJzVnBkWEZEZGNLdXhWdkZEc1ZkaXJzVmRpcnNWZGlycyYjeEE7VmRpcnNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmF4UzQ0cXNMWUVyR2ZBa0JZMHVDMlFpcHROamJJUlcrdU1GcDRYQ2NZMnZDcSYjeEE7TE5odGlZcWl5WWJZa0tnYkN4WEE0b2J3cTNpaDJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3VPS3RFNCYjeEE7cFdGc0NWSjVLWUxaZ0llU2NEdmtTV3lNVUhMZXFPK1FNbTZPTkJ5NmtvNzVFemJvNFVPZFZYeHlQRzJlQXVUVkZKNjQ4YURnUmNPbyYjeEE7QTk4bUpOTXNTT2h1UTNmSmd0RW9JdU9TdVN0cUlWbGJKTUNGNE9MRnZDcmVLSFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcTdGWCYjeEE7WXE3RlhZcTdGV3NVcldPQktpNzdZQ3pBUVZ4T0ZCM3lCTGRDQ1ZYZCtxMTN5cVVuTHg0a2t1OVVBSitMS1pUYzNIZ1NtNDFjYi9GbCYjeEE7Um01Y05PZzIxamY3V1E4UnZHblhSYXh2OXJDSnNaYWROTFBWUVNQaXl5TTNHeVlFL3NyOE1Cdm1SR1RyOG1KT3JhNERBYjVjQzRNNCYjeEE7bzZOOG1HZ2hYVnNMQmVEaFEyTVVPeFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4Vnh4Vm80cFVaR29NaVdZQ0N1SiYjeEE7d29PK1FKYm9SU0xVTlFDZzc1VEtUbjRzVEdkUjFXbGZpekduTjJlSEF4MjgxUWtuZktKVGRqandKVk5xREU5Y3FNbkxqaVF4dldyMSYjeEE7eVBFMkRHdmp2bUI2NFJKRXNTWjJXb055RytXeGs0bVhFeWpUTlEyRytaVUM2clBqWlRZWGxRTjh5NE9weXhUbUdjR21YQU9GSkdKSyYjeEE7TU5OUlZsZkRURmVEaWhkWEFyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJSeFNzZHFaRWxJQ0V1SmdvT1FNbTZFVSYjeEE7aTFDL0Noc3BsTnpzV05pT3E2cjF6R25OMitEQ3hhLzFJc1RtTktUdGNXRko1cm9zY3BKY3lNRU0wcE9SdHRFVm5NNEUwdVZ6aENDRSYjeEE7WGJUa01NdGc0K1FNajB5N0lwbWRpaTZmVUJsZW0zdXd6WVk0T2p6bFA3YTlHMitaQXh1dW5KTUlyc2VPSGdhVEpGeDNJd0dMRzBTayYjeEE7b09STVZ0V0RnNUdrcmdjQ1c4Q3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYxY0NyR2FtUkpaQUlXYWFsZDhwbE5zakZKdFF2TyYjeEE7S25mTVdlWnpNV05pV3E2Z2ZpM3pIbGxkdGd4TVAxSzlZazc1VVp1NXc0MGtubUpPVmt1ZENLR1pxNUZ1QVc0cGRnVnNaSU1TcnduNCYjeEE7c3lNY1hGeXlUbXhrSXBtMXdZM1I2ckl5Q3h1aUFOODJ1TEU4L3FNaWNRWDVIZk1vWVhYU3lKakRxUHZpY0xTWm8rRFVQZkt6aVJ4cCYjeEE7akJlVjc1VExHeUVrZkZjVnB2bEppMkNTS1NTdVZrTWdWUUhJcFhZRXV4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkJWak5USVNMSUJDeiYjeEE7VFVHWStUSlRiR0tWWGw1UUhmTmZsenVWanhzWjFUVU5qdm12bHFIWllNVEVOU3ZTUzIrQVpMZHZoeE1kdXBpekhMQVhaNDRvSjJyayYjeEE7bThCWml5ZGlyc0tGd3l5SWE1eVZvaHZtd3dZcmRicU10Qk1yWnFETjdwc0R6ZXJ6cGxCYzhhYjV1TVdCMEdmTWlrdmlPK1pJd3VETCYjeEE7S2lvdFNQamljTFVjaU90OVU5OHJsaFVaRTN0TlRyVGZNYWVGc2prVG0xdndhYjVpVHhOOFpwcmIzUUk2NWl5ZzNDU09qbEJ5a2hzQiYjeEE7VmdjZ2xkZ1M3RlhZcTdGWFlxN0ZYWXE3RlhZcXRZNUVsSVEwMGxCbU5rbTJ4Q1YzZHhTdSthek5sY21FRWh2N3Jydm1welpuUHhRWSYjeEE7dnFkeVRYTUtPUzNhWVlNWXZaU1NjeThaZHBpaWxNclZPWmtYTWlGQTVObTdGTHNLR3dNa0F4SlhLTjh5OE9PM0R6WktSRVM1dTlMZyYjeEE7ZEJxOVFpNHpRWjBPbnd2TWFyT3JDV21iU0dOMUdUSTc2eDc1Y01iaXltMnQxVHZrdkRhek5FdzMxTytWeXhyeHBuYWFoMDN6SG5pYiYjeEE7SXpUK3kxRGNiNWhaTVRreG15Q3l2UVFOOHdNbU55WVRUcTF1QVFOOHc1eGI0bE1JM3JsQkRhQ3JBNUJMZUJMc1ZkaXJzVmRpcnNWZCYjeEE7aXJqZ1ZTa2JiSzVsbUV1dTVhQTVyczgzSWhGSTcyYzc1cE5SbGMzSEZJcjJVbXVhckprYy9IRmp1b0VtdVF4bDJPSmoxM1dwelk0aSYjeEE7N0hHbDBnM3pOaVhLaXBVeWJKM0hDdHJndVNBWUdTNEljeXNlTzNGeTVhWHFtYmpUYWQwdXExVkt5aW1kRHB0Tzh6cTlVcWNzM1dMRiYjeEE7VG9jMmExcGt6TGpCd1pUV05KbGdpMUdTMzFUa3VGaHhMa25wZ01WNGtaQmRrRWI1VExHeUVrNXM3NDFHK1ltVEc1RVpzazA2L3dDbSYjeEE7K2EvTGpjcUUyUzZmZDFBM3pXNVlPWENTZTI4dGFaaFNpNUVTalVhb3lrdGdWTWlsMkt1eFYyS3V4VjJLdXhWbzRDbER6SFk1ajVDeiYjeEE7aWxGNi9YTlJxWk9aakNSWGtoM3pSWjVPZGpDVDNKSnJtdGxKeklKUGVSazF5VUM1bU1wRmRRbXB6T3h6Yy9ISkxaWVRYTTJNM0tqSiYjeEE7UzlJNWFKc3VKc1FuSmlUQ1dSZUlUbVZpamJpNWM0QzcwcVp1Tk5ndDFHcDFRZFNtZEhwZE04M3E5VzBXcG03dzRhZERuejJ0TDVuUiYjeEE7ZzYrYzFoZkxRR2t5V0ZzblRBbGJ5eFJiZzJLRlJaQ01CQ2JUTzJ1Q0NOOHhwd2JveVpCcDEyZHQ4d2NzSEpoSmxXbDNWYWI1cTgwSCYjeEE7TXh5WlBaVFZwbXR5UmN1SlRhRnFqTVdRYndpTXJaT3hWMkt1eFYyS3V4VjJLdEhwZ0tVTlAwT1kyUnNpa3Q5M3pTNmx6Y1NRM2VhTCYjeEE7TzUyTkxaUlhOZEp5b29HZUtvd1JMZkdTV1QybGE3Wmt3bTVNTWlBbHN0K21aTWNyZU1xaWJIMnkwWlVuTTE5VXBtVmlsYmpaTlJUaiYjeEE7QUJtOTBtTzNVYW5XS01pQVoxR2t3T2cxT3N0RE9RTTZMQmlkSG16Mm9NMmJDRUhBbk8xaGJMZ0dvbGFUaFkyMVhDaHJGWFlvYnJpcSYjeEE7TGhlaEdWU0RZQ25WaEtkc3c4c1crQlpWcFUzVGZOWm5pNW1Nc3QwK1N0TTFXVU9kQXA5YnRzTXdaT1JGRzVTMk94VjJLdXhWMkt1eCYjeEE7VjJLdEhBVW9lWWJITWZJR2NVb3ZVNjVxTlRGek1aU0c3ajY1b3M4WE94bExKVjN6V1REbFJLSFpLNVRiWUNwTmJnNU1TWkNhaTFrRCYjeEE7MnlZbW54VkY3SUR0bDBKdGM4NkVtZ0MxMnpaNll1dHo2bEFUQ21kWm9BNkhVNm9vS1k1MTJraUhUNWN4S0NsYmZON2lEaHluYWd4eiYjeEE7TEFhU1ZwT1NRMWlyc1VPeFYyS3V4VkVSSGNaQXN3bTFpZHhtTGtib01xMGttb3pXWjNNeHN3MDA5TTFHVnpvTWh0ZWd6QW01VVVmbCYjeEE7RFk3RlhZcTdGWFlxN0ZYWXE0NEZVcEYyeXFZWmdwYmR4VkJ6WFo0T1JDU1Mza0J6UzZqRTV1T1NVendFSE5UbHh1WEdTRk1lWUpEWiYjeEE7eE9DREJURXpiTWVTQWFwWkZHV0xicGwwQTR1VEtsbDFFZDgydW1McTgrUkpybFNDYzZyUTVLZExta2wwMWQ4NjdSNUhYektFa0diLyYjeEE7QUF5YWlvTm1aRXNGdVRRMWlyc1ZkaXJzVmRpcUlpRzR5RW1ZVGV4WGNaaVpDM1FaVnBLOU0xbWN1YmpaanB5OU0xT1V1ZEJrRnNOaCYjeEE7bUJOeVlvN0tHeDJLdXhWMkt1eFYyS3V4VjJLcldHUklTRU5OSFVaalpJTnNTbHR6YkE1cmMyRnlJVFNxNHRldWFuUGdjcU9STFpZSyYjeEE7WnFaNFczeEZBclRLamphcFpIREVSYUpaSFBHQ01zaUdpY2tCZFFiSE16REtuQnlwSmVXOUNjMzJreTA2dkxGSjdtT2hPZFZvczdneiYjeEE7Q0JrWE9tMCtWcEtneTV0Y2MyQ21SbDRLR3FZVmR2aWhyRlhZcTdGVVpDdnhES3BGc0FUblQ0OXhtSGxMZkFNdDBtUHBtcnpsemNZWiYjeEE7ZHA2ZE0xV1V1YkFKN2JqWVpneWNrSXZLbWJzVmRpcnNWZGlyc1ZkaXJzVmRnVll5MXlFb3NnVVBMQ0NNb25qdG1KSUM0dGRqdG1EbCYjeEE7d053eUpQZVcvR3UyYXZKcGtuS2s4L3drNWhUd1UwU3pLSWxGY3g1WTJ2eFZkWEJHVjhMTGp0VG1WU01zZ1d1YVQza1EzelpZSjA2LyYjeEE7S0Vpdkk2RTUwV2p6T3V5Qks1VjN6cWRMbmNZcUJTcHplWWN6Qm93bk0yT1JhYU1CeTBUV2xwaE9TNGtVMTZMZUdQRXRPOUZ2REhpVyYjeEE7bkNFNDhTMG1NRnVhamJNZVUyMFJUelQ3YzdiWmhaWnVSQ0xLdEtncFRiTlptazVtTU1yc1k2QVpxOGhjMkFUaUViWmlTYndpTXJaTyYjeEE7eFYyS3V4VjJLdXhWMkt1eFYyS3V3S3RaY0JDYlE4MGUyVlNndkVrdW9vQURtSGt4TlU1c1d2bTRrNWdaY0xoeXlwVTF5QTNYTURKaSYjeEE7WURNaUlyc2VPWWtzYmZITXFHNUJIWElpRE01VURkU2cxekt4QnhjazBrdkdCcm00MDBxZGZrS1Z5OWM2RFRabkdKVTFXcHplWWM3RiYjeEE7RXh3VkhUTmhET3pBUkNXUmJ0bVFNek1SWC9vMG50bGd6SjRHdjBZZkRENHkrRzEraXo0WStNdmhybDBzK0dBNWsrR2o0TlBhbzJ5bSYjeEE7V1ZzRUU1c2JFaW0yWWVUSTVFSU1qMDYySXB0bXZ5emNxRVdRMnNkS1pnVExreENaUmpiTWN0b1ZjZ3lkaXJzVmRpcnNWZGlyc1ZkaSYjeEE7cnNWZGlyc1ZVcFJ0a1NFRkpkVEh3bktwUmNYS1dHYW9TQzJZbVNEcmNrbU9YRXhESGZNREpqY2M1RnFYaEhmTVdXSm5ITXFpKzI2NSYjeEE7WDRUWjR5akxkMTc1WkdEQ1dWQVR5MXpNeGJPUEtTQ2MxT2JMRmtwcEpiaVhmTm5pem9UV3pnNVV6WVk5UTNRVHUxc09RRzJaVWM3bCYjeEE7UWlqazBxbzZaWU03Y01hLzlFZjVPUzhkbDRidjBSN1krT3ZocmwwajJ3SE9udzBWRnBWRDB5dVdabU1hWTIyblU3Wmp6eXRrWUp0YSYjeEE7MnZHbTJZczV0OFlwbkRGVE1hUmJRRVNveW9zMStCTHNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXF5VHBnUVVuMUZLcWNnWEZ5aGhlciYjeEE7eG1yWmp6RHE4b1lsZTFESE1TY1hDa1VDWlNNeHBRUnhPK3NIeHlIQW5pV21jbkNJbzRsSjNybHNXSkttZDh2akpDdEF2eFpsUXlLbiYjeEE7K25RMXB0bWJESzM0d3l2VHJNRURiTXFPVjJHS0tkUTZlS2RNc0dWekJCV0duRHd3K0t5NEcvMGNQREQ0cThEWTA0ZUdEeFU4Q3FsZyYjeEE7QjJ5SnlwNEVSSGFBZHNyTTJZaWlvNEFNck1tUUNJVmFaV1N6WGdZRXQ0RmRpcnNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZXdU5zVUpkZiYjeEE7UjFVNUV0R1FNUzFlMysxbE1nNjNORmhlcFEwWTVqVERyWmhKcFZJT1k4ZzFxSkp5dWxXazQwcnE0VmJVVk9UQ295MWpxd3k2Q2hsRyYjeEE7azI5YVpsUUxsNGd6UFM3Y2NWMnpJaVhaNG9wOURBS2RNczRuTWlGYjBGOE1QRXpwM29qSGlXbS9SSGhqeExUWWlHRGlUUzRSakJhMCYjeEE7dkM0TFMyQmdTM2lyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWYUl4VkRYRWZJSEFXdVFTRFVySXNHeXFUaDVNVnNPMWJUVzNPWSYjeEE7ODNYWk1CWXpkMlRLY3g1T0xMRlNYUEVRY3JMWHdxWkJ3SXBzS1RpdEs4TUJZNUlNaEMwNDAvVDJaaGwwVzZHRWxsK2xhY3dBNlpreCYjeEE7YzdGZ1paWVd4VlJsNGRoamhTYXhwUVpOeUFGU21LWFV3cGRURlhVd0szVEZYWXE3RlhZcTdGWFlxN0ZYWXE3RlhZcTdGWFlxN0ZYWSYjeEE7cTdGWFlxc2RhakFncGZkUVZCMnlKRFZJTWIxT3lxRHRsRW91SmtneFhVYkE3N1pqeWk0T1NDUTNGb1FlbVZFT05LS0VhM2F2VEkwMSYjeEE7OEs1TFppZW1OSkVVeXM3SmlSdGxnaTNRZ3lUVExBMUcyWFJpNWVPREs5UHRhS05zeUloem9SVHkzam9CbG9Ea1JDS0F5VE52RkxzViYjeEE7ZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWYUl4VlNranFNQllrSlplV2dZSGJLeUdtVVVndjlOciYjeEE7WGJLcFJjV2VOSUx2U3R6dGxKZzRzc1NYdnBKcjB5SEExbkVxUTZTYWpiQ0lKR0pON0xTcUViWlpHRGZER3lDeDAvalRiTG94Y3FFRSYjeEE7OHRyY0tPbVdnT1RHS05SYURKTmdYNFV1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4ViYjeEE7b2pGQ2pMRURncEJDQXVMTU1PbVFJYXBRUzJmVEFUMHlCaTBuR2cyMGdWNlpIZ1llRXFSNlNBZW1JZ2tZa2ZiNmNGcHRreEZ0akJNbyYjeEE7TFlMMnlZRGFJb3RFb01rMkFLZ0dGTHNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaSYjeEE7cnNWYUl4Vll5QTRFVXBOQUQyd1V4cFROcXZoalNPRnRiWmZER2w0VlZJUU8yR21WS29VREZLNm1GTHNWZGlyc1ZkaXJzVmRpcnNWZCYjeEE7aXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkaXJzVmRpcnNWZGlyc1ZkVEZXcVlxN2lNVmR4eFZ1bUt1eFYyS3V4VjJLdXhWMiYjeEE7S3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYySyYjeEE7dXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdSYjeEE7eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eCYjeEE7VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4ViYjeEE7Mkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMiYjeEE7S3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYySyYjeEE7dXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3V4VjJLdXhWMkt1eFYyS3YvL1o8L3htcEdJbWc6aW1hZ2U+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwveG1wOlRodW1ibmFpbHM+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMjUtMDYtMjVUMTE6MTg6MjEtMDc6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDI1LTA2LTI1VDE4OjE4OjIxWjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDxpbGx1c3RyYXRvcjpJc0ZpbGVTYXZlZFZpYUluc3RhbnRTYXZlPkZhbHNlPC9pbGx1c3RyYXRvcjpJc0ZpbGVTYXZlZFZpYUluc3RhbnRTYXZlPgogICAgICAgICA8ZGM6Zm9ybWF0PkpQRUcgZmlsZSBmb3JtYXQ8L2RjOmZvcm1hdD4KICAgICAgICAgPHhtcE1NOkRlcml2ZWRGcm9tIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIi8+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6ZGIwOGM4MWEtM2Q1My00M2ViLTg3NzUtZDY0N2IxMjUzMGM1PC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOmRiMDhjODFhLTNkNTMtNDNlYi04Nzc1LWQ2NDdiMTI1MzBjNTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOmRiMDhjODFhLTNkNTMtNDNlYi04Nzc1LWQ2NDdiMTI1MzBjNTwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6ZGIwOGM4MWEtM2Q1My00M2ViLTg3NzUtZDY0N2IxMjUzMGM1PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDI1LTA2LTI1VDExOjE4OjIxLTA3OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBJbGx1c3RyYXRvciAyOS42IChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg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" width="472" height="461" transform="translate(-187.2 -95.81)"/><g style="clip-path:url(#clippath-1)"><path d="M-321.98 8h221.96v221.96h-221.96z" style="fill:url(#radial-gradient)"/></g><path d="M164.93 86.68c-13.56-5.84-25.42-13.84-35.6-24.01-10.17-10.17-18.18-22.04-24.01-35.6-2.23-5.19-4.04-10.54-5.42-16.02C99.45 9.26 97.85 8 96 8s-3.45 1.26-3.9 3.05c-1.38 5.48-3.18 10.81-5.42 16.02-5.84 13.56-13.84 25.43-24.01 35.6-10.17 10.16-22.04 18.17-35.6 24.01-5.19 2.23-10.54 4.04-16.02 5.42C9.26 92.55 8 94.15 8 96s1.26 3.45 3.05 3.9c5.48 1.38 10.81 3.18 16.02 5.42 13.56 5.84 25.42 13.84 35.6 24.01 10.17 10.17 18.18 22.04 24.01 35.6 2.24 5.2 4.04 10.54 5.42 16.02A4.03 4.03 0 0 0 96 184c1.85 0 3.45-1.26 3.9-3.05 1.38-5.48 3.18-10.81 5.42-16.02 5.84-13.56 13.84-25.42 24.01-35.6 10.17-10.17 22.04-18.18 35.6-24.01 5.2-2.24 10.54-4.04 16.02-5.42A4.03 4.03 0 0 0 184 96c0-1.85-1.26-3.45-3.05-3.9-5.48-1.38-10.81-3.18-16.02-5.42" class="st0"/></g></svg>