mulmoclaude 0.3.0 → 0.5.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/bin/mulmoclaude.js +7 -24
- package/client/assets/html2canvas-Cx501zZr-DiKaqnKs.js +5 -0
- package/client/assets/{index-eHWB79u5.js → index-C94GcmNa.js} +203 -198
- package/client/assets/index-CY-WpQUm.css +2 -0
- package/client/assets/{index.es-D4YyL_Dg-BfRHLTZV.js → index.es-D4YyL_Dg-5ipqh8Pe.js} +5 -5
- package/client/assets/material-symbols-outlined-NzYEeyps.woff2 +0 -0
- package/client/index.html +2 -4
- package/package.json +17 -15
- package/server/agent/attachmentConverter.ts +2 -2
- package/server/agent/backend/claude-code.ts +170 -0
- package/server/agent/backend/index.ts +14 -0
- package/server/agent/backend/types.ts +65 -0
- package/server/agent/index.ts +31 -159
- package/server/agent/mcp-server.ts +88 -10
- package/server/agent/mcp-tools/index.ts +8 -7
- package/server/agent/mcp-tools/notify.ts +76 -0
- package/server/agent/mcp-tools/x.ts +12 -2
- package/server/agent/plugin-names.ts +10 -4
- package/server/agent/prompt.ts +187 -26
- package/server/agent/resumeFailover.ts +5 -5
- package/server/agent/sandboxMounts.ts +3 -3
- package/server/api/auth/bearerAuth.ts +3 -3
- package/server/api/auth/token.ts +2 -2
- package/server/api/routes/agent.ts +99 -4
- package/server/api/routes/chart.ts +13 -0
- package/server/api/routes/chat-index.ts +2 -1
- package/server/api/routes/config.ts +35 -8
- package/server/api/routes/files.ts +75 -24
- package/server/api/routes/html.ts +15 -2
- package/server/api/routes/image.ts +75 -20
- package/server/api/routes/mulmo-script.ts +33 -31
- package/server/api/routes/news.ts +146 -0
- package/server/api/routes/notifications.ts +58 -2
- package/server/api/routes/pdf.ts +2 -2
- package/server/api/routes/plugins.ts +73 -91
- package/server/api/routes/presentHtml.ts +9 -0
- package/server/api/routes/roles.ts +12 -2
- package/server/api/routes/scheduler.ts +20 -11
- package/server/api/routes/schedulerTasks.ts +58 -21
- package/server/api/routes/sessions.ts +15 -4
- package/server/api/routes/sessionsCursor.ts +4 -4
- package/server/api/routes/skills.ts +26 -5
- package/server/api/routes/sources.ts +8 -7
- package/server/api/routes/todos.ts +30 -0
- package/server/api/routes/todosColumnsHandlers.ts +13 -27
- package/server/api/routes/todosHandlers.ts +1 -1
- package/server/api/routes/todosItemsHandlers.ts +14 -14
- package/server/api/routes/wiki/frontmatter.ts +86 -0
- package/server/api/routes/wiki.ts +335 -75
- package/server/api/sandboxStatus.ts +1 -1
- package/server/events/notifications.ts +32 -8
- package/server/events/pub-sub/index.ts +3 -3
- package/server/events/relay-client.ts +26 -16
- package/server/events/resolveRelayBridgeOptions.ts +125 -0
- package/server/index.ts +72 -49
- package/server/system/config.ts +5 -5
- package/server/system/credentials.ts +7 -5
- package/server/system/env.ts +15 -5
- package/server/system/macosNotify.ts +152 -0
- package/server/utils/errors.ts +11 -2
- package/server/utils/fetch.ts +54 -0
- package/server/utils/files/atomic.ts +18 -17
- package/server/utils/files/image-store.ts +19 -13
- package/server/utils/files/journal-io.ts +2 -2
- package/server/utils/files/json.ts +5 -5
- package/server/utils/files/markdown-image-fill.ts +131 -0
- package/server/utils/files/markdown-store.ts +22 -6
- package/server/utils/files/naming.ts +20 -10
- package/server/utils/files/reference-dirs-io.ts +3 -3
- package/server/utils/files/roles-io.ts +4 -4
- package/server/utils/files/safe.ts +14 -14
- package/server/utils/files/scheduler-overrides-io.ts +2 -2
- package/server/utils/files/spreadsheet-store.ts +15 -10
- package/server/utils/files/workspace-io.ts +12 -12
- package/server/utils/gemini.ts +30 -4
- package/server/utils/gitignore.ts +9 -9
- package/server/utils/id.ts +40 -8
- package/server/utils/json.ts +5 -5
- package/server/utils/logBackgroundError.ts +12 -3
- package/server/utils/logPreview.ts +24 -0
- package/server/utils/markdown.ts +5 -5
- package/server/utils/port.d.mts +6 -0
- package/server/utils/port.mjs +48 -0
- package/server/utils/promptMeta.ts +32 -0
- package/server/utils/request.ts +12 -6
- package/server/utils/slug.ts +65 -4
- package/server/utils/spawn.ts +1 -1
- package/server/utils/types.ts +2 -2
- package/server/workspace/chat-index/index.ts +1 -1
- package/server/workspace/chat-index/summarizer.ts +5 -5
- package/server/workspace/custom-dirs.ts +5 -5
- package/server/workspace/helps/gemini.md +57 -0
- package/server/workspace/helps/index.md +2 -1
- package/server/workspace/helps/sources.md +42 -0
- package/server/workspace/helps/wiki.md +40 -5
- package/server/workspace/journal/archivist-cli.ts +121 -0
- package/server/workspace/journal/{archivist.ts → archivist-schemas.ts} +12 -120
- package/server/workspace/journal/dailyPass.ts +78 -38
- package/server/workspace/journal/diff.ts +2 -2
- package/server/workspace/journal/index.ts +56 -5
- package/server/workspace/journal/memoryExtractor.ts +1 -1
- package/server/workspace/journal/optimizationPass.ts +4 -5
- package/server/workspace/journal/paths.ts +8 -24
- package/server/workspace/journal/state.ts +18 -8
- package/server/workspace/news/reader.ts +248 -0
- package/server/workspace/paths.ts +4 -3
- package/server/workspace/reference-dirs.ts +3 -3
- package/server/workspace/skills/parser.ts +6 -6
- package/server/workspace/skills/scheduler.ts +5 -4
- package/server/workspace/skills/user-tasks.ts +3 -2
- package/server/workspace/skills/writer.ts +3 -3
- package/server/workspace/sources/arxivDiscovery.ts +2 -2
- package/server/workspace/sources/classifier.ts +1 -1
- package/server/workspace/sources/fetchers/rss.ts +5 -5
- package/server/workspace/sources/fetchers/rssParser.ts +4 -4
- package/server/workspace/sources/interests.ts +3 -3
- package/server/workspace/sources/paths.ts +6 -6
- package/server/workspace/sources/pipeline/fetch.ts +59 -13
- package/server/workspace/sources/pipeline/index.ts +59 -7
- package/server/workspace/sources/pipeline/notify.ts +13 -5
- package/server/workspace/sources/pipeline/plan.ts +11 -9
- package/server/workspace/sources/pipeline/summarize.ts +1 -1
- package/server/workspace/sources/pipeline/write.ts +5 -5
- package/server/workspace/sources/rateLimiter.ts +1 -1
- package/server/workspace/sources/sourceState.ts +9 -4
- package/server/workspace/sources/types.ts +9 -0
- package/server/workspace/sources/urls.ts +1 -1
- package/server/workspace/tool-trace/classify.ts +4 -4
- package/server/workspace/workspace.ts +7 -7
- package/src/App.vue +477 -251
- package/src/components/CanvasViewToggle.vue +12 -10
- package/src/components/ChatInput.vue +112 -105
- package/src/components/FileContentHeader.vue +10 -7
- package/src/components/FileContentRenderer.vue +37 -10
- package/src/components/FileTree.vue +34 -4
- package/src/components/FileTreePane.vue +32 -27
- package/src/components/FilesView.vue +5 -3
- package/src/components/FilterChip.vue +22 -0
- package/src/components/LockStatusPopup.vue +19 -13
- package/src/components/NewsView.vue +252 -0
- package/src/components/NotificationBell.vue +35 -9
- package/src/components/NotificationToast.vue +4 -1
- package/src/components/PageChatComposer.vue +101 -0
- package/src/components/PluginLauncher.vue +36 -62
- package/src/components/RightSidebar.vue +13 -10
- package/src/components/RoleSelector.vue +3 -2
- package/src/components/SessionHeaderControls.vue +63 -0
- package/src/components/SessionHistoryExpandButton.vue +30 -0
- package/src/components/SessionHistoryPanel.vue +64 -93
- package/src/components/SessionHistoryToggleButton.vue +40 -0
- package/src/components/SessionRoleIcon.vue +72 -0
- package/src/components/SessionSidebar.vue +96 -0
- package/src/components/SessionTabBar.vue +44 -51
- package/src/components/SettingsMcpTab.vue +361 -52
- package/src/components/SettingsModal.vue +203 -72
- package/src/components/SettingsReferenceDirsTab.vue +72 -51
- package/src/components/SettingsWorkspaceDirsTab.vue +74 -51
- package/src/components/SidebarHeader.vue +50 -16
- package/src/components/SourcesManager.vue +900 -0
- package/src/components/SourcesView.vue +45 -0
- package/src/components/StackView.vue +84 -48
- package/src/components/SuggestionsPanel.vue +25 -36
- package/src/components/SystemFileBanner.vue +106 -0
- package/src/components/ThinkingIndicator.vue +41 -0
- package/src/components/TodoExplorer.vue +72 -22
- package/src/components/todo/TodoAddDialog.vue +17 -12
- package/src/components/todo/TodoEditDialog.vue +7 -2
- package/src/components/todo/TodoEditPanel.vue +15 -10
- package/src/components/todo/TodoKanbanView.vue +16 -6
- package/src/components/todo/TodoListView.vue +14 -3
- package/src/components/todo/TodoTableView.vue +36 -5
- package/src/composables/favicon/conditions.ts +76 -0
- package/src/composables/favicon/resolveColor.ts +93 -0
- package/src/composables/favicon/types.ts +61 -0
- package/src/composables/useAppApi.ts +23 -0
- package/src/composables/useChatScroll.ts +5 -5
- package/src/composables/useCurrentRole.ts +32 -0
- package/src/composables/useDynamicFavicon.ts +174 -58
- package/src/composables/useEventListeners.ts +7 -12
- package/src/composables/useFaviconState.ts +93 -12
- package/src/composables/useFileSelection.ts +25 -6
- package/src/composables/useHealth.ts +76 -7
- package/src/composables/useLayoutMode.ts +27 -0
- package/src/composables/useNewsItems.ts +38 -0
- package/src/composables/useNewsReadState.ts +75 -0
- package/src/composables/useNotifications.ts +76 -13
- package/src/composables/usePendingCalls.ts +11 -1
- package/src/composables/useRoles.ts +6 -10
- package/src/composables/useRunElapsed.ts +80 -0
- package/src/composables/useSessionDerived.ts +21 -5
- package/src/composables/useSessionHistory.ts +7 -17
- package/src/composables/useSidePanelVisible.ts +25 -0
- package/src/composables/useViewLayout.ts +16 -37
- package/src/config/apiRoutes.ts +19 -6
- package/src/config/historyFilters.ts +30 -0
- package/src/config/mcpCatalog.ts +285 -0
- package/src/config/mcpTypes.ts +26 -0
- package/src/config/roles.ts +19 -51
- package/src/config/systemFileDescriptors.ts +170 -0
- package/src/config/toolNames.ts +6 -1
- package/src/config/workspacePaths.ts +1 -0
- package/src/index.css +14 -0
- package/src/lang/de.ts +706 -0
- package/src/lang/en.ts +726 -0
- package/src/lang/es.ts +712 -0
- package/src/lang/fr.ts +704 -0
- package/src/lang/ja.ts +707 -0
- package/src/lang/ko.ts +709 -0
- package/src/lang/pt-BR.ts +702 -0
- package/src/lang/zh.ts +705 -0
- package/src/lib/vue-i18n.ts +97 -0
- package/src/main.ts +3 -0
- package/src/plugins/canvas/View.vue +104 -186
- package/src/plugins/canvas/definition.ts +0 -8
- package/src/plugins/canvas/index.ts +3 -2
- package/src/plugins/chart/Preview.vue +1 -1
- package/src/plugins/chart/View.vue +9 -4
- package/src/plugins/chart/index.ts +3 -2
- package/src/plugins/editImage/index.ts +3 -2
- package/src/plugins/generateImage/index.ts +3 -2
- package/src/plugins/manageRoles/Preview.vue +4 -1
- package/src/plugins/manageRoles/View.vue +67 -46
- package/src/plugins/manageRoles/index.ts +3 -2
- package/src/plugins/manageSkills/Preview.vue +8 -3
- package/src/plugins/manageSkills/View.vue +39 -34
- package/src/plugins/manageSkills/index.ts +3 -2
- package/src/plugins/manageSource/Preview.vue +1 -1
- package/src/plugins/manageSource/View.vue +3 -687
- package/src/plugins/manageSource/index.ts +3 -2
- package/src/plugins/markdown/Preview.vue +1 -1
- package/src/plugins/markdown/View.vue +164 -73
- package/src/plugins/markdown/definition.ts +6 -4
- package/src/plugins/markdown/index.ts +3 -2
- package/src/plugins/presentForm/Preview.vue +99 -0
- package/src/plugins/presentForm/View.vue +675 -0
- package/src/plugins/presentForm/definition.ts +127 -0
- package/src/plugins/presentForm/index.ts +18 -0
- package/src/plugins/presentForm/plugin.ts +94 -0
- package/src/plugins/presentForm/types.ts +109 -0
- package/src/plugins/presentHtml/Preview.vue +1 -1
- package/src/plugins/presentHtml/View.vue +7 -4
- package/src/plugins/presentHtml/index.ts +3 -2
- package/src/plugins/presentMulmoScript/Preview.vue +1 -1
- package/src/plugins/presentMulmoScript/View.vue +36 -26
- package/src/plugins/presentMulmoScript/index.ts +3 -2
- package/src/plugins/scheduler/AutomationsPreview.vue +37 -0
- package/src/plugins/scheduler/AutomationsView.vue +23 -0
- package/src/plugins/scheduler/CalendarView.vue +23 -0
- package/src/plugins/scheduler/LegacySchedulerView.vue +32 -0
- package/src/plugins/scheduler/Preview.vue +7 -4
- package/src/plugins/scheduler/TasksTab.vue +119 -28
- package/src/plugins/scheduler/View.vue +75 -32
- package/src/plugins/scheduler/automationsDefinition.ts +58 -0
- package/src/plugins/scheduler/calendarDefinition.ts +46 -0
- package/src/plugins/scheduler/formatSchedule.ts +93 -0
- package/src/plugins/scheduler/index.ts +68 -14
- package/src/plugins/scheduler/legacyShape.ts +34 -0
- package/src/plugins/spreadsheet/Preview.vue +9 -5
- package/src/plugins/spreadsheet/View.vue +43 -57
- package/src/plugins/spreadsheet/engine/responseDecoder.ts +2 -1
- package/src/plugins/spreadsheet/index.ts +3 -2
- package/src/plugins/textResponse/Preview.vue +15 -58
- package/src/plugins/textResponse/View.vue +42 -45
- package/src/plugins/textResponse/utils.ts +25 -0
- package/src/plugins/todo/Preview.vue +11 -6
- package/src/plugins/todo/View.vue +27 -13
- package/src/plugins/todo/composables/useTodos.ts +3 -1
- package/src/plugins/todo/index.ts +3 -2
- package/src/plugins/ui-image/ImagePreview.vue +6 -3
- package/src/plugins/ui-image/ImageView.vue +7 -4
- package/src/plugins/wiki/Preview.vue +5 -2
- package/src/plugins/wiki/View.vue +539 -92
- package/src/plugins/wiki/index.ts +5 -2
- package/src/plugins/wiki/route.ts +121 -0
- package/src/router/guards.ts +43 -24
- package/src/router/index.ts +53 -26
- package/src/router/pageRoutes.ts +23 -0
- package/src/tools/index.ts +12 -5
- package/src/tools/legacyPluginNames.ts +13 -0
- package/src/types/notification.ts +31 -6
- package/src/types/vue-i18n.d.ts +20 -0
- package/src/utils/agent/eventDispatch.ts +3 -6
- package/src/utils/agent/formatElapsed.ts +37 -0
- package/src/utils/agent/request.ts +22 -1
- package/src/utils/canvas/layoutMode.ts +26 -0
- package/src/utils/canvas/sidePanelVisible.ts +19 -0
- package/src/utils/dom/scrollIntoViewByTestId.ts +38 -0
- package/src/utils/errors.ts +9 -2
- package/src/utils/files/filename.ts +24 -0
- package/src/utils/filesPreview/schedulerPreview.ts +9 -3
- package/src/utils/id.ts +18 -0
- package/src/utils/image/cacheBust.ts +16 -0
- package/src/utils/image/resolve.ts +16 -0
- package/src/utils/markdown/taskList.ts +175 -0
- package/src/utils/mcp/interpolateSpec.ts +97 -0
- package/src/utils/notification/dispatch.ts +51 -15
- package/src/utils/path/workspaceLinkRouter.ts +99 -0
- package/src/utils/session/mergeSessions.ts +5 -0
- package/src/utils/sources/filter.ts +69 -0
- package/src/vite-env.d.ts +9 -0
- package/client/assets/chunk-vKJrgz-R-C_I3GbVV.js +0 -1
- package/client/assets/html2canvas-Cx501zZr-BF5dYYkY.js +0 -5
- package/client/assets/index-Bm70FDU2.css +0 -1
- package/client/assets/typeof-DBp4T-Ny-BC0P-2DM.js +0 -1
- package/server/workspace/journal/linkRewrite.ts +0 -4
- package/src/components/ToolResultsPanel.vue +0 -77
- package/src/composables/useCanvasViewMode.ts +0 -121
- package/src/plugins/scheduler/definition.ts +0 -57
- package/src/utils/canvas/viewMode.ts +0 -46
- package/src/utils/role/plugins.ts +0 -12
- package/src/utils/session/seedRoleDefault.ts +0 -35
- /package/client/assets/{purify.es-Fx1Nqyry-PeS5RUhs.js → purify.es-Fx1Nqyry-BwJECkqS.js} +0 -0
package/src/lang/es.ts
ADDED
|
@@ -0,0 +1,712 @@
|
|
|
1
|
+
// Spanish dictionary. Mirror the shape of src/lang/en.ts —
|
|
2
|
+
// missing keys fall back to English per createI18n's fallbackLocale.
|
|
3
|
+
//
|
|
4
|
+
// ⚠️ Las cadenas que contienen ángulos (p.ej. `<name>`) activan la
|
|
5
|
+
// heurística XSS de vue-i18n y generan el aviso
|
|
6
|
+
// "Detected HTML in '…' message". Usa siempre la **forma función**
|
|
7
|
+
// en esos casos. Ver la cabecera de en.ts para más detalle.
|
|
8
|
+
|
|
9
|
+
const esMessages = {
|
|
10
|
+
common: {
|
|
11
|
+
save: "Guardar",
|
|
12
|
+
cancel: "Cancelar",
|
|
13
|
+
loading: "Cargando...",
|
|
14
|
+
close: "Cerrar",
|
|
15
|
+
dismiss: "Descartar",
|
|
16
|
+
add: "Añadir",
|
|
17
|
+
remove: "Quitar",
|
|
18
|
+
saving: "Guardando...",
|
|
19
|
+
saved: "Guardado",
|
|
20
|
+
noResultsYet: "Aún no hay resultados",
|
|
21
|
+
noImageYet: "Aún no hay imagen",
|
|
22
|
+
sendChat: "Iniciar un chat nuevo",
|
|
23
|
+
},
|
|
24
|
+
sessionTabBar: {
|
|
25
|
+
newSession: "Nueva sesión",
|
|
26
|
+
activeSessions: "{count} sesión activa (agente en ejecución) | {count} sesiones activas (agente en ejecución)",
|
|
27
|
+
unreadReplies: "{count} respuesta sin leer | {count} respuestas sin leer",
|
|
28
|
+
unreadDot: "Nueva respuesta",
|
|
29
|
+
origin: {
|
|
30
|
+
scheduler: "Iniciada por el programador",
|
|
31
|
+
skill: "Iniciada por una skill",
|
|
32
|
+
bridge: "Iniciada por un bridge",
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
chatInput: {
|
|
36
|
+
placeholder: "Escribe una tarea, o arrastra / pega / adjunta un archivo…",
|
|
37
|
+
send: "Enviar",
|
|
38
|
+
attachFile: "Adjuntar archivo",
|
|
39
|
+
fileTooLarge: "El archivo es demasiado grande ({sizeMB} MB). El máximo es 30 MB.",
|
|
40
|
+
unsupportedFileType: "Tipo de archivo no admitido. Se aceptan: imágenes, PDF, DOCX, XLSX, PPTX y archivos de texto.",
|
|
41
|
+
},
|
|
42
|
+
sessionHistoryPanel: {
|
|
43
|
+
filters: {
|
|
44
|
+
all: "Todas",
|
|
45
|
+
unread: "No leídas",
|
|
46
|
+
human: "Persona",
|
|
47
|
+
scheduler: "Programador",
|
|
48
|
+
skill: "Skill",
|
|
49
|
+
bridge: "Bridge",
|
|
50
|
+
},
|
|
51
|
+
failedToRefresh: "⚠ Error al actualizar: {error}",
|
|
52
|
+
showingLastKnown: " — mostrando la última lista conocida.",
|
|
53
|
+
noSessions: "Aún no hay sesiones.",
|
|
54
|
+
noMatching: "No hay sesiones coincidentes.",
|
|
55
|
+
running: "En ejecución",
|
|
56
|
+
noMessages: "(sin mensajes)",
|
|
57
|
+
openRowAria: "Abrir sesión: {preview}",
|
|
58
|
+
},
|
|
59
|
+
notificationBell: {
|
|
60
|
+
notifications: "Notificaciones",
|
|
61
|
+
markAllRead: "Marcar todo como leído",
|
|
62
|
+
noNotifications: "No hay notificaciones",
|
|
63
|
+
dismiss: "Descartar",
|
|
64
|
+
},
|
|
65
|
+
sidebarHeader: {
|
|
66
|
+
home: "Ir al chat más reciente",
|
|
67
|
+
toolCallHistory: "Historial de llamadas a herramientas",
|
|
68
|
+
settings: "Ajustes",
|
|
69
|
+
settingsGeminiMissing: "Ajustes — Falta la clave API de Gemini",
|
|
70
|
+
},
|
|
71
|
+
rightSidebar: {
|
|
72
|
+
toggleSystemPrompt: "Alternar system prompt",
|
|
73
|
+
systemPrompt: "System Prompt",
|
|
74
|
+
availableTools: "Herramientas disponibles",
|
|
75
|
+
toggleToolDescription: "Alternar descripción de la herramienta",
|
|
76
|
+
toolCallHistory: "Historial de llamadas a herramientas",
|
|
77
|
+
noToolCalls: "Aún no hay llamadas a herramientas",
|
|
78
|
+
arguments: "Argumentos",
|
|
79
|
+
error: "Error",
|
|
80
|
+
result: "Resultado",
|
|
81
|
+
running: "Ejecutando...",
|
|
82
|
+
},
|
|
83
|
+
fileTreePane: {
|
|
84
|
+
sort: "Orden:",
|
|
85
|
+
sortByName: "Ordenar por nombre",
|
|
86
|
+
name: "Nombre",
|
|
87
|
+
sortByRecent: "Ordenar por fecha de modificación (más recientes primero)",
|
|
88
|
+
recent: "Reciente",
|
|
89
|
+
reference: "Referencia",
|
|
90
|
+
// "RO" = Read-Only. Se mantiene la abreviatura en inglés para
|
|
91
|
+
// renderizarse como una insignia compacta junto al label Referencia.
|
|
92
|
+
readOnlyBadge: "RO",
|
|
93
|
+
},
|
|
94
|
+
fileTree: {
|
|
95
|
+
workspace: "(área de trabajo)",
|
|
96
|
+
recentlyChanged: "Modificados recientemente",
|
|
97
|
+
},
|
|
98
|
+
lockStatusPopup: {
|
|
99
|
+
sandboxEnabledTooltip: "Sandbox activado (Docker)",
|
|
100
|
+
noSandboxTooltip: "Sin sandbox (Docker no encontrado)",
|
|
101
|
+
sandboxEnabledLabel: "Sandbox activado:",
|
|
102
|
+
sandboxEnabledBody: "Docker está en ejecución. El acceso al sistema de archivos está aislado.",
|
|
103
|
+
noSandboxLabel: "Sin sandbox:",
|
|
104
|
+
noSandboxBodyPrefix: "Claude puede acceder a todos los archivos del equipo. Instala",
|
|
105
|
+
noSandboxBodySuffix: "para activar el aislamiento del sistema de archivos.",
|
|
106
|
+
dockerDesktop: "Docker Desktop",
|
|
107
|
+
hostCredentials: "Credenciales del host adjuntas:",
|
|
108
|
+
credsLoading: "cargando…",
|
|
109
|
+
sshAgent: "Agente SSH:",
|
|
110
|
+
forwarded: "reenviado",
|
|
111
|
+
notForwarded: "no reenviado",
|
|
112
|
+
mountedConfigs: "Configuraciones montadas:",
|
|
113
|
+
none: "ninguna",
|
|
114
|
+
testIsolation: "Probar el aislamiento del sandbox:",
|
|
115
|
+
},
|
|
116
|
+
settingsModal: {
|
|
117
|
+
title: "Ajustes",
|
|
118
|
+
tabs: {
|
|
119
|
+
gemini: "Clave API de Gemini",
|
|
120
|
+
tools: "Herramientas permitidas",
|
|
121
|
+
mcp: "Servidores MCP",
|
|
122
|
+
dirs: "Directorios",
|
|
123
|
+
refs: "Directorios de referencia",
|
|
124
|
+
},
|
|
125
|
+
// Slots `<i18n-t>` — los nombres `envKey` / `envFile` se renderizan
|
|
126
|
+
// como `<code>` en línea en SettingsModal.vue, por lo que los
|
|
127
|
+
// literales de variable y nombre de archivo se mantienen sin
|
|
128
|
+
// traducir.
|
|
129
|
+
geminiRequired: "La generación de imágenes requiere {envKey}. Añádelo a {envFile} y reinicia la app.",
|
|
130
|
+
geminiAskButton: "Preguntar a Claude",
|
|
131
|
+
geminiAskMessage: "¿Cuál es el rol de la clave API de Gemini en esta app?",
|
|
132
|
+
toolNamesLabel: "Nombres de herramientas",
|
|
133
|
+
invalidToolNamesPrefix: "Estas parecen no estándar (prefijo esperado",
|
|
134
|
+
invalidToolNamesSuffix: "):",
|
|
135
|
+
mcpToolsError: "⚠ No se pudo obtener el estado de las herramientas MCP: {error}. Mostrando todas las herramientas sin importar si están habilitadas.",
|
|
136
|
+
changesHint: "Los cambios se aplican en el siguiente mensaje. No hace falta reiniciar.",
|
|
137
|
+
cannotSaveTooltip: "No se puede guardar hasta que los ajustes se carguen correctamente",
|
|
138
|
+
saving: "Guardando…",
|
|
139
|
+
loadingLabel: "Cargando…",
|
|
140
|
+
unsavedMarker: "●",
|
|
141
|
+
unsavedToolsConfirm: "Allowed Tools tiene cambios sin guardar. ¿Cerrar de todos modos?",
|
|
142
|
+
unsavedMcpDraftConfirm: "Hay un borrador de servidor MCP abierto. ¿Cerrar de todos modos?",
|
|
143
|
+
mcpSaveFailed: "No se pudieron guardar los cambios de los servidores MCP.",
|
|
144
|
+
},
|
|
145
|
+
canvasViewToggle: {
|
|
146
|
+
stackViewTooltip: "Vista apilada · haz clic para cambiar a vista única",
|
|
147
|
+
singleViewTooltip: "Vista única · haz clic para cambiar a vista apilada",
|
|
148
|
+
switchToSingle: "Cambiar a vista única",
|
|
149
|
+
switchToStack: "Cambiar a vista apilada",
|
|
150
|
+
},
|
|
151
|
+
sessionHistoryToggle: {
|
|
152
|
+
showTooltip: "Mostrar el panel de historial de sesiones a la izquierda",
|
|
153
|
+
hideTooltip: "Ocultar el panel de historial de sesiones",
|
|
154
|
+
show: "Mostrar historial de sesiones",
|
|
155
|
+
hide: "Ocultar historial de sesiones",
|
|
156
|
+
},
|
|
157
|
+
sessionHistoryExpand: {
|
|
158
|
+
expandTooltip: "Expandir el panel de historial de sesiones a ancho completo",
|
|
159
|
+
collapseTooltip: "Contraer el panel de historial de sesiones",
|
|
160
|
+
expand: "Expandir historial de sesiones",
|
|
161
|
+
collapse: "Contraer historial de sesiones",
|
|
162
|
+
},
|
|
163
|
+
settingsWorkspaceDirs: {
|
|
164
|
+
explanation:
|
|
165
|
+
"Directorios personalizados para organizar archivos dentro de {dataDir} y {artifactsDir}. Claude los utiliza para decidir dónde guardar los archivos.",
|
|
166
|
+
noEntries: "No hay directorios personalizados configurados.",
|
|
167
|
+
addDirTitle: "Añadir directorio",
|
|
168
|
+
pathPlaceholder: "data/clientes o artifacts/informes",
|
|
169
|
+
descPlaceholder: "Descripción (qué va en esta carpeta)",
|
|
170
|
+
errPathRequired: "La ruta es obligatoria",
|
|
171
|
+
errMustStartWith: "Debe comenzar con data/ o artifacts/",
|
|
172
|
+
errAlreadyExists: "Ya existe",
|
|
173
|
+
},
|
|
174
|
+
settingsReferenceDirs: {
|
|
175
|
+
explanation:
|
|
176
|
+
"Directorios externos que Claude puede leer pero no modificar. En modo Docker se montan como solo lectura. Útiles para consultar bóvedas de Obsidian, código de proyectos o carpetas de documentos.",
|
|
177
|
+
noEntries: "No hay directorios de referencia configurados.",
|
|
178
|
+
addDirTitle: "Añadir directorio de referencia",
|
|
179
|
+
pathPlaceholder: "/Users/yo/ObsidianVault o ~/Documentos/notas",
|
|
180
|
+
labelPlaceholder: "Etiqueta (opcional — por defecto el nombre de la carpeta)",
|
|
181
|
+
readOnlyBadge: "solo lectura",
|
|
182
|
+
errPathRequired: "La ruta es obligatoria",
|
|
183
|
+
errMustBeAbsolute: "Debe ser una ruta absoluta o comenzar con ~/",
|
|
184
|
+
errAlreadyExists: "Ya existe",
|
|
185
|
+
errLabelConflict: 'La etiqueta "{label}" ya existe',
|
|
186
|
+
},
|
|
187
|
+
pluginLauncher: {
|
|
188
|
+
todos: { label: "Tareas", title: "Abrir tareas" },
|
|
189
|
+
calendar: { label: "Calendario", title: "Abrir calendario" },
|
|
190
|
+
automations: { label: "Acciones", title: "Abrir acciones" },
|
|
191
|
+
wiki: { label: "Wiki", title: "Abrir wiki" },
|
|
192
|
+
sources: { label: "Fuentes", title: "Abrir fuentes de información" },
|
|
193
|
+
news: { label: "Noticias", title: "Abrir el lector de noticias" },
|
|
194
|
+
skills: { label: "Skills", title: "Abrir skills" },
|
|
195
|
+
roles: { label: "Roles", title: "Abrir roles" },
|
|
196
|
+
files: { label: "Archivos", title: "Abrir archivos del área de trabajo" },
|
|
197
|
+
},
|
|
198
|
+
fileContentHeader: {
|
|
199
|
+
showRendered: "Mostrar Markdown renderizado",
|
|
200
|
+
showRaw: "Mostrar código fuente",
|
|
201
|
+
rendered: "Renderizado",
|
|
202
|
+
raw: "Fuente",
|
|
203
|
+
closeFile: "Cerrar archivo",
|
|
204
|
+
},
|
|
205
|
+
fileContentRenderer: {
|
|
206
|
+
selectFile: "Selecciona un archivo",
|
|
207
|
+
htmlPreview: "Vista previa HTML",
|
|
208
|
+
pdfPreview: "Vista previa PDF",
|
|
209
|
+
parseError: "error al analizar",
|
|
210
|
+
},
|
|
211
|
+
settingsMcpTab: {
|
|
212
|
+
explanation:
|
|
213
|
+
"Añade servidores MCP externos. Los servidores HTTP funcionan en todos los modos. Los servidores Stdio usan el {npx} / {node} / {tsx} de la imagen del sandbox; cuando Docker está activo las rutas deben estar dentro del área de trabajo.",
|
|
214
|
+
localhostRewrite: "En modo Docker {localhost} se reescribe como {hostDockerInternal}.",
|
|
215
|
+
noServers: "Aún no hay servidores MCP configurados.",
|
|
216
|
+
enabled: "activado",
|
|
217
|
+
urlLabel: "URL:",
|
|
218
|
+
commandLabel: "Comando:",
|
|
219
|
+
dockerNonWorkspaceWarning: "⚠ Contiene rutas fuera del área de trabajo — no se resolverán dentro de Docker.",
|
|
220
|
+
addServerButton: "+ Añadir servidor MCP",
|
|
221
|
+
nameLabel: "Nombre",
|
|
222
|
+
namePlaceholder: "mi-servidor",
|
|
223
|
+
typeHttp: "HTTP",
|
|
224
|
+
typeStdio: "Stdio (comando)",
|
|
225
|
+
urlFieldLabel: "URL",
|
|
226
|
+
urlPlaceholder: "https://example.com/mcp",
|
|
227
|
+
commandFieldLabel: "Comando",
|
|
228
|
+
argsLabel: "Argumentos (uno por línea)",
|
|
229
|
+
// Forma de función de mensaje — evita el compilador de mensajes de
|
|
230
|
+
// vue-i18n para que `@` literal no se interprete como referencia a
|
|
231
|
+
// un mensaje enlazado.
|
|
232
|
+
argsPlaceholder: () => "-y\n@modelcontextprotocol/server-filesystem\n/workspace/path",
|
|
233
|
+
errNoName: "Indica un Nombre, o introduce una URL / argumentos de los que podamos deducirlo.",
|
|
234
|
+
errBadName: "El nombre debe comenzar con una letra minúscula y contener solo [a-z0-9_-].",
|
|
235
|
+
errIdExists: 'El id de servidor "{id}" ya existe.',
|
|
236
|
+
errBadHttpUrl: "La URL HTTP debe comenzar con http:// o https://",
|
|
237
|
+
pendingEntryWarning: "Finaliza o cancela primero la entrada de servidor MCP pendiente.",
|
|
238
|
+
customHeading: "Servidores personalizados",
|
|
239
|
+
catalog: {
|
|
240
|
+
heading: "Servidores MCP preconfigurados",
|
|
241
|
+
audience: { general: "🟢 General", developer: "🔵 Desarrollador" },
|
|
242
|
+
risk: { low: "bajo", medium: "medio", high: "alto" },
|
|
243
|
+
upstream: "📦 Fuente",
|
|
244
|
+
setupGuide: "📚 Configuración",
|
|
245
|
+
entry: {
|
|
246
|
+
memory: {
|
|
247
|
+
displayName: "Memoria",
|
|
248
|
+
description: "Permite que Claude recuerde el contexto entre sesiones.",
|
|
249
|
+
},
|
|
250
|
+
sequentialThinking: {
|
|
251
|
+
displayName: "Pensamiento secuencial",
|
|
252
|
+
description: "Ayuda a Claude a abordar problemas complejos paso a paso.",
|
|
253
|
+
},
|
|
254
|
+
context7: {
|
|
255
|
+
displayName: "Context7 (documentación de librerías)",
|
|
256
|
+
description: "Documentación al día de librerías populares — supera el corte de entrenamiento del modelo.",
|
|
257
|
+
},
|
|
258
|
+
deepwiki: {
|
|
259
|
+
displayName: "DeepWiki (wiki de repos de GitHub)",
|
|
260
|
+
description: "Pregunta sobre cualquier repositorio de GitHub y obtén una respuesta estructurada estilo wiki.",
|
|
261
|
+
},
|
|
262
|
+
notion: {
|
|
263
|
+
displayName: "Notion",
|
|
264
|
+
description: "Lee y escribe en tu workspace de Notion — páginas, bases de datos y búsqueda.",
|
|
265
|
+
field: {
|
|
266
|
+
apiKey: {
|
|
267
|
+
label: "Token de integración de Notion",
|
|
268
|
+
help: "Crea una integración en Notion y copia el Internal Integration Secret. Pulsa 🔑 para abrir la página de integraciones.",
|
|
269
|
+
},
|
|
270
|
+
},
|
|
271
|
+
},
|
|
272
|
+
slack: {
|
|
273
|
+
displayName: "Slack",
|
|
274
|
+
description: "Lista canales, envía mensajes y busca en el historial de tu workspace de Slack.",
|
|
275
|
+
field: {
|
|
276
|
+
botToken: {
|
|
277
|
+
label: "Token de bot",
|
|
278
|
+
help: "App de Slack → OAuth & Permissions → Bot User OAuth Token. Empieza por xoxb-.",
|
|
279
|
+
},
|
|
280
|
+
teamId: {
|
|
281
|
+
label: "ID del equipo / workspace",
|
|
282
|
+
help: "Ejecuta team.info o consulta la URL del workspace — algo como T01ABC23DEF.",
|
|
283
|
+
},
|
|
284
|
+
},
|
|
285
|
+
},
|
|
286
|
+
googleMaps: {
|
|
287
|
+
displayName: "Google Maps",
|
|
288
|
+
description: "Buscar lugares, obtener rutas y consultar detalles de ubicación.",
|
|
289
|
+
field: {
|
|
290
|
+
apiKey: {
|
|
291
|
+
label: "Clave API de Google Maps",
|
|
292
|
+
help: "Google Cloud Console → APIs & Services → Credentials → Crear clave API. Habilita Places + Directions.",
|
|
293
|
+
},
|
|
294
|
+
},
|
|
295
|
+
},
|
|
296
|
+
weatherOpenMeteo: {
|
|
297
|
+
displayName: "Clima (Open-Meteo)",
|
|
298
|
+
description: "Pronósticos meteorológicos gratuitos y condiciones actuales en todo el mundo — sin clave API.",
|
|
299
|
+
},
|
|
300
|
+
},
|
|
301
|
+
config: {
|
|
302
|
+
howToGet: "Cómo obtenerlo",
|
|
303
|
+
install: "Instalar",
|
|
304
|
+
errMissingRequired: "Faltan campos obligatorios: {fields}",
|
|
305
|
+
requiredMarker: "*",
|
|
306
|
+
requiredAria: "obligatorio",
|
|
307
|
+
},
|
|
308
|
+
},
|
|
309
|
+
},
|
|
310
|
+
pluginScheduler: {
|
|
311
|
+
prev: "Anterior",
|
|
312
|
+
today: "Hoy",
|
|
313
|
+
goToday: "Ir a hoy",
|
|
314
|
+
next: "Siguiente",
|
|
315
|
+
deleteItem: "Eliminar elemento",
|
|
316
|
+
closeEditor: "Cerrar editor",
|
|
317
|
+
apiError: "⚠ Error al actualizar el programador: {error}",
|
|
318
|
+
tabCalendar: "Calendario",
|
|
319
|
+
tabTasks: "Tareas",
|
|
320
|
+
heading: "Programador",
|
|
321
|
+
itemCount: "{count} elemento | {count} elementos",
|
|
322
|
+
noScheduled: "No hay elementos programados",
|
|
323
|
+
unscheduled: "Sin programar",
|
|
324
|
+
editItem: "Editar elemento",
|
|
325
|
+
update: "Actualizar",
|
|
326
|
+
editSource: "Editar fuente",
|
|
327
|
+
applyChanges: "Aplicar cambios",
|
|
328
|
+
yamlParseError: "No se pudo analizar el YAML — asegúrate de que 'title' esté presente",
|
|
329
|
+
propLabel: "{key}:",
|
|
330
|
+
moreCount: "+{count} más",
|
|
331
|
+
previewIcon: "📅",
|
|
332
|
+
previewUpcoming: "{count} próximos",
|
|
333
|
+
previewAutomations: "{count} automatización | {count} automatizaciones",
|
|
334
|
+
previewMore: "+ {count} más…",
|
|
335
|
+
},
|
|
336
|
+
pluginSchedulerTasks: {
|
|
337
|
+
recommendedFrequencies: "Frecuencias recomendadas",
|
|
338
|
+
tableTaskType: "Tipo de tarea",
|
|
339
|
+
tableSuggestedSchedule: "Programación sugerida",
|
|
340
|
+
noTasks: "No hay tareas programadas",
|
|
341
|
+
runNow: "Ejecutar ahora",
|
|
342
|
+
enable: "Activar",
|
|
343
|
+
disable: "Desactivar",
|
|
344
|
+
delete: "Eliminar",
|
|
345
|
+
nextRun: "Próxima: {time}",
|
|
346
|
+
originSystem: "Sistema",
|
|
347
|
+
originUser: "Usuario",
|
|
348
|
+
originSkill: "Skill",
|
|
349
|
+
runFailed: "Error al ejecutar: {error}",
|
|
350
|
+
toggleFailed: "Error al alternar: {error}",
|
|
351
|
+
deleteFailed: "Error al eliminar: {error}",
|
|
352
|
+
detailsToggle: "Mostrar detalles",
|
|
353
|
+
promptLabel: "Prompt",
|
|
354
|
+
roleLabel: "Rol",
|
|
355
|
+
},
|
|
356
|
+
pluginCanvas: {
|
|
357
|
+
undo: "Deshacer",
|
|
358
|
+
redo: "Rehacer",
|
|
359
|
+
clear: "Limpiar",
|
|
360
|
+
styleLabel: "Estilo:",
|
|
361
|
+
},
|
|
362
|
+
pluginChart: {
|
|
363
|
+
untitled: "Gráfico",
|
|
364
|
+
chartCount: "{count} gráfico | {count} gráficos",
|
|
365
|
+
chartTitle: "Gráfico {num}",
|
|
366
|
+
png: "PNG",
|
|
367
|
+
},
|
|
368
|
+
pluginTodo: {
|
|
369
|
+
clearFilters: "Borrar todos los filtros",
|
|
370
|
+
deleteItem: "Eliminar elemento",
|
|
371
|
+
apiError: "⚠ Error al actualizar las tareas: {error}",
|
|
372
|
+
loadFailed: "Error al cargar los Todos",
|
|
373
|
+
heading: "Lista de tareas",
|
|
374
|
+
completedRatio: "{done}/{total} completadas",
|
|
375
|
+
filter: "Filtro:",
|
|
376
|
+
noItems: "Aún no hay tareas",
|
|
377
|
+
noMatchingFilter: "Ningún elemento coincide con el filtro activo",
|
|
378
|
+
update: "Actualizar",
|
|
379
|
+
clearCompleted: "Borrar completadas",
|
|
380
|
+
clearButton: "Borrar ✕",
|
|
381
|
+
deleteSymbol: "✕",
|
|
382
|
+
},
|
|
383
|
+
todoExplorer: {
|
|
384
|
+
heading: "Tareas",
|
|
385
|
+
doneRatio: "{done}/{total} hechas",
|
|
386
|
+
addButton: "+ Añadir",
|
|
387
|
+
addColumnButton: "+ Columna",
|
|
388
|
+
labels: "Etiquetas:",
|
|
389
|
+
searchPlaceholder: "Buscar...",
|
|
390
|
+
clearButton: "Borrar ✕",
|
|
391
|
+
clearFiltersTitle: "Borrar filtros de etiqueta",
|
|
392
|
+
emptyHint: 'Aún no hay tareas. Haz clic en "+ Añadir" para crear una.',
|
|
393
|
+
addColumn: "Añadir columna",
|
|
394
|
+
newColumnLabelField: "Etiqueta",
|
|
395
|
+
newColumnPlaceholder: "Revisar",
|
|
396
|
+
noMatchingFilter: "Ningún elemento coincide con el filtro actual",
|
|
397
|
+
},
|
|
398
|
+
todoPreview: {
|
|
399
|
+
completedRatio: "{done}/{total} completadas",
|
|
400
|
+
moreItems: "+ {count} más…",
|
|
401
|
+
headerIcon: "☑",
|
|
402
|
+
doneIcon: "✓",
|
|
403
|
+
pendingIcon: "○",
|
|
404
|
+
moreLabels: "+{count}",
|
|
405
|
+
},
|
|
406
|
+
todoDialogs: {
|
|
407
|
+
addTitle: "Añadir tarea",
|
|
408
|
+
editTitle: "Editar tarea",
|
|
409
|
+
deleteButton: "Eliminar",
|
|
410
|
+
deleteTitle: "Eliminar este elemento",
|
|
411
|
+
noneOption: "— Ninguno —",
|
|
412
|
+
fieldText: "Texto",
|
|
413
|
+
fieldNote: "Nota",
|
|
414
|
+
fieldStatus: "Estado",
|
|
415
|
+
fieldPriority: "Prioridad",
|
|
416
|
+
fieldDueDate: "Fecha límite",
|
|
417
|
+
fieldLabels: "Etiquetas",
|
|
418
|
+
fieldLabelsCommaSeparated: "Etiquetas (separadas por comas)",
|
|
419
|
+
textPlaceholder: "¿Qué hay que hacer?",
|
|
420
|
+
labelsPlaceholder: "trabajo, urgente",
|
|
421
|
+
},
|
|
422
|
+
todoKanban: {
|
|
423
|
+
rename: "Cambiar nombre",
|
|
424
|
+
alreadyDoneColumn: "Columna ya marcada como hecha",
|
|
425
|
+
markAsDoneColumn: "Marcar como columna de hechas",
|
|
426
|
+
deleteColumn: "Eliminar columna",
|
|
427
|
+
columnActions: "Acciones de columna",
|
|
428
|
+
addCard: "+ Añadir tarjeta",
|
|
429
|
+
openCardAria: "Abrir tarea: {task}",
|
|
430
|
+
},
|
|
431
|
+
todoTableList: {
|
|
432
|
+
noMatchingFilter: "Ningún elemento coincide con el filtro actual",
|
|
433
|
+
sortColumnAria: "Ordenar por {column}",
|
|
434
|
+
expandRowAria: "Expandir tarea: {task}",
|
|
435
|
+
},
|
|
436
|
+
pluginWiki: {
|
|
437
|
+
backToIndex: "Volver al índice",
|
|
438
|
+
pdf: "PDF",
|
|
439
|
+
pdfFailed: "⚠ Error de PDF",
|
|
440
|
+
tabIndex: "Índice",
|
|
441
|
+
tabLog: "Registro",
|
|
442
|
+
tabLint: "Lint",
|
|
443
|
+
empty: "El wiki está vacío. Pide al Wiki Manager que ingiera una fuente.",
|
|
444
|
+
previewMore: "+ {count} más…",
|
|
445
|
+
chatPlaceholder: "Pregunta sobre esta página…",
|
|
446
|
+
emptyPage: 'La página "{title}" aún no existe.',
|
|
447
|
+
emptyContent: 'La página "{title}" existe pero no tiene contenido.',
|
|
448
|
+
createPage: "Solicitar la creación de esta página wiki",
|
|
449
|
+
updatePage: "Solicitar la actualización de esta página wiki",
|
|
450
|
+
tagFilterAll: "Todas",
|
|
451
|
+
noMatches: "No hay páginas con la etiqueta #{tag}",
|
|
452
|
+
lintChat: "Revisar mi wiki",
|
|
453
|
+
taskCountMismatch: "La fuente del wiki y la salida renderizada difieren en el número de tareas. Se rechazó el cambio para evitar dañar el archivo.",
|
|
454
|
+
},
|
|
455
|
+
pluginPresentForm: {
|
|
456
|
+
fallbackTitle: "Formulario",
|
|
457
|
+
fieldCount: "{count} campo | {count} campos",
|
|
458
|
+
submitted: "Enviado",
|
|
459
|
+
errorSummary: "Por favor, corrija los siguientes errores",
|
|
460
|
+
requiredMarker: "*",
|
|
461
|
+
selectOption: "Seleccione una opción",
|
|
462
|
+
charactersCount: "{current} / {max} caracteres",
|
|
463
|
+
charactersCountNoMax: "{current} caracteres",
|
|
464
|
+
submit: "Enviar",
|
|
465
|
+
progress: "{filled} de {total} campos obligatorios completados",
|
|
466
|
+
},
|
|
467
|
+
pluginPresentHtml: {
|
|
468
|
+
saveAsPdf: "Guardar como PDF (abre el diálogo de impresión)",
|
|
469
|
+
pdf: "PDF",
|
|
470
|
+
untitled: "Página HTML",
|
|
471
|
+
hideSource: "Ocultar código <>",
|
|
472
|
+
showSource: "Mostrar código <>",
|
|
473
|
+
},
|
|
474
|
+
pluginNews: {
|
|
475
|
+
title: "Noticias",
|
|
476
|
+
itemCount: "{unread} sin leer / {total} en total",
|
|
477
|
+
filterAll: "Todas",
|
|
478
|
+
filterUnread: "Sin leer",
|
|
479
|
+
allSources: "Todas",
|
|
480
|
+
markAllRead: "Marcar todas como leídas",
|
|
481
|
+
selectPrompt: "Selecciona un elemento para leer.",
|
|
482
|
+
empty: "No hay noticias en esta vista.",
|
|
483
|
+
unread: "Sin leer",
|
|
484
|
+
openOriginal: "Abrir original",
|
|
485
|
+
noBody: "Sin cuerpo — abre el artículo original.",
|
|
486
|
+
bodyError: "No se pudo cargar el contenido: {error}",
|
|
487
|
+
loadError: "No se pudieron cargar las noticias: {error}",
|
|
488
|
+
chatPlaceholder: "Pregunta lo que quieras sobre este artículo",
|
|
489
|
+
},
|
|
490
|
+
pluginManageSource: {
|
|
491
|
+
titlePlaceholder: "Título (opcional)",
|
|
492
|
+
heading: "Fuentes de información",
|
|
493
|
+
chatPlaceholder: "Pregunta sobre tus fuentes de información…",
|
|
494
|
+
sourceCount: "{count} fuente | {count} fuentes",
|
|
495
|
+
addButton: "Añadir",
|
|
496
|
+
rebuildNow: "Reconstruir ahora",
|
|
497
|
+
rebuilding: "Reconstruyendo…",
|
|
498
|
+
typeField: "Tipo",
|
|
499
|
+
addingLabel: "Añadiendo…",
|
|
500
|
+
addAndRebuild: "Añadir + Reconstruir",
|
|
501
|
+
emptyPickPack: "Aún no hay fuentes registradas. Elige un paquete de inicio abajo, pulsa {addBold} arriba, o pide a Claude que registre una.",
|
|
502
|
+
emptyAddStrong: "+ Añadir",
|
|
503
|
+
registering: "Registrando + obteniendo…",
|
|
504
|
+
removeLabel: "Quitar",
|
|
505
|
+
removingLabel: "Quitando…",
|
|
506
|
+
todaysBrief: "Resumen de hoy",
|
|
507
|
+
todaysBriefLoading: "Cargando el resumen de hoy…",
|
|
508
|
+
briefNone: "Aún no se ha escrito un resumen para esta fecha. Pulsa Reconstruir ahora.",
|
|
509
|
+
briefEmpty: "El resumen de hoy está vacío.",
|
|
510
|
+
briefLoadFailed: "Error al cargar el resumen",
|
|
511
|
+
lastRebuildSummary: "Última reconstrucción ({date}): {itemCount} elementos de {planned} fuentes, {duplicates} duplicados descartados.",
|
|
512
|
+
archiveErrorsSuffix: "({count} errores de archivado)",
|
|
513
|
+
kindRss: "RSS",
|
|
514
|
+
kindGithubRel: "Releases de GitHub",
|
|
515
|
+
kindGithubIss: "Issues de GitHub",
|
|
516
|
+
kindArxiv: "arXiv",
|
|
517
|
+
kindGithubReleases: "Releases de GitHub",
|
|
518
|
+
kindGithubIssues: "Issues de GitHub",
|
|
519
|
+
briefDateLabel: "({date})",
|
|
520
|
+
primaryRssPlaceholder: "https://news.ycombinator.com/rss",
|
|
521
|
+
primaryGithubPlaceholder: "https://github.com/owner/repo (u owner/repo)",
|
|
522
|
+
primaryArxivPlaceholder: "cat:cs.CL",
|
|
523
|
+
primaryRssHint: "URL del feed (RSS 2.0 / Atom / RDF)",
|
|
524
|
+
primaryGithubRelHint: "URL del repo de GitHub u owner/repo — obtiene releases",
|
|
525
|
+
primaryGithubIssHint: "URL del repo de GitHub u owner/repo — obtiene issues",
|
|
526
|
+
primaryArxivHint: "Consulta de búsqueda de arXiv (ej. cat:cs.CL o au:hinton)",
|
|
527
|
+
confirmRemove: '¿Quitar la fuente "{slug}"?',
|
|
528
|
+
flashRegistered: "Registrada. Obteniendo elementos nuevos…",
|
|
529
|
+
flashRebuildReady: "Listo: {itemCount} elementos de {planned} fuente.|Listo: {itemCount} elementos de {planned} fuentes.",
|
|
530
|
+
flashRebuildComplete: "Reconstrucción completa: {itemCount} elementos de {planned} fuentes.",
|
|
531
|
+
flashRebuildFailed: "Error en la reconstrucción: {error}",
|
|
532
|
+
flashRegisterFailed: "Error al registrar la fuente",
|
|
533
|
+
flashRegisterSucceededRebuildFailed: "Registro correcto pero fallo al reconstruir: {error}",
|
|
534
|
+
flashRemoved: 'Quitada "{slug}".',
|
|
535
|
+
flashRemoveFailed: "Error al quitar: {error}",
|
|
536
|
+
flashRefreshListFailed: "Error al actualizar las fuentes: {error}",
|
|
537
|
+
flashPresetAlreadyRegistered: 'Todas las fuentes de "{label}" ya están registradas.',
|
|
538
|
+
flashPresetRegistered: 'Registrada {count} fuente de "{label}". Obteniendo…|Registradas {count} fuentes de "{label}". Obteniendo…',
|
|
539
|
+
flashPresetPartial: "Registradas {ok}/{total}. Errores: {errors}",
|
|
540
|
+
errPrimaryRequired: "Por favor, rellena el campo URL / consulta.",
|
|
541
|
+
errRssUrlProtocol: "La URL del feed RSS debe empezar por http:// o https://",
|
|
542
|
+
errRssUrlInvalid: "La URL del feed RSS no es una URL válida.",
|
|
543
|
+
errRssUrlHost: "La URL del feed RSS debe incluir un host.",
|
|
544
|
+
errGithubInvalid: "Introduce una URL de repositorio de GitHub (https://github.com/owner/repo) o owner/repo.",
|
|
545
|
+
errUnsupportedKind: "Tipo de fetcher no compatible.",
|
|
546
|
+
initialLoading: "Cargando fuentes…",
|
|
547
|
+
initialLoadFailed: "No se pudieron cargar las fuentes.",
|
|
548
|
+
retryLabel: "Reintentar",
|
|
549
|
+
filter: {
|
|
550
|
+
all: "Todas",
|
|
551
|
+
rss: "RSS",
|
|
552
|
+
github: "GitHub",
|
|
553
|
+
arxiv: "arXiv",
|
|
554
|
+
scheduleDaily: "Diario",
|
|
555
|
+
scheduleWeekly: "Semanal",
|
|
556
|
+
scheduleManual: "Manual",
|
|
557
|
+
noMatching: "No hay fuentes que coincidan con el filtro actual.",
|
|
558
|
+
clearFilter: "Quitar filtro",
|
|
559
|
+
},
|
|
560
|
+
},
|
|
561
|
+
pluginManageSkills: {
|
|
562
|
+
deleteProjectSkill: "Eliminar esta skill de proyecto",
|
|
563
|
+
heading: "Skills",
|
|
564
|
+
previewCount: "{count} skill | {count} skills",
|
|
565
|
+
previewMore: "+{count} más",
|
|
566
|
+
// La forma función evita el compilador de mensajes de vue-i18n,
|
|
567
|
+
// que de lo contrario marca el literal `<name>` como fragmento
|
|
568
|
+
// HTML y avisa "Detected HTML in '…' message" en cada montaje.
|
|
569
|
+
subheading: ({ named }: { named: (key: string) => unknown }) => `${named("count")} disponibles · haz clic para ver · "Run" la invoca como /<name>`,
|
|
570
|
+
emptyWithPath: "No se encontraron skills. Añade carpetas de skills en {path}.",
|
|
571
|
+
emptySkillPath: "~/.claude/skills/",
|
|
572
|
+
selectHint: "Selecciona una skill a la izquierda para ver su SKILL.md.",
|
|
573
|
+
loading: "Cargando…",
|
|
574
|
+
fieldDescription: "Descripción",
|
|
575
|
+
fieldBody: "Cuerpo (Markdown)",
|
|
576
|
+
emptyBody: "(cuerpo vacío)",
|
|
577
|
+
btnEdit: "Editar",
|
|
578
|
+
btnDelete: "Eliminar",
|
|
579
|
+
btnRun: "Ejecutar",
|
|
580
|
+
errListFailed: "Error al cargar las skills: {error}",
|
|
581
|
+
errDetailFailed: "Error al cargar la skill: {error}",
|
|
582
|
+
errSaveFailed: "Error al guardar: {error}",
|
|
583
|
+
errDeleteFailed: "Error al eliminar",
|
|
584
|
+
confirmDelete: '¿Eliminar la skill "{name}"? Esto borrará ~/mulmoclaude/.claude/skills/{name}/SKILL.md.',
|
|
585
|
+
},
|
|
586
|
+
pluginManageRoles: {
|
|
587
|
+
heading: "Roles personalizados",
|
|
588
|
+
roleCount: "{count} rol | {count} roles",
|
|
589
|
+
previewCount: "{count} rol personalizado | {count} roles personalizados",
|
|
590
|
+
addButton: "+ Añadir",
|
|
591
|
+
createPanel: "Crear nuevo rol",
|
|
592
|
+
fieldId: "ID",
|
|
593
|
+
fieldName: "Nombre",
|
|
594
|
+
fieldIcon: "Icono",
|
|
595
|
+
fieldPrompt: "Prompt",
|
|
596
|
+
fieldPlugins: "Plugins",
|
|
597
|
+
fieldStarterQueries: "Preguntas iniciales",
|
|
598
|
+
onePerLine: "(una por línea)",
|
|
599
|
+
helpLink: "?",
|
|
600
|
+
idFormatted: "({id})",
|
|
601
|
+
missingEnv: "(falta {env})",
|
|
602
|
+
requiresEnv: "Requiere {env} en .env",
|
|
603
|
+
collapse: "Contraer",
|
|
604
|
+
expand: "Expandir",
|
|
605
|
+
idPlaceholder: "id-unico",
|
|
606
|
+
creating: "Creando…",
|
|
607
|
+
create: "Crear",
|
|
608
|
+
updating: "Actualizando…",
|
|
609
|
+
update: "Actualizar",
|
|
610
|
+
cancel: "Cancelar",
|
|
611
|
+
delete: "Eliminar",
|
|
612
|
+
emptyHint: 'Aún no hay roles personalizados. Haz clic en "+ Añadir" o pide a Claude que cree uno.',
|
|
613
|
+
errIdRequired: "El ID es obligatorio.",
|
|
614
|
+
errIdInvalid: "El ID solo puede contener letras, números, '-' y '_'.",
|
|
615
|
+
errNameRequired: "El nombre es obligatorio.",
|
|
616
|
+
errIdDuplicate: "Ya existe un rol con el ID '{id}'.",
|
|
617
|
+
errCreateFailed: "Error al crear",
|
|
618
|
+
errSaveFailed: "Error al guardar",
|
|
619
|
+
errDeleteFailed: "Error al eliminar",
|
|
620
|
+
errNetworkError: "Error de red",
|
|
621
|
+
errServerError: "Error del servidor: {status}",
|
|
622
|
+
},
|
|
623
|
+
pluginUiImage: {
|
|
624
|
+
promptLabel: "{label}:",
|
|
625
|
+
},
|
|
626
|
+
pluginMulmoScript: {
|
|
627
|
+
beatCount: "{count} beat | {count} beats",
|
|
628
|
+
movie: "Vídeo",
|
|
629
|
+
generating: "Generando…",
|
|
630
|
+
rendering: "Renderizando…",
|
|
631
|
+
saving: "Guardando…",
|
|
632
|
+
update: "Actualizar",
|
|
633
|
+
characters: "Personajes",
|
|
634
|
+
drop: "Soltar",
|
|
635
|
+
gen: "Generar",
|
|
636
|
+
play: "▶ Reproducir",
|
|
637
|
+
stop: "■ Detener",
|
|
638
|
+
errPrefix: "⚠ Error",
|
|
639
|
+
noBeats: "No se encontraron beats en el script",
|
|
640
|
+
editSource: "Editar fuente del script",
|
|
641
|
+
applyChanges: "Aplicar cambios",
|
|
642
|
+
generateAll: "Generar todo",
|
|
643
|
+
orDropImage: "o arrastra una imagen",
|
|
644
|
+
generate: "Generar",
|
|
645
|
+
generateAudio: "♪ Generar",
|
|
646
|
+
saveErrorInvalidJson: "⚠ JSON no válido: {error}",
|
|
647
|
+
saveErrorSaveFailed: "⚠ Error al guardar: {error}",
|
|
648
|
+
},
|
|
649
|
+
pluginMarkdown: {
|
|
650
|
+
loading: "Cargando documento...",
|
|
651
|
+
loadFailed: "⚠ Error al cargar el documento: {error}",
|
|
652
|
+
refreshFailed: "⚠ Error al actualizar el documento: {error} — mostrando el último contenido cargado con éxito.",
|
|
653
|
+
noContent: "No hay contenido Markdown disponible",
|
|
654
|
+
pdf: "PDF",
|
|
655
|
+
pdfFailedShort: "⚠ Error de PDF",
|
|
656
|
+
editSource: "Editar fuente Markdown",
|
|
657
|
+
saving: "Guardando...",
|
|
658
|
+
applyChanges: "Aplicar cambios",
|
|
659
|
+
cancel: "Cancelar",
|
|
660
|
+
saveFailed: "Error al guardar: {error}",
|
|
661
|
+
saveError: "⚠ Error al guardar: {error}",
|
|
662
|
+
copyLabel: "Copiar",
|
|
663
|
+
copiedLabel: "¡Copiado!",
|
|
664
|
+
taskCountMismatch: "El número de tareas no coincide entre la fuente Markdown y la salida renderizada. Se rechazó el cambio para evitar dañar el archivo.",
|
|
665
|
+
},
|
|
666
|
+
pluginTextResponse: {
|
|
667
|
+
pdf: "PDF",
|
|
668
|
+
pdfFailed: "⚠ Error de PDF",
|
|
669
|
+
editContent: "Editar contenido de texto",
|
|
670
|
+
applyChanges: "Aplicar cambios",
|
|
671
|
+
copyLabel: "Copiar",
|
|
672
|
+
copiedLabel: "¡Copiado!",
|
|
673
|
+
cancel: "Cancelar",
|
|
674
|
+
},
|
|
675
|
+
pluginSpreadsheet: {
|
|
676
|
+
previewUntitled: "Hoja de cálculo",
|
|
677
|
+
previewSheets: "{count} hoja | {count} hojas",
|
|
678
|
+
untitled: "Hoja de cálculo",
|
|
679
|
+
excel: "Excel",
|
|
680
|
+
valuePlaceholder: "Valor",
|
|
681
|
+
valueOrFormulaPlaceholder: "Valor o Fórmula (ej. 100 o SUM(B2:B11))",
|
|
682
|
+
formatPlaceholder: "Formato (ej. $#,##0.00)",
|
|
683
|
+
loading: "Cargando la hoja de cálculo...",
|
|
684
|
+
noData: "No hay datos de hoja de cálculo disponibles",
|
|
685
|
+
editData: "Editar datos de la hoja de cálculo",
|
|
686
|
+
applyChanges: "Aplicar cambios",
|
|
687
|
+
dataMustBeArray: "Los datos deben ser una matriz de hojas",
|
|
688
|
+
loadFailed: "Error al cargar la hoja de cálculo: {error}",
|
|
689
|
+
invalidJsonAlert: "Formato JSON no válido: {error}",
|
|
690
|
+
unknownError: "Error desconocido",
|
|
691
|
+
update: "Actualizar",
|
|
692
|
+
stringType: "Texto",
|
|
693
|
+
formulaType: "Fórmula",
|
|
694
|
+
},
|
|
695
|
+
app: {
|
|
696
|
+
startConversation: "Inicia una conversación",
|
|
697
|
+
thinking: "Pensando…",
|
|
698
|
+
},
|
|
699
|
+
suggestionsPanel: {
|
|
700
|
+
suggestions: "Sugerencias",
|
|
701
|
+
sendEditHint: "clic para enviar · shift+clic para editar",
|
|
702
|
+
},
|
|
703
|
+
settingsToolsTab: {
|
|
704
|
+
// Renderizado vía <i18n-t> con slots nombrados `allowedTools` y
|
|
705
|
+
// `claudeMcp` para que las etiquetas `<code>` en línea conserven
|
|
706
|
+
// su estilo mientras el texto se traduce.
|
|
707
|
+
explanation:
|
|
708
|
+
"Nombres adicionales de herramientas que pasar a Claude mediante {allowedTools}. Uno por línea. Útil para servidores MCP integrados en Claude Code como Gmail / Google Calendar tras autenticarte mediante {claudeMcp}.",
|
|
709
|
+
},
|
|
710
|
+
};
|
|
711
|
+
|
|
712
|
+
export default esMessages;
|