Files
lobe-chat/locales/es-ES/chat.json
T
Tsuki 70e7e441b2 🔨 chore: premerge Task detail page UI (#13653)
*  feat: add AgentTaskList component on agent welcome page (LOBE-6597)

- AgentTaskList with TaskListHeader, TaskItem, and styles
- Embedded in AgentWelcome below ToolAuthAlert
- Each task rendered as independent rounded card with status badge
- Status: green filled circle (Done), blue circle (In progress)
- Card width matches chat input (960px)
- i18n keys for taskList.title and taskList.viewAll
- Fix updateReview type to use TRPC-inferred type

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

*  feat: add Tasks page at /agent/:aid/tasks with route, breadcrumb, and view toggle (LOBE-6597)

- Register tasks route in both desktopRouter.config.tsx and .desktop.tsx
- Thin route page at src/routes/(main)/agent/tasks/index.tsx
- Feature components in src/features/AgentTasks/: page, breadcrumb, header with list/kanban toggle, full task list
- Wire up "View All Tasks" navigation from AgentTaskList welcome card
- Add i18n keys (taskList.activeTasks, taskList.breadcrumb.task) and generate translations via pnpm i18n

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

*  feat: add Task detail page at /agent/:aid/tasks/:taskId (LOBE-6597)

- Register :taskId child route in both desktopRouter configs
- TaskDetailPage with auto-save hint, breadcrumb, and scrollable content
- TaskDetailHeader: editable title (borderless Input), Run/Pause button, status/priority tags, delete
- TaskInstruction: click-to-edit Markdown with debounced auto-save
- TaskSubtasks: sub-issues list with status badges
- TaskActivities: timeline with topic/brief/comment icons
- TaskItem now navigates to detail page instead of just setting activeTaskId
- Add taskDetail.* i18n keys with generated translations

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

*  feat: add TaskModelConfig, TaskScheduleConfig, and refine Task detail UI (LOBE-6597)

Add model/provider selector and periodic execution config to Task detail page.
Refine TaskDetailHeader, TaskInstruction with auto-save and i18n support.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

*  feat: refine Task detail UI with Linear-style design (LOBE-6597)

- Redesign SubTasks with collapsible header, progress circle, hover + click navigation
- Redesign Activities with agent avatar, comment input box, and Linear-style layout
- Add TaskParentBar showing parent task relationship with sibling navigation popover
- Add delete confirmation modal using App.useApp().modal.confirm
- Move ModelSelect to separate row below action bar
- Fix zustand selector recreation in ActivityItem
- Replace hardcoded colors with cssVar tokens

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

*  feat: add Properties panel, parent link hover, activity icon, and lifecycle save status (LOBE-6597)

- Add TaskProperties sidebar with collapsible status/priority dropdowns
- Parent bar: clickable parent link with hover, sibling navigation popover on progress
- Activity title: add BotMessageSquare icon
- Fix lifecycle actions not updating taskSaveStatus (saving/saved indicator)
- Filter status dropdown to only user-selectable states (backlog/completed/canceled)
- Add test task creation script for dev

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

*  feat: add recursive tree view for subtasks with Linear-style connecting lines (LOBE-6597)

- Add buildTaskTree utility to convert flat getTaskTree API response into nested tree
- Implement SubtaskTreeItem recursive component with CSS connecting lines (├─ and └─)
- Fetch full task tree via taskService.getTaskTree for nested subtask display
- Show loading spinner during tree fetch, fallback to flat list on error
- Remove padding-inline from AgentTaskList container

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* 🐛 fix: address PR review — delete redirect, debounce cleanup, schedule resync (LOBE-6597)

- Redirect to task list after successful delete (P1)
- Clean up instruction debounce timer on unmount/task switch to prevent stale writes (P1)
- Resync TaskScheduleConfig local state when active task changes (P2)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* ♻️ refactor: use backend nested subtasks directly, remove buildTaskTree (LOBE-6597)

Backend now returns nested subtasks in task.detail (LOBE-6814).
Remove buildTaskTree utility, getTaskTree API call, and loading state.
Use TaskDetailSubtask from @lobechat/types instead of local interface.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

*  perf: add optimistic update and save status for model config change (LOBE-6597)

updateTaskModelConfig now immediately reflects new model/provider in UI
via optimistic store dispatch, and tracks taskSaveStatus (saving/saved).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

*  perf: skip redundant refreshTaskDetail on successful model config update (LOBE-6597)

Optimistic update is trusted on success — no need for full detail re-fetch.
Aligns with updateTask pattern. Refresh kept only in error path for revert.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

*  feat: use backend author info for activities, fix AgentTaskList after AgentHome refactor (LOBE-6597)

- Activity: use act.author (TaskDetailActivityAuthor) from backend instead of agentMap lookup (LOBE-7013)
- AgentTaskList: fix agentId from useParams instead of useAgentStore.activeAgentId (was undefined)
- AgentHome: integrate AgentTaskList into new AgentHome layout (replaces old AgentWelcome)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

*  feat: show participant avatars on task cards, use backend author for activities (LOBE-6597)

- TaskItem: display up to 3 participant avatars next to task title (LOBE-6805)
- Activity: use act.author from backend instead of agentMap lookup (LOBE-7013)
- AgentHome: integrate AgentTaskList into new AgentHome layout
- Revert AgentTaskList/TaskItem agentId back to useAgentStore (works correctly when mounted)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* ♻️ refactor: fix type safety, memoize participants filter, extract avatar styles (LOBE-6597)

- Use TaskParticipant type instead of `any` in filter/map
- Compute displayParticipants once with useMemo (was filtering twice per render)
- Move avatar overlap styles to CSS classes (was inline objects per render)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* 🔇 chore: hide kanban view toggle until implemented (LOBE-6597)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* ♻️ refactor: export TaskStatus/TaskPriority/TaskActivityType from @lobechat/types (LOBE-6597)

Replace hardcoded string/number types with shared type aliases:
- TaskStatus: 'backlog' | 'canceled' | 'completed' | 'failed' | 'paused' | 'running'
- TaskPriority: 0 | 1 | 2 | 3 | 4
- TaskActivityType: 'brief' | 'comment' | 'topic'

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* style: update

* style: update

* style: update

* style: update

* style: update

* style: update

* style: update

* style: update

* style: update

* style: update

*  feat: add Daily Brief module to homepage (#13851)

*  feat: add Daily Brief module to homepage

Add a Daily Brief section below the chat input on the homepage that
displays unresolved briefs from the Agent Tasks system. Users can
resolve, comment, and provide feedback directly from the brief cards.

- Service: BriefService with listUnresolved, resolve, markRead, addComment
- Store: Independent Zustand store (src/store/brief/) with SWR data fetching
- Components: BriefCard, BriefCardActions (dynamic action buttons),
  BriefCardSummary (Markdown with expand/collapse), CommentInput (@lobehub/editor)
- Three action types: resolve (closes brief), comment (resolve with text),
  link (safe URL navigation with protocol validation)
- Fixed feedback button: adds task comment without resolving the brief
- Inline success state ("Feedback sent") with 1.5s auto-restore
- i18n: zh-CN + en-US translations
- Tests: 21 tests across service, store selectors, and components
- CLI: Register task and brief commands for local development

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

*  feat: add agent avatars to Daily Brief cards

Display stacked agent avatars next to brief card titles using the
new `agents` data from Arvin's enriched listUnresolved API (#13489).

- Add AgentAvatarInfo type and agents field to BriefItem
- Render overlapping circular avatars (20px, -6px overlap)
- Use cssVar.colorBgContainer for border (dark mode compatible)
- Extract avatar style to function to avoid inline object creation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* ♻️ refactor: clean up Daily Brief components

- Extract duplicate success state JSX into reusable SuccessTag component
- Remove redundant comments that describe what code does
- Use DEFAULT_AVATAR from @lobechat/const instead of hardcoded emoji

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* 🐛 fix: address PR review feedback for Daily Brief

- Use cssVar.colorBgBase instead of hardcoded #fff for primary button
  text color (dark mode contrast fix)
- Add submitting state to CommentInput to prevent duplicate submissions
  (disable buttons + show loading during async submit)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* 🌐 chore: generate i18n translations for Daily Brief

Run pnpm i18n to generate translations for all 18 locales.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* ♻️ refactor: use shared BriefType from @lobechat/types

Export BriefType union from packages/types and use it in
BRIEF_TYPE_COLOR and BRIEF_TYPE_ICON records for compile-time
key validation. Adding a new brief type now requires updating
the shared type, and TypeScript will flag missing mappings.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* style: update

* style: update

* style: update

---------

Co-authored-by: Tsuki <976499226@qq.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* style: update

* style: update

* style: update

* style: update

* fix: stopPropagation

* fix: i18n

* 🐛 fix: wire comment inputs to editor instance so Send actually submits

CommentInput in AgentTasks and DailyBrief used antd TextArea inside
@lobehub/editor's ChatInput while reading content via
editor.getDocument('markdown'). The TextArea was never connected to the
editor instance, so getDocument always returned empty and handleSubmit
short-circuited silently — Send appeared to do nothing (no network
request fired).

Replace the TextArea with <Editor editor={editor} type="text"
variant="chat" /> so useEditor() actually drives the editable surface.
Keep plain-text behavior via markdownOption={false} +
enablePasteMarkdown={false}, and bind Cmd/Ctrl+Enter submit via
onPressEnter.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* 🐛 fix: use participant.title after TaskParticipant schema rename (#13877)

PR #13877 renamed TaskParticipant.name → .title and added
.backgroundColor. Our branch's UI code (AgentAvatars, listViewOptions,
TaskList group header, Breadcrumb) was already written against the new
schema, but TaskProperties still read firstParticipant?.name — update
the last remaining call site so the type matches post-rebase.

backgroundColor is already plumbed through everywhere it applies within
#13877's scope; TaskActivities' TaskDetailActivityAuthor is a separate
type untouched by the PR and kept as-is.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* 🐛 fix: resolve type-check errors exposed after canary rebase

canary upgraded react-i18next to a version with typed i18n keys and
tightened @lobehub/editor's SendButton + IEditor APIs. Rebase pulled
these in, surfacing latent type errors in LOBE-6597 code.

- CommentInput: use editor.cleanDocument() (IEditor's actual API;
  clearContent never existed).
- TaskActivities / TaskLatestActivity / TaskTriggerTag: type t as
  TFunction<'chat'> so typed i18n accepts the known-literal keys used
  inside module-level helpers.
- TaskPriorityTag / TaskStatusTag / listViewOptions: add
  defaultValue: '' to dynamic-key t() calls (template literals and
  Record lookups) to match the broad-key i18n overload.
- BriefCardActions: swap unusable <SendButton> (no children, no
  iconPlacement) for <Button>; add defaultValue to the dynamic
  brief-action key lookup; drop stale @ts-ignore.
- DailyBrief/CommentInput: drop unsupported children on SendButton;
  keep label via title attribute.
- Recents/Item: type TYPE_ICON_MAP as Partial<Record<...>> so 'task'
  (rendered via TaskStatusIcon elsewhere) is a safe absent key.
- brief/slices/list/action: cast briefService.listUnresolved() result
  back to BriefItem[] (TRPC serialization widens BriefType to string).
- AgentTasks/TasksHeader: delete dead file — no importers and its
  ./style module was removed by an earlier refactor.

Also ran pnpm install to materialize the newly-extracted
@lobechat/agent-gateway-client workspace package (canary #13866),
clearing ~7 "cannot find module" errors.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* ♻️ refactor(builtin-tool-task): polish task tool paths (#13869)

*  feat: navigate to task detail when clicking brief card header

Clicking the header row of a Daily Brief card (icon + title + time +
agent avatars) now jumps straight to the associated task, using the
brief's task-tree agent (with activeAgent / inbox as fallback).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

*  feat: show parent task ids as clickable breadcrumb trail

Walk the cached parent chain from taskDetailMap and insert each ancestor's
identifier as a link between the "任务" entry and the current task name in
the task detail breadcrumb.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

*  feat: add cross-agent /tasks page with View All Tasks on Daily Brief

- Register `/tasks` route in desktop (web + Electron) and mobile router configs
- `useFetchTaskList` supports `allAgents` mode via options object API to fetch
  tasks without agent filter; backend already supports optional assigneeAgentId
- `Breadcrumb` accepts optional `agentId`, renders "All tasks" crumb when absent
- `AgentTaskItem` navigation uses `task.assigneeAgentId` so clicks work from
  the cross-agent page (falls back to `activeAgentId` for unassigned tasks)
- Extract `useScenarioEnabledTools` hook to share layout effect between
  `/tasks/_layout` and `/agent/:aid/tasks/_layout`

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* ♻️ refactor: use assigneeAgentId for task avatar instead of participants array

Replace AgentAvatars (took participants[]) with AssigneeAvatar (takes agentId,
resolves meta from agent store). This correctly represents that a task is
assigned to a single agent via assigneeAgentId/detail.agentId.

- New AssigneeAvatar component reads agent meta from agent store by ID
- TaskProperties reads activeTaskAgentId from task detail store
- listViewOptions uses task.assigneeAgentId directly for groupBy/sort
- Extract shared isInboxAgentId helper to eliminate 4x inline duplication
- Group headers resolve agent title at render time via AssigneeLabel component

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* 🐛 fix: enable vertical scrolling on cross-agent tasks page

Add overflowY and flex to WideScreenContainer wrapper so the task list
can scroll when content exceeds viewport height.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

*  feat: add re-assign task agent with popover selector

- Add AssigneeAgentSelector component with Popover agent list
- Extract useAgentDisplayMeta hook for consistent agent name/avatar resolution
- Fix optimistic update mapping assigneeAgentId → agentId in task store
- Disable reassignment for running tasks with tooltip hint
- Integrate selector into task list and task detail property panel

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

*  feat: reuse BriefCard in task detail activities & fix raw-id navigation

Render brief-type activities as full BriefCard (same as homepage) instead of
plain tree rows. Decouple BriefCardActions from useBriefStore for actions
lookup so it can be reused across pages. Fix infinite loading when navigating
to task detail via raw DB id (task_xxx) by storing detail under both the
identifier and the raw id key in taskDetailMap.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

*  feat: add TopicCard component for task detail activities

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

*  feat: allow re-running completed tasks with dedicated button

Completed tasks now show a "Re-run" button (with rotate icon) instead of
hiding the action. The backend already supported this — only the frontend
selector gate needed updating.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

*  feat: add create task modal with markdown editor

Add a "+" button on the tasks list page that opens a Linear-style modal
for manually creating tasks. The modal features a title input, a markdown
editor (EditorCanvas), and a bottom toolbar with priority and assignee
selectors. Existing tag components (TaskStatusTag, TaskPriorityTag,
AssigneeAgentSelector) are extended with an `onChange` controlled mode
so they can be used in creation context where no task exists yet.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* 🐛 fix: suppress spurious updateTask on Task Detail page load

EditorDataMode was missing the contentChangeLockRef pattern that
DocumentIdMode already uses, causing Lexical's registerUpdateListener
to treat programmatic content hydration as a user edit and fire
onContentChange → updateTask on every page visit.

- Add contentChangeLockRef + lockIdRef staleness guard
- Extract loadContentWithLock to deduplicate lock/load/unlock logic
- Pass contentChangeLockRef to InternalEditor
- Remove unreachable dead code in loadEditorContent

Closes LOBE-7362

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

*  feat: task detail comment CRUD and various UX improvements

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* 🐛 fix: move canceled status group to the end of task list

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* 💄 style: polish task detail layout, title, and run button

- Title switched to auto-sizing TextArea so long names wrap (like Linear)
- Reduce title font-size from 32px to 24px and tighten paddings
- Make "运行任务" button small-sized to match the denser header
- Add 120px bottom padding for end-of-content scroll breathing room
- Default EditorCanvas paddingBottom trimmed from 64 to 32

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* 💄 style: refine task assignee, priority, and comment input

- Assignee block uses filled variant in dark mode for better contrast
- Urgent priority (level 1) renders in orange for quick scanning
- Comment input keeps SendButton slot reserved to prevent layout shift

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

*  feat: task detail — inline subtasks, automation mode, chronological activity

- Inline subtask creation under a task via CreateTaskInlineEntry
  (parentTaskId/autoFocus/onCollapse/placeholder), refreshes parent on create
- Track agent-created tasks via createdByAgentId through service, router,
  types, and the builtin task executor
- Replace scheduler Segmented-only UI with an Enable switch + heartbeat/
  schedule mode; persist via automationMode on the task
- Sort detail activities oldest → newest for a natural timeline reading
- Reducer patches nested subtask entries on updateTaskDetail so in-place
  edits reflect in the parent's subtask tree

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* 💄 style: render activate-tool chips as rounded pills

Switch inspector tool chips from monospace code tags to filled rounded
pills with ellipsis overflow, making multi-tool rows scan better in tight
headers.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* 🐛 fix: keep finished tool call out of loading state while siblings run

The message-level isAssistantMessageBusy flag stays true while sibling
tool calls are still running. Without guarding on this tool's own
result, a finished tool would flip back to "loading". Now a tool that
has a real result or error is never shown as calling.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* 💄 style: use small Segmented in schedule config popover

Keeps the automation mode switcher visually aligned with the denser
popover controls.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

*  feat: agent profile hover card on task activity author

- Extract shared AgentProfileCard + unified AgentProfilePopup (click / hover)
  with lazy agent fetch; move out of group sidebar path.
- Wire activity author avatar + name to a hover card; brighten title on hover;
  keep a small "agent" tag on the author row.
- Show inline skeletons (description + footer stats) while loading.
- Enrich subtask payload with assignee agent info for cleaner UI.

*  feat: open task topic chat in side drawer

Click a topic row in the task detail activities to open a right-side drawer
showing the topic's full chat history. Messages stream in live via the existing
agent gateway pipeline (gateway events land in chatStore.dbMessagesMap keyed by
the topic context), so a running topic refreshes its drawer in real time without
a dedicated subscription.

Reuses the Conversation feature (ConversationProvider + ChatList) with an
isolated context (agentId + topicId + isolatedTopic), so the drawer never
touches the global active topic and multiple panels coexist cleanly.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* 💄 style: outline activate-tool chip with subtle border

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

*  feat: show topic handoff summary on activity card

Pull `handoff.summary` through the task service into TaskDetailActivity and
render it under the title in TopicCard so completed topics surface what was
accomplished without opening the drawer.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* 🎸 chore: gate agent task feature behind agent_task flag

Hide every client-side entry point to the Agent Task feature when the
`agent_task` flag (default `isDev`, off in prod) is disabled:

- Sidebar: task tab in the agent sidebar nav
- Routes: `/agent/:aid/tasks/*` and `/tasks/*` layouts redirect to `/` when
  the flag is off (mobile router reuses the same layout)
- Home Recents: filter out `type='task'` items in both the list and the
  "all recents" drawer
- Daily Brief: skip fetch + hide the entire panel (all briefs link to tasks)

Backend TRPC / lifecycle stays on — the feature is already live for CLI
usage. Flag name mirrors `agent_onboarding` for consistency.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* 🐛 fix: prioritize includeTriggers in topic queries

* 🐛 fix: normalize task detail activity payloads

*  feat: add Kanban board view for task list with drag-and-drop

LOBE-7493

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* 💄 style: shorten schedule tag labels & fix time width in task cards

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* update i18n

* 💄 style: hide task tool from user selectors

* 💄 style: hide task skill from user selectors

---------

Co-authored-by: canisminor1990 <i@canisminor.cc>
Co-authored-by: YuTengjing <ytj2713151713@gmail.com>
Co-authored-by: Arvin Xu <arvinx@foxmail.com>
2026-04-23 02:10:45 +08:00

723 lines
45 KiB
JSON

{
"ModelSwitch.title": "Modelo",
"active": "Activo",
"agentBuilder.installPlugin.authRequired": "Cloud MCP requiere iniciar sesión para continuar",
"agentBuilder.installPlugin.cancel": "Cancelar",
"agentBuilder.installPlugin.clickApproveToConnect": "Haz clic en \"Aprobar\" para conectar y autorizar esta Integración",
"agentBuilder.installPlugin.clickApproveToInstall": "Haz clic en \"Aprobar\" para instalar esta Habilidad",
"agentBuilder.installPlugin.connectedAndEnabled": "Conectado y habilitado",
"agentBuilder.installPlugin.connectionFailed": "Conexión fallida. Intenta de nuevo o revisa la autorización y la configuración de red.",
"agentBuilder.installPlugin.installFailed": "La instalación falló. Intenta de nuevo o revisa los detalles.",
"agentBuilder.installPlugin.installPlugin": "Instalar Habilidad",
"agentBuilder.installPlugin.installToEnable": "Instala para habilitar esta Habilidad para el Agente (puedes hacerlo más tarde)",
"agentBuilder.installPlugin.installedAndEnabled": "Instalado y habilitado",
"agentBuilder.installPlugin.requiresAuth": "Requiere autorización. Haz clic en \"Aprobar\" para conectar",
"agentBuilder.installPlugin.retry": "Reintentar",
"agentBuilder.title": "Constructor de Agentes",
"agentBuilder.welcome": "Cuéntame tu caso de uso.\n\nEscritura, programación o análisis de datos—todo vale. Tú defines el objetivo y los estándares; yo lo desgloso en Agentes colaborativos y ejecutables.",
"agentDefaultMessage": "Hola, soy **{{name}}**. Una frase es suficiente.\n\n¿Quieres que me adapte mejor a tu flujo de trabajo? Ve a [Configuración del Agente]({{url}}) y completa el Perfil del Agente (puedes editarlo en cualquier momento).",
"agentDefaultMessageWithSystemRole": "Hola, soy **{{name}}**. Una frase es suficiente—tú tienes el control.",
"agentDefaultMessageWithoutEdit": "Hola, soy **{{name}}**. Una frase es suficiente—tú tienes el control.",
"agentProfile.files_one": "{{count}} archivo",
"agentProfile.files_other": "{{count}} archivos",
"agentProfile.knowledgeBases_one": "{{count}} base de conocimiento",
"agentProfile.knowledgeBases_other": "{{count}} bases de conocimiento",
"agentProfile.skills_one": "{{count}} habilidad",
"agentProfile.skills_other": "{{count}} habilidades",
"agents": "Agentes",
"artifact.generating": "Generando",
"artifact.inThread": "No se puede ver en el subtema, cambia al área principal de conversación para abrirlo",
"artifact.thinking": "Pensando",
"artifact.thought": "Proceso de pensamiento",
"artifact.unknownTitle": "Trabajo sin título",
"availableAgents": "Agentes disponibles",
"backToBottom": "Ir al último mensaje",
"beforeUnload.confirmLeave": "Una solicitud aún está en curso. ¿Salir de todos modos?",
"builtinCopilot": "Copiloto integrado",
"chatList.expandMessage": "Expandir mensaje",
"chatList.longMessageDetail": "Ver detalles",
"clearCurrentMessages": "Borrar mensajes de la sesión actual",
"compressedHistory": "Historial Comprimido",
"compression.cancel": "Descomprimir",
"compression.cancelConfirm": "¿Estás seguro de que deseas descomprimir? Esto restaurará los mensajes originales.",
"compression.history": "Historial",
"compression.summary": "Resumen",
"confirmClearCurrentMessages": "Estás a punto de borrar los mensajes de la sesión actual. Una vez borrados, no se podrán recuperar. Por favor, confirma tu acción.",
"confirmRemoveChatGroupItemAlert": "Este grupo será eliminado. Los asistentes específicos del grupo también serán eliminados, mientras que los asistentes externos no se verán afectados.",
"confirmRemoveGroupItemAlert": "Estás a punto de eliminar este grupo. Después de eliminarlo, sus agentes se moverán a la lista predeterminada. Por favor, confirma tu acción.",
"confirmRemoveGroupSuccess": "Grupo eliminado con éxito",
"confirmRemoveSessionItemAlert": "Estás a punto de eliminar este agente. Una vez eliminado, no se podrá recuperar. Por favor, confirma tu acción.",
"confirmRemoveSessionSuccess": "Agente eliminado con éxito",
"createModal.createBlank": "Crear en blanco",
"createModal.groupPlaceholder": "Describe lo que debería hacer este grupo...",
"createModal.groupTitle": "¿Qué debería hacer tu grupo?",
"createModal.placeholder": "Describe lo que debería hacer tu agente...",
"createModal.title": "¿Qué debería hacer tu agente?",
"createTask.assignee": "Asignado a",
"createTask.collapse": "Ocultar entrada",
"createTask.expandToInline": "Anclar a la página",
"createTask.instructionPlaceholder": "Añadir descripción...",
"createTask.submit": "Crear tarea",
"createTask.titlePlaceholder": "Título de la tarea",
"defaultAgent": "Agente predeterminado",
"defaultGroupChat": "Grupo",
"defaultList": "Lista predeterminada",
"defaultSession": "Agente predeterminado",
"desktopNotification.aiReplyCompleted.body": "La respuesta del agente está lista",
"desktopNotification.aiReplyCompleted.title": "Respuesta completada",
"dm.placeholder": "Tus mensajes privados con {{agentTitle}} aparecerán aquí.",
"dm.tooltip": "Enviar mensaje privado",
"dm.visibleTo": "Visible solo para {{target}}",
"dm.you": "Tú",
"duplicateSession.loading": "Copiando...",
"duplicateSession.success": "Copia realizada con éxito",
"duplicateSession.title": "Copia de {{title}}",
"duplicateTitle": "Copia de {{title}}",
"emptyAgent": "Aún no hay Agentes. Comienza con tu primer Agente—construye tu sistema con el tiempo.",
"emptyAgentAction": "Crear Agente",
"extendParams.disableContextCaching.desc": "Reduce hasta un 90% el costo de generar una sola conversación y alcanza una velocidad hasta 4 veces mayor. <1>Más información</1>",
"extendParams.disableContextCaching.title": "Habilitar Caché de Contexto",
"extendParams.effort.desc": "Controla cuántos tokens utiliza Claude al responder mediante el parámetro de esfuerzo.",
"extendParams.effort.title": "Esfuerzo",
"extendParams.enableAdaptiveThinking.desc": "Permite que Claude decida dinámicamente cuándo y cuánto pensar con el modo de pensamiento adaptativo.",
"extendParams.enableAdaptiveThinking.title": "Activar Pensamiento Adaptativo",
"extendParams.enableReasoning.desc": "Basado en el límite del mecanismo de razonamiento de Claude. <1>Más información</1>",
"extendParams.enableReasoning.title": "Habilitar Pensamiento Profundo",
"extendParams.imageAspectRatio.title": "Relación de aspecto de imagen",
"extendParams.imageResolution.title": "Resolución de imagen",
"extendParams.reasoningBudgetToken.title": "Token de Consumo de Pensamiento",
"extendParams.reasoningEffort.title": "Intensidad del Razonamiento",
"extendParams.textVerbosity.title": "Nivel de detalle del texto de salida",
"extendParams.thinking.title": "Interruptor de Pensamiento Profundo",
"extendParams.thinkingBudget.title": "Presupuesto de Reflexión",
"extendParams.thinkingLevel.title": "Nivel de Pensamiento",
"extendParams.title": "Funciones de Extensión del Modelo",
"extendParams.urlContext.desc": "Cuando está habilitado, los enlaces web se analizarán automáticamente para recuperar el contenido real de la página",
"extendParams.urlContext.title": "Extraer contenido de enlaces web",
"followUpPlaceholder": "Seguimiento. Usa @ para asignar tareas a otros agentes.",
"group.desc": "Avanza una tarea con múltiples Agentes en un espacio compartido.",
"group.memberTooltip": "Hay {{count}} miembros en el grupo",
"group.orchestratorThinking": "El Orquestador está pensando...",
"group.profile.contentPlaceholder": "Establece aquí los objetivos y modos de trabajo del grupo. Esta información será compartida con todos los miembros del grupo.",
"group.profile.external": "Externo",
"group.profile.externalAgentWarning": "Este es un agente externo. Los cambios realizados aquí modificarán directamente la configuración original del agente.",
"group.profile.groupSettings": "Configuración del grupo",
"group.profile.supervisor": "Supervisor",
"group.profile.supervisorPlaceholder": "El supervisor coordina a los distintos agentes. Al establecer la información del supervisor aquí, se permite una coordinación del flujo de trabajo más precisa.",
"group.removeMember": "Eliminar miembro",
"group.title": "Grupo",
"groupDescription": "Descripción del grupo",
"groupSidebar.agentProfile.chat": "Chat",
"groupSidebar.agentProfile.model": "Modelo",
"groupSidebar.agentProfile.settings": "Configuración",
"groupSidebar.members.addMember": "Agregar miembro",
"groupSidebar.members.enableOrchestrator": "Habilitar Orquestador",
"groupSidebar.members.memberSettings": "Configuración de miembros",
"groupSidebar.members.orchestrator": "Orquestador",
"groupSidebar.members.orchestratorThinking": "El Orquestador está pensando...",
"groupSidebar.members.removeMember": "Eliminar miembro",
"groupSidebar.members.stopOrchestrator": "Detener",
"groupSidebar.members.triggerOrchestrator": "Iniciar",
"groupSidebar.tabs.host": "Orquestador",
"groupSidebar.tabs.members": "Miembros",
"groupSidebar.tabs.role": "Perfil",
"groupWizard.chooseMembers": "Seleccionar agentes existentes...",
"groupWizard.createGroup": "Crear grupo",
"groupWizard.existingMembers": "Agentes actuales",
"groupWizard.groupMembers": "Estos agentes también se agregarán a tu lista",
"groupWizard.host.description": "Deja que el grupo avance automáticamente. Puedes intervenir en cualquier momento.",
"groupWizard.host.title": "Habilitar Orquestador",
"groupWizard.host.tooltip": "Cuando está desactivado, deberás mencionar a los miembros con @ para obtener sus respuestas.",
"groupWizard.memberCount": "{{count}} miembros",
"groupWizard.noMatchingTemplates": "No hay plantillas coincidentes",
"groupWizard.noSelectedTemplates": "No se han seleccionado plantillas",
"groupWizard.noTemplateMembers": "No hay miembros en la plantilla",
"groupWizard.noTemplates": "No hay plantillas disponibles",
"groupWizard.searchTemplates": "Buscar plantillas...",
"groupWizard.title": "Crear grupo",
"groupWizard.useTemplate": "Usar plantilla",
"heteroAgent.fullAccess.label": "Acceso completo",
"heteroAgent.fullAccess.tooltip": "Claude Code se ejecuta localmente con acceso completo de lectura y escritura al directorio de trabajo. Cambiar los modos de permiso aún no está disponible.",
"heteroAgent.resumeReset.cwdChanged": "El directorio de trabajo ha cambiado. La sesión anterior de Claude Code solo puede reanudarse desde su directorio original, por lo que se ha iniciado una nueva conversación.",
"heteroAgent.switchCwd.cancel": "Cancelar",
"heteroAgent.switchCwd.content": "Las sesiones de Claude Code están vinculadas a un directorio de trabajo. Cambiarlo iniciará una nueva sesión para este tema — los mensajes del chat permanecerán, pero no se podrá reanudar el contexto de la sesión anterior.",
"heteroAgent.switchCwd.ok": "Cambiar e iniciar nueva sesión",
"heteroAgent.switchCwd.title": "¿Cambiar el directorio de trabajo?",
"hideForYou": "El contenido del mensaje directo está oculto. Activa 'Mostrar contenido de mensajes directos' en la configuración para verlo.",
"history.title": "El Agente solo conservará los últimos {{count}} mensajes.",
"historyRange": "Rango de historial",
"historySummary": "Resumen de mensajes históricos",
"inactive": "Inactivo",
"inbox.desc": "Colabora en un solo espacio de trabajo y convierte ideas en resultados.",
"inbox.title": "Lobe AI",
"input.addAi": "Agregar mensaje de IA",
"input.addUser": "Agregar mensaje de usuario",
"input.disclaimer": "Los agentes pueden cometer errores. Usa tu criterio para información crítica.",
"input.errorMsg": "Error al enviar: {{errorMsg}}. Intenta de nuevo más tarde.",
"input.more": "Más",
"input.send": "Enviar",
"input.sendWithCmdEnter": "Presiona <key/> para enviar",
"input.sendWithEnter": "Presiona <key/> para enviar",
"input.stop": "Detener",
"input.warp": "Nueva línea",
"input.warpWithKey": "Presiona <key/> para insertar un salto de línea",
"intentUnderstanding.title": "Entendiendo tu intención...",
"inviteMembers": "Invitar miembros",
"knowledgeBase.all": "Todo el contenido",
"knowledgeBase.allFiles": "Todos los archivos",
"knowledgeBase.allLibraries": "Todas las bibliotecas",
"knowledgeBase.disabled": "El chat de biblioteca no está disponible en esta implementación. Cambia a una base de datos del lado del servidor o usa {{cloud}}.",
"knowledgeBase.library.action.add": "Agregar",
"knowledgeBase.library.action.detail": "Detalles",
"knowledgeBase.library.action.remove": "Eliminar",
"knowledgeBase.library.title": "Archivos / Bibliotecas",
"knowledgeBase.relativeFilesOrLibraries": "Archivos/Bibliotecas relacionadas",
"knowledgeBase.title": "Biblioteca",
"knowledgeBase.uploadGuide": "Los archivos subidos se pueden ver en la sección 'Recursos'.",
"knowledgeBase.viewMore": "Ver más",
"memberSelection.addMember": "Agregar miembro",
"memberSelection.allMembers": "Todos los miembros",
"memberSelection.createGroup": "Crear grupo",
"memberSelection.noAvailableAgents": "No hay agentes disponibles para invitar",
"memberSelection.noSelectedAgents": "Aún no se han seleccionado agentes",
"memberSelection.searchAgents": "Buscar agentes...",
"memberSelection.selectedAgents": "Seleccionados ({{count}})",
"memberSelection.setInitialMembers": "Seleccionar miembros del grupo",
"members": "Miembros",
"memory.effort.desc": "Controla cuán agresivamente la IA recupera y actualiza la memoria.",
"memory.effort.high.title": "Alto",
"memory.effort.low.title": "Bajo",
"memory.effort.medium.title": "Medio",
"memory.effort.title": "Agresividad",
"memory.off.desc": "Desactiva la memoria para esta conversación.",
"memory.off.title": "Desactivar Memoria",
"memory.on.desc": "Recuerda preferencias e información de las conversaciones.",
"memory.on.title": "Activar Memoria",
"memory.title": "Memoria",
"mention.title": "Mencionar miembros",
"messageAction.collapse": "Colapsar mensaje",
"messageAction.continueGeneration": "Continuar generando",
"messageAction.delAndRegenerate": "Eliminar y regenerar",
"messageAction.deleteDisabledByThreads": "Este mensaje tiene un subtema y no se puede eliminar",
"messageAction.expand": "Expandir mensaje",
"messageAction.interrupted": "Interrumpido",
"messageAction.interruptedHint": "¿Qué debería hacer en su lugar?",
"messageAction.reaction": "Agregar reacción",
"messageAction.regenerate": "Regenerar",
"messages.dm.sentTo": "Visible solo para {{name}}",
"messages.dm.title": "Mensaje directo",
"messages.modelCard.credit": "Créditos",
"messages.modelCard.creditPricing": "Precios",
"messages.modelCard.creditTooltip": "Para el conteo, tratamos $1 como 1M de créditos. Ejemplo: $3/M tokens → 3 créditos por token.",
"messages.modelCard.pricing.inputCachedTokens": "Entrada en caché {{amount}} créditos · ${{amount}}/M",
"messages.modelCard.pricing.inputCharts": "${{amount}}/M caracteres",
"messages.modelCard.pricing.inputMinutes": "${{amount}}/minuto",
"messages.modelCard.pricing.inputTokens": "Entrada {{amount}} créditos · ${{amount}}/M",
"messages.modelCard.pricing.outputTokens": "Salida {{amount}} créditos · ${{amount}}/M",
"messages.modelCard.pricing.writeCacheInputTokens": "Escritura en caché {{amount}} créditos · ${{amount}}/M",
"messages.tokenDetails.average": "Precio unitario promedio",
"messages.tokenDetails.input": "Entrada",
"messages.tokenDetails.inputAudio": "Entrada de audio",
"messages.tokenDetails.inputCached": "Entrada en caché",
"messages.tokenDetails.inputCitation": "Cita de entrada",
"messages.tokenDetails.inputText": "Entrada de texto",
"messages.tokenDetails.inputTitle": "Detalles de entrada",
"messages.tokenDetails.inputTool": "Herramienta de Uso de Entrada",
"messages.tokenDetails.inputUncached": "Entrada sin caché",
"messages.tokenDetails.inputWriteCached": "Escritura de caché de entrada",
"messages.tokenDetails.output": "Salida",
"messages.tokenDetails.outputAudio": "Salida de audio",
"messages.tokenDetails.outputImage": "Salida de imagen",
"messages.tokenDetails.outputText": "Salida de texto",
"messages.tokenDetails.outputTitle": "Detalles de salida",
"messages.tokenDetails.reasoning": "Razonamiento profundo",
"messages.tokenDetails.speed.tps.title": "TPS",
"messages.tokenDetails.speed.tps.tooltip": "Tokens por segundo (TPS). Indica la velocidad promedio del contenido generado por IA (tokens/segundo), calculado desde la recepción del primer token.",
"messages.tokenDetails.speed.ttft.title": "TTFT",
"messages.tokenDetails.speed.ttft.tooltip": "Tiempo hasta el primer token (TTFT). Es el intervalo desde que envías un mensaje hasta que el cliente recibe el primer token.",
"messages.tokenDetails.title": "Detalles de generación",
"messages.tokenDetails.total": "Consumo total",
"minimap.emptyPreview": "(Sin contenido de texto)",
"minimap.jumpToMessage": "Saltar al mensaje {{index}}",
"minimap.nextMessage": "Mensaje siguiente",
"minimap.previousMessage": "Mensaje anterior",
"minimap.senderAssistant": "Agente",
"minimap.senderUser": "Tú",
"newAgent": "Crear agente",
"newClaudeCodeAgent": "Añadir Claude Code",
"newGroupChat": "Crear grupo",
"newPage": "Crear página",
"noAgentsYet": "Este grupo aún no tiene miembros. Haz clic en el botón + para invitar agentes.",
"noAvailableAgents": "No hay miembros disponibles para invitar",
"noMatchingAgents": "No se encontraron miembros coincidentes",
"noMembersYet": "Este grupo aún no tiene miembros. Haz clic en el botón + para invitar agentes.",
"noSelectedAgents": "Aún no se han seleccionado miembros",
"openInNewWindow": "Abrir en una nueva ventana",
"operation.contextCompression": "Contexto demasiado largo, comprimiendo historial...",
"operation.execAgentRuntime": "Preparando respuesta",
"operation.execClientTask": "Ejecutando tarea",
"operation.execHeterogeneousAgent": "{{name}} está en ejecución",
"operation.execServerAgentRuntime": "Ejecutando… Puedes cambiar de tarea o cerrar la página; la tarea seguirá en curso.",
"operation.heterogeneousAgentFallback": "Agente externo",
"operation.sendMessage": "Enviando mensaje",
"owner": "Propietario del grupo",
"pageCopilot.title": "Agente de página",
"pageCopilot.welcome": "**Escritura más clara y precisa**\n\nRedacta, reescribe o mejora: dime tu intención y yo me encargo del resto.",
"pageSelection.lines": "Líneas {{start}}-{{end}}",
"pageSelection.reference": "Texto Seleccionado",
"pin": "Fijar",
"pinOff": "Desfijar",
"prompts.summaryExpert": "Como experto en resúmenes, por favor resume el siguiente contenido basándote en las indicaciones del sistema anteriores:",
"rag.referenceChunks": "Fuente de referencia",
"rag.userQuery.actions.delete": "Eliminar reescritura de consulta",
"rag.userQuery.actions.regenerate": "Regenerar consulta",
"regenerate": "Regenerar",
"roleAndArchive": "Perfil y historial del agente",
"runtimeEnv.mode.cloud": "Sandbox en la nube",
"runtimeEnv.mode.cloudDesc": "Ejecutar en un entorno seguro en la nube",
"runtimeEnv.mode.local": "Local",
"runtimeEnv.mode.localDesc": "Acceder a archivos y comandos locales",
"runtimeEnv.mode.none": "Desactivado",
"runtimeEnv.mode.noneDesc": "Deshabilitar el entorno de ejecución",
"runtimeEnv.selectMode": "Seleccionar entorno de ejecución",
"runtimeEnv.title": "Entorno de ejecución",
"search.grounding.imageSearchQueries": "Palabras Clave de Búsqueda de Imágenes",
"search.grounding.imageTitle": "Se encontraron {{count}} imágenes",
"search.grounding.searchQueries": "Palabras clave de búsqueda",
"search.grounding.title": "{{count}} resultados encontrados",
"search.mode.auto.desc": "Buscar en la web automáticamente cuando sea necesario.",
"search.mode.auto.title": "Automático",
"search.mode.off.desc": "Desactivar acceso a la web.",
"search.mode.off.title": "Desactivado",
"search.mode.on.desc": "Buscar siempre en la web la información más reciente.",
"search.mode.on.title": "Siempre activo",
"search.mode.useModelBuiltin": "Usar búsqueda web integrada del modelo",
"search.searchModel.desc": "El modelo actual no admite llamadas a funciones, por lo que debe emparejarse con uno que sí las admita para búsquedas en línea.",
"search.searchModel.title": "Modelo auxiliar de búsqueda",
"search.title": "Búsqueda web",
"searchAgentPlaceholder": "Buscar agentes...",
"searchAgents": "Buscar agentes...",
"selectedAgents": "Agentes seleccionados",
"sendPlaceholder": "Pregunta, crea o inicia una tarea, <hotkey><hotkey/>",
"sendPlaceholderHeterogeneous": "Pide a {{name}} que realice una tarea...",
"sendPlaceholderWithAgentAssignment": "Pregunta, crea o inicia una tarea. Usa @ para asignar tareas a otros agentes.",
"sessionGroup.config": "Gestión de grupos",
"sessionGroup.confirmRemoveGroupAlert": "Este grupo está a punto de eliminarse. Después de la eliminación, los agentes de este grupo se moverán a la lista predeterminada. Por favor, confirma tu acción.",
"sessionGroup.createAgentSuccess": "Agente creado con éxito",
"sessionGroup.createGroup": "Agregar nuevo grupo",
"sessionGroup.createGroupFailed": "Error al crear el grupo",
"sessionGroup.createGroupSuccess": "Grupo creado con éxito",
"sessionGroup.createSuccess": "Creado con éxito",
"sessionGroup.creatingAgent": "Creando agente...",
"sessionGroup.groupName": "Nombre del grupo",
"sessionGroup.inputPlaceholder": "Introduce el nombre del grupo...",
"sessionGroup.moveGroup": "Mover al grupo",
"sessionGroup.newGroup": "Nuevo grupo",
"sessionGroup.noAvailableAgents": "No hay agentes disponibles",
"sessionGroup.noMatchingAgents": "No se encontraron agentes coincidentes",
"sessionGroup.noSelectedAgents": "Por favor selecciona agentes",
"sessionGroup.rename": "Renombrar grupo",
"sessionGroup.renameSuccess": "Renombrado con éxito",
"sessionGroup.searchAgents": "Buscar agentes",
"sessionGroup.selectedAgents": "Agentes seleccionados ({{count}})",
"sessionGroup.sortSuccess": "Reordenado con éxito",
"sessionGroup.sorting": "Actualizando orden del grupo...",
"sessionGroup.tooLong": "El nombre del grupo debe tener entre 1 y 20 caracteres",
"shareModal.copy": "Copiar",
"shareModal.copyLink": "Copiar enlace",
"shareModal.copyLinkSuccess": "Enlace copiado",
"shareModal.download": "Descargar captura",
"shareModal.downloadError": "Error al descargar",
"shareModal.downloadFile": "Descargar archivo",
"shareModal.downloadPdf": "Descargar PDF",
"shareModal.downloadSuccess": "Descarga exitosa",
"shareModal.exportMode.full": "Predeterminado",
"shareModal.exportMode.label": "Modo de exportación",
"shareModal.exportMode.simple": "Compatible con OpenAI",
"shareModal.exportPdf": "Exportar como PDF",
"shareModal.exportTitle": "Título predeterminado",
"shareModal.generatePdf": "Generar PDF",
"shareModal.generatingPdf": "Generando PDF...",
"shareModal.imageType": "Formato de imagen",
"shareModal.includeTool": "Incluir mensajes de habilidades",
"shareModal.includeUser": "Incluir mensajes del usuario",
"shareModal.link": "Enlace",
"shareModal.link.linkHint": "Cualquiera con el enlace puede ver este tema",
"shareModal.link.noTopic": "Inicia una conversación primero para compartir",
"shareModal.link.permissionLink": "Cualquiera con el enlace",
"shareModal.link.permissionPrivate": "Privado",
"shareModal.link.privateHint": "Solo tú puedes acceder a este enlace",
"shareModal.link.updateError": "No se pudo actualizar la configuración de compartición",
"shareModal.link.visibilityUpdated": "Visibilidad actualizada",
"shareModal.loadingPdf": "Cargando PDF...",
"shareModal.noPdfData": "No hay datos PDF disponibles",
"shareModal.pdf": "PDF",
"shareModal.pdfErrorDescription": "Ocurrió un error al generar el PDF, por favor intenta de nuevo",
"shareModal.pdfGenerationError": "Error al generar el PDF",
"shareModal.pdfReady": "PDF listo",
"shareModal.popover.moreOptions": "Más opciones para compartir",
"shareModal.popover.privacyWarning.confirm": "Entiendo, continuar",
"shareModal.popover.privacyWarning.content": "Asegúrate de que tu conversación no contenga información personal o sensible. Eres responsable del contenido que decidas compartir y de sus consecuencias.",
"shareModal.popover.privacyWarning.doNotShowAgain": "No mostrar esto de nuevo",
"shareModal.popover.privacyWarning.title": "Aviso de privacidad",
"shareModal.popover.title": "Compartir tema",
"shareModal.popover.visibility": "Visibilidad",
"shareModal.regeneratePdf": "Regenerar PDF",
"shareModal.screenshot": "Captura de pantalla",
"shareModal.settings": "Configuración de exportación",
"shareModal.text": "Texto",
"shareModal.widthMode.label": "Modo de ancho",
"shareModal.widthMode.narrow": "Estrecho",
"shareModal.widthMode.wide": "Ancho",
"shareModal.withBackground": "Incluir imagen de fondo",
"shareModal.withFooter": "Incluir pie de página",
"shareModal.withPluginInfo": "Incluir información de habilidades",
"shareModal.withRole": "Incluir rol del mensaje",
"shareModal.withSystemRole": "Incluir perfil del agente",
"sharePage.actions.findMord": "Buscar más",
"sharePage.actions.tryItYourself": "Pruébalo tú mismo",
"sharePage.error.forbidden.subtitle": "Este contenido compartido es privado y no está accesible.",
"sharePage.error.forbidden.title": "Acceso denegado",
"sharePage.error.notFound.subtitle": "Este tema no existe o ha sido eliminado.",
"sharePage.error.notFound.title": "Tema no encontrado",
"sharePage.error.unauthorized.action": "Iniciar sesión",
"sharePage.error.unauthorized.subtitle": "Por favor, inicia sesión para ver este tema compartido.",
"sharePage.error.unauthorized.title": "Inicio de sesión requerido",
"sharePageDisclaimer": "Este contenido ha sido compartido por un usuario y no representa las opiniones de LobeHub. LobeHub no se hace responsable de las consecuencias derivadas de este contenido compartido.",
"stt.action": "Entrada por voz",
"stt.loading": "Reconociendo...",
"stt.prettifying": "Puliendo...",
"supervisor.label": "Supervisor",
"supervisor.todoList.allComplete": "Todas las tareas completadas",
"supervisor.todoList.title": "Tareas completadas",
"tab.groupProfile": "Perfil del grupo",
"tab.integration": "Integración",
"tab.profile": "Perfil del agente",
"tab.search": "Buscar",
"tab.tasks": "Tareas",
"task.activity.calling": "Llamando habilidad...",
"task.activity.clientExecuting": "Ejecutando localmente...",
"task.activity.generating": "Generando respuesta...",
"task.activity.gotResult": "Resultado de herramienta recibido",
"task.activity.toolCalling": "Llamando a {{toolName}}...",
"task.activity.toolResult": "Resultado de {{toolName}} recibido",
"task.batchTasks": "{{count}} subtareas en lote",
"task.groupTasks": "{{count}} Tareas Paralelas",
"task.groupTasksTitle": "{{agents}} y {{count}} tareas de agentes",
"task.groupTasksTitleSimple": "{{agents}} {{count}} tareas",
"task.instruction": "Instrucciones de la tarea",
"task.intermediateSteps": "{{count}} pasos intermedios",
"task.metrics.duration": "(duró {{duration}})",
"task.metrics.stepsShort": "pasos",
"task.metrics.toolCallsShort": "usos de herramientas",
"task.status.cancelled": "Tarea cancelada",
"task.status.failed": "Tarea fallida",
"task.status.fetchingDetails": "Obteniendo detalles...",
"task.status.initializing": "Inicializando tarea...",
"task.subtask": "Subtarea",
"task.title": "Tareas",
"taskDetail.activities": "Actividades",
"taskDetail.activities.agentTag": "Agente",
"taskDetail.activities.fallback.brief": "publicó un informe",
"taskDetail.activities.fallback.comment": "dejó un comentario",
"taskDetail.activities.fallback.created": "creó la tarea",
"taskDetail.activities.fallback.topic": "inició un tema",
"taskDetail.activitiesEmpty": "Aún no hay actividad",
"taskDetail.addSubtask": "Añadir subtarea",
"taskDetail.blockedBy": "Bloqueado por {{id}}",
"taskDetail.comment.cancel": "Cancelar",
"taskDetail.comment.delete": "Eliminar",
"taskDetail.comment.deleteConfirm.content": "Este comentario se eliminará permanentemente.",
"taskDetail.comment.deleteConfirm.ok": "Eliminar",
"taskDetail.comment.deleteConfirm.title": "¿Eliminar este comentario?",
"taskDetail.comment.edit": "Editar",
"taskDetail.comment.save": "Guardar",
"taskDetail.commentPlaceholder": "Deja un comentario...",
"taskDetail.deleteConfirm.content": "Esta acción no se puede deshacer.",
"taskDetail.deleteConfirm.ok": "Eliminar",
"taskDetail.deleteConfirm.title": "¿Eliminar esta tarea?",
"taskDetail.instruction": "Instrucción",
"taskDetail.instructionPlaceholder": "Haz clic para editar las instrucciones de la tarea...",
"taskDetail.latestActivity.brief": "Informe: {{title}}",
"taskDetail.latestActivity.briefOnly": "Informe",
"taskDetail.latestActivity.briefWithAction": "{{title}} - {{action}}",
"taskDetail.latestActivity.briefWithType": "Informe ({{type}}): {{title}}",
"taskDetail.latestActivity.briefWithTypeOnly": "Informe ({{type}})",
"taskDetail.latestActivity.topic": "Tema: {{title}}",
"taskDetail.latestActivity.topicWithSeq": "Tema #{{seq}}: {{title}}",
"taskDetail.latestActivity.untitledTopic": "Tema sin título",
"taskDetail.modelConfig": "Anulación de modelo",
"taskDetail.navigation": "Navegación",
"taskDetail.pauseTask": "Pausar tarea",
"taskDetail.priority.high": "Alta",
"taskDetail.priority.low": "Baja",
"taskDetail.priority.none": "Sin prioridad",
"taskDetail.priority.normal": "Normal",
"taskDetail.priority.urgent": "Urgente",
"taskDetail.properties": "Propiedades",
"taskDetail.reassignDisabled": "No se puede reasignar el agente mientras la tarea está en ejecución",
"taskDetail.rerunTask": "Volver a ejecutar la tarea",
"taskDetail.runTask": "Ejecutar tarea",
"taskDetail.saveModelConfig": "Guardar",
"taskDetail.status.backlog": "En espera",
"taskDetail.status.canceled": "Cancelada",
"taskDetail.status.completed": "Completada",
"taskDetail.status.failed": "Fallida",
"taskDetail.status.paused": "Pausada",
"taskDetail.status.running": "En progreso",
"taskDetail.stopTask": "Detener tarea",
"taskDetail.subIssueOf": "Subtarea de",
"taskDetail.subtaskInstructionPlaceholder": "Describe la subtarea...",
"taskDetail.subtasks": "Subtareas",
"taskDetail.titlePlaceholder": "Introduce el título de la tarea...",
"taskDetail.topicDrawer.untitled": "Sin título",
"taskDetail.updateFailed": "Error al actualizar la tarea",
"taskList.activeTasks": "Tareas Activas",
"taskList.all": "Todas las tareas",
"taskList.breadcrumb.task": "Tarea",
"taskList.empty": "Aún no hay tareas",
"taskList.form.grouping": "Agrupación",
"taskList.form.orderCompletedByRecency": "Ordenar tareas completadas por antigüedad",
"taskList.form.ordering": "Ordenación",
"taskList.form.subGrouping": "Subagrupación",
"taskList.groupBy.assignee": "Asignado a",
"taskList.groupBy.none": "Sin agrupación",
"taskList.groupBy.priority": "Prioridad",
"taskList.groupBy.status": "Estado",
"taskList.orderBy.assignee": "Asignado a",
"taskList.orderBy.createdAt": "Creada el",
"taskList.orderBy.priority": "Prioridad",
"taskList.orderBy.status": "Estado",
"taskList.orderBy.title": "Título",
"taskList.orderBy.updatedAt": "Actualizada el",
"taskList.title": "Tareas",
"taskList.unassigned": "Sin asignar",
"taskList.view.board": "Tablero",
"taskList.view.list": "Lista",
"taskList.viewAll": "Ver todo",
"taskSchedule.clear": "Borrar",
"taskSchedule.enable": "Habilitar automatización",
"taskSchedule.every": "Cada",
"taskSchedule.hours": "Horas",
"taskSchedule.interval": "Recurrente",
"taskSchedule.intervalTab": "Recurrente",
"taskSchedule.minutes": "Minutos",
"taskSchedule.scheduler": "Programador",
"taskSchedule.schedulerNotReady": "El programador estará disponible pronto. Usa Recurrente por ahora.",
"taskSchedule.schedulerTab": "Programador",
"taskSchedule.seconds": "Segundos",
"taskSchedule.tag.add": "Configurar programación",
"taskSchedule.tag.every": "cada {{interval}}",
"taskSchedule.tag.heartbeat": "Latido · {{every}}",
"taskSchedule.tag.schedule": "Programación · {{schedule}}{{timezone}}",
"taskSchedule.title": "Programación",
"taskSchedule.unit.hour_one": "{{count}} hora",
"taskSchedule.unit.hour_other": "{{count}} horas",
"taskSchedule.unit.minute_one": "{{count}} minuto",
"taskSchedule.unit.minute_other": "{{count}} minutos",
"taskSchedule.unit.second_one": "{{count}} segundo",
"taskSchedule.unit.second_other": "{{count}} segundos",
"thread.closeSubagentThread": "Contraer conversación del subagente",
"thread.divider": "Subtema",
"thread.openSubagentThread": "Ver conversación completa del subagente",
"thread.subagentBadge": "Subagente",
"thread.threadMessageCount": "{{messageCount}} mensajes",
"thread.title": "Subtema",
"todoProgress.allCompleted": "Todas las tareas completadas",
"todoProgress.title": "Tareas",
"toggleWideScreen.off": "Desactivar modo de pantalla ancha",
"toggleWideScreen.on": "Activar modo de pantalla ancha",
"tokenDetails.chats": "Mensajes del chat",
"tokenDetails.historySummary": "Resumen del historial",
"tokenDetails.rest": "Restante",
"tokenDetails.supervisor": "Anfitrión del grupo",
"tokenDetails.systemRole": "Configuración de rol",
"tokenDetails.title": "Detalles del contexto",
"tokenDetails.tools": "Configuración de habilidades",
"tokenDetails.total": "Total disponible",
"tokenDetails.used": "Total usado",
"tokenTag.overload": "Límite excedido",
"tokenTag.remained": "Restante",
"tokenTag.used": "Usado",
"tool.intervention.approvalMode": "Modo de aprobación",
"tool.intervention.approve": "Aprobar",
"tool.intervention.approveAndRemember": "Aprobar y recordar",
"tool.intervention.approveOnce": "Aprobar solo esta vez",
"tool.intervention.mode.allowList": "Lista permitida",
"tool.intervention.mode.allowListDesc": "Ejecutar automáticamente solo herramientas aprobadas",
"tool.intervention.mode.autoRun": "Aprobación automática",
"tool.intervention.mode.autoRunDesc": "Aprobar automáticamente todas las ejecuciones de herramientas",
"tool.intervention.mode.manual": "Manual",
"tool.intervention.mode.manualDesc": "Requiere aprobación manual para cada invocación",
"tool.intervention.onboarding.agentIdentity.applyHint": "La nueva identidad aparecerá después de la aprobación.",
"tool.intervention.onboarding.agentIdentity.description": "Aprobar este cambio actualiza el Agente mostrado en la Bandeja de entrada y en esta conversación de incorporación.",
"tool.intervention.onboarding.agentIdentity.emoji": "Avatar del agente",
"tool.intervention.onboarding.agentIdentity.eyebrow": "Aprobación de incorporación",
"tool.intervention.onboarding.agentIdentity.name": "Nombre del agente",
"tool.intervention.onboarding.agentIdentity.targetInbox": "Agente de la bandeja de entrada",
"tool.intervention.onboarding.agentIdentity.targetOnboarding": "Agente de incorporación actual",
"tool.intervention.onboarding.agentIdentity.targets": "Se aplica a",
"tool.intervention.onboarding.agentIdentity.title": "Confirmar actualización de identidad del agente",
"tool.intervention.pending": "Pendiente",
"tool.intervention.reject": "Rechazar",
"tool.intervention.rejectAndContinue": "Rechazar e intentar de nuevo",
"tool.intervention.rejectOnly": "Rechazar",
"tool.intervention.rejectReasonPlaceholder": "Una razón ayuda al agente a entender tus límites y mejorar sus acciones futuras",
"tool.intervention.rejectTitle": "Rechazar esta llamada de habilidad",
"tool.intervention.rejectedWithReason": "Esta llamada de habilidad fue rechazada: {{reason}}",
"tool.intervention.scrollToIntervention": "Ver",
"tool.intervention.toolAbort": "Cancelaste esta llamada de habilidad",
"tool.intervention.toolRejected": "Esta llamada de habilidad fue rechazada",
"tool.intervention.viewParameters": "Ver parámetros ({{count}})",
"toolAuth.authorize": "Autorizar",
"toolAuth.authorizing": "Autorizando...",
"toolAuth.hint": "Sin autorización o configuración, las habilidades pueden no funcionar. Esto puede limitar al agente o causar errores.",
"toolAuth.signIn": "Iniciar sesión",
"toolAuth.title": "Autorizar habilidades para este agente",
"topic.checkOpenNewTopic": "¿Iniciar un nuevo tema?",
"topic.checkSaveCurrentMessages": "¿Deseas guardar la conversación actual como un tema?",
"topic.defaultTitle": "Tema sin título",
"topic.openNewTopic": "Abrir nuevo tema",
"topic.recent": "Temas recientes",
"topic.saveCurrentMessages": "Guardar sesión actual como tema",
"topic.viewAll": "Ver todos los temas",
"translate.action": "Traducir",
"translate.clear": "Borrar traducción",
"tts.action": "Texto a voz",
"tts.clear": "Borrar voz",
"untitledAgent": "Agente sin título",
"untitledGroup": "Grupo sin título",
"updateAgent": "Actualizar información del agente",
"upload.action.fileUpload": "Subir archivo",
"upload.action.folderUpload": "Subir carpeta",
"upload.action.imageDisabled": "El modelo actual no admite reconocimiento visual. Cambia de modelo para usar esta función.",
"upload.action.imageUpload": "Subir imagen",
"upload.action.tooltip": "Subir",
"upload.clientMode.actionFiletip": "Subir archivo",
"upload.clientMode.actionTooltip": "Subir",
"upload.clientMode.disabled": "El modelo actual no admite reconocimiento visual ni análisis de archivos. Cambia de modelo para usar esta función.",
"upload.clientMode.fileNotSupported": "La carga de archivos no está permitida en modo navegador; solo se permiten imágenes.",
"upload.clientMode.visionNotSupported": "El modelo actual no admite reconocimiento visual. Cambia a otro modelo para usar esta función.",
"upload.preview.prepareTasks": "Preparando fragmentos...",
"upload.preview.status.pending": "Preparando para subir...",
"upload.preview.status.processing": "Procesando archivo...",
"upload.validation.videoSizeExceeded": "El tamaño del archivo de video no debe superar los 20MB. Tamaño actual: {{actualSize}}.",
"viewMode.fullWidth": "Ancho completo",
"viewMode.normal": "Estándar",
"viewMode.wideScreen": "Pantalla ancha",
"workflow.awaitingConfirmation": "Esperando tu confirmación",
"workflow.collapse": "Contraer",
"workflow.expandFull": "Expandir completamente",
"workflow.failedSuffix": "(fallido)",
"workflow.summaryFailed": "{{count}} fallos",
"workflow.summaryMoreTools": "{{count}} tipos de herramientas",
"workflow.summaryTotalCalls": "{{count}} llamadas en total",
"workflow.thoughtForDuration": "Reflexionó durante {{duration}}",
"workflow.toolDisplayName.activateDevice": "Dispositivo activado",
"workflow.toolDisplayName.activateSkill": "Activó una habilidad",
"workflow.toolDisplayName.activateTools": "Herramientas activadas",
"workflow.toolDisplayName.addActivityMemory": "Memoria guardada",
"workflow.toolDisplayName.addContextMemory": "Memoria guardada",
"workflow.toolDisplayName.addExperienceMemory": "Memoria guardada",
"workflow.toolDisplayName.addIdentityMemory": "Memoria guardada",
"workflow.toolDisplayName.addPreferenceMemory": "Memoria guardada",
"workflow.toolDisplayName.calculate": "Calculado",
"workflow.toolDisplayName.callAgent": "Agente llamado",
"workflow.toolDisplayName.clearTodos": "Tareas borradas",
"workflow.toolDisplayName.copyDocument": "Copió un documento",
"workflow.toolDisplayName.crawlMultiPages": "Páginas rastreadas",
"workflow.toolDisplayName.crawlSinglePage": "Página rastreada",
"workflow.toolDisplayName.createAgent": "Agente creado",
"workflow.toolDisplayName.createDocument": "Documento creado",
"workflow.toolDisplayName.createPlan": "Plan creado",
"workflow.toolDisplayName.createTodos": "Tareas creadas",
"workflow.toolDisplayName.deleteAgent": "Eliminó un agente",
"workflow.toolDisplayName.deleteDocument": "Documento eliminado",
"workflow.toolDisplayName.editDocument": "Editó un documento",
"workflow.toolDisplayName.editLocalFile": "Editó un archivo",
"workflow.toolDisplayName.editTitle": "Título editado",
"workflow.toolDisplayName.evaluate": "Expresión evaluada",
"workflow.toolDisplayName.execScript": "Ejecutó un script",
"workflow.toolDisplayName.execTask": "Ejecutó una tarea",
"workflow.toolDisplayName.execTasks": "Tareas ejecutadas",
"workflow.toolDisplayName.execute": "Cálculo ejecutado",
"workflow.toolDisplayName.executeCode": "Código ejecutado",
"workflow.toolDisplayName.finishOnboarding": "Incorporación finalizada",
"workflow.toolDisplayName.getCommandOutput": "Leer la salida del comando",
"workflow.toolDisplayName.getDocument": "Leer un documento",
"workflow.toolDisplayName.getOnboardingState": "Estado de incorporación verificado",
"workflow.toolDisplayName.getPageContent": "Leer el contenido de la página",
"workflow.toolDisplayName.getTopicContext": "Leer el contexto del tema",
"workflow.toolDisplayName.globLocalFiles": "Archivos buscados",
"workflow.toolDisplayName.grepContent": "Contenido buscado",
"workflow.toolDisplayName.importFromMarket": "Importado desde el mercado",
"workflow.toolDisplayName.importSkill": "Importó una habilidad",
"workflow.toolDisplayName.initPage": "Página inicializada",
"workflow.toolDisplayName.killCommand": "Comando detenido",
"workflow.toolDisplayName.listDocuments": "Documentos listados",
"workflow.toolDisplayName.listLocalFiles": "Archivos listados",
"workflow.toolDisplayName.listOnlineDevices": "Dispositivos listados",
"workflow.toolDisplayName.modifyNodes": "Página modificada",
"workflow.toolDisplayName.moveLocalFiles": "Archivos movidos",
"workflow.toolDisplayName.readDocument": "Leer un documento",
"workflow.toolDisplayName.readDocumentByFilename": "Leer un documento",
"workflow.toolDisplayName.readKnowledge": "Leer conocimientos",
"workflow.toolDisplayName.readLocalFile": "Leer un archivo",
"workflow.toolDisplayName.removeDocument": "Eliminó un documento",
"workflow.toolDisplayName.removeIdentityMemory": "Memoria eliminada",
"workflow.toolDisplayName.renameDocument": "Renombró un documento",
"workflow.toolDisplayName.renameLocalFile": "Se ha renombrado un archivo",
"workflow.toolDisplayName.replaceText": "Texto reemplazado",
"workflow.toolDisplayName.runCommand": "Ejecutó un comando",
"workflow.toolDisplayName.search": "Buscó en la web",
"workflow.toolDisplayName.searchAgent": "Agentes buscados",
"workflow.toolDisplayName.searchKnowledgeBase": "Base de conocimientos consultada",
"workflow.toolDisplayName.searchLocalFiles": "Archivos buscados",
"workflow.toolDisplayName.searchSkill": "Habilidades buscadas",
"workflow.toolDisplayName.searchUserMemory": "Memoria consultada",
"workflow.toolDisplayName.solve": "Ecuación resuelta",
"workflow.toolDisplayName.updateAgent": "Agente actualizado",
"workflow.toolDisplayName.updateDocument": "Actualizó un documento",
"workflow.toolDisplayName.updateIdentityMemory": "Memoria actualizada",
"workflow.toolDisplayName.updateLoadRule": "Regla de carga actualizada",
"workflow.toolDisplayName.updatePlan": "Plan actualizado",
"workflow.toolDisplayName.updateTodos": "Tareas actualizadas",
"workflow.toolDisplayName.upsertDocumentByFilename": "Actualizó un documento",
"workflow.toolDisplayName.writeLocalFile": "Se escribió un archivo",
"workflow.working": "Trabajando...",
"workingPanel.agentDocuments": "Agent Documents",
"workingPanel.documents.close": "Close",
"workingPanel.documents.discard": "Discard",
"workingPanel.documents.edit": "Edit",
"workingPanel.documents.error": "Failed to load document",
"workingPanel.documents.loading": "Loading document...",
"workingPanel.documents.preview": "Preview",
"workingPanel.documents.save": "Save",
"workingPanel.documents.saved": "All changes saved",
"workingPanel.documents.title": "Document",
"workingPanel.documents.unsaved": "Unsaved changes",
"workingPanel.progress": "Progress",
"workingPanel.progress.allCompleted": "All tasks completed",
"workingPanel.resources": "Resources",
"workingPanel.resources.deleteConfirm": "This action cannot be undone.",
"workingPanel.resources.deleteError": "Failed to delete document",
"workingPanel.resources.deleteSuccess": "Document deleted",
"workingPanel.resources.deleteTitle": "Delete document?",
"workingPanel.resources.empty": "Aún no hay documentos. Los documentos asociados con este agente aparecerán aquí.",
"workingPanel.resources.error": "Failed to load resources",
"workingPanel.resources.filter.all": "Todo",
"workingPanel.resources.filter.documents": "Documentos",
"workingPanel.resources.filter.web": "Web",
"workingPanel.resources.loading": "Loading resources...",
"workingPanel.resources.previewError": "Failed to load preview",
"workingPanel.resources.previewLoading": "Loading preview...",
"workingPanel.resources.renameEmpty": "Title cannot be empty",
"workingPanel.resources.renameError": "Failed to rename document",
"workingPanel.resources.renameSuccess": "Document renamed",
"workingPanel.resources.viewMode.list": "Vista de lista",
"workingPanel.resources.viewMode.tree": "Vista de árbol",
"workingPanel.title": "Working Panel",
"you": "Tú",
"zenMode": "Modo Zen"
}