@cat-factory/app 0.160.1 → 0.162.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/app/components/environments/EnvironmentStatusPanel.vue +2 -0
  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/ServiceTestConfig.vue +9 -0
  7. package/app/components/settings/CloudflareHandlerSection.vue +319 -0
  8. package/app/components/settings/InfraHandlersConfigurator.vue +7 -0
  9. package/app/composables/api/reports.ts +19 -0
  10. package/app/composables/useApi.ts +2 -0
  11. package/app/composables/useNavContributions.ts +1 -0
  12. package/app/composables/useWorkspaceStream.ts +5 -2
  13. package/app/modular/nav-contributions.spec.ts +1 -0
  14. package/app/modular/nav-contributions.ts +11 -0
  15. package/app/pages/index.vue +2 -0
  16. package/app/stores/providerConnections.ts +1 -0
  17. package/app/stores/reports.spec.ts +113 -0
  18. package/app/stores/reports.ts +91 -0
  19. package/app/stores/ui/modals.ts +14 -0
  20. package/app/types/execution.ts +8 -0
  21. package/app/utils/apiOrigin.spec.ts +37 -0
  22. package/app/utils/apiOrigin.ts +30 -0
  23. package/i18n/locales/de.json +89 -1
  24. package/i18n/locales/en.json +89 -1
  25. package/i18n/locales/es.json +89 -1
  26. package/i18n/locales/fr.json +89 -1
  27. package/i18n/locales/he.json +89 -1
  28. package/i18n/locales/it.json +89 -1
  29. package/i18n/locales/ja.json +89 -1
  30. package/i18n/locales/pl.json +89 -1
  31. package/i18n/locales/tr.json +89 -1
  32. package/i18n/locales/uk.json +89 -1
  33. package/package.json +2 -2
@@ -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
  },
@@ -800,6 +801,7 @@
800
801
  "infraless": "Sin infraestructura",
801
802
  "docker-compose": "Docker Compose",
802
803
  "kubernetes": "Kubernetes",
804
+ "cloudflare": "Vista previa de Cloudflare Workers",
803
805
  "custom": "Personalizado"
804
806
  },
805
807
  "composePath": "Ruta de docker-compose",
@@ -842,6 +844,7 @@
842
844
  "rendererHint": "Raw aplica los manifiestos tal cual. Kustomize construye primero un overlay (requiere el adaptador de despliegue en contenedor).",
843
845
  "customManifestId": "Tipo de manifiesto personalizado",
844
846
  "customManifestIdPlaceholder": "Elige un tipo de manifiesto",
847
+ "cloudflareHint": "Aquí no hay nada que configurar: la receta por pull request vive en el flujo de trabajo de vista previa de este repositorio. Conecta un controlador de Cloudflare Workers en Infraestructura para elegir la cuenta y los nombres.",
845
848
  "customNoTypes": "Aún no hay tipos de manifiesto personalizados. Añade uno en la ventana de Infraestructura.",
846
849
  "customManifestIdHint": "El tipo personalizado que produce este servicio, emparejado con un gestor remote-custom que configura el espacio de trabajo.",
847
850
  "customManifestPath": "Ruta del manifiesto (opcional)",
@@ -1459,6 +1462,70 @@
1459
1462
  "title": "Activas ahora"
1460
1463
  }
1461
1464
  },
1465
+ "reports": {
1466
+ "title": "Informes",
1467
+ "refresh": "Actualizar",
1468
+ "loading": "Cargando informes…",
1469
+ "retry": "Reintentar",
1470
+ "error": "No se pudieron cargar los informes.",
1471
+ "period": "Del {from} al {to}",
1472
+ "unattributed": "Sin atribuir",
1473
+ "window": {
1474
+ "oneDay": "Últimas 24 horas",
1475
+ "sevenDays": "Últimos 7 días",
1476
+ "thirtyDays": "Últimos 30 días",
1477
+ "ninetyDays": "Últimos 90 días"
1478
+ },
1479
+ "filter": {
1480
+ "board": "Tablero",
1481
+ "allBoards": "Todos los tableros"
1482
+ },
1483
+ "dimension": {
1484
+ "workspace": "Tablero",
1485
+ "service": "Servicio",
1486
+ "taskType": "Tipo de tarea"
1487
+ },
1488
+ "breakdown": {
1489
+ "title": "Desglose por"
1490
+ },
1491
+ "totals": {
1492
+ "title": "En este periodo",
1493
+ "metered": "Gasto medido",
1494
+ "subscription": "Suscripción",
1495
+ "calls": "Llamadas al LLM",
1496
+ "tokens": "Tokens",
1497
+ "illustrative": "Los costes de suscripción son orientativos: esos planes son de tarifa plana, no se facturan por token y nunca cuentan como gasto."
1498
+ },
1499
+ "trend": {
1500
+ "title": "Gasto a lo largo del tiempo",
1501
+ "empty": "No se registró uso en este periodo."
1502
+ },
1503
+ "legend": {
1504
+ "metered": "Medido",
1505
+ "subscription": "Suscripción"
1506
+ },
1507
+ "spend": {
1508
+ "byModel": "Gasto por modelo",
1509
+ "byAgentKind": "Gasto por tipo de agente",
1510
+ "heading": "Gasto",
1511
+ "empty": "No se registró uso en este periodo.",
1512
+ "calls": "{count} llamada | {count} llamadas",
1513
+ "tokens": "{input} de entrada / {output} de salida",
1514
+ "subscriptionAside": "+{value} suscripción"
1515
+ },
1516
+ "activity": {
1517
+ "heading": "Ejecuciones",
1518
+ "empty": "No hubo ejecuciones en este periodo.",
1519
+ "runs": "{count} ejecución | {count} ejecuciones",
1520
+ "avg": "media {value}"
1521
+ },
1522
+ "status": {
1523
+ "done": "Completadas",
1524
+ "failed": "Fallidas",
1525
+ "running": "En curso",
1526
+ "other": "Otras"
1527
+ }
1528
+ },
1462
1529
  "auth": {
1463
1530
  "gate": {
1464
1531
  "loading": "Cargando…"
@@ -2854,7 +2921,26 @@
2854
2921
  "loading": "Cargando la configuración de infraestructura…",
2855
2922
  "kubeNoun": "el controlador de Kubernetes",
2856
2923
  "kubeOverrideNoun": "la anulación de Kubernetes",
2857
- "customNoun": "este controlador"
2924
+ "customNoun": "este controlador",
2925
+ "cloudflareNoun": "el controlador de Cloudflare"
2926
+ },
2927
+ "cloudflare": {
2928
+ "intro": "Levanta un Worker de Cloudflare por cada pull request activando el flujo de trabajo de vista previa del repositorio de destino. cat-factory nunca habla directamente con Cloudflare: crea un despliegue, lee su estado y publica un estado inactive para desmontarlo.",
2929
+ "label": "Nombre visible",
2930
+ "subdomain": "Subdominio de workers.dev",
2931
+ "subdomainHint": "La URL de vista previa será https://WORKER.SUBDOMAIN.workers.dev: introduce solo la etiqueta del subdominio, sin \".workers.dev\".",
2932
+ "token": "Token de la API del VCS",
2933
+ "tokenPlaceholder": "Pega un token de permisos detallados",
2934
+ "tokenKeep": "Déjalo en blanco para conservar el token guardado",
2935
+ "tokenHint": "Necesita \"Deployments: read & write\" en el repositorio, y nada más.",
2936
+ "repo": "Repositorio del flujo de trabajo (opcional)",
2937
+ "repoHint": "Déjalo en blanco para usar el repositorio propio de cada frame de servicio. Fíjalo solo cuando un repositorio contenga el flujo de vista previa de varios servicios.",
2938
+ "advanced": "Avanzado",
2939
+ "workerTemplate": "Plantilla del nombre del Worker",
2940
+ "environmentTemplate": "Plantilla del nombre del entorno de despliegue",
2941
+ "templateHint": "Son el contrato con el flujo de vista previa: cat-factory deriva la URL de ellas y el flujo nombra sus recursos igual. Déjalas en blanco para usar la nomenclatura del flujo de referencia. Marcadores disponibles: pullNumber, branch, blockId.",
2942
+ "apiBaseUrl": "URL base de la API del VCS",
2943
+ "connectedAs": "Las vistas previas se despliegan en {subdomain}.workers.dev."
2858
2944
  }
2859
2945
  },
2860
2946
  "modelPolicy": {
@@ -4414,6 +4500,7 @@
4414
4500
  "provisionType": {
4415
4501
  "kubernetes": "Kubernetes",
4416
4502
  "docker-compose": "Docker Compose",
4503
+ "cloudflare": "Cloudflare Workers",
4417
4504
  "custom": "Personalizado",
4418
4505
  "infraless": "Sin infraestructura"
4419
4506
  },
@@ -4421,6 +4508,7 @@
4421
4508
  "local-docker": "Docker local",
4422
4509
  "local-k3s": "k3s local",
4423
4510
  "remote-kubernetes": "Kubernetes remoto",
4511
+ "cloudflare": "Vista previa de Cloudflare",
4424
4512
  "remote-custom": "Personalizado remoto (HTTP)",
4425
4513
  "none": "Ninguno"
4426
4514
  }
@@ -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
  },
@@ -800,6 +801,7 @@
800
801
  "infraless": "Aucune infrastructure",
801
802
  "docker-compose": "Docker Compose",
802
803
  "kubernetes": "Kubernetes",
804
+ "cloudflare": "Aperçu Cloudflare Workers",
803
805
  "custom": "Personnalisé"
804
806
  },
805
807
  "composePath": "Chemin docker-compose",
@@ -842,6 +844,7 @@
842
844
  "rendererHint": "Raw applique les manifestes tels quels. Kustomize construit d'abord un overlay (nécessite l'adaptateur de déploiement en conteneur).",
843
845
  "customManifestId": "Type de manifeste personnalisé",
844
846
  "customManifestIdPlaceholder": "Choisir un type de manifeste",
847
+ "cloudflareHint": "Rien à configurer ici : la recette par pull request se trouve dans le workflow d’aperçu de ce dépôt. Connectez un gestionnaire Cloudflare Workers dans Infrastructure pour choisir le compte et le nommage.",
845
848
  "customNoTypes": "Aucun type de manifeste personnalisé n'est encore défini. Ajoutez-en un dans la fenêtre Infrastructure.",
846
849
  "customManifestIdHint": "Le type personnalisé que ce service produit, associé à un gestionnaire remote-custom configuré par l'espace de travail.",
847
850
  "customManifestPath": "Chemin du manifeste (facultatif)",
@@ -1459,6 +1462,70 @@
1459
1462
  "title": "En direct"
1460
1463
  }
1461
1464
  },
1465
+ "reports": {
1466
+ "title": "Rapports",
1467
+ "refresh": "Actualiser",
1468
+ "loading": "Chargement des rapports…",
1469
+ "retry": "Réessayer",
1470
+ "error": "Impossible de charger les rapports.",
1471
+ "period": "Du {from} au {to}",
1472
+ "unattributed": "Non attribué",
1473
+ "window": {
1474
+ "oneDay": "Dernières 24 heures",
1475
+ "sevenDays": "7 derniers jours",
1476
+ "thirtyDays": "30 derniers jours",
1477
+ "ninetyDays": "90 derniers jours"
1478
+ },
1479
+ "filter": {
1480
+ "board": "Tableau",
1481
+ "allBoards": "Tous les tableaux"
1482
+ },
1483
+ "dimension": {
1484
+ "workspace": "Tableau",
1485
+ "service": "Service",
1486
+ "taskType": "Type de tâche"
1487
+ },
1488
+ "breakdown": {
1489
+ "title": "Répartition par"
1490
+ },
1491
+ "totals": {
1492
+ "title": "Sur cette période",
1493
+ "metered": "Dépense facturée",
1494
+ "subscription": "Abonnement",
1495
+ "calls": "Appels LLM",
1496
+ "tokens": "Jetons",
1497
+ "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."
1498
+ },
1499
+ "trend": {
1500
+ "title": "Dépense dans le temps",
1501
+ "empty": "Aucune utilisation enregistrée sur cette période."
1502
+ },
1503
+ "legend": {
1504
+ "metered": "Facturé",
1505
+ "subscription": "Abonnement"
1506
+ },
1507
+ "spend": {
1508
+ "byModel": "Dépense par modèle",
1509
+ "byAgentKind": "Dépense par type d’agent",
1510
+ "heading": "Dépense",
1511
+ "empty": "Aucune utilisation enregistrée sur cette période.",
1512
+ "calls": "{count} appel | {count} appels",
1513
+ "tokens": "{input} en entrée / {output} en sortie",
1514
+ "subscriptionAside": "+{value} abonnement"
1515
+ },
1516
+ "activity": {
1517
+ "heading": "Exécutions",
1518
+ "empty": "Aucune exécution sur cette période.",
1519
+ "runs": "{count} exécution | {count} exécutions",
1520
+ "avg": "moy. {value}"
1521
+ },
1522
+ "status": {
1523
+ "done": "Terminées",
1524
+ "failed": "Échouées",
1525
+ "running": "En cours",
1526
+ "other": "Autres"
1527
+ }
1528
+ },
1462
1529
  "auth": {
1463
1530
  "gate": {
1464
1531
  "loading": "Chargement…"
@@ -2854,7 +2921,26 @@
2854
2921
  "loading": "Chargement de la configuration de l'infrastructure…",
2855
2922
  "kubeNoun": "le gestionnaire Kubernetes",
2856
2923
  "kubeOverrideNoun": "le remplacement Kubernetes",
2857
- "customNoun": "ce gestionnaire"
2924
+ "customNoun": "ce gestionnaire",
2925
+ "cloudflareNoun": "le gestionnaire Cloudflare"
2926
+ },
2927
+ "cloudflare": {
2928
+ "intro": "Déploie un Worker Cloudflare par pull request en déclenchant le workflow d’aperçu du dépôt cible. cat-factory ne parle jamais directement à Cloudflare : il crée un déploiement, lit son statut et publie un statut inactive pour le démonter.",
2929
+ "label": "Nom affiché",
2930
+ "subdomain": "Sous-domaine workers.dev",
2931
+ "subdomainHint": "L’URL d’aperçu devient https://WORKER.SUBDOMAIN.workers.dev — saisissez uniquement le libellé du sous-domaine, sans « .workers.dev ».",
2932
+ "token": "Jeton d’API du VCS",
2933
+ "tokenPlaceholder": "Collez un jeton à portée fine",
2934
+ "tokenKeep": "Laissez vide pour conserver le jeton enregistré",
2935
+ "tokenHint": "Nécessite « Deployments : read & write » sur le dépôt, et rien d’autre.",
2936
+ "repo": "Dépôt du workflow (facultatif)",
2937
+ "repoHint": "Laissez vide pour utiliser le dépôt propre à chaque frame de service. Ne le fixez que si un seul dépôt porte le workflow d’aperçu de plusieurs services.",
2938
+ "advanced": "Avancé",
2939
+ "workerTemplate": "Modèle de nom du Worker",
2940
+ "environmentTemplate": "Modèle de nom d’environnement de déploiement",
2941
+ "templateHint": "Ce sont le contrat avec le workflow d’aperçu : cat-factory en dérive l’URL et le workflow nomme ses ressources de la même façon. Laissez vide pour reprendre la nomenclature du workflow de référence. Espaces réservés disponibles : pullNumber, branch, blockId.",
2942
+ "apiBaseUrl": "URL de base de l’API du VCS",
2943
+ "connectedAs": "Les aperçus sont déployés sur {subdomain}.workers.dev."
2858
2944
  }
2859
2945
  },
2860
2946
  "modelPolicy": {
@@ -4414,6 +4500,7 @@
4414
4500
  "provisionType": {
4415
4501
  "kubernetes": "Kubernetes",
4416
4502
  "docker-compose": "Docker Compose",
4503
+ "cloudflare": "Cloudflare Workers",
4417
4504
  "custom": "Personnalisé",
4418
4505
  "infraless": "Sans infrastructure"
4419
4506
  },
@@ -4421,6 +4508,7 @@
4421
4508
  "local-docker": "Docker local",
4422
4509
  "local-k3s": "k3s local",
4423
4510
  "remote-kubernetes": "Kubernetes distant",
4511
+ "cloudflare": "Aperçu Cloudflare",
4424
4512
  "remote-custom": "Personnalisé distant (HTTP)",
4425
4513
  "none": "Aucun"
4426
4514
  }
@@ -112,6 +112,7 @@
112
112
  "modelConfiguration": "תצורת מודל",
113
113
  "accountSettings": "הגדרות חשבון",
114
114
  "operatorDashboard": "תצפית על הפלטפורמה",
115
+ "reports": "דוחות",
115
116
  "environmentSetup": "הגדרת סביבה"
116
117
  },
117
118
  "board": {
@@ -800,6 +801,7 @@
800
801
  "infraless": "ללא תשתית",
801
802
  "docker-compose": "Docker Compose",
802
803
  "kubernetes": "Kubernetes",
804
+ "cloudflare": "תצוגה מקדימה של Cloudflare Workers",
803
805
  "custom": "מותאם אישית"
804
806
  },
805
807
  "composePath": "נתיב docker-compose",
@@ -842,6 +844,7 @@
842
844
  "rendererHint": "Raw מחיל את המניפסטים כפי שהם. Kustomize בונה תחילה overlay (דורש את מתאם הפריסה בקונטיינר).",
843
845
  "customManifestId": "סוג מניפסט מותאם",
844
846
  "customManifestIdPlaceholder": "בחר סוג מניפסט",
847
+ "cloudflareHint": "אין כאן מה להגדיר: המתכון לכל בקשת משיכה נמצא בתהליך העבודה לתצוגה מקדימה של מאגר זה. חבר מטפל של Cloudflare Workers תחת תשתית כדי לבחור את החשבון ואת מוסכמות השמות.",
845
848
  "customNoTypes": "עדיין לא הוגדרו סוגי מניפסט מותאמים. הוסף אחד בחלון התשתית.",
846
849
  "customManifestIdHint": "הסוג המותאם שהשירות הזה מייצר, המותאם למטפל remote-custom שהמרחב מגדיר.",
847
850
  "customManifestPath": "נתיב המניפסט (אופציונלי)",
@@ -1459,6 +1462,70 @@
1459
1462
  "title": "פעילות כעת"
1460
1463
  }
1461
1464
  },
1465
+ "reports": {
1466
+ "title": "דוחות",
1467
+ "refresh": "רענון",
1468
+ "loading": "טוען דוחות…",
1469
+ "retry": "נסה שוב",
1470
+ "error": "לא ניתן היה לטעון את הדוחות.",
1471
+ "period": "מ־{from} עד {to}",
1472
+ "unattributed": "ללא שיוך",
1473
+ "window": {
1474
+ "oneDay": "24 השעות האחרונות",
1475
+ "sevenDays": "7 הימים האחרונים",
1476
+ "thirtyDays": "30 הימים האחרונים",
1477
+ "ninetyDays": "90 הימים האחרונים"
1478
+ },
1479
+ "filter": {
1480
+ "board": "לוח",
1481
+ "allBoards": "כל הלוחות"
1482
+ },
1483
+ "dimension": {
1484
+ "workspace": "לוח",
1485
+ "service": "שירות",
1486
+ "taskType": "סוג משימה"
1487
+ },
1488
+ "breakdown": {
1489
+ "title": "פילוח לפי"
1490
+ },
1491
+ "totals": {
1492
+ "title": "בטווח הזה",
1493
+ "metered": "עלות בפועל",
1494
+ "subscription": "מנוי",
1495
+ "calls": "קריאות למודל",
1496
+ "tokens": "טוקנים",
1497
+ "illustrative": "עלויות המנוי הן להמחשה בלבד — התוכניות האלו בתעריף קבוע, אינן מחויבות לפי טוקן ולעולם אינן נספרות כהוצאה."
1498
+ },
1499
+ "trend": {
1500
+ "title": "עלות לאורך זמן",
1501
+ "empty": "לא נרשם שימוש בטווח הזה."
1502
+ },
1503
+ "legend": {
1504
+ "metered": "בפועל",
1505
+ "subscription": "מנוי"
1506
+ },
1507
+ "spend": {
1508
+ "byModel": "עלות לפי מודל",
1509
+ "byAgentKind": "עלות לפי סוג סוכן",
1510
+ "heading": "עלות",
1511
+ "empty": "לא נרשם שימוש בטווח הזה.",
1512
+ "calls": "קריאה {count} | {count} קריאות",
1513
+ "tokens": "{input} נכנס / {output} יוצא",
1514
+ "subscriptionAside": "+{value} מנוי"
1515
+ },
1516
+ "activity": {
1517
+ "heading": "ריצות",
1518
+ "empty": "לא היו ריצות בטווח הזה.",
1519
+ "runs": "ריצה {count} | {count} ריצות",
1520
+ "avg": "ממוצע {value}"
1521
+ },
1522
+ "status": {
1523
+ "done": "הושלמו",
1524
+ "failed": "נכשלו",
1525
+ "running": "רצות",
1526
+ "other": "אחר"
1527
+ }
1528
+ },
1462
1529
  "auth": {
1463
1530
  "gate": {
1464
1531
  "loading": "טוען…"
@@ -2189,7 +2256,26 @@
2189
2256
  "loading": "טוען הגדרות תשתית…",
2190
2257
  "kubeNoun": "מטפל ה-Kubernetes",
2191
2258
  "kubeOverrideNoun": "עקיפת ה-Kubernetes",
2192
- "customNoun": "מטפל זה"
2259
+ "customNoun": "מטפל זה",
2260
+ "cloudflareNoun": "את מטפל Cloudflare"
2261
+ },
2262
+ "cloudflare": {
2263
+ "intro": "מקים Worker של Cloudflare לכל בקשת משיכה על ידי הפעלת תהליך העבודה לתצוגה מקדימה של המאגר היעד. cat-factory אף פעם לא פונה ישירות ל-Cloudflare: הוא יוצר פריסה, קורא את מצבה, ומפרסם מצב inactive כדי לפרק אותה.",
2264
+ "label": "שם לתצוגה",
2265
+ "subdomain": "תת-דומיין של workers.dev",
2266
+ "subdomainHint": "כתובת התצוגה המקדימה תהיה https://WORKER.SUBDOMAIN.workers.dev — הזן רק את תווית תת-הדומיין, בלי \".workers.dev\".",
2267
+ "token": "אסימון API של מערכת ניהול הגרסאות",
2268
+ "tokenPlaceholder": "הדבק אסימון בעל הרשאות מדויקות",
2269
+ "tokenKeep": "השאר ריק כדי לשמור על האסימון הקיים",
2270
+ "tokenHint": "נדרשת הרשאת \"Deployments: read & write\" על המאגר בלבד.",
2271
+ "repo": "המאגר שמכיל את תהליך העבודה (אופציונלי)",
2272
+ "repoHint": "השאר ריק כדי להשתמש במאגר של כל מסגרת שירות. קבע ערך רק כאשר מאגר אחד מחזיק את תהליך התצוגה המקדימה עבור כמה שירותים.",
2273
+ "advanced": "מתקדם",
2274
+ "workerTemplate": "תבנית לשם ה-Worker",
2275
+ "environmentTemplate": "תבנית לשם סביבת הפריסה",
2276
+ "templateHint": "אלה ההסכם מול תהליך התצוגה המקדימה: cat-factory גוזר מהם את הכתובת, ותהליך העבודה מעניק לאותם משאבים את אותם שמות. השאר ריק כדי להשתמש בשמות של תהליך העבודה הייחוס. מצייני מקום זמינים: pullNumber, branch, blockId.",
2277
+ "apiBaseUrl": "כתובת הבסיס של ה-API של מערכת ניהול הגרסאות",
2278
+ "connectedAs": "תצוגות מקדימות נפרסות אל {subdomain}.workers.dev."
2193
2279
  }
2194
2280
  },
2195
2281
  "providerConnection": {
@@ -4425,6 +4511,7 @@
4425
4511
  "provisionType": {
4426
4512
  "kubernetes": "Kubernetes",
4427
4513
  "docker-compose": "Docker Compose",
4514
+ "cloudflare": "Cloudflare Workers",
4428
4515
  "custom": "מותאם",
4429
4516
  "infraless": "ללא תשתית"
4430
4517
  },
@@ -4432,6 +4519,7 @@
4432
4519
  "local-docker": "Docker מקומי",
4433
4520
  "local-k3s": "k3s מקומי",
4434
4521
  "remote-kubernetes": "Kubernetes מרוחק",
4522
+ "cloudflare": "תצוגה מקדימה של Cloudflare",
4435
4523
  "remote-custom": "מותאם מרוחק (HTTP)",
4436
4524
  "none": "ללא"
4437
4525
  }
@@ -173,7 +173,26 @@
173
173
  "loading": "Caricamento delle impostazioni dell'infrastruttura…",
174
174
  "kubeNoun": "l'handler Kubernetes",
175
175
  "kubeOverrideNoun": "l'override Kubernetes",
176
- "customNoun": "questo handler"
176
+ "customNoun": "questo handler",
177
+ "cloudflareNoun": "l’handler Cloudflare"
178
+ },
179
+ "cloudflare": {
180
+ "intro": "Avvia un Worker Cloudflare per ogni pull request attivando il workflow di anteprima del repository di destinazione. cat-factory non parla mai direttamente con Cloudflare: crea un deployment, ne legge lo stato e pubblica uno stato inactive per smantellarlo.",
181
+ "label": "Nome visualizzato",
182
+ "subdomain": "Sottodominio workers.dev",
183
+ "subdomainHint": "L’URL di anteprima diventa https://WORKER.SUBDOMAIN.workers.dev: inserisci solo l’etichetta del sottodominio, senza \".workers.dev\".",
184
+ "token": "Token API del VCS",
185
+ "tokenPlaceholder": "Incolla un token a granularità fine",
186
+ "tokenKeep": "Lascia vuoto per mantenere il token salvato",
187
+ "tokenHint": "Richiede \"Deployments: read & write\" sul repository e nient’altro.",
188
+ "repo": "Repository del workflow (facoltativo)",
189
+ "repoHint": "Lascia vuoto per usare il repository di ciascun frame di servizio. Fissalo solo quando un repository contiene il workflow di anteprima per più servizi.",
190
+ "advanced": "Avanzate",
191
+ "workerTemplate": "Modello del nome del Worker",
192
+ "environmentTemplate": "Modello del nome dell’ambiente di deployment",
193
+ "templateHint": "Sono il contratto con il workflow di anteprima: cat-factory ne ricava l’URL e il workflow nomina le sue risorse allo stesso modo. Lascia vuoto per usare la denominazione del workflow di riferimento. Segnaposto disponibili: pullNumber, branch, blockId.",
194
+ "apiBaseUrl": "URL base dell’API del VCS",
195
+ "connectedAs": "Le anteprime vengono distribuite su {subdomain}.workers.dev."
177
196
  }
178
197
  },
179
198
  "providerConnection": {
@@ -1100,6 +1119,7 @@
1100
1119
  "infraless": "Nessuna infrastruttura",
1101
1120
  "docker-compose": "Docker Compose",
1102
1121
  "kubernetes": "Kubernetes",
1122
+ "cloudflare": "Anteprima Cloudflare Workers",
1103
1123
  "custom": "Personalizzato"
1104
1124
  },
1105
1125
  "composePath": "Percorso docker-compose",
@@ -1142,6 +1162,7 @@
1142
1162
  "rendererHint": "Raw applica i manifest cosi' come sono. Kustomize compila prima un overlay (richiede l'adattatore di deploy in container).",
1143
1163
  "customManifestId": "Tipo di manifest personalizzato",
1144
1164
  "customManifestIdPlaceholder": "Scegli un tipo di manifest",
1165
+ "cloudflareHint": "Qui non c’è nulla da configurare: la ricetta per ogni pull request si trova nel workflow di anteprima di questo repository. Collega un handler Cloudflare Workers in Infrastruttura per scegliere account e denominazione.",
1145
1166
  "customNoTypes": "Nessun tipo di manifest personalizzato ancora definito. Aggiungine uno nella finestra Infrastruttura.",
1146
1167
  "customManifestIdHint": "Il tipo personalizzato che questo servizio produce, abbinato a un handler remote-custom configurato dal workspace.",
1147
1168
  "customManifestPath": "Percorso del manifest (facoltativo)",
@@ -2979,6 +3000,70 @@
2979
3000
  "title": "Attive ora"
2980
3001
  }
2981
3002
  },
3003
+ "reports": {
3004
+ "title": "Report",
3005
+ "refresh": "Aggiorna",
3006
+ "loading": "Caricamento dei report…",
3007
+ "retry": "Riprova",
3008
+ "error": "Impossibile caricare i report.",
3009
+ "period": "Dal {from} al {to}",
3010
+ "unattributed": "Non attribuito",
3011
+ "window": {
3012
+ "oneDay": "Ultime 24 ore",
3013
+ "sevenDays": "Ultimi 7 giorni",
3014
+ "thirtyDays": "Ultimi 30 giorni",
3015
+ "ninetyDays": "Ultimi 90 giorni"
3016
+ },
3017
+ "filter": {
3018
+ "board": "Board",
3019
+ "allBoards": "Tutti i board"
3020
+ },
3021
+ "dimension": {
3022
+ "workspace": "Board",
3023
+ "service": "Servizio",
3024
+ "taskType": "Tipo di attività"
3025
+ },
3026
+ "breakdown": {
3027
+ "title": "Suddivisione per"
3028
+ },
3029
+ "totals": {
3030
+ "title": "In questo periodo",
3031
+ "metered": "Spesa a consumo",
3032
+ "subscription": "Abbonamento",
3033
+ "calls": "Chiamate LLM",
3034
+ "tokens": "Token",
3035
+ "illustrative": "I costi degli abbonamenti sono indicativi: questi piani sono a tariffa fissa, non vengono fatturati per token e non contano mai come spesa."
3036
+ },
3037
+ "trend": {
3038
+ "title": "Spesa nel tempo",
3039
+ "empty": "Nessun utilizzo registrato in questo periodo."
3040
+ },
3041
+ "legend": {
3042
+ "metered": "A consumo",
3043
+ "subscription": "Abbonamento"
3044
+ },
3045
+ "spend": {
3046
+ "byModel": "Spesa per modello",
3047
+ "byAgentKind": "Spesa per tipo di agente",
3048
+ "heading": "Spesa",
3049
+ "empty": "Nessun utilizzo registrato in questo periodo.",
3050
+ "calls": "{count} chiamata | {count} chiamate",
3051
+ "tokens": "{input} in ingresso / {output} in uscita",
3052
+ "subscriptionAside": "+{value} abbonamento"
3053
+ },
3054
+ "activity": {
3055
+ "heading": "Esecuzioni",
3056
+ "empty": "Nessuna esecuzione in questo periodo.",
3057
+ "runs": "{count} esecuzione | {count} esecuzioni",
3058
+ "avg": "media {value}"
3059
+ },
3060
+ "status": {
3061
+ "done": "Completate",
3062
+ "failed": "Fallite",
3063
+ "running": "In corso",
3064
+ "other": "Altre"
3065
+ }
3066
+ },
2982
3067
  "auth": {
2983
3068
  "gate": {
2984
3069
  "loading": "Caricamento…"
@@ -4138,6 +4223,7 @@
4138
4223
  "modelConfiguration": "Configurazione del modello",
4139
4224
  "accountSettings": "Impostazioni dell'account",
4140
4225
  "operatorDashboard": "Osservabilità della piattaforma",
4226
+ "reports": "Report",
4141
4227
  "environmentSetup": "Configurazione dell'ambiente"
4142
4228
  },
4143
4229
  "errors": {
@@ -4756,6 +4842,7 @@
4756
4842
  "provisionType": {
4757
4843
  "kubernetes": "Kubernetes",
4758
4844
  "docker-compose": "Docker Compose",
4845
+ "cloudflare": "Cloudflare Workers",
4759
4846
  "custom": "Personalizzato",
4760
4847
  "infraless": "Nessuna infrastruttura"
4761
4848
  },
@@ -4763,6 +4850,7 @@
4763
4850
  "local-docker": "Docker locale",
4764
4851
  "local-k3s": "k3s locale",
4765
4852
  "remote-kubernetes": "Kubernetes remoto",
4853
+ "cloudflare": "Anteprima Cloudflare",
4766
4854
  "remote-custom": "Personalizzato remoto (HTTP)",
4767
4855
  "none": "Nessuno"
4768
4856
  }