libre-webui 0.29.0 → 0.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/backend/dist/index.d.ts.map +1 -1
  2. package/backend/dist/index.js +24 -7
  3. package/backend/dist/index.js.map +1 -1
  4. package/backend/dist/persistence/postgresAutomationWebhooksMigration.d.ts +9 -0
  5. package/backend/dist/persistence/postgresAutomationWebhooksMigration.d.ts.map +1 -0
  6. package/backend/dist/persistence/postgresAutomationWebhooksMigration.js +38 -0
  7. package/backend/dist/persistence/postgresAutomationWebhooksMigration.js.map +1 -0
  8. package/backend/dist/persistence/postgresMigrationRegistry.d.ts.map +1 -1
  9. package/backend/dist/persistence/postgresMigrationRegistry.js +4 -0
  10. package/backend/dist/persistence/postgresMigrationRegistry.js.map +1 -1
  11. package/backend/dist/persistence/postgresResourceRepositories.d.ts.map +1 -1
  12. package/backend/dist/persistence/postgresResourceRepositories.js +5 -0
  13. package/backend/dist/persistence/postgresResourceRepositories.js.map +1 -1
  14. package/backend/dist/persistence/postgresWorkApprovalsMigration.d.ts +13 -0
  15. package/backend/dist/persistence/postgresWorkApprovalsMigration.d.ts.map +1 -0
  16. package/backend/dist/persistence/postgresWorkApprovalsMigration.js +69 -0
  17. package/backend/dist/persistence/postgresWorkApprovalsMigration.js.map +1 -0
  18. package/backend/dist/persistence/resourceTypes.d.ts +4 -0
  19. package/backend/dist/persistence/resourceTypes.d.ts.map +1 -1
  20. package/backend/dist/persistence/resourceTypes.js.map +1 -1
  21. package/backend/dist/persistence/sqliteMigrations.d.ts +3 -0
  22. package/backend/dist/persistence/sqliteMigrations.d.ts.map +1 -1
  23. package/backend/dist/persistence/sqliteMigrations.js +156 -2
  24. package/backend/dist/persistence/sqliteMigrations.js.map +1 -1
  25. package/backend/dist/persistence/sqliteResourceRepositories.d.ts.map +1 -1
  26. package/backend/dist/persistence/sqliteResourceRepositories.js +7 -0
  27. package/backend/dist/persistence/sqliteResourceRepositories.js.map +1 -1
  28. package/backend/dist/persistence/sqliteToPostgresMigration.d.ts.map +1 -1
  29. package/backend/dist/persistence/sqliteToPostgresMigration.js +32 -1
  30. package/backend/dist/persistence/sqliteToPostgresMigration.js.map +1 -1
  31. package/backend/dist/platform/workPersistence/postgresWorkPersistence.d.ts +10 -1
  32. package/backend/dist/platform/workPersistence/postgresWorkPersistence.d.ts.map +1 -1
  33. package/backend/dist/platform/workPersistence/postgresWorkPersistence.js +85 -5
  34. package/backend/dist/platform/workPersistence/postgresWorkPersistence.js.map +1 -1
  35. package/backend/dist/platform/workPersistence/sqliteWorkPersistence.d.ts +10 -1
  36. package/backend/dist/platform/workPersistence/sqliteWorkPersistence.d.ts.map +1 -1
  37. package/backend/dist/platform/workPersistence/sqliteWorkPersistence.js +67 -7
  38. package/backend/dist/platform/workPersistence/sqliteWorkPersistence.js.map +1 -1
  39. package/backend/dist/platform/workPersistence/types.d.ts +37 -0
  40. package/backend/dist/platform/workPersistence/types.d.ts.map +1 -1
  41. package/backend/dist/platform/workPersistence/types.js.map +1 -1
  42. package/backend/dist/routes/automations.d.ts.map +1 -1
  43. package/backend/dist/routes/automations.js +83 -1
  44. package/backend/dist/routes/automations.js.map +1 -1
  45. package/backend/dist/routes/ollama.d.ts.map +1 -1
  46. package/backend/dist/routes/ollama.js +64 -0
  47. package/backend/dist/routes/ollama.js.map +1 -1
  48. package/backend/dist/routes/plugins.d.ts.map +1 -1
  49. package/backend/dist/routes/plugins.js +90 -0
  50. package/backend/dist/routes/plugins.js.map +1 -1
  51. package/backend/dist/routes/work.d.ts.map +1 -1
  52. package/backend/dist/routes/work.js +83 -0
  53. package/backend/dist/routes/work.js.map +1 -1
  54. package/backend/dist/services/authService.d.ts +2 -0
  55. package/backend/dist/services/authService.d.ts.map +1 -1
  56. package/backend/dist/services/authService.js +2 -0
  57. package/backend/dist/services/authService.js.map +1 -1
  58. package/backend/dist/services/automationService.d.ts +13 -1
  59. package/backend/dist/services/automationService.d.ts.map +1 -1
  60. package/backend/dist/services/automationService.js +31 -0
  61. package/backend/dist/services/automationService.js.map +1 -1
  62. package/backend/dist/services/notificationService.d.ts.map +1 -1
  63. package/backend/dist/services/notificationService.js +1 -0
  64. package/backend/dist/services/notificationService.js.map +1 -1
  65. package/backend/dist/services/ollamaService.d.ts +12 -0
  66. package/backend/dist/services/ollamaService.d.ts.map +1 -1
  67. package/backend/dist/services/ollamaService.js +26 -0
  68. package/backend/dist/services/ollamaService.js.map +1 -1
  69. package/backend/dist/services/ollamaSettingsService.d.ts +10 -0
  70. package/backend/dist/services/ollamaSettingsService.d.ts.map +1 -0
  71. package/backend/dist/services/ollamaSettingsService.js +83 -0
  72. package/backend/dist/services/ollamaSettingsService.js.map +1 -0
  73. package/backend/dist/services/workAgentGuidance.d.ts +11 -0
  74. package/backend/dist/services/workAgentGuidance.d.ts.map +1 -1
  75. package/backend/dist/services/workAgentGuidance.js +16 -2
  76. package/backend/dist/services/workAgentGuidance.js.map +1 -1
  77. package/backend/dist/services/workAgentService.d.ts +56 -0
  78. package/backend/dist/services/workAgentService.d.ts.map +1 -1
  79. package/backend/dist/services/workAgentService.js +467 -17
  80. package/backend/dist/services/workAgentService.js.map +1 -1
  81. package/backend/dist/services/workApprovalService.d.ts +67 -0
  82. package/backend/dist/services/workApprovalService.d.ts.map +1 -0
  83. package/backend/dist/services/workApprovalService.js +273 -0
  84. package/backend/dist/services/workApprovalService.js.map +1 -0
  85. package/backend/dist/services/workEventService.d.ts.map +1 -1
  86. package/backend/dist/services/workEventService.js +25 -0
  87. package/backend/dist/services/workEventService.js.map +1 -1
  88. package/backend/dist/services/workPolicyService.d.ts +4 -0
  89. package/backend/dist/services/workPolicyService.d.ts.map +1 -1
  90. package/backend/dist/services/workPolicyService.js +19 -0
  91. package/backend/dist/services/workPolicyService.js.map +1 -1
  92. package/backend/dist/services/workRuntimeShared.d.ts +2 -0
  93. package/backend/dist/services/workRuntimeShared.d.ts.map +1 -1
  94. package/backend/dist/services/workRuntimeShared.js.map +1 -1
  95. package/backend/dist/services/workTaskService.d.ts +3 -1
  96. package/backend/dist/services/workTaskService.d.ts.map +1 -1
  97. package/backend/dist/services/workTaskService.js +21 -4
  98. package/backend/dist/services/workTaskService.js.map +1 -1
  99. package/backend/dist/types/index.d.ts +3 -1
  100. package/backend/dist/types/index.d.ts.map +1 -1
  101. package/backend/dist/types/index.js.map +1 -1
  102. package/backend/dist/types/work.d.ts +32 -11
  103. package/backend/dist/types/work.d.ts.map +1 -1
  104. package/backend/dist/websocketServer.d.ts.map +1 -1
  105. package/backend/dist/websocketServer.js +14 -2
  106. package/backend/dist/websocketServer.js.map +1 -1
  107. package/backend/package.json +2 -2
  108. package/deploy/work-computer/Dockerfile +1 -0
  109. package/deploy/work-computer/tint2rc +1 -0
  110. package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
  111. package/frontend/dist/artifact-runtime/lucide-react.js +1 -1
  112. package/frontend/dist/artifact-runtime/mermaid.js +8 -8
  113. package/frontend/dist/artifact-runtime/papaparse.js +2 -2
  114. package/frontend/dist/artifact-runtime/plotly.js +371 -652
  115. package/frontend/dist/assets/index-B6xMZpzA.js +76 -0
  116. package/frontend/dist/assets/index-BjipfsCP.css +1 -0
  117. package/frontend/dist/index.html +28 -28
  118. package/frontend/dist/js/{ArtifactContainer-CTXxnWRo.js → ArtifactContainer-Bn6iJtaJ.js} +1 -1
  119. package/frontend/dist/js/{ArtifactDemoPage-CEYuIhJA.js → ArtifactDemoPage-BLF8Ok-o.js} +1 -1
  120. package/frontend/dist/js/{ArtifactSandboxFrame-DLOy2VOm.js → ArtifactSandboxFrame-Cs1Gu1WB.js} +1 -1
  121. package/frontend/dist/js/{ArtifactSlideOutPanel-DnTTc1VY.js → ArtifactSlideOutPanel-CuKq5cL0.js} +1 -1
  122. package/frontend/dist/js/AutomationModal-Dha4KgLI.js +1 -0
  123. package/frontend/dist/js/AutomationsPage-HcMCRV-D.js +1 -0
  124. package/frontend/dist/js/{AvatarUpload-DzL00yOL.js → AvatarUpload-CFrlSszY.js} +1 -1
  125. package/frontend/dist/js/{Button--pDOakZx.js → Button-CgN11mgY.js} +1 -1
  126. package/frontend/dist/js/{CalendarPage-Bls3TBeZ.js → CalendarPage-D_K-XrG9.js} +1 -1
  127. package/frontend/dist/js/ChannelsPage-D3CoImOT.js +1 -0
  128. package/frontend/dist/js/ChatPage-C0iBDbOq.js +14 -0
  129. package/frontend/dist/js/ConnectModels-D_ZbZQub.js +1 -0
  130. package/frontend/dist/js/{EvaluationsPage-DSgj9dT5.js → EvaluationsPage-DOJLpauA.js} +2 -2
  131. package/frontend/dist/js/FirstTimeSetup-DDIP_4Dd.js +1 -0
  132. package/frontend/dist/js/GalleryPage-C8U_F7Ns.js +1 -0
  133. package/frontend/dist/js/{HomePage-BebX3v-x.js → HomePage-B_aotoDU.js} +1 -1
  134. package/frontend/dist/js/LibreClawPage-cr2N6W00.js +1 -0
  135. package/frontend/dist/js/{Logo-BE9SvCC5.js → Logo-B7o7eaPU.js} +1 -1
  136. package/frontend/dist/js/{LogoMark-C8x1yyP3.js → LogoMark-D9g6ls0h.js} +1 -1
  137. package/frontend/dist/js/{ModelManagerModals-CpWAltRA.js → ModelManagerModals-C-J1d7GL.js} +1 -1
  138. package/frontend/dist/js/NotesPage-Bgr7R_Vm.js +3 -0
  139. package/frontend/dist/js/{PasswordStrengthMeter-Cdq2oQbc.js → PasswordStrengthMeter-DR-mGbLF.js} +1 -1
  140. package/frontend/dist/js/PersonasPage-C3D_6lIx.js +13 -0
  141. package/frontend/dist/js/{PluginUsagePage-jMrpL2Jb.js → PluginUsagePage-DK7MgSiu.js} +1 -1
  142. package/frontend/dist/js/RichMessageContent-7FxrZ4A8.js +1 -0
  143. package/frontend/dist/js/{RichMessageContent-CC9QZQKd.js → RichMessageContent-CQkLI7Dt.js} +1 -1
  144. package/frontend/dist/js/SettingsModal-CIV_Bgsf.js +19 -0
  145. package/frontend/dist/js/{SettingsToggle-C16gtVyi.js → SettingsToggle-Cw4OhW7B.js} +1 -1
  146. package/frontend/dist/js/ShareDialog-BCEVgtbN.js +1 -0
  147. package/frontend/dist/js/{SystemPage-Drd1neLN.js → SystemPage-BNVZtLe9.js} +1 -1
  148. package/frontend/dist/js/{UserManagementPage-CquciWKV.js → UserManagementPage-pPC_Svj9.js} +1 -1
  149. package/frontend/dist/js/WorkPage-Q33nIqkM.js +7 -0
  150. package/frontend/dist/js/{api-2DulPtq1.js → api-D-5hpGht.js} +3 -3
  151. package/frontend/dist/js/api-WR1CTYO5.js +1 -0
  152. package/frontend/dist/js/{appNavigation-DAGh98Yj.js → appNavigation-DfHbXBey.js} +1 -1
  153. package/frontend/dist/js/{appStore-Ci1X0yA-.js → appStore-B136FGdu.js} +2 -2
  154. package/frontend/dist/js/appVersion-Ck7dYiHe.js +1 -0
  155. package/frontend/dist/js/ar-Cq-nC6v9.js +2 -0
  156. package/frontend/dist/js/authStore-6AJLgQsD.js +1 -0
  157. package/frontend/dist/js/authStore-Ckz37pwu.js +4 -0
  158. package/frontend/dist/js/axios-CUerAKcc.js +1 -0
  159. package/frontend/dist/js/{babel-D7QYvEns.js → babel-8afoxhZ7.js} +1 -1
  160. package/frontend/dist/js/bn-BFSKytYs.js +2 -0
  161. package/frontend/dist/js/chatStore-Dpm3g_Ln.js +3 -0
  162. package/frontend/dist/js/classPrivateMethodInitSpec-DE0XIqc_.js +1 -0
  163. package/frontend/dist/js/config-DJwXAf8i.js +1 -0
  164. package/frontend/dist/js/cs-BKWXa629.js +2 -0
  165. package/frontend/dist/js/da-Cra_DJnV.js +2 -0
  166. package/frontend/dist/js/de-BQa6_UuE.js +2 -0
  167. package/frontend/dist/js/es-BBOHFrx1.js +2 -0
  168. package/frontend/dist/js/{estree-D7xT4AeP.js → estree-qxY7ACbu.js} +3 -3
  169. package/frontend/dist/js/{evaluationsApi-Cu5PH_qi.js → evaluationsApi-BKY-maUM.js} +1 -1
  170. package/frontend/dist/js/fr-C8kXs5c0.js +2 -0
  171. package/frontend/dist/js/hi-BEef4bjU.js +2 -0
  172. package/frontend/dist/js/{html-HvA9vEyn.js → html-B_cUU1Gi.js} +2 -2
  173. package/frontend/dist/js/id-Djipic7Y.js +2 -0
  174. package/frontend/dist/js/is-pazl6RLG.js +2 -0
  175. package/frontend/dist/js/it-DobPbTwl.js +2 -0
  176. package/frontend/dist/js/ja-DwYNaMNX.js +2 -0
  177. package/frontend/dist/js/ko-BQfXE7_o.js +2 -0
  178. package/frontend/dist/js/{markdown-DaF0SXNk.js → markdown-BAF0w-jL.js} +3 -3
  179. package/frontend/dist/js/{messageCodeStyles-DKq3DH1W.js → messageCodeStyles-CkxF6yil.js} +2 -2
  180. package/frontend/dist/js/ms-CkPQoE5T.js +2 -0
  181. package/frontend/dist/js/nl-X_QsDAtu.js +2 -0
  182. package/frontend/dist/js/pl-CK39gUsy.js +2 -0
  183. package/frontend/dist/js/{postcss-RCIJRrFm.js → postcss-B2vYq4-H.js} +1 -1
  184. package/frontend/dist/js/pt-C0dWyR_I.js +2 -0
  185. package/frontend/dist/js/{router-vendor-BGP0k6Y2.js → router-vendor-CIwPu612.js} +1 -1
  186. package/frontend/dist/js/ru-sNJkEz1G.js +2 -0
  187. package/frontend/dist/js/{standalone-BMD7E0jY.js → standalone-BqZmfuRy.js} +2 -2
  188. package/frontend/dist/js/sv-Bh-uxdF3.js +2 -0
  189. package/frontend/dist/js/{teamEventStream-C4u_py2D.js → teamEventStream-DUodK0-C.js} +1 -1
  190. package/frontend/dist/js/th-DPVtwZj2.js +2 -0
  191. package/frontend/dist/js/tr-BYNM_Tm7.js +2 -0
  192. package/frontend/dist/js/{ttsBatching-C9kQXFB1.js → ttsBatching-7_-p2nxR.js} +1 -1
  193. package/frontend/dist/js/{typescript-LOiqVRM1.js → typescript-DokwN-5Y.js} +1 -1
  194. package/frontend/dist/js/{ui-DUzqxWMk.js → ui-BK53RPmS.js} +2 -2
  195. package/frontend/dist/js/ui-vendor-CPdYrKhz.js +177 -0
  196. package/frontend/dist/js/uk-kvNBuYin.js +2 -0
  197. package/frontend/dist/js/{useChat-6yDWZSTz.js → useChat-Czg2p4Rr.js} +1 -1
  198. package/frontend/dist/js/useDictation-B2lYEYKn.js +1 -0
  199. package/frontend/dist/js/useQuery-ClAiNxQ7.js +1 -0
  200. package/frontend/dist/js/{useTranslation-DrnYb6Cx.js → useTranslation-C7GwbUQA.js} +1 -1
  201. package/frontend/dist/js/{utils-D9UstwTG.js → utils-nNyg0lfc.js} +1 -1
  202. package/frontend/dist/js/utils-vendor-CeUf_ngc.js +9 -0
  203. package/frontend/dist/js/vi-CmLoaP0K.js +2 -0
  204. package/frontend/dist/js/workApi-BoJb9aVF.js +1 -0
  205. package/frontend/dist/js/{workApi-BwDBwG62.js → workApi-CFH097y5.js} +3 -3
  206. package/frontend/dist/js/{yaml-CyhEdlt2.js → yaml-BXEpxPn2.js} +2 -2
  207. package/frontend/dist/js/zh-D2zvmvrj.js +2 -0
  208. package/frontend/dist/sw.js +7 -1
  209. package/package.json +5 -5
  210. package/frontend/dist/assets/index-O8rtJINp.css +0 -1
  211. package/frontend/dist/assets/index-f1s6QpC5.js +0 -93
  212. package/frontend/dist/js/AutomationModal-DB3lrK2K.js +0 -1
  213. package/frontend/dist/js/AutomationsPage-D3v0Cra1.js +0 -1
  214. package/frontend/dist/js/ChannelsPage-BnoCniNf.js +0 -1
  215. package/frontend/dist/js/ChatPage-BMcigJWr.js +0 -14
  216. package/frontend/dist/js/FirstTimeSetup-BRysXCjP.js +0 -1
  217. package/frontend/dist/js/GalleryPage-DUcM4dg0.js +0 -1
  218. package/frontend/dist/js/LibreClawPage-A37KF9_G.js +0 -1
  219. package/frontend/dist/js/ModelSelector-C1ipX-44.js +0 -1
  220. package/frontend/dist/js/NotesPage-CXSz7Hde.js +0 -3
  221. package/frontend/dist/js/PersonasPage-CiOBffF3.js +0 -13
  222. package/frontend/dist/js/RichMessageContent-CU6WTuOs.js +0 -1
  223. package/frontend/dist/js/SettingsModal-DP_wKehV.js +0 -19
  224. package/frontend/dist/js/ShareDialog-BW8iGd_i.js +0 -1
  225. package/frontend/dist/js/WorkPage-BgASwAGs.js +0 -6
  226. package/frontend/dist/js/api-BmIdrQfK.js +0 -1
  227. package/frontend/dist/js/appVersion-BRMnr50t.js +0 -1
  228. package/frontend/dist/js/ar-CpmN0TY8.js +0 -2
  229. package/frontend/dist/js/authStore-DIvsSaOt.js +0 -4
  230. package/frontend/dist/js/authStore-DoxafXFR.js +0 -1
  231. package/frontend/dist/js/axios-C8xWfUG8.js +0 -1
  232. package/frontend/dist/js/bn-BwrMg_Oh.js +0 -2
  233. package/frontend/dist/js/chatStore-DkpmZLOG.js +0 -3
  234. package/frontend/dist/js/classPrivateMethodInitSpec-DUpGnGHL.js +0 -1
  235. package/frontend/dist/js/config-Ckn9cand.js +0 -1
  236. package/frontend/dist/js/cs-f72Fnxz3.js +0 -2
  237. package/frontend/dist/js/da-qp8lOgkJ.js +0 -2
  238. package/frontend/dist/js/de-CpcLHr97.js +0 -2
  239. package/frontend/dist/js/es-gZHsxjG4.js +0 -2
  240. package/frontend/dist/js/fr-BY5aUofi.js +0 -2
  241. package/frontend/dist/js/hi-KCn9gIiT.js +0 -2
  242. package/frontend/dist/js/id-C7U6kS0J.js +0 -2
  243. package/frontend/dist/js/is-N9Ek-Usz.js +0 -2
  244. package/frontend/dist/js/it-CqaqWB8D.js +0 -2
  245. package/frontend/dist/js/ja-C5f9HAm1.js +0 -2
  246. package/frontend/dist/js/ko-BuoboDvb.js +0 -2
  247. package/frontend/dist/js/ms-Cu-UWc6j.js +0 -2
  248. package/frontend/dist/js/nl-nOUc4C_i.js +0 -2
  249. package/frontend/dist/js/pl-BKKwFhxj.js +0 -2
  250. package/frontend/dist/js/pt-B18-KYtS.js +0 -2
  251. package/frontend/dist/js/ru-DflEWNyb.js +0 -2
  252. package/frontend/dist/js/sv-CU-nPjr8.js +0 -2
  253. package/frontend/dist/js/th-dOxm2Hhl.js +0 -2
  254. package/frontend/dist/js/tr-7ThM4F8q.js +0 -2
  255. package/frontend/dist/js/ui-vendor-C0KwbTD4.js +0 -177
  256. package/frontend/dist/js/uk-Cl7Pk0Yf.js +0 -2
  257. package/frontend/dist/js/useQuery-CoWV2PmJ.js +0 -1
  258. package/frontend/dist/js/utils-vendor-DtsgPwcz.js +0 -9
  259. package/frontend/dist/js/vi-eljYUBOk.js +0 -2
  260. package/frontend/dist/js/workApi-uXUZSjsf.js +0 -1
  261. package/frontend/dist/js/zh-B0sinUfQ.js +0 -2
@@ -1,7 +1,7 @@
1
- import{_ as e,b as t,g as n,v as r,y as i}from"./router-vendor-BGP0k6Y2.js";import{t as a}from"./classPrivateMethodInitSpec-DUpGnGHL.js";var o,s,c=Object.defineProperty,l=e=>{throw TypeError(e)},u=(e,t,n)=>t in e?c(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,d=(e,t)=>{for(var n in t)c(e,n,{get:t[n],enumerable:!0})},f=(e,t,n)=>u(e,typeof t==`symbol`?t:t+``,n),p=(e,t,n)=>t.has(e)||l(`Cannot `+n),m=(e,t,n)=>(p(e,t,`read from private field`),n?n.call(e):t.get(e)),ee=(e,t,n)=>t.has(e)?l(`Cannot add the same private member more than once`):t instanceof WeakSet?t.add(e):t.set(e,n),te={};d(te,{languages:()=>fo,options:()=>ho,parsers:()=>go,printers:()=>ss});var ne=(e,t)=>(n,r,...i)=>n|1&&r==null?void 0:(t.call(r)??r[e]).apply(r,i),re=String.prototype.replaceAll??function(e,t){return e.global?this.replace(e,t):this.split(e).join(t)},h=ne(`replaceAll`,function(){if(typeof this==`string`)return re});function ie(e){return this[e<0?this.length+e:e]}var g=ne(`at`,function(){if(Array.isArray(this)||typeof this==`string`)return ie}),ae=()=>{},oe=`string`,se=`array`,ce=`cursor`,le=`indent`,ue=`align`,de=`trim`,fe=`group`,pe=`fill`,me=`if-break`,he=`indent-if-break`,ge=`line-suffix`,_e=`line-suffix-boundary`,_=`line`,ve=`label`,ye=`break-parent`,be=new Set([ce,le,ue,de,fe,pe,me,he,ge,_e,_,ve,ye]);function xe(e,t,n){if(!e.has(t)){let r=n(t);e.set(t,r)}return e.get(t)}function Se(e){if(typeof e==`string`)return oe;if(Array.isArray(e))return se;if(!e)return;let{type:t}=e;if(be.has(t))return t}var Ce=Se,we=e=>new Intl.ListFormat(`en-US`,{type:`disjunction`}).format(e);function Te(e){let t=e===null?`null`:typeof e;if(t!==`string`&&t!==`object`)return`Unexpected doc '${t}',
1
+ import{_ as e,b as t,g as n,v as r,y as i}from"./router-vendor-CIwPu612.js";import{t as a}from"./classPrivateMethodInitSpec-DE0XIqc_.js";var o,s,c=Object.defineProperty,l=e=>{throw TypeError(e)},u=(e,t,n)=>t in e?c(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,d=(e,t)=>{for(var n in t)c(e,n,{get:t[n],enumerable:!0})},f=(e,t,n)=>u(e,typeof t==`symbol`?t:t+``,n),p=(e,t,n)=>t.has(e)||l(`Cannot `+n),m=(e,t,n)=>(p(e,t,`read from private field`),n?n.call(e):t.get(e)),ee=(e,t,n)=>t.has(e)?l(`Cannot add the same private member more than once`):t instanceof WeakSet?t.add(e):t.set(e,n),te={};d(te,{languages:()=>fo,options:()=>ho,parsers:()=>go,printers:()=>ss});var ne=(e,t)=>(n,r,...i)=>n|1&&r==null?void 0:(t.call(r)??r[e]).apply(r,i),re=String.prototype.replaceAll??function(e,t){return e.global?this.replace(e,t):this.split(e).join(t)},h=ne(`replaceAll`,function(){if(typeof this==`string`)return re});function ie(e){return this[e<0?this.length+e:e]}var g=ne(`at`,function(){if(Array.isArray(this)||typeof this==`string`)return ie}),ae=()=>{},oe=`string`,se=`array`,ce=`cursor`,le=`indent`,ue=`align`,de=`trim`,fe=`group`,pe=`fill`,me=`if-break`,he=`indent-if-break`,ge=`line-suffix`,_e=`line-suffix-boundary`,_=`line`,ve=`label`,ye=`break-parent`,be=new Set([ce,le,ue,de,fe,pe,me,he,ge,_e,_,ve,ye]);function xe(e,t,n){if(!e.has(t)){let r=n(t);e.set(t,r)}return e.get(t)}function Se(e){if(typeof e==`string`)return oe;if(Array.isArray(e))return se;if(!e)return;let{type:t}=e;if(be.has(t))return t}var Ce=Se,we=e=>new Intl.ListFormat(`en-US`,{type:`disjunction`}).format(e);function Te(e){let t=e===null?`null`:typeof e;if(t!==`string`&&t!==`object`)return`Unexpected doc '${t}',
2
2
  Expected it to be 'string' or 'object'.`;if(Ce(e))throw Error(`doc is valid.`);let n=Object.prototype.toString.call(e);if(n!==`[object Object]`)return`Unexpected doc '${n}'.`;let r=we([...be].map(e=>`'${e}'`));return`Unexpected doc.type '${e.type}'.
3
3
  Expected it to be ${r}.`}var Ee=class extends Error{constructor(e){((...e)=>(super(...e),n(this,`name`,`InvalidDocError`),this))(Te(e)),this.doc=e}};function De(e,t){if(typeof e==`string`)return t(e);let n=new Map;return r(e);function r(e){return xe(n,e,i)}function i(e){switch(Ce(e)){case se:return t(e.map(r));case pe:return t({...e,parts:e.parts.map(r)});case me:return t({...e,breakContents:r(e.breakContents),flatContents:r(e.flatContents)});case fe:{let{expandedStates:n,contents:i}=e;return n?(n=n.map(r),i=n[0]):i=r(i),t({...e,contents:i,expandedStates:n})}case ue:case le:case he:case ve:case ge:return t({...e,contents:r(e.contents)});case oe:case ce:case de:case _e:case _:case ye:return t(e);default:throw new Ee(e)}}}function v(e,t=Le){return De(e,e=>typeof e==`string`?S(t,e.split(`
4
- `)):e)}var y=ae,Oe=ae,ke=ae,Ae=ae;function b(e){return y(e),{type:le,contents:e}}function je(e,t){return Ae(e),y(t),{type:ue,contents:t,n:e}}function Me(e){return je(-1/0,e)}var Ne={type:ye};function Pe(e){return ke(e),{type:pe,parts:e}}function x(e,t={}){return y(e),Oe(t.expandedStates,!0),{type:fe,id:t.id,contents:e,break:!!t.shouldBreak,expandedStates:t.expandedStates}}function Fe(e,t=``,n={}){return y(e),t!==``&&y(t),{type:me,breakContents:e,flatContents:t,groupId:n.groupId}}function Ie(e,t){return y(e),{type:he,contents:e,groupId:t.groupId,negate:t.negate}}function S(e,t){y(e),Oe(t);let n=[];for(let r=0;r<t.length;r++)r!==0&&n.push(e),n.push(t[r]);return n}var C={type:_},w={type:_,soft:!0},T=[{type:_,hard:!0},Ne],Le=[{type:_,hard:!0,literal:!0},Ne],Re=Object.freeze({character:`'`,codePoint:39}),ze=Object.freeze({character:`"`,codePoint:34}),Be=Object.freeze({preferred:Re,alternate:ze}),Ve=Object.freeze({preferred:ze,alternate:Re});function He(e,t){let{preferred:n,alternate:r}=t===!0||t===`'`?Be:Ve,{length:i}=e,a=0,o=0;for(let t=0;t<i;t++){let i=e.charCodeAt(t);i===n.codePoint?a++:i===r.codePoint&&o++}return(a>o?r:n).character}function Ue(e){if(typeof e!=`string`)throw TypeError(`Expected a string`);return e.replace(/[|\\{}()[\]^$+*?.]/g,`\\$&`).replace(/-/g,`\\x2d`)}var We=(o=new WeakMap,s=new WeakSet,class{constructor(e){a(this,s),t(this,o,void 0),r(o,this,new Set(e))}getLeadingWhitespaceCount(t){let n=e(o,this),r=0;for(let e=0;e<t.length&&n.has(t.charAt(e));e++)r++;return r}getTrailingWhitespaceCount(t){let n=e(o,this),r=0;for(let e=t.length-1;e>=0&&n.has(t.charAt(e));e--)r++;return r}getLeadingWhitespace(e){let t=this.getLeadingWhitespaceCount(e);return e.slice(0,t)}getTrailingWhitespace(e){let t=this.getTrailingWhitespaceCount(e);return e.slice(e.length-t)}hasLeadingWhitespace(t){return e(o,this).has(t.charAt(0))}hasTrailingWhitespace(t){return e(o,this).has(g(0,t,-1))}trimStart(e){let t=this.getLeadingWhitespaceCount(e);return e.slice(t)}trimEnd(e){let t=this.getTrailingWhitespaceCount(e);return e.slice(0,e.length-t)}trim(e){return this.trimEnd(this.trimStart(e))}split(t,n=!1){let r=`[${Ue([...e(o,this)].join(``))}]+`,i=new RegExp(n?`(${r})`:r);return t.split(i)}hasWhitespaceCharacter(t){let n=e(o,this);return Array.prototype.some.call(t,e=>n.has(e))}hasNonWhitespaceCharacter(t){let n=e(o,this);return Array.prototype.some.call(t,e=>!n.has(e))}isWhitespaceOnly(t){let n=e(o,this);return Array.prototype.every.call(t,e=>n.has(e))}dedentString(e){let t=i(s,this,Ge).call(this,e);return t===0?e:e.split(`
4
+ `)):e)}var y=ae,Oe=ae,ke=ae,Ae=ae;function b(e){return y(e),{type:le,contents:e}}function je(e,t){return Ae(e),y(t),{type:ue,contents:t,n:e}}function Me(e){return je(-1/0,e)}var Ne={type:ye};function Pe(e){return ke(e),{type:pe,parts:e}}function x(e,t={}){return y(e),Oe(t.expandedStates,!0),{type:fe,id:t.id,contents:e,break:!!t.shouldBreak,expandedStates:t.expandedStates}}function Fe(e,t=``,n={}){return y(e),t!==``&&y(t),{type:me,breakContents:e,flatContents:t,groupId:n.groupId}}function Ie(e,t){return y(e),{type:he,contents:e,groupId:t.groupId,negate:t.negate}}function S(e,t){y(e),Oe(t);let n=[];for(let r=0;r<t.length;r++)r!==0&&n.push(e),n.push(t[r]);return n}var C={type:_},w={type:_,soft:!0},T=[{type:_,hard:!0},Ne],Le=[{type:_,hard:!0,literal:!0},Ne],Re=Object.freeze({character:`'`,codePoint:39}),ze=Object.freeze({character:`"`,codePoint:34}),Be=Object.freeze({preferred:Re,alternate:ze}),Ve=Object.freeze({preferred:ze,alternate:Re});function He(e,t){let{preferred:n,alternate:r}=t===!0||t===`'`?Be:Ve,{length:i}=e,a=0,o=0;for(let t=0;t<i;t++){let i=e.charCodeAt(t);i===n.codePoint?a++:i===r.codePoint&&o++}return(a>o?r:n).character}function Ue(e){if(typeof e!=`string`)throw TypeError(`Expected a string`);return e.replace(/[|\\{}()[\]^$+*?.]/g,`\\$&`).replace(/-/g,`\\x2d`)}var We=(o=new WeakMap,s=new WeakSet,class{constructor(n){a(this,s),t(this,o,void 0),e(o,this,new Set(n))}getLeadingWhitespaceCount(e){let t=r(o,this),n=0;for(let r=0;r<e.length&&t.has(e.charAt(r));r++)n++;return n}getTrailingWhitespaceCount(e){let t=r(o,this),n=0;for(let r=e.length-1;r>=0&&t.has(e.charAt(r));r--)n++;return n}getLeadingWhitespace(e){let t=this.getLeadingWhitespaceCount(e);return e.slice(0,t)}getTrailingWhitespace(e){let t=this.getTrailingWhitespaceCount(e);return e.slice(e.length-t)}hasLeadingWhitespace(e){return r(o,this).has(e.charAt(0))}hasTrailingWhitespace(e){return r(o,this).has(g(0,e,-1))}trimStart(e){let t=this.getLeadingWhitespaceCount(e);return e.slice(t)}trimEnd(e){let t=this.getTrailingWhitespaceCount(e);return e.slice(0,e.length-t)}trim(e){return this.trimEnd(this.trimStart(e))}split(e,t=!1){let n=`[${Ue([...r(o,this)].join(``))}]+`,i=new RegExp(t?`(${n})`:n);return e.split(i)}hasWhitespaceCharacter(e){let t=r(o,this);return Array.prototype.some.call(e,e=>t.has(e))}hasNonWhitespaceCharacter(e){let t=r(o,this);return Array.prototype.some.call(e,e=>!t.has(e))}isWhitespaceOnly(e){let t=r(o,this);return Array.prototype.every.call(e,e=>t.has(e))}dedentString(e){let t=i(s,this,Ge).call(this,e);return t===0?e:e.split(`
5
5
  `).map(e=>e.slice(t)).join(`
6
6
  `)}});function Ge(e){let t=1/0;for(let n of e.split(`
7
7
  `)){if(n.length===0)continue;let e=this.getLeadingWhitespaceCount(n);if(e===0)return 0;n.length!==e&&e<t&&(t=e)}return t===1/0?0:t}var E=new We([` `,`
@@ -0,0 +1,2 @@
1
+ var e={common:{loading:`Memuat...`,save:`Simpan`,saving:`Menyimpan...`,cancel:`Batal`,delete:`Hapus`,edit:`Edit`,close:`Tutup`,back:`Kembali`,next:`Selanjutnya`,confirm:`Konfirmasi`,error:`Error`,success:`Berhasil`,warning:`Peringatan`,or:`atau`,optional:`opsional`,enabled:`Aktif`,disabled:`Nonaktif`,on:`Nyala`,off:`Mati`,yes:`Ya`,no:`Tidak`,search:`Cari`,noResults:`Tidak ada hasil`,retry:`Coba lagi`,refresh:`Segarkan`,download:`Unduh`,upload:`Unggah`,export:`Ekspor`,import:`Impor`,reset:`Reset`,apply:`Terapkan`,clear:`Hapus`,all:`Semua`,none:`Tidak ada`,default:`Default`,custom:`Kustom`,remove:`Hapus`,home:`Beranda`,more:`Banyak`},brand:{name:`Libre WebUI`,shortName:`Libre`},appInitialization:{ollamaUnavailable:`Layanan Ollama tidak tersedia. Model plugin tetap dapat digunakan.`,backendConnectionFailed:`Gagal terhubung ke layanan backend`},auth:{login:{title:`Selamat Datang Kembali`,subtitle:`Masuk ke akun Anda untuk melanjutkan`,username:`Nama Pengguna`,usernamePlaceholder:`Masukkan nama pengguna`,password:`Kata Sandi`,passwordPlaceholder:`Masukkan kata sandi`,signIn:`Masuk`,signingIn:`Sedang masuk...`,noAccount:`Belum punya akun?`,signUpHere:`Daftar di sini`,loginSuccess:`Login berhasil!`,loginFailed:`Login gagal`,checkCredentials:`Login gagal. Silakan periksa kredensial Anda.`,approvalPending:`Akun Anda menunggu persetujuan administrator.`,enterBoth:`Silakan masukkan nama pengguna dan kata sandi`,githubSuccess:`Login GitHub berhasil!`,githubFailed:`Autentikasi GitHub gagal`,githubVerifyFailed:`Gagal memverifikasi autentikasi GitHub`,verificationFailed:`Verifikasi keamanan gagal. Muat ulang halaman dan coba lagi.`},signup:{title:`Buat Akun`,subtitle:`Daftar untuk akun baru Anda`,username:`Nama Pengguna`,usernamePlaceholder:`Pilih nama pengguna`,email:`Email`,emailPlaceholder:`email@contoh.com`,password:`Kata Sandi`,passwordPlaceholder:`Pilih kata sandi`,confirmPassword:`Konfirmasi Kata Sandi`,confirmPasswordPlaceholder:`Konfirmasi kata sandi Anda`,createAccount:`Buat Akun`,creatingAccount:`Membuat akun...`,hasAccount:`Sudah punya akun?`,signInHere:`Masuk di sini`,signupSuccess:`Akun berhasil dibuat!`,approvalPending:`Pendaftaran diterima. Administrator harus menyetujui akun Anda.`,awaitingApproval:`Menunggu persetujuan`,awaitingApprovalDescription:`Akun Anda telah dibuat, tetapi administrator harus mengaktifkannya sebelum Anda dapat masuk.`,backToSignIn:`Kembali ke masuk`,signupFailed:`Pendaftaran gagal`,tryAgain:`Pendaftaran gagal. Silakan coba lagi.`,usernameRequired:`Nama pengguna dan kata sandi wajib diisi`,passwordMismatch:`Kata sandi tidak cocok`},logout:{button:`Keluar`,success:`Berhasil keluar`},oauth:{continueWith:`Lanjutkan dengan {{provider}}`,connectingTo:`Menghubungkan ke {{provider}}...`,github:`GitHub`,huggingFace:`Hugging Face`,loginSuccess:`Login OAuth berhasil!`,completionFailed:`Gagal menyelesaikan autentikasi OAuth`,verificationFailed:`Verifikasi autentikasi OAuth gagal`,authenticationFailed:`Autentikasi OAuth gagal`},checkingAuth:`Memeriksa autentikasi...`,welcome:`Selamat datang`,noEmail:`Tidak ada email`,role:`Peran`,id:`ID`,userId:`ID pengguna`,signInDescription:`Masuk dengan akun GitHub Anda untuk melanjutkan`,signInWithGitHub:`Masuk dengan GitHub`,jwtActive:`Autentikasi JWT aktif`,jwtDescription:`Autentikasi berbasis JWT dengan GitHub OAuth`,github:`GitHub`,provider:`Penyedia`,tagline:`Stack AI Anda harus tunduk pada Anda.`,selfHosted:`Dihosting sendiri · Apache 2.0`,highlights:{local:{title:`Prioritas lokal`,body:`Percakapan dan file Anda tetap berada di mesin tempat Anda menjalankan ini.`},providers:{title:`Penyedia apa pun`,body:`Model lokal melalui Ollama, ditambah penyedia jarak jauh yang Anda pilih untuk ditambahkan.`},work:{title:`Kerja Terisolasi`,body:`Beri model ruang kerja sandbox dengan file, terminal, dan pratinjau.`}},oidc:{defaultProviderName:`Single sign-on`},mfa:{sectionTitle:`Autentikasi dua langkah`,sectionDescription:`Lindungi akun Anda dengan aplikasi autentikator dan kunci sandi.`,totpTitle:`Aplikasi autentikator`,totpEnabledHint:`Aktif. Kode pemulihan belum terpakai: {{count}}`,totpDisabledHint:`Tambahkan langkah kedua ke masuk dengan kata sandi lewat kode sekali pakai.`,enableButton:`Aktifkan`,disableButton:`Nonaktifkan`,activateButton:`Konfirmasi`,regenerateCodes:`Kode pemulihan baru`,confirmWithCode:`Konfirmasi dengan kode dari aplikasi Anda atau kode pemulihan`,enabled:`Autentikasi dua langkah aktif.`,disabled:`Autentikasi dua langkah nonaktif.`,invalidCode:`Kode itu tidak valid.`,enrollFailed:`Penyiapan tidak dapat dimulai.`,challengeExpired:`Tantangan masuk kedaluwarsa. Silakan masuk lagi.`,setupTitle:`Siapkan autentikasi dua langkah`,setupSubtitle:`Instans ini mewajibkan langkah masuk kedua. Tambahkan rahasia ke aplikasi autentikator Anda untuk melanjutkan.`,verifyTitle:`Masukkan kode Anda`,verifyHint:`Masukkan kode 6 digit dari aplikasi autentikator Anda, atau kode pemulihan.`,secretHint:`Tambahkan rahasia ini ke aplikasi autentikator Anda, lalu konfirmasi dengan kode saat ini.`,openAuthenticator:`Buka di aplikasi autentikator`,codeLabel:`Kode 6 digit`,codeOrRecoveryLabel:`Kode atau kode pemulihan`,codePlaceholder:`123456`,verifyButton:`Verifikasi`,backToSignIn:`Kembali ke halaman masuk`,recoveryCodesTitle:`Kode pemulihan`,recoveryCodesHint:`Simpan kode ini di tempat aman. Masing-masing bisa dipakai sekali untuk masuk jika autentikator Anda hilang.`,recoveryCodesSaved:`Saya sudah menyimpan kode pemulihan`,recoveryCodesRegenerated:`Kode pemulihan baru dibuat. Kode lama tidak berlaku lagi.`},passkeys:{sectionTitle:`Kunci sandi`,sectionDescription:`Masuk tanpa kata sandi menggunakan kunci layar perangkat atau kunci keamanan.`,addButton:`Tambah kunci sandi`,empty:`Belum ada kunci sandi.`,unnamed:`Kunci sandi`,createdAt:`Ditambahkan`,lastUsedAt:`Terakhir dipakai`,removeButton:`Hapus kunci sandi`,registered:`Kunci sandi ditambahkan.`,registerFailed:`Kunci sandi tidak dapat ditambahkan.`,removed:`Kunci sandi dihapus.`,removeFailed:`Kunci sandi tidak dapat dihapus.`,signInButton:`Masuk dengan kunci sandi`,signInFailed:`Masuk dengan kunci sandi gagal.`}},setup:{welcome:{title:`Selamat Datang di Libre WebUI`,subtitle:`Mari Mulai`,description:`Siapkan instance Libre WebUI Anda dalam beberapa langkah`,createAdmin:`Buat Akun Admin`,features:{secure:{title:`Aman & Privat`,description:`Percakapan Anda tersimpan di perangkat Anda`},fast:{title:`Cepat & Responsif`,description:`Dioptimalkan untuk kecepatan dan performa`},openSource:{title:`Open Source`,description:`Perangkat lunak gratis dan open source`}}},admin:{title:`Buat Akun Admin`,subtitle:`Pengaturan Administrator`,description:`Buat akun admin pertama untuk instance Libre WebUI Anda`,usernamePlaceholder:`Masukkan nama pengguna admin`,passwordPlaceholder:`Masukkan kata sandi (minimal 12 karakter)`,confirmPlaceholder:`Konfirmasi kata sandi Anda`,creating:`Membuat...`,createAdmin:`Buat Admin`,success:`Akun admin berhasil dibuat!`,failed:`Gagal membuat akun admin`,approvalUnexpected:`Administrator awal tidak dapat diaktifkan. Silakan coba lagi.`,fillAllFields:`Silakan isi semua field`,note:`Ini akan menjadi akun administrator utama untuk instance Libre WebUI Anda`},encryptionKey:{title:`Simpan Kunci Enkripsi Anda`,subtitle:`Penting: Simpan Kunci Ini`,description:`Kunci enkripsi ini melindungi data sensitif Anda. Simpan dengan aman - Anda akan membutuhkannya jika perlu memulihkan database.`,warning:`Peringatan`,warningText:`Jika Anda kehilangan kunci ini dan perlu memulihkan database, data terenkripsi Anda (kunci API, preferensi) tidak akan dapat dipulihkan.`,label:`Kunci Enkripsi Anda`,loading:`Memuat...`,copyToClipboard:`Salin ke clipboard`,copied:`Kunci enkripsi disalin ke clipboard!`,copyFailed:`Gagal menyalin kunci ke clipboard`,envNote:`Kunci ini juga disimpan di file backend/.env sebagai ENCRYPTION_KEY`,acknowledgment:`Saya telah menyimpan kunci enkripsi di lokasi yang aman dan memahami bahwa kehilangannya dapat mengakibatkan kehilangan data.`,confirmRequired:`Silakan konfirmasi bahwa Anda telah menyimpan kunci enkripsi`,continue:`Lanjutkan ke Libre WebUI`},connectModels:{title:`Hubungkan model Anda`,subtitle:`Lokal atau cloud — pilih apa pun yang sudah Anda gunakan. Anda selalu bisa mengubahnya nanti.`}},chat:{greeting:{morning:`Selamat pagi`,afternoon:`Selamat siang`,evening:`Selamat sore`,night:`Selamat malam`},followUp:`Tindak lanjut`,welcome:{helpToday:`Apa yang bisa saya bantu hari ini?`,helpTonight:`Apa yang bisa saya bantu malam ini?`,variety:{create:{title:`Kita mau membuat apa?`,subtitle:`Mulai dari sebuah gagasan, sketsa, atau masalah yang tak kunjung terpecahkan.`},explore:{title:`Mulai dari mana?`,subtitle:`Bawa pertanyaan yang terus terlintas di benak Anda.`},imagine:{title:`Apa yang Anda bayangkan?`,subtitle:`Kita bisa membentuknya bersama.`},focus:{title:`Apa yang layak mendapat perhatian Anda?`,subtitle:`Mari perjelas langkah berikutnya.`},untangle:{title:`Apa yang terasa kusut?`,subtitle:`Ceritakan versi yang masih berantakan dulu.`},momentum:{title:`Mulai kapan pun Anda siap.`,subtitle:`Lanjutkan ide, rencana, atau percakapan yang sempat tertunda.`},open:{title:`Apa yang sedang Anda pikirkan?`,subtitle:`Gagasan kecil atau proyek ambisius, keduanya bisa.`},challenge:{title:`Apa yang perlu kita pecahkan?`,subtitle:`Ceritakan bagian yang masih belum berjalan.`},draft:{title:`Mari mulai dari mana saja.`,subtitle:`Belum harus sempurna.`},possibility:{title:`Ini bisa menjadi apa?`,subtitle:`Tunjukkan bahan mentahnya.`},unexpected:{title:`Mari buat sesuatu yang tak terduga.`,subtitle:`Beri saya batasan, suasana, atau gagasan yang baru setengah jadi.`}}},input:{placeholder:`Kirim pesan`,messagePlaceholder:`Pesan...`,attachImages:`Lampirkan gambar`,attachments:`Lampiran dan fitur lanjutan`,sendMessage:`Kirim pesan`,stopGeneration:`Hentikan pembuatan`,menu:{uploadImages:`Unggah gambar`,attachDocument:`Lampirkan dokumen`,attachWebpage:`Lampirkan halaman web`,structuredOutput:`Keluaran terstruktur`,attach:`Lampirkan`,documentAttached:`Dokumen dilampirkan`,webpageAttached:`Halaman web dilampirkan`,attachFailed:`Gagal melampirkan`,attachKnowledge:`Lampirkan pengetahuan`,noCollections:`Belum ada koleksi — buat di Pengaturan → Dokumen`},voiceInput:`Input suara`,voiceStop:`Berhenti mendengarkan`,transcriptionSource:`Sumber pengenalan ucapan`,browserSpeech:`Layanan ucapan browser`,providerTranscriptionDisclosure:`Rekam dan kirim audio ke {{provider}} untuk ditranskripsikan`,webSearchOn:`Pencarian web aktif — balasan memakai hasil langsung`,webSearchOff:`Cari di web untuk pesan ini`,toolsOn:`Alat aktif — model dapat memanggil alat yang disetujui`,toolsOff:`Izinkan model memanggil alat untuk pesan ini`,thinkingOn:`Berpikir aktif ({{level}})`,thinkingOff:`Berpikir sebelum menjawab`},session:{new:`Chat Baru`,work:`Kerja`,chat:`Chat`,private:`Privat`,incognito:`Chat Incognito`,privateMode:`Mode Privat`,privateDescription:`Percakapan ini tidak akan disimpan`,privateTooltip:`Mulai percakapan privat yang tidak akan disimpan`,deleteConfirm:`Apakah Anda yakin ingin menghapus chat ini?`,generatingTitle:`Membuat judul`,noChats:`Belum ada chat`,createFirst:`Buat chat pertama Anda di atas`,chats:`Chat`,renameChat:`Ubah nama chat`,openNewTab:`Buka di tab baru`,pinChat:`Sematkan`,unpinChat:`Lepas sematan`,deleteChat:`Hapus chat`,archiveChat:`Arsipkan obrolan`,groups:{pinned:`Disematkan`,today:`Hari ini`,yesterday:`Kemarin`,previous7Days:`7 hari terakhir`,previous30Days:`30 hari terakhir`,older:`Lebih lama`},folder:{new:`Folder baru`,namePlaceholder:`Nama folder`,move:`Pindahkan ke folder`,remove:`Keluarkan dari folder`,delete:`Hapus folder`,deleteConfirm:`Hapus folder ini? Obrolan di dalamnya tetap ada.`},shareChat:`Bagikan obrolan…`},persona:{applied:`Persona diterapkan`,label:`Persona`,loadFailed:`Gagal memuat detail persona`,removeFailed:`Gagal menghapus persona`},model:{updated:`Model diperbarui`,noModels:`Tidak ada model tersedia`,noModelsDescription:`Tidak ada model tersedia. Pastikan Ollama berjalan dan model sudah diinstal.`,pullCommand:`ollama pull llama3.2:3b`,noModelsTooltip:`Tidak ada model tersedia. Pastikan Ollama berjalan dan model sudah diinstal.`,selectBeforePrivateChat:`Pilih model yang tersedia sebelum memulai obrolan privat`,selectBeforeSending:`Pilih model yang tersedia sebelum mengirim`,selectBeforeRegenerating:`Pilih model yang tersedia sebelum meregenerasi`,connectDescription:`Belum ada model yang terhubung. Pilih sumber di bawah ini — runtime lokal, server Anda sendiri, atau API cloud — dan Anda akan mulai mengobrol dalam waktu kurang dari satu menit.`},footer:{disclaimer:`LLM dapat membuat kesalahan - verifikasi informasi penting`,images:`{{count}} gambar`,images_plural:`{{count}} gambar`,structuredOutput:`Output terstruktur`},mediaUpload:{dropImagesHere:`Seret gambar ke sini atau`,supportedFormats:`Mendukung: JPG, PNG, GIF, WebP (maks 10MB per file)`,browse:`telusuri`,unsupportedFileType:`Jenis file tidak didukung: {{name}}`,maxImagesAllowed:`Maksimum {{count}} gambar diizinkan`,imageTooLarge:`Gambar {{name}} terlalu besar (maks. 10MB)`},structuredOutput:{title:`Format Respons`,none:`Tidak ada (Bahasa Alami)`,noneDescription:`Respons bahasa alami default`,json:`JSON`,jsonDescription:`Format JSON terstruktur`,list:`Daftar`,listDescription:`Array item`,summary:`Ringkasan`,summaryDescription:`Ringkasan dokumen dengan poin-poin utama`,analysis:`Analisis`,analysisDescription:`Analisis terstruktur dengan pro/kontra`,custom:`Skema Kustom`,customDescription:`Tentukan skema JSON Anda sendiri`,customSchema:`Skema JSON kustom`,schemaPreview:`Pratinjau Skema`,applySchema:`Terapkan Skema`,cancel:`Batal`,enabled:`Output terstruktur diaktifkan`},controls:{title:`Kontrol obrolan`,systemPrompt:`Prompt sistem`,systemPromptPlaceholder:`Instruksi yang hanya berlaku untuk obrolan ini…`,advancedParams:`Parameter lanjutan`,advancedParamsDescription:`Penggantian untuk obrolan ini. Kolom kosong memakai bawaan global.`,fromModel:`dari model`,fromModelHint:`Nilai ini berasal dari pengaturan yang direkomendasikan model itu sendiri.`,contextCapped:`Konteks dibatasi pada {{context}} dari {{trained}} yang dilatih untuk model ini, agar tetap dapat dimuat.`,saved:`Kontrol disimpan`,saveFailed:`Gagal menyimpan kontrol`,params:{temperature:`Temperatur`,topP:`Top P`,topK:`Top K`,minP:`Min P`,maxTokens:`Token maks.`,repeatPenalty:`Penalti pengulangan`,seed:`Seed`,contextLength:`Panjang konteks`},thinking:`Berpikir`,thinkingDescription:`Seberapa dalam model berpikir sebelum menjawab. Model tanpa penalaran mengabaikannya.`,compaction:`Pemadatan konteks`,compactionDescription:`Saat server memadatkan percakapan panjang, obrolan ini dapat memilih keluar dan menyimpan riwayat lengkapnya.`,compactionDefault:`Bawaan server`,compactionOff:`Nonaktif untuk obrolan ini`},message:{sources:`Sumber`},toasts:{chatCreated:`Chat baru dibuat`,createFailed:`Gagal membuat sesi`,loadFailed:`Gagal memuat sesi`,chatDeleted:`Chat dihapus`,deleteFailed:`Gagal menghapus chat`,deleteSessionFailed:`Gagal menghapus sesi`,historyCleared:`Semua riwayat chat dihapus`,historyClearFailed:`Gagal menghapus riwayat chat`,titleUpdated:`Judul chat diperbarui`,updateFailed:`Gagal memperbarui sesi`,noValidSession:`Tidak ada sesi chat yang valid. Silakan buat atau pilih chat.`,sessionNotFound:`Sesi tidak ditemukan atau tidak valid. Silakan pilih atau buat sesi chat yang valid.`,noModelProvider:`Tidak ada penyedia model yang tersedia`,modelUnavailable:`Model yang dipilih "{{model}}" tidak tersedia dari {{provider}}. Aktifkan kembali penyedia tersebut atau pilih model lain.`,modelSwitched:`Berpindah ke {{model}} (model sebelumnya tidak lagi tersedia)`,modelsLoadFailed:`Gagal memuat model`,modelUpdated:`Model diperbarui untuk chat saat ini`,modelUpdateFailed:`Gagal memperbarui model sesi`,titlePreviewFallback:`Judul tidak dapat dibuat; menggunakan pratinjau pesan`,titleGenerated:`Judul chat berhasil dibuat`,titleGenerationFailed:`Gagal membuat judul chat`,sessionNotFoundRedirect:`Sesi tidak ditemukan. Membuat sesi baru...`,comparisonError:`{{model}}: {{error}}`,generationFailed:`pembuatan gagal`,comparisonFailed:`perbandingan gagal`,sendFailed:`Gagal mengirim pesan`,noMessageToRegenerate:`Tidak ada pesan untuk diregenerasi`,regenerateFailed:`Gagal meregenerasi pesan`,messageNotFound:`Pesan tidak ditemukan`,branchSwitched:`Beralih ke varian {{number}}`,branchSelectFailed:`Gagal memilih cabang`,editFailed:`Gagal mengedit pesan`,toolDecisionFailed:`Keputusan alat tidak dapat dicatat`},documents:{title:`Dokumen dalam konteks`},context:{title:`Jendela konteks:`,full:`{{percent}}% penuh`,tokensUsed:`{{used}} / {{budget}} token terpakai`,tokensUsedNoBudget:`{{used}} token terpakai`,capped:`dibatasi dari {{trained}}`},queue:{title:`Dalam antrean ({{total}})`,moveUp:`Naikkan`,moveDown:`Turunkan`,updateFailed:`Tidak dapat memperbarui prompt dalam antrean`,enqueueFailed:`Tidak dapat mengantrekan prompt`},compare:{title:`Bandingkan model`,hint:`Jawab dengan hingga {{max}} model tambahan`},fork:{action:`Cabangkan dari sini`,created:`Obrolan dicabangkan`,failed:`Tidak dapat mencabangkan obrolan`,origin:`Dicabangkan dari {{title}}`,originUnknown:`obrolan lain`},sharedReadOnly:`Dibagikan oleh {{owner}} — hanya lihat`},sidebar:{navigation:{chat:`Chat`,models:`Model`,personas:`Persona`,imagine:`Imajinasi`,agents:`Agen`,work:`Kerja`,settings:`Pengaturan`,usageAnalytics:`Penggunaan Penyedia`,system:`Sistem`,userManagement:`Manajemen Pengguna`,signOut:`Keluar`,exploreLabel:`Jelajahi`,notes:`Catatan`,calendar:`Kalender`,automations:`Otomatisasi`,prompts:`Prompt`,skills:`Keterampilan`,tools:`Alat`,channels:`Kanal`},toggleSize:`Ubah ukuran sidebar`,expandSidebar:`Perluas sidebar`},user:{menu:{changePicture:`Ubah Gambar`,settings:`Pengaturan`,usageAnalytics:`Penggunaan Penyedia`,system:`Sistem`,userManagement:`Manajemen Pengguna`,logout:`Keluar`,pinShortcut:`Sematkan ke bilah samping`,unpinShortcut:`Lepas dari bilah samping`,evaluations:`Evaluasi`},avatar:{title:`Ubah Foto Profil`,updated:`Foto profil diperbarui`,updateFailed:`Gagal memperbarui foto profil`,saving:`Menyimpan...`,label:`Avatar`,uploadAvatarImage:`Unggah gambar avatar`,dragAndDrop:`Seret dan lepas gambar atau klik untuk menelusuri`,chooseImage:`Pilih Gambar`,uploading:`Mengunggah...`,enterImageUrl:`Atau masukkan URL gambar`,supportedFormats:`Mendukung: JPG, PNG, GIF, WebP (maks. 2MB). Gambar persegi paling cocok.`,customAvatar:`Gambar avatar kustom`,clickToChange:`Klik untuk mengubah atau menghapus`,removed:`Avatar dihapus`,uploaded:`Avatar berhasil diunggah`,invalidFile:`Silakan pilih file gambar yang valid`,fileTooLarge:`Ukuran gambar avatar harus kurang dari 2MB`,readFailed:`Gagal membaca file gambar`,uploadFailed:`Gagal mengunggah gambar avatar`},profile:{noEmail:`Tidak ada email`}},settings:JSON.parse(`{"title":"Pengaturan","tabs":{"appearance":"Tampilan","model":"Bawaan","systemMessage":"Pesan Sistem","plugins":"Plugin","search":"Pencarian","generation":"Pembuatan","documents":"Dokumen","tts":"Suara","imageGen":"Gambar","data":"Data","shortcuts":"Pintasan","about":"Tentang","sessions":"Sesi","apiKeys":"API key","notifications":"Notifikasi"},"appearance":{"title":"Tampilan","language":{"title":"Bahasa","description":"Pilih bahasa pilihan Anda"},"theme":{"title":"Tema","light":"Terang","dark":"Gelap","amoled":"Hitam Murni","system":"Sistem"},"accent":{"title":"Warna aksen","custom":"Warna kustom","useColor":"Gunakan aksen {{color}}","behaviorTitle":"Palet antarmuka","behaviorDescription":"Pilih apakah aksen hanya digunakan pada kontrol atau menyesuaikan seluruh antarmuka terang maupun gelap.","defaultStyle":"Bawaan","defaultStyleDescription":"Pertahankan permukaan netral pada tema terang dan gelap.","adaptedStyle":"Sesuaikan dengan aksen","adaptedStyleDescription":"Warnai permukaan, batas, dan teks dengan warna aksen."},"chatInterface":{"title":"Antarmuka Chat","showUsername":"Tampilkan Nama Pengguna","showUsernameDescription":"Tampilkan nama pengguna di pesan chat","followUpSuggestions":"Saran tindak lanjut","followUpSuggestionsDescription":"Sarankan balasan cepat setelah setiap respons","hapticFeedback":"Umpan balik haptik (Android)","hapticFeedbackDescription":"Gunakan getaran halus untuk tindakan seluler penting","autoOpenArtifacts":"Buka artefak secara otomatis","autoOpenArtifactsDescription":"Buka panel artefak saat sebuah jawaban membuatnya"},"background":{"title":"Gambar Latar","enable":"Aktifkan gambar latar","enableDescription":"Tampilkan latar kustom dengan efek blur","blur":"Blur","opacity":"Opasitas","upload":"Unggah gambar latar","dragDrop":"Seret dan lepas gambar atau klik untuk menelusuri","chooseImage":"Pilih Gambar"}},"saveSettings":"Simpan Pengaturan","preferences":{"updateFailed":"Gagal memperbarui pengaturan: {{error}}"},"model":{"title":"Pengaturan Model","defaultModel":"Model Default","defaultModelDescription":"Model ini akan digunakan secara default untuk percakapan baru","selectModel":"Pilih model","specializedModels":"Model Khusus","visionModel":"Model Visi","selectVisionModel":"Gunakan model chat saat ini","visionModelDescription":"Digunakan secara otomatis setiap kali konteks chat keluar berisi gambar. Pilih model yang mendukung input gambar.","visionModelUpdateFailed":"Gagal memperbarui model visi: {{error}}","visionModelNoProvider":"Model visi ini tidak memiliki identitas penyedia. Pilih model yang tersedia.","persona":"Persona","updateAll":"Perbarui Semua Model","updateAllDescription":"Periksa pembaruan dan unduh versi terbaru semua model yang terinstal","updateAllButton":"Perbarui Semua","updating":"Memperbarui model...","currentModelInfo":"Info Model Saat Ini","name":"Nama","size":"Ukuran","family":"Keluarga","format":"Format","status":"Status","statusStarting":"Memulai...","statusComplete":"Selesai","statusError":"Error","bulkOperations":"Operasi Massal","autoTitle":{"title":"Pembuatan Judul Otomatis","enable":"Aktifkan Judul Otomatis","enableDescription":"Otomatis membuat judul untuk percakapan baru","taskModel":"Model Tugas","selectTaskModel":"Pilih model tugas","taskModelDescription":"Model yang digunakan untuk membuat judul percakapan"},"updatingModel":"Memperbarui {{name}} ({{current}}/{{total}})","modelsProgress":"{{current}} dari {{total}} model","defaultModelUpdated":"Model default diperbarui","allModelsUpdated":"Semua model berhasil diperbarui!","updateAllFailed":"Gagal memperbarui model: {{error}}"},"systemMessage":{"title":"Pesan Sistem","description":"Atur pesan sistem kustom yang akan digunakan untuk semua percakapan baru.","placeholder":"Masukkan pesan sistem...","saved":"Pesan sistem disimpan","saveFailed":"Gagal menyimpan pesan sistem"},"plugins":{"title":"Plugin","description":"Kelola plugin yang terinstal","providerConnections":"Koneksi penyedia","providerConnectionsDescription":"Hubungkan, konfigurasikan, dan periksa penyedia model melalui plugin.","providers":"Penyedia","searchProviders":"Cari penyedia","noProvidersFound":"Tidak ada penyedia yang cocok dengan pencarian Anda.","selectProvider":"Pilih penyedia","selectProviderDescription":"Pilih penyedia untuk memeriksa koneksi dan katalog modelnya.","addNew":"Tambah Plugin Baru","upload":"Unggah Plugin","addJson":"Tambah JSON","uploading":"Mengunggah...","jsonPlaceholder":"Tempel konfigurasi JSON plugin...","install":"Instal Plugin","noPlugins":"Tidak ada plugin terinstal","noPluginsDescription":"Tambah plugin untuk memperluas fungsionalitas","loading":"Memuat plugin...","installed":"Plugin Terinstal","active":"Plugin Aktif","activeLabel":"Aktif","inactive":"Tidak Aktif","activate":"Aktifkan","deactivate":"Nonaktifkan","models":"model","apiKeySet":"API Key Diatur","apiKeyConfiguration":"Konfigurasi API Key","apiKeyDescription":"Simpan kunci API pribadi untuk {{name}}.","apiKeyEnvAlternative":"Atau, atur variabel","environmentVariable":"variabel lingkungan","apiKeyConfigured":"API key dikonfigurasi","apiKeyPlaceholder":"Masukkan API key Anda...","saveApiKey":"Simpan API Key","showApiKey":"Tampilkan kunci API","hideApiKey":"Sembunyikan kunci API","configure":"Konfigurasi","providerSettings":"Pengaturan penyedia","status":"Status","defaultEndpoint":"Endpoint default","modelCatalog":"Katalog model","modelCatalogDescription":"Model yang ditemukan dan dikonfigurasi untuk penyedia ini beserta kemampuannya.","refreshModels":"Segarkan model","noModelsConfigured":"Tidak ada model yang dikonfigurasi untuk penyedia ini.","modelId":"ID Model","capabilities":"Kemampuan","modelCatalogUpdated":"Katalog model diperbarui: {{count}} model.","modelCatalogUnchanged":"Katalog model sudah diperbarui.","modelCatalogNeedsApiKey":"Tambahkan kunci API yang valid untuk penyedia ini guna memuat daftar model langsungnya.","modelCatalogUnavailable":"Tidak dapat memuat daftar model penyedia.","modelCatalogRefreshFailed":"Gagal memperbarui katalog model","invalidJson":"Format JSON tidak valid","capability":{"chat":"Obrolan","embedding":"Embedding","image":"Gambar","speech":"Suara","transcription":"Transkripsi"},"exportPlugin":"Ekspor plugin","deletePlugin":"Hapus plugin","apiKey":{"title":"API Key","placeholder":"Masukkan API key","save":"Simpan Key","remove":"Hapus Key","configured":"API Key Dikonfigurasi","notConfigured":"API Key Diperlukan","saved":"API key berhasil disimpan","removed":"API key dihapus","saveFailed":"Gagal menyimpan API key","removeFailed":"Gagal menghapus API key","enterKey":"Silakan masukkan API key"},"variables":"Variables"},"generation":{"title":"Opsi Pembuatan","description":"Konfigurasi cara AI membuat respons","scopeLabel":"Berlaku untuk","scopeAll":"Semua model","scopeModel":"Hanya {{model}}","scopeAllHint":"Nilai yang dipakai setiap model kecuali model itu punya nilainya sendiri.","scopeModelHint":"Disimpan hanya untuk model ini dan mengalahkan nilai umum.","advancedSettings":"Pengaturan pembuatan lanjutan","advancedSettingsDescription":"Pengambilan sampel, batas token, konteks, penalti, dan urutan berhenti","coreParameters":"Parameter Inti","temperature":"Temperatur","temperatureDescription":"Mengontrol keacakan. Nilai lebih rendah lebih fokus, nilai lebih tinggi lebih kreatif.","topP":"Top P","topPDescription":"Mengontrol keragaman melalui nucleus sampling. Nilai lebih rendah fokus pada token yang mungkin.","topK":"Top K","topKDescription":"Membatasi pemilihan token ke K teratas yang paling mungkin. Atur ke 0 untuk menonaktifkan.","minP":"Min P","minPDescription":"Ambang probabilitas minimum untuk pemilihan token.","generationControl":"Kontrol Pembuatan","maxTokens":"Token Maksimum","maxTokensDescription":"Jumlah maksimum token yang akan dihasilkan dalam respons.","repeatPenalty":"Penalti Pengulangan","repeatPenaltyDescription":"Memberikan penalti pada token yang diulang. Nilai lebih tinggi mengurangi pengulangan.","contextLength":"Panjang Konteks","contextLengthDescription":"Ukuran jendela konteks maksimum untuk percakapan.","seed":"Seed","optional":"opsional","random":"Acak","seedDescription":"Atur seed spesifik untuk output yang dapat direproduksi.","advancedOptions":"Opsi Lanjutan","presencePenalty":"Penalti Kehadiran","presencePenaltyDescription":"Memberikan penalti pada token yang muncul dalam konteks.","frequencyPenalty":"Penalti Frekuensi","frequencyPenaltyDescription":"Memberikan penalti pada token yang sering digunakan.","stopSequences":"Urutan Berhenti","commaSeparated":"dipisahkan koma","stopSequencesDescription":"Token kustom yang akan menghentikan pembuatan saat ditemui.","resetDefaults":"Reset ke Default","saveOptions":"Simpan Opsi","saveSuccess":"Opsi pembuatan berhasil diperbarui","saveFailed":"Gagal memperbarui opsi pembuatan: {{error}}","modelDefaultsLoaded":"Pengaturan yang direkomendasikan {{model}} telah dimuat","resetSuccess":"Opsi pembuatan diatur ulang ke default","resetFailed":"Gagal mengatur ulang opsi pembuatan ke default: {{error}}","embeddingSettings":"Pengaturan Embedding","enableEmbeddings":"Aktifkan Embedding Dokumen","thinking":"Berpikir","thinkingDescription":"Tingkat berpikir bawaan untuk jawaban. Setiap obrolan dapat mengubahnya.","thinkingLevels":{"default":"Bawaan model","defaultWith":"Bawaan model ({{level}})","off":"Nonaktif","on":"Aktif","low":"Rendah","medium":"Sedang","high":"Tinggi"}},"documents":{"title":"Pengaturan Dokumen","embeddings":{"title":"Embedding","enable":"Aktifkan embedding dokumen","model":"Model Embedding","modelDescription":"Pilih model yang digunakan untuk embedding dokumen","chunkSize":"Ukuran Chunk","chunkSizeInTokens":"(dalam token)","chunkSizeDescription":"Ukuran potongan teks untuk embedding","chunkOverlap":"Overlap Chunk","chunkOverlapInTokens":"(dalam token)","chunkOverlapDescription":"Overlap antara chunk berturut-turut","similarityThreshold":"Ambang Kemiripan","similarityDescription":"Skor kemiripan minimum untuk menyertakan hasil","status":"Status Embedding","statusLabel":"Status","available":"Tersedia","unavailable":"Tidak Tersedia","chunksWithEmbeddings":"Chunk dengan embedding","coverage":"Cakupan","regenerate":"Regenerasi Embedding","regenerating":"Meregenerasi...","regenerateSuccess":"Embedding untuk {{count}} dokumen berhasil diregenerasi","regeneratePartialSuccess":"{{count}} dokumen diregenerasi; {{skipped}} dilewati","regenerateFailed":"Gagal meregenerasi embedding: {{error}}","saveSuccess":"Pengaturan embedding berhasil diperbarui","saveFailed":"Gagal memperbarui pengaturan embedding: {{error}}","resetSuccess":"Pengaturan embedding diatur ulang ke default","resetFailed":"Gagal mengatur ulang pengaturan embedding ke default: {{error}}"},"collections":{"title":"Koleksi pengetahuan","description":"Kelompokkan dokumen ke dalam koleksi dan lampirkan ke obrolan mana pun.","namePlaceholder":"Nama koleksi","create":"Buat","none":"Tanpa koleksi","deleteConfirm":"Hapus koleksi ini? Dokumen di dalamnya tetap ada.","createFailed":"Gagal membuat koleksi","deleteFailed":"Gagal menghapus koleksi","assignFailed":"Gagal memindahkan dokumen","share":"Bagikan koleksi","shared":"dibagikan"},"library":{"title":"Dokumen terunggah","description":"Dokumen yang tersedia sebagai konteks obrolan. Dokumen yang diunggah di obrolan hanya berlaku di percakapan itu; dokumen tanpa obrolan dan koleksi ikut di setiap percakapan.","empty":"Belum ada dokumen yang diunggah.","chatScope":"Satu obrolan","everyChatScope":"Semua obrolan","deleteConfirm":"Hapus \\"{{name}}\\"? Dokumen ini akan hilang dari semua obrolan.","deleteFailed":"Gagal menghapus dokumen","extractionFailed":"Ekstraksi gagal","extractionQueued":"Mengekstrak…"}},"tts":{"title":"Text-to-Speech","description":"Konfigurasi pengaturan text-to-speech untuk membaca pesan dengan suara","loadingProviders":"Memuat penyedia TTS...","noProviders":"Tidak Ada Penyedia TTS","noProvidersDescription":"Konfigurasi plugin dengan dukungan TTS untuk mengaktifkan text-to-speech","enable":"Aktifkan TTS","enableDescription":"Izinkan text-to-speech untuk pesan asisten","autoPlay":"Putar Otomatis Respons","autoPlayDescription":"Otomatis membaca pesan asisten baru dengan suara","streamSentences":"Pemutaran batch alami","streamSentencesDescription":"Buat beberapa batch sesuai frasa terlebih dahulu, lalu putar sebagai satu respons yang berkesinambungan.","voiceConfiguration":"Konfigurasi Suara","model":"Model TTS","modelDescription":"Pilih model untuk pembuatan text-to-speech","voice":"Suara","selectVoice":"Pilih suara","voiceDescription":"Pilih suara untuk text-to-speech","providerDefaultVoice":"Model ini menggunakan suara bawaannya kecuali Anda memberikan rekaman referensi saat membuat ucapan.","voiceCloningAvailable":"Kloning suara tersedia","voiceCloningAvailableDescription":"Gunakan Bayangkan → Audio untuk membuat ucapan dari rekaman referensi yang telah mendapat izin beserta transkrip persisnya. Anda dapat menyimpan referensi sebagai suara yang dapat digunakan kembali.","savedVoiceOption":"{{name}} (suara tersimpan)","savedVoices":"Suara tersimpan","loadingSavedVoices":"Memuat suara tersimpan…","deleteSavedVoice":"Hapus suara tersimpan {{name}}","deleteSavedVoiceConfirm":"Hapus suara tersimpan “{{name}}”? Rekaman referensi dan transkripnya akan dihapus.","savedVoiceDeleted":"Suara tersimpan dihapus","savedVoicePreferenceCleanupFailed":"Suara tersimpan dihapus, tetapi pengaturan Ucapan tidak dapat diatur ulang","savedVoiceDeleteFailed":"Gagal menghapus suara tersimpan","speed":"Kecepatan","speedSlow":"0.5x","speedNormal":"1.0x","speedFast":"2.0x","availableProviders":"Penyedia Tersedia","models":"model","test":"Tes","testing":"Menguji...","stop":"Berhenti","consentRevoked":"Persetujuan dicabut","consentExpired":"Persetujuan kedaluwarsa","transferCount":"dikirim ke penyedia {{total}} kali","consentExpires":"persetujuan hingga {{date}}","revokeSavedVoice":"Cabut persetujuan untuk {{name}}","revokeSavedVoiceConfirm":"Cabut persetujuan untuk “{{name}}”? Suara tersimpan tidak dapat digunakan lagi, tetapi catatan persetujuan tetap disimpan.","savedVoiceRevoked":"Persetujuan dicabut","savedVoiceRevokeFailed":"Gagal mencabut persetujuan","savedVoiceUnavailableCleanupFailed":"Suara tersimpan tidak tersedia dan tidak dapat dihapus dari pengaturan Text-to-Speech","saveSuccess":"Pengaturan TTS berhasil disimpan","saveFailed":"Gagal menyimpan pengaturan TTS: {{error}}","testFailed":"Pengujian TTS gagal: {{error}}"},"imageGen":{"title":"Pembuatan Gambar","description":"Konfigurasi pengaturan dan penyedia pembuatan gambar","loadingProviders":"Memuat penyedia pembuatan gambar...","noProviders":"Tidak Ada Penyedia Pembuatan Gambar","noProvidersDescription":"Konfigurasi plugin dengan dukungan pembuatan gambar","enable":"Aktifkan Pembuatan Gambar","enableDescription":"Izinkan pembuatan gambar AI dalam percakapan","configuration":"Konfigurasi","model":"Model","modelDescription":"Pilih model untuk pembuatan gambar","size":"Ukuran","sizeDescription":"Resolusi gambar yang dihasilkan","quality":"Kualitas","qualityDescription":"Tingkat kualitas gambar yang dihasilkan","style":"Gaya","styleDescription":"Preset gaya untuk gambar yang dihasilkan","availableProviders":"Penyedia Tersedia","models":"model","saveSuccess":"Pengaturan pembuatan gambar berhasil disimpan","saveFailed":"Gagal menyimpan pengaturan pembuatan gambar: {{error}}"},"data":{"title":"Manajemen Data","export":"Ekspor Data","exportDescription":"Unduh arsip portabel berisi preferensi, folder obrolan, sesi dan pesan, catatan, koleksi pengetahuan, serta teks dokumen yang diekstrak.","archiveScopeV3":"Mencakup preferensi, obrolan, folder, catatan, koleksi pengetahuan, dan teks dokumen yang diekstrak. Tidak mencakup akun dan rahasia, suara kloning biometrik, media yang dihasilkan, persona dan memori, serta data atau volume Work.","exportAll":"Ekspor Semua Data","import":"Impor Data","importDescription":"Impor data dari ekspor sebelumnya.","importData":"Impor Data","importing":"Mengimpor...","clearSessions":"Hapus Sesi","clearSessionsDescription":"Hapus semua sesi chat. Tindakan ini tidak dapat dibatalkan.","clearAll":"Hapus Semua","clearing":"Menghapus...","importOptions":"Opsi Impor","importOptionsDescription":"Pilih cara menangani data yang ada","validatingArchive":"Memvalidasi arsip dan menghitung perubahan…","archiveValidationFailed":"Validasi arsip gagal","preflightReport":"Pratinjau impor","preflightIncoming":"{{folders}} folder · {{sessions}} obrolan · {{messages}} pesan · {{notes}} catatan · {{collections}} koleksi · {{documents}} dokumen · {{chunks}} potongan","preflightRemappedIds":"{{count}} ID akan dipetakan ulang untuk melindungi data akun lain.","skipDuplicates":"Lewati duplikat","overwrite":"Timpa yang ada","importResults":"Hasil Impor","preferences":"Preferensi","imported":"Diimpor","failed":"Gagal","sessions":"Sesi","sessionFolders":"Folder sesi","notes":"Catatan","knowledgeCollections":"Koleksi pengetahuan","importedLabel":"diimpor","overwrittenLabel":"ditimpa","skipped":"dilewati","toCreate":"akan dibuat","toOverwrite":"akan ditimpa","toSkip":"akan dilewati","documents":"Dokumen","warnings":"Peringatan","refreshAfterImportFailed":"Data telah diimpor, tetapi beberapa tampilan tidak dapat disegarkan. Muat ulang Libre WebUI untuk melihat semua perubahan.","exportSuccess":"Arsip data portabel berhasil diekspor","exportFailed":"Ekspor gagal","importSuccess":"Arsip data portabel berhasil diimpor","importFailed":"Impor gagal","archiveErrors":{"invalidJson":"Arsip portabel bukan JSON yang valid.","objectRequired":"Arsip portabel harus berisi objek JSON.","unsupportedVersion":"Versi arsip portabel {{version}} tidak didukung.","unrecognized":"File ini bukan arsip portabel Libre WebUI."},"errors":"Error","archivedChats":{"title":"Obrolan diarsipkan","empty":"Tidak ada obrolan yang diarsipkan","unarchive":"Batalkan arsip"}},"about":{"title":"Tentang","versionLabel":"Versi","ollama":{"title":"Status Ollama","version":"Versi","healthy":"Sehat","unhealthy":"Tidak Sehat"},"stats":{"models":"Model","sessions":"Sesi"},"features":{"privacy":{"title":"Privasi Utama","description":"Data Anda tetap di perangkat Anda"},"openSource":{"title":"Open Source","description":"Perangkat lunak gratis dan open source"},"localInference":{"title":"Inferensi Lokal","description":"Jalankan model AI secara lokal dengan Ollama"}},"openSourceBy":"Open source oleh {{company}}","links":{"title":"Tautan","github":"GitHub","githubDescription":"Lihat kode sumber dan berkontribusi","website":"Website","websiteDescription":"Kunjungi website kami","documentation":"Dokumentasi","reportIssue":"Laporkan Masalah","reportIssueDescription":"Laporan bug & permintaan fitur","documentationDescription":"Panduan, tutorial, dan referensi API","forgejo":"Mirror Forgejo","forgejoDescription":"Repositori Forgejo yang di-hosting sendiri","sponsor":"Sponsor","sponsorDescription":"Bantu danai proyek ini","star":"Bintang di GitHub","starDescription":"Bintang membantu orang lain menemukan proyek ini"},"version":"Versi {{version}}","updates":{"checking":"Memeriksa pembaruan…","upToDate":"Anda menggunakan versi terbaru","updateAvailable":"Versi {{version}} tersedia","ahead":"Lebih maju dari rilis terbaru ({{version}})","checkFailed":"Tidak dapat memeriksa pembaruan","viewChangelog":"Lihat catatan perubahan"}},"groups":{"general":"Umum","chat":"Chat","media":"Suara & gambar","connections":"Koneksi"},"search":{"title":"Pencarian web","description":"Cari di web melalui instans SearXNG yang dihosting sendiri. Saat diaktifkan, komposer chat menampilkan tombol pencarian dan tugas Work dengan akses jaringan dapat mencari.","enableLabel":"Aktifkan pencarian web","enableDescription":"Tawarkan pencarian web untuk chat dan tugas Work. Pencarian berjalan di sisi server terhadap instans yang dikonfigurasi.","urlLabel":"URL SearXNG","urlDescription":"URL dasar instans SearXNG yang dapat dijangkau dari server. Stack deploy privat bawaan menyediakan http://searxng:8080.","maxResultsLabel":"Hasil per pencarian","maxResultsDescription":"Berapa banyak hasil yang masuk ke balasan atau panggilan alat, 1-100.","maxResultsInvalid":"Hasil per pencarian harus antara 1 dan 100.","safeSearchLabel":"Pencarian aman","safeSearchDescription":"Minta mesin memfilter hasil eksplisit.","test":"Uji koneksi","testing":"Menguji…","testOk":"Pencarian berfungsi — {{results}} hasil dikembalikan","testFailed":"Uji pencarian gagal","save":"Simpan","saved":"Pengaturan pencarian disimpan","saveFailed":"Tidak dapat menyimpan pengaturan pencarian"},"compaction":{"title":"Pemadatan konteks","description":"Saat percakapan melewati ambang token, server merangkum pesan-pesan lamanya dan hanya menyimpan pesan terbaru secara utuh. Berlaku untuk semua pengguna di server ini.","thresholdLabel":"Ambang token","thresholdDescription":"Perkiraan jumlah token konteks yang jika terlampaui, riwayat lama akan dirangkum, 500-1.000.000.","thresholdInvalid":"Ambang token harus antara 500 dan 1.000.000.","keepRecentLabel":"Pesan terbaru yang disimpan","keepRecentDescription":"Berapa banyak pesan terakhir yang selalu disimpan secara utuh, 2-200.","keepRecentInvalid":"Pesan terbaru yang disimpan harus antara 2 dan 200.","modelLabel":"Model pemadatan","modelDescription":"Model yang menulis rangkuman. Jika tidak ada yang dipilih, model milik sesi yang digunakan.","sessionModelOption":"Gunakan model sesi","promptLabel":"Prompt rangkuman kustom","promptPlaceholder":"Biarkan kosong untuk menggunakan prompt bawaan","promptDescription":"Variabel templat {{previousSummaryVariable}} dan {{messagesVariable}} akan diganti dengan rangkuman sebelumnya dan pesan-pesan yang sedang dirangkum.","saved":"Pengaturan pemadatan disimpan","saveFailed":"Tidak dapat menyimpan pengaturan pemadatan","loadFailed":"Tidak dapat memuat pengaturan pemadatan"},"sessions":{"title":"Sesi","description":"Semua tempat akun ini masuk. Mengeluarkan sesi berlaku seketika; masuk kembali akan memulihkan akses.","signOutOthers":"Keluarkan sesi lain","signingOutOthers":"Mengeluarkan…","signOut":"Keluarkan","signingOut":"Mengeluarkan…","revoked":"Sesi telah dikeluarkan.","revokeFailed":"Sesi tidak dapat dikeluarkan.","othersRevoked":"Sesi lain yang dikeluarkan: {{count}}","loadFailed":"Sesi tidak dapat dimuat.","empty":"Tidak ada sesi yang ditemukan.","current":"Sesi ini","revokedBadge":"Telah keluar","unknownDevice":"Perangkat tidak dikenal","createdAt":"Masuk","lastSeenAt":"Terakhir aktif","expiresAt":"Kedaluwarsa"},"apiKeys":{"title":"API key","description":"Token dengan cakupan terbatas untuk skrip dan integrasi. Setiap key hanya memiliki akses ke cakupan yang Anda pilih.","newKeyTitle":"API key baru Anda","copy":"Salin","copied":"Disalin ke clipboard.","copyFailed":"Gagal menyalin.","showOnceWarning":"Salin sekarang, key ini tidak akan ditampilkan lagi.","dismiss":"Selesai","createTitle":"Buat key","nameLabel":"Nama","namePlaceholder":"mis. pipeline CI","nameRequired":"Beri nama key ini.","expiryLabel":"Kedaluwarsa dalam hari (opsional)","expiryPlaceholder":"Tidak pernah","expiryInvalid":"Masa berlaku harus berupa bilangan bulat hari.","scopesLabel":"Cakupan","scopesRequired":"Pilih setidaknya satu cakupan.","create":"Buat key","creating":"Membuat…","created":"API key dibuat.","createFailed":"API key tidak dapat dibuat.","revoke":"Cabut","revoking":"Mencabut…","revoked":"API key dicabut.","revokeFailed":"API key tidak dapat dicabut.","revokedBadge":"Dicabut","loadFailed":"API key tidak dapat dimuat.","empty":"Belum ada API key.","createdAt":"Dibuat","lastUsedAt":"Terakhir digunakan","expiresAt":"Kedaluwarsa","neverExpires":"Tidak pernah"},"notifications":{"title":"Notifikasi","description":"Bagaimana browser ini diberi tahu tentang sebutan, berbagi, pengingat, dan pekerjaan yang selesai.","pushTitle":"Notifikasi browser","pushHint":"Tampilkan notifikasi sistem dari perangkat ini meski tab berada di latar belakang.","enabled":"Notifikasi browser aktif di perangkat ini.","disabled":"Notifikasi browser nonaktif di perangkat ini.","enableFailed":"Notifikasi browser tidak dapat diaktifkan.","permissionDenied":"Notifikasi diblokir di pengaturan browser untuk situs ini.","unsupported":"Browser ini tidak mendukung notifikasi push.","workerMissing":"Push memerlukan aplikasi terpasang. Muat ulang aplikasi produksi dan coba lagi.","deviceNote":"Notifikasi berlaku per perangkat. Mengakhiri sesi juga menghapus pendaftaran push-nya."}}`),models:{title:`Model`,subtitle:`Unduh, kelola, dan pantau model Ollama Anda`,installed:`Model Terinstal`,available:`Model Tersedia`,pull:`Unduh Model`,pulling:`Mengunduh...`,delete:`Hapus Model`,deleting:`Menghapus...`,size:`Ukuran`,modified:`Dimodifikasi`,family:`Keluarga`,parameters:`Parameter`,quantization:`Kuantisasi`,noModels:`Tidak ada model terinstal`,pullFirst:`Unduh model untuk memulai`,noModelsFound:`Tidak ada model ditemukan`},personas:{title:`Persona`,create:`Buat Persona`,edit:`Edit Persona`,delete:`Hapus Persona`,name:`Nama`,description:`Deskripsi`,systemPrompt:`Prompt Sistem`,model:`Model`,avatar:`Avatar`,background:`Latar`,noPersonas:`Tidak ada persona yang dibuat`,createFirst:`Buat persona pertama Anda untuk menyesuaikan pengalaman chat`},gallery:{title:`Galeri`,subtitle:`Galeri gambar yang dihasilkan AI Anda`,imageCount:`{{count}} gambar`,generate:`Buat Gambar`,generateDescription:`Buat gambar dengan AI`,generating:`Membuat...`,prompt:`Prompt`,promptPlaceholder:`Deskripsikan gambar yang ingin Anda buat...`,noImages:`Belum ada gambar yang dibuat`,download:`Unduh`,delete:`Hapus`,regenerate:`Regenerasi`,model:`Model`,size:`Ukuran`,quality:`Kualitas`,created:`Dibuat`},errors:{generic:`Terjadi kesalahan`,network:`Kesalahan jaringan. Silakan periksa koneksi Anda.`,unauthorized:`Anda tidak berwenang untuk melakukan tindakan ini.`,notFound:`Sumber daya yang diminta tidak ditemukan.`,serverError:`Kesalahan server. Silakan coba lagi nanti.`,validation:`Silakan periksa input Anda dan coba lagi.`},keyboard:{title:`Pintasan Keyboard`,toggleSidebar:`Toggle sidebar`,openSettings:`Buka pengaturan`,toggleDarkMode:`Toggle mode gelap`,showShortcuts:`Tampilkan pintasan keyboard`,closeModals:`Tutup modal`,groups:{navigation:`Navigasi`,general:`Umum`,chat:`Chat`,workspace:`Ruang kerja`},actions:{sendMessage:`Kirim pesan`,newLine:`Baris baru dalam pesan`,saveEdit:`Simpan pesan yang diedit`,cancelEdit:`Batalkan pengeditan`,saveFile:`Simpan berkas`,formatCode:`Format kode`},description:`Semua pintasan keyboard yang tersedia di Libre WebUI.`,newChat:`Obrolan baru`,newWork:`Sesi Work baru`,openPalette:`Buka palet perintah`},modelDownload:{success:`{{name}} telah diunduh`,failed:`Gagal mengunduh: {{error}}`,startFailed:`Gagal memulai pengunduhan`,cancelled:`Pengunduhan dibatalkan`},modelTools:{toasts:{fetchInfoFailed:`Gagal mengambil informasi`,pushSuccess:`Model berhasil diunggah`,createSuccess:`Model berhasil dibuat`,copySuccess:`Model berhasil disalin`,embeddingsSuccess:`Embedding berhasil dibuat (lihat konsol)`,failed:`Gagal`,unknownError:`Kesalahan tidak diketahui`}},modelManager:{title:`Model`,loading:`Memuat model...`,systemStatus:{online:`Ollama Online`,offline:`Ollama Offline`,models:`model`,models_plural:`model`,running:`berjalan`,vram:`VRAM`},sections:{pull:`Unduh Model Baru`,library:`Telusuri Pustaka`,huggingface:`HuggingFace Hub`,running:`Model Berjalan`,local:`Model Lokal`,advanced:`Tindakan Lanjutan`,catalog:`Katalog Model`},catalog:{searchPlaceholder:`Cari model berdasarkan nama atau penyedia...`,noModels:`Belum ada model yang tersedia.`,empty:`Tidak ada model yang cocok dengan pencarian Anda.`,providerOllama:`Ollama`,hidden:`Disembunyikan`,visibilityFailed:`Tidak dapat memperbarui visibilitas model.`,filterAll:`Semua model`,filterLocal:`Lokal`,filterProviders:`Penyedia`,filterHidden:`Disembunyikan`,enableAll:`Aktifkan yang tampil`,disableAll:`Nonaktifkan yang tampil`,rename:`Ubah nama dan gambar`,setPicture:`Atur gambar`,clearPicture:`Hapus gambar`,pictureInvalid:`Pilih berkas gambar.`,pictureTooLarge:`Gambar harus di bawah 192 KB.`,saving:`Menyimpan…`,hide:`Sembunyikan dari pengguna`,show:`Tampilkan ke pengguna`,star:`Beri bintang pada {{name}}`,unstar:`Hapus bintang dari {{name}}`},pull:{placeholder:`Masukkan nama model (mis., llama3.2:3b, deepseek-r1:14b)`,button:`Unduh`,cancel:`Batal`,popular:`Model populer:`,browseAll:`Telusuri semua model di ollama.com`,success:`Model {{name}} berhasil diunduh`,cancelled:`Unduhan model dibatalkan`,failed:`Gagal mengunduh model`,enterName:`Silakan masukkan nama model`,restricted:`Instalasi model dibatasi hanya untuk administrator pada instance ini.`},progress:{starting:`Menginisialisasi...`,pulling:`Mengunduh model...`,pullingLayer:`mengunduh`,verifying:`Memverifikasi integritas...`,verifyingDigest:`memverifikasi digest sha256`,writing:`Menulis manifest...`,cleaning:`Membersihkan...`},library:{available:`tersedia`,search:`Cari model...`,noResults:`Tidak ada model yang ditemukan sesuai kriteria Anda`,installed:`Terinstal`,more:`+{{count}} lagi`,refresh:`Segarkan Pustaka`},huggingface:{browseAll:`Jelajahi semua di HuggingFace`,checkingGguf:`Mencari file GGUF...`,noGgufAvailable:`Tidak ada file GGUF yang tersedia untuk pull langsung ke Ollama`,ggufFilesCount:`File GGUF ({{count}}) - Pull langsung ke Ollama`,noModelsFound:`Tidak ada model ditemukan`,noResults:`Tidak ada model ditemukan. Coba sesuaikan pencarian atau filter.`,browseAllLink:`Lihat semua`,search:`Cari model HuggingFace...`,by:`oleh`,gated:`Akses terbatas`,viewOnHF:`Lihat di HuggingFace`,sortDownloads:`Unduhan`,sortLikes:`Suka`,sortRecent:`Terbaru`,taskTextGeneration:`Pembuatan Teks`,taskTextToSpeech:`Teks ke Suara`,taskTextToImage:`Teks ke Gambar`,taskSpeechRecognition:`Pengenalan Suara`,tasks:{textGen:`Pembuatan Teks`,tts:`Teks ke Suara`,image:`Teks ke Gambar`,stt:`Pengenalan Suara`},sort:{downloads:`Paling Banyak Diunduh`,likes:`Paling Disukai`,recent:`Baru Diperbarui`}},local:{noModels:`Belum ada model terinstal`,pullToStart:`Unduh model di atas untuk memulai`,installed:`terinstal`,running:`Berjalan`,info:`Info`,copy:`Salin`,delete:`Hapus`,deleteConfirm:`Apakah Anda yakin ingin menghapus model "{{name}}"?`,deleteSuccess:`Model {{name}} berhasil dihapus`,deleteFailed:`Gagal menghapus model`},advanced:{createModel:`Buat Model`,fromModelfile:`Dari Modelfile`,copyModel:`Salin Model`,duplicateExisting:`Duplikat yang ada`,testEmbeddings:`Tes Embedding`,generateVectors:`Buat vektor`,healthCheck:`Pemeriksaan Kesehatan`,testConnection:`Tes koneksi`,healthy:`Ollama sehat!`},modals:{details:{title:`Detail Model`,info:`Informasi Model`,family:`Keluarga`,parameters:`Parameter`,quantization:`Kuantisasi`,format:`Format`,systemPrompt:`Prompt Sistem`,template:`Template`,license:`Lisensi`,modelfile:`Modelfile`,noDetails:`Tidak ada detail tersedia`},copy:{title:`Salin Model`,source:`Model Sumber`,selectModel:`Pilih model...`,newName:`Nama Model Baru`,placeholder:`mis., my-custom-model`,copying:`Menyalin...`,button:`Salin Model`,success:`Model disalin ke {{name}}`,failed:`Gagal menyalin model`,enterBoth:`Silakan masukkan nama sumber dan tujuan`},create:{title:`Buat Model Kustom`,name:`Nama Model`,namePlaceholder:`mis., my-assistant`,modelfile:`Modelfile`,modelfilePlaceholder:`FROM llama3.2
2
+ SYSTEM You are a helpful assistant.`,see:`Lihat`,docs:`Dokumentasi Modelfile`,docsLink:`untuk referensi sintaks`,creating:`Membuat...`,button:`Buat Model`,success:`Model {{name}} berhasil dibuat`,failed:`Gagal membuat model`,enterBoth:`Silakan masukkan nama model dan konten Modelfile`},embeddings:{title:`Tes Embedding`,model:`Model Embedding`,selectModel:`Pilih model...`,recommended:`Direkomendasikan: nomic-embed-text, mxbai-embed-large`,input:`Teks Input`,placeholder:`Masukkan teks untuk membuat embedding...`,generating:`Membuat...`,button:`Buat Embedding`,result:`Hasil ({{count}} dimensi)`,success:`Dibuat vektor embedding {{count}} dimensi`,failed:`Gagal membuat embedding`,enterBoth:`Silakan pilih model dan masukkan teks`}}},personaManager:{title:`Persona`,subtitle:`Buat dan kelola persona AI dengan kepribadian, memori, dan perilaku kustom`,loading:`Memuat persona...`,createButton:`Buat Persona`,importExport:`Impor/Ekspor`,stats:{title:`Persona Anda`,count:`{{count}} persona dibuat`,count_plural:`{{count}} persona dibuat`},empty:{title:`Belum ada persona`,description:`Buat persona pertama Anda untuk memulai interaksi AI yang dipersonalisasi`,button:`Buat Persona Pertama Anda`},deleteConfirm:`Apakah Anda yakin ingin menghapus "{{name}}"?`,deleteSuccess:`Persona "{{name}}" berhasil dihapus`,downloadSuccess:`Persona "{{name}}" berhasil diunduh`,failed:`Gagal {{action}} persona`},personaForm:{title:{create:`Buat Persona Baru`,edit:`Edit Persona`},subtitle:{create:`Buat persona AI baru dengan kepribadian kustom, sistem memori, dan kemampuan pembelajaran adaptif`,edit:`Sesuaikan persona AI Anda dengan memori lanjutan, pembelajaran adaptif, dan parameter cerdas`},loading:`Memuat form...`,saved:`Disimpan`,tabs:{basic:`Dasar`,parameters:`Parameter`,memory:`Memori & Pembelajaran`,advanced:`Lanjutan`,bindings:`Ikatan`},basic:{name:`Nama`,namePlaceholder:`Masukkan nama persona`,model:`Model`,selectModel:`Pilih model`,description:`Deskripsi`,descriptionPlaceholder:`Deskripsikan persona Anda...`,systemPrompt:`Prompt Sistem`,systemPromptPlaceholder:`Masukkan prompt sistem yang mendefinisikan perilaku persona Anda...`,systemPromptHint:`Prompt sistem mendefinisikan bagaimana persona Anda akan berperilaku dan merespons.`},parameters:{temperature:`Temperatur`,temperatureHint:`Mengontrol kreativitas vs konsistensi`,topP:`Top-P`,topPHint:`Mengontrol keragaman respons`,topK:`Top-K`,topKHint:`Membatasi kosakata ke token top-k`,contextWindow:`Jendela Konteks`,contextWindowHint:`Panjang maksimum riwayat percakapan`,maxTokens:`Token Maksimum`,maxTokensHint:`Panjang maksimum respons`,repeatPenalty:`Penalti Pengulangan`,repeatPenaltyHint:`Mengurangi respons berulang`},memory:{title:`Sistem Memori`,subtitle:`Persona mengingat percakapan dari waktu ke waktu`,enableHint:`Aktifkan sistem memori agar persona Anda mengingat percakapan dan membangun konteks dari waktu ke waktu.`,loading:`Memuat status memori...`,noData:`Belum ada data memori`,memories:`Memori`,mbUsed:`MB Digunakan`,lastBackup:`Backup Terakhir`,never:`Tidak Pernah`,maxMemories:`Memori Maksimum`,maxMemoriesHint:`Berapa banyak memori yang dapat disimpan persona ini`,retention:`Retensi Memori`,retentionHint:`Hari untuk menyimpan memori sebelum pembersihan`,autoCleanup:`Pembersihan otomatis memori lama`,wipeAll:`Hapus Semua Memori`,wipeCannot:`Ini tidak dapat dibatalkan`,wipeButton:`Hapus`,wiping:`Menghapus...`,wipeConfirm:`Apakah Anda yakin ingin menghapus semua memori? Ini tidak dapat dibatalkan.`,wipeSuccess:`Dihapus {{count}} memori`},learning:{title:`Pembelajaran Adaptif`,subtitle:`Persona berkembang berdasarkan interaksi`,enableHint:`Aktifkan pembelajaran adaptif agar persona Anda berkembang dan mempersonalisasi respons berdasarkan interaksi Anda.`,speed:`Kecepatan Pembelajaran`,slow:`Lambat`,slowDesc:`Perubahan bertahap`,balanced:`Seimbang`,balancedDesc:`Kecepatan moderat`,fast:`Cepat`,fastDesc:`Adaptasi cepat`,autoAdapt:`Otomatis beradaptasi dengan preferensi pengguna`,whatLearns:`Apa yang dipelajari persona:`,conversationTone:`Nada percakapan`,responseStyle:`Gaya respons`,userPreferences:`Preferensi pengguna`,topicInterests:`Minat topik`},advanced:{embeddingModel:`Model Embedding`,embeddingHint:`Pilih model yang digunakan untuk encoding memori dan pencarian semantik. Model embedding ditampilkan pertama, diikuti model lain yang tersedia.`,noModels:`Tidak ada model ditemukan`,embeddingModels:`Model Embedding`,otherModels:`Model Lain`,installHint:`Instal model embedding:`,recommended:`Direkomendasikan: nomic-embed-text, mxbai-embed-large, bge-m3, snowflake-arctic-embed`,aboutTitle:`Tentang Pengaturan Lanjutan`,aboutDescription:`Model embedding digunakan oleh sistem memori untuk memahami makna semantik dan menemukan memori yang relevan selama percakapan. Pilih model yang sesuai dengan kasus penggunaan dan sumber daya yang tersedia.`},actions:{cancel:`Batal`,save:`Simpan`,saving:`Menyimpan...`,saveClose:`Simpan & Tutup`,create:`Buat`},success:{created:`Persona dibuat`,updated:`Persona diperbarui`},error:{saveFailed:`Gagal menyimpan`},bindings:{toolServers:`Server alat`,toolServersHint:`Server yang boleh dipanggil persona ini. Jika dikosongkan, semua server yang memang bisa dijangkau pengguna akan ditawarkan.`,noToolServers:`Tidak ada server alat yang tersedia untuk Anda.`,builtinTools:`Alat bawaan`,builtinToolsHint:`Alat yang dijalankan server itu sendiri. Jika dikosongkan, semuanya ditawarkan.`,noBuiltinTools:`Tidak ada alat bawaan yang tersedia.`,builtin:{web_search:`Pencarian web`,search_documents:`Cari dokumen`,load_skill:`Muat keterampilan`},skills:`Keterampilan`,skillsHint:`Keterampilan yang boleh dimuat model selama persona ini aktif.`,noSkills:`Anda belum membuat keterampilan apa pun.`,collections:`Koleksi pengetahuan`,collectionsHint:`Koleksi dokumen yang bisa ditelusuri persona ini.`,noCollections:`Anda belum membuat koleksi apa pun.`,prompt:`Prompt`,promptHint:`Prompt yang mengawali setiap obrolan baru dengan persona ini.`,noPrompt:`Tanpa prompt`,version:`Revisi ikatan {{version}}`}},personaCard:{enhanced:`Ditingkatkan`,systemPrompt:`Prompt Sistem`,memories:`memori`,use:`Gunakan`,editTooltip:`Edit persona`,downloadTooltip:`Unduh persona`,backup:`Backup`,exportDNA:`Ekspor DNA`,wipeMemories:`Hapus Memori`,wipeConfirm:`Apakah Anda yakin ingin menghapus semua memori untuk persona ini? Tindakan ini tidak dapat dibatalkan.`,wipeSuccess:`Dihapus {{count}} memori`,backupSuccess:`Backup persona berhasil diunduh`,dnaSuccess:`DNA persona berhasil diekspor`,failed:`Gagal {{action}}`,shareTooltip:`Bagikan persona ini`},userManager:{title:`Manajemen Pengguna`,subtitle:`Kelola akun dan izin pengguna`,pageDescription:`Kelola akun pengguna, izin, dan kontrol akses untuk instance Libre WebUI Anda.`,loading:`Memuat pengguna...`,createUser:`Buat Pengguna`,search:`Cari pengguna...`,noUsers:`Tidak ada pengguna ditemukan`,noUsersMatching:`Tidak ada pengguna yang cocok dengan pencarian Anda`,columns:{user:`Pengguna`,email:`Email`,role:`Peran`,created:`Dibuat`,actions:`Tindakan`},roles:{admin:`Admin`,user:`Pengguna`},noEmail:`Tidak ada email`,deleteConfirm:`Apakah Anda yakin ingin menghapus pengguna "{{name}}"?`,deleteSuccess:`Pengguna berhasil dihapus`,deleteFailed:`Gagal menghapus pengguna`,cannotDeleteSelf:`Anda tidak dapat menghapus akun Anda sendiri`,approval:{title:`Persetujuan tertunda`,description:`Tinjau pendaftaran baru sebelum mengizinkan mereka masuk ke instance ini.`,registered:`Terdaftar`,activate:`Aktifkan akun`,reject:`Tolak pendaftaran`,approved:`{{name}} kini dapat masuk.`,failed:`Akun tidak dapat disetujui.`,notification:`{{count}} pendaftaran menunggu persetujuan Anda.`,notificationBadge:`{{count}} persetujuan pengguna tertunda`},form:{title:{create:`Buat Pengguna`,edit:`Edit Pengguna`},username:`Nama Pengguna`,usernamePlaceholder:`Masukkan nama pengguna`,email:`Email`,emailPlaceholder:`Masukkan email (opsional)`,password:`Kata Sandi`,passwordPlaceholder:`Masukkan kata sandi`,passwordHint:`Kosongkan untuk mempertahankan kata sandi saat ini`,role:`Peran`,creating:`Membuat...`,updating:`Memperbarui...`,createButton:`Buat Pengguna`,updateButton:`Perbarui Pengguna`,createSuccess:`Pengguna berhasil dibuat`,updateSuccess:`Pengguna berhasil diperbarui`,createFailed:`Gagal membuat pengguna`,updateFailed:`Gagal memperbarui pengguna`},workAccess:{title:`Akses Work`,description:`Izinkan semua pengguna aktif membuat dan menjalankan tugas Work di sandbox terisolasi. Administrator selalu punya akses; ruang kerja folder host tetap khusus administrator.`,saved:`Akses Work diperbarui`,saveFailed:`Tidak dapat memperbarui akses Work`},workPolicies:{title:`Kebijakan Work`,description:`Preset runtime bernama (image, batas, henti saat idle) untuk membuat tugas. Bidang kosong mewarisi bawaan global.`,add:`Tambah kebijakan`,name:`Nama`,image:`Image`,memory:`Memori`,cpu:`CPU`,pids:`Batas PID`,workspaceSize:`Ukuran ruang kerja`,idleMinutes:`Henti saat idle (menit)`,networkDefault:`Jaringan bawaan`,networkInherit:`Warisi bawaan`,networkOn:`Aktif`,networkOff:`Nonaktif`,save:`Simpan`,cancel:`Batal`,edit:`Edit kebijakan`,delete:`Hapus kebijakan`,deleteConfirm:`Hapus kebijakan ini? Tugas yang memakainya kembali ke bawaan global.`,empty:`Belum ada kebijakan. Tugas memakai bawaan runtime global.`,saved:`Kebijakan Work disimpan`,deleted:`Kebijakan Work dihapus`,failed:`Tidak dapat menyimpan kebijakan Work`,invalidNumber:`Batas PID dan henti saat idle harus berupa angka.`,guiEnabled:`Work Computer (GUI + peramban)`,takeoverEnabled:`Izinkan pengambilalihan layar`,computerPreset:`Work Computer`,computerPresetHint:`Work Computer memerlukan image GUI: bangun dari deploy/work-computer di repositori dan beri tag libre-work-computer:latest.`,approvalsRequired:`Wajibkan persetujuan untuk aksi yang menimbulkan efek samping`},modelAccess:{title:`Unduhan model`,description:`Izinkan semua pengguna aktif menarik model dari Ollama dan peramban Hugging Face. Administrator selalu dapat mengunduh model.`,saved:`Akses unduhan model diperbarui`,saveFailed:`Tidak dapat memperbarui akses unduhan model`},webSearchAccess:{title:`Pencarian web`,description:`Izinkan semua pengguna aktif memakai pencarian web di chat dan tugas Work. Administrator selalu dapat memakainya. Mesin dikonfigurasi di Pengaturan > Pencarian.`,saved:`Akses pencarian web diperbarui`,saveFailed:`Tidak dapat memperbarui akses pencarian web`},agentAccess:{title:`Agen`,description:`Tawarkan bagian Agen (Libre Claw) kepada administrator. CLI agen berjalan di host sebagai pengguna server, di luar sandbox Work.`,saved:`Akses agen diperbarui`,saveFailed:`Tidak dapat memperbarui akses agen`,lockedByEnv:`Dikunci oleh variabel lingkungan AGENT_CLI_MODELS_ENABLED.`},groups:{title:`Grup`,description:`Kelompokkan akun untuk mengelola akses bersama, dan periksa apa saja yang benar-benar dapat dilakukan sebuah akun.`,newGroup:`Grup baru`,nameLabel:`Nama`,nameRequired:`Beri nama grup ini.`,descriptionLabel:`Deskripsi (opsional)`,create:`Buat grup`,creating:`Membuat…`,created:`Grup dibuat.`,createFailed:`Grup tidak dapat dibuat.`,deleted:`Grup dihapus.`,deleteFailed:`Grup tidak dapat dihapus.`,deleteGroup:`Hapus grup`,loadFailed:`Grup tidak dapat dimuat.`,empty:`Belum ada grup.`,memberCount:`Anggota: {{count}}`,noMembers:`Belum ada anggota.`,addedAt:`Ditambahkan`,addMember:`Tambah anggota`,add:`Tambah`,selectUser:`Pilih pengguna…`,memberAdded:`Anggota ditambahkan.`,memberAddFailed:`Anggota tidak dapat ditambahkan.`,removeMember:`Hapus anggota`,memberRemoved:`Anggota dihapus.`,memberRemoveFailed:`Anggota tidak dapat dihapus.`,effectiveTitle:`Akses efektif`,effectiveDescription:`Pilih akun untuk melihat akses yang akhirnya dimilikinya dari peran, grup, dan izin yang diberikan.`,accessLookupFailed:`Akses efektif tidak dapat dimuat.`,roleLabel:`Peran`,statusLabel:`Status`,memberOf:`Grup`,featuresLabel:`Akses fitur`,grantsLabel:`Izin`,grantVia:`melalui`},audit:{title:`Log audit keamanan`,description:`Aktivitas masuk terbaru, pemeriksaan izin, dan perubahan administratif pada instans ini.`,actionFilter:`Aksi`,actionPlaceholder:`mis. auth.login`,resultFilter:`Hasil`,resultSuccess:`Berhasil`,resultDenied:`Ditolak`,resultFailure:`Gagal`,limitFilter:`Batas`,loadFailed:`Log audit tidak dapat dimuat.`,empty:`Belum ada peristiwa audit yang tercatat.`,actor:`Pelaku`,target:`Target`},tools:{title:`Akses alat`,description:`Izinkan semua orang memanggil server alat. Saat mati, hanya administrator yang bisa.`,saved:`Akses alat diperbarui`,saveFailed:`Akses alat tidak dapat diperbarui.`,lockedByEnv:`Terkunci oleh variabel lingkungan di server ini.`},voice:{title:`Akses suara`,description:`Mengatur siapa yang boleh menggunakan fitur suara. Administrator selalu memiliki akses.`,lockedByEnv:`Ditetapkan oleh variabel lingkungan`,saved:`Akses suara diperbarui`,saveFailed:`Gagal memperbarui akses suara`,features:{stt:`Ucapan ke teks`,tts:`Teks ke ucapan`,voiceMode:`Mode suara`,voiceCloning:`Kloning suara`}},mfaPolicy:{title:`Kebijakan dua langkah`,description:`Apakah akun wajib menyelesaikan langkah masuk kedua.`,requireAll:`Wajibkan dua langkah untuk semua pengguna`,requireAllHint:`Pengguna tanpa faktor kedua harus menyiapkannya saat masuk berikutnya.`,lockedByEnv:`Dikunci oleh MFA_REQUIRED_MODE.`,saved:`Kebijakan disimpan.`,saveFailed:`Kebijakan tidak dapat disimpan.`},mfaReset:`Setel ulang dua langkah`,mfaResetConfirm:`Hapus faktor kedua untuk {{name}}? Mereka tetap bisa masuk dengan kata sandi dan menyiapkannya lagi.`,mfaResetSuccess:`Dua langkah dihapus untuk {{name}}.`,mfaResetNothing:`{{name}} tidak memiliki dua langkah.`,mfaResetFailed:`Penyetelan ulang gagal.`,ollamaProvider:{title:`Penyedia Ollama`,description:`Saat dimatikan, aplikasi berhenti sepenuhnya memeriksa Ollama — tidak ada pemeriksaan kesehatan, tidak ada peringatan. Endpoint dapat mengarah ke gateway apa pun yang kompatibel dengan Ollama.`,saved:`Pengaturan penyedia Ollama disimpan`,saveFailed:`Tidak dapat menyimpan pengaturan penyedia Ollama`,baseUrlLabel:`URL endpoint Ollama`}},usageAnalytics:{eyebrow:`Administrasi`,title:`Penggunaan Penyedia`,description:`Pantau panggilan API keluar dan konsumsi model di seluruh plugin yang diaktifkan pada instance ini.`,days:`{{count}} hari`,refresh:`Segarkan penggunaan`,loadFailed:`Penggunaan penyedia tidak dapat dimuat.`,metrics:{calls:`Panggilan`,tokens:`Token`},cards:{calls:`Panggilan API`,callsDetail:`Di seluruh {{count}} pengguna aktif`,tokens:`Token yang dilaporkan`,tokensDetail:`Penggunaan dilaporkan pada {{count}} panggilan`,success:`Tingkat keberhasilan`,successDetail:`{{count}} panggilan gagal`,latency:`Latensi rata-rata`,latencyDetail:`Waktu provider end-to-end`},activity:{title:`Konsumsi dari waktu ke waktu`,callsDescription:`Permintaan keluar harian ke plugin yang diaktifkan`,tokensDescription:`Total token harian yang dilaporkan provider`,chartLabel:`Bagan {{metric}} provider harian`},models:{title:`Konsumsi model`,description:`Model dengan traffic terbanyak pada periode ini.`,model:`Model`,success:`Berhasil`,latency:`Latensi`},providers:{title:`Traffic plugin aktif`},capabilities:{title:`Bauran kapabilitas`,characters:`{{count}} karakter`,bytes:`{{count}} byte`,images:`{{count}} gambar`,jobs:`{{count}} pekerjaan video`,inputs:`{{count}} input`,reportedTokens:`{{count}} token yang dilaporkan`},empty:{title:`Belum ada panggilan provider`,description:`Panggilan akan muncul di sini setelah plugin aktif menangani permintaan chat, Work, embedding, gambar, ucapan, suara, atau video.`},privacyNote:`Penggunaan diukur di server pada batas plugin keluar. Libre WebUI menyimpan provider, model, waktu, status, dan penghitung yang dilaporkan—tidak pernah menyimpan prompt, respons, endpoint, kredensial, atau isi error provider. Total token hanya mencakup panggilan di mana provider mengembalikan metadata penggunaan.`,heatmap:{title:`Setahun aktivitas`,description:`Panggilan penyedia harian selama setahun terakhir, diwarnai berdasarkan model yang paling banyak digunakan setiap hari.`,calls:`panggilan`,noCalls:`Tidak ada panggilan`,other:`Model lainnya`,less:`Sedikit`,more:`Banyak`,yearTotal:`{{formatted}} panggilan dalam setahun terakhir`}},systemPage:{eyebrow:`Administrasi`,title:`Sistem`,description:`Pantau mesin dan runtime yang menampung instance Libre WebUI ini.`,updated:`Diperbarui {{date}}`,refresh:`Segarkan informasi sistem`,loadFailed:`Informasi sistem tidak dapat dimuat.`,cards:{uptime:`Waktu aktif host`,uptimeDetail:`Berjalan sejak {{date}}`,memory:`Memori terpakai`,memoryDetail:`{{used}} dari {{total}}`,freeSpace:`Ruang kosong`,freeSpaceDetail:`{{label}} · {{total}} total`,containers:`Container berjalan`,containersDetail:`{{total}} container dikenal oleh Docker`,dockerUnavailable:`Docker tidak tersedia`,unavailable:`Tidak tersedia`},host:{title:`Host & runtime`,description:`Detail sistem operasi, prosesor, dan proses Libre WebUI.`,container:`Runtime container`,native:`Runtime native`,hostname:`Nama host`,operatingSystem:`Sistem operasi`,processor:`Prosesor`,logicalCpus:`CPU logis`,loadAverage:`Rata-rata beban · 1 / 5 / 15 menit`,libreVersion:`Libre WebUI`,nodeVersion:`Node.js`,process:`Proses`,workingDirectory:`Direktori kerja`},memory:{title:`Memori`,description:`Memori sistem yang terlihat oleh runtime dan penggunaan proses aplikasi.`,usedOf:`{{used}} digunakan dari {{total}}`,free:`{{value}} tersedia`,processRss:`RSS Proses`,heapUsed:`Heap V8 digunakan`,heapTotal:`Total heap V8`,external:`Memori eksternal`},storage:{title:`Penyimpanan`,description:`Ruang yang tersedia untuk sistem berkas runtime dan data aplikasi persisten.`,used:`{{value}} digunakan`,free:`{{value}} tersedia`,empty:`Informasi sistem berkas tidak tersedia di runtime ini.`},docker:{title:`Docker`,description:`Status Docker Engine hanya-baca dan daftar kontainer yang dikurangi.`,connected:`Terhubung`,unavailable:`Tidak tersedia`,unavailableDetail:`Diagnostik Docker Engine tidak tersedia.`,socketStatus:`Soket lokal: {{status}}`,mounted:`terpasang`,notMounted:`tidak terpasang`,running:`Berjalan`,stopped:`Berhenti`,paused:`Dijeda`,total:`Total`,version:`Versi`,host:`Host`,architecture:`Arsitektur`,cpus:`CPU`,memory:`Memori`,container:`Container`,image:`Image`,state:`Status`,created:`Dibuat`,empty:`Docker terhubung dan tidak ada container yang terdaftar saat ini.`},network:{title:`Jaringan`,description:`Antarmuka, alamat, dan penghitung lalu lintas Linux yang terlihat oleh runtime.`,internal:`internal`,empty:`Tidak ada antarmuka jaringan yang terlihat oleh runtime aplikasi.`},securityNote:`Halaman ini dibatasi untuk administrator. Server hanya mengembalikan ringkasan operasional: tidak mengekspos variabel lingkungan, kredensial, label Docker, mount, perintah container, atau payload inspect. Saat Libre WebUI berjalan di dalam container, detail CPU dan memori tingkat host berasal dari Docker Engine ketika soket lokalnya tersedia; nilai lainnya menjelaskan runtime aplikasi.`,work:{title:`Work`,description:`Sandbox semua pengguna`,access:`Akses`,accessAdmins:`Hanya administrator`,accessAllUsers:`Semua pengguna`,runtimeAvailable:`Tersedia`,runtimeUnavailable:`Tidak tersedia`,activeRuntimes:`Runtime aktif`,pendingCleanups:`Pembersihan tertunda`,orphans:`Kontainer yatim`,owner:`Pemilik`,task:`Tugas`,state:`Status`,preview:`Pratinjau`,terminals:`Terminal`,updated:`Diperbarui`,stateRunning:`Berjalan`,stateStopped:`Berhenti`,stateStarting:`Memulai`,stateUnknown:`Tidak diketahui`,noTasks:`Belum ada tugas Work.`},recovery:{title:`Latihan pemulihan`,scheduleOn:`Berjalan otomatis setiap {{hours}} jam — setiap latihan mencadangkan, memulihkan ke salinan terisolasi, dan memverifikasi hasilnya.`,scheduleOff:`Tidak terjadwal — atur RECOVERY_DRILL_INTERVAL_HOURS untuk latihan otomatis.`,teamUnsupported:`Latihan mencakup profil solo (SQLite); profil tim menggunakan CLI cadangan terkoordinasi.`,runNow:`Jalankan latihan sekarang`,running:`Berjalan…`,passed:`Latihan pemulihan berhasil.`,failed:`Latihan pemulihan gagal.`,lastPassed:`Terakhir berhasil`,restoreTime:`Waktu pemulihan (RTO)`,drillSpacing:`Jarak latihan (RPO)`,archiveSize:`Ukuran arsip`,lastFailed:`Latihan terakhir gagal pada {{date}}`,originManual:`Manual`,originScheduled:`Terjadwal`,columns:{when:`Kapan`,origin:`Asal`,status:`Status`,restore:`Pemulihan`},status:{passed:`Berhasil`,failed:`Gagal`,running:`Berjalan`}}},chatHistory:{label:`Riwayat percakapan`,jumpToTurn:`Buka giliran {{index}} dari {{total}}`},chatMessage:{you:`Anda`,assistant:`Asisten`,system:`Sistem`,conversationSummary:`Ringkasan percakapan`,restoreCompacted:`Pulihkan pesan yang diringkas`,restoreFailed:`Pesan yang diringkas tidak dapat dipulihkan`,copy:`Salin`,copyMessage:`Salin pesan`,copied:`Disalin!`,regenerate:`Regenerasi`,regenerateResponse:`Regenerasi respons`,edit:`Edit`,editSystemMessage:`Edit pesan sistem`,saveChanges:`Simpan perubahan`,cancelEditing:`Batalkan pengeditan`,saveAndSubmit:`Simpan & kirim`,goodResponse:`Respons bagus`,badResponse:`Respons buruk`,delete:`Hapus`,deleteConfirm:`Hapus pesan ini?`,branch:`Cabang`,speaking:`Berbicara...`,speakMessage:`Ucapkan pesan`,stopSpeaking:`Berhenti berbicara`,showMore:`Tampilkan lebih banyak`,showLess:`Tampilkan lebih sedikit`,thinking:`Berpikir`,thoughtFor:`Berpikir selama {{duration}}`,hiddenLines:`{{count}} baris tersembunyi`,systemMessagePlaceholder:`Masukkan pesan sistem Anda...`,fullSizeImage:`Gambar ukuran penuh`,startConversation:`Mulai percakapan`,startConversationDescription:`Kirim pesan untuk mulai mengobrol dengan asisten AI Anda. Ajukan pertanyaan, minta bantuan dengan kode, atau lakukan percakapan alami.`,scrollToBottom:`Gulir ke bawah`,newMessages:`Pesan baru`,feedbackTags:{accuracy:`Akurasi`,style:`Gaya`,incomplete:`Tidak lengkap`,harmful:`Berbahaya`,formatting:`Format`},feedbackComment:`Tambahkan komentar…`},imageGallery:{title:`Galeri Gambar`,noImages:`Belum ada gambar`,noImagesHint:`Buat gambar pertama Anda menggunakan panel di sebelah kanan`,delete:`Hapus`,download:`Unduh`,deleteConfirm:`Apakah Anda yakin ingin menghapus gambar ini?`,deleteSuccess:`Gambar dihapus`,deleteFailed:`Gagal menghapus gambar`,downloadFailed:`Gagal mengunduh gambar`,loadMore:`Muat Lebih Banyak ({{current}} dari {{total}})`,loadFailed:`Gagal memuat galeri`},imageGeneration:{title:`Buat Gambar`,prompt:`Prompt`,promptPlaceholder:`Deskripsikan gambar yang ingin Anda buat...`,model:`Model`,selectModel:`Pilih model`,noModels:`Tidak ada model pembuatan gambar tersedia`,configurePlugin:`Konfigurasi plugin dengan dukungan pembuatan gambar`,size:`Ukuran`,quality:`Kualitas`,style:`Gaya`,generate:`Buat`,generating:`Membuat...`,success:`Gambar berhasil dibuat`,failed:`Gagal membuat gambar`,enterPrompt:`Silakan masukkan prompt`,promptTooLong:`Prompt melebihi panjang maksimum {{max}} karakter`},mediaGeneration:{title:`Hasilkan media`,description:`Buat video, suara, musik, atau ucapan dengan penyedia media yang diaktifkan.`,image:`Gambar`,video:`Video`,audio:`Audio`,sound:`Suara`,speech:`Ucapan`,model:`Model`,voice:`Suara atau ID suara`,cloneVoice:`Kloning suara referensi`,cloneVoiceDescription:`Buat ucapan ini berdasarkan rekaman referensi, bukan suara prasetel.`,referenceAudio:`Audio referensi`,referenceTranscript:`Transkrip referensi yang persis`,referenceTranscriptPlaceholder:`Masukkan persis apa yang diucapkan dalam rekaman referensi…`,referenceAudioTooLarge:`Ukuran audio referensi harus {{max}} atau kurang.`,cloneConsent:`Kloning suara hanya jika Anda memiliki izin dari penutur. Rekaman dikirim ke penyedia yang dipilih untuk pembuatan ini dan tidak disimpan oleh Libre WebUI.`,saveVoiceProfile:`Simpan sebagai suara yang dapat digunakan kembali`,saveVoiceProfileDescription:`Simpan rekaman referensi dan transkrip ini dengan aman. Libre WebUI mengirim keduanya ke penyedia yang dipilih untuk setiap batch Ucapan yang menggunakan suara ini.`,voiceProfileName:`Nama suara tersimpan`,voiceProfileNamePlaceholder:`Contoh: Suara saya`,voiceStorageConsent:`Saya menyatakan telah mendapat izin penutur untuk mengkloning dan menyimpan suara ini. Referensi tetap tersimpan hingga saya menghapusnya.`,resolution:`Resolusi`,aspectRatio:`Rasio aspek`,duration:`Durasi`,providerDefault:`Bawaan penyedia`,generateAudio:`Hasilkan audio dengan video jika didukung`,prompt:`Prompt`,text:`Teks untuk diucapkan`,videoPlaceholder:`Deskripsikan adegan, gerakan, kamera, dan pencahayaan...`,audioPlaceholder:`Masukkan teks yang ingin diucapkan oleh suara...`,soundPlaceholder:`Deskripsikan suara, musik, suasana, atau respons lisan yang Anda inginkan...`,generate:`Hasilkan`,generating:`Menghasilkan… ini bisa memakan waktu beberapa menit`,success:`Media dihasilkan dan disimpan ke Imagine`,successWithSavedVoice:`Media dibuat dan “{{name}}” kini tersedia di pengaturan Ucapan`,failed:`Gagal menghasilkan media`,loadFailed:`Gagal memuat penyedia media`,noModels:`Tidak ada model {{kind}} yang tersedia. Aktifkan penyedia yang kompatibel dan simpan kredensialnya terlebih dahulu.`,consentTtl:{label:`Durasi persetujuan`,never:`Sampai saya mencabutnya`,days30:`30 hari`,days90:`90 hari`,days365:`Satu tahun`}},mediaGallery:{itemCount:`{{count}} item`,empty:`Belum ada media yang dihasilkan`,emptyHint:`Hasilkan gambar, video, atau klip suara dan akan muncul di sini.`,filters:{all:`Semua`,image:`Gambar`,video:`Video`,audio:`Audio`}},errorBoundary:{title:`Terjadi kesalahan`,description:`Kami menemukan kesalahan tak terduga. Silakan coba segarkan halaman.`,tryAgain:`Segarkan Halaman`,goHome:`Ke Beranda`,errorDetails:`Detail Error (Pengembangan)`},documents:{title:`Dokumen`,upload:`Unggah Dokumen`,uploading:`Mengunggah...`,noDocuments:`Tidak ada dokumen yang diunggah`,uploadHint:`Unggah dokumen untuk digunakan dalam percakapan Anda`,delete:`Hapus`,deleteConfirm:`Apakah Anda yakin ingin menghapus dokumen ini?`,deleteSuccess:`Dokumen dihapus`,deleteFailed:`Gagal menghapus dokumen`,uploadSuccess:`Dokumen berhasil diunggah`,uploadFailed:`Gagal mengunggah dokumen`,types:`Didukung: PDF, TXT, MD, DOCX`,unsupportedFileType:`Jenis berkas ini tidak didukung`,fileSizeTooLarge:`Ukuran file harus kurang dari 10MB`,uploadSuccessWithName:`Dokumen "{{name}}" berhasil diunggah`,removeSuccess:`Dokumen berhasil dihapus`,removeFailed:`Gagal menghapus dokumen`,removeError:`Terjadi kesalahan saat menghapus dokumen`,clickToUpload:`Klik untuk mengunggah`,orDragAndDrop:`atau seret dan lepas`,fileTypesAndSize:`Berkas PDF, Office, Markdown, HTML, kode, CSV, gambar, dan audio hingga 10 MB`,uploadedDocuments:`Dokumen yang Diunggah`,removeDocument:`Hapus dokumen`,fullContextToggle:`Kirim dokumen lengkap`,fullContextEstimate:`≈ {{tokens}} token`,fullContextTooLarge:`Dokumen terlampir melebihi batas konteks penuh, jadi pengambilan digunakan sebagai gantinya`,fullDocument:`Dokumen lengkap`},ttsButton:{speak:`Ucapkan`,stop:`Berhenti`,speaking:`Berbicara...`,generateFailed:`Gagal membuat ucapan`,playbackFailed:`Pemutaran audio gagal`,stopSpeaking:`Berhenti berbicara`,preparingSpeech:`Menyiapkan ucapan...`,generatingSpeech:`Membuat ucapan...`,bufferingSpeech:`Memuat ucapan...`,enableAudio:`Aktifkan audio dan baca dengan suara`,enableAudioShort:`Aktifkan audio`,readAloud:`Baca dengan suara`},artifacts:{title:`Artefak`,code:`Kode`,preview:`Pratinjau`,copy:`Salin kode`,copied:`Disalin!`,download:`Unduh`,expand:`Perluas`,collapse:`Ciutkan`,openInNewTab:`Buka di tab baru`,invalidSvg:`Konten SVG tidak valid`,invalidJson:`Konten JSON tidak valid`,previewMode:`Mode pratinjau`,codeMode:`Mode kode`,copyContent:`Salin konten`,openInPanel:`Buka di panel`,created:`Dibuat`,closePanelEsc:`Tutup panel (Esc)`,copyButton:`Salin`,dragEdgeToResize:`Seret tepi untuk mengubah ukuran`,previewUnavailable:`Preview unavailable`,previewUnavailableDescription:`This artifact does not contain renderable preview content. Switch to code view to inspect the source.`,versionOf:`Versi {{current}} dari {{total}}`,previousVersion:`Versi sebelumnya`,nextVersion:`Versi berikutnya`},personaImportExport:{title:`Impor & Ekspor Persona`,description:`Ekspor persona Anda untuk dibagikan atau impor persona dari orang lain`,exportPersonas:`Ekspor Persona`,importPersonas:`Impor Persona`,noPersonasToExport:`Tidak ada persona untuk diekspor`,personasAvailable:`{{count}} persona tersedia`,personasAvailable_plural:`{{count}} persona tersedia`,exportAll:`Ekspor Semua`,uploadJsonFile:`Unggah File JSON`,pasteJsonLabel:`Tempel Data JSON`,pasteJsonPlaceholder:`Tempel data JSON persona di sini...`,importing:`Mengimpor...`,importButton:`Impor Persona`,expectedFormat:`Format JSON yang Diharapkan:`,exportSuccess:`Persona "{{name}}" berhasil diekspor`,exportFailed:`Gagal mengekspor persona`,exportAllSuccess:`Semua {{count}} persona berhasil diekspor`,exportAllFailed:`Gagal mengekspor persona`,pasteJsonData:`Silakan tempel data JSON persona`,importMultipleSuccess:`Berhasil mengimpor {{count}} persona`,importMultipleFailed:`Gagal mengimpor {{count}} persona`,importNoneFailed:`Gagal mengimpor persona apa pun`,importSuccess:`Persona berhasil diimpor`,importFailed:`Gagal mengimpor persona`},generationStats:{details:`Detail`,promptTokens:`Token prompt:`,generatedTokens:`Token dihasilkan:`,totalTokens:`Total token:`,speed:`Kecepatan:`,promptEval:`Evaluasi prompt:`,generation:`Generasi:`,modelLoad:`Muat model:`,totalTime:`Waktu total:`,generatedAt:`Dibuat pada:`},userMenu:{loggedOut:`Berhasil keluar`,pictureUpdated:`Foto profil diperbarui`,failedUpdateAvatar:`Gagal memperbarui avatar`,failedUpdatePicture:`Gagal memperbarui foto profil`,noEmail:`Tidak ada email`,changePicture:`Ubah gambar`,settings:`Pengaturan`,userManagement:`Manajemen pengguna`,signOut:`Keluar`,changeProfilePicture:`Ubah foto profil`},pluginManager:{title:`Manajer plugin`,upload:`Unggah`,addJson:`Tambah JSON`,browseHF:`Jelajahi HF Hub`,confirmDelete:`Apakah Anda yakin ingin menghapus plugin ini?`,uploading:`Mengunggah plugin...`,pasteJson:`Tempel JSON plugin di sini...`,installPlugin:`Instal plugin`,loading:`Memuat plugin...`,noPlugins:`Tidak ada plugin terpasang`,noPluginsDescription:`Unggah file plugin atau tambahkan plugin dari JSON untuk memulai.`,active:`Aktif`,id:`ID`,endpoint:`Endpoint`,activate:`Aktifkan`,deactivate:`Nonaktifkan`,activePlugin:`Plugin aktif`,activePluginDescription:`Semua permintaan chat akan dialihkan melalui plugin ini`,variables:{title:`Variabel`,save:`Simpan`,saving:`Menyimpan...`,saved:`Variabel disimpan`,saveFailed:`Gagal menyimpan variabel`,resetDefaults:`Reset ke Default`,reset:`Variabel direset`,resetFailed:`Gagal mereset variabel`,sensitiveSet:`Nilai telah diatur (masukkan nilai baru untuk mengubah)`,showValue:`Tampilkan nilai {{label}}`,hideValue:`Sembunyikan nilai {{label}}`,connection:`Koneksi`,advanced:`Parameter lanjutan`,inherited:`Gunakan bawaan penyedia`,inheritedValue:`Gunakan bawaan penyedia ({{value}})`,enabled:`Diaktifkan`,disabled:`Dinonaktifkan`,required:`Nilai diperlukan`,fullApiEndpoint:`URL endpoint API lengkap`,endpointHelp:`Masukkan URL permintaan lengkap, termasuk jalur operasinya (misalnya, /v1/chat/completions), bukan hanya URL dasar penyedia.`,invalidUrl:`Masukkan URL endpoint API lengkap yang valid, misalnya https://provider.example/v1/chat/completions`,insecureUrl:`Endpoint API harus menggunakan HTTP atau HTTPS.`,httpWarning:`HTTP tidak mengenkripsi kredensial atau lalu lintas. Gunakan hanya di jaringan tepercaya.`,invalidBaseUrl:`URL dasar tidak boleh berisi string kueri atau fragmen.`,invalidApiPath:`Harus diawali dengan / dan tidak boleh berisi URL, kueri, fragmen, atau segmen ..`,tooLong:`Nilai terlalu panjang`}},huggingface:{title:`Peramban model HuggingFace`,subtitle:`Jelajahi dan pilih model dari Hub`,searchPlaceholder:`Cari model...`,filters:`Filter`,task:`Tugas`,sortBy:`Urutkan`,noModels:`Tidak ada model ditemukan`,adjustSearch:`Coba sesuaikan pencarian atau filter Anda`,gated:`Terbatas`,selected:`Dipilih`,select:`Pilih`,refresh:`Segarkan`,modelsFound:`model ditemukan`},demoMode:{title:`Mode demo`,github:`GitHub`},libreClaw:{title:`Agen`,subtitle:`Agen lokal dijalankan, persetujuan, jadwal, memori, alat, dan penggunaan.`,dashboard:`Dasbor`,connection:{disconnectedTitle:`Daemon Libre Claw tidak terhubung`,disconnectedDescription:`Mulai secara lokal dengan <command>libre-claw start</command> atau atur <env>LIBRE_CLAW_BASE_URL</env> di lingkungan backend.`},status:{connected:`Terhubung`,disconnected:`Terputus`,activeRuns:`{{count}} aktif`,activeRuns_plural:`{{count}} aktif`},states:{queued:`Mengantri`,running:`Sedang berjalan`,blocked:`Diblokir`,done:`Selesai`,failed:`Gagal`,cancelled:`Dibatalkan`},startRun:{title:`Mulai eksekusi agen`,placeholder:`Minta Libre Claw untuk memeriksa repo, memperbaiki bug, menjalankan tinjauan, menjadwalkan laporan...`,chatRun:`Obrolan berjalan`,goalMode:`Modus sasaran`,providerOverride:`Penggantian penyedia`,modelOverride:`Penggantian model`,run:`Jalankan`},modelRoute:{title:`Rute Model`,providerPlaceholder:`penyedia`,modelPlaceholder:`model`,persistGlobal:`Bertahan pada Libre Claw konfigurasi global`,saveModel:`Simpan modelnya`,theme:`Tema Libre Claw`,saveTheme:`Simpan tema`},runs:{title:`Eksekusi`,empty:`Belum ada eksekusi Libre Claw.`},timeline:{title:`Linimasa eksekusi`,empty:`Pilih proses untuk memeriksa kejadiannya.`,streaming:`Streaming...`,assistantResponse:`Tanggapan asisten`,resultOk:`oke`,resultError:`kesalahan`,labels:{userMessage:`Pesan pengguna`,toolCall:`Panggilan alat`,toolResult:`Hasil alat`,approvalRequest:`Permintaan persetujuan`,approvalResponse:`Tanggapan persetujuan`,runStarted:`Eksekusi dimulai`,runFinished:`Eksekusi selesai`,usage:`Penggunaan`,error:`Kesalahan`}},approvals:{needed:`Diperlukan persetujuan`,allowOnce:`Izinkan sekali`,alwaysAllowTool:`Selalu izinkan alat`,deny:`Tolak`,toolApprovalRequested:`Persetujuan alat diminta`},automations:{title:`Otomatisasi`,namePlaceholder:`Nama`,schedulePlaceholder:`daily 09:00`,promptPlaceholder:`Perintah otomatisasi`,create:`Buat`,empty:`Tidak ada otomatisasi Libre Claw terjadwal.`,runNow:`Jalankan sekarang`,pause:`Jeda`,resume:`Lanjutkan`,routes:{report:`Laporkan`,telegram:`Telegram`},status:{active:`Aktif`,paused:`Dijeda`}},usageFallback:{title:`Penggunaan dan Penggantian`,usage:`Penggunaan`,fallbackRoute:`Rute Mundur`,noUsage:`Belum ada catatan penggunaan.`},metrics:{provider:`Penyedia`,model:`Model`,input:`Masukan`,output:`Keluaran`,cached:`Di-cache`,reasoning:`Penalaran`,cost:`Biaya`,tool:`Alat`,resolution:`Resolusi`,state:`Status`,stopReason:`Alasan berhenti`,tokens:`{{formatted}} tanda`,tokens_plural:`{{formatted}} token`},fallbacks:{tool:`alat`,unknown:`tidak diketahui`,resolved:`terselesaikan`,unknownError:`Kesalahan tidak diketahui`},toasts:{loadStatusFailed:`Tidak dapat memuat status Libre Claw`,enterTask:`Masukkan tugas untuk Libre Claw`,runStarted:`Eksekusi Libre Claw dimulai`,startRunFailed:`Tidak dapat memulai eksekusi Libre Claw`,runCancelled:`Eksekusi dibatalkan`,cancelRunFailed:`Tidak dapat membatalkan eksekusi`,approved:`Disetujui`,denied:`Ditolak`,resolvePermissionFailed:`Tidak dapat menyelesaikan izin`,providerModelRequired:`Penyedia dan model diperlukan`,modelUpdated:`Model Libre Claw diperbarui`,updateModelFailed:`Tidak dapat memperbarui model`,themeUpdated:`Tema Libre Claw diperbarui`,updateThemeFailed:`Tidak dapat memperbarui tema`,automationRequired:`Nama otomatisasi, jadwal, dan perintah diperlukan`,automationCreated:`Otomatisasi dibuat`,createAutomationFailed:`Tidak dapat membuat otomatisasi`,automationUpdated:`Otomatisasi diperbarui`,updateAutomationFailed:`Tidak dapat memperbarui otomatisasi`}},work:JSON.parse(`{"title":"Kerja","subtitle":"Ruang kerja model terisolasi","tasks":{"title":"Tugas Kerja","subtitle":"Ruang kerja lokal persisten","new":"Tugas baru","emptyTitle":"Belum ada tugas Kerja","empty":"Tugas Kerja Anda akan muncul di sini setelah Anda mengirim pesan pertama.","untitled":"Tugas tanpa judul","actions":"Tindakan tugas","delete":"Hapus tugas","deleteNamed":"Hapus {{title}}","deleteConfirm":"Hapus “{{title}}” dan ruang kerjanya secara permanen?","close":"Tutup tugas Kerja","open":"Buka tugas Kerja","rename":"Judul tugas","loading":"Memuat tugas…","notFound":"Tugas Kerja ini tidak tersedia","back":"Mulai tugas baru","status":"Status: {{status}}"},"landing":{"title":"Mulai tugas Kerja baru","description":"Berikan ruang kerja yang persisten dan terisolasi kepada model lokal atau model penyedia yang dikonfigurasi. Model dapat memeriksa file, menjalankan alat, dan melanjutkan pekerjaan saat Anda kembali.","isolated":"Terisolasi","isolatedBody":"Setiap tugas memiliki kontainer dan filenya sendiri.","durable":"Persisten","durableBody":"Kembali ke percakapan dan ruang kerjanya nanti.","controlled":"Terkendali","controlledBody":"Runtime dan file tugas tetap terisolasi dari host."},"composer":{"placeholder":"Jelaskan apa yang ingin Anda buat atau ubah…","model":"Model Kerja","noModels":"Tidak ada model yang kompatibel dengan Kerja","cancel":"Hentikan","send":"Jalankan","hint":"Setiap tugas menyimpan file dan riwayatnya sendiri. Tinjau keluaran model sebelum menggunakannya.","remoteTitle":"Penyedia jarak jauh","remoteHint":"Percakapan dan keluaran alat dikirim ke layanan yang dikonfigurasi. Satu proses otonom dapat melakukan beberapa panggilan penyedia dan mungkin dikenai biaya. File ruang kerja tetap lokal kecuali alat mengembalikan isinya.","remoteDismiss":"Tutup","remoteDismissLabel":"Tutup pemberitahuan penyedia jarak jauh","remoteDismissFailed":"Tidak dapat menyimpan preferensi penyedia jarak jauh.","noModelSelected":"Tidak ada model kompatibel Kerja yang dipilih.","mentionAgents":"Sebut agen"},"conversation":{"ready":"Ruang kerja siap","empty":"Lanjutkan tugas di bawah ini. Percakapan dan filenya tetap terhubung ke ruang kerja ini.","loadOlder":"Muat pesan lama","openFile":"Buka {{name}}","delegatedBy":"Didelegasikan oleh {{agent}}","reportFrom":"Laporan dari {{agent}}"},"status":{"preparing":"Menyiapkan ruang kerja terisolasi…","running":"Bekerja di ruang kerja lokal…"},"statusLabels":{"idle":"Siaga","thinking":"Berpikir","complete":"Selesai","needsInput":"Memerlukan input","error":"Error"},"live":{"connecting":"Menghubungkan ke pembaruan langsung…","reconnecting":"Menghubungkan kembali ke pembaruan langsung…","unavailable":"Pembaruan langsung tidak tersedia","newActivity":"Aktivitas baru","skillsLoaded":"Keterampilan ruang kerja · {{count}}","skillWorked":"Prosedur ini berhasil","skillFailed":"Prosedur ini gagal","skillTraceSaved":"dicatat","stats":{"title":"Ringkasan eksekusi","rounds":"Putaran","toolCalls":"Panggilan alat","screenshots":"Tangkapan layar","fences":"Penghentian","checksPassed":"Pemeriksaan lulus","checksPending":"Pemeriksaan tertunda","stallNudges":"Peringatan macet","ambiguityNudges":"Peringatan penataan ulang","stoppedBy":"Dihentikan oleh"}},"runtime":{"unavailable":"Runtime tidak tersedia","ready":"Runtime siap","readyOllama":"Docker siap","readyPlugin":"Docker + plugin siap","readyHybrid":"Docker + model siap","reason":"Docker dan penyedia model Ollama atau plugin yang tersedia diperlukan."},"workspace":{"label":"Tampilan ruang kerja","files":"File","activity":"Aktivitas","preview":"Pratinjau","resize":"Ubah ukuran percakapan dan ruang kerja","resizeHint":"Seret untuk mengubah ukuran. Gunakan tombol panah untuk kontrol presisi. Klik dua kali atau tekan Enter untuk mereset.","splitSize":"Percakapan {{conversation}}%, ruang kerja {{workspace}}%","terminal":"Terminal","git":"Git","screen":"Layar","agent":"Agen"},"files":{"discard":"Buang perubahan file yang belum disimpan?","leaveWithDraft":"Tinggalkan file ini? Editan yang belum disimpan akan tetap menjadi draf di browser.","up":"Folder induk","back":"Kembali ke file","empty":"Belum ada file di folder ini.","select":"Pilih file untuk diperiksa dan diedit.","editorLabel":"Editor file: {{path}}","format":"Format","formatted":"Kode telah diformat.","formatFailed":"Tidak dapat memformat file ini.","formatShortcut":"Format (Shift+Alt+F)","formatTooLarge":"Pemformatan dibatasi untuk file di bawah 100.000 karakter dan 4.000 baris.","formatUnsupported":"Pemformatan tidak tersedia untuk jenis file ini.","saveShortcut":"Simpan (⌘/Ctrl+S)","highlightPaused":"Penyorotan langsung dijeda untuk file besar agar pengeditan tetap responsif.","plainTextLarge":"Teks biasa · file besar","changes":"Perubahan","changesSince":"Apa yang berubah sejak giliran terakhir","diffLabel":"Perubahan sejak giliran terakhir: {{path}}","diffFolded":"{{count}} baris tidak berubah"},"activity":{"empty":"Perintah, operasi file, dan hasil alat akan muncul di sini.","toolActivity":"Aktivitas alat","details":"Detail","kinds":{"message":"Pesan","toolCall":"Panggilan alat","toolResult":"Hasil alat","error":"Error"}},"preview":{"command":"Perintah mulai opsional","start":"Mulai pratinjau","stop":"Hentikan pratinjau","open":"Buka","starting":"Memulai pratinjau…","frameTitle":"Pratinjau ruang kerja","failed":"Pratinjau tidak dapat dimulai. Periksa Aktivitas, lalu coba perintah lain.","empty":"Mulai aplikasi di dalam ruang kerja ini untuk memeriksanya di sini."},"mobile":{"surface":"Tampilan tugas","conversation":"Percakapan","workspace":"Ruang kerja"},"toasts":{"runFailed":"Tidak dapat memulai tugas Kerja.","updateFailed":"Tidak dapat memperbarui tugas ini.","renameFailed":"Tidak dapat mengganti nama tugas ini.","cancelled":"Proses Kerja dihentikan.","cancelFailed":"Tidak dapat menghentikan proses Kerja.","deleteFailed":"Tidak dapat menghapus tugas Kerja ini.","saveFailed":"Tidak dapat menyimpan file ini.","saved":"File disimpan.","previewFailed":"Tidak dapat memulai pratinjau.","previewStopFailed":"Tidak dapat menghentikan pratinjau."},"terminal":{"connecting":"Membuka shell di sandbox…","closed":"Sesi terminal berakhir.","failed":"Sesi terminal tidak dapat dimulai.","reconnect":"Sambungkan ulang","unavailable":"Terminal interaktif tidak tersedia pada penerapan ini.","blockedByRun":"Model sedang memakai kontainer ini. Terminal terbuka setelah giliran selesai.","taskRunning":"Giliran model berlangsung"},"policy":{"label":"Kebijakan runtime","default":"Bawaan (batas global)","setupHint":"Kebijakan runtime membuka Work Computer — desktop browser yang dapat ditonton untuk agen — dan batas per tugas.","setupLink":"Siapkan kebijakan Work"},"git":{"actionFailed":"Aksi Git gagal.","blockedByPreview":"Hentikan pratinjau sebelum mengubah status Git.","blockedByRun":"Aksi tulis Git terbuka setelah giliran model selesai.","branchCreated":"{{name}} dibuat.","branchSwitched":"Beralih ke {{name}}.","clean":"Pohon kerja bersih.","commit":"Commit perubahan yang di-stage","commitMessage":"Pesan commit","committed":"Commit dibuat.","detached":"HEAD terlepas","diff":"Pratinjau diff","diffFailed":"Tidak dapat memuat diff ini.","history":"Riwayat lokal","initialize":"Inisialisasi Git","initializeDescription":"Buat repositori lokal untuk status, diff, cabang, dan commit. Tidak ada kredensial jarak jauh yang terhubung.","initialized":"Repositori Git diinisialisasi.","loadFailed":"Tidak dapat memuat status Git.","localOnly":"Hanya Git lokal. Push, pull, dan pull request memerlukan perantara kredensial tepercaya terpisah.","newBranch":"Cabang lokal baru","noCommits":"Belum ada commit.","noDiff":"Belum ada diff teks. Berkas tak terlacak muncul setelah staging.","notInitialized":"Git belum diinisialisasi","selectChange":"Pilih berkas yang berubah untuk memeriksa diff-nya.","selectPath":"Pilih {{path}}","stageAll":"Stage semua","stageSelected":"Stage {{count}}","staged":"Perubahan di-stage.","switchBranch":"Ganti cabang lokal","changes":"Perubahan","createBranch":"Buat","filterFiles":"Filter berkas yang berubah","noFilterMatches":"Tidak ada berkas berubah yang cocok dengan filter ini.","allChanges":"Semua perubahan","diffTruncated":"Diff ini terpotong.","binaryFile":"Berkas biner, tidak ada diff teks."},"hostWorkspace":{"hint":"Biarkan kosong untuk ruang kerja terisolasi, atau arahkan tugas ke folder di mesin ini.","label":"Folder ruang kerja (opsional)","warning":"Tugas dapat membaca dan menulis folder ini langsung. Biarkan kosong untuk ruang kerja terisolasi."},"screen":{"starting":"Memulai Work Computer…","disconnected":"Layar terputus.","reconnect":"Sambungkan ulang","viewOnly":"Mengamati","takeOver":"Ambil kendali","handBack":"Saya selesai","youHaveControl":"Anda memegang kendali","otherHasControl":"{{name}} memegang kendali","agentWaiting":"Agen meminta Anda mengambil kendali","teach":"Ajarkan tugas","recording":"Merekam","teachSave":"Simpan","teachDiscard":"Buang","teachNamePlaceholder":"Beri nama tugas ini","teachSaved":"Disimpan sebagai keahlian \\"{{name}}\\"","watchingLearning":"Agen sedang menonton dan belajar","unmute":"Bunyikan","mute":"Bisukan"},"computerSetup":{"title":"Work Computer","description":"Beri agen Anda desktop sungguhan dengan browser — semuanya disiapkan otomatis.","building":"Membangun image desktop... pertama kali butuh beberapa menit.","enable":"Aktifkan","retry":"Coba lagi"},"agents":{"title":"Agen"},"persona":{"label":"Pekerjakan sebagai agen (opsional)","none":"Tanpa persona (tugas sekali jalan)","hint":"Tugas ini menjadi agen bernama: mempertahankan persona, tetap tersemat di bilah samping, dan melaporkan satu baris status setelah setiap eksekusi.","description":"Pilih persona untuk mengubah tugas ini menjadi agen permanen dengan identitasnya sendiri."},"agent":{"openScreen":"Buka tampilan layar penuh","personaLine":"Persona: {{name}}","screen":"Layar","routines":"Rutinitas","addRoutine":"Rutinitas","noRoutines":"Belum ada rutinitas. Rutinitas menjalankan instruksi sesuai jadwal, di dalam ruang kerja agen ini.","routineToggleFailed":"Tidak dapat memperbarui rutinitas.","routineSaveFailed":"Tidak dapat menyimpan rutinitas.","skills":"Keterampilan yang diajarkan","noSkills":"Belum ada yang diajarkan. Gunakan Teach di tab Layar untuk mendemonstrasikan prosedur sekali; prosedur itu menjadi keterampilan yang dapat diputar ulang.","skillToggleFailed":"Tidak dapat memperbarui keterampilan.","unread":"Aktivitas baru","approvals":"Tinjauan Otomatis","approvalsHint":"Saat aktif, perintah, penghapusan dan pemindahan berkas, serta aksi komputer dijeda sampai Anda menyetujuinya.","approvalsPolicyForced":"Kebijakan Work agen ini mewajibkan persetujuan untuk aksi yang menimbulkan efek samping.","approvalsToggleFailed":"Tidak dapat memperbarui persetujuan.","approvalRuleLine":"Selalu diizinkan","approvalRuleDelete":"Hapus aturan","approvalRuleDeleteFailed":"Tidak dapat menghapus aturan."},"approval":{"title":"Perlu persetujuan","description":"Agen ingin menjalankan {{tool}}. Aksi ini dapat mengubah data atau bertindak di luar percakapan.","allowOnce":"Izinkan sekali","allowAlways":"Izinkan selalu","deny":"Tolak","failed":"Tidak dapat mengirim keputusan."}}`),personaBackground:{label:`Gambar Latar Belakang`,uploadBackgroundImage:`Unggah gambar latar belakang`,dragAndDrop:`Seret dan lepas gambar atau klik untuk menjelajah`,chooseImage:`Pilih Gambar`,uploading:`Mengunggah...`,enterImageUrl:`Atau masukkan URL gambar`,supportedFormats:`Mendukung: JPG, PNG, GIF, WebP (maks 5MB). Gambar lanskap lebar berfungsi terbaik.`,customBackground:`Gambar latar belakang kustom`,clickToChange:`Klik untuk mengubah atau menghapus`,removed:`Latar belakang dihapus`,uploaded:`Latar belakang berhasil diunggah`,invalidFile:`Silakan pilih file gambar yang valid`,fileTooLarge:`Ukuran gambar latar belakang harus kurang dari 5MB`,readFailed:`Gagal membaca file gambar`,uploadFailed:`Gagal mengunggah gambar latar belakang`},modelSelector:{searchInstalled:`Cari model yang terinstal...`,searchOllama:`Cari di perpustakaan Ollama...`,searchHuggingFace:`Cari di HuggingFace...`,selectModel:`Pilih model`,personas:`Persona`,ollamaModels:`Model Ollama`,pluginModels:`Model Plugin`,actions:`Aksi`,installed:`Terinstal`,use:`Gunakan`,pull:`Unduh`,pullRestricted:`Instalasi model dibatasi hanya untuk administrator pada instance ini.`,adminOnlyPull:`Hanya admin`,legacyProvider:`penyedia tidak tercatat`,providerNotRecorded:`Penyedia tidak tercatat`,providerUnavailable:`penyedia tidak tersedia`,reselectProvider:`pilih ulang penyedia untuk menyematkan model ini`,unavailable:`tidak tersedia`,unavailableSelections:`Pilihan tidak tersedia`,agentModels:`Agen`},whatsNew:{title:`Yang baru`,releaseNotes:`Catatan rilis`,cta:`Oke, ayo mulai`,starAsk:`Suka Libre WebUI? Beri bintang di GitHub`},notes:{title:`Catatan`,new:`Catatan baru`,untitled:`Tanpa judul`,empty:`Belum ada catatan`,selectOrCreate:`Pilih catatan atau buat yang baru`,contentPlaceholder:`Tulis dalam Markdown…`,saved:`Tersimpan`,saveFailed:`Gagal menyimpan catatan`,createFailed:`Gagal membuat catatan`,deleteConfirm:`Hapus catatan ini?`,deleteFailed:`Gagal menghapus catatan`,tools:`Perkakas catatan`,revisions:`Riwayat`,attachments:`Lampiran`,share:`Bagikan`,assist:`Penyuntingan AI`,noRevisions:`Belum ada versi sebelumnya`,restore:`Pulihkan`,revisionRestored:`Versi dipulihkan`,revisionRestoreFailed:`Tidak dapat memulihkan versi ini`,addAttachment:`Tambah lampiran`,noAttachments:`Belum ada lampiran`,attachmentAdded:`Lampiran ditambahkan`,attachmentFailed:`Tidak dapat menambahkan lampiran`,attachmentDownloadFailed:`Tidak dapat mengunduh lampiran`,shareUsernamePlaceholder:`Nama pengguna`,permissionRead:`Dapat melihat`,permissionWrite:`Dapat menyunting`,shareAction:`Bagikan`,notShared:`Belum dibagikan kepada siapa pun`,revokeShare:`Cabut akses`,shareHint:`Catatan yang dibagikan muncul di daftar catatan orang lain. Akses dapat dicabut kapan saja.`,shareUserNotFound:`Tidak ada pengguna dengan nama itu`,shareAdded:`Dibagikan kepada {{username}}`,shareFailed:`Tidak dapat membagikan catatan`,assistPlaceholder:`Jelaskan perubahannya, mis. meringkas ikhtisar atau memperbaiki tata bahasa`,assistGenerate:`Usulkan suntingan`,assistNoModel:`Pilih model di Chat terlebih dahulu`,assistNoChanges:`Model tidak mengusulkan perubahan`,assistApply:`Terapkan`,assistDiscard:`Buang`,assistApplied:`Suntingan diterapkan`,assistRevisionHint:`Saat diterapkan, versi sebelumnya tetap ada di riwayat sehingga setiap suntingan AI dapat dibatalkan.`,assistFailed:`Tidak dapat membuat suntingan`,pin:`Sematkan catatan`,unpin:`Lepas sematan`,pinned:`Disematkan`,export:`Unduh sebagai Markdown`,sharedWithYou:`Dibagikan kepada Anda`},calendar:{title:`Kalender`,today:`Hari ini`,month:`Bulan`,week:`Minggu`,previous:`Sebelumnya`,next:`Berikutnya`,newEvent:`Acara baru`,editEvent:`Edit acara`,eventTitle:`Judul`,titlePlaceholder:`Judul acara`,date:`Tanggal`,start:`Mulai`,end:`Selesai`,allDay:`Sepanjang hari`,repeat:`Ulangi`,repeatNone:`Tidak berulang`,repeatDaily:`Harian`,repeatWeekly:`Mingguan`,repeatMonthly:`Bulanan`,repeatYearly:`Tahunan`,notes:`Catatan`,more:`+{{n}} lagi`,loadFailed:`Gagal memuat kalender`,saveFailed:`Gagal menyimpan acara`,deleteFailed:`Gagal menghapus acara`,day:`Hari`,calendarLabel:`Kalender`,personalCalendar:`Pribadi`,reminderLabel:`Pengingat`,reminderNone:`Tanpa pengingat`,reminderMinutes:`{{minutes}} menit sebelumnya`,reminderHour:`1 jam sebelumnya`,reminderDay:`1 hari sebelumnya`,sharedReadOnly:`Acara ini dibagikan kepada Anda hanya untuk dilihat.`,sharedBadge:`dibagikan`,shareCalendar:`Bagikan kalender`,newCalendarPlaceholder:`Kalender baru…`,calendarSaveFailed:`Kalender tidak dapat disimpan`,exportFailed:`Kalender tidak dapat diekspor`,importFailed:`Berkas tidak dapat diimpor`,importResult:`{{total}} acara diimpor`,importIcs:`Impor`,exportIcs:`Ekspor`},automations:{title:`Otomatisasi`,tab:{automations:`Otomatisasi`,runs:`Eksekusi`},newAutomation:`Otomatisasi baru`,editAutomation:`Edit otomatisasi`,empty:`Belum ada otomatisasi. Buat satu untuk menjalankan tugas sesuai jadwal.`,loadFailed:`Gagal memuat otomatisasi`,saveFailed:`Gagal menyimpan otomatisasi`,actionFailed:`Tindakan gagal`,runQueued:`Eksekusi dimulai`,status:{active:`Aktif`,paused:`Dijeda`},nextRun:`Eksekusi berikutnya {{when}}`,actions:`Tindakan`,pause:`Jeda`,resume:`Lanjutkan`,runNow:`Jalankan sekarang`,openChat:`Buka obrolan`,noRuns:`Belum ada eksekusi`,deletedAutomation:`Otomatisasi terhapus`,runHistory:`Riwayat eksekusi (30 hari terakhir)`,succeeded:`berhasil`,failed:`gagal`,form:{name:`Nama`,namePlaceholder:`Otomatisasi saya`,triggers:`Pemicu`,addTrigger:`Tambah pemicu`,instructions:`Instruksi`,instructionsPlaceholder:`Apa yang harus dijalankan pada jadwal ini?`,model:`Model`,modelAuto:`Otomatis`,notification:`Notifikasi`,notifyApp:`Aplikasi`,notifyOff:`Mati`,frequency:`Frekuensi`,time:`Waktu`,minute:`Menit`,fromHour:`Dari`,toHour:`Sampai`,weekday:`Hari`,dayOfMonth:`Tanggal`,month:`Bulan`,target:`Jalankan sebagai`,targetChat:`Sesi obrolan`,targetWork:`Tugas Work`,workPolicy:`Kebijakan Work`,workPolicyDefault:`Bawaan (batas global)`,taskBoundNote:`Rutinitas ini berjalan di dalam ruang kerja dan percakapan milik agen, dengan model dan runtime agen.`},kind:{once:`Sekali`,hourly:`Setiap jam`,daily:`Harian`,weekly:`Mingguan`,monthly:`Bulanan`,yearly:`Tahunan`},trigger:{once:`Sekali pada {{when}}`,hourly:`Setiap jam pada menit :{{minute}}`,daily:`Setiap hari pukul {{time}}`,weekly:`Setiap {{day}} pukul {{time}}`,monthly:`Setiap tanggal {{day}} pukul {{time}}`,yearly:`Setiap {{date}} pukul {{time}}`},finishedNotification:`{{n}} eksekusi otomatisasi selesai`,templatesTitle:`Templat`,templates:{morningBrief:{name:`Ringkasan pagi`,description:`Mulai hari dengan berita utama dan prioritas.`},newsDigest:{name:`Ringkasan berita AI`,description:`Rilis model, riset, dan pendanaan yang penting.`},weeklyReview:{name:`Tinjauan mingguan`,description:`Tutup pekan: capaian, pekerjaan tersisa, prioritas berikutnya.`},monthlyReport:{name:`Laporan bulanan`,description:`Kerangka laporan status setiap tanggal satu.`}},openTask:`Buka tugas`,webhook:{title:`Pemicu webhook`,enabledHint:`Sistem eksternal dapat menjalankan otomatisasi ini dengan rahasia tersebut. Rotasi membatalkan rahasia sebelumnya.`,disabledHint:`Izinkan sistem eksternal (CI, cron, otomasi rumah) menjalankan otomatisasi ini lewat POST dan sebuah rahasia.`,rotate:`Rotasi rahasia`,enable:`Aktifkan`,disable:`Nonaktifkan`,revealHint:`Ditampilkan sekali saja. Kirim sebagai token Bearer atau header X-Libre-Webhook-Secret.`,failed:`Webhook tidak dapat diperbarui.`}},home:{active:`aktif`,continue:`Lanjutkan`,start:`Mulai`,explore:`Jelajahi`},palette:{empty:`Tidak ada yang cocok.`,placeholder:`Cari chat, Work, aksi…`,toggleTheme:`Ganti tema`,actions:`Tindakan`,chats:`Chat`,search:`Cari`,settings:`Pengaturan`,work:`Kerja`,messages:`Pesan`,notes:`Catatan`,documents:`Dokumen`},tabs:{actions:`Aksi tab`,close:`Tutup tab`,closeAll:`Tutup semua tab`,closeOthers:`Tutup tab lain`,closeRight:`Tutup tab di kanan`,home:`Beranda`,label:`Tab terbuka`,new:`Tab baru`,newWork:`Work baru`,chat:`Chat`,newChat:`Chat Baru`,work:`Kerja`},tools:{arguments:`Argumen`,result:`Hasil`,callStatus:{awaiting_approval:`Menunggu persetujuan`,running:`Berjalan`,succeeded:`Selesai`,failed:`Gagal`,denied:`Ditolak`,cancelled:`Dibatalkan`},approval:{title:`Alat memerlukan persetujuan`,description:`Model ingin menjalankan {{tool}} di {{server}}. Panggilan ini dapat mengubah data di luar obrolan ini.`,builtinSource:`server ini`,allowOnce:`Izinkan sekali`,allowSession:`Izinkan di obrolan ini`,allowAlways:`Izinkan selalu`,deny:`Tolak`}},promptsPage:{title:`Prompt`,description:`Templat prompt yang bisa dipakai ulang dengan variabel bertipe. Ketik / di kolom obrolan untuk menyisipkan salah satunya.`,newPrompt:`Prompt baru`,editPrompt:`Edit prompt`,empty:`Belum ada prompt`,emptyHint:`Prompt adalah templat pesan yang tersimpan. Setelah Anda membuatnya, mengetik /slug di kolom obrolan akan menyisipkannya dan menanyakan variabel yang dideklarasikannya.`,loadFailed:`Prompt Anda tidak dapat dimuat.`,saved:`Prompt disimpan`,saveFailed:`Prompt tidak dapat disimpan.`,deleted:`Prompt dihapus`,deleteFailed:`Prompt tidak dapat dihapus.`,deleteTitle:`Hapus prompt`,deleteConfirm:`Hapus "{{title}}"? Riwayat versinya ikut hilang.`,exportFailed:`Prompt tidak dapat diekspor.`,imported:`Prompt diimpor`,importFailed:`Berkas itu tidak dapat diimpor.`,historyFailed:`Riwayat versi tidak dapat dimuat.`,rolledBack:`Prompt dikembalikan`,rollbackFailed:`Prompt tidak dapat dikembalikan.`,versionLabel:`v{{version}}`,updated:`Diperbarui {{when}}`,form:{slug:`Slug`,slugPlaceholder:`weekly-report`,slugHint:`Dipakai sebagai /slug di kolom obrolan.`,slugInvalid:`Hanya huruf kecil, angka, dan tanda hubung.`,title:`Judul`,titlePlaceholder:`Laporan mingguan`,description:`Deskripsi`,descriptionPlaceholder:`Untuk apa prompt ini`,content:`Isi`,contentPlaceholder:`Tulis promptnya. Apa pun yang ingin diisi belakangan, bungkus dengan kurung kurawal ganda.`,contentHint:`Placeholder adalah nama di dalam kurung kurawal ganda. Deklarasikan di bawah untuk memberinya label atau nilai bawaan.`,tags:`Tag`,tagsPlaceholder:`riset, menulis`,variables:`Variabel`,variablesHint:`Opsional. Deklarasikan placeholder di sini untuk memberinya label, nilai bawaan, atau sekumpulan pilihan.`,variableName:`Nama`,variableType:`Tipe`,variableLabel:`Label`,variableDefault:`Bawaan`,variableRequired:`Wajib`,variableOptions:`Pilihan`,variableOptionsPlaceholder:`Pilihan dipisahkan koma`,addVariable:`Tambah variabel`,removeVariable:`Hapus variabel`},variableTypes:{text:`Teks`,number:`Angka`,select:`Pilihan`,boolean:`Ya atau tidak`},history:{open:`Riwayat versi`,title:`Riwayat {{title}}`,subtitle:`Mengembalikan versi akan menyimpan revisi yang dipilih sebagai versi baru. Tidak ada yang ditimpa.`,empty:`Belum ada versi sebelumnya.`,current:`Saat ini`,rollback:`Kembalikan`,rollingBack:`Mengembalikan...`},templatesTitle:`Mulai dari templat`,templates:{reviewPr:{name:`Tinjauan pull request`,description:`Tinjauan kode terstruktur dengan tingkat ketelitian yang bisa diatur.`},summarize:{name:`Ringkas untuk audiens tertentu`,description:`Ringkasan poin-poin yang disesuaikan dengan pembaca.`},translate:{name:`Terjemahkan`,description:`Terjemahan yang menjaga nada dan format.`},explainCode:{name:`Jelaskan kode`,description:`Penjelasan bertahap plus kasus tepi dan risikonya.`}}},skillsPage:{title:`Keterampilan`,description:`Kumpulan instruksi bernama yang bisa dimuat model saat dibutuhkan selama bekerja.`,newSkill:`Keterampilan baru`,editSkill:`Edit keterampilan`,empty:`Belum ada keterampilan`,emptyHint:`Keterampilan adalah kumpulan instruksi yang hanya dimuat model saat diperlukan. Sebut $slug dalam pesan, atau biarkan model mengambilnya lewat alat load_skill.`,loadFailed:`Keterampilan Anda tidak dapat dimuat.`,saved:`Keterampilan disimpan`,saveFailed:`Keterampilan tidak dapat disimpan.`,toggleFailed:`Keterampilan tidak dapat diubah.`,deleted:`Keterampilan dihapus`,deleteFailed:`Keterampilan tidak dapat dihapus.`,deleteTitle:`Hapus keterampilan`,deleteConfirm:`Hapus "{{name}}"? Riwayat versinya ikut hilang.`,exportFailed:`Keterampilan tidak dapat diekspor.`,imported:`Keterampilan diimpor`,importFailed:`Berkas itu tidak dapat diimpor.`,historyFailed:`Riwayat versi tidak dapat dimuat.`,rolledBack:`Keterampilan dikembalikan`,rollbackFailed:`Keterampilan tidak dapat dikembalikan.`,versionLabel:`v{{version}}`,updated:`Diperbarui {{when}}`,form:{slug:`Slug`,slugPlaceholder:`code-review`,slugHint:`Dipakai sebagai $slug saat Anda menyebut keterampilannya.`,slugInvalid:`Hanya huruf kecil, angka, dan tanda hubung.`,name:`Nama`,namePlaceholder:`Tinjauan kode`,description:`Deskripsi`,descriptionPlaceholder:`Kapan keterampilan ini dipakai`,descriptionHint:`Inilah manifes yang dilihat model. Tulis agar model tahu kapan keterampilan ini relevan tanpa memuatnya.`,instructions:`Instruksi`,instructionsPlaceholder:`Instruksi Markdown yang dibaca model setelah memuat keterampilan ini.`,instructionsHint:`Hanya dimuat saat keterampilan dipakai, jadi panjangnya tidak menambah biaya sampai saat itu.`,enabled:`Aktif`,enabledHint:`Keterampilan yang dinonaktifkan tetap tersimpan, tetapi tidak pernah ditawarkan ke model.`},history:{open:`Riwayat versi`,title:`Riwayat {{name}}`},templatesTitle:`Mulai dari templat`,templates:{citeSources:{name:`Sebutkan sumber`,description:`Rujukan bernomor dengan URL, tanpa klaim tanpa sumber.`},releaseNotes:{name:`Gaya catatan rilis`,description:`Entri terkelompok untuk pengguna, tanpa id internal.`},meetingNotes:{name:`Format catatan rapat`,description:`Keputusan, tindak lanjut, dan pertanyaan terbuka dari transkrip.`}},importUrl:{button:`Dari URL`,title:`Impor keahlian dari URL`,hint:`Tempel tautan skills.sh atau GitHub, owner/repo/skill, atau tautan langsung ke berkas SKILL.md.`,placeholder:`https://skills.sh/owner/repo/skill atau owner/repo/skill`,overwrite:`Timpa keahlian saya jika slug sudah ada`},files:{title:`Berkas yang disertakan`,hint:`Dokumen referensi dan skrip yang dibaca model sesuai kebutuhan lewat read_skill_file.`,add:`Tambah berkas`,empty:`Belum ada berkas yang disertakan.`,pathPlaceholder:`docs/reference.md`,contentPlaceholder:`Isi berkas…`,loadFailed:`Gagal memuat berkas`,saveFailed:`Gagal menyimpan berkas`,deleteFailed:`Gagal menghapus berkas`},folderImport:{button:`Dari folder`,missingSkillMd:`Folder harus berisi berkas SKILL.md`,done:`Keahlian diimpor dengan {{count}} berkas yang disertakan`}},toolsPage:{title:`Alat`,description:`Server alat yang bisa dipanggil model, dan persetujuan yang sudah Anda berikan.`,approvalNotice:`Alat yang mengubah data di luar obrolan selalu meminta persetujuan, kecuali Anda sudah memberi alat itu persetujuan permanen atau persetujuan untuk obrolan ini.`,registerServer:`Daftarkan server`,registerHint:`Libre WebUI membaca server sekali dan menyematkan alat yang ditawarkannya. Segarkan server nanti untuk mengambil perubahan.`,editServer:`Edit server`,empty:`Tidak ada server alat`,emptyHintAdmin:`Daftarkan server OpenAPI atau MCP agar model punya sesuatu untuk dipanggil.`,emptyHintUser:`Administrator belum membagikan server alat apa pun kepada Anda.`,loadFailed:`Server alat tidak dapat dimuat.`,saved:`Server alat disimpan`,saveFailed:`Server alat tidak dapat disimpan.`,deleted:`Server alat dihapus`,deleteFailed:`Server alat tidak dapat dihapus.`,deleteTitle:`Hapus server alat`,deleteConfirm:`Hapus "{{name}}"? Semua orang kehilangan akses ke alat-alatnya.`,refresh:`Segarkan alat`,refreshed:`Alat dibaca ulang dari server`,refreshFailed:`Server tidak dapat dibaca.`,toolsLoadFailed:`Alat yang disematkan tidak dapat dimuat.`,overrideFailed:`Alat tidak dapat diubah.`,pinnedTools:`Alat yang disematkan`,noPinnedTools:`Server ini tidak menawarkan alat apa pun.`,sideEffect:`Efek samping`,sideEffectOverride:`Efek samping`,specRevision:`Revisi {{revision}}`,credential:`Kredensial pribadi`,credentialHint:`Disimpan terenkripsi dan hanya dipakai untuk panggilan Anda sendiri ke server ini.`,credentialPlaceholder:`Tempel token Anda`,credentialSet:`Kredensial tersimpan`,credentialMissing:`Perlu kredensial`,credentialSaved:`Kredensial disimpan`,credentialSaveFailed:`Kredensial tidak dapat disimpan.`,credentialRemove:`Hapus`,credentialRemoved:`Kredensial dihapus`,credentialRemoveFailed:`Kredensial tidak dapat dihapus.`,builtinSource:`Server ini`,kinds:{openapi:`OpenAPI`,mcp:`MCP`},authModes:{none:`Tanpa autentikasi`,bearer:`Token bearer`,header:`Header khusus`},accessModes:{"admins-only":`Hanya administrator`,"all-users":`Semua orang`,granted:`Hanya yang diberi akses`},form:{name:`Nama`,namePlaceholder:`API cuaca`,kind:`Jenis`,description:`Deskripsi`,descriptionPlaceholder:`Apa yang dilakukan server ini`,baseUrl:`URL dasar`,specUrl:`URL spesifikasi`,specUrlHint:`Opsional. Jika dikosongkan, URL dasar yang dipakai.`,authMode:`Autentikasi`,authHeader:`Nama header`,accessMode:`Siapa yang boleh memakainya`,timeoutMs:`Batas waktu (ms)`,maxResponseBytes:`Respons maksimum (byte)`,serverDefault:`Bawaan server`,enabled:`Aktif`,enabledHint:`Server yang dinonaktifkan tetap terdaftar, tetapi tidak pernah ditawarkan ke model.`},approvals:{title:`Persetujuan tetap`,description:`Alat yang Anda izinkan berjalan tanpa ditanya lagi. Cabut satu, dan lain kali ia akan bertanya lagi.`,empty:`Tidak ada persetujuan tetap.`,revoke:`Cabut`,revoked:`Persetujuan dicabut`,revokeFailed:`Persetujuan tidak dapat dicabut.`,scope:{once:`Sekali`,session:`Obrolan ini`,always:`Selalu`}},templatesTitle:`Mulai dari templat`,templates:{petstore:{name:`Demo Petstore`,description:`API demo publik untuk uji coba menyeluruh pertama yang aman.`},internalOpenApi:{name:`API internal`,description:`Titik awal untuk layanan OpenAPI Anda sendiri.`},mcpServer:{name:`Server MCP`,description:`Titik awal untuk server MCP melalui Streamable HTTP.`}}},composer:{promptMenu:{label:`Pustaka prompt`,empty:`Belum ada prompt — buat satu di Pengaturan → Prompt, atau mulai ketik slug.`},skillMenu:{label:`Keterampilan`,empty:`Belum ada keahlian — buat satu di Pengaturan → Keahlian.`},variables:{title:`Isi {{title}}`,insert:`Sisipkan`,cancel:`Batal`,required:`{{name}} wajib diisi`},toolsMenu:{enable:`Gunakan alat untuk pesan ini`,builtin:`Alat bawaan`,servers:`Server alat`,hint:`Panggilan dengan efek samping tetap meminta persetujuan sebelum dijalankan.`}},share:{title:`Bagikan “{{name}}”`,subtitle:`Beri akses kepada orang atau grup. Hanya Anda yang mengelola pembagian.`,kindUser:`Pengguna`,kindGroup:`Grup`,usernamePlaceholder:`Nama pengguna persis`,groupPlaceholder:`Nama grup persis`,permissionRead:`Bisa melihat`,permissionWrite:`Bisa mengedit`,action:`Bagikan`,empty:`Belum dibagikan kepada siapa pun.`,hint:`Masukkan nama pengguna atau grup yang persis. Penerima melihatnya di ruang kerja mereka; pencabutan langsung menghapus akses.`,revoke:`Cabut akses`,added:`Dibagikan dengan {{name}}`,failed:`Gagal membagikan`,userNotFound:`Tidak ada pengguna dengan nama itu`,groupNotFound:`Tidak ada grup dengan nama itu`},channels:{title:`Kanal`,browsePublic:`Jelajahi kanal publik`,newDm:`Pesan langsung baru`,newChannel:`Kanal baru`,empty:`Belum ada kanal. Buat satu atau jelajahi kanal publik.`,selectPrompt:`Pilih kanal untuk memulai`,pins:`Disematkan`,members:`Anggota`,settings:`Pengaturan kanal`,sendFailed:`Pesan tidak dapat dikirim`,uploadFailed:`Berkas tidak dapat diunggah`,memberAdded:`Anggota ditambahkan`,memberAddFailed:`Pengguna itu tidak dapat ditambahkan`,attach:`Lampirkan berkas`,askModel:`Tanyakan pesan ini ke model`,noModel:`Tanpa model`,composerPlaceholder:`Tulis pesan…`,thread:`Utas`,replyPlaceholder:`Balas…`,invitePlaceholder:`Pengguna yang diundang`,roleOwner:`pemilik`,removeMember:`Keluarkan dari kanal`,leave:`Tinggalkan kanal`,noPins:`Belum ada yang disematkan.`,noMessages:`Belum ada pesan — sapa dulu.`,create:`Buat`,createFailed:`Kanal tidak dapat dibuat`,nameLabel:`Nama`,typeLabel:`Jenis`,typePublic:`Publik — siapa pun bisa bergabung`,typePrivate:`Privat — hanya lewat undangan`,descriptionLabel:`Deskripsi`,openDm:`Buka percakapan`,dmFailed:`Percakapan tidak dapat dibuka`,dmHint:`Pesan langsung bersifat pribadi di antara kalian berdua.`,dmPlaceholder:`Nama pengguna persis`,noPublic:`Tidak ada kanal publik.`,joined:`Bergabung`,join:`Gabung`,save:`Simpan`,delete:`Hapus kanal`,modelAuthor:`Model`,unknownAuthor:`Seseorang`,edited:`diedit`,deletedMessage:`Pesan ini telah dihapus`,modelThinking:`Model sedang berpikir…`,react:`Tambah reaksi`,reply:`Balas di utas`,pin:`Sematkan pesan`,unpin:`Lepas sematan`,edit:`Edit pesan`,deleteMessage:`Hapus pesan`,replyCount:`{{total}} balasan`},notifications:{title:`Notifikasi`,empty:`Semua sudah dibaca.`,markAllRead:`Tandai semua sudah dibaca`,markRead:`Tandai sudah dibaca`},voiceMode:{title:`Mode suara`,open:`Mulai mode suara`,close:`Tutup mode suara`,starting:`Memulai…`,listening:`Mendengarkan…`,muted:`Mikrofon dibisukan`,transcribing:`Mentranskripsi…`,generating:`Berpikir…`,speaking:`Berbicara…`,mute:`Bisukan mikrofon`,unmute:`Bunyikan mikrofon`,finishTurn:`Selesai berbicara`,skipReply:`Lewati jawaban`,microphoneFailed:`Mikrofon tidak tersedia`,transcriptionFailed:`Transkripsi gagal`,replyTimeout:`Jawaban terlalu lama`,unsupported:`Mode suara tidak tersedia`,unsupportedHint:`Mode suara memerlukan mikrofon serta penyedia ucapan-ke-teks atau pengenalan suara peramban.`},imageEdit:{title:`Edit gambar`,prompt:`Jelaskan perubahannya`,promptPlaceholder:`Misalnya: ganti langit dengan matahari terbenam`,model:`Model`,apply:`Terapkan edit`,maskHint:`Cat area yang akan digambar ulang; biarkan kanvas tak tersentuh untuk mengedit seluruh gambar.`,brushSize:`Ukuran kuas`,clearMask:`Hapus mask`,referenceImages:`Gambar referensi (hingga {{total}})`,noModels:`Tidak ada model terkonfigurasi yang mendukung edit gambar.`,saved:`Gambar hasil edit disimpan ke galeri`,failed:`Edit gambar gagal`,loadFailed:`Gagal memuat gambar sumber`},costs:{title:`Biaya dan anggaran`,description:`Harga tarif diterapkan pada catatan penggunaan; anggaran mengawasi atau membatasi pengeluaran.`,loadFailed:`Gagal memuat data biaya`,saveFailed:`Gagal menyimpan`,exportFailed:`Gagal mengekspor`,exportCsv:`Ekspor CSV`,totalSpend:`Total pengeluaran`,meteredEvents:`Peristiwa berharga`,unmeteredEvents:`Peristiwa tanpa harga`,topModel:`Model teratas`,budgets:`Anggaran`,noBudgets:`Belum ada anggaran.`,budgetName:`Nama anggaran`,principalId:`ID pengguna atau grup`,addBudget:`Tambah anggaran`,deleteBudget:`Hapus anggaran`,budgetSaved:`Anggaran disimpan`,scope:{instance:`Seluruh instans`,user:`Pengguna`,group:`Grup`},period:{daily:`Harian`,weekly:`Mingguan`,monthly:`Bulanan`},mode:{observe:`Amati`,soft:`Peringatkan`,hard:`Peringatkan dan blokir`},tariffs:`Tarif`,noTariffs:`Belum ada tarif — biaya tetap tanpa harga sampai Anda menambahkan harga.`,plugin:`Plugin`,model:`Model`,modelOptional:`Model (opsional)`,allModels:`Semua model`,inputPerMillion:`Input $/M token`,outputPerMillion:`Output $/M token`,unitPrice:`Harga satuan`,effectiveFrom:`Berlaku sejak`,addTariff:`Tambah tarif`,deleteTariff:`Hapus tarif`,tariffSaved:`Tarif disimpan`},evaluations:{title:`Evaluasi`,description:`Duel arena buta, papan peringkat Elo, set evaluasi yang dapat digunakan ulang, dan dataset umpan balik Anda.`,loadFailed:`Gagal memuat evaluasi`,matchFailed:`Duel arena gagal`,voteRecorded:`Suara tercatat`,voteFailed:`Gagal mencatat suara`,saveFailed:`Gagal menyimpan`,exportFailed:`Gagal mengekspor`,setSaved:`Set evaluasi disimpan`,runStarted:`Evaluasi dimulai`,pickModel:`Pilih model`,tabs:{arena:`Arena`,leaderboard:`Papan peringkat`,sets:`Set evaluasi`,feedback:`Umpan balik`},arenaModelA:`Model A`,arenaModelB:`Model B`,arenaPrompt:`Ajukan pertanyaan yang sama ke kedua model…`,startMatch:`Mulai duel`,arenaHint:`Identitas model disembunyikan sampai Anda memilih.`,candidate:`Jawaban {{letter}}`,voteFirst:`Pertama lebih baik`,voteSecond:`Kedua lebih baik`,voteTie:`Seri`,voteBothBad:`Keduanya buruk`,model:`Model`,rating:`Skor`,record:`Rekor`,votes:`Suara`,noVotes:`Belum ada suara — mulai duel untuk membangun papan peringkat.`,newSet:`Set evaluasi baru`,setName:`Nama set`,setPrompts:`Satu prompt per baris…`,saveSet:`Simpan set`,yourSets:`Set Anda`,noSets:`Belum ada set evaluasi.`,itemCount:`{{total}} prompt`,run:`Jalankan`,deleteSet:`Hapus set`,cancelRun:`Batalkan eksekusi`,exportRun:`Ekspor eksekusi`,status:{queued:`Antre`,running:`Berjalan`,completed:`Selesai`,failed:`Gagal`,cancelled:`Dibatalkan`},noFeedback:`Belum ada umpan balik — nilai jawaban untuk membangun dataset Anda.`},passwordStrength:{levels:{weak:`Lemah`,fair:`Cukup`,good:`Baik`,strong:`Kuat`},checks:{minLength:`Minimal 12 karakter`,hasCase:`Huruf besar dan kecil`,hasNumber:`Minimal satu angka`,tooLong:`Maksimal 72 byte`}},connectModels:{adminOnly:`Minta administrator Anda untuk menghubungkan penyedia model.`,skip:`Lewati dulu — saya akan menghubungkan model nanti`,ollama:{status:{checking:`Memeriksa ketersediaan…`,healthy:`Berjalan dan siap untuk model lokal`,offline:`Tidak terdeteksi di komputer ini`,disabled:`Dinonaktifkan — tidak ada pemeriksaan yang akan dijalankan`},recheck:`Periksa lagi`,enable:`Aktifkan`,disable:`Berhenti memeriksa Ollama`,enabledToast:`Penyedia Ollama diaktifkan`,disabledToast:`Pemeriksaan Ollama dinonaktifkan — Anda dapat mengaktifkannya kembali di Pengaturan`,settingsFailed:`Tidak dapat memperbarui pengaturan Ollama`,offlineHint:`Instal Ollama dari ollama.com dan itu akan terdeteksi secara otomatis — atau gunakan salah satu opsi di bawah ini. Jika Anda tidak berencana menggunakan Ollama, Anda dapat mematikan pemeriksaannya.`,healthyHint:`Ollama terhubung. Unduh model dari halaman Model dan Anda siap mengobrol.`},local:{title:`Server lokal`,subtitle:`llama.cpp, vLLM, llama-swap, LM Studio, mlx-lm`,keyPlaceholder:`API key (opsional)`,test:`Uji koneksi`,testing:`Menguji…`,reachable:`Terhubung — ditemukan {{count}} model`,unreachable:`Tidak ada API model yang merespons di alamat tersebut`,noModels:`Endpoint merespons tetapi tidak mencantumkan model apa pun. Muat model di server Anda lalu uji lagi.`,enable:`Aktifkan penyedia`,enabling:`Mengaktifkan…`,enabled:`{{name}} terhubung — modelnya kini tersedia`,enableFailed:`Tidak dapat mengaktifkan penyedia`},cloud:{title:`API Cloud`,subtitle:`OpenAI, Anthropic, Groq, OpenRouter, dan lainnya`,keyPlaceholder:`Tempel API key {{name}} Anda`,connect:`Hubungkan`,connecting:`Menghubungkan…`,connected:`{{name}} terhubung — modelnya kini tersedia`,saveFailed:`Tidak dapat menyimpan API key`}}};export{e as default};