libre-webui 0.39.0 → 0.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/backend/dist/persistence/extensionTypes.d.ts +2 -0
  2. package/backend/dist/persistence/extensionTypes.d.ts.map +1 -1
  3. package/backend/dist/persistence/extensionTypes.js.map +1 -1
  4. package/backend/dist/persistence/postgresExtensionRepositories.d.ts.map +1 -1
  5. package/backend/dist/persistence/postgresExtensionRepositories.js +6 -0
  6. package/backend/dist/persistence/postgresExtensionRepositories.js.map +1 -1
  7. package/backend/dist/persistence/sqliteExtensionRepositories.d.ts.map +1 -1
  8. package/backend/dist/persistence/sqliteExtensionRepositories.js +7 -0
  9. package/backend/dist/persistence/sqliteExtensionRepositories.js.map +1 -1
  10. package/backend/dist/routes/email.d.ts.map +1 -1
  11. package/backend/dist/routes/email.js +51 -1
  12. package/backend/dist/routes/email.js.map +1 -1
  13. package/backend/dist/routes/tts.d.ts.map +1 -1
  14. package/backend/dist/routes/tts.js +6 -1
  15. package/backend/dist/routes/tts.js.map +1 -1
  16. package/backend/dist/services/agentCliService.d.ts.map +1 -1
  17. package/backend/dist/services/agentCliService.js +1 -0
  18. package/backend/dist/services/agentCliService.js.map +1 -1
  19. package/backend/dist/services/emailService.d.ts +17 -3
  20. package/backend/dist/services/emailService.d.ts.map +1 -1
  21. package/backend/dist/services/emailService.js +73 -11
  22. package/backend/dist/services/emailService.js.map +1 -1
  23. package/backend/dist/services/pluginCredentialsService.d.ts +3 -0
  24. package/backend/dist/services/pluginCredentialsService.d.ts.map +1 -1
  25. package/backend/dist/services/pluginCredentialsService.js +18 -5
  26. package/backend/dist/services/pluginCredentialsService.js.map +1 -1
  27. package/backend/dist/services/pluginService.d.ts +9 -0
  28. package/backend/dist/services/pluginService.d.ts.map +1 -1
  29. package/backend/dist/services/pluginService.js +31 -14
  30. package/backend/dist/services/pluginService.js.map +1 -1
  31. package/backend/dist/services/workRuntimeService.d.ts +5 -0
  32. package/backend/dist/services/workRuntimeService.d.ts.map +1 -1
  33. package/backend/dist/services/workRuntimeService.js +243 -84
  34. package/backend/dist/services/workRuntimeService.js.map +1 -1
  35. package/backend/dist/utils/emailMarkdown.js +3 -3
  36. package/backend/dist/utils/emailMarkdown.js.map +1 -1
  37. package/backend/dist/utils/pluginDefinitionTrust.d.ts +7 -0
  38. package/backend/dist/utils/pluginDefinitionTrust.d.ts.map +1 -1
  39. package/backend/dist/utils/pluginDefinitionTrust.js +49 -1
  40. package/backend/dist/utils/pluginDefinitionTrust.js.map +1 -1
  41. package/backend/package.json +1 -1
  42. package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
  43. package/frontend/dist/artifact-runtime/mermaid.js +366 -366
  44. package/frontend/dist/assets/index-DLfU_qNT.js +75 -0
  45. package/frontend/dist/assets/index-DtS3qhdq.css +2 -0
  46. package/frontend/dist/assets/xterm-B1njb2Cr.css +1 -0
  47. package/frontend/dist/index.html +27 -26
  48. package/frontend/dist/js/ArtifactContainer-BjzltfdU.js +1 -0
  49. package/frontend/dist/js/{ArtifactDemoPage-Ddpy2O_v.js → ArtifactDemoPage-DWua6xj9.js} +1 -1
  50. package/frontend/dist/js/{ArtifactSandboxFrame-CdsAqv8H.js → ArtifactSandboxFrame-CR9ghP0A.js} +1 -1
  51. package/frontend/dist/js/ArtifactSlideOutPanel-DX2nL3AS.js +1 -0
  52. package/frontend/dist/js/AutomationModal-DZe-C2jN.js +1 -0
  53. package/frontend/dist/js/AutomationsPage-CrCcnTyk.js +1 -0
  54. package/frontend/dist/js/AvatarUpload-nPS0QHod.js +1 -0
  55. package/frontend/dist/js/Button-Dh2UJA-B.js +1 -0
  56. package/frontend/dist/js/CalendarPage-D2WiWglM.js +1 -0
  57. package/frontend/dist/js/ChannelsPage-COp2T8FQ.js +1 -0
  58. package/frontend/dist/js/ChatPage-CUfAlpdt.js +14 -0
  59. package/frontend/dist/js/ConnectModels-emc3dv4A.js +1 -0
  60. package/frontend/dist/js/EvaluationsPage-CbyeDkz_.js +2 -0
  61. package/frontend/dist/js/FirstTimeSetup-C4ffQRMN.js +1 -0
  62. package/frontend/dist/js/GalleryPage-D4Ci_3dv.js +1 -0
  63. package/frontend/dist/js/HomePage-C3IhEERN.js +1 -0
  64. package/frontend/dist/js/LanguageSwitcher-BQqDJPwm.js +1 -0
  65. package/frontend/dist/js/ModelManagerModals-DhY8Rme6.js +1 -0
  66. package/frontend/dist/js/NotesPage-j812I1BN.js +3 -0
  67. package/frontend/dist/js/PasswordStrengthMeter-BSEtQBJp.js +1 -0
  68. package/frontend/dist/js/PersonasPage--YWoThqF.js +13 -0
  69. package/frontend/dist/js/PluginUsagePage-CZiMdmjI.js +1 -0
  70. package/frontend/dist/js/{RichMessageContent-BfYbVBFz.js → RichMessageContent-BLI0hhzR.js} +2 -2
  71. package/frontend/dist/js/RichMessageContent-BXv5baJ_.js +1 -0
  72. package/frontend/dist/js/SettingsModal-C6aVzSI-.js +19 -0
  73. package/frontend/dist/js/SettingsToggle-CkLLtFbz.js +1 -0
  74. package/frontend/dist/js/ShareDialog-DQskc17d.js +1 -0
  75. package/frontend/dist/js/StrandsPage-DENhVKcz.js +1 -0
  76. package/frontend/dist/js/SystemPage-C86ypXG4.js +1 -0
  77. package/frontend/dist/js/UserManagementPanel-D1CS0KPn.js +1 -0
  78. package/frontend/dist/js/WhatsNewModal-B31A_UQY.js +1 -0
  79. package/frontend/dist/js/WorkPage-DEXBL5J7.js +7 -0
  80. package/frontend/dist/js/api-DRAKhdz7.js +1 -0
  81. package/frontend/dist/js/{api-BrHW-VGd.js → api-Dcz1G4Ib.js} +4 -2
  82. package/frontend/dist/js/{appNavigation-B6xYIgLi.js → appNavigation-C5A9BF_G.js} +1 -1
  83. package/frontend/dist/js/appStore-0_qlwS8f.js +2 -0
  84. package/frontend/dist/js/appVersion-D5lk_2zb.js +1 -0
  85. package/frontend/dist/js/ar-BZntyucf.js +2 -0
  86. package/frontend/dist/js/authStore-C4dzH1NY.js +1 -0
  87. package/frontend/dist/js/{authStore-DjAsRpNL.js → authStore-COgKeTRv.js} +3 -3
  88. package/frontend/dist/js/bn-BDCaFQu-.js +2 -0
  89. package/frontend/dist/js/chatStore-CVTbkZyb.js +3 -0
  90. package/frontend/dist/js/{client-DppLngAs.js → client-jaxZzn-I.js} +2 -2
  91. package/frontend/dist/js/{composerStyles-C83jssgZ.js → composerStyles-BEx0XAp6.js} +1 -1
  92. package/frontend/dist/js/{config-4_s8hdqO.js → config-Da1yh9sC.js} +1 -1
  93. package/frontend/dist/js/confirmStore-CKkUtP9c.js +1 -0
  94. package/frontend/dist/js/cs-BCmN--jQ.js +2 -0
  95. package/frontend/dist/js/da-B895dAyV.js +2 -0
  96. package/frontend/dist/js/de-B0ZhC0dm.js +2 -0
  97. package/frontend/dist/js/es-D7eaw4_W.js +2 -0
  98. package/frontend/dist/js/{evaluationsApi-DyuW7IJ_.js → evaluationsApi-BwaxBVpl.js} +1 -1
  99. package/frontend/dist/js/fr-DsB0gLW4.js +2 -0
  100. package/frontend/dist/js/hi-CLeU3ung.js +2 -0
  101. package/frontend/dist/js/id-Cdq6tOTi.js +2 -0
  102. package/frontend/dist/js/is-DJ1tHaAT.js +2 -0
  103. package/frontend/dist/js/it-9K1R4CeT.js +2 -0
  104. package/frontend/dist/js/ja-BYP_3M5M.js +2 -0
  105. package/frontend/dist/js/ko-CNtjlaDm.js +2 -0
  106. package/frontend/dist/js/liveAnnouncerStore-B6mS-JWC.js +1 -0
  107. package/frontend/dist/js/messageCodeStyles-D3cWF9XO.js +2 -0
  108. package/frontend/dist/js/ms-A_IVO_qt.js +2 -0
  109. package/frontend/dist/js/nl-CrKWO3ea.js +2 -0
  110. package/frontend/dist/js/pl-BrpSuyDP.js +2 -0
  111. package/frontend/dist/js/pt-BHbpB5BM.js +2 -0
  112. package/frontend/dist/js/ru-DzLsS9zY.js +2 -0
  113. package/frontend/dist/js/{strandsApi-BFbeEpAY.js → strandsApi-COxSPh_5.js} +1 -1
  114. package/frontend/dist/js/sv-VU2CjzNj.js +2 -0
  115. package/frontend/dist/js/{teamEventStream-DsAS6P4m.js → teamEventStream-RNJYm84u.js} +1 -1
  116. package/frontend/dist/js/th-DV2hNXXc.js +2 -0
  117. package/frontend/dist/js/tr-DvVZ9jxF.js +2 -0
  118. package/frontend/dist/js/ui-CI0OdG9q.js +2 -0
  119. package/frontend/dist/js/ui-vendor-6S05F84J.js +1 -0
  120. package/frontend/dist/js/uk-MFFDRo2m.js +2 -0
  121. package/frontend/dist/js/useChat-BSkqxHnH.js +13 -0
  122. package/frontend/dist/js/useDictation-D9whH12W.js +1 -0
  123. package/frontend/dist/js/vi-CfZ-U8Cw.js +2 -0
  124. package/frontend/dist/js/{work-CdbmBok5.js → work-C7MYlv5S.js} +1 -1
  125. package/frontend/dist/js/{workModels-BM2Zyiba.js → workAnnouncements-CAsI8P7c.js} +1 -1
  126. package/frontend/dist/js/workApi-BJfbaV6k.js +1 -0
  127. package/frontend/dist/js/{workApi-UPxumrEF.js → workApi-Ck8nTlJn.js} +1 -1
  128. package/frontend/dist/js/zh-CTl_raYa.js +2 -0
  129. package/package.json +3 -2
  130. package/plugins/codex-oauth.json +1 -0
  131. package/frontend/dist/assets/index-D99DS5c6.js +0 -57
  132. package/frontend/dist/assets/index-Dz1JufgZ.css +0 -1
  133. package/frontend/dist/assets/xterm-B8QFf3JU.css +0 -1
  134. package/frontend/dist/js/ArtifactContainer-Cn7X9HGm.js +0 -1
  135. package/frontend/dist/js/ArtifactSlideOutPanel-cVd9X80o.js +0 -1
  136. package/frontend/dist/js/AutomationModal-B4UaWjkk.js +0 -1
  137. package/frontend/dist/js/AutomationsPage-huCrvLUp.js +0 -1
  138. package/frontend/dist/js/AvatarUpload-CG-w6Mpt.js +0 -1
  139. package/frontend/dist/js/Button-j68Q8KVh.js +0 -1
  140. package/frontend/dist/js/CalendarPage-CZXT1w99.js +0 -1
  141. package/frontend/dist/js/ChannelsPage-DbtdHnSL.js +0 -1
  142. package/frontend/dist/js/ChatPage-BZE65kiq.js +0 -14
  143. package/frontend/dist/js/ConnectModels-DD4bLgdq.js +0 -1
  144. package/frontend/dist/js/EvaluationsPage-Dq53LaXd.js +0 -2
  145. package/frontend/dist/js/FirstTimeSetup-BoJIfuQT.js +0 -1
  146. package/frontend/dist/js/GalleryPage-DKwqeB2A.js +0 -1
  147. package/frontend/dist/js/HomePage-C8bCJfls.js +0 -1
  148. package/frontend/dist/js/LanguageSwitcher-B_YyU5JG.js +0 -1
  149. package/frontend/dist/js/ModelManagerModals-BzjZ-QwL.js +0 -1
  150. package/frontend/dist/js/NotesPage-CnaAp_w_.js +0 -3
  151. package/frontend/dist/js/PasswordStrengthMeter-DI4RDv67.js +0 -1
  152. package/frontend/dist/js/PersonasPage-CH3GUKph.js +0 -13
  153. package/frontend/dist/js/PluginUsagePage-d54K2gAj.js +0 -1
  154. package/frontend/dist/js/RichMessageContent-CDxxs3Tt.js +0 -1
  155. package/frontend/dist/js/SettingsModal-BvtJcvow.js +0 -19
  156. package/frontend/dist/js/SettingsToggle-DrJ0Bapi.js +0 -1
  157. package/frontend/dist/js/ShareDialog-DaSxkTKS.js +0 -1
  158. package/frontend/dist/js/StrandsPage-BQwz0mWq.js +0 -1
  159. package/frontend/dist/js/SystemPage-BqNZoFxR.js +0 -1
  160. package/frontend/dist/js/UserManagementPanel-C3T1ReJJ.js +0 -1
  161. package/frontend/dist/js/WhatsNewModal-CLcU2Ugk.js +0 -1
  162. package/frontend/dist/js/WorkPage-BpjGn--1.js +0 -8
  163. package/frontend/dist/js/api-K_hhqPdx.js +0 -1
  164. package/frontend/dist/js/appStore-DkRdQQeY.js +0 -2
  165. package/frontend/dist/js/appVersion-BVtSqLVj.js +0 -1
  166. package/frontend/dist/js/ar-XTZGEtBr.js +0 -2
  167. package/frontend/dist/js/authStore-DBS6Kbvh.js +0 -1
  168. package/frontend/dist/js/bn-JiK7ZWmy.js +0 -2
  169. package/frontend/dist/js/chatStore-DpVxt9VX.js +0 -3
  170. package/frontend/dist/js/cs-D8ju18CO.js +0 -2
  171. package/frontend/dist/js/da-BJWcAoUc.js +0 -2
  172. package/frontend/dist/js/de-CLJLmy69.js +0 -2
  173. package/frontend/dist/js/es-BvqHEL-3.js +0 -2
  174. package/frontend/dist/js/fr-B8ZoZomI.js +0 -2
  175. package/frontend/dist/js/goober.modern-BaHbaW3_.js +0 -1
  176. package/frontend/dist/js/hi-AzJLALo-.js +0 -2
  177. package/frontend/dist/js/id-DZYGQhvC.js +0 -2
  178. package/frontend/dist/js/is-Da_kvtzW.js +0 -2
  179. package/frontend/dist/js/it-B90zSlqn.js +0 -2
  180. package/frontend/dist/js/ja-DU_K1GOr.js +0 -2
  181. package/frontend/dist/js/ko-DicfoO-e.js +0 -2
  182. package/frontend/dist/js/messageCodeStyles-CuQPkfEK.js +0 -2
  183. package/frontend/dist/js/ms-CfH7wjUY.js +0 -2
  184. package/frontend/dist/js/nl-ELlOz-B3.js +0 -2
  185. package/frontend/dist/js/pl-33dayyUk.js +0 -2
  186. package/frontend/dist/js/pt-aIXSQPCT.js +0 -2
  187. package/frontend/dist/js/ru-BSvGtBtW.js +0 -2
  188. package/frontend/dist/js/sv-B7KOz81W.js +0 -2
  189. package/frontend/dist/js/th-DgpjGxvA.js +0 -2
  190. package/frontend/dist/js/tr-BQTbl2h-.js +0 -2
  191. package/frontend/dist/js/ui-Aq8MP7Ph.js +0 -2
  192. package/frontend/dist/js/ui-vendor-DVTj_sKN.js +0 -1
  193. package/frontend/dist/js/uk-JLymloot.js +0 -2
  194. package/frontend/dist/js/useChat-D3ZAGz70.js +0 -10
  195. package/frontend/dist/js/useDictation-B6l8QzeM.js +0 -1
  196. package/frontend/dist/js/vi-BXdLOJ8q.js +0 -2
  197. package/frontend/dist/js/workApi-D1xtiG3Q.js +0 -1
  198. package/frontend/dist/js/zh-gdUf9sXa.js +0 -2
@@ -1,10 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t}from"./react-vendor-CR5VJ85Q.js";import{a as n,t as r}from"./logger-BR4forr_.js";import{g as i,t as a}from"./chatStore-DpVxt9VX.js";import{t as o}from"./useTranslation-Boi0fB1B.js";import{a as s,c,s as l}from"./utils-B-Bhh1pF.js";import{Tr as u}from"./ui-vendor-DVTj_sKN.js";import{t as d}from"./config-4_s8hdqO.js";import{N as f,d as p}from"./api-BrHW-VGd.js";import{n as m}from"./authStore-DjAsRpNL.js";import{t as h}from"./appStore-DkRdQQeY.js";import{c as g,s as _}from"./artifactHtml-DDmfpcB0.js";var v=e(t(),1),y=/```([^\n`]*)\n([\s\S]*?)\n```/g,b=/^(?:%%|flowchart|graph|sequenceDiagram|classDiagram|stateDiagram(?:-v2)?|erDiagram|journey|gantt|pie|mindmap|timeline|gitGraph|quadrantChart|requirementDiagram|sankey-beta|xychart-beta|block-beta|architecture-beta|packet-beta|kanban|radar-beta|treemap-beta|C4Context)\b/i,x=/[\w@./-]+\.(?:html?|css|mjs|js|jsx|ts|tsx|svg|json|py)/i,ee=[`html`,`react`,`svg`,`mermaid`,`chart`,`code`,`text`,`json`],S=[{regex:/<artifact\s+type="([^"]+)"\s+title="([^"]+)"[^>]*>([\s\S]*?)<\/artifact>/gi,extract:e=>({type:A(e[1]),title:C(e[2]).trim()||`Artifact`,content:e[3].trim()})},{regex:/<artifact\s+type="([^"]+)"[^>]*>([\s\S]*?)<\/artifact>/gi,extract:e=>{let t=A(e[1]);return{type:t,title:`${t.toUpperCase()} Artifact`,content:e[2].trim()}}}];function C(e){if(typeof document<`u`){let t=document.createElement(`div`);return t.innerHTML=e,t.textContent||t.innerText||``}return T(w(e))}function w(e){return e.replace(/&(lt|gt|quot|apos|#39);/gi,(e,t)=>{switch(t.toLowerCase()){case`lt`:return`<`;case`gt`:return`>`;case`quot`:return`"`;case`apos`:case`#39`:return`'`;default:return``}}).replace(/&amp;/gi,`&`)}function T(e){let t=``,n=!1,r=null;for(let i=0;i<e.length;i+=1){let a=e[i];if(n){if(r){a===r&&(r=null);continue}if(a===`"`||a===`'`){r=a;continue}a===`>`&&(n=!1);continue}if(a===`<`){let t=e[i+1];if(t&&/[!/A-Za-z?]/.test(t)){n=!0;continue}}t+=a}return t}function E(e){let t=e.match(/<title[^>]*>([\s\S]*?)<\/title>/i);if(t)return C(t[1]).trim()||null;let n=e.match(/<h1[^>]*>([\s\S]*?)<\/h1>/i);return n&&C(n[1]).trim()||null}function D(e){for(let t of[/export\s+default\s+(?:function|class)\s+([A-Z]\w*)/,/export\s+default\s+([A-Z]\w*)\s*(?:;|$)/m,/(?:function|class)\s+([A-Z]\w*)/,/const\s+([A-Z]\w*)\s*[:=]/,/(?:function|const|class)\s+(\w+)/]){let n=e.match(t);if(n)return n[1]}return null}function O(e){let t=e.match(/^\s*title\s+(.+)$/im);if(t)return t[1].trim();let n=e.trim().match(/^([A-Za-z][\w-]*)/);if(!n)return null;let r=n[1].replace(/-(?:beta|v2)$/i,``).replace(/([a-z])([A-Z])/g,`$1 $2`);return`${r.charAt(0).toUpperCase()}${r.slice(1)}`}function k(e){if(e.includes(`def main(`))return`Python Script`;let t=e.match(/class\s+(\w+)/);if(t)return`${t[1]} Class`;let n=e.match(/def\s+(\w+)/);return n&&n[1]!==`__init__`?`${n[1]} Function`:null}function te(e){let t=e.match(/function\s+(\w+)/);if(t)return`${t[1]} Function`;let n=e.match(/(?:const|let)\s+(\w+)\s*=/);return n?n[1]:null}function A(e){let t=e.trim().toLowerCase();return ee.includes(t)?t:`text`}function j(e){if(!e)return;let t=e.trim().toLowerCase().replace(/^\./,``).replace(/[,:;]+$/,``);switch(t){case`htm`:case`html`:return`html`;case`js`:case`mjs`:case`javascript`:return`javascript`;case`jsx`:case`tsx`:case`react`:return`react`;case`ts`:case`typescript`:return`typescript`;case`py`:case`python`:return`python`;case`css`:case`svg`:case`json`:return t;default:return t||void 0}}function M(e){let t=[],n=new RegExp(y),r;for(;(r=n.exec(e))!==null;){let n=r[1].trim(),i=ne(n,N(e,r.index));t.push({raw:r[0],info:n,content:r[2].trim(),start:r.index,end:r.index+r[0].length,language:i.language,fileName:i.fileName})}return t}function ne(e,t){let n=re(e)||t,r=e.split(/\s+/).filter(Boolean)[0]?.replace(/[{}[\]()]/g,``);return{language:(r&&!x.test(r)&&!r.includes(`=`)?j(r):void 0)||j(F(n)),fileName:n}}function re(e){let t=e.match(/(?:file(?:name)?|path|name)\s*=\s*["']?([^"'\s]+)["']?/i);if(t&&x.test(t[1]))return P(t[1]);let n=e.match(x);return n?P(n[0]):void 0}function N(e,t){let n=e.slice(Math.max(0,t-180),t).split(`
2
- `).slice(-3).reverse();for(let e of n){let t=e.trim().replace(/^#{1,6}\s*/,``).replace(/^[-*]\s*/,``).replace(/[::]\s*$/,``).match(x);if(t)return P(t[0])}}function P(e){return e.replace(/^["'`]+|["'`:]+$/g,``)}function F(e){return e?.match(/\.([a-z0-9]+)$/i)?.[1]}function I(e){return e?.split(/[\\/]/).pop()}function L(e){let t=I(e);if(!t)return null;let n=t.replace(/\.[^.]+$/,``);return/^(index|main|app)$/i.test(n)?null:n.replace(/[-_]+/g,` `).replace(/\b\w/g,e=>e.toUpperCase())}function R(e){let t=Date.now();return{...e,id:`artifact-${t}-${c(9)}`,createdAt:t,updatedAt:t}}function z(e){let t=j(e.language)||j(F(e.fileName));switch(t){case`html`:return{type:`html`,title:E(e.content)||L(e.fileName)||`HTML Document`};case`svg`:return{type:`svg`,title:L(e.fileName)||`SVG Image`};case`react`:return{type:`react`,title:D(e.content)||L(e.fileName)||`React Component`,language:`jsx`};case`mermaid`:return{type:`mermaid`,title:O(e.content)||`Diagram`,language:`mermaid`};case`json`:return{type:`json`,title:L(e.fileName)||`JSON Data`};case`python`:return{type:`code`,title:k(e.content)||L(e.fileName)||`Python Code`,language:`python`};case`css`:return{type:`code`,title:L(e.fileName)||`CSS Styles`,language:`css`};case`javascript`:return{type:`code`,title:te(e.content)||L(e.fileName)||`JavaScript Code`,language:`javascript`};case`typescript`:return{type:`code`,title:L(e.fileName)||`TypeScript Code`,language:`typescript`};default:return t?{type:`code`,title:L(e.fileName)||`${t.toUpperCase()} Code`,language:t}:null}}function B(e){return(j(e.language)||j(F(e.fileName)))===`html`}function V(e){return(j(e.language)||j(F(e.fileName)))===`css`}function ie(e){return(j(e.language)||j(F(e.fileName)))===`javascript`}function H(e){let t=M(e),n=t.filter(B);if(n.length===0)return null;let r=t.filter(V),i=t.filter(ie);if(r.length===0&&i.length===0)return null;let a=n.find(e=>/(^|[/\\])index\.html?$/i.test(e.fileName||``))||n[0],o=U(a.content,r,i),s=g(o,r.map(e=>e.content),i.map(e=>e.content));return q(s,`html`)?{artifact:R({type:`html`,title:E(s)||L(a.fileName)||`Interactive HTML App`,description:`Bundled generated HTML, CSS, and JavaScript files into one runnable artifact.`,content:s}),ranges:[a,...r,...i]}:null}function U(e,t,n){let r=e;for(let e of t){let t=I(e.fileName);t&&(r=r.replace(RegExp(`<link\\b[^>]*href=["'][^"']*${K(t)}["'][^>]*>`,`gi`),``))}for(let e of n){let t=I(e.fileName);t&&(r=r.replace(RegExp(`<script\\b[^>]*src=["'][^"']*${K(t)}["'][^>]*>\\s*<\\/script>`,`gi`),``))}return r}function ae(e){let t=/<!doctype\s+html|<html[\s>]/i.exec(e);if(!t||t.index===void 0)return null;let n=M(e);if(W(t.index,n))return null;let r=t.index,i=/<\/html>/gi;i.lastIndex=r;let a=i.exec(e),o=a?a.index+a[0].length:e.length,s=e.slice(r,o).trim();return q(s,`html`)?{artifact:R({type:`html`,title:E(s)||`HTML Document`,content:s}),ranges:[{start:r,end:o}]}:null}function W(e,t){return t.some(t=>e>=t.start&&e<=t.end)}function G(e,t){return[...t].sort((e,t)=>t.start-e.start).reduce((e,t)=>`${e.slice(0,t.start)}${e.slice(t.end)}`,e)}function K(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function q(e,t){if(t===`html`){let t=e.trim(),n=/<[^>]+>/.test(t),r=/<(canvas|script|style|button|form|input|select|textarea|video|audio)\b/i.test(t)||/\bon(?:click|input|submit|keydown|keyup|mousemove)=/i.test(t);return n&&(_(t)||t.length>160||r)}if(t===`svg`)return/<svg[^>]*>/.test(e);if(t===`react`)return/<[A-Za-z][^>]*>/.test(e)&&/\b(?:export\s+default|return\s*[(<]|=>\s*[(<]|createRoot|render\s*\()/.test(e);if(t===`mermaid`)return b.test(e.trim());if(t===`json`)try{return JSON.parse(e),e.trim().length>100}catch{return!1}if(t===`code`){let t=e.split(`
3
- `).length,n=e.trim().length,r=/function|class|def |import |from |const |let |var |if |for |while |try |catch/.test(e);return(n>500||t>15)&&r}return e.trim().length>200}function oe(e){let t=[],n=e;for(let e of S){e.regex.lastIndex=0;let r=[],i;for(;(i=e.regex.exec(n))!==null;){let n=e.extract(i);q(n.content,n.type)&&(t.push(R({type:n.type,title:n.title,content:n.content})),r.push({start:i.index,end:i.index+i[0].length}))}n=G(n,r)}let r=H(n);for(;r;)t.push(r.artifact),n=G(n,r.ranges),r=H(n);let i=ae(n);i&&(t.push(i.artifact),n=G(n,i.ranges));let a=M(n),o=[];for(let e of a){let n=z(e);n&&q(e.content,n.type)&&(t.push(R({type:n.type,title:n.title,content:e.content,language:n.language})),o.push(e))}return n=G(n,o),{content:n.trim(),artifacts:t}}var J=new Map;function se(e,t,n=``){let r=J.get(e);if(n){if((!r||r.state===`none`)&&(J.set(e,{state:`open`,startedAt:Date.now()}),!t))return;let n=J.get(e);t&&n?.state===`open`&&J.set(e,{state:`done`,durationMs:Date.now()-n.startedAt});return}if(r&&r.state!==`open`||!t)return;let i=l(t);if(!r){i.thinkingComplete?J.set(e,{state:`none`}):J.set(e,{state:`open`,startedAt:Date.now()});return}i.thinkingComplete&&J.set(e,{state:`done`,durationMs:Date.now()-r.startedAt})}function Y(e){let t=J.get(e);if(t){if(t.state===`done`)return t.durationMs;if(t.state===`open`)return Date.now()-t.startedAt}}function ce(e){let t=J.get(e);if(J.delete(e),t){if(t.state===`done`)return t.durationMs;if(t.state===`open`)return Date.now()-t.startedAt}}function le(e){let t=e/1e3;if(t<.95)return`${Math.max(.1,Math.round(t*10)/10)}s`;if(t<60)return`${Math.round(t)}s`;let n=Math.floor(t/60),r=Math.round(t%60);return r>0?`${n}m ${r}s`:`${n}m`}var ue=(e,t)=>{a.setState(n=>{let r=n=>n&&n.id===e?{...n,settings:{...n.settings,...t.length>0?{promptQueue:t}:{promptQueue:void 0}}}:n;return{currentSession:r(n.currentSession),sessions:n.sessions.map(e=>r(e))}})},de=(e,t)=>{t?.add(e.assistantMessageId),e.cancelRequested=!0,e.jobId&&e.abort.abort()},fe=async e=>{if(!e.cancelledMessageIds.has(e.assistantMessageId))return!1;try{let t=await(e.cancelByIdentity??Q)(e.sessionId,e.assistantMessageId);await e.settle(t)}catch(t){e.onError?.(t)}return!0},pe=e=>{e.retainForContinuation||e.cancelledMessageIds.delete(e.assistantMessageId)},me=async(e,t,n={})=>{if(e.jobId=t.jobId,!e.cancelRequested)return`stream`;e.abort.abort();let[,r]=await Promise.allSettled([(n.byJob??ye)(t.jobId),(n.byIdentity??Q)(e.sessionId,e.assistantMessageId)]);if(r.status===`rejected`)throw r.reason;return r.value.completed?`completed`:`cancelled`},he=async e=>{let t=await e.loadSession(e.sessionId);if(t.id!==e.sessionId)throw Error(`Reloaded chat session does not match the completed turn.`);if(!t.messages.find(t=>t.id===e.assistantMessageId&&t.role===`assistant`))throw Error(`Completed assistant message is absent from chat storage.`);return e.applySession(t),t},X=async e=>{try{let t=await e.json(),n=typeof t.error==`string`?t.error:typeof t.message==`string`?t.message:void 0;if(n)return Error(n)}catch{}return Error(`Chat event request failed with status ${e.status}.`)},Z=()=>{let e=localStorage.getItem(`auth-token`);return e?{Authorization:`Bearer ${e}`}:{}},ge=async e=>{let t=await fetch(`${d}/chat/sessions/${encodeURIComponent(e.sessionId)}/generations`,{method:`POST`,headers:{"Content-Type":`application/json`,...Z()},credentials:`same-origin`,signal:e.signal,body:JSON.stringify({message:e.message,images:e.images,userMessageId:e.userMessageId,assistantMessageId:e.assistantMessageId,options:e.options,webSearch:e.webSearch,tools:e.tools===!0,...e.toolSelection?{toolSelection:e.toolSelection}:{},regenerate:e.regenerate===!0,originalMessageId:e.originalMessageId,...e.modelOverride?{modelOverride:e.modelOverride}:{},...e.compare?{compare:!0}:{}})});if(!t.ok)throw await X(t);let n=await t.json();if(!n.data?.jobId)throw Error(`Chat generation response did not include a durable job.`);return n.data},_e=async(e,t)=>{if(!e.body)throw Error(`Chat event stream has no response body.`);let n=e.body.getReader(),r=new TextDecoder,i=``,a=0,o=!1,s=e=>{let n,r=[];for(let t of e.split(`
4
- `))t.startsWith(`id:`)&&(n=Number(t.slice(3).trim())),t.startsWith(`data:`)&&r.push(t.slice(5).trimStart());if(!Number.isSafeInteger(n)||!r.length)return;let i=JSON.parse(r.join(`
5
- `)),s=n,c=i.type===`done`||i.type===`error`;t(s,i),a=s,o=c};try{for(;;){let{done:e,value:t}=await n.read();i+=r.decode(t,{stream:!e}).replace(/\r\n/g,`
6
- `);let a=i.indexOf(`
7
-
8
- `);for(;a>=0;)s(i.slice(0,a)),i=i.slice(a+2),a=i.indexOf(`
9
-
10
- `);if(e||o)break}}finally{await n.cancel().catch(()=>void 0),n.releaseLock()}return{cursor:a,terminal:o}},ve=async e=>{let t=0,n=0;for(;!e.signal.aborted;){let r=new URL(`${d}/chat/sessions/${encodeURIComponent(e.sessionId)}/events`,window.location.origin);r.searchParams.set(`after`,String(t)),r.searchParams.set(`generation`,e.assistantMessageId);try{let i=await fetch(r,{headers:{Accept:`text/event-stream`,...Z()},credentials:`same-origin`,cache:`no-store`,signal:e.signal});if(!i.ok)throw await X(i);if((await _e(i,(n,r)=>{e.onEvent(r),t=n})).terminal)return;n=0}catch(t){if(e.signal.aborted||(n+=1,n>8))throw t}await new Promise((t,r)=>{let i=window.setTimeout(()=>{e.signal.removeEventListener(`abort`,a),t()},Math.min(5e3,n*500+250)),a=()=>{window.clearTimeout(i),e.signal.removeEventListener(`abort`,a),r(e.signal.reason??Error(`Chat stream cancelled`))};e.signal.addEventListener(`abort`,a,{once:!0})})}},ye=async e=>{let t=await fetch(`${d}/jobs/${encodeURIComponent(e)}/cancel`,{method:`POST`,headers:Z(),credentials:`same-origin`});if(!t.ok)throw await X(t)},Q=async(e,t)=>{let n=await fetch(`${d}/chat/sessions/${encodeURIComponent(e)}/generations/${encodeURIComponent(t)}/cancel`,{method:`POST`,headers:Z(),credentials:`same-origin`});if(!n.ok)throw await X(n);let r=(await n.json()).data;if(!r)throw Error(`Chat cancellation response did not include a decision.`);let i=typeof r.jobId==`string`?r.jobId:void 0;if(r.completed!==!0&&r.pending!==!0&&!i)throw Error(`Chat cancellation response did not include a decision.`);return{completed:r.completed===!0,pending:r.pending===!0,...i?{jobId:i}:{},...typeof r.state==`string`?{state:r.state}:{}}},$=r(`use-chat`),be=new Set([`New Chat`,`New Demo Session`]),xe=e=>!e||be.has(e),Se=e=>{let t=a.getState();return t.currentSession?.id===e?t.currentSession.title:t.sessions.find(t=>t.id===e)?.title},Ce=e=>{let{t}=o(),[r,c]=(0,v.useState)(``),[d,g]=(0,v.useState)(``),[_,y]=(0,v.useState)(null),[b,x]=(0,v.useState)(!1),[ee,S]=(0,v.useState)([]),[C,w]=(0,v.useState)([]),[T,E]=(0,v.useState)(null),{addMessage:D,updateMessage:O,updateMessageWithStatistics:k,applySessionTitle:te,setGeneratingTitleForSession:A,removeMessage:j}=a(),{setIsGenerating:M}=h(),ne=(0,v.useRef)(null),re=(0,v.useRef)(new Map),N=(0,v.useRef)(null),P=(0,v.useRef)(new Set),F=(0,v.useRef)(null),I=(0,v.useRef)(null),L=(0,v.useRef)(``),R=(0,v.useRef)(``),z=(0,v.useRef)(0),B=(0,v.useRef)(void 0),V=(0,v.useRef)(null),ie=(0,v.useRef)(``),H=(0,v.useRef)(``),U=(0,v.useCallback)(()=>{V.current!==null&&typeof window<`u`&&window.cancelAnimationFrame(V.current),V.current=null},[]),ae=(0,v.useCallback)((e,t=!1,n=``)=>{if(ie.current=e,H.current=n,t||typeof window>`u`){U(),c(e),g(n);return}V.current===null&&(V.current=window.requestAnimationFrame(()=>{V.current=null,c(ie.current),g(H.current)}))},[U]),W=(0,v.useCallback)(()=>{U(),ie.current=``,H.current=``,c(``),g(``)},[U]),G=(0,v.useCallback)((e,t)=>{a.setState(n=>{let r=n.currentSession?.id===e.id?n.currentSession:n.sessions.find(t=>t.id===e.id),i=r&&t!==void 0&&r.title!==t?{...e,title:r.title,updatedAt:Math.max(r.updatedAt,e.updatedAt)}:e;return{sessions:n.sessions.some(t=>t.id===e.id)?n.sessions.map(t=>t.id===e.id?i:t):[i,...n.sessions],currentSession:n.currentSession?.id===e.id?i:n.currentSession}})},[]),K=(0,v.useCallback)(async(e,t)=>{let n=Se(e);await he({sessionId:e,assistantMessageId:t,loadSession:async e=>{let t=await f.getSession(e);if(!t.success||!t.data)throw Error(t.error||`Completed chat session could not be reloaded.`);return t.data},applySession:e=>G(e,n)})},[G]),q=(0,v.useCallback)(async(e,t,n,r={})=>{n.completed?await K(e,t):j(e,t),pe({assistantMessageId:t,cancelledMessageIds:P.current,decision:n,retainForContinuation:r.retainForContinuation})},[K,j]),J=(0,v.useCallback)(async(e,n)=>{let r=h.getState().preferences.titleSettings;if(n&&r?.autoTitle&&r?.taskModel){$.debug(`Triggering auto-title generation...`),A(e);try{let i=await f.generateTitle(e,r.taskModel,n,r.taskProviderType,r.taskProviderId);if($.debug(`Title generation response:`,i),!i.success||!i.data?.title)throw Error(i.error||`Title generation returned no title`);te(e,i.data.title,i.data.updatedAt),i.data.source===`fallback`?u.error(t(`chat.toasts.titlePreviewFallback`)):u.success(t(`chat.toasts.titleGenerated`))}catch(e){$.error(`Failed to generate title:`,e),u.error(t(`chat.toasts.titleGenerationFailed`))}finally{a.getState().generatingTitleForSession===e&&A(null)}}},[te,A,t]);(0,v.useEffect)(()=>{let t=P.current;return()=>{let n=N.current,r=I.current;if(r){let e=!r.jobId;de(r,t),Q(r.sessionId,r.assistantMessageId).then(t=>q(r.sessionId,r.assistantMessageId,t,{retainForContinuation:e})).catch(e=>$.error(`Failed to cancel durable chat generation:`,e)),r.jobId&&ye(r.jobId).catch(e=>$.error(`Failed to cancel durable chat generation:`,e)),I.current=null}n&&e&&!r&&m.send({type:`chat_cancel`,data:{sessionId:e,assistantMessageId:n}}),m.offMessage(`user_message`),m.offMessage(`assistant_chunk`),m.offMessage(`assistant_complete`),m.offMessage(`assistant_cancelled`),m.offMessage(`tool_status`),m.offMessage(`error`)}},[e,q]),(0,v.useEffect)(()=>{if(!e){m.offMessage(`user_message`),m.offMessage(`assistant_chunk`),m.offMessage(`assistant_complete`),m.offMessage(`assistant_cancelled`),m.offMessage(`tool_status`),m.offMessage(`tool_event`),m.offMessage(`error`);return}return m.onMessage(`user_message`,()=>{}),m.onMessage(`assistant_chunk`,t=>{let n=t,r=n.messageId||N.current;r&&P.current.has(r)||r&&N.current&&r!==N.current||r&&(typeof n.total==`string`?L.current=n.total:typeof n.content==`string`&&(L.current+=n.content),typeof n.thinkingTotal==`string`?R.current=n.thinkingTotal:typeof n.thinking==`string`&&(R.current+=n.thinking),se(r,L.current,R.current),ae(L.current,n.done,R.current),B.current&&clearTimeout(B.current),B.current=setTimeout(()=>{O(e,r,L.current),z.current=Date.now()},n.done?0:200))}),m.onMessage(`tool_status`,e=>{let t=e;S(e=>e.find(e=>e.toolCallId===t.toolCallId)?e.map(e=>e.toolCallId===t.toolCallId?{...e,phase:t.phase}:e):[...e,{toolCallId:t.toolCallId,name:t.name,phase:t.phase,startedAt:Date.now()}])}),m.onMessage(`tool_event`,e=>{let t=e;if(t.type&&t.messageId&&!(N.current&&t.messageId!==N.current)){if(t.type===`chat.tool-call.v1`&&t.toolCall){let e=t.toolCall;w(t=>t.find(t=>t.id===e.id)?t.map(t=>t.id===e.id?e:t):[...t,e]);return}if(t.type===`chat.tool-result.v1`&&t.toolCallId){w(e=>e.map(e=>e.id===t.toolCallId?{...e,status:t.status??e.status,resultPreview:t.preview,isError:t.isError===!0,finishedAt:Date.now()}:e)),E(e=>e&&e.toolCall.id===t.toolCallId?null:e);return}if(t.type===`chat.approval.v1`&&t.approvalId&&t.toolCall){let e=t.toolCall;w(t=>t.find(t=>t.id===e.id)?t.map(t=>t.id===e.id?e:t):[...t,e]),E({approvalId:t.approvalId,messageId:t.messageId,toolCall:e,expiresAt:t.expiresAt??Date.now()+12e4})}}}),m.onMessage(`assistant_complete`,t=>{let n=t;$.debug(`Hook: Received assistant_complete for session:`,e,`messageId:`,n.messageId,`with statistics:`,!!n.statistics);let r=n.messageId||N.current,i=!r||r===N.current;if(r&&P.current.delete(r),!i){if(n.truncated&&r){K(e,r);return}r&&k(e,r,n.content,n.statistics,n.providerMetadata,n.thinking);return}if(x(!1),W(),M(!1),S([]),w([]),E(null),n&&r){let t=L.current||n.content,i=R.current||n.thinking,a=ce(r),o=n.statistics?.thinking_duration_ms===void 0&&a!==void 0?{...n.statistics,thinking_duration_ms:a}:n.statistics;k(e,r,t,o,n.providerMetadata,i);let{preferences:s,openArtifactPanel:c}=h.getState();if(s.autoOpenArtifactPanel!==!1){let{artifacts:e}=oe(l(t).content);e.length>0&&c(e[e.length-1])}}N.current=null,L.current=``,R.current=``,window.setTimeout(()=>{ne.current?.()},0),B.current&&clearTimeout(B.current),z.current=0}),m.onMessage(`assistant_cancelled`,t=>{let n=t,r=n.assistantMessageId;r&&n.sessionId===e&&P.current.has(r)&&(P.current.delete(r),j(e,r),N.current===r&&(x(!1),W(),y(null),M(!1),S([]),w([]),E(null),N.current=null,L.current=``,R.current=``))}),m.onMessage(`error`,e=>{let n=e;if(x(!1),W(),M(!1),w([]),E(null),N.current=null,R.current=``,n.code===`SESSION_NOT_FOUND`){$.warn(`Session not found, redirecting to create new session...`),u.error(t(`chat.toasts.sessionNotFoundRedirect`)),window.location.href=`/`;return}u.error(n.error)}),x(!1),W(),N.current=null,R.current=``,()=>{B.current&&clearTimeout(B.current),U()}},[e,O,k,M,ae,W,U,j,K,t]);let Y=(0,v.useCallback)(async(r,o,c,l,d,f,p)=>{if(!e||!r.trim()&&(!o||o.length===0))return;let h;try{let g=a.getState(),_=g.currentSession,v={model:_?.personaId?`persona:${_.personaId}`:_?.model||``,providerType:_?.providerType,providerId:_?.providerId};if(!i(g.models,v)){u.error(t(`chat.model.selectBeforeSending`));return}M(!0),x(!0),W(),w([]),E(null),L.current=``,R.current=``,B.current&&clearTimeout(B.current),z.current=Date.now();let b=_?.isPrivate===!0,ee=_?.messages?.some(e=>e.role===`user`),S=!b&&!ee&&xe(_?.title),C=s();D(e,{id:C,role:`user`,content:r.trim(),images:o});let T=s();if(h=T,N.current=T,R.current=``,y(T),D(e,{role:`assistant`,content:``,id:T}),S&&J(e,r.trim()),n()){let t=`Demo response for: ${r.trim()}`;F.current=window.setTimeout(()=>{F.current=null,!P.current.has(T)&&(O(e,T,t),x(!1),W(),y(null),M(!1),N.current=null,L.current=``,R.current=``)},500);return}if(!b){let n=new AbortController,i={sessionId:e,assistantMessageId:T,abort:n};I.current=i;let h=await me(i,await ge({sessionId:e,message:r.trim(),images:o,userMessageId:C,assistantMessageId:T,options:{..._?.settings?.generationOptions??{},...c===void 0?{}:{format:c}},webSearch:l===!0,tools:d===!0,...d===!0&&f?{toolSelection:f}:{},signal:n.signal}));if(h!==`stream`){await q(e,T,{completed:h===`completed`,pending:!1,state:h===`completed`?`succeeded`:`cancelled`}),I.current===i&&(I.current=null);return}for(let n of p??[]){let i=s(),l=new AbortController;re.current.set(i,l),a.getState().addPendingComparison({sessionId:e,assistantMessageId:i,model:n.model}),(async()=>{try{await ge({sessionId:e,message:r.trim(),images:o,userMessageId:C,assistantMessageId:i,options:{..._?.settings?.generationOptions??{},...c===void 0?{}:{format:c}},webSearch:!1,compare:!0,modelOverride:n,signal:l.signal}),await ve({sessionId:e,assistantMessageId:i,signal:l.signal,onEvent:r=>{r.type===`done`?K(e,i):r.type===`error`&&u.error(t(`chat.toasts.comparisonError`,{model:n.model,error:String(r.error??t(`chat.toasts.generationFailed`))}))}})}catch(e){l.signal.aborted||($.error(`Comparison generation failed:`,e),u.error(t(`chat.toasts.comparisonError`,{model:n.model,error:t(`chat.toasts.comparisonFailed`)})))}finally{re.current.delete(i),a.getState().removePendingComparison(i)}})()}await ve({sessionId:e,assistantMessageId:T,signal:n.signal,onEvent:t=>{t.type===`chunk`?m.dispatchMessage(`assistant_chunk`,t):t.type===`done`?m.dispatchMessage(`assistant_complete`,t):typeof t.type==`string`&&(t.type.startsWith(`chat.tool`)||t.type.startsWith(`chat.approval`))?m.dispatchMessage(`tool_event`,t):t.type===`error`&&m.dispatchMessage(`error`,{...t,sessionId:e})}}),I.current?.assistantMessageId===T&&(I.current=null);return}m.isConnected||await m.connect();let k=b?_?.messages?.filter(e=>e.role!==`system`&&e.id!==T).map(e=>({role:e.role,content:e.content,thinking:e.thinking,images:e.images,providerMetadata:e.providerMetadata})):void 0;m.send({type:`chat_stream`,data:{sessionId:e,content:r.trim(),images:o,format:c,options:_?.settings?.generationOptions??{},assistantMessageId:T,isPrivate:b,...l===!0?{webSearch:!0}:{},...b?{model:_?.model,providerType:_?.providerType,providerId:_?.providerId,messageHistory:k}:{}}})}catch(n){let r=h;if(r&&await fe({sessionId:e,assistantMessageId:r,cancelledMessageIds:P.current,settle:t=>q(e,r,t),onError:e=>$.error(`Failed to resolve cancelled durable chat generation:`,e)})){I.current?.assistantMessageId===r&&(I.current=null);return}if(n instanceof DOMException&&n.name===`AbortError`)return;$.error(`Failed to send message:`,n),x(!1),W(),y(null),M(!1),N.current=null,R.current=``,u.error(t(`chat.toasts.sendFailed`))}},[e,D,O,M,W,J,q,K,t]),le=(0,v.useCallback)(()=>{let t=N.current;if(t){if(P.current.add(t),F.current!==null)window.clearTimeout(F.current),F.current=null,j(e,t),P.current.delete(t);else if(I.current?.assistantMessageId===t){let n=I.current,r=!n.jobId;de(n),Q(e,t).then(async i=>{await q(e,t,i,{retainForContinuation:r}),I.current===n&&(I.current=null)}).catch(e=>$.error(`Failed to cancel durable chat generation:`,e)),n.jobId&&ye(n.jobId).catch(e=>$.error(`Failed to cancel durable chat generation:`,e))}else m.send({type:`chat_cancel`,data:{sessionId:e,assistantMessageId:t}})||(j(e,t),P.current.delete(t))}B.current&&=(clearTimeout(B.current),void 0),x(!1),W(),y(null),M(!1),N.current=null,L.current=``,R.current=``},[M,W,j,e,q]),X=(0,v.useCallback)(async()=>{let n=a.getState(),r=n.currentSession;if(!r||!e)return;if(!i(n.models,{model:r.personaId?`persona:${r.personaId}`:r.model,providerType:r.providerType,providerId:r.providerId})){u.error(t(`chat.model.selectBeforeRegenerating`));return}let o=r.messages,c=-1,l=-1;for(let e=o.length-1;e>=0;e--)if(o[e].role===`assistant`){l=e;break}if(l>0){for(let e=l-1;e>=0;e--)if(o[e].role===`user`){c=e;break}}if(c===-1||l===-1){u.error(t(`chat.toasts.noMessageToRegenerate`));return}let d=o[c],p=o[l],h;try{M(!0),x(!0),W(),L.current=``,R.current=``,B.current&&clearTimeout(B.current),z.current=Date.now();let t=s();h=t,N.current=t,R.current=``,y(t),D(e,{role:`assistant`,content:``,id:t,parentId:p.parentId||p.id,branchIndex:p.siblingCount||1,isActive:!0});let n=r.isPrivate===!0;if(!n){let n=new AbortController,i={sessionId:e,assistantMessageId:t,abort:n};I.current=i;let a=await me(i,await ge({sessionId:e,message:d.content,images:d.images,userMessageId:d.id,assistantMessageId:t,options:r.settings?.generationOptions??{},webSearch:!1,regenerate:!0,originalMessageId:p.id,signal:n.signal}));if(a!==`stream`){await q(e,t,{completed:a===`completed`,pending:!1,state:a===`completed`?`succeeded`:`cancelled`}),I.current===i&&(I.current=null);return}await ve({sessionId:e,assistantMessageId:t,signal:n.signal,onEvent:t=>{t.type===`chunk`?m.dispatchMessage(`assistant_chunk`,t):t.type===`done`?m.dispatchMessage(`assistant_complete`,t):t.type===`error`&&m.dispatchMessage(`error`,{...t,sessionId:e})}}),I.current?.assistantMessageId===t&&(I.current=null);return}m.isConnected||await m.connect();let i=n?o.filter(e=>e.role!==`system`).map(e=>({role:e.role,content:e.content,thinking:e.thinking,images:e.images,providerMetadata:e.providerMetadata})):void 0;m.send({type:`chat_stream`,data:{sessionId:e,content:d.content,images:d.images,options:r.settings?.generationOptions??{},assistantMessageId:t,regenerate:!0,originalMessageId:p.id,isPrivate:n,...n?{model:r.model,providerType:r.providerType,providerId:r.providerId,messageHistory:i}:{}}})}catch(n){let r=h;if(r&&await fe({sessionId:e,assistantMessageId:r,cancelledMessageIds:P.current,settle:t=>q(e,r,t),onError:e=>$.error(`Failed to resolve cancelled durable chat regeneration:`,e)})){I.current?.assistantMessageId===r&&(I.current=null);return}$.error(`Failed to regenerate message:`,n),r&&j(e,r);try{let t=Se(e),n=await f.getSession(e);n.success&&n.data&&G(n.data,t)}catch(e){$.error(`Failed to reload session after regenerate:`,e)}x(!1),W(),y(null),M(!1),N.current=null,R.current=``,u.error(t(`chat.toasts.regenerateFailed`))}},[e,M,W,D,j,G,q,t]),Z=(0,v.useCallback)(async n=>{let r=a.getState().currentSession;if(!r||!e)return;let i=r.messages.find(e=>e.id===n);if(!i){u.error(t(`chat.toasts.messageNotFound`));return}if(i.isActive!==!1)return;let o=i.parentId||i.id,s=i.branchIndex||0;try{let i=await f.switchMessageBranch(e,n,s);if(i.success&&i.data){let i=r.messages.map(e=>e.id===o||e.parentId===o?{...e,isActive:e.id===n}:e),c={...r,messages:i,updatedAt:Date.now()};a.setState(t=>({sessions:t.sessions.map(t=>t.id===e?c:t),currentSession:c})),u.success(t(`chat.toasts.branchSwitched`,{number:s+1}))}else u.error(i.error||t(`chat.toasts.branchSelectFailed`))}catch(e){$.error(`Failed to select branch:`,e),u.error(t(`chat.toasts.branchSelectFailed`))}},[e,t]),_e=(0,v.useCallback)(async(n,r)=>{if(!e||!r.trim())return;let i=a.getState(),o=i.currentSession;if(!o||o.id!==e)return;let s=o.messages.findIndex(e=>e.id===n);if(s===-1||o.messages[s].role!==`user`)return;let c=o.messages[s];try{if(!o.isPrivate){let t=await f.truncateMessagesFrom(e,n);if(!t.success)throw Error(t.error||`Failed to truncate session`)}i.truncateMessagesFrom(e,n),await Y(r,c.images)}catch(e){$.error(`Failed to edit message:`,e),u.error(t(`chat.toasts.editFailed`))}},[e,Y,t]),be=(0,v.useCallback)(async(e,n,r)=>{try{await p.decideApproval(e,n,r),E(t=>t&&t.approvalId===e?null:t)}catch(e){$.error(`Failed to record the tool decision:`,e),u.error(t(`chat.toasts.toolDecisionFailed`))}},[t]),Ce=(0,v.useCallback)(async()=>{if(!e)return;let t=a.getState().currentSession;if(!t||t.id!==e||t.isPrivate||h.getState().isGenerating)return;let n=t.settings?.promptQueue;if(n&&n.length!==0)try{let t=await f.claimQueuedPrompt(e,n[0].id);if(!t.success||!t.data)return;ue(e,t.data.queue),await Y(t.data.entry.content)}catch(e){$.error(`Prompt queue drain failed:`,e)}},[e,Y]);return(0,v.useEffect)(()=>{ne.current=Ce},[Ce]),(0,v.useEffect)(()=>{if(!e)return;let t=window.setTimeout(()=>{ne.current?.()},400);return()=>window.clearTimeout(t)},[e]),{sendMessage:Y,stopGeneration:le,cancelComparison:(0,v.useCallback)(async t=>{if(e){re.current.get(t)?.abort();try{await Q(e,t)}catch(e){$.error(`Failed to cancel the comparison generation:`,e)}finally{a.getState().removePendingComparison(t)}}},[e]),regenerateLastMessage:X,editAndResendMessage:_e,selectBranch:Z,isStreaming:b,streamingMessage:r,streamingThinking:d,streamingMessageId:_,toolActivities:ee,activeToolCalls:C,pendingToolApproval:T,decideToolApproval:be}};export{Y as a,le as i,Ce as n,oe as o,ue as r,xe as t};
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,r as n,t as r}from"./react-vendor-CR5VJ85Q.js";import{t as i}from"./useQuery-BTKpXudI.js";import{d as a}from"./router-vendor-DqMnEJWK.js";import{t as o}from"./logger-BR4forr_.js";import{h as s,s as c,t as l}from"./chatStore-DpVxt9VX.js";import{t as u}from"./useTranslation-Boi0fB1B.js";import{t as d}from"./utils-B-Bhh1pF.js";import{An as f,G as p,It as m,Kt as h,Ln as g,M as _,On as v,Qn as y,S as b,Tn as x,Tr as S,Yn as C,Yt as ee,Z as te,Zn as w,Zt as T,c as ne,cr as E,et as D,ir as O,n as re,t as ie}from"./ui-vendor-DVTj_sKN.js";import{t as ae}from"./Button-j68Q8KVh.js";import{S as oe,g as se,t as k,y as A}from"./api-BrHW-VGd.js";import{t as ce}from"./authStore-DjAsRpNL.js";import"./ui-Aq8MP7Ph.js";import{i as j,n as M,r as N,t as P}from"./thinking-DwlkTfPX.js";var F=e(t(),1),le=n(),ue=` · `,de=`strands:plugin:`,fe=new Intl.Collator(void 0,{numeric:!0,sensitivity:`base`});function pe(e){return e.agentId||e.name.split(`:`)[0]||e.name}function me(e){return/embed/i.test(e.name)?!0:[e.details?.family,...e.details?.families??[]].filter(e=>!!e).some(e=>/bert$/i.test(e))}function I(e){return!!(e.isAgent&&e.agentId&&e.name===e.agentId)}function L(e,t){let n=e.find(I);if(n?.agentName)return n.agentName;for(let t of e){let e=t.agentName??``,n=e.indexOf(ue);if(n>0)return e.slice(0,n)}return t}function he(e,t){let n=e.agentName||e.name;if(I(e))return{title:n,isDefault:!0};let r=`${t}${ue}`,i=n.startsWith(r)?n.slice(r.length):n,a;if(e.name.startsWith(de)){let e=/^(.*\S)\s+\(([^()]+)\)$/.exec(i);e&&(i=e[1],a=e[2])}return{title:i,...a?{provider:a}:{},isDefault:!1}}function R(e,t){return[...e].sort((e,n)=>{let r=I(e);return r===I(n)?fe.compare(t(e),t(n)):r?-1:1})}function ge(e,t){let n=[],r=[],i=[],a=[],o=new Map,c=new Map;for(let t of e)if(t.isLegacySelection)n.push(t);else if(t.isUnavailable)r.push(t);else if(t.isPersona)i.push(t);else if(t.isAgent){let e=pe(t);c.set(e,[...c.get(e)??[],t])}else if(t.isPlugin){let e=t.pluginId||t.pluginName||``;o.set(e,[...o.get(e)??[],t])}else s(t)&&!me(t)&&a.push(t);let l=[{key:`legacy`,kind:`legacy`,label:t.legacy,models:n},{key:`unavailable`,kind:`unavailable`,label:t.unavailable,models:r},{key:`personas`,kind:`personas`,label:t.personas,models:i},{key:`ollama`,kind:`ollama`,label:t.ollama,models:a}];for(let[e,n]of o)l.push({key:`plugin:${e}`,kind:`plugin`,label:n[0]?.pluginName||e||t.plugins,models:R(n,e=>e.name)});for(let[e,n]of c){let r=L(n,e||t.agents);l.push({key:`agent:${e}`,kind:`agent`,label:r,models:R(n,e=>he(e,r).title)})}return l.filter(e=>e.models.length>0)}function z(e){return e.toLowerCase().replace(/[\s\-_./:·()[\],]+/g,` `).trim()}function _e(e,t,n,r=``){let i=z(n).split(` `).filter(Boolean);if(i.length===0)return!0;let a=z([e.name,r,e.personaName,e.pluginName,e.agentName,t.label].filter(Boolean).join(` `)),o=a.replace(/ /g,``);return i.every(e=>a.includes(e)||o.includes(e))}function ve(e,t){if(e.length<=8)return{visible:e,hidden:0};let n=e.slice(0,5);if(!n.some(t)){let r=e.find(t);r&&(n[n.length-1]=r)}return{visible:n,hidden:e.length-n.length}}var ye={ai:`AI`,api:`API`,awq:`AWQ`,bf16:`BF16`,chatgpt:`ChatGPT`,deepseek:`DeepSeek`,fp16:`FP16`,fp8:`FP8`,glm:`GLM`,gpt:`GPT`,gptq:`GPTQ`,hd:`HD`,lfm:`LFM`,llm:`LLM`,minimax:`MiniMax`,mlx:`MLX`,ml:`ML`,moe:`MoE`,openai:`OpenAI`,oss:`OSS`,qwq:`QwQ`,tts:`TTS`,vl:`VL`,xl:`XL`},be={"meta-llama":`Meta`,"x-ai":`xAI`,"z-ai":`Z.ai`,amazon:`Amazon`,anthropic:`Anthropic`,cohere:`Cohere`,deepseek:`DeepSeek`,google:`Google`,liquid:`Liquid AI`,microsoft:`Microsoft`,minimax:`MiniMax`,mistralai:`Mistral`,moonshotai:`Moonshot AI`,nvidia:`NVIDIA`,openai:`OpenAI`,perplexity:`Perplexity`,qwen:`Qwen`},xe=/^(?:hf\.co|huggingface\.co)\//i,B=new Set([`gguf`]);function V(e){let t=e.toLowerCase();return ye[t]?ye[t]:e!==t||/^o\d/.test(e)?e:/^\d+(?:\.\d+)?[bkmt]$/.test(e)||/^[a-z]\d+(?:\.\d+)?[a-z]?$/.test(e)?e.toUpperCase():/^\d/.test(e)?e:e.charAt(0).toUpperCase()+e.slice(1)}function H(e){let t=e.split(/[-_\s]+/).filter(Boolean),n=t.length>1?t.filter(e=>!B.has(e.toLowerCase())):t,r=[];for(let e of n){let t=r[r.length-1];if(t&&/^\d{1,2}$/.test(e)&&/^\d{1,2}$/.test(t)&&r.length>1&&!/^\d/.test(r[r.length-2])){r[r.length-1]=`${t}.${e}`;continue}r.push(V(e))}return r.join(` `)||e}function U(e){let t=e.toLowerCase();return be[t]?be[t]:e===t?H(e):e}function Se(e,t={}){let n=e.trim(),r=n.startsWith(`~`),i=(r?n.slice(1):n).replace(xe,``).split(`/`).filter(Boolean);if(!(t.prettify??i.length>1)||i.length===0)return{name:n};let a=i[i.length-1],o,s=a.lastIndexOf(`:`);s>0&&(o=a.slice(s+1)||void 0,a=a.slice(0,s)),r&&/[-_]latest$/i.test(a)&&(a=a.replace(/[-_]latest$/i,``),o??=`latest`),o===`latest`&&!r&&(o=void 0);let c=i.length>1?U(i[i.length-2]):void 0;return{name:H(a),...c?{vendor:c}:{},...o?{tag:o}:{}}}function Ce(e){if(!Number.isFinite(e)||e<=0)return``;if(e>=1e6){let t=e%1048576==0?e/1048576:e/1e6;return`${Number(t.toFixed(1))}M`}if(e>=1e3){let t=e%1024==0?e/1024:e/1e3;return`${Math.round(t)}K`}return String(e)}function we(e){if(!Number.isFinite(e)||e<=0)return``;let t=[`B`,`KB`,`MB`,`GB`,`TB`],n=e,r=0;for(;n>=1e3&&r<t.length-1;)n/=1e3,r+=1;return`${n>=10||r===0?Math.round(n):n.toFixed(1)} ${t[r]}`}var W=r(),Te=[`bg-amber-500/15 text-amber-700 dark:text-amber-300`,`bg-emerald-500/15 text-emerald-700 dark:text-emerald-300`,`bg-sky-500/15 text-sky-700 dark:text-sky-300`,`bg-violet-500/15 text-violet-700 dark:text-violet-300`,`bg-rose-500/15 text-rose-700 dark:text-rose-300`,`bg-indigo-500/15 text-indigo-700 dark:text-indigo-300`,`bg-teal-500/15 text-teal-700 dark:text-teal-300`,`bg-orange-500/15 text-orange-700 dark:text-orange-300`];function Ee(e){let t=0;for(let n of e.toLowerCase())t=t*31+n.charCodeAt(0)>>>0;return Te[t%Te.length]}function De({seed:e,size:t=`sm`,className:n}){let r=(/[\p{L}\p{N}]/u.exec(e)?.[0]??`?`).toUpperCase();return(0,W.jsx)(`span`,{"aria-hidden":`true`,className:d(`inline-flex shrink-0 select-none items-center justify-center font-semibold leading-none`,t===`md`?`h-6 w-6 rounded-md text-[11px]`:`h-4 w-4 rounded text-[9px]`,Ee(e),n),children:r})}function Oe(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:e.toString()}function ke({hfTask:e,hfSort:t,canInstallModels:n,loadingHf:r,hfModels:i,expandedHfModel:a,hfGgufFiles:o,loadingGguf:s,pullingModel:c,pullProgress:l,setHfTask:f,setHfSort:p,onToggleHfModel:h,onPullHfGguf:g,onCancelPull:_,onRefreshHfModels:y}){let{t:b}=u();return(0,W.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden`,children:[(0,W.jsx)(`div`,{className:`px-3 py-2 border-b border-gray-200 dark:border-dark-300 flex-shrink-0 space-y-2`,children:(0,W.jsxs)(`div`,{className:`flex gap-2`,children:[(0,W.jsxs)(`select`,{value:e,onChange:e=>f(e.target.value),onMouseDown:e=>e.stopPropagation(),className:`flex-1 px-2 py-1.5 rounded-lg border text-xs bg-gray-50 dark:bg-dark-50 border-gray-200 dark:border-dark-300 text-gray-900 dark:text-gray-100`,children:[(0,W.jsx)(`option`,{value:`text-generation`,children:b(`modelManager.huggingface.taskTextGeneration`)}),(0,W.jsx)(`option`,{value:`text-to-speech`,children:b(`modelManager.huggingface.taskTextToSpeech`)}),(0,W.jsx)(`option`,{value:`text-to-image`,children:b(`modelManager.huggingface.taskTextToImage`)}),(0,W.jsx)(`option`,{value:`automatic-speech-recognition`,children:b(`modelManager.huggingface.taskSpeechRecognition`)})]}),(0,W.jsxs)(`select`,{value:t,onChange:e=>p(e.target.value),onMouseDown:e=>e.stopPropagation(),className:`px-2 py-1.5 rounded-lg border text-xs bg-gray-50 dark:bg-dark-50 border-gray-200 dark:border-dark-300 text-gray-900 dark:text-gray-100`,children:[(0,W.jsx)(`option`,{value:`downloads`,children:b(`modelManager.huggingface.sortDownloads`)}),(0,W.jsx)(`option`,{value:`likes`,children:b(`modelManager.huggingface.sortLikes`)}),(0,W.jsx)(`option`,{value:`lastModified`,children:b(`modelManager.huggingface.sortRecent`)})]})]})}),(0,W.jsxs)(`div`,{className:`scroll-region min-h-0 flex-1 scrollbar-thin`,children:[!n&&(0,W.jsx)(`div`,{className:`mx-3 mb-1 mt-3 rounded-lg border border-amber-200 bg-amber-500/10 px-3 py-2 text-xs text-ink dark:border-amber-800 dark:bg-amber-900/20`,children:b(`modelSelector.pullRestricted`)}),r?(0,W.jsx)(`div`,{className:`flex items-center justify-center py-12`,children:(0,W.jsx)(m,{className:`h-6 w-6 animate-spin text-gray-400`})}):i.length===0?(0,W.jsxs)(`div`,{className:`px-4 py-8 text-center text-gray-500 dark:text-gray-400`,children:[(0,W.jsx)(ie,{className:`h-8 w-8 mx-auto mb-2 text-gray-300 dark:text-gray-600`}),(0,W.jsx)(`p`,{className:`text-sm`,children:b(`modelManager.huggingface.noModelsFound`)})]}):(0,W.jsx)(`div`,{className:`divide-y divide-gray-100 dark:divide-dark-200`,children:i.map(e=>{let t=a===e.id,r=o[e.id]||[],i=s===e.id;return(0,W.jsxs)(`div`,{className:`bg-white dark:bg-dark-100`,children:[(0,W.jsx)(`div`,{className:`px-3 py-3 cursor-pointer hover:bg-gray-50 dark:hover:bg-dark-200`,onMouseDown:t=>{t.preventDefault(),t.stopPropagation(),h(e.id)},children:(0,W.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,W.jsx)(`div`,{className:`flex-shrink-0 rounded-lg bg-yellow-500/20 p-2 dark:bg-yellow-900/30`,children:(0,W.jsx)(ie,{className:`h-4 w-4 text-yellow-600 dark:text-yellow-400`})}),(0,W.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,W.jsx)(`h4`,{dir:`ltr`,className:`text-sm font-medium text-gray-900 dark:text-gray-100 truncate`,children:e.id}),e.gated&&(0,W.jsx)(`span`,{className:`rounded bg-yellow-500/20 px-1.5 py-0.5 text-xs text-ink dark:bg-yellow-900/30`,children:`Gated`})]}),(0,W.jsxs)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-0.5`,children:[`by `,e.author]}),(0,W.jsxs)(`div`,{className:`flex items-center gap-3 mt-1.5 text-xs text-gray-400 dark:text-gray-500`,children:[(0,W.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,W.jsx)(v,{className:`h-3 w-3`}),Oe(e.downloads)]}),(0,W.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,W.jsx)(ee,{className:`h-3 w-3`}),Oe(e.likes)]}),e.pipeline_tag&&(0,W.jsx)(`span`,{className:`px-1.5 py-0.5 rounded bg-gray-100 dark:bg-dark-200`,children:e.pipeline_tag})]})]}),(0,W.jsxs)(`div`,{className:`flex items-center gap-2 flex-shrink-0`,children:[(0,W.jsx)(`a`,{href:`https://huggingface.co/${e.id}`,target:`_blank`,rel:`noopener noreferrer`,onMouseDown:e=>e.stopPropagation(),className:`p-1.5 rounded-lg hover:bg-gray-100 dark:hover:bg-dark-200`,children:(0,W.jsx)(x,{className:`h-4 w-4 text-gray-400`})}),(0,W.jsx)(w,{className:d(`h-4 w-4 text-gray-400 transition-transform`,t&&`rotate-180`)})]})]})}),t&&(0,W.jsx)(`div`,{className:`px-3 pb-3 pt-1 border-t border-gray-100 dark:border-dark-200 bg-gray-50 dark:bg-dark-200`,children:i?(0,W.jsxs)(`div`,{className:`flex items-center justify-center py-4`,children:[(0,W.jsx)(m,{className:`h-4 w-4 animate-spin text-gray-400`}),(0,W.jsx)(`span`,{className:`ml-2 text-xs text-gray-500`,children:b(`modelManager.huggingface.checkingGguf`)})]}):r.length===0?(0,W.jsx)(`div`,{className:`py-4 text-center text-xs text-gray-500 dark:text-gray-400`,children:b(`modelManager.huggingface.noGgufAvailable`)}):(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsx)(`div`,{className:`text-xs font-medium text-gray-600 dark:text-gray-300 mb-2`,children:b(`modelManager.huggingface.ggufFilesCount`,{count:r.length})}),r.map(e=>{let t=c===e.ollamaCommand;return(0,W.jsxs)(`div`,{className:`flex items-center gap-2 p-2 rounded-lg bg-white dark:bg-dark-100 border border-gray-200 dark:border-dark-300`,children:[(0,W.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,W.jsx)(`div`,{className:`text-xs font-medium text-gray-800 dark:text-gray-200 truncate`,children:e.filename}),(0,W.jsxs)(`div`,{className:`flex items-center gap-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400`,children:[(0,W.jsx)(`span`,{children:e.sizeFormatted}),e.quantization&&(0,W.jsx)(`span`,{className:`px-1.5 py-0.5 rounded bg-purple-100 dark:bg-purple-900/30 text-purple-700 dark:text-purple-400`,children:e.quantization})]})]}),t?(0,W.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,W.jsx)(`div`,{className:`text-xs text-gray-500 w-12 text-right`,children:l?.percent===void 0?`...`:`${l.percent}%`}),(0,W.jsx)(`button`,{onMouseDown:e=>{e.preventDefault(),e.stopPropagation(),_()},className:`p-1.5 rounded-lg text-red-500 hover:bg-red-50 dark:hover:bg-red-900/20`,children:(0,W.jsx)(re,{className:`h-4 w-4`})})]}):n?(0,W.jsxs)(`button`,{onMouseDown:t=>{t.preventDefault(),t.stopPropagation(),g(e.ollamaCommand,e.filename)},disabled:!!c,className:d(`px-3 py-1.5 rounded-lg text-xs font-medium`,`bg-primary-100 dark:bg-primary-900/30`,`text-primary-700 dark:text-primary-400`,`hover:bg-primary-200 dark:hover:bg-primary-900/50`,`disabled:opacity-50 disabled:cursor-not-allowed`),children:[(0,W.jsx)(v,{className:`h-3 w-3 inline mr-1`}),b(`models.pull`)]}):(0,W.jsx)(`span`,{className:`rounded bg-amber-500/20 px-2 py-1 text-[11px] font-medium text-ink dark:bg-amber-900/30`,children:b(`modelSelector.adminOnlyPull`)})]},e.filename)}),c?.startsWith(`hf.co/`)&&c.includes(e.id)&&l?.percent!==void 0&&(0,W.jsx)(`div`,{className:`w-full bg-gray-200 dark:bg-dark-300 rounded-full h-1.5 overflow-hidden mt-2`,children:(0,W.jsx)(`div`,{className:`h-1.5 rounded-full bg-primary-500 transition-all duration-300`,style:{width:`${l.percent}%`}})})]})})]},e.id)})})]}),(0,W.jsxs)(`div`,{className:`px-3 py-2 border-t border-gray-200 dark:border-dark-300 flex items-center justify-between flex-shrink-0`,children:[(0,W.jsxs)(`a`,{href:`https://huggingface.co/models`,target:`_blank`,rel:`noopener noreferrer`,onMouseDown:e=>e.stopPropagation(),className:`text-xs text-primary-600 dark:text-primary-400 hover:underline flex items-center gap-1`,children:[(0,W.jsx)(x,{className:`h-3 w-3`}),b(`modelManager.huggingface.browseAllLink`)]}),(0,W.jsx)(`button`,{onMouseDown:e=>{e.preventDefault(),e.stopPropagation(),y()},className:`p-1.5 rounded-lg hover:bg-gray-100 dark:hover:bg-dark-200`,children:(0,W.jsx)(te,{className:d(`h-3.5 w-3.5 text-gray-400`,r&&`animate-spin`)})})]})]})}var Ae=`[data-testid="model-selector-option"], [data-testid="model-selector-show-all"]`;function je(e,t){if(e.key!==`ArrowDown`&&e.key!==`ArrowUp`)return;let n=Array.from(e.currentTarget.querySelectorAll(Ae)),r=n.indexOf(document.activeElement);if(r===-1)return;e.preventDefault();let i=r+(e.key===`ArrowDown`?1:-1);if(i<0){t();return}n[Math.min(i,n.length-1)]?.focus()}function Me({groups:e,selectedModel:t,showImageGen:n,getModelValue:r,getModelIcon:i,getModelLabel:a,getModelTag:o,getModelSubLabel:s,onModelSelect:c,onShowAll:l,onOpenGallery:p,onExitTop:m}){let{t:g}=u();return(0,W.jsxs)(`div`,{className:`scroll-region min-h-0 flex-1 scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-dark-400`,onKeyDown:e=>je(e,m),children:[e.length>0?e.map(e=>(0,W.jsxs)(`div`,{"data-testid":`model-selector-group`,children:[e.showHeader&&(0,W.jsxs)(`div`,{className:`sticky top-0 z-[1] flex items-center gap-2 border-b border-gray-200 bg-gray-100 px-3 py-2 text-xs font-semibold text-gray-500 dark:border-dark-400 dark:bg-dark-300 dark:text-gray-400`,children:[e.icon,(0,W.jsx)(`span`,{className:`min-w-0 truncate`,children:e.label}),(0,W.jsx)(`span`,{className:`font-normal tabular-nums text-gray-400 dark:text-dark-500`,children:e.total})]}),e.models.map(n=>{let l=r(n),u=s(n,e),f=o(n,e);return(0,W.jsx)(`button`,{type:`button`,"data-testid":`model-selector-option`,"data-model-value":l,"aria-pressed":t===l,title:n.isPersona?void 0:n.name,onClick:()=>c(l),className:d(`block w-full cursor-pointer border-b border-gray-100 px-3 py-2 text-start last:border-b-0 dark:border-dark-200`,`hover:bg-gray-50 dark:hover:bg-dark-200`,`bg-white dark:bg-dark-100 transition-colors`,`focus-visible:relative focus-visible:z-10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary-500/50`,t===l&&`bg-primary-50 dark:bg-primary-900/30`),children:(0,W.jsxs)(`div`,{className:`flex items-center gap-3`,children:[i(n),(0,W.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,W.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,W.jsx)(`span`,{dir:n.isPersona?`auto`:`ltr`,className:`min-w-0 truncate text-sm font-medium text-gray-900 dark:text-gray-100`,children:a(n,e)}),f&&(0,W.jsx)(`span`,{dir:`ltr`,className:`shrink-0 rounded border border-black/[0.08] px-1 py-px font-mono text-[10px] leading-4 text-gray-500 dark:border-white/[0.1] dark:text-dark-600`,children:f})]}),u&&(0,W.jsx)(`div`,{dir:`auto`,className:`text-xs text-gray-500 dark:text-gray-400 truncate`,children:u})]}),t===l&&(0,W.jsx)(y,{className:`h-4 w-4 text-primary-600 dark:text-primary-400 flex-shrink-0`})]})},l)}),e.hidden>0&&(0,W.jsxs)(`button`,{type:`button`,"data-testid":`model-selector-show-all`,onClick:()=>l(e.key),className:d(`flex w-full items-center justify-between gap-2 border-b border-gray-100 bg-white px-3 py-2 text-start text-xs font-medium text-primary-600 dark:border-dark-200 dark:bg-dark-100 dark:text-primary-400`,`hover:bg-gray-50 dark:hover:bg-dark-200`,`focus-visible:relative focus-visible:z-10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-primary-500/50`),children:[(0,W.jsx)(`span`,{className:`truncate`,children:g(`modelSelector.showAll`,{total:e.total})}),(0,W.jsx)(C,{className:`h-3.5 w-3.5 shrink-0 rtl:rotate-180`})]})]},e.key)):(0,W.jsxs)(`div`,{className:`px-4 py-8 text-center text-gray-500 dark:text-gray-400`,children:[(0,W.jsx)(f,{className:`h-8 w-8 mx-auto mb-2 text-gray-300 dark:text-gray-600`}),(0,W.jsx)(`p`,{className:`text-sm`,children:g(`models.noModelsFound`)})]}),n&&(0,W.jsxs)(`div`,{className:`border-t border-gray-200 dark:border-dark-300`,children:[(0,W.jsx)(`div`,{className:`px-3 py-2 text-xs font-semibold text-gray-500 dark:text-gray-400 bg-gray-100 dark:bg-dark-300`,children:(0,W.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,W.jsx)(D,{className:`h-4 w-4 text-blue-600 dark:text-blue-400`}),g(`modelSelector.actions`)]})}),(0,W.jsx)(`div`,{onMouseDown:e=>{e.preventDefault(),p()},className:`px-3 py-3 cursor-pointer hover:bg-blue-50 dark:hover:bg-blue-900/20 bg-white dark:bg-dark-100`,children:(0,W.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,W.jsx)(h,{className:`h-4 w-4 text-blue-600 dark:text-blue-400`}),(0,W.jsxs)(`div`,{className:`flex-1`,children:[(0,W.jsx)(`div`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:g(`gallery.generate`)}),(0,W.jsx)(`div`,{className:`text-xs text-gray-500 dark:text-gray-400`,children:g(`gallery.generateDescription`)})]})]})})]})]})}function Ne({sources:e,active:t,onChange:n}){let{t:r}=u(),i=(0,F.useRef)([]),a=e.reduce((e,t)=>e+t.count,0),o=[{key:`all`,label:r(`common.all`),count:a},...e],s=(e,t)=>{let r=getComputedStyle(e.currentTarget).direction===`rtl`,a=r?`ArrowLeft`:`ArrowRight`,s=r?`ArrowRight`:`ArrowLeft`,c=null;e.key===a?c=(t+1)%o.length:e.key===s?c=(t-1+o.length)%o.length:e.key===`Home`?c=0:e.key===`End`&&(c=o.length-1),c!==null&&(e.preventDefault(),n(o[c].key),i.current[c]?.focus())};return(0,W.jsx)(`div`,{role:`radiogroup`,"aria-label":r(`modelSelector.sources`),"data-testid":`model-selector-sources`,className:`flex gap-1.5 overflow-x-auto px-4 pb-3 sm:px-5 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden`,children:o.map((e,r)=>{let a=e.key===t;return(0,W.jsxs)(`button`,{ref:e=>{i.current[r]=e},type:`button`,role:`radio`,"aria-checked":a,tabIndex:a?0:-1,"data-source-key":e.key,onClick:()=>n(e.key),onKeyDown:e=>s(e,r),className:d(`flex shrink-0 items-center gap-1.5 rounded-full border px-3 py-1 text-xs font-medium transition-colors`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500/50`,a?`border-transparent bg-gray-900 text-white dark:bg-dark-900 dark:text-dark-25`:`border-black/[0.08] text-gray-600 hover:bg-gray-100 dark:border-white/[0.09] dark:text-dark-600 dark:hover:bg-dark-200`,e.count===0&&!a&&`opacity-50`),children:[(0,W.jsx)(`span`,{className:`whitespace-nowrap`,children:e.label}),(0,W.jsx)(`span`,{className:d(`tabular-nums`,a?`text-white/70 dark:text-dark-25/70`:`text-gray-400 dark:text-dark-500`),children:e.count})]},e.key)})})}function Pe({libraryCategories:e,libraryCategory:t,canInstallModels:n,loadingLibrary:r,filteredLibraryModels:i,pullingModel:a,pullProgress:o,setLibraryCategory:s,isModelInstalled:c,onModelSelect:l,onPullModel:f,onCancelPull:p,onRefreshLibrary:h}){let{t:_}=u();return(0,W.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-hidden`,children:[(0,W.jsx)(`div`,{className:`px-3 py-2 border-b border-gray-200 dark:border-dark-300 flex-shrink-0`,children:(0,W.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:e.map(e=>(0,W.jsx)(`button`,{onMouseDown:t=>{t.preventDefault(),t.stopPropagation(),s(e)},className:d(`px-2.5 py-1 rounded-full text-xs font-medium transition-colors`,t===e?`bg-primary-100 dark:bg-primary-900/30 text-primary-700 dark:text-primary-400`:`bg-gray-100 dark:bg-dark-200 text-gray-600 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-dark-300`),children:e.charAt(0).toUpperCase()+e.slice(1)},e))})}),(0,W.jsxs)(`div`,{className:`scroll-region min-h-0 flex-1 scrollbar-thin`,children:[!n&&(0,W.jsx)(`div`,{className:`mx-3 mb-1 mt-3 rounded-lg border border-amber-200 bg-amber-500/10 px-3 py-2 text-xs text-ink dark:border-amber-800 dark:bg-amber-900/20`,children:_(`modelSelector.pullRestricted`)}),r?(0,W.jsx)(`div`,{className:`flex items-center justify-center py-12`,children:(0,W.jsx)(m,{className:`h-6 w-6 animate-spin text-gray-400`})}):i.length===0?(0,W.jsxs)(`div`,{className:`px-4 py-8 text-center text-gray-500 dark:text-gray-400`,children:[(0,W.jsx)(g,{className:`h-8 w-8 mx-auto mb-2 text-gray-300 dark:text-gray-600`}),(0,W.jsx)(`p`,{className:`text-sm`,children:_(`models.noModelsFound`)})]}):(0,W.jsx)(`div`,{className:`divide-y divide-gray-100 dark:divide-dark-200`,children:i.map(e=>{let t=c(e.name),r=a===e.name;return(0,W.jsxs)(`div`,{className:d(`px-3 py-3 bg-white dark:bg-dark-100`,t&&`bg-green-50/50 dark:bg-green-900/10`),children:[(0,W.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,W.jsx)(`div`,{className:`p-2 rounded-lg bg-blue-100 dark:bg-blue-900/30 flex-shrink-0`,children:(0,W.jsx)(g,{className:`h-4 w-4 text-blue-600 dark:text-blue-400`})}),(0,W.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,W.jsx)(`h4`,{dir:`ltr`,className:`text-sm font-medium text-gray-900 dark:text-gray-100 truncate`,children:e.name}),t&&(0,W.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-xs bg-green-100 dark:bg-green-900/30 text-green-700 dark:text-green-400`,children:_(`modelSelector.installed`)}),(e.category===`cloud`||e.tags?.includes(`cloud`))&&(0,W.jsxs)(`span`,{className:`px-1.5 py-0.5 rounded text-xs bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-400 flex items-center gap-1`,children:[(0,W.jsx)(g,{className:`h-3 w-3`}),`Cloud`]})]}),(0,W.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 line-clamp-1 mt-0.5`,children:e.description}),(0,W.jsxs)(`div`,{className:`flex items-center gap-2 mt-1.5`,children:[e.sizes.slice(0,3).map(e=>(0,W.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-xs bg-gray-100 dark:bg-dark-200 text-gray-600 dark:text-gray-400`,children:e},e)),e.pulls&&(0,W.jsxs)(`span`,{className:`text-xs text-gray-400 dark:text-gray-500 flex items-center gap-1`,children:[(0,W.jsx)(v,{className:`h-3 w-3`}),e.pulls]})]})]}),(0,W.jsx)(`div`,{className:`flex-shrink-0`,children:r?(0,W.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,W.jsx)(`div`,{className:`text-xs text-gray-500 w-12 text-right`,children:o?.percent===void 0?`...`:`${o.percent}%`}),(0,W.jsx)(`button`,{onClick:p,className:`p-1.5 rounded-lg text-red-500 hover:bg-red-50 dark:hover:bg-red-900/20`,children:(0,W.jsx)(re,{className:`h-4 w-4`})})]}):t?(0,W.jsx)(`button`,{onClick:()=>l(e.name),className:`px-3 py-1.5 rounded-lg text-xs font-medium bg-green-100 dark:bg-green-900/30 text-green-700 dark:text-green-400 hover:bg-green-200 dark:hover:bg-green-900/50`,children:_(`modelSelector.use`)}):n?(0,W.jsxs)(`button`,{onClick:()=>f(e.name),className:`px-3 py-1.5 rounded-lg text-xs font-medium bg-primary-100 dark:bg-primary-900/30 text-primary-700 dark:text-primary-400 hover:bg-primary-200 dark:hover:bg-primary-900/50`,children:[(0,W.jsx)(v,{className:`h-3 w-3 inline mr-1`}),_(`modelSelector.pull`)]}):(0,W.jsx)(`span`,{className:`rounded bg-amber-500/20 px-2 py-1 text-[11px] font-medium text-ink dark:bg-amber-900/30`,children:_(`modelSelector.adminOnlyPull`)})})]}),r&&o?.percent!==void 0&&(0,W.jsx)(`div`,{className:`mt-2 w-full bg-gray-200 dark:bg-dark-300 rounded-full h-1.5 overflow-hidden`,children:(0,W.jsx)(`div`,{className:`h-1.5 rounded-full bg-primary-500 transition-all duration-300`,style:{width:`${o.percent}%`}})})]},e.name)})})]}),(0,W.jsxs)(`div`,{className:`px-3 py-2 border-t border-gray-200 dark:border-dark-300 flex items-center justify-between flex-shrink-0`,children:[(0,W.jsxs)(`a`,{href:`https://ollama.com/library`,target:`_blank`,rel:`noopener noreferrer`,onMouseDown:e=>e.stopPropagation(),className:`text-xs text-primary-600 dark:text-primary-400 hover:underline flex items-center gap-1`,children:[(0,W.jsx)(x,{className:`h-3 w-3`}),_(`modelManager.huggingface.browseAllLink`)]}),(0,W.jsx)(`button`,{onMouseDown:e=>{e.preventDefault(),e.stopPropagation(),h()},className:`p-1.5 rounded-lg hover:bg-gray-100 dark:hover:bg-dark-200`,children:(0,W.jsx)(te,{className:d(`h-3.5 w-3.5 text-gray-400`,r&&`animate-spin`)})})]})]})}var Fe=o(`components:model-selector`),Ie=({models:e,selectedModel:t,onModelChange:n,currentPersona:r,className:o,disabled:f=!1,compact:m=!1,showImageGen:h=!1,onModelsRefresh:v,getModelValue:y,getModelId:x,getModelLabel:C,getModelTitle:ee,triggerRef:te,triggerTestId:D,selectTestId:ae,ariaLabel:k})=>{let{t:j}=u(),[M,N]=(0,F.useState)(!1),[P,ue]=(0,F.useState)(``),[de,fe]=(0,F.useState)(`installed`),[pe,me]=(0,F.useState)(`all`),I=(0,F.useRef)(null),L=(0,F.useRef)(null),R=(0,F.useRef)(null),z=(0,F.useRef)(null),ye=a(),{user:be,systemInfo:xe}=ce(),B=be?.role===`admin`||xe?.requiresAuth===!1,V=xe?.ollamaEnabled!==!1,H=V?de:`installed`,[U,Te]=(0,F.useState)(`all`),[Ee,Oe]=(0,F.useState)(``),[Ae,je]=(0,F.useState)(`text-generation`),[Ie,Le]=(0,F.useState)(`downloads`),[G,Re]=(0,F.useState)(``),[ze,Be]=(0,F.useState)(null),[Ve,He]=(0,F.useState)({}),[Ue,We]=(0,F.useState)(null),[K,q]=(0,F.useState)(null),[Ge,J]=(0,F.useState)(null),[Ke,Y]=(0,F.useState)(null),qe=[`all`,`general`,`coding`,`reasoning`,`vision`,`embedding`,`cloud`],Je=(0,F.useMemo)(()=>ge(e,{legacy:j(`modelSelector.providerNotRecorded`,`Provider not recorded`),unavailable:j(`modelSelector.unavailableSelections`,`Unavailable selections`),personas:j(`modelSelector.personas`),ollama:`Ollama`,plugins:j(`modelSelector.pluginModels`),agents:j(`modelSelector.agentModels`,`Agents`)}),[e,j]),Ye=e=>{let t=`h-4 w-4 shrink-0 text-gray-500 dark:text-dark-600`;switch(e.kind){case`legacy`:return(0,W.jsx)(O,{className:t});case`unavailable`:return(0,W.jsx)(re,{className:t});case`personas`:return(0,W.jsx)(ne,{className:t});case`agent`:return(0,W.jsx)(b,{className:t});default:return(0,W.jsx)(De,{seed:e.label})}},X=e=>y?.(e)??e.name,Xe=e=>Se(x?.(e)??e.name,e.isPlugin?{prettify:!0}:{}),Ze=e=>{let t=Xe(e);return t.tag?`${t.name} ${t.tag}`:t.name},Qe=l(e=>e.modelMetadata),$e=l(e=>e.personas),Z=e.find(e=>X(e)===t),et=e=>{if(!e.name.startsWith(`persona:`))return;let t=e.name.slice(8),n=t;try{n=decodeURIComponent(t)}catch{}let r=$e[t]??$e[n];if(r?.name)return r.name;if(e.personaName&&e.personaName!==t)return e.personaName},tt=e=>{if(!e.name.startsWith(`persona:`))return;let t=e.name.slice(8),n=t;try{n=decodeURIComponent(t)}catch{}return $e[t]??$e[n]};(0,F.useImperativeHandle)(te,()=>R.current);let Q=(0,F.useCallback)((e=!0)=>{N(!1),ue(``),e&&window.requestAnimationFrame(()=>R.current?.focus())},[]),{data:nt=[],isLoading:rt,refetch:it}=i({queryKey:[`ollama-library-selector`,Ee,U===`cloud`?`cloud`:`all`],queryFn:async()=>{let e=await A.getLibraryModels({search:Ee||void 0,sort:`popular`,category:U===`cloud`?`cloud`:void 0});return e.success&&e.data?e.data:[]},enabled:M&&H===`ollama`}),{data:at=[],isLoading:ot,refetch:st}=i({queryKey:[`hf-models-selector`,Ae,G,Ie],queryFn:async()=>{let e=await oe.getModels({task:Ae,search:G||void 0,sort:Ie,limit:30});return e.success&&e.data?e.data:[]},enabled:M&&H===`huggingface`}),ct=nt.filter(e=>{let t=!P||e.name.toLowerCase().includes(P.toLowerCase())||e.description.toLowerCase().includes(P.toLowerCase()),n=U===`all`||e.category===U;return t&&n}),lt=(0,F.useCallback)(async e=>{let[t,n]=e.split(`/`);if(t&&n){We(e);try{let r=await oe.getGgufFiles(t,n);r.success&&r.data&&He(t=>({...t,[e]:r.data}))}catch(e){Fe.error(`Failed to load GGUF files:`,e)}finally{We(null)}}},[]),ut=(0,F.useCallback)(e=>{ze===e?Be(null):(Be(e),Ve[e]||lt(e))},[ze,Ve,lt]),dt=(0,F.useCallback)((e,t)=>{if(!B){S.error(j(`modelSelector.pullRestricted`));return}if(!K){q(e),J({status:`starting`});try{let n=A.pullModelStream(e,e=>{J(e)},()=>{J(null),q(null),Y(null),S.success(j(`modelDownload.success`,{name:t})),v?.()},e=>{J(null),q(null),Y(null),S.error(j(`modelDownload.failed`,{error:e}))});Y(()=>n)}catch{J(null),q(null),S.error(j(`modelDownload.startFailed`))}}},[B,v,K,j]);(0,F.useEffect)(()=>{let e=setTimeout(()=>{H===`huggingface`?Re(P):H===`ollama`&&Oe(P)},300);return()=>clearTimeout(e)},[P,H]),(0,F.useEffect)(()=>{if(!M)return;let e=e=>{if(e.key===`Escape`){e.preventDefault(),Q();return}if(e.key===`Tab`&&L.current){let t=Array.from(L.current.querySelectorAll(`button:not([disabled]), input:not([disabled]), [tabindex]:not([tabindex="-1"])`)).filter(e=>e.offsetParent!==null),n=t[0],r=t[t.length-1];if(!n||!r)return;e.shiftKey&&document.activeElement===n?(e.preventDefault(),r.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n.focus())}};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[Q,M]),(0,F.useEffect)(()=>{M&&z.current&&z.current.focus()},[M]);let ft=async t=>{let r=e.find(e=>X(e)===t)??e.find(e=>!e.isPlugin&&!e.isPersona&&e.name===t),i=r?X(r):t,a=r?.name??t;if(Q(),!V){n({target:{value:i}});return}try{let e=await A.listRunningModels();if(e.success&&e.data){let t=e.data;t.length>0&&(r?.isPlugin!==!0&&t.some(e=>e.name===a||a.startsWith(`persona:`))||await A.unloadAllModels())}}catch(e){Fe.warn(`Failed to unload models before switch:`,e)}n({target:{value:i}})},pt=async e=>{if(!B){S.error(j(`modelSelector.pullRestricted`));return}if(!K){q(e),J({status:`starting`});try{let t=A.pullModelStream(e,e=>{J(e)},()=>{J(null),q(null),Y(null),S.success(j(`modelDownload.success`,{name:e})),v?.()},e=>{J(null),q(null),Y(null),S.error(j(`modelDownload.failed`,{error:e}))});Y(()=>t)}catch{J(null),q(null),S.error(j(`modelDownload.startFailed`))}}},mt=()=>{Ke&&(Ke(),Y(null),q(null),J(null),S.success(j(`modelDownload.cancelled`)))},ht=t=>e.some(e=>s(e)&&(e.name===t||e.name.startsWith(t+`:`))),gt=(e,t=`sm`)=>{let n=t===`md`?`h-6 w-6 rounded-md`:`h-4 w-4 rounded`,r=Qe[c(e)]?.avatar;if(r&&!e.isPersona)return(0,W.jsx)(`img`,{src:r,alt:``,className:d(n,`shrink-0 rounded-full object-cover`)});if(e.isPersona||e.isLegacySelection){let t=tt(e);if(t)return(0,W.jsx)(`img`,{src:se(t,64),alt:``,className:d(n,`shrink-0 object-cover`)})}if(e.isLegacySelection||e.isPersona||e.isAgent){let r=e.isLegacySelection?O:e.isPersona?ne:b,i=(0,W.jsx)(r,{className:`h-4 w-4 shrink-0 text-gray-500 dark:text-dark-600`});return t===`md`?(0,W.jsx)(`span`,{className:d(n,`flex shrink-0 items-center justify-center bg-gray-100 dark:bg-dark-200`),children:i}):i}let i=Xe(e),a=e.isPlugin?i.vendor||e.pluginName||e.pluginId||i.name:i.vendor||i.name;return(0,W.jsx)(De,{seed:a,size:t})},$=e=>{let t=Qe[c(e)]?.label;if(t&&!e.isPersona)return t;if(C)return C(e);if(e.isLegacySelection)return`${et(e)??e.name} (${j(`modelSelector.legacyProvider`,`provider not recorded`)})`;if(e.isPersona)return et(e)||e.personaName||e.name;if(e.isAgent)return e.isUnavailable?`${e.agentName||e.name} (${j(`modelSelector.unavailable`,`unavailable`)})`:e.agentName||e.name;let n=Ze(e);return e.isUnavailable?`${n} (${j(`modelSelector.unavailable`,`unavailable`)})`:n},_t=e=>e.isLegacySelection?e.isUnavailable?j(`modelSelector.providerUnavailable`,`provider unavailable`):j(`modelSelector.reselectProvider`,`reselect a provider to pin this model`):e.isPersona?`via ${e.model}`:e.isPlugin?e.isUnavailable?`via ${e.pluginName||e.pluginId} · ${j(`modelSelector.providerUnavailable`,`provider unavailable`)}`:`via ${e.pluginName}`:e.isUnavailable?j(`modelSelector.providerUnavailable`,`provider unavailable`):null,vt=e=>e.kind===`plugin`||e.kind===`ollama`,yt=e=>{let t=Xe(e);if(e.isPlugin||t.vendor||t.tag)return t;let n=t.name.lastIndexOf(`:`);if(n<=0)return t;let r=t.name.slice(n+1);return{name:t.name.slice(0,n),...r&&r!==`latest`?{tag:r}:{}}},bt=e=>!!Qe[c(e)]?.label,xt=(e,t)=>C||bt(e)?$(e):vt(t)?yt(e).name:t.kind===`agent`?he(e,t.label).title:$(e),St=(e,t)=>!vt(t)||C||bt(e)?null:yt(e).tag??null,Ct=(e,t)=>{if(t.kind===`agent`){let n=he(e,t.label);return n.isDefault?j(`modelSelector.defaultModel`):n.provider?`via ${n.provider}`:null}if(!vt(t))return _t(e);let n=yt(e),r=e.details??{},i=/(^|[-:])cloud$/i.test(e.name),a=[n.vendor,e.isPlugin?void 0:r.parameter_size,e.isPlugin||r.quantization_level===n.tag?void 0:r.quantization_level,e.contextLength?j(`modelSelector.contextSize`,{size:Ce(e.contextLength),defaultValue:`{{size}} context`}):void 0,e.isPlugin||i?void 0:we(e.size)].filter(e=>!!e);return a.length>0?a.join(` · `):null},wt=e=>X(e)===t,Tt=Je.map(e=>({source:e,matches:e.models.filter(t=>_e(t,e,P,$(t)))})),Et=Je.length>1,Dt=Et&&Je.some(e=>e.key===pe)?pe:`all`,Ot=Dt===`all`,kt=Tt.filter(({source:e})=>Ot||e.key===Dt).map(({source:e,matches:t})=>{let n=Ot&&Et?ve(t,wt):{visible:t,hidden:0};return{key:e.key,kind:e.kind,label:e.label,icon:Ye(e),models:n.visible,total:t.length,hidden:n.hidden,showHeader:Ot}}).filter(e=>e.models.length>0),At=Tt.map(({source:e,matches:t})=>({key:e.key,label:e.label,count:t.length}));return(0,W.jsxs)(`div`,{className:d(`relative min-w-0`,o),ref:I,children:[(0,W.jsxs)(`button`,{ref:R,"data-testid":D,type:`button`,onClick:()=>!f&&N(!M),disabled:f,"aria-haspopup":`dialog`,"aria-expanded":M,"aria-label":k&&Z?`${k}: ${$(Z)}`:k,className:d(m?`flex h-9 w-full min-w-0 items-center justify-between gap-2 px-2.5 text-start`:`w-full flex items-center justify-between gap-2 px-3 py-2.5 text-start`,`rounded-xl border border-line bg-surface-subtle text-sm text-ink hover:bg-hover-solid`,`transition-colors duration-150 focus:outline-none focus:ring-2 focus:ring-primary-500/20 focus:border-primary-500/40`,f?`opacity-50 cursor-not-allowed`:`cursor-pointer`),title:m?Z?ee?.(Z)??$(Z):j(`modelSelector.selectModel`):void 0,children:[(()=>{if(!Z)return m?(0,W.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-2`,children:[(0,W.jsx)(E,{className:`h-4 w-4 shrink-0`}),(0,W.jsx)(`span`,{className:`truncate text-xs font-medium text-ink-subtle`,children:j(`modelSelector.selectModel`)})]}):j(`modelSelector.selectModel`);if(m){let e=$(Z);return(0,W.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-2`,children:[(0,W.jsx)(`span`,{className:`shrink-0`,children:gt(Z)}),(0,W.jsx)(`span`,{dir:Z.isPersona?`auto`:`ltr`,className:`truncate text-xs font-medium text-ink`,children:e})]})}let e=$(Z),t=_t(Z);return(0,W.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[gt(Z),(0,W.jsxs)(`div`,{className:`flex flex-col min-w-0`,children:[(0,W.jsx)(`span`,{dir:Z.isPersona?`auto`:`ltr`,className:`text-sm font-medium truncate`,children:e}),t&&(0,W.jsx)(`span`,{dir:`auto`,className:`text-xs text-gray-500 dark:text-gray-400 truncate`,children:t})]}),Z.isPersona&&r&&(0,W.jsxs)(`div`,{className:`flex items-center gap-1 ms-auto`,children:[(0,W.jsx)(O,{className:`h-3 w-3 text-gray-500 dark:text-dark-600`}),r.embedding_model&&(0,W.jsx)(_,{className:`h-3 w-3 text-gray-400 dark:text-dark-500`})]})]})})(),(0,W.jsx)(w,{className:d(m?`h-3 w-3`:`h-4 w-4`,`shrink-0 text-ink-subtle transition-transform duration-150 motion-reduce:transition-none`,M&&`rotate-180`)})]}),M&&(0,le.createPortal)((0,W.jsxs)(`div`,{className:`fixed inset-0 z-[999999] flex items-center justify-center p-3 sm:p-6`,children:[(0,W.jsx)(`div`,{className:`absolute inset-0 bg-gray-950/55 backdrop-blur-md`,onClick:()=>Q()}),(0,W.jsxs)(`div`,{ref:L,role:`dialog`,"aria-modal":`true`,"aria-label":j(`modelSelector.selectModel`),className:d(`relative flex w-full max-w-xl flex-col overflow-hidden bg-white/[0.98] dark:bg-dark-25/[0.98]`,`h-[min(620px,88vh)] rounded-[1.5rem] border border-black/[0.08] dark:border-white/[0.09]`,`shadow-[0_30px_100px_rgba(0,0,0,0.28)] backdrop-blur-xl animate-scale-in`),onClick:e=>e.stopPropagation(),children:[(0,W.jsxs)(`div`,{className:`flex-shrink-0`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between px-4 pb-2 pt-4 sm:px-5 sm:pt-5`,children:[(0,W.jsx)(`h2`,{className:`text-lg font-medium tracking-[-0.025em] text-gray-950 dark:text-dark-950 rtl:tracking-normal`,children:j(`modelSelector.selectModel`)}),(0,W.jsx)(`button`,{type:`button`,onClick:()=>Q(),className:`flex h-9 w-9 items-center justify-center rounded-full text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-950 dark:text-dark-500 dark:hover:bg-dark-200 dark:hover:text-dark-950`,title:j(`common.close`),children:(0,W.jsx)(re,{className:`h-4 w-4`})})]}),(0,W.jsx)(`div`,{className:`px-4 pb-3 sm:px-5`,children:(0,W.jsxs)(`div`,{className:`relative`,children:[(0,W.jsx)(p,{className:`absolute start-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400`}),(0,W.jsx)(`input`,{ref:z,type:`text`,placeholder:j(H===`installed`?V?`modelSelector.searchInstalled`:`modelSelector.searchModels`:H===`ollama`?`modelSelector.searchOllama`:`modelSelector.searchHuggingFace`),value:P,onChange:e=>ue(e.target.value),onKeyDown:e=>{if(H!==`installed`)return;let t=L.current?.querySelector(`[data-testid="model-selector-option"]`);e.key===`ArrowDown`&&t?(e.preventDefault(),t.focus()):e.key===`Enter`&&P.trim()&&t&&(e.preventDefault(),t.click())},className:d(`w-full rounded-xl border border-black/[0.07] bg-gray-100/70 py-2.5 ps-10 pe-4 text-sm dark:border-white/[0.07] dark:bg-dark-200/70`,`focus:outline-none focus:ring-2 focus:ring-primary-500/20`,`text-gray-900 dark:text-dark-900 placeholder:text-gray-400 dark:placeholder:text-dark-500`)})]})}),V&&(0,W.jsxs)(`div`,{className:`mx-4 mb-3 flex rounded-xl bg-gray-100/70 p-1 dark:bg-dark-200/70 sm:mx-5`,children:[(0,W.jsxs)(`button`,{onClick:()=>{fe(`installed`)},className:d(`flex-1 rounded-lg px-2 py-2 text-xs font-medium transition-colors sm:px-4`,H===`installed`?`bg-white text-gray-950 shadow-sm dark:bg-dark-300 dark:text-dark-950`:`text-gray-500 hover:text-gray-800 dark:text-dark-500 dark:hover:text-dark-800`),"aria-pressed":H===`installed`,children:[(0,W.jsx)(T,{className:`h-4 w-4 inline me-1.5`}),j(`modelSelector.installed`)]}),(0,W.jsxs)(`button`,{onClick:()=>{fe(`ollama`)},className:d(`flex-1 rounded-lg px-2 py-2 text-xs font-medium transition-colors sm:px-4`,H===`ollama`?`bg-white text-gray-950 shadow-sm dark:bg-dark-300 dark:text-dark-950`:`text-gray-500 hover:text-gray-800 dark:text-dark-500 dark:hover:text-dark-800`),"aria-pressed":H===`ollama`,children:[(0,W.jsx)(g,{className:`h-4 w-4 inline me-1.5`}),`Ollama`]}),(0,W.jsxs)(`button`,{onClick:()=>{fe(`huggingface`)},className:d(`flex-1 rounded-lg px-2 py-2 text-xs font-medium transition-colors sm:px-4`,H===`huggingface`?`bg-white text-gray-950 shadow-sm dark:bg-dark-300 dark:text-dark-950`:`text-gray-500 hover:text-gray-800 dark:text-dark-500 dark:hover:text-dark-800`),"aria-pressed":H===`huggingface`,children:[(0,W.jsx)(ie,{className:`h-4 w-4 inline me-1.5`}),`HuggingFace`]})]}),H===`installed`&&Et&&(0,W.jsx)(Ne,{sources:At,active:Dt,onChange:me})]}),H===`installed`&&(0,W.jsx)(Me,{groups:kt,selectedModel:t,showImageGen:h&&Ot,getModelValue:X,getModelIcon:e=>gt(e,`md`),getModelLabel:xt,getModelTag:St,getModelSubLabel:Ct,onExitTop:()=>z.current?.focus(),onModelSelect:ft,onShowAll:e=>{me(e),z.current?.focus()},onOpenGallery:()=>{Q(!1),ye(`/gallery`)}},Dt),H===`ollama`&&(0,W.jsx)(Pe,{libraryCategories:qe,libraryCategory:U,canInstallModels:B,loadingLibrary:rt,filteredLibraryModels:ct,pullingModel:K,pullProgress:Ge,setLibraryCategory:Te,isModelInstalled:ht,onModelSelect:ft,onPullModel:pt,onCancelPull:mt,onRefreshLibrary:()=>{it()}}),H===`huggingface`&&(0,W.jsx)(ke,{hfTask:Ae,hfSort:Ie,canInstallModels:B,loadingHf:ot,hfModels:at,expandedHfModel:ze,hfGgufFiles:Ve,loadingGguf:Ue,pullingModel:K,pullProgress:Ge,setHfTask:je,setHfSort:Le,onToggleHfModel:ut,onPullHfGguf:dt,onCancelPull:mt,onRefreshHfModels:()=>{st()}})]})]}),document.body),(0,W.jsx)(`select`,{"data-testid":ae,"aria-label":k,"aria-hidden":`true`,dir:`ltr`,value:t,onChange:n,className:`hidden`,tabIndex:-1,children:e.map(e=>(0,W.jsx)(`option`,{value:X(e),children:$(e)},`${e.isLegacySelection?`legacy`:e.isPersona?`persona`:e.isPlugin?`plugin`:`ollama`}:${e.pluginId||``}:${X(e)}`))})]})},Le=({value:e,inheritedValue:t,onChange:n})=>{let{t:r}=u(),[i,a]=(0,F.useState)(!1),o=(0,F.useRef)(null),s=e??t,c=M(s),l=N(s),f=N(e),p=t==null?void 0:N(t);return(0,F.useEffect)(()=>{if(!i)return;let e=e=>{o.current?.contains(e.target)||a(!1)},t=e=>{e.key===`Escape`&&a(!1)};return window.addEventListener(`mousedown`,e),window.addEventListener(`keydown`,t),()=>{window.removeEventListener(`mousedown`,e),window.removeEventListener(`keydown`,t)}},[i]),(0,W.jsxs)(`div`,{ref:o,className:`relative flex-shrink-0`,children:[(0,W.jsxs)(ae,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>a(e=>!e),className:d(`h-9 rounded-full p-0 flex items-center justify-center gap-1 touch-manipulation transition-colors duration-150`,c?`w-auto px-2.5`:`w-9`,`text-ink-muted hover:bg-interactive-hover hover:text-ink`,c&&`bg-primary-50 text-primary-600 dark:bg-primary-900/25 dark:text-primary-400`),title:c?r(`chat.input.thinkingOn`,{level:r(`settings.generation.thinkingLevels.${l}`)}):r(`chat.input.thinkingOff`),"aria-haspopup":`menu`,"aria-expanded":i,"aria-pressed":c,children:[(0,W.jsx)(O,{className:`h-4 w-4`}),c&&(0,W.jsx)(`span`,{className:`text-[11px] font-medium`,children:r(`settings.generation.thinkingLevels.${l}`)})]}),i&&(0,W.jsxs)(`div`,{role:`menu`,className:`absolute bottom-full end-0 z-30 mb-2 w-48 rounded-2xl border border-black/[0.08] bg-surface/95 p-1.5 shadow-[0_16px_48px_rgba(15,23,42,0.16)] backdrop-blur-xl animate-scale-in dark:border-white/[0.09] dark:bg-dark-100/95`,children:[(0,W.jsx)(`p`,{className:`mb-1 px-2 pt-1 text-[11px] font-medium text-gray-500 dark:text-dark-600`,children:r(`chat.controls.thinking`)}),P.map(e=>{let t=e===f;return(0,W.jsxs)(`button`,{type:`button`,role:`menuitemradio`,"aria-checked":t,onClick:()=>{n(j(e)),a(!1)},className:d(`flex w-full items-center justify-between gap-2 rounded-xl px-2.5 py-2 text-start text-[13px] text-gray-700 hover:bg-gray-100 dark:text-dark-800 dark:hover:bg-dark-200`,t&&`text-primary-600 dark:text-primary-400`),children:[(0,W.jsx)(`span`,{className:`truncate`,children:e==="default"&&p!==void 0?r(`settings.generation.thinkingLevels.defaultWith`,{level:r(`settings.generation.thinkingLevels.${p}`)}):r(`settings.generation.thinkingLevels.${e}`)}),t&&(0,W.jsx)(y,{className:`h-3.5 w-3.5 shrink-0`})]},e)})]})]})},G=o(`hooks:dictation`),Re=()=>{if(typeof window>`u`)return;let e=window;return e.SpeechRecognition||e.webkitSpeechRecognition},ze=[{mimeType:`audio/webm;codecs=opus`,format:`webm`}],Be=300,Ve=.25,He=e=>`${encodeURIComponent(e.plugin)}:${encodeURIComponent(e.model)}`;function Ue(e){if(typeof MediaRecorder>`u`)return;let t=new Set((e.config?.formats||[]).map(e=>e.toLowerCase()));return ze.find(e=>(t.size===0||t.has(e.format))&&(typeof MediaRecorder.isTypeSupported!=`function`||MediaRecorder.isTypeSupported(e.mimeType)))?.mimeType}function We({onStart:e,onText:t,ownerKey:n}){let{t:r,i18n:i}=u(),[a,o]=(0,F.useState)(`idle`),[s,c]=(0,F.useState)([]),l=(0,F.useRef)(null),d=(0,F.useRef)(null),f=(0,F.useRef)(null),p=(0,F.useRef)(null),m=(0,F.useRef)(null),h=(0,F.useRef)(0),g=(0,F.useRef)(`idle`),_=(0,F.useRef)(void 0),v=(0,F.useRef)(e),y=(0,F.useRef)(t);(0,F.useEffect)(()=>{v.current=e,y.current=t},[e,t]),(0,F.useEffect)(()=>{let e=!1;return k.getModels().then(t=>{!e&&t.success&&t.data&&c(t.data)}).catch(()=>{e||c([])}),()=>{e=!0}},[]);let b=(0,F.useMemo)(()=>typeof window<`u`&&window.isSecureContext&&typeof navigator<`u`&&!!navigator.mediaDevices&&!!Re(),[]),x=typeof window<`u`&&window.isSecureContext&&typeof navigator<`u`&&!!navigator.mediaDevices?.getUserMedia,C=(0,F.useMemo)(()=>[...b?[{key:`browser`,kind:`browser`}]:[],...x?s.filter(e=>!!Ue(e)).map(e=>({key:He(e),kind:`provider`,model:e})):[]],[b,x,s]),[ee,te]=(0,F.useState)(``),w=(0,F.useMemo)(()=>C.find(e=>e.key===ee)??C[0],[ee,C]),T=w?.kind===`provider`?w.model:void 0,ne=C.length>0,E=(0,F.useCallback)(()=>{m.current!==null&&(window.clearTimeout(m.current),m.current=null)},[]),D=(0,F.useCallback)(e=>{g.current=e,o(e)},[]),O=(0,F.useCallback)(()=>{h.current+=1,E(),l.current?.stop(),l.current=null,p.current?.abort(),p.current=null;let e=d.current;d.current=null,e&&(e.ondataavailable=null,e.onerror=null,e.onstop=null,e.state===`recording`&&e.stop()),f.current?.getTracks().forEach(e=>e.stop()),f.current=null,D(`idle`)},[E,D]);return(0,F.useEffect)(()=>(_.current=n,O),[O,n]),{supported:ne,phase:a,toggle:(0,F.useCallback)(async()=>{let e=g.current;if(e===`starting`||e===`transcribing`){O();return}if(e===`recording`){d.current?.state===`recording`?(D(`transcribing`),d.current.stop()):O();return}if(T){let e=h.current+1;h.current=e;let t=_.current;v.current(),D(`starting`);try{let n=await navigator.mediaDevices.getUserMedia({audio:!0});if(h.current!==e||_.current!==t){n.getTracks().forEach(e=>e.stop());return}f.current=n;let a=Ue(T),o=a?new MediaRecorder(n,{mimeType:a}):new MediaRecorder(n),s=[];o.ondataavailable=e=>{e.data.size>0&&s.push(e.data)},o.onerror=()=>{n.getTracks().forEach(e=>e.stop()),E(),h.current===e&&(d.current=null,f.current=null,D(`idle`),S.error(r(`voiceMode.transcriptionFailed`)))},o.onstop=()=>{if(n.getTracks().forEach(e=>e.stop()),E(),h.current!==e||_.current!==t)return;if(d.current=null,f.current=null,s.length===0){D(`idle`);return}let a=new Blob(s,{type:o.mimeType||s[0].type||`audio/webm`}),c=new AbortController;p.current=c,D(`transcribing`),k.transcribe(a,T,{language:i.language,signal:c.signal,fallbackMessage:r(`voiceMode.transcriptionFailed`)}).then(n=>{h.current!==e||_.current!==t||c.signal.aborted||y.current(n.text.trim())}).catch(e=>{c.signal.aborted||(G.error(`Provider transcription failed:`,e),S.error(e instanceof Error?e.message:r(`voiceMode.transcriptionFailed`)))}).finally(()=>{p.current===c&&h.current===e&&(p.current=null,D(`idle`))})},d.current=o,o.start(250);let c=T.config?.max_duration_seconds,l=typeof c==`number`&&c>0?Math.min(c,Be):Be;m.current=window.setTimeout(()=>{h.current===e&&o.state===`recording`&&o.stop()},Math.max(.1,l-Ve)*1e3),D(`recording`);return}catch(t){if(h.current!==e)return;G.error(`Failed to start provider dictation:`,t),E(),f.current?.getTracks().forEach(e=>e.stop()),f.current=null,d.current=null,D(`idle`),S.error(r(`voiceMode.transcriptionFailed`));return}}let t=Re();if(!t)return;let n=h.current+1;h.current=n;let a=_.current,o=new t;o.lang=i.language,o.continuous=!0,o.interimResults=!0,v.current(),o.onresult=e=>{if(h.current!==n||_.current!==a||l.current!==o)return;let t=``;for(let n=0;n<e.results.length;n++)t+=e.results[n][0]?.transcript??``;y.current(t.trim())},o.onend=()=>{h.current===n&&(l.current=null,D(`idle`))},o.onerror=()=>{h.current===n&&(l.current=null,D(`idle`))},l.current=o,D(`recording`);try{o.start()}catch(e){G.error(`Failed to start dictation:`,e),l.current=null,D(`idle`)}},[O,E,i.language,T,D,r]),cancel:O,sources:C,activeSourceKey:w?.key??``,setSourceKey:te,providerModel:T}}export{Le as n,Ie as r,We as t};