@cldmv/slothlet 3.9.2 → 3.10.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 (47) hide show
  1. package/README.md +16 -16
  2. package/REFERENCE.md +19 -19
  3. package/dist/lib/builders/api_builder.mjs +1 -1
  4. package/dist/lib/builders/builder.mjs +1 -1
  5. package/dist/lib/builders/modes-processor.mjs +1 -1
  6. package/dist/lib/handlers/api-cache-manager.mjs +1 -1
  7. package/dist/lib/handlers/api-manager.mjs +1 -1
  8. package/dist/lib/handlers/hook-manager.mjs +1 -1
  9. package/dist/lib/handlers/permission-manager.mjs +1 -1
  10. package/dist/lib/helpers/config.mjs +1 -1
  11. package/dist/lib/helpers/generate-manifest.mjs +1 -1
  12. package/dist/lib/helpers/module-discovery.mjs +1 -1
  13. package/dist/lib/helpers/module-manifest-validator.mjs +1 -1
  14. package/dist/lib/i18n/languages/de-de.json +90 -64
  15. package/dist/lib/i18n/languages/en-gb.json +90 -64
  16. package/dist/lib/i18n/languages/en-us.json +90 -64
  17. package/dist/lib/i18n/languages/es-es.json +90 -64
  18. package/dist/lib/i18n/languages/es-mx.json +90 -64
  19. package/dist/lib/i18n/languages/fr-fr.json +90 -64
  20. package/dist/lib/i18n/languages/hi-in.json +90 -64
  21. package/dist/lib/i18n/languages/ja-jp.json +90 -64
  22. package/dist/lib/i18n/languages/ko-kr.json +90 -64
  23. package/dist/lib/i18n/languages/pt-br.json +90 -64
  24. package/dist/lib/i18n/languages/ru-ru.json +92 -66
  25. package/dist/lib/i18n/languages/zh-cn.json +90 -64
  26. package/dist/lib/modes/eager.mjs +1 -1
  27. package/dist/lib/modes/lazy.mjs +1 -1
  28. package/package.json +7 -4
  29. package/types/dist/lib/builders/api_builder.d.mts.map +1 -1
  30. package/types/dist/lib/builders/builder.d.mts.map +1 -1
  31. package/types/dist/lib/builders/modes-processor.d.mts.map +1 -1
  32. package/types/dist/lib/handlers/api-cache-manager.d.mts.map +1 -1
  33. package/types/dist/lib/handlers/api-manager.d.mts.map +1 -1
  34. package/types/dist/lib/handlers/hook-manager.d.mts +4 -0
  35. package/types/dist/lib/handlers/hook-manager.d.mts.map +1 -1
  36. package/types/dist/lib/handlers/permission-manager.d.mts +2 -0
  37. package/types/dist/lib/handlers/permission-manager.d.mts.map +1 -1
  38. package/types/dist/lib/helpers/config.d.mts +3 -0
  39. package/types/dist/lib/helpers/config.d.mts.map +1 -1
  40. package/types/dist/lib/helpers/generate-manifest.d.mts +1 -0
  41. package/types/dist/lib/helpers/generate-manifest.d.mts.map +1 -1
  42. package/types/dist/lib/helpers/module-discovery.d.mts.map +1 -1
  43. package/types/dist/lib/helpers/module-manifest-validator.d.mts.map +1 -1
  44. package/types/dist/lib/modes/eager.d.mts +2 -1
  45. package/types/dist/lib/modes/eager.d.mts.map +1 -1
  46. package/types/dist/lib/modes/lazy.d.mts +2 -1
  47. package/types/dist/lib/modes/lazy.d.mts.map +1 -1
@@ -1,54 +1,110 @@
1
1
  {
2
2
  "translations": {
3
3
  "INVALID_CONFIG": "Configuration invalide : {option} est {value}, attendu {expected}. {hint}",
4
+ "HINT_INVALID_CONFIG": "Vérifiez la valeur de configuration et assurez-vous qu'elle correspond au type et au format attendus.",
5
+ "INVALID_CONFIG_SYNTHETIC_EXPORTS_SHAPE": "Erreur de configuration : les exports en ligne doivent être un objet simple de { default?, ...named }, reçu {received}.",
6
+ "HINT_INVALID_CONFIG_SYNTHETIC_EXPORTS_SHAPE": "Passez les exports sous forme d'objet simple, ex. { default: fn } ou { name: fn } — ou un wrapper { exports: { default?, ...named } }, ou une fonction nue.",
7
+ "INVALID_CONFIG_SYNTHETIC_INPUT": "Erreur de configuration : le contenu en ligne doit être un objet simple de { default?, ...named } exports, un wrapper { exports: … }, ou une fonction nue, reçu {received}.",
8
+ "HINT_INVALID_CONFIG_SYNTHETIC_INPUT": "Passez les exports en ligne sous forme d'objet simple ou de fonction nue ; un montage sur le système de fichiers nécessite un chemin de chaîne.",
9
+ "INVALID_CONFIG_SYNTHETIC_NAME": "Erreur de configuration : syntheticName doit être une chaîne non vide, reçu {received}.",
10
+ "HINT_INVALID_CONFIG_SYNTHETIC_NAME": "Fournissez un nom de clé sous forme de chaîne pour la construction synthétique, ex. \"synthetic\".",
11
+ "INVALID_CONFIG_PRELOADED_STRUCTURE": "Erreur de configuration : preloadedStructure doit être un objet simple avec des tableaux files et directories, reçu {received}.",
12
+ "HINT_INVALID_CONFIG_PRELOADED_STRUCTURE": "preloadedStructure est construit en interne ; transmettez un objet avec des tableaux files et directories, ou omettez-le pour analyser un répertoire.",
4
13
  "INVALID_CONFIG_DIR_MISSING": "Erreur de configuration : l'option 'dir' est requise. Fournissez un chemin de répertoire pour charger l'API.",
14
+ "HINT_INVALID_CONFIG_DIR_MISSING": "Le chemin du répertoire est requis mais n'a pas été fourni.",
5
15
  "INVALID_CONFIG_BROWSER_REQUIRES_MANIFEST": "Erreur de configuration : 'manifest' est requis quand env est 'browser'. Fournissez un objet manifest prégénéré avec les tableaux 'files' et 'directories'.",
6
16
  "INVALID_CONFIG_BROWSER_MANIFEST_INVALID": "Erreur de configuration : 'manifest' doit être un objet simple avec les tableaux 'files' et 'directories'. Reçu : {received}",
7
17
  "INVALID_CONFIG_BROWSER_RESOLVE_SPECIFIER_INVALID": "Erreur de configuration : 'resolveModuleSpecifier' doit être une fonction quand env est 'browser'. Reçu : {received}",
8
18
  "INVALID_CONFIG_DIR_INVALID": "Erreur de configuration : 'dir' doit être une chaîne de caractères non vide. Reçu : {dir}",
19
+ "HINT_INVALID_CONFIG_DIR_INVALID": "Assurez-vous que le chemin du répertoire est une chaîne valide et pointe vers un répertoire existant.",
9
20
  "INVALID_CONFIG_MODE_INVALID": "Erreur de configuration : 'mode' doit être soit 'eager' soit 'lazy'. Reçu : {value}",
21
+ "HINT_INVALID_CONFIG_MODE_INVALID": "Le mode doit être soit 'eager' soit 'lazy'.",
10
22
  "INVALID_CONFIG_NOT_LOADED": "Impossible d'effectuer l'opération '{operation}' - instance non chargée. Appelez d'abord load().",
23
+ "HINT_INVALID_CONFIG_NOT_LOADED": "L'instance doit être chargée avant d'effectuer cette opération. Appelez d'abord load().",
11
24
  "INVALID_CONFIG_LAZY_MATERIALIZATION_FAILED": "Échec de la matérialisation du proxy lazy pour '{apiPath}'. Vérifiez que le module se charge correctement.",
12
25
  "INVALID_CONFIG_NOT_A_FUNCTION": "Impossible d'appeler '{apiPath}' - n'est pas une fonction (reçu {actualType}). Vérifiez que le module exporte une fonction appelable.",
13
26
  "INVALID_CONFIG_API_PATH_INVALID": "Chemin d'API invalide '{apiPath}' : {reason}. Les chemins d'API doivent être des chaînes non vides, correctement formatées en notation par points et ne pas entrer en conflit avec les noms réservés. Segment à l'index {index} : '{segment}'.",
27
+ "HINT_INVALID_CONFIG_API_PATH_INVALID": "Assurez-vous que le chemin d'API est une chaîne valide en notation pointée (ex: 'plugins.tools') sans segments vides ni noms réservés (slothlet, shutdown, destroy).",
14
28
  "INVALID_CONFIG_FORCE_OVERWRITE_REQUIRES_MODULE_ID": "Erreur de configuration : forceOverwrite/allowOverwrite nécessite un moduleID. Fournissez un moduleID unique lors de l'utilisation des options d'écrasement pour le chemin d'API '{apiPath}'.",
29
+ "HINT_INVALID_CONFIG_FORCE_OVERWRITE_REQUIRES_MODULE_ID": "Lors de l'utilisation de forceOverwrite ou allowOverwrite, vous devez fournir un moduleID unique pour suivre la propriété du chemin écrasé.",
15
30
  "INVALID_METADATA_TARGET": "Cible de métadonnées invalide : attendu {expected}, reçu {target}. Les opérations de métadonnées nécessitent une référence de fonction ou d'objet.",
31
+ "HINT_INVALID_METADATA_TARGET": "La cible doit être une fonction ou un objet qui a été chargé via Slothlet. Passez la référence réelle de la fonction/l'objet, pas une chaîne ou une valeur primitive.",
16
32
  "METADATA_NO_MODULE_ID": "Impossible de définir les métadonnées utilisateur : aucun moduleID trouvé dans les métadonnées système. Assurez-vous que la fonction/l'objet cible a été chargé via Slothlet.",
33
+ "HINT_METADATA_NO_MODULE_ID": "Assurez-vous que la fonction/l'objet a été chargé via le système de modules de Slothlet. Seules les fonctions gérées par Slothlet ont des métadonnées associées.",
17
34
  "METADATA_LIFECYCLE_BYPASS": "tagSystemMetadata() doit être appelé via le système de cycle de vie. Utilisez lifecycle.emit('impl:created') ou lifecycle.emit('impl:changed') au lieu d'un appel direct.",
35
+ "HINT_METADATA_LIFECYCLE_BYPASS": "N'appelez jamais tagSystemMetadata() directement. Déclenchez plutôt les événements de cycle de vie 'impl:created' ou 'impl:changed', qui invoqueront tagSystemMetadata() via le canal approprié.",
18
36
  "INVALID_METADATA_KEY": "Clé de métadonnées invalide : attendu {expected}, reçu {type} pour la clé '{key}'. Les clés de métadonnées doivent être correctement formatées.",
37
+ "HINT_INVALID_METADATA_KEY": "Les clés de métadonnées doivent être des chaînes, des tableaux de chaînes ou des objets avec des valeurs de tableau. Vérifiez que le format de la clé correspond à l'un de ces types.",
19
38
  "WARNING_METADATA_MISMATCH": "Avertissement de sécurité : incompatibilité du chemin du fichier de métadonnées pour '{apiPath}'. La trace de la pile affiche '{stackFile}' mais les métadonnées indiquent '{metadataFile}'. Cela peut indiquer un rechargement à chaud ou une altération.",
39
+ "HINT_WARNING_METADATA_MISMATCH": "Cet avertissement indique que l'emplacement d'exécution de la fonction ne correspond pas à son chemin de métadonnées enregistré. Cela peut se produire lors d'un rechargement à chaud ou si la fonction a été altérée. Dans la plupart des cas, cela est attendu lors du développement avec le rechargement à chaud activé.",
20
40
  "COLLISION_ERROR": "Erreur de collision à '{key}' (contexte : {collisionContext}, mode : {collisionMode}). Réglez le mode de collision sur 'merge', 'replace', 'warn' ou 'skip' pour gérer les collisions.",
41
+ "HINT_COLLISION_ERROR": "Le mode de collision est réglé sur 'error', ce qui empêche tout écrasement. Utilisez collision: 'merge' (combiner les propriétés), 'replace' (écraser complètement), 'warn' (avertir tout en gardant l'existant) ou 'skip' (ignorer silencieusement) à la place.",
21
42
  "COLLISION_DEFAULT_EXPORT_ERROR": "Collision détectée : la propriété '{key}' existe déjà sur l'export par défaut à '{apiPath}'. Le mode de collision est 'error'.",
43
+ "HINT_COLLISION_DEFAULT_EXPORT_ERROR": "Un export nommé entre en conflit avec une propriété déjà présente sur l'objet d'exportation par défaut à ce chemin. Changez le mode de collision pour 'merge', 'replace', 'warn' ou 'skip', ou renommez la propriété en conflit.",
22
44
  "INVALID_ARGUMENT": "Argument invalide '{argument}' : attendu {expected}, reçu {received}.",
45
+ "HINT_INVALID_ARGUMENT": "Le chemin doit être une chaîne en notation pointée (ex: 'math.add').",
23
46
  "RUNTIME_NO_ACTIVE_CONTEXT": "Aucun contexte actif trouvé. Cette opération doit être appelée depuis une fonction de l'API Slothlet.",
47
+ "HINT_RUNTIME_NO_ACTIVE_CONTEXT": "metadata.self() doit être appelé depuis une fonction de l'API Slothlet.",
24
48
  "INVALID_CONFIG_MUTATIONS_DISABLED": "Impossible de d'effectuer '{operation}' - les mutations sont désactivées. Réglez allowMutation: true pour activer les opérations de modification de l'API (add/remove/reload).",
49
+ "HINT_INVALID_CONFIG_MUTATIONS_DISABLED": "Les opérations de mutation d'API nécessitent allowMutation: true dans la configuration. Utilisez diagnostics: true pour accéder à ces méthodes à des fins de test sans activer les mutations réelles.",
25
50
  "CACHE_MODULEID_MISMATCH": "Incompatibilité du moduleID de l'entrée du cache : attendu '{cacheKey}', mais l'entrée a '{entryModuleID}'. Cela indique une incohérence interne du cache.",
51
+ "HINT_CACHE_MODULEID_MISMATCH": "C'est une erreur interne indiquant une corruption du cache. Veuillez signaler ce problème en précisant les étapes pour le reproduire.",
26
52
  "CACHE_NOT_FOUND": "Entrée de cache non trouvée pour le moduleID '{moduleID}' lors de l'opération '{operation}'. Le module n'est peut-être pas chargé ou le cache a été vidé.",
53
+ "HINT_CACHE_NOT_FOUND": "Assurez-vous que le module a été chargé avant de tenter de recharger ou de reconstruire son cache. Vérifiez que le moduleID est correct.",
27
54
  "CACHE_MANAGER_NOT_AVAILABLE": "Le gestionnaire de cache n'est pas disponible. Impossible de d'effectuer l'opération '{operation}'. Assurez-vous que le gestionnaire de cache est initialisé.",
55
+ "HINT_CACHE_MANAGER_NOT_AVAILABLE": "Le gestionnaire de cache devrait être initialisé automatiquement. Si vous voyez cette erreur, cela peut indiquer un problème d'initialisation interne.",
28
56
  "MODULE_LOAD_FAILED": "Échec du chargement du module '{modulePath}' (ID : {moduleID}) : {error}",
57
+ "HINT_MODULE_LOAD_FAILED": "Vérifiez les erreurs dans le fichier du module. Assurez-vous qu'il possède une syntaxe JavaScript valide et des exports.",
29
58
  "MODULE_NOT_FOUND": "Module non trouvé : {modulePath}. {hint}",
59
+ "HINT_MODULE_NOT_FOUND": "Assurez-vous que le module existe et que le chemin est correct. Vérifiez les fautes de frappe dans l'instruction d'importation.",
30
60
  "MODULE_IMPORT_FAILED": "Échec de l'importation du module '{modulePath}' : {error}. Vérifiez que le fichier existe et possède une syntaxe valide.",
61
+ "HINT_MODULE_IMPORT_FAILED": "Assurez-vous que le fichier du module existe et peut être importé. Vérifiez les erreurs de syntaxe ou les dépendances manquantes.",
31
62
  "CONTEXT_ALREADY_EXISTS": "Le contexte pour l'instance '{instanceID}' existe déjà. Impossible d'initialiser deux fois.",
63
+ "HINT_CONTEXT_ALREADY_EXISTS": "Ce contexte existe déjà. Vérifiez si vous essayez d'initialiser la même instance deux fois.",
32
64
  "CONTEXT_NOT_FOUND": "Contexte non trouvé pour l'instance '{instanceID}'. L'instance a peut-être été arrêtée. Instances disponibles : {availableInstances}",
65
+ "HINT_CONTEXT_NOT_FOUND": "Assurez-vous que l'instance Slothlet est initialisée et que le contexte est créé avant d'y accéder. Vérifiez que vous utilisez le bon ID d'instance.",
33
66
  "CONTEXT_EXECUTION_FAILED": "Échec de l'exécution dans le contexte pour l'instance '{instanceID}' : {error}",
67
+ "HINT_CONTEXT_EXECUTION_FAILED": "Une erreur s'est produite lors de l'exécution de la fonction. Vérifiez les détails de l'erreur pour plus d'informations.",
34
68
  "NO_ACTIVE_CONTEXT_LIVE": "Aucun contexte actif - aucune instance n'est actuellement active en mode live-bindings.",
69
+ "HINT_NO_ACTIVE_CONTEXT_LIVE": "Aucun contexte actif trouvé. Assurez-vous d'appeler cette fonction depuis un contexte Slothlet live.",
35
70
  "NO_ACTIVE_CONTEXT_ASYNC": "Aucun contexte actif - la fonction doit être appelée dans un contexte d'API Slothlet.",
71
+ "HINT_NO_ACTIVE_CONTEXT_ASYNC": "Aucun contexte actif trouvé. Assurez-vous d'appeler cette fonction depuis un contexte Slothlet asynchrone.",
36
72
  "RUNTIME_NO_ACTIVE_CONTEXT_SELF": "Aucun contexte actif - impossible d'accéder à 'self'. Assurez-vous que vous appelez la fonction depuis une fonction d'API Slothlet.",
73
+ "HINT_RUNTIME_NO_ACTIVE_CONTEXT_SELF": "Impossible d'accéder à 'self' en dehors du contexte d'une fonction de l'API Slothlet.",
37
74
  "RUNTIME_NO_ACTIVE_CONTEXT_CONTEXT": "Aucun contexte actif - 'context' ne peut être modifié que lors d'appels d'API Slothlet.",
75
+ "HINT_RUNTIME_NO_ACTIVE_CONTEXT_CONTEXT": "Impossible d'accéder à 'context' en dehors d'une fonction de l'API Slothlet. Le contexte ne peut être modifié que lors d'appels d'API Slothlet.",
38
76
  "OWNERSHIP_INVALID_MODULE_ID": "Enregistrement de propriété invalide : le moduleID '{moduleID}' est invalide.",
77
+ "HINT_OWNERSHIP_INVALID_MODULE_ID": "Le module ID est invalide. Assurez-vous que le module a été chargé correctement et que l'ID est correct.",
39
78
  "OWNERSHIP_INVALID_API_PATH": "Enregistrement de propriété invalide : le chemin d'API '{apiPath}' est invalide.",
79
+ "HINT_OWNERSHIP_INVALID_API_PATH": "Le chemin d'API est invalide. Assurez-vous que le format du chemin est correct.",
40
80
  "OWNERSHIP_CONFLICT": "Conflit de propriété : le chemin '{apiPath}' appartient déjà au module '{existingModuleId}', impossible de l'assigner à '{newModuleId}'. Utilisez forceOverwrite: true ou removeApi d'abord.",
81
+ "HINT_OWNERSHIP_CONFLICT": "Le chemin appartient déjà à un autre module. Options : (1) Utilisez forceOverwrite: true dans les options de api.add(), (2) Réglez la configuration de collision sur 'merge' ou 'replace', (3) Appelez api.slothlet.api.remove() d'abord pour vider le chemin.",
41
82
  "LOOSE_SET_NOT_OWNED": "Le module {callerApiPath} n’est pas autorisé à écrire dans {apiPath}. Un module ne peut écrire que sous son propre apiPath ; utilisez api.slothlet.api.add() pour enregistrer un autre chemin.",
83
+ "HINT_LOOSE_SET_NOT_OWNED": "Un module dont l’apiPath est \"P\" ne peut écrire que sous \"P.*\". Pour enregistrer du code dans un autre espace de noms, appelez api.slothlet.api.add().",
42
84
  "LOOSE_SET_RESERVED_KEY": "Impossible d’assigner au segment de clé réservée '{segment}' dans apiPath '{apiPath}'. Les noms tels que __proto__, prototype et constructor sont bloqués pour éviter la pollution du prototype de l’arbre d’API.",
85
+ "HINT_LOOSE_SET_RESERVED_KEY": "Les segments __proto__, prototype et constructor ne peuvent pas être utilisés comme noms d’apiPath car écrire dessus modifierait la chaîne de prototypes JavaScript. Choisissez un autre nom.",
43
86
  "INVALID_DIRECTORY": "Répertoire invalide '{dir}' : {error}. Assurez-vous que le répertoire existe et est accessible.",
87
+ "HINT_INVALID_DIRECTORY": "Assurez-vous que le chemin du répertoire est correct et que le répertoire existe et est accessible.",
44
88
  "WARN_DIRECTORY_EMPTY": "Le répertoire '{dir}' (résolu : '{resolvedPath}') est vide ou ne contient aucun module chargeable (fichiers .mjs, .cjs, .js). Ceci est valide pour les flux de travail add-api mais peut indiquer un chemin mal configuré.",
89
+ "HINT_WARN_DIRECTORY_EMPTY": "Vérifiez que le chemin du répertoire est correct. Les répertoires vides sont valides pour les flux de travail add-api où les modules seront ajoutés dynamiquement.",
90
+ "WARN_SYNTHETIC_ROOT_EMPTY": "L'ajout synthétique au chemin d'API '{apiPath}' n'a fourni aucune feuille ; rien n'a été monté.",
91
+ "HINT_WARN_SYNTHETIC_ROOT_EMPTY": "Fournissez au moins un export — une fonction par défaut nommée ou des exports nommés — afin que l'ajout synthétique ait quelque chose à monter.",
92
+ "WARN_SYNTHETIC_ROOT_UNNAMED": "L'ajout synthétique à la racine de l'API a un export par défaut anonyme ; il ne peut pas être attribué à la racine et a été ignoré.",
93
+ "HINT_WARN_SYNTHETIC_ROOT_UNNAMED": "Nommez la fonction par défaut (son nom devient la clé racine), fournissez des exports nommés ou montez la feuille sur un apiPath nommé.",
94
+ "WARN_SYNTHETIC_ROOT_COLLISION": "L'ajout synthétique à la racine de l'API ré-attribue son défaut à '{name}', mais un export nommé utilise déjà '{name}' ; l'export nommé est prioritaire.",
95
+ "HINT_WARN_SYNTHETIC_ROOT_COLLISION": "Renommez la fonction par défaut ou l'export nommé en conflit afin que chacun occupe une clé racine distincte.",
45
96
  "INTERNAL_HOOK_STATE_CORRUPT": "[ERREUR INTERNE] L'état de HookManager est corrompu : hook \"{hookId}\" ({type}/{subset}/{pattern}) — {detail}. C'est un bug dans Slothlet — veuillez le signaler.",
97
+ "HINT_INTERNAL_HOOK_STATE_CORRUPT": "L'état interne de HookManager est incohérent. Cela ne devrait jamais arriver lors d'une utilisation normale — veuillez soumettre un rapport de bug incluant comment vous avez appelé hook.on() et hook.remove().",
46
98
  "WARNING_RESERVED_PROPERTY_CONFLICT": "L'API utilisateur entre en conflit avec des propriétés réservées : {properties}",
99
+ "HINT_WARNING_RESERVED_PROPERTY_CONFLICT": "Le nom de propriété 'slothlet' est réservé aux méthodes d'API intégrées. Renommez votre module ou propriété d'API pour éviter les conflits avec slothlet.shutdown(), slothlet.api.*, etc.",
47
100
  "WARNING_LANGUAGE_LOAD_FAILED": "Échec du chargement de la langue '{lang}', retour à l'anglais.",
48
101
  "WARNING_LANGUAGE_UNAVAILABLE": "La langue '{lang}' n'est pas disponible, utilisation de l'anglais.",
49
102
  "WARNING_OWNERSHIP_CONFLICT": "Conflit de propriété à '{apiPath}' : appartient déjà à '{existingModuleId}', impossible d'enregistrer '{newModuleId}'. Conservation de l'existant.",
103
+ "HINT_WARNING_OWNERSHIP_CONFLICT": "Le chemin appartient déjà à un autre module. Pour forcer l'écrasement, utilisez forceOverwrite: true dans les options de api.add(), ou appelez api.slothlet.api.remove() d'abord pour vider le chemin.",
50
104
  "WARNING_HOT_RELOAD_PATH_COLLISION": "Collision de chemin à {apiPath} - conservation de la valeur existante (mode collision : warn).",
105
+ "HINT_WARNING_HOT_RELOAD_PATH_COLLISION": "Une collision s'est produite lors du rechargement à chaud au chemin spécifié. La valeur existante est conservée. Pour forcer le remplacement, utilisez le mode de collision 'replace' au lieu de 'warn'.",
51
106
  "WARNING_HOT_RELOAD_MERGE_PRIMITIVES": "Impossible de fusionner des valeurs primitives à {apiPath} - conservation de la valeur existante. Utilisez le mode de collision 'replace' pour écraser ou assurez-vous que les deux valeurs sont des objets.",
107
+ "HINT_WARNING_HOT_RELOAD_MERGE_PRIMITIVES": "Impossible de fusionner des valeurs primitives (chaînes, nombres, booléens). Pour remplacer la valeur, utilisez le mode de collision 'replace'. Pour conserver la valeur existante, continuez à utiliser le mode 'warn'.",
52
108
  "WARNING_COLLISION_FILE_FOLDER_MERGE": "Collision détectée à '{key}' - fusion des exports de fichier et de dossier (mode collision : 'warn').",
53
109
  "HINT_WARNING_COLLISION_FILE_FOLDER_MERGE": "Un fichier et un dossier partagent le même nom à '{key}'. Leurs exports sont fusionnés. Renommez l'un d'eux pour éviter toute ambiguïté, ou réglez collisionMode sur 'replace' ou 'error' si la fusion n'est pas souhaitée.",
54
110
  "WARNING_COLLISION_DEFAULT_EXPORT_OVERWRITE": "Avertissement de collision : la propriété '{key}' existe déjà sur la fonction d'export par défaut à {apiPath}. L'export nommé va l'écraser.",
@@ -58,10 +114,13 @@
58
114
  "WARNING_LIFECYCLE_HANDLER_ERROR": "Le gestionnaire d'événements de cycle de vie a renvoyé une erreur pour l'événement '{event}'. Les autres gestionnaires pour cet événement ont continué à s'exécuter.",
59
115
  "HINT_WARNING_LIFECYCLE_HANDLER_ERROR": "Un gestionnaire de cycle de vie enregistré pour l'événement '{event}' a renvoyé une erreur. Vérifiez votre gestionnaire lifecycle.on('{event}', ...) pour des bugs. Les autres gestionnaires du même événement ne sont pas affectés.",
60
116
  "WARNING_MULTIPLE_ROOT_CONTRIBUTORS": "Plusieurs exports de fonctions par défaut au niveau racine détectés : {rootContributors}. Chacun a été placé dans un espace de noms par nom de fichier (ex: api.{firstContributor}()). Envisagez d'utiliser un seul export par défaut au niveau racine ou de déplacer les fichiers dans des sous-répertoires.",
117
+ "HINT_WARNING_MULTIPLE_ROOT_CONTRIBUTORS": "Plusieurs fichiers exportent des fonctions par défaut au niveau racine. Chacun a été placé dans un espace de noms (ex: api.nomdufichier()). Envisagez de les regrouper dans un seul export racine ou de déplacer les fichiers dans des sous-répertoires pour une organisation plus claire.",
61
118
  "WARN_SUPPRESS_FIX_ACTIVE": "La correction de règle '{rule}' est supprimée via 'suppressFixes'. Consultez {url} pour plus de détails. Il s'agit d'une substitution temporaire qui sera supprimée dans v4. Le comportement corrigé de '{rule}' sera appliqué définitivement.",
62
119
  "HINT_WARN_SUPPRESS_FIX_ACTIVE": "Supprimez '{rule}' de 'suppressFixes' et mettez à jour la structure de répertoires de votre API pour prendre en compte le comportement corrigé avant la mise à niveau vers v4.",
63
120
  "V3_CONFIG_DEPRECATED": "L'option de configuration '{option}' est obsolète et sera supprimée dans la v4. Utilisez '{replacement}' à la place.",
121
+ "HINT_V3_CONFIG_DEPRECATED": "Cette option de configuration a été renommée pour plus de clarté. Mettez à jour votre code pour utiliser le nouveau nom d'option afin d'assurer la compatibilité avec v4.",
64
122
  "V2_CONFIG_UNSUPPORTED": "L'option de configuration '{option}' de la v2 n'est pas supportée dans la v3. {hint} Utilisez '{replacement}' à la place.",
123
+ "HINT_V2_CONFIG_UNSUPPORTED": "Cette option de configuration de la v2 n'est pas supportée dans la v3. Mettez à jour votre configuration pour utiliser l'équivalent v3 pour un meilleur contrôle et plus de clarté.",
65
124
  "DEBUG_MODE_ROOT_CONTRIBUTOR": "[{mode}] Contributeur racine détecté : {functionName}",
66
125
  "DEBUG_MODE_ROOT_CONTRIBUTOR_APPLIED": "[{mode}] Modèle de contributeur racine appliqué - API de fonction avec {properties} propriétés supplémentaires",
67
126
  "DEBUG_MODE_PROCESSING_DIRECTORY": "[{mode}] Traitement du répertoire : {categoryName} (profondeur {currentDepth})",
@@ -230,72 +289,15 @@
230
289
  "DEBUG_MODE_LAZY_WRAPPER_MATERIALIZED": "Enveloppe lazy matérialisée",
231
290
  "DEBUG_MODE_ALL_LAZY_WRAPPERS_MATERIALIZED": "Toutes les enveloppes lazy matérialisées",
232
291
  "HINT_REFERENCE_REMOVED": "L'export 'reference' a été retiré de '@cldmv/slothlet/runtime'. Les objets de référence sont désormais fusionnés directement dans l'API. Accédez-y via 'self.*' à la place (ex: 'self.myRefProperty').",
233
- "HINT_MODULE_NOT_FOUND": "Assurez-vous que le module existe et que le chemin est correct. Vérifiez les fautes de frappe dans l'instruction d'importation.",
234
292
  "HINT_SYNTAX_ERROR": "Vérifiez les erreurs de syntaxe dans le fichier du module. Problèmes courants : parenthèses manquantes, chaînes non fermées ou syntaxe JavaScript invalide.",
235
- "HINT_CONTEXT_NOT_FOUND": "Assurez-vous que l'instance Slothlet est initialisée et que le contexte est créé avant d'y accéder. Vérifiez que vous utilisez le bon ID d'instance.",
236
- "HINT_CONTEXT_ALREADY_EXISTS": "Ce contexte existe déjà. Vérifiez si vous essayez d'initialiser la même instance deux fois.",
237
- "HINT_CONTEXT_EXECUTION_FAILED": "Une erreur s'est produite lors de l'exécution de la fonction. Vérifiez les détails de l'erreur pour plus d'informations.",
238
- "HINT_NO_ACTIVE_CONTEXT": "Aucun contexte actif trouvé. Assurez-vous d'appeler cette fonction depuis un contexte Slothlet (mode async ou live).",
239
- "HINT_NO_ACTIVE_CONTEXT_ASYNC": "Aucun contexte actif trouvé. Assurez-vous d'appeler cette fonction depuis un contexte Slothlet asynchrone.",
240
- "HINT_NO_ACTIVE_CONTEXT_LIVE": "Aucun contexte actif trouvé. Assurez-vous d'appeler cette fonction depuis un contexte Slothlet live.",
241
- "HINT_OWNERSHIP_INVALID_MODULE_ID": "Le module ID est invalide. Assurez-vous que le module a été chargé correctement et que l'ID est correct.",
242
- "HINT_OWNERSHIP_INVALID_API_PATH": "Le chemin d'API est invalide. Assurez-vous que le format du chemin est correct.",
243
- "HINT_OWNERSHIP_CONFLICT": "Le chemin appartient déjà à un autre module. Options : (1) Utilisez forceOverwrite: true dans les options de api.add(), (2) Réglez la configuration de collision sur 'merge' ou 'replace', (3) Appelez api.slothlet.api.remove() d'abord pour vider le chemin.",
244
- "HINT_INVALID_CONFIG": "Vérifiez la valeur de configuration et assurez-vous qu'elle correspond au type et au format attendus.",
245
- "HINT_INVALID_CONFIG_DIR_INVALID": "Assurez-vous que le chemin du répertoire est une chaîne valide et pointe vers un répertoire existant.",
246
- "HINT_INVALID_CONFIG_FORCE_OVERWRITE_REQUIRES_MODULE_ID": "Lors de l'utilisation de forceOverwrite ou allowOverwrite, vous devez fournir un moduleID unique pour suivre la propriété du chemin écrasé.",
247
- "HINT_COLLISION_ERROR": "Le mode de collision est réglé sur 'error', ce qui empêche tout écrasement. Utilisez collision: 'merge' (combiner les propriétés), 'replace' (écraser complètement), 'warn' (avertir tout en gardant l'existant) ou 'skip' (ignorer silencieusement) à la place.",
248
- "HINT_COLLISION_DEFAULT_EXPORT_ERROR": "Un export nommé entre en conflit avec une propriété déjà présente sur l'objet d'exportation par défaut à ce chemin. Changez le mode de collision pour 'merge', 'replace', 'warn' ou 'skip', ou renommez la propriété en conflit.",
249
- "HINT_INVALID_ARGUMENT": "Le chemin doit être une chaîne en notation pointée (ex: 'math.add').",
250
- "HINT_RUNTIME_NO_ACTIVE_CONTEXT": "metadata.self() doit être appelé depuis une fonction de l'API Slothlet.",
251
- "HINT_INVALID_CONFIG_MODE_INVALID": "Le mode doit être soit 'eager' soit 'lazy'.",
252
- "HINT_INVALID_CONFIG_MODE_UNKNOWN": "Mode inconnu spécifié. Utilisez 'eager' ou 'lazy'.",
253
- "HINT_INVALID_CONFIG_DIR_MISSING": "Le chemin du répertoire est requis mais n'a pas été fourni.",
254
- "HINT_INVALID_CONFIG_API_PATH_INVALID": "Assurez-vous que le chemin d'API est une chaîne valide en notation pointée (ex: 'plugins.tools') sans segments vides ni noms réservés (slothlet, shutdown, destroy).",
255
- "HINT_INVALID_CONFIG_MUTATIONS_DISABLED": "Les opérations de mutation d'API nécessitent allowMutation: true dans la configuration. Utilisez diagnostics: true pour accéder à ces méthodes à des fins de test sans activer les mutations réelles.",
256
- "HINT_CACHE_MODULEID_MISMATCH": "C'est une erreur interne indiquant une corruption du cache. Veuillez signaler ce problème en précisant les étapes pour le reproduire.",
257
- "HINT_CACHE_NOT_FOUND": "Assurez-vous que le module a été chargé avant de tenter de recharger ou de reconstruire son cache. Vérifiez que le moduleID est correct.",
258
- "HINT_CACHE_MANAGER_NOT_AVAILABLE": "Le gestionnaire de cache devrait être initialisé automatiquement. Si vous voyez cette erreur, cela peut indiquer un problème d'initialisation interne.",
259
- "HINT_INVALID_METADATA_TARGET": "La cible doit être une fonction ou un objet qui a été chargé via Slothlet. Passez la référence réelle de la fonction/l'objet, pas une chaîne ou une valeur primitive.",
260
- "HINT_METADATA_NO_MODULE_ID": "Assurez-vous que la fonction/l'objet a été chargé via le système de modules de Slothlet. Seules les fonctions gérées par Slothlet ont des métadonnées associées.",
261
- "HINT_METADATA_LIFECYCLE_BYPASS": "N'appelez jamais tagSystemMetadata() directement. Déclenchez plutôt les événements de cycle de vie 'impl:created' ou 'impl:changed', qui invoqueront tagSystemMetadata() via le canal approprié.",
262
- "HINT_INVALID_METADATA_KEY": "Les clés de métadonnées doivent être des chaînes, des tableaux de chaînes ou des objets avec des valeurs de tableau. Vérifiez que le format de la clé correspond à l'un de ces types.",
263
- "HINT_WARNING_METADATA_MISMATCH": "Cet avertissement indique que l'emplacement d'exécution de la fonction ne correspond pas à son chemin de métadonnées enregistré. Cela peut se produire lors d'un rechargement à chaud ou si la fonction a été altérée. Dans la plupart des cas, cela est attendu lors du développement avec le rechargement à chaud activé.",
264
- "HINT_WARNING_INIT_COMPONENT_SKIPPED": "Les fichiers de composants qui échouent à l'importation seront ignorés. C'est normal pour les composants optionnels. Vérifiez le message d'erreur pour les détails si le composant aurait dû être chargé.",
265
- "HINT_WARNING_MULTIPLE_ROOT_CONTRIBUTORS": "Plusieurs fichiers exportent des fonctions par défaut au niveau racine. Chacun a été placé dans un espace de noms (ex: api.nomdufichier()). Envisagez de les regrouper dans un seul export racine ou de déplacer les fichiers dans des sous-répertoires pour une organisation plus claire.",
266
- "HINT_WARNING_HOT_RELOAD_PATH_COLLISION": "Une collision s'est produite lors du rechargement à chaud au chemin spécifié. La valeur existante est conservée. Pour forcer le remplacement, utilisez le mode de collision 'replace' au lieu de 'warn'.",
267
- "HINT_WARNING_HOT_RELOAD_MERGE_PRIMITIVES": "Impossible de fusionner des valeurs primitives (chaînes, nombres, booléens). Pour remplacer la valeur, utilisez le mode de collision 'replace'. Pour conserver la valeur existante, continuez à utiliser le mode 'warn'.",
268
- "HINT_WARNING_OWNERSHIP_CONFLICT": "Le chemin appartient déjà à un autre module. Pour forcer l'écrasement, utilisez forceOverwrite: true dans les options de api.add(), ou appelez api.slothlet.api.remove() d'abord pour vider le chemin.",
269
- "HINT_V2_CONFIG_UNSUPPORTED": "Cette option de configuration de la v2 n'est pas supportée dans la v3. Mettez à jour votre configuration pour utiliser l'équivalent v3 pour un meilleur contrôle et plus de clarté.",
270
- "HINT_V3_CONFIG_DEPRECATED": "Cette option de configuration a été renommée pour plus de clarté. Mettez à jour votre code pour utiliser le nouveau nom d'option afin d'assurer la compatibilité avec v4.",
271
- "HINT_MODULE_LOAD_FAILED": "Vérifiez les erreurs dans le fichier du module. Assurez-vous qu'il possède une syntaxe JavaScript valide et des exports.",
272
- "HINT_MODULE_IMPORT_FAILED": "Assurez-vous que le fichier du module existe et peut être importé. Vérifiez les erreurs de syntaxe ou les dépendances manquantes.",
273
- "HINT_MODULE_NO_EXPORTS": "Le module doit exporter au moins une fonction ou un objet.",
274
- "HINT_INVALID_DIRECTORY": "Assurez-vous que le chemin du répertoire est correct et que le répertoire existe et est accessible.",
275
- "HINT_WARN_DIRECTORY_EMPTY": "Vérifiez que le chemin du répertoire est correct. Les répertoires vides sont valides pour les flux de travail add-api où les modules seront ajoutés dynamiquement.",
276
- "HINT_INVALID_CONFIG_LAZY_NOT_READY": "En mode lazy, accédez aux propriétés pour déclencher la matérialisation avant d'appeler les fonctions.",
277
- "HINT_INTERNAL_INVALID_STATE": "Une erreur d'état interne s'est produite. C'est probablement un bug - veuillez le signaler avec des détails.",
278
- "HINT_INTERNAL_HOOK_STATE_CORRUPT": "L'état interne de HookManager est incohérent. Cela ne devrait jamais arriver lors d'une utilisation normale — veuillez soumettre un rapport de bug incluant comment vous avez appelé hook.on() et hook.remove().",
279
- "HINT_INVALID_CONFIG_LAZY_ASYNC_REQUIRED": "Le mode lazy nécessite des opérations asynchrones. Utilisez le mode eager ou implémentez des modèles asynchrones appropriés.",
280
- "HINT_RUNTIME_NO_ACTIVE_CONTEXT_SELF": "Impossible d'accéder à 'self' en dehors du contexte d'une fonction de l'API Slothlet.",
281
- "HINT_RUNTIME_NO_ACTIVE_CONTEXT_CONTEXT": "Impossible d'accéder à 'context' en dehors d'une fonction de l'API Slothlet. Le contexte ne peut être modifié que lors d'appels d'API Slothlet.",
282
- "HINT_LOOSE_SET_NOT_OWNED": "Un module dont l’apiPath est \"P\" ne peut écrire que sous \"P.*\". Pour enregistrer du code dans un autre espace de noms, appelez api.slothlet.api.add().",
283
- "HINT_LOOSE_SET_RESERVED_KEY": "Les segments __proto__, prototype et constructor ne peuvent pas être utilisés comme noms d’apiPath car écrire dessus modifierait la chaîne de prototypes JavaScript. Choisissez un autre nom.",
284
- "HINT_INVALID_CONFIG_NOT_LOADED": "L'instance doit être chargée avant d'effectuer cette opération. Appelez d'abord load().",
285
- "HINT_INVALID_CONFIG_RELOAD_NOT_IMPL": "Conseil : la fonctionnalité de rechargement n'est pas encore implémentée et sera ajoutée dans une future version.",
286
- "HINT_WARNING_RESERVED_PROPERTY_CONFLICT": "Le nom de propriété 'slothlet' est réservé aux méthodes d'API intégrées. Renommez votre module ou propriété d'API pour éviter les conflits avec slothlet.shutdown(), slothlet.api.*, etc.",
287
- "HINT_DEPRECATED_CONFIG_OPTION": "Cette option de configuration est obsolète et sera supprimée dans une version future. Mettez à jour votre configuration pour utiliser le remplacement recommandé.",
288
- "HINT_ERROR_RUNTIME_IMPORT_FAILED": "Le module runtime n'a pas pu être chargé. Cela peut se produire si l'export @cldmv/slothlet/runtime est indisponible ou s'il y a une dépendance circulaire. Certaines fonctionnalités nécessitant l'accès au runtime peuvent être limitées.",
289
- "INVALID_HOOK_TYPE": "Type de hook invalide \"{type}\". Doit être l'un des suivants : {validTypes}.",
290
293
  "INVALID_HOOK_HANDLER": "Le gestionnaire de hook doit être une fonction. Type reçu : {receivedType}.",
291
- "DUPLICATE_HOOK_ID": "Un hook avec l'ID \"{id}\" existe déjà. Utilisez un ID unique ou omettez l'option id pour en générer un automatiquement.",
292
- "INVALID_HOOK_SUBSET": "Sous-ensemble de hook invalide \"{subset}\". Doit être \"before\", \"primary\" ou \"after\". Sous-ensembles valides : {validSubsets}.",
293
- "INVALID_TYPE_PATTERN": "Modèle de type invalide \"{typePattern}\". {expected}",
294
- "HINT_INVALID_HOOK_TYPE": "Utilisez l'un des types de hook valides : before, after, always ou error.",
295
294
  "HINT_INVALID_HOOK_HANDLER": "Fournissez une fonction comme gestionnaire de hook, pas une chaîne ou un autre type.",
295
+ "DUPLICATE_HOOK_ID": "Un hook avec l'ID \"{id}\" existe déjà. Utilisez un ID unique ou omettez l'option id pour en générer un automatiquement.",
296
296
  "HINT_DUPLICATE_HOOK_ID": "Utilisez soit une valeur d'id différente, soit supprimez l'option id pour laisser Slothlet générer automatiquement un ID unique.",
297
+ "INVALID_HOOK_SUBSET": "Sous-ensemble de hook invalide \"{subset}\". Doit être \"before\", \"primary\" ou \"after\". Sous-ensembles valides : {validSubsets}.",
297
298
  "HINT_INVALID_HOOK_SUBSET": "Les sous-ensembles contrôlent l'ordre d'exécution. Utilisez 'before' pour le pré-traitement, 'primary' (par défaut) pour les hooks principaux ou 'after' pour le post-traitement.",
298
- "HINT_INVALID_TYPE_PATTERN": "Les modèles de type doivent être au format 'type:pattern', tel que 'before:math.*' ou 'error:**'.",
299
+ "INVALID_TYPE_PATTERN": "Modèle de type invalide \"{typePattern}\". {expected}",
300
+ "HINT_INVALID_TYPE_PATTERN": "Les motifs de hook utilisent la forme 'pattern:type', comme 'math.*:before' ou '**:error'. L'ancienne forme 'type:pattern' fonctionne toujours mais est dépréciée.",
299
301
  "HOOK_BEFORE_RETURNED_PROMISE": "Le hook 'before' '{id}' pour le chemin '{path}' a renvoyé une Promesse. Les hooks 'before' doivent être synchrones.",
300
302
  "HINT_HOOK_BEFORE_RETURNED_PROMISE": "Les hooks 'before' s'exécutent de manière synchrone avant l'appel de l'API. Supprimez l'utilisation de async/await ou de Promise de ce hook, ou changez-le en un hook 'after' si un traitement asynchrone est nécessaire.",
301
303
  "HOOK_BRACE_EXPANSION_MAX_DEPTH": "L'expansion des accolades dans le modèle de hook dépasse la profondeur d'imbrication maximale de {maxDepth}.",
@@ -383,11 +385,11 @@
383
385
  "INVALID_CONFIG_VERSION_DISPATCHER": "config.versionDispatcher doit être une chaîne (clé de métadonnées) ou une fonction ; reçu : {received}",
384
386
  "INVALID_CONFIG_VERSION_TAG": "versionConfig.version doit être une chaîne non vide ; reçu : {received}",
385
387
  "VERSION_NOT_FOUND": "La version '{version}' n'est pas enregistrée au chemin '{apiPath}'.",
388
+ "HINT_VERSION_NOT_FOUND": "Appelez api.slothlet.versioning.list('{apiPath}') pour voir quels tags de version sont actuellement enregistrés à ce chemin.",
386
389
  "VERSION_NO_DEFAULT": "Aucune version par défaut configurée pour le chemin '{apiPath}' et aucune version n'a pu être résolue depuis les métadonnées de l'appelant.",
387
390
  "VERSION_DISPATCH_NOT_CALLABLE": "Le dispatcher versionné à '{apiPath}' est un espace de noms, pas une fonction appelable.",
388
391
  "VERSION_REGISTER_DUPLICATE": "La version '{version}' est déjà enregistrée au chemin '{apiPath}'. Utilisez collisionMode 'replace' pour écraser.",
389
392
  "HINT_VERSION_REGISTER_DUPLICATE": "Appelez d'abord api.slothlet.versioning.unregister('{apiPath}', '{version}') ou enregistrez avec un tag de version différent.",
390
- "HINT_VERSION_NOT_FOUND": "Appelez api.slothlet.versioning.list('{apiPath}') pour voir quels tags de version sont actuellement enregistrés à ce chemin.",
391
393
  "VERSION_DISCRIMINATOR_INVALID_RETURN": "La fonction versionDispatcher a retourné '{returned}', qui n'est pas un tag de version enregistré pour le chemin '{apiPath}'.",
392
394
  "DEBUG_VERSION_RESOLVED": "Version résolue : {version} pour le chemin {apiPath} (appelant : {callerModule})",
393
395
  "DEBUG_VERSION_DEFAULT_USED": "Aucune correspondance de discriminateur pour le chemin {apiPath} ; utilisation de la version par défaut {version}.",
@@ -417,7 +419,27 @@
417
419
  "HINT_MODULE_MANIFEST_NOT_FOUND": "Les modules plugin doivent fournir un 'slothlet.module.json' à la racine du paquet (ou le fichier/clé spécifié via la surcharge `manifest`). Vérifiez que le fichier existe dans le paquet et que le localisateur de surcharge est correct.",
418
420
  "MODULE_MANIFEST_INVALID": "Le manifeste de module est invalide pour le paquet '{packageName}' à '{manifestPath}' : {reason}.",
419
421
  "HINT_MODULE_MANIFEST_INVALID": "Ouvrez le manifeste et assurez-vous qu'il est en JSON valide et correspond au schéma de module slothlet (voir schemas/slothlet.module.schema.json). Champs requis : schemaVersion, mountPath, apiDir.",
420
- "MODULE_MANIFEST_UNKNOWN_FIELD": "Le manifeste de module pour le paquet '{packageName}' contient un champ de niveau supérieur non reconnu '{field}'. Les champs inconnus sont rejetés ; utilisez le bloc 'metadata' dédié pour les ajouts définis par le développeur.",
422
+ "MODULE_MANIFEST_REASON_NOT_OBJECT": "le manifeste doit être un objet JSON",
423
+ "MODULE_MANIFEST_REASON_MISSING_FIELD": "champ requis manquant '{field}'",
424
+ "MODULE_MANIFEST_REASON_FIELD_TYPE": "le champ '{field}' doit être {expected}",
425
+ "EXPECTED_NON_EMPTY_STRING": "une chaîne non vide",
426
+ "EXPECTED_STRING": "une chaîne",
427
+ "EXPECTED_FINITE_NUMBER": "un nombre fini",
428
+ "EXPECTED_PLAIN_OBJECT": "un objet simple",
429
+ "EXPECTED_ARRAY_OF_RULE_OBJECTS": "un tableau d'objets de règle",
430
+ "MODULE_MANIFEST_REASON_MOUNTPATH_SHAPE": "le champ 'mountPath' doit être une chaîne non vide ou un tableau non vide de chaînes non vides",
431
+ "MODULE_MANIFEST_REASON_MOUNTPATH_ENTRIES": "les entrées du tableau 'mountPath' doivent toutes être des chaînes non vides",
432
+ "MODULE_MANIFEST_REASON_DEPENDENCY_TYPE": "la dépendance '{dependency}' doit être une plage de versions sous forme de chaîne",
433
+ "MODULE_MANIFEST_REASON_PERMISSION_RULE": "permissions[{index}] doit être un objet de règle",
434
+ "MODULE_MANIFEST_REASON_PERMISSION_CALLER": "permissions[{index}].caller doit être une chaîne non vide",
435
+ "MODULE_MANIFEST_REASON_PERMISSION_TARGET": "permissions[{index}].target doit être une chaîne non vide",
436
+ "MODULE_MANIFEST_REASON_PERMISSION_EFFECT": "permissions[{index}].effect doit être \"allow\" ou \"deny\"",
437
+ "MODULE_MANIFEST_REASON_JSON_PARSE": "erreur d'analyse JSON : {error}",
438
+ "GENERATE_MANIFEST_DIR_INVALID": "generateManifest : dir doit être une chaîne non vide, reçu {received}",
439
+ "GENERATE_MANIFEST_DIR_UNREADABLE": "generateManifest : impossible de lire le répertoire \"{dir}\" : {reason}",
440
+ "GENERATE_MANIFEST_NOT_DIRECTORY": "generateManifest : \"{dir}\" n'est pas un répertoire",
441
+ "GENERATE_BROWSER_ASSETS_SLOTHLET_BASE_INVALID": "generateBrowserAssets : options.slothletBase doit être une chaîne (emplacement de @cldmv/slothlet dans le navigateur), reçu {received}",
442
+ "MODULE_MANIFEST_UNKNOWN_FIELD": "Le manifeste de module pour le paquet '{packageName}' à '{manifestPath}' contient un champ de niveau supérieur non reconnu '{field}'. Les champs inconnus sont rejetés ; utilisez le bloc 'metadata' dédié pour les ajouts définis par le développeur.",
421
443
  "HINT_MODULE_MANIFEST_UNKNOWN_FIELD": "Si '{field}' est une faute de frappe, corrigez-la. S'il s'agit de métadonnées intentionnelles du développeur, déplacez-les dans l'objet 'metadata'.",
422
444
  "MODULE_MANIFEST_NAME_MISMATCH": "Le manifeste de module pour le paquet '{packageName}' déclare le nom '{manifestName}' qui ne correspond pas au nom dans package.json '{packageName}'.",
423
445
  "HINT_MODULE_MANIFEST_NAME_MISMATCH": "Le champ 'name' dans slothlet.module.json est optionnel mais doit correspondre à package.json lorsqu'il est présent. Supprimez le champ 'name' du manifeste ou alignez-le avec package.json.",
@@ -434,7 +456,11 @@
434
456
  "MODULE_DUPLICATE_NAME_VERSION_MISMATCH": "Le paquet de module '{packageName}' version '{version}' a été trouvé à plusieurs chemins réels distincts : {paths}.",
435
457
  "HINT_MODULE_DUPLICATE_NAME_VERSION_MISMATCH": "Il s'agit presque certainement d'une mauvaise configuration — le même paquet à la même version installé dans deux emplacements non liés. Identifiez quelle installation est prévue et supprimez l'autre.",
436
458
  "MODULE_MOUNT_COLLISION": "Le paquet de module '{packageName}' ne peut pas être monté à '{mountPath}' : le chemin est déjà occupé par le module '{existingModuleID}' et collisionMode est '{collisionMode}'.",
437
- "HINT_MODULE_MOUNT_COLLISION": "Changez le mountPath du manifeste, passez `collisionMode: \"merge\"` à `addModule()` / `addModules()` pour permettre la coexistence, ou appelez d'abord `removeModule()` sur le module existant."
459
+ "HINT_MODULE_MOUNT_COLLISION": "Changez le mountPath du manifeste, passez `collisionMode: \"merge\"` à `addModule()` / `addModules()` pour permettre la coexistence, ou appelez d'abord `removeModule()` sur le module existant.",
460
+ "HOOK_TYPEPATTERN_PREFIX_DEPRECATED": "La forme d'enregistrement de hook '{given}' est obsolète et sera supprimée dans la v4. Utilisez plutôt la forme chemin-d'abord '{suggested}' (par ex. 'math.*:before').",
461
+ "HINT_HOOK_TYPEPATTERN_PREFIX_DEPRECATED": "Déplacez le type de hook à la fin sous forme de suffixe : réécrivez un sélecteur type-d'abord comme 'before:math.add' en la forme chemin-d'abord 'math.add:before'.",
462
+ "HOOK_UNPINNED_IGNORED": "lockCaller:false a été ignoré pour le hook '{pattern}' ; les hooks sont liés à leur module d'enregistrement. Définissez hook.pin:false (init) ou appelez api.slothlet.hook.pin.disable() pour autoriser les hooks non liés.",
463
+ "HINT_HOOK_UNPINNED_IGNORED": "Les hooks enregistrés par un module sont toujours liés à leur propriétaire pour des raisons de sécurité. Pour autoriser les hooks non liés, définissez hook.pin:false dans la configuration slothlet ou appelez api.slothlet.hook.pin.disable() à l'exécution."
438
464
  },
439
465
  "metadata": {
440
466
  "code": "fr-fr",