@cat-factory/app 0.161.0 → 0.162.1

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 (33) hide show
  1. package/app/components/panels/AgentStepDetail.vue +58 -6
  2. package/app/components/panels/ReportsPanel.logic.spec.ts +76 -0
  3. package/app/components/panels/ReportsPanel.logic.ts +71 -0
  4. package/app/components/panels/ReportsPanel.vue +471 -0
  5. package/app/components/panels/ReportsSpendBreakdown.vue +70 -0
  6. package/app/components/panels/inspector/TaskExecution.vue +25 -1
  7. package/app/components/pipeline/PipelineProgress.vue +13 -3
  8. package/app/composables/api/reports.ts +19 -0
  9. package/app/composables/useApi.ts +2 -0
  10. package/app/composables/useNavContributions.ts +1 -0
  11. package/app/composables/useStepApproval.ts +10 -9
  12. package/app/modular/nav-contributions.spec.ts +1 -0
  13. package/app/modular/nav-contributions.ts +11 -0
  14. package/app/pages/index.vue +2 -0
  15. package/app/stores/execution/commands.ts +47 -16
  16. package/app/stores/reports.spec.ts +113 -0
  17. package/app/stores/reports.ts +91 -0
  18. package/app/stores/ui/modals.ts +14 -0
  19. package/app/stores/ui/resultViews.ts +5 -1
  20. package/app/types/execution.ts +8 -0
  21. package/app/utils/pipelineRender.spec.ts +72 -0
  22. package/app/utils/pipelineRender.ts +26 -0
  23. package/i18n/locales/de.json +74 -1
  24. package/i18n/locales/en.json +74 -1
  25. package/i18n/locales/es.json +74 -1
  26. package/i18n/locales/fr.json +74 -1
  27. package/i18n/locales/he.json +74 -1
  28. package/i18n/locales/it.json +74 -1
  29. package/i18n/locales/ja.json +74 -1
  30. package/i18n/locales/pl.json +74 -1
  31. package/i18n/locales/tr.json +74 -1
  32. package/i18n/locales/uk.json +74 -1
  33. package/package.json +2 -2
@@ -1298,6 +1298,7 @@
1298
1298
  "open": "Öffnen",
1299
1299
  "mergePr": "PR mergen",
1300
1300
  "chooseApproach": "Ansatz wählen",
1301
+ "triageFollowUps": "Folgeaufgaben entscheiden",
1301
1302
  "elapsedTooltip": "Verstrichene Zeit für diesen Schritt",
1302
1303
  "reviewFindings": "Befunde prüfen"
1303
1304
  },
@@ -1531,6 +1532,10 @@
1531
1532
  "details": "Details",
1532
1533
  "approvalRequired": "Freigabe erforderlich",
1533
1534
  "decisionRequired": "Entscheidung erforderlich",
1535
+ "followUpsParked": "Der Coder hat Folgeaufgaben aufgeworfen, die entschieden werden müssen, bevor der Lauf fortgesetzt werden kann. Bearbeite jeden Punkt (anlegen, zurückgeben, beantworten oder verwerfen) im Folgeaufgaben-Fenster.",
1536
+ "forkParked": "Dieser Coder-Schritt wartet darauf, dass ein Implementierungsansatz gewählt wird, bevor Code geschrieben wird. Wähle einen vorgeschlagenen Ansatz (oder gib einen eigenen ein) im Entscheidungsfenster.",
1537
+ "openFollowUps": "Folgeaufgaben öffnen",
1538
+ "chooseApproach": "Ansatz wählen",
1534
1539
  "expandAll": "Alle Abschnitte ausklappen",
1535
1540
  "collapseAll": "Alle Abschnitte einklappen",
1536
1541
  "copyRawOutput": "Rohausgabe kopieren",
@@ -3000,6 +3005,70 @@
3000
3005
  "title": "Jetzt aktiv"
3001
3006
  }
3002
3007
  },
3008
+ "reports": {
3009
+ "title": "Berichte",
3010
+ "refresh": "Aktualisieren",
3011
+ "loading": "Berichte werden geladen…",
3012
+ "retry": "Erneut versuchen",
3013
+ "error": "Berichte konnten nicht geladen werden.",
3014
+ "period": "{from} bis {to}",
3015
+ "unattributed": "Nicht zugeordnet",
3016
+ "window": {
3017
+ "oneDay": "Letzte 24 Stunden",
3018
+ "sevenDays": "Letzte 7 Tage",
3019
+ "thirtyDays": "Letzte 30 Tage",
3020
+ "ninetyDays": "Letzte 90 Tage"
3021
+ },
3022
+ "filter": {
3023
+ "board": "Board",
3024
+ "allBoards": "Alle Boards"
3025
+ },
3026
+ "dimension": {
3027
+ "workspace": "Board",
3028
+ "service": "Service",
3029
+ "taskType": "Aufgabentyp"
3030
+ },
3031
+ "breakdown": {
3032
+ "title": "Aufschlüsselung nach"
3033
+ },
3034
+ "totals": {
3035
+ "title": "In diesem Zeitraum",
3036
+ "metered": "Abgerechnete Kosten",
3037
+ "subscription": "Abo",
3038
+ "calls": "LLM-Aufrufe",
3039
+ "tokens": "Tokens",
3040
+ "illustrative": "Abokosten sind nur kalkulatorisch – diese Tarife sind pauschal, werden nicht pro Token abgerechnet und zählen nie als Ausgaben."
3041
+ },
3042
+ "trend": {
3043
+ "title": "Kosten im Zeitverlauf",
3044
+ "empty": "In diesem Zeitraum wurde keine Nutzung erfasst."
3045
+ },
3046
+ "legend": {
3047
+ "metered": "Abgerechnet",
3048
+ "subscription": "Abo"
3049
+ },
3050
+ "spend": {
3051
+ "byModel": "Kosten nach Modell",
3052
+ "byAgentKind": "Kosten nach Agententyp",
3053
+ "heading": "Kosten",
3054
+ "empty": "In diesem Zeitraum wurde keine Nutzung erfasst.",
3055
+ "calls": "{count} Aufruf | {count} Aufrufe",
3056
+ "tokens": "{input} rein / {output} raus",
3057
+ "subscriptionAside": "+{value} Abo"
3058
+ },
3059
+ "activity": {
3060
+ "heading": "Läufe",
3061
+ "empty": "In diesem Zeitraum gab es keine Läufe.",
3062
+ "runs": "{count} Lauf | {count} Läufe",
3063
+ "avg": "Ø {value}"
3064
+ },
3065
+ "status": {
3066
+ "done": "Abgeschlossen",
3067
+ "failed": "Fehlgeschlagen",
3068
+ "running": "Läuft",
3069
+ "other": "Sonstige"
3070
+ }
3071
+ },
3003
3072
  "auth": {
3004
3073
  "gate": {
3005
3074
  "loading": "Wird geladen…"
@@ -4159,6 +4228,7 @@
4159
4228
  "modelConfiguration": "Modellkonfiguration",
4160
4229
  "accountSettings": "Kontoeinstellungen",
4161
4230
  "operatorDashboard": "Plattform-Observability",
4231
+ "reports": "Berichte",
4162
4232
  "environmentSetup": "Umgebungseinrichtung"
4163
4233
  },
4164
4234
  "errors": {
@@ -4166,7 +4236,10 @@
4166
4236
  "retryFailed": "Wiederholung fehlgeschlagen",
4167
4237
  "startFailed": "Start fehlgeschlagen",
4168
4238
  "mergeFailed": "Zusammenführen fehlgeschlagen",
4169
- "restartFailed": "Neustart fehlgeschlagen"
4239
+ "restartFailed": "Neustart fehlgeschlagen",
4240
+ "approveFailed": "Freigeben fehlgeschlagen",
4241
+ "requestChangesFailed": "Anfordern von Änderungen fehlgeschlagen",
4242
+ "rejectFailed": "Ablehnen fehlgeschlagen"
4170
4243
  },
4171
4244
  "reviewFriction": {
4172
4245
  "warnTitle": "Aufgaben warten auf Prüfung",
@@ -130,6 +130,7 @@
130
130
  "modelConfiguration": "Model configuration",
131
131
  "accountSettings": "Account settings",
132
132
  "operatorDashboard": "Platform observability",
133
+ "reports": "Reports",
133
134
  "environmentSetup": "Environment setup"
134
135
  },
135
136
  "board": {
@@ -491,7 +492,10 @@
491
492
  "retryFailed": "Retry failed",
492
493
  "startFailed": "Failed to start",
493
494
  "mergeFailed": "Failed to merge",
494
- "restartFailed": "Failed to restart"
495
+ "restartFailed": "Failed to restart",
496
+ "approveFailed": "Failed to approve",
497
+ "requestChangesFailed": "Failed to request changes",
498
+ "rejectFailed": "Failed to reject"
495
499
  },
496
500
  "reviewFriction": {
497
501
  "warnTitle": "Tasks waiting on review",
@@ -1039,6 +1043,7 @@
1039
1043
  "open": "Open",
1040
1044
  "mergePr": "Merge PR",
1041
1045
  "chooseApproach": "Choose approach",
1046
+ "triageFollowUps": "Decide follow-ups",
1042
1047
  "elapsedTooltip": "Elapsed time on this step",
1043
1048
  "reviewFindings": "Review findings"
1044
1049
  },
@@ -1272,6 +1277,10 @@
1272
1277
  "details": "Details",
1273
1278
  "approvalRequired": "Approval required",
1274
1279
  "decisionRequired": "Decision required",
1280
+ "followUpsParked": "The Coder surfaced follow-up items that need a decision before the run can continue. Triage each item (file, send back, answer, or dismiss) in the follow-ups window.",
1281
+ "forkParked": "This Coder step is waiting for an implementation approach to be chosen before any code is written. Pick a proposed approach (or enter your own) in the fork-decision window.",
1282
+ "openFollowUps": "Open follow-ups",
1283
+ "chooseApproach": "Choose approach",
1275
1284
  "expandAll": "Expand all sections",
1276
1285
  "collapseAll": "Collapse all sections",
1277
1286
  "copyRawOutput": "Copy raw output",
@@ -1524,6 +1533,70 @@
1524
1533
  "title": "Live now"
1525
1534
  }
1526
1535
  },
1536
+ "reports": {
1537
+ "title": "Reports",
1538
+ "refresh": "Refresh",
1539
+ "loading": "Loading reports…",
1540
+ "retry": "Retry",
1541
+ "error": "Reports could not be loaded.",
1542
+ "period": "{from} to {to}",
1543
+ "unattributed": "Unattributed",
1544
+ "window": {
1545
+ "oneDay": "Last 24 hours",
1546
+ "sevenDays": "Last 7 days",
1547
+ "thirtyDays": "Last 30 days",
1548
+ "ninetyDays": "Last 90 days"
1549
+ },
1550
+ "filter": {
1551
+ "board": "Board",
1552
+ "allBoards": "All boards"
1553
+ },
1554
+ "dimension": {
1555
+ "workspace": "Board",
1556
+ "service": "Service",
1557
+ "taskType": "Task type"
1558
+ },
1559
+ "breakdown": {
1560
+ "title": "Breakdown by"
1561
+ },
1562
+ "totals": {
1563
+ "title": "This window",
1564
+ "metered": "Metered spend",
1565
+ "subscription": "Subscription",
1566
+ "calls": "LLM calls",
1567
+ "tokens": "Tokens",
1568
+ "illustrative": "Subscription costs are illustrative — those plans are flat-rate, not billed per token, and are never counted as spend."
1569
+ },
1570
+ "trend": {
1571
+ "title": "Spend over time",
1572
+ "empty": "No recorded usage in this window."
1573
+ },
1574
+ "legend": {
1575
+ "metered": "Metered",
1576
+ "subscription": "Subscription"
1577
+ },
1578
+ "spend": {
1579
+ "byModel": "Spend by model",
1580
+ "byAgentKind": "Spend by agent kind",
1581
+ "heading": "Spend",
1582
+ "empty": "No recorded usage in this window.",
1583
+ "calls": "{count} call | {count} calls",
1584
+ "tokens": "{input} in / {output} out",
1585
+ "subscriptionAside": "+{value} subscription"
1586
+ },
1587
+ "activity": {
1588
+ "heading": "Runs",
1589
+ "empty": "No runs in this window.",
1590
+ "runs": "{count} run | {count} runs",
1591
+ "avg": "avg {value}"
1592
+ },
1593
+ "status": {
1594
+ "done": "Completed",
1595
+ "failed": "Failed",
1596
+ "running": "Running",
1597
+ "other": "Other"
1598
+ }
1599
+ },
1527
1600
  "auth": {
1528
1601
  "gate": {
1529
1602
  "loading": "Loading…"
@@ -111,6 +111,7 @@
111
111
  "modelConfiguration": "Configuración del modelo",
112
112
  "accountSettings": "Ajustes de la cuenta",
113
113
  "operatorDashboard": "Observabilidad de la plataforma",
114
+ "reports": "Informes",
114
115
  "infrastructure": "Infraestructura",
115
116
  "environmentSetup": "Configuración de entorno"
116
117
  },
@@ -455,7 +456,10 @@
455
456
  "retryFailed": "El reintento falló",
456
457
  "startFailed": "No se pudo iniciar",
457
458
  "mergeFailed": "No se pudo fusionar",
458
- "restartFailed": "No se pudo reiniciar"
459
+ "restartFailed": "No se pudo reiniciar",
460
+ "approveFailed": "No se pudo aprobar",
461
+ "requestChangesFailed": "No se pudieron solicitar cambios",
462
+ "rejectFailed": "No se pudo rechazar"
459
463
  },
460
464
  "reviewFriction": {
461
465
  "warnTitle": "Tareas esperando revisión",
@@ -979,6 +983,7 @@
979
983
  "body": "Inicia un pipeline para ver el historial de ejecución aquí."
980
984
  },
981
985
  "chooseApproach": "Elegir enfoque",
986
+ "triageFollowUps": "Decidir seguimientos",
982
987
  "elapsedTooltip": "Tiempo transcurrido en este paso",
983
988
  "reviewFindings": "Revisar hallazgos"
984
989
  },
@@ -1212,6 +1217,10 @@
1212
1217
  "details": "Detalles",
1213
1218
  "approvalRequired": "Se requiere aprobación",
1214
1219
  "decisionRequired": "Se requiere una decisión",
1220
+ "followUpsParked": "El Coder planteó seguimientos que necesitan una decisión antes de que la ejecución pueda continuar. Resuelve cada elemento (crear, devolver, responder o descartar) en la ventana de seguimientos.",
1221
+ "forkParked": "Este paso del Coder espera a que se elija un enfoque de implementación antes de escribir código. Elige un enfoque propuesto (o introduce el tuyo) en la ventana de decisión.",
1222
+ "openFollowUps": "Abrir seguimientos",
1223
+ "chooseApproach": "Elegir enfoque",
1215
1224
  "expandAll": "Expandir todas las secciones",
1216
1225
  "collapseAll": "Contraer todas las secciones",
1217
1226
  "copyRawOutput": "Copiar salida sin procesar",
@@ -1461,6 +1470,70 @@
1461
1470
  "title": "Activas ahora"
1462
1471
  }
1463
1472
  },
1473
+ "reports": {
1474
+ "title": "Informes",
1475
+ "refresh": "Actualizar",
1476
+ "loading": "Cargando informes…",
1477
+ "retry": "Reintentar",
1478
+ "error": "No se pudieron cargar los informes.",
1479
+ "period": "Del {from} al {to}",
1480
+ "unattributed": "Sin atribuir",
1481
+ "window": {
1482
+ "oneDay": "Últimas 24 horas",
1483
+ "sevenDays": "Últimos 7 días",
1484
+ "thirtyDays": "Últimos 30 días",
1485
+ "ninetyDays": "Últimos 90 días"
1486
+ },
1487
+ "filter": {
1488
+ "board": "Tablero",
1489
+ "allBoards": "Todos los tableros"
1490
+ },
1491
+ "dimension": {
1492
+ "workspace": "Tablero",
1493
+ "service": "Servicio",
1494
+ "taskType": "Tipo de tarea"
1495
+ },
1496
+ "breakdown": {
1497
+ "title": "Desglose por"
1498
+ },
1499
+ "totals": {
1500
+ "title": "En este periodo",
1501
+ "metered": "Gasto medido",
1502
+ "subscription": "Suscripción",
1503
+ "calls": "Llamadas al LLM",
1504
+ "tokens": "Tokens",
1505
+ "illustrative": "Los costes de suscripción son orientativos: esos planes son de tarifa plana, no se facturan por token y nunca cuentan como gasto."
1506
+ },
1507
+ "trend": {
1508
+ "title": "Gasto a lo largo del tiempo",
1509
+ "empty": "No se registró uso en este periodo."
1510
+ },
1511
+ "legend": {
1512
+ "metered": "Medido",
1513
+ "subscription": "Suscripción"
1514
+ },
1515
+ "spend": {
1516
+ "byModel": "Gasto por modelo",
1517
+ "byAgentKind": "Gasto por tipo de agente",
1518
+ "heading": "Gasto",
1519
+ "empty": "No se registró uso en este periodo.",
1520
+ "calls": "{count} llamada | {count} llamadas",
1521
+ "tokens": "{input} de entrada / {output} de salida",
1522
+ "subscriptionAside": "+{value} suscripción"
1523
+ },
1524
+ "activity": {
1525
+ "heading": "Ejecuciones",
1526
+ "empty": "No hubo ejecuciones en este periodo.",
1527
+ "runs": "{count} ejecución | {count} ejecuciones",
1528
+ "avg": "media {value}"
1529
+ },
1530
+ "status": {
1531
+ "done": "Completadas",
1532
+ "failed": "Fallidas",
1533
+ "running": "En curso",
1534
+ "other": "Otras"
1535
+ }
1536
+ },
1464
1537
  "auth": {
1465
1538
  "gate": {
1466
1539
  "loading": "Cargando…"
@@ -111,6 +111,7 @@
111
111
  "modelConfiguration": "Configuration du modèle",
112
112
  "accountSettings": "Paramètres du compte",
113
113
  "operatorDashboard": "Observabilité de la plateforme",
114
+ "reports": "Rapports",
114
115
  "infrastructure": "Infrastructure",
115
116
  "environmentSetup": "Configuration d'environnement"
116
117
  },
@@ -455,7 +456,10 @@
455
456
  "retryFailed": "Échec de la nouvelle tentative",
456
457
  "startFailed": "Échec du démarrage",
457
458
  "mergeFailed": "Échec de la fusion",
458
- "restartFailed": "Échec du redémarrage"
459
+ "restartFailed": "Échec du redémarrage",
460
+ "approveFailed": "Échec de l'approbation",
461
+ "requestChangesFailed": "Échec de la demande de modifications",
462
+ "rejectFailed": "Échec du rejet"
459
463
  },
460
464
  "reviewFriction": {
461
465
  "warnTitle": "Tâches en attente de revue",
@@ -979,6 +983,7 @@
979
983
  "body": "Lancez un pipeline pour voir l'historique d'exécution ici."
980
984
  },
981
985
  "chooseApproach": "Choisir l'approche",
986
+ "triageFollowUps": "Trancher les suivis",
982
987
  "elapsedTooltip": "Temps écoulé sur cette étape",
983
988
  "reviewFindings": "Examiner les remarques"
984
989
  },
@@ -1212,6 +1217,10 @@
1212
1217
  "details": "Détails",
1213
1218
  "approvalRequired": "Approbation requise",
1214
1219
  "decisionRequired": "Décision requise",
1220
+ "followUpsParked": "Le Coder a soulevé des suivis qui doivent être tranchés avant que l'exécution puisse continuer. Traitez chaque élément (créer, renvoyer, répondre ou écarter) dans la fenêtre des suivis.",
1221
+ "forkParked": "Cette étape du Coder attend le choix d'une approche d'implémentation avant d'écrire du code. Choisissez une approche proposée (ou saisissez la vôtre) dans la fenêtre de décision.",
1222
+ "openFollowUps": "Ouvrir les suivis",
1223
+ "chooseApproach": "Choisir l'approche",
1215
1224
  "expandAll": "Développer toutes les sections",
1216
1225
  "collapseAll": "Réduire toutes les sections",
1217
1226
  "copyRawOutput": "Copier la sortie brute",
@@ -1461,6 +1470,70 @@
1461
1470
  "title": "En direct"
1462
1471
  }
1463
1472
  },
1473
+ "reports": {
1474
+ "title": "Rapports",
1475
+ "refresh": "Actualiser",
1476
+ "loading": "Chargement des rapports…",
1477
+ "retry": "Réessayer",
1478
+ "error": "Impossible de charger les rapports.",
1479
+ "period": "Du {from} au {to}",
1480
+ "unattributed": "Non attribué",
1481
+ "window": {
1482
+ "oneDay": "Dernières 24 heures",
1483
+ "sevenDays": "7 derniers jours",
1484
+ "thirtyDays": "30 derniers jours",
1485
+ "ninetyDays": "90 derniers jours"
1486
+ },
1487
+ "filter": {
1488
+ "board": "Tableau",
1489
+ "allBoards": "Tous les tableaux"
1490
+ },
1491
+ "dimension": {
1492
+ "workspace": "Tableau",
1493
+ "service": "Service",
1494
+ "taskType": "Type de tâche"
1495
+ },
1496
+ "breakdown": {
1497
+ "title": "Répartition par"
1498
+ },
1499
+ "totals": {
1500
+ "title": "Sur cette période",
1501
+ "metered": "Dépense facturée",
1502
+ "subscription": "Abonnement",
1503
+ "calls": "Appels LLM",
1504
+ "tokens": "Jetons",
1505
+ "illustrative": "Les coûts d’abonnement sont indicatifs : ces forfaits sont à tarif fixe, ne sont pas facturés au jeton et ne comptent jamais comme dépense."
1506
+ },
1507
+ "trend": {
1508
+ "title": "Dépense dans le temps",
1509
+ "empty": "Aucune utilisation enregistrée sur cette période."
1510
+ },
1511
+ "legend": {
1512
+ "metered": "Facturé",
1513
+ "subscription": "Abonnement"
1514
+ },
1515
+ "spend": {
1516
+ "byModel": "Dépense par modèle",
1517
+ "byAgentKind": "Dépense par type d’agent",
1518
+ "heading": "Dépense",
1519
+ "empty": "Aucune utilisation enregistrée sur cette période.",
1520
+ "calls": "{count} appel | {count} appels",
1521
+ "tokens": "{input} en entrée / {output} en sortie",
1522
+ "subscriptionAside": "+{value} abonnement"
1523
+ },
1524
+ "activity": {
1525
+ "heading": "Exécutions",
1526
+ "empty": "Aucune exécution sur cette période.",
1527
+ "runs": "{count} exécution | {count} exécutions",
1528
+ "avg": "moy. {value}"
1529
+ },
1530
+ "status": {
1531
+ "done": "Terminées",
1532
+ "failed": "Échouées",
1533
+ "running": "En cours",
1534
+ "other": "Autres"
1535
+ }
1536
+ },
1464
1537
  "auth": {
1465
1538
  "gate": {
1466
1539
  "loading": "Chargement…"
@@ -112,6 +112,7 @@
112
112
  "modelConfiguration": "תצורת מודל",
113
113
  "accountSettings": "הגדרות חשבון",
114
114
  "operatorDashboard": "תצפית על הפלטפורמה",
115
+ "reports": "דוחות",
115
116
  "environmentSetup": "הגדרת סביבה"
116
117
  },
117
118
  "board": {
@@ -455,7 +456,10 @@
455
456
  "retryFailed": "הניסיון החוזר נכשל",
456
457
  "startFailed": "ההפעלה נכשלה",
457
458
  "mergeFailed": "המיזוג נכשל",
458
- "restartFailed": "ההפעלה מחדש נכשלה"
459
+ "restartFailed": "ההפעלה מחדש נכשלה",
460
+ "approveFailed": "האישור נכשל",
461
+ "requestChangesFailed": "בקשת השינויים נכשלה",
462
+ "rejectFailed": "הדחייה נכשלה"
459
463
  },
460
464
  "reviewFriction": {
461
465
  "warnTitle": "משימות ממתינות לסקירה",
@@ -979,6 +983,7 @@
979
983
  "body": "התחל pipeline כדי לראות כאן את היסטוריית ההרצות."
980
984
  },
981
985
  "chooseApproach": "בחר גישה",
986
+ "triageFollowUps": "הכרע בהמשכים",
982
987
  "elapsedTooltip": "הזמן שחלף בשלב זה",
983
988
  "reviewFindings": "עיין בממצאים"
984
989
  },
@@ -1212,6 +1217,10 @@
1212
1217
  "details": "פרטים",
1213
1218
  "approvalRequired": "נדרש אישור",
1214
1219
  "decisionRequired": "נדרשת החלטה",
1220
+ "followUpsParked": "ה-Coder העלה המשכים שדורשים הכרעה לפני שהריצה תוכל להמשיך. טפל בכל פריט (תייק, החזר, ענה או דחה) בחלון ההמשכים.",
1221
+ "forkParked": "שלב ה-Coder הזה ממתין לבחירת גישת מימוש לפני כתיבת קוד. בחר גישה מוצעת (או הזן גישה משלך) בחלון ההחלטה.",
1222
+ "openFollowUps": "פתח את ההמשכים",
1223
+ "chooseApproach": "בחר גישה",
1215
1224
  "expandAll": "הרחב את כל המקטעים",
1216
1225
  "collapseAll": "כווץ את כל המקטעים",
1217
1226
  "copyRawOutput": "העתק פלט גולמי",
@@ -1461,6 +1470,70 @@
1461
1470
  "title": "פעילות כעת"
1462
1471
  }
1463
1472
  },
1473
+ "reports": {
1474
+ "title": "דוחות",
1475
+ "refresh": "רענון",
1476
+ "loading": "טוען דוחות…",
1477
+ "retry": "נסה שוב",
1478
+ "error": "לא ניתן היה לטעון את הדוחות.",
1479
+ "period": "מ־{from} עד {to}",
1480
+ "unattributed": "ללא שיוך",
1481
+ "window": {
1482
+ "oneDay": "24 השעות האחרונות",
1483
+ "sevenDays": "7 הימים האחרונים",
1484
+ "thirtyDays": "30 הימים האחרונים",
1485
+ "ninetyDays": "90 הימים האחרונים"
1486
+ },
1487
+ "filter": {
1488
+ "board": "לוח",
1489
+ "allBoards": "כל הלוחות"
1490
+ },
1491
+ "dimension": {
1492
+ "workspace": "לוח",
1493
+ "service": "שירות",
1494
+ "taskType": "סוג משימה"
1495
+ },
1496
+ "breakdown": {
1497
+ "title": "פילוח לפי"
1498
+ },
1499
+ "totals": {
1500
+ "title": "בטווח הזה",
1501
+ "metered": "עלות בפועל",
1502
+ "subscription": "מנוי",
1503
+ "calls": "קריאות למודל",
1504
+ "tokens": "טוקנים",
1505
+ "illustrative": "עלויות המנוי הן להמחשה בלבד — התוכניות האלו בתעריף קבוע, אינן מחויבות לפי טוקן ולעולם אינן נספרות כהוצאה."
1506
+ },
1507
+ "trend": {
1508
+ "title": "עלות לאורך זמן",
1509
+ "empty": "לא נרשם שימוש בטווח הזה."
1510
+ },
1511
+ "legend": {
1512
+ "metered": "בפועל",
1513
+ "subscription": "מנוי"
1514
+ },
1515
+ "spend": {
1516
+ "byModel": "עלות לפי מודל",
1517
+ "byAgentKind": "עלות לפי סוג סוכן",
1518
+ "heading": "עלות",
1519
+ "empty": "לא נרשם שימוש בטווח הזה.",
1520
+ "calls": "קריאה {count} | {count} קריאות",
1521
+ "tokens": "{input} נכנס / {output} יוצא",
1522
+ "subscriptionAside": "+{value} מנוי"
1523
+ },
1524
+ "activity": {
1525
+ "heading": "ריצות",
1526
+ "empty": "לא היו ריצות בטווח הזה.",
1527
+ "runs": "ריצה {count} | {count} ריצות",
1528
+ "avg": "ממוצע {value}"
1529
+ },
1530
+ "status": {
1531
+ "done": "הושלמו",
1532
+ "failed": "נכשלו",
1533
+ "running": "רצות",
1534
+ "other": "אחר"
1535
+ }
1536
+ },
1464
1537
  "auth": {
1465
1538
  "gate": {
1466
1539
  "loading": "טוען…"
@@ -1298,6 +1298,7 @@
1298
1298
  "open": "Aperta",
1299
1299
  "mergePr": "Unisci PR",
1300
1300
  "chooseApproach": "Scegli approccio",
1301
+ "triageFollowUps": "Decidi i follow-up",
1301
1302
  "elapsedTooltip": "Tempo trascorso su questo passaggio",
1302
1303
  "reviewFindings": "Esamina i rilievi"
1303
1304
  },
@@ -1531,6 +1532,10 @@
1531
1532
  "details": "Dettagli",
1532
1533
  "approvalRequired": "Approvazione richiesta",
1533
1534
  "decisionRequired": "Decisione richiesta",
1535
+ "followUpsParked": "Il Coder ha sollevato follow-up che richiedono una decisione prima che la run possa continuare. Gestisci ogni elemento (crea, rimanda indietro, rispondi o scarta) nella finestra dei follow-up.",
1536
+ "forkParked": "Questo passo del Coder attende la scelta di un approccio di implementazione prima di scrivere codice. Scegli un approccio proposto (o inserisci il tuo) nella finestra di decisione.",
1537
+ "openFollowUps": "Apri i follow-up",
1538
+ "chooseApproach": "Scegli approccio",
1534
1539
  "expandAll": "Espandi tutte le sezioni",
1535
1540
  "collapseAll": "Comprimi tutte le sezioni",
1536
1541
  "copyRawOutput": "Copia l'output grezzo",
@@ -3000,6 +3005,70 @@
3000
3005
  "title": "Attive ora"
3001
3006
  }
3002
3007
  },
3008
+ "reports": {
3009
+ "title": "Report",
3010
+ "refresh": "Aggiorna",
3011
+ "loading": "Caricamento dei report…",
3012
+ "retry": "Riprova",
3013
+ "error": "Impossibile caricare i report.",
3014
+ "period": "Dal {from} al {to}",
3015
+ "unattributed": "Non attribuito",
3016
+ "window": {
3017
+ "oneDay": "Ultime 24 ore",
3018
+ "sevenDays": "Ultimi 7 giorni",
3019
+ "thirtyDays": "Ultimi 30 giorni",
3020
+ "ninetyDays": "Ultimi 90 giorni"
3021
+ },
3022
+ "filter": {
3023
+ "board": "Board",
3024
+ "allBoards": "Tutti i board"
3025
+ },
3026
+ "dimension": {
3027
+ "workspace": "Board",
3028
+ "service": "Servizio",
3029
+ "taskType": "Tipo di attività"
3030
+ },
3031
+ "breakdown": {
3032
+ "title": "Suddivisione per"
3033
+ },
3034
+ "totals": {
3035
+ "title": "In questo periodo",
3036
+ "metered": "Spesa a consumo",
3037
+ "subscription": "Abbonamento",
3038
+ "calls": "Chiamate LLM",
3039
+ "tokens": "Token",
3040
+ "illustrative": "I costi degli abbonamenti sono indicativi: questi piani sono a tariffa fissa, non vengono fatturati per token e non contano mai come spesa."
3041
+ },
3042
+ "trend": {
3043
+ "title": "Spesa nel tempo",
3044
+ "empty": "Nessun utilizzo registrato in questo periodo."
3045
+ },
3046
+ "legend": {
3047
+ "metered": "A consumo",
3048
+ "subscription": "Abbonamento"
3049
+ },
3050
+ "spend": {
3051
+ "byModel": "Spesa per modello",
3052
+ "byAgentKind": "Spesa per tipo di agente",
3053
+ "heading": "Spesa",
3054
+ "empty": "Nessun utilizzo registrato in questo periodo.",
3055
+ "calls": "{count} chiamata | {count} chiamate",
3056
+ "tokens": "{input} in ingresso / {output} in uscita",
3057
+ "subscriptionAside": "+{value} abbonamento"
3058
+ },
3059
+ "activity": {
3060
+ "heading": "Esecuzioni",
3061
+ "empty": "Nessuna esecuzione in questo periodo.",
3062
+ "runs": "{count} esecuzione | {count} esecuzioni",
3063
+ "avg": "media {value}"
3064
+ },
3065
+ "status": {
3066
+ "done": "Completate",
3067
+ "failed": "Fallite",
3068
+ "running": "In corso",
3069
+ "other": "Altre"
3070
+ }
3071
+ },
3003
3072
  "auth": {
3004
3073
  "gate": {
3005
3074
  "loading": "Caricamento…"
@@ -4159,6 +4228,7 @@
4159
4228
  "modelConfiguration": "Configurazione del modello",
4160
4229
  "accountSettings": "Impostazioni dell'account",
4161
4230
  "operatorDashboard": "Osservabilità della piattaforma",
4231
+ "reports": "Report",
4162
4232
  "environmentSetup": "Configurazione dell'ambiente"
4163
4233
  },
4164
4234
  "errors": {
@@ -4166,7 +4236,10 @@
4166
4236
  "retryFailed": "Nuovo tentativo non riuscito",
4167
4237
  "startFailed": "Avvio non riuscito",
4168
4238
  "mergeFailed": "Merge non riuscito",
4169
- "restartFailed": "Riavvio non riuscito"
4239
+ "restartFailed": "Riavvio non riuscito",
4240
+ "approveFailed": "Approvazione non riuscita",
4241
+ "requestChangesFailed": "Richiesta di modifiche non riuscita",
4242
+ "rejectFailed": "Rifiuto non riuscito"
4170
4243
  },
4171
4244
  "reviewFriction": {
4172
4245
  "warnTitle": "Attività in attesa di revisione",