libre-webui 0.37.2 → 0.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -65
- package/backend/dist/db.js +1 -1
- package/backend/dist/index.d.ts.map +1 -1
- package/backend/dist/index.js +13 -36
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/main.js +0 -12
- package/backend/dist/main.js.map +1 -1
- package/backend/dist/middleware/cors.d.ts.map +1 -1
- package/backend/dist/middleware/cors.js +5 -0
- package/backend/dist/middleware/cors.js.map +1 -1
- package/backend/dist/persistence/postgresExtensionRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/postgresExtensionRepositories.js +2 -4
- package/backend/dist/persistence/postgresExtensionRepositories.js.map +1 -1
- package/backend/dist/persistence/postgresMigrationRegistry.d.ts.map +1 -1
- package/backend/dist/persistence/postgresMigrationRegistry.js +2 -0
- package/backend/dist/persistence/postgresMigrationRegistry.js.map +1 -1
- package/backend/dist/persistence/postgresWorkRunThinkMigration.d.ts +9 -0
- package/backend/dist/persistence/postgresWorkRunThinkMigration.d.ts.map +1 -0
- package/backend/dist/persistence/postgresWorkRunThinkMigration.js +39 -0
- package/backend/dist/persistence/postgresWorkRunThinkMigration.js.map +1 -0
- package/backend/dist/persistence/sqliteExtensionRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteExtensionRepositories.js +2 -4
- package/backend/dist/persistence/sqliteExtensionRepositories.js.map +1 -1
- package/backend/dist/persistence/sqliteMigrations.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteMigrations.js +20 -0
- package/backend/dist/persistence/sqliteMigrations.js.map +1 -1
- package/backend/dist/persistence/sqliteToPostgresMigration.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteToPostgresMigration.js +1 -0
- package/backend/dist/persistence/sqliteToPostgresMigration.js.map +1 -1
- package/backend/dist/platform/workPersistence/postgresWorkPersistence.d.ts.map +1 -1
- package/backend/dist/platform/workPersistence/postgresWorkPersistence.js +3 -2
- package/backend/dist/platform/workPersistence/postgresWorkPersistence.js.map +1 -1
- package/backend/dist/platform/workPersistence/sqliteWorkPersistence.d.ts.map +1 -1
- package/backend/dist/platform/workPersistence/sqliteWorkPersistence.js +3 -3
- package/backend/dist/platform/workPersistence/sqliteWorkPersistence.js.map +1 -1
- package/backend/dist/platform/workPersistence/types.d.ts +5 -0
- package/backend/dist/platform/workPersistence/types.d.ts.map +1 -1
- package/backend/dist/platform/workPersistence/types.js.map +1 -1
- package/backend/dist/routes/agentCli.d.ts.map +1 -1
- package/backend/dist/routes/agentCli.js +8 -3
- package/backend/dist/routes/agentCli.js.map +1 -1
- package/backend/dist/routes/{cordis.d.ts → strands.d.ts} +1 -1
- package/backend/dist/routes/strands.d.ts.map +1 -0
- package/backend/dist/routes/strands.js +300 -0
- package/backend/dist/routes/strands.js.map +1 -0
- package/backend/dist/routes/work.d.ts.map +1 -1
- package/backend/dist/routes/work.js +26 -23
- package/backend/dist/routes/work.js.map +1 -1
- package/backend/dist/services/agentAccessService.d.ts +0 -5
- package/backend/dist/services/agentAccessService.d.ts.map +1 -1
- package/backend/dist/services/agentAccessService.js +7 -35
- package/backend/dist/services/agentAccessService.js.map +1 -1
- package/backend/dist/services/agentCliService.d.ts +16 -23
- package/backend/dist/services/agentCliService.d.ts.map +1 -1
- package/backend/dist/services/agentCliService.js +85 -112
- package/backend/dist/services/agentCliService.js.map +1 -1
- package/backend/dist/services/authService.d.ts +3 -3
- package/backend/dist/services/authService.d.ts.map +1 -1
- package/backend/dist/services/authService.js +3 -4
- package/backend/dist/services/authService.js.map +1 -1
- package/backend/dist/services/authorizationService.d.ts +1 -1
- package/backend/dist/services/authorizationService.d.ts.map +1 -1
- package/backend/dist/services/authorizationService.js +17 -8
- package/backend/dist/services/authorizationService.js.map +1 -1
- package/backend/dist/services/followUpService.d.ts +4 -1
- package/backend/dist/services/followUpService.d.ts.map +1 -1
- package/backend/dist/services/followUpService.js +23 -2
- package/backend/dist/services/followUpService.js.map +1 -1
- package/backend/dist/services/pluginService.d.ts.map +1 -1
- package/backend/dist/services/pluginService.js +10 -6
- package/backend/dist/services/pluginService.js.map +1 -1
- package/backend/dist/services/pluginUsageService.d.ts +0 -34
- package/backend/dist/services/pluginUsageService.d.ts.map +1 -1
- package/backend/dist/services/pluginUsageService.js +0 -62
- package/backend/dist/services/pluginUsageService.js.map +1 -1
- package/backend/dist/services/strandsAccessService.d.ts +26 -0
- package/backend/dist/services/strandsAccessService.d.ts.map +1 -0
- package/backend/dist/services/strandsAccessService.js +95 -0
- package/backend/dist/services/strandsAccessService.js.map +1 -0
- package/backend/dist/services/thinkingSummaryService.d.ts +2 -3
- package/backend/dist/services/thinkingSummaryService.d.ts.map +1 -1
- package/backend/dist/services/thinkingSummaryService.js +13 -27
- package/backend/dist/services/thinkingSummaryService.js.map +1 -1
- package/backend/dist/services/titleGenerationService.d.ts +7 -18
- package/backend/dist/services/titleGenerationService.d.ts.map +1 -1
- package/backend/dist/services/titleGenerationService.js +15 -36
- package/backend/dist/services/titleGenerationService.js.map +1 -1
- package/backend/dist/services/workAgentService.d.ts +1 -1
- package/backend/dist/services/workAgentService.d.ts.map +1 -1
- package/backend/dist/services/workAgentService.js +17 -60
- package/backend/dist/services/workAgentService.js.map +1 -1
- package/backend/dist/services/workModelProviderService.d.ts +1 -4
- package/backend/dist/services/workModelProviderService.d.ts.map +1 -1
- package/backend/dist/services/workModelProviderService.js +60 -50
- package/backend/dist/services/workModelProviderService.js.map +1 -1
- package/backend/dist/services/workTaskService.d.ts +3 -2
- package/backend/dist/services/workTaskService.d.ts.map +1 -1
- package/backend/dist/services/workTaskService.js +11 -7
- package/backend/dist/services/workTaskService.js.map +1 -1
- package/backend/dist/strands/catalog.d.ts +57 -0
- package/backend/dist/strands/catalog.d.ts.map +1 -0
- package/backend/dist/strands/catalog.js +241 -0
- package/backend/dist/strands/catalog.js.map +1 -0
- package/backend/dist/strands/engine.d.ts +131 -0
- package/backend/dist/strands/engine.d.ts.map +1 -0
- package/backend/dist/strands/engine.js +477 -0
- package/backend/dist/strands/engine.js.map +1 -0
- package/backend/dist/strands/harness.d.ts +14 -0
- package/backend/dist/strands/harness.d.ts.map +1 -0
- package/backend/dist/strands/harness.js +41 -0
- package/backend/dist/strands/harness.js.map +1 -0
- package/backend/dist/strands/model.d.ts +24 -0
- package/backend/dist/strands/model.d.ts.map +1 -0
- package/backend/dist/strands/model.js +381 -0
- package/backend/dist/strands/model.js.map +1 -0
- package/backend/dist/strands/runtime.d.ts +4 -0
- package/backend/dist/strands/runtime.d.ts.map +1 -0
- package/backend/dist/{cordis/work-model.js → strands/runtime.js} +16 -12
- package/backend/dist/strands/runtime.js.map +1 -0
- package/backend/dist/strands/sandbox.d.ts +24 -0
- package/backend/dist/strands/sandbox.d.ts.map +1 -0
- package/backend/dist/strands/sandbox.js +156 -0
- package/backend/dist/strands/sandbox.js.map +1 -0
- package/backend/dist/strands/work-driver.d.ts +11 -0
- package/backend/dist/strands/work-driver.d.ts.map +1 -0
- package/backend/dist/strands/work-driver.js +443 -0
- package/backend/dist/strands/work-driver.js.map +1 -0
- package/backend/dist/strands/work-model.d.ts +7 -0
- package/backend/dist/strands/work-model.d.ts.map +1 -0
- package/backend/dist/strands/work-model.js +42 -0
- package/backend/dist/strands/work-model.js.map +1 -0
- package/backend/dist/types/work.d.ts +7 -11
- package/backend/dist/types/work.d.ts.map +1 -1
- package/backend/dist/types/work.js.map +1 -1
- package/backend/dist/utils/bedrockMantle.d.ts +46 -0
- package/backend/dist/utils/bedrockMantle.d.ts.map +1 -0
- package/backend/dist/utils/bedrockMantle.js +206 -0
- package/backend/dist/utils/bedrockMantle.js.map +1 -0
- package/backend/dist/utils/corsOriginPolicy.d.ts +10 -0
- package/backend/dist/utils/corsOriginPolicy.d.ts.map +1 -0
- package/backend/dist/utils/corsOriginPolicy.js +70 -0
- package/backend/dist/utils/corsOriginPolicy.js.map +1 -0
- package/backend/dist/utils/pluginChatAdapter.d.ts +36 -0
- package/backend/dist/utils/pluginChatAdapter.d.ts.map +1 -1
- package/backend/dist/utils/pluginChatAdapter.js +122 -47
- package/backend/dist/utils/pluginChatAdapter.js.map +1 -1
- package/backend/dist/utils/pluginDefinitionTrust.d.ts.map +1 -1
- package/backend/dist/utils/pluginDefinitionTrust.js +3 -2
- package/backend/dist/utils/pluginDefinitionTrust.js.map +1 -1
- package/backend/dist/utils/pluginValidation.d.ts +1 -1
- package/backend/dist/utils/pluginValidation.d.ts.map +1 -1
- package/backend/dist/utils/pluginValidation.js +11 -0
- package/backend/dist/utils/pluginValidation.js.map +1 -1
- package/backend/package.json +6 -36
- package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
- package/frontend/dist/artifact-runtime/babel.js +170 -170
- package/frontend/dist/artifact-runtime/framer-motion.js +3 -3
- package/frontend/dist/artifact-runtime/lucide-react.js +1 -1
- package/frontend/dist/artifact-runtime/mathjs.js +1 -1
- package/frontend/dist/artifact-runtime/mermaid.js +1 -1
- package/frontend/dist/artifact-runtime/plotly.js +1 -1
- package/frontend/dist/artifact-runtime/react.js +3 -3
- package/frontend/dist/assets/index-D99DS5c6.js +57 -0
- package/frontend/dist/assets/index-Dz1JufgZ.css +1 -0
- package/frontend/dist/assets/{markdown-math-D1Bj3pDB.css → markdown-math-DzFXvcrH.css} +1 -1
- package/frontend/dist/index.html +34 -34
- package/frontend/dist/js/{ArtifactContainer-D4v4l15L.js → ArtifactContainer-Cn7X9HGm.js} +1 -1
- package/frontend/dist/js/{ArtifactDemoPage-B2uaVpsi.js → ArtifactDemoPage-Ddpy2O_v.js} +1 -1
- package/frontend/dist/js/{ArtifactSandboxFrame-DlWJHI-r.js → ArtifactSandboxFrame-CdsAqv8H.js} +1 -1
- package/frontend/dist/js/{ArtifactSlideOutPanel-laZ98QKB.js → ArtifactSlideOutPanel-cVd9X80o.js} +1 -1
- package/frontend/dist/js/AutomationModal-B4UaWjkk.js +1 -0
- package/frontend/dist/js/AutomationsPage-huCrvLUp.js +1 -0
- package/frontend/dist/js/{AvatarUpload-KaBaTKoG.js → AvatarUpload-CG-w6Mpt.js} +1 -1
- package/frontend/dist/js/{Button-CGMYia4g.js → Button-j68Q8KVh.js} +1 -1
- package/frontend/dist/js/{CalendarPage-Dc7r-86c.js → CalendarPage-CZXT1w99.js} +1 -1
- package/frontend/dist/js/ChannelsPage-DbtdHnSL.js +1 -0
- package/frontend/dist/js/ChatPage-BZE65kiq.js +14 -0
- package/frontend/dist/js/ConnectModels-DD4bLgdq.js +1 -0
- package/frontend/dist/js/{EvaluationsPage-BB7sPhIR.js → EvaluationsPage-Dq53LaXd.js} +2 -2
- package/frontend/dist/js/{FirstTimeSetup-elqSi9JH.js → FirstTimeSetup-BoJIfuQT.js} +1 -1
- package/frontend/dist/js/GalleryPage-DKwqeB2A.js +1 -0
- package/frontend/dist/js/HomePage-C8bCJfls.js +1 -0
- package/frontend/dist/js/LanguageSwitcher-B_YyU5JG.js +1 -0
- package/frontend/dist/js/{Logo-HZvdAk2c.js → Logo-DnfVtjgj.js} +1 -1
- package/frontend/dist/js/{LogoMark-GJnfMXsk.js → LogoMark-BzObGdA9.js} +1 -1
- package/frontend/dist/js/{ModelManagerModals-Bk6OQzJI.js → ModelManagerModals-BzjZ-QwL.js} +1 -1
- package/frontend/dist/js/NotesPage-CnaAp_w_.js +3 -0
- package/frontend/dist/js/{OptimizedSyntaxHighlighter-CzzV6ONG.js → OptimizedSyntaxHighlighter-B0g8cxZQ.js} +1 -1
- package/frontend/dist/js/OptimizedSyntaxHighlighter-B_BbHeO1.js +1 -0
- package/frontend/dist/js/{PasswordStrengthMeter-DasfJa4P.js → PasswordStrengthMeter-DI4RDv67.js} +1 -1
- package/frontend/dist/js/{PersonasPage-CIJINcQK.js → PersonasPage-CH3GUKph.js} +2 -2
- package/frontend/dist/js/PluginUsagePage-d54K2gAj.js +1 -0
- package/frontend/dist/js/{RichMessageContent-DxCHlUlY.js → RichMessageContent-BfYbVBFz.js} +2 -2
- package/frontend/dist/js/RichMessageContent-CDxxs3Tt.js +1 -0
- package/frontend/dist/js/SettingsModal-BvtJcvow.js +19 -0
- package/frontend/dist/js/{SettingsToggle-oxvw7ulA.js → SettingsToggle-DrJ0Bapi.js} +1 -1
- package/frontend/dist/js/{ShareDialog-Bhpt_Y1N.js → ShareDialog-DaSxkTKS.js} +1 -1
- package/frontend/dist/js/StrandsPage-BQwz0mWq.js +1 -0
- package/frontend/dist/js/{SystemPage-BfhVXqar.js → SystemPage-BqNZoFxR.js} +1 -1
- package/frontend/dist/js/{TurnstileWidget-CVepEMEQ.js → TurnstileWidget-tI50c7Kc.js} +1 -1
- package/frontend/dist/js/{UserManagementPage-2yHv89ZA.js → UserManagementPage-UvPjA9RP.js} +1 -1
- package/frontend/dist/js/UserManagementPanel-C3T1ReJJ.js +1 -0
- package/frontend/dist/js/{WhatsNewModal-Dl69bG2T.js → WhatsNewModal-CLcU2Ugk.js} +1 -1
- package/frontend/dist/js/WorkPage-BpjGn--1.js +8 -0
- package/frontend/dist/js/api-BrHW-VGd.js +14 -0
- package/frontend/dist/js/api-K_hhqPdx.js +1 -0
- package/frontend/dist/js/{appNavigation-R8iKverf.js → appNavigation-B6xYIgLi.js} +1 -1
- package/frontend/dist/js/appStore-DkRdQQeY.js +2 -0
- package/frontend/dist/js/appVersion-BVtSqLVj.js +1 -0
- package/frontend/dist/js/ar-XTZGEtBr.js +2 -0
- package/frontend/dist/js/authStore-DBS6Kbvh.js +1 -0
- package/frontend/dist/js/{authStore-D8fc-Hl0.js → authStore-DjAsRpNL.js} +3 -3
- package/frontend/dist/js/bn-JiK7ZWmy.js +2 -0
- package/frontend/dist/js/chatStore-DpVxt9VX.js +3 -0
- package/frontend/dist/js/{client-BeJbHHWx.js → client-DppLngAs.js} +2 -2
- package/frontend/dist/js/{config-D6Kcp5n3.js → config-4_s8hdqO.js} +1 -1
- package/frontend/dist/js/cs-D8ju18CO.js +2 -0
- package/frontend/dist/js/da-BJWcAoUc.js +2 -0
- package/frontend/dist/js/de-CLJLmy69.js +2 -0
- package/frontend/dist/js/es-BvqHEL-3.js +2 -0
- package/frontend/dist/js/{evaluationsApi-2YwZBPk5.js → evaluationsApi-DyuW7IJ_.js} +1 -1
- package/frontend/dist/js/fr-B8ZoZomI.js +2 -0
- package/frontend/dist/js/hi-AzJLALo-.js +2 -0
- package/frontend/dist/js/id-DZYGQhvC.js +2 -0
- package/frontend/dist/js/is-Da_kvtzW.js +2 -0
- package/frontend/dist/js/it-B90zSlqn.js +2 -0
- package/frontend/dist/js/ja-DU_K1GOr.js +2 -0
- package/frontend/dist/js/ko-DicfoO-e.js +2 -0
- package/frontend/dist/js/{markdown-CZ1tYEW8.js → markdown-DU84620G.js} +1 -1
- package/frontend/dist/js/{markdown-core-KjS96SYW.js → markdown-core-Cyql92Hg.js} +1 -1
- package/frontend/dist/js/{markdown-html-DQEwrWcf.js → markdown-html-CUc2fCgY.js} +1 -1
- package/frontend/dist/js/{markdown-math-CKi32S5d.js → markdown-math-DxPfMKvO.js} +1 -1
- package/frontend/dist/js/{markdownHtml-lrXhxBhK.js → markdownHtml-KhS0cFNH.js} +1 -1
- package/frontend/dist/js/markdownMath-CsfRQAcz.js +1 -0
- package/frontend/dist/js/{messageCodeStyles-D4haBw80.js → messageCodeStyles-CuQPkfEK.js} +1 -1
- package/frontend/dist/js/ms-CfH7wjUY.js +2 -0
- package/frontend/dist/js/nl-ELlOz-B3.js +2 -0
- package/frontend/dist/js/pl-33dayyUk.js +2 -0
- package/frontend/dist/js/pt-aIXSQPCT.js +2 -0
- package/frontend/dist/js/react-vendor-CR5VJ85Q.js +9 -0
- package/frontend/dist/js/{router-vendor-HZm4FR0A.js → router-vendor-DqMnEJWK.js} +1 -1
- package/frontend/dist/js/ru-BSvGtBtW.js +2 -0
- package/frontend/dist/js/{standalone-DbyFjvTU.js → standalone-D_lg5NC9.js} +1 -1
- package/frontend/dist/js/strandsApi-BFbeEpAY.js +2 -0
- package/frontend/dist/js/sv-B7KOz81W.js +2 -0
- package/frontend/dist/js/{syntax-highlight-DNc3FFCa.js → syntax-highlight-D7dQ5s5-.js} +1 -1
- package/frontend/dist/js/{teamEventStream-omPy51va.js → teamEventStream-DsAS6P4m.js} +1 -1
- package/frontend/dist/js/th-DgpjGxvA.js +2 -0
- package/frontend/dist/js/tr-BQTbl2h-.js +2 -0
- package/frontend/dist/js/{ui-D5-4niRk.js → ui-Aq8MP7Ph.js} +2 -2
- package/frontend/dist/js/ui-vendor-DVTj_sKN.js +1 -0
- package/frontend/dist/js/uk-JLymloot.js +2 -0
- package/frontend/dist/js/{useChat-DnGClJeX.js → useChat-D3ZAGz70.js} +4 -4
- package/frontend/dist/js/useDialogFocus-zSGHkpE4.js +1 -0
- package/frontend/dist/js/useDictation-B6l8QzeM.js +1 -0
- package/frontend/dist/js/{useQuery-hWmQjdLu.js → useQuery-BTKpXudI.js} +1 -1
- package/frontend/dist/js/{useTranslation-B9kflK9S.js → useTranslation-Boi0fB1B.js} +1 -1
- package/frontend/dist/js/utils-B-Bhh1pF.js +1 -0
- package/frontend/dist/js/utils-vendor-DPJG-EG_.js +1 -0
- package/frontend/dist/js/vi-BXdLOJ8q.js +2 -0
- package/frontend/dist/js/{work-DmJpVPPO.js → work-CdbmBok5.js} +1 -1
- package/frontend/dist/js/workApi-D1xtiG3Q.js +1 -0
- package/frontend/dist/js/{workApi-C5InfT8x.js → workApi-UPxumrEF.js} +1 -1
- package/frontend/dist/js/workModels-BM2Zyiba.js +1 -0
- package/frontend/dist/js/zh-gdUf9sXa.js +2 -0
- package/package.json +11 -40
- package/plugins/anthropic.json +3 -1
- package/plugins/bedrock.json +86 -0
- package/plugins/openrouter.json +2 -0
- package/backend/dist/cordis/contracts.d.ts +0 -270
- package/backend/dist/cordis/contracts.d.ts.map +0 -1
- package/backend/dist/cordis/contracts.js +0 -32
- package/backend/dist/cordis/contracts.js.map +0 -1
- package/backend/dist/cordis/dsh/chat-model.d.ts +0 -16
- package/backend/dist/cordis/dsh/chat-model.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/chat-model.js +0 -104
- package/backend/dist/cordis/dsh/chat-model.js.map +0 -1
- package/backend/dist/cordis/dsh/engine-plugin.d.ts +0 -186
- package/backend/dist/cordis/dsh/engine-plugin.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/engine-plugin.js +0 -1116
- package/backend/dist/cordis/dsh/engine-plugin.js.map +0 -1
- package/backend/dist/cordis/dsh/librewebui-llm-adapter.d.ts +0 -175
- package/backend/dist/cordis/dsh/librewebui-llm-adapter.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/librewebui-llm-adapter.js +0 -480
- package/backend/dist/cordis/dsh/librewebui-llm-adapter.js.map +0 -1
- package/backend/dist/cordis/dsh/model-identity.d.ts +0 -12
- package/backend/dist/cordis/dsh/model-identity.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/model-identity.js +0 -87
- package/backend/dist/cordis/dsh/model-identity.js.map +0 -1
- package/backend/dist/cordis/dsh/native-provider-client.d.ts +0 -44
- package/backend/dist/cordis/dsh/native-provider-client.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/native-provider-client.js +0 -524
- package/backend/dist/cordis/dsh/native-provider-client.js.map +0 -1
- package/backend/dist/cordis/dsh/native-provider-plugin.d.ts +0 -11
- package/backend/dist/cordis/dsh/native-provider-plugin.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/native-provider-plugin.js +0 -416
- package/backend/dist/cordis/dsh/native-provider-plugin.js.map +0 -1
- package/backend/dist/cordis/dsh/native-provider-protocol.d.ts +0 -37
- package/backend/dist/cordis/dsh/native-provider-protocol.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/native-provider-protocol.js +0 -325
- package/backend/dist/cordis/dsh/native-provider-protocol.js.map +0 -1
- package/backend/dist/cordis/dsh/provider-handler.d.ts +0 -36
- package/backend/dist/cordis/dsh/provider-handler.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/provider-handler.js +0 -582
- package/backend/dist/cordis/dsh/provider-handler.js.map +0 -1
- package/backend/dist/cordis/dsh/session-files.d.ts +0 -9
- package/backend/dist/cordis/dsh/session-files.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/session-files.js +0 -60
- package/backend/dist/cordis/dsh/session-files.js.map +0 -1
- package/backend/dist/cordis/dsh/session-settings.d.ts +0 -15
- package/backend/dist/cordis/dsh/session-settings.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/session-settings.js +0 -51
- package/backend/dist/cordis/dsh/session-settings.js.map +0 -1
- package/backend/dist/cordis/dsh/work-driver.d.ts +0 -12
- package/backend/dist/cordis/dsh/work-driver.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/work-driver.js +0 -402
- package/backend/dist/cordis/dsh/work-driver.js.map +0 -1
- package/backend/dist/cordis/dsh/workspace-policy.d.ts +0 -10
- package/backend/dist/cordis/dsh/workspace-policy.d.ts.map +0 -1
- package/backend/dist/cordis/dsh/workspace-policy.js +0 -44
- package/backend/dist/cordis/dsh/workspace-policy.js.map +0 -1
- package/backend/dist/cordis/host/composition.d.ts +0 -73
- package/backend/dist/cordis/host/composition.d.ts.map +0 -1
- package/backend/dist/cordis/host/composition.js +0 -205
- package/backend/dist/cordis/host/composition.js.map +0 -1
- package/backend/dist/cordis/host/config.d.ts +0 -159
- package/backend/dist/cordis/host/config.d.ts.map +0 -1
- package/backend/dist/cordis/host/config.js +0 -184
- package/backend/dist/cordis/host/config.js.map +0 -1
- package/backend/dist/cordis/host/host.d.ts +0 -74
- package/backend/dist/cordis/host/host.d.ts.map +0 -1
- package/backend/dist/cordis/host/host.js +0 -420
- package/backend/dist/cordis/host/host.js.map +0 -1
- package/backend/dist/cordis/host/loader-entry.d.ts +0 -41
- package/backend/dist/cordis/host/loader-entry.d.ts.map +0 -1
- package/backend/dist/cordis/host/loader-entry.js +0 -52
- package/backend/dist/cordis/host/loader-entry.js.map +0 -1
- package/backend/dist/cordis/host/model.d.ts +0 -45
- package/backend/dist/cordis/host/model.d.ts.map +0 -1
- package/backend/dist/cordis/host/model.js +0 -54
- package/backend/dist/cordis/host/model.js.map +0 -1
- package/backend/dist/cordis/host/privacy.d.ts +0 -8
- package/backend/dist/cordis/host/privacy.d.ts.map +0 -1
- package/backend/dist/cordis/host/privacy.js +0 -73
- package/backend/dist/cordis/host/privacy.js.map +0 -1
- package/backend/dist/cordis/index.d.ts +0 -14
- package/backend/dist/cordis/index.d.ts.map +0 -1
- package/backend/dist/cordis/index.js +0 -30
- package/backend/dist/cordis/index.js.map +0 -1
- package/backend/dist/cordis/runtime.d.ts +0 -97
- package/backend/dist/cordis/runtime.d.ts.map +0 -1
- package/backend/dist/cordis/runtime.js +0 -231
- package/backend/dist/cordis/runtime.js.map +0 -1
- package/backend/dist/cordis/work-model.d.ts +0 -7
- package/backend/dist/cordis/work-model.d.ts.map +0 -1
- package/backend/dist/cordis/work-model.js.map +0 -1
- package/backend/dist/routes/cordis.d.ts.map +0 -1
- package/backend/dist/routes/cordis.js +0 -440
- package/backend/dist/routes/cordis.js.map +0 -1
- package/backend/dist/routes/libreClaw.d.ts +0 -3
- package/backend/dist/routes/libreClaw.d.ts.map +0 -1
- package/backend/dist/routes/libreClaw.js +0 -200
- package/backend/dist/routes/libreClaw.js.map +0 -1
- package/backend/dist/services/cordisAccessService.d.ts +0 -56
- package/backend/dist/services/cordisAccessService.d.ts.map +0 -1
- package/backend/dist/services/cordisAccessService.js +0 -98
- package/backend/dist/services/cordisAccessService.js.map +0 -1
- package/backend/dist/services/libreClawService.d.ts +0 -105
- package/backend/dist/services/libreClawService.d.ts.map +0 -1
- package/backend/dist/services/libreClawService.js +0 -169
- package/backend/dist/services/libreClawService.js.map +0 -1
- package/frontend/dist/assets/index-C8_AByBq.css +0 -1
- package/frontend/dist/assets/index-DWLnkKwj.js +0 -16
- package/frontend/dist/js/AutomationModal-CjjiEZFA.js +0 -1
- package/frontend/dist/js/AutomationsPage-jnWmD58y.js +0 -1
- package/frontend/dist/js/ChannelsPage-DHPabX1e.js +0 -1
- package/frontend/dist/js/ChatPage-ZvGp-iqV.js +0 -14
- package/frontend/dist/js/ConnectModels-aUTD6s9B.js +0 -1
- package/frontend/dist/js/CordisPage-DZKcpPVj.js +0 -1
- package/frontend/dist/js/GalleryPage-CrlNRnkn.js +0 -1
- package/frontend/dist/js/HomePage-lR9h7_a1.js +0 -1
- package/frontend/dist/js/LanguageSwitcher-CWkbzpxT.js +0 -1
- package/frontend/dist/js/LibreClawPage-P19FnNlu.js +0 -1
- package/frontend/dist/js/NotesPage-DopG0M4B.js +0 -3
- package/frontend/dist/js/OptimizedSyntaxHighlighter-ajqwyBQm.js +0 -1
- package/frontend/dist/js/PluginUsagePage-Cj0mUxD8.js +0 -1
- package/frontend/dist/js/RichMessageContent-BZndQSJU.js +0 -1
- package/frontend/dist/js/SettingsModal-wAuFQOE4.js +0 -19
- package/frontend/dist/js/UserManagementPanel-BU95ZPOv.js +0 -1
- package/frontend/dist/js/WorkPage-CSderbeT.js +0 -8
- package/frontend/dist/js/api-CU-JXx2u.js +0 -1
- package/frontend/dist/js/api-DPXCtanG.js +0 -14
- package/frontend/dist/js/appStore-BD70bvas.js +0 -2
- package/frontend/dist/js/appVersion-C7sxqgMd.js +0 -1
- package/frontend/dist/js/ar-Cq-DrSYL.js +0 -2
- package/frontend/dist/js/authStore-FNKLFUQp.js +0 -1
- package/frontend/dist/js/bn-BqxLh-KL.js +0 -2
- package/frontend/dist/js/chatStore-CK5ojwft.js +0 -3
- package/frontend/dist/js/cordisApi-BS8QMSV4.js +0 -2
- package/frontend/dist/js/cs-D2DDNZf-.js +0 -2
- package/frontend/dist/js/da-BciY-TSG.js +0 -2
- package/frontend/dist/js/de-DjU_eXQ-.js +0 -2
- package/frontend/dist/js/es-ChIEs80I.js +0 -2
- package/frontend/dist/js/fr-Bi8BGRW4.js +0 -2
- package/frontend/dist/js/hi-BMsCnWg7.js +0 -2
- package/frontend/dist/js/i18next-DOICz7ZY.js +0 -1
- package/frontend/dist/js/id-CpcN1vhk.js +0 -2
- package/frontend/dist/js/is-DkUy2cmP.js +0 -2
- package/frontend/dist/js/it-BglK9DRZ.js +0 -2
- package/frontend/dist/js/ja-IrprzwLJ.js +0 -2
- package/frontend/dist/js/ko--wwEsMPi.js +0 -2
- package/frontend/dist/js/markdownMath-B0BpyFBS.js +0 -1
- package/frontend/dist/js/ms-BWj59y7-.js +0 -2
- package/frontend/dist/js/nl-D-QndW_A.js +0 -2
- package/frontend/dist/js/pl-Dw7d7iDV.js +0 -2
- package/frontend/dist/js/pt-BI53uHJw.js +0 -2
- package/frontend/dist/js/react-vendor-wiHys0m2.js +0 -9
- package/frontend/dist/js/ru-JKyTgPg9.js +0 -2
- package/frontend/dist/js/sv-BIkBLPSQ.js +0 -2
- package/frontend/dist/js/th-CZ_LcCU0.js +0 -2
- package/frontend/dist/js/tr-B265byx1.js +0 -2
- package/frontend/dist/js/ui-vendor-BhHHyHk3.js +0 -1
- package/frontend/dist/js/uk-VTAlChwf.js +0 -2
- package/frontend/dist/js/useDialogFocus-BPTG_Zmy.js +0 -1
- package/frontend/dist/js/useDictation-D7zVBjDJ.js +0 -1
- package/frontend/dist/js/utils-p8Gt72YP.js +0 -1
- package/frontend/dist/js/utils-vendor-DISWt2y9.js +0 -1
- package/frontend/dist/js/vi-D8rXh-53.js +0 -2
- package/frontend/dist/js/workApi-FV75LKJn.js +0 -1
- package/frontend/dist/js/workModels-MzU2Ab7l.js +0 -1
- package/frontend/dist/js/zh-BEGd9iBD.js +0 -2
- package/scripts/prepare-dsh-provider.mjs +0 -124
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var e={common:{provider:`Провайдер`,agent:`Агент`,loading:`Загрузка...`,save:`Сохранить`,saving:`Сохранение...`,cancel:`Отмена`,delete:`Удалить`,edit:`Редактировать`,close:`Закрыть`,back:`Назад`,next:`Далее`,confirm:`Подтвердить`,error:`Ошибка`,success:`Успешно`,warning:`Предупреждение`,or:`или`,optional:`необязательно`,enabled:`Включено`,disabled:`Отключено`,on:`Вкл`,off:`Выкл`,yes:`Да`,no:`Нет`,search:`Поиск`,noResults:`Ничего не найдено`,retry:`Повторить`,refresh:`Обновить`,download:`Скачать`,upload:`Загрузить`,export:`Экспорт`,import:`Импорт`,reset:`Сбросить`,apply:`Применить`,clear:`Очистить`,all:`Все`,none:`Нет`,default:`По умолчанию`,custom:`Пользовательский`,remove:`Удалить`,home:`Главная`,more:`Больше`},brand:{name:`Libre WebUI`,shortName:`Libre`},appInitialization:{ollamaUnavailable:`Сервис Ollama недоступен. Модели плагинов по-прежнему можно использовать.`,backendConnectionFailed:`Не удалось подключиться к серверной службе`},auth:{login:{title:`С возвращением`,subtitle:`Войдите в свой аккаунт, чтобы продолжить`,username:`Имя пользователя`,usernamePlaceholder:`Введите имя пользователя`,password:`Пароль`,passwordPlaceholder:`Введите пароль`,signIn:`Войти`,signingIn:`Вход...`,noAccount:`Нет аккаунта?`,signUpHere:`Зарегистрируйтесь здесь`,loginSuccess:`Вход выполнен успешно!`,loginFailed:`Ошибка входа`,checkCredentials:`Ошибка входа. Проверьте учётные данные.`,approvalPending:`Ваш аккаунт ожидает одобрения администратором.`,enterBoth:`Пожалуйста, введите имя пользователя и пароль`,githubSuccess:`Вход через GitHub выполнен успешно!`,githubFailed:`Ошибка аутентификации GitHub`,githubVerifyFailed:`Не удалось проверить аутентификацию GitHub`,verificationFailed:`Проверка безопасности не пройдена. Обновите страницу и попробуйте снова.`},signup:{title:`Создать аккаунт`,subtitle:`Зарегистрируйте новый аккаунт`,username:`Имя пользователя`,usernamePlaceholder:`Выберите имя пользователя`,email:`Эл. почта`,emailPlaceholder:`ваш@email.com`,password:`Пароль`,passwordPlaceholder:`Выберите пароль`,confirmPassword:`Подтвердите пароль`,confirmPasswordPlaceholder:`Подтвердите ваш пароль`,createAccount:`Создать аккаунт`,creatingAccount:`Создание аккаунта...`,hasAccount:`Уже есть аккаунт?`,signInHere:`Войдите здесь`,signupSuccess:`Аккаунт успешно создан!`,approvalPending:`Регистрация получена. Администратор должен одобрить ваш аккаунт.`,awaitingApproval:`Ожидает одобрения`,awaitingApprovalDescription:`Ваш аккаунт создан, но администратор должен активировать его, прежде чем вы сможете войти.`,backToSignIn:`Вернуться к входу`,signupFailed:`Ошибка регистрации`,tryAgain:`Ошибка регистрации. Попробуйте снова.`,usernameRequired:`Имя пользователя и пароль обязательны`,passwordMismatch:`Пароли не совпадают`},logout:{button:`Выйти`,success:`Выход выполнен успешно`},oauth:{continueWith:`Продолжить через {{provider}}`,connectingTo:`Подключение к {{provider}}...`,github:`GitHub`,huggingFace:`Hugging Face`,loginSuccess:`Вход через OAuth выполнен!`,completionFailed:`Не удалось завершить аутентификацию OAuth`,verificationFailed:`Не удалось проверить аутентификацию OAuth`,authenticationFailed:`Сбой аутентификации OAuth`},checkingAuth:`Проверка аутентификации...`,welcome:`Добро пожаловать`,noEmail:`Email не указан`,role:`Роль`,id:`ID`,userId:`ID пользователя`,signInDescription:`Войдите с помощью учётной записи GitHub, чтобы продолжить`,signInWithGitHub:`Войти через GitHub`,jwtActive:`JWT-аутентификация активна`,jwtDescription:`JWT-аутентификация с GitHub OAuth`,github:`GitHub`,provider:`Провайдер`,tagline:`Ваш ИИ-стек должен подчиняться вам.`,selfHosted:`Самостоятельный хостинг · Apache 2.0`,highlights:{local:{title:`Локально`,body:`Ваши диалоги и файлы остаются на устройстве, на котором вы это запускаете.`},providers:{title:`Любой провайдер`,body:`Локальные модели через Ollama, а также удаленные провайдеры, которые вы добавляете.`},work:{title:`Изолированная работа`,body:`Предоставьте модели изолированное рабочее пространство с файлами, терминалом и предпросмотром.`}},oidc:{defaultProviderName:`Единый вход`},mfa:{sectionTitle:`Двухфакторная аутентификация`,sectionDescription:`Защитите аккаунт приложением-аутентификатором и ключами доступа.`,totpTitle:`Приложение-аутентификатор`,totpEnabledHint:`Включено. Неиспользованные коды восстановления: {{count}}`,totpDisabledHint:`Добавьте второй шаг входа по паролю с одноразовым кодом.`,enableButton:`Включить`,disableButton:`Отключить`,activateButton:`Подтвердить`,regenerateCodes:`Новые коды восстановления`,confirmWithCode:`Подтвердите кодом из приложения или кодом восстановления`,enabled:`Двухфакторная аутентификация включена.`,disabled:`Двухфакторная аутентификация отключена.`,invalidCode:`Этот код недействителен.`,enrollFailed:`Не удалось начать настройку.`,challengeExpired:`Запрос на вход истёк. Войдите снова.`,setupTitle:`Настройка двухфакторной аутентификации`,setupSubtitle:`Эта инсталляция требует второй шаг входа. Добавьте секрет в приложение-аутентификатор, чтобы продолжить.`,verifyTitle:`Введите код`,verifyHint:`Введите 6-значный код из приложения-аутентификатора или код восстановления.`,secretHint:`Добавьте этот секрет в приложение-аутентификатор и подтвердите текущим кодом.`,openAuthenticator:`Открыть в приложении-аутентификаторе`,codeLabel:`6-значный код`,codeOrRecoveryLabel:`Код или код восстановления`,codePlaceholder:`123456`,verifyButton:`Проверить`,backToSignIn:`Назад ко входу`,recoveryCodesTitle:`Коды восстановления`,recoveryCodesHint:`Храните эти коды в надёжном месте. Каждый позволяет войти один раз, если вы потеряете аутентификатор.`,recoveryCodesSaved:`Я сохранил коды восстановления`,recoveryCodesRegenerated:`Созданы новые коды восстановления. Старые больше не работают.`},passkeys:{sectionTitle:`Ключи доступа`,sectionDescription:`Входите без пароля с помощью блокировки экрана устройства или ключа безопасности.`,addButton:`Добавить ключ доступа`,empty:`Ключей доступа пока нет.`,unnamed:`Ключ доступа`,createdAt:`Добавлен`,lastUsedAt:`Последнее использование`,removeButton:`Удалить ключ доступа`,registered:`Ключ доступа добавлен.`,registerFailed:`Не удалось добавить ключ доступа.`,removed:`Ключ доступа удалён.`,removeFailed:`Не удалось удалить ключ доступа.`,signInButton:`Войти с ключом доступа`,signInFailed:`Вход с ключом доступа не удался.`}},setup:{welcome:{title:`Добро пожаловать в Libre WebUI`,subtitle:`Давайте начнём`,description:`Настройте ваш экземпляр Libre WebUI за несколько шагов`,createAdmin:`Создать аккаунт администратора`,features:{secure:{title:`Безопасность и конфиденциальность`,description:`Ваши разговоры остаются на вашем устройстве`},fast:{title:`Быстрый и отзывчивый`,description:`Оптимизирован для скорости и производительности`},openSource:{title:`Открытый исходный код`,description:`Бесплатное программное обеспечение с открытым исходным кодом`}}},admin:{title:`Создать аккаунт администратора`,subtitle:`Настройка администратора`,description:`Создайте первый аккаунт администратора для вашего экземпляра Libre WebUI`,usernamePlaceholder:`Введите имя администратора`,passwordPlaceholder:`Введите пароль (не менее 12 символов)`,confirmPlaceholder:`Подтвердите пароль`,creating:`Создание...`,createAdmin:`Создать администратора`,success:`Аккаунт администратора успешно создан!`,failed:`Не удалось создать аккаунт администратора`,approvalUnexpected:`Не удалось активировать первоначального администратора. Пожалуйста, попробуйте снова.`,fillAllFields:`Пожалуйста, заполните все поля`,note:`Это будет основной аккаунт администратора для вашего экземпляра Libre WebUI`},encryptionKey:{title:`Сохраните ваш ключ шифрования`,subtitle:`Важно: Сохраните этот ключ`,description:`Этот ключ шифрования защищает ваши конфиденциальные данные. Храните его надёжно — он понадобится при восстановлении базы данных.`,warning:`Предупреждение`,warningText:`Если вы потеряете этот ключ и вам потребуется восстановить базу данных, ваши зашифрованные данные (API-ключи, настройки) будут утеряны безвозвратно.`,label:`Ваш ключ шифрования`,loading:`Загрузка...`,copyToClipboard:`Копировать в буфер обмена`,copied:`Ключ шифрования скопирован в буфер обмена!`,copyFailed:`Не удалось скопировать ключ в буфер обмена`,envNote:`Этот ключ также сохранён в файле backend/.env как ENCRYPTION_KEY`,acknowledgment:`Я сохранил ключ шифрования в надёжном месте и понимаю, что его потеря может привести к утрате данных.`,confirmRequired:`Пожалуйста, подтвердите, что вы сохранили ключ шифрования`,continue:`Продолжить к Libre WebUI`},connectModels:{title:`Подключите свои модели`,subtitle:`Локально или в облаке — выберите то, чем уже пользуетесь. Это всегда можно изменить позже.`}},chat:JSON.parse(`{"greeting":{"morning":"Доброе утро","afternoon":"Добрый день","evening":"Добрый вечер","night":"Доброй ночи"},"followUp":"Продолжить","welcome":{"helpToday":"Чем могу помочь сегодня?","helpTonight":"Чем могу помочь сегодня вечером?","variety":{"create":{"title":"Что будем создавать?","subtitle":"Начните с мысли, наброска или задачи, которая никак не поддаётся."},"explore":{"title":"С чего начнём?","subtitle":"Расскажите о вопросе, к которому постоянно возвращаетесь."},"imagine":{"title":"Что вы представляете?","subtitle":"Мы можем вместе придать этому форму."},"focus":{"title":"Что заслуживает вашего внимания?","subtitle":"Давайте проясним следующий шаг."},"untangle":{"title":"Что нужно распутать?","subtitle":"Для начала покажите всё как есть, даже если пока хаотично."},"momentum":{"title":"Начнём, когда будете готовы.","subtitle":"Вернитесь к идее, плану или незаконченной теме."},"open":{"title":"О чём вы думаете?","subtitle":"Небольшая мысль или амбициозный проект. Подойдёт и то и другое."},"challenge":{"title":"Что мы решаем?","subtitle":"Расскажите, что пока не работает."},"draft":{"title":"Давайте с чего-нибудь начнём.","subtitle":"Необязательно сразу доводить до блеска."},"possibility":{"title":"Во что это может превратиться?","subtitle":"Покажите мне исходный материал."},"unexpected":{"title":"Создадим что-нибудь неожиданное.","subtitle":"Дайте мне ограничение, настроение или не до конца оформленную идею."}}},"input":{"placeholder":"Отправить сообщение","messagePlaceholder":"Сообщение...","attachImages":"Прикрепить изображения","attachments":"Вложения и дополнительные функции","sendMessage":"Отправить сообщение","stopGeneration":"Остановить генерацию","menu":{"uploadImages":"Загрузить изображения","attachDocument":"Прикрепить документ","attachWebpage":"Прикрепить веб-страницу","structuredOutput":"Структурированный вывод","attach":"Прикрепить","documentAttached":"Документ прикреплён","webpageAttached":"Веб-страница прикреплена","attachFailed":"Не удалось прикрепить","attachKnowledge":"Прикрепить знания","noCollections":"Коллекций пока нет — создайте в Настройках → Документы"},"voiceInput":"Голосовой ввод","voiceStop":"Остановить прослушивание","transcriptionSource":"Источник распознавания речи","browserSpeech":"Служба распознавания речи браузера","providerTranscriptionDisclosure":"Записать и отправить аудио в {{provider}} для расшифровки","webSearchOn":"Веб-поиск включён — ответы используют актуальные результаты","webSearchOff":"Искать в интернете для этого сообщения","toolsOn":"Инструменты включены — модель может вызывать одобренные инструменты","toolsOff":"Разрешить модели вызывать инструменты в этом сообщении","thinkingOn":"Рассуждение включено ({{level}})","thinkingOff":"Рассуждать перед ответом"},"session":{"new":"Новый чат","work":"Работа","chat":"Чат","private":"Приватный","incognito":"Чат в режиме инкогнито","privateMode":"Приватный режим","privateDescription":"Этот разговор не будет сохранён","privateTooltip":"Начать приватный разговор, который не будет сохранён","deleteConfirm":"Вы уверены, что хотите удалить этот чат?","generatingTitle":"Генерация заголовка","noChats":"Чатов пока нет","createFirst":"Создайте свой первый чат выше","chats":"Чаты","renameChat":"Переименовать чат","openNewTab":"Открыть в новой вкладке","pinChat":"Закрепить","unpinChat":"Открепить","deleteChat":"Удалить чат","archiveChat":"Архивировать чат","groups":{"pinned":"Закреплённые","today":"Сегодня","yesterday":"Вчера","previous7Days":"Последние 7 дней","previous30Days":"Последние 30 дней","older":"Старее"},"folder":{"new":"Новая папка","namePlaceholder":"Название папки","move":"Переместить в папку","remove":"Убрать из папки","delete":"Удалить папку","deleteConfirm":"Удалить эту папку? Чаты внутри сохранятся."},"shareChat":"Поделиться чатом…"},"persona":{"applied":"Персона применена","label":"Персона","loadFailed":"Не удалось загрузить сведения о персоне","removeFailed":"Не удалось удалить персону"},"model":{"updated":"Модель обновлена","noModels":"Модели недоступны","noModelsDescription":"Модели недоступны. Убедитесь, что Ollama запущен и модели установлены.","pullCommand":"ollama pull llama3.2:3b","noModelsTooltip":"Модели недоступны. Убедитесь, что Ollama запущен и модели установлены.","selectBeforePrivateChat":"Выберите доступную модель перед началом приватного чата","selectBeforeSending":"Выберите доступную модель перед отправкой","selectBeforeRegenerating":"Выберите доступную модель перед повторной генерацией","connectDescription":"Модели пока не подключены. Выберите источник ниже — локальную среду выполнения, собственный сервер или облачный API — и вы сможете начать общение меньше чем за минуту."},"footer":{"disclaimer":"ИИ может ошибаться — проверяйте важную информацию","images":"{{count}} изображение","images_plural":"{{count}} изображений","structuredOutput":"Структурированный вывод"},"mediaUpload":{"dropImagesHere":"Перетащите изображения сюда или","supportedFormats":"Поддерживаются: JPG, PNG, GIF, WebP (макс. 10 МБ каждый)","browse":"выберите","unsupportedFileType":"Тип файла не поддерживается: {{name}}","maxImagesAllowed":"Допускается не более {{count}} изображений","imageTooLarge":"Изображение {{name}} слишком большое (не более 10 МБ)"},"structuredOutput":{"title":"Формат ответа","none":"Нет (естественный язык)","noneDescription":"Стандартный ответ на естественном языке","json":"JSON","jsonDescription":"Структурированный формат JSON","list":"Список","listDescription":"Массив элементов","summary":"Резюме","summaryDescription":"Краткое изложение документа с ключевыми моментами","analysis":"Анализ","analysisDescription":"Структурированный анализ с плюсами/минусами","custom":"Пользовательская схема","customDescription":"Определите собственную JSON-схему","customSchema":"Пользовательская JSON-схема","schemaPreview":"Предпросмотр схемы","applySchema":"Применить схему","cancel":"Отмена","enabled":"Структурированный вывод включён"},"controls":{"title":"Настройки чата","systemPrompt":"Системный промпт","systemPromptPlaceholder":"Инструкции только для этого чата…","advancedParams":"Расширенные параметры","advancedParamsDescription":"Переопределения для этого чата. Пустые поля используют глобальные значения.","fromModel":"из модели","fromModelHint":"Это значение взято из рекомендованных настроек самой модели.","contextCapped":"Контекст ограничен {{context}} из {{trained}}, на которых обучалась модель, чтобы она загружалась.","saved":"Настройки сохранены","saveFailed":"Не удалось сохранить настройки","params":{"temperature":"Температура","topP":"Top P","topK":"Top K","minP":"Min P","maxTokens":"Макс. токенов","repeatPenalty":"Штраф за повторы","seed":"Сид","contextLength":"Длина контекста"},"thinking":"Рассуждение","thinkingDescription":"Сколько модель рассуждает перед ответом. Модели без рассуждения это игнорируют.","compaction":"Сжатие контекста","compactionDescription":"Когда сервер сжимает длинные беседы, этот чат может отказаться и сохранить полную историю.","compactionDefault":"По умолчанию сервера","compactionOff":"Отключено для этого чата"},"message":{"sources":"Источники"},"toasts":{"chatCreated":"Новый чат создан","createFailed":"Не удалось создать сеанс","loadFailed":"Не удалось загрузить сеансы","chatDeleted":"Чат удалён","deleteFailed":"Не удалось удалить чат","deleteSessionFailed":"Не удалось удалить сеанс","historyCleared":"Вся история чата очищена","historyClearFailed":"Не удалось очистить историю чата","titleUpdated":"Название чата обновлено","updateFailed":"Не удалось обновить сеанс","noValidSession":"Нет допустимого сеанса чата. Создайте или выберите чат.","sessionNotFound":"Сеанс не найден или недействителен. Выберите или создайте допустимый сеанс чата.","noModelProvider":"Нет доступного поставщика моделей","modelUnavailable":"Выбранная модель \\"{{model}}\\" недоступна у {{provider}}. Повторно активируйте этого поставщика или выберите другую модель.","modelSwitched":"Переключено на {{model}} (предыдущая модель больше недоступна)","modelsLoadFailed":"Не удалось загрузить модели","modelUpdated":"Модель обновлена для текущего чата","modelUpdateFailed":"Не удалось обновить модель сеанса","titlePreviewFallback":"Не удалось создать заголовок; используется предпросмотр сообщения","titleGenerated":"Заголовок чата создан","titleGenerationFailed":"Не удалось создать заголовок чата","sessionNotFoundRedirect":"Сеанс не найден. Создаётся новый сеанс...","comparisonError":"{{model}}: {{error}}","generationFailed":"сбой генерации","comparisonFailed":"сбой сравнения","sendFailed":"Не удалось отправить сообщение","noMessageToRegenerate":"Нет сообщения для повторной генерации","regenerateFailed":"Не удалось повторно сгенерировать сообщение","messageNotFound":"Сообщение не найдено","branchSwitched":"Выбран вариант {{number}}","branchSelectFailed":"Не удалось выбрать ветвь","editFailed":"Не удалось изменить сообщение","toolDecisionFailed":"Не удалось записать решение по инструменту"},"documents":{"title":"Документы в контексте"},"context":{"title":"Окно контекста:","full":"заполнено на {{percent}}%","tokensUsed":"использовано {{used}} / {{budget}} токенов","tokensUsedNoBudget":"использовано {{used}} токенов","capped":"ограничено с {{trained}}"},"queue":{"title":"В очереди ({{total}})","moveUp":"Выше","moveDown":"Ниже","updateFailed":"Не удалось изменить запрос в очереди","enqueueFailed":"Не удалось поставить запрос в очередь"},"compare":{"title":"Сравнить модели","hint":"Отвечать дополнительно до {{max}} моделями"},"fork":{"action":"Ответвить отсюда","created":"Чат ответвлён","failed":"Не удалось ответвить чат","origin":"Ответвление от {{title}}","originUnknown":"другого чата"},"sharedReadOnly":"Поделился {{owner}} — только просмотр"}`),sidebar:{navigation:{chat:`Чат`,models:`Модели`,personas:`Персоны`,imagine:`Изображения`,agents:`Агенты`,work:`Работа`,settings:`Настройки`,usageAnalytics:`Использование провайдеров`,system:`Система`,userManagement:`Управление пользователями`,signOut:`Выйти`,exploreLabel:`Обзор`,notes:`Заметки`,calendar:`Календарь`,automations:`Автоматизации`,prompts:`Промпты`,skills:`Навыки`,tools:`Инструменты`,channels:`Каналы`,cordis:`Движок Cordis`},toggleSize:`Переключить размер боковой панели`,expandSidebar:`Развернуть боковую панель`},user:{menu:{changePicture:`Изменить фото`,settings:`Настройки`,usageAnalytics:`Использование провайдеров`,system:`Система`,userManagement:`Управление пользователями`,logout:`Выйти`,pinShortcut:`Закрепить на боковой панели`,unpinShortcut:`Открепить от боковой панели`,evaluations:`Оценки`},avatar:{title:`Изменить фото профиля`,updated:`Фото профиля обновлено`,updateFailed:`Не удалось обновить фото профиля`,saving:`Сохранение...`,label:`Аватар`,uploadAvatarImage:`Загрузить изображение аватара`,dragAndDrop:`Перетащите изображение или нажмите для выбора`,chooseImage:`Выбрать изображение`,uploading:`Загрузка...`,enterImageUrl:`Или введите URL изображения`,supportedFormats:`Поддерживаются: JPG, PNG, GIF, WebP (макс. 2 МБ). Квадратные изображения подходят лучше всего.`,customAvatar:`Пользовательское изображение аватара`,clickToChange:`Нажмите, чтобы изменить или удалить`,removed:`Аватар удалён`,uploaded:`Аватар успешно загружен`,invalidFile:`Пожалуйста, выберите корректный файл изображения`,fileTooLarge:`Размер изображения аватара должен быть менее 2 МБ`,readFailed:`Не удалось прочитать файл изображения`,uploadFailed:`Не удалось загрузить изображение аватара`},profile:{noEmail:`Эл. почта не указана`}},settings:JSON.parse(`{"title":"Настройки","tabs":{"appearance":"Внешний вид","model":"По умолчанию","systemMessage":"Системное сообщение","plugins":"Плагины","search":"Поиск","generation":"Генерация","documents":"Документы","tts":"Синтез речи","imageGen":"Генерация изображений","data":"Данные","shortcuts":"Сочетания клавиш","about":"О программе","sessions":"Сеансы","apiKeys":"API-ключи","notifications":"Уведомления","ollamaDisabled":"Ollama отключён администратором"},"appearance":{"title":"Внешний вид","language":{"title":"Язык","description":"Выберите предпочтительный язык"},"theme":{"title":"Тема","light":"Светлая","dark":"Тёмная","amoled":"Глубокий Чёрный","celestial":"Небесная","system":"Системная"},"accent":{"title":"Акцентный цвет","custom":"Пользовательский цвет","useColor":"Использовать {{color}} как акцент","behaviorTitle":"Палитра интерфейса","behaviorDescription":"Выберите, останется ли акцент только на элементах управления или изменит весь светлый либо тёмный интерфейс.","defaultStyle":"По умолчанию","defaultStyleDescription":"Сохранить нейтральные поверхности светлой и тёмной темы.","adaptedStyle":"Адаптировать к акценту","adaptedStyleDescription":"Окрасить поверхности, границы и текст в акцентный цвет."},"chatInterface":{"title":"Интерфейс чата","showUsername":"Показывать имя пользователя","showUsernameDescription":"Отображать имя пользователя в сообщениях чата","followUpSuggestions":"Подсказки для продолжения","followUpSuggestionsDescription":"Предлагать быстрые ответы после каждого ответа","hapticFeedback":"Тактильная отдача (Android)","hapticFeedbackDescription":"Использовать лёгкую вибрацию для важных действий на мобильном устройстве","autoOpenArtifacts":"Автоматически открывать артефакты","autoOpenArtifactsDescription":"Открывать панель артефактов, когда ответ создаёт артефакт"},"background":{"title":"Фоновое изображение","enable":"Включить фоновое изображение","enableDescription":"Показывать обои на Главной, в Чате и Работе.","blur":"Размытие","opacity":"Прозрачность","upload":"Загрузить фоновое изображение","dragDrop":"Перетащите изображение или нажмите для выбора","chooseImage":"Выбрать изображение","effect":"Стиль","dither":"Дизеринг","original":"Оригинал","blurred":"Размытый","intensity":"Интенсивность","preview":"Предпросмотр обоев","change":"Изменить изображение","saved":"Сохранено","saveFailed":"Не удалось сохранить изменения. Повторите попытку.","originalPreserved":"Исходное изображение остаётся без изменений.","fileTooLarge":"Размер фонового изображения не должен превышать 10 МБ."},"celestial":{"title":"Время суток","description":"Небесная тема следует за солнцем там, где вы находитесь. Перетащите, чтобы посмотреть любую минуту, или позвольте ей следовать за часами.","live":"Сейчас","preview":"Предпросмотр","followClock":"Следовать часам","sunrise":"Восход","sunset":"Закат","location":"Местоположение","locationHint":"Необязательно. Хранится только в этом браузере и никогда не отправляется на сервер; координаты округляются примерно до километра.","useMyLocation":"Использовать моё местоположение","locationDenied":"Браузер не предоставил местоположение. Можно ввести координаты вручную.","latitude":"Широта","longitude":"Долгота","apply":"Применить","clear":"Очистить","approximateDay":"Примерная длина дня","weather":"Учитывать погоду","weatherHint":"Получает текущие условия из Open-Meteo для вашего местоположения: облака, дождь, снег, туман и ветер формируют небо. Требуется местоположение.","weatherLoading":"Получение погоды…","weatherUnavailable":"Погода сейчас недоступна.","wind":"ветер {{speed}} км/ч","kinds":{"clear":"Ясно","partly":"Переменная облачность","overcast":"Пасмурно","fog":"Туман","drizzle":"Морось","rain":"Дождь","snow":"Снег","thunder":"Гроза"}}},"saveSettings":"Сохранить настройки","preferences":{"updateFailed":"Не удалось обновить настройки: {{error}}"},"model":{"title":"Настройки модели","defaultModel":"Модель по умолчанию","defaultModelDescription":"Эта модель будет использоваться по умолчанию для новых разговоров","selectModel":"Выберите модель","specializedModels":"Специализированные модели","visionModel":"Модель зрения","selectVisionModel":"Использовать текущую модель чата","visionModelDescription":"Используется автоматически, когда исходящий контекст чата содержит изображения. Выберите модель, поддерживающую ввод изображений.","visionModelUpdateFailed":"Не удалось обновить модель зрения: {{error}}","visionModelNoProvider":"У этой модели зрения нет идентификатора провайдера. Выберите доступную модель.","persona":"Персона","updateAll":"Обновить все модели","updateAllDescription":"Проверить обновления и загрузить последние версии всех установленных моделей","updateAllButton":"Обновить все","updating":"Обновление моделей...","currentModelInfo":"Информация о текущей модели","name":"Название","size":"Размер","family":"Семейство","format":"Формат","status":"Статус","statusStarting":"Запуск...","statusComplete":"Завершено","statusError":"Ошибка","bulkOperations":"Массовые операции","autoTitle":{"title":"Автогенерация заголовков","enable":"Включить автогенерацию заголовков","enableDescription":"Генерировать заголовки чатов и сводки размышлений в реальном времени","taskModel":"Модель для задач","selectTaskModel":"Выберите модель для задач","taskModelDescription":"Модель для заголовков и сводок размышлений в реальном времени. Последние рассуждения отправляются этой модели."},"updatingModel":"Обновление {{name}} ({{current}}/{{total}})","modelsProgress":"{{current}} из {{total}} моделей","defaultModelUpdated":"Модель по умолчанию обновлена","allModelsUpdated":"Все модели успешно обновлены!","updateAllFailed":"Не удалось обновить модели: {{error}}"},"systemMessage":{"title":"Системное сообщение","description":"Установите пользовательское системное сообщение, которое будет использоваться для всех новых разговоров.","placeholder":"Введите системное сообщение...","saved":"Системное сообщение сохранено","saveFailed":"Не удалось сохранить системное сообщение"},"plugins":{"title":"Плагины","description":"Управление установленными плагинами","providerConnections":"Подключения провайдеров","providerConnectionsDescription":"Подключайте, настраивайте и проверяйте провайдеров моделей через плагины.","providers":"Провайдеры","searchProviders":"Поиск провайдеров","noProvidersFound":"По вашему запросу провайдеры не найдены.","selectProvider":"Выберите провайдера","selectProviderDescription":"Выберите провайдера для просмотра его подключения и каталога моделей.","addNew":"Добавить новый плагин","upload":"Загрузить плагин","addJson":"Добавить JSON","uploading":"Загрузка...","jsonPlaceholder":"Вставьте JSON-конфигурацию плагина...","install":"Установить плагин","noPlugins":"Плагины не установлены","noPluginsDescription":"Добавьте плагин для расширения функциональности","loading":"Загрузка плагинов...","installed":"Установленные плагины","active":"Активные плагины","activeLabel":"Активен","inactive":"Неактивен","activate":"Активировать","deactivate":"Деактивировать","models":"моделей","apiKeySet":"API-ключ установлен","apiKeyConfiguration":"Настройка API-ключа","apiKeyDescription":"Сохранить личный API-ключ для {{name}}.","apiKeyEnvAlternative":"Или установите переменную","environmentVariable":"переменную окружения","apiKeyConfigured":"API-ключ настроен","apiKeyPlaceholder":"Введите ваш API-ключ...","saveApiKey":"Сохранить API-ключ","showApiKey":"Показать API-ключ","hideApiKey":"Скрыть API-ключ","configure":"Настроить","providerSettings":"Настройки провайдера","status":"Статус","defaultEndpoint":"Конечная точка по умолчанию","modelCatalog":"Каталог моделей","modelCatalogDescription":"Обнаруженные и настроенные модели для этого провайдера и его возможности.","refreshModels":"Обновить модели","noModelsConfigured":"Для этого провайдера не настроено ни одной модели.","modelId":"ID модели","capabilities":"Возможности","modelCatalogUpdated":"Каталог моделей обновлен: {{count}} моделей.","modelCatalogUnchanged":"Каталог моделей уже актуален.","modelCatalogNeedsApiKey":"Добавьте действительный API-ключ для этого провайдера, чтобы загрузить его актуальный список моделей.","modelCatalogUnavailable":"Не удалось загрузить список моделей провайдера.","modelCatalogRefreshFailed":"Не удалось обновить каталог моделей","invalidJson":"Недопустимый формат JSON","capability":{"chat":"Чат","embedding":"Эмбеддинг","image":"Изображение","speech":"Речь","transcription":"Транскрипция"},"exportPlugin":"Экспортировать плагин","deletePlugin":"Удалить плагин","apiKey":{"title":"API-ключ","placeholder":"Введите API-ключ","save":"Сохранить ключ","remove":"Удалить ключ","configured":"API-ключ настроен","notConfigured":"Требуется API-ключ","saved":"API-ключ успешно сохранён","removed":"API-ключ удалён","saveFailed":"Не удалось сохранить API-ключ","removeFailed":"Не удалось удалить API-ключ","enterKey":"Пожалуйста, введите API-ключ"},"variables":"Variables"},"generation":{"title":"Параметры генерации","description":"Настройте, как ИИ генерирует ответы","scopeLabel":"Применяется к","scopeAll":"Всем моделям","scopeModel":"Только {{model}}","scopeAllHint":"Значения, которые использует каждая модель, если у неё нет своих.","scopeModelHint":"Сохраняется только для этой модели и имеет приоритет над общими значениями.","advancedSettings":"Расширенные настройки генерации","advancedSettingsDescription":"Семплинг, лимиты токенов, контекст, штрафы и стоп-последовательности","coreParameters":"Основные параметры","temperature":"Температура","temperatureDescription":"Контролирует случайность. Низкие значения — более точные, высокие — более творческие.","topP":"Top P","topPDescription":"Контролирует разнообразие через nucleus sampling. Низкие значения фокусируются на вероятных токенах.","topK":"Top K","topKDescription":"Ограничивает выбор токенов до K наиболее вероятных. Установите 0 для отключения.","minP":"Min P","minPDescription":"Минимальный порог вероятности для выбора токена.","generationControl":"Управление генерацией","maxTokens":"Макс. токенов","maxTokensDescription":"Максимальное количество токенов для генерации в ответе.","repeatPenalty":"Штраф за повторение","repeatPenaltyDescription":"Штрафует повторяющиеся токены. Высокие значения уменьшают повторения.","contextLength":"Длина контекста","contextLengthDescription":"Максимальный размер окна контекста для разговоров.","seed":"Seed","optional":"необязательно","random":"Случайный","seedDescription":"Установите конкретный seed для воспроизводимых результатов.","advancedOptions":"Расширенные параметры","presencePenalty":"Штраф за присутствие","presencePenaltyDescription":"Штрафует токены, появляющиеся в контексте.","frequencyPenalty":"Штраф за частоту","frequencyPenaltyDescription":"Штрафует часто используемые токены.","stopSequences":"Стоп-последовательности","commaSeparated":"через запятую","stopSequencesDescription":"Пользовательские токены, которые остановят генерацию при обнаружении.","resetDefaults":"Сбросить по умолчанию","saveOptions":"Сохранить параметры","saveSuccess":"Параметры генерации успешно обновлены","saveFailed":"Не удалось обновить параметры генерации: {{error}}","modelDefaultsLoaded":"Загружены настройки, рекомендованные моделью {{model}}","resetSuccess":"Параметры генерации сброшены до значений по умолчанию","resetFailed":"Не удалось сбросить параметры генерации: {{error}}","embeddingSettings":"Настройки встраивания","enableEmbeddings":"Включить встраивание документов","thinking":"Рассуждение","thinkingDescription":"Уровень рассуждения по умолчанию для ответов. Каждый чат может его изменить.","thinkingLevels":{"default":"По умолчанию у модели","defaultWith":"По умолчанию у модели ({{level}})","off":"Выключено","on":"Включено","low":"Низкий","medium":"Средний","high":"Высокий"}},"documents":{"title":"Настройки документов","embeddings":{"title":"Встраивание","enable":"Включить встраивание документов","model":"Модель встраивания","modelDescription":"Выберите модель для встраивания документов","chunkSize":"Размер фрагмента","chunkSizeInTokens":"(в токенах)","chunkSizeDescription":"Размер текстовых фрагментов для встраивания","chunkOverlap":"Перекрытие фрагментов","chunkOverlapInTokens":"(в токенах)","chunkOverlapDescription":"Перекрытие между последовательными фрагментами","similarityThreshold":"Порог сходства","similarityDescription":"Минимальный балл сходства для включения результатов","status":"Статус встраивания","statusLabel":"Статус","available":"Доступно","unavailable":"Недоступно","chunksWithEmbeddings":"Фрагментов со встраиванием","coverage":"Покрытие","regenerate":"Перегенерировать встраивания","regenerating":"Перегенерация...","regenerateSuccess":"Встраивания повторно созданы для {{count}} документов","regeneratePartialSuccess":"Обработано документов: {{count}}; пропущено: {{skipped}}","regenerateFailed":"Не удалось повторно создать встраивания: {{error}}","saveSuccess":"Настройки встраиваний успешно обновлены","saveFailed":"Не удалось обновить настройки встраиваний: {{error}}","resetSuccess":"Настройки встраиваний сброшены до значений по умолчанию","resetFailed":"Не удалось сбросить настройки встраиваний: {{error}}"},"collections":{"title":"Коллекции знаний","description":"Группируйте документы в коллекции и прикрепляйте их к любому чату.","namePlaceholder":"Название коллекции","create":"Создать","none":"Без коллекции","deleteConfirm":"Удалить эту коллекцию? Документы внутри сохранятся.","createFailed":"Не удалось создать коллекцию","deleteFailed":"Не удалось удалить коллекцию","assignFailed":"Не удалось переместить документ","share":"Поделиться коллекцией","shared":"общая"},"library":{"title":"Загруженные документы","description":"Документы, доступные как контекст чата. Документ, загруженный в чате, остаётся в своей беседе; документ без чата и коллекции участвует в каждой беседе.","empty":"Документы ещё не загружены.","chatScope":"Один чат","everyChatScope":"Все чаты","deleteConfirm":"Удалить «{{name}}»? Он исчезнет из всех чатов.","deleteFailed":"Не удалось удалить документ","extractionFailed":"Ошибка извлечения","extractionQueued":"Извлечение…"}},"tts":{"title":"Синтез речи","description":"Настройте параметры синтеза речи для озвучивания сообщений","loadingProviders":"Загрузка провайдеров TTS...","noProviders":"Провайдеры TTS отсутствуют","noProvidersDescription":"Настройте плагин с поддержкой TTS для включения синтеза речи","enable":"Включить TTS","enableDescription":"Разрешить синтез речи для сообщений ассистента","autoPlay":"Автовоспроизведение ответов","autoPlayDescription":"Автоматически озвучивать новые сообщения ассистента","streamSentences":"Естественное пакетное воспроизведение","streamSentencesDescription":"Заранее создавать несколько пакетов с учётом фраз и воспроизводить их как один непрерывный ответ.","voiceConfiguration":"Настройка голоса","model":"Модель TTS","modelDescription":"Выберите модель для синтеза речи","voice":"Голос","selectVoice":"Выберите голос","voiceDescription":"Выберите голос для синтеза речи","providerDefaultVoice":"Эта модель использует голос по умолчанию, если при создании речи не указана эталонная запись.","voiceCloningAvailable":"Доступно клонирование голоса","voiceCloningAvailableDescription":"Используйте раздел «Представить → Аудио», чтобы создать речь из эталонной записи, сделанной с согласия говорящего, и её точной расшифровки. При желании запись можно сохранить как голос для повторного использования.","savedVoiceOption":"{{name}} (сохранённый голос)","savedVoices":"Сохранённые голоса","loadingSavedVoices":"Загрузка сохранённых голосов…","deleteSavedVoice":"Удалить сохранённый голос {{name}}","deleteSavedVoiceConfirm":"Удалить сохранённый голос «{{name}}»? Его эталонная запись и расшифровка будут удалены.","savedVoiceDeleted":"Сохранённый голос удалён","savedVoicePreferenceCleanupFailed":"Сохранённый голос удалён, но настройки речи не удалось сбросить","savedVoiceDeleteFailed":"Не удалось удалить сохранённый голос","speed":"Скорость","speedSlow":"0.5x","speedNormal":"1.0x","speedFast":"2.0x","availableProviders":"Доступные провайдеры","models":"моделей","test":"Тест","testing":"Тестирование...","stop":"Стоп","consentRevoked":"Согласие отозвано","consentExpired":"Согласие истекло","transferCount":"отправлено поставщику {{total}} раз","consentExpires":"согласие до {{date}}","revokeSavedVoice":"Отозвать согласие для {{name}}","revokeSavedVoiceConfirm":"Отозвать согласие для «{{name}}»? Сохранённый голос больше нельзя будет использовать, но запись о согласии сохранится.","savedVoiceRevoked":"Согласие отозвано","savedVoiceRevokeFailed":"Не удалось отозвать согласие","savedVoiceUnavailableCleanupFailed":"Сохранённый голос недоступен, и его не удалось удалить из настроек речи","saveSuccess":"Настройки TTS успешно сохранены","saveFailed":"Не удалось сохранить настройки TTS: {{error}}","testFailed":"Ошибка проверки TTS: {{error}}"},"imageGen":{"title":"Генерация изображений","description":"Настройте параметры и провайдеров генерации изображений","loadingProviders":"Загрузка провайдеров генерации изображений...","noProviders":"Провайдеры генерации изображений отсутствуют","noProvidersDescription":"Настройте плагин с поддержкой генерации изображений","enable":"Включить генерацию изображений","enableDescription":"Разрешить генерацию изображений ИИ в разговорах","configuration":"Конфигурация","model":"Модель","modelDescription":"Выберите модель для генерации изображений","size":"Размер","sizeDescription":"Разрешение генерируемых изображений","quality":"Качество","qualityDescription":"Уровень качества генерируемых изображений","style":"Стиль","styleDescription":"Пресет стиля для генерируемых изображений","availableProviders":"Доступные провайдеры","models":"моделей","saveSuccess":"Настройки генерации изображений успешно сохранены","saveFailed":"Не удалось сохранить настройки генерации изображений: {{error}}"},"data":{"title":"Управление данными","export":"Экспорт данных","exportDescription":"Скачайте переносимый архив настроек, папок чатов, сессий и сообщений, заметок, коллекций знаний и извлечённого текста документов.","archiveScopeV3":"Включает настройки, чаты, папки, заметки, коллекции знаний и извлечённый текст документов. Не включает учётные записи и секреты, биометрически клонированные голоса, созданные медиафайлы, персоны и память, а также данные или тома Work.","exportAll":"Экспортировать все данные","import":"Импорт данных","importDescription":"Импортируйте данные из предыдущего экспорта.","importData":"Импортировать данные","importing":"Импорт...","clearSessions":"Очистить сессии","clearSessionsDescription":"Удалить все сессии чата. Это действие нельзя отменить.","clearAll":"Очистить всё","clearing":"Очистка...","importOptions":"Параметры импорта","importOptionsDescription":"Выберите, как обрабатывать существующие данные","validatingArchive":"Проверка архива и расчёт изменений…","archiveValidationFailed":"Не удалось проверить архив","preflightReport":"Предпросмотр импорта","preflightIncoming":"{{folders}} папок · {{sessions}} чатов · {{messages}} сообщений · {{notes}} заметок · {{collections}} коллекций · {{documents}} документов · {{chunks}} фрагментов","preflightRemappedIds":"{{count}} идентификаторов будут переназначены для защиты данных другой учётной записи.","skipDuplicates":"Пропускать дубликаты","overwrite":"Перезаписывать существующие","importResults":"Результаты импорта","preferences":"Настройки","imported":"Импортировано","failed":"Ошибка","sessions":"Сессии","sessionFolders":"Папки сессий","notes":"Заметки","knowledgeCollections":"Коллекции знаний","importedLabel":"импортировано","overwrittenLabel":"перезаписано","skipped":"пропущено","toCreate":"будет создано","toOverwrite":"будет перезаписано","toSkip":"будет пропущено","documents":"Документы","warnings":"Предупреждения","refreshAfterImportFailed":"Данные импортированы, но некоторые представления не удалось обновить. Перезагрузите Libre WebUI, чтобы увидеть все изменения.","exportSuccess":"Переносимый архив данных экспортирован","exportFailed":"Не удалось экспортировать данные","importSuccess":"Переносимый архив данных импортирован","importFailed":"Не удалось импортировать данные","archiveErrors":{"invalidJson":"Переносимый архив не содержит допустимый JSON.","objectRequired":"Переносимый архив должен содержать объект JSON.","unsupportedVersion":"Версия переносимого архива {{version}} не поддерживается.","unrecognized":"Этот файл не является переносимым архивом Libre WebUI."},"errors":"Ошибки","archivedChats":{"title":"Архивированные чаты","empty":"Нет архивированных чатов","unarchive":"Восстановить"}},"about":{"title":"О программе","versionLabel":"Версия","ollama":{"title":"Статус Ollama","version":"Версия","healthy":"Работает","unhealthy":"Не работает"},"stats":{"models":"Модели","sessions":"Сессии"},"features":{"privacy":{"title":"Конфиденциальность прежде всего","description":"Ваши данные остаются на вашем устройстве"},"openSource":{"title":"Открытый исходный код","description":"Бесплатное программное обеспечение с открытым исходным кодом"},"localInference":{"title":"Локальный вывод","description":"Запускайте модели ИИ локально с Ollama"}},"openSourceBy":"Открытый исходный код от {{company}}","links":{"title":"Ссылки","github":"GitHub","githubDescription":"Просмотр исходного кода и участие","website":"Веб-сайт","websiteDescription":"Посетите наш веб-сайт","documentation":"Документация","reportIssue":"Сообщить о проблеме","reportIssueDescription":"Отчёты об ошибках и запросы функций","documentationDescription":"Руководства, учебники и справочник API","forgejo":"Зеркало Forgejo","forgejoDescription":"Самостоятельно размещённый репозиторий Forgejo","sponsor":"Поддержать","sponsorDescription":"Помогите финансировать проект","star":"Звезда на GitHub","starDescription":"Звезда помогает другим найти проект"},"version":"Версия {{version}}","updates":{"checking":"Проверка обновлений…","upToDate":"У вас последняя версия","updateAvailable":"Доступна версия {{version}}","ahead":"Вы опережаете последний релиз ({{version}})","checkFailed":"Не удалось проверить обновления","viewChangelog":"Список изменений"}},"groups":{"general":"Основные","chat":"Чат","media":"Речь и изображения","connections":"Подключения","admin":"Администрирование"},"search":{"title":"Веб-поиск","description":"Ищите в интернете через собственный экземпляр SearXNG. После включения в чате появляется переключатель поиска, а задачи Work с доступом к сети могут искать.","enableLabel":"Включить веб-поиск","enableDescription":"Предоставить веб-поиск чатам и задачам Work. Поиск выполняется на сервере через настроенный экземпляр.","urlLabel":"URL SearXNG","urlDescription":"Базовый URL экземпляра SearXNG, доступный с сервера. Прилагаемый приватный деплой-стек предоставляет http://searxng:8080.","maxResultsLabel":"Результатов на поиск","maxResultsDescription":"Сколько результатов попадает в ответ или вызов инструмента, 1-100.","maxResultsInvalid":"Количество результатов должно быть от 1 до 100.","safeSearchLabel":"Безопасный поиск","safeSearchDescription":"Просить движок фильтровать откровенные результаты.","test":"Проверить соединение","testing":"Проверка…","testOk":"Поиск работает — получено {{results}} результатов","testFailed":"Проверка поиска не удалась","save":"Сохранить","saved":"Настройки поиска сохранены","saveFailed":"Не удалось сохранить настройки поиска"},"compaction":{"title":"Сжатие контекста","description":"Когда разговор превышает порог токенов, сервер суммирует его старые сообщения и оставляет дословно только самые последние. Действует для всех пользователей этого сервера.","thresholdLabel":"Порог токенов","thresholdDescription":"Оценочное число токенов контекста, выше которого старая история суммируется, 500-1 000 000.","thresholdInvalid":"Порог токенов должен быть от 500 до 1 000 000.","keepRecentLabel":"Сохраняемые последние сообщения","keepRecentDescription":"Сколько последних сообщений всегда остаются дословно, 2-200.","keepRecentInvalid":"Число сохраняемых последних сообщений должно быть от 2 до 200.","modelLabel":"Модель сжатия","modelDescription":"Модель, которая пишет сводки. Если ничего не выбрано, используется модель самого сеанса.","sessionModelOption":"Использовать модель сеанса","promptLabel":"Собственный промпт для сводки","promptPlaceholder":"Оставьте пустым, чтобы использовать встроенный промпт","promptDescription":"Переменные шаблона {{previousSummaryVariable}} и {{messagesVariable}} заменяются предыдущей сводкой и суммируемыми сообщениями.","saved":"Настройки сжатия сохранены","saveFailed":"Не удалось сохранить настройки сжатия","loadFailed":"Не удалось загрузить настройки сжатия"},"sessions":{"title":"Сеансы","description":"Все устройства, где выполнен вход в этот аккаунт. Выход из сеанса вступает в силу немедленно; повторный вход восстанавливает доступ.","signOutOthers":"Выйти из других сеансов","signingOutOthers":"Выход…","signOut":"Выйти","signingOut":"Выход…","revoked":"Сеанс завершён.","revokeFailed":"Не удалось завершить сеанс.","othersRevoked":"Завершено других сеансов: {{count}}","loadFailed":"Не удалось загрузить сеансы.","empty":"Сеансы не найдены.","current":"Текущий сеанс","revokedBadge":"Завершён","unknownDevice":"Неизвестное устройство","createdAt":"Вход выполнен","lastSeenAt":"Последняя активность","expiresAt":"Истекает"},"apiKeys":{"title":"API-ключи","description":"Токены с ограниченными областями действия для скриптов и интеграций. Каждый ключ имеет доступ только к выбранным областям.","newKeyTitle":"Ваш новый API-ключ","copy":"Копировать","copied":"Скопировано в буфер обмена.","copyFailed":"Не удалось скопировать.","showOnceWarning":"Скопируйте его сейчас: он больше не будет показан.","dismiss":"Готово","createTitle":"Создать ключ","nameLabel":"Название","namePlaceholder":"напр. CI-конвейер","nameRequired":"Укажите название ключа.","expiryLabel":"Срок действия в днях (необязательно)","expiryPlaceholder":"Бессрочно","expiryInvalid":"Срок действия должен быть целым числом дней.","scopesLabel":"Области действия","scopesRequired":"Выберите хотя бы одну область действия.","create":"Создать ключ","creating":"Создание…","created":"API-ключ создан.","createFailed":"Не удалось создать API-ключ.","revoke":"Отозвать","revoking":"Отзыв…","revoked":"API-ключ отозван.","revokeFailed":"Не удалось отозвать API-ключ.","revokedBadge":"Отозван","loadFailed":"Не удалось загрузить API-ключи.","empty":"API-ключей пока нет.","createdAt":"Создан","lastUsedAt":"Последнее использование","expiresAt":"Истекает","neverExpires":"Бессрочно"},"notifications":{"title":"Уведомления","description":"Как этот браузер узнаёт об упоминаниях, общих ресурсах, напоминаниях и завершённой работе.","pushTitle":"Уведомления браузера","pushHint":"Показывать системные уведомления с этого устройства, даже когда вкладка в фоне.","enabled":"Уведомления браузера включены на этом устройстве.","disabled":"Уведомления браузера выключены на этом устройстве.","enableFailed":"Не удалось включить уведомления браузера.","permissionDenied":"Уведомления заблокированы в настройках браузера для этого сайта.","unsupported":"Этот браузер не поддерживает push-уведомления.","workerMissing":"Для push нужна установленная версия приложения. Перезагрузите продакшен-приложение и повторите.","deviceNote":"Уведомления привязаны к устройству. Выход из сеанса также удаляет его push-регистрацию.","emailTitle":"Уведомления по почте","emailHint":"Сообщения приходят на {{address}}.","emailLoading":"Проверяем, доступна ли почта…","emailUnavailable":"Администратор ещё не настроил сервер исходящей почты.","emailNoAddress":"У вашей учётной записи нет адреса электронной почты. Попросите администратора добавить его в разделе «Управление пользователями».","emailLoadFailed":"Не удалось проверить доступность почты.","emailMentions":"Упоминания в каналах","emailMentionsHint":"Присылать письмо, когда кто-то упоминает меня в канале.","emailAutomations":"Результаты автоматизаций","emailAutomationsHint":"Присылать письмо с результатом каждого запуска автоматизации — успешного или нет."}}`),models:{title:`Модели`,subtitle:`Загружайте, управляйте и отслеживайте ваши модели Ollama`,installed:`Установленные модели`,available:`Доступные модели`,pull:`Загрузить модель`,pulling:`Загрузка...`,delete:`Удалить модель`,deleting:`Удаление...`,size:`Размер`,modified:`Изменено`,family:`Семейство`,parameters:`Параметры`,quantization:`Квантование`,noModels:`Модели не установлены`,pullFirst:`Загрузите модель, чтобы начать`,noModelsFound:`Модели не найдены`},personas:{title:`Персоны`,create:`Создать персону`,edit:`Редактировать персону`,delete:`Удалить персону`,name:`Имя`,description:`Описание`,systemPrompt:`Системный промпт`,model:`Модель`,avatar:`Аватар`,background:`Фон`,noPersonas:`Персоны не созданы`,createFirst:`Создайте вашу первую персону для настройки опыта общения`},gallery:{title:`Галерея`,subtitle:`Ваша галерея изображений, созданных ИИ`,imageCount:`{{count}} изображений`,generate:`Создать изображение`,generateDescription:`Создавайте изображения с помощью ИИ`,generating:`Создание...`,prompt:`Промпт`,promptPlaceholder:`Опишите изображение, которое хотите создать...`,noImages:`Изображения ещё не созданы`,download:`Скачать`,delete:`Удалить`,regenerate:`Пересоздать`,model:`Модель`,size:`Размер`,quality:`Качество`,created:`Создано`},errors:{generic:`Произошла ошибка`,network:`Сетевая ошибка. Проверьте подключение.`,unauthorized:`У вас нет прав для выполнения этого действия.`,notFound:`Запрошенный ресурс не найден.`,serverError:`Ошибка сервера. Попробуйте позже.`,validation:`Проверьте введённые данные и попробуйте снова.`},keyboard:{title:`Горячие клавиши`,toggleSidebar:`Переключить боковую панель`,openSettings:`Открыть настройки`,toggleDarkMode:`Переключить тёмный режим`,showShortcuts:`Показать горячие клавиши`,closeModals:`Закрыть окна`,groups:{navigation:`Навигация`,general:`Общие`,chat:`Чат`,workspace:`Рабочая область`},actions:{sendMessage:`Отправить сообщение`,newLine:`Новая строка в сообщении`,saveEdit:`Сохранить изменённое сообщение`,cancelEdit:`Отменить редактирование`,saveFile:`Сохранить файл`,formatCode:`Форматировать код`},description:`Все сочетания клавиш, доступные в Libre WebUI.`,newChat:`Новый чат`,newWork:`Новая сессия Work`,openPalette:`Открыть палитру команд`},modelDownload:{success:`Модель {{name}} загружена`,failed:`Не удалось загрузить: {{error}}`,startFailed:`Не удалось начать загрузку`,cancelled:`Загрузка отменена`},modelTools:{toasts:{fetchInfoFailed:`Не удалось получить информацию`,pushSuccess:`Модель отправлена`,createSuccess:`Модель создана`,copySuccess:`Модель скопирована`,embeddingsSuccess:`Встраивания созданы (см. консоль)`,failed:`Не удалось`,unknownError:`Неизвестная ошибка`}},modelManager:{title:`Модели`,loading:`Загрузка моделей...`,systemStatus:{online:`Ollama онлайн`,offline:`Ollama офлайн`,models:`модель`,models_plural:`моделей`,running:`запущено`,vram:`VRAM`},sections:{pull:`Загрузить новую модель`,library:`Обзор библиотеки`,huggingface:`HuggingFace Hub`,running:`Запущенные модели`,local:`Локальные модели`,advanced:`Расширенные действия`,catalog:`Каталог моделей`},catalog:{searchPlaceholder:`Искать модели по названию или провайдеру...`,noModels:`Моделей пока нет.`,empty:`Ни одна модель не соответствует вашему запросу.`,providerOllama:`Ollama`,hidden:`Скрыта`,visibilityFailed:`Не удалось изменить видимость модели.`,filterAll:`Все модели`,filterLocal:`Локальные`,filterProviders:`Провайдеры`,filterHidden:`Скрытые`,enableAll:`Включить показанные`,disableAll:`Отключить показанные`,rename:`Изменить название и картинку`,setPicture:`Задать картинку`,clearPicture:`Удалить картинку`,pictureInvalid:`Выберите файл изображения.`,pictureTooLarge:`Картинки должны быть меньше 192 КБ.`,saving:`Сохранение…`,hide:`Скрыть от пользователей`,show:`Показать пользователям`,star:`Отметить {{name}} звездой`,unstar:`Снять звезду с {{name}}`},pull:{placeholder:`Введите название модели (напр., llama3.2:3b, deepseek-r1:14b)`,button:`Загрузить`,cancel:`Отмена`,popular:`Популярные модели:`,browseAll:`Просмотреть все модели на ollama.com`,success:`Модель {{name}} успешно загружена`,cancelled:`Загрузка модели отменена`,failed:`Не удалось загрузить модель`,enterName:`Пожалуйста, введите название модели`,restricted:`Установка моделей в этом экземпляре доступна только администраторам.`},progress:{starting:`Инициализация...`,pulling:`Загрузка модели...`,pullingLayer:`загрузка`,verifying:`Проверка целостности...`,verifyingDigest:`проверка sha256 дайджеста`,writing:`Запись манифеста...`,cleaning:`Очистка...`},library:{available:`доступно`,search:`Поиск моделей...`,noResults:`Модели не найдены по вашим критериям`,installed:`Установлено`,more:`+{{count}} ещё`,refresh:`Обновить библиотеку`},huggingface:{browseAll:`Смотреть всё на HuggingFace`,checkingGguf:`Поиск GGUF-файлов...`,noGgufAvailable:`Нет доступных GGUF-файлов для прямой загрузки в Ollama`,ggufFilesCount:`GGUF-файлы ({{count}}) - Загрузить напрямую в Ollama`,noModelsFound:`Модели не найдены`,noResults:`Модели не найдены. Попробуйте изменить поиск или фильтры.`,browseAllLink:`Смотреть всё`,search:`Поиск моделей HuggingFace...`,by:`от`,gated:`Ограниченный доступ`,viewOnHF:`Открыть на HuggingFace`,sortDownloads:`Загрузки`,sortLikes:`Лайки`,sortRecent:`Недавние`,taskTextGeneration:`Генерация текста`,taskTextToSpeech:`Текст в речь`,taskTextToImage:`Текст в изображение`,taskSpeechRecognition:`Распознавание речи`,tasks:{textGen:`Генерация текста`,tts:`Текст в речь`,image:`Текст в изображение`,stt:`Распознавание речи`},sort:{downloads:`Самые загружаемые`,likes:`Самые популярные`,recent:`Недавно обновлённые`}},local:{noModels:`Модели ещё не установлены`,pullToStart:`Загрузите модель выше, чтобы начать`,installed:`установлено`,running:`Запущено`,info:`Инфо`,copy:`Копировать`,delete:`Удалить`,deleteConfirm:`Вы уверены, что хотите удалить модель "{{name}}"?`,deleteSuccess:`Модель {{name}} успешно удалена`,deleteFailed:`Не удалось удалить модель`},advanced:{createModel:`Создать модель`,fromModelfile:`Из Modelfile`,copyModel:`Копировать модель`,duplicateExisting:`Дублировать существующую`,testEmbeddings:`Тест встраивания`,generateVectors:`Создать векторы`,healthCheck:`Проверка состояния`,testConnection:`Проверить соединение`,healthy:`Ollama работает нормально!`},modals:{details:{title:`Детали модели`,info:`Информация о модели`,family:`Семейство`,parameters:`Параметры`,quantization:`Квантование`,format:`Формат`,systemPrompt:`Системный промпт`,template:`Шаблон`,license:`Лицензия`,modelfile:`Modelfile`,noDetails:`Детали недоступны`},copy:{title:`Копировать модель`,source:`Исходная модель`,selectModel:`Выберите модель...`,newName:`Новое название модели`,placeholder:`напр., my-custom-model`,copying:`Копирование...`,button:`Копировать модель`,success:`Модель скопирована в {{name}}`,failed:`Не удалось скопировать модель`,enterBoth:`Пожалуйста, введите исходное и целевое названия`},create:{title:`Создать пользовательскую модель`,name:`Название модели`,namePlaceholder:`напр., my-assistant`,modelfile:`Modelfile`,modelfilePlaceholder:`FROM llama3.2
|
|
2
|
-
SYSTEM You are a helpful assistant.`,see:`См.`,docs:`Документация Modelfile`,docsLink:`для справки по синтаксису`,creating:`Создание...`,button:`Создать модель`,success:`Модель {{name}} успешно создана`,failed:`Не удалось создать модель`,enterBoth:`Пожалуйста, введите название модели и содержимое Modelfile`},embeddings:{title:`Тест встраивания`,model:`Модель встраивания`,selectModel:`Выберите модель...`,recommended:`Рекомендуется: nomic-embed-text, mxbai-embed-large`,input:`Входной текст`,placeholder:`Введите текст для создания встраивания...`,generating:`Создание...`,button:`Создать встраивание`,result:`Результат ({{count}} измерений)`,success:`Создан {{count}}-мерный вектор встраивания`,failed:`Не удалось создать встраивание`,enterBoth:`Пожалуйста, выберите модель и введите текст`}}},personaManager:{title:`Персоны`,subtitle:`Создавайте и управляйте персонами ИИ с пользовательскими личностями, памятью и поведением`,loading:`Загрузка персон...`,createButton:`Создать персону`,importExport:`Импорт/Экспорт`,stats:{title:`Ваши персоны`,count:`Создано {{count}} персона`,count_plural:`Создано {{count}} персон`},empty:{title:`Персон пока нет`,description:`Создайте вашу первую персону для персонализированного взаимодействия с ИИ`,button:`Создать вашу первую персону`},deleteConfirm:`Вы уверены, что хотите удалить "{{name}}"?`,deleteSuccess:`Персона "{{name}}" успешно удалена`,downloadSuccess:`Персона "{{name}}" успешно скачана`,failed:`Не удалось {{action}} персону`},personaForm:{title:{create:`Создать новую персону`,edit:`Редактировать персону`},subtitle:{create:`Создайте новую персону ИИ с пользовательской личностью, системой памяти и адаптивным обучением`,edit:`Настройте вашу персону ИИ с расширенной памятью, адаптивным обучением и интеллектуальными параметрами`},loading:`Загрузка формы...`,saved:`Сохранено`,tabs:{basic:`Основное`,parameters:`Параметры`,memory:`Память и обучение`,advanced:`Расширенное`,bindings:`Привязки`},basic:{name:`Имя`,namePlaceholder:`Введите имя персоны`,model:`Модель`,selectModel:`Выберите модель`,description:`Описание`,descriptionPlaceholder:`Опишите вашу персону...`,systemPrompt:`Системный промпт`,systemPromptPlaceholder:`Введите системный промпт, определяющий поведение вашей персоны...`,systemPromptHint:`Системный промпт определяет, как ваша персона будет себя вести и отвечать.`},parameters:{temperature:`Температура`,temperatureHint:`Контролирует креативность vs последовательность`,topP:`Top-P`,topPHint:`Контролирует разнообразие ответов`,topK:`Top-K`,topKHint:`Ограничивает словарь до top-k токенов`,contextWindow:`Окно контекста`,contextWindowHint:`Максимальная длина истории разговора`,maxTokens:`Макс. токенов`,maxTokensHint:`Максимальная длина ответа`,repeatPenalty:`Штраф за повторение`,repeatPenaltyHint:`Уменьшает повторяющиеся ответы`},memory:{title:`Система памяти`,subtitle:`Персона запоминает разговоры со временем`,enableHint:`Включите систему памяти, чтобы ваша персона запоминала разговоры и накапливала контекст со временем.`,loading:`Загрузка статуса памяти...`,noData:`Данных памяти пока нет`,memories:`Воспоминания`,mbUsed:`МБ использовано`,lastBackup:`Последний бэкап`,never:`Никогда`,maxMemories:`Максимум воспоминаний`,maxMemoriesHint:`Сколько воспоминаний может хранить эта персона`,retention:`Срок хранения памяти`,retentionHint:`Дней до очистки воспоминаний`,autoCleanup:`Автоочистка старых воспоминаний`,wipeAll:`Очистить всю память`,wipeCannot:`Это нельзя отменить`,wipeButton:`Очистить`,wiping:`Очистка...`,wipeConfirm:`Вы уверены, что хотите очистить всю память? Это нельзя отменить.`,wipeSuccess:`Очищено {{count}} воспоминаний`},learning:{title:`Адаптивное обучение`,subtitle:`Персона развивается на основе взаимодействий`,enableHint:`Включите адаптивное обучение, чтобы ваша персона развивалась и персонализировала ответы на основе ваших взаимодействий.`,speed:`Скорость обучения`,slow:`Медленно`,slowDesc:`Постепенные изменения`,balanced:`Сбалансировано`,balancedDesc:`Умеренный темп`,fast:`Быстро`,fastDesc:`Быстрая адаптация`,autoAdapt:`Автоадаптация к предпочтениям пользователя`,whatLearns:`Что изучает персона:`,conversationTone:`Тон разговора`,responseStyle:`Стиль ответов`,userPreferences:`Предпочтения пользователя`,topicInterests:`Интересующие темы`},advanced:{embeddingModel:`Модель встраивания`,embeddingHint:`Выберите модель для кодирования памяти и семантического поиска. Модели встраивания показаны первыми, затем другие доступные модели.`,noModels:`Модели не найдены`,embeddingModels:`Модели встраивания`,otherModels:`Другие модели`,installHint:`Установите модель встраивания:`,recommended:`Рекомендуется: nomic-embed-text, mxbai-embed-large, bge-m3, snowflake-arctic-embed`,aboutTitle:`О расширенных настройках`,aboutDescription:`Модель встраивания используется системой памяти для понимания семантического значения и поиска релевантных воспоминаний во время разговоров. Выберите модель, соответствующую вашему сценарию использования и доступным ресурсам.`},actions:{cancel:`Отмена`,save:`Сохранить`,saving:`Сохранение...`,saveClose:`Сохранить и закрыть`,create:`Создать`},success:{created:`Персона создана`,updated:`Персона обновлена`},error:{saveFailed:`Не удалось сохранить`},bindings:{toolServers:`Серверы инструментов`,toolServersHint:`Серверы, которые эта персона может вызывать. Если оставить пустым, предлагаются все серверы, к которым пользователь и так имеет доступ.`,noToolServers:`Вам недоступен ни один сервер инструментов.`,builtinTools:`Встроенные инструменты`,builtinToolsHint:`Инструменты, которые сервер реализует сам. Если оставить пустым, предлагаются все.`,noBuiltinTools:`Встроенные инструменты недоступны.`,builtin:{web_search:`Поиск в интернете`,search_documents:`Поиск по документам`,load_skill:`Загрузить навык`},skills:`Навыки`,skillsHint:`Навыки, которые модель может загружать, пока эта персона активна.`,noSkills:`Вы ещё не создали ни одного навыка.`,collections:`Коллекции знаний`,collectionsHint:`Коллекции документов, в которых эта персона может искать.`,noCollections:`Вы ещё не создали ни одной коллекции.`,prompt:`Промпт`,promptHint:`Промпт, с которого начинается каждый новый чат с этой персоной.`,noPrompt:`Без промпта`,version:`Ревизия привязок {{version}}`}},personaCard:{enhanced:`Улучшенная`,systemPrompt:`Системный промпт`,memories:`воспоминаний`,use:`Использовать`,editTooltip:`Редактировать персону`,downloadTooltip:`Скачать персону`,backup:`Бэкап`,exportDNA:`Экспорт ДНК`,wipeMemories:`Очистить память`,wipeConfirm:`Вы уверены, что хотите очистить всю память этой персоны? Это действие нельзя отменить.`,wipeSuccess:`Очищено {{count}} воспоминаний`,backupSuccess:`Бэкап персоны успешно скачан`,dnaSuccess:`ДНК персоны успешно экспортирована`,failed:`Не удалось {{action}}`,shareTooltip:`Поделиться этой персоной`},userManager:JSON.parse(`{"title":"Управление пользователями","subtitle":"Управление аккаунтами и правами пользователей","pageDescription":"Управляйте учетными записями пользователей, разрешениями и контролем доступа для вашего экземпляра Libre WebUI.","sections":{"users":"Пользователи","access":"Доступ и политики","security":"Безопасность","defaults":"Настройки по умолчанию"},"directory":{"title":"Активные учётные записи","allRoles":"Все роли","clearFilters":"Сбросить фильтры","results":"{{visible}} из {{total}} учётных записей","loadFailed":"Не удалось загрузить пользователей. Попробуйте ещё раз.","empty":"Активных учётных записей пока нет","editSelfRole":"Вы не можете изменить свою роль администратора.","deleteTitle":"Удалить пользователя"},"loading":"Загрузка пользователей...","createUser":"Создать пользователя","search":"Поиск пользователей...","noUsers":"Пользователи не найдены","noUsersMatching":"Пользователи по вашему запросу не найдены","columns":{"user":"Пользователь","email":"Эл. почта","role":"Роль","created":"Создан","actions":"Действия"},"roles":{"admin":"Администратор","user":"Пользователь"},"noEmail":"Нет эл. почты","deleteConfirm":"Вы уверены, что хотите удалить пользователя \\"{{name}}\\"?","deleteSuccess":"Пользователь успешно удалён","deleteFailed":"Не удалось удалить пользователя","cannotDeleteSelf":"Вы не можете удалить свой аккаунт","approval":{"title":"Ожидающие одобрения","description":"Проверяйте новые регистрации, прежде чем разрешить им доступ к этому экземпляру.","registered":"Зарегистрирован","activate":"Активировать аккаунт","reject":"Отклонить регистрацию","approved":"{{name}} теперь может войти.","failed":"Аккаунт не может быть одобрен.","notification":"{{count}} регистраций ожидают вашего одобрения.","notificationBadge":"{{count}} ожидающих одобрений пользователей"},"form":{"title":{"create":"Создать пользователя","edit":"Редактировать пользователя"},"username":"Имя пользователя","usernamePlaceholder":"Введите имя пользователя","email":"Эл. почта","emailPlaceholder":"Введите эл. почту (необязательно)","password":"Пароль","passwordPlaceholder":"Введите пароль","passwordHint":"Оставьте пустым, чтобы сохранить текущий пароль","role":"Роль","creating":"Создание...","updating":"Обновление...","createButton":"Создать пользователя","updateButton":"Обновить пользователя","createSuccess":"Пользователь успешно создан","updateSuccess":"Пользователь успешно обновлён","createFailed":"Не удалось создать пользователя","updateFailed":"Не удалось обновить пользователя"},"workAccess":{"title":"Доступ к Work","description":"Разрешить всем активным пользователям создавать и запускать задачи Work в изолированных песочницах. Администраторы всегда имеют доступ; рабочие пространства в папках хоста остаются только для администраторов.","saved":"Доступ к Work обновлён","saveFailed":"Не удалось обновить доступ к Work"},"workPolicies":{"title":"Политики Work","description":"Именованные пресеты среды (образ, лимиты, остановка при простое), под которыми создаются задачи. Пустые поля наследуют глобальные значения.","add":"Добавить политику","name":"Название","image":"Образ","memory":"Память","cpu":"CPU","pids":"Лимит PID","workspaceSize":"Размер рабочего пространства","idleMinutes":"Остановка при простое (минуты)","networkDefault":"Сеть по умолчанию","networkInherit":"Наследовать умолчание","networkOn":"Включена","networkOff":"Отключена","save":"Сохранить","cancel":"Отмена","edit":"Изменить политику","delete":"Удалить политику","deleteConfirm":"Удалить эту политику? Задачи, использующие её, вернутся к глобальным значениям.","empty":"Политик пока нет. Задачи используют глобальные настройки среды.","saved":"Политика Work сохранена","deleted":"Политика Work удалена","failed":"Не удалось сохранить политику Work","invalidNumber":"Лимит PID и остановка при простое должны быть числами.","guiEnabled":"Work Computer (GUI + браузер)","takeoverEnabled":"Разрешить перехват управления экраном","computerPreset":"Work Computer","computerPresetHint":"Для Work Computer нужен GUI-образ: соберите его из deploy/work-computer в репозитории и пометьте libre-work-computer:latest.","approvalsRequired":"Требовать одобрение для действий, изменяющих данные"},"modelAccess":{"title":"Загрузка моделей","description":"Разрешить всем активным пользователям загружать модели из Ollama и браузера Hugging Face. Администраторы всегда могут загружать модели.","saved":"Доступ к загрузке моделей обновлён","saveFailed":"Не удалось обновить доступ к загрузке моделей"},"webSearchAccess":{"title":"Веб-поиск","description":"Разрешить всем активным пользователям использовать веб-поиск в чатах и задачах Work. Администраторы всегда могут им пользоваться. Движок настраивается в Настройки > Поиск.","saved":"Доступ к веб-поиску обновлён","saveFailed":"Не удалось обновить доступ к веб-поиску"},"defaultTheme":{"title":"Тема по умолчанию","description":"Тема для страницы входа, новых учётных записей и браузеров, которые ещё не выбрали тему. Каждый по-прежнему может выбрать свою в настройках.","saved":"Тема по умолчанию обновлена","saveFailed":"Не удалось обновить тему по умолчанию"},"agentAccess":{"title":"Libre Claw","description":"Показывать администраторам рабочую область Libre Claw.","saved":"Доступ к агентам обновлён","saveFailed":"Не удалось обновить доступ к агентам","lockedByEnv":"Закреплено переменной окружения LIBRE_CLAW_ENABLED."},"groups":{"title":"Группы","description":"Объединяйте аккаунты в группы для управления общим доступом и проверяйте, что фактически может делать любой аккаунт.","newGroup":"Новая группа","nameLabel":"Название","nameRequired":"Укажите название группы.","descriptionLabel":"Описание (необязательно)","create":"Создать группу","creating":"Создание…","created":"Группа создана.","createFailed":"Не удалось создать группу.","deleted":"Группа удалена.","deleteFailed":"Не удалось удалить группу.","deleteGroup":"Удалить группу","loadFailed":"Не удалось загрузить группы.","empty":"Групп пока нет.","memberCount":"Участники: {{count}}","noMembers":"Участников пока нет.","addedAt":"Добавлен","addMember":"Добавить участника","add":"Добавить","selectUser":"Выберите пользователя…","memberAdded":"Участник добавлен.","memberAddFailed":"Не удалось добавить участника.","removeMember":"Удалить участника","memberRemoved":"Участник удалён.","memberRemoveFailed":"Не удалось удалить участника.","effectiveTitle":"Фактический доступ","effectiveDescription":"Выберите аккаунт, чтобы увидеть итоговый доступ с учётом роли, групп и разрешений.","accessLookupFailed":"Не удалось загрузить фактический доступ.","roleLabel":"Роль","statusLabel":"Статус","memberOf":"Группы","featuresLabel":"Доступ к функциям","grantsLabel":"Разрешения","grantVia":"через"},"audit":{"title":"Журнал аудита безопасности","description":"Недавние входы, проверки разрешений и административные изменения на этом экземпляре.","actionFilter":"Действие","actionPlaceholder":"напр. auth.login","resultFilter":"Результат","resultSuccess":"Успешно","resultDenied":"Отказано","resultFailure":"Ошибка","limitFilter":"Лимит","loadFailed":"Не удалось загрузить журнал аудита.","empty":"События аудита пока не зарегистрированы.","actor":"Инициатор","target":"Объект"},"tools":{"title":"Доступ к инструментам","description":"Разрешить всем вызывать серверы инструментов. Когда выключено, это могут только администраторы.","saved":"Доступ к инструментам обновлён","saveFailed":"Не удалось обновить доступ к инструментам.","lockedByEnv":"Заблокировано переменной окружения на этом сервере."},"voice":{"title":"Голосовой доступ","description":"Определяет, кто может использовать голосовые функции. Администраторы всегда имеют доступ.","lockedByEnv":"Закреплено переменной окружения","saved":"Голосовой доступ обновлён","saveFailed":"Не удалось обновить голосовой доступ","features":{"stt":"Речь в текст","tts":"Текст в речь","voiceMode":"Голосовой режим","voiceCloning":"Клонирование голоса"}},"mfaPolicy":{"title":"Политика двухфакторной аутентификации","description":"Должны ли аккаунты проходить второй шаг входа.","requireAll":"Требовать второй фактор от всех пользователей","requireAllHint":"Пользователи без второго фактора настроят его при следующем входе.","lockedByEnv":"Закреплено переменной MFA_REQUIRED_MODE.","saved":"Политика сохранена.","saveFailed":"Не удалось сохранить политику."},"mfaReset":"Сбросить второй фактор","mfaResetConfirm":"Удалить второй фактор пользователя {{name}}? Вход по паролю и повторная настройка останутся доступными.","mfaResetSuccess":"Второй фактор пользователя {{name}} удалён.","mfaResetNothing":"У {{name}} не было второго фактора.","mfaResetFailed":"Сброс не удался.","ollamaProvider":{"title":"Провайдер Ollama","description":"Когда отключено, приложение полностью прекращает проверку Ollama — ни проверок работоспособности, ни предупреждений. Эндпоинт может указывать на любой шлюз, совместимый с Ollama.","saved":"Настройки провайдера Ollama сохранены","saveFailed":"Не удалось сохранить настройки провайдера Ollama","baseUrlLabel":"URL эндпоинта Ollama"},"emailNotifications":{"title":"Уведомления по почте","description":"Сервер исходящей почты для уведомлений. Пользователи сами выбирают, какие уведомления приходят к ним в почту, в разделе «Настройки > Уведомления».","enabledToast":"Уведомления по почте включены.","disabledToast":"Уведомления по почте выключены.","loadFailed":"Не удалось загрузить настройки почты.","fromEnvironment":"Задано переменной окружения; сохраните значение здесь, чтобы переопределить его.","hostLabel":"SMTP-сервер","hostHint":"Имя хоста почтового сервера.","portLabel":"Порт","portHint":"Оставьте пустым, чтобы использовать значение по умолчанию для выбранного режима безопасности.","securityLabel":"Защита соединения","securityHint":"STARTTLS повышает защиту обычного соединения; TLS шифрует его с самого начала.","security":{"starttls":"STARTTLS (порт 587)","tls":"TLS (порт 465)","none":"Без шифрования (только для доверенной сети)"},"verifyLabel":"Проверять сертификат","verifyHint":"Отключайте только для ретранслятора с самоподписанным сертификатом.","usernameLabel":"Имя пользователя","usernameHint":"Оставьте пустым, если сервер принимает почту без входа.","passwordLabel":"Пароль","passwordHint":"Хранится в зашифрованном виде и больше никогда не показывается.","passwordStored":"Пароль сохранён. Введите новый, чтобы заменить его.","clearPassword":"Удалить сохранённый пароль","fromLabel":"Отправитель","fromHint":"Адрес «От кого», при желании с отображаемым именем.","appUrlLabel":"URL приложения","appUrlHint":"Используется для ссылок в письмах, например https://chat.example.com.","testRecipientLabel":"Получатель теста","testRecipientHint":"По умолчанию — ваш собственный адрес. Оставьте пустым, чтобы проверить только соединение.","test":"Отправить тест","testing":"Отправка…","testSent":"Тестовое сообщение отправлено на {{address}}.","testConnected":"Соединение с почтовым сервером установлено.","testFailed":"Тест отправки почты не удался.","saveBeforeTest":"Сохраните изменения перед тестированием.","save":"Сохранить","saving":"Сохранение…","saved":"Настройки почты сохранены.","saveFailed":"Не удалось сохранить настройки почты."},"cordisAccess":{"title":"Движок Cordis","description":"Предложить движок Cordis администраторам. Он выполняет инструменты с реальным доступом к файловой системе вне процесса утверждения инструментов Libre WebUI.","saved":"Доступ к Cordis обновлён","saveFailed":"Не удалось обновить доступ к Cordis","lockedByEnv":"Зафиксировано переменной среды LIBRE_CORDIS_ENABLED.","lockedByFile":"Зафиксировано features.enabled в cordis.config.yml."},"agentCliAccess":{"title":"Модели агентов CLI","description":"Администраторы могут использовать установленные Pi, OpenCode, Codex и Claude Code как модели чата. Они работают на хосте вне песочниц Work.","lockedByEnv":"Закреплено переменной окружения AGENT_CLI_MODELS_ENABLED."}}`),usageAnalytics:{eyebrow:`Администрирование`,title:`Использование провайдера`,description:`Отслеживайте запросы к моделям и использование провайдеров и агентов этого экземпляра.`,days:`{{count}} дней`,refresh:`Обновить статистику использования`,loadFailed:`Не удалось загрузить статистику использования провайдера.`,metrics:{calls:`Вызовы`,tokens:`Токены`},cards:{calls:`API-вызовы`,callsDetail:`Среди {{count}} активных пользователей`,tokens:`Заявленные токены`,tokensDetail:`Использование зафиксировано в {{count}} вызовах`,success:`Успешность`,successDetail:`{{count}} неудачных вызовов`,latency:`Средняя задержка`,latencyDetail:`Общее время провайдера`,coverage:`{{percent}}% вызовов содержат данные об использовании токенов`},activity:{title:`Потребление с течением времени`,callsDescription:`Ежедневные запросы по моделям`,tokensDescription:`Ежедневные данные о токенах по моделям`,chartLabel:`Ежедневный график {{metric}} провайдера`,compareHint:`Наведите указатель на модель или установите на ней фокус, чтобы проследить её линию. Выберите модель, чтобы сохранить выделение.`,showAll:`Показать все модели`,highlightModel:`Выделить {{model}}`,highlightedModel:`{{model}} выделена`,allModels:`Все модели`,exploreDay:`Изучить ежедневное использование`,topModels:`По умолчанию показаны 12 самых используемых моделей. Выберите любую модель ниже, чтобы проследить её отдельно.`,noTokens:`За этот период данные о токенах не поступали`,breakdownUnavailable:`Разбивка по моделям за этот период недоступна.`,peak:`День наибольшей активности`,dayTotal:`Итого за день`,loadingModel:`Загрузка {{model}}…`},models:{title:`Потребление по моделям`,description:`Модели с наибольшим трафиком за этот период.`,model:`Модель`,success:`Успех`,latency:`Задержка`,share:`Доля вызовов`,notCharted:`Выберите, чтобы загрузить эту модель на график`},providers:{title:`Трафик провайдеров и агентов`,description:`Количество запросов, надёжность и время ответа по провайдерам.`,share:`{{percent}}% вызовов`,failures:`Неудачных или отменённых: {{count}}`,models:`Модели: {{count}}`,noTokens:`Данные о токенах не поступали`},capabilities:{title:`Распределение возможностей`,characters:`{{count}} символов`,bytes:`{{count}} байт`,images:`{{count}} изображений`,jobs:`{{count}} видео-задач`,inputs:`{{count}} входных данных`,reportedTokens:`{{count}} сообщенных токенов`},empty:{title:`Вызовов провайдеров пока нет`,description:`Запросы появляются здесь после того, как провайдер или агент обработает чат, Work, эмбеддинги, изображения, речь, звук или видео.`},privacyNote:`Использование запросов к провайдерам и агентам регистрируется на сервере. Libre WebUI хранит провайдера, модель, время, статус и сообщенные счетчики — никогда не подсказки, ответы, конечные точки, учетные данные или тела ошибок провайдера. Итоги токенов включают только вызовы, где провайдер вернул метаданные использования.`,heatmap:{title:`Год активности`,description:`Ежедневные вызовы провайдеров за последний год, окрашенные по самой используемой модели каждого дня.`,calls:`вызовов`,noCalls:`Нет вызовов`,other:`Другие модели`,less:`Меньше`,more:`Больше`,yearTotal:`{{formatted}} вызовов за последний год`},agents:{title:`Агенты`,description:`Вызовы CLI-агентов и нативные запросы DSH. DSH с моделями Libre WebUI учитывается у поставщика модели.`,noCalls:`В этом периоде нет зарегистрированных вызовов`,unreported:`Токены не указаны`,topModels:`Самые используемые модели`,legacy:`Этот сервер не предоставляет полную разбивку по агентам. Доступные записи агентов показаны ниже.`}},systemPage:{eyebrow:`Администрирование`,title:`Система`,description:`Мониторинг машины и среды выполнения, на которой размещен этот экземпляр Libre WebUI.`,updated:`Обновлено {{date}}`,refresh:`Обновить системную информацию`,loadFailed:`Не удалось загрузить системную информацию.`,cards:{uptime:`Время работы хоста`,uptimeDetail:`Работает с {{date}}`,memory:`Использовано памяти`,memoryDetail:`{{used}} из {{total}}`,freeSpace:`Свободное место`,freeSpaceDetail:`{{label}} · {{total}} всего`,containers:`Запущенные контейнеры`,containersDetail:`{{total}} контейнер(ов), известных Docker`,dockerUnavailable:`Docker недоступен`,unavailable:`Недоступно`},host:{title:`Хост и среда выполнения`,description:`Операционная система, процессор и сведения о процессе Libre WebUI.`,container:`Среда выполнения контейнеров`,native:`Локальная среда выполнения`,hostname:`Имя хоста`,operatingSystem:`Операционная система`,processor:`Процессор`,logicalCpus:`логических CPU`,loadAverage:`Средняя нагрузка · 1 / 5 / 15 мин`,libreVersion:`Libre WebUI`,nodeVersion:`Node.js`,process:`Процесс`,workingDirectory:`Рабочий каталог`},memory:{title:`Память`,description:`Системная память, видимая средой выполнения, и использование памяти процессом приложения.`,usedOf:`{{used}} использовано из {{total}}`,free:`{{value}} свободной`,processRss:`RSS процесса`,heapUsed:`V8 heap использовано`,heapTotal:`V8 heap всего`,external:`Внешняя память`},storage:{title:`Хранилище`,description:`Доступное пространство для файловой системы среды выполнения и постоянных данных приложения.`,used:`{{value}} использовано`,free:`{{value}} свободной`,empty:`Информация о файловой системе недоступна в этой среде выполнения.`},docker:{title:`Docker`,description:`Статус Docker Engine только для чтения и сокращённый список контейнеров.`,connected:`Подключено`,unavailable:`Недоступно`,unavailableDetail:`Диагностика Docker Engine недоступна.`,socketStatus:`Локальный сокет: {{status}}`,mounted:`смонтирован`,notMounted:`не смонтирован`,running:`Запущенные`,stopped:`Остановленные`,paused:`Приостановленные`,total:`Всего`,version:`Версия`,host:`Хост`,architecture:`Архитектура`,cpus:`CPU`,memory:`Память`,container:`Контейнер`,image:`Образ`,state:`Состояние`,created:`Создан`,empty:`Docker подключен, и в данный момент нет ни одного контейнера в списке.`},network:{title:`Сеть`,description:`Видимые во время выполнения интерфейсы, адреса и счетчики трафика Linux.`,internal:`внутренний`,empty:`Среде выполнения приложения не видно ни одного сетевого интерфейса.`},securityNote:`Эта страница доступна только администраторам. Сервер возвращает только эксплуатационные сводки: он не раскрывает переменные среды, учетные данные, метки Docker, точки монтирования, команды контейнера или данные проверки. Когда Libre WebUI работает в контейнере, сведения о CPU и памяти на уровне хоста берутся из Docker Engine, если доступен его локальный сокет; остальные значения описывают среду выполнения приложения.`,work:{title:`Work`,description:`Песочницы всех пользователей`,access:`Доступ`,accessAdmins:`Только администраторы`,accessAllUsers:`Все пользователи`,runtimeAvailable:`Доступно`,runtimeUnavailable:`Недоступно`,activeRuntimes:`Активные среды`,pendingCleanups:`Ожидающие очистки`,orphans:`Осиротевшие контейнеры`,owner:`Владелец`,task:`Задача`,state:`Состояние`,preview:`Предпросмотр`,terminals:`Терминалы`,inUse:`Используется`,inUseNone:`Никто`,updated:`Обновлено`,lastRun:`Последний запуск`,noRun:`—`,stateRunning:`Выполняется`,stateStopped:`Остановлено`,stateStarting:`Запускается`,stateUnknown:`Неизвестно`,noTasks:`Задач Work пока нет.`,usageKinds:{command:`команда`,preview:`предпросмотр`,terminal:`терминал`,screen:`экран`},recovery:{title:`Восстановление`,description:`Песочницы, которые Work ещё очищает. Новые операции Work остаются заблокированными, пока среда выполнения не подтвердит, что каждая из них остановлена.`,container:`Контейнер`,task:`Задача`,reason:`Причина`,attempts:`Попытки`,lastError:`Последняя ошибка`,nextAttempt:`Следующая попытка`,retry:`Повторить сейчас`,retrying:`Повтор попытки…`,reasonStartup:`Выполняется при запуске`,reasonStopFailed:`Не удалось остановить`,reasonRuntimeUnreachable:`Среда выполнения недоступна`,reasonOrphan:`Нет записи о задаче`,notScheduled:`Не запланировано`,loadFailed:`Не удалось загрузить ожидающие очистки.`,retrySucceeded:`Очищено {{cleared}} из {{attempted}} ожидающих очисток.`,retryPending:`Всё ещё повторяем {{attempted}} ожидающих очисток.`,retryFailed:`Не удалось повторить ожидающие очистки.`}},recovery:{title:`Учения по восстановлению`,scheduleOn:`Запускается автоматически каждые {{hours}} ч — каждое учение создаёт резервную копию, восстанавливает её в изолированной среде и проверяет результат.`,scheduleOff:`Не запланировано — задайте RECOVERY_DRILL_INTERVAL_HOURS для автоматических учений.`,teamUnsupported:`Учения работают в одиночном профиле (SQLite); командный профиль использует координированный CLI резервного копирования.`,runNow:`Запустить учение`,running:`Выполняется…`,passed:`Учение по восстановлению пройдено.`,failed:`Учение по восстановлению не удалось.`,lastPassed:`Последнее пройденное`,restoreTime:`Время восстановления (RTO)`,drillSpacing:`Интервал учений (RPO)`,archiveSize:`Размер архива`,lastFailed:`Последнее учение не удалось {{date}}`,originManual:`Вручную`,originScheduled:`По расписанию`,columns:{when:`Когда`,origin:`Источник`,status:`Статус`,restore:`Восстановление`},status:{passed:`Пройдено`,failed:`Сбой`,running:`Выполняется`}}},chatHistory:{label:`История разговора`,jumpToTurn:`Перейти к реплике {{index}} из {{total}}`},chatMessage:{you:`Вы`,assistant:`Ассистент`,system:`Система`,conversationSummary:`Сводка беседы`,restoreCompacted:`Восстановить обобщённые сообщения`,restoreFailed:`Не удалось восстановить обобщённые сообщения`,copy:`Копировать`,copyMessage:`Копировать сообщение`,copied:`Скопировано!`,regenerate:`Пересоздать`,regenerateResponse:`Пересоздать ответ`,edit:`Редактировать`,editSystemMessage:`Редактировать системное сообщение`,saveChanges:`Сохранить изменения`,cancelEditing:`Отменить редактирование`,saveAndSubmit:`Сохранить и отправить`,goodResponse:`Хороший ответ`,badResponse:`Плохой ответ`,delete:`Удалить`,deleteConfirm:`Удалить это сообщение?`,branch:`Ветка`,speaking:`Озвучивание...`,speakMessage:`Озвучить сообщение`,stopSpeaking:`Остановить озвучивание`,showMore:`Показать больше`,showLess:`Показать меньше`,thinking:`Думает`,thoughtFor:`Думал {{duration}}`,hiddenLines:`Скрыто строк: {{count}}`,systemMessagePlaceholder:`Введите ваше системное сообщение...`,fullSizeImage:`Изображение в полном размере`,startConversation:`Начать разговор`,startConversationDescription:`Отправьте сообщение, чтобы начать общение с вашим ИИ-ассистентом. Задавайте вопросы, получайте помощь с кодом или ведите обычный разговор.`,scrollToBottom:`Прокрутить вниз`,newMessages:`Новые сообщения`,feedbackTags:{accuracy:`Точность`,style:`Стиль`,incomplete:`Неполный`,harmful:`Вредный`,formatting:`Форматирование`},feedbackComment:`Добавить комментарий…`},imageGallery:{title:`Галерея изображений`,noImages:`Изображений пока нет`,noImagesHint:`Создайте первое изображение с помощью панели справа`,delete:`Удалить`,download:`Скачать`,deleteConfirm:`Вы уверены, что хотите удалить это изображение?`,deleteSuccess:`Изображение удалено`,deleteFailed:`Не удалось удалить изображение`,downloadFailed:`Не удалось скачать изображение`,loadMore:`Загрузить ещё ({{current}} из {{total}})`,loadFailed:`Не удалось загрузить галерею`},imageGeneration:{title:`Создать изображение`,prompt:`Промпт`,promptPlaceholder:`Опишите изображение, которое хотите создать...`,model:`Модель`,selectModel:`Выберите модель`,noModels:`Модели генерации изображений недоступны`,configurePlugin:`Настройте плагин с поддержкой генерации изображений`,size:`Размер`,quality:`Качество`,style:`Стиль`,generate:`Создать`,generating:`Создание...`,success:`Изображение успешно создано`,failed:`Не удалось создать изображение`,enterPrompt:`Пожалуйста, введите промпт`,promptTooLong:`Промпт превышает максимальную длину в {{max}} символов`},mediaGeneration:{title:`Генерация медиа`,description:`Создавайте видео, звук, музыку или речь с помощью активированного провайдера медиа.`,image:`Изображение`,video:`Видео`,audio:`Аудио`,sound:`Звук`,speech:`Речь`,model:`Модель`,voice:`Голос или ID голоса`,cloneVoice:`Клонировать эталонный голос`,cloneVoiceDescription:`Создать эту речь по эталонной записи вместо использования предустановленного голоса.`,referenceAudio:`Эталонное аудио`,referenceTranscript:`Точная расшифровка эталонной записи`,referenceTranscriptPlaceholder:`Введите точно то, что произносится в эталонной записи…`,referenceAudioTooLarge:`Размер эталонного аудио не должен превышать {{max}}.`,cloneConsent:`Клонируйте голос только с разрешения говорящего. Для этой генерации запись отправляется выбранному поставщику и не сохраняется в Libre WebUI.`,saveVoiceProfile:`Сохранить как голос для повторного использования`,saveVoiceProfileDescription:`Надёжно сохраните эту эталонную запись и расшифровку. Libre WebUI отправляет их выбранному поставщику с каждой речевой партией, использующей этот голос.`,voiceProfileName:`Название сохранённого голоса`,voiceProfileNamePlaceholder:`Например, Мой голос`,voiceStorageConsent:`Я подтверждаю, что у меня есть разрешение говорящего клонировать и хранить этот голос. Эталонная запись будет храниться, пока я её не удалю.`,resolution:`Разрешение`,aspectRatio:`Соотношение сторон`,duration:`Длительность`,providerDefault:`По умолчанию у провайдера`,generateAudio:`Генерировать аудио вместе с видео, если поддерживается`,prompt:`Запрос`,text:`Текст для озвучивания`,videoPlaceholder:`Опишите сцену, движение, камеру и освещение...`,audioPlaceholder:`Введите текст, который должен озвучить голос...`,soundPlaceholder:`Опишите звук, музыку, атмосферу или желаемый голосовой ответ...`,generate:`Сгенерировать`,generating:`Генерация… это может занять несколько минут`,success:`Медиа сгенерировано и сохранено в Imagine`,successWithSavedVoice:`Медиафайл создан, и голос «{{name}}» теперь доступен в настройках речи`,failed:`Не удалось сгенерировать медиа`,loadFailed:`Не удалось загрузить провайдеров медиа`,noModels:`Нет доступных моделей {{kind}}. Сначала активируйте совместимый провайдер и сохраните его учетные данные.`,consentTtl:{label:`Срок действия согласия`,never:`Пока я его не отзову`,days30:`30 дней`,days90:`90 дней`,days365:`Один год`}},mediaGallery:{itemCount:`{{count}} элементов`,empty:`Сгенерированных медиа пока нет`,emptyHint:`Сгенерируйте изображение, видео или голосовой клип, и они появятся здесь.`,filters:{all:`Все`,image:`Изображения`,video:`Видео`,audio:`Аудио`}},errorBoundary:{title:`Что-то пошло не так`,description:`Произошла непредвиденная ошибка. Попробуйте обновить страницу.`,tryAgain:`Обновить страницу`,goHome:`На главную`,errorDetails:`Детали ошибки (Разработка)`},documents:{title:`Документы`,upload:`Загрузить документ`,uploading:`Загрузка...`,noDocuments:`Документы не загружены`,uploadHint:`Загрузите документы для использования в разговорах`,delete:`Удалить`,deleteConfirm:`Вы уверены, что хотите удалить этот документ?`,deleteSuccess:`Документ удалён`,deleteFailed:`Не удалось удалить документ`,uploadSuccess:`Документ успешно загружен`,uploadFailed:`Не удалось загрузить документ`,types:`Поддерживаются: PDF, TXT, MD, DOCX`,unsupportedFileType:`Этот тип файла не поддерживается`,fileSizeTooLarge:`Размер файла должен быть менее 10 МБ`,uploadSuccessWithName:`Документ "{{name}}" успешно загружен`,removeSuccess:`Документ успешно удалён`,removeFailed:`Не удалось удалить документ`,removeError:`Произошла ошибка при удалении документа`,clickToUpload:`Нажмите для загрузки`,orDragAndDrop:`или перетащите`,fileTypesAndSize:`Файлы PDF, Office, Markdown, HTML, код, CSV, изображения и аудио до 10 МБ`,uploadedDocuments:`Загруженные документы`,removeDocument:`Удалить документ`,fullContextToggle:`Отправлять документы целиком`,fullContextEstimate:`≈ {{tokens}} токенов`,fullContextTooLarge:`Прикреплённые документы превышают лимит полного контекста, поэтому использован поиск`,fullDocument:`Полный документ`},ttsButton:{speak:`Озвучить`,stop:`Стоп`,speaking:`Озвучивание...`,generateFailed:`Не удалось сгенерировать речь`,playbackFailed:`Ошибка воспроизведения аудио`,stopSpeaking:`Остановить озвучивание`,preparingSpeech:`Подготовка речи...`,generatingSpeech:`Генерация речи...`,bufferingSpeech:`Буферизация речи...`,enableAudio:`Включить звук и читать вслух`,enableAudioShort:`Включить звук`,readAloud:`Читать вслух`},artifacts:{title:`Артефакты`,code:`Код`,preview:`Предпросмотр`,copy:`Копировать код`,copied:`Скопировано!`,download:`Скачать`,expand:`Развернуть`,collapse:`Свернуть`,openInNewTab:`Открыть в новой вкладке`,invalidSvg:`Недопустимое содержимое SVG`,invalidJson:`Недопустимое содержимое JSON`,previewMode:`Режим предпросмотра`,codeMode:`Режим кода`,copyContent:`Копировать содержимое`,openInPanel:`Открыть в панели`,created:`Создано`,closePanelEsc:`Закрыть панель (Esc)`,copyButton:`Копировать`,dragEdgeToResize:`Перетащите край для изменения размера`,previewUnavailable:`Preview unavailable`,previewUnavailableDescription:`This artifact does not contain renderable preview content. Switch to code view to inspect the source.`,versionOf:`Версия {{current}} из {{total}}`,previousVersion:`Предыдущая версия`,nextVersion:`Следующая версия`},personaImportExport:{title:`Импорт и экспорт персон`,description:`Экспортируйте персоны для обмена или импортируйте персоны от других`,exportPersonas:`Экспорт персон`,importPersonas:`Импорт персон`,noPersonasToExport:`Нет персон для экспорта`,personasAvailable:`Доступно {{count}} персона`,personasAvailable_plural:`Доступно {{count}} персон`,exportAll:`Экспортировать всё`,uploadJsonFile:`Загрузить JSON-файл`,pasteJsonLabel:`Вставить данные JSON`,pasteJsonPlaceholder:`Вставьте данные персоны в формате JSON...`,importing:`Импорт...`,importButton:`Импортировать персону(ы)`,expectedFormat:`Ожидаемый формат JSON:`,exportSuccess:`Персона "{{name}}" успешно экспортирована`,exportFailed:`Не удалось экспортировать персону`,exportAllSuccess:`Все {{count}} персон успешно экспортированы`,exportAllFailed:`Не удалось экспортировать персоны`,pasteJsonData:`Пожалуйста, вставьте данные персоны в формате JSON`,importMultipleSuccess:`Успешно импортировано {{count}} персон`,importMultipleFailed:`Не удалось импортировать {{count}} персон`,importNoneFailed:`Не удалось импортировать ни одну персону`,importSuccess:`Персона успешно импортирована`,importFailed:`Не удалось импортировать персону`},generationStats:{details:`Подробности`,promptTokens:`Токены промпта:`,generatedTokens:`Сгенерированные токены:`,totalTokens:`Всего токенов:`,speed:`Скорость:`,promptEval:`Оценка промпта:`,generation:`Генерация:`,modelLoad:`Загрузка модели:`,totalTime:`Общее время:`,generatedAt:`Сгенерировано в:`},userMenu:{loggedOut:`Вы вышли из системы`,pictureUpdated:`Фото профиля обновлено`,failedUpdateAvatar:`Не удалось обновить аватар`,failedUpdatePicture:`Не удалось обновить фото профиля`,noEmail:`Email не указан`,changePicture:`Изменить фото`,settings:`Настройки`,userManagement:`Управление пользователями`,signOut:`Выйти`,changeProfilePicture:`Изменить фото профиля`},pluginManager:{title:`Менеджер плагинов`,upload:`Загрузить`,addJson:`Добавить JSON`,browseHF:`Обзор HF Hub`,confirmDelete:`Вы уверены, что хотите удалить этот плагин?`,uploading:`Загрузка плагина...`,pasteJson:`Вставьте JSON плагина сюда...`,installPlugin:`Установить плагин`,loading:`Загрузка плагинов...`,noPlugins:`Нет установленных плагинов`,noPluginsDescription:`Загрузите файл плагина или добавьте плагин из JSON.`,active:`Активен`,id:`ID`,endpoint:`Эндпоинт`,activate:`Активировать`,deactivate:`Деактивировать`,activePlugin:`Активный плагин`,activePluginDescription:`Все запросы чата будут направляться через этот плагин`,variables:{title:`Переменные`,save:`Сохранить`,saving:`Сохранение...`,saved:`Переменные сохранены`,saveFailed:`Не удалось сохранить переменные`,resetDefaults:`Сбросить по умолчанию`,reset:`Переменные сброшены`,resetFailed:`Не удалось сбросить переменные`,sensitiveSet:`Значение задано (введите новое для изменения)`,showValue:`Показать значение {{label}}`,hideValue:`Скрыть значение {{label}}`,connection:`Подключение`,advanced:`Расширенные параметры`,inherited:`Использовать значение по умолчанию`,inheritedValue:`Использовать значение по умолчанию ({{value}})`,enabled:`Включено`,disabled:`Отключено`,required:`Требуется указать значение`,fullApiEndpoint:`Полный URL конечной точки API`,endpointHelp:`Введите полный URL запроса, включая путь операции (например, /v1/chat/completions), а не только базовый URL провайдера.`,invalidUrl:`Введите действительный полный URL конечной точки API, например https://provider.example/v1/chat/completions`,insecureUrl:`Конечные точки API должны использовать HTTP или HTTPS.`,httpWarning:`HTTP не шифрует учетные данные или трафик. Используйте его только в доверенной сети.`,invalidBaseUrl:`Базовые URL не могут содержать строку запроса или фрагмент.`,invalidApiPath:`Должен начинаться с / и не содержать URL, запрос, фрагмент или сегмент ..`,tooLong:`Значение слишком длинное`}},huggingface:{title:`Браузер моделей HuggingFace`,subtitle:`Просматривайте и выбирайте модели из Hub`,searchPlaceholder:`Поиск моделей...`,filters:`Фильтры`,task:`Задача`,sortBy:`Сортировать по`,noModels:`Модели не найдены`,adjustSearch:`Попробуйте изменить поисковый запрос или фильтры`,gated:`Ограниченный`,selected:`Выбрано`,select:`Выбрать`,refresh:`Обновить`,modelsFound:`моделей найдено`},demoMode:{title:`Демо-режим`,github:`GitHub`},libreClaw:{title:`Агенты`,subtitle:`Запуск локального агента, утверждения, расписания, память, инструменты и использование.`,dashboard:`Панель управления`,connection:{disconnectedTitle:`Демон Libre Claw не подключен`,disconnectedDescription:`Запустите его локально с <command>libre-claw start</command> или установите <env>LIBRE_CLAW_BASE_URL</env> во внутренней среде.`},status:{connected:`Подключено`,disconnected:`Отключено`,activeRuns:`{{count}} активен`,activeRuns_plural:`{{count}} активен`},states:{queued:`В очереди`,running:`Выполняется`,blocked:`Заблокировано`,done:`Готово`,failed:`Не удалось`,cancelled:`Отменено`},startRun:{title:`Запустить выполнение агента`,placeholder:`Попросите Libre Claw проверить репозиторий, исправить ошибку, выполнить проверку, запланировать отчет...`,chatRun:`Бег в чате`,goalMode:`Режим цели`,providerOverride:`Переопределение поставщика`,modelOverride:`Переопределение модели`,run:`Запустить`},modelRoute:{title:`Модельный маршрут`,providerPlaceholder:`поставщик`,modelPlaceholder:`модель`,persistGlobal:`Сохранять глобальную конфигурацию Libre Claw`,saveModel:`Сохранить модель`,theme:`Тема Libre Claw`,saveTheme:`Сохранить тему`},runs:{title:`Запуски`,empty:`Запусков Libre Claw пока нет.`},timeline:{title:`Хронология выполнения`,empty:`Выберите запуск, чтобы просмотреть его события.`,streaming:`Потоковая передача...`,assistantResponse:`Ответ Ассистента`,resultOk:`ок`,resultError:`ошибка`,labels:{userMessage:`Сообщение пользователя`,toolCall:`Вызов инструмента`,toolResult:`Результат инструмента`,approvalRequest:`Запрос на одобрение`,approvalResponse:`Ответ на одобрение`,runStarted:`Запуск начат`,runFinished:`Запуск завершен`,usage:`Использование`,error:`Ошибка`}},approvals:{needed:`Требуется одобрение`,allowOnce:`Разрешить один раз`,alwaysAllowTool:`Всегда разрешать инструмент`,deny:`Отклонить`,toolApprovalRequested:`Требуется одобрение инструмента`},automations:{title:`Автоматизация`,namePlaceholder:`Имя`,schedulePlaceholder:`daily 09:00`,promptPlaceholder:`Подсказка автоматизации`,create:`Создать`,empty:`Никакой запланированной автоматизации Libre Claw.`,runNow:`Запустить сейчас`,pause:`Пауза`,resume:`Возобновить`,routes:{report:`Отчет`,telegram:`Telegram`},status:{active:`Активный`,paused:`Приостановлено`}},usageFallback:{title:`Использование и резервный вариант`,usage:`Использование`,fallbackRoute:`Резервный маршрут`,noUsage:`Записей об использовании пока нет.`},metrics:{provider:`Поставщик`,model:`Модель`,input:`Ввод`,output:`Выход`,cached:`Кэшированный`,reasoning:`Рассуждение`,cost:`Стоимость`,tool:`Инструмент`,resolution:`Разрешение`,state:`Состояние`,stopReason:`Причина остановки`,tokens:`{{formatted}} жетон`,tokens_plural:`{{formatted}} жетоны`},fallbacks:{tool:`инструмент`,unknown:`неизвестно`,resolved:`решено`,unknownError:`Неизвестная ошибка`},toasts:{loadStatusFailed:`Не удалось загрузить статус Libre Claw.`,enterTask:`Введите задачу на Libre Claw`,runStarted:`Запуск Libre Claw начат`,startRunFailed:`Не удалось запустить Libre Claw`,runCancelled:`Запуск отменен`,cancelRunFailed:`Не удалось отменить запуск`,approved:`Утверждено`,denied:`Отказано`,resolvePermissionFailed:`Не удалось разрешить разрешение`,providerModelRequired:`Требуется поставщик и модель.`,modelUpdated:`Модель Libre Claw обновлена`,updateModelFailed:`Не удалось обновить модель`,themeUpdated:`Тема Libre Claw обновлена`,updateThemeFailed:`Не удалось обновить тему`,automationRequired:`Укажите название автоматизации, расписание и подсказку.`,automationCreated:`Автоматизация создана`,createAutomationFailed:`Не удалось создать автоматизацию`,automationUpdated:`Автоматизация обновлена`,updateAutomationFailed:`Не удалось обновить автоматизацию`}},work:JSON.parse(`{"title":"Работа","subtitle":"Изолированные рабочие пространства моделей","tasks":{"title":"Задачи","subtitle":"Постоянные локальные рабочие пространства","new":"Новая задача","emptyTitle":"Пока нет рабочих задач","empty":"После отправки первого сообщения ваши рабочие задачи появятся здесь.","untitled":"Задача без названия","actions":"Действия с задачей","delete":"Удалить задачу","deleteNamed":"Удалить «{{title}}»","deleteConfirm":"Удалить «{{title}}» и её рабочее пространство навсегда?","close":"Закрыть список задач","open":"Открыть список задач","rename":"Название задачи","loading":"Загрузка задачи…","notFound":"Эта рабочая задача недоступна","back":"Начать новую задачу","status":"Статус: {{status}}"},"landing":{"title":"Над чем вы хотите поработать?","description":"Опишите задачу. Ваша модель получит собственное рабочее пространство.","isolated":"Изоляция","isolatedBody":"У каждой задачи собственный контейнер и собственные файлы.","durable":"Сохранность","durableBody":"Вернитесь к разговору и рабочему пространству позже.","controlled":"Контроль","controlledBody":"Среда выполнения и файлы задачи остаются изолированными от хоста."},"composer":{"placeholder":"Опишите, что вы хотите создать или изменить…","model":"Рабочая модель","noModels":"Нет моделей, совместимых с режимом «Работа»","cancel":"Остановить","send":"Запустить","hint":"Каждая задача хранит собственные файлы и историю. Проверяйте результаты модели перед использованием.","remoteTitle":"Удалённый провайдер","remoteHint":"Разговор и результаты инструментов отправляются в настроенный сервис. Один автономный запуск может несколько раз обратиться к провайдеру, что может повлечь расходы. Файлы рабочего пространства остаются локальными, если только инструмент не возвращает их содержимое.","remoteDismiss":"Скрыть","remoteDismissLabel":"Скрыть уведомление об удалённом провайдере","remoteDismissFailed":"Не удалось сохранить настройку удалённого провайдера.","noModelSelected":"Не выбрана модель, совместимая с режимом «Работа».","mentionAgents":"Упомянуть агента","engine":"Движок","nativeDshModels":"Нативные модели DSH","libreModels":"Модели Libre WebUI","nativeDshUnavailable":"Нативные модели DSH недоступны. Обновите список моделей или проверьте настройки провайдера.","modelLabel":"Модель"},"conversation":{"ready":"Рабочее пространство готово","empty":"Продолжите задачу ниже. Этот разговор и его файлы остаются привязанными к данному рабочему пространству.","loadOlder":"Загрузить предыдущие сообщения","openFile":"Открыть {{name}}","delegatedBy":"Делегировано агентом {{agent}}","reportFrom":"Отчёт от {{agent}}"},"status":{"preparing":"Подготовка изолированного рабочего пространства…","running":"Работа в локальном рабочем пространстве…"},"statusLabels":{"idle":"Ожидание","thinking":"Думает","complete":"Завершено","needsInput":"Требуется ввод","error":"Ошибка"},"live":{"connecting":"Подключение к обновлениям в реальном времени…","reconnecting":"Повторное подключение к обновлениям в реальном времени…","unavailable":"Обновления в реальном времени недоступны","newActivity":"Новая активность","skillsLoaded":"Навыки рабочего пространства · {{count}}","skillWorked":"Эта процедура сработала","skillFailed":"Эта процедура не сработала","skillTraceSaved":"отмечено","stats":{"title":"Сводка запуска","rounds":"Раунды","toolCalls":"Вызовы инструментов","screenshots":"Скриншоты","fences":"Прерывания","checksPassed":"Проверок пройдено","checksPending":"Проверок в ожидании","stallNudges":"Сигналы о застое","ambiguityNudges":"Сигналы перенастройки","stoppedBy":"Остановлено из-за"}},"runtime":{"unavailable":"Среда выполнения недоступна","ready":"Среда выполнения готова","readyOllama":"Docker готов","readyPlugin":"Docker и плагин готовы","readyHybrid":"Docker и модели готовы","reason":"Требуются среда выполнения Work и доступный провайдер моделей."},"workspace":{"label":"Режимы рабочего пространства","files":"Файлы","activity":"Активность","preview":"Предпросмотр","resize":"Изменить размеры разговора и рабочего пространства","resizeHint":"Перетащите, чтобы изменить размер. Для точной настройки используйте клавиши со стрелками. Дважды щёлкните или нажмите Enter, чтобы сбросить.","splitSize":"Разговор {{conversation}}%, рабочее пространство {{workspace}}%","terminal":"Терминал","git":"Git","screen":"Экран","agent":"Агент"},"files":{"discard":"Отменить несохранённые изменения файла?","leaveWithDraft":"Покинуть этот файл? Несохранённое изменение останется в браузере как черновик.","up":"Родительская папка","back":"Назад к файлам","empty":"В этой папке пока нет файлов.","select":"Выберите файл, чтобы просмотреть и изменить его.","editorLabel":"Редактор файла: {{path}}","format":"Форматировать","formatted":"Код отформатирован.","formatFailed":"Не удалось отформатировать этот файл.","formatShortcut":"Форматировать (Shift+Alt+F)","formatTooLarge":"Форматирование доступно только для файлов до 100 000 символов и 4 000 строк.","formatUnsupported":"Форматирование недоступно для этого типа файлов.","saveShortcut":"Сохранить (⌘/Ctrl+S)","highlightPaused":"Для больших файлов подсветка в реальном времени приостановлена, чтобы редактор работал быстро.","plainTextLarge":"Обычный текст · большой файл","changes":"Изменения","changesSince":"Что изменилось с последнего хода","diffLabel":"Изменения с последнего хода: {{path}}","diffFolded":"{{count}} строк без изменений"},"activity":{"empty":"Здесь появятся команды, операции с файлами и результаты инструментов.","toolActivity":"Активность инструментов","details":"Подробности","kinds":{"message":"Сообщение","toolCall":"Вызов инструмента","toolResult":"Результат инструмента","error":"Ошибка"}},"preview":{"command":"Необязательная команда запуска","start":"Запустить предпросмотр","stop":"Остановить предпросмотр","open":"Открыть","starting":"Запуск предпросмотра…","frameTitle":"Предпросмотр рабочего пространства","failed":"Не удалось запустить предпросмотр. Проверьте Активность и попробуйте другую команду.","empty":"Запустите приложение в этом рабочем пространстве, чтобы просмотреть его здесь.","finished":"Эта задача завершена. Откройте её снова, чтобы запустить предпросмотр.","reopenStart":"Открыть задачу заново и запустить предпросмотр"},"mobile":{"surface":"Область задачи","conversation":"Разговор","workspace":"Рабочее пространство"},"toasts":{"runFailed":"Не удалось запустить рабочую задачу.","updateFailed":"Не удалось обновить эту задачу.","renameFailed":"Не удалось переименовать эту задачу.","cancelled":"Запуск рабочей задачи остановлен.","cancelFailed":"Не удалось остановить запуск рабочей задачи.","deleteFailed":"Не удалось удалить эту рабочую задачу.","saveFailed":"Не удалось сохранить этот файл.","saved":"Файл сохранён.","previewFailed":"Не удалось запустить предпросмотр.","previewStopFailed":"Не удалось остановить предпросмотр."},"terminal":{"connecting":"Открывается оболочка в песочнице…","closed":"Сеанс терминала завершён.","failed":"Не удалось запустить сеанс терминала.","reconnect":"Переподключиться","unavailable":"Интерактивный терминал недоступен в этой установке.","blockedByRun":"Модель использует этот контейнер. Терминал откроется после завершения хода.","taskRunning":"Выполняется ход модели"},"policy":{"label":"Политика среды","default":"По умолчанию (глобальные лимиты)","setupHint":"Политики выполнения открывают Work Computer — наблюдаемый браузерный рабочий стол для агента — и лимиты для каждой задачи.","setupLink":"Настроить политики Work"},"git":{"actionFailed":"Действие Git не выполнено.","blockedByPreview":"Остановите предпросмотр перед изменением состояния Git.","blockedByRun":"Действия записи Git разблокируются после завершения хода модели.","branchCreated":"Создана {{name}}.","branchSwitched":"Переключено на {{name}}.","clean":"Рабочее дерево чистое.","commit":"Закоммитить подготовленные изменения","commitMessage":"Сообщение коммита","committed":"Коммит создан.","detached":"отсоединённый HEAD","diff":"Предпросмотр диффа","diffFailed":"Не удалось загрузить этот дифф.","history":"Локальная история","initialize":"Инициализировать Git","initializeDescription":"Создайте локальный репозиторий для статуса, диффов, веток и коммитов. Удалённые учётные данные не подключаются.","initialized":"Репозиторий Git инициализирован.","loadFailed":"Не удалось загрузить статус Git.","localOnly":"Только локальный Git. Push, pull и pull request требуют отдельного доверенного брокера учётных данных.","newBranch":"Новая локальная ветка","noCommits":"Коммитов пока нет.","noDiff":"Текстового диффа пока нет. Неотслеживаемые файлы появятся после подготовки.","notInitialized":"Git не инициализирован","selectChange":"Выберите изменённый файл, чтобы посмотреть его дифф.","selectPath":"Выбрать {{path}}","stageAll":"Подготовить всё","stageSelected":"Подготовить {{count}}","staged":"Изменения подготовлены.","switchBranch":"Переключить локальную ветку","changes":"Изменения","createBranch":"Создать","filterFiles":"Фильтровать изменённые файлы","noFilterMatches":"Нет изменённых файлов, соответствующих этому фильтру.","allChanges":"Все изменения","diffTruncated":"Этот diff усечён.","binaryFile":"Двоичный файл, текстовый diff недоступен."},"hostWorkspace":{"hint":"Оставьте пустым для изолированного пространства или укажите задаче папку на этой машине.","label":"Папка рабочего пространства (необязательно)","warning":"Задача может напрямую читать и записывать эту папку. Оставьте пустым для изолированного пространства."},"screen":{"starting":"Запуск Work Computer…","disconnected":"Экран отключён.","reconnect":"Переподключить","viewOnly":"Наблюдение","takeOver":"Взять управление","handBack":"Готово","youHaveControl":"Вы управляете","otherHasControl":"{{name}} управляет","agentWaiting":"Агент просит вас взять управление","teach":"Обучить задаче","recording":"Запись","teachSave":"Сохранить","teachDiscard":"Отменить","teachNamePlaceholder":"Назовите эту задачу","teachSaved":"Сохранено как навык \\"{{name}}\\"","watchingLearning":"Агент наблюдает и учится","unmute":"Включить звук","mute":"Выключить звук","finished":"Эта задача завершена. Откройте её снова, чтобы вернуть экран.","reopenOpen":"Открыть задачу заново и открыть экран"},"computerSetup":{"title":"Work Computer","description":"Дайте агенту настоящий рабочий стол с браузером — всё настраивается автоматически.","building":"Сборка образа рабочего стола... в первый раз это занимает несколько минут.","enable":"Включить","retry":"Повторить"},"agents":{"title":"Агенты"},"persona":{"label":"Нанять как агента (необязательно)","none":"Без персоны (разовая задача)","hint":"Эта задача становится именованным агентом: она сохраняет персону, остаётся закреплённой на боковой панели и после каждого запуска сообщает однострочный статус.","description":"Выберите персону, чтобы сохранить эту задачу как именованного агента."},"agent":{"openScreen":"Открыть полноэкранный просмотр","personaLine":"Персона: {{name}}","screen":"Экран","routines":"Рутины","addRoutine":"Рутина","noRoutines":"Рутин пока нет. Рутина выполняет инструкцию по расписанию внутри рабочего пространства этого агента.","routineToggleFailed":"Не удалось обновить рутину.","routineSaveFailed":"Не удалось сохранить рутину.","skills":"Обученные навыки","noSkills":"Пока ничему не обучено. Используйте Teach на вкладке «Экран», чтобы один раз показать процедуру; она станет воспроизводимым навыком.","skillToggleFailed":"Не удалось обновить навык.","unread":"Новая активность","approvals":"Автопроверка","approvalsHint":"Когда включено, команды, удаление и перемещение файлов, а также действия на компьютере ставятся на паузу до вашего одобрения.","approvalsPolicyForced":"Политика Work этого агента требует одобрения для действий, изменяющих данные.","approvalsToggleFailed":"Не удалось обновить настройки одобрения.","approvalRuleLine":"Всегда разрешено","approvalRuleDelete":"Удалить правило","approvalRuleDeleteFailed":"Не удалось удалить правило."},"approval":{"title":"Нужно одобрение","description":"Агент хочет выполнить {{tool}}. Это действие может изменить данные или затронуть что-то за пределами разговора.","allowOnce":"Разрешить один раз","allowAlways":"Разрешать всегда","deny":"Отклонить","failed":"Не удалось отправить решение."},"idleStopHint":"Останавливается через {{minutes}} минут без активности.","runs":{"title":"Запуски","empty":"Завершённых запусков пока нет. Каждый запуск сохраняет то, что произвёл, и изменённые файлы.","fileCount":"Файлы ({{total}})","exitStates":{"completed":"Завершено","needsInput":"Требуется ввод","failed":"Не удалось","cancelled":"Отменено"}},"recovery":{"pending":"Work подтверждает {{pending}} очистку(и) песочницы, прежде чем принимать новые операции.","since":"Заблокировано с {{time}}.","nextAttempt":"Следующая попытка {{time}}.","adminHint":"Администраторы могут повторить попытку в разделе Система > Work.","retry":"Повторить сейчас","retrying":"Повтор попытки…","retrySucceeded":"Очищено {{cleared}} из {{attempted}} ожидающих очисток.","retryPending":"Всё ещё повторяем {{attempted}} ожидающих очисток.","retryFailed":"Не удалось повторить ожидающие очистки."}}`),personaBackground:{label:`Фоновое изображение`,uploadBackgroundImage:`Загрузить фоновое изображение`,dragAndDrop:`Перетащите изображение или нажмите для выбора`,chooseImage:`Выбрать изображение`,uploading:`Загрузка...`,enterImageUrl:`Или введите URL изображения`,supportedFormats:`Поддерживает: JPG, PNG, GIF, WebP (макс. 5МБ). Широкие альбомные изображения подходят лучше.`,customBackground:`Пользовательское фоновое изображение`,clickToChange:`Нажмите для изменения или удаления`,removed:`Фон удален`,uploaded:`Фон успешно загружен`,invalidFile:`Пожалуйста, выберите действительный файл изображения`,fileTooLarge:`Размер фонового изображения должен быть менее 5МБ`,readFailed:`Не удалось прочитать файл изображения`,uploadFailed:`Не удалось загрузить фоновое изображение`},modelSelector:{searchInstalled:`Поиск установленных моделей...`,searchOllama:`Поиск в библиотеке Ollama...`,searchHuggingFace:`Поиск на HuggingFace...`,selectModel:`Выбрать модель`,personas:`Персоны`,ollamaModels:`Модели Ollama`,pluginModels:`Модели плагинов`,actions:`Действия`,installed:`Установлено`,use:`Использовать`,pull:`Загрузить`,pullRestricted:`Установка моделей в этом экземпляре доступна только администраторам.`,adminOnlyPull:`Только администраторы`,legacyProvider:`провайдер не записан`,providerNotRecorded:`Провайдер не записан`,providerUnavailable:`провайдер недоступен`,reselectProvider:`заново выберите провайдера, чтобы закрепить модель`,unavailable:`недоступно`,unavailableSelections:`Недоступные варианты`,agentModels:`Агенты`},whatsNew:{title:`Что нового`,releaseNotes:`Примечания к выпуску`,cta:`Хорошо, поехали`,starAsk:`Нравится Libre WebUI? Поставьте звезду на GitHub`},notes:{title:`Заметки`,new:`Новая заметка`,untitled:`Без названия`,empty:`Заметок пока нет`,selectOrCreate:`Выберите заметку или создайте новую`,contentPlaceholder:`Пишите в Markdown…`,saved:`Сохранено`,saveFailed:`Не удалось сохранить заметку`,createFailed:`Не удалось создать заметку`,deleteConfirm:`Удалить эту заметку?`,deleteFailed:`Не удалось удалить заметку`,tools:`Инструменты заметки`,revisions:`История`,attachments:`Вложения`,share:`Поделиться`,assist:`ИИ-правка`,noRevisions:`Прежних версий пока нет`,restore:`Восстановить`,revisionRestored:`Версия восстановлена`,revisionRestoreFailed:`Не удалось восстановить эту версию`,addAttachment:`Добавить вложение`,noAttachments:`Вложений пока нет`,attachmentAdded:`Вложение добавлено`,attachmentFailed:`Не удалось добавить вложение`,attachmentDownloadFailed:`Не удалось скачать вложение`,shareUsernamePlaceholder:`Имя пользователя`,permissionRead:`Может просматривать`,permissionWrite:`Может редактировать`,shareAction:`Поделиться`,notShared:`Пока ни с кем не поделились`,revokeShare:`Отозвать доступ`,shareHint:`Общие заметки появляются в списке заметок другого пользователя. Доступ можно отозвать в любой момент.`,shareUserNotFound:`Пользователь с таким именем не найден`,shareAdded:`Доступ открыт для {{username}}`,shareFailed:`Не удалось поделиться заметкой`,assistPlaceholder:`Опишите правку, например сократить резюме или исправить грамматику`,assistGenerate:`Предложить правку`,assistNoModel:`Сначала выберите модель в чате`,assistNoChanges:`Модель не предложила изменений`,assistApply:`Применить`,assistDiscard:`Отклонить`,assistApplied:`Правка применена`,assistRevisionHint:`При применении прежняя версия сохраняется в истории, поэтому любую ИИ-правку можно отменить.`,assistFailed:`Не удалось создать правку`,pin:`Закрепить заметку`,unpin:`Открепить заметку`,pinned:`Закреплена`,export:`Скачать как Markdown`,sharedWithYou:`Доступна вам`},calendar:{title:`Календарь`,today:`Сегодня`,month:`Месяц`,week:`Неделя`,previous:`Назад`,next:`Вперёд`,newEvent:`Новое событие`,editEvent:`Изменить событие`,eventTitle:`Название`,titlePlaceholder:`Название события`,date:`Дата`,start:`Начало`,end:`Конец`,allDay:`Весь день`,repeat:`Повторять`,repeatNone:`Не повторяется`,repeatDaily:`Ежедневно`,repeatWeekly:`Еженедельно`,repeatMonthly:`Ежемесячно`,repeatYearly:`Ежегодно`,notes:`Заметки`,more:`ещё {{n}}`,loadFailed:`Не удалось загрузить календарь`,saveFailed:`Не удалось сохранить событие`,deleteFailed:`Не удалось удалить событие`,day:`День`,calendarLabel:`Календарь`,personalCalendar:`Личный`,reminderLabel:`Напоминание`,reminderNone:`Без напоминания`,reminderMinutes:`За {{minutes}} минут`,reminderHour:`За 1 час`,reminderDay:`За 1 день`,sharedReadOnly:`Это событие доступно вам только для просмотра.`,sharedBadge:`общий`,shareCalendar:`Поделиться календарём`,newCalendarPlaceholder:`Новый календарь…`,calendarSaveFailed:`Не удалось сохранить календарь`,exportFailed:`Не удалось экспортировать календарь`,importFailed:`Не удалось импортировать файл`,importResult:`Импортировано событий: {{total}}`,importIcs:`Импорт`,exportIcs:`Экспорт`},automations:{title:`Автоматизации`,tab:{automations:`Автоматизации`,runs:`Запуски`},newAutomation:`Новая автоматизация`,editAutomation:`Изменить автоматизацию`,empty:`Пока нет автоматизаций. Создайте одну, чтобы выполнять задачу по расписанию.`,loadFailed:`Не удалось загрузить автоматизации`,saveFailed:`Не удалось сохранить автоматизацию`,actionFailed:`Действие не выполнено`,runQueued:`Запуск начат`,status:{active:`Активна`,paused:`Приостановлена`},nextRun:`Следующий запуск {{when}}`,actions:`Действия`,pause:`Приостановить`,resume:`Возобновить`,runNow:`Запустить сейчас`,openChat:`Открыть чат`,noRuns:`Пока нет запусков`,deletedAutomation:`Удалённая автоматизация`,runHistory:`История запусков (последние 30 дней)`,succeeded:`успешных`,failed:`неудачных`,form:{name:`Название`,namePlaceholder:`Моя автоматизация`,triggers:`Триггеры`,addTrigger:`Добавить триггер`,instructions:`Инструкции`,instructionsPlaceholder:`Что выполнять по этому расписанию?`,model:`Модель`,modelAuto:`Авто`,notification:`Уведомление`,notifyApp:`Приложение`,notifyOff:`Выключено`,frequency:`Частота`,time:`Время`,minute:`Минута`,fromHour:`С`,toHour:`До`,weekday:`День недели`,dayOfMonth:`День`,month:`Месяц`,target:`Запускать как`,targetChat:`Сессия чата`,targetWork:`Задача Work`,workPolicy:`Политика Work`,workPolicyDefault:`По умолчанию (общие лимиты)`,taskBoundNote:`Эта рутина выполняется внутри рабочего пространства и беседы самого агента, с моделью и средой выполнения агента.`,event:`Событие`,eventMatch:`Совпадающий текст`,eventMatchPlaceholder:`Необязательный текст в названии`,eventOnlyHint:`У этой рутины нет расписания. Она выполняется, когда происходит событие, но не чаще одного раза в минуту.`},kind:{once:`Однократно`,hourly:`Ежечасно`,daily:`Ежедневно`,weekly:`Еженедельно`,monthly:`Ежемесячно`,yearly:`Ежегодно`,event:`По событию`},trigger:{once:`Однократно {{when}}`,hourly:`Каждый час в :{{minute}}`,daily:`Ежедневно в {{time}}`,weekly:`Еженедельно в {{day}} в {{time}}`,monthly:`Ежемесячно {{day}}-го числа в {{time}}`,yearly:`Ежегодно {{date}} в {{time}}`,event:`Выполняется, когда {{event}}`,eventMatching:`Выполняется, когда {{event}} и название содержит «{{match}}»`},finishedNotification:`Завершено запусков автоматизации: {{n}}`,templatesTitle:`Шаблоны`,templates:{morningBrief:{name:`Утренняя сводка`,description:`Начните день с заголовков и приоритетов.`},newsDigest:{name:`Дайджест новостей ИИ`,description:`Значимые релизы моделей, исследования и инвестиции.`},weeklyReview:{name:`Итоги недели`,description:`Завершите неделю: успехи, незакрытые задачи, приоритеты.`},monthlyReport:{name:`Ежемесячный отчёт`,description:`План отчёта о состоянии первого числа каждого месяца.`}},openTask:`Открыть задачу`,webhook:{title:`Вебхук-триггер`,enabledHint:`Внешние системы могут запускать эту автоматизацию с помощью секрета. Ротация делает прежний секрет недействительным.`,disabledHint:`Разрешите внешней системе (CI, cron, умный дом) запускать эту автоматизацию через POST и секрет.`,rotate:`Сменить секрет`,enable:`Включить`,disable:`Отключить`,revealHint:`Показывается один раз. Отправляйте как токен Bearer или заголовок X-Libre-Webhook-Secret.`,failed:`Не удалось обновить вебхук.`},triggers:{events:{"channel-mention":`кто-то упоминает вас в канале`,"channel-dm":`вы получаете личное сообщение`,"channel-invite":`вас приглашают в канал`,share:`кто-то делится с вами чем-то`,"calendar-reminder":`срабатывает напоминание календаря`,"media-ready":`завершается медиа-задача`,"media-failed":`медиа-задача завершается с ошибкой`,"budget-alert":`срабатывает оповещение о бюджете`,"work-run-finished":`завершается запуск агента`,"work-run-attention":`запуску агента нужно внимание`,"work-takeover":`агент просит вас взять управление`,"work-approval":`агент ждёт вашего одобрения`,system:`приходит системное уведомление`}}},home:{active:`активно`,continue:`Продолжить`,start:`Начать`,explore:`Обзор`},palette:{empty:`Совпадений нет.`,placeholder:`Поиск по чатам, Work, действиям…`,toggleTheme:`Переключить тему`,actions:`Действия`,chats:`Чаты`,search:`Поиск`,settings:`Настройки`,work:`Работа`,messages:`Сообщения`,notes:`Заметки`,documents:`Документы`},tabs:{actions:`Действия вкладки`,close:`Закрыть вкладку`,closeAll:`Закрыть все вкладки`,closeOthers:`Закрыть другие вкладки`,closeRight:`Закрыть вкладки справа`,home:`Главная`,label:`Открытые вкладки`,new:`Новая вкладка`,newWork:`Новый Work`,chat:`Чат`,newChat:`Новый чат`,work:`Работа`},tools:{arguments:`Аргументы`,result:`Результат`,callStatus:{awaiting_approval:`Ожидает одобрения`,running:`Выполняется`,succeeded:`Готово`,failed:`Ошибка`,denied:`Отклонён`,cancelled:`Отменён`},approval:{title:`Инструменту нужно одобрение`,description:`Модель хочет выполнить {{tool}} на {{server}}. Этот вызов может изменить данные за пределами этого чата.`,builtinSource:`этот сервер`,allowOnce:`Разрешить один раз`,allowSession:`Разрешить в этом чате`,allowAlways:`Разрешать всегда`,deny:`Отклонить`}},promptsPage:{title:`Промпты`,description:`Многоразовые шаблоны промптов с типизированными переменными. Введите / в поле чата, чтобы вставить один из них.`,newPrompt:`Новый промпт`,editPrompt:`Изменить промпт`,empty:`Промптов пока нет`,emptyHint:`Промпт — это сохранённый шаблон сообщения. Как только вы его создадите, ввод /slug в поле чата вставит его и запросит переменные, которые он объявляет.`,loadFailed:`Не удалось загрузить ваши промпты.`,saved:`Промпт сохранён`,saveFailed:`Не удалось сохранить промпт.`,deleted:`Промпт удалён`,deleteFailed:`Не удалось удалить промпт.`,deleteTitle:`Удалить промпт`,deleteConfirm:`Удалить «{{title}}»? Вместе с ним исчезнет история версий.`,exportFailed:`Не удалось экспортировать промпт.`,imported:`Промпт импортирован`,importFailed:`Не удалось импортировать этот файл.`,historyFailed:`Не удалось загрузить историю версий.`,rolledBack:`Промпт откачен`,rollbackFailed:`Не удалось откатить промпт.`,versionLabel:`v{{version}}`,updated:`Обновлён {{when}}`,form:{slug:`Slug`,slugPlaceholder:`weekly-report`,slugHint:`Используется как /slug в поле чата.`,slugInvalid:`Только строчные латинские буквы, цифры и дефисы.`,title:`Заголовок`,titlePlaceholder:`Еженедельный отчёт`,description:`Описание`,descriptionPlaceholder:`Для чего этот промпт`,content:`Содержимое`,contentPlaceholder:`Напишите промпт. Всё, что нужно заполнить позже, заключите в двойные фигурные скобки.`,contentHint:`Заполнитель — это имя в двойных фигурных скобках. Объявите его ниже, чтобы задать подпись или значение по умолчанию.`,tags:`Теги`,tagsPlaceholder:`исследование, письмо`,variables:`Переменные`,variablesHint:`Необязательно. Объявите здесь заполнитель, чтобы задать ему подпись, значение по умолчанию или набор вариантов.`,variableName:`Имя`,variableType:`Тип`,variableLabel:`Подпись`,variableDefault:`По умолчанию`,variableRequired:`Обязательная`,variableOptions:`Варианты`,variableOptionsPlaceholder:`Варианты через запятую`,addVariable:`Добавить переменную`,removeVariable:`Удалить переменную`},variableTypes:{text:`Текст`,number:`Число`,select:`Выбор`,boolean:`Да или нет`},history:{open:`История версий`,title:`История {{title}}`,subtitle:`Откат сохраняет выбранную ревизию как новую версию. Ничего не перезаписывается.`,empty:`Прежних версий пока нет.`,current:`Текущая`,rollback:`Откатить`,rollingBack:`Откат...`},templatesTitle:`Начните с шаблона`,templates:{reviewPr:{name:`Ревью пул-реквеста`,description:`Структурированное ревью кода с настраиваемой строгостью.`},summarize:{name:`Пересказ для аудитории`,description:`Краткий пересказ списком под конкретного читателя.`},translate:{name:`Перевод`,description:`Перевод с сохранением тона и форматирования.`},explainCode:{name:`Объяснить код`,description:`Разбор по шагам плюс крайние случаи и риски.`}}},skillsPage:{title:`Навыки`,description:`Именованные наборы инструкций, которые модель может подгружать по мере необходимости.`,newSkill:`Новый навык`,editSkill:`Изменить навык`,empty:`Навыков пока нет`,emptyHint:`Навык — это набор инструкций, который модель загружает только тогда, когда он нужен. Упомяните $slug в сообщении или дайте модели обратиться к нему через инструмент load_skill.`,loadFailed:`Не удалось загрузить ваши навыки.`,saved:`Навык сохранён`,saveFailed:`Не удалось сохранить навык.`,toggleFailed:`Не удалось изменить навык.`,deleted:`Навык удалён`,deleteFailed:`Не удалось удалить навык.`,deleteTitle:`Удалить навык`,deleteConfirm:`Удалить «{{name}}»? Вместе с ним исчезнет история версий.`,exportFailed:`Не удалось экспортировать навык.`,imported:`Навык импортирован`,importFailed:`Не удалось импортировать этот файл.`,historyFailed:`Не удалось загрузить историю версий.`,rolledBack:`Навык откачен`,rollbackFailed:`Не удалось откатить навык.`,versionLabel:`v{{version}}`,updated:`Обновлён {{when}}`,form:{slug:`Slug`,slugPlaceholder:`code-review`,slugHint:`Используется как $slug, когда вы упоминаете навык.`,slugInvalid:`Только строчные латинские буквы, цифры и дефисы.`,name:`Название`,namePlaceholder:`Ревью кода`,description:`Описание`,descriptionPlaceholder:`Когда применять этот навык`,descriptionHint:`Это манифест, который видит модель. Напишите его так, чтобы модель поняла, когда навык подходит, не загружая его.`,instructions:`Инструкции`,instructionsPlaceholder:`Инструкции в Markdown, которые модель читает после загрузки этого навыка.`,instructionsHint:`Загружаются только при использовании навыка, поэтому до этого их длина ничего не стоит.`,enabled:`Включён`,enabledHint:`Отключённые навыки остаются сохранёнными, но никогда не предлагаются модели.`,approval:`Всегда спрашивать перед`,approvalHint:`Пока этот навык загружен, агент приостанавливается и ждёт вас перед запуском этих инструментов, даже если одобрения в остальном отключены. Сохранённое правило «Разрешать всегда» никогда не одобрит их за вас.`,approvalTools:`Инструменты, которым нужно одобрение`,approvalToolsHint:`Оставьте все флажки снятыми, чтобы охватить все ограниченные инструменты.`},history:{open:`История версий`,title:`История {{name}}`},templatesTitle:`Начните с шаблона`,templates:{citeSources:{name:`Ссылаться на источники`,description:`Нумерованные ссылки с URL, никаких утверждений без источника.`},releaseNotes:{name:`Стиль заметок о выпуске`,description:`Сгруппированные записи для пользователей, без внутренних id.`},meetingNotes:{name:`Формат заметок со встречи`,description:`Решения, задачи и открытые вопросы из расшифровки.`}},importUrl:{button:`Из URL`,title:`Импортировать навык по URL`,hint:`Вставьте ссылку skills.sh или GitHub, owner/repo/skill или прямую ссылку на файл SKILL.md.`,placeholder:`https://skills.sh/owner/repo/skill или owner/repo/skill`,overwrite:`Перезаписать мой навык, если слаг уже существует`},files:{title:`Прилагаемые файлы`,hint:`Справочные документы и скрипты, которые модель читает по запросу через read_skill_file.`,add:`Добавить файл`,empty:`Прилагаемых файлов пока нет.`,pathPlaceholder:`docs/reference.md`,contentPlaceholder:`Содержимое файла…`,loadFailed:`Не удалось загрузить файл`,saveFailed:`Не удалось сохранить файл`,deleteFailed:`Не удалось удалить файл`},folderImport:{button:`Из папки`,missingSkillMd:`В папке должен быть файл SKILL.md`,done:`Навык импортирован с {{count}} прилагаемыми файлами`}},toolsPage:{title:`Инструменты`,description:`Серверы инструментов, которые модель может вызывать, и выданные вами одобрения.`,approvalNotice:`Инструменты, которые меняют данные за пределами чата, всегда спрашивают одобрение, если только вы не выдали такому инструменту постоянное одобрение или одобрение для этого чата.`,registerServer:`Зарегистрировать сервер`,registerHint:`Libre WebUI читает сервер один раз и закрепляет инструменты, которые тот предоставляет. Обновите сервер позже, чтобы подхватить изменения.`,editServer:`Изменить сервер`,empty:`Серверов инструментов нет`,emptyHintAdmin:`Зарегистрируйте сервер OpenAPI или MCP, чтобы модели было что вызывать.`,emptyHintUser:`Администратор пока не поделился с вами серверами инструментов.`,loadFailed:`Не удалось загрузить серверы инструментов.`,saved:`Сервер инструментов сохранён`,saveFailed:`Не удалось сохранить сервер инструментов.`,deleted:`Сервер инструментов удалён`,deleteFailed:`Не удалось удалить сервер инструментов.`,deleteTitle:`Удалить сервер инструментов`,deleteConfirm:`Удалить «{{name}}»? Все потеряют доступ к его инструментам.`,refresh:`Обновить инструменты`,refreshed:`Инструменты перечитаны с сервера`,refreshFailed:`Не удалось прочитать сервер.`,toolsLoadFailed:`Не удалось загрузить закреплённые инструменты.`,overrideFailed:`Не удалось изменить инструмент.`,pinnedTools:`Закреплённые инструменты`,noPinnedTools:`Этот сервер не предоставил ни одного инструмента.`,sideEffect:`Побочный эффект`,sideEffectOverride:`Побочный эффект`,specRevision:`Ревизия {{revision}}`,credential:`Личные учётные данные`,credentialHint:`Хранятся в зашифрованном виде и используются только для ваших собственных вызовов к этому серверу.`,credentialPlaceholder:`Вставьте свой токен`,credentialSet:`Учётные данные заданы`,credentialMissing:`Нужны учётные данные`,credentialSaved:`Учётные данные сохранены`,credentialSaveFailed:`Не удалось сохранить учётные данные.`,credentialRemove:`Удалить`,credentialRemoved:`Учётные данные удалены`,credentialRemoveFailed:`Не удалось удалить учётные данные.`,builtinSource:`Этот сервер`,kinds:{openapi:`OpenAPI`,mcp:`MCP`},authModes:{none:`Без аутентификации`,bearer:`Токен Bearer`,header:`Свой заголовок`,oauth:`Интерактивный OAuth`},accessModes:{"admins-only":`Только администраторы`,"all-users":`Все`,granted:`Только те, кому выдан доступ`},form:{name:`Название`,namePlaceholder:`API погоды`,kind:`Тип`,description:`Описание`,descriptionPlaceholder:`Что делает этот сервер`,baseUrl:`Базовый URL`,specUrl:`URL спецификации`,specUrlHint:`Необязательно. Если оставить пустым, используется базовый URL.`,authMode:`Аутентификация`,authHeader:`Имя заголовка`,oauthClientId:`ID клиента OAuth`,oauthClientIdHint:`Необязательно. Нужно только если провайдер не регистрирует клиентов автоматически.`,oauthClientSecret:`Секрет клиента OAuth`,accessMode:`Кто может им пользоваться`,timeoutMs:`Тайм-аут (мс)`,maxResponseBytes:`Максимальный ответ (байты)`,serverDefault:`Значение сервера`,enabled:`Включён`,enabledHint:`Отключённые серверы остаются зарегистрированными, но никогда не предлагаются модели.`},approvals:{title:`Постоянные одобрения`,description:`Инструменты, которым вы разрешили работать без повторных вопросов. Отзовите одобрение — и в следующий раз он снова спросит.`,empty:`Постоянных одобрений нет.`,revoke:`Отозвать`,revoked:`Одобрение отозвано`,revokeFailed:`Не удалось отозвать одобрение.`,scope:{once:`Один раз`,session:`Этот чат`,always:`Всегда`}},templatesTitle:`Начните с шаблона`,templates:{exa:{name:`Exa`,description:`Ищите в интернете и загружайте страницы с помощью Exa.`},internalOpenApi:{name:`Внутреннее API`,description:`Отправная точка для вашего собственного сервиса OpenAPI.`},mcpServer:{name:`Сервер MCP`,description:`Отправная точка для сервера MCP поверх Streamable HTTP.`}},oauth:{title:`Подключение`,hint:`Подключение отправит вас к провайдеру, чтобы войти. Токены остаются на этом сервере и используются только для ваших собственных вызовов.`,connect:`Подключить`,reconnect:`Переподключить`,disconnect:`Отключить`,connected:`Подключено`,notConnected:`Не подключено`,expiresAt:`Доступ истекает {{when}}`,connectFailed:`Не удалось начать подключение.`,disconnected:`Сервер инструментов отключён`,disconnectFailed:`Не удалось отключить сервер инструментов.`,callbackSuccess:`Сервер инструментов подключён`,callbackError:`Не удалось подключить сервер инструментов.`}},composer:{promptMenu:{label:`Библиотека промптов`,empty:`Промптов пока нет — создайте один в Настройки → Промпты или начните вводить слаг.`},skillMenu:{label:`Навыки`,empty:`Навыков пока нет — создайте один в Настройки → Навыки.`},variables:{title:`Заполните {{title}}`,insert:`Вставить`,cancel:`Отмена`,required:`{{name}} обязательно`},toolsMenu:{enable:`Использовать инструменты для этого сообщения`,builtin:`Встроенные инструменты`,servers:`Серверы инструментов`,hint:`Вызовы с побочными эффектами по-прежнему запрашивают подтверждение перед запуском.`}},share:{title:`Поделиться «{{name}}»`,subtitle:`Дайте доступ людям или группам. Только вы управляете доступом.`,kindUser:`Пользователь`,kindGroup:`Группа`,usernamePlaceholder:`Точное имя пользователя`,groupPlaceholder:`Точное имя группы`,permissionRead:`Может просматривать`,permissionWrite:`Может редактировать`,action:`Поделиться`,empty:`Пока ни с кем не поделено.`,hint:`Введите точное имя пользователя или группы. Получатели видят ресурс в своём рабочем пространстве; отзыв немедленно снимает доступ.`,revoke:`Отозвать доступ`,added:`Доступ открыт для {{name}}`,failed:`Не удалось поделиться`,userNotFound:`Пользователь с таким именем не найден`,groupNotFound:`Группа с таким именем не найдена`},channels:{title:`Каналы`,browsePublic:`Обзор публичных каналов`,newDm:`Новое личное сообщение`,newChannel:`Новый канал`,empty:`Каналов пока нет. Создайте свой или посмотрите публичные.`,selectPrompt:`Выберите канал, чтобы начать`,pins:`Закреплённые`,members:`Участники`,settings:`Настройки канала`,sendFailed:`Не удалось отправить сообщение`,uploadFailed:`Не удалось загрузить файл`,memberAdded:`Участник добавлен`,memberAddFailed:`Не удалось добавить этого пользователя`,attach:`Прикрепить файл`,askModel:`Задать это сообщение модели`,noModel:`Без модели`,composerPlaceholder:`Напишите сообщение…`,thread:`Тред`,replyPlaceholder:`Ответить…`,invitePlaceholder:`Кого пригласить`,roleOwner:`владелец`,removeMember:`Удалить из канала`,leave:`Покинуть канал`,noPins:`Пока ничего не закреплено.`,noMessages:`Сообщений пока нет — поздоровайтесь.`,create:`Создать`,createFailed:`Не удалось создать канал`,nameLabel:`Название`,typeLabel:`Тип`,typePublic:`Публичный — присоединиться может любой`,typePrivate:`Приватный — только по приглашению`,descriptionLabel:`Описание`,openDm:`Открыть беседу`,dmFailed:`Не удалось открыть беседу`,dmHint:`Личные сообщения видны только вам двоим.`,dmPlaceholder:`Точное имя пользователя`,noPublic:`Публичных каналов нет.`,joined:`Вы участник`,join:`Присоединиться`,save:`Сохранить`,delete:`Удалить канал`,modelAuthor:`Модель`,unknownAuthor:`Кто-то`,edited:`изменено`,deletedMessage:`Это сообщение удалено`,modelThinking:`Модель думает…`,react:`Добавить реакцию`,reply:`Ответить в треде`,pin:`Закрепить сообщение`,unpin:`Открепить сообщение`,edit:`Редактировать сообщение`,deleteMessage:`Удалить сообщение`,replyCount:`Ответов: {{total}}`,toolCalls:{summary:`Использованные инструменты ({{total}})`,deniedHint:`Инструменты, которые что-то меняют, отклоняются в каналах. Запускайте их из чата.`}},notifications:{title:`Уведомления`,empty:`Новых уведомлений нет.`,markAllRead:`Отметить всё прочитанным`,markRead:`Отметить прочитанным`},voiceMode:{title:`Голосовой режим`,open:`Запустить голосовой режим`,close:`Закрыть голосовой режим`,starting:`Запуск…`,listening:`Слушаю…`,muted:`Микрофон выключен`,transcribing:`Расшифровка…`,generating:`Думаю…`,speaking:`Говорю…`,mute:`Выключить микрофон`,unmute:`Включить микрофон`,finishTurn:`Я закончил говорить`,skipReply:`Пропустить ответ`,microphoneFailed:`Микрофон недоступен`,transcriptionFailed:`Не удалось расшифровать`,replyTimeout:`Ответ занял слишком много времени`,unsupported:`Голосовой режим недоступен`,unsupportedHint:`Для голосового режима нужны микрофон и провайдер распознавания речи или распознавание речи браузера.`},imageEdit:{title:`Редактировать изображение`,prompt:`Опишите изменение`,promptPlaceholder:`Например: заменить небо на закат`,model:`Модель`,apply:`Применить правку`,maskHint:`Закрасьте области для перерисовки; оставьте холст нетронутым, чтобы изменить всё изображение.`,brushSize:`Размер кисти`,clearMask:`Очистить маску`,referenceImages:`Референсные изображения (до {{total}})`,noModels:`Ни одна настроенная модель не поддерживает редактирование изображений.`,saved:`Отредактированное изображение сохранено в галерее`,failed:`Не удалось отредактировать изображение`,loadFailed:`Не удалось загрузить исходное изображение`},costs:{title:`Затраты и бюджеты`,description:`Цены тарифов применяются к журналу использования; бюджеты отслеживают или ограничивают расходы.`,loadFailed:`Не удалось загрузить данные о затратах`,saveFailed:`Не удалось сохранить`,exportFailed:`Не удалось экспортировать`,exportCsv:`Экспорт CSV`,totalSpend:`Всего расходов`,meteredEvents:`События с ценой`,unmeteredEvents:`События без цены`,topModel:`Основная модель`,budgets:`Бюджеты`,noBudgets:`Бюджетов пока нет.`,budgetName:`Название бюджета`,principalId:`ID пользователя или группы`,addBudget:`Добавить бюджет`,deleteBudget:`Удалить бюджет`,budgetSaved:`Бюджет сохранён`,scope:{instance:`Вся инстанция`,user:`Пользователь`,group:`Группа`},period:{daily:`Ежедневно`,weekly:`Еженедельно`,monthly:`Ежемесячно`},mode:{observe:`Наблюдать`,soft:`Предупреждать`,hard:`Предупреждать и блокировать`},tariffs:`Тарифы`,noTariffs:`Тарифов пока нет — затраты остаются без цены, пока вы не добавите цены.`,plugin:`Плагин`,model:`Модель`,modelOptional:`Модель (необязательно)`,allModels:`Все модели`,inputPerMillion:`Ввод $/М токенов`,outputPerMillion:`Вывод $/М токенов`,unitPrice:`Цена за единицу`,effectiveFrom:`Действует с`,addTariff:`Добавить тариф`,deleteTariff:`Удалить тариф`,tariffSaved:`Тариф сохранён`},evaluations:{title:`Оценки`,description:`Слепые дуэли на арене, рейтинг Эло, многоразовые наборы оценок и ваш набор отзывов.`,loadFailed:`Не удалось загрузить оценки`,matchFailed:`Дуэль на арене не удалась`,voteRecorded:`Голос записан`,voteFailed:`Не удалось записать голос`,saveFailed:`Не удалось сохранить`,exportFailed:`Не удалось экспортировать`,setSaved:`Набор оценок сохранён`,runStarted:`Запуск начат`,pickModel:`Выберите модель`,tabs:{arena:`Арена`,leaderboard:`Рейтинг`,sets:`Наборы`,feedback:`Отзывы`},arenaModelA:`Модель A`,arenaModelB:`Модель B`,arenaPrompt:`Задайте обеим моделям один и тот же вопрос…`,startMatch:`Начать дуэль`,arenaHint:`Названия моделей скрыты до вашего голоса.`,candidate:`Ответ {{letter}}`,voteFirst:`Первый лучше`,voteSecond:`Второй лучше`,voteTie:`Ничья`,voteBothBad:`Оба плохие`,model:`Модель`,rating:`Рейтинг`,record:`Итоги`,votes:`Голоса`,noVotes:`Голосов пока нет — начните дуэль, чтобы построить рейтинг.`,newSet:`Новый набор оценок`,setName:`Название набора`,setPrompts:`Один запрос на строку…`,saveSet:`Сохранить набор`,yourSets:`Ваши наборы`,noSets:`Наборов оценок пока нет.`,itemCount:`{{total}} запросов`,run:`Запустить`,deleteSet:`Удалить набор`,cancelRun:`Отменить запуск`,exportRun:`Экспортировать запуск`,status:{queued:`В очереди`,running:`Выполняется`,completed:`Завершён`,failed:`Сбой`,cancelled:`Отменён`},noFeedback:`Отзывов пока нет — оценивайте ответы, чтобы собрать набор данных.`},passwordStrength:{levels:{weak:`Слабый`,fair:`Средний`,good:`Хороший`,strong:`Надёжный`},checks:{minLength:`Не менее 12 символов`,hasCase:`Заглавные и строчные буквы`,hasNumber:`Хотя бы одна цифра`,tooLong:`Не более 72 байт`}},connectModels:{adminOnly:`Попросите администратора подключить провайдера моделей.`,skip:`Пропустить пока — я подключу модели позже`,ollama:{status:{checking:`Проверка доступности…`,healthy:`Запущен и готов к работе с локальными моделями`,offline:`Не обнаружен на этом компьютере`,disabled:`Отключено — проверки выполняться не будут`},recheck:`Проверить снова`,enable:`Включить`,disable:`Прекратить проверку Ollama`,enabledToast:`Провайдер Ollama включён`,disabledToast:`Проверки Ollama отключены — вы можете снова включить их в настройках`,settingsFailed:`Не удалось обновить настройки Ollama`,offlineHint:`Установите Ollama с ollama.com, и она будет обнаружена автоматически — или используйте один из вариантов ниже. Если вы не планируете использовать Ollama, можно отключить эти проверки.`,healthyHint:`Ollama подключена. Загрузите модель в разделе «Модели», и можно приступать к общению.`},local:{title:`Локальный сервер`,subtitle:`llama.cpp, vLLM, llama-swap, LM Studio, mlx-lm`,keyPlaceholder:`API-ключ (необязательно)`,test:`Проверить соединение`,testing:`Проверка…`,reachable:`Подключено — найдено моделей: {{count}}`,unreachable:`По этому адресу не ответил ни один API моделей`,noModels:`Эндпоинт ответил, но не перечислил ни одной модели. Загрузите модель на вашем сервере и проверьте снова.`,enable:`Включить провайдера`,enabling:`Включение…`,enabled:`{{name}} подключён — его модели теперь доступны`,enableFailed:`Не удалось включить провайдера`},cloud:{title:`Облачный API`,subtitle:`OpenAI, Anthropic, Groq, OpenRouter и другие`,keyPlaceholder:`Вставьте ваш API-ключ {{name}}`,connect:`Подключить`,connecting:`Подключение…`,connected:`{{name}} подключён — его модели теперь доступны`,saveFailed:`Не удалось сохранить API-ключ`}},cordis:{title:`Движок Cordis`,description:`Сеансы, инструменты и чат для встроенного движка DeepSeek Harness.`,newSession:`Новый сеанс`,createFailed:`Не удалось создать сеанс.`,deleteFailed:`Не удалось удалить сеанс.`,sendFailed:`Движок не смог завершить ход.`,sessionsHeading:`Сеансы`,toolsHeading:`Инструменты`,transcriptHeading:`Расшифровка`,noSessions:`Сеансов пока нет. Создайте один, чтобы начать.`,noTools:`Движок не зарегистрировал инструменты.`,selectSession:`Выберите сеанс или создайте новый, чтобы начать.`,working:`Агент работает…`,composerLabel:`Сообщение движку`,composerPlaceholder:`Попросите движок что-нибудь сделать…`,send:`Отправить`,stop:`Остановить`,deleteSession:`Удалить сеанс`,unknownTime:`Неизвестное время`,disabledTitle:`Движок Cordis выключен`,disabledHint:`Администратор может включить его в разделе «Управление пользователями» → «Доступ и политики».`,unavailableTitle:`Движок Cordis не удалось запустить`,role:{user:`Вы`,assistant:`Движок`,system:`Система`,tool:`Инструмент`,unknown:`Сообщение`},turnFailed:`Движок не смог завершить ход`,permissions:`Разрешения`,readOnly:`Только чтение`,workspaceWrite:`Запись в рабочей области`,context:`Контекст сеанса`,permissionHint:`Режим чтения позволяет просматривать файлы. Запись разрешает изменения в рабочей области этого сеанса.`}};export{e as default};
|