libre-webui 0.26.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/backend/dist/index.d.ts.map +1 -1
- package/backend/dist/index.js +7 -0
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/persistence/postgresMfaPushRecoveryMigration.d.ts +9 -0
- package/backend/dist/persistence/postgresMfaPushRecoveryMigration.d.ts.map +1 -0
- package/backend/dist/persistence/postgresMfaPushRecoveryMigration.js +107 -0
- package/backend/dist/persistence/postgresMfaPushRecoveryMigration.js.map +1 -0
- package/backend/dist/persistence/postgresMigrationRegistry.d.ts.map +1 -1
- package/backend/dist/persistence/postgresMigrationRegistry.js +2 -0
- package/backend/dist/persistence/postgresMigrationRegistry.js.map +1 -1
- package/backend/dist/persistence/postgresResourceRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/postgresResourceRepositories.js +162 -0
- package/backend/dist/persistence/postgresResourceRepositories.js.map +1 -1
- package/backend/dist/persistence/postgresSecurityRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/postgresSecurityRepositories.js +150 -0
- package/backend/dist/persistence/postgresSecurityRepositories.js.map +1 -1
- package/backend/dist/persistence/resourceTypes.d.ts +59 -0
- package/backend/dist/persistence/resourceTypes.d.ts.map +1 -1
- package/backend/dist/persistence/resourceTypes.js.map +1 -1
- package/backend/dist/persistence/securityTypes.d.ts +59 -0
- package/backend/dist/persistence/securityTypes.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteMigrations.d.ts +1 -0
- package/backend/dist/persistence/sqliteMigrations.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteMigrations.js +194 -0
- package/backend/dist/persistence/sqliteMigrations.js.map +1 -1
- package/backend/dist/persistence/sqliteResourceRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteResourceRepositories.js +134 -0
- package/backend/dist/persistence/sqliteResourceRepositories.js.map +1 -1
- package/backend/dist/persistence/sqliteSecurityRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteSecurityRepositories.js +134 -0
- package/backend/dist/persistence/sqliteSecurityRepositories.js.map +1 -1
- package/backend/dist/persistence/sqliteToPostgresMigration.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteToPostgresMigration.js +45 -0
- package/backend/dist/persistence/sqliteToPostgresMigration.js.map +1 -1
- package/backend/dist/platform/jobs/domainJobContracts.d.ts +2 -0
- package/backend/dist/platform/jobs/domainJobContracts.d.ts.map +1 -1
- package/backend/dist/platform/jobs/domainJobContracts.js +2 -0
- package/backend/dist/platform/jobs/domainJobContracts.js.map +1 -1
- package/backend/dist/platform/jobs/domainJobHandlers.d.ts.map +1 -1
- package/backend/dist/platform/jobs/domainJobHandlers.js +65 -2
- package/backend/dist/platform/jobs/domainJobHandlers.js.map +1 -1
- package/backend/dist/routes/auth.d.ts.map +1 -1
- package/backend/dist/routes/auth.js +419 -1
- package/backend/dist/routes/auth.js.map +1 -1
- package/backend/dist/routes/documents.d.ts.map +1 -1
- package/backend/dist/routes/documents.js +4 -0
- package/backend/dist/routes/documents.js.map +1 -1
- package/backend/dist/routes/push.d.ts +3 -0
- package/backend/dist/routes/push.d.ts.map +1 -0
- package/backend/dist/routes/push.js +105 -0
- package/backend/dist/routes/push.js.map +1 -0
- package/backend/dist/routes/recovery.d.ts +3 -0
- package/backend/dist/routes/recovery.d.ts.map +1 -0
- package/backend/dist/routes/recovery.js +83 -0
- package/backend/dist/routes/recovery.js.map +1 -0
- package/backend/dist/routes/users.d.ts.map +1 -1
- package/backend/dist/routes/users.js +35 -0
- package/backend/dist/routes/users.js.map +1 -1
- package/backend/dist/services/authService.d.ts +6 -0
- package/backend/dist/services/authService.d.ts.map +1 -1
- package/backend/dist/services/authService.js +9 -0
- package/backend/dist/services/authService.js.map +1 -1
- package/backend/dist/services/automationSchedulerService.d.ts.map +1 -1
- package/backend/dist/services/automationSchedulerService.js +7 -0
- package/backend/dist/services/automationSchedulerService.js.map +1 -1
- package/backend/dist/services/dataArchiveService.d.ts.map +1 -1
- package/backend/dist/services/dataArchiveService.js +3 -0
- package/backend/dist/services/dataArchiveService.js.map +1 -1
- package/backend/dist/services/documentMediaExtractionService.d.ts +40 -0
- package/backend/dist/services/documentMediaExtractionService.d.ts.map +1 -0
- package/backend/dist/services/documentMediaExtractionService.js +157 -0
- package/backend/dist/services/documentMediaExtractionService.js.map +1 -0
- package/backend/dist/services/documentService.d.ts +6 -0
- package/backend/dist/services/documentService.d.ts.map +1 -1
- package/backend/dist/services/documentService.js +58 -4
- package/backend/dist/services/documentService.js.map +1 -1
- package/backend/dist/services/encryptionService.d.ts +6 -0
- package/backend/dist/services/encryptionService.d.ts.map +1 -1
- package/backend/dist/services/encryptionService.js +12 -0
- package/backend/dist/services/encryptionService.js.map +1 -1
- package/backend/dist/services/mfaService.d.ts +64 -0
- package/backend/dist/services/mfaService.d.ts.map +1 -0
- package/backend/dist/services/mfaService.js +263 -0
- package/backend/dist/services/mfaService.js.map +1 -0
- package/backend/dist/services/notificationService.d.ts +5 -0
- package/backend/dist/services/notificationService.d.ts.map +1 -1
- package/backend/dist/services/notificationService.js +33 -1
- package/backend/dist/services/notificationService.js.map +1 -1
- package/backend/dist/services/preferencesService.d.ts +1 -1
- package/backend/dist/services/preferencesService.d.ts.map +1 -1
- package/backend/dist/services/preferencesService.js +1 -0
- package/backend/dist/services/preferencesService.js.map +1 -1
- package/backend/dist/services/recoveryDrillService.d.ts +57 -0
- package/backend/dist/services/recoveryDrillService.d.ts.map +1 -0
- package/backend/dist/services/recoveryDrillService.js +363 -0
- package/backend/dist/services/recoveryDrillService.js.map +1 -0
- package/backend/dist/services/webPushService.d.ts +71 -0
- package/backend/dist/services/webPushService.d.ts.map +1 -0
- package/backend/dist/services/webPushService.js +328 -0
- package/backend/dist/services/webPushService.js.map +1 -0
- package/backend/dist/services/webauthnService.d.ts +58 -0
- package/backend/dist/services/webauthnService.d.ts.map +1 -0
- package/backend/dist/services/webauthnService.js +300 -0
- package/backend/dist/services/webauthnService.js.map +1 -0
- package/backend/dist/types/index.d.ts +3 -2
- package/backend/dist/types/index.d.ts.map +1 -1
- package/backend/dist/types/index.js.map +1 -1
- package/backend/dist/utils/documentExtraction.d.ts +31 -3
- package/backend/dist/utils/documentExtraction.d.ts.map +1 -1
- package/backend/dist/utils/documentExtraction.js +106 -0
- package/backend/dist/utils/documentExtraction.js.map +1 -1
- package/backend/dist/utils/toolEgress.d.ts +2 -1
- package/backend/dist/utils/toolEgress.d.ts.map +1 -1
- package/backend/dist/utils/toolEgress.js +14 -2
- package/backend/dist/utils/toolEgress.js.map +1 -1
- package/backend/dist/utils/totp.d.ts +19 -0
- package/backend/dist/utils/totp.d.ts.map +1 -0
- package/backend/dist/utils/totp.js +117 -0
- package/backend/dist/utils/totp.js.map +1 -0
- package/backend/dist/utils/webauthn.d.ts +43 -0
- package/backend/dist/utils/webauthn.d.ts.map +1 -0
- package/backend/dist/utils/webauthn.js +294 -0
- package/backend/dist/utils/webauthn.js.map +1 -0
- package/backend/package.json +1 -1
- package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
- package/frontend/dist/assets/index-DBAf_VaS.js +47 -0
- package/frontend/dist/assets/index-kn_Axjts.css +1 -0
- package/frontend/dist/fonts/jetbrains-mono-latin-400-normal.woff2 +0 -0
- package/frontend/dist/fonts/jetbrains-mono-latin-700-normal.woff2 +0 -0
- package/frontend/dist/fonts/jetbrains-mono.css +24 -0
- package/frontend/dist/index.html +20 -13
- package/frontend/dist/js/ArtifactContainer-C9zNtCay.js +1 -0
- package/frontend/dist/js/{ArtifactDemoPage-D0JEIAbZ.js → ArtifactDemoPage-C-EBFBCt.js} +1 -1
- package/frontend/dist/js/ArtifactSandboxFrame-CTA1j_d1.js +111 -0
- package/frontend/dist/js/ArtifactSlideOutPanel-BOENbOiv.js +1 -0
- package/frontend/dist/js/AutomationsPage-C58MQ4te.js +1 -0
- package/frontend/dist/js/CalendarPage-BcdAZ292.js +1 -0
- package/frontend/dist/js/ChannelsPage-DPr9Yajs.js +1 -0
- package/frontend/dist/js/ChatPage-DsbB748s.js +14 -0
- package/frontend/dist/js/{EvaluationsPage-Bm8FRoeX.js → EvaluationsPage-FWIJu2fI.js} +1 -1
- package/frontend/dist/js/FirstTimeSetup-Cy-w6xko.js +1 -0
- package/frontend/dist/js/GalleryPage-DDAtxM-x.js +1 -0
- package/frontend/dist/js/{HomePage-BqNy-FWX.js → HomePage-DLKwmE7n.js} +1 -1
- package/frontend/dist/js/LibreClawPage-vKOj-9w9.js +1 -0
- package/frontend/dist/js/{ModelManagerModals-DX9eT5r2.js → ModelManagerModals-BY5TK38_.js} +1 -1
- package/frontend/dist/js/ModelSelector-CoCS6MZ9.js +1 -0
- package/frontend/dist/js/NotesPage-BElIpXgA.js +3 -0
- package/frontend/dist/js/OptimizedSyntaxHighlighter-xgyE3dRA.js +1 -0
- package/frontend/dist/js/PersonasPage-P40jVbfU.js +13 -0
- package/frontend/dist/js/{PluginUsagePage-Ctoka6JZ.js → PluginUsagePage-CKUEPCJN.js} +1 -1
- package/frontend/dist/js/RichMessageContent-Bm2WaEGi.js +3 -0
- package/frontend/dist/js/SettingsModal-DxSGzx9A.js +19 -0
- package/frontend/dist/js/SystemPage-BT07dTMT.js +1 -0
- package/frontend/dist/js/UserManagementPage-B9Vz5cm3.js +1 -0
- package/frontend/dist/js/WorkPage-qoN_e_jK.js +6 -0
- package/frontend/dist/js/api-D7Ff5M2Q.js +14 -0
- package/frontend/dist/js/appStore-DmV5wqDz.js +2 -0
- package/frontend/dist/js/ar-YHHTVP8f.js +2 -0
- package/frontend/dist/js/artifactHtml-DDmfpcB0.js +41 -0
- package/frontend/dist/js/{authStore-DbqqrfZv.js → authStore-BYW8-kP6.js} +3 -3
- package/frontend/dist/js/bn-C8VTxBVl.js +2 -0
- package/frontend/dist/js/chatStore-D-NTlArO.js +3 -0
- package/frontend/dist/js/{config-8KdgjtEx.js → config-BqZ5304Q.js} +1 -1
- package/frontend/dist/js/cs-CCngB5fC.js +2 -0
- package/frontend/dist/js/da-CM2PP2ma.js +2 -0
- package/frontend/dist/js/de-BqVkD-dw.js +2 -0
- package/frontend/dist/js/es-BtWsWBjZ.js +2 -0
- package/frontend/dist/js/{estree-BU5-LV_1.js → estree-DPkpBuOU.js} +1 -1
- package/frontend/dist/js/{evaluationsApi-CwZJsgeG.js → evaluationsApi-Dnf2dTd-.js} +1 -1
- package/frontend/dist/js/fr-C68w9abT.js +2 -0
- package/frontend/dist/js/hi-DtBlcyXZ.js +2 -0
- package/frontend/dist/js/{html-DeoAy2bo.js → html-BpGUXG8E.js} +1 -1
- package/frontend/dist/js/id-BWzIu8tn.js +2 -0
- package/frontend/dist/js/is-yeFwu4dJ.js +2 -0
- package/frontend/dist/js/it-AxEMG8Jg.js +2 -0
- package/frontend/dist/js/ja-B-VyokB8.js +2 -0
- package/frontend/dist/js/ko-CvwzYr9k.js +2 -0
- package/frontend/dist/js/{markdown-DOLsYkBY.js → markdown-DCBRWJSK.js} +1 -1
- package/frontend/dist/js/{messageCodeStyles-DhVgizF-.js → messageCodeStyles-BQwf7sSz.js} +2 -2
- package/frontend/dist/js/ms-BhEwb4b7.js +2 -0
- package/frontend/dist/js/nl-Dq-QRx1L.js +2 -0
- package/frontend/dist/js/pl-BNEy8mQm.js +2 -0
- package/frontend/dist/js/pt-_3Jl3FdY.js +2 -0
- package/frontend/dist/js/ru-IhQiJ8ta.js +2 -0
- package/frontend/dist/js/{standalone-BO5pzI8_.js → standalone-BFrK0R2A.js} +1 -1
- package/frontend/dist/js/sv-DWunXUNz.js +2 -0
- package/frontend/dist/js/{syntax-highlight-DcR9Vhb7.js → syntax-highlight-P2zo9o06.js} +1 -1
- package/frontend/dist/js/th-DVnW2yyh.js +2 -0
- package/frontend/dist/js/tr-Do8CFmhR.js +2 -0
- package/frontend/dist/js/{typescript-6GJ8APmn.js → typescript-DYVyvmm_.js} +1 -1
- package/frontend/dist/js/ui-db9meqAB.js +2 -0
- package/frontend/dist/js/ui-vendor-C0DZ8-Cm.js +177 -0
- package/frontend/dist/js/uk-BNPKIZga.js +2 -0
- package/frontend/dist/js/vi-CZMFo9je.js +2 -0
- package/frontend/dist/js/{workApi-BruWTlHM.js → workApi-CcprMH_1.js} +2 -2
- package/frontend/dist/js/zh-Pg0881v0.js +2 -0
- package/frontend/dist/manifest.webmanifest +32 -0
- package/frontend/dist/sw.js +125 -0
- package/package.json +2 -2
- package/frontend/dist/assets/index-BPsH9FII.js +0 -80
- package/frontend/dist/assets/index-BtXF0Oxa.css +0 -1
- package/frontend/dist/js/ArtifactContainer-CIoFoMv8.js +0 -1
- package/frontend/dist/js/ArtifactSandboxFrame-REazyIrx.js +0 -151
- package/frontend/dist/js/ArtifactSlideOutPanel-A-i94ghF.js +0 -1
- package/frontend/dist/js/AutomationsPage-Dow_lbIf.js +0 -1
- package/frontend/dist/js/CalendarPage-DLjasZOd.js +0 -1
- package/frontend/dist/js/ChannelsPage-C8hvTD7J.js +0 -1
- package/frontend/dist/js/ChatPage-BAgBHUES.js +0 -16
- package/frontend/dist/js/FirstTimeSetup-BxJapNul.js +0 -1
- package/frontend/dist/js/GalleryPage-DHz9DkK7.js +0 -1
- package/frontend/dist/js/LibreClawPage-BDzDILjY.js +0 -1
- package/frontend/dist/js/ModelSelector-ol8mK2ja.js +0 -1
- package/frontend/dist/js/NotesPage-DzHEx2O4.js +0 -3
- package/frontend/dist/js/OptimizedSyntaxHighlighter-CZNPwN0i.js +0 -1
- package/frontend/dist/js/PersonasPage-M_WKH2a9.js +0 -13
- package/frontend/dist/js/RichMessageContent-BqgafH4p.js +0 -3
- package/frontend/dist/js/SettingsModal-R9EDadAV.js +0 -19
- package/frontend/dist/js/SystemPage-aOkrSuY7.js +0 -1
- package/frontend/dist/js/UserManagementPage-BOuaX3ay.js +0 -1
- package/frontend/dist/js/WorkPage-DxZISerQ.js +0 -6
- package/frontend/dist/js/api-6bSMtSNh.js +0 -14
- package/frontend/dist/js/appStore-CdObhQBb.js +0 -2
- package/frontend/dist/js/ar-DT_VLBO3.js +0 -2
- package/frontend/dist/js/bn-BrvEqhGA.js +0 -2
- package/frontend/dist/js/chatStore-DbZPJNsu.js +0 -3
- package/frontend/dist/js/cs-BthnM_YI.js +0 -2
- package/frontend/dist/js/da-DCth-6_j.js +0 -2
- package/frontend/dist/js/de-BBWt0gJ_.js +0 -2
- package/frontend/dist/js/es-DuslOPqM.js +0 -2
- package/frontend/dist/js/fr-DZAeg46S.js +0 -2
- package/frontend/dist/js/hi-ijDSiY77.js +0 -2
- package/frontend/dist/js/id-BS6qS0oq.js +0 -2
- package/frontend/dist/js/is-CO2PMDte.js +0 -2
- package/frontend/dist/js/it-ChhxT4hs.js +0 -2
- package/frontend/dist/js/ja-cyeqUeJN.js +0 -2
- package/frontend/dist/js/ko-CfqHTLXj.js +0 -2
- package/frontend/dist/js/ms-DZ5pACe1.js +0 -2
- package/frontend/dist/js/nl-BsRsnOVp.js +0 -2
- package/frontend/dist/js/pl-DXSTAW4M.js +0 -2
- package/frontend/dist/js/pt-DmDx0JxB.js +0 -2
- package/frontend/dist/js/ru-d2g8EWfY.js +0 -2
- package/frontend/dist/js/sv-CIhYUTVQ.js +0 -2
- package/frontend/dist/js/th-B3wSxanB.js +0 -2
- package/frontend/dist/js/tr-R4UGgPOY.js +0 -2
- package/frontend/dist/js/ui-CV0LYmkM.js +0 -2
- package/frontend/dist/js/ui-vendor-CWjIBW-z.js +0 -177
- package/frontend/dist/js/uk-BzUF4Vkt.js +0 -2
- package/frontend/dist/js/vi-CKc6Fg4h.js +0 -2
- package/frontend/dist/js/zh-CXL-kDe8.js +0 -2
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import{n as e}from"./rolldown-runtime-hePW80VL.js";import{i as t}from"./logger-DSXjF4ye.js";import{t as n}from"./config-BqZ5304Q.js";import{a as r,i,r as a}from"./workApi-CcprMH_1.js";var o={getModels:()=>t()?i([]):a.get(`/agent-clis/models`).then(e=>e.data)},s=`0.27.0`,c=[`chat`,`models`,`documents`,`notes`,`personas`,`media`,`work`,`admin`],l=e=>!!e&&e.mfaRequired===!0,u={login:e=>t()?i({user:{id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()},token:`demo-token`,systemInfo:{requiresAuth:!0,hasUsers:!0,userCount:1,signupEnabled:!0,version:s}}):a.post(`/auth/login`,e).then(e=>e.data),signup:e=>t()?i({user:{id:`demo-user-new`,username:e.username,email:e.email||``,role:`user`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()},token:`demo-token-new`,systemInfo:{requiresAuth:!0,hasUsers:!0,userCount:1,signupEnabled:!0,version:s,turnstile:{enabled:!1}}}):a.post(`/auth/signup`,e).then(e=>e.data),logout:()=>t()?i(void 0):a.post(`/auth/logout`).then(e=>e.data),getSystemInfo:()=>(r.debug(`getSystemInfo called, demo mode:`,t()),t()?i({requiresAuth:!0,hasUsers:!0,userCount:1,signupEnabled:!0,version:s,turnstile:{enabled:!1}}):(r.debug(`Making API call to:`,n+`/auth/system-info`),r.debug(`Full URL from:`,window.location.origin,`-> API:`,n+`/auth/system-info`),a.get(`/auth/system-info`).then(e=>(r.debug(`getSystemInfo response:`,e.data),e.data)).catch(e=>{throw r.debug(`getSystemInfo error:`,e),e.response&&(r.debug(`Error response data:`,e.response.data),r.debug(`Error status:`,e.response.status),r.debug(`Error headers:`,e.response.headers)),e.request&&r.debug(`Network error - no response received:`,e.request),r.debug(`Error config:`,e.config),e}))),verifyToken:()=>t()?i({id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):a.get(`/auth/verify`).then(e=>e.data),getEncryptionKey:()=>t()?i({encryptionKey:`demo-encryption-key-not-real`}):a.get(`/auth/encryption-key`).then(e=>e.data),getSessions:()=>t()?i([{id:`demo-session`,kind:`password`,userAgent:navigator.userAgent,createdAt:new Date().toISOString(),lastSeenAt:new Date().toISOString(),expiresAt:null,revokedAt:null,current:!0}]):a.get(`/auth/sessions`).then(e=>e.data),revokeSession:e=>t()?i(void 0):a.delete(`/auth/sessions/${e}`).then(e=>e.data),revokeOtherSessions:()=>t()?i({revokedCount:0}):a.post(`/auth/sessions/revoke-others`).then(e=>e.data),listApiTokens:()=>t()?i([]):a.get(`/auth/tokens`).then(e=>e.data),createApiToken:e=>t()?i({token:`lwui_demo_not_a_real_token`,record:{id:`demo-token-`+Date.now(),name:e.name,tokenPrefix:`lwui_demo`,scopes:e.scopes,createdAt:new Date().toISOString(),expiresAt:null,lastUsedAt:null,revokedAt:null}}):a.post(`/auth/tokens`,e).then(e=>e.data),revokeApiToken:e=>t()?i(void 0):a.delete(`/auth/tokens/${e}`).then(e=>e.data),mfaVerify:e=>a.post(`/auth/mfa/verify`,e).then(e=>e.data),mfaEnrollChallenge:e=>a.post(`/auth/mfa/enroll-challenge`,e).then(e=>e.data),mfaActivateChallenge:e=>a.post(`/auth/mfa/activate-challenge`,e).then(e=>e.data),getMfaStatus:()=>t()?i({totpEnabled:!1,totpPending:!1,recoveryCodesRemaining:0,required:!1,requiredModeLocked:!1,passkeys:[]}):a.get(`/auth/mfa`).then(e=>e.data),mfaEnroll:()=>a.post(`/auth/mfa/enroll`).then(e=>e.data),mfaActivate:e=>a.post(`/auth/mfa/activate`,e).then(e=>e.data),mfaRegenerateRecoveryCodes:e=>a.post(`/auth/mfa/recovery-codes`,e).then(e=>e.data),mfaDisable:e=>a.post(`/auth/mfa/disable`,e).then(e=>e.data),getMfaPolicy:()=>t()?i({mode:`optional`,locked:!1}):a.get(`/auth/mfa/policy`).then(e=>e.data),setMfaPolicy:e=>a.put(`/auth/mfa/policy`,{mode:e}).then(e=>e.data),passkeyRegisterOptions:()=>a.post(`/auth/passkeys/register-options`).then(e=>e.data),passkeyRegister:e=>a.post(`/auth/passkeys/register`,e).then(e=>e.data),listPasskeys:()=>t()?i([]):a.get(`/auth/passkeys`).then(e=>e.data),deletePasskey:e=>a.delete(`/auth/passkeys/${e}`).then(e=>e.data),passkeyLoginOptions:()=>a.post(`/auth/passkeys/login-options`).then(e=>e.data),passkeyLogin:e=>a.post(`/auth/passkeys/login`,e).then(e=>e.data)},d={getUsers:()=>t()?i([{id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}]):a.get(`/users`).then(e=>e.data),createUser:e=>t()?i({id:`new-user-`+Date.now(),username:e.username,email:e.email,role:e.role,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):a.post(`/users`,e).then(e=>e.data),updateUser:(e,n)=>t()?i({id:e,username:n.username||`demo`,email:n.email||`demo@example.com`,role:n.role||`user`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):a.patch(`/users/${e}`,n).then(e=>e.data),deleteUser:e=>t()?i(void 0):a.delete(`/users/${e}`).then(e=>e.data),getPendingApprovals:()=>t()?i({count:0,latestCreatedAt:null}):a.get(`/users/pending-approvals`).then(e=>e.data),approveUser:e=>t()?i({id:e,username:`demo-user`,email:`demo@example.com`,role:`user`,status:`active`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):a.patch(`/users/${e}/approve`).then(e=>e.data),resetUserMfa:e=>a.post(`/users/${e}/mfa/reset`).then(e=>e.data),updateMyAvatar:e=>t()?i({id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,status:`active`,avatar:e,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):a.patch(`/users/me/avatar`,{avatar:e}).then(e=>e.data)},f={getGroups:()=>t()?i([]):a.get(`/groups`).then(e=>e.data),createGroup:e=>t()?i({id:`demo-group-`+Date.now(),name:e.name,description:e.description??null,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),members:[]}):a.post(`/groups`,e).then(e=>e.data),updateGroup:(e,n)=>t()?i({id:e,name:n.name??`demo-group`,description:n.description??null,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),members:[]}):a.patch(`/groups/${e}`,n).then(e=>e.data),deleteGroup:e=>t()?i(void 0):a.delete(`/groups/${e}`).then(e=>e.data),addGroupMember:(e,n)=>t()?i({id:e,name:`demo-group`,description:null,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),members:[]}):a.post(`/groups/${e}/members`,{userId:n}).then(e=>e.data),removeGroupMember:(e,n)=>t()?i(void 0):a.delete(`/groups/${e}/members/${n}`).then(e=>e.data),getEffectiveAccess:e=>t()?i({userId:e,username:`demo`,role:`admin`,status:`active`,groups:[],features:{work:!0,"model-download":!0,"web-search":!0,agents:!0},grants:[]}):a.get(`/groups/effective/${e}`).then(e=>e.data),getAuditEvents:(e={})=>{if(t())return i([]);let n=new URLSearchParams;e.action&&n.set(`action`,e.action),e.actor&&n.set(`actor`,e.actor),e.result&&n.set(`result`,e.result),e.limit&&n.set(`limit`,String(e.limit));let r=n.toString()?`?${n.toString()}`:``;return a.get(`/audit${r}`).then(e=>e.data)}},p=[{name:`llama3.2:3b`,size:2048e6,digest:`demo-digest-1`,modified_at:new Date().toISOString(),details:{format:`gguf`,family:`llama`,families:[`llama`],parameter_size:`3B`,quantization_level:`Q4_0`}},{name:`qwen2.5:7b`,size:4096e6,digest:`demo-digest-2`,modified_at:new Date().toISOString(),details:{format:`gguf`,family:`qwen`,families:[`qwen`],parameter_size:`7B`,quantization_level:`Q4_0`}}],m=()=>[{id:`demo-session-1`,title:`Demo Chat Session`,model:p[0].name,providerType:`ollama`,providerId:null,messages:[{id:`demo-msg-1`,role:`user`,content:`Hello! Can you tell me about this demo?`,timestamp:Date.now()},{id:`demo-msg-2`,role:`assistant`,content:`This is a demo of Libre WebUI! In a real deployment, I would be powered by Ollama running locally on your machine. This demo shows the beautiful interface and features without the backend connection.`,timestamp:Date.now()}],createdAt:Date.now(),updatedAt:Date.now()}],h=m(),g={theme:{mode:`dark`,adaptToAccent:!1,accent:`blue`,customAccent:`#2563eb`},defaultModel:`llama3.2:3b`,defaultProviderType:`ollama`,defaultProviderId:null,visionModel:``,visionProviderType:null,visionProviderId:null,systemMessage:`You are a helpful assistant.`,generationOptions:{temperature:.7,top_p:.9,top_k:40,num_predict:1024},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.7},titleSettings:{autoTitle:!1,taskModel:``,taskProviderType:null,taskProviderId:null},showUsername:!1,hapticFeedbackEnabled:!1,workRemoteProviderDisclosureDismissed:!1,backgroundSettings:{enabled:!1,imageUrl:``,blurAmount:10,opacity:.6}},_={...g,theme:{...g.theme},generationOptions:{...g.generationOptions},embeddingSettings:{...g.embeddingSettings},titleSettings:{...g.titleSettings},backgroundSettings:{...g.backgroundSettings}},v=()=>_,y=e=>{let t=_.backgroundSettings||g.backgroundSettings;return _={..._,...e,theme:{..._.theme,...e.theme},generationOptions:{..._.generationOptions,...e.generationOptions},embeddingSettings:{..._.embeddingSettings,...e.embeddingSettings},titleSettings:e.titleSettings?{..._.titleSettings||g.titleSettings,...e.titleSettings}:_.titleSettings,backgroundSettings:e.backgroundSettings?{...t,...e.backgroundSettings}:_.backgroundSettings},_},b={getSessions:()=>a.get(`/chat/sessions`).then(e=>e.data),createSession:(e,t,n,r,i)=>a.post(`/chat/sessions`,{model:e,title:t,personaId:n,providerType:r,providerId:i}).then(e=>e.data),getSession:e=>{if(t()){let t=m().find(t=>t.id===e);return t?i(t):Promise.resolve({success:!1,error:`Session not found in demo mode`})}return a.get(`/chat/sessions/${e}`).then(e=>e.data)},updateSession:(e,n)=>{if(t()){let t=h.findIndex(t=>t.id===e),r=h[t];if(r){let e={...r,...n,updatedAt:Date.now()};return h[t]=e,i(e)}return Promise.resolve({success:!1,error:`Session not found in demo mode`})}return a.put(`/chat/sessions/${e}`,n).then(e=>e.data)},forkSession:(e,t={})=>a.post(`/chat/sessions/${e}/fork`,t).then(e=>e.data),enqueuePrompt:(e,t)=>a.post(`/chat/sessions/${e}/queue`,{content:t}).then(e=>e.data),updateQueuedPrompt:(e,t,n)=>a.put(`/chat/sessions/${e}/queue/${t}`,{content:n}).then(e=>e.data),reorderPromptQueue:(e,t)=>a.put(`/chat/sessions/${e}/queue`,{order:t}).then(e=>e.data),claimQueuedPrompt:(e,t)=>a.delete(`/chat/sessions/${e}/queue/${t}`).then(e=>e.data),truncateMessagesFrom:(e,n)=>{if(t()){let t=h.find(t=>t.id===e);if(t){let e=t.messages.findIndex(e=>e.id===n);return e===-1?Promise.resolve({success:!1,error:`Message not found in demo mode`}):(t.messages=t.messages.slice(0,e),t.updatedAt=Date.now(),i(t))}return Promise.resolve({success:!1,error:`Session not found in demo mode`})}return a.post(`/chat/sessions/${e}/messages/${n}/truncate`).then(e=>e.data)},deleteSession:e=>t()?i(null):a.delete(`/chat/sessions/${e}`).then(e=>e.data),clearAllSessions:()=>a.delete(`/chat/sessions`).then(e=>e.data),generateTitle:(e,n,r,o,s)=>{if(t()){let e=r.substring(0,30)+(r.length>30?`...`:``);return i({title:e,source:`fallback`,updatedAt:Date.now()})}return a.post(`/chat/sessions/${e}/generate-title`,{model:n,message:r,providerType:o,providerId:s}).then(e=>e.data)},getFolders:()=>t()?i([]):a.get(`/chat/folders`).then(e=>e.data),createFolder:e=>a.post(`/chat/folders`,{name:e}).then(e=>e.data),renameFolder:(e,t)=>a.put(`/chat/folders/${e}`,{name:t}).then(e=>e.data),deleteFolder:e=>a.delete(`/chat/folders/${e}`).then(e=>e.data),generateFollowUps:e=>t()?i({suggestions:[]}):a.post(`/chat/sessions/${e}/followups`).then(e=>e.data),sendMessage:(e,t,n)=>a.post(`/chat/sessions/${e}/messages`,{content:t,options:n}).then(e=>e.data),saveMessage:(e,t)=>a.post(`/chat/sessions/${e}/messages`,t).then(e=>e.data),updateMessage:(e,n,r)=>t()?i({}):a.put(`/chat/sessions/${e}/messages/${n}`,r).then(e=>e.data),generateChatResponse:(e,t,n)=>a.post(`/chat/sessions/${e}/generate`,{message:t,options:n}).then(e=>e.data),generateChatStreamResponse:(e,t,i)=>({subscribe:async(a,o,s)=>{try{let c=await fetch(`${n}/chat/sessions/${e}/generate/stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({message:t,options:i})});if(!c.ok)throw Error(`HTTP error! status: ${c.status}`);let l=c.body?.getReader();if(!l)throw Error(`No response body reader available`);let u=new TextDecoder,d=``,f=()=>{l.read().then(({done:e,value:t})=>{if(e){s?.();return}d+=u.decode(t,{stream:!0});let n=d.split(`
|
|
2
|
+
`);d=n.pop()||``;for(let e of n){let t=e.trim();if(t.startsWith(`data: `)){let e=t.slice(6);if(e===`[DONE]`){s?.();return}try{let t=JSON.parse(e);if(a(t),t.type===`done`||t.type===`error`){t.type===`error`?o?.(t.error):s?.();return}}catch(e){r.error(`Failed to parse SSE data:`,e)}}}f()}).catch(e=>{o?.(e instanceof Error?e:Error(String(e)))})};return f(),()=>l.cancel()}catch(e){return o?.(e instanceof Error?e:Error(String(e))),()=>{}}}}),getMessageBranches:(e,n)=>t()?i([]):a.get(`/chat/sessions/${e}/messages/${n}/branches`).then(e=>e.data),switchMessageBranch:(e,n,r)=>t()?i({}):a.post(`/chat/sessions/${e}/messages/${n}/branch`,{branchIndex:r}).then(e=>e.data),createMessageBranch:(e,n,r)=>t()?i({}):a.post(`/chat/sessions/${e}/messages/${n}/branches`,{...r}).then(e=>e.data),restoreCompaction:(e,t)=>a.post(`/chat/sessions/${e}/compaction/${t}/restore`).then(e=>e.data),getContextPolicy:()=>t()?i({windowMessages:10}):a.get(`/chat/context-policy`).then(e=>e.data),getCompactionConfig:()=>t()?i({enabled:!1,thresholdTokens:8e3,keepRecentMessages:8,model:``,prompt:``}):a.get(`/chat/compaction-config`).then(e=>e.data),setCompactionConfig:e=>t()?i({enabled:!1,thresholdTokens:8e3,keepRecentMessages:8,model:``,prompt:``},!1):a.put(`/chat/compaction-config`,e).then(e=>e.data)},ee={uploadDocument:(e,n)=>{if(t())return i({id:`demo-doc-`+Date.now(),filename:e.name,fileType:e.name.endsWith(`.pdf`)?`pdf`:`txt`,size:e.size,sessionId:n,uploadedAt:Date.now()});let r=new FormData;return r.append(`document`,e),n&&r.append(`sessionId`,n),a.post(`/documents/upload`,r).then(e=>e.data)},getCollections:()=>t()?i([]):a.get(`/documents/collections`).then(e=>e.data),createCollection:e=>a.post(`/documents/collections`,{name:e}).then(e=>e.data),deleteCollection:e=>a.delete(`/documents/collections/${e}`).then(e=>e.data),setDocumentCollection:(e,t)=>a.put(`/documents/${e}/collection`,{collectionId:t}).then(e=>e.data),fetchWebpage:(e,n)=>t()?i({id:`demo-doc-`+Date.now(),filename:`demo-webpage.txt`,fileType:`txt`,size:0,sessionId:n,uploadedAt:Date.now()}):a.post(`/documents/fetch-url`,{url:e,sessionId:n}).then(e=>e.data),getDocuments:e=>{if(t())return i([]);let n=e?`/documents/session/${e}`:`/documents`;return a.get(n).then(e=>e.data)},getDocument:e=>t()?i({id:e,filename:`demo-document.pdf`,fileType:`pdf`,size:1024,content:`Demo document content...`,uploadedAt:Date.now()}):a.get(`/documents/${e}`).then(e=>e.data),searchDocuments:(e,n,r)=>t()?i([]):a.post(`/documents/search`,{query:e,sessionId:n,limit:r}).then(e=>e.data),deleteDocument:e=>t()?i(void 0):a.delete(`/documents/${e}`).then(e=>e.data),getEmbeddingStatus:()=>t()?i({available:!1,model:`nomic-embed-text`,chunksWithEmbeddings:0,totalChunks:0}):a.get(`/documents/embeddings/status`).then(e=>e.data),regenerateEmbeddings:()=>t()?i({documentsTotal:0,documentsRegenerated:0,documentsSkipped:0,chunksTotal:0,chunksEmbedded:0,model:`nomic-embed-text`,version:`v1`}):a.post(`/documents/embeddings/regenerate`).then(e=>e.data)},te={getModels:()=>t()?i([{id:`nomic-embed-text`,name:`nomic-embed-text`,description:`Ollama - Default embedding model`,provider:`ollama`,dimensions:0,isDetectedEmbedding:!0}]):a.get(`/embeddings/models`).then(e=>e.data)},x={getNotes:()=>t()?i([]):a.get(`/notes`).then(e=>e.data),getNote:e=>a.get(`/notes/${e}`).then(e=>e.data),createNote:(e,t)=>a.post(`/notes`,{title:e,content:t}).then(e=>e.data),updateNote:(e,t)=>a.put(`/notes/${e}`,t).then(e=>e.data),deleteNote:e=>a.delete(`/notes/${e}`).then(e=>e.data),getRevisions:e=>a.get(`/notes/${e}/revisions`).then(e=>e.data),restoreRevision:(e,t)=>a.post(`/notes/${e}/revisions/${t}/restore`).then(e=>e.data),getAttachments:e=>a.get(`/notes/${e}/attachments`).then(e=>e.data),uploadAttachment:(e,t)=>{let n=new FormData;return n.append(`attachment`,t),a.post(`/notes/${e}/attachments`,n,{headers:{"Content-Type":`multipart/form-data`}}).then(e=>e.data)},downloadAttachment:(e,t)=>a.get(`/notes/${e}/attachments/${t}`,{responseType:`blob`}).then(e=>e.data),deleteAttachment:(e,t)=>a.delete(`/notes/${e}/attachments/${t}`).then(e=>e.data),assist:(e,t)=>a.post(`/notes/${e}/assist`,t).then(e=>e.data)},S={listGrants:(e,t)=>a.get(`/access/grants`,{params:{type:e,id:t}}).then(e=>e.data),createGrant:e=>a.post(`/access/grants`,e).then(e=>e.data),deleteGrant:e=>a.delete(`/access/grants/${e}`).then(e=>e.data),resolvePrincipal:e=>a.get(`/access/principals`,{params:{username:e}}).then(e=>e.data),resolveGroup:e=>a.get(`/access/principals/groups`,{params:{name:e}}).then(e=>e.data)},ne={getEvents:(e,n)=>t()?i([]):a.get(`/calendar/events?from=${e}&to=${n}`).then(e=>e.data),createEvent:e=>a.post(`/calendar/events`,e).then(e=>e.data),updateEvent:(e,t)=>a.put(`/calendar/events/${e}`,t).then(e=>e.data),deleteEvent:e=>a.delete(`/calendar/events/${e}`).then(e=>e.data),getCalendars:()=>t()?i([]):a.get(`/calendar/calendars`).then(e=>e.data),createCalendar:e=>a.post(`/calendar/calendars`,e).then(e=>e.data),updateCalendar:(e,t)=>a.put(`/calendar/calendars/${e}`,t).then(e=>e.data),deleteCalendar:e=>a.delete(`/calendar/calendars/${e}`).then(e=>e.data),exportIcs:e=>a.get(e?`/calendar/export?calendarId=${encodeURIComponent(e)}`:`/calendar/export`,{responseType:`blob`}).then(e=>e.data),importIcs:(e,t)=>a.post(`/calendar/import`,{ics:e,...t?{calendarId:t}:{}}).then(e=>e.data)},C={listMine:()=>t()?i([]):a.get(`/channels`).then(e=>e.data),listPublic:()=>t()?i([]):a.get(`/channels/public`).then(e=>e.data),create:e=>a.post(`/channels`,e).then(e=>e.data),openDm:e=>a.post(`/channels/dm`,{userId:e}).then(e=>e.data),get:e=>a.get(`/channels/${e}`).then(e=>e.data),update:(e,t)=>a.patch(`/channels/${e}`,t).then(e=>e.data),delete:e=>a.delete(`/channels/${e}`).then(e=>e.data),join:e=>a.post(`/channels/${e}/join`).then(e=>e.data),listMembers:e=>a.get(`/channels/${e}/members`).then(e=>e.data),addMember:(e,t)=>a.post(`/channels/${e}/members`,{userId:t}).then(e=>e.data),removeMember:(e,t)=>a.delete(`/channels/${e}/members/${encodeURIComponent(t)}`).then(e=>e.data),listMessages:(e,t={})=>{let n=new URLSearchParams;t.before&&n.set(`before`,t.before),t.after&&n.set(`after`,t.after),t.limit&&n.set(`limit`,String(t.limit));let r=n.size>0?`?${n.toString()}`:``;return a.get(`/channels/${e}/messages${r}`).then(e=>e.data)},postMessage:(e,t)=>a.post(`/channels/${e}/messages`,t).then(e=>e.data),listPins:e=>a.get(`/channels/${e}/pins`).then(e=>e.data),markRead:e=>a.post(`/channels/${e}/read`,{}).then(e=>e.data),thread:e=>a.get(`/channels/messages/${e}/thread`).then(e=>e.data),editMessage:(e,t)=>a.patch(`/channels/messages/${e}`,{content:t}).then(e=>e.data),deleteMessage:e=>a.delete(`/channels/messages/${e}`).then(e=>e.data),setPinned:(e,t)=>a.post(`/channels/messages/${e}/pin`,{pinned:t}).then(e=>e.data),addReaction:(e,t)=>a.post(`/channels/messages/${e}/reactions`,{emoji:t}).then(e=>e.data),removeReaction:(e,t)=>a.delete(`/channels/messages/${e}/reactions/${encodeURIComponent(t)}`).then(e=>e.data),uploadAttachment:(e,t)=>{let n=new FormData;return n.append(`attachment`,t),a.post(`/channels/${e}/attachments`,n,{headers:{"Content-Type":`multipart/form-data`}}).then(e=>e.data)},downloadAttachment:e=>a.get(`/channels/attachments/${e}`,{responseType:`blob`}).then(e=>e.data)},w={list:(e={})=>{if(t())return i([]);let n=new URLSearchParams;e.before&&n.set(`before`,String(e.before)),e.limit&&n.set(`limit`,String(e.limit));let r=n.size>0?`?${n.toString()}`:``;return a.get(`/notifications${r}`).then(e=>e.data)},unreadCount:()=>t()?i({count:0}):a.get(`/notifications/unread-count`).then(e=>e.data),markRead:e=>a.post(`/notifications/${e}/read`).then(e=>e.data),markAllRead:()=>a.post(`/notifications/read-all`).then(e=>e.data),delete:e=>a.delete(`/notifications/${e}`).then(e=>e.data)},T={getAutomations:()=>t()?i([]):a.get(`/automations`).then(e=>e.data),createAutomation:e=>a.post(`/automations`,e).then(e=>e.data),updateAutomation:(e,t)=>a.put(`/automations/${e}`,t).then(e=>e.data),deleteAutomation:e=>a.delete(`/automations/${e}`).then(e=>e.data),pauseAutomation:e=>a.post(`/automations/${e}/pause`).then(e=>e.data),resumeAutomation:e=>a.post(`/automations/${e}/resume`).then(e=>e.data),runAutomationNow:e=>a.post(`/automations/${e}/run`).then(e=>e.data),getOccurrences:(e,n)=>t()?i([]):a.get(`/automations/occurrences?from=${e}&to=${n}`).then(e=>e.data),getRuns:e=>{if(t())return i([]);let n=new URLSearchParams;e?.automationId&&n.set(`automationId`,e.automationId),e?.from!==void 0&&n.set(`from`,String(e.from)),e?.to!==void 0&&n.set(`to`,String(e.to));let r=n.size>0?`?${n.toString()}`:``;return a.get(`/automations/runs${r}`).then(e=>e.data)},getRunsSummary:()=>t()?i({unseenCount:0,days:Array.from({length:30},()=>({succeeded:0,failed:0}))}):a.get(`/automations/runs/summary`).then(e=>e.data),markRunsSeen:()=>a.post(`/automations/runs/seen`).then(e=>e.data)},E={getConfig:()=>t()?i({enabled:!1,available:!1,allowed:!1}):a.get(`/search/config`).then(e=>e.data),getAccess:()=>t()?i({mode:`admins`,allowed:!1}):a.get(`/search/access`).then(e=>e.data),setAccess:e=>t()?i({mode:e}):a.put(`/search/access`,{mode:e}).then(e=>e.data),setConfig:(e,n,r)=>t()?i({enabled:e,available:e,allowed:!1,url:n}):a.put(`/search/config`,{enabled:e,url:n,...r??{}}).then(e=>e.data),searchApp:e=>t()?i({sessions:[],notes:[],documents:[]}):a.get(`/search/app`,{params:{q:e}}).then(e=>e.data),test:()=>t()?i({ok:!1,results:0},!1):a.post(`/search/test`).then(e=>e.data)},D={getModels:e=>t()?i([{id:`meta-llama/Llama-3.3-70B-Instruct`,modelId:`meta-llama/Llama-3.3-70B-Instruct`,author:`meta-llama`,downloads:1e6,likes:5e3,tags:[`text-generation`,`llama`],pipeline_tag:`text-generation`,gated:!1}]):a.get(`/huggingface-hub/models`,{params:e}).then(e=>e.data),getTrending:e=>t()?i([]):a.get(`/huggingface-hub/trending`,{params:e}).then(e=>e.data),getModel:(e,n)=>t()?i({id:`${e}/${n}`,modelId:`${e}/${n}`,author:e,downloads:0,likes:0,tags:[],gated:!1}):a.get(`/huggingface-hub/models/${e}/${n}`).then(e=>e.data),getTasks:()=>t()?i([`text-generation`,`text-to-speech`,`text-to-image`]):a.get(`/huggingface-hub/tasks`).then(e=>e.data),clearCache:()=>t()?i(!0):a.post(`/huggingface-hub/cache/clear`).then(e=>e.data),getGgufFiles:(e,n)=>t()?i([{filename:`model-Q4_K_M.gguf`,size:45e8,sizeFormatted:`4.19 GB`,quantization:`Q4_K_M`,url:`https://huggingface.co/${e}/${n}/resolve/main/model-Q4_K_M.gguf`,ollamaCommand:`hf.co/${e}/${n}:Q4_K_M`}]):a.get(`/huggingface-hub/models/${e}/${n}/gguf`).then(e=>e.data),hasGgufFiles:(e,n)=>t()?i({hasGguf:!1,count:0}):a.get(`/huggingface-hub/models/${e}/${n}/has-gguf`).then(e=>e.data)};function O(e,t){return t?t.aborted?Promise.reject(t.reason??new DOMException(`The operation was aborted`,`AbortError`)):new Promise((n,r)=>{let i=()=>{r(t.reason??new DOMException(`The operation was aborted`,`AbortError`))};t.addEventListener(`abort`,i,{once:!0}),e.then(e=>{t.removeEventListener(`abort`,i),n(e)},e=>{t.removeEventListener(`abort`,i),r(e)})}):e}var re={getModels:()=>t()?i([{model:`gpt-image-2`,plugin:`openai`,config:{sizes:[`1024x1024`,`1536x1024`,`1024x1536`],default_size:`1024x1024`,qualities:[`auto`,`low`,`medium`,`high`],default_quality:`auto`}}]):a.get(`/image-gen/models`).then(e=>e.data),getPlugins:()=>t()?i([{id:`openai`,name:`OpenAI GPT Image`,models:[`gpt-image-2`,`gpt-image-1.5`,`gpt-image-1`,`gpt-image-1-mini`],config:{sizes:[`1024x1024`,`1536x1024`,`1024x1536`],default_size:`1024x1024`,qualities:[`auto`,`low`,`medium`,`high`],default_quality:`auto`}}]):a.get(`/image-gen/plugins`).then(e=>e.data),getConfig:e=>t()?i({sizes:[`1024x1024`,`1536x1024`,`1024x1536`],default_size:`1024x1024`,qualities:[`auto`,`low`,`medium`,`high`],default_quality:`auto`}):a.get(`/image-gen/config/${e}`).then(e=>e.data),generate:(e,n)=>t()?O(i({images:[{url:`https://placehold.co/1024x1024/purple/white?text=Demo+Image`,revised_prompt:e.prompt}],model:e.model,pluginId:e.pluginId}),n):a.post(`/image-gen/generate`,e,{signal:n}).then(e=>e.data),getGallery:e=>t()?i({images:[],total:0}):a.get(`/image-gen/gallery`,{params:e}).then(e=>e.data),getGalleryImage:e=>t()?i({id:e,userId:`demo`,prompt:`Demo image prompt`,model:`dall-e-3`,imageData:`https://placehold.co/1024x1024/purple/white?text=Demo`,createdAt:Date.now()}):a.get(`/image-gen/gallery/${e}`).then(e=>e.data),deleteGalleryImage:e=>t()?i(void 0):a.delete(`/image-gen/gallery/${e}`).then(e=>e.data)},k={connected:!1,baseUrl:`http://127.0.0.1:8766`,dashboardUrl:`http://127.0.0.1:8766/dashboard`,error:`Libre Claw daemon is not connected in demo mode.`},ie={access:()=>t()?i({enabled:!1,lockedByEnv:!1}):a.get(`/libre-claw/access`).then(e=>e.data),setAccess:e=>t()?i({enabled:e,lockedByEnv:!1}):a.put(`/libre-claw/access`,{enabled:e}).then(e=>e.data),status:()=>t()?i(k):a.get(`/libre-claw/status`).then(e=>e.data),dashboard:()=>t()?i({url:k.dashboardUrl}):a.get(`/libre-claw/dashboard`).then(e=>e.data),currentModel:()=>t()?i({provider:`openrouter`,model:`openrouter/auto`}):a.get(`/libre-claw/config/model`).then(e=>e.data),updateModel:(e,n,r=!1)=>t()?i({provider:e,model:n,persist_global:r}):a.patch(`/libre-claw/config/model`,{provider:e,model:n,persist_global:r}).then(e=>e.data),currentFallback:()=>t()?i({enabled:!1,routes:[]}):a.get(`/libre-claw/config/fallback`).then(e=>e.data),updateFallback:e=>t()?i(e):a.patch(`/libre-claw/config/fallback`,e).then(e=>e.data),updateTheme:(e,n=!0)=>t()?i({theme:e,label:e,persist_global:n}):a.patch(`/libre-claw/config/theme`,{theme:e,persist_global:n}).then(e=>e.data),usage:(e=``,n=250)=>{let r=new URLSearchParams({limit:String(n)});return e&&r.set(`provider`,e),t()?i({summary:{},records:[],text:``}):a.get(`/libre-claw/usage?${r.toString()}`).then(e=>e.data)},listRuns:(e=20)=>t()?i({runs:[]}):a.get(`/libre-claw/runs?limit=${e}`).then(e=>e.data),startRun:e=>{if(t()){let t=new Date().toISOString();return i({run:{run_id:`demo-${Date.now()}`,state:`queued`,title:e.message.slice(0,80)||`Libre Claw demo run`,kind:e.kind||`chat`,provider:e.provider||`openrouter`,model:e.model||`openrouter/auto`,working_directory:``,created_at:t,updated_at:t}})}return a.post(`/libre-claw/runs`,e).then(e=>e.data)},getRun:e=>t()?i({run_id:e}):a.get(`/libre-claw/runs/${encodeURIComponent(e)}`).then(e=>e.data),getEvents:(e,n=0)=>t()?i({events:[]}):a.get(`/libre-claw/runs/${encodeURIComponent(e)}/events?after=${n}`).then(e=>e.data),cancelRun:e=>t()?i({run_id:e,cancelled:!0}):a.post(`/libre-claw/runs/${encodeURIComponent(e)}/cancel`).then(e=>e.data),resolvePermission:(e,n,r)=>t()?i({run_id:e,tool_call_id:n,resolution:r}):a.post(`/libre-claw/runs/${encodeURIComponent(e)}/permissions/${encodeURIComponent(n)}`,{resolution:r}).then(e=>e.data),listAutomations:(e=50)=>t()?i({automations:[]}):a.get(`/libre-claw/automations?limit=${e}`).then(e=>e.data),createAutomation:e=>t()?i({...e,automation_id:`demo-${Date.now()}`}):a.post(`/libre-claw/automations`,e).then(e=>e.data),updateAutomation:(e,n)=>t()?i({...n,automation_id:e}):a.patch(`/libre-claw/automations/${encodeURIComponent(e)}`,n).then(e=>e.data),pauseAutomation:e=>t()?i({automation_id:e,status:`paused`}):a.post(`/libre-claw/automations/${encodeURIComponent(e)}/pause`).then(e=>e.data),resumeAutomation:e=>t()?i({automation_id:e,status:`active`}):a.post(`/libre-claw/automations/${encodeURIComponent(e)}/resume`).then(e=>e.data),runAutomationNow:e=>t()?i({automation_id:e,run:!0}):a.post(`/libre-claw/automations/${encodeURIComponent(e)}/run`).then(e=>e.data),deleteAutomation:e=>t()?i({automation_id:e,deleted:!0}):a.delete(`/libre-claw/automations/${encodeURIComponent(e)}`).then(e=>e.data)},A={getModels:()=>a.get(`/media/models`).then(e=>e.data),generateAudio:(e,t)=>a.post(`/media/audio/generate`,e,{signal:t}).then(e=>e.data),cloneVoice:(e,t)=>{let n=new FormData;return n.set(`model`,e.model),n.set(`pluginId`,e.pluginId),n.set(`input`,e.input),n.set(`reference_audio`,e.referenceAudio),e.referenceText&&n.set(`reference_text`,e.referenceText),e.responseFormat&&n.set(`response_format`,e.responseFormat),e.saveVoiceName&&n.set(`saveVoiceName`,e.saveVoiceName),e.consentToStore&&n.set(`consentToStore`,`true`),e.consentTtlDays!==void 0&&n.set(`consentTtlDays`,String(e.consentTtlDays)),a.post(`/media/audio/voice-clone`,n,{signal:t}).then(e=>e.data)},generateSound:(e,t)=>a.post(`/media/sound/generate`,e,{signal:t}).then(e=>e.data),generateVideo:(e,t)=>a.post(`/media/video/generate`,e,{signal:t}).then(e=>e.data),getVideoJob:(e,t)=>a.get(`/media/video/jobs/${e}`,{signal:t}).then(e=>e.data),listVideoJobs:e=>a.get(`/media/video/jobs`,{params:e}).then(e=>e.data),resumeVideoJob:(e,t)=>a.post(`/media/video/jobs/${encodeURIComponent(e)}/resume`,void 0,{signal:t}).then(e=>e.data),cancelVideoJob:e=>a.delete(`/media/video/jobs/${encodeURIComponent(e)}`).then(e=>e.data),getGallery:e=>a.get(`/media/gallery`,{params:e}).then(e=>e.data),deleteGalleryItem:e=>a.delete(`/media/gallery/${e}`).then(e=>e.data),editImage:(e,t)=>{let n=new FormData;n.set(`model`,e.model),n.set(`pluginId`,e.pluginId),n.set(`prompt`,e.prompt),e.size&&n.set(`size`,e.size),e.sourceMediaId&&n.set(`sourceMediaId`,e.sourceMediaId);for(let t of e.images??[])n.append(`images`,t);return e.mask&&n.append(`mask`,e.mask,`mask.png`),a.post(`/media/image/edit`,n,{signal:t}).then(e=>e.data)},getGalleryContent:e=>a.get(`/media/gallery/${e}/content`,{responseType:`blob`}).then(e=>e.data)},j=(e,t,n)=>{let r=new AbortController,i=localStorage.getItem(`auth-token`);return(async()=>{try{let n=await fetch(e,{headers:{Accept:`text/event-stream`,...i?{Authorization:`Bearer ${i}`}:{}},cache:`no-store`,credentials:`same-origin`,signal:r.signal});if(!n.ok){let e=`Request failed with status ${n.status}`;try{let t=await n.json();typeof t.error==`string`?e=t.error:typeof t.message==`string`&&(e=t.message)}catch{}throw Error(e)}if(!n.body)throw Error(`Response stream is unavailable`);let a=n.body.getReader(),o=new TextDecoder,s=``;try{for(;!r.signal.aborted;){let{done:e,value:n}=await a.read();s+=o.decode(n,{stream:!e});let r=s.split(/\r?\n\r?\n/);s=r.pop()||``;for(let e of r){let n=e.split(/\r?\n/).find(e=>e.startsWith(`data:`));n&&t(JSON.parse(n.slice(5).trim()))}if(e)break}}finally{a.releaseLock()}}catch(e){r.signal.aborted||n(e instanceof Error?e.message:`Connection lost`)}})(),()=>r.abort()},M=`libre:models-changed`,N=()=>{window.dispatchEvent(new Event(M))},P={checkHealth:()=>t()?i({status:`offline`},!1):a.get(`/ollama/health`).then(e=>e.data),getModels:()=>t()?i(p):a.get(`/ollama/models`).then(e=>e.data),getModelAccess:()=>t()?i({mode:`admins`,allowed:!1}):a.get(`/ollama/models/access`).then(e=>e.data),setModelAccess:e=>t()?i({mode:e}):a.put(`/ollama/models/access`,{mode:e}).then(e=>e.data),getModelVisibility:()=>t()?i({hidden:[],order:[],metadata:{}}):a.get(`/ollama/models/visibility`).then(e=>e.data),setModelVisibility:e=>t()?i({hidden:e.hidden??[],order:e.order??[],metadata:e.metadata??{}}):a.put(`/ollama/models/visibility`,e).then(e=>e.data),pullModel:e=>t()?i(null,!1):a.post(`/ollama/models/pull`,{name:e}).then(e=>(N(),e.data)),pullModelStream:(e,r,i,a)=>{if(t()){let e=0,t=setInterval(()=>{e+=Math.random()*20,e>=100?(e=100,r({status:`success`,total:100,completed:100,percent:100}),clearInterval(t),setTimeout(()=>{N(),i()},500)):r({status:`pulling`,total:100,completed:e,percent:Math.round(e)})},1e3);return()=>clearInterval(t)}let o=new URLSearchParams({model:e});return j(`${n}/ollama/pull/stream?${o.toString()}`,e=>{switch(e.type){case`progress`:r({status:typeof e.status==`string`?e.status:`pulling`,digest:typeof e.digest==`string`?e.digest:void 0,total:typeof e.total==`number`?e.total:void 0,completed:typeof e.completed==`number`?e.completed:void 0,percent:typeof e.percent==`number`?e.percent:void 0});break;case`complete`:N(),i();break;case`error`:a(String(e.error||`Model pull failed`))}},a)},deleteModel:e=>t()?i(null,!1):a.delete(`/ollama/models`,{params:{name:e}}).then(e=>(N(),e.data)),getModelDefaults:e=>a.get(`/ollama/models/${encodeURIComponent(e)}/defaults`).then(e=>e.data),showModel:(e,n=!1)=>{if(t()){let t=p.find(t=>t.name===e);return i(t||null,!!t)}return a.get(`/ollama/models/show`,{params:{name:e,verbose:n}}).then(e=>e.data)},createModel:e=>t()?i(null,!1):a.post(`/ollama/models`,e).then(e=>(N(),e.data)),copyModel:(e,n)=>t()?i(null,!1):a.post(`/ollama/models/copy`,{source:e,destination:n}).then(e=>(N(),e.data)),pushModel:e=>t()?i(null,!1):a.post(`/ollama/models/push`,{name:e}).then(e=>e.data),pullAllModels:()=>t()?i(null,!1):a.post(`/ollama/models/pull-all`).then(e=>e.data),pullAllModelsStream:(e,r,i)=>{if(t()){let t=p,n=0,i=setInterval(()=>{n++,n<=t.length&&e({current:n,total:t.length,modelName:t[n-1]?.name||`demo-model`,status:Math.random()>.1?`success`:`error`,error:Math.random()>.1?void 0:`Demo error`}),n>=t.length&&(clearInterval(i),setTimeout(()=>{N(),r()},500))},1e3);return}j(`${n}/ollama/models/pull-all/stream`,t=>{switch(t.type){case`progress`:{let n=t.status===`success`||t.status===`error`?t.status:`starting`;e({current:typeof t.current==`number`?t.current:0,total:typeof t.total==`number`?t.total:0,modelName:typeof t.modelName==`string`?t.modelName:`unknown`,status:n,error:typeof t.error==`string`?t.error:void 0});break}case`complete`:N(),r();break;case`error`:i(String(t.error||`Model update failed`))}},i)},generateEmbeddings:e=>t()?i({embeddings:[[]]},!1):a.post(`/ollama/embed`,e).then(e=>e.data),listRunningModels:()=>t()?i([]):a.get(`/ollama/running`).then(e=>e.data),unloadModel:e=>t()?i(null):a.post(`/ollama/models/unload`,{name:e}).then(e=>e.data),unloadAllModels:()=>t()?i(null):a.post(`/ollama/models/unload-all`).then(e=>e.data),getVersion:()=>t()?i({version:`demo-mode`},!1):a.get(`/ollama/version`).then(e=>e.data),chatCompletion:e=>t()?i({message:{content:`Demo response`,role:`assistant`}},!1):a.post(`/ollama/chat`,e).then(e=>e.data),checkBlobExists:e=>t()?Promise.resolve(!1):a.head(`/ollama/blobs/${e}`).then(()=>!0).catch(()=>!1),pushBlob:(e,n)=>t()?i(null,!1):a.post(`/ollama/blobs/${e}`,n,{headers:{"Content-Type":`application/octet-stream`}}).then(e=>e.data),generateLegacyEmbeddings:e=>t()?i({embedding:[]},!1):a.post(`/ollama/embeddings`,e).then(e=>e.data),getLibraryModels:e=>{if(t())return e?.category===`cloud`?i([{name:`gpt-oss:cloud`,description:`Demo cloud model using Ollama cloud naming`,category:`cloud`,sizes:[`cloud`],pulls:`Cloud`,tags:[`cloud`]}]):i([{name:`llama3.2`,description:`Meta's latest Llama model`,category:`general`,sizes:[`1b`,`3b`],pulls:`50M+`,tags:[`general`]},{name:`deepseek-r1`,description:`Open reasoning model`,category:`reasoning`,sizes:[`7b`,`14b`,`32b`],pulls:`200M+`,tags:[`reasoning`]}]);let n=new URLSearchParams;e?.search&&n.set(`search`,e.search),e?.sort&&n.set(`sort`,e.sort),e?.category&&n.set(`category`,e.category);let r=n.toString();return a.get(`/ollama/library${r?`?${r}`:``}`).then(e=>e.data)}},F=[[`#2563eb`,`#7c3aed`],[`#0891b2`,`#2563eb`],[`#0f766e`,`#2563eb`],[`#be123c`,`#7c3aed`],[`#ff7b52`,`#dc2626`]],I=e=>{let t=0;for(let n=0;n<e.length;n+=1)t=(t<<5)-t+e.charCodeAt(n),t|=0;return Math.abs(t)},L=e=>e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`),R=e=>{let t=e.trim().split(/[\s._-]+/).filter(Boolean);return t.length===0?`AI`:t.slice(0,2).map(e=>e[0]?.toUpperCase()).join(``)||`AI`},z=(e,t=128)=>{let n=e.trim()||`AI Persona`,r=I(n),[i,a]=F[r%F.length],o=L(R(n)),s=`persona-avatar-${r}-${t}`,c=t>=96?44:24,l=`
|
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="${t}" height="${t}" viewBox="0 0 ${t} ${t}" role="img" aria-label="${L(n)} avatar">
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="${s}" x1="0" y1="0" x2="1" y2="1">
|
|
6
|
+
<stop offset="0%" stop-color="${i}" />
|
|
7
|
+
<stop offset="100%" stop-color="${a}" />
|
|
8
|
+
</linearGradient>
|
|
9
|
+
</defs>
|
|
10
|
+
<rect width="${t}" height="${t}" rx="${Math.round(t*.22)}" fill="url(#${s})" />
|
|
11
|
+
<circle cx="${t*.22}" cy="${t*.22}" r="${t*.26}" fill="rgba(255,255,255,0.16)" />
|
|
12
|
+
<text x="50%" y="52%" dominant-baseline="middle" text-anchor="middle" fill="white" font-family="Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif" font-size="${c}" font-weight="700">${o}</text>
|
|
13
|
+
</svg>
|
|
14
|
+
`;return`data:image/svg+xml;charset=UTF-8,${encodeURIComponent(l)}`},B=(e,t=128)=>e.avatar?.trim()||z(e.name,t),V=(e,t,n=128)=>{e.onerror=null,e.src=z(t,n)},H={getPersonas:()=>{if(t()){let e=[{id:`demo-1`,user_id:`default`,name:`Creative Assistant`,description:`Helpful assistant for creative tasks`,model:`llama3.3:latest`,parameters:{temperature:.8,top_p:.9,context_window:4096,system_prompt:`You are a creative and helpful assistant. Provide thoughtful and engaging responses.`},avatar:z(`Creative Assistant`,128),created_at:Date.now()-864e5,updated_at:Date.now()-864e5},{id:`demo-2`,user_id:`default`,name:`Research Assistant`,description:`Academic assistant for research and learning`,model:`qwen3:7b`,parameters:{temperature:.3,top_p:.8,context_window:8192,system_prompt:`You are a knowledgeable research assistant. Provide detailed, informative explanations.`},avatar:z(`Research Assistant`,128),created_at:Date.now()-1728e5,updated_at:Date.now()-1728e5}];return i(e)}return a.get(`/personas`).then(e=>e.data)},getPersona:e=>t()?i({id:e,user_id:`default`,name:`Sample Assistant`,description:`A sample assistant for demonstration`,model:`llama3.2:latest`,parameters:{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},created_at:Date.now(),updated_at:Date.now()}):a.get(`/personas/${e}`).then(e=>e.data),createPersona:e=>{if(t()){let t={id:`demo-`+Date.now(),user_id:`default`,...e,created_at:Date.now(),updated_at:Date.now()};return i(t)}return a.post(`/personas`,e).then(e=>e.data)},updatePersona:(e,n)=>{if(t()){let t={id:e,user_id:`default`,name:n.name||`Updated Sample Assistant`,description:n.description,model:n.model||`llama3.2:latest`,parameters:n.parameters||{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},avatar:n.avatar,background:n.background,created_at:Date.now()-864e5,updated_at:Date.now()};return i(t)}return a.put(`/personas/${e}`,n).then(e=>e.data)},deletePersona:e=>t()?i(void 0):a.delete(`/personas/${e}`).then(e=>e.data),exportPersona:e=>{if(t()){let e={name:`Sample Assistant`,description:`A sample assistant for demonstration`,model:`llama3.2:latest`,params:{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},exportedAt:Date.now(),version:`1.0.0`};return Promise.resolve(e)}return a.get(`/personas/${e}/export`).then(e=>e.data)},importPersona:e=>{if(t()){let t={id:`demo-imported-`+Date.now(),user_id:`default`,name:e.name,description:e.description,model:e.model,parameters:e.params,avatar:e.avatar,background:e.background,created_at:Date.now(),updated_at:Date.now(),embedding_model:e.embedding_model,memory_settings:e.memory_settings,mutation_settings:e.mutation_settings};return i(t)}return a.post(`/personas/import`,e).then(e=>e.data)},getPersonasCount:()=>t()?i({count:2}):a.get(`/personas/stats/count`).then(e=>e.data),getDefaultParameters:()=>t()?i({temperature:.7,top_p:.9,top_k:40,context_window:4096,max_tokens:1024,system_prompt:``,repeat_penalty:1.1,presence_penalty:0,frequency_penalty:0}):a.get(`/personas/defaults/parameters`).then(e=>e.data),getMemoryStatus:e=>t()?i({status:`active`,memory_count:42,last_backup:Date.now()-864e5,size_mb:2.3}):a.get(`/personas/${e}/memory/status`).then(e=>e.data),wipeMemories:e=>t()?i({deleted_count:42}):a.delete(`/personas/${e}/memory`).then(e=>e.data),backupPersona:e=>{if(t()){let t=JSON.stringify({persona_id:e,backup_date:new Date().toISOString(),data:`demo backup data`});return Promise.resolve(new Blob([t],{type:`application/json`}))}return a.get(`/personas/${e}/backup`,{responseType:`blob`}).then(e=>e.data)},exportPersonaDNA:e=>{if(t()){let t=JSON.stringify({persona_id:e,export_date:new Date().toISOString(),dna:`demo DNA data`,memories:[],learned_behaviors:{}});return Promise.resolve(new Blob([t],{type:`application/json`}))}return a.get(`/personas/${e}/export/dna`,{responseType:`blob`}).then(e=>e.data)},importPersonaDNA:e=>{if(t()){let e={id:`demo-dna-`+Date.now(),user_id:`default`,name:`Imported Persona`,description:`Persona imported from DNA`,model:`llama3.2:latest`,parameters:{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},created_at:Date.now(),updated_at:Date.now()};return i(e)}let n=new FormData;return n.append(`dnaFile`,e),a.post(`/personas/import/dna`,n).then(e=>e.data)},downloadPersona:async(e,t)=>{try{let n=await H.exportPersona(e),r=new Blob([JSON.stringify(n,null,2)],{type:`application/json`}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=`${t}.json`,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(i)}catch(e){throw r.error(`Error while downloading persona:`,e),Error(`Failed to download persona: ${e instanceof Error?e.message:String(e)}`)}}},U={list:()=>t()?i([]):a.get(`/prompts`).then(e=>e.data),get:e=>a.get(`/prompts/${e}`).then(e=>e.data),create:e=>a.post(`/prompts`,e).then(e=>e.data),update:(e,t)=>a.put(`/prompts/${e}`,t).then(e=>e.data),remove:e=>a.delete(`/prompts/${e}`).then(e=>e.data),versions:e=>a.get(`/prompts/${e}/versions`).then(e=>e.data),rollback:(e,t)=>a.post(`/prompts/${e}/rollback`,{version:t}).then(e=>e.data),export:e=>a.get(`/prompts/${e}/export`).then(e=>e.data),import:(e,t)=>a.post(`/prompts/import`,{prompt:e,overwriteSlug:t?.overwriteSlug===!0}).then(e=>e.data)},W={list:()=>t()?i([]):a.get(`/skills`).then(e=>e.data),get:e=>a.get(`/skills/${e}`).then(e=>e.data),create:e=>a.post(`/skills`,e).then(e=>e.data),update:(e,t)=>a.put(`/skills/${e}`,t).then(e=>e.data),remove:e=>a.delete(`/skills/${e}`).then(e=>e.data),versions:e=>a.get(`/skills/${e}/versions`).then(e=>e.data),rollback:(e,t)=>a.post(`/skills/${e}/rollback`,{version:t}).then(e=>e.data),export:e=>a.get(`/skills/${e}/export`).then(e=>e.data),importFromUrl:(e,t)=>a.post(`/skills/import-url`,{source:e,overwriteSlug:t?.overwriteSlug===!0}).then(e=>e.data),import:(e,t)=>a.post(`/skills/import`,{skill:e,overwriteSlug:t?.overwriteSlug===!0}).then(e=>e.data),listFiles:e=>a.get(`/skills/${e}/files`).then(e=>e.data),getFile:(e,t)=>a.get(`/skills/${e}/files/content`,{params:{path:t}}).then(e=>e.data),putFile:(e,t,n)=>a.put(`/skills/${e}/files`,{path:t,content:n}).then(e=>e.data),deleteFile:(e,t)=>a.delete(`/skills/${e}/files`,{params:{path:t}}).then(e=>e.data)},ae={getCatalog:()=>t()?i({available:!1,tools:[]}):a.get(`/tools/catalog`).then(e=>e.data),listServers:()=>t()?i([]):a.get(`/tools/servers`).then(e=>e.data),getServer:e=>a.get(`/tools/servers/${e}`).then(e=>e.data),registerServer:e=>a.post(`/tools/servers`,e).then(e=>e.data),updateServer:(e,t)=>a.put(`/tools/servers/${e}`,t).then(e=>e.data),deleteServer:e=>a.delete(`/tools/servers/${e}`).then(e=>e.data),refreshServer:e=>a.post(`/tools/servers/${e}/refresh`).then(e=>e.data),overrideServerTool:(e,t,n)=>a.put(`/tools/servers/${e}/tools/${t}`,n).then(e=>e.data),setCredential:(e,t)=>a.put(`/tools/servers/${e}/credential`,{secret:t}).then(e=>e.data),deleteCredential:e=>a.delete(`/tools/servers/${e}/credential`).then(e=>e.data),listApprovals:()=>a.get(`/tools/approvals`).then(e=>e.data),decideApproval:(e,t,n)=>a.post(`/tools/approvals/${e}`,{approve:t,scope:n}).then(e=>e.data),revokeApproval:e=>a.delete(`/tools/approvals/${e}`).then(e=>e.data),getAccessMode:()=>a.get(`/tools/access`).then(e=>e.data),setAccessMode:e=>a.put(`/tools/access`,{mode:e}).then(e=>e.data)},G=e=>{let t=Date.now();return{range:{from:t-Math.max(0,e-1)*864e5,to:t,days:e},totals:{calls:0,successfulCalls:0,failedCalls:0,cancelledCalls:0,meteredCalls:0,promptTokens:0,completionTokens:0,reportedTokens:0,averageLatencyMs:0,uniqueUsers:0},series:[],plugins:[],models:[],capabilities:[]}},K={getUsage:(e=30)=>t()?i(G(e)):a.get(`/plugins/usage`,{params:{days:e}}).then(e=>e.data),getAllPlugins:()=>t()?i([]):a.get(`/plugins`).then(e=>e.data),discoverModels:e=>t()?i({models:[],outcome:`unavailable`}):a.post(`/plugins/discover/${encodeURIComponent(e)}`).then(e=>e.data),uploadPlugin:e=>{if(t())return i({},!1);let n=new FormData;return n.append(`plugin`,e),a.post(`/plugins/upload`,n).then(e=>e.data)},installPlugin:e=>t()?i({},!1):a.post(`/plugins/install`,e).then(e=>e.data),updatePlugin:(e,n)=>t()?i({},!1):a.put(`/plugins/${e}`,n).then(e=>e.data),deletePlugin:e=>t()?i(void 0):a.delete(`/plugins/${e}`).then(e=>e.data),activatePlugin:e=>t()?i(!1,!1):a.post(`/plugins/activate/${e}`).then(e=>e.data),deactivatePlugin:e=>{if(t())return i(void 0);let n=e?`/plugins/deactivate/${e}`:`/plugins/deactivate`;return a.post(n).then(e=>e.data)},getActivePlugin:()=>t()?i(null):a.get(`/plugins/active`).then(e=>e.data),getPluginStatus:()=>t()?i([]):a.get(`/plugins/status`).then(e=>e.data),exportPlugin:e=>t()?Promise.resolve(new Blob([`{}`],{type:`application/json`})):a.get(`/plugins/${e}/export`,{responseType:`blob`}).then(e=>e.data),getCredentials:()=>t()?i([]):a.get(`/plugins/credentials/all`).then(e=>e.data),setApiKey:(e,n)=>t()?i(!1,!1):a.post(`/plugins/${e}/credentials`,{api_key:n}).then(e=>e.data),deleteApiKey:e=>t()?i(!1,!1):a.delete(`/plugins/${e}/credentials`).then(e=>e.data),checkApiKey:e=>t()?i(!1):a.get(`/plugins/${e}/credentials/check`).then(e=>e.data),getVariables:e=>t()?i({}):a.get(`/plugins/${e}/variables`).then(e=>e.data),setVariables:(e,n,r=[])=>t()?i(!0):a.put(`/plugins/${e}/variables`,{variables:n,unset:r}).then(e=>e.data),resetVariables:e=>t()?i(!0):a.delete(`/plugins/${e}/variables`).then(e=>e.data)},q=`libre-webui-user-data`,J=`libre-webui-export`,oe=new Set([2,3]);function Y(e){return typeof e!=`object`||!e?JSON.stringify(e):Array.isArray(e)?`[${e.map(e=>Y(e)).join(`,`)}]`:`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${Y(e[t])}`).join(`,`)}}`}async function se(e){let{integrity:t,...n}=e,r=JSON.parse(JSON.stringify(n)),i=await globalThis.crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(Y(r)));return Array.from(new Uint8Array(i),e=>e.toString(16).padStart(2,`0`)).join(``)}function ce(e){let t;try{t=JSON.parse(e)}catch{throw Error(`Portable archive is not valid JSON.`)}if(!t||typeof t!=`object`||Array.isArray(t))throw Error(`Portable archive must contain a JSON object.`);let n=t;if(n.format===q){if(!oe.has(n.version))throw Error(`Unsupported portable archive version ${String(n.version)}.`);return n}if(n.format===J)return n;throw Error(`This file is not a Libre WebUI portable archive.`)}var le=[{key:`accountAndAuthentication`,reason:`Account and authentication records are not portable.`},{key:`providerSecrets`,reason:`Provider credentials must be configured again.`},{key:`voiceProfiles`,reason:`Voice reference audio is biometric data and is not portable.`},{key:`personasAndMemory`,reason:`Personas and persona memory are not part of archive version 3.`},{key:`generatedMedia`,reason:`Generated media library files are not portable.`},{key:`work`,reason:`Work data and volumes require a system backup.`},{key:`derivedEmbeddings`,reason:`Document embeddings can be regenerated after import.`},{key:`noteHistoryAndAttachments`,reason:`Note revision history and note attachments are not part of archive version 3.`}];function X(e,t){if(typeof File<`u`&&e instanceof File){let n=new FormData;return n.append(`archive`,e),n.append(`strategy`,t),n}return{data:e,strategy:t}}var Z={getPreferences:()=>t()?i(v()):a.get(`/preferences`).then(e=>e.data),updatePreferences:e=>t()?i(y(e)):a.put(`/preferences`,e).then(e=>e.data),setDefaultModel:(e,n,r)=>t()?i(y({defaultModel:e,defaultProviderType:n,defaultProviderId:n===`plugin`||n===`agent`?r:null})):a.put(`/preferences/default-model`,{model:e,providerType:n,providerId:r}).then(e=>e.data),setSystemMessage:e=>t()?i(y({systemMessage:e})):a.put(`/preferences/system-message`,{message:e}).then(e=>e.data),setGenerationOptions:e=>t()?i(y({generationOptions:e})):a.put(`/preferences/generation-options`,e).then(e=>e.data),setModelGenerationOptions:(e,t)=>a.put(`/preferences/model-generation-options`,{model:e,options:t}).then(e=>e.data),resetGenerationOptions:()=>t()?i(y({generationOptions:g.generationOptions})):a.post(`/preferences/generation-options/reset`).then(e=>e.data),setEmbeddingSettings:e=>t()?i(y({embeddingSettings:e})):a.put(`/preferences/embedding-settings`,e).then(e=>e.data),resetEmbeddingSettings:()=>t()?i(y({embeddingSettings:g.embeddingSettings})):a.post(`/preferences/embedding-settings/reset`).then(e=>e.data),exportData:async()=>{if(t()){let e={format:`libre-webui-user-data`,version:3,exportedAt:new Date().toISOString(),preferences:v(),sessionFolders:[],sessions:[],notes:[],knowledgeCollections:[],documents:[],exclusions:le};return i({...e,integrity:{algorithm:`sha256`,canonicalization:`libre-json-sort-v1`,digest:await se(e)}})}return a.get(`/preferences/export`).then(e=>e.data)},preflightImport:(e,n)=>t()?i({valid:!0,format:`libre-webui-user-data`,version:3,strategy:n,incoming:{sessionFolders:0,sessions:0,messages:0,notes:0,knowledgeCollections:0,documents:0,documentChunks:0},result:{format:`libre-webui-user-data`,version:3,strategy:n,sessionFolders:{imported:0,overwritten:0,skipped:0},sessions:{imported:0,overwritten:0,skipped:0},notes:{imported:0,overwritten:0,skipped:0},knowledgeCollections:{imported:0,overwritten:0,skipped:0},documents:{imported:0,overwritten:0,skipped:0},remappedIds:0,warnings:[],exclusions:[]},warnings:[],exclusions:[]}):a.post(`/preferences/import/preflight`,X(e,n)).then(e=>e.data),importData:(e,n=`skip`)=>t()?i({format:`libre-webui-user-data`,version:3,strategy:n,preferences:{imported:!0,mode:n===`overwrite`?`replace`:`merge`},sessionFolders:{imported:0,overwritten:0,skipped:0},sessions:{imported:0,overwritten:0,skipped:0},notes:{imported:0,overwritten:0,skipped:0},knowledgeCollections:{imported:0,overwritten:0,skipped:0},documents:{imported:0,overwritten:0,skipped:0},remappedIds:0,warnings:[],exclusions:[]}):a.post(`/preferences/import`,X(e,n)).then(e=>e.data)},ue={getDiagnostics:()=>a.get(`/system`).then(e=>e.data)};function Q(e,t,n){if(t)return e.find(e=>e.model===t&&(!n||e.plugin===n))}function de(e,t,n){return Q(e,t,n)||e[0]}function fe(e){return`${encodeURIComponent(e.plugin)}::${encodeURIComponent(e.model)}`}var $={getModels:()=>t()?i([{model:`tts-1`,plugin:`openai`,config:{voices:[`alloy`,`echo`,`fable`,`onyx`,`nova`,`shimmer`],default_voice:`alloy`,formats:[`mp3`,`opus`,`aac`,`flac`,`wav`],default_format:`mp3`,max_characters:4096}}]):a.get(`/tts/models`).then(e=>e.data),getPlugins:()=>t()?i([{id:`openai`,name:`OpenAI GPT`,models:[`tts-1`,`tts-1-hd`],config:{voices:[`alloy`,`echo`,`fable`,`onyx`,`nova`,`shimmer`],default_voice:`alloy`}}]):a.get(`/tts/plugins`).then(e=>e.data),getVoiceProfiles:(e={})=>t()?i([]):a.get(`/tts/voice-profiles`,{params:{pluginId:e.pluginId||void 0,model:e.model||void 0}}).then(e=>e.data),revokeVoiceProfile:async e=>t()?{success:!1,error:`Demo mode`}:(await a.post(`/tts/voice-profiles/${encodeURIComponent(e)}/revoke`)).data,deleteVoiceProfile:async e=>{t()||await a.delete(`/tts/voice-profiles/${encodeURIComponent(e)}`)},getVoices:e=>t()?i({voices:[`alloy`,`echo`,`fable`,`onyx`,`nova`,`shimmer`],default_voice:`alloy`,formats:[`mp3`,`opus`,`aac`,`flac`,`wav`],default_format:`mp3`,max_characters:4096,supports_streaming:!1,supports_voice_cloning:!1,clone_requires_transcript:!1}):a.get(`/tts/voices/${e}`).then(e=>e.data),generateBase64:e=>{if(t())return i({audio:``,format:e.response_format||`mp3`,mimeType:`audio/mpeg`,size:0});let n={...e,pluginId:e.pluginId||void 0};return a.post(`/tts/generate-base64`,n).then(e=>e.data)},generate:async(e,n={})=>{if(t())return new Blob([],{type:`audio/mpeg`});let r={...e,pluginId:e.pluginId||void 0};return(await a.post(`/tts/generate`,r,{responseType:`blob`,signal:n.signal})).data},speak:async(e,t={})=>{try{t.onStart?.();let n=await $.generateBase64({model:t.model||`tts-1`,pluginId:t.pluginId,input:e,voice:t.voice,voiceProfileId:t.voiceProfileId,speed:t.speed,response_format:t.responseFormat});if(!n.success||!n.data?.audio)throw Error(n.message||`Failed to generate speech`);let r=`data:${n.data.mimeType};base64,${n.data.audio}`,i=new Audio(r);return i.onended=()=>t.onEnd?.(),i.onerror=()=>t.onError?.(Error(`Audio playback failed`)),await i.play(),i}catch(e){let n=e instanceof Error?e:Error(`Unknown error`);return t.onError?.(n),null}}},pe={getModels:()=>t()?i([]):a.get(`/stt/models`).then(e=>e.data),transcribe:async(e,t,n={})=>{let r=new FormData,i=me(e.type);r.append(`audio`,e,`recording.${i}`),r.append(`model`,t.model),r.append(`pluginId`,t.plugin),n.language&&r.append(`language`,n.language);let o=await a.post(`/stt/transcribe`,r,{signal:n.signal});if(!o.data.success||!o.data.data)throw Error(o.data.message||o.data.error||`Transcription failed`);return o.data.data}};function me(e){let t=e.split(`;`,1)[0].toLowerCase();return t.includes(`webm`)?`webm`:t.includes(`ogg`)?`ogg`:t.includes(`wav`)?`wav`:t.includes(`flac`)?`flac`:t.includes(`mp4`)||t.includes(`m4a`)?`m4a`:`mp3`}var he=e({MODELS_CHANGED_EVENT:()=>M,agentCliApi:()=>o,personaApi:()=>H,preferencesApi:()=>Z});export{ee as A,E as C,ne as D,C as E,u as F,l as I,d as L,b as M,f as N,S as O,c as P,D as S,w as T,M as _,de as a,ie as b,Z as c,ae as d,W as f,V as g,B as h,fe as i,te as j,x as k,ce as l,H as m,pe as n,$ as o,U as p,Q as r,ue as s,he as t,K as u,P as v,T as w,re as x,A as y};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/api-D7Ff5M2Q.js","js/rolldown-runtime-hePW80VL.js","js/logger-DSXjF4ye.js","js/config-BqZ5304Q.js","js/workApi-CcprMH_1.js","js/router-vendor-CbexJIsv.js","js/markdown-core-BK7WVOb7.js","js/utils-vendor-9bQ62WeD.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{a as e}from"./router-vendor-CbexJIsv.js";import{o as t,t as n}from"./utils-vendor-9bQ62WeD.js";import{i as r,r as i,t as a}from"./logger-DSXjF4ye.js";var o=`dark`,s=`blue`,c=`#4176e6`,l=[{id:`violet`,label:`Violet`,color:`#7c3aed`,foreground:`#ffffff`},{id:`blue`,label:`Blue`,color:`#4176e6`,foreground:`#ffffff`},{id:`cyan`,label:`Cyan`,color:`#0e7490`,foreground:`#ffffff`},{id:`teal`,label:`Teal`,color:`#0f766e`,foreground:`#ffffff`},{id:`emerald`,label:`Emerald`,color:`#15803d`,foreground:`#ffffff`},{id:`amber`,label:`Coral`,color:`#ff7b52`,foreground:`#3d120c`},{id:`rose`,label:`Rose`,color:`#e11d48`,foreground:`#ffffff`},{id:`slate`,label:`Slate`,color:`#475569`,foreground:`#ffffff`}],u=[`50`,`100`,`200`,`300`,`400`,`500`,`600`,`700`,`800`,`900`,`950`],d=[`25`,...u],f=[`canvas`,`sidebar`,`surface`,`surface-subtle`,`surface-raised`,`surface-overlay`,`surface-inverse`,`ink`,`ink-muted`,`ink-subtle`,`ink-inverse`,`line`,`line-strong`],p={multiplier:.24,minimum:6,maximum:24},m={multiplier:.36,minimum:6,maximum:32},h={25:99,50:97,100:94,200:88,300:80,400:66,500:48,600:36,700:27,800:18,900:11,950:6},g={25:13,50:4,100:7,200:10,300:16,400:27,500:46,600:65,700:82,800:89,900:95,950:99},_={25:6,50:0,100:3,200:6,300:12,400:24,500:46,600:65,700:82,800:89,900:95,950:99},v={canvas:{lightness:96,saturationFactor:1},sidebar:{lightness:94,saturationFactor:1},surface:{lightness:98,saturationFactor:.9},"surface-subtle":{lightness:93,saturationFactor:1},"surface-raised":{lightness:99,saturationFactor:.8},"surface-overlay":{lightness:100,saturationFactor:0},"surface-inverse":{lightness:10,saturationFactor:.7},ink:{lightness:10,saturationFactor:.45},"ink-muted":{lightness:38,saturationFactor:.35},"ink-subtle":{lightness:54,saturationFactor:.4},"ink-inverse":{lightness:98,saturationFactor:.4},line:{lightness:86,saturationFactor:.8},"line-strong":{lightness:75,saturationFactor:.65}},y={canvas:{lightness:5,saturationFactor:.9},sidebar:{lightness:8,saturationFactor:1},surface:{lightness:7,saturationFactor:.9},"surface-subtle":{lightness:9,saturationFactor:1},"surface-raised":{lightness:11,saturationFactor:1},"surface-overlay":{lightness:13,saturationFactor:1},"surface-inverse":{lightness:96,saturationFactor:.35},ink:{lightness:96,saturationFactor:.3},"ink-muted":{lightness:67,saturationFactor:.35},"ink-subtle":{lightness:48,saturationFactor:.4},"ink-inverse":{lightness:7,saturationFactor:.45},line:{lightness:18,saturationFactor:.8},"line-strong":{lightness:28,saturationFactor:.65}},b={canvas:{lightness:0,saturationFactor:0},sidebar:{lightness:0,saturationFactor:0},surface:{lightness:0,saturationFactor:0},"surface-subtle":{lightness:4,saturationFactor:1},"surface-raised":{lightness:7,saturationFactor:1},"surface-overlay":{lightness:10,saturationFactor:1},"surface-inverse":{lightness:96,saturationFactor:.35},ink:{lightness:96,saturationFactor:.3},"ink-muted":{lightness:67,saturationFactor:.35},"ink-subtle":{lightness:48,saturationFactor:.4},"ink-inverse":{lightness:0,saturationFactor:0},line:{lightness:11,saturationFactor:.8},"line-strong":{lightness:20,saturationFactor:.65}},x={violet:{50:`#f5f3ff`,100:`#ede9fe`,200:`#ddd6fe`,300:`#c4b5fd`,400:`#a78bfa`,500:`#7c3aed`,600:`#6d28d9`,700:`#5b21b6`,800:`#4c1d95`,900:`#3b0764`,950:`#2e1065`},blue:{50:`#edf3fe`,100:`#e4edfd`,200:`#d3e2ff`,300:`#b7c8fe`,400:`#679efe`,500:`#4176e6`,600:`#4868b2`,700:`#2f4c8f`,800:`#34415b`,900:`#283142`,950:`#1e2635`},cyan:{50:`#ecfeff`,100:`#cffafe`,200:`#a5f3fc`,300:`#67e8f9`,400:`#22d3ee`,500:`#0e7490`,600:`#155e75`,700:`#164e63`,800:`#083344`,900:`#092f3f`,950:`#062634`},teal:{50:`#f0fdfa`,100:`#ccfbf1`,200:`#99f6e4`,300:`#5eead4`,400:`#2dd4bf`,500:`#0f766e`,600:`#0f625d`,700:`#115e59`,800:`#134e4a`,900:`#042f2e`,950:`#022c22`},emerald:{50:`#ecfdf5`,100:`#d1fae5`,200:`#a7f3d0`,300:`#6ee7b7`,400:`#34d399`,500:`#15803d`,600:`#166534`,700:`#14532d`,800:`#064e3b`,900:`#052e16`,950:`#022c22`},amber:{50:`#fff5f1`,100:`#ffe8df`,200:`#ffd0c2`,300:`#ffae96`,400:`#ff9273`,500:`#ff7b52`,600:`#c94a27`,700:`#a83a1f`,800:`#87301f`,900:`#70291e`,950:`#3d120c`},rose:{50:`#fff1f2`,100:`#ffe4e6`,200:`#fecdd3`,300:`#fda4af`,400:`#fb7185`,500:`#e11d48`,600:`#be123c`,700:`#9f1239`,800:`#881337`,900:`#4c0519`,950:`#2d0714`},slate:{50:`#f8fafc`,100:`#f1f5f9`,200:`#e2e8f0`,300:`#cbd5e1`,400:`#94a3b8`,500:`#475569`,600:`#334155`,700:`#1e293b`,800:`#0f172a`,900:`#020617`,950:`#010313`}},S={50:97,100:94,200:88,300:76,400:64,500:42,600:34,700:27,800:21,900:16,950:10},C=(e,t,n)=>Math.min(Math.max(e,t),n),w=e=>{if(!e)return null;let t=e.trim().match(/^#?([0-9a-f]{3}|[0-9a-f]{6})$/i);if(!t)return null;let n=t[1];return`#${(n.length===3?n.split(``).map(e=>`${e}${e}`).join(``):n).toLowerCase()}`},T=e=>{let t=w(e)||`#4176e6`,n=parseInt(t.slice(1),16);return{r:n>>16&255,g:n>>8&255,b:n&255}},E=(e,t,n)=>`#${[e,t,n].map(e=>C(Math.round(e),0,255).toString(16).padStart(2,`0`)).join(``)}`,D=(e,t,n)=>{let r=e/255,i=t/255,a=n/255,o=Math.max(r,i,a),s=Math.min(r,i,a),c=(o+s)/2;if(o===s)return{h:0,s:0,l:c*100};let l=o-s,u=c>.5?l/(2-o-s):l/(o+s),d=0;return d=o===r?(i-a)/l+(i<a?6:0):o===i?(a-r)/l+2:(r-i)/l+4,{h:d*60,s:u*100,l:c*100}},O=(e,t,n)=>{let r=C(t,0,100)/100,i=C(n,0,100)/100,a=(1-Math.abs(2*i-1))*r,o=(e%360+360)%360,s=a*(1-Math.abs(o/60%2-1)),c=i-a/2,l=0,u=0,d=0;return o<60?(l=a,u=s):o<120?(l=s,u=a):o<180?(u=a,d=s):o<240?(u=s,d=a):o<300?(l=s,d=a):(l=a,d=s),E((l+c)*255,(u+c)*255,(d+c)*255)},k=e=>{let{r:t,g:n,b:r}=T(e),i=[t,n,r].map(e=>{let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4});return i[0]*.2126+i[1]*.7152+i[2]*.0722},A=(e,t)=>{let n=k(e),r=k(t),i=Math.max(n,r),a=Math.min(n,r);return(i+.05)/(a+.05)},j=(e,t,n)=>{let r=n,i=O(e,t,r);for(;A(`#ffffff`,i)<4.5&&r>12;)r-=2,i=O(e,t,r);return i},M=e=>{let{r:t,g:n,b:r}=T(w(e)||`#4176e6`),{h:i,s:a}=D(t,n,r),o=a<8?a:C(a,42,88);return u.reduce((e,t)=>{let n=S[t],r=Number(t)<300?o*.72:o;return e[t]=t===`500`||t===`600`?j(i,r,n):O(i,r,n),e},{})},N=e=>{let t=e?.mode===`light`?`light`:e?.mode===`amoled`?`amoled`:o,n=e?.accent===`custom`?`custom`:e?.accent,r=l.some(e=>e.id===n)?n:s,i=w(e?.customAccent)||`#4176e6`;return{mode:t,adaptToAccent:e?.adaptToAccent===!0,accent:n===`custom`?`custom`:r,customAccent:i}},P=()=>N({mode:o}),F=e=>{let t=N(e);return t.accent===`custom`?M(t.customAccent):x[t.accent||`blue`]},I=e=>{let t=N(e);return t.accent===`custom`?t.customAccent||`#4176e6`:l.find(e=>e.id===t.accent)?.color||`#4176e6`},L=(e,t,n)=>t===0||e<8?e*t:C(e*n.multiplier*t,n.minimum*t,n.maximum*t),R=(e,t,n,r)=>d.reduce((i,a)=>(i[a]=O(e,L(t,1,r),n[a]),i),{}),z=(e,t,n,r)=>f.reduce((i,a)=>{let o=n[a];return i[a]=O(e,L(t,o.saturationFactor,r),o.lightness),i},{}),B=(e,t,n)=>{let{r,g:i,b:a}=T(n);e.style.setProperty(t,`${r} ${i} ${a}`)},V=e=>{for(let t of d)e.style.removeProperty(`--color-gray-${t}`),e.style.removeProperty(`--color-dark-${t}`);for(let t of f)e.style.removeProperty(`--color-${t}`)},H=(e,t)=>{let{r:n,g:r,b:i}=T(I(t)),{h:a,s:o}=D(n,r,i),s=t.mode===`light`?m:p,c=R(a,o,h,s),l=R(a,o,t.mode===`amoled`?_:g,p),u=z(a,o,t.mode===`light`?v:t.mode===`amoled`?b:y,s);for(let t of d)B(e,`--color-gray-${t}`,c[t]),B(e,`--color-dark-${t}`,l[t]);for(let t of f)B(e,`--color-${t}`,u[t])},U=e=>{if(typeof document>`u`)return;let t=N(e),n=document.documentElement,r=F(t);n.classList.remove(`dark`,`amoled`,`ophelia`),t.mode!==`light`&&n.classList.add(`dark`),t.mode===`amoled`&&n.classList.add(`amoled`),n.style.colorScheme=t.mode===`light`?`light`:`dark`,n.dataset.accent=t.accent||`blue`,n.dataset.themeStyle=t.adaptToAccent?`accent`:`default`;for(let e of u){let{r:t,g:i,b:a}=T(r[e]),o=`${t} ${i} ${a}`;n.style.setProperty(`--color-primary-${e}`,o),n.style.setProperty(`--color-accent-${e}`,o)}t.adaptToAccent?H(n,t):V(n)},W=a(`store:app-store`),G=250,K=null,q=t()(n((t,n)=>({theme:P(),themeSyncPending:!1,syncThemePreference:async i=>{if(K&&(clearTimeout(K),K=null),!(!r()&&!localStorage.getItem(`auth-token`)))try{let{preferencesApi:r}=await e(async()=>{let{preferencesApi:e}=await import(`./api-D7Ff5M2Q.js`).then(e=>e.t);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5,6,7]));if(!(await r.updatePreferences({theme:i})).success){W.warn(`Failed to save theme preference to backend`);return}let a=N(n().theme),o=N(i);a.mode===o.mode&&a.adaptToAccent===o.adaptToAccent&&a.accent===o.accent&&a.customAccent===o.customAccent?t({themeSyncPending:!1}):(t({themeSyncPending:!0}),n().scheduleThemePreferenceSync())}catch(e){W.warn(`Failed to save theme preference to backend:`,e)}},scheduleThemePreferenceSync:()=>{K&&clearTimeout(K),K=setTimeout(()=>{K=null,n().syncThemePreference(N(n().theme))},G)},setTheme:e=>{let n=N(e);t(e=>({theme:n,preferences:{...e.preferences,theme:n}})),U(n)},updateTheme:e=>{let r=N(e);n().setTheme(r),t({themeSyncPending:!0}),n().scheduleThemePreferenceSync()},toggleTheme:()=>{let e=n().theme,t=e.mode===`light`?`dark`:`light`;n().updateTheme({...e,mode:t})},sidebarOpen:!0,sidebarCompact:!1,setSidebarOpen:e=>t({sidebarOpen:e}),setSidebarCompact:e=>t({sidebarCompact:e}),toggleSidebar:()=>t(e=>({sidebarOpen:!e.sidebarOpen})),toggleSidebarCompact:()=>t(e=>({sidebarCompact:!e.sidebarCompact})),artifactPanelOpen:!1,artifactPanelArtifact:null,artifactPanelWidth:600,artifactPanelResizing:!1,openArtifactPanel:e=>t({artifactPanelOpen:!0,artifactPanelArtifact:e}),closeArtifactPanel:()=>t({artifactPanelOpen:!1,artifactPanelArtifact:null}),setArtifactPanelWidth:e=>t({artifactPanelWidth:e}),setArtifactPanelResizing:e=>t({artifactPanelResizing:e}),preferences:{theme:P(),defaultModel:``,defaultProviderType:null,defaultProviderId:null,visionModel:``,visionProviderType:null,visionProviderId:null,systemMessage:``,generationOptions:{temperature:.7,top_p:.9,top_k:40,num_predict:1024},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.3},titleSettings:{autoTitle:!1,taskModel:``,taskProviderType:null,taskProviderId:null},showUsername:!1,hapticFeedbackEnabled:!1,workRemoteProviderDisclosureDismissed:!1,backgroundSettings:{enabled:!1,imageUrl:``,blurAmount:10,opacity:.6}},setPreferences:e=>{let n=e.theme?N(e.theme):null;t(t=>({...n&&{theme:n},preferences:{...t.preferences,...e,...n&&{theme:n}}})),n&&U(n)},loadPreferences:async()=>{try{let{preferencesApi:r}=await e(async()=>{let{preferencesApi:e}=await import(`./api-D7Ff5M2Q.js`).then(e=>e.t);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5,6,7])),i=await r.getPreferences();if(i.success&&i.data){let e=i.data,r=n().themeSyncPending?N(n().theme):null;n().setPreferences(r?{...e,theme:r}:e),t({backgroundImage:e.backgroundSettings?.imageUrl||null}),r&&n().syncThemePreference(r)}}catch(e){W.warn(`Failed to load preferences from backend:`,e)}},isGenerating:!1,setIsGenerating:e=>t({isGenerating:e}),pinnedAdminShortcuts:[],toggleAdminShortcut:e=>t(t=>({pinnedAdminShortcuts:t.pinnedAdminShortcuts.includes(e)?t.pinnedAdminShortcuts.filter(t=>t!==e):[...t.pinnedAdminShortcuts,e]})),hasSeenSettingsNotification:!1,markSettingsNotificationAsSeen:()=>t({hasSeenSettingsNotification:!0}),isDemoMode:r(),demoConfig:i(),setDemoMode:e=>{t({isDemoMode:e,demoConfig:i()})},backgroundImage:null,setBackgroundImage:async r=>{if(t({backgroundImage:r}),r){let t=n(),i={...t.preferences,backgroundSettings:{enabled:!0,imageUrl:r,blurAmount:t.preferences.backgroundSettings?.blurAmount||10,opacity:t.preferences.backgroundSettings?.opacity||.6}};t.setPreferences(i);try{let{preferencesApi:t}=await e(async()=>{let{preferencesApi:e}=await import(`./api-D7Ff5M2Q.js`).then(e=>e.t);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5,6,7]));await t.updatePreferences({backgroundSettings:i.backgroundSettings})}catch(e){W.warn(`Failed to save background settings to backend:`,e)}}},uploadBackgroundImage:async e=>{try{let t=new FileReader;return new Promise((r,i)=>{t.onload=async e=>{try{let t=e.target?.result;await n().setBackgroundImage(t),r()}catch(e){i(e)}},t.onerror=i,t.readAsDataURL(e)})}catch(e){throw W.error(`Failed to upload background image:`,e),e}},removeBackgroundImage:async()=>{t({backgroundImage:null});let r=n(),i={enabled:!1,imageUrl:``,blurAmount:r.preferences.backgroundSettings?.blurAmount||10,opacity:r.preferences.backgroundSettings?.opacity||.6};r.setPreferences({backgroundSettings:i});try{let{preferencesApi:t}=await e(async()=>{let{preferencesApi:e}=await import(`./api-D7Ff5M2Q.js`).then(e=>e.t);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5,6,7]));await t.updatePreferences({backgroundSettings:i})}catch(e){W.warn(`Failed to save background removal to backend:`,e)}},clearUserState:()=>{let e=P();K&&(clearTimeout(K),K=null),t({theme:e,themeSyncPending:!1,backgroundImage:null,preferences:{theme:e,defaultModel:``,defaultProviderType:null,defaultProviderId:null,visionModel:``,visionProviderType:null,visionProviderId:null,systemMessage:``,generationOptions:{temperature:.7,top_p:.9,top_k:40,num_predict:1024},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.3},titleSettings:{autoTitle:!1,taskModel:``,taskProviderType:null,taskProviderId:null},showUsername:!1,workRemoteProviderDisclosureDismissed:!1,backgroundSettings:{enabled:!1,imageUrl:``,blurAmount:10,opacity:.6}}}),U(e)}}),{name:`libre-webui-app-state`,onRehydrateStorage:()=>e=>{e&&e.setTheme(N(e.theme))},partialize:e=>{let{backgroundSettings:t,...n}=e.preferences;return{theme:e.theme,themeSyncPending:e.themeSyncPending,sidebarOpen:e.sidebarOpen,sidebarCompact:e.sidebarCompact,artifactPanelWidth:e.artifactPanelWidth,pinnedAdminShortcuts:e.pinnedAdminShortcuts,preferences:n,hasSeenSettingsNotification:e.hasSeenSettingsNotification}}}));typeof window<`u`&&(()=>{let{theme:e,setTheme:t}=q.getState();t(e)})();export{I as a,c as i,l as n,N as o,s as r,q as t};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e={common:{loading:`جاري التحميل...`,save:`حفظ`,saving:`جاري الحفظ...`,cancel:`إلغاء`,delete:`حذف`,edit:`تعديل`,close:`إغلاق`,back:`رجوع`,next:`التالي`,confirm:`تأكيد`,error:`خطأ`,success:`نجاح`,warning:`تحذير`,or:`أو`,optional:`اختياري`,enabled:`مُفعّل`,disabled:`معطّل`,on:`تشغيل`,off:`إيقاف`,yes:`نعم`,no:`لا`,search:`بحث`,noResults:`لم يتم العثور على نتائج`,retry:`إعادة المحاولة`,refresh:`تحديث`,download:`تحميل`,upload:`رفع`,export:`تصدير`,import:`استيراد`,reset:`إعادة تعيين`,apply:`تطبيق`,clear:`مسح`,all:`الكل`,none:`لا شيء`,default:`افتراضي`,custom:`مخصص`,remove:`إزالة`,home:`الرئيسية`,more:`أكثر`},brand:{name:`Libre WebUI`,shortName:`Libre`},auth:{login:{title:`مرحباً بعودتك`,subtitle:`سجّل الدخول إلى حسابك للمتابعة`,username:`اسم المستخدم`,usernamePlaceholder:`أدخل اسم المستخدم`,password:`كلمة المرور`,passwordPlaceholder:`أدخل كلمة المرور`,signIn:`تسجيل الدخول`,signingIn:`جاري تسجيل الدخول...`,noAccount:`ليس لديك حساب؟`,signUpHere:`سجّل هنا`,loginSuccess:`تم تسجيل الدخول بنجاح!`,loginFailed:`فشل تسجيل الدخول`,checkCredentials:`فشل تسجيل الدخول. يرجى التحقق من بيانات الاعتماد.`,approvalPending:`حسابك في انتظار موافقة المسؤول.`,enterBoth:`يرجى إدخال اسم المستخدم وكلمة المرور`,githubSuccess:`تم تسجيل الدخول عبر GitHub بنجاح!`,githubFailed:`فشلت مصادقة GitHub`,githubVerifyFailed:`فشل التحقق من مصادقة GitHub`,verificationFailed:`فشل التحقق الأمني. حدّث الصفحة وحاول مجددًا.`},signup:{title:`إنشاء حساب`,subtitle:`سجّل للحصول على حساب جديد`,username:`اسم المستخدم`,usernamePlaceholder:`اختر اسم مستخدم`,email:`البريد الإلكتروني`,emailPlaceholder:`your@email.com`,password:`كلمة المرور`,passwordPlaceholder:`اختر كلمة مرور`,confirmPassword:`تأكيد كلمة المرور`,confirmPasswordPlaceholder:`أكّد كلمة المرور`,createAccount:`إنشاء حساب`,creatingAccount:`جاري إنشاء الحساب...`,hasAccount:`لديك حساب بالفعل؟`,signInHere:`سجّل الدخول هنا`,signupSuccess:`تم إنشاء الحساب بنجاح!`,approvalPending:`تم استلام التسجيل. يجب أن يوافق المسؤول على حسابك.`,awaitingApproval:`في انتظار الموافقة`,awaitingApprovalDescription:`تم إنشاء حسابك، ولكن يجب أن يقوم المسؤول بتفعيله قبل أن تتمكن من تسجيل الدخول.`,backToSignIn:`العودة لتسجيل الدخول`,signupFailed:`فشل التسجيل`,tryAgain:`فشل التسجيل. يرجى المحاولة مرة أخرى.`,usernameRequired:`اسم المستخدم وكلمة المرور مطلوبان`,passwordMismatch:`كلمات المرور غير متطابقة`},logout:{button:`تسجيل الخروج`,success:`تم تسجيل الخروج بنجاح`},oauth:{continueWith:`المتابعة مع {{provider}}`,connectingTo:`جاري الاتصال بـ {{provider}}...`,github:`GitHub`,huggingFace:`Hugging Face`},checkingAuth:`جاري التحقق من المصادقة...`,welcome:`مرحباً`,noEmail:`لم يتم تقديم بريد إلكتروني`,role:`الدور`,id:`المعرف`,userId:`معرف المستخدم`,signInDescription:`سجّل الدخول بحساب GitHub الخاص بك للمتابعة`,signInWithGitHub:`تسجيل الدخول بواسطة GitHub`,jwtActive:`مصادقة JWT نشطة`,jwtDescription:`مصادقة JWT مع GitHub OAuth`,github:`GitHub`,provider:`المزود`,tagline:`يجب أن يخضع مكدس الذكاء الاصطناعي الخاص بك لك.`,selfHosted:`مستضاف ذاتيًا · Apache 2.0`,highlights:{local:{title:`محلي أولاً`,body:`تبقى محادثاتك وملفاتك على الجهاز الذي تشغل هذا عليه.`},providers:{title:`أي مزود`,body:`نماذج محلية عبر Ollama، بالإضافة إلى المزودين عن بُعد الذين تختار إضافتهم.`},work:{title:`عمل معزول`,body:`امنح النموذج مساحة عمل معزولة بالملفات والطرفية والمعاينة.`}},oidc:{defaultProviderName:`تسجيل الدخول الموحد`},mfa:{sectionTitle:`المصادقة الثنائية`,sectionDescription:`احمِ حسابك بتطبيق مصادقة ومفاتيح مرور.`,totpTitle:`تطبيق المصادقة`,totpEnabledHint:`مفعّلة. رموز الاسترداد غير المستخدمة: {{count}}`,totpDisabledHint:`أضف خطوة ثانية لتسجيل الدخول بكلمة المرور عبر رمز لمرة واحدة.`,enableButton:`تفعيل`,disableButton:`تعطيل`,activateButton:`تأكيد`,regenerateCodes:`رموز استرداد جديدة`,confirmWithCode:`أكّد برمز من تطبيقك أو برمز استرداد`,enabled:`تم تفعيل المصادقة الثنائية.`,disabled:`تم تعطيل المصادقة الثنائية.`,invalidCode:`هذا الرمز غير صالح.`,enrollFailed:`تعذّر بدء الإعداد.`,challengeExpired:`انتهت صلاحية طلب تسجيل الدخول. سجّل الدخول مجددًا.`,setupTitle:`إعداد المصادقة الثنائية`,setupSubtitle:`يتطلب هذا الخادم خطوة تسجيل دخول ثانية. أضف السر إلى تطبيق المصادقة للمتابعة.`,verifyTitle:`أدخل الرمز`,verifyHint:`أدخل الرمز المكوّن من 6 أرقام من تطبيق المصادقة، أو رمز استرداد.`,secretHint:`أضف هذا السر إلى تطبيق المصادقة، ثم أكّد بالرمز الحالي.`,openAuthenticator:`فتح في تطبيق المصادقة`,codeLabel:`رمز من 6 أرقام`,codeOrRecoveryLabel:`رمز أو رمز استرداد`,codePlaceholder:`123456`,verifyButton:`تحقّق`,backToSignIn:`العودة إلى تسجيل الدخول`,recoveryCodesTitle:`رموز الاسترداد`,recoveryCodesHint:`احفظ هذه الرموز في مكان آمن. كل رمز يتيح تسجيل الدخول مرة واحدة إذا فقدت تطبيق المصادقة.`,recoveryCodesSaved:`حفظت رموز الاسترداد`,recoveryCodesRegenerated:`تم إنشاء رموز استرداد جديدة. الرموز القديمة لم تعد صالحة.`},passkeys:{sectionTitle:`مفاتيح المرور`,sectionDescription:`سجّل الدخول دون كلمة مرور باستخدام قفل شاشة جهازك أو مفتاح أمان.`,addButton:`إضافة مفتاح مرور`,empty:`لا توجد مفاتيح مرور بعد.`,unnamed:`مفتاح مرور`,createdAt:`أُضيف`,lastUsedAt:`آخر استخدام`,removeButton:`إزالة مفتاح المرور`,registered:`تمت إضافة مفتاح المرور.`,registerFailed:`تعذّرت إضافة مفتاح المرور.`,removed:`تمت إزالة مفتاح المرور.`,removeFailed:`تعذّرت إزالة مفتاح المرور.`,signInButton:`تسجيل الدخول بمفتاح مرور`,signInFailed:`فشل تسجيل الدخول بمفتاح المرور.`}},setup:{welcome:{title:`مرحباً بك في Libre WebUI`,subtitle:`لنبدأ`,description:`قم بإعداد Libre WebUI الخاص بك في خطوات قليلة`,createAdmin:`إنشاء حساب المسؤول`,features:{secure:{title:`آمن وخاص`,description:`محادثاتك تبقى على جهازك`},fast:{title:`سريع ومتجاوب`,description:`محسّن للسرعة والأداء`},openSource:{title:`مفتوح المصدر`,description:`برنامج مجاني ومفتوح المصدر`}}},admin:{title:`إنشاء حساب المسؤول`,subtitle:`إعداد المسؤول`,description:`أنشئ أول حساب مسؤول لـ Libre WebUI الخاص بك`,usernamePlaceholder:`أدخل اسم المسؤول`,passwordPlaceholder:`أدخل كلمة مرور (12 حرفًا على الأقل)`,confirmPlaceholder:`أكّد كلمة المرور`,creating:`جاري الإنشاء...`,createAdmin:`إنشاء المسؤول`,success:`تم إنشاء حساب المسؤول بنجاح!`,failed:`فشل إنشاء حساب المسؤول`,approvalUnexpected:`تعذر تفعيل المسؤول الأولي. يرجى المحاولة مرة أخرى.`,fillAllFields:`يرجى ملء جميع الحقول`,note:`سيكون هذا حساب المسؤول الرئيسي لـ Libre WebUI الخاص بك`},encryptionKey:{title:`احفظ مفتاح التشفير`,subtitle:`مهم: احفظ هذا المفتاح`,description:`يحمي مفتاح التشفير هذا بياناتك الحساسة. احفظه بأمان - ستحتاجه إذا احتجت لاستعادة قاعدة البيانات.`,warning:`تحذير`,warningText:`إذا فقدت هذا المفتاح واحتجت لاستعادة قاعدة البيانات، ستكون بياناتك المشفرة (مفاتيح API، التفضيلات) غير قابلة للاسترداد.`,label:`مفتاح التشفير الخاص بك`,loading:`جاري التحميل...`,copyToClipboard:`نسخ إلى الحافظة`,copied:`تم نسخ مفتاح التشفير إلى الحافظة!`,copyFailed:`فشل نسخ المفتاح إلى الحافظة`,envNote:`هذا المفتاح محفوظ أيضاً في ملف backend/.env كـ ENCRYPTION_KEY`,acknowledgment:`لقد حفظت مفتاح التشفير في مكان آمن وأفهم أن فقدانه قد يؤدي إلى فقدان البيانات.`,confirmRequired:`يرجى التأكيد على أنك حفظت مفتاح التشفير`,continue:`المتابعة إلى Libre WebUI`}},chat:JSON.parse(`{"greeting":{"morning":"صباح الخير","afternoon":"مساء الخير","evening":"مساء الخير","night":"تصبح على خير"},"followUp":"متابعة","welcome":{"helpToday":"كيف يمكنني مساعدتك اليوم؟","helpTonight":"كيف يمكنني مساعدتك الليلة؟","variety":{"create":{"title":"ماذا نصنع؟","subtitle":"ابدأ بفكرة، أو رسم أولي، أو مشكلة عنيدة."},"explore":{"title":"من أين نبدأ؟","subtitle":"هات السؤال الذي لا يكفّ عن العودة إلى ذهنك."},"imagine":{"title":"ما الذي تتخيّله؟","subtitle":"يمكننا أن نمنحه شكلاً معًا."},"focus":{"title":"ما الذي يستحق انتباهك؟","subtitle":"لنجعل الخطوة التالية واضحة."},"untangle":{"title":"ما الذي يبدو معقّدًا؟","subtitle":"أعطني النسخة الفوضوية أولًا."},"momentum":{"title":"لننطلق عندما تكون جاهزًا.","subtitle":"تابع فكرة أو خطة أو خيطًا تركته دون إكمال."},"open":{"title":"ما الذي يشغل بالك؟","subtitle":"خاطرة صغيرة أو مشروع طموح. كلاهما مناسب."},"challenge":{"title":"ما الذي نحاول حلّه؟","subtitle":"أخبرني بما لا يعمل بعد."},"draft":{"title":"لنبدأ من مكان ما.","subtitle":"لا يشترط أن يكون مصقولًا."},"possibility":{"title":"إلى ماذا يمكن أن يتحول هذا؟","subtitle":"أرني المادة الخام."},"unexpected":{"title":"لنصنع شيئًا غير متوقع.","subtitle":"أعطني قيدًا، أو مزاجًا، أو فكرة لم تكتمل بعد."}}},"input":{"placeholder":"أرسل رسالة","messagePlaceholder":"رسالة...","attachImages":"إرفاق صور","attachments":"المرفقات والميزات المتقدمة","sendMessage":"إرسال الرسالة","stopGeneration":"إيقاف التوليد","menu":{"uploadImages":"رفع صور","attachDocument":"إرفاق مستند","attachWebpage":"إرفاق صفحة ويب","structuredOutput":"إخراج منظم","attach":"إرفاق","documentAttached":"تم إرفاق المستند","webpageAttached":"تم إرفاق صفحة الويب","attachFailed":"تعذر الإرفاق","attachKnowledge":"إرفاق معرفة","noCollections":"لا توجد مجموعات بعد — أنشئ واحدة في الإعدادات ← المستندات"},"voiceInput":"إدخال صوتي","voiceStop":"إيقاف الاستماع","transcriptionSource":"مصدر التعرّف على الكلام","browserSpeech":"خدمة التعرّف على الكلام في المتصفح","providerTranscriptionDisclosure":"تسجيل الصوت وإرساله إلى {{provider}} لتحويله إلى نص","webSearchOn":"البحث في الويب مفعّل — تستخدم الردود نتائج حية","webSearchOff":"ابحث في الويب لهذه الرسالة","toolsOn":"الأدوات مفعّلة — يمكن للنموذج استدعاء الأدوات المعتمدة","toolsOff":"اسمح للنموذج باستدعاء الأدوات في هذه الرسالة","thinkingOn":"التفكير مفعّل ({{level}})","thinkingOff":"فكّر قبل الإجابة"},"session":{"new":"محادثة جديدة","work":"العمل","chat":"محادثة","private":"خاص","incognito":"دردشة مخفية","privateMode":"الوضع الخاص","privateDescription":"لن يتم حفظ هذه المحادثة","privateTooltip":"ابدأ محادثة خاصة لن يتم حفظها","deleteConfirm":"هل أنت متأكد من حذف هذه المحادثة؟","generatingTitle":"جاري توليد العنوان","noChats":"لا توجد محادثات بعد","createFirst":"أنشئ أول محادثة أعلاه","chats":"المحادثات","renameChat":"إعادة تسمية المحادثة","openNewTab":"فتح في تبويب جديد","pinChat":"تثبيت","unpinChat":"إلغاء التثبيت","deleteChat":"حذف المحادثة","archiveChat":"أرشفة المحادثة","groups":{"pinned":"المثبتة","today":"اليوم","yesterday":"أمس","previous7Days":"آخر 7 أيام","previous30Days":"آخر 30 يومًا","older":"أقدم"},"folder":{"new":"مجلد جديد","namePlaceholder":"اسم المجلد","move":"نقل إلى مجلد","remove":"إزالة من المجلد","delete":"حذف المجلد","deleteConfirm":"حذف هذا المجلد؟ ستبقى المحادثات بداخله."},"shareChat":"مشاركة المحادثة…"},"persona":{"applied":"تم تطبيق الشخصية","label":"الشخصية","loadFailed":"فشل تحميل تفاصيل الشخصية","removeFailed":"فشل في إزالة الشخصية"},"model":{"updated":"تم تحديث النموذج","noModels":"لا توجد نماذج متاحة","noModelsDescription":"لا توجد نماذج متاحة. تأكد من تشغيل Ollama وتثبيت النماذج.","pullCommand":"ollama pull llama3.2:3b","noModelsTooltip":"لا توجد نماذج متاحة. يرجى التأكد من تشغيل Ollama وتثبيت النماذج.","selectBeforePrivateChat":"اختر نموذجاً متاحاً قبل بدء محادثة خاصة","selectBeforeSending":"اختر نموذجاً متاحاً قبل الإرسال"},"footer":{"disclaimer":"قد يرتكب الذكاء الاصطناعي أخطاء - تحقق من المعلومات المهمة","images":"{{count}} صورة","images_plural":"{{count}} صور","structuredOutput":"مخرجات منظمة"},"mediaUpload":{"dropImagesHere":"أفلت الصور هنا أو","supportedFormats":"يدعم: JPG، PNG، GIF، WebP (حد أقصى 10 ميجابايت لكل صورة)","browse":"تصفح"},"structuredOutput":{"title":"تنسيق الاستجابة","none":"بدون (لغة طبيعية)","noneDescription":"استجابة باللغة الطبيعية الافتراضية","json":"JSON","jsonDescription":"تنسيق JSON منظم","list":"قائمة","listDescription":"مصفوفة من العناصر","summary":"ملخص","summaryDescription":"ملخص المستند مع النقاط الرئيسية","analysis":"تحليل","analysisDescription":"تحليل منظم مع الإيجابيات والسلبيات","custom":"مخطط مخصص","customDescription":"حدد مخطط JSON الخاص بك","customSchema":"مخطط JSON مخصص","schemaPreview":"معاينة المخطط","applySchema":"تطبيق المخطط","cancel":"إلغاء","enabled":"تم تفعيل المخرجات المنظمة"},"controls":{"title":"عناصر تحكم المحادثة","systemPrompt":"موجه النظام","systemPromptPlaceholder":"تعليمات تنطبق على هذه المحادثة فقط…","advancedParams":"معلمات متقدمة","advancedParamsDescription":"تجاوزات لهذه المحادثة. الحقول الفارغة تستخدم الإعدادات العامة.","fromModel":"من النموذج","fromModelHint":"هذه القيمة مأخوذة من الإعدادات التي يوصي بها النموذج نفسه.","contextCapped":"تم تحديد السياق عند {{context}} من أصل {{trained}} تم تدريب النموذج عليها، حتى يظل قابلاً للتحميل.","saved":"تم حفظ عناصر التحكم","saveFailed":"تعذر حفظ عناصر التحكم","params":{"temperature":"درجة الحرارة","topP":"Top P","topK":"Top K","minP":"Min P","maxTokens":"أقصى عدد رموز","repeatPenalty":"عقوبة التكرار","seed":"البذرة","contextLength":"طول السياق"},"thinking":"التفكير","thinkingDescription":"مقدار تفكير النموذج قبل الإجابة. النماذج التي لا تفكر تتجاهل هذا.","compaction":"ضغط السياق","compactionDescription":"عندما يضغط الخادم المحادثات الطويلة، يمكن لهذه المحادثة الانسحاب والاحتفاظ بسجلها الكامل.","compactionDefault":"إعداد الخادم","compactionOff":"معطّل لهذه المحادثة"},"message":{"sources":"المصادر"},"toasts":{"chatCreated":"تم إنشاء محادثة جديدة","createFailed":"فشل إنشاء الجلسة","loadFailed":"فشل تحميل الجلسات","chatDeleted":"تم حذف المحادثة","deleteFailed":"فشل حذف المحادثة","deleteSessionFailed":"فشل حذف الجلسة","historyCleared":"تم مسح سجل المحادثات بالكامل","historyClearFailed":"فشل مسح سجل المحادثات","titleUpdated":"تم تحديث عنوان المحادثة","updateFailed":"فشل تحديث الجلسة","noValidSession":"لا توجد جلسة محادثة صالحة. يرجى إنشاء محادثة أو تحديدها.","sessionNotFound":"الجلسة غير موجودة أو غير صالحة. يرجى تحديد أو إنشاء جلسة محادثة صالحة.","noModelProvider":"لا يوجد مزود نماذج متاح","modelUnavailable":"النموذج المحدد \\"{{model}}\\" غير متوفر من {{provider}}. أعد تنشيط هذا المزود أو حدد نموذجًا آخر.","modelSwitched":"تم التبديل إلى {{model}} (النموذج السابق لم يعد متوفرًا)","modelsLoadFailed":"فشل تحميل النماذج","modelUpdated":"تم تحديث النموذج للمحادثة الحالية","modelUpdateFailed":"فشل تحديث نموذج الجلسة"},"documents":{"title":"مستندات في السياق"},"context":{"title":"نافذة السياق:","full":"ممتلئة بنسبة {{percent}}%","tokensUsed":"استُخدم {{used}} / {{budget}} رمز","tokensUsedNoBudget":"استُخدم {{used}} رمز","capped":"محدودة من {{trained}}"},"queue":{"title":"في قائمة الانتظار ({{total}})","moveUp":"نقل لأعلى","moveDown":"نقل لأسفل","updateFailed":"تعذّر تحديث الطلب في قائمة الانتظار","enqueueFailed":"تعذّر إضافة الطلب إلى قائمة الانتظار"},"compare":{"title":"مقارنة النماذج","hint":"الإجابة بما يصل إلى {{max}} نماذج إضافية"},"fork":{"action":"تفريع من هنا","created":"تم تفريع المحادثة","failed":"تعذّر تفريع المحادثة","origin":"تفريع من {{title}}","originUnknown":"محادثة أخرى"},"sharedReadOnly":"مشاركة من {{owner}} — عرض فقط"}`),sidebar:{navigation:{chat:`محادثة`,models:`النماذج`,personas:`الشخصيات`,imagine:`تخيّل`,agents:`الوكلاء`,work:`العمل`,settings:`الإعدادات`,usageAnalytics:`استخدام المزود`,system:`النظام`,userManagement:`إدارة المستخدمين`,signOut:`تسجيل الخروج`,exploreLabel:`استكشاف`,notes:`الملاحظات`,calendar:`التقويم`,automations:`الأتمتة`,prompts:`الموجهات`,skills:`المهارات`,tools:`الأدوات`,channels:`القنوات`},toggleSize:`تبديل حجم الشريط الجانبي`,expandSidebar:`توسيع الشريط الجانبي`},user:{menu:{changePicture:`تغيير الصورة`,settings:`الإعدادات`,usageAnalytics:`استخدام المزود`,system:`النظام`,userManagement:`إدارة المستخدمين`,logout:`تسجيل الخروج`,pinShortcut:`تثبيت في الشريط الجانبي`,unpinShortcut:`إلغاء التثبيت من الشريط الجانبي`,evaluations:`التقييمات`},avatar:{title:`تغيير صورة الملف الشخصي`,updated:`تم تحديث صورة الملف الشخصي`,updateFailed:`فشل تحديث صورة الملف الشخصي`,saving:`جاري الحفظ...`,label:`الصورة الرمزية`,uploadAvatarImage:`رفع صورة رمزية`,dragAndDrop:`اسحب وأفلت صورة أو انقر للتصفح`,chooseImage:`اختر صورة`,uploading:`جاري الرفع...`,enterImageUrl:`أو أدخل رابط الصورة`,supportedFormats:`الصيغ المدعومة: JPG، PNG، GIF، WebP (الحد الأقصى 2 ميجابايت). الصور المربعة تعمل بشكل أفضل.`,customAvatar:`صورة رمزية مخصصة`,clickToChange:`انقر للتغيير أو الإزالة`,removed:`تمت إزالة الصورة الرمزية`,uploaded:`تم رفع الصورة الرمزية بنجاح`,invalidFile:`يرجى اختيار ملف صورة صالح`,fileTooLarge:`يجب أن يكون حجم الصورة الرمزية أقل من 2 ميجابايت`,readFailed:`فشل قراءة ملف الصورة`,uploadFailed:`فشل رفع الصورة الرمزية`},profile:{noEmail:`لم يتم تقديم بريد إلكتروني`}},settings:JSON.parse(`{"title":"الإعدادات","tabs":{"appearance":"المظهر","model":"النموذج","systemMessage":"رسالة النظام","plugins":"الإضافات","search":"البحث","generation":"التوليد","documents":"المستندات","tts":"تحويل النص إلى كلام","imageGen":"توليد الصور","data":"البيانات","shortcuts":"الاختصارات","about":"حول","sessions":"الجلسات","apiKeys":"مفاتيح API","notifications":"الإشعارات"},"appearance":{"title":"المظهر","language":{"title":"اللغة","description":"اختر لغتك المفضلة"},"theme":{"title":"السمة","light":"فاتح","dark":"داكن","amoled":"أسود نقي","system":"النظام"},"accent":{"title":"لون التمييز","custom":"لون مخصص","useColor":"استخدام {{color}} كلون تمييز","behaviorTitle":"لوحة ألوان الواجهة","behaviorDescription":"اختر ما إذا كان لون التمييز يقتصر على عناصر التحكم أو يكيّف الواجهة الفاتحة أو الداكنة بالكامل.","defaultStyle":"افتراضي","defaultStyleDescription":"الاحتفاظ بالأسطح المحايدة للوضعين الفاتح والداكن.","adaptedStyle":"التكيف مع لون التمييز","adaptedStyleDescription":"تلوين الأسطح والحدود والنصوص بلون التمييز."},"chatInterface":{"title":"واجهة المحادثة","showUsername":"إظهار اسم المستخدم","showUsernameDescription":"عرض اسم المستخدم في رسائل المحادثة","followUpSuggestions":"اقتراحات المتابعة","followUpSuggestionsDescription":"اقتراح ردود سريعة بعد كل استجابة","hapticFeedback":"ردود فعل لمسية (Android)","hapticFeedbackDescription":"استخدام اهتزاز خفيف للإجراءات المهمة على الهاتف","autoOpenArtifacts":"فتح المخرجات تلقائيًا","autoOpenArtifactsDescription":"فتح لوحة المخرجات عندما تُنشئ الاستجابة مخرجًا"},"background":{"title":"صورة الخلفية","enable":"تفعيل صورة الخلفية","enableDescription":"عرض خلفية مخصصة مع تأثير التمويه","blur":"التمويه","opacity":"الشفافية","upload":"رفع صورة الخلفية","dragDrop":"اسحب وأفلت صورة أو انقر للتصفح","chooseImage":"اختر صورة"}},"saveSettings":"حفظ الإعدادات","model":{"title":"إعدادات النموذج","defaultModel":"النموذج الافتراضي","defaultModelDescription":"سيتم استخدام هذا النموذج افتراضياً للمحادثات الجديدة","selectModel":"اختر نموذجاً","specializedModels":"نماذج متخصصة","visionModel":"نموذج الرؤية","selectVisionModel":"استخدام نموذج الدردشة الحالي","visionModelDescription":"يُستخدم تلقائيًا كلما احتوى سياق الدردشة الصادر على صور. اختر نموذجًا يدعم إدخال الصور.","visionModelUpdateFailed":"فشل تحديث نموذج الرؤية: {{error}}","visionModelNoProvider":"نموذج الرؤية هذا ليس له هوية مزوّد. اختر نموذجاً متاحاً.","persona":"شخصية","updateAll":"تحديث جميع النماذج","updateAllDescription":"التحقق من التحديثات وسحب أحدث إصدارات جميع النماذج المثبتة","updateAllButton":"تحديث الكل","updating":"جاري تحديث النماذج...","currentModelInfo":"معلومات النموذج الحالي","name":"الاسم","size":"الحجم","family":"العائلة","format":"التنسيق","status":"الحالة","statusStarting":"جاري البدء...","statusComplete":"مكتمل","statusError":"خطأ","bulkOperations":"العمليات المجمعة","autoTitle":{"title":"توليد العنوان التلقائي","enable":"تفعيل العنوان التلقائي","enableDescription":"توليد عناوين تلقائياً للمحادثات الجديدة","taskModel":"نموذج المهام","selectTaskModel":"اختر نموذج المهام","taskModelDescription":"النموذج المستخدم لتوليد عناوين المحادثات"},"updatingModel":"تحديث {{name}} ({{current}}/{{total}})","modelsProgress":"{{current}} من {{total}} نماذج"},"systemMessage":{"title":"رسالة النظام","description":"عيّن رسالة نظام مخصصة ستُستخدم لجميع المحادثات الجديدة.","placeholder":"أدخل رسالة النظام...","saved":"تم حفظ رسالة النظام","saveFailed":"فشل حفظ رسالة النظام"},"plugins":{"title":"الإضافات","description":"إدارة الإضافات المثبتة","providerConnections":"اتصالات المزود","providerConnectionsDescription":"اتصل، وقم بتكوين، وفحص مزودي النماذج عبر الإضافات.","providers":"المزودون","searchProviders":"ابحث عن المزودين","noProvidersFound":"لا يوجد مزودون يطابقون بحثك.","selectProvider":"اختر مزودًا","selectProviderDescription":"اختر مزودًا لفحص اتصاله وكتالوج النماذج الخاص به.","addNew":"إضافة إضافة جديدة","upload":"رفع إضافة","addJson":"إضافة JSON","uploading":"جاري الرفع...","jsonPlaceholder":"الصق إعدادات JSON للإضافة...","install":"تثبيت الإضافة","noPlugins":"لا توجد إضافات مثبتة","noPluginsDescription":"أضف إضافة لتوسيع الوظائف","loading":"جاري تحميل الإضافات...","installed":"الإضافات المثبتة","active":"الإضافات النشطة","activeLabel":"نشط","inactive":"غير نشط","activate":"تفعيل","deactivate":"إلغاء التفعيل","models":"نماذج","apiKeySet":"تم تعيين مفتاح API","apiKeyConfiguration":"إعداد مفتاح API","apiKeyDescription":"قم بتخزين مفتاح API شخصي لـ {{name}}.","apiKeyEnvAlternative":"بدلاً من ذلك، عيّن","environmentVariable":"متغير البيئة","apiKeyConfigured":"تم إعداد مفتاح API","apiKeyPlaceholder":"أدخل مفتاح API...","saveApiKey":"حفظ مفتاح API","showApiKey":"إظهار مفتاح API","hideApiKey":"إخفاء مفتاح API","configure":"تكوين","providerSettings":"إعدادات المزود","status":"الحالة","defaultEndpoint":"نقطة النهاية الافتراضية","modelCatalog":"كتالوج النماذج","modelCatalogDescription":"النماذج المكتشفة والمكونة لهذا المزود وقدراته.","refreshModels":"تحديث النماذج","noModelsConfigured":"لا توجد نماذج مكونة لهذا المزود.","modelId":"معرف النموذج","capabilities":"القدرات","modelCatalogUpdated":"تم تحديث كتالوج النماذج: {{count}} نماذج.","modelCatalogUnchanged":"كتالوج النماذج محدث بالفعل.","modelCatalogNeedsApiKey":"أضف مفتاح API صالح لهذا المزود لتحميل قائمة نماذجه المباشرة.","modelCatalogUnavailable":"تعذر تحميل قائمة نماذج المزود.","modelCatalogRefreshFailed":"فشل تحديث كتالوج النماذج","capability":{"chat":"دردشة","embedding":"تضمين","image":"صورة","speech":"كلام","transcription":"نسخ"},"exportPlugin":"تصدير الإضافة","deletePlugin":"حذف الإضافة","apiKey":{"title":"مفتاح API","placeholder":"أدخل مفتاح API","save":"حفظ المفتاح","remove":"إزالة المفتاح","configured":"تم إعداد مفتاح API","notConfigured":"مفتاح API مطلوب","saved":"تم حفظ مفتاح API بنجاح","removed":"تم إزالة مفتاح API","saveFailed":"فشل حفظ مفتاح API","removeFailed":"فشل إزالة مفتاح API","enterKey":"يرجى إدخال مفتاح API"},"variables":"Variables"},"generation":{"title":"خيارات التوليد","description":"إعداد كيفية توليد الذكاء الاصطناعي للاستجابات","scopeLabel":"يُطبَّق على","scopeAll":"كل النماذج","scopeModel":"{{model}} فقط","scopeAllHint":"القيم التي يستخدمها كل نموذج ما لم يكن له إعداد خاص به.","scopeModelHint":"يُحفظ لهذا النموذج وحده، ويتجاوز الإعدادات العامة.","advancedSettings":"إعدادات التوليد المتقدمة","advancedSettingsDescription":"أخذ العينات، وحدود الرموز، والسياق، والعقوبات، وتسلسلات الإيقاف","coreParameters":"المعلمات الأساسية","temperature":"درجة الحرارة","temperatureDescription":"يتحكم في العشوائية. القيم الأقل أكثر تركيزاً، والقيم الأعلى أكثر إبداعاً.","topP":"Top P","topPDescription":"يتحكم في التنوع عبر أخذ العينات النووية. القيم الأقل تركز على الرموز المحتملة.","topK":"Top K","topKDescription":"يحد اختيار الرموز لأكثر K رمز احتمالاً. عيّن 0 للتعطيل.","minP":"Min P","minPDescription":"الحد الأدنى لاحتمال اختيار الرمز.","generationControl":"التحكم في التوليد","maxTokens":"الحد الأقصى للرموز","maxTokensDescription":"الحد الأقصى لعدد الرموز المولدة في الاستجابة.","repeatPenalty":"عقوبة التكرار","repeatPenaltyDescription":"يعاقب الرموز المتكررة. القيم الأعلى تقلل التكرار.","contextLength":"طول السياق","contextLengthDescription":"الحد الأقصى لحجم نافذة السياق للمحادثات.","seed":"البذرة","optional":"اختياري","random":"عشوائي","seedDescription":"عيّن بذرة محددة للمخرجات القابلة للتكرار.","advancedOptions":"خيارات متقدمة","presencePenalty":"عقوبة الوجود","presencePenaltyDescription":"يعاقب الرموز التي تظهر في السياق.","frequencyPenalty":"عقوبة التكرار","frequencyPenaltyDescription":"يعاقب الرموز المستخدمة بشكل متكرر.","stopSequences":"تسلسلات الإيقاف","commaSeparated":"مفصولة بفواصل","stopSequencesDescription":"رموز مخصصة ستوقف التوليد عند مصادفتها.","resetDefaults":"إعادة تعيين الافتراضيات","saveOptions":"حفظ الخيارات","embeddingSettings":"إعدادات التضمين","enableEmbeddings":"تفعيل تضمين المستندات","thinking":"التفكير","thinkingDescription":"مستوى التفكير الافتراضي للردود. يمكن لكل محادثة تغييره.","thinkingLevels":{"default":"افتراضي النموذج","defaultWith":"افتراضي النموذج ({{level}})","off":"معطّل","on":"مفعّل","low":"منخفض","medium":"متوسط","high":"مرتفع"}},"documents":{"title":"إعدادات المستندات","embeddings":{"title":"التضمينات","enable":"تفعيل تضمين المستندات","model":"نموذج التضمين","modelDescription":"اختر النموذج المستخدم لتضمين المستندات","chunkSize":"حجم القطعة","chunkSizeInTokens":"(بالرموز)","chunkSizeDescription":"حجم قطع النص للتضمين","chunkOverlap":"تداخل القطع","chunkOverlapInTokens":"(بالرموز)","chunkOverlapDescription":"التداخل بين القطع المتتالية","similarityThreshold":"عتبة التشابه","similarityDescription":"الحد الأدنى لدرجة التشابه لتضمين النتائج","status":"حالة التضمين","statusLabel":"الحالة","available":"متاح","unavailable":"غير متاح","chunksWithEmbeddings":"قطع مع تضمينات","coverage":"التغطية","regenerate":"إعادة توليد التضمينات","regenerating":"جاري إعادة التوليد..."},"collections":{"title":"مجموعات المعرفة","description":"اجمع المستندات في مجموعات وأرفقها بأي محادثة.","namePlaceholder":"اسم المجموعة","create":"إنشاء","none":"بدون مجموعة","deleteConfirm":"حذف هذه المجموعة؟ ستبقى المستندات بداخلها.","createFailed":"فشل إنشاء المجموعة","deleteFailed":"فشل حذف المجموعة","assignFailed":"فشل نقل المستند","share":"مشاركة المجموعة","shared":"مشتركة"},"library":{"title":"المستندات المرفوعة","description":"المستندات المتاحة كسياق للمحادثة. المستند المرفوع في محادثة يبقى في محادثته فقط؛ أما المستند بلا محادثة ولا مجموعة فينضم إلى كل المحادثات.","empty":"لا توجد مستندات مرفوعة بعد.","chatScope":"محادثة واحدة","everyChatScope":"كل المحادثات","deleteConfirm":"حذف \\"{{name}}\\"؟ سيختفي من كل المحادثات.","deleteFailed":"فشل حذف المستند","extractionFailed":"فشل الاستخراج","extractionQueued":"جارٍ الاستخراج…"}},"tts":{"title":"تحويل النص إلى كلام","description":"إعداد إعدادات تحويل النص إلى كلام لقراءة الرسائل بصوت عالٍ","loadingProviders":"جاري تحميل مزودي TTS...","noProviders":"لا يوجد مزودو TTS","noProvidersDescription":"قم بإعداد إضافة مع دعم TTS لتفعيل تحويل النص إلى كلام","enable":"تفعيل TTS","enableDescription":"السماح بتحويل النص إلى كلام لرسائل المساعد","autoPlay":"تشغيل تلقائي للاستجابات","autoPlayDescription":"قراءة رسائل المساعد الجديدة بصوت عالٍ تلقائياً","streamSentences":"تشغيل طبيعي على دفعات","streamSentencesDescription":"إنشاء عدة دفعات تراعي العبارات مسبقًا وتشغيلها كاستجابة واحدة متواصلة.","voiceConfiguration":"إعداد الصوت","model":"نموذج TTS","modelDescription":"اختر النموذج لتوليد الكلام","voice":"الصوت","selectVoice":"اختر صوتاً","voiceDescription":"اختر الصوت لتحويل النص إلى كلام","providerDefaultVoice":"يختار هذا النموذج صوته الافتراضي ما لم تقدّم تسجيلاً مرجعيًا عند إنشاء الكلام.","voiceCloningAvailable":"استنساخ الصوت متاح","voiceCloningAvailableDescription":"استخدم «تخيّل ← الصوت» لإنشاء كلام من تسجيل مرجعي تم بإذن صاحبه ونصه المطابق بدقة. ويمكنك اختياريًا حفظ المرجع كصوت قابل لإعادة الاستخدام.","savedVoiceOption":"{{name}} (صوت محفوظ)","savedVoices":"الأصوات المحفوظة","loadingSavedVoices":"جارٍ تحميل الأصوات المحفوظة…","deleteSavedVoice":"حذف الصوت المحفوظ {{name}}","deleteSavedVoiceConfirm":"هل تريد حذف الصوت المحفوظ «{{name}}»؟ ستتم إزالة تسجيله المرجعي ونصه.","savedVoiceDeleted":"تم حذف الصوت المحفوظ","savedVoicePreferenceCleanupFailed":"تم حذف الصوت المحفوظ، لكن تعذرت إعادة ضبط إعدادات الكلام","savedVoiceDeleteFailed":"تعذر حذف الصوت المحفوظ","speed":"السرعة","speedSlow":"0.5x","speedNormal":"1.0x","speedFast":"2.0x","availableProviders":"المزودون المتاحون","models":"نماذج","test":"اختبار","testing":"جاري الاختبار...","stop":"إيقاف","consentRevoked":"تم سحب الموافقة","consentExpired":"انتهت صلاحية الموافقة","transferCount":"أُرسل إلى المزوّد {{total}} مرة","consentExpires":"الموافقة سارية حتى {{date}}","revokeSavedVoice":"سحب الموافقة عن {{name}}","revokeSavedVoiceConfirm":"هل تريد سحب الموافقة عن «{{name}}»؟ لن يعود بالإمكان استخدام الصوت المحفوظ، لكن سجل الموافقة سيبقى.","savedVoiceRevoked":"تم سحب الموافقة","savedVoiceRevokeFailed":"فشل سحب الموافقة"},"imageGen":{"title":"توليد الصور","description":"إعداد إعدادات ومزودي توليد الصور","loadingProviders":"جاري تحميل مزودي توليد الصور...","noProviders":"لا يوجد مزودو توليد صور","noProvidersDescription":"قم بإعداد إضافة مع دعم توليد الصور","enable":"تفعيل توليد الصور","enableDescription":"السماح بتوليد الصور بالذكاء الاصطناعي في المحادثات","configuration":"الإعداد","model":"النموذج","modelDescription":"اختر النموذج لتوليد الصور","size":"الحجم","sizeDescription":"دقة الصور المولدة","quality":"الجودة","qualityDescription":"مستوى جودة الصور المولدة","style":"الأسلوب","styleDescription":"إعداد الأسلوب المسبق للصور المولدة","availableProviders":"المزودون المتاحون","models":"نماذج"},"data":{"title":"إدارة البيانات","export":"تصدير البيانات","exportDescription":"نزّل أرشيفًا قابلاً للنقل يضم التفضيلات ومجلدات المحادثات والجلسات والرسائل والملاحظات ومجموعات المعرفة ونصوص المستندات المستخرجة.","archiveScopeV3":"يشمل التفضيلات والمحادثات والمجلدات والملاحظات ومجموعات المعرفة ونصوص المستندات المستخرجة. يستثني الحسابات والأسرار والأصوات الحيوية المستنسخة والوسائط المنشأة والشخصيات والذاكرة وبيانات أو وحدات تخزين Work.","exportAll":"تصدير جميع البيانات","import":"استيراد البيانات","importDescription":"استيراد البيانات من تصدير سابق.","importData":"استيراد البيانات","importing":"جاري الاستيراد...","clearSessions":"مسح الجلسات","clearSessionsDescription":"حذف جميع جلسات المحادثة. لا يمكن التراجع عن هذا الإجراء.","clearAll":"مسح الكل","clearing":"جاري المسح...","importOptions":"خيارات الاستيراد","importOptionsDescription":"اختر كيفية التعامل مع البيانات الموجودة","validatingArchive":"جارٍ التحقق من الأرشيف وحساب التغييرات…","archiveValidationFailed":"فشل التحقق من الأرشيف","preflightReport":"معاينة الاستيراد","preflightIncoming":"{{folders}} مجلدات · {{sessions}} محادثات · {{messages}} رسائل · {{notes}} ملاحظات · {{collections}} مجموعات · {{documents}} مستندات · {{chunks}} مقاطع","preflightRemappedIds":"ستُعاد تعيين {{count}} معرّفات لحماية بيانات حساب آخر.","skipDuplicates":"تخطي المكررات","overwrite":"الكتابة فوق الموجود","importResults":"نتائج الاستيراد","preferences":"التفضيلات","imported":"تم الاستيراد","failed":"فشل","sessions":"الجلسات","sessionFolders":"مجلدات الجلسات","notes":"الملاحظات","knowledgeCollections":"مجموعات المعرفة","importedLabel":"تم الاستيراد","overwrittenLabel":"تمت الكتابة فوقه","skipped":"تم التخطي","toCreate":"للإنشاء","toOverwrite":"للكتابة فوقه","toSkip":"للتخطي","documents":"المستندات","warnings":"تحذيرات","refreshAfterImportFailed":"تم استيراد البيانات، لكن تعذّر تحديث بعض العروض. أعد تحميل Libre WebUI لرؤية جميع التغييرات.","errors":"أخطاء","archivedChats":{"title":"المحادثات المؤرشفة","empty":"لا توجد محادثات مؤرشفة","unarchive":"إلغاء الأرشفة"}},"about":{"title":"حول","versionLabel":"الإصدار","ollama":{"title":"حالة Ollama","version":"الإصدار","healthy":"سليم","unhealthy":"غير سليم"},"stats":{"models":"النماذج","sessions":"الجلسات"},"features":{"privacy":{"title":"الخصوصية أولاً","description":"بياناتك تبقى على جهازك"},"openSource":{"title":"مفتوح المصدر","description":"برنامج مجاني ومفتوح المصدر"},"localInference":{"title":"استدلال محلي","description":"تشغيل نماذج الذكاء الاصطناعي محلياً مع Ollama"}},"openSourceBy":"مفتوح المصدر بواسطة {{company}}","links":{"title":"الروابط","github":"GitHub","githubDescription":"عرض الكود المصدري والمساهمة","website":"الموقع","websiteDescription":"زيارة موقعنا","documentation":"التوثيق","reportIssue":"الإبلاغ عن المشاكل","reportIssueDescription":"تقارير الأخطاء وطلبات الميزات","documentationDescription":"أدلة ودروس ومرجع API","forgejo":"مرآة Forgejo","forgejoDescription":"مستودع Forgejo مستضاف ذاتياً","sponsor":"ادعم المشروع","sponsorDescription":"ساهم في تمويل المشروع","star":"نجمة على GitHub","starDescription":"النجمة تساعد الآخرين على اكتشاف المشروع"},"version":"الإصدار {{version}}","updates":{"checking":"جارٍ البحث عن تحديثات…","upToDate":"أنت على أحدث إصدار","updateAvailable":"الإصدار {{version}} متاح","ahead":"أنت متقدم على أحدث إصدار ({{version}})","checkFailed":"تعذّر التحقق من التحديثات","viewChangelog":"عرض سجل التغييرات"}},"groups":{"general":"عام","chat":"الدردشة","media":"الصوت والصور","connections":"الاتصالات"},"search":{"title":"البحث في الويب","description":"ابحث في الويب عبر مثيل SearXNG مستضاف ذاتيًا. عند التفعيل، يظهر زر البحث في المحادثة ويمكن لمهام Work المتصلة بالشبكة البحث.","enableLabel":"تفعيل البحث في الويب","enableDescription":"إتاحة البحث في الويب للمحادثات ومهام Work. تُنفَّذ عمليات البحث من جانب الخادم عبر المثيل المُهيأ.","urlLabel":"عنوان SearXNG","urlDescription":"عنوان URL الأساسي لمثيل SearXNG بحيث يكون متاحًا من الخادم. توفر حزمة النشر الخاص المرفقة http://searxng:8080.","maxResultsLabel":"النتائج لكل بحث","maxResultsDescription":"عدد النتائج التي تُغذي الرد أو استدعاء الأداة، من 1 إلى 100.","maxResultsInvalid":"يجب أن يكون عدد النتائج بين 1 و100.","safeSearchLabel":"البحث الآمن","safeSearchDescription":"اطلب من المحرك تصفية النتائج الصريحة.","test":"اختبار الاتصال","testing":"جارٍ الاختبار…","testOk":"البحث يعمل — تم إرجاع {{results}} نتيجة","testFailed":"فشل اختبار البحث","save":"حفظ","saved":"تم حفظ إعدادات البحث","saveFailed":"تعذر حفظ إعدادات البحث"},"compaction":{"title":"ضغط السياق","description":"عندما تتجاوز المحادثة حدّ الرموز، يلخّص الخادم رسائلها الأقدم ويحتفظ بالأحدث فقط كما هي. ينطبق ذلك على كل مستخدمي هذا الخادم.","thresholdLabel":"حدّ الرموز","thresholdDescription":"عدد رموز السياق التقديري الذي يُلخَّص فوقه السجل الأقدم، 500-1,000,000.","thresholdInvalid":"يجب أن يكون حدّ الرموز بين 500 و1,000,000.","keepRecentLabel":"الرسائل الحديثة المحتفظ بها","keepRecentDescription":"كم عدد أحدث الرسائل التي تبقى كما هي دائمًا، 2-200.","keepRecentInvalid":"يجب أن يكون عدد الرسائل الحديثة المحتفظ بها بين 2 و200.","modelLabel":"نموذج الضغط","modelDescription":"النموذج الذي يكتب الملخّصات. يُستخدم نموذج الجلسة نفسها إذا لم يُختَر أي نموذج.","sessionModelOption":"استخدام نموذج الجلسة","promptLabel":"موجّه تلخيص مخصّص","promptPlaceholder":"اتركه فارغًا لاستخدام الموجّه المدمج","promptDescription":"يُستبدل متغيّرا القالب {{previousSummaryVariable}} و{{messagesVariable}} بالملخّص السابق وبالرسائل التي يجري تلخيصها.","saved":"تم حفظ إعدادات الضغط","saveFailed":"تعذّر حفظ إعدادات الضغط","loadFailed":"تعذّر تحميل إعدادات الضغط"},"sessions":{"title":"الجلسات","description":"جميع الأماكن التي سُجّل فيها الدخول إلى هذا الحساب. يسري تسجيل خروج الجلسة فورًا، ويعيد تسجيل الدخول مجددًا الوصول.","signOutOthers":"تسجيل الخروج من الجلسات الأخرى","signingOutOthers":"جارٍ تسجيل الخروج…","signOut":"تسجيل الخروج","signingOut":"جارٍ تسجيل الخروج…","revoked":"تم تسجيل خروج الجلسة.","revokeFailed":"تعذّر تسجيل خروج الجلسة.","othersRevoked":"الجلسات الأخرى التي تم تسجيل خروجها: {{count}}","loadFailed":"تعذّر تحميل الجلسات.","empty":"لم يتم العثور على جلسات.","current":"هذه الجلسة","revokedBadge":"تم تسجيل الخروج","unknownDevice":"جهاز غير معروف","createdAt":"تاريخ تسجيل الدخول","lastSeenAt":"آخر نشاط","expiresAt":"تنتهي في"},"apiKeys":{"title":"مفاتيح API","description":"رموز وصول محدودة النطاق للسكربتات والتكاملات. لكل مفتاح صلاحية الوصول إلى النطاقات التي تختارها فقط.","newKeyTitle":"مفتاح API الجديد الخاص بك","copy":"نسخ","copied":"تم النسخ إلى الحافظة.","copyFailed":"فشل النسخ.","showOnceWarning":"انسخه الآن — لن يُعرض مرة أخرى.","dismiss":"تم","createTitle":"إنشاء مفتاح","nameLabel":"الاسم","namePlaceholder":"مثال: CI pipeline","nameRequired":"أدخل اسمًا للمفتاح.","expiryLabel":"تنتهي الصلاحية بعد (أيام، اختياري)","expiryPlaceholder":"أبدًا","expiryInvalid":"يجب أن تكون مدة الانتهاء عددًا صحيحًا من الأيام.","scopesLabel":"النطاقات","scopesRequired":"اختر نطاقًا واحدًا على الأقل.","create":"إنشاء مفتاح","creating":"جارٍ الإنشاء…","created":"تم إنشاء مفتاح API.","createFailed":"تعذّر إنشاء مفتاح API.","revoke":"إبطال","revoking":"جارٍ الإبطال…","revoked":"تم إبطال مفتاح API.","revokeFailed":"تعذّر إبطال مفتاح API.","revokedBadge":"مُبطل","loadFailed":"تعذّر تحميل مفاتيح API.","empty":"لا توجد مفاتيح API بعد.","createdAt":"تاريخ الإنشاء","lastUsedAt":"آخر استخدام","expiresAt":"تنتهي في","neverExpires":"أبدًا"},"notifications":{"title":"الإشعارات","description":"كيف يُعلَم هذا المتصفح بالإشارات والمشاركات والتذكيرات والأعمال المكتملة.","pushTitle":"إشعارات المتصفح","pushHint":"عرض إشعارات النظام من هذا الجهاز حتى عندما تكون علامة التبويب في الخلفية.","enabled":"إشعارات المتصفح مفعّلة على هذا الجهاز.","disabled":"إشعارات المتصفح معطّلة على هذا الجهاز.","enableFailed":"تعذّر تفعيل إشعارات المتصفح.","permissionDenied":"الإشعارات محظورة في إعدادات المتصفح لهذا الموقع.","unsupported":"هذا المتصفح لا يدعم إشعارات الدفع.","workerMissing":"يتطلب الدفع التطبيق المثبّت. أعد تحميل تطبيق الإنتاج وحاول مجددًا.","deviceNote":"الإشعارات لكل جهاز. تسجيل خروج الجلسة يزيل أيضًا تسجيل الدفع الخاص بها."}}`),models:{title:`النماذج`,subtitle:`سحب وإدارة ومراقبة نماذج Ollama`,installed:`النماذج المثبتة`,available:`النماذج المتاحة`,pull:`سحب النموذج`,pulling:`جاري السحب...`,delete:`حذف النموذج`,deleting:`جاري الحذف...`,size:`الحجم`,modified:`تم التعديل`,family:`العائلة`,parameters:`المعلمات`,quantization:`التكميم`,noModels:`لا توجد نماذج مثبتة`,pullFirst:`اسحب نموذجاً للبدء`,noModelsFound:`لم يتم العثور على نماذج`},personas:{title:`الشخصيات`,create:`إنشاء شخصية`,edit:`تعديل الشخصية`,delete:`حذف الشخصية`,name:`الاسم`,description:`الوصف`,systemPrompt:`موجه النظام`,model:`النموذج`,avatar:`الصورة الرمزية`,background:`الخلفية`,noPersonas:`لم يتم إنشاء شخصيات`,createFirst:`أنشئ أول شخصية لتخصيص تجربة المحادثة`},gallery:{title:`المعرض`,subtitle:`معرض الصور المولدة بالذكاء الاصطناعي`,imageCount:`{{count}} صورة`,generate:`توليد صورة`,generateDescription:`إنشاء صور بالذكاء الاصطناعي`,generating:`جاري التوليد...`,prompt:`الموجه`,promptPlaceholder:`صف الصورة التي تريد توليدها...`,noImages:`لم يتم توليد صور بعد`,download:`تحميل`,delete:`حذف`,regenerate:`إعادة التوليد`,model:`النموذج`,size:`الحجم`,quality:`الجودة`,created:`تم الإنشاء`},errors:{generic:`حدث خطأ`,network:`خطأ في الشبكة. يرجى التحقق من الاتصال.`,unauthorized:`غير مصرح لك بتنفيذ هذا الإجراء.`,notFound:`لم يتم العثور على المورد المطلوب.`,serverError:`خطأ في الخادم. يرجى المحاولة لاحقاً.`,validation:`يرجى التحقق من المدخلات والمحاولة مرة أخرى.`},keyboard:{title:`اختصارات لوحة المفاتيح`,toggleSidebar:`تبديل الشريط الجانبي`,openSettings:`فتح الإعدادات`,toggleDarkMode:`تبديل الوضع الداكن`,showShortcuts:`إظهار اختصارات لوحة المفاتيح`,closeModals:`إغلاق النوافذ المنبثقة`,groups:{navigation:`التنقل`,general:`عام`,chat:`المحادثة`,workspace:`مساحة العمل`},actions:{sendMessage:`إرسال الرسالة`,newLine:`سطر جديد في الرسالة`,saveEdit:`حفظ الرسالة المعدّلة`,cancelEdit:`إلغاء التعديل`,saveFile:`حفظ الملف`,formatCode:`تنسيق الشيفرة`},description:`كل اختصارات لوحة المفاتيح المتاحة في Libre WebUI.`,newChat:`محادثة جديدة`,newWork:`جلسة عمل جديدة`,openPalette:`فتح لوحة الأوامر`},modelManager:{title:`النماذج`,loading:`جاري تحميل النماذج...`,systemStatus:{online:`Ollama متصل`,offline:`Ollama غير متصل`,models:`نموذج`,models_plural:`نماذج`,running:`قيد التشغيل`,vram:`VRAM`},sections:{pull:`سحب نموذج جديد`,library:`تصفح المكتبة`,huggingface:`HuggingFace Hub`,running:`النماذج قيد التشغيل`,local:`النماذج المحلية`,advanced:`إجراءات متقدمة`,catalog:`دليل النماذج`},catalog:{searchPlaceholder:`ابحث عن النماذج بالاسم أو المزوّد...`,noModels:`لا توجد نماذج متاحة بعد.`,empty:`لا توجد نماذج تطابق بحثك.`,providerOllama:`Ollama`,hidden:`مخفي`,visibilityFailed:`تعذّر تحديث ظهور النموذج.`,filterAll:`كل النماذج`,filterLocal:`محلية`,filterProviders:`المزوّدون`,filterHidden:`المخفية`,enableAll:`تفعيل المعروضة`,disableAll:`تعطيل المعروضة`,rename:`تحرير الاسم والصورة`,setPicture:`تعيين صورة`,clearPicture:`إزالة الصورة`,pictureInvalid:`اختر ملف صورة.`,pictureTooLarge:`يجب أن تكون الصور أقل من 192 كيلوبايت.`,saving:`جارٍ الحفظ…`,hide:`إخفاؤه عن المستخدمين`,show:`إظهاره للمستخدمين`},pull:{placeholder:`أدخل اسم النموذج (مثل llama3.2:3b، deepseek-r1:14b)`,button:`سحب`,cancel:`إلغاء`,popular:`النماذج الشائعة:`,browseAll:`تصفح جميع النماذج على ollama.com`,success:`تم سحب النموذج {{name}} بنجاح`,cancelled:`تم إلغاء سحب النموذج`,failed:`فشل سحب النموذج`,enterName:`يرجى إدخال اسم النموذج`,restricted:`تثبيت النماذج مقصور على المسؤولين في هذا المثيل.`},progress:{starting:`جاري التهيئة...`,pulling:`جاري تحميل النموذج...`,pullingLayer:`تحميل`,verifying:`جاري التحقق من السلامة...`,verifyingDigest:`التحقق من تجزئة sha256`,writing:`جاري كتابة البيان...`,cleaning:`جاري التنظيف...`},library:{available:`متاح`,search:`البحث عن نماذج...`,noResults:`لم يتم العثور على نماذج تطابق معاييرك`,installed:`مثبت`,more:`+{{count}} المزيد`,refresh:`تحديث المكتبة`},huggingface:{browseAll:`تصفح الكل على HuggingFace`,checkingGguf:`البحث عن ملفات GGUF...`,noGgufAvailable:`لا توجد ملفات GGUF متاحة للسحب المباشر من Ollama`,ggufFilesCount:`ملفات GGUF ({{count}}) - سحب مباشر إلى Ollama`,noModelsFound:`لم يتم العثور على نماذج`,noResults:`لم يتم العثور على نماذج. حاول تعديل البحث أو المرشحات.`,browseAllLink:`تصفح الكل`,search:`البحث في نماذج HuggingFace...`,by:`بواسطة`,gated:`وصول مقيد`,viewOnHF:`عرض على HuggingFace`,sortDownloads:`التنزيلات`,sortLikes:`الإعجابات`,sortRecent:`الأحدث`,taskTextGeneration:`توليد النص`,taskTextToSpeech:`تحويل النص إلى كلام`,taskTextToImage:`تحويل النص إلى صورة`,taskSpeechRecognition:`التعرف على الكلام`,tasks:{textGen:`توليد النص`,tts:`تحويل النص إلى كلام`,image:`تحويل النص إلى صورة`,stt:`التعرف على الكلام`},sort:{downloads:`الأكثر تنزيلاً`,likes:`الأكثر إعجاباً`,recent:`المحدثة مؤخراً`}},local:{noModels:`لم يتم تثبيت نماذج بعد`,pullToStart:`اسحب نموذجاً أعلاه للبدء`,installed:`مثبت`,running:`قيد التشغيل`,info:`معلومات`,copy:`نسخ`,delete:`حذف`,deleteConfirm:`هل أنت متأكد من حذف النموذج "{{name}}"؟`,deleteSuccess:`تم حذف النموذج {{name}} بنجاح`,deleteFailed:`فشل حذف النموذج`},advanced:{createModel:`إنشاء نموذج`,fromModelfile:`من Modelfile`,copyModel:`نسخ نموذج`,duplicateExisting:`تكرار موجود`,testEmbeddings:`اختبار التضمينات`,generateVectors:`توليد المتجهات`,healthCheck:`فحص الصحة`,testConnection:`اختبار الاتصال`,healthy:`Ollama سليم!`},modals:{details:{title:`تفاصيل النموذج`,info:`معلومات النموذج`,family:`العائلة`,parameters:`المعلمات`,quantization:`التكميم`,format:`التنسيق`,systemPrompt:`موجه النظام`,template:`القالب`,license:`الترخيص`,modelfile:`Modelfile`,noDetails:`لا تتوفر تفاصيل`},copy:{title:`نسخ النموذج`,source:`النموذج المصدر`,selectModel:`اختر نموذجاً...`,newName:`اسم النموذج الجديد`,placeholder:`مثل my-custom-model`,copying:`جاري النسخ...`,button:`نسخ النموذج`,success:`تم نسخ النموذج إلى {{name}}`,failed:`فشل نسخ النموذج`,enterBoth:`يرجى إدخال أسماء المصدر والوجهة`},create:{title:`إنشاء نموذج مخصص`,name:`اسم النموذج`,namePlaceholder:`مثل my-assistant`,modelfile:`Modelfile`,modelfilePlaceholder:`FROM llama3.2
|
|
2
|
+
SYSTEM You are a helpful assistant.`,see:`راجع`,docs:`توثيق Modelfile`,docsLink:`لمرجع الصيغة`,creating:`جاري الإنشاء...`,button:`إنشاء النموذج`,success:`تم إنشاء النموذج {{name}} بنجاح`,failed:`فشل إنشاء النموذج`,enterBoth:`يرجى إدخال اسم النموذج ومحتوى Modelfile`},embeddings:{title:`اختبار التضمينات`,model:`نموذج التضمين`,selectModel:`اختر نموذجاً...`,recommended:`موصى به: nomic-embed-text، mxbai-embed-large`,input:`نص الإدخال`,placeholder:`أدخل النص لتوليد التضمينات...`,generating:`جاري التوليد...`,button:`توليد التضمينات`,result:`النتيجة ({{count}} بُعد)`,success:`تم توليد متجه تضمين من {{count}} بُعد`,failed:`فشل توليد التضمينات`,enterBoth:`يرجى اختيار نموذج وإدخال نص`}}},personaManager:{title:`الشخصيات`,subtitle:`إنشاء وإدارة شخصيات الذكاء الاصطناعي مع شخصيات وذكريات وسلوكيات مخصصة`,loading:`جاري تحميل الشخصيات...`,createButton:`إنشاء شخصية`,importExport:`استيراد/تصدير`,stats:{title:`شخصياتك`,count:`تم إنشاء {{count}} شخصية`,count_plural:`تم إنشاء {{count}} شخصيات`},empty:{title:`لا توجد شخصيات بعد`,description:`أنشئ أول شخصية للبدء مع تفاعلات الذكاء الاصطناعي المخصصة`,button:`أنشئ شخصيتك الأولى`},deleteConfirm:`هل أنت متأكد من حذف "{{name}}"؟`,deleteSuccess:`تم حذف الشخصية "{{name}}" بنجاح`,downloadSuccess:`تم تحميل الشخصية "{{name}}" بنجاح`,failed:`فشل {{action}} الشخصية`},personaForm:{title:{create:`إنشاء شخصية جديدة`,edit:`تعديل الشخصية`},subtitle:{create:`أنشئ شخصية ذكاء اصطناعي جديدة مع شخصية مخصصة وأنظمة ذاكرة وقدرات تعلم تكيفية`,edit:`خصص شخصية الذكاء الاصطناعي مع ذاكرة متقدمة وتعلم تكيفي ومعلمات ذكية`},loading:`جاري تحميل النموذج...`,saved:`تم الحفظ`,tabs:{basic:`أساسي`,parameters:`المعلمات`,memory:`الذاكرة والتعلم`,advanced:`متقدم`,bindings:`الارتباطات`},basic:{name:`الاسم`,namePlaceholder:`أدخل اسم الشخصية`,model:`النموذج`,selectModel:`اختر نموذجاً`,description:`الوصف`,descriptionPlaceholder:`صف شخصيتك...`,systemPrompt:`موجه النظام`,systemPromptPlaceholder:`أدخل موجه النظام الذي يحدد سلوك شخصيتك...`,systemPromptHint:`يحدد موجه النظام كيف ستتصرف شخصيتك وتستجيب.`},parameters:{temperature:`درجة الحرارة`,temperatureHint:`يتحكم في الإبداع مقابل الاتساق`,topP:`Top-P`,topPHint:`يتحكم في تنوع الاستجابة`,topK:`Top-K`,topKHint:`يحد المفردات لأعلى k رمز`,contextWindow:`نافذة السياق`,contextWindowHint:`الحد الأقصى لطول سجل المحادثة`,maxTokens:`الحد الأقصى للرموز`,maxTokensHint:`الحد الأقصى لطول الاستجابة`,repeatPenalty:`عقوبة التكرار`,repeatPenaltyHint:`يقلل الاستجابات المتكررة`},memory:{title:`نظام الذاكرة`,subtitle:`الشخصية تتذكر المحادثات بمرور الوقت`,enableHint:`فعّل نظام الذاكرة للسماح لشخصيتك بتذكر المحادثات وبناء السياق بمرور الوقت.`,loading:`جاري تحميل حالة الذاكرة...`,noData:`لا توجد بيانات ذاكرة بعد`,memories:`الذكريات`,mbUsed:`ميجابايت مستخدمة`,lastBackup:`آخر نسخة احتياطية`,never:`أبداً`,maxMemories:`الحد الأقصى للذكريات`,maxMemoriesHint:`كم ذكرى يمكن لهذه الشخصية تخزينها`,retention:`الاحتفاظ بالذاكرة`,retentionHint:`أيام الاحتفاظ بالذكريات قبل التنظيف`,autoCleanup:`تنظيف تلقائي للذكريات القديمة`,wipeAll:`مسح جميع الذكريات`,wipeCannot:`لا يمكن التراجع عن هذا`,wipeButton:`مسح`,wiping:`جاري المسح...`,wipeConfirm:`هل أنت متأكد من مسح جميع الذكريات؟ لا يمكن التراجع عن هذا.`,wipeSuccess:`تم مسح {{count}} ذكرى`},learning:{title:`التعلم التكيفي`,subtitle:`الشخصية تتطور بناءً على التفاعلات`,enableHint:`فعّل التعلم التكيفي للسماح لشخصيتك بالتطور وتخصيص الاستجابات بناءً على تفاعلاتك.`,speed:`سرعة التعلم`,slow:`بطيء`,slowDesc:`تغييرات تدريجية`,balanced:`متوازن`,balancedDesc:`وتيرة معتدلة`,fast:`سريع`,fastDesc:`تكيف سريع`,autoAdapt:`التكيف التلقائي مع تفضيلات المستخدم`,whatLearns:`ما تتعلمه الشخصية:`,conversationTone:`نبرة المحادثة`,responseStyle:`أسلوب الاستجابة`,userPreferences:`تفضيلات المستخدم`,topicInterests:`اهتمامات الموضوع`},advanced:{embeddingModel:`نموذج التضمين`,embeddingHint:`اختر النموذج المستخدم لتشفير الذاكرة والبحث الدلالي. يتم عرض نماذج التضمين أولاً، تليها النماذج الأخرى المتاحة.`,noModels:`لم يتم العثور على نماذج`,embeddingModels:`نماذج التضمين`,otherModels:`نماذج أخرى`,installHint:`ثبّت نموذج تضمين:`,recommended:`موصى به: nomic-embed-text، mxbai-embed-large، bge-m3، snowflake-arctic-embed`,aboutTitle:`حول الإعدادات المتقدمة`,aboutDescription:`يُستخدم نموذج التضمين بواسطة نظام الذاكرة لفهم المعنى الدلالي والعثور على الذكريات ذات الصلة أثناء المحادثات. اختر نموذجاً يتناسب مع حالة استخدامك والموارد المتاحة.`},actions:{cancel:`إلغاء`,save:`حفظ`,saving:`جاري الحفظ...`,saveClose:`حفظ وإغلاق`,create:`إنشاء`},success:{created:`تم إنشاء الشخصية`,updated:`تم تحديث الشخصية`},error:{saveFailed:`فشل الحفظ`},bindings:{toolServers:`خوادم الأدوات`,toolServersHint:`الخوادم التي يجوز لهذه الشخصية استدعاؤها. ترك هذا فارغًا يتيح كل خادم يستطيع المستخدم الوصول إليه أصلًا.`,noToolServers:`لا تتوفر لك أي خوادم أدوات.`,builtinTools:`الأدوات المدمجة`,builtinToolsHint:`أدوات ينفّذها الخادم بنفسه. ترك هذا فارغًا يتيحها كلها.`,noBuiltinTools:`لا توجد أدوات مدمجة متاحة.`,builtin:{web_search:`البحث في الويب`,search_documents:`البحث في المستندات`,load_skill:`تحميل مهارة`},skills:`المهارات`,skillsHint:`المهارات التي يجوز للنموذج تحميلها أثناء تفعيل هذه الشخصية.`,noSkills:`لم تنشئ أي مهارات بعد.`,collections:`مجموعات المعرفة`,collectionsHint:`مجموعات المستندات التي يمكن لهذه الشخصية البحث فيها.`,noCollections:`لم تنشئ أي مجموعات بعد.`,prompt:`الموجه`,promptHint:`موجه يبدأ به كل محادثة جديدة مع هذه الشخصية.`,noPrompt:`بلا موجه`,version:`مراجعة الارتباطات {{version}}`}},personaCard:{enhanced:`محسّن`,systemPrompt:`موجه النظام`,memories:`ذكريات`,use:`استخدام`,editTooltip:`تعديل الشخصية`,downloadTooltip:`تحميل الشخصية`,backup:`نسخة احتياطية`,exportDNA:`تصدير DNA`,wipeMemories:`مسح الذكريات`,wipeConfirm:`هل أنت متأكد من مسح جميع ذكريات هذه الشخصية؟ لا يمكن التراجع عن هذا الإجراء.`,wipeSuccess:`تم مسح {{count}} ذكرى`,backupSuccess:`تم تحميل نسخة الشخصية الاحتياطية بنجاح`,dnaSuccess:`تم تصدير DNA الشخصية بنجاح`,failed:`فشل {{action}}`,shareTooltip:`مشاركة هذه الشخصية`},userManager:JSON.parse(`{"title":"إدارة المستخدمين","subtitle":"إدارة حسابات المستخدمين والصلاحيات","pageDescription":"إدارة حسابات المستخدمين والأذونات وعناصر التحكم في الوصول لمثيل Libre WebUI الخاص بك.","loading":"جاري تحميل المستخدمين...","createUser":"إنشاء مستخدم","search":"البحث عن مستخدمين...","noUsers":"لم يتم العثور على مستخدمين","noUsersMatching":"لا يوجد مستخدمون يطابقون بحثك","columns":{"user":"المستخدم","email":"البريد الإلكتروني","role":"الدور","created":"تم الإنشاء","actions":"الإجراءات"},"roles":{"admin":"مسؤول","user":"مستخدم"},"noEmail":"لا يوجد بريد إلكتروني","deleteConfirm":"هل أنت متأكد من حذف المستخدم \\"{{name}}\\"؟","deleteSuccess":"تم حذف المستخدم بنجاح","deleteFailed":"فشل حذف المستخدم","cannotDeleteSelf":"لا يمكنك حذف حسابك الخاص","approval":{"title":"الموافقات المعلقة","description":"راجع التسجيلات الجديدة قبل السماح لها بالدخول إلى هذا المثيل.","registered":"مسجل","activate":"تفعيل الحساب","reject":"رفض التسجيل","approved":"يمكن لـ {{name}} الآن تسجيل الدخول.","failed":"تعذر الموافقة على الحساب.","notification":"{{count}} تسجيل ينتظر موافقتك.","notificationBadge":"{{count}} موافقات مستخدمين معلقة"},"form":{"title":{"create":"إنشاء مستخدم","edit":"تعديل المستخدم"},"username":"اسم المستخدم","usernamePlaceholder":"أدخل اسم المستخدم","email":"البريد الإلكتروني","emailPlaceholder":"أدخل البريد الإلكتروني (اختياري)","password":"كلمة المرور","passwordPlaceholder":"أدخل كلمة المرور","passwordHint":"اتركها فارغة للاحتفاظ بكلمة المرور الحالية","role":"الدور","creating":"جاري الإنشاء...","updating":"جاري التحديث...","createButton":"إنشاء مستخدم","updateButton":"تحديث المستخدم","createSuccess":"تم إنشاء المستخدم بنجاح","updateSuccess":"تم تحديث المستخدم بنجاح","createFailed":"فشل إنشاء المستخدم","updateFailed":"فشل تحديث المستخدم"},"workAccess":{"title":"الوصول إلى Work","description":"السماح لجميع المستخدمين النشطين بإنشاء مهام Work وتشغيلها في بيئات معزولة. يتمتع المسؤولون بالوصول دائمًا؛ وتبقى مجلدات المضيف مقصورة على المسؤولين.","saved":"تم تحديث الوصول إلى Work","saveFailed":"تعذر تحديث الوصول إلى Work"},"workPolicies":{"title":"سياسات Work","description":"إعدادات تشغيل مسماة (الصورة، الحدود، الإيقاف عند الخمول) يمكن إنشاء المهام وفقها. الحقول الفارغة ترث الإعدادات العامة.","add":"إضافة سياسة","name":"الاسم","image":"الصورة","memory":"الذاكرة","cpu":"المعالجات","pids":"حد PID","workspaceSize":"حجم مساحة العمل","idleMinutes":"الإيقاف عند الخمول (دقائق)","networkDefault":"الشبكة الافتراضية","networkInherit":"وراثة الافتراضي","networkOn":"مفعّلة","networkOff":"معطّلة","save":"حفظ","cancel":"إلغاء","edit":"تعديل السياسة","delete":"حذف السياسة","deleteConfirm":"هل تريد حذف هذه السياسة؟ ستعود المهام التي تستخدمها إلى الإعدادات العامة.","empty":"لا توجد سياسات بعد. تستخدم المهام إعدادات التشغيل العامة.","saved":"تم حفظ سياسة Work","deleted":"تم حذف سياسة Work","failed":"تعذر حفظ سياسة Work","invalidNumber":"يجب أن يكون حد PID والإيقاف عند الخمول أرقامًا."},"modelAccess":{"title":"تنزيل النماذج","description":"السماح لجميع المستخدمين النشطين بسحب النماذج من Ollama ومتصفح Hugging Face. يمكن للمسؤولين دائمًا تنزيل النماذج.","saved":"تم تحديث صلاحية تنزيل النماذج","saveFailed":"تعذر تحديث صلاحية تنزيل النماذج"},"webSearchAccess":{"title":"البحث في الويب","description":"السماح لجميع المستخدمين النشطين باستخدام البحث في الويب في المحادثات ومهام Work. يمكن للمسؤولين استخدامه دائمًا. يُهيأ المحرك في الإعدادات > البحث.","saved":"تم تحديث صلاحية البحث في الويب","saveFailed":"تعذر تحديث صلاحية البحث في الويب"},"agentAccess":{"title":"الوكلاء","description":"إتاحة قسم الوكلاء (Libre Claw) للمسؤولين. تعمل واجهات الوكلاء على المضيف بهوية مستخدم الخادم، خارج بيئة Work المعزولة.","saved":"تم تحديث الوصول إلى الوكلاء","saveFailed":"تعذر تحديث الوصول إلى الوكلاء","lockedByEnv":"مثبَّت بواسطة متغير البيئة AGENT_CLI_MODELS_ENABLED."},"groups":{"title":"المجموعات","description":"اجمع الحسابات في مجموعات لإدارة الوصول المشترك، واطّلع على ما يمكن لأي حساب فعله فعليًا.","newGroup":"مجموعة جديدة","nameLabel":"الاسم","nameRequired":"أدخل اسمًا للمجموعة.","descriptionLabel":"الوصف (اختياري)","create":"إنشاء مجموعة","creating":"جارٍ الإنشاء…","created":"تم إنشاء المجموعة.","createFailed":"تعذّر إنشاء المجموعة.","deleted":"تم حذف المجموعة.","deleteFailed":"تعذّر حذف المجموعة.","deleteGroup":"حذف المجموعة","loadFailed":"تعذّر تحميل المجموعات.","empty":"لا توجد مجموعات بعد.","memberCount":"الأعضاء: {{count}}","noMembers":"لا يوجد أعضاء بعد.","addedAt":"أُضيف في","addMember":"إضافة عضو","add":"إضافة","selectUser":"اختر مستخدمًا…","memberAdded":"تمت إضافة العضو.","memberAddFailed":"تعذّرت إضافة العضو.","removeMember":"إزالة العضو","memberRemoved":"تمت إزالة العضو.","memberRemoveFailed":"تعذّرت إزالة العضو.","effectiveTitle":"الوصول الفعلي","effectiveDescription":"اختر حسابًا لعرض الوصول الناتج له عبر الدور والمجموعات والصلاحيات الممنوحة.","accessLookupFailed":"تعذّر تحميل الوصول الفعلي.","roleLabel":"الدور","statusLabel":"الحالة","memberOf":"المجموعات","featuresLabel":"الوصول إلى الميزات","grantsLabel":"الصلاحيات الممنوحة","grantVia":"عبر"},"audit":{"title":"سجل التدقيق الأمني","description":"أحدث عمليات تسجيل الدخول وفحوصات الصلاحيات والتغييرات الإدارية على هذه النسخة.","actionFilter":"الإجراء","actionPlaceholder":"مثال: auth.login","resultFilter":"النتيجة","resultSuccess":"نجاح","resultDenied":"مرفوض","resultFailure":"فشل","limitFilter":"الحد","loadFailed":"تعذّر تحميل سجل التدقيق.","empty":"لا توجد أحداث تدقيق مسجلة بعد.","actor":"المنفّذ","target":"الهدف"},"tools":{"title":"الوصول إلى الأدوات","description":"السماح للجميع باستدعاء خوادم الأدوات. عند الإيقاف، يقتصر ذلك على المسؤولين.","saved":"حُدّث الوصول إلى الأدوات","saveFailed":"تعذّر تحديث الوصول إلى الأدوات.","lockedByEnv":"مقفل بمتغير بيئة على هذا الخادم."},"voice":{"title":"الوصول الصوتي","description":"يحدد من يمكنه استخدام الميزات الصوتية. يمتلك المسؤولون حق الوصول دائمًا.","lockedByEnv":"مثبّت بواسطة متغير بيئة","saved":"تم تحديث الوصول الصوتي","saveFailed":"فشل تحديث الوصول الصوتي","features":{"stt":"تحويل الكلام إلى نص","tts":"تحويل النص إلى كلام","voiceMode":"الوضع الصوتي","voiceCloning":"استنساخ الصوت"}},"mfaPolicy":{"title":"سياسة المصادقة الثنائية","description":"هل يجب على الحسابات إكمال خطوة تسجيل دخول ثانية.","requireAll":"إلزام جميع المستخدمين بالمصادقة الثنائية","requireAllHint":"المستخدمون بدون عامل ثانٍ سيقومون بإعداده عند تسجيل الدخول التالي.","lockedByEnv":"مثبّتة بواسطة MFA_REQUIRED_MODE.","saved":"تم حفظ السياسة.","saveFailed":"تعذّر حفظ السياسة."},"mfaReset":"إعادة تعيين المصادقة الثنائية","mfaResetConfirm":"إزالة العامل الثاني للمستخدم {{name}}؟ سيظل بإمكانه تسجيل الدخول بكلمة المرور وإعداده مجددًا.","mfaResetSuccess":"تمت إزالة المصادقة الثنائية للمستخدم {{name}}.","mfaResetNothing":"لم يكن لدى {{name}} مصادقة ثنائية.","mfaResetFailed":"فشلت إعادة التعيين."}`),usageAnalytics:{eyebrow:`الإدارة`,title:`استخدام المزود`,description:`تابع مكالمات API الصادرة واستهلاك النماذج عبر الإضافات الممكّنة في هذا المثيل.`,days:`{{count}} أيام`,refresh:`تحديث الاستخدام`,loadFailed:`تعذر تحميل استخدام المزود.`,metrics:{calls:`المكالمات`,tokens:`الرموز`},cards:{calls:`مكالمات API`,callsDetail:`عبر {{count}} مستخدم نشط`,tokens:`الرموز المُبلغ عنها`,tokensDetail:`الاستخدام المُبلغ عنه في {{count}} مكالمة`,success:`معدل النجاح`,successDetail:`{{count}} مكالمة فاشلة`,latency:`متوسط زمن الاستجابة`,latencyDetail:`وقت المزود من البداية للنهاية`},activity:{title:`الاستهلاك بمرور الوقت`,callsDescription:`الطلبات الصادرة اليومية للإضافات الممكّنة`,tokensDescription:`إجمالي الرموز اليومية التي أبلغ عنها المزودون`,chartLabel:`مخطط {{metric}} اليومي للمزود`},models:{title:`استهلاك النموذج`,description:`النماذج التي تحمل أكبر قدر من حركة المرور في هذه الفترة.`,model:`النموذج`,success:`النجاح`,latency:`زمن الاستجابة`},providers:{title:`حركة مرور الإضافات الممكّنة`},capabilities:{title:`مزيج القدرات`,characters:`{{count}} حرف`,bytes:`{{count}} بايت`,images:`{{count}} صورة`,jobs:`{{count}} مهمة فيديو`,inputs:`{{count}} مدخل`,reportedTokens:`{{count}} رمز مُبلغ عنه`},empty:{title:`لا توجد مكالمات مزود بعد`,description:`ستظهر المكالمات هنا بعد أن تعالج إضافة ممكّنة طلبات الدردشة، أو العمل، أو التضمين، أو الصورة، أو الكلام، أو الصوت، أو الفيديو.`},privacyNote:`يتم قياس الاستخدام على الخادم عند حدود الإضافة الصادرة. يخزن Libre WebUI المزود، والنموذج، والتوقيت، والحالة، والعدادات المُبلغ عنها — وليس المطالبات، أو الاستجابات، أو نقاط النهاية، أو بيانات الاعتماد، أو هيئات أخطاء المزود. تشمل إجماليات الرموز فقط المكالمات التي أعاد فيها المزود بيانات الاستخدام الوصفية.`,heatmap:{title:`عام من النشاط`,description:`استدعاءات المزوّد اليومية خلال العام الماضي، ملوّنة حسب النموذج الأكثر استخدامًا في كل يوم.`,calls:`استدعاءات`,noCalls:`لا استدعاءات`,other:`نماذج أخرى`,less:`أقل`,more:`أكثر`,yearTotal:`{{formatted}} استدعاءً خلال العام الماضي`}},systemPage:{eyebrow:`الإدارة`,title:`النظام`,description:`راقب الجهاز ووقت التشغيل الذي يستضيف مثيل Libre WebUI هذا.`,updated:`تم التحديث {{date}}`,refresh:`تحديث معلومات النظام`,loadFailed:`تعذر تحميل معلومات النظام.`,cards:{uptime:`وقت تشغيل المضيف`,uptimeDetail:`يعمل منذ {{date}}`,memory:`الذاكرة المستخدمة`,memoryDetail:`{{used}} من {{total}}`,freeSpace:`مساحة فارغة`,freeSpaceDetail:`{{label}} · {{total}} الإجمالي`,containers:`الحاويات قيد التشغيل`,containersDetail:`{{total}} حاوية معروفة لـ Docker`,dockerUnavailable:`Docker غير متاح`,unavailable:`غير متاح`},host:{title:`المضيف ووقت التشغيل`,description:`تفاصيل نظام التشغيل والمعالج وعملية Libre WebUI.`,container:`وقت تشغيل الحاوية`,native:`وقت تشغيل أصلي`,hostname:`اسم المضيف`,operatingSystem:`نظام التشغيل`,processor:`المعالج`,logicalCpus:`وحدات CPU منطقية`,loadAverage:`متوسط الحمل · 1 / 5 / 15 دقيقة`,libreVersion:`Libre WebUI`,nodeVersion:`Node.js`,process:`العملية`,workingDirectory:`دليل العمل`},memory:{title:`الذاكرة`,description:`ذاكرة النظام المرئية لوقت التشغيل واستخدام عملية التطبيق.`,usedOf:`{{used}} مستخدمة من {{total}}`,free:`{{value}} فارغة`,processRss:`RSS العملية`,heapUsed:`كومة V8 المستخدمة`,heapTotal:`إجمالي كومة V8`,external:`ذاكرة خارجية`},storage:{title:`التخزين`,description:`المساحة المتاحة لنظام ملفات وقت التشغيل وبيانات التطبيق الدائمة.`,used:`{{value}} مستخدمة`,free:`{{value}} فارغة`,empty:`معلومات نظام الملفات غير متاحة في وقت التشغيل هذا.`},docker:{title:`Docker`,description:`حالة Docker Engine للقراءة فقط وقائمة مختصرة من الحاويات.`,connected:`متصل`,unavailable:`غير متاح`,unavailableDetail:`تشخيصات Docker Engine غير متاحة.`,socketStatus:`مقبس محلي: {{status}}`,mounted:`مُثبت`,notMounted:`غير مُثبت`,running:`قيد التشغيل`,stopped:`متوقف`,paused:`متوقف مؤقتًا`,total:`الإجمالي`,version:`الإصدار`,host:`المضيف`,architecture:`البنية`,cpus:`وحدات CPU`,memory:`الذاكرة`,container:`الحاوية`,image:`الصورة`,state:`الحالة`,created:`تم الإنشاء`,empty:`Docker متصل ولا توجد حاويات مدرجة حاليًا.`},network:{title:`الشبكة`,description:`الواجهات والعناوين وعدادات حركة مرور Linux المرئية لوقت التشغيل.`,internal:`داخلي`,empty:`لا توجد واجهات شبكة مرئية لوقت تشغيل التطبيق.`},securityNote:`هذه الصفحة مخصصة للمسؤولين فقط. يُرجع الخادم ملخصات تشغيلية فقط: فهو لا يكشف متغيرات البيئة، أو بيانات الاعتماد، أو تسميات Docker، أو التثبيتات، أو أوامر الحاوية، أو حمولات الفحص. عندما يعمل Libre WebUI في حاوية، تأتي تفاصيل CPU والذاكرة على مستوى المضيف من Docker Engine عندما يكون مقبسه المحلي متاحًا؛ تصف القيم الأخرى وقت تشغيل التطبيق.`,work:{title:`Work`,description:`بيئات معزولة لجميع المستخدمين`,access:`الوصول`,accessAdmins:`المسؤولون فقط`,accessAllUsers:`جميع المستخدمين`,runtimeAvailable:`متاح`,runtimeUnavailable:`غير متاح`,activeRuntimes:`بيئات التشغيل النشطة`,pendingCleanups:`عمليات تنظيف معلقة`,orphans:`حاويات يتيمة`,owner:`المالك`,task:`المهمة`,state:`الحالة`,preview:`المعاينة`,terminals:`الطرفيات`,updated:`آخر تحديث`,stateRunning:`قيد التشغيل`,stateStopped:`متوقف`,stateStarting:`قيد البدء`,stateUnknown:`غير معروف`,noTasks:`لا توجد مهام Work بعد.`},recovery:{title:`تدريبات الاستعادة`,scheduleOn:`يعمل تلقائيًا كل {{hours}} ساعة — كل تدريب ينسخ احتياطيًا ويستعيد في نسخة معزولة ويتحقق من النتيجة.`,scheduleOff:`غير مجدول — عيّن RECOVERY_DRILL_INTERVAL_HOURS لتشغيل التدريبات تلقائيًا.`,teamUnsupported:`تغطي التدريبات الملف الفردي (SQLite)؛ يستخدم ملف الفريق أداة النسخ الاحتياطي المنسقة.`,runNow:`تشغيل التدريب الآن`,running:`قيد التشغيل…`,passed:`نجح تدريب الاستعادة.`,failed:`فشل تدريب الاستعادة.`,lastPassed:`آخر نجاح`,restoreTime:`زمن الاستعادة (RTO)`,drillSpacing:`الفاصل بين التدريبات (RPO)`,archiveSize:`حجم الأرشيف`,lastFailed:`فشل آخر تدريب في {{date}}`,originManual:`يدوي`,originScheduled:`مجدول`,columns:{when:`متى`,origin:`المصدر`,status:`الحالة`,restore:`الاستعادة`},status:{passed:`نجح`,failed:`فشل`,running:`قيد التشغيل`}}},chatHistory:{label:`سجل المحادثة`,jumpToTurn:`الانتقال إلى الدور {{index}} من {{total}}`},chatMessage:{you:`أنت`,assistant:`المساعد`,system:`النظام`,conversationSummary:`ملخص المحادثة`,restoreCompacted:`استعادة الرسائل الملخّصة`,restoreFailed:`تعذّرت استعادة الرسائل الملخّصة`,copy:`نسخ`,copyMessage:`نسخ الرسالة`,copied:`تم النسخ!`,regenerate:`إعادة التوليد`,regenerateResponse:`إعادة توليد الاستجابة`,edit:`تعديل`,editSystemMessage:`تعديل رسالة النظام`,saveChanges:`حفظ التغييرات`,cancelEditing:`إلغاء التعديل`,saveAndSubmit:`حفظ وإرسال`,goodResponse:`رد جيد`,badResponse:`رد سيئ`,delete:`حذف`,deleteConfirm:`حذف هذه الرسالة؟`,branch:`تفرع`,speaking:`جاري التحدث...`,speakMessage:`نطق الرسالة`,stopSpeaking:`إيقاف التحدث`,showMore:`عرض المزيد`,showLess:`عرض أقل`,thinking:`يفكر`,thoughtFor:`فكّر لمدة {{duration}}`,hiddenLines:`الأسطر المخفية: {{count}}`,systemMessagePlaceholder:`أدخل رسالة النظام...`,fullSizeImage:`صورة بالحجم الكامل`,startConversation:`ابدأ محادثة`,startConversationDescription:`أرسل رسالة للبدء في الدردشة مع مساعدك الذكي. اطرح أسئلة، احصل على مساعدة في البرمجة، أو أجرِ محادثة طبيعية.`,scrollToBottom:`انتقل إلى الأسفل`,newMessages:`رسائل جديدة`,feedbackTags:{accuracy:`الدقة`,style:`الأسلوب`,incomplete:`غير مكتمل`,harmful:`ضار`,formatting:`التنسيق`},feedbackComment:`أضف تعليقًا…`},imageGallery:{title:`معرض الصور`,noImages:`لا توجد صور بعد`,noImagesHint:`ولّد أول صورة باستخدام اللوحة على اليمين`,delete:`حذف`,download:`تحميل`,deleteConfirm:`هل أنت متأكد من حذف هذه الصورة؟`,deleteSuccess:`تم حذف الصورة`,deleteFailed:`فشل حذف الصورة`,downloadFailed:`فشل تحميل الصورة`,loadMore:`تحميل المزيد ({{current}} من {{total}})`,loadFailed:`فشل تحميل المعرض`},imageGeneration:{title:`توليد صورة`,prompt:`الموجه`,promptPlaceholder:`صف الصورة التي تريد إنشاءها...`,model:`النموذج`,selectModel:`اختر نموذجاً`,noModels:`لا توجد نماذج توليد صور متاحة`,configurePlugin:`قم بإعداد إضافة مع دعم توليد الصور`,size:`الحجم`,quality:`الجودة`,style:`الأسلوب`,generate:`توليد`,generating:`جاري التوليد...`,success:`تم توليد الصورة بنجاح`,failed:`فشل توليد الصورة`,enterPrompt:`يرجى إدخال موجه`,promptTooLong:`يتجاوز النص الحد الأقصى البالغ {{max}} حرف`},mediaGeneration:{title:`توليد الوسائط`,description:`أنشئ فيديو أو صوتًا أو موسيقى أو كلامًا باستخدام مزود وسائط مُفعّل.`,image:`صورة`,video:`فيديو`,audio:`صوت`,sound:`صوت`,speech:`كلام`,model:`النموذج`,voice:`الصوت أو معرف الصوت`,cloneVoice:`استنساخ صوت مرجعي`,cloneVoiceDescription:`أنشئ هذا الكلام استنادًا إلى تسجيل مرجعي بدلاً من صوت مُعد مسبقًا.`,referenceAudio:`الصوت المرجعي`,referenceTranscript:`النص المطابق للتسجيل المرجعي`,referenceTranscriptPlaceholder:`أدخل بالضبط ما يُقال في التسجيل المرجعي…`,referenceAudioTooLarge:`يجب ألا يتجاوز حجم الصوت المرجعي {{max}}.`,cloneConsent:`لا تستنسخ صوتًا إلا بإذن المتحدث. يُرسل التسجيل إلى المزوّد المحدد لإنشاء هذا المقطع ولا يحفظه Libre WebUI.`,saveVoiceProfile:`حفظ كصوت قابل لإعادة الاستخدام`,saveVoiceProfileDescription:`خزّن هذا التسجيل المرجعي ونصه بأمان. يرسلهما Libre WebUI إلى المزوّد المحدد مع كل دفعة كلام تستخدم هذا الصوت.`,voiceProfileName:`اسم الصوت المحفوظ`,voiceProfileNamePlaceholder:`مثال: صوتي`,voiceStorageConsent:`أؤكد أن لدي إذن المتحدث لاستنساخ هذا الصوت وحفظه. سيبقى المرجع محفوظًا حتى أحذفه.`,resolution:`الدقة`,aspectRatio:`نسبة العرض إلى الارتفاع`,duration:`المدة`,providerDefault:`افتراضي للمزود`,generateAudio:`توليد صوت مع الفيديو عند الدعم`,prompt:`المطالبة`,text:`النص للتحدث`,videoPlaceholder:`صف المشهد، والحركة، والكاميرا، والإضاءة...`,audioPlaceholder:`أدخل النص الذي تريد للصوت أن ينطقه...`,soundPlaceholder:`صف الصوت، أو الموسيقى، أو الأجواء، أو الاستجابة المنطوقة التي تريدها...`,generate:`توليد`,generating:`جارٍ التوليد… قد يستغرق هذا عدة دقائق`,success:`تم توليد الوسائط وحفظها في Imagine`,successWithSavedVoice:`تم إنشاء الوسائط وأصبح «{{name}}» متاحًا الآن في إعدادات الكلام`,failed:`فشل توليد الوسائط`,loadFailed:`فشل تحميل مزودي الوسائط`,noModels:`لا تتوفر نماذج {{kind}}. قم بتفعيل مزود متوافق واحفظ بيانات اعتماده أولاً.`,consentTtl:{label:`مدة الموافقة`,never:`حتى أسحبها`,days30:`30 يومًا`,days90:`90 يومًا`,days365:`سنة واحدة`}},mediaGallery:{itemCount:`{{count}} عناصر`,empty:`لا توجد وسائط مولدة بعد`,emptyHint:`قم بتوليد صورة أو فيديو أو مقطع صوتي وسيظهر هنا.`,filters:{all:`الكل`,image:`الصور`,video:`مقاطع الفيديو`,audio:`الصوت`}},errorBoundary:{title:`حدث خطأ ما`,description:`واجهنا خطأ غير متوقع. يرجى تحديث الصفحة.`,tryAgain:`تحديث الصفحة`,goHome:`الذهاب للرئيسية`,errorDetails:`تفاصيل الخطأ (التطوير)`},documents:{title:`المستندات`,upload:`رفع مستند`,uploading:`جاري الرفع...`,noDocuments:`لم يتم رفع مستندات`,uploadHint:`ارفع مستندات لاستخدامها في محادثاتك`,delete:`حذف`,deleteConfirm:`هل أنت متأكد من حذف هذا المستند؟`,deleteSuccess:`تم حذف المستند`,deleteFailed:`فشل حذف المستند`,uploadSuccess:`تم رفع المستند بنجاح`,uploadFailed:`فشل رفع المستند`,types:`مدعوم: PDF، TXT، MD، DOCX`,unsupportedFileType:`نوع الملف هذا غير مدعوم`,fileSizeTooLarge:`يجب أن يكون حجم الملف أقل من 10 ميجابايت`,uploadSuccessWithName:`تم رفع المستند "{{name}}" بنجاح`,removeSuccess:`تم إزالة المستند بنجاح`,removeFailed:`فشل إزالة المستند`,removeError:`حدث خطأ أثناء إزالة المستند`,clickToUpload:`انقر للرفع`,orDragAndDrop:`أو اسحب وأفلت`,fileTypesAndSize:`ملفات PDF وOffice وMarkdown وHTML والتعليمات البرمجية وCSV والصور والصوت حتى 10 ميغابايت`,uploadedDocuments:`المستندات المرفوعة`,removeDocument:`إزالة المستند`,fullContextToggle:`إرسال المستندات كاملة`,fullContextEstimate:`≈ {{tokens}} رمز`,fullContextTooLarge:`تتجاوز المستندات المرفقة حد السياق الكامل، لذلك استُخدم الاسترجاع بدلاً من ذلك`,fullDocument:`المستند الكامل`},ttsButton:{speak:`تحدث`,stop:`إيقاف`,speaking:`جاري التحدث...`,generateFailed:`فشل توليد الكلام`,playbackFailed:`فشل تشغيل الصوت`,stopSpeaking:`إيقاف التحدث`,preparingSpeech:`جارٍ تحضير الكلام...`,generatingSpeech:`جاري توليد الكلام...`,bufferingSpeech:`جارٍ تخزين الكلام مؤقتًا...`,enableAudio:`تمكين الصوت والقراءة بصوت عالٍ`,enableAudioShort:`تمكين الصوت`,readAloud:`قراءة بصوت عالٍ`},artifacts:{title:`المخرجات`,code:`الكود`,preview:`معاينة`,copy:`نسخ الكود`,copied:`تم النسخ!`,download:`تحميل`,expand:`توسيع`,collapse:`طي`,openInNewTab:`فتح في علامة تبويب جديدة`,invalidSvg:`محتوى SVG غير صالح`,invalidJson:`محتوى JSON غير صالح`,previewMode:`وضع المعاينة`,codeMode:`وضع الكود`,copyContent:`نسخ المحتوى`,openInPanel:`فتح في اللوحة`,created:`تم الإنشاء`,closePanelEsc:`إغلاق اللوحة (Esc)`,copyButton:`نسخ`,dragEdgeToResize:`اسحب الحافة لتغيير الحجم`,previewUnavailable:`Preview unavailable`,previewUnavailableDescription:`This artifact does not contain renderable preview content. Switch to code view to inspect the source.`,versionOf:`الإصدار {{current}} من {{total}}`,previousVersion:`الإصدار السابق`,nextVersion:`الإصدار التالي`},personaImportExport:{title:`استيراد وتصدير الشخصيات`,description:`صدّر شخصياتك لمشاركتها أو استورد شخصيات من الآخرين`,exportPersonas:`تصدير الشخصيات`,importPersonas:`استيراد الشخصيات`,noPersonasToExport:`لا توجد شخصيات للتصدير`,personasAvailable:`{{count}} شخصية متاحة`,personasAvailable_plural:`{{count}} شخصيات متاحة`,exportAll:`تصدير الكل`,uploadJsonFile:`رفع ملف JSON`,pasteJsonLabel:`لصق بيانات JSON`,pasteJsonPlaceholder:`الصق بيانات JSON للشخصية هنا...`,importing:`جاري الاستيراد...`,importButton:`استيراد الشخصية/الشخصيات`,expectedFormat:`تنسيق JSON المتوقع:`,exportSuccess:`تم تصدير الشخصية "{{name}}" بنجاح`,exportFailed:`فشل تصدير الشخصية`,exportAllSuccess:`تم تصدير جميع الشخصيات {{count}} بنجاح`,exportAllFailed:`فشل تصدير الشخصيات`,pasteJsonData:`يرجى لصق بيانات JSON للشخصية`,importMultipleSuccess:`تم استيراد {{count}} شخصيات بنجاح`,importMultipleFailed:`فشل استيراد {{count}} شخصيات`,importNoneFailed:`فشل استيراد أي شخصيات`,importSuccess:`تم استيراد الشخصية بنجاح`,importFailed:`فشل استيراد الشخصية`},generationStats:{details:`التفاصيل`,promptTokens:`رموز الإدخال:`,generatedTokens:`الرموز المولدة:`,totalTokens:`إجمالي الرموز:`,speed:`السرعة:`,promptEval:`تقييم الإدخال:`,generation:`التوليد:`,modelLoad:`تحميل النموذج:`,totalTime:`الوقت الإجمالي:`,generatedAt:`تم التوليد في:`},userMenu:{loggedOut:`تم تسجيل الخروج بنجاح`,pictureUpdated:`تم تحديث صورة الملف الشخصي`,failedUpdateAvatar:`فشل تحديث الصورة الرمزية`,failedUpdatePicture:`فشل تحديث صورة الملف الشخصي`,noEmail:`لم يتم تقديم بريد إلكتروني`,changePicture:`تغيير الصورة`,settings:`الإعدادات`,userManagement:`إدارة المستخدمين`,signOut:`تسجيل الخروج`,changeProfilePicture:`تغيير صورة الملف الشخصي`},pluginManager:{title:`مدير الإضافات`,upload:`تحميل`,addJson:`إضافة JSON`,browseHF:`تصفح HF Hub`,confirmDelete:`هل أنت متأكد من حذف هذا الإضافة؟`,uploading:`جاري تحميل الإضافة...`,pasteJson:`الصق JSON الإضافة هنا...`,installPlugin:`تثبيت الإضافة`,loading:`جاري تحميل الإضافات...`,noPlugins:`لم يتم تثبيت أي إضافة`,noPluginsDescription:`قم بتحميل ملف إضافة أو أضف إضافة من JSON للبدء.`,active:`نشط`,id:`المعرف`,endpoint:`نقطة النهاية`,activate:`تفعيل`,deactivate:`تعطيل`,activePlugin:`الإضافة النشطة`,activePluginDescription:`سيتم توجيه جميع طلبات الدردشة عبر هذه الإضافة`,variables:{title:`المتغيرات`,save:`حفظ`,saving:`جاري الحفظ...`,saved:`تم حفظ المتغيرات`,saveFailed:`فشل حفظ المتغيرات`,resetDefaults:`إعادة التعيين للافتراضي`,reset:`تم إعادة تعيين المتغيرات`,resetFailed:`فشل إعادة تعيين المتغيرات`,sensitiveSet:`تم تعيين القيمة (أدخل قيمة جديدة للتغيير)`,showValue:`إظهار قيمة {{label}}`,hideValue:`إخفاء قيمة {{label}}`,connection:`اتصال`,advanced:`معلمات متقدمة`,inherited:`استخدام افتراضي للمزود`,inheritedValue:`استخدام افتراضي للمزود ({{value}})`,enabled:`ممكّن`,disabled:`معطّل`,required:`القيمة مطلوبة`,fullApiEndpoint:`URL كامل لنقطة نهاية API`,endpointHelp:`أدخل URL الطلب الكامل، بما في ذلك مسار العملية الخاص به (على سبيل المثال، /v1/chat/completions)، وليس فقط URL الأساسي للمزود.`,invalidUrl:`أدخل URL كامل وصالح لنقطة نهاية API، على سبيل المثال https://provider.example/v1/chat/completions`,insecureUrl:`يجب أن تستخدم نقاط نهاية API بروتوكول HTTP أو HTTPS.`,httpWarning:`لا يقوم HTTP بتشفير بيانات الاعتماد أو حركة المرور. استخدمه فقط على شبكة موثوقة.`,invalidBaseUrl:`لا يمكن أن تحتوي عناوين URL الأساسية على سلسلة استعلام أو جزء.`,invalidApiPath:`يجب أن يبدأ بـ / وألا يحتوي على URL أو استعلام أو جزء أو مقطع ..`,tooLong:`القيمة طويلة جدًا`}},huggingface:{title:`متصفح نماذج HuggingFace`,subtitle:`تصفح واختيار النماذج من المركز`,searchPlaceholder:`البحث عن نماذج...`,filters:`عوامل التصفية`,task:`المهمة`,sortBy:`ترتيب حسب`,noModels:`لم يتم العثور على نماذج`,adjustSearch:`حاول ضبط البحث أو عوامل التصفية`,gated:`مقيد`,selected:`محدد`,select:`اختيار`,refresh:`تحديث`,modelsFound:`نماذج موجودة`},demoMode:{title:`وضع تجريبي`,github:`GitHub`},libreClaw:{title:`الوكلاء`,subtitle:`يعمل الوكيل المحلي والموافقات والجداول الزمنية والذاكرة والأدوات والاستخدام.`,dashboard:`لوحة المعلومات`,connection:{disconnectedTitle:`خدمة Libre Claw غير متصلة`,disconnectedDescription:`ابدأ تشغيله محليًا باستخدام <command>libre-claw start</command> أو قم بتعيين <env>LIBRE_CLAW_BASE_URL</env> في بيئة الواجهة الخلفية.`},status:{connected:`متصل`,disconnected:`غير متصل`,activeRuns:`{{count}} نشط`,activeRuns_plural:`{{count}} نشط`},states:{queued:`في قائمة الانتظار`,running:`قيد التشغيل`,blocked:`محظور`,done:`تم`,failed:`فشل`,cancelled:`تم الإلغاء`},startRun:{title:`بدء تشغيل الوكيل`,placeholder:`اطلب من Libre Claw فحص الريبو، أو إصلاح الخلل، أو إجراء مراجعة، أو جدولة تقرير...`,chatRun:`تشغيل الدردشة`,goalMode:`وضع الهدف`,providerOverride:`تجاوز الموفر`,modelOverride:`تجاوز النموذج`,run:`تشغيل`},modelRoute:{title:`الطريق النموذجي`,providerPlaceholder:`مزود`,modelPlaceholder:`نموذج`,persistGlobal:`استمر في Libre Claw التكوين العام`,saveModel:`حفظ النموذج`,theme:`سمة Libre Claw`,saveTheme:`حفظ الموضوع`},runs:{title:`التشغيلات`,empty:`لا توجد تشغيلات Libre Claw بعد.`},timeline:{title:`الخط الزمني للتشغيل`,empty:`حدد تشغيلًا لتفقد أحداثه.`,streaming:`الجري...`,assistantResponse:`رد مساعد`,resultOk:`حسنا`,resultError:`خطأ`,labels:{userMessage:`رسالة المستخدم`,toolCall:`استدعاء الأداة`,toolResult:`نتيجة الأداة`,approvalRequest:`طلب الموافقة`,approvalResponse:`رد الموافقة`,runStarted:`بدأ التشغيل`,runFinished:`انتهى التشغيل`,usage:`الاستخدام`,error:`خطأ`}},approvals:{needed:`الموافقة مطلوبة`,allowOnce:`السماح مرة واحدة`,alwaysAllowTool:`السماح دائمًا بالأداة`,deny:`رفض`,toolApprovalRequested:`تم طلب الموافقة على الأداة`},automations:{title:`الأتمتة`,namePlaceholder:`الاسم`,schedulePlaceholder:`daily 09:00`,promptPlaceholder:`موجه الأتمتة`,create:`إنشاء`,empty:`لا توجد عمليات أتمتة مجدولة Libre Claw.`,runNow:`تشغيل الآن`,pause:`وقفة`,resume:`استئناف`,routes:{report:`تقرير`,telegram:`Telegram`},status:{active:`نشط`,paused:`متوقف مؤقتًا`}},usageFallback:{title:`الاستخدام والاحتياطي`,usage:`الاستخدام`,fallbackRoute:`الطريق الاحتياطي`,noUsage:`لا توجد سجلات استخدام حتى الآن.`},metrics:{provider:`مزود`,model:`نموذج`,input:`الإدخال`,output:`الإخراج`,cached:`مخبأة`,reasoning:`المنطق`,cost:`التكلفة`,tool:`أداة`,resolution:`القرار`,state:`الحالة`,stopReason:`سبب التوقف`,tokens:`{{formatted}} رمز مميز`,tokens_plural:`{{formatted}} الرموز`},fallbacks:{tool:`أداة`,unknown:`غير معروف`,resolved:`حلها`,unknownError:`خطأ غير معروف`},toasts:{loadStatusFailed:`لا يمكن تحميل حالة Libre Claw`,enterTask:`أدخل مهمة لـ Libre Claw`,runStarted:`بدأ تشغيل Libre Claw`,startRunFailed:`تعذر بدء تشغيل Libre Claw`,runCancelled:`تم إلغاء التشغيل`,cancelRunFailed:`تعذر إلغاء التشغيل`,approved:`تمت الموافقة عليه`,denied:`مرفوض`,resolvePermissionFailed:`لا يمكن حل الإذن`,providerModelRequired:`مطلوب الموفر والنموذج`,modelUpdated:`تم تحديث نموذج Libre Claw`,updateModelFailed:`لا يمكن تحديث النموذج`,themeUpdated:`تم تحديث سمة Libre Claw`,updateThemeFailed:`لا يمكن تحديث الموضوع`,automationRequired:`مطلوب اسم الأتمتة والجدول الزمني والموجه`,automationCreated:`تم إنشاء الأتمتة`,createAutomationFailed:`لا يمكن إنشاء الأتمتة`,automationUpdated:`تم تحديث الأتمتة`,updateAutomationFailed:`لا يمكن تحديث الأتمتة`}},work:JSON.parse(`{"title":"العمل","subtitle":"مساحات عمل معزولة للنماذج","tasks":{"title":"مهام العمل","subtitle":"مساحات عمل محلية دائمة","new":"مهمة جديدة","emptyTitle":"لا توجد مهام عمل بعد","empty":"ستظهر مهام العمل هنا بعد إرسال الرسالة الأولى.","untitled":"مهمة بلا عنوان","actions":"إجراءات المهمة","delete":"حذف المهمة","deleteNamed":"حذف {{title}}","deleteConfirm":"هل تريد حذف «{{title}}» ومساحة عملها نهائيًا؟","close":"إغلاق مهام العمل","open":"فتح مهام العمل","rename":"عنوان المهمة","loading":"جارٍ تحميل المهمة…","notFound":"مهمة العمل هذه غير متاحة","back":"بدء مهمة جديدة","status":"الحالة: {{status}}"},"landing":{"title":"بدء مهمة عمل جديدة","description":"امنح نموذجًا محليًا أو تابعًا لمزوّد مُعدّ مساحة عمل دائمة ومعزولة. يمكنه فحص الملفات وتشغيل الأدوات والمتابعة من حيث توقف عند عودتك.","isolated":"معزولة","isolatedBody":"لكل مهمة حاويتها وملفاتها الخاصة.","durable":"دائمة","durableBody":"يمكنك العودة إلى محادثتها ومساحة عملها لاحقًا.","controlled":"مضبوطة","controlledBody":"تبقى بيئة التشغيل وملفات المهمة معزولة عن النظام المضيف."},"composer":{"placeholder":"صِف ما تريد بناءه أو تغييره…","model":"نموذج العمل","noModels":"لا توجد نماذج متوافقة مع وضع العمل","cancel":"إيقاف","send":"تشغيل","hint":"تحتفظ كل مهمة بملفاتها وسجلها الخاصين. راجع مخرجات النموذج قبل استخدامها.","remoteTitle":"مزوّد بعيد","remoteHint":"تُرسل المحادثة ومخرجات الأدوات إلى الخدمة المُعدّة. قد يجري التشغيل المستقل الواحد عدة اتصالات بالمزوّد وقد تترتب عليه رسوم. تبقى ملفات مساحة العمل محلية ما لم تُرجع إحدى الأدوات محتوياتها.","remoteDismiss":"تجاهل","remoteDismissLabel":"تجاهل إشعار المزوّد البعيد","remoteDismissFailed":"تعذّر حفظ تفضيل المزوّد البعيد.","noModelSelected":"لم يتم اختيار نموذج متوافق مع وضع العمل."},"conversation":{"ready":"مساحة العمل جاهزة","empty":"تابع المهمة أدناه. تظل هذه المحادثة وملفاتها مرتبطة بمساحة العمل هذه.","loadOlder":"تحميل الرسائل الأقدم"},"status":{"preparing":"جارٍ تجهيز مساحة العمل المعزولة…","running":"جارٍ العمل داخل مساحة العمل المحلية…"},"statusLabels":{"idle":"خامل","thinking":"يفكّر","complete":"مكتمل","needsInput":"بحاجة إلى إدخال","error":"خطأ"},"live":{"connecting":"جارٍ الاتصال بالتحديثات المباشرة…","reconnecting":"جارٍ إعادة الاتصال بالتحديثات المباشرة…","unavailable":"التحديثات المباشرة غير متاحة","newActivity":"نشاط جديد","skillsLoaded":"مهارات مساحة العمل · {{count}}"},"runtime":{"unavailable":"بيئة التشغيل غير متاحة","ready":"بيئة التشغيل جاهزة","readyOllama":"Docker جاهز","readyPlugin":"Docker والمكوّن الإضافي جاهزان","readyHybrid":"Docker والنماذج جاهزة","reason":"يلزم توفر Docker ومزوّد نماذج متاح عبر Ollama أو مكوّن إضافي."},"workspace":{"label":"طرق عرض مساحة العمل","files":"الملفات","activity":"النشاط","preview":"المعاينة","resize":"تغيير حجم المحادثة ومساحة العمل","resizeHint":"اسحب لتغيير الحجم. استخدم مفاتيح الأسهم للتحكم الدقيق. انقر نقرًا مزدوجًا أو اضغط Enter لإعادة التعيين.","splitSize":"المحادثة {{conversation}}٪، مساحة العمل {{workspace}}٪","terminal":"الطرفية","git":"Git"},"files":{"discard":"هل تريد تجاهل التغييرات غير المحفوظة في الملف؟","leaveWithDraft":"هل تريد مغادرة هذا الملف؟ سيبقى تعديلك غير المحفوظ كمسودة في المتصفح.","up":"المجلد الأصل","back":"العودة إلى الملفات","empty":"لا توجد ملفات في هذا المجلد بعد.","select":"اختر ملفًا لفحصه وتعديله.","editorLabel":"محرر الملف: {{path}}","format":"تنسيق","formatted":"تم تنسيق الشيفرة.","formatFailed":"تعذّر تنسيق هذا الملف.","formatShortcut":"تنسيق (Shift+Alt+F)","formatTooLarge":"يقتصر التنسيق على الملفات التي تقل عن 100,000 محرف و4,000 سطر.","formatUnsupported":"التنسيق غير متاح لهذا النوع من الملفات.","saveShortcut":"حفظ (⌘/Ctrl+S)","highlightPaused":"تم إيقاف التمييز المباشر مؤقتًا للملفات الكبيرة للحفاظ على استجابة المحرر.","plainTextLarge":"نص عادي · ملف كبير","changes":"التغييرات","changesSince":"ما تغيّر منذ الدور الأخير","diffLabel":"التغييرات منذ الدور الأخير: {{path}}","diffFolded":"{{count}} سطرًا دون تغيير"},"activity":{"empty":"ستظهر الأوامر وعمليات الملفات ونتائج الأدوات هنا.","toolActivity":"نشاط الأداة","details":"التفاصيل","kinds":{"message":"رسالة","toolCall":"استدعاء أداة","toolResult":"نتيجة أداة","error":"خطأ"}},"preview":{"command":"أمر تشغيل اختياري","start":"بدء المعاينة","stop":"إيقاف المعاينة","open":"فتح","starting":"جارٍ بدء المعاينة…","frameTitle":"معاينة مساحة العمل","failed":"تعذّر بدء المعاينة. راجع «النشاط»، ثم جرّب أمرًا آخر.","empty":"شغّل التطبيق داخل مساحة العمل هذه لمعاينته هنا."},"mobile":{"surface":"واجهة المهمة","conversation":"المحادثة","workspace":"مساحة العمل"},"toasts":{"runFailed":"تعذّر بدء مهمة العمل.","updateFailed":"تعذّر تحديث هذه المهمة.","renameFailed":"تعذّر تغيير اسم هذه المهمة.","cancelled":"تم إيقاف تشغيل المهمة.","cancelFailed":"تعذّر إيقاف تشغيل المهمة.","deleteFailed":"تعذّر حذف مهمة العمل هذه.","saveFailed":"تعذّر حفظ هذا الملف.","saved":"تم حفظ الملف.","previewFailed":"تعذّر بدء المعاينة.","previewStopFailed":"تعذّر إيقاف المعاينة."},"terminal":{"connecting":"جارٍ فتح صدفة داخل بيئة العزل…","closed":"انتهت جلسة الطرفية.","failed":"تعذّر بدء جلسة الطرفية.","reconnect":"إعادة الاتصال","unavailable":"الطرفية التفاعلية غير متاحة في هذا النشر.","blockedByRun":"النموذج يستخدم هذه الحاوية. تفتح الطرفية عند انتهاء الدور.","taskRunning":"دور النموذج قيد التنفيذ"},"policy":{"label":"سياسة التشغيل","default":"افتراضي (الحدود العامة)"},"git":{"actionFailed":"فشل إجراء Git.","blockedByPreview":"أوقف المعاينة قبل تغيير حالة Git.","blockedByRun":"تتاح إجراءات الكتابة في Git بعد انتهاء دور النموذج.","branchCreated":"تم إنشاء {{name}}.","branchSwitched":"تم التبديل إلى {{name}}.","clean":"شجرة العمل نظيفة.","commit":"إيداع التغييرات المجهزة","commitMessage":"رسالة الإيداع","committed":"تم إنشاء الإيداع.","detached":"HEAD منفصل","diff":"معاينة الفرق","diffFailed":"تعذر تحميل هذا الفرق.","history":"السجل المحلي","initialize":"تهيئة Git","initializeDescription":"أنشئ مستودعًا محليًا للحالة والفروق والفروع والإيداعات. لا تُربط أي بيانات اعتماد بعيدة.","initialized":"تمت تهيئة مستودع Git.","loadFailed":"تعذر تحميل حالة Git.","localOnly":"Git محلي فقط. يتطلب الدفع والسحب وطلبات الدمج وسيط اعتماد موثوقًا منفصلًا.","newBranch":"فرع محلي جديد","noCommits":"لا توجد إيداعات بعد.","noDiff":"لا يوجد فرق نصي بعد. تظهر الملفات غير المتتبعة بعد التجهيز.","notInitialized":"لم تتم تهيئة Git","selectChange":"اختر ملفًا معدلًا لفحص فرقه.","selectPath":"اختيار {{path}}","stageAll":"تجهيز الكل","stageSelected":"تجهيز {{count}}","staged":"تم تجهيز التغييرات.","switchBranch":"تبديل الفرع المحلي","changes":"التغييرات","createBranch":"إنشاء","filterFiles":"تصفية الملفات المتغيّرة","noFilterMatches":"لا توجد ملفات متغيّرة تطابق هذا الفلتر.","allChanges":"كل التغييرات","diffTruncated":"هذا الفرق مقتطع.","binaryFile":"ملف ثنائي، لا يوجد فرق نصي."},"hostWorkspace":{"hint":"اتركه فارغًا لمساحة عمل معزولة، أو وجّه المهمة إلى مجلد على هذا الجهاز.","label":"مجلد مساحة العمل (اختياري)","warning":"يمكن للمهمة قراءة هذا المجلد والكتابة فيه مباشرة. اتركه فارغًا لاستخدام مساحة عمل معزولة."}}`),personaBackground:{label:`صورة الخلفية`,uploadBackgroundImage:`رفع صورة الخلفية`,dragAndDrop:`اسحب وأفلت صورة أو انقر للتصفح`,chooseImage:`اختيار صورة`,uploading:`جارٍ الرفع...`,enterImageUrl:`أو أدخل رابط الصورة`,supportedFormats:`يدعم: JPG, PNG, GIF, WebP (الحد الأقصى 5 ميجابايت). الصور العريضة الأفقية تعمل بشكل أفضل.`,customBackground:`صورة خلفية مخصصة`,clickToChange:`انقر للتغيير أو الإزالة`,removed:`تم إزالة الخلفية`,uploaded:`تم رفع الخلفية بنجاح`,invalidFile:`يرجى اختيار ملف صورة صالح`,fileTooLarge:`يجب أن يكون حجم صورة الخلفية أقل من 5 ميجابايت`,readFailed:`فشل في قراءة ملف الصورة`,uploadFailed:`فشل في رفع صورة الخلفية`},modelSelector:{searchInstalled:`البحث في النماذج المثبتة...`,searchOllama:`البحث في مكتبة Ollama...`,searchHuggingFace:`البحث في HuggingFace...`,selectModel:`اختر نموذجًا`,personas:`الشخصيات`,ollamaModels:`نماذج Ollama`,pluginModels:`نماذج الإضافات`,actions:`الإجراءات`,installed:`مثبت`,use:`استخدام`,pull:`تنزيل`,pullRestricted:`تثبيت النماذج مقصور على المسؤولين في هذا المثيل.`,adminOnlyPull:`للمسؤولين فقط`,legacyProvider:`المزود غير مسجل`,providerNotRecorded:`المزود غير مسجل`,providerUnavailable:`المزود غير متاح`,reselectProvider:`أعد اختيار مزود لتثبيت هذا النموذج`,unavailable:`غير متاح`,unavailableSelections:`اختيارات غير متاحة`,agentModels:`الوكلاء`},whatsNew:{title:`ما الجديد`,releaseNotes:`ملاحظات الإصدار`,cta:`حسنًا، هيا بنا`,starAsk:`هل يعجبك Libre WebUI؟ اترك نجمة على GitHub`},notes:{title:`الملاحظات`,new:`ملاحظة جديدة`,untitled:`بدون عنوان`,empty:`لا توجد ملاحظات بعد`,selectOrCreate:`اختر ملاحظة أو أنشئ واحدة جديدة`,contentPlaceholder:`اكتب بصيغة ماركداون…`,saved:`تم الحفظ`,saveFailed:`تعذر حفظ الملاحظة`,createFailed:`تعذر إنشاء ملاحظة`,deleteConfirm:`حذف هذه الملاحظة؟`,deleteFailed:`تعذر حذف الملاحظة`,tools:`أدوات الملاحظة`,revisions:`السجل`,attachments:`المرفقات`,share:`مشاركة`,assist:`تحرير بالذكاء الاصطناعي`,noRevisions:`لا توجد إصدارات سابقة بعد`,restore:`استعادة`,revisionRestored:`تمت استعادة الإصدار`,revisionRestoreFailed:`تعذّرت استعادة هذا الإصدار`,addAttachment:`إضافة مرفق`,noAttachments:`لا توجد مرفقات بعد`,attachmentAdded:`تمت إضافة المرفق`,attachmentFailed:`تعذّرت إضافة المرفق`,attachmentDownloadFailed:`تعذّر تنزيل المرفق`,shareUsernamePlaceholder:`اسم المستخدم`,permissionRead:`يمكنه العرض`,permissionWrite:`يمكنه التحرير`,shareAction:`مشاركة`,notShared:`لم تُشارك مع أحد بعد`,revokeShare:`إلغاء الوصول`,shareHint:`تظهر الملاحظات المشتركة في قائمة ملاحظات الشخص الآخر. يمكن إلغاء الوصول في أي وقت.`,shareUserNotFound:`لا يوجد مستخدم بهذا الاسم`,shareAdded:`تمت المشاركة مع {{username}}`,shareFailed:`تعذّرت مشاركة الملاحظة`,assistPlaceholder:`صف التغيير، مثل اختصار الملخص أو تصحيح القواعد`,assistGenerate:`اقتراح تعديل`,assistNoModel:`اختر نموذجًا في المحادثة أولاً`,assistNoChanges:`لم يقترح النموذج أي تغييرات`,assistApply:`تطبيق`,assistDiscard:`تجاهل`,assistApplied:`تم تطبيق التعديل`,assistRevisionHint:`عند التطبيق يبقى الإصدار السابق في السجل، لذا يمكن التراجع عن أي تعديل بالذكاء الاصطناعي.`,assistFailed:`تعذّر إنشاء التعديل`,pin:`تثبيت الملاحظة`,unpin:`إلغاء تثبيت الملاحظة`,pinned:`مثبّتة`,export:`تنزيل كـ Markdown`,sharedWithYou:`مشتركة معك`},calendar:{title:`التقويم`,today:`اليوم`,month:`شهر`,week:`أسبوع`,previous:`السابق`,next:`التالي`,newEvent:`حدث جديد`,editEvent:`تعديل الحدث`,eventTitle:`العنوان`,titlePlaceholder:`عنوان الحدث`,date:`التاريخ`,start:`البداية`,end:`النهاية`,allDay:`طوال اليوم`,repeat:`تكرار`,repeatNone:`لا يتكرر`,repeatDaily:`يوميًا`,repeatWeekly:`أسبوعيًا`,repeatMonthly:`شهريًا`,repeatYearly:`سنويًا`,notes:`ملاحظات`,more:`+{{n}} أخرى`,loadFailed:`فشل تحميل التقويم`,saveFailed:`فشل حفظ الحدث`,deleteFailed:`فشل حذف الحدث`,day:`يوم`,calendarLabel:`التقويم`,personalCalendar:`شخصي`,reminderLabel:`تذكير`,reminderNone:`بدون تذكير`,reminderMinutes:`قبل {{minutes}} دقيقة`,reminderHour:`قبل ساعة واحدة`,reminderDay:`قبل يوم واحد`,sharedReadOnly:`هذا الحدث مشارك معك للعرض فقط.`,sharedBadge:`مشترك`,shareCalendar:`مشاركة التقويم`,newCalendarPlaceholder:`تقويم جديد…`,calendarSaveFailed:`تعذر حفظ التقويم`,exportFailed:`تعذر تصدير التقويم`,importFailed:`تعذر استيراد الملف`,importResult:`تم استيراد {{total}} أحداث`,importIcs:`استيراد`,exportIcs:`تصدير`},automations:{title:`الأتمتة`,tab:{automations:`الأتمتة`,runs:`التشغيلات`},newAutomation:`أتمتة جديدة`,editAutomation:`تعديل الأتمتة`,empty:`لا توجد أتمتة بعد. أنشئ واحدة لتشغيل مهمة وفق جدول.`,loadFailed:`فشل تحميل الأتمتة`,saveFailed:`فشل حفظ الأتمتة`,actionFailed:`فشل الإجراء`,runQueued:`بدأ التشغيل`,status:{active:`نشطة`,paused:`متوقفة`},nextRun:`التشغيل التالي {{when}}`,actions:`إجراءات`,pause:`إيقاف مؤقت`,resume:`استئناف`,runNow:`تشغيل الآن`,openChat:`فتح المحادثة`,noRuns:`لا توجد تشغيلات بعد`,deletedAutomation:`أتمتة محذوفة`,runHistory:`سجل التشغيل (آخر 30 يومًا)`,succeeded:`نجحت`,failed:`فشلت`,form:{name:`الاسم`,namePlaceholder:`الأتمتة الخاصة بي`,triggers:`المشغّلات`,addTrigger:`إضافة مشغّل`,instructions:`التعليمات`,instructionsPlaceholder:`ما الذي يجب تشغيله وفق هذا الجدول؟`,model:`النموذج`,modelAuto:`تلقائي`,notification:`الإشعار`,notifyApp:`التطبيق`,notifyOff:`إيقاف`,frequency:`التكرار`,time:`الوقت`,minute:`الدقيقة`,fromHour:`من`,toHour:`إلى`,weekday:`اليوم`,dayOfMonth:`اليوم`,month:`الشهر`},kind:{once:`مرة واحدة`,hourly:`كل ساعة`,daily:`يوميًا`,weekly:`أسبوعيًا`,monthly:`شهريًا`,yearly:`سنويًا`},trigger:{once:`مرة واحدة في {{when}}`,hourly:`كل ساعة عند الدقيقة {{minute}}`,daily:`يوميًا في {{time}}`,weekly:`أسبوعيًا يوم {{day}} في {{time}}`,monthly:`شهريًا في اليوم {{day}} في {{time}}`,yearly:`سنويًا في {{date}} في {{time}}`},finishedNotification:`اكتمل {{n}} من تشغيلات الأتمتة`,templatesTitle:`قوالب`,templates:{morningBrief:{name:`موجز الصباح`,description:`ابدأ يومك بالعناوين والأولويات.`},newsDigest:{name:`موجز أخبار الذكاء الاصطناعي`,description:`إصدارات النماذج والأبحاث والتمويل المهم.`},weeklyReview:{name:`مراجعة أسبوعية`,description:`اختم الأسبوع: الإنجازات والمهام المعلقة وأولويات المرحلة المقبلة.`},monthlyReport:{name:`تقرير شهري`,description:`مخطط تقرير حالة في أول كل شهر.`}}},home:{active:`نشط`,continue:`متابعة`,start:`ابدأ`,explore:`استكشاف`},palette:{empty:`لا توجد نتائج.`,placeholder:`ابحث في المحادثات وWork والإجراءات…`,toggleTheme:`تبديل السمة`,actions:`الإجراءات`,chats:`المحادثات`,search:`بحث`,settings:`الإعدادات`,work:`العمل`,messages:`الرسائل`,notes:`الملاحظات`,documents:`المستندات`},tabs:{actions:`إجراءات التبويب`,close:`إغلاق التبويب`,closeAll:`إغلاق كل التبويبات`,closeOthers:`إغلاق التبويبات الأخرى`,closeRight:`إغلاق التبويبات إلى اليمين`,home:`الرئيسية`,label:`التبويبات المفتوحة`,new:`تبويب جديد`,newWork:`Work جديد`,chat:`محادثة`,newChat:`محادثة جديدة`,work:`العمل`},tools:{arguments:`الوسائط`,result:`النتيجة`,callStatus:{awaiting_approval:`بانتظار الموافقة`,running:`قيد التشغيل`,succeeded:`تم`,failed:`فشل`,denied:`مرفوض`,cancelled:`أُلغي`},approval:{title:`الأداة بحاجة إلى موافقة`,description:`يريد النموذج تشغيل {{tool}} على {{server}}. قد يغيّر هذا الاستدعاء بيانات خارج هذه المحادثة.`,builtinSource:`هذا الخادم`,allowOnce:`السماح مرة واحدة`,allowSession:`السماح في هذه المحادثة`,allowAlways:`السماح دائمًا`,deny:`رفض`}},promptsPage:{title:`الموجهات`,description:`قوالب موجهات قابلة لإعادة الاستخدام بمتغيرات محددة النوع. اكتب / في مربع الكتابة لإدراج أحدها.`,newPrompt:`موجه جديد`,editPrompt:`تحرير الموجه`,empty:`لا توجد موجهات بعد`,emptyHint:`الموجه قالب رسالة محفوظ. بعد إنشاء واحد، تؤدي كتابة /slug في مربع الكتابة إلى إدراجه وطلب أي متغيرات يعلنها.`,loadFailed:`تعذّر تحميل موجهاتك.`,saved:`تم حفظ الموجه`,saveFailed:`تعذّر حفظ الموجه.`,deleted:`تم حذف الموجه`,deleteFailed:`تعذّر حذف الموجه.`,deleteTitle:`حذف الموجه`,deleteConfirm:`هل تريد حذف "{{title}}"؟ سيؤدي هذا أيضًا إلى إزالة سجل إصداراته.`,exportFailed:`تعذّر تصدير الموجه.`,imported:`تم استيراد الموجه`,importFailed:`تعذّر استيراد هذا الملف.`,historyFailed:`تعذّر تحميل سجل الإصدارات.`,rolledBack:`تمت إعادة الموجه إلى إصدار سابق`,rollbackFailed:`تعذّرت إعادة الموجه إلى إصدار سابق.`,versionLabel:`الإصدار {{version}}`,updated:`حُدّث {{when}}`,form:{slug:`المعرّف`,slugPlaceholder:`weekly-report`,slugHint:`يُستخدم بصيغة /slug في مربع الكتابة.`,slugInvalid:`أحرف إنجليزية صغيرة وأرقام وشرطات فقط.`,title:`العنوان`,titlePlaceholder:`التقرير الأسبوعي`,description:`الوصف`,descriptionPlaceholder:`الغرض من هذا الموجه`,content:`المحتوى`,contentPlaceholder:`اكتب الموجه. ضع كل ما تريد ملأه لاحقًا بين قوسين معقوفين مزدوجين.`,contentHint:`العنصر النائب اسم بين قوسين معقوفين مزدوجين. عرّفه أدناه لتمنحه تسمية أو قيمة افتراضية.`,tags:`الوسوم`,tagsPlaceholder:`بحث، كتابة`,variables:`المتغيرات`,variablesHint:`اختياري. عرّف عنصرًا نائبًا هنا لتمنحه تسمية أو قيمة افتراضية أو مجموعة خيارات.`,variableName:`الاسم`,variableType:`النوع`,variableLabel:`التسمية`,variableDefault:`القيمة الافتراضية`,variableRequired:`مطلوب`,variableOptions:`الخيارات`,variableOptionsPlaceholder:`خيارات مفصولة بفواصل`,addVariable:`إضافة متغير`,removeVariable:`إزالة المتغير`},variableTypes:{text:`نص`,number:`رقم`,select:`اختيار`,boolean:`نعم أو لا`},history:{open:`سجل الإصدارات`,title:`سجل {{title}}`,subtitle:`تحفظ الإعادة المراجعة المختارة كإصدار جديد. لا يُستبدل أي شيء.`,empty:`لا توجد إصدارات سابقة بعد.`,current:`الحالي`,rollback:`إعادة`,rollingBack:`جارٍ الإعادة...`},templatesTitle:`ابدأ من قالب`,templates:{reviewPr:{name:`مراجعة طلب السحب`,description:`مراجعة شيفرة منظّمة بمستوى صرامة قابل للضبط.`},summarize:{name:`تلخيص لجمهور محدد`,description:`ملخّص بنقاط مُصاغ حسب القارئ.`},translate:{name:`ترجمة`,description:`ترجمة تحافظ على النبرة والتنسيق.`},explainCode:{name:`شرح الشيفرة`,description:`شرح تفصيلي مع الحالات الحدّية والمخاطر.`}}},skillsPage:{title:`المهارات`,description:`مجموعات تعليمات مسمّاة يمكن للنموذج تحميلها عند الحاجة أثناء العمل.`,newSkill:`مهارة جديدة`,editSkill:`تحرير المهارة`,empty:`لا توجد مهارات بعد`,emptyHint:`المهارة مجموعة تعليمات لا يحمّلها النموذج إلا عند حاجته إليها. اذكر $slug في رسالة، أو دع النموذج يستدعيها عبر أداة load_skill.`,loadFailed:`تعذّر تحميل مهاراتك.`,saved:`تم حفظ المهارة`,saveFailed:`تعذّر حفظ المهارة.`,toggleFailed:`تعذّر تغيير المهارة.`,deleted:`تم حذف المهارة`,deleteFailed:`تعذّر حذف المهارة.`,deleteTitle:`حذف المهارة`,deleteConfirm:`هل تريد حذف "{{name}}"؟ سيؤدي هذا أيضًا إلى إزالة سجل إصداراتها.`,exportFailed:`تعذّر تصدير المهارة.`,imported:`تم استيراد المهارة`,importFailed:`تعذّر استيراد هذا الملف.`,historyFailed:`تعذّر تحميل سجل الإصدارات.`,rolledBack:`تمت إعادة المهارة إلى إصدار سابق`,rollbackFailed:`تعذّرت إعادة المهارة إلى إصدار سابق.`,versionLabel:`الإصدار {{version}}`,updated:`حُدّث {{when}}`,form:{slug:`المعرّف`,slugPlaceholder:`code-review`,slugHint:`يُستخدم بصيغة $slug عند ذكر المهارة.`,slugInvalid:`أحرف إنجليزية صغيرة وأرقام وشرطات فقط.`,name:`الاسم`,namePlaceholder:`مراجعة الشيفرة`,description:`الوصف`,descriptionPlaceholder:`متى تُستخدم هذه المهارة`,descriptionHint:`هذا هو البيان الذي يراه النموذج. اكتبه بحيث يعرف النموذج متى تنطبق المهارة دون تحميلها.`,instructions:`التعليمات`,instructionsPlaceholder:`تعليمات بصيغة Markdown يقرأها النموذج بعد تحميل هذه المهارة.`,instructionsHint:`تُحمّل فقط عند استخدام المهارة، لذا لا يكلّف طولها شيئًا حتى ذلك الحين.`,enabled:`مُفعّل`,enabledHint:`تبقى المهارات المعطّلة محفوظة لكنها لا تُعرض على النموذج أبدًا.`},history:{open:`سجل الإصدارات`,title:`سجل {{name}}`},templatesTitle:`ابدأ من قالب`,templates:{citeSources:{name:`الاستشهاد بالمصادر`,description:`مراجع مرقّمة مع روابط، دون ادعاءات بلا مصدر.`},releaseNotes:{name:`أسلوب ملاحظات الإصدار`,description:`مدخلات مجمّعة موجّهة للمستخدم بلا معرّفات داخلية.`},meetingNotes:{name:`تنسيق محضر الاجتماع`,description:`القرارات وبنود العمل والأسئلة المفتوحة من نص الاجتماع.`}},importUrl:{button:`من رابط`,title:`استيراد مهارة من رابط`,hint:`الصق رابط skills.sh أو GitHub، أو owner/repo/skill، أو رابطًا مباشرًا لملف SKILL.md.`,placeholder:`https://skills.sh/owner/repo/skill أو owner/repo/skill`,overwrite:`استبدال مهارتي إذا كان المعرف موجودًا بالفعل`},files:{title:`الملفات المرفقة`,hint:`مستندات مرجعية ونصوص برمجية يقرؤها النموذج عند الطلب عبر read_skill_file.`,add:`إضافة ملف`,empty:`لا توجد ملفات مرفقة بعد.`,pathPlaceholder:`docs/reference.md`,contentPlaceholder:`محتوى الملف…`,loadFailed:`تعذر تحميل الملف`,saveFailed:`تعذر حفظ الملف`,deleteFailed:`تعذر حذف الملف`},folderImport:{button:`من مجلد`,missingSkillMd:`يجب أن يحتوي المجلد على ملف SKILL.md`,done:`تم استيراد المهارة مع {{count}} من الملفات المرفقة`}},toolsPage:{title:`الأدوات`,description:`خوادم الأدوات التي يمكن للنموذج استدعاؤها، والموافقات التي منحتها لها.`,approvalNotice:`الأدوات التي تغيّر بيانات خارج المحادثة تطلب الموافقة دائمًا، إلا إذا منحت تلك الأداة موافقة دائمة أو موافقة لكل محادثة.`,registerServer:`تسجيل خادم`,registerHint:`يقرأ Libre WebUI الخادم مرة واحدة ويثبّت الأدوات التي يعرضها. حدّث الخادم لاحقًا لالتقاط التغييرات.`,editServer:`تحرير الخادم`,empty:`لا توجد خوادم أدوات`,emptyHintAdmin:`سجّل خادم OpenAPI أو MCP لتمنح النموذج ما يستدعيه.`,emptyHintUser:`لم يشارك أي مسؤول خوادم أدوات معك بعد.`,loadFailed:`تعذّر تحميل خوادم الأدوات.`,saved:`تم حفظ خادم الأدوات`,saveFailed:`تعذّر حفظ خادم الأدوات.`,deleted:`تم حذف خادم الأدوات`,deleteFailed:`تعذّر حذف خادم الأدوات.`,deleteTitle:`حذف خادم الأدوات`,deleteConfirm:`هل تريد حذف "{{name}}"؟ سيفقد الجميع الوصول إلى أدواته.`,refresh:`تحديث الأدوات`,refreshed:`أُعيدت قراءة الأدوات من الخادم`,refreshFailed:`تعذّرت قراءة الخادم.`,toolsLoadFailed:`تعذّر تحميل الأدوات المثبّتة.`,overrideFailed:`تعذّر تغيير الأداة.`,pinnedTools:`الأدوات المثبّتة`,noPinnedTools:`لم يعرض هذا الخادم أي أدوات.`,sideEffect:`أثر جانبي`,sideEffectOverride:`أثر جانبي`,specRevision:`المراجعة {{revision}}`,credential:`بيانات اعتماد شخصية`,credentialHint:`تُخزَّن مشفّرة وتُستخدم فقط في استدعاءاتك أنت لهذا الخادم.`,credentialPlaceholder:`الصق رمزك`,credentialSet:`بيانات الاعتماد مضبوطة`,credentialMissing:`بيانات الاعتماد مطلوبة`,credentialSaved:`تم حفظ بيانات الاعتماد`,credentialSaveFailed:`تعذّر حفظ بيانات الاعتماد.`,credentialRemove:`إزالة`,credentialRemoved:`تمت إزالة بيانات الاعتماد`,credentialRemoveFailed:`تعذّرت إزالة بيانات الاعتماد.`,builtinSource:`هذا الخادم`,kinds:{openapi:`OpenAPI`,mcp:`MCP`},authModes:{none:`بدون مصادقة`,bearer:`رمز Bearer`,header:`ترويسة مخصصة`},accessModes:{"admins-only":`المسؤولون فقط`,"all-users":`الجميع`,granted:`من مُنح الوصول فقط`},form:{name:`الاسم`,namePlaceholder:`واجهة الطقس`,kind:`النوع`,description:`الوصف`,descriptionPlaceholder:`ما الذي يفعله هذا الخادم`,baseUrl:`الرابط الأساسي`,specUrl:`رابط المواصفة`,specUrlHint:`اختياري. يُستخدم الرابط الأساسي عند تركه فارغًا.`,authMode:`المصادقة`,authHeader:`اسم الترويسة`,accessMode:`من يمكنه استخدامه`,timeoutMs:`المهلة (بالمللي ثانية)`,maxResponseBytes:`أقصى استجابة (بايت)`,serverDefault:`افتراضي الخادم`,enabled:`مُفعّل`,enabledHint:`تبقى الخوادم المعطّلة مسجّلة لكنها لا تُعرض على النموذج أبدًا.`},approvals:{title:`الموافقات الدائمة`,description:`أدوات سمحت لها بالعمل دون سؤال مرة أخرى. أبطل إحداها وستسأل في المرة القادمة.`,empty:`لا توجد موافقات دائمة.`,revoke:`إبطال`,revoked:`أُبطلت الموافقة`,revokeFailed:`تعذّر إبطال الموافقة.`,scope:{once:`مرة واحدة`,session:`هذه المحادثة`,always:`دائمًا`}},templatesTitle:`ابدأ من قالب`,templates:{petstore:{name:`عرض Petstore التجريبي`,description:`واجهة تجريبية عامة لاختبار أول آمن من طرف إلى طرف.`},internalOpenApi:{name:`واجهة داخلية`,description:`نقطة بداية لخدمة OpenAPI الخاصة بك.`},mcpServer:{name:`خادم MCP`,description:`نقطة بداية لخادم MCP عبر Streamable HTTP.`}}},composer:{promptMenu:{label:`مكتبة الموجهات`,empty:`لا توجد موجهات بعد — أنشئ واحدًا في الإعدادات ← الموجهات، أو ابدأ بكتابة المعرف.`},skillMenu:{label:`المهارات`,empty:`لا توجد مهارات بعد — أنشئ واحدة في الإعدادات ← المهارات.`},variables:{title:`املأ {{title}}`,insert:`إدراج`,cancel:`إلغاء`,required:`{{name}} مطلوب`},toolsMenu:{enable:`استخدام الأدوات لهذه الرسالة`,builtin:`الأدوات المدمجة`,servers:`خوادم الأدوات`,hint:`الاستدعاءات ذات التأثير الجانبي لا تزال تطلب الموافقة قبل تشغيلها.`}},share:{title:`مشاركة «{{name}}»`,subtitle:`امنح الوصول لأشخاص أو مجموعات. أنت وحدك من يدير المشاركات.`,kindUser:`مستخدم`,kindGroup:`مجموعة`,usernamePlaceholder:`اسم المستخدم الدقيق`,groupPlaceholder:`اسم المجموعة الدقيق`,permissionRead:`يمكنه العرض`,permissionWrite:`يمكنه التعديل`,action:`مشاركة`,empty:`لم تتم المشاركة مع أحد بعد.`,hint:`أدخل اسم المستخدم أو المجموعة بدقة. يظهر العنصر في مساحة عمل المستلم، ويؤدي الإلغاء إلى إزالة الوصول فورًا.`,revoke:`إلغاء الوصول`,added:`تمت المشاركة مع {{name}}`,failed:`فشلت المشاركة`,userNotFound:`لا يوجد مستخدم بهذا الاسم`,groupNotFound:`لا توجد مجموعة بهذا الاسم`},channels:{title:`القنوات`,browsePublic:`تصفح القنوات العامة`,newDm:`رسالة مباشرة جديدة`,newChannel:`قناة جديدة`,empty:`لا توجد قنوات بعد. أنشئ واحدة أو تصفح القنوات العامة.`,selectPrompt:`اختر قناة للبدء`,pins:`المثبتة`,members:`الأعضاء`,settings:`إعدادات القناة`,sendFailed:`تعذر إرسال الرسالة`,uploadFailed:`تعذر رفع الملف`,memberAdded:`تمت إضافة العضو`,memberAddFailed:`تعذرت إضافة هذا المستخدم`,attach:`إرفاق ملف`,askModel:`اسأل نموذجًا بهذه الرسالة`,noModel:`بدون نموذج`,composerPlaceholder:`اكتب رسالة…`,thread:`سلسلة`,replyPlaceholder:`رد…`,invitePlaceholder:`اسم المستخدم للدعوة`,roleOwner:`المالك`,removeMember:`إزالة من القناة`,leave:`مغادرة القناة`,noPins:`لا شيء مثبت بعد.`,noMessages:`لا رسائل بعد — ألقِ التحية.`,create:`إنشاء`,createFailed:`تعذر إنشاء القناة`,nameLabel:`الاسم`,typeLabel:`النوع`,typePublic:`عامة — يمكن لأي شخص الانضمام`,typePrivate:`خاصة — بدعوة فقط`,descriptionLabel:`الوصف`,openDm:`فتح المحادثة`,dmFailed:`تعذر فتح المحادثة`,dmHint:`الرسائل المباشرة خاصة بينكما فقط.`,dmPlaceholder:`اسم المستخدم الدقيق`,noPublic:`لا توجد قنوات عامة.`,joined:`منضم`,join:`انضمام`,save:`حفظ`,delete:`حذف القناة`,modelAuthor:`نموذج`,unknownAuthor:`شخص ما`,edited:`معدّلة`,deletedMessage:`تم حذف هذه الرسالة`,modelThinking:`النموذج يفكر…`,react:`إضافة تفاعل`,reply:`الرد في السلسلة`,pin:`تثبيت الرسالة`,unpin:`إلغاء التثبيت`,edit:`تعديل الرسالة`,deleteMessage:`حذف الرسالة`,replyCount:`{{total}} ردود`},notifications:{title:`الإشعارات`,empty:`لا إشعارات جديدة.`,markAllRead:`تحديد الكل كمقروء`,markRead:`تحديد كمقروء`},voiceMode:{title:`الوضع الصوتي`,open:`بدء الوضع الصوتي`,close:`إغلاق الوضع الصوتي`,starting:`جارٍ البدء…`,listening:`أستمع…`,muted:`الميكروفون مكتوم`,transcribing:`جارٍ التفريغ…`,generating:`أفكر…`,speaking:`أتحدث…`,mute:`كتم الميكروفون`,unmute:`إلغاء كتم الميكروفون`,finishTurn:`انتهيت من الكلام`,skipReply:`تخطي الرد`,microphoneFailed:`الميكروفون غير متاح`,transcriptionFailed:`فشل التفريغ الصوتي`,replyTimeout:`استغرق الرد وقتًا طويلاً`,unsupported:`الوضع الصوتي غير متاح`,unsupportedHint:`يحتاج الوضع الصوتي إلى ميكروفون ومزوّد لتحويل الكلام إلى نص أو التعرّف على الكلام في المتصفح.`},imageEdit:{title:`تحرير الصورة`,prompt:`صف التغيير`,promptPlaceholder:`مثلاً: استبدال السماء بغروب الشمس`,model:`النموذج`,apply:`تطبيق التحرير`,maskHint:`لوّن المناطق المراد إعادة رسمها؛ اترك اللوحة كما هي لتحرير الصورة كاملة.`,brushSize:`حجم الفرشاة`,clearMask:`مسح القناع`,referenceImages:`صور مرجعية (حتى {{total}})`,noModels:`لا يوجد نموذج مُهيأ يدعم تحرير الصور.`,saved:`تم حفظ الصورة المحررة في المعرض`,failed:`فشل تحرير الصورة`,loadFailed:`فشل تحميل الصورة المصدر`},costs:{title:`التكاليف والميزانيات`,description:`تُطبَّق أسعار التعرفة على سجل الاستخدام؛ تراقب الميزانيات الإنفاق أو تحدّه.`,loadFailed:`تعذر تحميل بيانات التكاليف`,saveFailed:`فشل الحفظ`,exportFailed:`فشل التصدير`,exportCsv:`تصدير CSV`,totalSpend:`إجمالي الإنفاق`,meteredEvents:`أحداث مسعّرة`,unmeteredEvents:`أحداث غير مسعّرة`,topModel:`النموذج الأعلى`,budgets:`الميزانيات`,noBudgets:`لا توجد ميزانيات بعد.`,budgetName:`اسم الميزانية`,principalId:`معرّف مستخدم أو مجموعة`,addBudget:`إضافة ميزانية`,deleteBudget:`حذف الميزانية`,budgetSaved:`تم حفظ الميزانية`,scope:{instance:`كامل المثيل`,user:`مستخدم`,group:`مجموعة`},period:{daily:`يومي`,weekly:`أسبوعي`,monthly:`شهري`},mode:{observe:`مراقبة`,soft:`تنبيه`,hard:`تنبيه وحظر`},tariffs:`التعرفات`,noTariffs:`لا توجد تعرفات بعد — تبقى التكاليف بلا تسعير حتى تضيف الأسعار.`,plugin:`الإضافة`,model:`النموذج`,modelOptional:`النموذج (اختياري)`,allModels:`كل النماذج`,inputPerMillion:`الإدخال $/م رمز`,outputPerMillion:`الإخراج $/م رمز`,unitPrice:`سعر الوحدة`,effectiveFrom:`سارية من`,addTariff:`إضافة تعرفة`,deleteTariff:`حذف التعرفة`,tariffSaved:`تم حفظ التعرفة`},evaluations:{title:`التقييمات`,description:`مبارزات ساحة عمياء، ولوحة تصنيف Elo، ومجموعات تقييم قابلة لإعادة الاستخدام، ومجموعة بيانات ملاحظاتك.`,loadFailed:`تعذر تحميل التقييمات`,matchFailed:`فشلت مبارزة الساحة`,voteRecorded:`تم تسجيل الصوت`,voteFailed:`تعذر تسجيل الصوت`,saveFailed:`فشل الحفظ`,exportFailed:`فشل التصدير`,setSaved:`تم حفظ مجموعة التقييم`,runStarted:`بدأ تشغيل التقييم`,pickModel:`اختر نموذجًا`,tabs:{arena:`الساحة`,leaderboard:`التصنيف`,sets:`مجموعات التقييم`,feedback:`الملاحظات`},arenaModelA:`النموذج A`,arenaModelB:`النموذج B`,arenaPrompt:`اطرح السؤال نفسه على النموذجين…`,startMatch:`بدء المبارزة`,arenaHint:`تبقى هويات النماذج مخفية حتى تصوّت.`,candidate:`الرد {{letter}}`,voteFirst:`الأول أفضل`,voteSecond:`الثاني أفضل`,voteTie:`تعادل`,voteBothBad:`كلاهما سيئ`,model:`النموذج`,rating:`التقييم`,record:`السجل`,votes:`الأصوات`,noVotes:`لا توجد أصوات بعد — ابدأ مبارزة لبناء التصنيف.`,newSet:`مجموعة تقييم جديدة`,setName:`اسم المجموعة`,setPrompts:`موجّه واحد في كل سطر…`,saveSet:`حفظ المجموعة`,yourSets:`مجموعاتك`,noSets:`لا توجد مجموعات تقييم بعد.`,itemCount:`{{total}} موجّهات`,run:`تشغيل`,deleteSet:`حذف المجموعة`,cancelRun:`إلغاء التشغيل`,exportRun:`تصدير التشغيل`,status:{queued:`في الانتظار`,running:`قيد التشغيل`,completed:`مكتمل`,failed:`فشل`,cancelled:`أُلغي`},noFeedback:`لا توجد ملاحظات بعد — قيّم الردود لبناء مجموعة بياناتك.`},passwordStrength:{levels:{weak:`ضعيفة`,fair:`مقبولة`,good:`جيدة`,strong:`قوية`},checks:{minLength:`12 حرفًا على الأقل`,hasCase:`أحرف كبيرة وصغيرة`,hasNumber:`رقم واحد على الأقل`,tooLong:`لا تتجاوز 72 بايت`}}};export{e as default};
|