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:`Proveedor`,agent:`Agente`,loading:`Cargando...`,save:`Guardar`,saving:`Guardando...`,cancel:`Cancelar`,delete:`Eliminar`,edit:`Editar`,close:`Cerrar`,back:`Atrás`,next:`Siguiente`,confirm:`Confirmar`,error:`Error`,success:`Éxito`,warning:`Advertencia`,or:`o`,optional:`opcional`,enabled:`Habilitado`,disabled:`Deshabilitado`,on:`Activado`,off:`Desactivado`,yes:`Sí`,no:`No`,search:`Buscar`,noResults:`No se encontraron resultados`,retry:`Reintentar`,refresh:`Actualizar`,download:`Descargar`,upload:`Subir`,export:`Exportar`,import:`Importar`,reset:`Restablecer`,apply:`Aplicar`,clear:`Limpiar`,all:`Todos`,none:`Ninguno`,default:`Predeterminado`,custom:`Personalizado`,remove:`Quitar`,home:`Inicio`,more:`Más`},brand:{name:`Libre WebUI`,shortName:`Libre`},appInitialization:{ollamaUnavailable:`El servicio Ollama no está disponible. Los modelos de plugins aún se pueden usar.`,backendConnectionFailed:`No se pudo conectar al servicio del backend`},auth:{login:{title:`Bienvenido de nuevo`,subtitle:`Inicia sesión en tu cuenta para continuar`,username:`Nombre de usuario`,usernamePlaceholder:`Ingresa tu nombre de usuario`,password:`Contraseña`,passwordPlaceholder:`Ingresa tu contraseña`,signIn:`Iniciar sesión`,signingIn:`Iniciando sesión...`,noAccount:`¿No tienes una cuenta?`,signUpHere:`Regístrate aquí`,loginSuccess:`¡Inicio de sesión exitoso!`,loginFailed:`Error de inicio de sesión`,checkCredentials:`Error de inicio de sesión. Por favor verifica tus credenciales.`,approvalPending:`Tu cuenta está esperando la aprobación del administrador.`,enterBoth:`Por favor ingresa usuario y contraseña`,githubSuccess:`¡Inicio de sesión con GitHub exitoso!`,githubFailed:`Autenticación de GitHub fallida`,githubVerifyFailed:`Error al verificar autenticación de GitHub`,verificationFailed:`La verificación de seguridad falló. Actualiza la página e inténtalo de nuevo.`},signup:{title:`Crear cuenta`,subtitle:`Regístrate para una nueva cuenta`,username:`Nombre de usuario`,usernamePlaceholder:`Elige un nombre de usuario`,email:`Correo electrónico`,emailPlaceholder:`tu@correo.com`,password:`Contraseña`,passwordPlaceholder:`Elige una contraseña`,confirmPassword:`Confirmar contraseña`,confirmPasswordPlaceholder:`Confirma tu contraseña`,createAccount:`Crear cuenta`,creatingAccount:`Creando cuenta...`,hasAccount:`¿Ya tienes una cuenta?`,signInHere:`Inicia sesión aquí`,signupSuccess:`¡Cuenta creada exitosamente!`,approvalPending:`Registro recibido. Un administrador debe aprobar tu cuenta.`,awaitingApproval:`Esperando aprobación`,awaitingApprovalDescription:`Tu cuenta ha sido creada, pero un administrador debe activarla antes de que puedas iniciar sesión.`,backToSignIn:`Volver a iniciar sesión`,signupFailed:`Error en el registro`,tryAgain:`Error en el registro. Por favor intenta de nuevo.`,usernameRequired:`Nombre de usuario y contraseña son obligatorios`,passwordMismatch:`Las contraseñas no coinciden`},logout:{button:`Cerrar sesión`,success:`Sesión cerrada exitosamente`},oauth:{continueWith:`Continuar con {{provider}}`,connectingTo:`Conectando a {{provider}}...`,github:`GitHub`,huggingFace:`Hugging Face`,loginSuccess:`¡Inicio de sesión con OAuth exitoso!`,completionFailed:`No se pudo completar la autenticación OAuth`,verificationFailed:`Falló la verificación de la autenticación OAuth`,authenticationFailed:`Falló la autenticación OAuth`},checkingAuth:`Verificando autenticación...`,welcome:`Bienvenido`,noEmail:`Sin correo electrónico`,role:`Rol`,id:`ID`,userId:`ID de usuario`,signInDescription:`Inicia sesión con tu cuenta de GitHub para continuar`,signInWithGitHub:`Iniciar sesión con GitHub`,jwtActive:`Autenticación JWT activa`,jwtDescription:`Autenticación basada en JWT con GitHub OAuth`,github:`GitHub`,provider:`Proveedor`,tagline:`Tu pila de IA debería responder a ti.`,selfHosted:`Autohospedado · Apache 2.0`,highlights:{local:{title:`Primero local`,body:`Tus conversaciones y archivos permanecen en la máquina donde ejecutas esto.`},providers:{title:`Cualquier proveedor`,body:`Modelos locales a través de Ollama, además de los proveedores remotos que elijas añadir.`},work:{title:`Trabajo aislado`,body:`Dale a un modelo un espacio de trabajo aislado con archivos, una terminal y una vista previa.`}},oidc:{defaultProviderName:`Inicio de sesión único`},mfa:{sectionTitle:`Autenticación en dos pasos`,sectionDescription:`Protege tu cuenta con una aplicación de autenticación y llaves de acceso.`,totpTitle:`Aplicación de autenticación`,totpEnabledHint:`Activada. Códigos de recuperación sin usar: {{count}}`,totpDisabledHint:`Añade un segundo paso al inicio de sesión con contraseña mediante un código de un solo uso.`,enableButton:`Activar`,disableButton:`Desactivar`,activateButton:`Confirmar`,regenerateCodes:`Nuevos códigos de recuperación`,confirmWithCode:`Confirma con un código de tu aplicación o un código de recuperación`,enabled:`La autenticación en dos pasos está activada.`,disabled:`La autenticación en dos pasos está desactivada.`,invalidCode:`Ese código no es válido.`,enrollFailed:`No se pudo iniciar la configuración.`,challengeExpired:`El desafío de inicio de sesión caducó. Inicia sesión de nuevo.`,setupTitle:`Configurar la autenticación en dos pasos`,setupSubtitle:`Esta instancia exige un segundo paso de inicio de sesión. Añade el secreto a tu aplicación de autenticación para continuar.`,verifyTitle:`Introduce tu código`,verifyHint:`Introduce el código de 6 dígitos de tu aplicación de autenticación o un código de recuperación.`,secretHint:`Añade este secreto a tu aplicación de autenticación y confirma con el código actual.`,openAuthenticator:`Abrir en la aplicación de autenticación`,codeLabel:`Código de 6 dígitos`,codeOrRecoveryLabel:`Código o código de recuperación`,codePlaceholder:`123456`,verifyButton:`Verificar`,backToSignIn:`Volver al inicio de sesión`,recoveryCodesTitle:`Códigos de recuperación`,recoveryCodesHint:`Guarda estos códigos en un lugar seguro. Cada uno permite iniciar sesión una vez si pierdes tu autenticador.`,recoveryCodesSaved:`He guardado mis códigos de recuperación`,recoveryCodesRegenerated:`Nuevos códigos de recuperación creados. Los anteriores ya no funcionan.`},passkeys:{sectionTitle:`Llaves de acceso`,sectionDescription:`Inicia sesión sin contraseña con el bloqueo de pantalla de tu dispositivo o una llave de seguridad.`,addButton:`Añadir llave de acceso`,empty:`Aún no hay llaves de acceso.`,unnamed:`Llave de acceso`,createdAt:`Añadida`,lastUsedAt:`Último uso`,removeButton:`Eliminar llave de acceso`,registered:`Llave de acceso añadida.`,registerFailed:`No se pudo añadir la llave de acceso.`,removed:`Llave de acceso eliminada.`,removeFailed:`No se pudo eliminar la llave de acceso.`,signInButton:`Iniciar sesión con una llave de acceso`,signInFailed:`El inicio de sesión con llave de acceso falló.`}},setup:{welcome:{title:`Bienvenido a Libre WebUI`,subtitle:`Comencemos`,description:`Configura tu instancia de Libre WebUI en solo unos pasos`,createAdmin:`Crear cuenta de administrador`,features:{secure:{title:`Seguro y privado`,description:`Tus conversaciones permanecen en tu dispositivo`},fast:{title:`Rápido y responsivo`,description:`Optimizado para velocidad y rendimiento`},openSource:{title:`Código abierto`,description:`Software libre y de código abierto`}}},admin:{title:`Crear cuenta de administrador`,subtitle:`Configuración del administrador`,description:`Crea la primera cuenta de administrador para tu instancia de Libre WebUI`,usernamePlaceholder:`Ingresa nombre de usuario admin`,passwordPlaceholder:`Introduce una contraseña (mínimo 12 caracteres)`,confirmPlaceholder:`Confirma tu contraseña`,creating:`Creando...`,createAdmin:`Crear admin`,success:`¡Cuenta de administrador creada exitosamente!`,failed:`Error al crear cuenta de administrador`,approvalUnexpected:`El administrador inicial no pudo ser activado. Por favor, inténtalo de nuevo.`,fillAllFields:`Por favor completa todos los campos`,note:`Esta será la cuenta de administrador principal para tu instancia de Libre WebUI`},encryptionKey:{title:`Guarda tu clave de cifrado`,subtitle:`Importante: Guarda esta clave`,description:`Esta clave de cifrado protege tus datos sensibles. Guárdala de forma segura - la necesitarás si alguna vez necesitas restaurar tu base de datos.`,warning:`Advertencia`,warningText:`Si pierdes esta clave y necesitas restaurar tu base de datos, tus datos cifrados (claves API, preferencias) serán irrecuperables.`,label:`Tu clave de cifrado`,loading:`Cargando...`,copyToClipboard:`Copiar al portapapeles`,copied:`¡Clave de cifrado copiada al portapapeles!`,copyFailed:`Error al copiar la clave al portapapeles`,envNote:`Esta clave también está guardada en tu archivo backend/.env como ENCRYPTION_KEY`,acknowledgment:`He guardado mi clave de cifrado en un lugar seguro y entiendo que perderla puede resultar en pérdida de datos.`,confirmRequired:`Por favor confirma que has guardado la clave de cifrado`,continue:`Continuar a Libre WebUI`},connectModels:{title:`Conecta tus modelos`,subtitle:`Local o en la nube — elige lo que ya uses. Siempre puedes cambiarlo más tarde.`}},chat:JSON.parse(`{"greeting":{"morning":"Buenos días","afternoon":"Buenas tardes","evening":"Buenas tardes","night":"Buenas noches"},"followUp":"Continuar","welcome":{"helpToday":"¿En qué puedo ayudarte hoy?","helpTonight":"¿En qué puedo ayudarte esta noche?","variety":{"create":{"title":"¿Qué vamos a crear?","subtitle":"Empieza con una idea, un boceto o un problema que se resiste."},"explore":{"title":"¿Por dónde empezamos?","subtitle":"Trae esa pregunta a la que siempre vuelves."},"imagine":{"title":"¿Qué estás imaginando?","subtitle":"Podemos darle forma juntos."},"focus":{"title":"¿Qué merece tu atención?","subtitle":"Aclaremos cuál es el siguiente paso."},"untangle":{"title":"¿Qué se ha complicado?","subtitle":"Cuéntame primero la versión desordenada."},"momentum":{"title":"Cuando quieras.","subtitle":"Retoma una idea, un plan o algo que dejaste a medias."},"open":{"title":"¿Qué tienes en mente?","subtitle":"Una idea pequeña o un proyecto ambicioso. Todo sirve."},"challenge":{"title":"¿Qué vamos a resolver?","subtitle":"Cuéntame qué no está funcionando todavía."},"draft":{"title":"Empecemos por algún sitio.","subtitle":"No tiene que estar perfecto."},"possibility":{"title":"¿En qué podría convertirse?","subtitle":"Enséñame el material en bruto."},"unexpected":{"title":"Hagamos algo inesperado.","subtitle":"Dame una condición, un estado de ánimo o una idea a medio formar."}}},"input":{"placeholder":"Enviar un mensaje","messagePlaceholder":"Mensaje...","attachImages":"Adjuntar imágenes","attachments":"Adjuntos y funciones avanzadas","sendMessage":"Enviar mensaje","stopGeneration":"Detener generación","menu":{"uploadImages":"Subir imágenes","attachDocument":"Adjuntar documento","attachWebpage":"Adjuntar página web","structuredOutput":"Salida estructurada","attach":"Adjuntar","documentAttached":"Documento adjuntado","webpageAttached":"Página web adjuntada","attachFailed":"No se pudo adjuntar","attachKnowledge":"Adjuntar conocimiento","noCollections":"Aún no hay colecciones: crea una en Ajustes → Documentos"},"voiceInput":"Entrada de voz","voiceStop":"Dejar de escuchar","transcriptionSource":"Fuente de reconocimiento de voz","browserSpeech":"Servicio de voz del navegador","providerTranscriptionDisclosure":"Grabar y enviar audio a {{provider}} para transcribirlo","webSearchOn":"Búsqueda web activada — las respuestas usan resultados en vivo","webSearchOff":"Buscar en la web para este mensaje","toolsOn":"Herramientas activadas: el modelo puede llamar a las herramientas aprobadas","toolsOff":"Permitir que el modelo llame a herramientas en este mensaje","thinkingOn":"Razonamiento activado ({{level}})","thinkingOff":"Razonar antes de responder"},"session":{"new":"Nuevo chat","work":"Trabajo","chat":"Chat","private":"Privado","incognito":"Chat de incógnito","privateMode":"Modo privado","privateDescription":"Esta conversación no se guardará","privateTooltip":"Iniciar una conversación privada que no se guardará","deleteConfirm":"¿Estás seguro de que deseas eliminar este chat?","generatingTitle":"Generando título","noChats":"Aún no hay chats","createFirst":"Crea tu primer chat arriba","chats":"Chats","renameChat":"Renombrar chat","openNewTab":"Abrir en pestaña nueva","pinChat":"Fijar","unpinChat":"Desfijar","deleteChat":"Eliminar chat","archiveChat":"Archivar chat","groups":{"pinned":"Fijados","today":"Hoy","yesterday":"Ayer","previous7Days":"Últimos 7 días","previous30Days":"Últimos 30 días","older":"Más antiguos"},"folder":{"new":"Nueva carpeta","namePlaceholder":"Nombre de la carpeta","move":"Mover a carpeta","remove":"Quitar de la carpeta","delete":"Eliminar carpeta","deleteConfirm":"¿Eliminar esta carpeta? Los chats se conservan."},"shareChat":"Compartir chat…"},"persona":{"applied":"Persona aplicada","label":"Persona","loadFailed":"No se pudieron cargar los detalles de la persona","removeFailed":"No se pudo eliminar la persona"},"model":{"updated":"Modelo actualizado","noModels":"No hay modelos disponibles","noModelsDescription":"No hay modelos disponibles. Asegúrate de que Ollama esté ejecutándose y tenga modelos instalados.","pullCommand":"ollama pull llama3.2:3b","noModelsTooltip":"No hay modelos disponibles. Asegúrate de que Ollama esté ejecutándose y los modelos estén instalados.","selectBeforePrivateChat":"Selecciona un modelo disponible antes de iniciar el chat privado","selectBeforeSending":"Selecciona un modelo disponible antes de enviar","selectBeforeRegenerating":"Selecciona un modelo disponible antes de regenerar","connectDescription":"Aún no hay modelos conectados. Elige una fuente abajo — un entorno de ejecución local, tu propio servidor o una API en la nube — y estarás chateando en menos de un minuto."},"footer":{"disclaimer":"Los LLM pueden cometer errores - verifica la información importante","images":"{{count}} imagen","images_plural":"{{count}} imágenes","structuredOutput":"Salida estructurada"},"mediaUpload":{"dropImagesHere":"Arrastra imágenes aquí o","supportedFormats":"Soporta: JPG, PNG, GIF, WebP (máx. 10 MB cada una)","browse":"explorar","unsupportedFileType":"Tipo de archivo no compatible: {{name}}","maxImagesAllowed":"Se permite un máximo de {{count}} imágenes","imageTooLarge":"La imagen {{name}} es demasiado grande (máx. 10 MB)"},"structuredOutput":{"title":"Formato de respuesta","none":"Ninguno (lenguaje natural)","noneDescription":"Respuesta predeterminada en lenguaje natural","json":"JSON","jsonDescription":"Formato JSON estructurado","list":"Lista","listDescription":"Array de elementos","summary":"Resumen","summaryDescription":"Resumen de documento con puntos clave","analysis":"Análisis","analysisDescription":"Análisis estructurado con pros/contras","custom":"Esquema personalizado","customDescription":"Define tu propio esquema JSON","customSchema":"Esquema JSON personalizado","schemaPreview":"Vista previa del esquema","applySchema":"Aplicar esquema","cancel":"Cancelar","enabled":"Salida estructurada habilitada"},"controls":{"title":"Controles del chat","systemPrompt":"Prompt del sistema","systemPromptPlaceholder":"Instrucciones que solo se aplican a este chat…","advancedParams":"Parámetros avanzados","advancedParamsDescription":"Anulaciones para este chat. Los campos vacíos usan tus valores globales.","fromModel":"del modelo","fromModelHint":"Este valor proviene de la configuración recomendada por el propio modelo.","contextCapped":"Contexto limitado a {{context}} de los {{trained}} para los que se entrenó el modelo, para que siga cargando.","saved":"Controles guardados","saveFailed":"No se pudieron guardar los controles","params":{"temperature":"Temperatura","topP":"Top P","topK":"Top K","minP":"Min P","maxTokens":"Tokens máx.","repeatPenalty":"Penalización de repetición","seed":"Semilla","contextLength":"Longitud de contexto"},"thinking":"Razonamiento","thinkingDescription":"Cuánto razona el modelo antes de responder. Los modelos sin razonamiento lo ignoran.","compaction":"Compactación del contexto","compactionDescription":"Cuando el servidor compacta conversaciones largas, este chat puede quedar fuera y conservar todo su historial.","compactionDefault":"Predeterminado del servidor","compactionOff":"Desactivada en este chat"},"message":{"sources":"Fuentes"},"toasts":{"chatCreated":"Nuevo chat creado","createFailed":"No se pudo crear la sesión","loadFailed":"No se pudieron cargar las sesiones","chatDeleted":"Chat eliminado","deleteFailed":"No se pudo eliminar el chat","deleteSessionFailed":"No se pudo eliminar la sesión","historyCleared":"Todo el historial de chat se ha borrado","historyClearFailed":"No se pudo borrar el historial de chat","titleUpdated":"Título del chat actualizado","updateFailed":"No se pudo actualizar la sesión","noValidSession":"No hay una sesión de chat válida. Crea o selecciona un chat.","sessionNotFound":"Sesión no encontrada o no válida. Selecciona o crea una sesión de chat válida.","noModelProvider":"No hay ningún proveedor de modelos disponible","modelUnavailable":"El modelo seleccionado \\"{{model}}\\" no está disponible desde {{provider}}. Reactiva ese proveedor o selecciona otro modelo.","modelSwitched":"Cambiado a {{model}} (el modelo anterior ya no está disponible)","modelsLoadFailed":"No se pudieron cargar los modelos","modelUpdated":"Modelo actualizado para el chat actual","modelUpdateFailed":"No se pudo actualizar el modelo de la sesión","titlePreviewFallback":"No se pudo generar un título; se usará la vista previa del mensaje","titleGenerated":"Título del chat generado","titleGenerationFailed":"No se pudo generar el título del chat","sessionNotFoundRedirect":"No se encontró la sesión. Creando una nueva sesión...","comparisonError":"{{model}}: {{error}}","generationFailed":"falló la generación","comparisonFailed":"falló la comparación","sendFailed":"No se pudo enviar el mensaje","noMessageToRegenerate":"No hay ningún mensaje que regenerar","regenerateFailed":"No se pudo regenerar el mensaje","messageNotFound":"No se encontró el mensaje","branchSwitched":"Se cambió a la variante {{number}}","branchSelectFailed":"No se pudo seleccionar la rama","editFailed":"No se pudo editar el mensaje","toolDecisionFailed":"No se pudo registrar la decisión de la herramienta"},"documents":{"title":"Documentos en contexto"},"context":{"title":"Ventana de contexto:","full":"{{percent}}% llena","tokensUsed":"{{used}} / {{budget}} tokens usados","tokensUsedNoBudget":"{{used}} tokens usados","capped":"limitada desde {{trained}}"},"queue":{"title":"En cola ({{total}})","moveUp":"Subir","moveDown":"Bajar","updateFailed":"No se pudo actualizar el mensaje en cola","enqueueFailed":"No se pudo poner el mensaje en cola"},"compare":{"title":"Comparar modelos","hint":"Responder con hasta {{max}} modelos adicionales"},"fork":{"action":"Bifurcar desde aquí","created":"Chat bifurcado","failed":"No se pudo bifurcar el chat","origin":"Bifurcado desde {{title}}","originUnknown":"otro chat"},"sharedReadOnly":"Compartido por {{owner}} — solo lectura"}`),sidebar:{navigation:{chat:`Chat`,models:`Modelos`,personas:`Personas`,imagine:`Generar`,agents:`Agentes`,work:`Trabajo`,settings:`Configuración`,usageAnalytics:`Uso del proveedor`,system:`Sistema`,userManagement:`Gestión de usuarios`,signOut:`Cerrar sesión`,exploreLabel:`Explorar`,notes:`Notas`,calendar:`Calendario`,automations:`Automatizaciones`,prompts:`Prompts`,skills:`Habilidades`,tools:`Herramientas`,channels:`Canales`,cordis:`Motor Cordis`},toggleSize:`Cambiar tamaño de barra lateral`,expandSidebar:`Expandir barra lateral`},user:{menu:{changePicture:`Cambiar imagen`,settings:`Configuración`,usageAnalytics:`Uso del proveedor`,system:`Sistema`,userManagement:`Gestión de usuarios`,logout:`Cerrar sesión`,pinShortcut:`Fijar en la barra lateral`,unpinShortcut:`Quitar de la barra lateral`,evaluations:`Evaluaciones`},avatar:{title:`Cambiar imagen de perfil`,updated:`Imagen de perfil actualizada`,updateFailed:`Error al actualizar imagen de perfil`,saving:`Guardando...`,label:`Avatar`,uploadAvatarImage:`Subir imagen de avatar`,dragAndDrop:`Arrastra y suelta una imagen o haz clic para explorar`,chooseImage:`Elegir imagen`,uploading:`Subiendo...`,enterImageUrl:`O introduce la URL de la imagen`,supportedFormats:`Soporta: JPG, PNG, GIF, WebP (máx. 2 MB). Las imágenes cuadradas funcionan mejor.`,customAvatar:`Imagen de avatar personalizada`,clickToChange:`Haz clic para cambiar o eliminar`,removed:`Avatar eliminado`,uploaded:`Avatar subido con éxito`,invalidFile:`Por favor selecciona un archivo de imagen válido`,fileTooLarge:`El tamaño de la imagen del avatar debe ser menor a 2 MB`,readFailed:`Error al leer el archivo de imagen`,uploadFailed:`Error al subir la imagen del avatar`},profile:{noEmail:`Sin correo electrónico`}},settings:JSON.parse(`{"title":"Configuración","tabs":{"appearance":"Apariencia","model":"Predeterminados","systemMessage":"Mensaje del sistema","plugins":"Plugins","search":"Búsqueda","generation":"Generación","documents":"Documentos","tts":"Voz","imageGen":"Imágenes","data":"Datos","shortcuts":"Atajos","about":"Acerca de","sessions":"Sesiones","apiKeys":"Claves API","notifications":"Notificaciones","ollamaDisabled":"Un administrador ha desactivado Ollama"},"appearance":{"title":"Apariencia","language":{"title":"Idioma","description":"Selecciona tu idioma preferido"},"theme":{"title":"Tema","light":"Claro","dark":"Oscuro","amoled":"Negro Puro","celestial":"Celestial","system":"Sistema"},"accent":{"title":"Color de acento","custom":"Color personalizado","useColor":"Usar {{color}} como acento","behaviorTitle":"Paleta de la interfaz","behaviorDescription":"Elige si el acento se limita a los controles o adapta toda la interfaz clara u oscura.","defaultStyle":"Predeterminada","defaultStyleDescription":"Mantener las superficies neutras de los temas claro y oscuro.","adaptedStyle":"Adaptar al acento","adaptedStyleDescription":"Teñir superficies, bordes y texto con el color de acento."},"chatInterface":{"title":"Interfaz de chat","showUsername":"Mostrar nombre de usuario","showUsernameDescription":"Mostrar nombre de usuario en mensajes de chat","followUpSuggestions":"Sugerencias de seguimiento","followUpSuggestionsDescription":"Sugerir respuestas rápidas tras cada respuesta","hapticFeedback":"Respuesta háptica (Android)","hapticFeedbackDescription":"Usar vibraciones sutiles para acciones móviles importantes","autoOpenArtifacts":"Abrir artefactos automáticamente","autoOpenArtifactsDescription":"Abrir el panel de artefactos cuando una respuesta crea uno"},"background":{"title":"Imagen de fondo","enable":"Habilitar imagen de fondo","enableDescription":"Muestra tu fondo en Inicio, Chat y Trabajo.","blur":"Desenfoque","opacity":"Opacidad","upload":"Subir imagen de fondo","dragDrop":"Arrastra una imagen o haz clic para explorar","chooseImage":"Elegir imagen","effect":"Estilo","dither":"Tramado","original":"Original","blurred":"Desenfocado","intensity":"Intensidad","preview":"Vista previa del fondo","change":"Cambiar imagen","saved":"Guardado","saveFailed":"No se pudieron guardar los cambios. Inténtalo de nuevo.","originalPreserved":"La imagen original se conserva sin cambios.","fileTooLarge":"La imagen de fondo no debe superar los 10 MB."},"celestial":{"title":"Hora del día","description":"Celestial sigue al sol donde estés. Desliza para previsualizar cualquier minuto o deja que siga el reloj.","live":"En vivo","preview":"Vista previa","followClock":"Seguir el reloj","sunrise":"Amanecer","sunset":"Atardecer","location":"Ubicación","locationHint":"Opcional. Se guarda solo en este navegador y nunca se envía al servidor; las coordenadas se redondean a un kilómetro.","useMyLocation":"Usar mi ubicación","locationDenied":"El navegador no compartió la ubicación. Puedes escribir las coordenadas.","latitude":"Latitud","longitude":"Longitud","apply":"Aplicar","clear":"Borrar","approximateDay":"Duración del día aproximada","weather":"Seguir el clima","weatherHint":"Obtiene las condiciones actuales de Open-Meteo para tu ubicación: nubes, lluvia, nieve, niebla y viento dan forma al cielo. Requiere una ubicación.","weatherLoading":"Obteniendo el clima…","weatherUnavailable":"El clima no está disponible ahora.","wind":"viento de {{speed}} km/h","kinds":{"clear":"Despejado","partly":"Parcialmente nublado","overcast":"Cubierto","fog":"Niebla","drizzle":"Llovizna","rain":"Lluvia","snow":"Nieve","thunder":"Tormenta"}}},"saveSettings":"Guardar configuración","preferences":{"updateFailed":"No se pudo actualizar la configuración: {{error}}"},"model":{"title":"Configuración del modelo","defaultModel":"Modelo predeterminado","defaultModelDescription":"Este modelo se usará por defecto para nuevas conversaciones","selectModel":"Seleccionar un modelo","specializedModels":"Modelos especializados","visionModel":"Modelo de visión","selectVisionModel":"Usar el modelo de chat actual","visionModelDescription":"Se utiliza automáticamente siempre que el contexto del chat saliente contenga imágenes. Elige un modelo que admita la entrada de imágenes.","visionModelUpdateFailed":"Error al actualizar el modelo de visión: {{error}}","visionModelNoProvider":"Este modelo de visión no tiene identidad de proveedor. Selecciona un modelo disponible.","persona":"Persona","updateAll":"Actualizar todos los modelos","updateAllDescription":"Buscar actualizaciones y descargar las últimas versiones de todos los modelos instalados","updateAllButton":"Actualizar todos","updating":"Actualizando modelos...","currentModelInfo":"Info del modelo actual","name":"Nombre","size":"Tamaño","family":"Familia","format":"Formato","status":"Estado","statusStarting":"Iniciando...","statusComplete":"Completado","statusError":"Error","bulkOperations":"Operaciones masivas","autoTitle":{"title":"Generación automática de títulos","enable":"Habilitar título automático","enableDescription":"Generar títulos de chat y resúmenes del razonamiento en tiempo real","taskModel":"Modelo de tarea","selectTaskModel":"Seleccionar modelo de tarea","taskModelDescription":"Modelo usado para títulos y resúmenes del razonamiento en tiempo real. El razonamiento reciente se envía a este modelo."},"updatingModel":"Actualizando {{name}} ({{current}}/{{total}})","modelsProgress":"{{current}} de {{total}} modelos","defaultModelUpdated":"Modelo predeterminado actualizado","allModelsUpdated":"¡Todos los modelos se actualizaron correctamente!","updateAllFailed":"No se pudieron actualizar los modelos: {{error}}"},"systemMessage":{"title":"Mensaje del sistema","description":"Establece un mensaje de sistema personalizado que se usará para todas las nuevas conversaciones.","placeholder":"Ingresa un mensaje del sistema...","saved":"Mensaje del sistema guardado","saveFailed":"Error al guardar mensaje del sistema"},"plugins":{"title":"Plugins","description":"Gestiona tus plugins instalados","providerConnections":"Conexiones de proveedores","providerConnectionsDescription":"Conecta, configura e inspecciona proveedores de modelos a través de plugins.","providers":"Proveedores","searchProviders":"Buscar proveedores","noProvidersFound":"Ningún proveedor coincide con tu búsqueda.","selectProvider":"Selecciona un proveedor","selectProviderDescription":"Elige un proveedor para inspeccionar su conexión y catálogo de modelos.","addNew":"Agregar nuevo plugin","upload":"Subir plugin","addJson":"Agregar JSON","uploading":"Subiendo...","jsonPlaceholder":"Pega la configuración JSON del plugin...","install":"Instalar plugin","noPlugins":"No hay plugins instalados","noPluginsDescription":"Agrega un plugin para extender funcionalidades","loading":"Cargando plugins...","installed":"Plugins instalados","active":"Plugins activos","activeLabel":"Activo","inactive":"Inactivo","activate":"Activar","deactivate":"Desactivar","models":"modelos","apiKeySet":"Clave API establecida","apiKeyConfiguration":"Configuración de clave API","apiKeyDescription":"Almacena una clave API personal para {{name}}.","apiKeyEnvAlternative":"Alternativamente, establece la","environmentVariable":"variable de entorno","apiKeyConfigured":"Clave API configurada","apiKeyPlaceholder":"Ingresa tu clave API...","saveApiKey":"Guardar clave API","showApiKey":"Mostrar clave API","hideApiKey":"Ocultar clave API","configure":"Configurar","providerSettings":"Ajustes del proveedor","status":"Estado","defaultEndpoint":"Endpoint predeterminado","modelCatalog":"Catálogo de modelos","modelCatalogDescription":"Modelos descubiertos y configurados para este proveedor y sus capacidades.","refreshModels":"Actualizar modelos","noModelsConfigured":"No hay modelos configurados para este proveedor.","modelId":"ID del modelo","capabilities":"Capacidades","modelCatalogUpdated":"Catálogo de modelos actualizado: {{count}} modelos.","modelCatalogUnchanged":"El catálogo de modelos ya está actualizado.","modelCatalogNeedsApiKey":"Añade una clave de API válida para este proveedor para cargar su lista de modelos en vivo.","modelCatalogUnavailable":"No se pudo cargar la lista de modelos del proveedor.","modelCatalogRefreshFailed":"Error al actualizar el catálogo de modelos","invalidJson":"Formato JSON no válido","capability":{"chat":"Chat","embedding":"Embedding","image":"Imagen","speech":"Voz","transcription":"Transcripción"},"exportPlugin":"Exportar plugin","deletePlugin":"Eliminar plugin","apiKey":{"title":"Clave API","placeholder":"Ingresa clave API","save":"Guardar clave","remove":"Eliminar clave","configured":"Clave API configurada","notConfigured":"Clave API requerida","saved":"Clave API guardada exitosamente","removed":"Clave API eliminada","saveFailed":"Error al guardar clave API","removeFailed":"Error al eliminar clave API","enterKey":"Por favor ingresa una clave API"},"variables":"Variables"},"generation":{"title":"Opciones de generación","description":"Configura cómo la IA genera respuestas","scopeLabel":"Se aplica a","scopeAll":"Todos los modelos","scopeModel":"Solo {{model}}","scopeAllHint":"Los valores que usa cada modelo salvo que tenga los suyos.","scopeModelHint":"Se guarda solo para este modelo y prevalece sobre los valores generales.","advancedSettings":"Ajustes avanzados de generación","advancedSettingsDescription":"Muestreo, límites de tokens, contexto, penalizaciones y secuencias de parada","coreParameters":"Parámetros principales","temperature":"Temperatura","temperatureDescription":"Controla la aleatoriedad. Valores más bajos son más enfocados, más altos más creativos.","topP":"Top P","topPDescription":"Controla la diversidad mediante muestreo de núcleo. Valores más bajos se enfocan en tokens probables.","topK":"Top K","topKDescription":"Limita la selección de tokens a los K más probables. Establece en 0 para deshabilitar.","minP":"Min P","minPDescription":"Umbral mínimo de probabilidad para selección de tokens.","generationControl":"Control de generación","maxTokens":"Tokens máximos","maxTokensDescription":"Número máximo de tokens a generar en la respuesta.","repeatPenalty":"Penalización de repetición","repeatPenaltyDescription":"Penaliza tokens repetidos. Valores más altos reducen la repetición.","contextLength":"Longitud de contexto","contextLengthDescription":"Tamaño máximo de ventana de contexto para conversaciones.","seed":"Semilla","optional":"opcional","random":"Aleatorio","seedDescription":"Establece una semilla específica para salidas reproducibles.","advancedOptions":"Opciones avanzadas","presencePenalty":"Penalización de presencia","presencePenaltyDescription":"Penaliza tokens que aparecen en el contexto.","frequencyPenalty":"Penalización de frecuencia","frequencyPenaltyDescription":"Penaliza tokens usados frecuentemente.","stopSequences":"Secuencias de parada","commaSeparated":"separadas por comas","stopSequencesDescription":"Tokens personalizados que detendrán la generación cuando se encuentren.","resetDefaults":"Restablecer predeterminados","saveOptions":"Guardar opciones","saveSuccess":"Opciones de generación actualizadas correctamente","saveFailed":"No se pudieron actualizar las opciones de generación: {{error}}","modelDefaultsLoaded":"Se cargó la configuración recomendada por {{model}}","resetSuccess":"Opciones de generación restablecidas a los valores predeterminados","resetFailed":"No se pudieron restablecer las opciones de generación: {{error}}","embeddingSettings":"Configuración de embeddings","enableEmbeddings":"Habilitar embeddings de documentos","thinking":"Razonamiento","thinkingDescription":"Esfuerzo de razonamiento predeterminado para las respuestas. Cada chat puede cambiarlo.","thinkingLevels":{"default":"Predeterminado del modelo","defaultWith":"Predeterminado del modelo ({{level}})","off":"Desactivado","on":"Activado","low":"Bajo","medium":"Medio","high":"Alto"}},"documents":{"title":"Configuración de documentos","embeddings":{"title":"Embeddings","enable":"Habilitar embeddings de documentos","model":"Modelo de embedding","modelDescription":"Selecciona el modelo usado para embedding de documentos","chunkSize":"Tamaño de chunk","chunkSizeInTokens":"(en tokens)","chunkSizeDescription":"Tamaño de los chunks de texto para embedding","chunkOverlap":"Superposición de chunks","chunkOverlapInTokens":"(en tokens)","chunkOverlapDescription":"Superposición entre chunks consecutivos","similarityThreshold":"Umbral de similitud","similarityDescription":"Puntuación mínima de similitud para incluir resultados","status":"Estado de embedding","statusLabel":"Estado","available":"Disponible","unavailable":"No disponible","chunksWithEmbeddings":"Chunks con embeddings","coverage":"Cobertura","regenerate":"Regenerar embeddings","regenerating":"Regenerando...","regenerateSuccess":"Se regeneraron los embeddings de {{count}} documentos","regeneratePartialSuccess":"Se regeneraron {{count}} documentos; se omitieron {{skipped}}","regenerateFailed":"No se pudieron regenerar los embeddings: {{error}}","saveSuccess":"Configuración de embeddings actualizada correctamente","saveFailed":"No se pudo actualizar la configuración de embeddings: {{error}}","resetSuccess":"Configuración de embeddings restablecida a los valores predeterminados","resetFailed":"No se pudo restablecer la configuración de embeddings: {{error}}"},"collections":{"title":"Colecciones de conocimiento","description":"Agrupa documentos en colecciones y adjúntalas a cualquier chat.","namePlaceholder":"Nombre de la colección","create":"Crear","none":"Sin colección","deleteConfirm":"¿Eliminar esta colección? Los documentos se conservan.","createFailed":"No se pudo crear la colección","deleteFailed":"No se pudo eliminar la colección","assignFailed":"No se pudo mover el documento","share":"Compartir colección","shared":"compartida"},"library":{"title":"Documentos subidos","description":"Documentos disponibles como contexto del chat. Un documento subido en un chat permanece en su conversación; un documento sin chat ni colección se suma a todas las conversaciones.","empty":"Aún no hay documentos subidos.","chatScope":"Un chat","everyChatScope":"Todos los chats","deleteConfirm":"¿Eliminar \\"{{name}}\\"? Desaparecerá de todos los chats.","deleteFailed":"No se pudo eliminar el documento","extractionFailed":"Extracción fallida","extractionQueued":"Extrayendo…"}},"tts":{"title":"Texto a voz","description":"Configura ajustes de texto a voz para leer mensajes en voz alta","loadingProviders":"Cargando proveedores TTS...","noProviders":"Sin proveedores TTS","noProvidersDescription":"Configura un plugin con soporte TTS para habilitar texto a voz","enable":"Habilitar TTS","enableDescription":"Permitir texto a voz para mensajes del asistente","autoPlay":"Reproducción automática","autoPlayDescription":"Leer automáticamente nuevos mensajes del asistente en voz alta","streamSentences":"Reproducción natural por lotes","streamSentencesDescription":"Genera por adelantado varios lotes adaptados a las frases y reprodúcelos como una única respuesta continua.","voiceConfiguration":"Configuración de voz","model":"Modelo TTS","modelDescription":"Selecciona el modelo para generación de texto a voz","voice":"Voz","selectVoice":"Selecciona una voz","voiceDescription":"Elige la voz para texto a voz","providerDefaultVoice":"Este modelo usa su voz predeterminada a menos que proporciones una grabación de referencia al generar el habla.","voiceCloningAvailable":"Clonación de voz disponible","voiceCloningAvailableDescription":"Usa Imagina → Audio para crear voz a partir de una grabación de referencia autorizada y su transcripción exacta. Si quieres, puedes guardar la referencia como una voz reutilizable.","savedVoiceOption":"{{name}} (voz guardada)","savedVoices":"Voces guardadas","loadingSavedVoices":"Cargando voces guardadas…","deleteSavedVoice":"Eliminar la voz guardada {{name}}","deleteSavedVoiceConfirm":"¿Eliminar la voz guardada «{{name}}»? Se borrarán su grabación de referencia y su transcripción.","savedVoiceDeleted":"Voz guardada eliminada","savedVoicePreferenceCleanupFailed":"Se eliminó la voz guardada, pero no se pudieron restablecer los ajustes de Voz","savedVoiceDeleteFailed":"No se pudo eliminar la voz guardada","speed":"Velocidad","speedSlow":"0,5x","speedNormal":"1,0x","speedFast":"2,0x","availableProviders":"Proveedores disponibles","models":"modelos","test":"Probar","testing":"Probando...","stop":"Detener","consentRevoked":"Consentimiento retirado","consentExpired":"Consentimiento caducado","transferCount":"enviado al proveedor {{total}} veces","consentExpires":"consentimiento hasta {{date}}","revokeSavedVoice":"Retirar el consentimiento de {{name}}","revokeSavedVoiceConfirm":"¿Retirar el consentimiento de «{{name}}»? La voz guardada ya no podrá usarse, pero el registro del consentimiento se conserva.","savedVoiceRevoked":"Consentimiento retirado","savedVoiceRevokeFailed":"No se pudo retirar el consentimiento","savedVoiceUnavailableCleanupFailed":"La voz guardada no está disponible y no se pudo eliminar de la configuración de Voz","saveSuccess":"Configuración de TTS guardada correctamente","saveFailed":"No se pudo guardar la configuración de TTS: {{error}}","testFailed":"Falló la prueba de TTS: {{error}}"},"imageGen":{"title":"Generación de imágenes","description":"Configura ajustes y proveedores de generación de imágenes","loadingProviders":"Cargando proveedores de generación de imágenes...","noProviders":"Sin proveedores de generación de imágenes","noProvidersDescription":"Configura un plugin con soporte de generación de imágenes","enable":"Habilitar generación de imágenes","enableDescription":"Permitir generación de imágenes con IA en conversaciones","configuration":"Configuración","model":"Modelo","modelDescription":"Selecciona el modelo para generación de imágenes","size":"Tamaño","sizeDescription":"Resolución de imágenes generadas","quality":"Calidad","qualityDescription":"Nivel de calidad de imágenes generadas","style":"Estilo","styleDescription":"Preajuste de estilo para imágenes generadas","availableProviders":"Proveedores disponibles","models":"modelos","saveSuccess":"Configuración de generación de imágenes guardada correctamente","saveFailed":"No se pudo guardar la configuración de generación de imágenes: {{error}}"},"data":{"title":"Gestión de datos","export":"Exportar datos","exportDescription":"Descarga un archivo portátil de preferencias, carpetas de chat, sesiones y mensajes, notas, colecciones de conocimiento y texto extraído de documentos.","archiveScopeV3":"Incluye preferencias, chats, carpetas, notas, colecciones de conocimiento y texto extraído de documentos. Excluye cuentas y secretos, voces clonadas biométricas, contenido multimedia generado, personas y memoria, y datos o volúmenes de Work.","exportAll":"Exportar todos los datos","import":"Importar datos","importDescription":"Importa datos de una exportación anterior.","importData":"Importar datos","importing":"Importando...","clearSessions":"Limpiar sesiones","clearSessionsDescription":"Eliminar todas las sesiones de chat. Esta acción no se puede deshacer.","clearAll":"Limpiar todo","clearing":"Limpiando...","importOptions":"Opciones de importación","importOptionsDescription":"Elige cómo manejar datos existentes","validatingArchive":"Validando el archivo y calculando los cambios…","archiveValidationFailed":"Falló la validación del archivo","preflightReport":"Vista previa de la importación","preflightIncoming":"{{folders}} carpetas · {{sessions}} chats · {{messages}} mensajes · {{notes}} notas · {{collections}} colecciones · {{documents}} documentos · {{chunks}} fragmentos","preflightRemappedIds":"Se reasignarán {{count}} ID para proteger los datos de otra cuenta.","skipDuplicates":"Omitir duplicados","overwrite":"Sobrescribir existentes","importResults":"Resultados de importación","preferences":"Preferencias","imported":"Importado","failed":"Fallido","sessions":"Sesiones","sessionFolders":"Carpetas de sesiones","notes":"Notas","knowledgeCollections":"Colecciones de conocimiento","importedLabel":"importado","overwrittenLabel":"sobrescrito","skipped":"omitido","toCreate":"por crear","toOverwrite":"por sobrescribir","toSkip":"por omitir","documents":"Documentos","warnings":"Advertencias","refreshAfterImportFailed":"Los datos se importaron, pero algunas vistas no se pudieron actualizar. Recarga Libre WebUI para ver todos los cambios.","exportSuccess":"Archivo de datos portátil exportado","exportFailed":"Falló la exportación","importSuccess":"Archivo de datos portátil importado","importFailed":"Falló la importación","archiveErrors":{"invalidJson":"El archivo portátil no contiene JSON válido.","objectRequired":"El archivo portátil debe contener un objeto JSON.","unsupportedVersion":"Versión {{version}} del archivo portátil no compatible.","unrecognized":"Este archivo no es un archivo portátil de Libre WebUI."},"errors":"Errores","archivedChats":{"title":"Chats archivados","empty":"No hay chats archivados","unarchive":"Desarchivar"}},"about":{"title":"Acerca de","versionLabel":"Versión","ollama":{"title":"Estado de Ollama","version":"Versión","healthy":"Saludable","unhealthy":"No saludable"},"stats":{"models":"Modelos","sessions":"Sesiones"},"features":{"privacy":{"title":"Privacidad primero","description":"Tus datos permanecen en tu dispositivo"},"openSource":{"title":"Código abierto","description":"Software libre y de código abierto"},"localInference":{"title":"Inferencia local","description":"Ejecuta modelos de IA localmente con Ollama"}},"openSourceBy":"Código abierto por {{company}}","links":{"title":"Enlaces","github":"GitHub","githubDescription":"Ver código fuente y contribuir","website":"Sitio web","websiteDescription":"Visita nuestro sitio web","documentation":"Documentación","reportIssue":"Reportar problemas","reportIssueDescription":"Reportes de bugs y solicitudes de funciones","documentationDescription":"Guías, tutoriales y referencia de API","forgejo":"Espejo Forgejo","forgejoDescription":"Repositorio Forgejo auto-alojado","sponsor":"Patrocinar","sponsorDescription":"Ayuda a financiar el proyecto","star":"Estrella en GitHub","starDescription":"Una estrella ayuda a otros a descubrir el proyecto"},"version":"Versión {{version}}","updates":{"checking":"Buscando actualizaciones…","upToDate":"Estás en la última versión","updateAvailable":"La versión {{version}} está disponible","ahead":"Por delante de la última versión publicada ({{version}})","checkFailed":"No se pudieron comprobar las actualizaciones","viewChangelog":"Ver registro de cambios"}},"groups":{"general":"General","chat":"Chat","media":"Voz e imágenes","connections":"Conexiones","admin":"Administración"},"search":{"title":"Búsqueda web","description":"Busca en la web mediante una instancia autoalojada de SearXNG. Al activarla, el chat ofrece un interruptor de búsqueda y las tareas de Work con acceso a red pueden buscar.","enableLabel":"Activar búsqueda web","enableDescription":"Ofrecer búsqueda web en chats y tareas de Work. Las búsquedas se ejecutan en el servidor contra la instancia configurada.","urlLabel":"URL de SearXNG","urlDescription":"URL base de la instancia de SearXNG accesible desde el servidor. La pila de despliegue privado incluida ofrece http://searxng:8080.","maxResultsLabel":"Resultados por búsqueda","maxResultsDescription":"Cuántos resultados alimentan una respuesta o llamada de herramienta, 1-100.","maxResultsInvalid":"Los resultados por búsqueda deben estar entre 1 y 100.","safeSearchLabel":"Búsqueda segura","safeSearchDescription":"Pedir al motor que filtre resultados explícitos.","test":"Probar conexión","testing":"Probando…","testOk":"La búsqueda funciona — se devolvieron {{results}} resultados","testFailed":"La prueba de búsqueda falló","save":"Guardar","saved":"Configuración de búsqueda guardada","saveFailed":"No se pudo guardar la configuración de búsqueda"},"compaction":{"title":"Compactación del contexto","description":"Cuando una conversación supera el umbral de tokens, el servidor resume sus mensajes más antiguos y solo conserva textualmente los más recientes. Se aplica a todos los usuarios de este servidor.","thresholdLabel":"Umbral de tokens","thresholdDescription":"Tokens de contexto estimados a partir de los cuales se resume el historial antiguo, 500-1.000.000.","thresholdInvalid":"El umbral de tokens debe estar entre 500 y 1.000.000.","keepRecentLabel":"Mensajes recientes conservados","keepRecentDescription":"Cuántos de los últimos mensajes se mantienen siempre textualmente, 2-200.","keepRecentInvalid":"Los mensajes recientes conservados deben estar entre 2 y 200.","modelLabel":"Modelo de compactación","modelDescription":"El modelo que escribe los resúmenes. Si no se elige ninguno, se usa el modelo de la propia sesión.","sessionModelOption":"Usar el modelo de la sesión","promptLabel":"Prompt de resumen personalizado","promptPlaceholder":"Déjalo vacío para usar el prompt integrado","promptDescription":"Las variables de plantilla {{previousSummaryVariable}} y {{messagesVariable}} se sustituyen por el resumen anterior y los mensajes que se van a resumir.","saved":"Ajustes de compactación guardados","saveFailed":"No se pudieron guardar los ajustes de compactación","loadFailed":"No se pudieron cargar los ajustes de compactación"},"sessions":{"title":"Sesiones","description":"Todos los lugares donde esta cuenta tiene la sesión iniciada. Cerrar una sesión surte efecto de inmediato; iniciar sesión de nuevo restaura el acceso.","signOutOthers":"Cerrar las demás sesiones","signingOutOthers":"Cerrando sesión…","signOut":"Cerrar sesión","signingOut":"Cerrando sesión…","revoked":"Sesión cerrada.","revokeFailed":"No se pudo cerrar la sesión.","othersRevoked":"Otras sesiones cerradas: {{count}}","loadFailed":"No se pudieron cargar las sesiones.","empty":"No se encontraron sesiones.","current":"Esta sesión","revokedBadge":"Cerrada","unknownDevice":"Dispositivo desconocido","createdAt":"Inicio de sesión","lastSeenAt":"Última actividad","expiresAt":"Expira"},"apiKeys":{"title":"Claves API","description":"Tokens con permisos limitados para scripts e integraciones. Cada clave solo tiene acceso a los ámbitos que elijas.","newKeyTitle":"Tu nueva clave API","copy":"Copiar","copied":"Copiado al portapapeles.","copyFailed":"No se pudo copiar.","showOnceWarning":"Cópiala ahora: no se volverá a mostrar.","dismiss":"Listo","createTitle":"Crear una clave","nameLabel":"Nombre","namePlaceholder":"p. ej., pipeline de CI","nameRequired":"Dale un nombre a la clave.","expiryLabel":"Expira en días (opcional)","expiryPlaceholder":"Nunca","expiryInvalid":"La expiración debe ser un número entero de días.","scopesLabel":"Ámbitos","scopesRequired":"Selecciona al menos un ámbito.","create":"Crear clave","creating":"Creando…","created":"Clave API creada.","createFailed":"No se pudo crear la clave API.","revoke":"Revocar","revoking":"Revocando…","revoked":"Clave API revocada.","revokeFailed":"No se pudo revocar la clave API.","revokedBadge":"Revocada","loadFailed":"No se pudieron cargar las claves API.","empty":"Aún no hay claves API.","createdAt":"Creada","lastUsedAt":"Último uso","expiresAt":"Expira","neverExpires":"Nunca"},"notifications":{"title":"Notificaciones","description":"Cómo se informa a este navegador de menciones, comparticiones, recordatorios y trabajos terminados.","pushTitle":"Notificaciones del navegador","pushHint":"Mostrar notificaciones del sistema desde este dispositivo aunque la pestaña esté en segundo plano.","enabled":"Las notificaciones del navegador están activadas en este dispositivo.","disabled":"Las notificaciones del navegador están desactivadas en este dispositivo.","enableFailed":"No se pudieron activar las notificaciones del navegador.","permissionDenied":"Las notificaciones están bloqueadas en los ajustes del navegador para este sitio.","unsupported":"Este navegador no admite notificaciones push.","workerMissing":"Push requiere la aplicación instalada. Recarga la aplicación de producción e inténtalo de nuevo.","deviceNote":"Las notificaciones son por dispositivo. Cerrar la sesión también elimina su registro push.","emailTitle":"Notificaciones por correo","emailHint":"Los mensajes se envían a {{address}}.","emailLoading":"Comprobando si el correo está disponible…","emailUnavailable":"Un administrador aún no ha configurado un servidor de correo saliente.","emailNoAddress":"Tu cuenta no tiene una dirección de correo. Pide a un administrador que añada una en Gestión de usuarios.","emailLoadFailed":"No se pudo comprobar la disponibilidad del correo.","emailMentions":"Menciones en canales","emailMentionsHint":"Avisarme por correo cuando alguien me mencione en un canal.","emailAutomations":"Resultados de automatizaciones","emailAutomationsHint":"Avisarme por correo del resultado de cada ejecución de automatización, tanto si se completa como si falla."}}`),models:{title:`Modelos`,subtitle:`Descarga, gestiona y monitorea tus modelos de Ollama`,installed:`Modelos instalados`,available:`Modelos disponibles`,pull:`Descargar modelo`,pulling:`Descargando...`,delete:`Eliminar modelo`,deleting:`Eliminando...`,size:`Tamaño`,modified:`Modificado`,family:`Familia`,parameters:`Parámetros`,quantization:`Cuantización`,noModels:`No hay modelos instalados`,pullFirst:`Descarga un modelo para comenzar`,noModelsFound:`No se encontraron modelos`},personas:{title:`Personas`,create:`Crear persona`,edit:`Editar persona`,delete:`Eliminar persona`,name:`Nombre`,description:`Descripción`,systemPrompt:`Prompt del sistema`,model:`Modelo`,avatar:`Avatar`,background:`Fondo`,noPersonas:`No hay personas creadas`,createFirst:`Crea tu primera persona para personalizar tu experiencia de chat`},gallery:{title:`Galería`,subtitle:`Tu galería de imágenes generadas por IA`,imageCount:`{{count}} imágenes`,generate:`Generar imagen`,generateDescription:`Crea imágenes con IA`,generating:`Generando...`,prompt:`Prompt`,promptPlaceholder:`Describe la imagen que quieres generar...`,noImages:`Aún no hay imágenes generadas`,download:`Descargar`,delete:`Eliminar`,regenerate:`Regenerar`,model:`Modelo`,size:`Tamaño`,quality:`Calidad`,created:`Creado`},errors:{generic:`Ocurrió un error`,network:`Error de red. Por favor verifica tu conexión.`,unauthorized:`No estás autorizado para realizar esta acción.`,notFound:`El recurso solicitado no fue encontrado.`,serverError:`Error del servidor. Por favor intenta más tarde.`,validation:`Por favor verifica tu entrada e intenta de nuevo.`},keyboard:{title:`Atajos de teclado`,toggleSidebar:`Alternar barra lateral`,openSettings:`Abrir configuración`,toggleDarkMode:`Alternar modo oscuro`,showShortcuts:`Mostrar atajos de teclado`,closeModals:`Cerrar modales`,groups:{navigation:`Navegación`,general:`General`,chat:`Chat`,workspace:`Espacio de trabajo`},actions:{sendMessage:`Enviar mensaje`,newLine:`Nueva línea en mensaje`,saveEdit:`Guardar el mensaje editado`,cancelEdit:`Cancelar la edición`,saveFile:`Guardar archivo`,formatCode:`Formatear código`},description:`Todos los atajos de teclado disponibles en Libre WebUI.`,newChat:`Nuevo chat`,newWork:`Nueva sesión de Work`,openPalette:`Abrir la paleta de comandos`},modelDownload:{success:`Se descargó {{name}}`,failed:`Error al descargar: {{error}}`,startFailed:`Error al iniciar la descarga`,cancelled:`Descarga cancelada`},modelTools:{toasts:{fetchInfoFailed:`Error al obtener la información`,pushSuccess:`Modelo enviado`,createSuccess:`Modelo creado`,copySuccess:`Modelo copiado`,embeddingsSuccess:`Embeddings generados (consulta la consola)`,failed:`Error`,unknownError:`Error desconocido`}},modelManager:{title:`Modelos`,loading:`Cargando modelos...`,systemStatus:{online:`Ollama en línea`,offline:`Ollama sin conexión`,models:`modelo`,models_plural:`modelos`,running:`ejecutándose`,vram:`VRAM`},sections:{pull:`Descargar nuevo modelo`,library:`Explorar biblioteca`,huggingface:`HuggingFace Hub`,running:`Modelos en ejecución`,local:`Modelos locales`,advanced:`Acciones avanzadas`,catalog:`Catálogo de modelos`},catalog:{searchPlaceholder:`Buscar modelos por nombre o proveedor...`,noModels:`Todavía no hay modelos disponibles.`,empty:`Ningún modelo coincide con tu búsqueda.`,providerOllama:`Ollama`,hidden:`Oculto`,visibilityFailed:`No se pudo actualizar la visibilidad del modelo.`,filterAll:`Todos los modelos`,filterLocal:`Local`,filterProviders:`Proveedores`,filterHidden:`Ocultos`,enableAll:`Activar los mostrados`,disableAll:`Desactivar los mostrados`,rename:`Editar nombre e imagen`,setPicture:`Establecer imagen`,clearPicture:`Quitar imagen`,pictureInvalid:`Elige un archivo de imagen.`,pictureTooLarge:`Las imágenes deben pesar menos de 192 KB.`,saving:`Guardando…`,hide:`Ocultar a los usuarios`,show:`Mostrar a los usuarios`,star:`Marcar {{name}} con estrella`,unstar:`Quitar la estrella de {{name}}`},pull:{placeholder:`Ingresa nombre del modelo (ej. llama3.2:3b, deepseek-r1:14b)`,button:`Descargar`,cancel:`Cancelar`,popular:`Modelos populares:`,browseAll:`Explorar todos los modelos en ollama.com`,success:`Modelo {{name}} descargado exitosamente`,cancelled:`Descarga de modelo cancelada`,failed:`Error al descargar modelo`,enterName:`Por favor ingresa un nombre de modelo`,restricted:`La instalación de modelos está restringida a administradores en esta instancia.`},progress:{starting:`Inicializando...`,pulling:`Descargando modelo...`,pullingLayer:`descargando`,verifying:`Verificando integridad...`,verifyingDigest:`verificando digest sha256`,writing:`Escribiendo manifiesto...`,cleaning:`Limpiando...`},library:{available:`disponible`,search:`Buscar modelos...`,noResults:`No se encontraron modelos que coincidan con tu criterio`,installed:`Instalado`,more:`+{{count}} más`,refresh:`Actualizar biblioteca`},huggingface:{browseAll:`Ver todo en HuggingFace`,checkingGguf:`Buscando archivos GGUF...`,noGgufAvailable:`No hay archivos GGUF disponibles para Ollama`,ggufFilesCount:`Archivos GGUF ({{count}}) - Descargar a Ollama`,noModelsFound:`No se encontraron modelos`,noResults:`No se encontraron modelos. Intenta ajustar tu búsqueda o filtros.`,browseAllLink:`Ver todo`,search:`Buscar modelos en HuggingFace...`,by:`por`,gated:`Acceso restringido`,viewOnHF:`Ver en HuggingFace`,sortDownloads:`Descargas`,sortLikes:`Me gusta`,sortRecent:`Reciente`,taskTextGeneration:`Generación de texto`,taskTextToSpeech:`Texto a voz`,taskTextToImage:`Texto a imagen`,taskSpeechRecognition:`Reconocimiento de voz`,tasks:{textGen:`Generación de texto`,tts:`Texto a voz`,image:`Texto a imagen`,stt:`Reconocimiento de voz`},sort:{downloads:`Más descargados`,likes:`Más gustados`,recent:`Actualizados recientemente`}},local:{noModels:`Aún no hay modelos instalados`,pullToStart:`Descarga un modelo arriba para comenzar`,installed:`instalado`,running:`Ejecutándose`,info:`Info`,copy:`Copiar`,delete:`Eliminar`,deleteConfirm:`¿Estás seguro de que deseas eliminar el modelo "{{name}}"?`,deleteSuccess:`Modelo {{name}} eliminado exitosamente`,deleteFailed:`Error al eliminar modelo`},advanced:{createModel:`Crear modelo`,fromModelfile:`Desde Modelfile`,copyModel:`Copiar modelo`,duplicateExisting:`Duplicar existente`,testEmbeddings:`Probar embeddings`,generateVectors:`Generar vectores`,healthCheck:`Verificación de salud`,testConnection:`Probar conexión`,healthy:`¡Ollama está saludable!`},modals:{details:{title:`Detalles del modelo`,info:`Información del modelo`,family:`Familia`,parameters:`Parámetros`,quantization:`Cuantización`,format:`Formato`,systemPrompt:`Prompt del sistema`,template:`Plantilla`,license:`Licencia`,modelfile:`Modelfile`,noDetails:`Sin detalles disponibles`},copy:{title:`Copiar modelo`,source:`Modelo origen`,selectModel:`Selecciona un modelo...`,newName:`Nuevo nombre de modelo`,placeholder:`ej. mi-modelo-personalizado`,copying:`Copiando...`,button:`Copiar modelo`,success:`Modelo copiado a {{name}}`,failed:`Error al copiar modelo`,enterBoth:`Por favor ingresa nombres de origen y destino`},create:{title:`Crear modelo personalizado`,name:`Nombre del modelo`,namePlaceholder:`ej. mi-asistente`,modelfile:`Modelfile`,modelfilePlaceholder:`FROM llama3.2
|
|
2
|
-
SYSTEM Eres un asistente útil.`,see:`Ver`,docs:`Documentación de Modelfile`,docsLink:`para referencia de sintaxis`,creating:`Creando...`,button:`Crear modelo`,success:`Modelo {{name}} creado exitosamente`,failed:`Error al crear modelo`,enterBoth:`Por favor ingresa nombre del modelo y contenido del Modelfile`},embeddings:{title:`Probar embeddings`,model:`Modelo de embedding`,selectModel:`Selecciona un modelo...`,recommended:`Recomendados: nomic-embed-text, mxbai-embed-large`,input:`Texto de entrada`,placeholder:`Ingresa texto para generar embeddings...`,generating:`Generando...`,button:`Generar embeddings`,result:`Resultado ({{count}} dimensiones)`,success:`Vector de embedding de {{count}} dimensiones generado`,failed:`Error al generar embeddings`,enterBoth:`Por favor selecciona un modelo e ingresa texto`}}},personaManager:{title:`Personas`,subtitle:`Crea y gestiona personas de IA con personalidades, memorias y comportamientos personalizados`,loading:`Cargando personas...`,createButton:`Crear persona`,importExport:`Importar/Exportar`,stats:{title:`Tus personas`,count:`{{count}} persona creada`,count_plural:`{{count}} personas creadas`},empty:{title:`Aún no hay personas`,description:`Crea tu primera persona para comenzar con interacciones de IA personalizadas`,button:`Crear tu primera persona`},deleteConfirm:`¿Estás seguro de que deseas eliminar "{{name}}"?`,deleteSuccess:`Persona "{{name}}" eliminada exitosamente`,downloadSuccess:`Persona "{{name}}" descargada exitosamente`,failed:`Error al {{action}} persona`},personaForm:{title:{create:`Crear nueva persona`,edit:`Editar persona`},subtitle:{create:`Crea una nueva persona de IA con personalidad personalizada, sistemas de memoria y capacidades de aprendizaje adaptativo`,edit:`Personaliza tu persona de IA con memoria avanzada, aprendizaje adaptativo y parámetros inteligentes`},loading:`Cargando formulario...`,saved:`Guardado`,tabs:{basic:`Básico`,parameters:`Parámetros`,memory:`Memoria y aprendizaje`,advanced:`Avanzado`,bindings:`Vínculos`},basic:{name:`Nombre`,namePlaceholder:`Ingresa nombre de persona`,model:`Modelo`,selectModel:`Selecciona un modelo`,description:`Descripción`,descriptionPlaceholder:`Describe tu persona...`,systemPrompt:`Prompt del sistema`,systemPromptPlaceholder:`Ingresa el prompt del sistema que define el comportamiento de tu persona...`,systemPromptHint:`El prompt del sistema define cómo se comportará y responderá tu persona.`},parameters:{temperature:`Temperatura`,temperatureHint:`Controla creatividad vs consistencia`,topP:`Top-P`,topPHint:`Controla diversidad de respuesta`,topK:`Top-K`,topKHint:`Limita vocabulario a los top-k tokens`,contextWindow:`Ventana de contexto`,contextWindowHint:`Longitud máxima del historial de conversación`,maxTokens:`Tokens máximos`,maxTokensHint:`Longitud máxima de respuesta`,repeatPenalty:`Penalización de repetición`,repeatPenaltyHint:`Reduce respuestas repetitivas`},memory:{title:`Sistema de memoria`,subtitle:`La persona recuerda conversaciones a lo largo del tiempo`,enableHint:`Habilita el sistema de memoria para que tu persona recuerde conversaciones y construya contexto a lo largo del tiempo.`,loading:`Cargando estado de memoria...`,noData:`Aún no hay datos de memoria`,memories:`Memorias`,mbUsed:`MB usados`,lastBackup:`Última copia de seguridad`,never:`Nunca`,maxMemories:`Memorias máximas`,maxMemoriesHint:`Cuántas memorias puede almacenar esta persona`,retention:`Retención de memoria`,retentionHint:`Días para mantener memorias antes de limpiar`,autoCleanup:`Limpieza automática de memorias antiguas`,wipeAll:`Borrar todas las memorias`,wipeCannot:`Esto no se puede deshacer`,wipeButton:`Borrar`,wiping:`Borrando...`,wipeConfirm:`¿Estás seguro de que deseas borrar todas las memorias? Esto no se puede deshacer.`,wipeSuccess:`Se borraron {{count}} memorias`},learning:{title:`Aprendizaje adaptativo`,subtitle:`La persona evoluciona basándose en interacciones`,enableHint:`Habilita el aprendizaje adaptativo para que tu persona evolucione y personalice respuestas basándose en tus interacciones.`,speed:`Velocidad de aprendizaje`,slow:`Lento`,slowDesc:`Cambios graduales`,balanced:`Equilibrado`,balancedDesc:`Ritmo moderado`,fast:`Rápido`,fastDesc:`Adaptación rápida`,autoAdapt:`Auto-adaptar a preferencias del usuario`,whatLearns:`Lo que aprende la persona:`,conversationTone:`Tono de conversación`,responseStyle:`Estilo de respuesta`,userPreferences:`Preferencias del usuario`,topicInterests:`Intereses en temas`},advanced:{embeddingModel:`Modelo de embedding`,embeddingHint:`Selecciona el modelo usado para codificación de memoria y búsqueda semántica. Los modelos de embedding se muestran primero, seguidos de otros modelos disponibles.`,noModels:`No se encontraron modelos`,embeddingModels:`Modelos de embedding`,otherModels:`Otros modelos`,installHint:`Instala un modelo de embedding:`,recommended:`Recomendados: nomic-embed-text, mxbai-embed-large, bge-m3, snowflake-arctic-embed`,aboutTitle:`Acerca de configuración avanzada`,aboutDescription:`El modelo de embedding es usado por el sistema de memoria para entender significado semántico y encontrar memorias relevantes durante conversaciones. Elige un modelo que coincida con tu caso de uso y recursos disponibles.`},actions:{cancel:`Cancelar`,save:`Guardar`,saving:`Guardando...`,saveClose:`Guardar y cerrar`,create:`Crear`},success:{created:`Persona creada`,updated:`Persona actualizada`},error:{saveFailed:`Error al guardar`},bindings:{toolServers:`Servidores de herramientas`,toolServersHint:`Servidores que esta persona puede llamar. Si se deja vacío se ofrece cualquier servidor al que el usuario ya llegue.`,noToolServers:`No tienes ningún servidor de herramientas disponible.`,builtinTools:`Herramientas integradas`,builtinToolsHint:`Herramientas que implementa el propio servidor. Si se deja vacío se ofrecen todas.`,noBuiltinTools:`No hay herramientas integradas disponibles.`,builtin:{web_search:`Búsqueda web`,search_documents:`Buscar en documentos`,load_skill:`Cargar habilidad`},skills:`Habilidades`,skillsHint:`Habilidades que el modelo puede cargar mientras esta persona está activa.`,noSkills:`Todavía no has creado ninguna habilidad.`,collections:`Colecciones de conocimiento`,collectionsHint:`Colecciones de documentos en las que esta persona puede buscar.`,noCollections:`Todavía no has creado ninguna colección.`,prompt:`Prompt`,promptHint:`Un prompt con el que empieza cada chat nuevo con esta persona.`,noPrompt:`Sin prompt`,version:`Revisión de vínculos {{version}}`}},personaCard:{enhanced:`Mejorado`,systemPrompt:`Prompt del sistema`,memories:`memorias`,use:`Usar`,editTooltip:`Editar persona`,downloadTooltip:`Descargar persona`,backup:`Copia de seguridad`,exportDNA:`Exportar ADN`,wipeMemories:`Borrar memorias`,wipeConfirm:`¿Estás seguro de que deseas borrar todas las memorias de esta persona? Esta acción no se puede deshacer.`,wipeSuccess:`Se borraron {{count}} memorias`,backupSuccess:`Copia de seguridad de persona descargada exitosamente`,dnaSuccess:`ADN de persona exportado exitosamente`,failed:`Error al {{action}}`,shareTooltip:`Compartir esta persona`},userManager:JSON.parse(`{"title":"Gestión de usuarios","subtitle":"Gestiona cuentas de usuario y permisos","pageDescription":"Gestiona cuentas de usuario, permisos y controles de acceso para tu instancia de Libre WebUI.","sections":{"users":"Usuarios","access":"Acceso y políticas","security":"Seguridad","defaults":"Valores predeterminados"},"directory":{"title":"Cuentas activas","allRoles":"Todos los roles","clearFilters":"Borrar filtros","results":"{{visible}} de {{total}} cuentas","loadFailed":"No se pudieron cargar los usuarios. Inténtalo de nuevo.","empty":"Aún no hay cuentas activas","editSelfRole":"No puedes cambiar tu propio rol de administrador.","deleteTitle":"Eliminar usuario"},"loading":"Cargando usuarios...","createUser":"Crear usuario","search":"Buscar usuarios...","noUsers":"No se encontraron usuarios","noUsersMatching":"No hay usuarios que coincidan con tu búsqueda","columns":{"user":"Usuario","email":"Correo electrónico","role":"Rol","created":"Creado","actions":"Acciones"},"roles":{"admin":"Admin","user":"Usuario"},"noEmail":"Sin correo","deleteConfirm":"¿Estás seguro de que deseas eliminar el usuario \\"{{name}}\\"?","deleteSuccess":"Usuario eliminado exitosamente","deleteFailed":"Error al eliminar usuario","cannotDeleteSelf":"No puedes eliminar tu propia cuenta","approval":{"title":"Aprobaciones pendientes","description":"Revisa los nuevos registros antes de permitirles acceso a esta instancia.","registered":"Registrado","activate":"Activar cuenta","reject":"Rechazar registro","approved":"{{name}} ya puede iniciar sesión.","failed":"No se pudo aprobar la cuenta.","notification":"{{count}} registro(s) esperando tu aprobación.","notificationBadge":"{{count}} aprobaciones de usuario pendientes"},"form":{"title":{"create":"Crear usuario","edit":"Editar usuario"},"username":"Nombre de usuario","usernamePlaceholder":"Ingresa nombre de usuario","email":"Correo electrónico","emailPlaceholder":"Ingresa correo (opcional)","password":"Contraseña","passwordPlaceholder":"Ingresa contraseña","passwordHint":"Deja en blanco para mantener contraseña actual","role":"Rol","creating":"Creando...","updating":"Actualizando...","createButton":"Crear usuario","updateButton":"Actualizar usuario","createSuccess":"Usuario creado exitosamente","updateSuccess":"Usuario actualizado exitosamente","createFailed":"Error al crear usuario","updateFailed":"Error al actualizar usuario"},"workAccess":{"title":"Acceso a Work","description":"Permitir que todos los usuarios activos creen y ejecuten tareas de Work en sandboxes aislados. Los administradores siempre tienen acceso; los espacios de trabajo en carpetas del host siguen siendo solo para administradores.","saved":"Acceso a Work actualizado","saveFailed":"No se pudo actualizar el acceso a Work"},"workPolicies":{"title":"Políticas de Work","description":"Preajustes de ejecución con nombre (imagen, límites, parada por inactividad) bajo los que crear tareas. Los campos vacíos heredan los valores globales.","add":"Añadir política","name":"Nombre","image":"Imagen","memory":"Memoria","cpu":"CPU","pids":"Límite de PID","workspaceSize":"Tamaño del espacio de trabajo","idleMinutes":"Parada por inactividad (minutos)","networkDefault":"Red predeterminada","networkInherit":"Heredar predeterminado","networkOn":"Activada","networkOff":"Desactivada","save":"Guardar","cancel":"Cancelar","edit":"Editar política","delete":"Eliminar política","deleteConfirm":"¿Eliminar esta política? Las tareas que la usan vuelven a los valores globales.","empty":"Aún no hay políticas. Las tareas usan los valores de ejecución globales.","saved":"Política de Work guardada","deleted":"Política de Work eliminada","failed":"No se pudo guardar la política de Work","invalidNumber":"El límite de PID y la parada por inactividad deben ser números.","guiEnabled":"Work Computer (GUI + navegador)","takeoverEnabled":"Permitir tomar el control de la pantalla","computerPreset":"Work Computer","computerPresetHint":"El Work Computer necesita la imagen GUI: constrúyela desde deploy/work-computer en el repositorio y etiquétala libre-work-computer:latest.","approvalsRequired":"Exigir aprobación para las acciones con efectos secundarios"},"modelAccess":{"title":"Descarga de modelos","description":"Permitir que todos los usuarios activos descarguen modelos desde Ollama y el navegador de Hugging Face. Los administradores siempre pueden descargar modelos.","saved":"Acceso a descarga de modelos actualizado","saveFailed":"No se pudo actualizar el acceso a descarga de modelos"},"webSearchAccess":{"title":"Búsqueda web","description":"Permitir que todos los usuarios activos usen la búsqueda web en chats y tareas de Work. Los administradores siempre pueden usarla. El motor se configura en Configuración > Búsqueda.","saved":"Acceso a búsqueda web actualizado","saveFailed":"No se pudo actualizar el acceso a búsqueda web"},"defaultTheme":{"title":"Tema predeterminado","description":"Tema para la página de inicio de sesión, las cuentas nuevas y los navegadores que no hayan elegido uno. Cada persona puede seguir eligiendo el suyo en Ajustes.","saved":"Tema predeterminado actualizado","saveFailed":"No se pudo actualizar el tema predeterminado"},"agentAccess":{"title":"Libre Claw","description":"Mostrar el espacio de trabajo de Libre Claw a los administradores.","saved":"Acceso a agentes actualizado","saveFailed":"No se pudo actualizar el acceso a agentes","lockedByEnv":"Fijado por la variable de entorno LIBRE_CLAW_ENABLED."},"groups":{"title":"Grupos","description":"Agrupa cuentas para gestionar el acceso compartido e inspecciona lo que cada cuenta puede hacer en la práctica.","newGroup":"Nuevo grupo","nameLabel":"Nombre","nameRequired":"Dale un nombre al grupo.","descriptionLabel":"Descripción (opcional)","create":"Crear grupo","creating":"Creando…","created":"Grupo creado.","createFailed":"No se pudo crear el grupo.","deleted":"Grupo eliminado.","deleteFailed":"No se pudo eliminar el grupo.","deleteGroup":"Eliminar grupo","loadFailed":"No se pudieron cargar los grupos.","empty":"Aún no hay grupos.","memberCount":"Miembros: {{count}}","noMembers":"Aún no hay miembros.","addedAt":"Añadido","addMember":"Añadir miembro","add":"Añadir","selectUser":"Selecciona un usuario…","memberAdded":"Miembro añadido.","memberAddFailed":"No se pudo añadir el miembro.","removeMember":"Quitar miembro","memberRemoved":"Miembro quitado.","memberRemoveFailed":"No se pudo quitar el miembro.","effectiveTitle":"Acceso efectivo","effectiveDescription":"Elige una cuenta para ver el acceso que resulta de su rol, grupos y permisos.","accessLookupFailed":"No se pudo cargar el acceso efectivo.","roleLabel":"Rol","statusLabel":"Estado","memberOf":"Grupos","featuresLabel":"Acceso a funciones","grantsLabel":"Permisos","grantVia":"vía"},"audit":{"title":"Registro de auditoría de seguridad","description":"Inicios de sesión recientes, comprobaciones de permisos y cambios administrativos en esta instancia.","actionFilter":"Acción","actionPlaceholder":"p. ej., auth.login","resultFilter":"Resultado","resultSuccess":"Éxito","resultDenied":"Denegado","resultFailure":"Error","limitFilter":"Límite","loadFailed":"No se pudo cargar el registro de auditoría.","empty":"Aún no hay eventos de auditoría registrados.","actor":"Actor","target":"Objetivo"},"tools":{"title":"Acceso a herramientas","description":"Permitir que todos llamen a servidores de herramientas. Si está desactivado, solo los administradores pueden.","saved":"Acceso a herramientas actualizado","saveFailed":"No se pudo actualizar el acceso a herramientas.","lockedByEnv":"Bloqueado por una variable de entorno en este servidor."},"voice":{"title":"Acceso de voz","description":"Controla quién puede usar las funciones de voz. Los administradores siempre tienen acceso.","lockedByEnv":"Fijado por una variable de entorno","saved":"Acceso de voz actualizado","saveFailed":"No se pudo actualizar el acceso de voz","features":{"stt":"Voz a texto","tts":"Texto a voz","voiceMode":"Modo de voz","voiceCloning":"Clonación de voz"}},"mfaPolicy":{"title":"Política de dos pasos","description":"Si las cuentas deben completar un segundo paso de inicio de sesión.","requireAll":"Exigir dos pasos a todos los usuarios","requireAllHint":"Quien no tenga un segundo factor deberá configurarlo en su próximo inicio de sesión.","lockedByEnv":"Fijado por MFA_REQUIRED_MODE.","saved":"Política de dos pasos guardada.","saveFailed":"No se pudo guardar la política de dos pasos."},"mfaReset":"Restablecer dos pasos","mfaResetConfirm":"¿Quitar el segundo factor de {{name}}? Podrá iniciar sesión con su contraseña y configurarlo de nuevo.","mfaResetSuccess":"Dos pasos eliminados para {{name}}.","mfaResetNothing":"{{name}} no tenía autenticación en dos pasos.","mfaResetFailed":"El restablecimiento falló.","ollamaProvider":{"title":"Proveedor de Ollama","description":"Cuando está desactivado, la app deja de buscar Ollama por completo — sin verificaciones de salud, sin avisos. El endpoint puede apuntar a cualquier puerta de enlace compatible con Ollama.","saved":"Configuración del proveedor de Ollama guardada","saveFailed":"No se pudo guardar la configuración del proveedor de Ollama","baseUrlLabel":"URL del endpoint de Ollama"},"emailNotifications":{"title":"Notificaciones por correo","description":"Servidor de correo saliente para notificaciones. Cada usuario elige qué notificaciones le llegan a la bandeja de entrada en Configuración > Notificaciones.","enabledToast":"Las notificaciones por correo están activadas.","disabledToast":"Las notificaciones por correo están desactivadas.","loadFailed":"No se pudo cargar la configuración de correo.","fromEnvironment":"Proporcionado por el entorno; guarda un valor aquí para anularlo.","hostLabel":"Host SMTP","hostHint":"El nombre de host del servidor de correo.","portLabel":"Puerto","portHint":"Déjalo vacío para usar el valor predeterminado del modo de seguridad elegido.","securityLabel":"Seguridad de la conexión","securityHint":"STARTTLS mejora una conexión sin cifrar; TLS está cifrado desde el inicio.","security":{"starttls":"STARTTLS (puerto 587)","tls":"TLS (puerto 465)","none":"Ninguna (solo red de confianza)"},"verifyLabel":"Verificar certificado","verifyHint":"Desactívalo solo para un relay con certificado autofirmado.","usernameLabel":"Nombre de usuario","usernameHint":"Déjalo vacío si el servidor acepta correo sin iniciar sesión.","passwordLabel":"Contraseña","passwordHint":"Se guarda cifrada y no vuelve a mostrarse.","passwordStored":"Hay una contraseña guardada. Introduce una nueva para reemplazarla.","clearPassword":"Eliminar la contraseña guardada","fromLabel":"Remitente","fromHint":"La dirección De, opcionalmente con un nombre para mostrar.","appUrlLabel":"URL de la aplicación","appUrlHint":"Se usa para los enlaces en los mensajes, por ejemplo https://chat.example.com.","testRecipientLabel":"Destinatario de prueba","testRecipientHint":"Por defecto, tu propia dirección. Déjalo vacío para comprobar solo la conexión.","test":"Enviar prueba","testing":"Enviando…","testSent":"Mensaje de prueba enviado a {{address}}.","testConnected":"Conectado al servidor de correo.","testFailed":"La prueba de correo falló.","saveBeforeTest":"Guarda los cambios antes de probar.","save":"Guardar","saving":"Guardando…","saved":"Configuración de correo guardada.","saveFailed":"No se pudo guardar la configuración de correo."},"cordisAccess":{"title":"Motor Cordis","description":"Ofrecer el motor Cordis a los administradores. Ejecuta herramientas con acceso real al sistema de archivos, fuera del flujo de aprobación de herramientas de Libre WebUI.","saved":"Acceso a Cordis actualizado","saveFailed":"No se pudo actualizar el acceso a Cordis","lockedByEnv":"Fijado por la variable de entorno LIBRE_CORDIS_ENABLED.","lockedByFile":"Fijado por features.enabled en cordis.config.yml."},"agentCliAccess":{"title":"Modelos de agentes CLI","description":"Los administradores pueden usar Pi, OpenCode, Codex y Claude Code instalados como modelos de chat. Se ejecutan en el equipo anfitrión, fuera de los entornos aislados de Work.","lockedByEnv":"Fijado por la variable de entorno AGENT_CLI_MODELS_ENABLED."}}`),usageAnalytics:{eyebrow:`Administración`,title:`Uso del proveedor`,description:`Sigue las solicitudes de modelos y el uso de los proveedores y agentes de esta instancia.`,days:`{{count}} días`,refresh:`Actualizar uso`,loadFailed:`No se pudo cargar el uso del proveedor.`,metrics:{calls:`Llamadas`,tokens:`Tokens`},cards:{calls:`Llamadas de API`,callsDetail:`Entre {{count}} usuario(s) activo(s)`,tokens:`Tokens reportados`,tokensDetail:`Uso reportado en {{count}} llamada(s)`,success:`Tasa de éxito`,successDetail:`{{count}} llamada(s) fallida(s)`,latency:`Latencia media`,latencyDetail:`Tiempo de extremo a extremo del proveedor`,coverage:`El {{percent}} % de las llamadas informa del uso de tokens`},activity:{title:`Consumo a lo largo del tiempo`,callsDescription:`Solicitudes diarias por modelo`,tokensDescription:`Tokens notificados diariamente por modelo`,chartLabel:`Gráfico diario de {{metric}} del proveedor`,compareHint:`Pasa el cursor sobre un modelo o dale el foco para seguir su línea. Selecciónalo para mantenerlo resaltado.`,showAll:`Mostrar todos los modelos`,highlightModel:`Resaltar {{model}}`,highlightedModel:`{{model}} resaltado`,allModels:`Todos los modelos`,exploreDay:`Explorar el uso diario`,topModels:`Los 12 modelos más utilizados se muestran de forma predeterminada. Selecciona cualquier modelo a continuación para seguirlo individualmente.`,noTokens:`No se notificaron tokens en este período`,breakdownUnavailable:`No hay un desglose por modelo disponible para este período.`,peak:`Día de mayor uso`,dayTotal:`Total diario`,loadingModel:`Cargando {{model}}…`},models:{title:`Consumo por modelo`,description:`Los modelos con mayor tráfico en este período.`,model:`Modelo`,success:`Éxito`,latency:`Latencia`,share:`Proporción de llamadas`,notCharted:`Selecciona para cargar este modelo en el gráfico`},providers:{title:`Tráfico de proveedores y agentes`,description:`Volumen de solicitudes, fiabilidad y tiempo de respuesta por proveedor.`,share:`{{percent}} % de las llamadas`,failures:`{{count}} fallidas o canceladas`,models:`Modelos: {{count}}`,noTokens:`No se notificaron tokens`},capabilities:{title:`Mezcla de capacidades`,characters:`{{count}} caracteres`,bytes:`{{count}} bytes`,images:`{{count}} imágenes`,jobs:`{{count}} trabajos de video`,inputs:`{{count}} entradas`,reportedTokens:`{{count}} tokens reportados`},empty:{title:`Aún no hay llamadas al proveedor`,description:`Las solicitudes aparecen aquí cuando un proveedor o agente procesa chat, Work, embeddings, imágenes, voz, sonido o vídeo.`},privacyNote:`El uso de las solicitudes a proveedores y agentes se registra en el servidor. Libre WebUI almacena proveedor, modelo, tiempo, estado y contadores reportados, nunca prompts, respuestas, endpoints, credenciales ni cuerpos de error del proveedor. Los totales de tokens incluyen solo las llamadas en las que el proveedor devolvió metadatos de uso.`,heatmap:{title:`Un año de actividad`,description:`Llamadas diarias a proveedores durante el último año, coloreadas según el modelo más usado cada día.`,calls:`llamadas`,noCalls:`Sin llamadas`,other:`Otros modelos`,less:`Menos`,more:`Más`,yearTotal:`{{formatted}} llamadas en el último año`},agents:{title:`Agentes`,description:`Llamadas de agentes CLI y solicitudes nativas de DSH. DSH con modelos de Libre WebUI se contabiliza en su proveedor de modelos.`,noCalls:`No hay llamadas registradas en este período`,unreported:`Tokens no reportados`,topModels:`Modelos más usados`,legacy:`Este servidor no proporciona un desglose completo de agentes. Los registros disponibles se muestran a continuación.`}},systemPage:{eyebrow:`Administración`,title:`Sistema`,description:`Monitoree la máquina y el entorno de ejecución que alojan esta instancia de Libre WebUI.`,updated:`Actualizado el {{date}}`,refresh:`Actualizar información del sistema`,loadFailed:`No se pudo cargar la información del sistema.`,cards:{uptime:`Tiempo de actividad del host`,uptimeDetail:`En ejecución desde {{date}}`,memory:`Memoria usada`,memoryDetail:`{{used}} de {{total}}`,freeSpace:`Espacio libre`,freeSpaceDetail:`{{label}} · {{total}} total`,containers:`Contenedores en ejecución`,containersDetail:`{{total}} contenedor(es) conocidos por Docker`,dockerUnavailable:`Docker no disponible`,unavailable:`No disponible`},host:{title:`Host y entorno de ejecución`,description:`Detalles del sistema operativo, procesador y proceso de Libre WebUI.`,container:`Entorno de ejecución de contenedores`,native:`Tiempo de ejecución nativo`,hostname:`Nombre de host`,operatingSystem:`Sistema operativo`,processor:`Procesador`,logicalCpus:`CPU lógicas`,loadAverage:`Carga media · 1 / 5 / 15 min`,libreVersion:`Libre WebUI`,nodeVersion:`Node.js`,process:`Proceso`,workingDirectory:`Directorio de trabajo`},memory:{title:`Memoria`,description:`Memoria del sistema visible en tiempo de ejecución y uso del proceso de la aplicación.`,usedOf:`{{used}} usados de {{total}}`,free:`{{value}} libres`,processRss:`RSS del proceso`,heapUsed:`Heap V8 usado`,heapTotal:`Heap V8 total`,external:`Memoria externa`},storage:{title:`Almacenamiento`,description:`Espacio disponible para el sistema de archivos del tiempo de ejecución y los datos persistentes de la aplicación.`,used:`{{value}} usados`,free:`{{value}} libres`,empty:`La información del sistema de archivos no está disponible en este tiempo de ejecución.`},docker:{title:`Docker`,description:`Estado de solo lectura de Docker Engine y una lista reducida de contenedores.`,connected:`Conectado`,unavailable:`No disponible`,unavailableDetail:`Los diagnósticos de Docker Engine no están disponibles.`,socketStatus:`Socket local: {{status}}`,mounted:`montado`,notMounted:`no montado`,running:`En ejecución`,stopped:`Detenido`,paused:`En pausa`,total:`Total`,version:`Versión`,host:`Host`,architecture:`Arquitectura`,cpus:`CPU`,memory:`Memoria`,container:`Contenedor`,image:`Imagen`,state:`Estado`,created:`Creado`,empty:`Docker está conectado y actualmente no hay contenedores listados.`},network:{title:`Red`,description:`Interfaces visibles en tiempo de ejecución, direcciones y contadores de tráfico de Linux.`,internal:`interna`,empty:`No hay interfaces de red visibles para el entorno de ejecución de la aplicación.`},securityNote:`Esta página está restringida a administradores. El servidor solo devuelve resúmenes operativos: no expone variables de entorno, credenciales, etiquetas de Docker, montajes, comandos de contenedor ni cargas útiles de inspección. Cuando Libre WebUI se ejecuta en un contenedor, los detalles de CPU y memoria a nivel de host provienen de Docker Engine cuando su socket local está disponible; otros valores describen el entorno de ejecución de la aplicación.`,work:{title:`Work`,description:`Sandboxes de todos los usuarios`,access:`Acceso`,accessAdmins:`Solo administradores`,accessAllUsers:`Todos los usuarios`,runtimeAvailable:`Disponible`,runtimeUnavailable:`No disponible`,activeRuntimes:`Entornos activos`,pendingCleanups:`Limpiezas pendientes`,orphans:`Contenedores huérfanos`,owner:`Propietario`,task:`Tarea`,state:`Estado`,preview:`Vista previa`,terminals:`Terminales`,inUse:`En uso`,inUseNone:`Nadie`,updated:`Actualizado`,lastRun:`Última ejecución`,noRun:`—`,stateRunning:`En ejecución`,stateStopped:`Detenido`,stateStarting:`Iniciando`,stateUnknown:`Desconocido`,noTasks:`Aún no hay tareas de Work.`,usageKinds:{command:`comando`,preview:`vista previa`,terminal:`terminal`,screen:`pantalla`},recovery:{title:`Recuperación`,description:`Sandboxes que Work todavía está limpiando. Las nuevas operaciones de Work permanecen bloqueadas hasta que el entorno confirme que cada una se ha detenido.`,container:`Contenedor`,task:`Tarea`,reason:`Motivo`,attempts:`Intentos`,lastError:`Último error`,nextAttempt:`Próximo intento`,retry:`Reintentar ahora`,retrying:`Reintentando…`,reasonStartup:`En ejecución al iniciar`,reasonStopFailed:`Error al detener`,reasonRuntimeUnreachable:`Entorno no accesible`,reasonOrphan:`Sin registro de tarea`,notScheduled:`No programado`,loadFailed:`No se pudieron cargar las limpiezas pendientes.`,retrySucceeded:`Se resolvieron {{cleared}} de {{attempted}} limpiezas pendientes.`,retryPending:`Todavía reintentando {{attempted}} limpiezas pendientes.`,retryFailed:`No se pudieron reintentar las limpiezas pendientes.`}},recovery:{title:`Simulacros de recuperación`,scheduleOn:`Se ejecuta automáticamente cada {{hours}} h — cada simulacro respalda, restaura en una copia aislada y verifica el resultado.`,scheduleOff:`Sin programar — define RECOVERY_DRILL_INTERVAL_HOURS para simulacros automáticos.`,teamUnsupported:`Los simulacros cubren el perfil individual (SQLite); el perfil de equipo usa la CLI de respaldo coordinado.`,runNow:`Ejecutar simulacro`,running:`Ejecutando…`,passed:`Simulacro de recuperación superado.`,failed:`El simulacro de recuperación falló.`,lastPassed:`Último superado`,restoreTime:`Tiempo de restauración (RTO)`,drillSpacing:`Intervalo entre simulacros (RPO)`,archiveSize:`Tamaño del archivo`,lastFailed:`Último simulacro falló el {{date}}`,originManual:`Manual`,originScheduled:`Programado`,columns:{when:`Cuándo`,origin:`Origen`,status:`Estado`,restore:`Restauración`},status:{passed:`Superado`,failed:`Fallido`,running:`En curso`}}},chatHistory:{label:`Historial de la conversación`,jumpToTurn:`Ir al turno {{index}} de {{total}}`},chatMessage:{you:`Tú`,assistant:`Asistente`,system:`Sistema`,conversationSummary:`Resumen de la conversación`,restoreCompacted:`Restaurar los mensajes resumidos`,restoreFailed:`No se pudieron restaurar los mensajes resumidos`,copy:`Copiar`,copyMessage:`Copiar mensaje`,copied:`¡Copiado!`,regenerate:`Regenerar`,regenerateResponse:`Regenerar respuesta`,edit:`Editar`,editSystemMessage:`Editar mensaje del sistema`,saveChanges:`Guardar cambios`,cancelEditing:`Cancelar edición`,saveAndSubmit:`Guardar y enviar`,goodResponse:`Buena respuesta`,badResponse:`Mala respuesta`,delete:`Eliminar`,deleteConfirm:`¿Eliminar este mensaje?`,branch:`Ramificar`,speaking:`Hablando...`,speakMessage:`Leer mensaje`,stopSpeaking:`Detener lectura`,showMore:`Mostrar más`,showLess:`Mostrar menos`,thinking:`Pensando`,thoughtFor:`Pensó durante {{duration}}`,hiddenLines:`{{count}} líneas ocultas`,systemMessagePlaceholder:`Ingresa tu mensaje del sistema...`,fullSizeImage:`Imagen a tamaño completo`,startConversation:`Iniciar una conversación`,startConversationDescription:`Envía un mensaje para comenzar a chatear con tu asistente de IA. Haz preguntas, obtén ayuda con código o mantén una conversación natural.`,scrollToBottom:`Desplazar al final`,newMessages:`Nuevos mensajes`,feedbackTags:{accuracy:`Precisión`,style:`Estilo`,incomplete:`Incompleta`,harmful:`Dañina`,formatting:`Formato`},feedbackComment:`Añadir un comentario…`},imageGallery:{title:`Galería de imágenes`,noImages:`Aún no hay imágenes`,noImagesHint:`Genera tu primera imagen usando el panel de la derecha`,delete:`Eliminar`,download:`Descargar`,deleteConfirm:`¿Estás seguro de que deseas eliminar esta imagen?`,deleteSuccess:`Imagen eliminada`,deleteFailed:`Error al eliminar imagen`,downloadFailed:`Error al descargar imagen`,loadMore:`Cargar más ({{current}} de {{total}})`,loadFailed:`Error al cargar galería`},imageGeneration:{title:`Generar imagen`,prompt:`Prompt`,promptPlaceholder:`Describe la imagen que quieres crear...`,model:`Modelo`,selectModel:`Seleccionar modelo`,noModels:`No hay modelos de generación de imágenes disponibles`,configurePlugin:`Configura un plugin con soporte de generación de imágenes`,size:`Tamaño`,quality:`Calidad`,style:`Estilo`,generate:`Generar`,generating:`Generando...`,success:`Imagen generada exitosamente`,failed:`Error al generar imagen`,enterPrompt:`Por favor ingresa un prompt`,promptTooLong:`El prompt excede la longitud máxima de {{max}} caracteres`},mediaGeneration:{title:`Generar multimedia`,description:`Crea video, sonido, música o voz con un proveedor multimedia activado.`,image:`Imagen`,video:`Video`,audio:`Audio`,sound:`Sonido`,speech:`Voz`,model:`Modelo`,voice:`Voz o ID de voz`,cloneVoice:`Clonar una voz de referencia`,cloneVoiceDescription:`Genera esta voz a partir de una grabación de referencia en lugar de una voz predefinida.`,referenceAudio:`Audio de referencia`,referenceTranscript:`Transcripción exacta de la referencia`,referenceTranscriptPlaceholder:`Escribe exactamente lo que se dice en la grabación de referencia…`,referenceAudioTooLarge:`El audio de referencia debe ocupar {{max}} o menos.`,cloneConsent:`Clona una voz solo si tienes el permiso del hablante. La grabación se envía al proveedor seleccionado para esta generación y Libre WebUI no la guarda.`,saveVoiceProfile:`Guardar como voz reutilizable`,saveVoiceProfileDescription:`Guarda de forma segura esta grabación de referencia y su transcripción. Libre WebUI las envía al proveedor seleccionado en cada lote de Voz que usa esta voz.`,voiceProfileName:`Nombre de la voz guardada`,voiceProfileNamePlaceholder:`Por ejemplo, Mi voz`,voiceStorageConsent:`Confirmo que tengo permiso del hablante para clonar y guardar esta voz. La referencia permanecerá guardada hasta que la elimine.`,resolution:`Resolución`,aspectRatio:`Relación de aspecto`,duration:`Duración`,providerDefault:`Predeterminado del proveedor`,generateAudio:`Generar audio con el video cuando se admita`,prompt:`Indicación`,text:`Texto a hablar`,videoPlaceholder:`Describe la escena, el movimiento, la cámara y la iluminación...`,audioPlaceholder:`Introduce el texto que quieres que diga la voz...`,soundPlaceholder:`Describe el sonido, la música, la atmósfera o la respuesta hablada que deseas...`,generate:`Generar`,generating:`Generando… esto puede tardar varios minutos`,success:`Multimedia generada y guardada en Imagine`,successWithSavedVoice:`Se generó el contenido y «{{name}}» ya está disponible en los ajustes de Voz`,failed:`Error al generar multimedia`,loadFailed:`Error al cargar los proveedores multimedia`,noModels:`No hay modelos de {{kind}} disponibles. Activa un proveedor compatible y guarda sus credenciales primero.`,consentTtl:{label:`Duración del consentimiento`,never:`Hasta que lo retire`,days30:`30 días`,days90:`90 días`,days365:`Un año`}},mediaGallery:{itemCount:`{{count}} elementos`,empty:`Aún no hay multimedia generada`,emptyHint:`Genera una imagen, video o clip de voz y aparecerá aquí.`,filters:{all:`Todos`,image:`Imágenes`,video:`Vídeos`,audio:`Audio`}},errorBoundary:{title:`Algo salió mal`,description:`Encontramos un error inesperado. Por favor intenta actualizar la página.`,tryAgain:`Actualizar página`,goHome:`Ir al inicio`,errorDetails:`Detalles del error (desarrollo)`},documents:{title:`Documentos`,upload:`Subir documento`,uploading:`Subiendo...`,noDocuments:`No hay documentos subidos`,uploadHint:`Sube documentos para usar en tus conversaciones`,delete:`Eliminar`,deleteConfirm:`¿Estás seguro de que deseas eliminar este documento?`,deleteSuccess:`Documento eliminado`,deleteFailed:`Error al eliminar documento`,uploadSuccess:`Documento subido exitosamente`,uploadFailed:`Error al subir documento`,types:`Soportados: PDF, TXT, MD, DOCX`,unsupportedFileType:`Este tipo de archivo no es compatible`,fileSizeTooLarge:`El tamaño del archivo debe ser menor a 10 MB`,uploadSuccessWithName:`Documento "{{name}}" subido exitosamente`,removeSuccess:`Documento eliminado exitosamente`,removeFailed:`Error al eliminar documento`,removeError:`Ocurrió un error al eliminar el documento`,clickToUpload:`Haz clic para subir`,orDragAndDrop:`o arrastra y suelta`,fileTypesAndSize:`Archivos PDF, Office, Markdown, HTML, código, CSV, imagen y audio de hasta 10 MB`,uploadedDocuments:`Documentos subidos`,removeDocument:`Eliminar documento`,fullContextToggle:`Enviar documentos completos`,fullContextEstimate:`≈ {{tokens}} tokens`,fullContextTooLarge:`Los documentos adjuntos superan el límite de contexto completo, por lo que se usó la recuperación`,fullDocument:`Documento completo`},ttsButton:{speak:`Hablar`,stop:`Detener`,speaking:`Hablando...`,generateFailed:`Error al generar voz`,playbackFailed:`Error en reproducción de audio`,stopSpeaking:`Detener lectura`,preparingSpeech:`Preparando voz...`,generatingSpeech:`Generando voz...`,bufferingSpeech:`Almacenando voz en búfer...`,enableAudio:`Activar audio y leer en voz alta`,enableAudioShort:`Activar audio`,readAloud:`Leer en voz alta`},artifacts:{title:`Artefactos`,code:`Código`,preview:`Vista previa`,copy:`Copiar código`,copied:`¡Copiado!`,download:`Descargar`,expand:`Expandir`,collapse:`Contraer`,openInNewTab:`Abrir en nueva pestaña`,invalidSvg:`Contenido SVG inválido`,invalidJson:`Contenido JSON inválido`,previewMode:`Modo vista previa`,codeMode:`Modo código`,copyContent:`Copiar contenido`,openInPanel:`Abrir en panel`,created:`Creado`,closePanelEsc:`Cerrar panel (Esc)`,copyButton:`Copiar`,dragEdgeToResize:`Arrastra el borde para redimensionar`,previewUnavailable:`Preview unavailable`,previewUnavailableDescription:`This artifact does not contain renderable preview content. Switch to code view to inspect the source.`,versionOf:`Versión {{current}} de {{total}}`,previousVersion:`Versión anterior`,nextVersion:`Versión siguiente`},personaImportExport:{title:`Importar y exportar personas`,description:`Exporta tus personas para compartirlas o importa personas de otros`,exportPersonas:`Exportar personas`,importPersonas:`Importar personas`,noPersonasToExport:`No hay personas para exportar`,personasAvailable:`{{count}} persona disponible`,personasAvailable_plural:`{{count}} personas disponibles`,exportAll:`Exportar todo`,uploadJsonFile:`Subir archivo JSON`,pasteJsonLabel:`Pegar datos JSON`,pasteJsonPlaceholder:`Pega los datos JSON de la persona aquí...`,importing:`Importando...`,importButton:`Importar persona(s)`,expectedFormat:`Formato JSON esperado:`,exportSuccess:`Persona "{{name}}" exportada exitosamente`,exportFailed:`Error al exportar persona`,exportAllSuccess:`Todas las {{count}} personas exportadas exitosamente`,exportAllFailed:`Error al exportar personas`,pasteJsonData:`Por favor pega los datos JSON de la persona`,importMultipleSuccess:`Se importaron {{count}} personas exitosamente`,importMultipleFailed:`Error al importar {{count}} personas`,importNoneFailed:`Error al importar cualquier persona`,importSuccess:`Persona importada exitosamente`,importFailed:`Error al importar persona`},generationStats:{details:`Detalles`,promptTokens:`Tokens del prompt:`,generatedTokens:`Tokens generados:`,totalTokens:`Tokens totales:`,speed:`Velocidad:`,promptEval:`Evaluación del prompt:`,generation:`Generación:`,modelLoad:`Carga del modelo:`,totalTime:`Tiempo total:`,generatedAt:`Generado a las:`},userMenu:{loggedOut:`Sesión cerrada correctamente`,pictureUpdated:`Foto de perfil actualizada`,failedUpdateAvatar:`Error al actualizar el avatar`,failedUpdatePicture:`Error al actualizar la foto de perfil`,noEmail:`Sin correo electrónico`,changePicture:`Cambiar imagen`,settings:`Configuración`,userManagement:`Gestión de usuarios`,signOut:`Cerrar sesión`,changeProfilePicture:`Cambiar foto de perfil`},pluginManager:{title:`Gestor de plugins`,upload:`Subir`,addJson:`Añadir JSON`,browseHF:`Explorar HF Hub`,confirmDelete:`¿Estás seguro de que quieres eliminar este plugin?`,uploading:`Subiendo plugin...`,pasteJson:`Pega el JSON del plugin aquí...`,installPlugin:`Instalar plugin`,loading:`Cargando plugins...`,noPlugins:`No hay plugins instalados`,noPluginsDescription:`Sube un archivo de plugin o añade uno desde JSON para comenzar.`,active:`Activo`,id:`ID`,endpoint:`Endpoint`,activate:`Activar`,deactivate:`Desactivar`,activePlugin:`Plugin activo`,activePluginDescription:`Todas las solicitudes de chat se enrutarán a través de este plugin`,variables:{title:`Variables`,save:`Guardar`,saving:`Guardando...`,saved:`Variables guardadas`,saveFailed:`Error al guardar variables`,resetDefaults:`Restablecer valores`,reset:`Variables restablecidas`,resetFailed:`Error al restablecer las variables`,sensitiveSet:`Valor establecido (ingrese nuevo valor para cambiar)`,showValue:`Mostrar valor de {{label}}`,hideValue:`Ocultar valor de {{label}}`,connection:`Conexión`,advanced:`Parámetros avanzados`,inherited:`Usar predeterminado del proveedor`,inheritedValue:`Usar predeterminado del proveedor ({{value}})`,enabled:`Habilitado`,disabled:`Deshabilitado`,required:`Se requiere un valor`,fullApiEndpoint:`URL completa del endpoint de API`,endpointHelp:`Introduce la URL de solicitud completa, incluyendo su ruta de operación (por ejemplo, /v1/chat/completions), no solo la URL base del proveedor.`,invalidUrl:`Introduce una URL de endpoint de API completa válida, por ejemplo https://provider.example/v1/chat/completions`,insecureUrl:`Los endpoints de API deben usar HTTP o HTTPS.`,httpWarning:`HTTP no cifra las credenciales ni el tráfico. Úsalo solo en una red de confianza.`,invalidBaseUrl:`Las URLs base no pueden contener una cadena de consulta ni un fragmento.`,invalidApiPath:`Debe empezar con / y no contener URL, consulta, fragmento ni el segmento ..`,tooLong:`El valor es demasiado largo`}},huggingface:{title:`Explorador de modelos HuggingFace`,subtitle:`Explora y selecciona modelos del Hub`,searchPlaceholder:`Buscar modelos...`,filters:`Filtros`,task:`Tarea`,sortBy:`Ordenar por`,noModels:`No se encontraron modelos`,adjustSearch:`Intenta ajustar tu búsqueda o filtros`,gated:`Restringido`,selected:`Seleccionado`,select:`Seleccionar`,refresh:`Actualizar`,modelsFound:`modelos encontrados`},demoMode:{title:`Modo demo`,github:`GitHub`},libreClaw:{title:`Agentes`,subtitle:`Ejecuciones, aprobaciones, programaciones, memoria, herramientas y uso del agente local.`,dashboard:`Panel de control`,connection:{disconnectedTitle:`El demonio de Libre Claw no está conectado`,disconnectedDescription:`Inícielo localmente con <command>libre-claw start</command> o configure <env>LIBRE_CLAW_BASE_URL</env> en el entorno backend.`},status:{connected:`Conectado`,disconnected:`desconectado`,activeRuns:`{{count}} activo`,activeRuns_plural:`{{count}} activo`},states:{queued:`En cola`,running:`En ejecución`,blocked:`Bloqueado`,done:`hecho`,failed:`Fallido`,cancelled:`Cancelado`},startRun:{title:`Iniciar ejecución del agente`,placeholder:`Pídale a Libre Claw que inspeccione un repositorio, corrija un error, ejecute una revisión, programe un informe...`,chatRun:`Ejecutar chat`,goalMode:`Modo objetivo`,providerOverride:`Anulación del proveedor`,modelOverride:`Anulación de modelo`,run:`Ejecutar`},modelRoute:{title:`Ruta Modelo`,providerPlaceholder:`proveedor`,modelPlaceholder:`modelo`,persistGlobal:`Persistir en la configuración global Libre Claw`,saveModel:`Guardar modelo`,theme:`Tema de Libre Claw`,saveTheme:`Guardar tema`},runs:{title:`Ejecuciones`,empty:`Aún no hay ejecuciones de Libre Claw.`},timeline:{title:`Cronología de la ejecución`,empty:`Seleccione una ejecución para inspeccionar sus eventos.`,streaming:`Transmitiendo...`,assistantResponse:`Respuesta del asistente`,resultOk:`bien`,resultError:`error`,labels:{userMessage:`Mensaje de usuario`,toolCall:`llamada de herramienta`,toolResult:`Resultado de la herramienta`,approvalRequest:`Solicitud de aprobación`,approvalResponse:`Respuesta de aprobación`,runStarted:`Ejecución iniciada`,runFinished:`Ejecución finalizada`,usage:`Uso`,error:`error`}},approvals:{needed:`Aprobación necesaria`,allowOnce:`permitir una vez`,alwaysAllowTool:`Permitir siempre la herramienta`,deny:`Rechazar`,toolApprovalRequested:`Se solicita aprobación de herramienta`},automations:{title:`Automatizaciones`,namePlaceholder:`Nombre`,schedulePlaceholder:`daily 09:00`,promptPlaceholder:`Aviso de automatización`,create:`crear`,empty:`No hay automatizaciones programadas Libre Claw.`,runNow:`Ejecutar ahora`,pause:`Pausa`,resume:`Reanudar`,routes:{report:`Informe`,telegram:`Telegram`},status:{active:`Activo`,paused:`En pausa`}},usageFallback:{title:`Uso y respaldo`,usage:`Uso`,fallbackRoute:`Ruta alternativa`,noUsage:`Aún no hay registros de uso.`},metrics:{provider:`Proveedor`,model:`modelo`,input:`Entrada`,output:`Salida`,cached:`En caché`,reasoning:`Razonamiento`,cost:`Costo`,tool:`Herramienta`,resolution:`Resolución`,state:`Estado`,stopReason:`Motivo de detención`,tokens:`{{formatted}} ficha`,tokens_plural:`{{formatted}} fichas`},fallbacks:{tool:`herramienta`,unknown:`desconocido`,resolved:`resuelto`,unknownError:`Error desconocido`},toasts:{loadStatusFailed:`No se pudo cargar el estado Libre Claw`,enterTask:`Ingrese una tarea para Libre Claw`,runStarted:`Ejecución de Libre Claw iniciada`,startRunFailed:`No se pudo iniciar la ejecución de Libre Claw`,runCancelled:`Ejecución cancelada`,cancelRunFailed:`No se pudo cancelar la ejecución`,approved:`Aprobado`,denied:`denegado`,resolvePermissionFailed:`No se pudo resolver el permiso`,providerModelRequired:`Se requiere proveedor y modelo.`,modelUpdated:`Modelo de Libre Claw actualizado`,updateModelFailed:`No se pudo actualizar el modelo`,themeUpdated:`Tema de Libre Claw actualizado`,updateThemeFailed:`No se pudo actualizar el tema`,automationRequired:`Se requieren el nombre, el cronograma y el aviso de la automatización`,automationCreated:`Automatización creada`,createAutomationFailed:`No se pudo crear la automatización`,automationUpdated:`Automatización actualizada`,updateAutomationFailed:`No se pudo actualizar la automatización`}},work:JSON.parse(`{"title":"Trabajo","subtitle":"Espacios de trabajo aislados para modelos","tasks":{"title":"Tareas de trabajo","subtitle":"Espacios de trabajo locales persistentes","new":"Nueva tarea","emptyTitle":"Aún no hay tareas de trabajo","empty":"Tus tareas de trabajo aparecerán aquí después de enviar el primer mensaje.","untitled":"Tarea sin título","actions":"Acciones de la tarea","delete":"Eliminar tarea","deleteNamed":"Eliminar {{title}}","deleteConfirm":"¿Eliminar «{{title}}» y su espacio de trabajo de forma permanente?","close":"Cerrar tareas de trabajo","open":"Abrir tareas de trabajo","rename":"Título de la tarea","loading":"Cargando tarea…","notFound":"Esta tarea de trabajo no está disponible","back":"Iniciar una nueva tarea","status":"Estado: {{status}}"},"landing":{"title":"¿En qué te gustaría trabajar?","description":"Describe una tarea. Tu modelo tendrá su propio espacio de trabajo.","isolated":"Aislado","isolatedBody":"Cada tarea tiene su propio contenedor y archivos.","durable":"Persistente","durableBody":"Vuelve más tarde a su conversación y espacio de trabajo.","controlled":"Controlado","controlledBody":"El entorno de ejecución y los archivos de la tarea permanecen aislados del host."},"composer":{"placeholder":"Describe lo que quieres crear o cambiar…","model":"Modelo de trabajo","noModels":"No hay modelos compatibles con el modo Trabajo","cancel":"Detener","send":"Ejecutar","hint":"Cada tarea conserva sus propios archivos e historial. Revisa la salida del modelo antes de usarla.","remoteTitle":"Proveedor remoto","remoteHint":"La conversación y la salida de las herramientas se envían al servicio configurado. Una ejecución autónoma puede realizar varias llamadas al proveedor y generar cargos. Los archivos del espacio de trabajo permanecen locales, salvo que una herramienta devuelva su contenido.","remoteDismiss":"Ocultar","remoteDismissLabel":"Ocultar aviso del proveedor remoto","remoteDismissFailed":"No se pudo guardar la preferencia del proveedor remoto.","noModelSelected":"No hay ningún modelo compatible con el modo Trabajo seleccionado.","mentionAgents":"Mencionar un agente","engine":"Motor","nativeDshModels":"Modelos nativos de DSH","libreModels":"Modelos de Libre WebUI","nativeDshUnavailable":"Los modelos nativos de DSH no están disponibles. Actualiza la lista de modelos o revisa la configuración del proveedor.","modelLabel":"Modelo"},"conversation":{"ready":"Espacio de trabajo listo","empty":"Continúa la tarea abajo. Esta conversación y sus archivos permanecen asociados a este espacio de trabajo.","loadOlder":"Cargar mensajes anteriores","openFile":"Abrir {{name}}","delegatedBy":"Delegado por {{agent}}","reportFrom":"Informe de {{agent}}"},"status":{"preparing":"Preparando el espacio de trabajo aislado…","running":"Trabajando en el espacio de trabajo local…"},"statusLabels":{"idle":"Inactivo","thinking":"Pensando","complete":"Completado","needsInput":"Requiere información","error":"Error"},"live":{"connecting":"Conectando con las actualizaciones en vivo…","reconnecting":"Reconectando con las actualizaciones en vivo…","unavailable":"Actualizaciones en vivo no disponibles","newActivity":"Nueva actividad","skillsLoaded":"Habilidades del espacio de trabajo · {{count}}","skillWorked":"Este procedimiento funcionó","skillFailed":"Este procedimiento falló","skillTraceSaved":"anotado","stats":{"title":"Resumen de la ejecución","rounds":"Rondas","toolCalls":"Llamadas a herramientas","screenshots":"Capturas","fences":"Cortes","checksPassed":"Comprobaciones superadas","checksPending":"Comprobaciones pendientes","stallNudges":"Avisos de bloqueo","ambiguityNudges":"Avisos de reorientación","stoppedBy":"Detenido por"}},"runtime":{"unavailable":"Entorno de ejecución no disponible","ready":"Entorno de ejecución listo","readyOllama":"Docker listo","readyPlugin":"Docker + plugin listos","readyHybrid":"Docker + modelos listos","reason":"Se requiere un entorno de ejecución Work y un proveedor de modelos disponible."},"workspace":{"label":"Vistas del espacio de trabajo","files":"Archivos","activity":"Actividad","preview":"Vista previa","resize":"Cambiar el tamaño de la conversación y el espacio de trabajo","resizeHint":"Arrastra para cambiar el tamaño. Usa las teclas de flecha para un control preciso. Haz doble clic o pulsa Intro para restablecer.","splitSize":"Conversación {{conversation}} %, espacio de trabajo {{workspace}} %","terminal":"Terminal","git":"Git","screen":"Pantalla","agent":"Agente"},"files":{"discard":"¿Descartar los cambios no guardados del archivo?","leaveWithDraft":"¿Salir de este archivo? La edición sin guardar se conservará como borrador en el navegador.","up":"Carpeta principal","back":"Volver a los archivos","empty":"Aún no hay archivos en esta carpeta.","select":"Selecciona un archivo para inspeccionarlo y editarlo.","editorLabel":"Editor de archivos: {{path}}","format":"Formatear","formatted":"Código formateado.","formatFailed":"No se pudo formatear este archivo.","formatShortcut":"Formatear (Mayús+Alt+F)","formatTooLarge":"El formateo está limitado a archivos de menos de 100.000 caracteres y 4.000 líneas.","formatUnsupported":"El formato no está disponible para este tipo de archivo.","saveShortcut":"Guardar (⌘/Ctrl+S)","highlightPaused":"El resaltado en tiempo real está pausado para archivos grandes, a fin de mantener una edición fluida.","plainTextLarge":"Texto sin formato · archivo grande","changes":"Cambios","changesSince":"Qué cambió desde el último turno","diffLabel":"Cambios desde el último turno: {{path}}","diffFolded":"{{count}} líneas sin cambios"},"activity":{"empty":"Los comandos, las operaciones de archivos y los resultados de las herramientas aparecerán aquí.","toolActivity":"Actividad de herramientas","details":"Detalles","kinds":{"message":"Mensaje","toolCall":"Llamada a herramienta","toolResult":"Resultado de herramienta","error":"Error"}},"preview":{"command":"Comando de inicio opcional","start":"Iniciar vista previa","stop":"Detener vista previa","open":"Abrir","starting":"Iniciando vista previa…","frameTitle":"Vista previa del espacio de trabajo","failed":"No se pudo iniciar la vista previa. Revisa Actividad e inténtalo con otro comando.","empty":"Inicia la aplicación dentro de este espacio de trabajo para inspeccionarla aquí.","finished":"Esta tarea ha terminado. Vuelve a abrirla para iniciar una vista previa.","reopenStart":"Reabrir tarea e iniciar vista previa"},"mobile":{"surface":"Vista de la tarea","conversation":"Conversación","workspace":"Espacio de trabajo"},"toasts":{"runFailed":"No se pudo iniciar la tarea de trabajo.","updateFailed":"No se pudo actualizar esta tarea.","renameFailed":"No se pudo cambiar el nombre de esta tarea.","cancelled":"Ejecución de trabajo detenida.","cancelFailed":"No se pudo detener la ejecución de trabajo.","deleteFailed":"No se pudo eliminar esta tarea de trabajo.","saveFailed":"No se pudo guardar este archivo.","saved":"Archivo guardado.","previewFailed":"No se pudo iniciar la vista previa.","previewStopFailed":"No se pudo detener la vista previa."},"terminal":{"connecting":"Abriendo un shell en el entorno aislado…","closed":"La sesión de terminal ha terminado.","failed":"No se pudo iniciar la sesión de terminal.","reconnect":"Reconectar","unavailable":"La terminal interactiva no está disponible en esta instalación.","blockedByRun":"El modelo está usando este contenedor. La terminal se abrirá al terminar el turno.","taskRunning":"Turno del modelo en curso"},"policy":{"label":"Política de ejecución","default":"Predeterminada (límites globales)","setupHint":"Las políticas de ejecución desbloquean el Work Computer — un escritorio con navegador observable para el agente — y límites por tarea.","setupLink":"Configurar políticas de Work"},"git":{"actionFailed":"La acción de Git falló.","blockedByPreview":"Detén la vista previa antes de cambiar el estado de Git.","blockedByRun":"Las acciones de escritura de Git se desbloquean al terminar el turno del modelo.","branchCreated":"{{name}} creada.","branchSwitched":"Cambiado a {{name}}.","clean":"El árbol de trabajo está limpio.","commit":"Confirmar cambios preparados","commitMessage":"Mensaje del commit","committed":"Commit creado.","detached":"HEAD separado","diff":"Vista previa del diff","diffFailed":"No se pudo cargar este diff.","history":"Historial local","initialize":"Inicializar Git","initializeDescription":"Crea un repositorio local para estado, diffs, ramas y commits. No se conectan credenciales remotas.","initialized":"Repositorio Git inicializado.","loadFailed":"No se pudo cargar el estado de Git.","localOnly":"Solo Git local. Push, pull y pull requests requieren un intermediario de credenciales de confianza aparte.","newBranch":"Nueva rama local","noCommits":"Aún no hay commits.","noDiff":"Aún no hay diff textual. Los archivos sin seguimiento aparecen tras prepararlos.","notInitialized":"Git no está inicializado","selectChange":"Selecciona un archivo modificado para inspeccionar su diff.","selectPath":"Seleccionar {{path}}","stageAll":"Preparar todo","stageSelected":"Preparar {{count}}","staged":"Cambios preparados.","switchBranch":"Cambiar de rama local","changes":"Cambios","createBranch":"Crear","filterFiles":"Filtrar archivos modificados","noFilterMatches":"Ningún archivo modificado coincide con este filtro.","allChanges":"Todos los cambios","diffTruncated":"Este diff está truncado.","binaryFile":"Archivo binario, sin diff de texto."},"hostWorkspace":{"hint":"Déjalo en blanco para un espacio aislado, o apunta la tarea a una carpeta de esta máquina.","label":"Carpeta del espacio de trabajo (opcional)","warning":"La tarea puede leer y escribir esta carpeta directamente. Déjalo en blanco para usar un espacio aislado."},"screen":{"starting":"Iniciando el Work Computer…","disconnected":"La pantalla está desconectada.","reconnect":"Reconectar","viewOnly":"Observando","takeOver":"Tomar el control","handBack":"He terminado","youHaveControl":"Tienes el control","otherHasControl":"{{name}} tiene el control","agentWaiting":"El agente te pidió tomar el control","teach":"Enseñar una tarea","recording":"Grabando","teachSave":"Guardar","teachDiscard":"Descartar","teachNamePlaceholder":"Nombra esta tarea","teachSaved":"Guardado como habilidad \\"{{name}}\\"","watchingLearning":"El agente está observando y aprendiendo","unmute":"Activar sonido","mute":"Silenciar","finished":"Esta tarea ha terminado. Vuelve a abrirla para recuperar su pantalla.","reopenOpen":"Reabrir tarea y abrir la pantalla"},"computerSetup":{"title":"Work Computer","description":"Dale a tu agente un escritorio real con navegador: todo se configura automáticamente.","building":"Construyendo la imagen del escritorio... la primera vez tarda unos minutos.","enable":"Activar","retry":"Reintentar"},"agents":{"title":"Agentes"},"persona":{"label":"Contratar como agente (opcional)","none":"Sin persona (tarea puntual)","hint":"Esta tarea se convierte en un agente con nombre: conserva la persona, permanece fijada en la barra lateral e informa una línea de estado después de cada ejecución.","description":"Elige una persona para mantener esta tarea como un agente con nombre."},"agent":{"openScreen":"Abrir la vista de pantalla completa","personaLine":"Persona: {{name}}","screen":"Pantalla","routines":"Rutinas","addRoutine":"Rutina","noRoutines":"Aún no hay rutinas. Una rutina ejecuta una instrucción según un horario, dentro del espacio de trabajo de este agente.","routineToggleFailed":"No se pudo actualizar la rutina.","routineSaveFailed":"No se pudo guardar la rutina.","skills":"Habilidades enseñadas","noSkills":"Nada enseñado todavía. Usa Teach en la pestaña Pantalla para demostrar un procedimiento una vez; se convierte en una habilidad repetible.","skillToggleFailed":"No se pudo actualizar la habilidad.","unread":"Actividad nueva","approvals":"Revisión automática","approvalsHint":"Cuando está activa, los comandos, el borrado y el movimiento de archivos y las acciones en el Work Computer se pausan hasta que los apruebes.","approvalsPolicyForced":"La política de Work de este agente exige aprobación para las acciones con efectos secundarios.","approvalsToggleFailed":"No se pudieron actualizar las aprobaciones.","approvalRuleLine":"Permitido siempre","approvalRuleDelete":"Quitar la regla","approvalRuleDeleteFailed":"No se pudo quitar la regla."},"approval":{"title":"Se necesita aprobación","description":"El agente quiere ejecutar {{tool}}. Esta acción puede cambiar datos o actuar fuera de esta conversación.","allowOnce":"Permitir una vez","allowAlways":"Permitir siempre","deny":"Rechazar","failed":"No se pudo enviar la decisión."},"idleStopHint":"Se detiene tras {{minutes}} minutos sin actividad.","runs":{"title":"Ejecuciones","empty":"Aún no hay ejecuciones terminadas. Cada ejecución conserva lo que produjo y los archivos que cambió.","fileCount":"Archivos ({{total}})","exitStates":{"completed":"Completado","needsInput":"Requiere información","failed":"Fallido","cancelled":"Cancelado"}},"recovery":{"pending":"Work está confirmando {{pending}} limpieza(s) de sandbox antes de aceptar nuevas operaciones.","since":"Bloqueado desde {{time}}.","nextAttempt":"Próximo intento {{time}}.","adminHint":"Los administradores pueden reintentarlo desde Sistema > Work.","retry":"Reintentar ahora","retrying":"Reintentando…","retrySucceeded":"Se resolvieron {{cleared}} de {{attempted}} limpiezas pendientes.","retryPending":"Todavía reintentando {{attempted}} limpiezas pendientes.","retryFailed":"No se pudieron reintentar las limpiezas pendientes."}}`),personaBackground:{label:`Imagen de fondo`,uploadBackgroundImage:`Subir imagen de fondo`,dragAndDrop:`Arrastra y suelta una imagen o haz clic para explorar`,chooseImage:`Elegir imagen`,uploading:`Subiendo...`,enterImageUrl:`O ingresa la URL de la imagen`,supportedFormats:`Soporta: JPG, PNG, GIF, WebP (máx 5MB). Las imágenes horizontales anchas funcionan mejor.`,customBackground:`Imagen de fondo personalizada`,clickToChange:`Haz clic para cambiar o eliminar`,removed:`Fondo eliminado`,uploaded:`Fondo subido exitosamente`,invalidFile:`Por favor selecciona un archivo de imagen válido`,fileTooLarge:`El tamaño de la imagen de fondo debe ser menor a 5MB`,readFailed:`Error al leer el archivo de imagen`,uploadFailed:`Error al subir la imagen de fondo`},modelSelector:{searchInstalled:`Buscar modelos instalados...`,searchOllama:`Buscar en la biblioteca de Ollama...`,searchHuggingFace:`Buscar en HuggingFace...`,selectModel:`Seleccionar modelo`,personas:`Personas`,ollamaModels:`Modelos Ollama`,pluginModels:`Modelos de plugins`,actions:`Acciones`,installed:`Instalado`,use:`Usar`,pull:`Descargar`,pullRestricted:`La instalación de modelos está restringida a administradores en esta instancia.`,adminOnlyPull:`Solo administradores`,legacyProvider:`proveedor no registrado`,providerNotRecorded:`Proveedor no registrado`,providerUnavailable:`proveedor no disponible`,reselectProvider:`vuelve a seleccionar un proveedor para fijar este modelo`,unavailable:`no disponible`,unavailableSelections:`Selecciones no disponibles`,agentModels:`Agentes`},whatsNew:{title:`Novedades`,releaseNotes:`Notas de la versión`,cta:`Vale, vamos`,starAsk:`¿Te gusta Libre WebUI? Deja una estrella en GitHub`},notes:{title:`Notas`,new:`Nueva nota`,untitled:`Sin título`,empty:`Aún no hay notas`,selectOrCreate:`Selecciona una nota o crea una nueva`,contentPlaceholder:`Escribe en Markdown…`,saved:`Guardado`,saveFailed:`No se pudo guardar la nota`,createFailed:`No se pudo crear la nota`,deleteConfirm:`¿Eliminar esta nota?`,deleteFailed:`No se pudo eliminar la nota`,tools:`Herramientas de nota`,revisions:`Historial`,attachments:`Adjuntos`,share:`Compartir`,assist:`Edición con IA`,noRevisions:`Aún no hay versiones anteriores`,restore:`Restaurar`,revisionRestored:`Versión restaurada`,revisionRestoreFailed:`No se pudo restaurar esta versión`,addAttachment:`Añadir adjunto`,noAttachments:`Aún no hay adjuntos`,attachmentAdded:`Adjunto añadido`,attachmentFailed:`No se pudo añadir el adjunto`,attachmentDownloadFailed:`No se pudo descargar el adjunto`,shareUsernamePlaceholder:`Nombre de usuario`,permissionRead:`Puede ver`,permissionWrite:`Puede editar`,shareAction:`Compartir`,notShared:`Aún no se ha compartido`,revokeShare:`Revocar acceso`,shareHint:`Las notas compartidas aparecen en la lista de notas de la otra persona. El acceso puede revocarse en cualquier momento.`,shareUserNotFound:`No hay ningún usuario con ese nombre`,shareAdded:`Compartida con {{username}}`,shareFailed:`No se pudo compartir la nota`,assistPlaceholder:`Describe el cambio, p. ej. condensar el resumen o corregir la gramática`,assistGenerate:`Proponer edición`,assistNoModel:`Selecciona primero un modelo en el Chat`,assistNoChanges:`El modelo no propuso cambios`,assistApply:`Aplicar`,assistDiscard:`Descartar`,assistApplied:`Edición aplicada`,assistRevisionHint:`Al aplicar, la versión anterior se conserva en el historial, así que cualquier edición de IA puede deshacerse.`,assistFailed:`No se pudo generar la edición`,pin:`Fijar nota`,unpin:`Soltar nota`,pinned:`Fijada`,export:`Descargar como Markdown`,sharedWithYou:`Compartida contigo`},calendar:{title:`Calendario`,today:`Hoy`,month:`Mes`,week:`Semana`,previous:`Anterior`,next:`Siguiente`,newEvent:`Nuevo evento`,editEvent:`Editar evento`,eventTitle:`Título`,titlePlaceholder:`Título del evento`,date:`Fecha`,start:`Inicio`,end:`Fin`,allDay:`Todo el día`,repeat:`Repetir`,repeatNone:`No se repite`,repeatDaily:`Diariamente`,repeatWeekly:`Semanalmente`,repeatMonthly:`Mensualmente`,repeatYearly:`Anualmente`,notes:`Notas`,more:`+{{n}} más`,loadFailed:`No se pudo cargar el calendario`,saveFailed:`No se pudo guardar el evento`,deleteFailed:`No se pudo eliminar el evento`,day:`Día`,calendarLabel:`Calendario`,personalCalendar:`Personal`,reminderLabel:`Recordatorio`,reminderNone:`Sin recordatorio`,reminderMinutes:`{{minutes}} minutos antes`,reminderHour:`1 hora antes`,reminderDay:`1 día antes`,sharedReadOnly:`Este evento se compartió contigo solo para lectura.`,sharedBadge:`compartido`,shareCalendar:`Compartir calendario`,newCalendarPlaceholder:`Nuevo calendario…`,calendarSaveFailed:`No se pudo guardar el calendario`,exportFailed:`No se pudo exportar el calendario`,importFailed:`No se pudo importar el archivo`,importResult:`Se importaron {{total}} eventos`,importIcs:`Importar`,exportIcs:`Exportar`},automations:{title:`Automatizaciones`,tab:{automations:`Automatizaciones`,runs:`Ejecuciones`},newAutomation:`Nueva automatización`,editAutomation:`Editar automatización`,empty:`Aún no hay automatizaciones. Crea una para ejecutar una tarea según un horario.`,loadFailed:`No se pudieron cargar las automatizaciones`,saveFailed:`No se pudo guardar la automatización`,actionFailed:`La acción falló`,runQueued:`Ejecución iniciada`,status:{active:`Activa`,paused:`En pausa`},nextRun:`Próxima ejecución {{when}}`,actions:`Acciones`,pause:`Pausar`,resume:`Reanudar`,runNow:`Ejecutar ahora`,openChat:`Abrir chat`,noRuns:`Aún no hay ejecuciones`,deletedAutomation:`Automatización eliminada`,runHistory:`Historial de ejecuciones (últimos 30 días)`,succeeded:`exitosas`,failed:`fallidas`,form:{name:`Nombre`,namePlaceholder:`Mi automatización`,triggers:`Disparadores`,addTrigger:`Añadir disparador`,instructions:`Instrucciones`,instructionsPlaceholder:`¿Qué debe ejecutarse según este horario?`,model:`Modelo`,modelAuto:`Auto`,notification:`Notificación`,notifyApp:`Aplicación`,notifyOff:`Desactivada`,frequency:`Frecuencia`,time:`Hora`,minute:`Minuto`,fromHour:`Desde`,toHour:`Hasta`,weekday:`Día de la semana`,dayOfMonth:`Día`,month:`Mes`,target:`Ejecutar como`,targetChat:`Sesión de chat`,targetWork:`Tarea de Work`,workPolicy:`Política de Work`,workPolicyDefault:`Predeterminada (límites globales)`,taskBoundNote:`Esta rutina se ejecuta dentro del espacio de trabajo y la conversación del propio agente, con su modelo y su entorno.`,event:`Evento`,eventMatch:`Texto coincidente`,eventMatchPlaceholder:`Texto opcional en el título`,eventOnlyHint:`Esta rutina no tiene horario. Se ejecuta cuando ocurre el evento, como máximo una vez por minuto.`},kind:{once:`Una vez`,hourly:`Cada hora`,daily:`Diaria`,weekly:`Semanal`,monthly:`Mensual`,yearly:`Anual`,event:`En un evento`},trigger:{once:`Una vez el {{when}}`,hourly:`Cada hora al minuto :{{minute}}`,daily:`Diariamente a las {{time}}`,weekly:`Semanalmente el {{day}} a las {{time}}`,monthly:`Mensualmente el día {{day}} a las {{time}}`,yearly:`Anualmente el {{date}} a las {{time}}`,event:`Se ejecuta cuando {{event}}`,eventMatching:`Se ejecuta cuando {{event}} y el título contiene "{{match}}"`},finishedNotification:`{{n}} ejecuciones de automatización finalizadas`,templatesTitle:`Plantillas`,templates:{morningBrief:{name:`Resumen matutino`,description:`Empieza el día con titulares y prioridades.`},newsDigest:{name:`Resumen de noticias de IA`,description:`Lanzamientos de modelos, investigación y financiación relevantes.`},weeklyReview:{name:`Revisión semanal`,description:`Cierra la semana: logros, pendientes y próximas prioridades.`},monthlyReport:{name:`Informe mensual`,description:`Un esquema de informe de estado el primer día de cada mes.`}},openTask:`Abrir tarea`,webhook:{title:`Disparador webhook`,enabledHint:`Los sistemas externos pueden lanzar esta automatización con el secreto. Rotarlo invalida el secreto anterior.`,disabledHint:`Permite que un sistema externo (CI, cron, domótica) lance esta automatización con un POST y un secreto.`,rotate:`Rotar secreto`,enable:`Activar`,disable:`Desactivar`,revealHint:`Se muestra una sola vez. Envíalo como token Bearer o en la cabecera X-Libre-Webhook-Secret.`,failed:`No se pudo actualizar el webhook.`},triggers:{events:{"channel-mention":`alguien te mencione en un canal`,"channel-dm":`recibas un mensaje directo`,"channel-invite":`te inviten a un canal`,share:`algo se comparta contigo`,"calendar-reminder":`se active un recordatorio de calendario`,"media-ready":`termine un trabajo multimedia`,"media-failed":`falle un trabajo multimedia`,"budget-alert":`se dispare una alerta de presupuesto`,"work-run-finished":`termine una ejecución del agente`,"work-run-attention":`una ejecución del agente necesite atención`,"work-takeover":`un agente te pida tomar el control`,"work-approval":`un agente esté esperando tu aprobación`,system:`llegue una notificación del sistema`}}},home:{active:`activo`,continue:`Continuar`,start:`Empezar`,explore:`Explorar`},palette:{empty:`Sin coincidencias.`,placeholder:`Buscar chats, Work, acciones…`,toggleTheme:`Cambiar tema`,actions:`Acciones`,chats:`Chats`,search:`Buscar`,settings:`Configuración`,work:`Trabajo`,messages:`Mensajes`,notes:`Notas`,documents:`Documentos`},tabs:{actions:`Acciones de pestaña`,close:`Cerrar pestaña`,closeAll:`Cerrar todas las pestañas`,closeOthers:`Cerrar las demás pestañas`,closeRight:`Cerrar pestañas a la derecha`,home:`Inicio`,label:`Pestañas abiertas`,new:`Nueva pestaña`,newWork:`Nuevo Work`,chat:`Chat`,newChat:`Nuevo chat`,work:`Trabajo`},tools:{arguments:`Argumentos`,result:`Resultado`,callStatus:{awaiting_approval:`Esperando aprobación`,running:`En ejecución`,succeeded:`Listo`,failed:`Falló`,denied:`Rechazada`,cancelled:`Cancelada`},approval:{title:`Se necesita aprobación para la herramienta`,description:`El modelo quiere ejecutar {{tool}} en {{server}}. Esta llamada puede cambiar datos fuera de este chat.`,builtinSource:`este servidor`,allowOnce:`Permitir una vez`,allowSession:`Permitir en este chat`,allowAlways:`Permitir siempre`,deny:`Rechazar`}},promptsPage:{title:`Prompts`,description:`Plantillas de prompts reutilizables con variables tipadas. Escribe / en el campo de chat para insertar una.`,newPrompt:`Nuevo prompt`,editPrompt:`Editar prompt`,empty:`Aún no hay prompts`,emptyHint:`Un prompt es una plantilla de mensaje guardada. Una vez creado, escribir /slug en el campo de chat lo inserta y pide las variables que declara.`,loadFailed:`No se pudieron cargar tus prompts.`,saved:`Prompt guardado`,saveFailed:`No se pudo guardar el prompt.`,deleted:`Prompt eliminado`,deleteFailed:`No se pudo eliminar el prompt.`,deleteTitle:`Eliminar prompt`,deleteConfirm:`¿Eliminar "{{title}}"? También se borra su historial de versiones.`,exportFailed:`No se pudo exportar el prompt.`,imported:`Prompt importado`,importFailed:`No se pudo importar ese archivo.`,historyFailed:`No se pudo cargar el historial de versiones.`,rolledBack:`Prompt restaurado`,rollbackFailed:`No se pudo restaurar el prompt.`,versionLabel:`v{{version}}`,updated:`Actualizado {{when}}`,form:{slug:`Slug`,slugPlaceholder:`weekly-report`,slugHint:`Se usa como /slug en el campo de chat.`,slugInvalid:`Solo minúsculas, dígitos y guiones.`,title:`Título`,titlePlaceholder:`Informe semanal`,description:`Descripción`,descriptionPlaceholder:`Para qué sirve este prompt`,content:`Contenido`,contentPlaceholder:`Escribe el prompt. Envuelve entre llaves dobles todo lo que quieras completar más tarde.`,contentHint:`Un marcador es un nombre entre llaves dobles. Decláralo abajo para darle una etiqueta o un valor por defecto.`,tags:`Etiquetas`,tagsPlaceholder:`investigación, redacción`,variables:`Variables`,variablesHint:`Opcional. Declara aquí un marcador para darle una etiqueta, un valor por defecto o un conjunto de opciones.`,variableName:`Nombre`,variableType:`Tipo`,variableLabel:`Etiqueta`,variableDefault:`Por defecto`,variableRequired:`Obligatorio`,variableOptions:`Opciones`,variableOptionsPlaceholder:`Opciones separadas por comas`,addVariable:`Añadir variable`,removeVariable:`Quitar variable`},variableTypes:{text:`Texto`,number:`Número`,select:`Elección`,boolean:`Sí o no`},history:{open:`Historial de versiones`,title:`Historial de {{title}}`,subtitle:`Restaurar guarda la revisión elegida como una versión nueva. No se sobrescribe nada.`,empty:`Aún no hay versiones anteriores.`,current:`Actual`,rollback:`Restaurar`,rollingBack:`Restaurando...`},templatesTitle:`Empieza con una plantilla`,templates:{reviewPr:{name:`Revisión de pull request`,description:`Revisión de código estructurada con rigor ajustable.`},summarize:{name:`Resumir para un público`,description:`Resumen en viñetas ajustado a quien lo lee.`},translate:{name:`Traducir`,description:`Traducción que conserva el tono y el formato.`},explainCode:{name:`Explicar código`,description:`Recorrido paso a paso más casos límite y riesgos.`}}},skillsPage:{title:`Habilidades`,description:`Conjuntos de instrucciones con nombre que el modelo puede cargar cuando los necesita.`,newSkill:`Nueva habilidad`,editSkill:`Editar habilidad`,empty:`Aún no hay habilidades`,emptyHint:`Una habilidad es un conjunto de instrucciones que el modelo carga solo cuando las necesita. Menciona $slug en un mensaje o deja que el modelo la use a través de la herramienta load_skill.`,loadFailed:`No se pudieron cargar tus habilidades.`,saved:`Habilidad guardada`,saveFailed:`No se pudo guardar la habilidad.`,toggleFailed:`No se pudo cambiar la habilidad.`,deleted:`Habilidad eliminada`,deleteFailed:`No se pudo eliminar la habilidad.`,deleteTitle:`Eliminar habilidad`,deleteConfirm:`¿Eliminar "{{name}}"? También se borra su historial de versiones.`,exportFailed:`No se pudo exportar la habilidad.`,imported:`Habilidad importada`,importFailed:`No se pudo importar ese archivo.`,historyFailed:`No se pudo cargar el historial de versiones.`,rolledBack:`Habilidad restaurada`,rollbackFailed:`No se pudo restaurar la habilidad.`,versionLabel:`v{{version}}`,updated:`Actualizada {{when}}`,form:{slug:`Slug`,slugPlaceholder:`code-review`,slugHint:`Se usa como $slug cuando mencionas la habilidad.`,slugInvalid:`Solo minúsculas, dígitos y guiones.`,name:`Nombre`,namePlaceholder:`Revisión de código`,description:`Descripción`,descriptionPlaceholder:`Cuándo usar esta habilidad`,descriptionHint:`Este es el manifiesto que ve el modelo. Escríbelo de forma que el modelo sepa cuándo aplica la habilidad sin cargarla.`,instructions:`Instrucciones`,instructionsPlaceholder:`Instrucciones en Markdown que el modelo lee al cargar esta habilidad.`,instructionsHint:`Se cargan solo cuando se usa la habilidad, así que su longitud no cuesta nada hasta entonces.`,enabled:`Habilitada`,enabledHint:`Las habilidades deshabilitadas siguen guardadas, pero nunca se ofrecen al modelo.`,approval:`Preguntar siempre antes de`,approvalHint:`Mientras esta habilidad esté cargada, el agente se detiene y espera tu aprobación antes de ejecutar estas herramientas, incluso si las aprobaciones están desactivadas. Una regla guardada de "Permitir siempre" nunca puede aprobarlas por ti.`,approvalTools:`Herramientas que necesitan aprobación`,approvalToolsHint:`Deja todas las casillas sin marcar para cubrir cada herramienta restringida.`},history:{open:`Historial de versiones`,title:`Historial de {{name}}`},templatesTitle:`Empieza con una plantilla`,templates:{citeSources:{name:`Citar fuentes`,description:`Referencias numeradas con URL, sin afirmaciones sin fuente.`},releaseNotes:{name:`Estilo de notas de versión`,description:`Entradas agrupadas y orientadas al usuario, sin ids internos.`},meetingNotes:{name:`Formato de acta de reunión`,description:`Decisiones, tareas y preguntas abiertas a partir de una transcripción.`}},importUrl:{button:`Desde URL`,title:`Importar una habilidad desde una URL`,hint:`Pega un enlace de skills.sh o GitHub, owner/repo/skill, o un enlace directo a un archivo SKILL.md.`,placeholder:`https://skills.sh/owner/repo/skill u owner/repo/skill`,overwrite:`Sobrescribir mi habilidad si el slug ya existe`},files:{title:`Archivos incluidos`,hint:`Documentos de referencia y scripts que el modelo lee bajo demanda con read_skill_file.`,add:`Añadir archivo`,empty:`Aún no hay archivos incluidos.`,pathPlaceholder:`docs/reference.md`,contentPlaceholder:`Contenido del archivo…`,loadFailed:`No se pudo cargar el archivo`,saveFailed:`No se pudo guardar el archivo`,deleteFailed:`No se pudo eliminar el archivo`},folderImport:{button:`Desde carpeta`,missingSkillMd:`La carpeta necesita un archivo SKILL.md`,done:`Habilidad importada con {{count}} archivos incluidos`}},toolsPage:{title:`Herramientas`,description:`Servidores de herramientas que el modelo puede llamar y las aprobaciones que les has dado.`,approvalNotice:`Las herramientas que cambian datos fuera del chat siempre piden aprobación, salvo que le hayas dado a esa herramienta una aprobación permanente o para el chat.`,registerServer:`Registrar servidor`,registerHint:`Libre WebUI lee el servidor una vez y fija las herramientas que expone. Actualiza el servidor más tarde para recoger los cambios.`,editServer:`Editar servidor`,empty:`Sin servidores de herramientas`,emptyHintAdmin:`Registra un servidor OpenAPI o MCP para darle al modelo algo que llamar.`,emptyHintUser:`Ningún administrador ha compartido servidores de herramientas contigo todavía.`,loadFailed:`No se pudieron cargar los servidores de herramientas.`,saved:`Servidor de herramientas guardado`,saveFailed:`No se pudo guardar el servidor de herramientas.`,deleted:`Servidor de herramientas eliminado`,deleteFailed:`No se pudo eliminar el servidor de herramientas.`,deleteTitle:`Eliminar servidor de herramientas`,deleteConfirm:`¿Eliminar "{{name}}"? Todos perderán el acceso a sus herramientas.`,refresh:`Actualizar herramientas`,refreshed:`Herramientas releídas del servidor`,refreshFailed:`No se pudo leer el servidor.`,toolsLoadFailed:`No se pudieron cargar las herramientas fijadas.`,overrideFailed:`No se pudo cambiar la herramienta.`,pinnedTools:`Herramientas fijadas`,noPinnedTools:`Este servidor no expuso ninguna herramienta.`,sideEffect:`Efecto secundario`,sideEffectOverride:`Efecto secundario`,specRevision:`Revisión {{revision}}`,credential:`Credencial personal`,credentialHint:`Se guarda cifrada y solo se usa para tus propias llamadas a este servidor.`,credentialPlaceholder:`Pega tu token`,credentialSet:`Credencial configurada`,credentialMissing:`Falta la credencial`,credentialSaved:`Credencial guardada`,credentialSaveFailed:`No se pudo guardar la credencial.`,credentialRemove:`Eliminar`,credentialRemoved:`Credencial eliminada`,credentialRemoveFailed:`No se pudo eliminar la credencial.`,builtinSource:`Este servidor`,kinds:{openapi:`OpenAPI`,mcp:`MCP`},authModes:{none:`Sin autenticación`,bearer:`Token Bearer`,header:`Cabecera personalizada`,oauth:`OAuth interactivo`},accessModes:{"admins-only":`Solo administradores`,"all-users":`Todos`,granted:`Solo quienes tengan acceso concedido`},form:{name:`Nombre`,namePlaceholder:`API del tiempo`,kind:`Tipo`,description:`Descripción`,descriptionPlaceholder:`Qué hace este servidor`,baseUrl:`URL base`,specUrl:`URL de la especificación`,specUrlHint:`Opcional. Si se deja vacío se usa la URL base.`,authMode:`Autenticación`,authHeader:`Nombre de la cabecera`,oauthClientId:`ID de cliente de OAuth`,oauthClientIdHint:`Opcional. Solo es necesario cuando el proveedor no registra clientes automáticamente.`,oauthClientSecret:`Secreto de cliente de OAuth`,accessMode:`Quién puede usarlo`,timeoutMs:`Tiempo de espera (ms)`,maxResponseBytes:`Respuesta máxima (bytes)`,serverDefault:`Valor del servidor`,enabled:`Habilitado`,enabledHint:`Los servidores deshabilitados siguen registrados, pero nunca se ofrecen al modelo.`},approvals:{title:`Aprobaciones permanentes`,description:`Herramientas que dejaste ejecutarse sin volver a preguntar. Revoca una y volverá a preguntar la próxima vez.`,empty:`Sin aprobaciones permanentes.`,revoke:`Revocar`,revoked:`Aprobación revocada`,revokeFailed:`No se pudo revocar la aprobación.`,scope:{once:`Una vez`,session:`Este chat`,always:`Siempre`}},templatesTitle:`Empieza con una plantilla`,templates:{exa:{name:`Exa`,description:`Busca en la web y obtén páginas con Exa.`},internalOpenApi:{name:`API interna`,description:`Un punto de partida para tu propio servicio OpenAPI.`},mcpServer:{name:`Servidor MCP`,description:`Un punto de partida para un servidor MCP sobre Streamable HTTP.`}},oauth:{title:`Conexión`,hint:`Al conectar, se te enviará al proveedor para iniciar sesión. Los tokens permanecen en este servidor y solo se usan para tus propias llamadas.`,connect:`Conectar`,reconnect:`Reconectar`,disconnect:`Desconectar`,connected:`Conectado`,notConnected:`No conectado`,expiresAt:`El acceso caduca {{when}}`,connectFailed:`No se pudo iniciar la conexión.`,disconnected:`Servidor de herramientas desconectado`,disconnectFailed:`No se pudo desconectar el servidor de herramientas.`,callbackSuccess:`Servidor de herramientas conectado`,callbackError:`No se pudo conectar el servidor de herramientas.`}},composer:{promptMenu:{label:`Biblioteca de prompts`,empty:`Aún no hay prompts: crea uno en Ajustes → Prompts o empieza a escribir un slug.`},skillMenu:{label:`Habilidades`,empty:`Aún no hay habilidades: crea una en Ajustes → Habilidades.`},variables:{title:`Completa {{title}}`,insert:`Insertar`,cancel:`Cancelar`,required:`{{name}} es obligatorio`},toolsMenu:{enable:`Usar herramientas para este mensaje`,builtin:`Herramientas integradas`,servers:`Servidores de herramientas`,hint:`Las llamadas con efectos secundarios siguen pidiendo aprobación antes de ejecutarse.`}},share:{title:`Compartir «{{name}}»`,subtitle:`Da acceso a personas o grupos. Solo tú gestionas los accesos.`,kindUser:`Usuario`,kindGroup:`Grupo`,usernamePlaceholder:`Nombre de usuario exacto`,groupPlaceholder:`Nombre de grupo exacto`,permissionRead:`Puede ver`,permissionWrite:`Puede editar`,action:`Compartir`,empty:`Aún no se ha compartido con nadie.`,hint:`Escribe el nombre exacto del usuario o grupo. Los destinatarios lo ven en su espacio; revocar retira el acceso al instante.`,revoke:`Revocar acceso`,added:`Compartido con {{name}}`,failed:`No se pudo compartir`,userNotFound:`No hay ningún usuario con ese nombre`,groupNotFound:`No hay ningún grupo con ese nombre`},channels:{title:`Canales`,browsePublic:`Explorar canales públicos`,newDm:`Nuevo mensaje directo`,newChannel:`Nuevo canal`,empty:`Aún no hay canales. Crea uno o explora los públicos.`,selectPrompt:`Elige un canal para empezar`,pins:`Fijados`,members:`Miembros`,settings:`Ajustes del canal`,sendFailed:`No se pudo enviar el mensaje`,uploadFailed:`No se pudo subir el archivo`,memberAdded:`Miembro añadido`,memberAddFailed:`No se pudo añadir a ese usuario`,attach:`Adjuntar un archivo`,askModel:`Preguntar a un modelo con este mensaje`,noModel:`Sin modelo`,composerPlaceholder:`Escribe un mensaje…`,thread:`Hilo`,replyPlaceholder:`Responder…`,invitePlaceholder:`Usuario a invitar`,roleOwner:`propietario`,removeMember:`Quitar del canal`,leave:`Salir del canal`,noPins:`Nada fijado todavía.`,noMessages:`Sin mensajes todavía: saluda.`,create:`Crear`,createFailed:`No se pudo crear el canal`,nameLabel:`Nombre`,typeLabel:`Tipo`,typePublic:`Público: cualquiera puede unirse`,typePrivate:`Privado: solo con invitación`,descriptionLabel:`Descripción`,openDm:`Abrir conversación`,dmFailed:`No se pudo abrir la conversación`,dmHint:`Los mensajes directos son privados entre vosotros dos.`,dmPlaceholder:`Nombre de usuario exacto`,noPublic:`No hay canales públicos.`,joined:`Unido`,join:`Unirse`,save:`Guardar`,delete:`Eliminar canal`,modelAuthor:`Modelo`,unknownAuthor:`Alguien`,edited:`editado`,deletedMessage:`Este mensaje se eliminó`,modelThinking:`El modelo está pensando…`,react:`Añadir una reacción`,reply:`Responder en el hilo`,pin:`Fijar mensaje`,unpin:`Desfijar mensaje`,edit:`Editar mensaje`,deleteMessage:`Eliminar mensaje`,replyCount:`{{total}} respuestas`,toolCalls:{summary:`Herramientas usadas ({{total}})`,deniedHint:`Las herramientas que cambian algo se rechazan en los canales. Ejecútalas desde un chat.`}},notifications:{title:`Notificaciones`,empty:`Estás al día.`,markAllRead:`Marcar todo como leído`,markRead:`Marcar como leído`},voiceMode:{title:`Modo de voz`,open:`Iniciar el modo de voz`,close:`Cerrar el modo de voz`,starting:`Iniciando…`,listening:`Escuchando…`,muted:`Micrófono silenciado`,transcribing:`Transcribiendo…`,generating:`Pensando…`,speaking:`Hablando…`,mute:`Silenciar el micrófono`,unmute:`Activar el micrófono`,finishTurn:`He terminado de hablar`,skipReply:`Omitir la respuesta`,microphoneFailed:`Micrófono no disponible`,transcriptionFailed:`La transcripción falló`,replyTimeout:`La respuesta tardó demasiado`,unsupported:`El modo de voz no está disponible`,unsupportedHint:`El modo de voz necesita un micrófono y un proveedor de voz a texto o el reconocimiento de voz del navegador.`},imageEdit:{title:`Editar imagen`,prompt:`Describe el cambio`,promptPlaceholder:`Por ejemplo: reemplazar el cielo por un atardecer`,model:`Modelo`,apply:`Aplicar edición`,maskHint:`Pinta las zonas que se deben repintar; deja el lienzo intacto para editar toda la imagen.`,brushSize:`Tamaño del pincel`,clearMask:`Borrar máscara`,referenceImages:`Imágenes de referencia (hasta {{total}})`,noModels:`Ningún modelo configurado admite la edición de imágenes.`,saved:`Imagen editada guardada en la galería`,failed:`La edición de la imagen falló`,loadFailed:`No se pudo cargar la imagen de origen`},costs:{title:`Costos y presupuestos`,description:`Precios de las tarifas aplicados al registro de uso; los presupuestos vigilan o limitan el gasto.`,loadFailed:`No se pudieron cargar los datos de costos`,saveFailed:`Error al guardar`,exportFailed:`Error al exportar`,exportCsv:`Exportar CSV`,totalSpend:`Gasto total`,meteredEvents:`Eventos tarifados`,unmeteredEvents:`Eventos sin tarifa`,topModel:`Modelo principal`,budgets:`Presupuestos`,noBudgets:`Aún no hay presupuestos.`,budgetName:`Nombre del presupuesto`,principalId:`ID de usuario o grupo`,addBudget:`Añadir presupuesto`,deleteBudget:`Eliminar presupuesto`,budgetSaved:`Presupuesto guardado`,scope:{instance:`Toda la instancia`,user:`Usuario`,group:`Grupo`},period:{daily:`Diario`,weekly:`Semanal`,monthly:`Mensual`},mode:{observe:`Observar`,soft:`Alertar`,hard:`Alertar y bloquear`},tariffs:`Tarifas`,noTariffs:`Aún no hay tarifas: los costos quedan sin precio hasta que agregues precios.`,plugin:`Plugin`,model:`Modelo`,modelOptional:`Modelo (opcional)`,allModels:`Todos los modelos`,inputPerMillion:`Entrada $/M tokens`,outputPerMillion:`Salida $/M tokens`,unitPrice:`Precio unitario`,effectiveFrom:`Vigente desde`,addTariff:`Añadir tarifa`,deleteTariff:`Eliminar tarifa`,tariffSaved:`Tarifa guardada`},evaluations:{title:`Evaluaciones`,description:`Duelos de arena a ciegas, clasificación Elo, conjuntos de evaluación reutilizables y tu conjunto de datos de comentarios.`,loadFailed:`No se pudieron cargar las evaluaciones`,matchFailed:`El duelo de arena falló`,voteRecorded:`Voto registrado`,voteFailed:`No se pudo registrar el voto`,saveFailed:`Error al guardar`,exportFailed:`Error al exportar`,setSaved:`Conjunto de evaluación guardado`,runStarted:`Ejecución iniciada`,pickModel:`Elige un modelo`,tabs:{arena:`Arena`,leaderboard:`Clasificación`,sets:`Conjuntos`,feedback:`Comentarios`},arenaModelA:`Modelo A`,arenaModelB:`Modelo B`,arenaPrompt:`Haz la misma pregunta a ambos modelos…`,startMatch:`Iniciar duelo`,arenaHint:`Las identidades de los modelos permanecen ocultas hasta que votes.`,candidate:`Respuesta {{letter}}`,voteFirst:`La primera es mejor`,voteSecond:`La segunda es mejor`,voteTie:`Empate`,voteBothBad:`Ambas malas`,model:`Modelo`,rating:`Puntuación`,record:`Historial`,votes:`Votos`,noVotes:`Aún no hay votos de arena: inicia un duelo para construir la clasificación.`,newSet:`Nuevo conjunto de evaluación`,setName:`Nombre del conjunto`,setPrompts:`Un prompt por línea…`,saveSet:`Guardar conjunto`,yourSets:`Tus conjuntos`,noSets:`Aún no hay conjuntos de evaluación.`,itemCount:`{{total}} prompts`,run:`Ejecutar`,deleteSet:`Eliminar conjunto`,cancelRun:`Cancelar ejecución`,exportRun:`Exportar ejecución`,status:{queued:`En cola`,running:`En curso`,completed:`Completada`,failed:`Fallida`,cancelled:`Cancelada`},noFeedback:`Aún no hay comentarios: califica respuestas para construir tu conjunto de datos.`},passwordStrength:{levels:{weak:`Débil`,fair:`Aceptable`,good:`Buena`,strong:`Fuerte`},checks:{minLength:`Al menos 12 caracteres`,hasCase:`Mayúsculas y minúsculas`,hasNumber:`Al menos un número`,tooLong:`Máximo 72 bytes`}},connectModels:{adminOnly:`Pide a tu administrador que conecte un proveedor de modelos.`,skip:`Omitir por ahora — conectaré modelos más tarde`,ollama:{status:{checking:`Comprobando disponibilidad…`,healthy:`En ejecución y lista para modelos locales`,offline:`No detectada en esta máquina`,disabled:`Deshabilitada — no se ejecutará ninguna comprobación`},recheck:`Comprobar de nuevo`,enable:`Habilitar`,disable:`Dejar de buscar Ollama`,enabledToast:`Proveedor de Ollama habilitado`,disabledToast:`Comprobaciones de Ollama deshabilitadas — puedes volver a activarlas en Configuración`,settingsFailed:`No se pudo actualizar la configuración de Ollama`,offlineHint:`Instala Ollama desde ollama.com y se detectará automáticamente — o usa una de las opciones de abajo. Si no piensas usar Ollama, puedes desactivar sus comprobaciones.`,healthyHint:`Ollama está conectado. Descarga un modelo desde Modelos y estarás listo para chatear.`},local:{title:`Servidor local`,subtitle:`llama.cpp, vLLM, llama-swap, LM Studio, mlx-lm`,keyPlaceholder:`Clave de API (opcional)`,test:`Probar conexión`,testing:`Probando…`,reachable:`Conectado — se encontraron {{count}} modelos`,unreachable:`Ninguna API de modelos respondió en esa dirección`,noModels:`El endpoint respondió pero no listó modelos. Carga un modelo en tu servidor y vuelve a probar.`,enable:`Habilitar proveedor`,enabling:`Habilitando…`,enabled:`{{name}} conectado — sus modelos ya están disponibles`,enableFailed:`No se pudo habilitar el proveedor`},cloud:{title:`API en la nube`,subtitle:`OpenAI, Anthropic, Groq, OpenRouter y más`,keyPlaceholder:`Pega tu clave de API de {{name}}`,connect:`Conectar`,connecting:`Conectando…`,connected:`{{name}} conectado — sus modelos ya están disponibles`,saveFailed:`No se pudo guardar la clave de API`}},cordis:{title:`Motor Cordis`,description:`Sesiones, herramientas y chat para el motor DeepSeek Harness integrado.`,newSession:`Nueva sesión`,createFailed:`No se pudo crear la sesión.`,deleteFailed:`No se pudo eliminar la sesión.`,sendFailed:`El motor no pudo completar el turno.`,sessionsHeading:`Sesiones`,toolsHeading:`Herramientas`,transcriptHeading:`Transcripción`,noSessions:`Aún no hay sesiones. Crea una para empezar.`,noTools:`El motor no registró ninguna herramienta.`,selectSession:`Selecciona una sesión o crea una para empezar.`,working:`El agente está trabajando…`,composerLabel:`Mensaje al motor`,composerPlaceholder:`Pide al motor que haga algo…`,send:`Enviar`,stop:`Detener`,deleteSession:`Eliminar sesión`,unknownTime:`Hora desconocida`,disabledTitle:`El motor Cordis está desactivado`,disabledHint:`Un administrador puede activarlo en Gestión de usuarios → Acceso y políticas.`,unavailableTitle:`El motor Cordis no pudo iniciarse`,role:{user:`Tú`,assistant:`Motor`,system:`Sistema`,tool:`Herramienta`,unknown:`Mensaje`},turnFailed:`El motor no pudo completar el turno`,permissions:`Permisos`,readOnly:`Solo lectura`,workspaceWrite:`Escritura en el espacio de trabajo`,context:`Contexto de la sesión`,permissionHint:`Solo lectura permite inspeccionar archivos. La escritura permite editar dentro del espacio de trabajo de esta sesión.`}};export{e as default};
|