@qredence/fleet 0.9.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/bin/prime-runtime.d.mts +19 -0
  3. package/bin/prime-runtime.mjs +42 -5
  4. package/dist/web/client/assets/{agents-CGjUBYX7.js → agents-BMQXA18L.js} +2 -2
  5. package/dist/web/client/assets/{agents-page-CTuFJL9H.js → agents-page-D2soW46O.js} +1 -1
  6. package/dist/web/client/assets/{chat-queries-CfZiupub.js → chat-queries-ty76G6rK.js} +1 -1
  7. package/dist/web/client/assets/{connectors-CFxLqG2x.js → connectors-E4KW6hBL.js} +2 -2
  8. package/dist/web/client/assets/{connectors-page-DQJdoAnl.js → connectors-page-CDzzjCIJ.js} +1 -1
  9. package/dist/web/client/assets/globals-DDDleTbS.css +2 -0
  10. package/dist/web/client/assets/{index-C9FHZDGw.js → index-CEZTSuLf.js} +2 -2
  11. package/dist/web/client/assets/{mcp-connections-section-DEo6Kemv.js → mcp-connections-section-BsNhp1b2.js} +2 -2
  12. package/dist/web/client/assets/routes-EKRITFZz.js +14 -0
  13. package/dist/web/client/assets/settings-dialog-BomLOETY.js +3 -0
  14. package/dist/web/client/bundle-budget.json +5 -5
  15. package/dist/web/server/{_tanstack-start-manifest_v-B6ne-00G-OFX7UD4K.js → _tanstack-start-manifest_v-BiMhF9NX-QUZEGAB6.js} +7 -7
  16. package/dist/web/server/{agents-BwzqhPjK-ANFHE5AG.js → agents-DOgCHixY-KUZP2VDO.js} +2 -2
  17. package/dist/web/server/{agents-page-DEqPV-eG-BR5MR74O.js → agents-page-BdiR9H8w-M6X6SXMF.js} +3 -3
  18. package/dist/web/server/{artifacts-panel-DLO8OfXb-B2ZWCDFP.js → artifacts-panel-BNiaRF83-HDC6VQ66.js} +5 -5
  19. package/dist/web/server/{chat-command-palette-CaDQAMAu-KDH7BTDS.js → chat-command-palette-CT9aJAWG-LV26BDEW.js} +5 -5
  20. package/dist/web/server/{chunk-UDUG3MYZ.js → chunk-27J2LPAW.js} +2 -2
  21. package/dist/web/server/{chunk-V2GCVTDP.js → chunk-3CU2ITG7.js} +33 -48
  22. package/dist/web/server/{chunk-B5FKCW75.js → chunk-3R7XCOWI.js} +4 -4
  23. package/dist/web/server/{chunk-6AFVCERK.js → chunk-4TKPOOIG.js} +4 -4
  24. package/dist/web/server/{chunk-HUHUPGHT.js → chunk-4YQ7RBB7.js} +5 -5
  25. package/dist/web/server/{chunk-5IE54MRG.js → chunk-5XRESJQR.js} +3 -3
  26. package/dist/web/server/{chunk-TOJA3X5N.js → chunk-BLGKLQJG.js} +16 -5
  27. package/dist/web/server/{chunk-TQ2RECTH.js → chunk-C5XHGLET.js} +1 -1
  28. package/dist/web/server/{chunk-TTNONWZZ.js → chunk-LEZMRXSP.js} +923 -697
  29. package/dist/web/server/{chunk-KDCSEISZ.js → chunk-NZCEQWK2.js} +2 -1
  30. package/dist/web/server/{chunk-VM3U6PUU.js → chunk-QOZCYKMA.js} +2 -2
  31. package/dist/web/server/{connectors-C0xm91Ss-DJVBGD73.js → connectors-Dv_uPdv0-2X5VWQXK.js} +2 -2
  32. package/dist/web/server/{connectors-page-B6tJNZ6c-R5K4NSAT.js → connectors-page-DW75T-uH-EKRHUZ6K.js} +4 -4
  33. package/dist/web/server/{create-project-dialog-PFPHHWIV-GH7JR5IK.js → create-project-dialog-EwieT1Vw-X5MYQSZM.js} +5 -5
  34. package/dist/web/server/{openui-renderer-B9D8-Av--LFZP4U5V.js → openui-renderer-DCkg_JoD-4QCKSVY5.js} +4 -4
  35. package/dist/web/server/{resources-panel-CTzOOKPz-5G6RS2D6.js → resources-panel-s0mgyvgQ-FVMBBLJJ.js} +6 -6
  36. package/dist/web/server/{router-CnBux_Ld-YTVBMJFL.js → router-DXxChQOI-B7VVEX3H.js} +2 -2
  37. package/dist/web/server/{routes-BUGzvQoO-WW43X7W2.js → routes-D-g2ILNg-LDYCQ4NU.js} +4 -4
  38. package/dist/web/server/server.js +2 -2
  39. package/dist/web/server/{session-activity-panel-f0d3fCm7-I6L5IKFQ.js → session-activity-panel-wC0jAJvs-QAHJXPAM.js} +6 -6
  40. package/dist/web/server/{session-reasoning-panel-QIt_xjP0-FKJWMNHO.js → session-reasoning-panel-B_K8YgF5-AQPMFM3Y.js} +5 -5
  41. package/dist/web/server/{session-tool-renderer-Cg_ZPHxS-BNQKNJNZ.js → session-tool-renderer-D96BACVh-CH5CV3TS.js} +5 -5
  42. package/dist/web/server/{session-tree-panel-B--el8O5-NZOZJM5L.js → session-tree-panel-CZGXNZIP-FBB3XGMN.js} +5 -5
  43. package/dist/web/server/{settings-dialog-D_eJN2ia-W47Y474K.js → settings-dialog-BrjqiTVe-H7WOTB4I.js} +145 -66
  44. package/dist/web/server/{subagent-chat-panel-C9nWP21E-D5C2TTYD.js → subagent-chat-panel-Dz62jo_m-X4ZRN5KI.js} +8 -8
  45. package/dist/web/server/{subagents-panel-fAKvBNRG-O7QHXNE2.js → subagents-panel-CwpbzJJz-N3ISHODM.js} +8 -8
  46. package/dist/web/server/{workspace-panel-CZMNMU63-SYOSM3B7.js → workspace-panel-C7akv5b9-XUKEHPOP.js} +6 -6
  47. package/package.json +1 -1
  48. package/dist/web/client/assets/globals-DJhWyayo.css +0 -2
  49. package/dist/web/client/assets/routes-ja_liP8Z.js +0 -14
  50. package/dist/web/client/assets/settings-dialog-DiikSLhF.js +0 -1
@@ -0,0 +1,3 @@
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 W}from"./mcp-connections-section-BsNhp1b2.js";import{t as G}from"./search-Cb6fFWew.js";import{t as K}from"./trash-sm2UyOxe.js";import{t as q}from"./button-CWYjn8Zk.js";import{a as J,n as ee,r as te}from"./ui-preferences-B-PNDkyY.js";import{n as ne,t as re}from"./alert-CzWGeumf.js";import{a as Y,i as ie,r as X}from"./provider-catalog-CLEDlH_v.js";import{a as ae,n as oe,o as se,r as ce,t as le}from"./dialog-CK8dym6z.js";import{a as ue,i as de,n as fe,r as pe,t as me}from"./switch-BrxDfsX6.js";import{i as he,n as ge,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)(fe,{"data-invalid":u||void 0,children:[(0,$.jsx)(ue,{htmlFor:l,children:t}),(0,$.jsxs)(ve,{children:[(0,$.jsx)(ge,{align:`inline-start`,children:(0,$.jsx)(He,{})}),(0,$.jsx)(he,{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)(ge,{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)(fe,{"data-invalid":l||void 0,children:[(0,$.jsx)(ue,{htmlFor:c,children:r}),(0,$.jsxs)(ve,{children:[(0,$.jsx)(ge,{align:`inline-start`,children:(0,$.jsx)(t,{})}),(0,$.jsx)(he,{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)(fe,{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)(ue,{className:`text-sm font-medium text-foreground`,children:a}),n?(0,$.jsx)(pe,{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)(me,{"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)(q,{type:`button`,size:`compact`,disabled:m||!o.trim(),onClick:()=>void g(),children:`Save key`}),t===`settings`?(0,$.jsx)(q,{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)(fe,{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)(ue,{children:`Theme`}),(0,$.jsx)(pe,{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.useState)({}),v=(0,Q.useRef)(g),y=(0,Q.useRef)(s);(0,Q.useEffect)(()=>{y.current=s},[s]);let b=(0,Q.useCallback)(async(e,t=!1)=>{let n=v.current[e];if(n?.loading||!t&&n?.updatedAt&&Date.now()-n.updatedAt<6e4)return;let r=t=>{v.current={...v.current,[e]:t??{}},_(v.current)};r({...n,loading:!0,error:!1});try{await y.current(e),r({updatedAt:Date.now()})}catch{r({loading:!1,error:!0})}},[]),x=[...t??[]].filter(t=>e.has(t)).sort((e,t)=>e.localeCompare(t)).join(`
2
+ `);(0,Q.useEffect)(()=>{if(l)for(let e of x.split(`
3
+ `).filter(Boolean))b(e)},[l,x,b]);let S=(0,Q.useMemo)(()=>a.filter(t=>!e.has(t.provider)||vt(t,i)?!1:!h||xt(t).includes(h)),[e,i,a,h]),C=(0,Q.useMemo)(()=>{let e=new Map;for(let t of S){let n=e.get(t.provider);n?n.push(t):e.set(t.provider,[t])}return[...e.entries()]},[S]),T=(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]),D=(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]),O=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)(le,{open:l,onOpenChange:e=>{e||m(new Set),c(e)},children:(0,$.jsxs)(oe,{className:`flex max-h-[calc(100dvh-2rem)] min-w-0 max-w-[calc(100%-2rem)] sm:max-w-lg flex-col overflow-hidden`,children:[(0,$.jsxs)(ae,{className:`shrink-0`,children:[(0,$.jsx)(se,{children:`Add models`}),(0,$.jsxs)(ce,{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:`max-h-28 shrink-0 overflow-y-auto`,children:(0,$.jsx)(`div`,{className:`flex min-w-0 flex-wrap gap-1.5 [&_button]:max-w-full [&_button]:h-auto [&_button]:whitespace-normal [&_button]:break-words`,children:T.map(e=>{let t=g[e]?.loading??n===e,r=D.get(e)??0;return(0,$.jsxs)(q,{type:`button`,variant:`outline`,size:`compact`,disabled:t,onClick:()=>{b(e,!0)},children:[t?(0,$.jsx)(xe,{"data-icon":`inline-start`}):(0,$.jsx)(z,{"data-icon":`inline-start`}),`Refresh `,u(e),g[e]?.error?` · Refresh failed (stale)`:``,r>0?(0,$.jsxs)(`span`,{className:`tabular-nums text-muted-foreground`,children:[`· `,r,` active`]}):null]},e)})})}),(0,$.jsxs)(ve,{children:[(0,$.jsx)(ge,{align:`inline-start`,children:(0,$.jsx)(G,{})}),(0,$.jsx)(he,{"aria-label":`Search discovered models`,value:d,onChange:e=>f(e.target.value),placeholder:`Search discovered models…`})]}),(0,$.jsx)(`div`,{className:`min-h-0 min-w-0 flex-1 overflow-y-auto overflow-x-hidden overscroll-contain`,"aria-live":`polite`,children:C.length===0?(0,$.jsx)(`p`,{className:`py-6 text-center text-xs text-pretty text-muted-foreground`,children:Object.values(g).some(e=>e.loading)?`Loading models…`:S.length===0&&!h?`No additional models available. Providers may have returned an empty list or all models are already enabled.`:`No models match your search.`}):(0,$.jsx)(`div`,{className:`flex flex-col gap-3`,children:C.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),(D.get(e)??0)>0?(0,$.jsxs)(`span`,{className:`ml-1 font-normal normal-case tabular-nums`,children:[`· `,D.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:()=>O(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 shrink-0 items-center justify-end gap-1.5`,children:[(0,$.jsx)(q,{type:`button`,variant:`ghost`,size:`compact`,onClick:()=>c(!1),children:`Cancel`}),(0,$.jsxs)(q,{type:`button`,size:`compact`,disabled:p.size===0,onClick:()=>{let e=S.filter(e=>p.has(e.id));e.length>0&&o(e),m(new Set),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)(ge,{align:`inline-start`,children:(0,$.jsx)(G,{})}),(0,$.jsx)(he,{"aria-label":`Search listed models`,value:i,onChange:e=>c(e.target.value),placeholder:`Search listed models…`,disabled:v||T.length===0})]}),(0,$.jsxs)(q,{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)(q,{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)(q,{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)(q,{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)(K,{"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)(de,{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)(re,{className:`px-3 py-2`,children:(0,$.jsxs)(ne,{className:`text-xs text-pretty`,children:[`Sign-in has to run inside Prime Agent. In a terminal, start Prime Agent against the same account as Fleet, then run `,(0,$.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-caption text-foreground`,children:`/login`}),` `,`and choose `,e.name,`. Fleet reads the stored credential on every request, so a restart is not needed. If Fleet uses a non-default account directory, start Prime Agent with the same`,` `,(0,$.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-caption text-foreground`,children:`PRIME_AGENT_CODING_AGENT_DIR`}),` `,`it uses.`]})})}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)).sort((e,t)=>e.id===`custom`?-1:t.id===`custom`?1:e.name.localeCompare(t.name))},[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??(X(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`||X(r)?l.trim().length===0||Ft(p).length===0?!1:_.trim().length>0:Y(r)?l.trim().length===0||d.trim().length===0?!1:ie(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`||X(e),r=Y(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&&ie(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:Y(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`||X(e.id)?`custom provider endpoint openai anthropic google compatible`:Y(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)(q,{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 save credentials in Prime Agent’s auth.json.`})]})]}),(0,$.jsxs)(ve,{children:[(0,$.jsx)(ge,{align:`inline-start`,children:(0,$.jsx)(G,{})}),(0,$.jsx)(he,{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)(q,{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`||X(e.id),C=T[e.id]??(S?T.custom:{placeholder:`Enter credentials…`,help:`Stored securely in your local environment overrides.`}),w=Y(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)(q,{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)(re,{className:`px-3 py-2`,children:[(0,$.jsx)(l,{}),(0,$.jsx)(ne,{className:`text-xs text-pretty`,children:C.help})]}),(0,$.jsxs)(`div`,{className:`flex items-center justify-end gap-1.5`,children:[(0,$.jsx)(q,{type:`button`,variant:`ghost`,size:`compact`,onClick:b,children:`Cancel`}),(0,$.jsxs)(q,{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=Y(n.id),a=n.id===`custom`||X(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=X(e.id),a=T[e.id]??T[i?`custom`:`openai-chat-completions`],j=Y(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)(q,{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)(K,{"data-icon":`inline-start`}),`Remove`]}),(0,$.jsxs)(q,{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)(re,{className:`px-3 py-2`,children:[(0,$.jsx)(l,{}),(0,$.jsx)(ne,{className:`text-xs text-pretty`,children:a.help})]}),(0,$.jsx)(`div`,{className:`flex items-center justify-end`,children:(0,$.jsxs)(q,{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:W}=It({onRemoveProvider:n,onUpdateProvider:r,providers:i}),K={api:c,apiKey:l,baseUrl:d,modelId:T,models:E,displayName:_,showPassword:W,attemptedSave:u,canSave:f},J={isPending:t,canRemove:!!n},ee={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:[`Provider credentials are stored in Prime Agent’s`,` `,(0,$.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5 font-mono text-caption text-foreground`,children:`auth.json`}),`. Custom providers and model definitions are stored in models.json. Enabled models and defaults are saved in settings.json, or the existing project settings file.`]}),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:W,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)(ge,{align:`inline-start`,children:(0,$.jsx)(G,{})}),(0,$.jsx)(he,{type:`text`,placeholder:`Search credentials…`,value:A,onChange:e=>V(e.target.value),"aria-label":`Search credentials`,disabled:e||a.length===0})]}),(0,$.jsxs)(q,{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)(q,{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:K,operation:J,actions:ee,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 t=new Map,n=new Map(v.map(e=>[e.id,e]));for(let n of v)Object.hasOwn(f,n.provider)&&!vt(n,e?.enabledModels)||_.has(n.provider)&&n.available!==!1&&t.set(n.id,n);for(let e of Object.values(f).flat())if(_.has(e.provider)&&e.available!==!1){let r=n.get(e.id);t.set(e.id,r?{...e,...r}:e)}return[...t.values()]},[v,_,f,e?.enabledModels]),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(n=>({...n,[e]:t}))}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)(me,{"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)(me,{"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)(q,{type:`button`,variant:`ghost`,size:`icon-compact`,"aria-label":`Remove ${e}`,onClick:()=>n(i.filter(t=>t!==e)),children:(0,$.jsx)(K,{})})},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)(he,{"aria-label":e,value:a,onChange:e=>o(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),f())},placeholder:r}),(0,$.jsx)(ge,{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)(me,{"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)(q,{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)(de,{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)(re,{className:`px-3 py-2`,children:[(0,$.jsx)(l,{}),(0,$.jsx)(ne,{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)(q,{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),W=Q.useRef(null),G=Q.useRef(null),K=Q.useRef(null),q=Q.useRef(null),J=Q.useRef(null),ee=Q.useRef(0),te=Q.useRef(0),ne=Q.useRef(0),re=Q.useRef(0),Y=Q.useRef(`vertical`),ie=Q.useRef(zn),X=Q.useRef(null);function ae(e){let t=e?O:E,n=e?_:y;t(!0),n.start(500,()=>{t(!1)})}let oe=a(e=>{let t=e.x-ie.current.x,n=e.y-ie.current.y;ie.current=e,n!==0&&ae(!0),t!==0&&ae(!1)}),se=a(()=>{let e=H.current;e&&X.current===null&&(X.current=e.style.scrollSnapType,e.style.scrollSnapType=`none`)}),ce=a(e=>{if(e.button!==0||J.current!==null&&(Y.current===`vertical`?G.current:K.current)?.hasPointerCapture(J.current))return;J.current=e.pointerId,ee.current=e.clientY,te.current=e.clientX,Y.current=e.currentTarget.getAttribute(Rn);let t=H.current;t&&(ne.current=t.scrollTop,re.current=t.scrollLeft,se()),(Y.current===`vertical`?G.current:K.current)?.setPointerCapture(e.pointerId)}),le=a(e=>{if(e.pointerId!==J.current)return;J.current=null,(Y.current===`vertical`?O:E)(!1),X.current!==null&&(H.current&&(H.current.style.scrollSnapType=X.current),X.current=null);let t=Y.current===`vertical`?G.current:K.current;t?.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId)}),ue=a(e=>{if(e.pointerId!==J.current)return;if(e.buttons%2==0){le(e);return}let t=H.current;if(!t)return;let n=Y.current===`vertical`,r=n?G.current:K.current,i=n?U.current:W.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-ee.current:e.clientX-te.current,d=l<=0?0:u/l,f=n?t.scrollHeight:t.scrollWidth,p=n?t.clientHeight:t.clientWidth,m=(n?ne.current:re.current)+d*(f-p);n?t.scrollTop=m:t.scrollLeft=m,e.preventDefault(),ae(n)});function de(e){A(e.pointerType===`touch`)}function fe(e){if(de(e),e.pointerType!==`touch`){let t=u(V.current,e.target);w(t)}}let pe=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]),me={role:`presentation`,onPointerEnter:fe,onPointerMove:fe,onPointerDown:de,onPointerLeave(){w(!1)},style:{position:`relative`,[In]:`${N.height}px`,[Ln]:`${N.width}px`}},he=o(`div`,e,{state:pe,ref:[t,V],props:[me,c],stateAttributesMapping:Fn}),ge=Q.useMemo(()=>({handlePointerDown:ce,handlePointerMove:ue,handlePointerUp:le,handleScroll:oe,disableViewportSnap:se,cornerSize:N,setCornerSize:P,thumbSize:F,setThumbSize:I,hasMeasuredScrollbar:j,setHasMeasuredScrollbar:M,touchModality:k,cornerRef:q,scrollingX:T,scrollingY:D,hovering:C,setHovering:w,viewportRef:H,scrollbarYRef:U,scrollbarXRef:W,thumbYRef:G,thumbXRef:K,rootId:g,hiddenState:z,setHiddenState:B,overflowEdges:L,setOverflowEdges:R,viewportState:pe,overflowEdgeThreshold:{xStart:l,xEnd:d,yStart:f,yEnd:m}}),[ce,ue,le,oe,se,N,F,j,k,T,D,C,g,z,L,pe,l,d,f,m]);return(0,$.jsxs)(Tn.Provider,{value:ge,children:[!S&&h.getElement(x),he]})});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,W=0;!O&&!D&&(U=t?.offsetWidth||0,W=n?.offsetHeight||0);let G=y.width===0&&y.height===0,K=G?U:0,q=G?W:0,J=Dn(n,`padding`,`x`),ee=Dn(t,`padding`,`y`),te=Dn(i,`margin`,`x`),ne=Dn(r,`margin`,`y`),re=V-J-te,Y=H-ee-ne,ie=n?Math.min(n.offsetWidth-K,re):re,X=t?Math.min(t.offsetHeight-q,Y):Y,ae=Math.max(16,ie*j),oe=Math.max(16,X*N);if(x(e=>ir(e,{width:ae,height:oe})),t&&r){let e=ar(r,Zn,h,I,o,oe,t.offsetHeight-oe-ee-ne);r.style.transform=`translate3d(0,${e}px,0)`}if(n&&i){let e=n.offsetWidth-ae-J-te,t=ar(i,Qn,M===`rtl`?-_:_,F,s,ae,e);i.style.transform=`translate3d(${M===`rtl`?-t:t}px,0,0)`}let se=[L,R,z,B];$n.forEach((t,n)=>{e.style.setProperty(t,`${se[n]}px`)}),a&&b(e=>ir(e,{width:U,height:W})),C(e=>ir(e,E));let ce={xStart:!O&&L>A.xStart,xEnd:!O&&R>A.xEnd,yStart:!D&&z>A.yStart,yEnd:!D&&B>A.yEnd};k(e=>ir(e,ce))});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`&&`block! w-full min-w-0! max-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=(0,Q.useRef)(void 0),T=Xt(y),E=e=>{x(t=>t&&e(t))},{packageRows:D,packageError:O,resourceDirty:k,handlePackageRowsChange:A,revertResourceDraft:j}=yn({draft:b,settings:h,updateDraft:E}),{modelFilter:M,setModelFilter:N,modelOptions:P,modelDirty:F,addModels:I,removeModel:L,setDefaultModel:R,discoverProvider:z,discoveringProviderId:B,commitModelSettings:V,revertModelDraft:H,resetCommittedModelBaseline:U}=en({draft:b,setDraft:x,updateDraft:E,settings:h,providers:p,models:v,modelCatalog:a,onDiscoverModels:o,saveSettings:m,setSavingSection:C}),W=F||k;return(0,Q.useEffect)(()=>{if(!h||w.current===h)return;let e=h.effective;b&&W||(w.current=h,!(b&&Yt(b,e))&&x(e))},[b,W,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:D,packageError:O,modelFilter:M,setModelFilter:N,resourceSummary:T,modelOptions:P,modelDirty:F,resourceDirty:k,revertResourceDraft:j,revertModelDraft:H,resetDraft:()=>{h&&x(h.effective)},updateDraft:E,handlePackageRowsChange:A,addModels:I,removeModel:L,setDefaultModel:R,discoverProvider:z,discoveringProviderId:B,saveSection:async(e,t)=>{if(e===`models`&&b){if(!await V(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`:k?`discard-prompt`:F&&b?await V(b,{silent:!0})?`close`:`discard-prompt`:`close`,resetCommittedModelBaseline:U}}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)(()=>{ee(te())},[]),(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)(le,{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)(W,{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)(me,{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)(te);(0,Q.useEffect)(()=>{J(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)(oe,{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)(se,{className:`sr-only`,children:`Settings`}),(0,$.jsx)(ce,{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 min-w-0 w-full flex-1`,viewportClassName:`overflow-x-hidden`,children:(0,$.jsx)(`div`,{id:`panel-${f}`,role:`tabpanel`,"aria-label":S.title,tabIndex:0,className:`min-w-0 w-full max-w-full p-4 outline-none [overflow-wrap:anywhere] sm:p-6`,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};
@@ -1,10 +1,10 @@
1
1
  {
2
- "timestamp": "2026-10-28T03:33:03.000Z",
3
- "routeEntry": "routes-ja_liP8Z.js",
4
- "routeEntryGzipBytes": 83119,
5
- "routeEntryReduction": 0.9214772506126397,
2
+ "timestamp": "2026-11-01T11:54:31.000Z",
3
+ "routeEntry": "routes-EKRITFZz.js",
4
+ "routeEntryGzipBytes": 83146,
5
+ "routeEntryReduction": 0.9214517436378992,
6
6
  "eagerFiles": 88,
7
- "eagerGzipBytes": 363969,
7
+ "eagerGzipBytes": 363997,
8
8
  "passed": true,
9
9
  "violations": []
10
10
  }
@@ -1,6 +1,6 @@
1
1
  import "./chunk-CZ7CSFO4.js";
2
2
 
3
- // web/app/dist/server/assets/_tanstack-start-manifest_v-B6ne-00G.js
3
+ // web/app/dist/server/assets/_tanstack-start-manifest_v-BiMhF9NX.js
4
4
  var tsrStartManifest = () => ({ routes: {
5
5
  __root__: {
6
6
  filePath: "/home/circleci/prime-agent/web/app/src/routes/__root.tsx",
@@ -15,7 +15,7 @@ var tsrStartManifest = () => ({ routes: {
15
15
  "/api/workspace/tree"
16
16
  ],
17
17
  preloads: [
18
- "/assets/index-C9FHZDGw.js",
18
+ "/assets/index-CEZTSuLf.js",
19
19
  "/assets/rolldown-runtime-hePW80VL.js",
20
20
  "/assets/react-Cvdyeg_0.js",
21
21
  "/assets/react-dom-B7th3XGm.js",
@@ -32,16 +32,16 @@ var tsrStartManifest = () => ({ routes: {
32
32
  scripts: [{ attrs: {
33
33
  type: "module",
34
34
  async: true,
35
- src: "/assets/index-C9FHZDGw.js"
35
+ src: "/assets/index-CEZTSuLf.js"
36
36
  } }]
37
37
  },
38
38
  "/": {
39
39
  filePath: "/home/circleci/prime-agent/web/app/src/routes/index.tsx",
40
40
  children: void 0,
41
41
  preloads: [
42
- "/assets/routes-ja_liP8Z.js",
42
+ "/assets/routes-EKRITFZz.js",
43
43
  "/assets/with-selector-B_VDO56x.js",
44
- "/assets/chat-queries-CfZiupub.js",
44
+ "/assets/chat-queries-ty76G6rK.js",
45
45
  "/assets/utils-oBThwhjm.js",
46
46
  "/assets/ease-DYVhTl2n.js",
47
47
  "/assets/use-reduced-motion-CFEp5oKr.js",
@@ -106,12 +106,12 @@ var tsrStartManifest = () => ({ routes: {
106
106
  "/agents": {
107
107
  filePath: "/home/circleci/prime-agent/web/app/src/routes/agents.tsx",
108
108
  children: void 0,
109
- preloads: ["/assets/agents-CGjUBYX7.js"]
109
+ preloads: ["/assets/agents-BMQXA18L.js"]
110
110
  },
111
111
  "/connectors": {
112
112
  filePath: "/home/circleci/prime-agent/web/app/src/routes/connectors.tsx",
113
113
  children: void 0,
114
- preloads: ["/assets/connectors-CFxLqG2x.js"]
114
+ preloads: ["/assets/connectors-E4KW6hBL.js"]
115
115
  }
116
116
  } });
117
117
  export {
@@ -1,9 +1,9 @@
1
1
  import "./chunk-CZ7CSFO4.js";
2
2
 
3
- // web/app/dist/server/assets/agents-BwzqhPjK.js
3
+ // web/app/dist/server/assets/agents-DOgCHixY.js
4
4
  import { Suspense, lazy } from "react";
5
5
  import { jsx } from "react/jsx-runtime";
6
- var AgentsPage = lazy(() => import("./agents-page-DEqPV-eG-BR5MR74O.js").then(({ AgentsPage: page }) => ({ default: page })));
6
+ var AgentsPage = lazy(() => import("./agents-page-BdiR9H8w-M6X6SXMF.js").then(({ AgentsPage: page }) => ({ default: page })));
7
7
  function PageLoading() {
8
8
  return /* @__PURE__ */ jsx("main", {
9
9
  className: "min-h-svh bg-background p-8",
@@ -16,13 +16,13 @@ import {
16
16
  import {
17
17
  chatClient,
18
18
  useChatProjects
19
- } from "./chunk-VM3U6PUU.js";
19
+ } from "./chunk-QOZCYKMA.js";
20
20
  import {
21
21
  Badge
22
22
  } from "./chunk-CE7U5QB2.js";
23
23
  import {
24
24
  useQuery
25
- } from "./chunk-KDCSEISZ.js";
25
+ } from "./chunk-NZCEQWK2.js";
26
26
  import {
27
27
  Button$1
28
28
  } from "./chunk-FSQWWR2M.js";
@@ -41,7 +41,7 @@ import {
41
41
  import "./chunk-NXAVRSI5.js";
42
42
  import "./chunk-CZ7CSFO4.js";
43
43
 
44
- // web/app/dist/server/assets/agents-page-DEqPV-eG.js
44
+ // web/app/dist/server/assets/agents-page-BdiR9H8w.js
45
45
  import { useState } from "react";
46
46
  import { jsx, jsxs } from "react/jsx-runtime";
47
47
  function AgentsPage() {
@@ -7,8 +7,8 @@ import {
7
7
  import {
8
8
  GenerativeTextRenderer,
9
9
  OpenUIHtmlArtifactView
10
- } from "./chunk-HUHUPGHT.js";
11
- import "./chunk-TTNONWZZ.js";
10
+ } from "./chunk-4YQ7RBB7.js";
11
+ import "./chunk-LEZMRXSP.js";
12
12
  import "./chunk-KSGGSGOA.js";
13
13
  import "./chunk-Q4ECIATK.js";
14
14
  import "./chunk-GNXIDE26.js";
@@ -27,10 +27,10 @@ import {
27
27
  import "./chunk-RX2ZJARF.js";
28
28
  import {
29
29
  UiErrorBoundary
30
- } from "./chunk-TQ2RECTH.js";
30
+ } from "./chunk-C5XHGLET.js";
31
31
  import "./chunk-CE7U5QB2.js";
32
32
  import "./chunk-6GYLXDX3.js";
33
- import "./chunk-KDCSEISZ.js";
33
+ import "./chunk-NZCEQWK2.js";
34
34
  import "./chunk-7DQQMT5V.js";
35
35
  import "./chunk-BD7YKYWL.js";
36
36
  import "./chunk-TXZDDJCT.js";
@@ -2022,7 +2022,7 @@ import "./chunk-DP65WGRD.js";
2022
2022
  import "./chunk-IGN54DHU.js";
2023
2023
  import "./chunk-CZ7CSFO4.js";
2024
2024
 
2025
- // web/app/dist/server/assets/artifacts-panel-DLO8OfXb.js
2025
+ // web/app/dist/server/assets/artifacts-panel-BNiaRF83.js
2026
2026
  import { useEffect, useMemo, useRef, useState } from "react";
2027
2027
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
2028
2028
  var DEFAULT_ARTIFACT_RUNS = [];
@@ -12,14 +12,14 @@ import "./chunk-BC4GIC2P.js";
12
12
  import "./chunk-FT7HNDR5.js";
13
13
  import {
14
14
  RIGHT_PANEL_DEFINITIONS
15
- } from "./chunk-V2GCVTDP.js";
16
- import "./chunk-VM3U6PUU.js";
15
+ } from "./chunk-3CU2ITG7.js";
16
+ import "./chunk-QOZCYKMA.js";
17
17
  import "./chunk-5MOXRFX6.js";
18
18
  import "./chunk-RX2ZJARF.js";
19
- import "./chunk-TQ2RECTH.js";
19
+ import "./chunk-C5XHGLET.js";
20
20
  import "./chunk-CE7U5QB2.js";
21
21
  import "./chunk-6GYLXDX3.js";
22
- import "./chunk-KDCSEISZ.js";
22
+ import "./chunk-NZCEQWK2.js";
23
23
  import "./chunk-7DQQMT5V.js";
24
24
  import "./chunk-BD7YKYWL.js";
25
25
  import "./chunk-TXZDDJCT.js";
@@ -40,7 +40,7 @@ import "./chunk-35RIM6VP.js";
40
40
  import "./chunk-NXAVRSI5.js";
41
41
  import "./chunk-CZ7CSFO4.js";
42
42
 
43
- // web/app/dist/server/assets/chat-command-palette-CaDQAMAu.js
43
+ // web/app/dist/server/assets/chat-command-palette-CT9aJAWG.js
44
44
  import { useState } from "react";
45
45
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
46
46
  function ChatCommandPalette({ open, onOpenChange, onNewSession, onStop, onResumeSession, onSetRightPanel, onThemeChange, sessions, isStreaming, themePreference }) {
@@ -2,9 +2,9 @@ import {
2
2
  Skeleton,
3
3
  getResourceChipTitle,
4
4
  resourceKey
5
- } from "./chunk-V2GCVTDP.js";
5
+ } from "./chunk-3CU2ITG7.js";
6
6
 
7
- // web/app/dist/server/assets/skeleton-loaders-JYHEYkXv.js
7
+ // web/app/dist/server/assets/skeleton-loaders-CmHiDl9j.js
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
9
  function ResourceNotice({ description, icon: Icon, title }) {
10
10
  return /* @__PURE__ */ jsxs("div", {
@@ -26,7 +26,7 @@ import {
26
26
  useUpdateChatSettings,
27
27
  useUpdateMcpConnection,
28
28
  useWorkspaceTree
29
- } from "./chunk-VM3U6PUU.js";
29
+ } from "./chunk-QOZCYKMA.js";
30
30
  import {
31
31
  Collapsible$1,
32
32
  CollapsibleContent,
@@ -47,7 +47,7 @@ import {
47
47
  decodeOpenPanelActionMessage,
48
48
  isSafeExternalUrl,
49
49
  segmentOpenUIContent
50
- } from "./chunk-TQ2RECTH.js";
50
+ } from "./chunk-C5XHGLET.js";
51
51
  import {
52
52
  Badge,
53
53
  useRender
@@ -76,7 +76,7 @@ import {
76
76
  ChatThinkingLevelSchema,
77
77
  WorkspaceRelativePathSchema,
78
78
  useQueryClient
79
- } from "./chunk-KDCSEISZ.js";
79
+ } from "./chunk-NZCEQWK2.js";
80
80
  import {
81
81
  AnimatePresence,
82
82
  LayoutGroup,
@@ -525,7 +525,7 @@ function isDaytonaNotConnectedError(error) {
525
525
  return error.status === 403;
526
526
  }
527
527
 
528
- // web/app/dist/server/assets/routes-BUGzvQoO.js
528
+ // web/app/dist/server/assets/routes-D-g2ILNg.js
529
529
  import { Fragment as Fragment4, Suspense as Suspense2, createContext as createContext8, forwardRef as forwardRef15, isValidElement, lazy as lazy2, memo, useCallback as useCallback3, useContext as useContext8, useEffect as useEffect3, useEffectEvent, useId, useLayoutEffect, useMemo as useMemo8, useReducer, useRef as useRef12, useState as useState7, useSyncExternalStore as useSyncExternalStore2 } from "react";
530
530
  import { Fragment as Fragment$1, jsx as jsx4, jsxs } from "react/jsx-runtime";
531
531
  import { createPortal } from "react-dom";
@@ -3233,7 +3233,7 @@ var TabsList = /* @__PURE__ */ React31.forwardRef(function TabsList2(componentPr
3233
3233
  });
3234
3234
  if (process.env.NODE_ENV !== "production") TabsList.displayName = "TabsList";
3235
3235
 
3236
- // web/app/dist/server/assets/routes-BUGzvQoO.js
3236
+ // web/app/dist/server/assets/routes-D-g2ILNg.js
3237
3237
  function isChatTextPart(part) {
3238
3238
  return part.type === "text";
3239
3239
  }
@@ -3485,7 +3485,7 @@ function PromptInput({ value, defaultValue = "", onValueChange, onSubmit, loadin
3485
3485
  ]
3486
3486
  });
3487
3487
  }
3488
- var LazyGenerativeTextRenderer = lazy2(() => import("./openui-renderer-B9D8-Av--LFZP4U5V.js").then(({ GenerativeTextRenderer }) => ({ default: GenerativeTextRenderer })));
3488
+ var LazyGenerativeTextRenderer = lazy2(() => import("./openui-renderer-DCkg_JoD-4QCKSVY5.js").then(({ GenerativeTextRenderer }) => ({ default: GenerativeTextRenderer })));
3489
3489
  function PlainTextFallback({ className, content }) {
3490
3490
  return /* @__PURE__ */ jsx4("div", {
3491
3491
  className: className ? `${className} whitespace-pre-wrap` : "whitespace-pre-wrap",
@@ -5479,13 +5479,13 @@ function normalizeAssistantToolParts(parts) {
5479
5479
  });
5480
5480
  return changed ? normalizedParts : parts;
5481
5481
  }
5482
- var LazyArtifactsPanel = lazy2(() => import("./artifacts-panel-DLO8OfXb-B2ZWCDFP.js").then(({ ArtifactsPanelContent }) => ({ default: ArtifactsPanelContent })));
5483
- var LazyResourcesPanel = lazy2(() => import("./resources-panel-CTzOOKPz-5G6RS2D6.js").then(({ ResourcesPanelContent }) => ({ default: ResourcesPanelContent })));
5482
+ var LazyArtifactsPanel = lazy2(() => import("./artifacts-panel-BNiaRF83-HDC6VQ66.js").then(({ ArtifactsPanelContent }) => ({ default: ArtifactsPanelContent })));
5483
+ var LazyResourcesPanel = lazy2(() => import("./resources-panel-s0mgyvgQ-FVMBBLJJ.js").then(({ ResourcesPanelContent }) => ({ default: ResourcesPanelContent })));
5484
5484
  var LazySessionInsightsPanel = lazy2(() => import("./session-insights-panel-BiVObm_6-AP4FITT7.js").then(({ SessionInsightsPanel }) => ({ default: SessionInsightsPanel })));
5485
5485
  var LazyReplPanel = lazy2(() => import("./repl-panel-1kSS1UGd-POXRYDDJ.js").then(({ ReplPanelContent }) => ({ default: ReplPanelContent })));
5486
- var LazySubagentsPanel = lazy2(() => import("./subagents-panel-fAKvBNRG-O7QHXNE2.js").then(({ SubagentsPanelContent }) => ({ default: SubagentsPanelContent })));
5487
- var LazyWorkspacePanel = lazy2(() => import("./workspace-panel-CZMNMU63-SYOSM3B7.js").then(({ WorkspacePanelContent }) => ({ default: WorkspacePanelContent })));
5488
- var LazySessionTreePanel = lazy2(() => import("./session-tree-panel-B--el8O5-NZOZJM5L.js").then(({ SessionTreePanel }) => ({ default: SessionTreePanel })));
5486
+ var LazySubagentsPanel = lazy2(() => import("./subagents-panel-CwpbzJJz-N3ISHODM.js").then(({ SubagentsPanelContent }) => ({ default: SubagentsPanelContent })));
5487
+ var LazyWorkspacePanel = lazy2(() => import("./workspace-panel-C7akv5b9-XUKEHPOP.js").then(({ WorkspacePanelContent }) => ({ default: WorkspacePanelContent })));
5488
+ var LazySessionTreePanel = lazy2(() => import("./session-tree-panel-CZGXNZIP-FBB3XGMN.js").then(({ SessionTreePanel }) => ({ default: SessionTreePanel })));
5489
5489
  function PanelFallback() {
5490
5490
  return /* @__PURE__ */ jsxs("div", {
5491
5491
  className: "flex min-h-32 flex-col gap-3 p-4",
@@ -7624,7 +7624,7 @@ function iconFor(kind) {
7624
7624
  return kind;
7625
7625
  }
7626
7626
  }
7627
- var LazySessionToolRenderer = lazy2(() => import("./session-tool-renderer-Cg_ZPHxS-BNQKNJNZ.js").then((n) => n.n).then(({ SessionToolRenderer: SessionToolRenderer2 }) => ({ default: SessionToolRenderer2 })));
7627
+ var LazySessionToolRenderer = lazy2(() => import("./session-tool-renderer-D96BACVh-CH5CV3TS.js").then((n) => n.n).then(({ SessionToolRenderer: SessionToolRenderer2 }) => ({ default: SessionToolRenderer2 })));
7628
7628
  function SessionToolRenderer(props) {
7629
7629
  return /* @__PURE__ */ jsx4(Suspense2, {
7630
7630
  fallback: /* @__PURE__ */ jsx4("div", {
@@ -7635,7 +7635,7 @@ function SessionToolRenderer(props) {
7635
7635
  children: /* @__PURE__ */ jsx4(LazySessionToolRenderer, { ...props })
7636
7636
  });
7637
7637
  }
7638
- var LazySessionReasoningPanel = lazy2(() => import("./session-reasoning-panel-QIt_xjP0-FKJWMNHO.js").then(({ SessionReasoningPanel: SessionReasoningPanel2 }) => ({ default: SessionReasoningPanel2 })));
7638
+ var LazySessionReasoningPanel = lazy2(() => import("./session-reasoning-panel-B_K8YgF5-AQPMFM3Y.js").then(({ SessionReasoningPanel: SessionReasoningPanel2 }) => ({ default: SessionReasoningPanel2 })));
7639
7639
  function SessionReasoningPanel(props) {
7640
7640
  return /* @__PURE__ */ jsx4(Suspense2, {
7641
7641
  fallback: /* @__PURE__ */ jsx4("div", {
@@ -9870,6 +9870,13 @@ var EMPTY_QUEUE_STATE = {
9870
9870
  steering: [],
9871
9871
  followUp: []
9872
9872
  };
9873
+ var EMPTY_SESSION_PRESENTATION = Object.freeze({
9874
+ revision: 0,
9875
+ userBash: [],
9876
+ rlmChildren: [],
9877
+ refinements: [],
9878
+ artifactRuns: []
9879
+ });
9873
9880
  function normalizeSessionMetadata(metadata) {
9874
9881
  const sessionId = metadata.sessionId?.trim() || void 0;
9875
9882
  const projectId = metadata.projectId?.trim() || void 0;
@@ -10311,13 +10318,7 @@ async function runForbiddenSessionRecovery(deps) {
10311
10318
  deps.setQueueSynced(EMPTY_QUEUE_STATE);
10312
10319
  deps.setActivityLabelSynced(void 0);
10313
10320
  deps.setPlanLabelSynced(void 0);
10314
- deps.setPresentationSynced({
10315
- revision: 0,
10316
- userBash: [],
10317
- rlmChildren: [],
10318
- refinements: [],
10319
- artifactRuns: []
10320
- });
10321
+ deps.setPresentationSynced(EMPTY_SESSION_PRESENTATION);
10321
10322
  deps.setError(null);
10322
10323
  deps.setStatus("ready");
10323
10324
  const result = await deps.client.createSession(deps.projectId);
@@ -11173,13 +11174,7 @@ function usePiChat(model, options) {
11173
11174
  const [activityLabel, setActivityLabel] = useState7();
11174
11175
  const [planLabel, setPlanLabel] = useState7();
11175
11176
  const [queue, setQueue] = useState7(EMPTY_QUEUE_STATE);
11176
- const [presentation, setPresentation] = useState7(() => ({
11177
- revision: 0,
11178
- userBash: [],
11179
- rlmChildren: [],
11180
- refinements: [],
11181
- artifactRuns: []
11182
- }));
11177
+ const [presentation, setPresentation] = useState7(() => EMPTY_SESSION_PRESENTATION);
11183
11178
  const initialSessionMetadataRef = useRef12(initialSessionMetadata);
11184
11179
  const projectIdRef = useRef12(projectId);
11185
11180
  const messagesRef = useRef12(messages);
@@ -11593,13 +11588,7 @@ function usePiChat(model, options) {
11593
11588
  invalidateQueueMutations();
11594
11589
  setSessionMetadataSynced({ projectId: nextProjectId });
11595
11590
  setMessagesSynced([]);
11596
- setPresentationSynced({
11597
- revision: 0,
11598
- userBash: [],
11599
- rlmChildren: [],
11600
- refinements: [],
11601
- artifactRuns: []
11602
- });
11591
+ setPresentationSynced(EMPTY_SESSION_PRESENTATION);
11603
11592
  setQueueSynced(EMPTY_QUEUE_STATE);
11604
11593
  setActivityLabelSynced(void 0);
11605
11594
  setPlanLabelSynced(void 0);
@@ -11655,13 +11644,7 @@ function usePiChat(model, options) {
11655
11644
  if (sessionMetadataRef.current.sessionId === sessionId) {
11656
11645
  setSessionMetadataSynced({});
11657
11646
  setMessagesSynced([]);
11658
- setPresentationSynced({
11659
- revision: 0,
11660
- userBash: [],
11661
- rlmChildren: [],
11662
- refinements: [],
11663
- artifactRuns: []
11664
- });
11647
+ setPresentationSynced(EMPTY_SESSION_PRESENTATION);
11665
11648
  }
11666
11649
  await refreshSessions();
11667
11650
  return true;
@@ -13015,8 +12998,8 @@ function useChatWorkspaceDialogs() {
13015
12998
  settingsInitialTab
13016
12999
  };
13017
13000
  }
13018
- var LazyChatCommandPalette = lazy2(() => import("./chat-command-palette-CaDQAMAu-KDH7BTDS.js").then(({ ChatCommandPalette }) => ({ default: ChatCommandPalette })));
13019
- var LazySettingsDialog = lazy2(() => import("./settings-dialog-D_eJN2ia-W47Y474K.js").then(({ SettingsDialog }) => ({ default: SettingsDialog })));
13001
+ var LazyChatCommandPalette = lazy2(() => import("./chat-command-palette-CT9aJAWG-LV26BDEW.js").then(({ ChatCommandPalette }) => ({ default: ChatCommandPalette })));
13002
+ var LazySettingsDialog = lazy2(() => import("./settings-dialog-BrjqiTVe-H7WOTB4I.js").then(({ SettingsDialog }) => ({ default: SettingsDialog })));
13020
13003
  var LazyForkPickerDialog = lazy2(() => import("./fork-picker-dialog-DFpKOdAw-JPLJSYYU.js").then(({ ForkPickerDialog }) => ({ default: ForkPickerDialog })));
13021
13004
  function ChatCommandPaletteOverlay({ chrome, conversation, dialogs, panels, session }) {
13022
13005
  return /* @__PURE__ */ jsx4(Fragment$1, { children: dialogs.commandPaletteOpen ? /* @__PURE__ */ jsx4(Suspense2, {
@@ -14398,7 +14381,9 @@ function useChatWorkspaceData() {
14398
14381
  rightPanel
14399
14382
  });
14400
14383
  const onDiscoverModels = useCallback3(async (providerId) => {
14401
- return (await discoverModelsMutation.mutateAsync(providerId)).models.map(toModelOption);
14384
+ const response = await discoverModelsMutation.mutateAsync(providerId);
14385
+ if (response.error) throw new Error(response.error);
14386
+ return response.models.map(toModelOption);
14402
14387
  }, [discoverModelsMutation]);
14403
14388
  const { chatPanelData, settingsActions, workspaceTreeContext } = useRightPanelContextValue({
14404
14389
  activityLabel,
@@ -15876,7 +15861,7 @@ function DiscordIcon({ className, ...props }) {
15876
15861
  }
15877
15862
  function fleetVersion() {
15878
15863
  try {
15879
- return "0.9.0";
15864
+ return "0.10.1";
15880
15865
  } catch {
15881
15866
  return "dev";
15882
15867
  }
@@ -16584,7 +16569,7 @@ function useSessionSidebarViewModel({ sessions, projects = EMPTY_PROJECTS, proje
16584
16569
  ])
16585
16570
  };
16586
16571
  }
16587
- var LazySessionSidebarCreateDialog = lazy2(() => import("./create-project-dialog-PFPHHWIV-GH7JR5IK.js").then(({ SessionSidebarCreateDialog }) => ({ default: SessionSidebarCreateDialog })));
16572
+ var LazySessionSidebarCreateDialog = lazy2(() => import("./create-project-dialog-EwieT1Vw-X5MYQSZM.js").then(({ SessionSidebarCreateDialog }) => ({ default: SessionSidebarCreateDialog })));
16588
16573
  function SessionSidebar({ data, sessionActions, projectActions = {}, navigationActions = {}, slots = {} }) {
16589
16574
  const { sessions, projects = EMPTY_PROJECTS, projectSessions = sessions, activeProjectId, activeSessionId } = data;
16590
16575
  const { onNewSession, onNewSessionInProject, onResumeSession, onRenameSession, onDeleteSession } = sessionActions;
@@ -16666,8 +16651,8 @@ function SessionSidebar({ data, sessionActions, projectActions = {}, navigationA
16666
16651
  })
16667
16652
  ] });
16668
16653
  }
16669
- var LazySubagentChatPanel = lazy2(() => import("./subagent-chat-panel-C9nWP21E-D5C2TTYD.js").then(({ SubagentChatPanel }) => ({ default: SubagentChatPanel })));
16670
- var LazySessionActivityPanel = lazy2(() => import("./session-activity-panel-f0d3fCm7-I6L5IKFQ.js").then(({ SessionActivityPanel }) => ({ default: SessionActivityPanel })));
16654
+ var LazySubagentChatPanel = lazy2(() => import("./subagent-chat-panel-Dz62jo_m-X4ZRN5KI.js").then(({ SubagentChatPanel }) => ({ default: SubagentChatPanel })));
16655
+ var LazySessionActivityPanel = lazy2(() => import("./session-activity-panel-wC0jAJvs-QAHJXPAM.js").then(({ SessionActivityPanel }) => ({ default: SessionActivityPanel })));
16671
16656
  function ChatWorkspaceShell() {
16672
16657
  const { session, conversation, composer, panels, dialogs, chrome, agentTabs } = useChatWorkspaceData();
16673
16658
  const toggleCommandPalette = useCallback3(() => {
@@ -31,7 +31,7 @@ import {
31
31
  stripSandboxPrefixes,
32
32
  toolActionIconForName,
33
33
  useHoverCapable
34
- } from "./chunk-V2GCVTDP.js";
34
+ } from "./chunk-3CU2ITG7.js";
35
35
  import {
36
36
  Collapsible$1,
37
37
  CollapsibleContent,
@@ -46,7 +46,7 @@ import {
46
46
  } from "./chunk-RX2ZJARF.js";
47
47
  import {
48
48
  isSafeExternalUrl
49
- } from "./chunk-TQ2RECTH.js";
49
+ } from "./chunk-C5XHGLET.js";
50
50
  import {
51
51
  useRender
52
52
  } from "./chunk-CE7U5QB2.js";
@@ -106,7 +106,7 @@ import {
106
106
  cn
107
107
  } from "./chunk-VDEUVEWL.js";
108
108
 
109
- // web/app/dist/server/assets/session-tool-renderer-Cg_ZPHxS.js
109
+ // web/app/dist/server/assets/session-tool-renderer-D96BACVh.js
110
110
  import React, { memo, useCallback as useCallback4, useEffect as useEffect3, useId, useLayoutEffect as useLayoutEffect2, useMemo as useMemo2, useRef as useRef3, useState as useState4 } from "react";
111
111
  import { Fragment as Fragment$1, jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
112
112
 
@@ -12248,7 +12248,7 @@ function MultiFileDiff({ oldFile, newFile, options, editorOptions, editStateKey,
12248
12248
  });
12249
12249
  }
12250
12250
 
12251
- // web/app/dist/server/assets/session-tool-renderer-Cg_ZPHxS.js
12251
+ // web/app/dist/server/assets/session-tool-renderer-D96BACVh.js
12252
12252
  function getFaviconUrl(value) {
12253
12253
  try {
12254
12254
  return new URL("/favicon.ico", value).toString();