@qredence/fleet 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +59 -0
- package/dist/web/client/assets/{agents-CGjUBYX7.js → agents-BMQXA18L.js} +2 -2
- package/dist/web/client/assets/{agents-page-CTuFJL9H.js → agents-page-D2soW46O.js} +1 -1
- package/dist/web/client/assets/{chat-queries-CfZiupub.js → chat-queries-ty76G6rK.js} +1 -1
- package/dist/web/client/assets/{connectors-CFxLqG2x.js → connectors-E4KW6hBL.js} +2 -2
- package/dist/web/client/assets/{connectors-page-DQJdoAnl.js → connectors-page-CDzzjCIJ.js} +1 -1
- package/dist/web/client/assets/globals-DDDleTbS.css +2 -0
- package/dist/web/client/assets/{index-C9FHZDGw.js → index-Cf8tRpHL.js} +2 -2
- package/dist/web/client/assets/{mcp-connections-section-DEo6Kemv.js → mcp-connections-section-BsNhp1b2.js} +2 -2
- package/dist/web/client/assets/routes--tnF7d6H.js +14 -0
- package/dist/web/client/assets/settings-dialog-BomLOETY.js +3 -0
- package/dist/web/client/bundle-budget.json +5 -5
- package/dist/web/server/{_tanstack-start-manifest_v-B6ne-00G-OFX7UD4K.js → _tanstack-start-manifest_v-Io433TLr-YWPNQWQI.js} +7 -7
- package/dist/web/server/{agents-BwzqhPjK-ANFHE5AG.js → agents-DOgCHixY-KUZP2VDO.js} +2 -2
- package/dist/web/server/{agents-page-DEqPV-eG-BR5MR74O.js → agents-page-BdiR9H8w-M6X6SXMF.js} +3 -3
- package/dist/web/server/{artifacts-panel-DLO8OfXb-B2ZWCDFP.js → artifacts-panel-cYqS54cM-K6SF3K6W.js} +5 -5
- package/dist/web/server/{chat-command-palette-CaDQAMAu-KDH7BTDS.js → chat-command-palette-BDnwcymZ-DSTFIAOD.js} +5 -5
- package/dist/web/server/{chunk-HUHUPGHT.js → chunk-2OC2FKHR.js} +5 -5
- package/dist/web/server/{chunk-V2GCVTDP.js → chunk-37EK2TYH.js} +33 -48
- package/dist/web/server/{chunk-TOJA3X5N.js → chunk-BLGKLQJG.js} +16 -5
- package/dist/web/server/{chunk-TQ2RECTH.js → chunk-C5XHGLET.js} +1 -1
- package/dist/web/server/{chunk-B5FKCW75.js → chunk-FI3UF2GW.js} +4 -4
- package/dist/web/server/{chunk-UDUG3MYZ.js → chunk-NSFKPEFI.js} +2 -2
- package/dist/web/server/{chunk-KDCSEISZ.js → chunk-NZCEQWK2.js} +2 -1
- package/dist/web/server/{chunk-VM3U6PUU.js → chunk-QOZCYKMA.js} +2 -2
- package/dist/web/server/{chunk-6AFVCERK.js → chunk-RHJEOG37.js} +4 -4
- package/dist/web/server/{chunk-TTNONWZZ.js → chunk-W2GI7NRX.js} +893 -672
- package/dist/web/server/{chunk-5IE54MRG.js → chunk-W7GGECTL.js} +3 -3
- package/dist/web/server/{connectors-C0xm91Ss-DJVBGD73.js → connectors-Dv_uPdv0-2X5VWQXK.js} +2 -2
- package/dist/web/server/{connectors-page-B6tJNZ6c-R5K4NSAT.js → connectors-page-DW75T-uH-EKRHUZ6K.js} +4 -4
- package/dist/web/server/{create-project-dialog-PFPHHWIV-GH7JR5IK.js → create-project-dialog-BS5Sva46-BO4RLW2Q.js} +5 -5
- package/dist/web/server/{openui-renderer-B9D8-Av--LFZP4U5V.js → openui-renderer-Q31y65CQ-QNVSP4NN.js} +4 -4
- package/dist/web/server/{resources-panel-CTzOOKPz-5G6RS2D6.js → resources-panel-CH8sG0Od-4BZN6SLY.js} +6 -6
- package/dist/web/server/{router-CnBux_Ld-YTVBMJFL.js → router-8EzTM9Eq-COVGJKKX.js} +2 -2
- package/dist/web/server/{routes-BUGzvQoO-WW43X7W2.js → routes-88H0fiN3-WIAZJ3RT.js} +4 -4
- package/dist/web/server/server.js +2 -2
- package/dist/web/server/{session-activity-panel-f0d3fCm7-I6L5IKFQ.js → session-activity-panel-CgSOde03-B5RCAGB4.js} +6 -6
- package/dist/web/server/{session-reasoning-panel-QIt_xjP0-FKJWMNHO.js → session-reasoning-panel-Dmny6YTk-D3HQV2YB.js} +5 -5
- package/dist/web/server/{session-tool-renderer-Cg_ZPHxS-BNQKNJNZ.js → session-tool-renderer-BrnTO2w3-V6EE6AB2.js} +5 -5
- package/dist/web/server/{session-tree-panel-B--el8O5-NZOZJM5L.js → session-tree-panel-BEqR_cAJ-TZS7VRCB.js} +5 -5
- package/dist/web/server/{settings-dialog-D_eJN2ia-W47Y474K.js → settings-dialog-DkesVBrS-BAAA3YNU.js} +145 -66
- package/dist/web/server/{subagent-chat-panel-C9nWP21E-D5C2TTYD.js → subagent-chat-panel-Bfmt1bCE-DKDVH3NJ.js} +8 -8
- package/dist/web/server/{subagents-panel-fAKvBNRG-O7QHXNE2.js → subagents-panel-ChJDDvad-GNCHDTPB.js} +8 -8
- package/dist/web/server/{workspace-panel-CZMNMU63-SYOSM3B7.js → workspace-panel-Cij_JylD-WPYSV5FA.js} +6 -6
- package/package.json +1 -1
- package/dist/web/client/assets/globals-DJhWyayo.css +0 -2
- package/dist/web/client/assets/routes-ja_liP8Z.js +0 -14
- package/dist/web/client/assets/settings-dialog-DiikSLhF.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{t}from"./react-Cvdyeg_0.js";import{t as n}from"./jsx-runtime-NZYk81nU.js";import{t as r}from"./utils-oBThwhjm.js";import{M as i,O as a,a as o,j as s}from"./useButton-CvcmqA2s.js";import{E as c}from"./createBaseUIEventDetails-DIxvaz-Y.js";import{r as l}from"./toast-BNWkgZ0u.js";import{G as u,J as d,K as f,Q as p}from"./FloatingPortal-D8-EPDs2.js";import{T as m,a as h,c as g,m as _,r as v,t as y}from"./select-DYh951qi.js";import{t as b}from"./useBaseUiId-lKfDDIcw.js";import{t as x}from"./createLucideIcon-CQY2ECfR.js";import{a as S,i as C,n as w,r as T,t as E}from"./provider-label-BItazQ6H.js";import{t as D}from"./chevron-right-BPCB1mOg.js";import{t as O}from"./eye-iNSvs0UA.js";import{n as k,t as A}from"./sparkles-CASAe1AI.js";import{t as j}from"./hard-drive-B3opVeEB.js";import{i as M,n as N,r as P,t as F}from"./sun-C7zg8Oas.js";import{t as I}from"./pencil-Cbgq3ybX.js";import{t as L}from"./plug-wCz-036u.js";import{t as R}from"./plus-DUP2JPVG.js";import{t as z}from"./refresh-cw-CqPE3kNY.js";import{a as B,i as V,n as H,r as U,t as ee}from"./mcp-connections-section-DEo6Kemv.js";import{t as W}from"./search-Cb6fFWew.js";import{t as G}from"./trash-sm2UyOxe.js";import{t as K}from"./button-CWYjn8Zk.js";import{a as q,n as te,r as ne}from"./ui-preferences-B-PNDkyY.js";import{n as re,t as ie}from"./alert-CzWGeumf.js";import{a as J,i as ae,r as Y}from"./provider-catalog-CLEDlH_v.js";import{a as oe,n as se,o as ce,r as le,t as ue}from"./dialog-CK8dym6z.js";import{a as de,i as fe,n as pe,r as me,t as he}from"./switch-BrxDfsX6.js";import{i as ge,n as X,r as _e,t as ve}from"./input-group-BFubAtz9.js";import{c as ye,l as be}from"./tokens-DinEQBG4.js";import{t as xe}from"./spinner-B5TaKP7k.js";import{t as Z}from"./notify-BIL0-CGy.js";import{n as Se,r as Ce}from"./right-panel-context-CjX-HkDO.js";import{a as we,i as Te,n as Ee,o as De,r as Oe,s as ke,t as Ae}from"./alert-dialog-D-e1Pr4q.js";var je={name:`arrow-left`,size:24,node:[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]};je.node;var Me=x(je),Ne={name:`box`,size:24,node:[[`path`,{d:`M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z`,key:`hh9hay`}],[`path`,{d:`m3.3 7 8.7 5 8.7-5`,key:`g66t2b`}],[`path`,{d:`M12 22V12`,key:`d0xqtd`}]]};Ne.node;var Pe=x(Ne),Fe={name:`eye-off`,size:24,node:[[`path`,{d:`M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49`,key:`ct8e1f`}],[`path`,{d:`M14.084 14.158a3 3 0 0 1-4.242-4.242`,key:`151rxh`}],[`path`,{d:`M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143`,key:`13bj9a`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]};Fe.node;var Ie=x(Fe),Le={name:`key-round`,size:24,node:[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]};Le.node;var Re=x(Le),ze={name:`layers`,size:24,node:[[`path`,{d:`M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z`,key:`zw3jo`}],[`path`,{d:`M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12`,key:`1wduqc`}],[`path`,{d:`M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17`,key:`kqbvx6`}]],aliases:[`layers-3`]};ze.node;var Be=x(ze),Ve={name:`lock`,size:24,node:[[`rect`,{width:`18`,height:`11`,x:`3`,y:`11`,rx:`2`,ry:`2`,key:`1w4ew1`}],[`path`,{d:`M7 11V7a5 5 0 0 1 10 0v4`,key:`fwvmzm`}]]};Ve.node;var He=x(Ve),Ue={name:`message-square`,size:24,node:[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}]]};Ue.node;var We=x(Ue),Ge={name:`paintbrush`,size:24,node:[[`path`,{d:`m14.622 17.897-10.68-2.913`,key:`vj2p1u`}],[`path`,{d:`M18.376 2.622a1 1 0 1 1 3.002 3.002L17.36 9.643a.5.5 0 0 0 0 .707l.944.944a2.41 2.41 0 0 1 0 3.408l-.944.944a.5.5 0 0 1-.707 0L8.354 7.348a.5.5 0 0 1 0-.707l.944-.944a2.41 2.41 0 0 1 3.408 0l.944.944a.5.5 0 0 0 .707 0z`,key:`18tc5c`}],[`path`,{d:`M9 8c-1.804 2.71-3.97 3.46-6.583 3.948a.507.507 0 0 0-.302.819l7.32 8.883a1 1 0 0 0 1.185.204C12.735 20.405 16 16.792 16 15`,key:`ytzfxy`}]]};Ge.node;var Ke=x(Ge),qe={name:`star`,size:24,node:[[`path`,{d:`M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z`,key:`r04s7s`}]]};qe.node;var Je=x(qe),Ye={name:`tag`,size:24,node:[[`path`,{d:`M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z`,key:`vktsd0`}],[`circle`,{cx:`7.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`kqv944`}]]};Ye.node;var Xe=x(Ye),Ze={name:`users`,size:24,node:[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`path`,{d:`M16 3.128a4 4 0 0 1 0 7.744`,key:`16gr8j`}],[`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`,key:`kshegd`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]};Ze.node;var Qe=x(Ze),Q=e(t(),1),$=n(),$e=new Set([`off`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`]),et=new Map,tt=500;function nt(e){let t=et.get(e);if(t)return t;let n=RegExp(`^${e.split(``).map(e=>e===`*`?`.*`:e===`?`?`.`:st(e)).join(``)}$`);return et.size>=tt&&et.clear(),et.set(e,n),n}function rt(e,t){return!t||t.length===0?!1:t.some(t=>it(e,t))}function it(e,t){let n=at(t.trim()).toLowerCase(),r=[e.id,e.modelId,e.name,e.key,e.provider&&e.modelId?`${e.provider}/${e.modelId}`:void 0,e.provider&&e.id?`${e.provider}/${e.id}`:void 0].filter(e=>typeof e==`string`).map(e=>e.toLowerCase());if(!ot(n))return r.includes(n);let i=nt(n);return r.some(e=>i.test(e))}function at(e){let t=e.lastIndexOf(`:`);if(t===-1)return e;let n=e.slice(t+1);return $e.has(n)?e.slice(0,t):e}function ot(e){return e.includes(`*`)||e.includes(`?`)}function st(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function ct(e,t){return`${e}/${t}`}function lt(e,t,n=!0){return t&&n&&e.trim().length===0}function ut({attemptedSave:e,label:t,onChange:n,onToggleVisibility:i,placeholder:a,required:o=!0,showPassword:s,value:c}){let l=(0,Q.useId)(),u=lt(c,e,o);return(0,$.jsxs)(pe,{"data-invalid":u||void 0,children:[(0,$.jsx)(de,{htmlFor:l,children:t}),(0,$.jsxs)(ve,{children:[(0,$.jsx)(X,{align:`inline-start`,children:(0,$.jsx)(He,{})}),(0,$.jsx)(ge,{id:l,type:s?`text`:`password`,placeholder:a,value:c,onChange:e=>n(e.target.value),"aria-label":t,"aria-invalid":u||void 0}),(0,$.jsx)(X,{align:`inline-end`,children:(0,$.jsx)(_e,{size:`icon-xs`,className:r(ye,`transition-[background-color,transform] duration-150 active:scale-[0.96]`),"aria-label":s?`Hide value`:`Show value`,onClick:i,children:s?(0,$.jsx)(Ie,{}):(0,$.jsx)(O,{})})})]})]})}function dt({attemptedSave:e,icon:t,inputType:n=`text`,label:r,onChange:i,placeholder:a,required:o=!0,value:s}){let c=(0,Q.useId)(),l=lt(s,e,o);return(0,$.jsxs)(pe,{"data-invalid":l||void 0,children:[(0,$.jsx)(de,{htmlFor:c,children:r}),(0,$.jsxs)(ve,{children:[(0,$.jsx)(X,{align:`inline-start`,children:(0,$.jsx)(t,{})}),(0,$.jsx)(ge,{id:c,type:n,placeholder:a,value:s,onChange:e=>i(e.target.value),"aria-label":r,"aria-invalid":l||void 0})]})]})}function ft({children:e,className:t,description:n,icon:i,label:a,trailing:o}){let s=o??e;return(0,$.jsxs)(pe,{orientation:`horizontal`,className:r(`items-center justify-between gap-6 rounded-xl border border-border/60 bg-card p-4 transition-colors`,t),children:[(0,$.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-start gap-3`,children:[i?(0,$.jsx)(`div`,{className:`flex size-8 shrink-0 items-center justify-center rounded-md border border-border/40 bg-background/60 text-foreground/70`,children:i}):null,(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsx)(de,{className:`text-sm font-medium text-foreground`,children:a}),n?(0,$.jsx)(me,{className:`mt-0.5 text-xs text-muted-foreground leading-normal`,children:n}):null]})]}),s?(0,$.jsx)(`div`,{className:`shrink-0`,children:s}):null]})}var pt={unconfigured:`Add a key below to turn this on.`,unverified:`Checking the key…`,ready:`Ready.`,error:`The TypeSafe key could not be verified.`},mt={settings:`Using the key saved here.`,environment:`Using TYPESAFE_API_KEY from the server environment.`,none:`No key is set.`};function ht({enabled:e,keySource:t,status:n,onClearKey:r,onEnabledChange:i,onSaveKey:a}){let[o,s]=(0,Q.useState)(``),[c,l]=(0,Q.useState)(!1),[u,d]=(0,Q.useState)(!1),[f,p]=(0,Q.useState)(null),[m,h]=(0,Q.useState)(!1),g=(0,Q.useCallback)(async()=>{if(d(!0),p(null),!(!o.trim()||!a)){h(!0);try{await a(o.trim()),s(``),l(!1),d(!1)}catch(e){p(e instanceof Error?e.message:`Failed to save key`)}finally{h(!1)}}},[o,a]),_=(0,Q.useCallback)(async()=>{if(r){h(!0),p(null);try{await r(),s(``)}catch(e){p(e instanceof Error?e.message:`Failed to remove key`)}finally{h(!1)}}},[r]),v=n===`unconfigured`||n===`error`;return(0,$.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,$.jsx)(ft,{label:`Describe a command`,description:`Recognise when a message is really asking for a built-in command, like "compact this" or "show the shortcuts". Messages you send are shared with TypeSafe for classification only when this is on. ${pt[n]}`,trailing:(0,$.jsx)(he,{"aria-label":`Describe a command`,checked:e,disabled:!i||!e&&v,onCheckedChange:i})}),(0,$.jsxs)(`div`,{className:`flex flex-col gap-2 rounded-xl border p-4`,children:[(0,$.jsx)(ut,{attemptedSave:u,label:`TypeSafe API key`,onChange:e=>{s(e),f&&p(null)},onToggleVisibility:()=>l(e=>!e),placeholder:`Paste your TypeSafe API key`,showPassword:c,value:o}),f?(0,$.jsx)(`p`,{className:`text-xs text-destructive`,children:f}):null,(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:mt[t]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(K,{type:`button`,size:`compact`,disabled:m||!o.trim(),onClick:()=>void g(),children:`Save key`}),t===`settings`?(0,$.jsx)(K,{type:`button`,variant:`outline`,size:`compact`,disabled:m,onClick:()=>void _(),children:`Remove key`}):null]})]})]})}var gt=[{value:`system`,label:`System`,icon:P},{value:`light`,label:`Light`,icon:F},{value:`dark`,label:`Dark`,icon:N}];function _t({onThemePreferenceChange:e,themePreference:t}){return(0,$.jsxs)(pe,{orientation:`horizontal`,className:`items-center justify-between gap-6 rounded-xl border p-4`,children:[(0,$.jsxs)(`div`,{className:`min-w-0`,children:[(0,$.jsx)(de,{children:`Theme`}),(0,$.jsx)(me,{children:`Match the system theme or pick light or dark.`})]}),(0,$.jsx)(`div`,{className:`shrink-0`,children:(0,$.jsx)(y,{"aria-label":`Theme`,className:`w-[160px]`,onValueChange:t=>e(t),options:[...gt],value:t})})]})}function vt(e,t){return rt({id:e.id,name:e.name,provider:e.provider,modelId:e.modelId},t)}function yt({currentPatterns:e,enabled:t,model:n,models:r}){let i=e??[],a=new Set(r.map(e=>bt(e))),o=new Set;for(let e of r)vt(e,i)&&o.add(bt(e));return t?o.add(bt(n)):o.delete(bt(n)),[...i.filter(e=>a.has(e)?!1:t||!it(n,e)),...o]}function bt(e){return ct(e.provider,e.modelId)}function xt(e){return[e.name,e.modelId,e.provider,e.id].join(` `).toLowerCase()}function St({configuredProviderIds:e,discoverableProviderIds:t,discoveringProviderId:n,enabledModels:i,modelOptions:a,onAddModels:o,onDiscoverProvider:s,onOpenChange:c,open:l,providerLabel:u=E}){let[d,f]=(0,Q.useState)(``),[p,m]=(0,Q.useState)(new Set),h=d.trim().toLowerCase(),g=(0,Q.useMemo)(()=>a.filter(t=>!e.has(t.provider)||vt(t,i)?!1:!h||xt(t).includes(h)),[e,i,a,h]),_=(0,Q.useMemo)(()=>{let e=new Map;for(let t of g){let n=e.get(t.provider);n?n.push(t):e.set(t.provider,[t])}return[...e.entries()]},[g]),v=(0,Q.useMemo)(()=>{let n=t??e;return Array.from(n).filter(t=>e.has(t)).sort((e,t)=>u(e).localeCompare(u(t)))},[e,t,u]),y=(0,Q.useMemo)(()=>{let e=new Map;for(let t of a)vt(t,i)&&e.set(t.provider,(e.get(t.provider)??0)+1);return e},[i,a]),b=e=>{m(t=>{let n=new Set(t);return n.has(e.id)?n.delete(e.id):n.add(e.id),n})};return(0,$.jsx)(ue,{open:l,onOpenChange:c,children:(0,$.jsxs)(se,{className:`max-w-lg`,children:[(0,$.jsxs)(oe,{children:[(0,$.jsx)(ce,{children:`Add models`}),(0,$.jsxs)(le,{children:[`Pick models discovered from your configured providers. For OpenAI Chat Completions, refresh runs`,` `,(0,$.jsxs)(`span`,{className:`font-medium`,children:[`GET `,`{baseUrl}/models`]}),`.`]})]}),(0,$.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:v.map(e=>{let t=n===e,r=y.get(e)??0;return(0,$.jsxs)(K,{type:`button`,variant:`outline`,size:`compact`,disabled:n!==null,onClick:()=>{s(e)},children:[t?(0,$.jsx)(xe,{"data-icon":`inline-start`}):(0,$.jsx)(z,{"data-icon":`inline-start`}),u(e),r>0?(0,$.jsxs)(`span`,{className:`tabular-nums text-muted-foreground`,children:[`· `,r,` active`]}):null]},e)})}),(0,$.jsxs)(ve,{children:[(0,$.jsx)(X,{align:`inline-start`,children:(0,$.jsx)(W,{})}),(0,$.jsx)(ge,{"aria-label":`Search discovered models`,value:d,onChange:e=>f(e.target.value),placeholder:`Search discovered models…`})]}),(0,$.jsx)(`div`,{className:`max-h-72 overflow-y-auto overscroll-contain`,children:_.length===0?(0,$.jsx)(`p`,{className:`py-6 text-center text-xs text-pretty text-muted-foreground`,children:g.length===0&&!h?`All discovered models are already in your list, or none are available yet.`:`No models match your search.`}):(0,$.jsx)(`div`,{className:`flex flex-col gap-3`,children:_.map(([e,t])=>(0,$.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,$.jsxs)(`div`,{className:`px-2 text-caption font-medium tracking-wide text-muted-foreground uppercase`,children:[u(e),(y.get(e)??0)>0?(0,$.jsxs)(`span`,{className:`ml-1 font-normal normal-case tabular-nums`,children:[`· `,y.get(e),` active`]}):null]}),t.map(e=>{let t=p.has(e.id);return(0,$.jsxs)(`button`,{type:`button`,className:r(`flex w-full items-center gap-3 rounded-lg px-2 py-2 text-left transition-[background-color,transform] duration-150`,`hover:bg-muted/60 focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none active:scale-[0.96]`,t&&`bg-muted/70`),"aria-pressed":t,onClick:()=>b(e),children:[(0,$.jsx)(`div`,{className:`flex size-8 shrink-0 items-center justify-center rounded-[4px] border border-border/40 bg-background/60`,children:(0,$.jsx)(w,{provider:e.provider,className:`text-foreground/70`})}),(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsx)(`div`,{className:`truncate text-sm font-medium`,children:e.name}),(0,$.jsx)(`div`,{className:`truncate text-xs text-muted-foreground`,children:e.modelId})]}),(0,$.jsx)(`span`,{className:r(`size-4 rounded border border-border/60`,t&&`border-foreground bg-foreground`),"aria-hidden":!0})]},e.id)})]},e))})}),(0,$.jsxs)(`div`,{className:`flex items-center justify-end gap-1.5`,children:[(0,$.jsx)(K,{type:`button`,variant:`ghost`,size:`compact`,onClick:()=>c(!1),children:`Cancel`}),(0,$.jsxs)(K,{type:`button`,size:`compact`,disabled:p.size===0,onClick:()=>{let e=g.filter(e=>p.has(e.id));e.length>0&&o(e),c(!1)},children:[`Add `,p.size>0?(0,$.jsxs)(`span`,{className:`tabular-nums`,children:[`(`,p.size,`)`]}):null]})]})]})})}function Ct({draft:e,discoveringProviderId:t,modelDirty:n,modelFilter:i,modelOptions:a,onAddModels:o,onDiscoverProvider:s,onModelFilterChange:c,onRemoveModel:l,onSetDefaultModel:u,onRevert:d,onSave:f,providers:p,saving:m,settingsLoading:h}){let[g,_]=(0,Q.useState)(!1),v=!e||h,y=i.trim().toLowerCase(),b=(0,Q.useMemo)(()=>{let t=new Set;for(let e of p)e.isConfigured&&t.add(e.id);for(let n of a)vt(n,e?.enabledModels)&&t.add(n.provider);return t},[e?.enabledModels,a,p]),x=(0,Q.useMemo)(()=>{let e=new Set;for(let t of p)t.discoverable===!0&&b.has(t.id)&&e.add(t.id);return e},[b,p]),S=(0,Q.useMemo)(()=>t=>!!e?.defaultProvider&&!!e?.defaultModel&&t.provider===e.defaultProvider&&t.modelId===e.defaultModel,[e?.defaultModel,e?.defaultProvider]),C=(0,Q.useMemo)(()=>{let e=new Map;for(let t of p)(t.displayName||t.name)&&e.set(t.id,t.displayName??t.name??t.id);return t=>e.get(t)??E(t)},[p]),T=(0,Q.useMemo)(()=>a.filter(t=>vt(t,e?.enabledModels)?!y||[t.name,t.modelId,t.provider,t.id].join(` `).toLowerCase().includes(y):!1),[e?.enabledModels,a,y]),D=(0,Q.useMemo)(()=>{let e=new Map;for(let t of T){let n=e.get(t.provider);n?n.push(t):e.set(t.provider,[t])}return[...e.entries()]},[T]),O=a.length===0?`No models discovered yet. Configure a provider, then add models.`:T.length===0&&!y?`Add models from your configured providers to make them available in chat.`:T.length===0?`No models match your search.`:null,k=()=>{_(!0)};return(0,$.jsxs)(U,{title:`LLM Models`,description:(0,$.jsxs)($.Fragment,{children:[`Models available in chat. `,(0,$.jsx)(`span`,{className:`tabular-nums`,children:T.length}),` in list`,a.length>0?(0,$.jsxs)($.Fragment,{children:[` `,`· `,(0,$.jsx)(`span`,{className:`tabular-nums`,children:a.length}),` discovered`]}):null,`.`]}),actions:(0,$.jsx)(H,{dirty:n,disabled:v,onRevert:d,onSave:f,saving:m}),children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsxs)(ve,{className:`flex-1`,children:[(0,$.jsx)(X,{align:`inline-start`,children:(0,$.jsx)(W,{})}),(0,$.jsx)(ge,{"aria-label":`Search listed models`,value:i,onChange:e=>c(e.target.value),placeholder:`Search listed models…`,disabled:v||T.length===0})]}),(0,$.jsxs)(K,{type:`button`,variant:`outline`,size:`compact`,disabled:v,onClick:k,children:[(0,$.jsx)(R,{"data-icon":`inline-start`}),`Add models`]})]}),(0,$.jsx)(`div`,{className:`flex flex-col gap-3`,"data-testid":`runtime-models-list`,children:O?(0,$.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-8`,children:[(0,$.jsx)(`p`,{className:`px-1 text-center text-xs text-pretty text-muted-foreground`,children:O}),y?null:(0,$.jsxs)(K,{type:`button`,variant:`outline`,size:`compact`,disabled:v,onClick:k,children:[(0,$.jsx)(R,{"data-icon":`inline-start`}),`Add models`]})]}):D.map(([e,t])=>(0,$.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,$.jsx)(`div`,{className:`px-1 text-xs font-medium text-muted-foreground`,children:C(e)}),t.map(e=>(0,$.jsx)(V,{icon:(0,$.jsx)(w,{provider:e.provider}),title:e.name,subtitle:`${C(e.provider)} · ${e.modelId}`,trailing:(0,$.jsxs)(`div`,{className:`flex items-center`,children:[S(e)?(0,$.jsx)(`span`,{className:`px-2 text-xs font-medium text-muted-foreground`,children:`Default`}):u?(0,$.jsxs)(K,{type:`button`,variant:`ghost`,size:`compact`,className:r(be,`h-7 px-2 text-xs text-muted-foreground transition-[background-color,color,transform] duration-150 active:scale-[0.96]`),disabled:v,"aria-label":`Set ${e.name} as default`,onClick:()=>u(e),children:[(0,$.jsx)(Je,{"data-icon":`inline-start`}),`Set default`]}):null,(0,$.jsxs)(K,{type:`button`,variant:`ghost`,size:`compact`,className:r(be,`h-7 px-2 text-xs text-muted-foreground transition-[background-color,color,transform] duration-150 hover:text-destructive active:scale-[0.96]`),disabled:v,"aria-label":`Remove ${e.name}`,onClick:()=>l(e),children:[(0,$.jsx)(G,{"data-icon":`inline-start`}),`Remove`]})]})},e.id))]},e))}),(0,$.jsx)(St,{open:g,configuredProviderIds:b,discoverableProviderIds:x,discoveringProviderId:t,enabledModels:e?.enabledModels,modelOptions:a,onAddModels:o,onDiscoverProvider:s,onOpenChange:_,providerLabel:C})]})}var wt=`https://opencode.ai/zen/v1`,Tt=`qwen35-122b-a10b`,Et=`e.g. OpenCode Zen, Nebius, Groq…`,Dt=`model-a, model-b (comma-separated)`,Ot=[{value:`openai-completions`,label:`OpenAI Chat Completions`},{value:`openai-responses`,label:`OpenAI Responses`},{value:`anthropic-messages`,label:`Anthropic Messages`},{value:`google-genai`,label:`Google Generative AI`}];function kt({attemptedSave:e,apiKey:t,api:n,baseUrl:r,modelId:i,models:a,displayName:o,isCustom:s,onApiKeyChange:c,onApiChange:l,onBaseUrlChange:u,onModelIdChange:d,onModelsChange:f,onDisplayNameChange:p,onTogglePassword:m,openAiChat:h,placeholder:g,showPassword:_}){let v=s&&l,y=s&&f;return(0,$.jsxs)(fe,{className:`gap-2`,children:[(h||s)&&p?(0,$.jsx)(dt,{attemptedSave:e,icon:Xe,label:`Provider name`,placeholder:Et,value:o??``,onChange:p}):null,v?(0,$.jsx)(At,{value:n??`openai-completions`,onChange:l}):null,(0,$.jsx)(ut,{attemptedSave:e,label:`API key`,placeholder:g,value:t,showPassword:_,onChange:c,onToggleVisibility:m}),h||s?(0,$.jsx)(dt,{attemptedSave:e,icon:k,inputType:`url`,label:`Base URL`,placeholder:wt,value:r,onChange:u}):null,y?(0,$.jsx)(dt,{attemptedSave:e,icon:Be,label:`Model ids`,placeholder:Dt,value:a??``,onChange:f}):null,h&&!y?(0,$.jsx)(dt,{attemptedSave:e,icon:Pe,label:`Model name`,placeholder:Tt,value:i,onChange:d}):null]})}function At({value:e,onChange:t}){return(0,$.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,$.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground`,children:`API family`}),(0,$.jsx)(y,{"aria-label":`API family`,value:e,options:Ot,placeholder:`Select API family`,onValueChange:e=>t(e)})]})}function jt(e){return e.authType===`oauth`}function Mt(e){return e.supportsOAuth===!0}function Nt({provider:e}){return(0,$.jsx)(ie,{className:`px-3 py-2`,children:(0,$.jsxs)(re,{className:`text-xs text-pretty`,children:[`OAuth sign-in from Fleet settings is unavailable. Launch Prime Agent in a terminal using the same configuration directory as Fleet and complete `,e.name,` sign-in there. Restart Fleet afterward to reload the credentials.`]})})}var Pt={id:`custom`,name:`Custom provider`,isConfigured:!1,envVarName:`CUSTOM_PROVIDER_API_KEY`,displayName:`Custom provider`};function Ft(e){return e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0)}function It({onRemoveProvider:e,onUpdateProvider:t,providers:n}){let[r,i]=(0,Q.useState)(null),[a,o]=(0,Q.useState)(!1),[s,c]=(0,Q.useState)(``),[l,u]=(0,Q.useState)(``),[d,f]=(0,Q.useState)(``),[p,m]=(0,Q.useState)(``),[h,g]=(0,Q.useState)(`openai-completions`),[_,v]=(0,Q.useState)(``),[y,b]=(0,Q.useState)(!1),[x,S]=(0,Q.useState)(!1),[C,w]=(0,Q.useState)(``),[T,E]=(0,Q.useState)(!1),[D,O]=(0,Q.useState)(``),[k,A]=(0,Q.useState)(null),j=(0,Q.useMemo)(()=>[...n.filter(e=>e.id!==Pt.id),Pt],[n]),M=(0,Q.useMemo)(()=>j.filter(e=>e.isConfigured),[j]),N=(0,Q.useMemo)(()=>j.filter(e=>!e.isConfigured||e.id===`openai-chat-completions`&&e.providerFamily===void 0),[j]),P=(0,Q.useMemo)(()=>{let e=C.trim().toLowerCase();return e?M.filter(t=>Lt(t,e)):M},[M,C]),F=(0,Q.useMemo)(()=>{let e=D.trim().toLowerCase();return N.filter(t=>Lt(t,e))},[D,N]),I=(0,Q.useMemo)(()=>{let e=D.trim().toLowerCase();return M.filter(t=>Lt(t,e))},[M,D]),L=F.length>0||I.length>0,R=r&&!M.some(e=>e.id===r)?j.find(e=>e.id===r)??null:null,z=()=>{c(``),u(``),f(``),m(``),g(`openai-completions`),v(``),b(!1),S(!1)},B=()=>{i(null),o(!1),z()},V=(e,t)=>{E(!1),O(``),i(e),o(t?.newOccInstance===!0),z();let r=n.find(t=>t.id===e);u(r?.baseUrl??``),v(r?.displayName??(Y(e)?r?.name??``:``)),g(r?.api??`openai-completions`),m((r?.modelIds??[]).join(`, `)),f(r?.modelIds?.[0]??``)},H=()=>{B(),O(``),E(!0)},U=()=>{E(!1),O(``)};return{activeProviders:M,addPickerOpen:T,addPickerQuery:D,api:h,apiKey:s,attemptedSave:x,baseUrl:l,canSave:(0,Q.useMemo)(()=>s.trim().length===0?!1:r?r===`custom`||Y(r)?l.trim().length===0||Ft(p).length===0?!1:_.trim().length>0:J(r)?l.trim().length===0||d.trim().length===0?!1:ae(r)||a?_.trim().length>0:!0:!0:!0,[s,l,d,p,_,r,a]),closeAddPicker:U,closeEditor:B,confirmRemoveProvider:k,credentialProviders:j,displayName:_,editingIsNewOccInstance:a,editingProvider:r,editingUnconfiguredProvider:R,filteredActiveProviders:P,filteredPickerAvailable:F,filteredPickerConfigured:I,handleRemove:async t=>{if(e)try{await e({providerId:t.id}),r===t.id&&B(),Z.success(`${t.name} removed from your configured providers.`),A(null)}catch(e){Z.error(e instanceof Error?e.message:`Failed to remove provider`)}},handleSave:async e=>{if(!t)return;S(!0);let n=e===`custom`||Y(e),r=J(e);if(n){let n=Ft(p);if(!s.trim()||!l.trim()||!_.trim()||n.length===0)return;try{await t({providerId:e,apiKey:s.trim(),baseUrl:l.trim(),displayName:_.trim(),api:h,models:n,...e===`custom`?{createOccInstance:!0}:{}}),Z.success(`Provider credentials applied to your active sessions.`),B(),U()}catch(e){Z.error(e instanceof Error?e.message:`Failed to update provider`)}return}let i=r&&ae(e),o=r&&(i||a);if(s.trim()&&!(r&&(!l.trim()||!d.trim()))&&!(o&&!_.trim()))try{await t({providerId:e,apiKey:s.trim(),...r?{baseUrl:l.trim(),modelId:d.trim(),...o?{displayName:_.trim()}:{},...a?{createOccInstance:!0}:{}}:{}}),Z.success(`Provider credentials applied to your active sessions.`),B(),U()}catch(e){Z.error(e instanceof Error?e.message:`Failed to update provider`)}},modelId:d,models:p,openAddPicker:H,openEditor:V,pickerHasResults:L,resetEditor:z,searchQuery:C,selectProviderFromPicker:e=>{V(e,{newOccInstance:J(e)})},setAddPickerOpen:E,setAddPickerQuery:O,setApi:g,setApiKey:c,setAttemptedSave:S,setBaseUrl:u,setConfirmRemoveProvider:A,setDisplayName:v,setEditingIsNewOccInstance:o,setEditingProvider:i,setModelId:f,setModels:m,setSearchQuery:w,setShowPassword:b,showPassword:y,unconfiguredProviders:N}}function Lt(e,t){if(!t)return!0;let n=Mt(e)?jt(e)?`oauth sign-in login`:`api key oauth sign-in login`:e.id===`custom`||Y(e.id)?`custom provider endpoint openai anthropic google compatible`:J(e.id)?`api key base url model name chat completions`:``;return[e.name,e.envVarName,e.id,n].join(` `).toLowerCase().includes(t)}function Rt({addPickerQuery:e,credentialProvidersLength:t,filteredPickerAvailable:n,filteredPickerConfigured:r,pickerHasResults:i,onClose:a,onQueryChange:o,onSelect:s}){return(0,$.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(K,{type:`button`,variant:`ghost`,size:`icon-compact`,"aria-label":`Back to providers`,onClick:a,children:(0,$.jsx)(Me,{})}),(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsx)(`p`,{className:`text-sm font-medium`,children:`Add provider`}),(0,$.jsx)(`p`,{className:`text-xs text-pretty text-muted-foreground`,children:`Choose a provider to store encrypted credentials for this account.`})]})]}),(0,$.jsxs)(ve,{children:[(0,$.jsx)(X,{align:`inline-start`,children:(0,$.jsx)(W,{})}),(0,$.jsx)(ge,{type:`text`,placeholder:`Search providers…`,value:e,onChange:e=>o(e.target.value),"aria-label":`Search providers to add`})]}),(0,$.jsx)(`div`,{className:`max-h-[min(24rem,50dvh)] overflow-y-auto overscroll-contain`,children:i?(0,$.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[n.length>0?(0,$.jsx)(`div`,{className:`flex flex-col gap-1`,children:n.map(e=>(0,$.jsx)(Ht,{provider:e,configured:!1,onSelect:()=>s(e.id)},e.id))}):null,r.length>0?(0,$.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[n.length>0?(0,$.jsx)(`p`,{className:`px-2 pt-1 text-caption font-medium tracking-wide text-muted-foreground uppercase`,children:`Already configured`}):null,r.map(e=>(0,$.jsx)(Ht,{provider:e,configured:!0,onSelect:()=>s(e.id)},e.id))]}):null]}):(0,$.jsx)(`p`,{className:`py-6 text-center text-xs text-pretty text-muted-foreground`,children:t===0?`No providers available.`:`No matching providers found.`})})]})}function zt({onBack:e,provider:t}){return(0,$.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(K,{type:`button`,variant:`ghost`,size:`icon-compact`,"aria-label":`Back to provider list`,onClick:e,children:(0,$.jsx)(Me,{})}),(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsxs)(`p`,{className:`text-sm font-medium`,children:[`Configure `,t.name]}),(0,$.jsx)(`p`,{className:`text-xs text-pretty text-muted-foreground`,children:`OAuth sign-in. Credentials are stored in auth.json for this account.`})]})]}),(0,$.jsx)(Nt,{provider:t})]})}function Bt({provider:e,api:t,apiKey:n,baseUrl:r,modelId:i,models:a,displayName:o,showPassword:s,attemptedSave:c,isPending:u,canSave:d,onApiKeyChange:f,onApiChange:p,onBaseUrlChange:m,onModelIdChange:h,onModelsChange:g,onDisplayNameChange:_,onTogglePassword:v,onBack:y,onCancel:b,onSave:x}){let S=e.id===`custom`||Y(e.id),C=T[e.id]??(S?T.custom:{placeholder:`Enter credentials…`,help:`Stored securely in your local environment overrides.`}),w=J(e.id)&&!S,E=Mt(e);return(0,$.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(K,{type:`button`,variant:`ghost`,size:`icon-compact`,"aria-label":`Back to provider list`,onClick:y,children:(0,$.jsx)(Me,{})}),(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsxs)(`p`,{className:`text-sm font-medium`,children:[`Configure `,e.name]}),(0,$.jsx)(`p`,{className:`text-xs text-pretty text-muted-foreground`,children:S?`Name this custom provider, pick its API family, then enter its API key, https base URL, and model ids.`:w?`Name this OpenAI-compatible provider, then enter its API key, base URL, and model name.`:`Stored as ${e.envVarName} for this account.`})]})]}),(0,$.jsx)(kt,{attemptedSave:c,api:t,apiKey:n,baseUrl:r,modelId:i,models:a,displayName:o,isCustom:S,openAiChat:w,placeholder:C.placeholder,showPassword:s,onApiKeyChange:f,onApiChange:p,onBaseUrlChange:m,onModelIdChange:h,onModelsChange:g,onDisplayNameChange:_,onTogglePassword:v}),(0,$.jsxs)(ie,{className:`px-3 py-2`,children:[(0,$.jsx)(l,{}),(0,$.jsx)(re,{className:`text-xs text-pretty`,children:C.help})]}),(0,$.jsxs)(`div`,{className:`flex items-center justify-end gap-1.5`,children:[(0,$.jsx)(K,{type:`button`,variant:`ghost`,size:`compact`,onClick:b,children:`Cancel`}),(0,$.jsxs)(K,{type:`button`,size:`compact`,disabled:u||!d,onClick:x,children:[u?(0,$.jsx)(xe,{"data-icon":`inline-start`}):null,`Save`]})]}),E?(0,$.jsx)(Nt,{provider:e}):null]})}function Vt({confirmRemoveProvider:e,isPending:t,onClose:n,onConfirm:r}){return(0,$.jsx)(Ae,{open:e!==null,onOpenChange:e=>{e||n()},children:(0,$.jsxs)(Te,{children:[(0,$.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,$.jsxs)(ke,{children:[`Remove `,e?.name??`provider`,`?`]}),(0,$.jsx)(we,{children:`This clears stored credentials for this provider from your workspace settings. Active sessions will stop using it immediately.`})]}),(0,$.jsxs)(De,{children:[(0,$.jsx)(Oe,{disabled:t,children:`Cancel`}),(0,$.jsxs)(Ee,{disabled:t||!e,onClick:()=>{e&&r(e)},children:[t?(0,$.jsx)(xe,{"data-icon":`inline-start`}):null,`Remove provider`]})]})]})})}function Ht({configured:e,onSelect:t,provider:n}){let i=J(n.id),a=n.id===`custom`||Y(n.id),o=jt(n),s=Mt(n);return(0,$.jsxs)(`button`,{type:`button`,className:r(`flex w-full items-center gap-3 rounded-lg px-2 py-2 text-left transition-[background-color,transform] duration-150`,`hover:bg-muted/60 focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none active:scale-[0.96]`),onClick:t,children:[(0,$.jsx)(`div`,{className:`flex size-8 shrink-0 items-center justify-center rounded-[4px] border border-border/40 bg-background/60`,children:(0,$.jsx)(w,{provider:a?`custom`:n.id,api:n.api,className:`text-foreground/70`})}),(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsx)(`div`,{className:`truncate text-sm font-medium`,children:n.name}),(0,$.jsxs)(`div`,{className:`truncate text-xs text-muted-foreground`,children:[o?`OAuth sign-in`:s?`API key or OAuth`:a?`API family + key + https base URL + models`:i?`API key + base URL + model name`:n.envVarName,e?` · Update`:``]})]})]})}function Ut({providers:e,editingProvider:t,form:n,operation:i,actions:a,onEdit:o,onCancelEdit:s,onSave:c,onRemove:u}){let{api:d,apiKey:f,baseUrl:p,modelId:m,models:h,displayName:g,showPassword:_,attemptedSave:v,canSave:y}=n,{isPending:b,canRemove:x}=i,{onApiKeyChange:S,onApiChange:C,onBaseUrlChange:E,onModelIdChange:D,onModelsChange:O,onDisplayNameChange:k,onTogglePassword:A}=a;return(0,$.jsx)(`div`,{className:`flex flex-col gap-1.5`,children:e.map(e=>{let n=t===e.id,i=Y(e.id),a=T[e.id]??T[i?`custom`:`openai-chat-completions`],j=J(e.id),M=jt(e),N=Mt(e);return(0,$.jsxs)(`div`,{className:`flex flex-col`,children:[(0,$.jsx)(V,{interactive:!1,icon:(0,$.jsx)(w,{provider:e.id,api:e.api,className:`text-foreground/80`}),title:e.name,subtitle:M?`OAuth sign-in`:N?`API key or OAuth`:i?`Custom provider · API key + base URL + models`:j?`OpenAI-compatible · API key + base URL + model name`:e.envVarName,trailing:(0,$.jsxs)(`div`,{className:`flex items-center gap-0.5`,children:[(0,$.jsxs)(K,{type:`button`,variant:`ghost`,size:`compact`,className:r(be,`h-7 px-2 text-xs text-muted-foreground transition-[background-color,color,transform] duration-150 hover:text-destructive active:scale-[0.96]`),disabled:b||!x,"aria-label":`Remove ${e.name}`,onClick:()=>u(e),children:[(0,$.jsx)(G,{"data-icon":`inline-start`}),`Remove`]}),(0,$.jsxs)(K,{type:`button`,variant:`ghost`,size:`compact`,className:r(be,`h-7 px-2 text-xs transition-[background-color,transform] duration-150 active:scale-[0.96]`),disabled:b,onClick:()=>{if(n){s();return}o(e.id)},children:[n?null:(0,$.jsx)(I,{"data-icon":`inline-start`}),n?`Cancel`:`Update`]})]})}),n?(0,$.jsx)(B,{tone:`inset`,padding:`md`,className:`flex flex-col gap-2 border-t border-border/30`,children:M?(0,$.jsx)(Nt,{provider:e}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(kt,{attemptedSave:v,api:e.api??d,apiKey:f,baseUrl:p,modelId:m,models:h,displayName:g,isCustom:i,openAiChat:j,placeholder:a.placeholder,showPassword:_,onApiKeyChange:S,onApiChange:C,onBaseUrlChange:E,onModelIdChange:D,onModelsChange:O,onDisplayNameChange:i||e.providerFamily!==void 0?k:void 0,onTogglePassword:A}),(0,$.jsxs)(ie,{className:`px-3 py-2`,children:[(0,$.jsx)(l,{}),(0,$.jsx)(re,{className:`text-xs text-pretty`,children:a.help})]}),(0,$.jsx)(`div`,{className:`flex items-center justify-end`,children:(0,$.jsxs)(K,{type:`button`,size:`compact`,disabled:b||!y,onClick:()=>c(e.id),children:[b?(0,$.jsx)(xe,{"data-icon":`inline-start`}):null,`Save`]})}),N?(0,$.jsx)(Nt,{provider:e}):null]})}):null]},e.id)})})}function Wt({isLoading:e,isPending:t,onRemoveProvider:n,onUpdateProvider:r,providers:i}){let{activeProviders:a,addPickerOpen:o,addPickerQuery:s,api:c,apiKey:l,attemptedSave:u,baseUrl:d,canSave:f,closeAddPicker:p,closeEditor:m,confirmRemoveProvider:h,credentialProviders:g,displayName:_,editingProvider:v,editingUnconfiguredProvider:y,filteredActiveProviders:b,filteredPickerAvailable:x,filteredPickerConfigured:S,handleRemove:C,handleSave:w,modelId:T,models:E,openAddPicker:D,openEditor:O,pickerHasResults:k,searchQuery:A,selectProviderFromPicker:j,setAddPickerQuery:M,setApi:N,setApiKey:P,setBaseUrl:F,setConfirmRemoveProvider:I,setDisplayName:L,setModelId:z,setModels:B,setSearchQuery:V,setShowPassword:H,showPassword:ee}=It({onRemoveProvider:n,onUpdateProvider:r,providers:i}),G={api:c,apiKey:l,baseUrl:d,modelId:T,models:E,displayName:_,showPassword:ee,attemptedSave:u,canSave:f},q={isPending:t,canRemove:!!n},te={onApiKeyChange:P,onApiChange:N,onBaseUrlChange:F,onModelIdChange:z,onModelsChange:B,onDisplayNameChange:L,onTogglePassword:()=>H(e=>!e)};return(0,$.jsxs)(U,{title:`Providers`,description:(0,$.jsxs)($.Fragment,{children:[`Locally, API keys are stored in`,` `,(0,$.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-caption text-foreground`,children:`.env.local`}),`. When deployed, they are stored encrypted in your account.`]}),children:[o?(0,$.jsx)(Rt,{addPickerQuery:s,credentialProvidersLength:g.length,filteredPickerAvailable:x,filteredPickerConfigured:S,pickerHasResults:k,onClose:p,onQueryChange:M,onSelect:j}):y&&jt(y)?(0,$.jsx)(zt,{provider:y,onBack:D},y.id):y?(0,$.jsx)(Bt,{provider:y,api:c,apiKey:l,baseUrl:d,modelId:T,models:E,displayName:_,showPassword:ee,attemptedSave:u,isPending:t,canSave:f,onApiKeyChange:P,onApiChange:N,onBaseUrlChange:F,onModelIdChange:z,onModelsChange:B,onDisplayNameChange:L,onTogglePassword:()=>H(e=>!e),onBack:D,onCancel:m,onSave:()=>{v&&w(v)}}):(0,$.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsxs)(ve,{className:`flex-1`,children:[(0,$.jsx)(X,{align:`inline-start`,children:(0,$.jsx)(W,{})}),(0,$.jsx)(ge,{type:`text`,placeholder:`Search credentials…`,value:A,onChange:e=>V(e.target.value),"aria-label":`Search credentials`,disabled:e||a.length===0})]}),(0,$.jsxs)(K,{type:`button`,variant:`outline`,size:`compact`,disabled:e||g.length===0,onClick:D,children:[(0,$.jsx)(R,{"data-icon":`inline-start`}),`Add provider`]})]}),e?(0,$.jsxs)(`div`,{className:`flex items-center justify-center gap-2 py-6 text-xs text-muted-foreground`,children:[(0,$.jsx)(xe,{className:`size-3`}),(0,$.jsx)(`span`,{children:`Loading…`})]}):a.length===0?(0,$.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-8`,children:[(0,$.jsx)(`p`,{className:`text-center text-xs text-pretty text-muted-foreground`,children:`No providers configured`}),(0,$.jsxs)(K,{type:`button`,variant:`outline`,size:`compact`,disabled:g.length===0,onClick:D,children:[(0,$.jsx)(R,{"data-icon":`inline-start`}),`Add provider`]})]}):b.length===0?(0,$.jsx)(`p`,{className:`py-6 text-center text-xs text-pretty text-muted-foreground`,children:`No matching providers found.`}):(0,$.jsx)(Ut,{providers:b,editingProvider:v,form:G,operation:q,actions:te,onEdit:O,onCancelEdit:m,onSave:e=>void w(e),onRemove:I})]}),(0,$.jsx)(Vt,{confirmRemoveProvider:h,isPending:t,onClose:()=>I(null),onConfirm:e=>{C(e)}})]})}function Gt(e){return{defaultProvider:e.defaultProvider,defaultModel:e.defaultModel,defaultThinkingLevel:e.defaultThinkingLevel,enabledModels:e.enabledModels===void 0?null:$t(e.enabledModels)}}function Kt(e){let t=e.enabledModels,n=t==null?null:$t(t).toSorted();return{defaultProvider:e.defaultProvider,defaultModel:e.defaultModel,defaultThinkingLevel:e.defaultThinkingLevel,enabledModels:n}}function qt(e){return{packages:e.packages,extensions:$t(e.extensions),skills:$t(e.skills),prompts:$t(e.prompts),themes:$t(e.themes),enableSkillCommands:e.enableSkillCommands}}function Jt(e){return{compaction:{enabled:e.compaction.enabled,reserveTokens:e.compaction.reserveTokens,keepRecentTokens:e.compaction.keepRecentTokens},retry:{enabled:e.retry.enabled,maxRetries:e.retry.maxRetries,baseDelayMs:e.retry.baseDelayMs},transport:e.transport,steeringMode:e.steeringMode,followUpMode:e.followUpMode}}function Yt(e,t){return JSON.stringify(e)===JSON.stringify(t)}function Xt(e){let t=e?[...e.skills,...e.prompts,...e.extensions,...e.packages,...e.themes,...e.agentsFiles]:[];return{active:t.filter(e=>e.activationStatus===`active`).length,staged:t.filter(e=>e.activationStatus===`staged`).length,reloadRequired:t.filter(e=>e.activationStatus===`reload-required`).length,diagnostics:e?.diagnostics??[],total:t.length}}function Zt(e){return e.map(e=>typeof e==`string`?e:JSON.stringify(e))}function Qt(e){let t=[];for(let n of e){let e=n.trim();if(!e)continue;if(!e.startsWith(`{`)){t.push(e);continue}let r=JSON.parse(e);if(!r||typeof r!=`object`||Array.isArray(r))throw Error(`Package JSON entries must be objects.`);t.push(r)}return t}function $t(e){return e.flatMap(e=>{let t=e.trim();return t?[t]:[]})}function en({draft:e,setDraft:t,updateDraft:n,settings:r,providers:i,models:a,modelCatalog:o,onDiscoverModels:s,saveSettings:c,setSavingSection:l}){let[u,d]=(0,Q.useState)(``),[f,p]=(0,Q.useState)([]),[m,h]=(0,Q.useState)(null),g=(0,Q.useRef)(null),_=(0,Q.useMemo)(()=>{let e=new Set;for(let t of i)t.isConfigured&&e.add(t.id);return e},[i]),v=o??a,y=(0,Q.useMemo)(()=>{let e=new Map;for(let t of v)_.has(t.provider)&&t.available!==!1&&e.set(t.id,t);for(let t of f)_.has(t.provider)&&t.available!==!1&&e.set(t.id,t);return[...e.values()]},[v,_,f]),b=g.current??(r?Kt(r.effective):null),x=!!e&&!!b&&!Yt(Kt(e),b),S=(0,Q.useCallback)(()=>{g.current=null},[]),C=async(e,n)=>{t(e),l(`models`);try{let r=await c(Gt(e)),i={...r.effective,enabledModels:r.project.enabledModels??e.enabledModels??r.effective.enabledModels,defaultProvider:r.project.defaultProvider??e.defaultProvider??r.effective.defaultProvider,defaultModel:r.project.defaultModel??e.defaultModel??r.effective.defaultModel,defaultThinkingLevel:r.project.defaultThinkingLevel??e.defaultThinkingLevel??r.effective.defaultThinkingLevel};return g.current=Kt(i),t(i),n?.silent||Z.success(`Pi settings saved`),!0}catch(e){return Z.error(e instanceof Error?e.message:`Settings save failed`),!1}finally{l(null)}},w=e=>{C(e)},T=(t,n)=>{if(!e)return;let r={...e,enabledModels:yt({currentPatterns:e.enabledModels,enabled:n,model:t,models:y})};w(r)};return{modelFilter:u,setModelFilter:d,modelOptions:y,modelDirty:x,addModels:t=>{if(!e||t.length===0)return;let n=e.enabledModels;for(let e of t)n=yt({currentPatterns:n,enabled:!0,model:e,models:y});w({...e,enabledModels:n})},removeModel:e=>{T(e,!1)},setDefaultModel:t=>{e&&C({...e,defaultProvider:t.provider,defaultModel:t.modelId})},discoverProvider:async e=>{if(s){h(e);try{let t=await s(e);p(e=>{let n=new Map(e.map(e=>[e.id,e]));for(let e of t)n.set(e.id,e);return[...n.values()]})}finally{h(null)}}},discoveringProviderId:m,commitModelSettings:C,revertModelDraft:()=>{r&&n(e=>({...e,defaultProvider:r.effective.defaultProvider,defaultModel:r.effective.defaultModel,defaultThinkingLevel:r.effective.defaultThinkingLevel,enabledModels:r.effective.enabledModels}))},resetCommittedModelBaseline:S}}var tn=[{value:`auto`,label:`Auto`},{value:`sse`,label:`SSE`},{value:`websocket`,label:`WebSocket`}],nn=[{value:`all`,label:`All`},{value:`one-at-a-time`,label:`One at a time`}];function rn({draft:e,updateDraft:t}){let n=!e;return(0,$.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,$.jsx)(V,{title:`Compaction`,subtitle:`Summarize old turns when context fills up`,trailing:(0,$.jsx)(he,{"aria-label":`Compaction`,checked:e?.compaction.enabled??!1,disabled:n,onCheckedChange:e=>t(t=>({...t,compaction:{...t.compaction,enabled:e}}))})}),(0,$.jsx)(V,{title:`Auto-retry`,subtitle:`Retry failed provider requests`,trailing:(0,$.jsx)(he,{"aria-label":`Auto-retry`,checked:e?.retry.enabled??!1,disabled:n,onCheckedChange:e=>t(t=>({...t,retry:{...t.retry,enabled:e}}))})}),(0,$.jsx)(V,{title:`Transport`,trailing:(0,$.jsx)(y,{"aria-label":`Transport`,className:`w-[160px]`,disabled:n,onValueChange:e=>t(t=>({...t,transport:e})),options:[...tn],value:e?.transport??`auto`})}),(0,$.jsx)(V,{title:`Steering`,subtitle:`How queued steers are delivered mid-turn`,trailing:(0,$.jsx)(y,{"aria-label":`Steering`,className:`w-[160px]`,disabled:n,onValueChange:e=>t(t=>({...t,steeringMode:e})),options:[...nn],value:e?.steeringMode??`all`})}),(0,$.jsx)(V,{title:`Follow-up`,subtitle:`How queued follow-ups run after the turn`,trailing:(0,$.jsx)(y,{"aria-label":`Follow-up`,className:`w-[160px]`,disabled:n,onValueChange:e=>t(t=>({...t,followUpMode:e})),options:[...nn],value:e?.followUpMode??`all`})})]})}var an=new Set([`auto`,`global`,`local`,`project`,`workspace`]);function on(e){let t=e.source?.trim();if(t&&!an.has(t))return t;let n=(e.workspacePath??e.path??``).trim();return n?sn(n):e.name.trim()}function sn(e){let t=e.replace(/\\/g,`/`);if(/^\/Users\//.test(t)||/^\/home\//.test(t)||/^[A-Za-z]:\//.test(t))return``;if(!t.startsWith(`/`)&&!/^[A-Za-z]:\//.test(t))return t.startsWith(`agent-workspace/`)?cn(`../${t}`):t.startsWith(`../agent-workspace/.pi/`)?cn(t.replace(`../agent-workspace/.pi/`,`../agent-workspace/pi/`)):cn(t);let n=t.match(/\/(agent-workspace\/.+)$/);if(n?.[1])return cn(`../${n[1].replace(/^agent-workspace\/\.pi\//,`agent-workspace/pi/`)}`);let r=t.match(/\/\.pi\/(extensions\/.+|skills\/.+|prompts\/.+|themes\/.+)$/);return r?.[1]?cn(r[1]):``}function cn(e){return e.replace(/\/SKILL\.md$/i,``).replace(/\/index\.(ts|tsx|js|jsx|mjs|cjs)$/i,``)}function ln(e,t){let n=sn(t);return e.some(e=>sn(e)===n)}function un(e,t){let n=t.trim();if(!n)return e;let r=sn(n);return!r||ln(e,r)?e:[...e,r]}function dn({addLabel:e,catalog:t,onChange:n,placeholder:r,values:i}){let[a,o]=(0,Q.useState)(``),s=new Set,c=[];for(let e of t){let t=on(e);t.length===0||s.has(t)||(s.add(t),c.push({value:t,label:e.name||t}))}let l=new Map(c.map(e=>[e.value,e.label])),u=e=>l.get(e)??l.get(sn(e)),d=c.filter(e=>!ln(i,e.value)),f=()=>{let e=a.trim();e&&(n(un(i,e)),o(``))};return(0,$.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[i.length===0?(0,$.jsx)(`p`,{className:`px-1 py-2 text-xs text-pretty text-muted-foreground`,children:`Nothing selected yet.`}):i.map(e=>{let t=u(e);return(0,$.jsx)(V,{interactive:!1,title:t??e,subtitle:t&&t!==e?e:void 0,trailing:(0,$.jsx)(K,{type:`button`,variant:`ghost`,size:`icon-compact`,"aria-label":`Remove ${e}`,onClick:()=>n(i.filter(t=>t!==e)),children:(0,$.jsx)(G,{})})},e)}),d.length>0?(0,$.jsx)(y,{"aria-label":e,value:null,placeholder:e,options:d,onValueChange:e=>{e&&n(un(i,e))}}):(0,$.jsxs)(ve,{children:[(0,$.jsx)(ge,{"aria-label":e,value:a,onChange:e=>o(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),f())},placeholder:r}),(0,$.jsx)(X,{align:`inline-end`,children:(0,$.jsxs)(_e,{onClick:f,disabled:!a.trim(),children:[(0,$.jsx)(R,{"data-icon":`inline-start`}),`Add`]})})]})]})}function fn({draft:e,onEnableSkillCommandsChange:t,onExtensionsChange:n,onPackageRowsChange:r,onPromptsChange:i,onRevert:a,onSave:o,onSkillsChange:s,onThemesChange:c,packageError:l,packageRows:u,resourceDirty:d,resources:f,resourceSummary:p,saving:m,scope:h=`harness`,settingsLoading:g,updateDraft:_}){let v=!e||g||!!l,y=p.total===0?`Empty`:p.reloadRequired>0?`${p.total} · ${p.reloadRequired} reload`:`${p.total}`;return(0,$.jsx)(U,{title:h===`skills`?`Skills`:`Pi Harness`,description:h===`skills`?`Pick detected workspace skills and slash-command discovery.`:`Runtime (compaction, retry, transport) plus packages, extensions, prompts, and themes.`,actions:(0,$.jsx)(H,{dirty:d,disabled:v,onRevert:a,onSave:o,saving:m}),children:h===`skills`?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(V,{title:`Skill slash commands`,trailing:(0,$.jsx)(he,{"aria-label":`Skill slash commands`,checked:e?.enableSkillCommands??!0,disabled:!e,onCheckedChange:t})}),(0,$.jsx)(pn,{label:`Skills`,count:e?.skills.length??0,children:(0,$.jsx)(dn,{addLabel:`Add skill`,catalog:f?.skills??[],placeholder:`../agent-workspace/pi/skills`,values:e?.skills??[],onChange:s})})]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(rn,{draft:e,updateDraft:_}),(0,$.jsx)(V,{interactive:!1,title:`Catalog`,subtitle:(0,$.jsx)(`span`,{className:`tabular-nums`,children:y})}),(0,$.jsxs)(pn,{label:`Packages`,count:u.length,children:[(0,$.jsx)(dn,{addLabel:`Add package`,catalog:f?.packages??[],placeholder:`npm:pi-skills or {"source":"npm:pkg"}`,values:u,onChange:r}),l?(0,$.jsx)(`p`,{className:`px-1 text-xs text-destructive`,children:l}):null]}),(0,$.jsx)(pn,{label:`Extensions`,count:e?.extensions.length??0,children:(0,$.jsx)(dn,{addLabel:`Add extension`,catalog:f?.extensions??[],placeholder:`../agent-workspace/pi/extensions`,values:e?.extensions??[],onChange:n})}),(0,$.jsx)(pn,{label:`Prompts`,count:e?.prompts.length??0,children:(0,$.jsx)(dn,{addLabel:`Add prompt`,catalog:f?.prompts??[],placeholder:`../agent-workspace/pi/prompts`,values:e?.prompts??[],onChange:i})}),(0,$.jsx)(pn,{label:`Themes`,count:e?.themes.length??0,children:(0,$.jsx)(dn,{addLabel:`Add theme`,catalog:f?.themes??[],placeholder:`../agent-workspace/pi/themes`,values:e?.themes??[],onChange:c})})]})})}function pn({children:e,count:t,label:n}){return(0,$.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,$.jsxs)(`div`,{className:`flex items-baseline justify-between gap-2 px-1`,children:[(0,$.jsx)(`p`,{className:`text-xs font-medium text-muted-foreground`,children:n}),(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground tabular-nums`,children:t===1?`1 item`:`${t} items`})]}),e]})}function mn({isLoading:e,isPending:t,onUpdateProvider:n,providers:i}){let[a,o]=(0,Q.useState)(!1),[s,c]=(0,Q.useState)(``),[u,d]=(0,Q.useState)(``),[f,p]=(0,Q.useState)(!1),[m,h]=(0,Q.useState)(!1),g=(0,Q.useMemo)(()=>i.find(e=>e.id===`daytona`),[i]),_=(0,Q.useMemo)(()=>i.find(e=>e.id===`daytona-target`),[i]),v=!!(g?.isConfigured&&_?.isConfigured),y=()=>{c(``),d(``),p(!1),h(!1)},b=()=>{o(!1),y()},x=async()=>{if(n&&(h(!0),!(!s.trim()&&!u.trim())))try{s.trim()&&await n({providerId:`daytona`,apiKey:s.trim()}),u.trim()&&await n({providerId:`daytona-target`,apiKey:u.trim()}),Z.success(`Sandbox provider updated`),b()}catch(e){Z.error(e instanceof Error?e.message:`Failed to update provider`)}},S=s.trim().length>0||u.trim().length>0;return(0,$.jsx)(U,{title:`Sandbox`,description:`Configure isolated execution environments.`,children:e?(0,$.jsxs)(`div`,{className:`flex items-center justify-center gap-2 py-6 text-xs text-muted-foreground`,children:[(0,$.jsx)(xe,{}),(0,$.jsx)(`span`,{children:`Loading…`})]}):(0,$.jsxs)(`div`,{className:`flex flex-col`,children:[(0,$.jsx)(V,{interactive:!1,icon:(0,$.jsx)(j,{className:`size-4 text-foreground/80`}),title:`Daytona`,subtitle:`DAYTONA_API_KEY · DAYTONA_TARGET`,trailing:(0,$.jsx)(K,{type:`button`,variant:`ghost`,size:`compact`,className:r(be,`h-7 px-2 text-xs transition-[background-color,transform] duration-150 active:scale-[0.96]`),onClick:()=>{if(a){b();return}o(!0),y()},children:a?`Cancel`:v?`Update`:`Configure`})}),a?(0,$.jsxs)(B,{tone:`inset`,padding:`md`,className:`flex flex-col gap-2 border-t border-border/30`,children:[(0,$.jsxs)(fe,{className:`gap-2`,children:[(0,$.jsx)(ut,{attemptedSave:m,label:`Daytona API key`,placeholder:`Enter Daytona API Key…`,value:s,showPassword:f,required:!1,onChange:c,onToggleVisibility:()=>p(e=>!e)}),(0,$.jsx)(dt,{attemptedSave:m,icon:k,label:`Region / target`,placeholder:`e.g. us-east`,value:u,required:!1,onChange:d})]}),(0,$.jsxs)(ie,{className:`px-3 py-2`,children:[(0,$.jsx)(l,{}),(0,$.jsx)(re,{className:`text-xs text-pretty`,children:`Settings are stored securely in your local environment overrides. Provide at least one value to save.`})]}),(0,$.jsx)(`div`,{className:`flex items-center justify-end`,children:(0,$.jsxs)(K,{type:`button`,size:`compact`,disabled:t||!S,onClick:()=>void x(),children:[t?(0,$.jsx)(xe,{"data-icon":`inline-start`}):null,`Save`]})})]}):null]})})}var hn={appearance:{id:`appearance`,order:10,title:`Appearance`,ariaLabel:`Appearance settings`,icon:Ke,group:`workspace`},chat:{id:`chat`,order:20,title:`Chat`,ariaLabel:`Chat settings`,icon:We,group:`workspace`},mcp:{id:`mcp`,order:25,title:`MCP`,ariaLabel:`MCP connection settings`,icon:L,group:`workspace`},sandbox:{id:`sandbox`,order:30,title:`Sandbox`,ariaLabel:`Sandbox settings`,icon:j,group:`advanced`},providers:{id:`providers`,order:40,title:`Providers`,ariaLabel:`Provider settings`,icon:Re,group:`models`},"llm-models":{id:`llm-models`,order:50,title:`LLM Models`,ariaLabel:`LLM model settings`,icon:S,group:`models`},skills:{id:`skills`,order:60,title:`Skills`,ariaLabel:`Skill settings`,icon:A,group:`advanced`},"pi-harness":{id:`pi-harness`,order:70,title:`Pi Harness`,ariaLabel:`Pi harness settings`,icon:C,group:`advanced`},keybindings:{id:`keybindings`,order:80,title:`Keybindings`,ariaLabel:`Keybinding settings`,icon:M,group:`advanced`},sessions:{id:`sessions`,order:90,title:`Sessions`,ariaLabel:`Session settings`,icon:Qe,group:`workspace`}},gn=[{id:`workspace`,label:`Workspace`},{id:`models`,label:`Models`},{id:`advanced`,label:`Advanced`}],_n=Object.values(hn).sort((e,t)=>e.order-t.order);function vn(e){return _n.some(t=>t.id===e)}function yn({draft:e,settings:t,updateDraft:n}){let[r,i]=(0,Q.useState)(null),[a,o]=(0,Q.useState)(),s=(0,Q.useMemo)(()=>Zt(t?.effective.packages??[]),[t?.effective.packages]),c=r??s;return{packageRows:c,packageError:a,resourceDirty:!!e&&!!t&&(!Yt(qt(e),qt(t.effective))||!Yt(Jt(e),Jt(t.effective))||!Yt(c.filter(e=>e.trim()),Zt(t.effective.packages))),handlePackageRowsChange:e=>{i(e);try{let t=Qt(e);o(void 0),n(e=>({...e,packages:t}))}catch(e){o(e instanceof Error?e.message:String(e))}},revertResourceDraft:()=>{t&&(n(e=>({...e,packages:t.effective.packages,extensions:t.effective.extensions,skills:t.effective.skills,prompts:t.effective.prompts,themes:t.effective.themes,enableSkillCommands:t.effective.enableSkillCommands,compaction:t.effective.compaction,retry:t.effective.retry,transport:t.effective.transport,steeringMode:t.effective.steeringMode,followUpMode:t.effective.followUpMode})),i(null),o(void 0))}}}function bn({className:e,...t}){return(0,$.jsx)(`nav`,{"aria-label":`breadcrumb`,"data-slot":`breadcrumb`,className:r(e),...t})}function xn({className:e,...t}){return(0,$.jsx)(`ol`,{"data-slot":`breadcrumb-list`,className:r(`flex flex-wrap items-center gap-1.5 text-sm wrap-break-word text-muted-foreground`,e),...t})}function Sn({className:e,...t}){return(0,$.jsx)(`li`,{"data-slot":`breadcrumb-item`,className:r(`inline-flex items-center gap-1`,e),...t})}function Cn({className:e,...t}){return(0,$.jsx)(`span`,{"data-slot":`breadcrumb-page`,"aria-current":`page`,className:r(`font-normal text-foreground`,e),...t})}function wn({children:e,className:t,...n}){return(0,$.jsx)(`li`,{"data-slot":`breadcrumb-separator`,role:`presentation`,"aria-hidden":`true`,className:r(`[&>svg]:size-3.5`,t),...n,children:e??(0,$.jsx)(D,{})})}var Tn=Q.createContext(void 0);function En(){let e=Q.useContext(Tn);if(e===void 0)throw Error(s(53));return e}function Dn(e,t,n){if(!e)return 0;let r=getComputedStyle(e),i=`${t}${n===`x`?`Inline`:`Block`}`,a=parseFloat(r[`${i}Start`]);return n===`x`&&t===`margin`?a*2:a+parseFloat(r[`${i}End`])}var On=`data-has-overflow-x`,kn=`data-has-overflow-y`,An=`data-overflow-x-start`,jn=`data-overflow-x-end`,Mn=`data-overflow-y-start`,Nn=`data-overflow-y-end`,Pn=e=>t=>t?{[e]:``}:null,Fn={hasOverflowX:Pn(On),hasOverflowY:Pn(kn),overflowXStart:Pn(An),overflowXEnd:Pn(jn),overflowYStart:Pn(Mn),overflowYEnd:Pn(Nn),cornerHidden:()=>null},In=`--scroll-area-corner-height`,Ln=`--scroll-area-corner-width`,Rn=`data-orientation`,zn={x:0,y:0},Bn={width:0,height:0},Vn={xStart:!1,xEnd:!1,yStart:!1,yEnd:!1},Hn={x:!0,y:!0,corner:!0},Un=Q.forwardRef(function(e,t){let{render:n,className:r,overflowEdgeThreshold:i,style:s,...c}=e,{xStart:l,xEnd:d,yStart:f,yEnd:m}=Wn(i),g=b(),_=p(),y=p(),{nonce:x,disableStyleElements:S}=v(),[C,w]=Q.useState(!1),[T,E]=Q.useState(!1),[D,O]=Q.useState(!1),[k,A]=Q.useState(!1),[j,M]=Q.useState(!1),[N,P]=Q.useState(Bn),[F,I]=Q.useState(Bn),[L,R]=Q.useState(Vn),[z,B]=Q.useState(Hn),V=Q.useRef(null),H=Q.useRef(null),U=Q.useRef(null),ee=Q.useRef(null),W=Q.useRef(null),G=Q.useRef(null),K=Q.useRef(null),q=Q.useRef(null),te=Q.useRef(0),ne=Q.useRef(0),re=Q.useRef(0),ie=Q.useRef(0),J=Q.useRef(`vertical`),ae=Q.useRef(zn),Y=Q.useRef(null);function oe(e){let t=e?O:E,n=e?_:y;t(!0),n.start(500,()=>{t(!1)})}let se=a(e=>{let t=e.x-ae.current.x,n=e.y-ae.current.y;ae.current=e,n!==0&&oe(!0),t!==0&&oe(!1)}),ce=a(()=>{let e=H.current;e&&Y.current===null&&(Y.current=e.style.scrollSnapType,e.style.scrollSnapType=`none`)}),le=a(e=>{if(e.button!==0||q.current!==null&&(J.current===`vertical`?W.current:G.current)?.hasPointerCapture(q.current))return;q.current=e.pointerId,te.current=e.clientY,ne.current=e.clientX,J.current=e.currentTarget.getAttribute(Rn);let t=H.current;t&&(re.current=t.scrollTop,ie.current=t.scrollLeft,ce()),(J.current===`vertical`?W.current:G.current)?.setPointerCapture(e.pointerId)}),ue=a(e=>{if(e.pointerId!==q.current)return;q.current=null,(J.current===`vertical`?O:E)(!1),Y.current!==null&&(H.current&&(H.current.style.scrollSnapType=Y.current),Y.current=null);let t=J.current===`vertical`?W.current:G.current;t?.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId)}),de=a(e=>{if(e.pointerId!==q.current)return;if(e.buttons%2==0){ue(e);return}let t=H.current;if(!t)return;let n=J.current===`vertical`,r=n?W.current:G.current,i=n?U.current:ee.current;if(!r||!i)return;let a=n?`y`:`x`,o=Dn(i,`padding`,a),s=Dn(r,`margin`,a),c=n?r.offsetHeight:r.offsetWidth,l=(n?i.offsetHeight:i.offsetWidth)-c-o-s,u=n?e.clientY-te.current:e.clientX-ne.current,d=l<=0?0:u/l,f=n?t.scrollHeight:t.scrollWidth,p=n?t.clientHeight:t.clientWidth,m=(n?re.current:ie.current)+d*(f-p);n?t.scrollTop=m:t.scrollLeft=m,e.preventDefault(),oe(n)});function fe(e){A(e.pointerType===`touch`)}function pe(e){if(fe(e),e.pointerType!==`touch`){let t=u(V.current,e.target);w(t)}}let me=Q.useMemo(()=>({scrolling:T||D,hasOverflowX:!z.x,hasOverflowY:!z.y,overflowXStart:L.xStart,overflowXEnd:L.xEnd,overflowYStart:L.yStart,overflowYEnd:L.yEnd,cornerHidden:z.corner}),[T,D,z.x,z.y,z.corner,L]),he={role:`presentation`,onPointerEnter:pe,onPointerMove:pe,onPointerDown:fe,onPointerLeave(){w(!1)},style:{position:`relative`,[In]:`${N.height}px`,[Ln]:`${N.width}px`}},ge=o(`div`,e,{state:me,ref:[t,V],props:[he,c],stateAttributesMapping:Fn}),X=Q.useMemo(()=>({handlePointerDown:le,handlePointerMove:de,handlePointerUp:ue,handleScroll:se,disableViewportSnap:ce,cornerSize:N,setCornerSize:P,thumbSize:F,setThumbSize:I,hasMeasuredScrollbar:j,setHasMeasuredScrollbar:M,touchModality:k,cornerRef:K,scrollingX:T,scrollingY:D,hovering:C,setHovering:w,viewportRef:H,scrollbarYRef:U,scrollbarXRef:ee,thumbYRef:W,thumbXRef:G,rootId:g,hiddenState:z,setHiddenState:B,overflowEdges:L,setOverflowEdges:R,viewportState:me,overflowEdgeThreshold:{xStart:l,xEnd:d,yStart:f,yEnd:m}}),[le,de,ue,se,ce,N,F,j,k,T,D,C,g,z,L,me,l,d,f,m]);return(0,$.jsxs)(Tn.Provider,{value:X,children:[!S&&h.getElement(x),ge]})});function Wn(e){let t=typeof e==`number`?{xStart:e,xEnd:e,yStart:e,yEnd:e}:e;return{xStart:Math.max(0,t?.xStart||0),xEnd:Math.max(0,t?.xEnd||0),yStart:Math.max(0,t?.yStart||0),yEnd:Math.max(0,t?.yEnd||0)}}var Gn=Q.createContext(void 0);function Kn(){let e=Q.useContext(Gn);if(e===void 0)throw Error(s(55));return e}var qn=`--scroll-area-overflow-x-start`,Jn=`--scroll-area-overflow-x-end`,Yn=`--scroll-area-overflow-y-start`,Xn=`--scroll-area-overflow-y-end`,Zn=`--scroll-area-thumb-height`,Qn=`--scroll-area-thumb-width`,$n=[qn,Jn,Yn,Xn],er=!1;function tr(){er||d||(typeof CSS<`u`&&`registerProperty`in CSS&&$n.forEach(e=>{try{CSS.registerProperty({name:e,syntax:`<length>`,inherits:!1,initialValue:`0px`})}catch{}}),er=!0)}var nr=Q.forwardRef(function(e,t){let{render:n,className:r,style:s,...c}=e,{viewportRef:l,scrollbarYRef:u,scrollbarXRef:d,thumbYRef:f,thumbXRef:m,cornerRef:v,cornerSize:y,setCornerSize:b,setThumbSize:x,rootId:S,setHiddenState:C,hiddenState:w,setHasMeasuredScrollbar:T,handleScroll:E,touchModality:D,setHovering:O,setOverflowEdges:k,overflowEdgeThreshold:A,viewportState:j}=En(),M=_(),N=Q.useRef(!0),P=Q.useRef([NaN,NaN,NaN,NaN]),F=p(),I=p(),L=a(()=>{let e=l.current,t=u.current,n=d.current,r=f.current,i=m.current,a=v.current;if(!e)return;let o=e.scrollHeight,s=e.scrollWidth,c=e.clientHeight,p=e.clientWidth,h=e.scrollTop,_=e.scrollLeft,S=P.current,w=Number.isNaN(S[0]);if(S[0]=c,S[1]=o,S[2]=p,S[3]=s,w&&T(!0),o===0||s===0)return;let E=rr(e),D=E.y,O=E.x,j=p/s,N=c/o,F=Math.max(0,s-p),I=Math.max(0,o-c),L=0,R=0;O||(L=g(M===`rtl`?-_:_,F),R=F-L);let z=D?0:g(h,I),B=D?0:I-z,V=O?0:p,H=D?0:c,U=0,ee=0;!O&&!D&&(U=t?.offsetWidth||0,ee=n?.offsetHeight||0);let W=y.width===0&&y.height===0,G=W?U:0,K=W?ee:0,q=Dn(n,`padding`,`x`),te=Dn(t,`padding`,`y`),ne=Dn(i,`margin`,`x`),re=Dn(r,`margin`,`y`),ie=V-q-ne,J=H-te-re,ae=n?Math.min(n.offsetWidth-G,ie):ie,Y=t?Math.min(t.offsetHeight-K,J):J,oe=Math.max(16,ae*j),se=Math.max(16,Y*N);if(x(e=>ir(e,{width:oe,height:se})),t&&r){let e=ar(r,Zn,h,I,o,se,t.offsetHeight-se-te-re);r.style.transform=`translate3d(0,${e}px,0)`}if(n&&i){let e=n.offsetWidth-oe-q-ne,t=ar(i,Qn,M===`rtl`?-_:_,F,s,oe,e);i.style.transform=`translate3d(${M===`rtl`?-t:t}px,0,0)`}let ce=[L,R,z,B];$n.forEach((t,n)=>{e.style.setProperty(t,`${ce[n]}px`)}),a&&b(e=>ir(e,{width:U,height:ee})),C(e=>ir(e,E));let le={xStart:!O&&L>A.xStart,xEnd:!O&&R>A.xEnd,yStart:!D&&z>A.yStart,yEnd:!D&&B>A.yEnd};k(e=>ir(e,le))});i(()=>{tr()},[]),i(()=>{queueMicrotask(L)},[L,w,M,A.xStart,A.xEnd,A.yStart,A.yEnd]),i(()=>{l.current?.matches(`:hover`)&&O(!0)},[l,O]),i(()=>{let e=l.current;if(typeof ResizeObserver>`u`||!e)return;let t=!1,n=new ResizeObserver(()=>{if(!t){t=!0;let n=P.current;if(n[0]===e.clientHeight&&n[1]===e.scrollHeight&&n[2]===e.clientWidth&&n[3]===e.scrollWidth)return}L()});return n.observe(e),I.start(0,()=>{let t=e.getAnimations({subtree:!0});t.length!==0&&Promise.allSettled(t.map(e=>e.finished)).then(L).catch(()=>{})}),()=>{n.disconnect(),I.clear()}},[L,l,I]);function R(){N.current=!1}let z={role:`presentation`,...S&&{"data-id":`${S}-viewport`},tabIndex:w.x&&w.y?-1:0,className:h.className,style:{overflow:`scroll`},onScroll(){l.current&&(L(),(D||!N.current)&&E({x:l.current.scrollLeft,y:l.current.scrollTop}),F.start(100,()=>{N.current=!0}))},onWheel:R,onPointerMove:R,onPointerEnter:R,onKeyDown:R},B=o(`div`,e,{ref:[t,l],state:j,props:[z,c],stateAttributesMapping:Fn}),V=Q.useMemo(()=>({computeThumbPosition:L}),[L]);return(0,$.jsx)(Gn.Provider,{value:V,children:B})});function rr(e){let t=e.clientHeight>=e.scrollHeight,n=e.clientWidth>=e.scrollWidth;return{y:t,x:n,corner:t||n}}function ir(e,t){for(let n in t)if(e[n]!==t[n])return t;return e}function ar(e,t,n,r,i,a,o){let s=m(n,0,r),c=n-s,l=Math.max(16,a*i/(i+Math.abs(c)));return e.style.setProperty(t,c?`${l}px`:``),(r?s/r*o:0)+(c>0?a-l:0)}var or=Q.createContext(void 0);function sr(){let e=Q.useContext(or);if(e===void 0)throw Error(s(54));return e}var cr=Q.forwardRef(function(e,t){let{render:n,className:r,orientation:i=`vertical`,keepMounted:a=!1,style:s,...l}=e,{hovering:d,scrollingX:p,scrollingY:m,hiddenState:h,scrollbarYRef:g,scrollbarXRef:v,viewportRef:y,thumbYRef:b,thumbXRef:x,handlePointerDown:S,handlePointerUp:C,handleScroll:w,disableViewportSnap:T,rootId:E,thumbSize:D,hasMeasuredScrollbar:O,viewportState:k}=En(),A=i===`vertical`,j={...k,hovering:d,scrolling:A?m:p,orientation:i},M=_(),N=!O&&!a,P=A?h.y:h.x,F=a||!P;Q.useEffect(()=>{if(!F)return;let e=y.current,t=A?g.current:v.current;if(!t)return;function n(t){if(!e||t.ctrlKey)return;let n=!A,r=n?`scrollLeft`:`scrollTop`,i=n?t.deltaX:t.deltaY;if(i===0)return;let a=n?e.scrollWidth-e.clientWidth:e.scrollHeight-e.clientHeight,o=n&&M===`rtl`?-a:0,s=n&&M===`rtl`?0:a,c=e[r];c<=o&&i<0||c>=s&&i>0||(t.preventDefault(),e[r]=Math.min(s,Math.max(o,c+i)),w({x:e.scrollLeft,y:e.scrollTop}))}return c(t,`wheel`,n,{passive:!1})},[M,w,A,v,g,F,y]);let I={...E&&{"data-id":`${E}-scrollbar`},"aria-hidden":!0,onPointerDown(e){if(e.button!==0)return;let t=f(e.nativeEvent),n=A?b.current:x.current;if(n&&u(n,t))return;let r=y.current;if(!r)return;let i=A?g.current:v.current;if(!n||!i)return;let a=A?`y`:`x`,o=Dn(n,`margin`,a),s=Dn(i,`padding`,a),c=A?n.offsetHeight:n.offsetWidth,l=i.getBoundingClientRect(),d=A?e.clientY-l.top-c/2-s+o/2:e.clientX-l.left-c/2-s+o/2,p=A?r.scrollHeight:r.scrollWidth,m=A?r.clientHeight:r.clientWidth,h=(A?i.offsetHeight:i.offsetWidth)-c-s-o;if(h<=0)return;let _=d/h,C=p-m;T(),A?r.scrollTop=_*C:r.scrollLeft=M===`rtl`?-(1-_)*C:_*C,w({x:r.scrollLeft,y:r.scrollTop}),S(e)},onMouseDown(e){e.preventDefault()},onPointerUp:C,onPointerCancel:C,style:{position:`absolute`,touchAction:`none`,WebkitUserSelect:`none`,userSelect:`none`,visibility:N?`hidden`:void 0,...A?{top:0,bottom:`var(${In})`,insetInlineEnd:0,[Zn]:`${D.height}px`}:{insetInlineStart:0,insetInlineEnd:`var(${Ln})`,bottom:0,[Qn]:`${D.width}px`}}},L=o(`div`,e,{ref:[t,A?g:v],state:j,props:[I,l],stateAttributesMapping:Fn});return F?(0,$.jsx)(or.Provider,{value:i,children:L}):null}),lr=Q.forwardRef(function(e,t){let{render:n,className:r,style:a,...s}=e,{computeThumbPosition:c}=Kn(),{hasMeasuredScrollbar:l,viewportState:u}=En(),d=Q.useRef(null),f=Q.useRef(l);return i(()=>{if(typeof ResizeObserver>`u`)return;let e=!1,t=new ResizeObserver(()=>{!e&&(e=!0,!f.current)||c()});return d.current&&t.observe(d.current),()=>{t.disconnect()}},[c]),o(`div`,e,{ref:[t,d],state:u,stateAttributesMapping:Fn,props:[{role:`presentation`,style:{minWidth:`fit-content`}},s]})}),ur=Q.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,{thumbYRef:s,thumbXRef:c,handlePointerDown:l,handlePointerMove:u,handlePointerUp:d,scrollingX:f,scrollingY:p,hasMeasuredScrollbar:m}=En(),h=sr(),g=h===`vertical`;return o(`div`,e,{ref:[t,g?s:c],state:{scrolling:g?p:f,orientation:h},props:[{onPointerDown:l,onPointerMove:u,onPointerUp:d,onPointerCancel:d,style:{visibility:m?void 0:`hidden`,...g?{height:`var(--scroll-area-thumb-height)`}:{width:`var(--scroll-area-thumb-width)`}}},a]})}),dr=Q.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,{cornerRef:s,cornerSize:c,hiddenState:l}=En(),u=o(`div`,e,{ref:[t,s],props:[{"aria-hidden":!0,style:{position:`absolute`,bottom:0,insetInlineEnd:0,width:c.width,height:c.height}},a]});return l.corner?null:u});function fr(){let[e,t]=(0,Q.useState)(!1);return(0,Q.useEffect)(()=>{if(typeof window>`u`)return;let e=new AbortController,{signal:n}=e,r=()=>{let e=`ontouchstart`in window||navigator.maxTouchPoints>0,n=window.matchMedia(`(pointer: coarse)`).matches;t(e&&n)};return window.matchMedia(`(pointer: coarse)`).addEventListener(`change`,r,{signal:n}),window.addEventListener(`pointerdown`,r,{signal:n}),r(),()=>e.abort()},[]),e}var pr=(0,Q.createContext)(!1),mr=(0,Q.forwardRef)(({className:e,children:t,viewportClassName:n,orientation:i=`vertical`,...a},o)=>{let s=fr();return(0,$.jsx)(pr.Provider,{value:s,children:s?(0,$.jsx)(`div`,{ref:o,role:`group`,"data-slot":`scroll-area`,"aria-roledescription":`scroll area`,className:r(`relative overflow-hidden`,e),...a,children:(0,$.jsx)(`div`,{"data-slot":`scroll-area-viewport`,className:r(`size-full overscroll-contain rounded-[inherit]`,i===`vertical`&&`overflow-y-auto`,i===`horizontal`&&`overflow-x-auto`,i===`both`&&`overflow-auto`,n),tabIndex:0,children:t})}):(0,$.jsxs)(Un,{ref:o,"data-slot":`scroll-area`,className:r(`relative overflow-hidden`,e),...a,children:[(0,$.jsx)(nr,{"data-slot":`scroll-area-viewport`,className:r(`size-full rounded-[inherit]`,n),children:(0,$.jsx)(lr,{className:r(i===`vertical`&&`w-full min-w-full`),children:t})}),i!==`horizontal`&&(0,$.jsx)(hr,{orientation:`vertical`}),i!==`vertical`&&(0,$.jsx)(hr,{orientation:`horizontal`}),i===`both`&&(0,$.jsx)(dr,{})]})})});mr.displayName=`ScrollArea`;var hr=(0,Q.forwardRef)(({className:e,orientation:t=`vertical`,...n},i)=>(0,Q.useContext)(pr)?null:(0,$.jsx)(cr,{ref:i,orientation:t,"data-slot":`scroll-area-scrollbar`,className:r(`group/scrollbar absolute z-20 flex touch-none select-none`,`opacity-0 transition-opacity duration-120 ease-out delay-160`,`data-[hovering]:duration-160 data-[scrolling]:duration-160`,`data-[hovering]:opacity-100 data-[scrolling]:opacity-100`,`data-[hovering]:delay-0 data-[scrolling]:delay-0`,t===`vertical`&&`top-0 right-0 h-full w-2.5`,t===`horizontal`&&`bottom-0 left-0 h-2.5 w-full flex-col`,e),...n,children:(0,$.jsx)(ur,{"data-slot":`scroll-area-thumb`,className:r(`relative rounded-lg bg-[rgb(var(--overlay)/0.08)] transition-[background-color,width,height] duration-160 ease-in-out`,`group-hover/scrollbar:bg-[rgb(var(--overlay)/0.12)] active:!bg-[rgb(var(--overlay)/0.16)]`,t===`vertical`&&`mx-auto my-1 w-1 -translate-x-0.5 h-[var(--scroll-area-thumb-height)] group-hover/scrollbar:w-1.5`,t===`horizontal`&&`my-auto mx-1 h-1 -translate-y-0.5 w-[var(--scroll-area-thumb-width)] group-hover/scrollbar:h-1.5`)})}));hr.displayName=`ScrollBar`;function gr(){let{isLoadingMcp:e,isLoadingProviders:t,isUpdatingMcp:n,isUpdatingProvider:r,mcpConnections:i=[],modelCatalog:a,onDiscoverModels:o,onMcpOAuth:s,onRemoveMcp:c,onRemoveProvider:l,onThemePreferenceChange:u,onUpdateMcp:d,onUpdateProvider:f,providers:p=[],saveSettings:m,settings:h,settingsLoading:g,themePreference:_}=Ce(),{models:v,resources:y}=Se(),[b,x]=(0,Q.useState)(null),[S,C]=(0,Q.useState)(null),w=Xt(y),T=e=>{x(t=>t&&e(t))},{packageRows:E,packageError:D,resourceDirty:O,handlePackageRowsChange:k,revertResourceDraft:A}=yn({draft:b,settings:h,updateDraft:T}),{modelFilter:j,setModelFilter:M,modelOptions:N,modelDirty:P,addModels:F,removeModel:I,setDefaultModel:L,discoverProvider:R,discoveringProviderId:z,commitModelSettings:B,revertModelDraft:V,resetCommittedModelBaseline:H}=en({draft:b,setDraft:x,updateDraft:T,settings:h,providers:p,models:v,modelCatalog:a,onDiscoverModels:o,saveSettings:m,setSavingSection:C}),U=P||O;return(0,Q.useEffect)(()=>{if(!h)return;let e=h.effective;b&&U||b&&Yt(b,e)||x(e)},[b,U,h]),{isLoadingMcp:e,isLoadingProviders:t,isUpdatingMcp:n,isUpdatingProvider:r,mcpConnections:i,onMcpOAuth:s,onRemoveMcp:c,onRemoveProvider:l,onThemePreferenceChange:u,onUpdateMcp:d,onUpdateProvider:f,providers:p,resources:y,settingsLoading:g,themePreference:_,draft:b,savingSection:S,packageRows:E,packageError:D,modelFilter:j,setModelFilter:M,resourceSummary:w,modelOptions:N,modelDirty:P,resourceDirty:O,revertResourceDraft:A,revertModelDraft:V,resetDraft:()=>{h&&x(h.effective)},updateDraft:T,handlePackageRowsChange:k,addModels:F,removeModel:I,setDefaultModel:L,discoverProvider:R,discoveringProviderId:z,saveSection:async(e,t)=>{if(e===`models`&&b){if(!await B(b))throw Error(`Settings save failed`);return}C(e);try{await m(t),Z.success(`Pi settings saved`)}catch(e){throw Z.error(e instanceof Error?e.message:`Settings save failed`),e}finally{C(null)}},requestCloseSettings:async()=>S===`models`?`wait`:O?`discard-prompt`:P&&b?await B(b,{silent:!0})?`close`:`discard-prompt`:`close`,resetCommittedModelBaseline:H}}function _r({active:e,onClick:t,icon:n,label:i}){return(0,$.jsxs)(`button`,{type:`button`,onClick:t,className:r(`flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-left text-label transition-colors`,e?`bg-background text-foreground shadow-sm`:`text-muted-foreground hover:bg-muted hover:text-foreground`),children:[(0,$.jsx)(n,{className:`size-4 shrink-0`}),(0,$.jsx)(`span`,{children:i})]})}function vr({open:e,onOpenChange:t,initialTab:n}){return(0,Q.useEffect)(()=>{te(ne())},[]),(0,$.jsx)(yr,{initialTab:n,onOpenChange:t,open:e})}function yr({initialTab:e,onOpenChange:t,open:n}){let r=(0,Q.useRef)(()=>{t(!1)});return(0,$.jsx)(ue,{open:n,onOpenChange:(e,n)=>{if(e){t(!0);return}r.current(n)},children:n?(0,$.jsx)(xr,{initialTab:e,onCloseAttemptRef:r,onOpenChange:t}):null})}function br({activeTab:e,composerIntent:t,form:n,onComposerIntentChange:r,onComposerIntentKeyChange:i,preferences:a,updatePreference:o}){let{isLoadingMcp:s,isLoadingProviders:c,isUpdatingMcp:l,isUpdatingProvider:u,mcpConnections:d,onMcpOAuth:f,onRemoveMcp:p,onRemoveProvider:m,onThemePreferenceChange:h,onUpdateMcp:g,onUpdateProvider:_,providers:v,resources:b,settingsLoading:x,themePreference:S,draft:C,savingSection:w,packageRows:T,packageError:E,modelFilter:D,setModelFilter:O,resourceSummary:k,modelOptions:A,modelDirty:j,resourceDirty:M,revertResourceDraft:N,revertModelDraft:P,updateDraft:F,handlePackageRowsChange:I,addModels:L,removeModel:R,setDefaultModel:z,discoverProvider:B,discoveringProviderId:V,saveSection:H}=n,U=e=>(0,$.jsx)(fn,{scope:e,draft:C,updateDraft:F,onEnableSkillCommandsChange:e=>F(t=>({...t,enableSkillCommands:e})),onExtensionsChange:e=>F(t=>({...t,extensions:e})),onPackageRowsChange:I,onPromptsChange:e=>F(t=>({...t,prompts:e})),onRevert:N,onSave:()=>C&&H(`resources`,{...qt(C),...e===`harness`?Jt(C):{}}),onSkillsChange:e=>F(t=>({...t,skills:e})),onThemesChange:e=>F(t=>({...t,themes:e})),packageError:E,packageRows:T,resourceDirty:M,resources:b,resourceSummary:k,saving:w===`resources`,settingsLoading:x});return{appearance:()=>(0,$.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h3`,{className:`text-lg font-medium`,children:`Appearance`}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Customize the look and feel of the interface.`})]}),(0,$.jsx)(_t,{onThemePreferenceChange:h,themePreference:S}),(0,$.jsx)(ft,{label:`Density`,description:`Adjust spacing across chat and panels.`,children:(0,$.jsx)(y,{"aria-label":`Density`,value:a.density,onValueChange:e=>o(`density`,e),options:[{label:`Comfortable`,value:`comfortable`},{label:`Compact`,value:`compact`}]})}),(0,$.jsx)(ft,{label:`Motion`,description:`Respect the system setting or reduce UI motion.`,children:(0,$.jsx)(y,{"aria-label":`Motion`,value:a.motion,onValueChange:e=>o(`motion`,e),options:[{label:`System`,value:`system`},{label:`Reduced`,value:`reduced`}]})})]}),chat:()=>(0,$.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h3`,{className:`text-lg font-medium`,children:`Chat`}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Control transcript behavior.`})]}),(0,$.jsx)(ft,{label:`Streaming transcript`,description:`Follow new output or preserve the reading position.`,children:(0,$.jsx)(y,{"aria-label":`Streaming transcript`,value:a.transcript,onValueChange:e=>o(`transcript`,e),options:[{label:`Follow output`,value:`follow`},{label:`Manual`,value:`manual`}]})}),(0,$.jsx)(ht,{enabled:t?.enabled??!1,keySource:t?.keySource??`none`,status:t?.status??`unconfigured`,onClearKey:()=>i?.(null),onEnabledChange:r,onSaveKey:e=>i?.(e)})]}),mcp:()=>(0,$.jsx)(ee,{connections:d,isLoading:s??!1,isPending:l??!1,onOAuth:f,onRemove:p,onUpsert:g}),sandbox:()=>(0,$.jsx)(mn,{isLoading:c??!1,isPending:u??!1,providers:v,onUpdateProvider:_}),providers:()=>(0,$.jsx)(Wt,{isLoading:c??!1,isPending:u??!1,providers:v,onRemoveProvider:m,onUpdateProvider:_}),"llm-models":()=>(0,$.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Saving writes the same settings file Prime Agent reads. If you change these settings in the Prime Agent terminal at the same moment, the later save wins.`}),(0,$.jsx)(Ct,{draft:C,discoveringProviderId:V,modelDirty:j,modelFilter:D,modelOptions:A,onAddModels:L,onDiscoverProvider:B,onModelFilterChange:O,onRemoveModel:R,onSetDefaultModel:z,providers:v,onRevert:P,onSave:()=>C&&H(`models`,Gt(C)),saving:w===`models`,settingsLoading:x})]}),skills:()=>U(`skills`),"pi-harness":()=>U(`harness`),keybindings:()=>(0,$.jsxs)(`div`,{className:`flex flex-col gap-4 text-sm`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h3`,{className:`text-lg font-medium`,children:`Keybindings`}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Every shortcut also has a visible control in the header, panel, or composer.`})]}),(0,$.jsxs)(`div`,{className:`rounded-xl border p-4 font-mono text-xs leading-7`,children:[(0,$.jsx)(`div`,{children:`Command palette: Ctrl/Command K`}),(0,$.jsx)(`div`,{children:`Conversation sidebar: Ctrl/Command B`}),(0,$.jsx)(`div`,{children:`Toggle Resources: Ctrl/Command Shift 1`}),(0,$.jsx)(`div`,{children:`Toggle Workspace: Ctrl/Command Shift 2`}),(0,$.jsx)(`div`,{children:`Toggle Artifacts: Ctrl/Command Shift 3`}),(0,$.jsx)(`div`,{children:`Focus active panel: Ctrl/Command Shift P`}),(0,$.jsx)(`div`,{children:`Return focus to chat: Ctrl/Command Shift C`}),(0,$.jsx)(`div`,{children:`Close active panel: Escape`})]})]}),sessions:()=>(0,$.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h3`,{className:`text-lg font-medium`,children:`Sessions`}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Set local conversation preferences. Provider and workspace configuration remains Fleet Prime-owned.`})]}),(0,$.jsx)(ft,{label:`Confirm session deletion`,description:`Require confirmation before deleting a saved conversation.`,children:(0,$.jsx)(he,{checked:a.confirmSessionDelete,onCheckedChange:e=>o(`confirmSessionDelete`,e),"aria-label":`Confirm session deletion`})}),(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Provider credentials, OAuth, models, sandbox configuration, and workspace selection are managed by Fleet Prime and its CLI.`})]})}[e]()}function xr({initialTab:e,onCloseAttemptRef:t,onOpenChange:n}){let r=gr(),{composerIntent:i,onComposerIntentChange:a,onComposerIntentKeyChange:o}=Ce(),{resourceDirty:s,revertResourceDraft:c,resetDraft:l,requestCloseSettings:u,resetCommittedModelBaseline:d}=r,[f,p]=(0,Q.useState)(()=>e??`appearance`),[m,h]=(0,Q.useState)(ne);(0,Q.useEffect)(()=>{q(m)},[m]);let g=(e,t)=>{h(n=>({...n,[e]:t}))},[_,v]=(0,Q.useState)(!1),[b,x]=(0,Q.useState)(`resource`),S=_n.find(e=>e.id===f)??_n[0],C=(e,t)=>{if(e){n(!0);return}t?.cancel(),(async()=>{let e=await u();if(e===`close`){n(!1);return}if(e===`wait`){Z.message(`Saving model list…`);return}x(s?`resource`:`model`),v(!0)})()};t.current=e=>{C(!1,e)};let w=()=>{c(),l(),d(),v(!1),n(!1)};(0,Q.useEffect)(()=>{d()},[d]);let T=(0,$.jsx)(br,{activeTab:f,composerIntent:i,form:r,onComposerIntentChange:a,onComposerIntentKeyChange:o,preferences:m,updatePreference:g});return(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(se,{className:`flex h-[min(640px,calc(100dvh-4rem))] w-full max-w-[calc(100%-2rem)] overflow-hidden rounded-2xl p-0 sm:max-w-[min(860px,calc(100%-2rem))]`,children:[(0,$.jsx)(ce,{className:`sr-only`,children:`Settings`}),(0,$.jsx)(le,{className:`sr-only`,children:`Customize your settings here.`}),(0,$.jsxs)(`div`,{className:`flex h-full w-full min-h-0 min-w-0 flex-1`,children:[(0,$.jsxs)(`nav`,{"aria-label":`Settings sections`,className:`hidden h-full w-52 shrink-0 flex-col border-r border-border bg-sidebar sm:flex`,children:[(0,$.jsx)(`div`,{className:`px-6 pt-6 pb-2 text-label font-semibold`,children:`Settings`}),(0,$.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto overscroll-contain px-2 pb-6`,children:gn.map(e=>(0,$.jsxs)(`div`,{className:`py-2`,children:[(0,$.jsx)(`p`,{className:`px-2 pb-1 text-caption font-medium uppercase tracking-wide text-muted-foreground`,children:e.label}),(0,$.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:_n.filter(t=>t.group===e.id).map(e=>(0,$.jsx)(_r,{active:f===e.id,onClick:()=>p(e.id),icon:e.icon,label:e.title},e.id))})]},e.id))})]}),(0,$.jsxs)(`main`,{className:`flex h-full w-full min-h-0 min-w-0 flex-1 flex-col overflow-hidden`,children:[(0,$.jsx)(`header`,{className:`flex h-14 w-full shrink-0 items-center gap-2 border-b border-border/10 px-6`,children:(0,$.jsx)(`div`,{className:`flex w-full flex-1 items-center justify-between`,children:(0,$.jsx)(bn,{children:(0,$.jsxs)(xn,{children:[(0,$.jsx)(Sn,{className:`hidden sm:block`,children:`Settings`}),(0,$.jsx)(wn,{className:`hidden sm:block`}),(0,$.jsx)(Sn,{children:(0,$.jsx)(Cn,{children:S.title})})]})})})}),(0,$.jsx)(`div`,{className:`w-full shrink-0 border-b border-border/10 bg-muted/5 px-4 py-2.5 sm:hidden`,children:(0,$.jsx)(y,{"aria-label":`Settings sections`,value:f,onValueChange:e=>{vn(e)&&p(e)},options:_n.map(e=>({label:e.title,value:e.id}))})}),(0,$.jsx)(mr,{className:`min-h-0 w-full flex-1`,children:(0,$.jsx)(`div`,{id:`panel-${f}`,role:`tabpanel`,"aria-label":S.title,tabIndex:0,className:`w-full p-6 outline-none`,children:T})})]})]})]}),(0,$.jsx)(Ae,{open:_,onOpenChange:v,children:(0,$.jsxs)(Te,{children:[(0,$.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,$.jsx)(ke,{children:`Discard unsaved changes?`}),(0,$.jsx)(we,{children:b===`resource`?`Your resource changes have not been committed. If you leave settings now, those changes will be lost.`:`Your model list could not be saved. If you leave settings now, those changes will be lost.`})]}),(0,$.jsxs)(De,{children:[(0,$.jsx)(Oe,{children:`Keep editing`}),(0,$.jsx)(Ee,{onClick:w,children:`Discard changes`})]})]})})]})}export{vr as SettingsDialog};
|