@cat-factory/app 0.46.10 → 0.46.11

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 (29) hide show
  1. package/app/components/observability/StepMetricsBar.vue +31 -11
  2. package/app/components/observability/StepModelActivity.vue +3 -2
  3. package/app/components/panels/AgentStepDetail.vue +52 -39
  4. package/app/components/panels/DecisionModal.vue +12 -5
  5. package/app/components/panels/GenericStructuredResultView.vue +16 -6
  6. package/app/components/panels/InspectorPanel.vue +35 -28
  7. package/app/components/panels/ObservabilityPanel.vue +92 -49
  8. package/app/components/panels/StepMetadataCard.vue +87 -30
  9. package/app/components/panels/StepRestartControl.vue +4 -3
  10. package/app/components/panels/StepRunMeta.vue +23 -10
  11. package/app/components/panels/StepTestReport.vue +14 -11
  12. package/app/components/panels/inspector/ContainerSummary.vue +25 -14
  13. package/app/components/panels/inspector/EpicChildren.vue +7 -4
  14. package/app/components/panels/inspector/RecurringScheduleSettings.vue +60 -19
  15. package/app/components/panels/inspector/ServiceFragments.vue +3 -2
  16. package/app/components/panels/inspector/ServiceReleaseHealthConfig.vue +18 -13
  17. package/app/components/panels/inspector/ServiceTestConfig.vue +50 -39
  18. package/app/components/panels/inspector/TaskAgentConfig.vue +6 -5
  19. package/app/components/panels/inspector/TaskDependencies.vue +9 -4
  20. package/app/components/panels/inspector/TaskEstimateBadge.vue +14 -13
  21. package/app/components/panels/inspector/TaskExecution.vue +65 -31
  22. package/app/components/panels/inspector/TaskRunSettings.vue +93 -56
  23. package/app/components/panels/inspector/TaskStructure.vue +5 -4
  24. package/i18n/locales/en.json +402 -0
  25. package/i18n/locales/es.json +402 -0
  26. package/i18n/locales/fr.json +402 -0
  27. package/i18n/locales/pl.json +402 -0
  28. package/i18n/locales/uk.json +402 -0
  29. package/package.json +1 -1
@@ -308,5 +308,407 @@
308
308
  "step3": "Copiez tout le contenu de auth.json, collez-le ci-dessous et choisissez un mot de passe personnel pour le protéger."
309
309
  }
310
310
  }
311
+ },
312
+ "inspector": {
313
+ "container": {
314
+ "modules": "Modules ({count})",
315
+ "taskCount": "{count} tâche | {count} tâches",
316
+ "allTasks": "Toutes les tâches ({count})",
317
+ "tasks": "Tâches ({count})",
318
+ "addTask": "Ajouter une tâche",
319
+ "noTasks": "Aucune tâche pour le moment. Ajoutez-en une pour commencer.",
320
+ "servicesHint": "Les services sont permanents et ne se terminent pas. Le travail se fait dans leurs tâches et modules."
321
+ },
322
+ "epicChildren": {
323
+ "title": "Tâches de l'epic",
324
+ "doneCount": "{done}/{total} terminées",
325
+ "empty": "Aucune tâche n'appartient encore à cet epic. Importez les enfants d'un epic, ou définissez l'epic d'une tâche.",
326
+ "unassigned": "Non assigné"
327
+ },
328
+ "recurring": {
329
+ "title": "Pipeline récurrent",
330
+ "active": "Actif",
331
+ "paused": "En pause",
332
+ "intervalDays": "{count}j",
333
+ "intervalHours": "{count}h",
334
+ "anyDay": "n'importe quel jour",
335
+ "cadence": "Tous les {every} · {days}{window} · {timezone}",
336
+ "weekdays": {
337
+ "sun": "Dim",
338
+ "mon": "Lun",
339
+ "tue": "Mar",
340
+ "wed": "Mer",
341
+ "thu": "Jeu",
342
+ "fri": "Ven",
343
+ "sat": "Sam"
344
+ },
345
+ "nextRun": "Prochaine exécution : {time}",
346
+ "runNow": "Exécuter maintenant",
347
+ "pause": "Mettre en pause",
348
+ "resume": "Reprendre",
349
+ "editCadence": "Modifier la cadence",
350
+ "recentRuns": "Exécutions récentes",
351
+ "runStatus": {
352
+ "running": "En cours",
353
+ "done": "Terminé",
354
+ "failed": "Échoué",
355
+ "skipped": "Ignoré"
356
+ },
357
+ "updateFailed": "Impossible de mettre à jour la planification",
358
+ "runNowFailed": "Impossible d'exécuter maintenant"
359
+ },
360
+ "fragments": {
361
+ "serviceTitle": "Bonnes pratiques du service",
362
+ "serviceEmpty": "Aucune. Les agents conscients du code sur ce service suivent leurs consignes par défaut."
363
+ },
364
+ "releaseHealth": {
365
+ "title": "Santé post-déploiement",
366
+ "clear": "Effacer",
367
+ "connectPrompt": "Connectez une intégration d'observabilité pour surveiller ce service après les déploiements.",
368
+ "connectFirst": "Connectez d'abord une intégration d'observabilité",
369
+ "connect": "Connecter",
370
+ "hint": "Les monitors et SLO que la gate surveille après le déploiement de ce service. Séparez les ids par des virgules.",
371
+ "monitorIds": "Ids de monitors",
372
+ "sloIds": "Ids de SLO",
373
+ "envTag": "Tag d'environnement (facultatif)",
374
+ "saveMonitoring": "Enregistrer la surveillance",
375
+ "savedToast": "Surveillance enregistrée",
376
+ "saveFailed": "Impossible d'enregistrer le mappage",
377
+ "clearFailed": "Impossible d'effacer le mappage"
378
+ },
379
+ "testConfig": {
380
+ "title": "Infrastructure de test",
381
+ "defaultEnv": "Environnement de test par défaut",
382
+ "defaultEnvHint": "Celui avec lequel les tâches par défaut de ce service sont créées. Chaque tâche peut le remplacer dans ses paramètres d'agent.",
383
+ "env": {
384
+ "ephemeral": "Environnement éphémère",
385
+ "ephemeralHint": "les tests s'exécutent sur un environnement provisionné",
386
+ "local": "Local (docker-compose)",
387
+ "localHint": "le Testeur met en place les dépendances localement"
388
+ },
389
+ "composePath": "Chemin docker-compose",
390
+ "browseRepo": "Parcourir le dépôt pour trouver le fichier compose",
391
+ "composeHint": "Utilisé par le Testeur pour mettre en place les dépendances du service localement.",
392
+ "selectComposeTitle": "Sélectionner le fichier docker-compose",
393
+ "selectComposeHint": "Choisissez le fichier compose dans le dépôt. Son chemin est stocké relativement à la racine du dépôt.",
394
+ "selected": "Sélectionné : {path}",
395
+ "noFileSelected": "Aucun fichier sélectionné.",
396
+ "useThisFile": "Utiliser ce fichier",
397
+ "noInfra": "Aucune dépendance d'infrastructure (le Testeur ne met rien en place)",
398
+ "missingInfra": "Définissez un chemin docker-compose ou activez l'absence de dépendances d'infrastructure, sinon un pipeline avec un Testeur ne démarrera pas.",
399
+ "provisioningTitle": "Provisionnement de l'environnement éphémère",
400
+ "provisioningHint": "Une indication pour provisionner l'environnement de test éphémère de ce service : quel fournisseur cloud cibler et quelle taille d'instance demander. Ignoré pour les tests locaux (docker-compose).",
401
+ "cloudProvider": "Fournisseur cloud",
402
+ "instanceSize": "Taille d'instance",
403
+ "providers": {
404
+ "docker": "Docker (local)",
405
+ "custom": "Personnalisé"
406
+ },
407
+ "sizes": {
408
+ "small": "Petite",
409
+ "medium": "Moyenne",
410
+ "large": "Grande",
411
+ "xlarge": "Très grande"
412
+ }
413
+ },
414
+ "agentConfig": {
415
+ "title": "Configuration de l'agent",
416
+ "inherited": "hérité du service",
417
+ "frozen": "Figé : l'agent a démarré"
418
+ },
419
+ "dependencies": {
420
+ "title": "Dépend de",
421
+ "merged": "Fusionné",
422
+ "notMerged": "Pas encore fusionné",
423
+ "empty": "Aucune dépendance. Peut s'exécuter à tout moment.",
424
+ "blocked": "Bloqué jusqu'à la fusion des dépendances."
425
+ },
426
+ "estimate": {
427
+ "title": "Estimation",
428
+ "complexity": "Complexité",
429
+ "risk": "Risque",
430
+ "impact": "Impact"
431
+ },
432
+ "execution": {
433
+ "stage": {
434
+ "incorporating": "Intégration en cours…",
435
+ "reviewing": "Nouvelle revue en cours…",
436
+ "recommending": "Recommandation en cours…"
437
+ },
438
+ "prNumber": "PR n° {number}",
439
+ "pullRequest": "Pull request",
440
+ "stepState": {
441
+ "pending": "En attente",
442
+ "working": "En cours",
443
+ "waiting_decision": "Décision requise",
444
+ "done": "Terminé"
445
+ },
446
+ "failed": "Échoué",
447
+ "needsDecision": "Décision requise",
448
+ "needsApproval": "Approbation requise",
449
+ "spinningUp": "Démarrage…",
450
+ "stop": "Arrêter",
451
+ "stopTooltip": "Arrêter l'exécution mais la conserver (lisible et relançable)",
452
+ "reset": "Réinitialiser",
453
+ "resetTooltip": "Abandonner cette exécution et réinitialiser la tâche à planifiée",
454
+ "viewDetailsOutput": "Voir les détails et lire la sortie",
455
+ "viewDetails": "Voir les détails de l'étape",
456
+ "companion": "Compagnon",
457
+ "companionTooltip": "Compagnon d'une étape de production",
458
+ "subtasksProgress": "{completed} sur {total} sous-tâches terminées, {inProgress} en cours",
459
+ "subtasksDone": "{completed} sur {total} sous-tâches terminées",
460
+ "resolve": "Résoudre",
461
+ "decide": "Décider",
462
+ "review": "Réviser",
463
+ "approve": "Approuver",
464
+ "fragmentsTooltip": "Fragments de bonnes pratiques intégrés à cette étape : {fragments}",
465
+ "standardsApplied": "{count} standard appliqué | {count} standards appliqués",
466
+ "companionOf": "{label} (compagnon)",
467
+ "merged": "Fusionné",
468
+ "open": "Ouvert",
469
+ "mergePr": "Fusionner la PR"
470
+ },
471
+ "structure": {
472
+ "module": "Module",
473
+ "modulePlaceholder": "ex. Sessions (créé lors de l'implémentation s'il est nouveau)",
474
+ "bestPractices": "Bonnes pratiques",
475
+ "bestPracticesEmpty": "Aucune. Les agents suivent leurs consignes par défaut."
476
+ },
477
+ "runSettings": {
478
+ "unassigned": "Non assigné",
479
+ "workspaceDefault": "Valeur par défaut de l'espace de travail",
480
+ "workspaceDefaultParen": "(valeur par défaut de l'espace de travail)",
481
+ "defaultPresetThresholds": "Par défaut ({name}) : {thresholds}",
482
+ "defaultPreset": "Par défaut ({name})",
483
+ "noDefault": "Aucune valeur par défaut",
484
+ "inheritWorkspace": "Hériter de l'espace de travail",
485
+ "on": "Activé",
486
+ "off": "Désactivé",
487
+ "inheritOn": "Hériter (activé)",
488
+ "inheritOff": "Hériter (désactivé)",
489
+ "technical": {
490
+ "unset": "Non défini (détection automatique)",
491
+ "technical": "Technique",
492
+ "business": "Métier"
493
+ },
494
+ "pipeline": "Pipeline",
495
+ "pipelineEmpty": "Aucune valeur par défaut. Choisissez un pipeline lorsque vous exécutez cette tâche.",
496
+ "mergePolicy": "Politique de fusion",
497
+ "mergePresetDetail": "{name} : fusion automatique lorsque la complexité ≤ {complexity}, le risque ≤ {risk}, l'impact ≤ {impact} ; jusqu'à {attempts} tentatives de correction CI.",
498
+ "mergePresetEmpty": "Aucun preset configuré. Le fusionneur déclenche une notification de revue pour chaque PR.",
499
+ "modelPreset": "Preset de modèle",
500
+ "modelPresetBase": "base {model}",
501
+ "modelPresetOverrides": ", {count} remplacement | , {count} remplacements",
502
+ "modelPresetEmpty": "Aucun preset configuré. Les agents s'exécutent avec le routage par défaut du déploiement.",
503
+ "unavailableModels": "Non disponible avec la configuration actuelle : {models}. Cette tâche échouerait à ces étapes.",
504
+ "editPresets": "Modifier les presets",
505
+ "configureVendors": "Configurer les fournisseurs",
506
+ "modelPresetChangeHint": "Ce changement n'affecte que les étapes qui n'ont pas encore démarré.",
507
+ "taskKind": "Type de tâche",
508
+ "technicalHint": {
509
+ "technical": "Technique : l'implémenteur traite la définition de la tâche comme primaire et la spec comme référence de régression ; le rédacteur de spec peut ne produire aucune spec métier.",
510
+ "business": "Métier : la spécification mène, comme d'habitude.",
511
+ "unset": "Détection automatique : déduit de la phase de spec. Définissez-le explicitement pour le remplacer."
512
+ },
513
+ "issueWriteback": "Réécriture d'issue",
514
+ "commentOnPrOpen": "Commenter à l'ouverture de la PR",
515
+ "closeOnMerge": "Fermer à la fusion",
516
+ "writebackHint": "Réécrit dans l'issue de tracker liée à cette tâche. Remplace la valeur par défaut de l'espace de travail.",
517
+ "responsibleProduct": "Produit responsable",
518
+ "responsibleEmpty": "Non assigné. Définissez un responsable produit pour le notifier lorsque la revue d'exigences signale cette tâche.",
519
+ "autoStartDependents": "Démarrer automatiquement les dépendants",
520
+ "autoStartHint": "Lorsque cette tâche est fusionnée, démarrer automatiquement les tâches qui en dépendent (une fois que leurs autres dépendances sont également terminées)."
521
+ }
522
+ },
523
+ "panels": {
524
+ "decision": {
525
+ "title": "Décision requise",
526
+ "agentOnBlock": "{agent} sur {block}",
527
+ "visualizationHint": "Ceci est une visualisation. Tout choix reprend simplement le pipeline."
528
+ },
529
+ "stepRestart": {
530
+ "restartFromStep": "Redémarrer le pipeline à partir de cette étape",
531
+ "restartFromHere": "Redémarrer à partir d'ici"
532
+ },
533
+ "structuredResult": {
534
+ "fallbackTitle": "Résultat de l'agent",
535
+ "titleWithBlock": "{label} : {title}",
536
+ "fallbackDescription": "Sortie structurée de l'agent",
537
+ "structuredOutput": "Sortie structurée",
538
+ "noResult": "Pas encore de résultat.",
539
+ "noResultHint": "La sortie structurée apparaît une fois que cet agent a terminé. Pendant son exécution, l'étape affiche sa progression en direct sur le tableau."
540
+ },
541
+ "testReport": {
542
+ "title": "Rapport de test",
543
+ "greenlit": "Validé",
544
+ "needsFixes": "Corrections nécessaires",
545
+ "fixAttempts": "{count}/{max} tentatives de correction",
546
+ "fixing": "· correction…",
547
+ "tested": "Testé",
548
+ "outcomes": "Résultats",
549
+ "concerns": "Préoccupations"
550
+ },
551
+ "stepMeta": {
552
+ "stateLabel": "État",
553
+ "duration": "Durée",
554
+ "elapsed": "écoulé",
555
+ "step": "Étape",
556
+ "stepOf": "{number} sur {total}",
557
+ "started": "Démarré",
558
+ "finished": "Terminé",
559
+ "model": "Modèle",
560
+ "notRecorded": "Non enregistré",
561
+ "run": "Exécution",
562
+ "clickToCopy": "{id} (cliquer pour copier)",
563
+ "spinningUpContainer": "Démarrage du conteneur…",
564
+ "subtasks": "Sous-tâches · {completed}/{total}",
565
+ "standardsApplied": "Standards appliqués",
566
+ "decision": "Décision",
567
+ "awaitingChoice": "En attente d'un choix humain",
568
+ "approvalGate": "Gate d'approbation",
569
+ "companionReview": "Revue du compagnon",
570
+ "correctionIterations": "{count} itération de correction. | {count} itérations de correction.",
571
+ "state": {
572
+ "pending": "En attente",
573
+ "working": "En cours",
574
+ "waiting_decision": "Saisie requise",
575
+ "done": "Terminé",
576
+ "failed": "Échoué"
577
+ },
578
+ "approvalStatus": {
579
+ "pending": "En attente",
580
+ "approved": "Approuvé",
581
+ "changes_requested": "Modifications demandées",
582
+ "rejected": "Rejeté"
583
+ }
584
+ },
585
+ "stepDetail": {
586
+ "contents": "Contenu",
587
+ "details": "Détails",
588
+ "approvalRequired": "Approbation requise",
589
+ "decisionRequired": "Décision requise",
590
+ "expandAll": "Développer toutes les sections",
591
+ "collapseAll": "Réduire toutes les sections",
592
+ "copyRawOutput": "Copier la sortie brute",
593
+ "closeEsc": "Fermer (Esc)",
594
+ "companionCapHeading": "{agent} a atteint sa limite de {attempts} tentatives de retravail, toujours en dessous du seuil {threshold}.",
595
+ "companionCapDetail": "Effectuer un tour de retravail automatique supplémentaire, passer à l'étape suivante en acceptant la sortie actuelle, ou arrêter et réinitialiser la tâche pour modifier les entrées et la resoumettre.",
596
+ "infraAttempts": "Tentatives d'infrastructure",
597
+ "hideInfraAttempts": "Masquer les tentatives d'infrastructure",
598
+ "editingConclusions": "Modification des conclusions",
599
+ "editConclusionsPlaceholder": "Modifiez les conclusions de l'agent ; vos modifications sont enregistrées lorsque vous approuvez…",
600
+ "noProseOutput": "Cet agent n'a produit aucune sortie en texte libre.",
601
+ "approveWithCorrections": "Approuver avec corrections",
602
+ "reviewAndApprove": "Réviser et approuver",
603
+ "editHint": "Modifiez les conclusions à gauche ; vos modifications sont enregistrées lorsque vous approuvez.",
604
+ "reviewHint": "Cliquez sur n'importe quel bloc de la sortie pour le commenter, ou laissez un retour global ci-dessous.",
605
+ "editingNotice": "Vous modifiez les conclusions directement. Les modifications manuelles ne peuvent pas être combinées avec des commentaires par bloc. Approuvez pour les enregistrer, ou annulez pour revenir à la revue.",
606
+ "commentingOn": "Commentaire sur",
607
+ "commentPlaceholder": "Laissez un commentaire sur ce bloc…",
608
+ "addComment": "Ajouter un commentaire",
609
+ "commentN": "Commentaire {number}",
610
+ "removeComment": "Supprimer le commentaire",
611
+ "overallFeedback": "Retour global / motif de rejet",
612
+ "overallFeedbackPlaceholder": "Décrivez les modifications que l'agent devrait apporter (facultatif si vous avez laissé des commentaires par bloc)…",
613
+ "approveWithEdits": "Approuver avec ces modifications",
614
+ "cancelEdits": "Annuler les modifications",
615
+ "approveAndProceed": "Approuver et continuer",
616
+ "rejectConfirmPrompt": "Rejeter cette proposition et arrêter complètement l'exécution ?",
617
+ "confirmReject": "Confirmer le rejet",
618
+ "requestChanges": "Demander des modifications",
619
+ "reject": "Rejeter",
620
+ "requestChangesHint": "Demander des modifications relance cette étape avec votre retour et vos commentaires. Rejeter arrête complètement l'exécution."
621
+ },
622
+ "inspector": {
623
+ "frameStatus": {
624
+ "planned": "Aucune tâche",
625
+ "ready": "En ligne",
626
+ "in_progress": "Actif",
627
+ "blocked": "Attention requise",
628
+ "pr_ready": "Actif",
629
+ "done": "En ligne"
630
+ },
631
+ "deleteRecurringPipeline": "Supprimer le pipeline récurrent",
632
+ "deleteTask": "Supprimer la tâche",
633
+ "deleteModule": "Supprimer le module",
634
+ "deleteService": "Supprimer le service",
635
+ "titlePlaceholder": "Titre…",
636
+ "reworkedRequirements": "Exigences retravaillées",
637
+ "agentStepsUseDocument": "Les étapes d'agent utilisent ce document.",
638
+ "open": "Ouvrir",
639
+ "originalDescriptionFrozen": "Description originale (figée)",
640
+ "noDescription": "Aucune description",
641
+ "describeBlock": "Décrivez ce bloc…",
642
+ "taskStartedLocked": "Cette tâche a démarré. Ses détails sont verrouillés.",
643
+ "lastIncorporatedRequirements": "Dernières exigences intégrées",
644
+ "priorDocHint": "Issu de la revue précédente. Utilisez-le comme base : modifiez la description ci-dessus et resoumettez.",
645
+ "bootstrapping": "Initialisation…",
646
+ "importIssue": "Importer une issue",
647
+ "connectTracker": "Connecter un tracker",
648
+ "spawnFromDocument": "Créer à partir d'un document",
649
+ "viewRequirements": "Voir les exigences",
650
+ "reRun": "Relancer",
651
+ "run": "Exécuter",
652
+ "focus": "Cibler"
653
+ }
654
+ },
655
+ "observability": {
656
+ "modelActivity": "Activité du modèle",
657
+ "viewAllCalls": "Voir tous les appels →",
658
+ "providedContext": "Contexte fourni",
659
+ "exportJson": "Exporter en JSON",
660
+ "exportHint": "Télécharger un export JSON de cette exécution adapté aux LLM",
661
+ "closeEsc": "Fermer (Esc)",
662
+ "loadingActivity": "Chargement de l'activité du modèle…",
663
+ "loadingContext": "Chargement du contexte fourni…",
664
+ "noCalls": "Aucun appel de modèle enregistré pour cette exécution.",
665
+ "noContext": "Aucun contexte d'agent stocké pour cette exécution. Il est capturé à chaque dispatch lorsque l'espace de travail a activé 'Stocker le contexte complet de l'agent'.",
666
+ "summary": {
667
+ "calls": "Appels",
668
+ "tokensInOut": "Tokens (entrée / sortie)",
669
+ "transportOverhead": "Surcoût de transport",
670
+ "modelExecution": "Exécution du modèle",
671
+ "truncated": "{count} tronqué | {count} tronqués"
672
+ },
673
+ "metricsBar": {
674
+ "calls": "{count} appel | {count} appels",
675
+ "promptCompletionTokens": "Tokens de prompt / complétion",
676
+ "cachedTokens": "({tokens} en cache)",
677
+ "cachedTokensHint": "Tokens de prompt servis depuis le cache du fournisseur",
678
+ "errors": "{count} erreur | {count} erreurs",
679
+ "warnings": "{count} avertissement | {count} avertissements",
680
+ "outputLimit": "Limite de sortie",
681
+ "truncatedCalls": "{count} appel tronqué à la limite | {count} appels tronqués à la limite",
682
+ "transportVsExecution": "Transport vs exécution",
683
+ "transportOverhead": "Surcoût de transport / proxy",
684
+ "modelExecution": "Exécution du modèle"
685
+ },
686
+ "call": {
687
+ "tokensTitle": "{prompt} tokens de prompt / {completion} de complétion",
688
+ "outputUsedVsLimit": "Sortie utilisée vs limite",
689
+ "transportVsExecution": "Surcoût de transport / exécution du modèle",
690
+ "error": "erreur",
691
+ "ok": "ok",
692
+ "messages": "{count} messages",
693
+ "tools": "{count} outils",
694
+ "streamed": "en streaming",
695
+ "buffered": "en mémoire tampon",
696
+ "maxTokens": "max_tokens {value}",
697
+ "promptCached": "{cached}/{prompt} prompt en cache",
698
+ "total": "total {duration}",
699
+ "prompt": "Prompt",
700
+ "promptPrefixOmitted": "(nouveaux messages uniquement : {count} antérieurs omis)",
701
+ "response": "Réponse",
702
+ "reasoning": "Raisonnement"
703
+ },
704
+ "context": {
705
+ "injectedFiles": "Fichiers de contexte injectés",
706
+ "bestPracticeFragments": "Fragments de bonnes pratiques",
707
+ "filesCount": "{count} fichiers",
708
+ "fragmentsCount": "{count} fragments",
709
+ "systemPrompt": "Prompt système",
710
+ "userPrompt": "Prompt utilisateur",
711
+ "details": "Détails"
712
+ }
311
713
  }
312
714
  }