PageSourceSearch

https://porfoli.com/_next/static/chunks/8028.7a09544064168aea.js

js porfoli.com collected 2026-10-02 00:58:21 UTC 36,827 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8028],{18028:(e,t,s)=>{s.r(t),s.d(t,{SettingsPage:()=>ea});var a=s(54568),n=s(80416),i=s(37887),o=s(46709),r=s(3132),l=s(91292),c=s(22905),d=s(66285),g=s(4163);let m=(0,g.A)("Monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);var u=s(49951),p=s(76197);let h=(0,g.A)("BrainCircuit",[["path",{d:"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z",key:"l5xja"}],["path",{d:"M9 13a4.5 4.5 0 0 0 3-4",key:"10igwf"}],["path",{d:"M6.003 5.125A3 3 0 0 0 6.401 6.5",key:"105sqy"}],["path",{d:"M3.477 10.896a4 4 0 0 1 .585-.396",key:"ql3yin"}],["path",{d:"M6 18a4 4 0 0 1-1.967-.516",key:"2e4loj"}],["path",{d:"M12 13h4",key:"1ku699"}],["path",{d:"M12 18h6a2 2 0 0 1 2 2v1",key:"105ag5"}],["path",{d:"M12 8h8",key:"1lhi5i"}],["path",{d:"M16 8V5a2 2 0 0 1 2-2",key:"u6izg6"}],["circle",{cx:"16",cy:"13",r:".5",key:"ry7gng"}],["circle",{cx:"18",cy:"3",r:".5",key:"1aiba7"}],["circle",{cx:"20",cy:"21",r:".5",key:"yhc1fs"}],["circle",{cx:"20",cy:"8",r:".5",key:"1e43v0"}]]);var x=s(67275),b=s(58855),f=s(59629),y=s(42368),v=s(8860);let j=(0,g.A)("Bell",[["path",{d:"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9",key:"1qo2s2"}],["path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0",key:"qgo35s"}]]),w=(0,g.A)("Volume2",[["polygon",{points:"11 5 6 9 2 9 2 15 6 15 11 19 11 5",key:"16drj5"}],["path",{d:"M15.54 8.46a5 5 0 0 1 0 7.07",key:"ltjumu"}],["path",{d:"M19.07 4.93a10 10 0 0 1 0 14.14",key:"1kegas"}]]),S=(0,g.A)("Languages",[["path",{d:"m5 8 6 6",key:"1wu5hv"}],["path",{d:"m4 14 6-6 2-3",key:"1k1g8d"}],["path",{d:"M2 5h12",key:"or177f"}],["path",{d:"M7 2h1",key:"1t2jsx"}],["path",{d:"m22 22-5-10-5 10",key:"don7ne"}],["path",{d:"M14 18h6",key:"1m8k6r"}]]),k=(0,g.A)("ZoomIn",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"11",x2:"11",y1:"8",y2:"14",key:"1vmskp"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]]);var C=s(99485),N=s(95226),A=s(62321),P=s(23255),M=s(20720);let I=(0,g.A)("Bug",[["path",{d:"m8 2 1.88 1.88",key:"fmnt4t"}],["path",{d:"M14.12 3.88 16 2",key:"qol33r"}],["path",{d:"M9 7.13v-1a3.003 3.003 0 1 1 6 0v1",key:"d7y7pr"}],["path",{d:"M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6",key:"xs1cw7"}],["path",{d:"M12 20v-9",key:"1qisl0"}],["path",{d:"M6.53 9C4.6 8.8 3 7.1 3 5",key:"32zzws"}],["path",{d:"M6 13H2",key:"82j7cp"}],["path",{d:"M3 21c0-2.1 1.7-3.9 3.8-4",key:"4p0ekp"}],["path",{d:"M20.97 5c0 2.1-1.6 3.8-3.5 4",key:"18gb23"}],["path",{d:"M22 13h-4",key:"1jl80f"}],["path",{d:"M17.2 17c2.1.1 3.8 1.9 3.8 4",key:"k3fwyw"}]]);var L=s(7620),U=s(31358),z=s(99897),D=s(98210),E=s(56894),q=s(28527),G=s(95658),R=s(97253),$=s(67986),B=s(39224),F=s(77709),T=s(43153),_=s(73818),O=s(3995),V=s(96603),Z=s(95245),K=s(87816),H=s(1277),Q=s(81837),W=s(78453),Y=s(35312),J=s(17142),X=s(28208);let ee=[{section:"general",label:"General",keywords:["notifications","sound","startup","account","about","version","electron","license","updates"],Icon:c.A},{section:"profile",label:"Profile",keywords:["name","bio","username","avatar"],Icon:d.A},{section:"appearance",label:"Appearance",keywords:["theme","font","scale","zoom","density"],Icon:m},{section:"usage",label:"Usage",keywords:["plan","budget","tokens","billing"],Icon:u.A},{section:"agent",label:"Agent",keywords:["approval","tools","context","routine"],Icon:p.A},{section:"models",label:"Models",keywords:["gemini","claude","openai","picker"],Icon:h},{section:"connections",label:"Connections",keywords:["broker","snaptrade","accounts","api"],Icon:x.A},{section:"privacy",label:"Privacy",keywords:["data","retention","training","delete","crash","reports"],Icon:b.A}],et={general:()=>(0,n.t)({message:"General",desc:"Settings: nav — General section"}),profile:()=>(0,n.t)({message:"Profile",desc:"Settings: nav — Profile section"}),appearance:()=>(0,n.t)({message:"Appearance",desc:"Settings: nav — Appearance section"}),usage:()=>(0,n.t)({message:"Usage",desc:"Settings: nav — Usage section"}),agent:()=>(0,n.t)({message:"Agent",desc:"Settings: nav — Agent section"}),models:()=>(0,n.t)({message:"Models",desc:"Settings: nav — Models section"}),connections:()=>(0,n.t)({message:"Connections",desc:"Settings: nav — Connections section"}),privacy:()=>(0,n.t)({message:"Privacy",desc:"Settings: nav — Privacy section"})},es={about:"general"},ea=()=>{let e=(0,Z.R)(),t=(0,U.Zp)(),s=(0,U.zy)(),i=(0,U.g)(),[o,r]=L.useState(""),l="darwin"===e.platform,c="win32"===e.platform,d=(e=>{if(e)return ee.some(t=>t.section===e)?e:es[e]})(i.section),g=d??"general",m=o.trim().toLowerCase(),u=ee.filter(e=>[e.label,...e.keywords].some(e=>e.toLowerCase().includes(m)));return i.section&&!d?(0,a.jsx)(X.g2,{}):(0,a.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col bg-[#121313]",children:[(0,a.jsxs)("header",{className:(0,W.cn)("desktop-titlebar shell-titlebar-height flex shrink-0 items-center border-b border-white/[0.07] bg-[#111212] pr-2",l?"mac-native-control
1s-padding":"pl-2",c&&"windows-native-controls-padding"),children:[(0,a.jsxs)("button",{type:"button",onClick:()=>"default"===s.key?t("/workbench",{replace:!0}):t(-1),className:"flex h-8 items-center gap-2 rounded-md px-2 text-sm text-white/55 hover:bg-white/[0.05] hover:text-white/80",children:[(0,a.jsx)(f.A,{className:"size-[18px]"}),(0,a.jsx)(n.Pft,{id:"PSGfUC",message:"Back",context:"Settings: header \\u2014 back button"})]}),(0,a.jsx)("div",{className:"mx-2 h-5 w-px bg-white/[0.08]"}),(0,a.jsx)("span",{className:"text-sm font-medium text-white/70",children:(0,a.jsx)(n.Pft,{id:"Eg7W5C",message:"Settings",context:"Settings: header \\u2014 title"})})]}),(0,a.jsxs)("div",{className:"flex min-h-0 flex-1",children:[(0,a.jsxs)("aside",{className:"flex w-[286px] shrink-0 flex-col border-r border-white/[0.07] bg-[#111212] px-2 pb-2",children:[(0,a.jsxs)("label",{className:"mt-4 flex h-8 items-center gap-2 rounded-md border border-white/[0.08] bg-white/[0.045] px-2 text-white/55 focus-within:border-white/20",children:[(0,a.jsx)(y.A,{className:"size-[18px]"}),(0,a.jsx)("input",{value:o,onChange:e=>r(e.target.value),placeholder:(0,n.t)({message:"Search settings",desc:"Settings: sidebar — search placeholder"}),"aria-label":(0,n.t)({message:"Search settings",desc:"Settings: sidebar — search input a11y label"}),className:"min-w-0 flex-1 bg-transparent text-sm text-white/70 outline-none placeholder:text-white/50"})]}),(0,a.jsx)("nav",{className:"mt-4 space-y-0.5","aria-label":(0,n.t)({message:"Settings",desc:"Settings: sidebar — navigation landmark label"}),children:u.map(e=>(0,a.jsxs)(q.E,{to:`/settings/${e.section}`,replace:!0,current:e.section===g,rowClassName:"h-8",linkClassName:"flex h-full w-full flex-1 items-center gap-2 rounded-md px-2 text-left text-sm",children:[(0,a.jsx)(e.Icon,{className:"size-[18px]"}),et[e.section]()]},e.section))}),(0,a.jsx)("div",{className:"flex-1"}),(0,a.jsx)("button",{type:"button",onClick:()=>void e.auth.signOut(),className:"h-8 rounded-md px-2 text-left text-sm text-white/65 hover:bg-white/[0.05] hover:text-white/85 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-400",children:(0,a.jsx)(n.Pft,{id:"S6mXkB",message:"Log out",context:"Settings: sidebar \\u2014 log out button"})})]}),(0,a.jsx)("main",{className:"min-w-0 flex-1 overflow-y-auto px-8 pb-16 pt-8",children:(0,a.jsx)("div",{className:"mx-auto w-full max-w-[760px]",children:(0,a.jsx)(en,{section:g})})})]})]})},en=({section:e})=>{switch(e){case"profile":return(0,a.jsx)(er,{});case"appearance":return(0,a.jsx)(el,{});case"usage":return(0,a.jsx)(eg,{});case"agent":return(0,a.jsx)(ec,{});case"models":return(0,a.jsx)(ed,{});case"connections":return(0,a.jsx)(em,{});case"privacy":return(0,a.jsx)(eu,{});default:return(0,a.jsx)(eo,{})}},ei=({children:e})=>(0,a.jsx)("h1",{className:"mb-5 text-base font-semibold text-white/85",children:e}),eo=()=>{let e=(0,Z.R)(),t=(0,J.$)(e=>e.systemNotifications),s=(0,J.$)(e=>e.completionSound),i=(0,J.$)(e=>e.setSystemNotifications),o=(0,J.$)(e=>e.setCompletionSound),r=(0,K.Ym)(),l=(0,K.qB)(),[c,d]=L.useState(null),g=(0,V.b)(),m="web"===e.identity.surface;L.useEffect(()=>{e.about.getInfo().then(d)},[e.about]);let u=null===g||"checking"===g.state||"downloading"===g.state||"unsupported"===g.state,p=async e=>{if(!e)return void i(!1);let t=(0,Q.r)();if("granted"===t)return void i(!0);if("default"===t){try{let e=await Notification.requestPermission();i("granted"===e)}catch{i(!1)}return}i(!1)},h=(0,Q.r)();return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(ei,{children:(0,a.jsx)(n.Pft,{id:"70yAlD",message:"General",context:"Settings: General section \\u2014 title"})}),(0,a.jsxs)(eh,{label:(0,n.t)({message:"About",desc:"Settings: General — about group"}),children:[(0,a.jsx)(ex,{Icon:E.z,title:c?.productName??(0,n.t)({message:"Porfoli",desc:"Settings: About — product name while host details load"}),description:c?c.runtime?(0,n.t)({message:"Version {version} \xb7 {runtime} {runtimeVersion}",desc:"Settings: About — version and host runtime line",values:{version:c.version,runtime:c.runtime.name,runtimeVersion:c.runtime.version}}):(0,n.t)({message:"Version {version}",desc:"Settings: About — version line without a host runtime",values:{version:c.version}}):(0,n.t)({message:"Loading version…",desc:"Settings: About — version loading"})}),(0,a.jsx)(ex,{Icon:v.A,title:(0,n.t)({message:"Updates",desc:"Settings: About — updates row title"}),description:m?(0,n.t)({message:"Porfoli Web updates automatically. Reload this page to use the latest version.",desc:"Settings: About — web update behavior"}):ep(g),children:!m&&(g?.state==="downloaded"?(0,a.jsx)("button",{type:"button",className:"settings-button",onClick:()=>void e.updates.restartToInstall().catch(()=>void 0),children:(0,a.jsx)(n.Pft,{id:"J8l05B",message:"Restart to update",context:"Settings: About \\u2014 restart to install button"})}):(0,a.jsx)("button",{type:"button",className:"settings-button",disabled:u,onClick:()=>void e.updates.check().catch(()=>void 0),children:(0,a.jsx)(n.Pft,{id:"V3jSMC",message:"Check for updates",context:"Settings: About \\u2014 check for updates button"})}))})]}),(0,a.jsxs)(eh,{label:(0,n.t)({message:"Notifications",desc:"Settings: General — notifications group"}),children:[(0,a.jsx)(ex,{Icon:j,title:(0,n.t)({message:"System notifications",desc:"Settings: General — system notifications toggle label"}),description:"denied"===h?(0,n.t)({message:"Notifications are blocked in system settings. Allow Porfoli there before enabling them.",desc:"Settings: General — notifications blocked in system settings"}):"unsupported"===h?(0,n.t)({message:"System notifications are unavailable in this environment.",desc:"Settings: General — notifications unsupported"}):(0,n.t)({message:"Notify you when an agent finishes while Porfoli is in the background.",desc:"Settings: General — notifications enabled help"}),children:(0,a.jsx)(eb,{label:(0,n.t)({message:"System notifications",desc:"Settings: General — system notifications switch a11y label"}),checked:t&&"granted"===h,onChange:p})}),(0,a.jsx)(ex,{Icon:w,title:(0,n.t)({message:"Completion sound",desc:"Settings: General — completion sound toggle label"}),description:(0,n.t)({message:"Play a short sound when an agent turn finishes.",desc:"Settings: General — completion sound help"}),children:(0,a.jsx)(eb,{label:(0,n.t)({message:"Completion sound",desc:"Settings: General — completion sound switch a11y label"}),checked:s,onChange:o})})]}),(0,a.jsx)(eh,{label:(0,n.t)({message:"Language",desc:"Settings: General — language group"}),children:(0,a.jsx)(ex,{Icon:S,title:(0,a.jsx)(n.Pft,{id:"GxtHIC",message:"Language",context:"Settings: General \\u2014 language row label"}),description:(0,a.jsx)(n.Pft,{id:"fqVzcV",message:"Choose the language for menus, labels, and messages.",context:"Settings: General \\u2014 language row description"}),children:(0,a.jsx)("select",{value:r,onChange:e=>{l(e.target.value)},className:"settings-select max-w-[220px]","aria-label":(0,n.t)({message:"Language",desc:"Settings: General — language select a11y label"}
1),children:n.SUPPORTED_LOCALES.map(e=>(0,a.jsx)("option",{value:e,children:n.LOCALE_LABELS[e]},e))})})})]})},er=()=>{let e=(0,l.jE)(),t=(0,F.Jd)(),s=(0,_.e)(),c=s.data?.username?.trim(),d=s.data?.displayName?.trim()||c||t.displayName||t.email?.split("@")[0]||(0,n.t)({message:"Porfoli user",desc:"Settings: profile — fallback display name"}),g=s.data?.photoURL??t.photoURL,[m,u]=L.useState(!1),[p,h]=L.useState(d),[x,b]=L.useState(s.data?.bio??""),[f,y]=L.useState({type:"idle"}),v=async()=>{if(!s.data)return void y({type:"error",message:(0,n.t)({message:"Your Porfoli profile must finish loading before it can be edited.",desc:"Settings: profile — save blocked while identity loads"})});let a=p.trim(),r=x.trim();if(!a||a.length>30)return void y({type:"error",message:(0,n.t)({message:"Display name must contain 1 to 30 characters.",desc:"Settings: profile — display name length error"})});if(r.length>200)return void y({type:"error",message:(0,n.t)({message:"Bio cannot be longer than 200 characters.",desc:"Settings: profile — bio length error"})});y({type:"saving"});try{await (0,o.mZ)((0,o.H9)((0,$.zT)(),"users",t.uid),{displayName:a,bio:r||null}),await (0,i.r7)(t,{displayName:a}),await Promise.all([e.invalidateQueries({queryKey:O.l.identity.current(t.uid)}),e.invalidateQueries({queryKey:O.l.profile.all})]),u(!1),y({type:"saved",message:(0,n.t)({message:"Profile saved.",desc:"Settings: profile — save success"})})}catch(e){y({type:"error",message:e instanceof Error?e.message:(0,n.t)({message:"Profile could not be saved.",desc:"Settings: profile — save failure fallback"})})}};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(ei,{children:(0,a.jsx)(n.Pft,{id:"h3qvQB",message:"Profile",context:"Settings: Profile section \\u2014 title"})}),(0,a.jsxs)(eh,{children:[(0,a.jsxs)("div",{className:"flex items-center gap-4 px-4 py-4",children:[g?(0,a.jsx)("img",{src:g,alt:"",className:"size-12 rounded-full object-cover"}):(0,a.jsx)("span",{className:"flex size-12 items-center justify-center rounded-full bg-emerald-400/15 text-base font-semibold text-emerald-300",children:d.slice(0,1).toUpperCase()}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)("div",{className:"truncate text-sm font-medium text-white/80",children:d}),(0,a.jsx)("div",{className:"mt-0.5 truncate text-xs text-white/55",children:c?`@${c}`:(0,n.t)({message:"Profile identity unavailable",desc:"Settings: profile — missing username"})}),(0,a.jsx)("div",{className:"mt-0.5 truncate text-xs text-white/45",children:t.email??t.uid})]})]}),m?(0,a.jsxs)("div",{className:"space-y-4 border-t border-white/[0.08] px-4 py-4",children:[(0,a.jsxs)("label",{className:"block",children:[(0,a.jsx)("span",{className:"mb-1.5 block text-xs font-medium text-white/55",children:(0,a.jsx)(n.Pft,{id:"rhS_dC",message:"Display name",context:"Settings: profile \\u2014 display name field label"})}),(0,a.jsx)("input",{value:p,maxLength:30,onChange:e=>h(e.target.value),className:"h-9 w-full rounded-md border border-white/10 bg-[#181919] px-3 text-sm text-white/80 outline-none focus:border-emerald-400/50"})]}),(0,a.jsxs)("label",{className:"block",children:[(0,a.jsx)("span",{className:"mb-1.5 block text-xs font-medium text-white/55",children:(0,a.jsx)(n.Pft,{id:"RL1WnD",message:"Bio",context:"Settings: profile \\u2014 bio field label"})}),(0,a.jsx)("textarea",{value:x,maxLength:200,rows:4,onChange:e=>b(e.target.value),className:"w-full resize-y rounded-md border border-white/10 bg-[#181919] px-3 py-2 text-sm leading-5 text-white/80 outline-none focus:border-emerald-400/50"}),(0,a.jsxs)("span",{className:"mt-1 block text-right text-xs tabular-nums text-white/50",children:[x.length,"/200"]})]}),(0,a.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,a.jsx)("button",{type:"button",className:"settings-button",disabled:"saving"===f.type,onClick:()=>{u(!1),y({type:"idle"})},children:(0,a.jsx)(n.Pft,{id:"nlMdCD",message:"Cancel",context:"Settings: profile \\u2014 cancel edit button"})}),(0,a.jsx)("button",{type:"button",className:"settings-button bg-white text-black hover:bg-white/90 hover:text-black",disabled:"saving"===f.type,onClick:()=>void v(),children:"saving"===f.type?(0,a.jsx)(n.Pft,{id:"_d-N7B",message:"Saving...",context:"Settings: profile \\u2014 saving in progress"}):(0,a.jsx)(n.Pft,{id:"1FyMfC",message:"Save profile",context:"Settings: profile \\u2014 save profile button"})})]})]}):(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2 border-t border-white/[0.08] px-4 py-3",children:[(0,a.jsx)("button",{type:"button",className:"settings-button",disabled:!s.isSuccess,onClick:()=>{let e=s.data;e&&(y({type:"idle"}),h(e.displayName?.trim()||e.username?.trim()||d),b(e.bio??""),u(!0))},children:(0,a.jsx)(n.Pft,{id:"DZXY7C",message:"Edit profile",context:"Settings: profile \\u2014 edit profile button"})}),c&&(0,a.jsx)(z.N_,{to:(0,r.U2)(c),className:"settings-button",children:(0,a.jsx)(n.Pft,{id:"No5qFD",message:"View profile",context:"Settings: profile \\u2014 view profile button"})}),s.isError&&(0,a.jsx)("button",{type:"button",className:"settings-button",onClick:()=>void s.refetch(),children:(0,a.jsx)(n.Pft,{id:"DDB5UB",message:"Retry profile",context:"Settings: profile \\u2014 retry profile load button"})})]}),f.message&&(0,a.jsx)("div",{role:"status",className:(0,W.cn)("border-t border-white/[0.08] px-4 py-3 text-xs","error"===f.type?"text-red-300/80":"text-emerald-300/70"),children:f.message}),s.isError&&(0,a.jsx)("div",{role:"status",className:"px-4 py-3 text-xs text-white/50",children:(0,a.jsx)(n.Pft,{id:"xqGebB",message:"The Firebase account is shown because the Porfoli profile could not be loaded.",context:"Settings: profile \\u2014 Firebase fallback notice"})})]})]})},el=()=>{let e=(0,Z.R)(),t=(0,J.$)(e=>e.appearanceScale),s=(0,J.$)(e=>e.setAppearanceScale),i=(0,J.$)(e=>e.sidebarDensity),o=(0,J.$)(e=>e.setSidebarDensity),r=(0,J.$)(e=>e.showPortfolioPerformance),l=(0,J.$)(e=>e.setShowPortfolioPerformance);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(ei,{children:(0,a.jsx)(n.Pft,{id:"_0MlbC",message:"Appearance",context:"Settings: Appearance section \\u2014 title"})}),e.appearance.managedScale&&(0,a.jsx)(eh,{label:(0,n.t)({message:"Display",de
1sc:"Settings: Appearance — display group"}),children:(0,a.jsx)(ex,{Icon:k,title:(0,n.t)({message:"Interface scale",desc:"Settings: Appearance — interface scale label"}),description:(0,n.t)({message:"Resize text, icons, and controls on this device. Use Command or Control with +, -, or 0.",desc:"Settings: Appearance — interface scale help"}),children:(0,a.jsxs)("div",{className:"flex min-w-[210px] items-center gap-3",children:[(0,a.jsx)("input",{type:"range",min:90,max:130,step:10,value:t,onChange:e=>s(Number(e.target.value)),className:"h-8 min-w-0 flex-1 accent-emerald-400","aria-label":(0,n.t)({message:"Interface scale",desc:"Settings: Appearance — interface scale slider a11y label"})}),(0,a.jsxs)("button",{type:"button",onClick:()=>s(100),className:"settings-button min-w-[58px] justify-center tabular-nums",title:(0,n.t)({message:"Reset interface scale",desc:"Settings: Appearance — reset interface scale button title"}),children:[t,"%"]})]})})}),(0,a.jsxs)(eh,{label:(0,n.t)({message:"Sidebar",desc:"Settings: Appearance — sidebar group"}),children:[(0,a.jsx)(ex,{Icon:C.A,title:(0,n.t)({message:"Portfolio density",desc:"Settings: Appearance — portfolio density label"}),description:(0,n.t)({message:"Adjust the amount of detail shown for each portfolio.",desc:"Settings: Appearance — portfolio density help"}),children:(0,a.jsxs)("select",{value:i,onChange:e=>o(e.target.value),className:"settings-select",children:[(0,a.jsx)("option",{value:"comfortable",children:(0,n.t)({message:"Comfortable",desc:"Settings: Appearance — comfortable density option"})}),(0,a.jsx)("option",{value:"compact",children:(0,n.t)({message:"Compact",desc:"Settings: Appearance — compact density option"})})]})}),(0,a.jsx)(ex,{Icon:N.A,title:(0,n.t)({message:"Portfolio performance",desc:"Settings: Appearance — portfolio performance label"}),description:(0,n.t)({message:"Show percentage change beside portfolios in the sidebar.",desc:"Settings: Appearance — portfolio performance help"}),children:(0,a.jsx)(eb,{label:(0,n.t)({message:"Portfolio performance",desc:"Settings: Appearance — portfolio performance switch a11y label"}),checked:r,onChange:l})})]})]})},ec=()=>{let e=(0,J.$)(e=>e.autoOpenCanvasArtifacts),t=(0,J.$)(e=>e.expandToolDetails),s=(0,J.$)(e=>e.sheetsEnabled),i=(0,J.$)(e=>e.setAutoOpenCanvasArtifacts),o=(0,J.$)(e=>e.setExpandToolDetails),r=(0,J.$)(e=>e.setSheetsEnabled);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(ei,{children:(0,a.jsx)(n.Pft,{id:"dhmC6D",message:"Agent",context:"Settings: Agent section \\u2014 title"})}),(0,a.jsxs)(eh,{label:(0,n.t)({message:"Responses",desc:"Settings: Agent — responses group"}),children:[(0,a.jsx)(ex,{Icon:h,title:(0,n.t)({message:"Open requested Canvas artifacts",desc:"Settings: Agent — open new Canvas artifacts label"}),description:(0,n.t)({message:"Open the context panel when an explicit Canvas, report, dashboard, chart, table, or spreadsheet request creates an artifact.",desc:"Settings: Agent — open new Canvas artifacts help"}),children:(0,a.jsx)(eb,{label:(0,n.t)({message:"Open requested Canvas artifacts",desc:"Settings: Agent — open new Canvas artifacts switch a11y label"}),checked:e,onChange:i})}),(0,a.jsx)(ex,{Icon:A.A,title:(0,n.t)({message:"Expand tool details",desc:"Settings: Agent — expand tool details label"}),description:(0,n.t)({message:"Keep tool inputs and results expanded inside agent responses.",desc:"Settings: Agent — expand tool details help"}),children:(0,a.jsx)(eb,{label:(0,n.t)({message:"Expand tool details",desc:"Settings: Agent — expand tool details switch a11y label"}),checked:t,onChange:o})}),(0,a.jsx)(ex,{Icon:P.A,title:(0,n.t)({message:"Sheets",desc:"Settings: Agent — sheets row title"}),description:(0,n.t)({message:"Let the agent build spreadsheet models you can open, edit, and refine in a grid.",desc:"Settings: Agent — sheets row description"}),children:(0,a.jsx)(eb,{label:(0,n.t)({message:"Sheets",desc:"Settings: Agent — sheets switch a11y label"}),checked:s,onChange:r})})]})]})},ed=()=>{let{state:e,models:t,selectModel:s}=(0,B.s)();return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(ei,{children:(0,a.jsx)(n.Pft,{id:"nZ-DRC",message:"Models",context:"Settings: Models section \\u2014 title"})}),(0,a.jsx)(eh,{label:(0,n.t)({message:"Default for this chat",desc:"Settings: Models — default group"}),children:(0,a.jsx)(ex,{Icon:h,title:(0,n.t)({message:"Investing model",desc:"Settings: Models — investing model label"}),description:(0,n.t)({message:"Changing models keeps the current thread and its context.",desc:"Settings: Models — investing model help"}),children:(0,a.jsx)("select",{value:e.modelId??t.find(e=>e.recommended)?.id??"",onChange:e=>void s(e.target.value),className:"settings-select max-w-[220px]",children:t.map(e=>(0,a.jsx)("option",{value:e.id,children:e.label},e.id))})})})]})},eg=()=>{let{usage:e,models:t}=(0,B.s)(),s=L.useMemo(()=>new Map(t.map(e=>[e.id,e.label])),[t]);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(ei,{children:(0,a.jsx)(n.Pft,{id:"pWOZyB",message:"Usage",context:"Settings: Usage section \\u2014 title"})}),"loading"===e.status?(0,a.jsx)(eh,{children:(0,a.jsx)(R.Ou,{message:(0,n.t)({message:"Loading agent usage...",desc:"Settings: Usage — loading state"}),className:"px-4 py-4"})}):"available"!==e.status?(0,a.jsx)(eh,{children:(0,a.jsx)(ex,{Icon:u.A,title:(0,n.t)({message:"Agent usage unavailable",desc:"Settings: Usage — unavailable title"}),description:e.error})}):e.data.available?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eh,{label:(0,n.t)({message:"Current allowance",desc:"Settings: Usage — current allowance group"}),children:(0,a.jsxs)("div",{className:"px-4 py-4",children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 text-sm",children:[(0,a.jsx)("span",{className:"flex-1 font-medium text-white/80",children:(0,a.jsx)(n.Pft,{id:"LylvyD",message:"Allowance used",context:"Settings: Usage \\u2014 allowance used label"})}),(0,a.jsxs)("span",{className:"tabular-nums text-white/70",children:[e.data.budget.usedPercent.toFixed(1),"%"]})]}),(0,a.jsx)("div",{className:"mt-3 h-2 overflow-hidden rounded-full bg-white/[0.08]",children:(0,a.jsx)("div",{className:"h-full bg-emerald-400",style:{width:`${e.data.budget.usedPercent}%`}})}),(0,a.jsxs)("p",{className:"mt-3 text-xs leading-5 text-white/50",children:[e.data.budget.fullAtIso?(0,n.t)({message:"Projected full {date}.",desc:"Settings: Usage — projected full date",values:{date:new Date(e.data.budget.fullAtIso).toLocaleStr
1ing((0,H.f)())}}):(0,n.t)({message:"No refill estimate is available.",desc:"Settings: Usage — no refill estimate"})," ",e.data.budget.enforced?(0,n.t)({message:"Enforcement is active.",desc:"Settings: Usage — enforcement active"}):(0,n.t)({message:"Enforcement is not active.",desc:"Settings: Usage — enforcement inactive"}),e.data.stale?" "+(0,n.t)({message:"This reading is stale.",desc:"Settings: Usage — stale reading note"}):""]})]})}),(0,a.jsxs)(eh,{label:(0,n.t)({message:"Last 30 days",desc:"Settings: Usage — last 30 days group"}),children:[(0,a.jsx)(ex,{Icon:h,title:(0,n.t)({message:"Tokens processed",desc:"Settings: Usage — tokens processed label"}),description:(0,n.t)({message:"{input} input \xb7 {output} output \xb7 {cached} cached input",desc:"Settings: Usage — token breakdown",values:{input:ef(e.data.recent30d.inputTokens),output:ef(e.data.recent30d.outputTokens),cached:ef(e.data.recent30d.cachedInputTokens)}})}),e.data.perModel.map(e=>(0,a.jsx)(ex,{Icon:p.A,title:s.get(e.modelRef)??e.modelRef,description:(0,n.t)({message:"{tokens} tokens",desc:"Settings: Usage — per-model token count",values:{tokens:ef(e.inputTokens+e.outputTokens)}}),children:(0,a.jsxs)("span",{className:"text-xs tabular-nums text-white/60",children:[e.sharePercent.toFixed(1),"%"]})},e.modelRef))]})]}):(0,a.jsx)(eh,{children:(0,a.jsx)(ex,{Icon:u.A,title:(0,n.t)({message:"No current usage reading",desc:"Settings: Usage — no reading title"}),description:(0,n.t)({message:"The agent service did not return a displayable allowance reading for this account.",desc:"Settings: Usage — no reading help"})})})]})},em=()=>{let e=(0,T.oS)(),t=(0,T.x$)(),s=L.useMemo(()=>new Map((t.data??[]).map(e=>[e.brokerage_connection_id,e])),[t.data]);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(ei,{children:(0,a.jsx)(n.Pft,{id:"FUX47B",message:"Connections",context:"Settings: Connections section \\u2014 title"})}),(0,a.jsxs)(eh,{label:(0,n.t)({message:"Financial data",desc:"Settings: Connections — financial data group"}),children:[e.isLoading||t.isLoading?(0,a.jsx)(R.Ou,{message:(0,n.t)({message:"Loading broker connections...",desc:"Settings: Connections — loading state"}),className:"px-4 py-4"}):e.isError||t.isError?(0,a.jsx)(R.Wz,{error:e.error??t.error,onRetry:()=>{e.refetch(),t.refetch()},className:"px-4 py-4"}):(e.data?.length??0)===0?(0,a.jsx)(ex,{Icon:x.A,title:(0,n.t)({message:"No brokers connected",desc:"Settings: Connections — no brokers title"}),description:(0,n.t)({message:"Connect an investing account to sync holdings and balances.",desc:"Settings: Connections — no brokers help"}),children:(0,a.jsxs)(z.N_,{to:(0,r.Dj)(),className:"settings-button",children:[(0,a.jsx)(n.Pft,{id:"7QzbyC",message:"Connect",context:"Settings: Connections \\u2014 connect button"})," ",(0,a.jsx)(M.A,{className:"size-[18px]"})]})}):e.data?.map(e=>{let t=s.get(e.id),i=t?(0,D.II)(t):[],o=i[0]?.brokerage_account_id,l=e.disabled?(0,n.t)({message:"Reconnect required before holdings can update.",desc:"Settings: Connections — reconnect required"}):0===i.length?(0,n.t)({message:"Connected; brokerage accounts are still syncing.",desc:"Settings: Connections — accounts syncing"}):(0,n.t)({message:"{count, plural, one {# active account} other {# active accounts}} \xb7 {access}",desc:"Settings: Connections — active account summary",values:{count:i.length,access:"trade"===e.type?(0,n.t)({message:"trading access",desc:"Settings: Connections — trading access"}):(0,n.t)({message:"read-only access",desc:"Settings: Connections — read-only access"})}});return(0,a.jsx)(ex,{Icon:x.A,title:e.brokerage.name,description:l,children:(0,a.jsxs)(z.N_,{to:(0,r.nl)(e.id,{brokerConnectionAccountId:o}),className:"settings-button",children:[(0,a.jsx)(n.Pft,{id:"ZFsNOB",message:"Manage",context:"Settings: Connections \\u2014 manage button"})," ",(0,a.jsx)(M.A,{className:"size-[18px]"})]})},e.id)}),(0,a.jsx)(ex,{Icon:x.A,title:(0,n.t)({message:"Add broker account",desc:"Settings: Connections — add broker title"}),description:(0,n.t)({message:"Use Porfoli's supported provider catalog and secure connection window.",desc:"Settings: Connections — add broker help"}),children:(0,a.jsxs)(z.N_,{to:(0,r.Dj)(),className:"settings-button",children:[(0,a.jsx)(n.Pft,{id:"5TssAC",message:"Add",context:"Settings: Connections \\u2014 add button"})," ",(0,a.jsx)(M.A,{className:"size-[18px]"})]})})]})]})},eu=()=>{let e=(0,Y.F)(e=>e.artifacts),t=(0,Y.F)(e=>e.clearLocal),s=(0,J.$)(e=>e.crashReports),i=(0,J.$)(e=>e.setCrashReports),[o,r]=L.useState(!1);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(ei,{children:(0,a.jsx)(n.Pft,{id:"7rCO1B",message:"Privacy",context:"Settings: Privacy section \\u2014 title"})}),(0,a.jsxs)(eh,{children:[(0,a.jsx)(ex,{Icon:I,title:(0,n.t)({message:"Crash reports",desc:"Settings: Privacy — crash reports title"}),description:(0,n.t)({message:"Send Porfoli the error message, stack trace, screen, app version, and 
1your account ID when something crashes. No portfolio data, no message contents, no browsing history. Turn this off and nothing is sent.",desc:"Settings: Privacy — crash reports help"}),children:(0,a.jsx)(eb,{label:(0,n.t)({message:"Crash reports",desc:"Settings: Privacy — crash reports switch a11y label"}),checked:s,onChange:i})}),(0,a.jsx)(ex,{Icon:b.A,title:(0,n.t)({message:"Authenticated data access",desc:"Settings: Privacy — authenticated data access title"}),description:(0,n.t)({message:"Agent requests run with your Porfoli identity and account permissions.",desc:"Settings: Privacy — authenticated data access help"})}),(0,a.jsx)(ex,{Icon:A.A,title:(0,n.t)({message:"Thread history",desc:"Settings: Privacy — thread history title"}),description:(0,n.t)({message:"Chats use resumable, server-authoritative history tied to your account.",desc:"Settings: Privacy — thread history help"})}),(0,a.jsx)(ex,{Icon:A.A,title:(0,n.t)({message:"Local Canvas storage",desc:"Settings: Privacy — local Canvas storage title"}),description:(0,n.t)({message:"{count, plural, one {# artifact} other {# artifacts}} stored as plaintext on this device. Canvas is not synced.",desc:"Settings: Privacy — local Canvas storage help",values:{count:e.length}}),children:(0,a.jsx)("button",{type:"button",className:"settings-button text-red-300/75",disabled:0===e.length,onClick:()=>r(!0),children:(0,a.jsx)(n.Pft,{id:"smm_JB",message:"Clear",context:"Settings: Privacy \\u2014 clear Canvas button"})})})]}),(0,a.jsx)(G.K,{open:o,title:(0,n.t)({message:"Clear local Canvas data?",desc:"Settings: Privacy — clear Canvas dialog title"}),description:(0,n.t)({message:"This permanently removes every Canvas artifact for this account from this device. There is no synced copy to restore.",desc:"Settings: Privacy — clear Canvas dialog description"}),confirmLabel:(0,n.t)({message:"Clear all",desc:"Settings: Privacy — clear Canvas confirm button"}),destructive:!0,onOpenChange:r,onConfirm:()=>{t(),r(!1)}})]})},ep=e=>{switch(e?.state){case"checking":return(0,n.t)({message:"Checking for updates…",desc:"Settings: About — updater checking"});case"up-to-date":return(0,n.t)({message:"Porfoli is up to date.",desc:"Settings: About — updater up to date"});case"downloading":return(0,n.t)({message:"Downloading update… {percent}%",desc:"Settings: About — updater download progress",values:{percent:e.percent??0}});case"downloaded":return(0,n.t)({message:"Update ready to install.",desc:"Settings: About — updater download finished"});case"error":return e.message??(0,n.t)({message:"Porfoli could not check for updates.",desc:"Settings: About — updater generic failure"});case"unsupported":return(0,n.t)({message:"Automatic updates aren't available in this build.",desc:"Settings: About — updater unavailable in this build"});default:return(0,n.t)({message:"Automatic updates keep Porfoli current.",desc:"Settings: About — updater idle"})}},eh=({label:e,children:t})=>(0,a.jsxs)("section",{className:"mb-6",children:[e&&(0,a.jsx)("h2",{className:"mb-2 px-1 text-xs text-white/55",children:e}),(0,a.jsx)("div",{className:"divide-y divide-white/[0.07] overflow-hidden rounded-md border border-white/[0.07] bg-white/[0.035]",children:t})]}),ex=({Icon:e,title:t,description:s,children:n})=>(0,a.jsxs)("div",{className:"flex min-h-[60px] items-center gap-3 px-4 py-3",children:[(0,a.jsx)(e,{className:"size-[18px] shrink-0 text-white/55"}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)("div",{className:"text-sm font-medium text-white/75",children:t}),(0,a.jsx)("div",{className:"mt-0.5 text-xs leading-5 text-white/55",children:s})]}),n&&(0,a.jsx)("div",{className:"shrink-0",children:n})]}),eb=({label:e,checked:t,onChange:s})=>(0,a.jsx)("button",{type:"button",role:"switch","aria-label":e,"aria-checked":t,onClick:()=>void s(!t),className:(0,W.cn)("relative h-8 w-11 rounded-full border transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-emerald-400",t?"border-emerald-400/60 bg-emerald-400/80":"border-white/10 bg-white/10"),children:(0,a.jsx)("span",{className:(0,W.cn)("absolute left-0 top-1.5 size-[18px] rounded-full bg-white shadow transition-transform",t?"translate-x-[21px]":"translate-x-1")})}),ef=e=>new Intl.NumberFormat((0,H.f)(),{notation:"compact"}).format(e)},23255:(e,t,s)=>{s.d(t,{A:()=>a});let a=(0,s(4163).A)("Table2",[["path",{d:"M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18",key:"gugj83"}]])},58855:(e,t,s)=>{s.d(t,{A:()=>a});let a=(0,s(4163).A)("LockKeyhole",[["circle",{cx:"12",cy:"16",r:"1",key:"1au0dj"}],["rect",{x:"3",y:"10",width:"18",height:"12",rx:"2",key:"6s8ecr"}],["path",{d:"M7 10V7a5 5 0 0 1 10 0v3",key:"1pqi11"}]])},62321:(e,t,s)=>{s.d(t,{A:()=>a});let a=(0,s(4163).A)("Database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]])}
1,95658:(e,t,s)=>{s.d(t,{K:()=>g});var a=s(54568),n=s(80416),i=s(46591),o=s(39980),r=s(66566);s(7620);var l=s(78453),c=s(12502),d=s(97335);let g=({open:e,title:t,description:s,confirmLabel:g,destructive:m,pending:u,onOpenChange:p,onConfirm:h})=>(0,a.jsx)(i.bL,{open:e,onOpenChange:u?void 0:p,children:(0,a.jsxs)(d.Y,{children:[(0,a.jsx)(i.hJ,{className:"fixed inset-0 z-[70] bg-black/60"}),(0,a.jsxs)(c.Q,{className:"z-[71] w-[min(440px,calc(100vw-32px))] rounded-md border border-white/[0.14] bg-[#191a1a] p-5 shadow-2xl",children:[(0,a.jsxs)("div",{className:"flex items-start gap-3",children:[(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)(i.hE,{className:"text-base font-semibold text-white/90",children:t}),(0,a.jsx)(i.VY,{className:"mt-2 text-sm leading-6 text-white/60",children:s})]}),(0,a.jsx)(i.bm,{asChild:!0,children:(0,a.jsx)("button",{type:"button",className:"workbench-icon-button","aria-label":(0,n.t)({message:"Close",desc:"Confirmation dialog — close button a11y label"}),disabled:u,children:(0,a.jsx)(o.A,{})})})]}),(0,a.jsxs)("div",{className:"mt-5 flex justify-end gap-2",children:[(0,a.jsx)(i.bm,{asChild:!0,children:(0,a.jsx)("button",{type:"button",disabled:u,className:"h-8 rounded-md border border-white/10 px-3 text-xs text-white/65 hover:bg-white/[0.05] disabled:opacity-50",children:(0,a.jsx)(n.Pft,{id:"a6X1RB",message:"Keep it",context:"Confirmation dialog \\u2014 cancel button"})})}),(0,a.jsxs)("button",{type:"button",disabled:u,onClick:h,className:(0,l.cn)("flex h-8 items-center gap-2 rounded-md px-3 text-xs font-medium disabled:opacity-50",m?"bg-red-400 text-black hover:bg-red-300":"bg-white text-black hover:bg-white/90"),children:[u&&(0,a.jsx)(r.A,{className:"size-[18px] animate-spin"}),g]})]})]})]})})}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.