@cat-factory/app 0.46.10 → 0.46.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/app/components/auth/AuthGate.vue +2 -1
  2. package/app/components/auth/LoginScreen.vue +41 -31
  3. package/app/components/auth/ResetPasswordScreen.vue +16 -13
  4. package/app/components/auth/UserMenu.vue +3 -2
  5. package/app/components/layout/AccountDeploymentSettings.vue +75 -32
  6. package/app/components/layout/AccountFragmentSettings.vue +2 -3
  7. package/app/components/layout/AccountTeamSettings.vue +75 -45
  8. package/app/components/layout/AiProvidersBanner.vue +11 -11
  9. package/app/components/layout/BoardSwitcher.vue +63 -29
  10. package/app/components/layout/CommandBar.vue +68 -54
  11. package/app/components/layout/GitHubPatBanner.vue +13 -6
  12. package/app/components/layout/IntegrationBackTitle.vue +4 -1
  13. package/app/components/layout/IntegrationsHub.vue +67 -49
  14. package/app/components/layout/NotificationsInbox.vue +48 -19
  15. package/app/components/layout/PersonalSetupModal.vue +26 -16
  16. package/app/components/layout/ProviderConfigBanner.vue +14 -9
  17. package/app/components/layout/SideBar.vue +20 -18
  18. package/app/components/layout/SpendWarningBanner.vue +16 -16
  19. package/app/components/observability/StepMetricsBar.vue +31 -11
  20. package/app/components/observability/StepModelActivity.vue +3 -2
  21. package/app/components/panels/AgentStepDetail.vue +52 -39
  22. package/app/components/panels/DecisionModal.vue +12 -5
  23. package/app/components/panels/GenericStructuredResultView.vue +16 -6
  24. package/app/components/panels/InspectorPanel.vue +35 -28
  25. package/app/components/panels/ObservabilityPanel.vue +92 -49
  26. package/app/components/panels/StepMetadataCard.vue +87 -30
  27. package/app/components/panels/StepRestartControl.vue +4 -3
  28. package/app/components/panels/StepRunMeta.vue +23 -10
  29. package/app/components/panels/StepTestReport.vue +14 -11
  30. package/app/components/panels/inspector/ContainerSummary.vue +25 -14
  31. package/app/components/panels/inspector/EpicChildren.vue +7 -4
  32. package/app/components/panels/inspector/RecurringScheduleSettings.vue +60 -19
  33. package/app/components/panels/inspector/ServiceFragments.vue +3 -2
  34. package/app/components/panels/inspector/ServiceReleaseHealthConfig.vue +18 -13
  35. package/app/components/panels/inspector/ServiceTestConfig.vue +50 -39
  36. package/app/components/panels/inspector/TaskAgentConfig.vue +6 -5
  37. package/app/components/panels/inspector/TaskDependencies.vue +9 -4
  38. package/app/components/panels/inspector/TaskEstimateBadge.vue +14 -13
  39. package/app/components/panels/inspector/TaskExecution.vue +65 -31
  40. package/app/components/panels/inspector/TaskRunSettings.vue +93 -56
  41. package/app/components/panels/inspector/TaskStructure.vue +5 -4
  42. package/app/components/providers/PersonalSubscriptionSection.vue +1 -2
  43. package/i18n/locales/en.json +814 -0
  44. package/i18n/locales/es.json +811 -0
  45. package/i18n/locales/fr.json +811 -0
  46. package/i18n/locales/pl.json +811 -0
  47. package/i18n/locales/uk.json +811 -0
  48. package/package.json +1 -1
@@ -308,5 +308,816 @@
308
308
  "step3": "Copia todo el contenido de auth.json, pégalo abajo y elige una contraseña personal para protegerlo."
309
309
  }
310
310
  }
311
+ },
312
+ "inspector": {
313
+ "container": {
314
+ "modules": "Módulos ({count})",
315
+ "taskCount": "{count} tarea | {count} tareas",
316
+ "allTasks": "Todas las tareas ({count})",
317
+ "tasks": "Tareas ({count})",
318
+ "addTask": "Añadir tarea",
319
+ "noTasks": "Aún no hay tareas. Añade una para empezar a trabajar.",
320
+ "servicesHint": "Los servicios son de larga duración y no se completan. El trabajo ocurre en sus tareas y módulos."
321
+ },
322
+ "epicChildren": {
323
+ "title": "Tareas de la épica",
324
+ "doneCount": "{done}/{total} completadas",
325
+ "empty": "Aún no hay tareas en esta épica. Importa las hijas de una épica o asigna la épica de una tarea.",
326
+ "unassigned": "Sin asignar"
327
+ },
328
+ "recurring": {
329
+ "title": "Pipeline recurrente",
330
+ "active": "Activo",
331
+ "paused": "Pausado",
332
+ "intervalDays": "{count}d",
333
+ "intervalHours": "{count}h",
334
+ "anyDay": "cualquier día",
335
+ "cadence": "Cada {every} · {days}{window} · {timezone}",
336
+ "weekdays": {
337
+ "sun": "Dom",
338
+ "mon": "Lun",
339
+ "tue": "Mar",
340
+ "wed": "Mié",
341
+ "thu": "Jue",
342
+ "fri": "Vie",
343
+ "sat": "Sáb"
344
+ },
345
+ "nextRun": "Próxima ejecución: {time}",
346
+ "runNow": "Ejecutar ahora",
347
+ "pause": "Pausar",
348
+ "resume": "Reanudar",
349
+ "editCadence": "Editar cadencia",
350
+ "recentRuns": "Ejecuciones recientes",
351
+ "runStatus": {
352
+ "running": "En ejecución",
353
+ "done": "Completada",
354
+ "failed": "Fallida",
355
+ "skipped": "Omitida"
356
+ },
357
+ "updateFailed": "No se pudo actualizar la programación",
358
+ "runNowFailed": "No se pudo ejecutar ahora"
359
+ },
360
+ "fragments": {
361
+ "serviceTitle": "Buenas prácticas del servicio",
362
+ "serviceEmpty": "Ninguna. Los agentes que conocen el código en este servicio siguen su guía predeterminada."
363
+ },
364
+ "releaseHealth": {
365
+ "title": "Salud posterior al lanzamiento",
366
+ "clear": "Limpiar",
367
+ "connectPrompt": "Conecta una integración de observabilidad para vigilar este servicio tras los lanzamientos.",
368
+ "connectFirst": "Conecta primero una integración de observabilidad",
369
+ "connect": "Conectar",
370
+ "hint": "Los monitores y SLO que la verificación vigila después de que este servicio se publique. Separa los ids con comas.",
371
+ "monitorIds": "Ids de monitores",
372
+ "sloIds": "Ids de SLO",
373
+ "envTag": "Etiqueta de entorno (opcional)",
374
+ "saveMonitoring": "Guardar monitoreo",
375
+ "savedToast": "Monitoreo guardado",
376
+ "saveFailed": "No se pudo guardar la asignación",
377
+ "clearFailed": "No se pudo limpiar la asignación"
378
+ },
379
+ "testConfig": {
380
+ "title": "Infraestructura de pruebas",
381
+ "defaultEnv": "Entorno de pruebas predeterminado",
382
+ "defaultEnvHint": "El entorno predeterminado con el que se generan las tareas de este servicio. Cada tarea puede anularlo en su configuración de agente.",
383
+ "env": {
384
+ "ephemeral": "Entorno efímero",
385
+ "ephemeralHint": "las pruebas se ejecutan contra un entorno aprovisionado",
386
+ "local": "Local (docker-compose)",
387
+ "localHint": "el Tester levanta las dependencias localmente"
388
+ },
389
+ "composePath": "Ruta de docker-compose",
390
+ "browseRepo": "Explorar el repositorio en busca del archivo de compose",
391
+ "composeHint": "Lo usa el Tester para levantar localmente las dependencias del servicio.",
392
+ "selectComposeTitle": "Selecciona el archivo docker-compose",
393
+ "selectComposeHint": "Elige el archivo de compose en el repositorio. Su ruta se guarda relativa a la raíz del repo.",
394
+ "selected": "Seleccionado: {path}",
395
+ "noFileSelected": "Ningún archivo seleccionado.",
396
+ "useThisFile": "Usar este archivo",
397
+ "noInfra": "Sin dependencias de infraestructura (el Tester no levanta nada)",
398
+ "missingInfra": "Define una ruta de docker-compose o habilita sin dependencias de infraestructura; de lo contrario, un pipeline con un Tester no se iniciará.",
399
+ "provisioningTitle": "Aprovisionamiento del entorno efímero",
400
+ "provisioningHint": "Una indicación para aprovisionar el entorno de pruebas efímero de este servicio: en qué proveedor de nube desplegar y qué tamaño de instancia solicitar. Se ignora en las pruebas locales (docker-compose).",
401
+ "cloudProvider": "Proveedor de nube",
402
+ "instanceSize": "Tamaño de instancia",
403
+ "providers": {
404
+ "docker": "Docker (local)",
405
+ "custom": "Personalizado"
406
+ },
407
+ "sizes": {
408
+ "small": "Pequeño",
409
+ "medium": "Mediano",
410
+ "large": "Grande",
411
+ "xlarge": "Extra grande"
412
+ }
413
+ },
414
+ "agentConfig": {
415
+ "title": "Configuración del agente",
416
+ "inherited": "heredado del servicio",
417
+ "frozen": "Congelado: el agente ya ha comenzado"
418
+ },
419
+ "dependencies": {
420
+ "title": "Depende de",
421
+ "merged": "Fusionado",
422
+ "notMerged": "Aún sin fusionar",
423
+ "empty": "Sin dependencias. Puede ejecutarse en cualquier momento.",
424
+ "blocked": "Bloqueado hasta que se fusionen las dependencias."
425
+ },
426
+ "estimate": {
427
+ "title": "Estimación",
428
+ "complexity": "Complejidad",
429
+ "risk": "Riesgo",
430
+ "impact": "Impacto"
431
+ },
432
+ "execution": {
433
+ "stage": {
434
+ "incorporating": "Incorporando…",
435
+ "reviewing": "Revisando de nuevo…",
436
+ "recommending": "Recomendando…"
437
+ },
438
+ "prNumber": "PR n.º {number}",
439
+ "pullRequest": "Pull request",
440
+ "stepState": {
441
+ "pending": "Pendiente",
442
+ "working": "Trabajando",
443
+ "waiting_decision": "Requiere decisión",
444
+ "done": "Completado"
445
+ },
446
+ "failed": "Fallido",
447
+ "needsDecision": "Requiere decisión",
448
+ "needsApproval": "Requiere aprobación",
449
+ "spinningUp": "Iniciando…",
450
+ "stop": "Detener",
451
+ "stopTooltip": "Detener la ejecución pero conservarla (legible y reintentable)",
452
+ "reset": "Restablecer",
453
+ "resetTooltip": "Descartar esta ejecución y restablecer la tarea a planificada",
454
+ "viewDetailsOutput": "Ver detalles y leer la salida",
455
+ "viewDetails": "Ver detalles del paso",
456
+ "companion": "Acompañante",
457
+ "companionTooltip": "Acompañante de un paso productor",
458
+ "subtasksProgress": "{completed} de {total} subtareas completadas, {inProgress} en progreso",
459
+ "subtasksDone": "{completed} de {total} subtareas completadas",
460
+ "resolve": "Resolver",
461
+ "decide": "Decidir",
462
+ "review": "Revisar",
463
+ "approve": "Aprobar",
464
+ "fragmentsTooltip": "Fragmentos de buenas prácticas incorporados en este paso: {fragments}",
465
+ "standardsApplied": "{count} estándar aplicado | {count} estándares aplicados",
466
+ "companionOf": "{label} (acompañante)",
467
+ "merged": "Fusionado",
468
+ "open": "Abierto",
469
+ "mergePr": "Fusionar PR"
470
+ },
471
+ "structure": {
472
+ "module": "Módulo",
473
+ "modulePlaceholder": "p. ej. Sesiones (creado al implementar si es nuevo)",
474
+ "bestPractices": "Buenas prácticas",
475
+ "bestPracticesEmpty": "Ninguna. Los agentes siguen su guía predeterminada."
476
+ },
477
+ "runSettings": {
478
+ "unassigned": "Sin asignar",
479
+ "workspaceDefault": "Predeterminado del espacio de trabajo",
480
+ "workspaceDefaultParen": "(predeterminado del espacio de trabajo)",
481
+ "defaultPresetThresholds": "Predeterminado ({name}): {thresholds}",
482
+ "defaultPreset": "Predeterminado ({name})",
483
+ "noDefault": "Sin predeterminado",
484
+ "inheritWorkspace": "Heredar del espacio de trabajo",
485
+ "on": "Activado",
486
+ "off": "Desactivado",
487
+ "inheritOn": "Heredar (activado)",
488
+ "inheritOff": "Heredar (desactivado)",
489
+ "technical": {
490
+ "unset": "Sin definir (detección automática)",
491
+ "technical": "Técnica",
492
+ "business": "De negocio"
493
+ },
494
+ "pipeline": "Pipeline",
495
+ "pipelineEmpty": "Sin predeterminado. Elige un pipeline cuando ejecutes esta tarea.",
496
+ "mergePolicy": "Política de fusión",
497
+ "mergePresetDetail": "{name}: fusión automática cuando complejidad ≤ {complexity}, riesgo ≤ {risk}, impacto ≤ {impact}; hasta {attempts} intentos de corrección de CI.",
498
+ "mergePresetEmpty": "No hay preajuste configurado. El fusionador genera una notificación de revisión para cada PR.",
499
+ "modelPreset": "Preajuste de modelo",
500
+ "modelPresetBase": "base {model}",
501
+ "modelPresetOverrides": ", {count} anulación | , {count} anulaciones",
502
+ "modelPresetEmpty": "No hay preajuste configurado. Los agentes se ejecutan con el enrutamiento predeterminado del despliegue.",
503
+ "unavailableModels": "No disponibles con la configuración actual: {models}. Esta tarea fallaría en esos pasos.",
504
+ "editPresets": "Editar preajustes",
505
+ "configureVendors": "Configurar proveedores",
506
+ "modelPresetChangeHint": "Cambiar esto solo afecta a los pasos que aún no han comenzado.",
507
+ "taskKind": "Tipo de tarea",
508
+ "technicalHint": {
509
+ "technical": "Técnica: el implementador trata la definición de la tarea como principal y la especificación como referencia de regresión; el spec-writer puede no producir especificaciones de negocio.",
510
+ "business": "De negocio: la especificación lidera, como es habitual.",
511
+ "unset": "Detección automática: se infiere de la fase de especificación. Defínela explícitamente para anularla."
512
+ },
513
+ "issueWriteback": "Reescritura de incidencias",
514
+ "commentOnPrOpen": "Comentar al abrir el PR",
515
+ "closeOnMerge": "Cerrar al fusionar",
516
+ "writebackHint": "Reescribe en la incidencia del tracker vinculada a esta tarea. Anula el valor predeterminado del espacio de trabajo.",
517
+ "responsibleProduct": "Producto responsable",
518
+ "responsibleEmpty": "Sin asignar. Define un responsable de producto para notificarle cuando la revisión de requisitos marque esta tarea.",
519
+ "autoStartDependents": "Iniciar dependientes automáticamente",
520
+ "autoStartHint": "Cuando esta tarea se fusione, inicia automáticamente las tareas que dependen de ella (una vez que sus otras dependencias también estén completas)."
521
+ }
522
+ },
523
+ "panels": {
524
+ "decision": {
525
+ "title": "Se requiere una decisión",
526
+ "agentOnBlock": "{agent} en {block}",
527
+ "visualizationHint": "Esto es una visualización. Cualquier elección simplemente reanuda el pipeline."
528
+ },
529
+ "stepRestart": {
530
+ "restartFromStep": "Reiniciar el pipeline desde este paso",
531
+ "restartFromHere": "Reiniciar desde aquí"
532
+ },
533
+ "structuredResult": {
534
+ "fallbackTitle": "Resultado del agente",
535
+ "titleWithBlock": "{label}: {title}",
536
+ "fallbackDescription": "Salida estructurada del agente",
537
+ "structuredOutput": "Salida estructurada",
538
+ "noResult": "Aún no hay resultado.",
539
+ "noResultHint": "La salida estructurada aparece cuando este agente termina. Mientras se ejecuta, el paso muestra el progreso en vivo en el tablero."
540
+ },
541
+ "testReport": {
542
+ "title": "Informe de pruebas",
543
+ "greenlit": "Aprobado",
544
+ "needsFixes": "Requiere correcciones",
545
+ "fixAttempts": "{count}/{max} intentos de corrección",
546
+ "fixing": "· corrigiendo…",
547
+ "tested": "Probado",
548
+ "outcomes": "Resultados",
549
+ "concerns": "Inquietudes"
550
+ },
551
+ "stepMeta": {
552
+ "stateLabel": "Estado",
553
+ "duration": "Duración",
554
+ "elapsed": "transcurrido",
555
+ "step": "Paso",
556
+ "stepOf": "{number} de {total}",
557
+ "started": "Iniciado",
558
+ "finished": "Finalizado",
559
+ "model": "Modelo",
560
+ "notRecorded": "No registrado",
561
+ "run": "Ejecución",
562
+ "clickToCopy": "{id} (haz clic para copiar)",
563
+ "spinningUpContainer": "Iniciando contenedor…",
564
+ "subtasks": "Subtareas · {completed}/{total}",
565
+ "standardsApplied": "Estándares aplicados",
566
+ "decision": "Decisión",
567
+ "awaitingChoice": "Esperando una elección humana",
568
+ "approvalGate": "Verificación de aprobación",
569
+ "companionReview": "Revisión del acompañante",
570
+ "correctionIterations": "{count} iteración de corrección. | {count} iteraciones de corrección.",
571
+ "state": {
572
+ "pending": "Pendiente",
573
+ "working": "Trabajando",
574
+ "waiting_decision": "Requiere entrada",
575
+ "done": "Completado",
576
+ "failed": "Fallido"
577
+ },
578
+ "approvalStatus": {
579
+ "pending": "Pendiente",
580
+ "approved": "Aprobado",
581
+ "changes_requested": "Cambios solicitados",
582
+ "rejected": "Rechazado"
583
+ }
584
+ },
585
+ "stepDetail": {
586
+ "contents": "Contenidos",
587
+ "details": "Detalles",
588
+ "approvalRequired": "Se requiere aprobación",
589
+ "decisionRequired": "Se requiere una decisión",
590
+ "expandAll": "Expandir todas las secciones",
591
+ "collapseAll": "Contraer todas las secciones",
592
+ "copyRawOutput": "Copiar salida sin procesar",
593
+ "closeEsc": "Cerrar (Esc)",
594
+ "companionCapHeading": "{agent} alcanzó su límite de {attempts} intentos de reelaboración, aún por debajo del umbral de {threshold}.",
595
+ "companionCapDetail": "Haz una ronda más de reelaboración automática, avanza al siguiente paso aceptando la salida actual, o detén y restablece la tarea para que puedas editar las entradas y reenviarla.",
596
+ "infraAttempts": "Intentos de infraestructura",
597
+ "hideInfraAttempts": "Ocultar intentos de infraestructura",
598
+ "editingConclusions": "Editando las conclusiones",
599
+ "editConclusionsPlaceholder": "Edita las conclusiones del agente; tus cambios se guardan cuando apruebas…",
600
+ "noProseOutput": "Este agente no produjo salida en prosa.",
601
+ "approveWithCorrections": "Aprobar con correcciones",
602
+ "reviewAndApprove": "Revisar y aprobar",
603
+ "editHint": "Edita las conclusiones a la izquierda; tus cambios se guardan cuando apruebas.",
604
+ "reviewHint": "Haz clic en cualquier bloque de la salida para comentarlo, o deja comentarios generales abajo.",
605
+ "editingNotice": "Estás editando las conclusiones directamente. Las ediciones manuales no se pueden combinar con comentarios por bloque. Aprueba para guardarlas, o cancela para volver a la revisión.",
606
+ "commentingOn": "Comentando en",
607
+ "commentPlaceholder": "Deja un comentario en este bloque…",
608
+ "addComment": "Añadir comentario",
609
+ "commentN": "Comentario {number}",
610
+ "removeComment": "Quitar comentario",
611
+ "overallFeedback": "Comentarios generales / motivo del rechazo",
612
+ "overallFeedbackPlaceholder": "Describe los cambios que el agente debe hacer (opcional si dejaste comentarios por bloque)…",
613
+ "approveWithEdits": "Aprobar con estas ediciones",
614
+ "cancelEdits": "Cancelar ediciones",
615
+ "approveAndProceed": "Aprobar y continuar",
616
+ "rejectConfirmPrompt": "¿Rechazar esta propuesta y detener la ejecución por completo?",
617
+ "confirmReject": "Confirmar rechazo",
618
+ "requestChanges": "Solicitar cambios",
619
+ "reject": "Rechazar",
620
+ "requestChangesHint": "Solicitar cambios vuelve a ejecutar este paso con tus comentarios y observaciones. Rechazar detiene la ejecución por completo."
621
+ },
622
+ "inspector": {
623
+ "frameStatus": {
624
+ "planned": "Sin tareas",
625
+ "ready": "En vivo",
626
+ "in_progress": "Activo",
627
+ "blocked": "Requiere atención",
628
+ "pr_ready": "Activo",
629
+ "done": "En vivo"
630
+ },
631
+ "deleteRecurringPipeline": "Eliminar pipeline recurrente",
632
+ "deleteTask": "Eliminar tarea",
633
+ "deleteModule": "Eliminar módulo",
634
+ "deleteService": "Eliminar servicio",
635
+ "titlePlaceholder": "Título…",
636
+ "reworkedRequirements": "Requisitos reelaborados",
637
+ "agentStepsUseDocument": "Los pasos del agente usan este documento.",
638
+ "open": "Abrir",
639
+ "originalDescriptionFrozen": "Descripción original (congelada)",
640
+ "noDescription": "Sin descripción",
641
+ "describeBlock": "Describe este bloque…",
642
+ "taskStartedLocked": "Esta tarea ha comenzado. Sus detalles están bloqueados.",
643
+ "lastIncorporatedRequirements": "Últimos requisitos incorporados",
644
+ "priorDocHint": "De la revisión anterior. Úsalo como base: edita la descripción de arriba y reenvíala.",
645
+ "bootstrapping": "Inicializando…",
646
+ "importIssue": "Importar incidencia",
647
+ "connectTracker": "Conectar un tracker",
648
+ "spawnFromDocument": "Generar desde documento",
649
+ "viewRequirements": "Ver requisitos",
650
+ "reRun": "Reejecutar",
651
+ "run": "Ejecutar",
652
+ "focus": "Enfocar"
653
+ }
654
+ },
655
+ "observability": {
656
+ "modelActivity": "Actividad del modelo",
657
+ "viewAllCalls": "Ver todas las llamadas →",
658
+ "providedContext": "Contexto proporcionado",
659
+ "exportJson": "Exportar JSON",
660
+ "exportHint": "Descarga una exportación JSON de esta ejecución, apta para LLM",
661
+ "closeEsc": "Cerrar (Esc)",
662
+ "loadingActivity": "Cargando actividad del modelo…",
663
+ "loadingContext": "Cargando contexto proporcionado…",
664
+ "noCalls": "No se registraron llamadas al modelo en esta ejecución.",
665
+ "noContext": "No se almacenó contexto del agente para esta ejecución. Se captura por despacho cuando el espacio de trabajo tiene activado 'Almacenar contexto completo del agente'.",
666
+ "summary": {
667
+ "calls": "Llamadas",
668
+ "tokensInOut": "Tokens (entrada / salida)",
669
+ "transportOverhead": "Sobrecarga de transporte",
670
+ "modelExecution": "Ejecución del modelo",
671
+ "truncated": "{count} truncada | {count} truncadas"
672
+ },
673
+ "metricsBar": {
674
+ "calls": "{count} llamada | {count} llamadas",
675
+ "promptCompletionTokens": "Tokens de prompt / completado",
676
+ "cachedTokens": "({tokens} en caché)",
677
+ "cachedTokensHint": "Tokens de prompt servidos desde la caché del proveedor",
678
+ "errors": "{count} error | {count} errores",
679
+ "warnings": "{count} advertencia | {count} advertencias",
680
+ "outputLimit": "Límite de salida",
681
+ "truncatedCalls": "{count} llamada truncada en el límite | {count} llamadas truncadas en el límite",
682
+ "transportVsExecution": "Transporte frente a ejecución",
683
+ "transportOverhead": "Sobrecarga de transporte / proxy",
684
+ "modelExecution": "Ejecución del modelo"
685
+ },
686
+ "call": {
687
+ "tokensTitle": "{prompt} tokens de prompt / {completion} de completado",
688
+ "outputUsedVsLimit": "Salida usada frente al límite",
689
+ "transportVsExecution": "Sobrecarga de transporte / ejecución del modelo",
690
+ "error": "error",
691
+ "ok": "ok",
692
+ "messages": "{count} mensajes",
693
+ "tools": "{count} herramientas",
694
+ "streamed": "en streaming",
695
+ "buffered": "en búfer",
696
+ "maxTokens": "max_tokens {value}",
697
+ "promptCached": "{cached}/{prompt} de prompt en caché",
698
+ "total": "total {duration}",
699
+ "prompt": "Prompt",
700
+ "promptPrefixOmitted": "(solo mensajes nuevos: {count} anteriores omitidos)",
701
+ "response": "Respuesta",
702
+ "reasoning": "Razonamiento"
703
+ },
704
+ "context": {
705
+ "injectedFiles": "Archivos de contexto inyectados",
706
+ "bestPracticeFragments": "Fragmentos de buenas prácticas",
707
+ "filesCount": "{count} archivos",
708
+ "fragmentsCount": "{count} fragmentos",
709
+ "systemPrompt": "Prompt del sistema",
710
+ "userPrompt": "Prompt del usuario",
711
+ "details": "Detalles"
712
+ }
713
+ },
714
+ "auth": {
715
+ "gate": {
716
+ "loading": "Cargando…"
717
+ },
718
+ "login": {
719
+ "appTitle": "Architecture Board",
720
+ "subtitle": "Inicia sesión para continuar.",
721
+ "inviteSubtitle": "Acepta tu invitación para continuar.",
722
+ "forgotSubtitle": "Restablece tu contraseña.",
723
+ "continueWithGithub": "Continuar con GitHub",
724
+ "continueWithGoogle": "Continuar con Google",
725
+ "or": "o",
726
+ "namePlaceholder": "Nombre (opcional)",
727
+ "emailPlaceholder": "Correo electrónico",
728
+ "passwordPlaceholder": "Contraseña",
729
+ "createAccount": "Crear cuenta",
730
+ "signIn": "Iniciar sesión",
731
+ "signUp": "Registrarse",
732
+ "needAccount": "¿Necesitas una cuenta? {signUp}",
733
+ "haveAccount": "¿Ya tienes una cuenta? {signIn}",
734
+ "forgotPassword": "¿Olvidaste tu contraseña?",
735
+ "forgotSent": "Si existe una cuenta con ese correo, un enlace para restablecer la contraseña está en camino. Revisa tu bandeja de entrada.",
736
+ "sendResetLink": "Enviar enlace de restablecimiento",
737
+ "backToSignIn": "Volver al inicio de sesión",
738
+ "signInFailed": "Error al iniciar sesión. Revisa tus datos e inténtalo de nuevo.",
739
+ "genericError": "Algo salió mal. Inténtalo de nuevo."
740
+ },
741
+ "resetPassword": {
742
+ "title": "Restablecer contraseña",
743
+ "subtitle": "Elige una nueva contraseña para tu cuenta.",
744
+ "doneBody": "Tu contraseña se ha restablecido. Ya puedes iniciar sesión con tu nueva contraseña.",
745
+ "goToSignIn": "Ir al inicio de sesión",
746
+ "missingToken": "A este enlace de restablecimiento le falta el token. Solicita un nuevo enlace desde la pantalla de inicio de sesión.",
747
+ "backToSignIn": "Volver al inicio de sesión",
748
+ "newPasswordPlaceholder": "Nueva contraseña",
749
+ "confirmPasswordPlaceholder": "Confirmar nueva contraseña",
750
+ "submit": "Restablecer contraseña",
751
+ "errorTooShort": "La contraseña debe tener al menos 8 caracteres.",
752
+ "errorMismatch": "Las contraseñas no coinciden.",
753
+ "errorInvalidLink": "Este enlace para restablecer la contraseña no es válido o ha caducado."
754
+ },
755
+ "userMenu": {
756
+ "mySetup": "Mi configuración",
757
+ "signOut": "Cerrar sesión"
758
+ }
759
+ },
760
+ "layout": {
761
+ "accountDeployment": {
762
+ "title": "Integraciones del despliegue",
763
+ "intro": "Credenciales compartidas por todos los espacios de trabajo de esta cuenta, cifradas en reposo. Los valores nunca se muestran tras guardarlos; deja un campo en blanco para conservar el secreto almacenado.",
764
+ "configured": "Configurado",
765
+ "notSet": "Sin definir",
766
+ "clear": "Borrar",
767
+ "loadFailed": "No se pudo cargar la configuración del despliegue",
768
+ "slack": {
769
+ "title": "Aplicación de Slack (OAuth)",
770
+ "description": "Habilita el flujo OAuth \"Add to Slack\". Sin él, los espacios de trabajo aún pueden conectar Slack pegando un token de bot.",
771
+ "clientId": "ID de cliente",
772
+ "clientSecret": "Secreto de cliente",
773
+ "redirectUrl": "URL de redirección",
774
+ "validation": "Introduce el id de cliente, el secreto y la URL de redirección",
775
+ "saved": "OAuth de Slack guardado",
776
+ "saveFailed": "No se pudo guardar el OAuth de Slack",
777
+ "cleared": "OAuth de Slack borrado",
778
+ "clearFailed": "No se pudo borrar el OAuth de Slack"
779
+ },
780
+ "web": {
781
+ "title": "Búsqueda web del contenedor",
782
+ "description": "El proveedor de búsqueda al que los agentes del contenedor acceden a través del proxy del backend. Define una clave de Brave (recomendado) o una URL de SearXNG autoalojada (con una clave bearer opcional).",
783
+ "configured": "Configurado ({provider})",
784
+ "braveKey": "Clave de API de Brave",
785
+ "searxngUrl": "URL de SearXNG",
786
+ "searxngKey": "Clave de SearXNG (opcional)",
787
+ "validation": "Introduce una clave de Brave o una URL de SearXNG",
788
+ "saved": "Claves de búsqueda web guardadas",
789
+ "saveFailed": "No se pudieron guardar las claves de búsqueda web",
790
+ "cleared": "Claves de búsqueda web borradas",
791
+ "clearFailed": "No se pudieron borrar las claves de búsqueda web"
792
+ }
793
+ },
794
+ "accountFragments": {
795
+ "intro": "Directrices de buenas prácticas compartidas por todos los tableros de esta cuenta. Cada tablero las hereda y puede anularlas o añadir las suyas. Los agentes que conocen el código (coder, reviewer, architect, fixers) incorporan las relevantes en su prompt."
796
+ },
797
+ "accountTeam": {
798
+ "roles": {
799
+ "admin": "Administrador",
800
+ "developer": "Desarrollador",
801
+ "product": "Producto"
802
+ },
803
+ "org": {
804
+ "ctaTitle": "Invita a compañeros y gestiona roles",
805
+ "ctaBody": "Los miembros, roles e invitaciones viven en una organización. Crea una para invitar a compañeros y gestionar sus roles; tus tableros personales se mantienen igual.",
806
+ "namePlaceholder": "Acme Inc.",
807
+ "create": "Crear organización",
808
+ "created": "Organización creada"
809
+ },
810
+ "members": {
811
+ "title": "Miembros",
812
+ "empty": "Todavía no hay miembros."
813
+ },
814
+ "invite": {
815
+ "title": "Invitar a un compañero",
816
+ "submit": "Invitar",
817
+ "revoke": "Revocar invitación",
818
+ "created": "Invitación creada",
819
+ "createdEmailed": "Se envió un correo (o copia el enlace de la lista de abajo).",
820
+ "createdShareLink": "Comparte el enlace de aceptación con tu compañero.",
821
+ "status": {
822
+ "pending": "Pendiente",
823
+ "accepted": "Aceptada",
824
+ "revoked": "Revocada"
825
+ }
826
+ },
827
+ "email": {
828
+ "title": "Remitente de correo",
829
+ "notEnabled": "El envío de correo no está habilitado en este despliegue. Las invitaciones aún generan un enlace de aceptación que se puede compartir.",
830
+ "connectedAs": "Conectado mediante {provider} como {from}",
831
+ "disconnect": "Desconectar",
832
+ "connect": "Conectar remitente de correo",
833
+ "connected": "Remitente de correo conectado",
834
+ "fromPlaceholder": "Dirección de remitente",
835
+ "apiKeyPlaceholder": "Clave de API del proveedor",
836
+ "providers": {
837
+ "resend": "Resend",
838
+ "sendgrid": "SendGrid"
839
+ }
840
+ },
841
+ "apiKeys": {
842
+ "title": "Claves de API de la cuenta"
843
+ },
844
+ "errors": {
845
+ "updateRoles": "No se pudieron actualizar los roles",
846
+ "loadSettings": "No se pudo cargar la configuración del equipo",
847
+ "createOrg": "No se pudo crear la organización",
848
+ "sendInvite": "No se pudo enviar la invitación",
849
+ "revokeInvite": "No se pudo revocar la invitación",
850
+ "connectEmail": "No se pudo conectar el remitente de correo",
851
+ "disconnectEmail": "No se pudo desconectar el remitente de correo"
852
+ }
853
+ },
854
+ "boardSwitcher": {
855
+ "accountFallback": "Cuenta",
856
+ "boardFallback": "Tablero",
857
+ "providers": {
858
+ "docker": "Docker (local)",
859
+ "custom": "Personalizado"
860
+ },
861
+ "account": {
862
+ "newOrg": "Nueva organización…",
863
+ "settings": "Configuración de la cuenta…",
864
+ "defaultProvider": "Proveedor de nube predeterminado"
865
+ },
866
+ "board": {
867
+ "new": "Nuevo tablero…",
868
+ "rename": "Cambiar nombre del tablero…",
869
+ "delete": "Eliminar tablero"
870
+ },
871
+ "prompt": {
872
+ "create": "Crear",
873
+ "nameLabel": "Nombre",
874
+ "descriptionLabel": "Descripción",
875
+ "descriptionHint": "Opcional",
876
+ "descriptionPlaceholder": "¿Para qué sirve este tablero?",
877
+ "account": {
878
+ "title": "Nueva organización",
879
+ "placeholder": "Acme Inc."
880
+ },
881
+ "board": {
882
+ "title": "Nuevo tablero",
883
+ "placeholder": "Tablero sin título"
884
+ },
885
+ "rename": {
886
+ "title": "Configuración del tablero",
887
+ "placeholder": "Nombre del tablero"
888
+ }
889
+ },
890
+ "toast": {
891
+ "updateProviderFailed": "No se pudo actualizar el proveedor predeterminado",
892
+ "switchAccountFailed": "No se pudo cambiar de cuenta",
893
+ "openBoardFailed": "No se pudo abrir el tablero",
894
+ "boardDeleted": "Tablero eliminado",
895
+ "deleteBoardFailed": "No se pudo eliminar el tablero"
896
+ }
897
+ },
898
+ "notifications": {
899
+ "heading": "Requiere tu atención",
900
+ "overdue": "Vencida",
901
+ "openPr": "Abrir PR",
902
+ "dismiss": "Descartar",
903
+ "action": {
904
+ "merge_review": "Fusionar",
905
+ "pipeline_complete": "Confirmar y fusionar",
906
+ "ci_failed": "Reintentar ejecución",
907
+ "test_failed": "Reintentar ejecución",
908
+ "requirement_review": "Marcar como leída",
909
+ "clarity_review": "Marcar como leída",
910
+ "release_regression": "Confirmar recepción",
911
+ "decision_required": "Marcar como leída",
912
+ "human_test_ready": "Marcar como leída",
913
+ "visual_confirmation_ready": "Marcar como leída",
914
+ "human_review": "Marcar como leída",
915
+ "followup_pending": "Marcar como leída",
916
+ "markRead": "Marcar como leída"
917
+ }
918
+ },
919
+ "aiProvidersBanner": {
920
+ "setup": {
921
+ "title": "No hay ningún modelo de IA configurado",
922
+ "body": "Los agentes necesitan un modelo para ejecutarse. La IA funciona de forma inmediata solo en un despliegue de Cloudflare con Workers AI habilitado. De lo contrario, conecta una clave de proveedor, una suscripción, un proxy o un ejecutor local para continuar.",
923
+ "action": "Configurar IA"
924
+ },
925
+ "preset": {
926
+ "title": "El preajuste de modelo predeterminado usa modelos no disponibles",
927
+ "body": "Las tareas que usan el preajuste predeterminado fallarían. Edita el preajuste o configura el proveedor que falta.",
928
+ "action": "Revisar preajuste"
929
+ }
930
+ },
931
+ "githubPatBanner": {
932
+ "title": "PAT de GitHub no configurado",
933
+ "body": "El modo local accede a GitHub con un token de acceso personal. Sin uno, los pasos de los agentes que clonan, hacen push, abren PR, validan CI o fusionan fallarán.",
934
+ "createToken": "Crear un token de GitHub (ámbitos preseleccionados)",
935
+ "thenSet": "Luego define {envVar} y reinicia."
936
+ },
937
+ "providerConfigBanner": {
938
+ "titleMany": "Los proveedores necesitan configuración",
939
+ "titleOne": {
940
+ "environment": "El proveedor de entorno necesita configuración",
941
+ "runner-pool": "El grupo de ejecutores necesita configuración"
942
+ },
943
+ "body": "Hay un proveedor conectado para esta instancia, pero le faltan ajustes obligatorios, así que aún no puede ejecutarse. Añade los campos obligatorios para terminar de conectarlo.",
944
+ "action": {
945
+ "environment": "Configurar proveedor de entorno",
946
+ "runner-pool": "Configurar grupo de ejecutores"
947
+ }
948
+ },
949
+ "spendWarningBanner": {
950
+ "title": "Límite de gasto alcanzado, ejecución de agentes en pausa",
951
+ "body": "El gasto de tokens de este mes ha alcanzado el presupuesto configurado, por lo que las canalizaciones en curso se pausaron para evitar más costes. La ejecución se reanuda automáticamente cuando el presupuesto se renueva el mes que viene, o una vez que se aumente el límite.",
952
+ "spent": "Gastado",
953
+ "budget": "Presupuesto",
954
+ "tokens": "Tokens",
955
+ "resume": "Reanudar de todos modos",
956
+ "resumeHint": "Reanudar sigue generando gasto; se pausará de nuevo si sigue por encima del presupuesto."
957
+ },
958
+ "personalSetup": {
959
+ "title": "Mi configuración",
960
+ "intro": "Tus conexiones personales, usadas para las ejecuciones que inicias y visibles solo para ti.",
961
+ "connected": "Conectado",
962
+ "notConnected": "No conectado",
963
+ "connectedCount": "ninguno conectado | {count} conectado | {count} conectados",
964
+ "sourceControl": {
965
+ "title": "Control de versiones"
966
+ },
967
+ "githubToken": {
968
+ "label": "Mi token de GitHub",
969
+ "description": "Un token de acceso personal usado para las ejecuciones que inicias (pushes, PR, CI, fusión)."
970
+ },
971
+ "models": {
972
+ "title": "Modelos"
973
+ },
974
+ "localRunners": {
975
+ "label": "Mis ejecutores locales",
976
+ "description": "Tus ejecutores de modelos en tu propia máquina (Ollama, LM Studio, vLLM)."
977
+ },
978
+ "subscriptions": {
979
+ "label": "Mis suscripciones",
980
+ "description": "Planes de uso individual que desbloqueas con una contraseña personal (Claude, GLM, Codex)."
981
+ }
982
+ },
983
+ "integrationBack": {
984
+ "backToMySetup": "Volver a Mi configuración",
985
+ "backToIntegrations": "Volver a Integraciones"
986
+ },
987
+ "commandBar": {
988
+ "searchPlaceholder": "Busca o ejecuta un comando…",
989
+ "noMatches": "No hay comandos que coincidan.",
990
+ "groups": {
991
+ "create": "Crear",
992
+ "repositories": "Repositorios",
993
+ "integrations": "Integraciones",
994
+ "workspace": "Espacio de trabajo",
995
+ "account": "Cuenta"
996
+ },
997
+ "cmd": {
998
+ "newPipeline": "Crear una canalización",
999
+ "addFromRepo": "Añadir servicio desde un repositorio existente",
1000
+ "bootstrapRepo": "Iniciar un repositorio nuevo",
1001
+ "githubManage": "Gestionar la conexión de GitHub",
1002
+ "githubConnect": "Conectar GitHub",
1003
+ "slackManage": "Gestionar las notificaciones de Slack",
1004
+ "slackConnect": "Conectar Slack",
1005
+ "sourceManage": "Gestionar {source}",
1006
+ "sourceConnect": "Conectar {source}",
1007
+ "documentImport": "Importar y generar desde documentos",
1008
+ "taskImport": "Importar incidencias",
1009
+ "fragments": "Biblioteca de fragmentos de contexto",
1010
+ "mergeThresholds": "Umbrales de fusión",
1011
+ "workspaceSettings": "Ajustes del espacio de trabajo",
1012
+ "modelConfiguration": "Configuración de modelos",
1013
+ "serviceFragmentDefaults": "Buenas prácticas del servicio por defecto",
1014
+ "accountSettings": "Ajustes de la cuenta",
1015
+ "localModels": "Mis ejecutores locales",
1016
+ "sandbox": "Abrir el entorno de pruebas"
1017
+ },
1018
+ "keywords": {
1019
+ "newPipeline": "canalización agentes cadena pipeline",
1020
+ "addFromRepo": "github importar existente",
1021
+ "bootstrapRepo": "andamiaje crear arquitectura de referencia",
1022
+ "github": "git repositorios pull requests incidencias",
1023
+ "slack": "slack notificaciones canal menciones",
1024
+ "documentSource": "documento fuente prd rfc",
1025
+ "documentImport": "documento importar generar",
1026
+ "taskSource": "tarea fuente rastreador incidencias",
1027
+ "taskImport": "tarea importar incidencias",
1028
+ "fragments": "prompt fragmentos buenas prácticas directrices contexto",
1029
+ "mergeThresholds": "fusión política preajuste auto-fusión ci",
1030
+ "workspaceSettings": "límite tareas en ejecución por servicio espera escalado retraso notificación tiempo de espera",
1031
+ "modelConfiguration": "modelo llm enrutamiento tipo de agente preajuste por defecto configuración",
1032
+ "serviceFragmentDefaults": "fragmento buenas prácticas directriz servicio por defecto consciente del código",
1033
+ "accountSettings": "cuenta equipo miembros roles invitaciones correo claves api fragmento buenas prácticas biblioteca contexto organización personal",
1034
+ "localModels": "modelo local ejecutor ollama lm studio llamacpp vllm endpoint",
1035
+ "sandbox": "entorno de pruebas prompt modelo prueba experimento juez fixture benchmark evaluar"
1036
+ }
1037
+ },
1038
+ "integrationsHub": {
1039
+ "title": "Integraciones",
1040
+ "intro": "Conecta y gestiona los sistemas externos que este espacio de trabajo puede vincular.",
1041
+ "searchPlaceholder": "Buscar integraciones…",
1042
+ "noMatches": "Ninguna integración coincide con \"{query}\".",
1043
+ "getStarted": {
1044
+ "title": "Primeros pasos",
1045
+ "body": "Conecta una fuente de código y un proveedor de modelos para ejecutar tu primera canalización."
1046
+ },
1047
+ "status": {
1048
+ "connected": "Conectado",
1049
+ "keyConnected": "Clave conectada",
1050
+ "notConnected": "Sin conectar",
1051
+ "needsAttention": "Requiere atención",
1052
+ "disabled": "Desactivado",
1053
+ "recommended": "Recomendado"
1054
+ },
1055
+ "groups": {
1056
+ "models": "Modelos y proveedores",
1057
+ "sourceControl": "Control de código fuente",
1058
+ "communication": "Comunicación",
1059
+ "documents": "Documentos",
1060
+ "taskTrackers": "Rastreadores de tareas",
1061
+ "observability": "Observabilidad",
1062
+ "infrastructure": "Infraestructura",
1063
+ "personal": "Personal (solo tú)"
1064
+ },
1065
+ "items": {
1066
+ "openrouter": {
1067
+ "description": "Una sola puerta de enlace a más de 300 modelos. Añade tu clave y activa modelos en un único lugar."
1068
+ },
1069
+ "vendors": {
1070
+ "label": "Proveedores y claves",
1071
+ "description": "Suscripciones de LLM del espacio de trabajo y claves API de proveedores."
1072
+ },
1073
+ "github": {
1074
+ "description": "Conecta la GitHub App del espacio de trabajo y explora repositorios, PR e incidencias."
1075
+ },
1076
+ "slack": {
1077
+ "description": "Envía las notificaciones al espacio de Slack de tu equipo."
1078
+ },
1079
+ "documentSource": {
1080
+ "description": "Vincula {source} como fuente de documentos para el contexto de requisitos."
1081
+ },
1082
+ "documentImport": {
1083
+ "label": "Importar y generar",
1084
+ "description": "Importa documentos de una fuente conectada y genera estructura."
1085
+ },
1086
+ "taskSource": {
1087
+ "description": "Vincula {source} para importar y consultar incidencias del rastreador."
1088
+ },
1089
+ "taskImport": {
1090
+ "label": "Importar incidencias",
1091
+ "description": "Importa incidencias de un rastreador conectado al tablero."
1092
+ },
1093
+ "trackerSettings": {
1094
+ "label": "Ajustes del rastreador de incidencias"
1095
+ },
1096
+ "observability": {
1097
+ "label": "Salud posterior al lanzamiento",
1098
+ "description": "Vigila los monitores y SLO después de publicar una versión (Datadog)."
1099
+ },
1100
+ "environment": {
1101
+ "label": "Entornos efímeros",
1102
+ "description": "Donde el agente Tester se ejecuta contra un entorno de vista previa en vivo."
1103
+ },
1104
+ "runnerPool": {
1105
+ "label": "Grupo de ejecutores autoalojado",
1106
+ "description": "Donde se ejecutan los agentes de código cuando no se usan los Cloudflare Containers."
1107
+ },
1108
+ "localMode": {
1109
+ "label": "Modo local",
1110
+ "description": "Grupo de contenedores en caliente y reutilización de checkout por repositorio para el ejecutor local."
1111
+ },
1112
+ "githubPat": {
1113
+ "label": "Mi token de GitHub",
1114
+ "description": "Un token de acceso personal usado para las ejecuciones que inicias (pushes, PR, CI, fusión)."
1115
+ },
1116
+ "localRunners": {
1117
+ "label": "Mis ejecutores locales",
1118
+ "description": "Tus ejecutores de modelos en tu propia máquina (Ollama, LM Studio, vLLM…)."
1119
+ }
1120
+ }
1121
+ }
311
1122
  }
312
1123
  }