opencode-pollinations-plugin 6.1.0-beta.9 → 6.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/README.de.md +130 -0
  2. package/README.es.md +130 -0
  3. package/README.fr.md +130 -0
  4. package/README.it.md +130 -0
  5. package/README.md +87 -73
  6. package/dist/index.js +52 -161
  7. package/dist/locales/de.json +374 -0
  8. package/dist/locales/en.json +373 -0
  9. package/dist/locales/es.json +374 -0
  10. package/dist/locales/fr.json +373 -0
  11. package/dist/locales/index.d.ts +1 -0
  12. package/dist/locales/index.js +37 -0
  13. package/dist/locales/it.json +374 -0
  14. package/dist/server/commands.d.ts +6 -0
  15. package/dist/server/commands.js +394 -125
  16. package/dist/server/config.d.ts +34 -23
  17. package/dist/server/config.js +200 -108
  18. package/dist/server/connect-response.d.ts +2 -0
  19. package/dist/server/connect-response.js +59 -0
  20. package/dist/server/generate-config.d.ts +3 -30
  21. package/dist/server/generate-config.js +164 -106
  22. package/dist/server/index.d.ts +2 -1
  23. package/dist/server/index.js +124 -149
  24. package/dist/server/logger.d.ts +8 -0
  25. package/dist/server/logger.js +38 -0
  26. package/dist/server/models/cache.d.ts +35 -0
  27. package/dist/server/models/cache.js +160 -0
  28. package/dist/server/models/fetcher.d.ts +18 -0
  29. package/dist/server/models/fetcher.js +194 -0
  30. package/dist/server/models/index.d.ts +6 -0
  31. package/dist/server/models/index.js +5 -0
  32. package/dist/server/models/manual.d.ts +15 -0
  33. package/dist/server/models/manual.js +92 -0
  34. package/dist/server/models/types.d.ts +55 -0
  35. package/dist/server/models/types.js +7 -0
  36. package/dist/server/models/worker.d.ts +22 -0
  37. package/dist/server/models/worker.js +174 -0
  38. package/dist/server/pollinations-api.d.ts +11 -0
  39. package/dist/server/pollinations-api.js +21 -8
  40. package/dist/server/proxy.js +222 -307
  41. package/dist/server/quota.d.ts +2 -0
  42. package/dist/server/quota.js +89 -86
  43. package/dist/server/scripts/pollinations_pricing.d.ts +8 -0
  44. package/dist/server/scripts/pollinations_pricing.js +246 -0
  45. package/dist/server/scripts/test_cost_endpoints.d.ts +1 -0
  46. package/dist/server/scripts/test_cost_endpoints.js +61 -0
  47. package/dist/server/scripts/test_dynamic_pricing.d.ts +1 -0
  48. package/dist/server/scripts/test_dynamic_pricing.js +39 -0
  49. package/dist/server/scripts/test_freetier_audit.d.ts +11 -0
  50. package/dist/server/scripts/test_freetier_audit.js +215 -0
  51. package/dist/server/scripts/test_parallel_cost.d.ts +1 -0
  52. package/dist/server/scripts/test_parallel_cost.js +104 -0
  53. package/dist/server/toast.d.ts +7 -1
  54. package/dist/server/toast.js +43 -10
  55. package/dist/tools/design/gen_diagram.d.ts +2 -0
  56. package/dist/tools/design/gen_diagram.js +94 -0
  57. package/dist/tools/design/gen_palette.d.ts +2 -0
  58. package/dist/tools/design/gen_palette.js +182 -0
  59. package/dist/tools/design/gen_qrcode.d.ts +2 -0
  60. package/dist/tools/design/gen_qrcode.js +50 -0
  61. package/dist/tools/ffmpeg.d.ts +24 -0
  62. package/dist/tools/ffmpeg.js +54 -0
  63. package/dist/tools/index.d.ts +25 -0
  64. package/dist/tools/index.js +86 -0
  65. package/dist/tools/pollinations/beta_discovery.d.ts +9 -0
  66. package/dist/tools/pollinations/beta_discovery.js +201 -0
  67. package/dist/tools/pollinations/cost-guard.d.ts +38 -0
  68. package/dist/tools/pollinations/cost-guard.js +136 -0
  69. package/dist/tools/pollinations/deepsearch.d.ts +7 -0
  70. package/dist/tools/pollinations/deepsearch.js +80 -0
  71. package/dist/tools/pollinations/gen_audio.d.ts +18 -0
  72. package/dist/tools/pollinations/gen_audio.js +220 -0
  73. package/dist/tools/pollinations/gen_image.d.ts +11 -0
  74. package/dist/tools/pollinations/gen_image.js +211 -0
  75. package/dist/tools/pollinations/gen_music.d.ts +14 -0
  76. package/dist/tools/pollinations/gen_music.js +157 -0
  77. package/dist/tools/pollinations/gen_video.d.ts +16 -0
  78. package/dist/tools/pollinations/gen_video.js +249 -0
  79. package/dist/tools/pollinations/polli_config.d.ts +2 -0
  80. package/dist/tools/pollinations/polli_config.js +95 -0
  81. package/dist/tools/pollinations/polli_gen_confirm.d.ts +2 -0
  82. package/dist/tools/pollinations/polli_gen_confirm.js +48 -0
  83. package/dist/tools/pollinations/polli_status.d.ts +2 -0
  84. package/dist/tools/pollinations/polli_status.js +31 -0
  85. package/dist/tools/pollinations/polli_web_search.d.ts +15 -0
  86. package/dist/tools/pollinations/polli_web_search.js +126 -0
  87. package/dist/tools/pollinations/search_crawl_scrape.d.ts +7 -0
  88. package/dist/tools/pollinations/search_crawl_scrape.js +85 -0
  89. package/dist/tools/pollinations/shared.d.ts +181 -0
  90. package/dist/tools/pollinations/shared.js +758 -0
  91. package/dist/tools/pollinations/test_estimators.d.ts +1 -0
  92. package/dist/tools/pollinations/test_estimators.js +22 -0
  93. package/dist/tools/pollinations/transcribe_audio.d.ts +13 -0
  94. package/dist/tools/pollinations/transcribe_audio.js +171 -0
  95. package/dist/tools/power/extract_audio.d.ts +2 -0
  96. package/dist/tools/power/extract_audio.js +179 -0
  97. package/dist/tools/power/extract_frames.d.ts +2 -0
  98. package/dist/tools/power/extract_frames.js +237 -0
  99. package/dist/tools/power/file_to_url.d.ts +2 -0
  100. package/dist/tools/power/file_to_url.js +217 -0
  101. package/dist/tools/power/remove_background.d.ts +2 -0
  102. package/dist/tools/power/remove_background.js +404 -0
  103. package/dist/tools/power/rmbg_keys.d.ts +2 -0
  104. package/dist/tools/power/rmbg_keys.js +79 -0
  105. package/dist/tools/shared.d.ts +30 -0
  106. package/dist/tools/shared.js +80 -0
  107. package/package.json +9 -3
  108. package/dist/server/models-seed.d.ts +0 -18
  109. package/dist/server/models-seed.js +0 -55
@@ -0,0 +1,373 @@
1
+ {
2
+ "commands": {
3
+ "help": {
4
+ "title": "### 🌸 Pollinations Plugin - Commandes V6",
5
+ "alias_note": "*(L'alias `/poll` est géré et recommandé à la place de `/pollinations` !)*",
6
+ "mode_usage": "**Mode & Usage**\n- **`/poll mode [mode]`**: Change le mode (manual, alwaysfree, pro).\n- **`/poll usage [full]`**: Affiche le dashboard (full = détail).\n- **`/poll fallback <main> [agent]`**: Configure le Safety Net.",
7
+ "configuration": "**Configuration**\n- **`/poll config [key] [value]`**:\n - `lang`: en, fr, etc.\n - `status_gui`: none, alert, all\n - `logs_gui`: none, error, verbose\n - `threshold_tier` / `threshold_wallet`: 0-100\n - `status_bar`: true/false\n - `cost_estimator`: true/false (show cost in outputs)\n - `enablePaidTools`: true/false (wallet protection)\n - `costThreshold`: seuil en pollen (défaut: 0.15)\n - `costConfirmationRequired`: true/false (confirmation coût)",
8
+ "models_pricing": "**Modèles & Pricing**\n- **`/poll models [type]`**: Liste des modèles (type: image, video, audio, text)\n- **`/poll pricing`**: Tableau de pricing détaillé\n- **`/poll infos`**: Explications sur les Tiers et le Pollen\n\n> 💡 **RMBG keys**: Use the `rmbg_keys` tool (works with any model)."
9
+ },
10
+ "config": {
11
+ "title": "## ⚙️ Configuration Pollinations (v{version})",
12
+ "alias_note": "*Vous pouvez utiliser indifféremment `/pollinations` ou son alias court `/poll` pour toutes ces commandes.*",
13
+ "intro": "Voici l'état actuel de votre configuration locale.",
14
+ "table_headers": "| Paramètre | Valeur Actuelle | Rôle | Commande |",
15
+ "table_divider": "|-----------|-----------------|------|----------|",
16
+ "api_key_role": "Votre clé API secrète (BYOK)",
17
+ "mode_role": "Mode d'accès",
18
+ "enablePaidTools_role": "Sécurité: Désactiver outils payants",
19
+ "costConfirmationRequired_role": "Demande confirmation si le seuil d'alerte est dépassé",
20
+ "costThreshold_role": "Seuil d'alerte coût Outils",
21
+ "cost_estimator_role": "Afficher l'estimation de coût dans les Toasts",
22
+ "fallback_main_role": "Modèle de repli Chat vers l'univers free legacy",
23
+ "fallback_agent_role": "Modèle de repli Agent vers l'univers free legacy",
24
+ "fallback_enter_role": "Modèle Agent principal (free/* ou enter/*) -> *Géré automatiquement*",
25
+ "status_gui_role": "Toasts de statut (all, alert, none)",
26
+ "logs_gui_role": "Niveau de log (verbose, error)",
27
+ "threshold_tier_role": "Alerte limite Quotidienne Gratuite",
28
+ "threshold_wallet_role": "Alerte baisse de Wallet Premium",
29
+ "status_bar_role": "Affiche l'icône dans la barre de statut",
30
+ "lang_role": "Langue du Plugin",
31
+ "not_configured": "Non configurée",
32
+ "managed_auto": "Géré automatiquement"
33
+ },
34
+ "generic": {
35
+ "add_key_hint": "💡 Utilisez /poll connect <clé> pour ajouter une clé API.",
36
+ "unknown_command": "❌ Commande inconnue : {cmd}",
37
+ "tui_error": "Erreur de commande : {error}",
38
+ "tui_critical": "Erreur critique de commande : {error}",
39
+ "tui_usage_msg": "Utilisation Pollinations mise à jour."
40
+ },
41
+ "mode": {
42
+ "current": "Mode actuel : {mode}",
43
+ "invalid": "❌ Mode invalide '{mode}'. Utilisez : manual, alwaysfree, pro",
44
+ "pro_requires_key": "❌ Le mode 'pro' nécessite une clé API.",
45
+ "verifying": "Vérification des permissions...",
46
+ "denied": "❌ Accès refusé à pro/alwaysfree ({status}: {reason})",
47
+ "verify_error": "❌ Erreur de vérification : {error}",
48
+ "success": "✅ Mode basculé sur : {mode}"
49
+ },
50
+ "usage": {
51
+ "title": "## 📊 Stats Pollinations (Mode: {mode})\n\n",
52
+ "resources": "### 🌻 Ressources de Base\n",
53
+ "tier": "- **Niveau:** {emoji} {tier} (Limite: {limit} 🌻)\n",
54
+ "quota": "- **Période:** {remaining} dépensés / {limit} total limités\n",
55
+ "usage_bar": "- **Utilisation:** {bar}\n",
56
+ "wallet": "- **Portefeuille:** {balance} 🌻 restants\n\n",
57
+ "reset": "### 🕒 Infos de Réinitialisation\n- **Prochain Reset:** {date} (dans {duration})\n\n",
58
+ "restricted_key": "⚠️ Clé API restreinte. Détails non disponibles.\n",
59
+ "period_detail": "### 📈 Détail de la période (depuis {time})\n",
60
+ "total_reqs": "- **Requêtes:** {reqs} ({inTok} in | {outTok} out)\n\n",
61
+ "table_head1": "| Modèle | Reqs | Coût | Tokens |\n",
62
+ "table_head2": "|--------|------|------|--------|\n",
63
+ "no_history": "*Aucune activité dans la période en cours.*\n",
64
+ "full_requires_key": "⚠️ `/poll usage full` nécessite une clé API connectée.\n",
65
+ "hint_full": "💡 Utilisez `/poll usage full` pour les détails (nécessite une clé)."
66
+ },
67
+ "fallback": {
68
+ "current": "Fallbacks actuels:\n- {free}\n- {enter}",
69
+ "success": "✅ Free fallback mis à jour : {main} -> {agent}"
70
+ },
71
+ "connect": {
72
+ "usage": "❌ Utilisation : /poll connect <clé>",
73
+ "verifying": "Vérification et téléchargement des modèles...",
74
+ "limited": "\n⚠️ La clé a des permissions limitées (Raison: {reason}). Mode 'manual' forcé.",
75
+ "success_toast": "Connecté ✓ ({count} modèles Enter)",
76
+ "success_response": "✅ Connecté avec succès !\nClé: `{key}`\nModèles déverrouillés: {count} ({diamond} 💎 premium){forced_msg}"
77
+ },
78
+ "models": {
79
+ "loading": "⏳ Chargement des modèles...",
80
+ "free_title": "## 🕊️ Modèles Free Universe (text.pollinations.ai)",
81
+ "free_desc": "Ces modèles ne nécessitent pas de clé API et sont librement accessibles.",
82
+ "free_headers1": "| Nom du Modèle | Alias | Description | Vision | Outils |",
83
+ "free_headers2": "|---------------|-------|-------------|--------|--------|",
84
+ "free_error": "⚠️ Erreur lors de la récupération des modèles gratuits.",
85
+ "enter_title": "## 💎 Modèles Enter Universe (gen.pollinations.ai)",
86
+ "cats": {
87
+ "image": "Images",
88
+ "video": "Vidéos",
89
+ "audio": "Audio",
90
+ "text": "Texte & Chat"
91
+ },
92
+ "cat_title": "### {emoji} {label} ({count})",
93
+ "enter_headers1": "| Nom | ID | Description | Flags | In | Coût Out |",
94
+ "enter_headers2": "|-----|----|-------------|-------|----|----------|",
95
+ "capabilities": "\n**Capacités :** `💎` Payant uniq. `💬` Chat/Reasoning `👁️` Vision/Images `🎙️` Audio `🔍` WebSearch `💻` Code",
96
+ "other": "**Entrée :** `📝` Texte `🖼️` Image `🎤` Audio"
97
+ },
98
+ "infos": {
99
+ "title": "## 🍯💚 POLLINATIONS OPENCODE PLUGIN 💚🍯\n\nBienvenue **{name}** sur le plugin Pollinations pour OpenCode !\n\nCe plugin vous permet de générer du code, des images, d'analyser des vidéos et d'interagir avec les meilleurs modèles d'Intelligence Artificielle de manière totalement transparente et intégrée à votre environnement de travail. Accédez aux capacités des LLMs de pointe, que ce soit via des requêtes de chat, la refonte de votre base de code, ou directement dans le terminal.",
100
+ "features_title": "**Ce Que ce plugin vous apporte en plus ! :**",
101
+ "features_free": "**🛠️ Outils Gratuits Intégrés (Toujours disponibles) :**\n- `gen_qrcode` / `gen_diagram` / `gen_palette` : Outils visuels et dev.\n- `remove_background` : Détourage d'image natif.\n- `extract_frames` / `extract_audio` : Extraction rapide de contenu média.\n- `file_to_url` : Hébergement instantané de vos fichiers locaux en ligne.",
102
+ "features_pro": "**💎 Outils Pollinations (Premium - Automatisés avec votre Clé) :**\n- `polli_gen_image` : Génération d'images (Flux, Seedream, Gemini) + support Image-to-Image.\n- `polli_gen_video` : Génération vidéo text-to-video / image-to-video (Veo, Wan, LTX...).\n- `polli_gen_audio`/`polli_stt` : Transcription Whisper, Text-to-Speech ElevenLabs.\n- `polli_gen_music` : Moteur de musique générative.\n- `polli_web_search` : Recherche connectée pour étendre la base de contexte de l'agent.",
103
+ "features_config": "- **Une configuration granulaire**, des modes de gestions de vos tokens et de vos outils, de la sécurisation des coûts des outils consommant du pollen...",
104
+ "tiers_title": "> **Your tiers:** {emoji} {tier}",
105
+ "about": "## 🌍 Qu'est-ce que pollinations.ai ?\npollinations.ai est une plateforme d'IA open-source construite par et pour la communauté. Nous offrons une API unifiée pour les images, le texte, l'audio et la vidéo. Tout fonctionne de manière ouverte : notre code, notre feuille de route, nos conversations. Des centaines de développeurs construisent déjà des outils, des jeux, des bots et des expériences farfelues avec nous. Vous êtes les bienvenus !\n\nPas de boîtes noires. Pas de dépendance exclusive (vendor lock-in). Juste une API conviviale et un Discord rempli de personnes qui s'entraident réellement.",
106
+ "levels_title": "## 📈 Évoluez votre Palier (Tier)",
107
+ "levels_list": "Pour les développeurs qui créent avec pollinations.ai. Montez de niveau pour gagner plus de Pollen quotidien.\n\n- 🦠 **Microbe** (0.1 pollen/jour) : Pour débloquer : S'inscrire\n- 🍄 **Spore** (1 pollen/jour) : Pour débloquer : Vérification automatique\n- 🌱 **Seed** (3 pollen/jour) : Pour débloquer : 8+ points dev\n- 🌸 **Flower** (10 pollen/jour) : Pour débloquer : Publier une application\n- 🍯 **Nectar** (20 pollen/jour) : Bientôt disponible 🔮",
108
+ "beta_note": "✨ *Nous sommes en bêta ! Nous apprenons ce qui fonctionne le mieux pour notre communauté.*",
109
+ "pollen_title": "## 💎 Qu'est-ce que le Pollen ?",
110
+ "pollen_get": "Faire tourner des modèles d'IA coûte de l'argent. Le Pollen est notre moyen de faire fonctionner les serveurs sans publicité ni revente de vos données. Un crédit simple et unique pour tous les modèles — prévisible, transparent, sans surprises.\n\n**$1 ≈ 1 Pollen** (les prix peuvent évoluer). Vous le dépensez pour faire des appels API.",
111
+ "pollen_spend": "## 🛒 Comment obtenir du Pollen ?\nIl y a plusieurs moyens d'ajouter du Pollen à votre solde : Participer à la communauté, ou l'acheter directement via le dashboard."
112
+ },
113
+ "pricing_units": {
114
+ "tokens": "~tokens",
115
+ "img": "🌻/img",
116
+ "s": "🌻/s",
117
+ "tok": "🌻/tok"
118
+ }
119
+ },
120
+ "proxy": {
121
+ "errors": {
122
+ "invalid_key_free_mode": "❌ **Échec Connexion**: {error}\n\nLa configuration a été réinitialisée (Mode Gratuit/Manuel).",
123
+ "key_rejected": "Clé rejetée par l'API (Accès refusé ou invalide).",
124
+ "no_enter_models": "Aucun modèle Enterprise détecté pour cette clé."
125
+ },
126
+ "warnings": {
127
+ "paid_blocked_alwaysfree_title": "🚫 Modèle payant bloqué: {model}",
128
+ "paid_blocked_alwaysfree_msg": "🚫 **Modèle payant non disponible en mode AlwaysFree**\n\nLe modèle `{model}` consomme directement votre wallet (💎 Paid Only).\n\n**Solutions :**\n• `/poll config mode pro` — Autorise les modèles payants avec protection wallet\n• `/poll config mode manual` — Aucune restriction, contrôle total",
129
+ "paid_blocked_empty_wallet_msg": "⚠️ **Alerte : Modèle Payant (💎 Paid Only) demandé mais Quota Premium épuisé (ou Mode Free).**\n\nVous avez demandé le modèle `{model}` qui nécessite des fonds sur votre Wallet Premium.\n\n🔄 **Action de repli (Safety Net)** :\nLe gestionnaire d'énergie a automatiquement redirigé votre requête vers l'univers gratuit `{fallback}` pour éviter un échec.\n\n_Note : Rechargez votre wallet sur pollinations.ai pour utiliser ce modèle._",
130
+ "tier_limit_msg": "⚠️ **Alerte Quota Gratuit (Tier) Dépassée**\n\nVous êtes passé sous la barre des {threshold}% de réserve gratuite journalière.\n\n🔄 **Action de repli (Safety Net)** :\nL'Agent a été basculé sur le réseau de secours universel.",
131
+ "wallet_limit_msg": "⚠️ **Alerte Wallet Premium Dépassée**\n\nIl vous reste moins de {threshold}% de votre portefeuille de pollen acheté.\n\n🔄 **Action de repli (Safety Net)** :\nL'Agent a été basculé sur le réseau gratuit."
132
+ }
133
+ },
134
+ "toasts": {
135
+ "config_updated": "⚙️ Configuration modifiée par l'Agent",
136
+ "invalid_key_revert": "Clé Invalide. Retour au mode Gratuit."
137
+ },
138
+ "tools": {
139
+ "image": {
140
+ "generating": "Génération image: {model} {width}x{height}",
141
+ "success": "Image générée ✓ ({model})",
142
+ "error": "Erreur: {error}",
143
+ "unreferenced_model": "Modèle \"{model}\" non référencé — mode (beta)",
144
+ "insufficient_funds": "❌ Crédits pollen insuffisants pour '{model}'.",
145
+ "invalid_key": "❌ Clé API invalide ou non autorisée.",
146
+ "invalid_params": "❌ Paramètres invalides: {error}",
147
+ "gen_error_msg": "❌ Erreur génération image: {error}",
148
+ "cost_estimated": "- Coût Estimé : {cost}",
149
+ "cost_real_wallet": "- Coût Réel : **{cost}** (via Solde Wallet)",
150
+ "cost_real_api": "- Coût Réel : **{cost}** (via Headers API)",
151
+ "cost_unknown": "- Coût Réel : Inconnu (API injoignable)",
152
+ "desc": "Génère une image à partir d'un prompt texte avec Pollinations AI.\n\n💡 **Modèles Image Dynamiques** :\nL'API Pollinations (Enter) possède une quantité importante de modèles (Flux, Midjourney, Seedream, etc.) et ils changent fréquemment. Le catalogue à jour est listé ci-dessous.\n\n**Exemples d'utilisation Optionnelle** :\n- **I2I (Image-to-Image)** : Utilisez le paramètre `reference_image` avec une URL ou chemin local si le modèle le supporte.\n- L'outil embarque un \"costGuard\" automatique.",
153
+ "arg_prompt": "Description de l'image à générer",
154
+ "arg_model": "Modèle à utiliser (défaut: flux). Modèles inconnus acceptés en (beta).",
155
+ "arg_width": "Largeur de l'image (défaut: 1024)",
156
+ "arg_height": "Hauteur de l'image (défaut: 1024)",
157
+ "arg_ref": "URL(s) pour édition image-to-image",
158
+ "arg_seed": "Seed de reproductibilité (-1 random)",
159
+ "arg_quality": "Qualité (modèles gptimage uniquement)",
160
+ "arg_trans": "Fond transparent (modèles gptimage uniquement)",
161
+ "arg_save_to": "Dossier de sortie personnalisé",
162
+ "arg_filename": "Nom de fichier (sans extension)",
163
+ "req_key": "❌ **Clé API Requise** pour la génération d'images.\n💡 Utilisez `/poll connect <clé>` pour activer le service.\n💎 Modèles disponibles: {models}...",
164
+ "no_i2i": "⚠️ Le modèle \"{model}\" ne supporte pas l'Image-to-Image.\n💡 Modèles I2I supportés: {models}",
165
+ "blocked": "❌ Opération bloquée par le Cost Guard.",
166
+ "req_url_i2i": "❌ Les fichiers locaux nécessitent d'être uploadés d'abord.\n💡 Utilisez l'outil `file_to_url` pour obtenir une URL publique.",
167
+ "res_title": "🎨 Image Générée",
168
+ "res_prompt": "Prompt: {prompt}",
169
+ "res_model": "Modèle: {model}",
170
+ "res_res": "Résolution: {width}x{height}",
171
+ "res_i2i_src": "I2I Source: {src}",
172
+ "res_file": "Fichier: {path}",
173
+ "res_size": "Taille: {size}",
174
+ "cost_title": "\n💰 **Rapport Financier :**"
175
+ },
176
+ "config": {
177
+ "no_values": "Aucune valeur de configuration fournie. Veuillez spécifier au moins un paramètre via les arguments.",
178
+ "success": "Configuration mise à jour avec succès.\nChangements appliqués :\n{updates}\n\n(Notez: Vérifiez avec /poll help si vous avez besoin de connaître les préfixes des modèles)."
179
+ },
180
+ "polli_gen_confirm": {
181
+ "desc": "Valide et exécute (ou annule) une requête Pollinations précédemment suspendue par le Cost Guard. Cet outil doit être appelé lorsque l'utilisateur a explicitement donné son accord (ou refusé) pour dépenser le montant estimé.",
182
+ "arg_request_id": "L'identifiant de la requête (req_xxxx) retourné par l'outil bloqué.",
183
+ "arg_action": "L'action à effectuer : confirm pour lancer la génération, cancel pour l'annuler définitivement.",
184
+ "not_found": "❌ Session introuvable ou expirée pour l'ID: {reqId}. Veuillez relancer la génération initiale.",
185
+ "cancelled": "✅ La requête {reqId} a été annulée et supprimée de la file d'attente. Action abandonnée.",
186
+ "unknown_tool": "❌ Outil cible inconnu: {toolName}",
187
+ "toast_confirmed": "✅ Confirmé: {toolName} ({cost})"
188
+ },
189
+ "polli_status": {
190
+ "desc": "Vérifiez le statut actuel, les modèles disponibles, les prix en direct et l'utilisation/les paliers du compte pour le plugin Pollinations AI. Utilisez cet outil pour comprendre l'univers des modèles, le solde du compte et l'utilisation. NE PAS utiliser pour découvrir des paramètres masqués.",
191
+ "arg_info_type": "Type d'information à récupérer: usage=quota/portefeuille, pricing=coûts des modèles, models=liste des modèles, infos=détails des paliers, all=tout"
192
+ },
193
+ "polli_web_search": {
194
+ "desc": "Module de recherche universel Pollinations. Récupère des informations web à jour via des LLMs disposant d'outils web ou spécialisés selon leurs capacités.",
195
+ "arg_query": "Requête de recherche (ex: 'Dernières actualités IA').",
196
+ "arg_model": "Le modèle de recherche spécifique à utiliser (voir les suggestions Markdown injectées).",
197
+ "arg_include_sources": "Inclure l'URL des sources (défaut: vrai).",
198
+ "arg_recency": "Filtre temporel (day, week, month) pour information fraîche.",
199
+ "include_sources_prompt": "Merci d'inclure les liens sources à la fin.",
200
+ "recency_any": "",
201
+ "recency_day": "Limitez aux 24 dernières heures.",
202
+ "recency_week": "Limitez aux 7 derniers jours.",
203
+ "recency_month": "Limitez aux 30 derniers jours.",
204
+ "req_key": "❌ Clé API requise.",
205
+ "insufficient_pollen": "❌ Pollen insuffisant pour chercher. ~0.005 requis.",
206
+ "blocked": "�� Recherche bloquée par le Cost Guard.",
207
+ "toast_success": "Recherche Web par {model} terminée",
208
+ "toast_error": "Échec de recherche: {error}",
209
+ "result_query": "📌 Requête : {query}",
210
+ "result_model": "�� Modèle : {model}",
211
+ "result_recency": "📅 Date limite : {recency}",
212
+ "result_cost": "🪙 Coût Est. : {cost}",
213
+ "result_cost_max": "🪙 Coût Est. : {cost} (Max: {maxCost})",
214
+ "error_prefix": "❌ Erreur de recherche: {error}"
215
+ },
216
+ "polli_gen_video": {
217
+ "desc": "Génère une vidéo à partir d'un texte ou d'une image avec Pollinations AI.\n\n💡 **Modèles Vidéo Dynamiques** :\nLes modèles (T2V/I2V), limites, ratios et tarifs sont injectés en temps réel.\n\n**Exemples communes** :\n- `veo` interpolation: Utilisez `reference_image=url1,url2`.",
218
+ "arg_prompt": "Description de la vidéo à générer",
219
+ "arg_model": "Modèle vidéo (défaut: {model})",
220
+ "arg_duration": "Durée en secondes (défaut: 3)",
221
+ "arg_aspect": "Aspect ratio (défaut: 16:9)",
222
+ "arg_ref": "URL pour I2V (requis pour wan) ou URLs (virgule) pour veo interpolation",
223
+ "arg_seed": "Seed de reproductibilité (-1 random)",
224
+ "arg_save_to": "Dossier de sortie personnalisé",
225
+ "arg_filename": "Nom de fichier (sans extension)",
226
+ "req_key": "❌ La génération vidéo nécessite une clé API.\n🔧 Connectez votre clé avec /poll connect",
227
+ "warn_beta": "Modèle \"{model}\" non référencé — mode (beta)",
228
+ "invalid_duration": "❌ Durée invalide pour {model}: {duration}s\n💡 Durée supportée: {min}-{max}s",
229
+ "invalid_aspect": "❌ Aspect ratio non supporté par {model}: {aspect}\n💡 Ratios supportés: {supported}",
230
+ "req_i2v": "❌ Le modèle \"{model}\" nécessite une image de départ (I2V ONLY).\n💡 Ajoutez --reference_image <url>\n💡 Pour du T2V, utilisez: grok-video, ltx-2, veo, seedance",
231
+ "no_i2v": "⚠️ Le modèle \"{model}\" ne supporte pas l'I2V.\n💡 Modèles I2V: {models}",
232
+ "blocked": "❌ Opération bloquée par le Cost Guard.",
233
+ "toast_start": "Génération vidéo: {model} ({duration}s)",
234
+ "res_title": "🎬 Vidéo Générée",
235
+ "res_prompt": "Prompt: {prompt}",
236
+ "res_model": "Modèle: {model}",
237
+ "res_duration": "Durée: ~{duration}s",
238
+ "res_aspect": "Aspect: {aspect}",
239
+ "res_i2v_mode": "I2V Mode: {mode}",
240
+ "res_i2v_interp": "Interpolation (multi-image)",
241
+ "res_i2v_single": "Single image",
242
+ "res_source": "Source: {url}",
243
+ "res_audio_ok": "Audio: ✅ Généré automatiquement",
244
+ "res_audio_no": "Audio: ❌ Non supporté par ce modèle",
245
+ "res_file": "Fichier: {path}",
246
+ "res_size": "Taille: {size}",
247
+ "res_cost_title": "\n💰 **Rapport Financier :**",
248
+ "res_cost_est_tok": "- Coût Estimé : {cost} (Max théorique: {maxCost})",
249
+ "res_cost_est": "- Coût Estimé : {cost}",
250
+ "res_cost_real_wallet": "- Coût Réel : **{cost}** (via Solde Wallet)",
251
+ "res_cost_real_headers": "- Coût Réel : **{cost}** (via Headers API)",
252
+ "res_cost_real_unknown": "- Coût Réel : Inconnu (API injoignable)",
253
+ "res_model_used": "Modèle utilisé: {model}",
254
+ "res_request_id": "Request ID: {id}",
255
+ "res_time": "⏱️ Temps de génération: {time}",
256
+ "toast_success": "Vidéo générée ✓ ({model}, {duration}s)",
257
+ "toast_err": "Erreur: {error}",
258
+ "err_pollen": "❌ Crédits pollen insuffisants.\n💡 Essayez `grok-video` (le moins cher)",
259
+ "err_i2v_req": "❌ Le modèle \"{model}\" est I2V ONLY.\n💡 Ajoutez --reference_image <url>",
260
+ "err_invalid": "❌ Paramètres invalides: {msg}",
261
+ "err_520": "⚠️ LTX-2 a retourné une erreur 520 (intermittent).\n💡 Réessayez dans quelques secondes.",
262
+ "err_timeout": "❌ Timeout - La génération vidéo a pris trop de temps.\n💡 Réessayez avec une durée plus courte.",
263
+ "err_gen": "❌ Erreur génération vidéo: {error}"
264
+ },
265
+ "polli_gen_audio": {
266
+ "desc": "Convertit du texte en parole (TTS) via Pollinations AI.\n\n**🔊 Modèles :**\n\n| Modèle | Type | Voix | Format | Coût | Notes |\n|-------|------|--------|--------|------|-------|\n| openai-audio | TTS + STT | 6 | mp3, wav, pcm16 | Le plus bas | **DÉFAUT** - GPT-4o Audio |\n| elevenlabs | TTS | 34 | mp3, wav, etc. | Plus élevé | Voix expressives |\n\n**🎵 OpenAI Audio (Défaut, Recommandé) :**\n- Voix : `alloy`, `echo`, `fable`, `onyx`, `nova`, `shimmer`\n- Formats : `mp3` (défaut), `wav`, `pcm16`\n- Utilise GPT-4o Audio Preview modalities endpoint\n- Option la moins chère\n\n**🎤 ElevenLabs:**\n- 34 voix expressives incluant : rachel, domi, bella, adam, etc.\n- Parole naturelle de meilleure qualité\n- Plus cher mais plus expressif\n\n**💡 Astuces :**\n- Utilisez `openai-audio` pour un TTS économique\n- Utilisez `elevenlabs` pour des voix plus expressives/personnages\n- Pour le STT (transcription), utilisez l'outil `transcribe_audio`.",
267
+ "arg_text": "Texte à convertir en parole",
268
+ "arg_voice": "Voix à utiliser (défaut: {voice})",
269
+ "arg_model": "Modèle TTS (défaut: {model})",
270
+ "arg_format": "Format audio (défaut: mp3, openai-audio uniquement)",
271
+ "arg_save_to": "Dossier de sortie personnalisé",
272
+ "arg_filename": "Nom de fichier (sans extension)",
273
+ "req_key": "❌ Le TTS nécessite une clé API Pollinations.\n🔧 Connectez votre clé avec /poll connect",
274
+ "warn_beta": "Modèle \"{model}\" non référencé — mode (beta)",
275
+ "unsupported_openai": "⚠️ Voix \"{voice}\" non supportée par openai-audio.\n💡 Voix OpenAI: {voices}",
276
+ "unsupported_elevenlabs": "⚠️ Voix \"{voice}\" non reconnue pour elevenlabs.\n💡 Voix ElevenLabs populaires: rachel, domi, bella, adam, josh...\n📋 Total: {count} voix disponibles",
277
+ "blocked": "❌ Opération bloquée par le Cost Guard.",
278
+ "toast_start": "Génération audio: {model} ({length} chars)",
279
+ "res_title": "🔊 Audio Généré (TTS)",
280
+ "res_text": "Texte: \"{text}\"",
281
+ "res_model": "Modèle: {model}",
282
+ "res_voice": "Voix: {voice}",
283
+ "res_format": "Format: {format}",
284
+ "res_est_duration": "Durée estimée: ~{duration}s",
285
+ "res_file": "Fichier: {path}",
286
+ "res_size": "Taille: {size}",
287
+ "res_cost_tok": "Coût: {cost} (Max théorique: {maxCost})",
288
+ "res_cost": "Coût: {cost}",
289
+ "res_request_id": "Request ID: {id}",
290
+ "toast_success": "Audio généré ✓ ({model}, {voice})",
291
+ "toast_err": "Erreur: {error}",
292
+ "err_pollen": "❌ Crédits pollen insuffisants.",
293
+ "err_auth": "❌ Clé API invalide ou non autorisée.",
294
+ "err_tts": "❌ Erreur TTS: {error}"
295
+ },
296
+ "polli_gen_music": {
297
+ "desc": "Génère de la musique à partir d'une description avec Pollinations.\n\n**🎵 Modèle :** elevenmusic (ElevenLabs Music)\n\n**📝 Paramètres :**\n- `duration`: 3-300 secondes (défaut: 10s)\n- `instrumental`: true = sans voix, false = voix possibles\n\n**💡 Exemples :**\n- \"upbeat jazz with saxophone solo\"\n- \"epic orchestral film score\"\n\n**💰 Coût :** ~0.005 🌻 par sec\n- 10s ≈ 0.05 🌻\n- 60s ≈ 0.30 🌻\n\n**⚠️ Notes :**\n- Le temps de génération est prop. à la durée\n- Le mode instrumental est plus propre pour l'arrière-plan",
298
+ "arg_prompt": "Description de la musique à générer",
299
+ "arg_duration": "Durée en secondes (défaut: {default}, max: {max})",
300
+ "arg_instrumental": "Instrumental uniquement - sans voix (défaut: false)",
301
+ "arg_seed": "Seed de reproductibilité (-1 random)",
302
+ "arg_save_to": "Dossier de sortie personnalisé",
303
+ "arg_filename": "Nom de fichier (sans extension)",
304
+ "req_key": "❌ La génération musicale nécessite une clé API Pollinations.\n🔧 Connectez votre clé avec /poll connect",
305
+ "blocked": "❌ Opération bloquée par le Cost Guard.",
306
+ "toast_start": "Génération musique: {duration}s (~{time}s gen)",
307
+ "res_title": "🎵 Musique Générée",
308
+ "res_prompt": "Prompt: {prompt}",
309
+ "res_duration": "Durée: ~{duration}s",
310
+ "res_mode": "Mode: {mode}",
311
+ "res_mode_inst": "Instrumental (sans voix)",
312
+ "res_mode_vocal": "Avec voix possible",
313
+ "res_file": "Fichier: {path}",
314
+ "res_size": "Taille: {size}",
315
+ "res_cost_tok": "Coût: {cost} (Max théorique: {maxCost})",
316
+ "res_cost": "Coût: {cost}",
317
+ "res_model_used": "Modèle utilisé: {model}",
318
+ "res_request_id": "Request ID: {id}",
319
+ "toast_success": "Musique générée ✓ ({duration}s)",
320
+ "toast_err": "Erreur: {error}",
321
+ "err_pollen": "❌ Crédits pollen insuffisants.",
322
+ "err_auth": "❌ Clé API invalide ou non autorisée.",
323
+ "err_timeout": "❌ Timeout - La génération musicale a pris trop de temps.\n💡 Essayez une durée plus courte.",
324
+ "err_gen": "❌ Erreur génération musicale: {error}"
325
+ },
326
+ "polli_transcribe_audio": {
327
+ "desc": "Transcrit l'audio en texte avec Pollinations AI.\n\n**🎙️ Modèles :**\n\n| Modèle | Fournisseur | Notes |\n|-------|----------|-------|\n| whisper-large-v3 | OpenAI | **DÉFAUT** - Haute précision, audio long |\n| whisper-1 | OpenAI | Précision standard |\n| scribe | ElevenLabs | Scribe v2 model |\n\n**📁 Formats supportés :**\nmp3, wav, m4a, webm, mp4, mpeg, mpga, ogg\n\n**💡 Astuces :**\n- Utilisez `whisper-large-v3` pour la meilleure précision\n- Supporte fichiers locaux et URLs\n\n**📋 Sortie :**\n- Renvoie le texte transcrit\n- Langue détectée (si dispo)\n- Temps de traitement",
328
+ "arg_file": "Chemin du fichier audio ou URL à transcrire",
329
+ "arg_model": "Modèle STT (défaut: {model})",
330
+ "arg_language": "Indice de langue (ex: \"en\", \"fr\", \"es\")",
331
+ "arg_save": "Sauvegarder la transcription dans un fichier (défaut: false)",
332
+ "req_key": "❌ La transcription nécessite une clé API Pollinations.\n🔧 Connectez votre clé avec /poll connect",
333
+ "err_unknown_model": "❌ Modèle STT inconnu: {model}\n💡 Modèles STT disponibles: {models}",
334
+ "toast_dl": "🎙️ STT: Téléchargement...",
335
+ "err_dl": "❌ Impossible de télécharger l'audio: {error}",
336
+ "err_not_found": "❌ Fichier non trouvé: {path}",
337
+ "err_format": "⚠️ Format non supporté: .{ext}\n💡 Formats supportés: {formats}",
338
+ "toast_start": "🎙️ STT: {model} ({size})",
339
+ "err_no_transcript": "❌ Aucune transcription générée.\n💡 Vérifiez que l'audio contient de la parole claire.",
340
+ "res_title": "🎙️ Transcription Audio",
341
+ "res_file": "Fichier: {file}",
342
+ "res_size": "Taille: {size}",
343
+ "res_model": "Modèle: {model}",
344
+ "res_lang_det": "Langue détectée: {lang}",
345
+ "res_lang_req": "Langue demandée: {lang}",
346
+ "res_transcript_title": "📝 **Transcription:**",
347
+ "res_saved": "💾 Transcription sauvegardée: {path}",
348
+ "err_pollen": "❌ Crédits insuffisants.",
349
+ "err_auth": "❌ Clé API invalide ou non autorisée.",
350
+ "err_large": "❌ Fichier audio trop volumineux.\n💡 Essayez de compresser ou découper l'audio.",
351
+ "err_stt": "❌ Erreur transcription: {error}"
352
+ }
353
+ },
354
+ "connect_response": {
355
+ "title_key": "## 🍯💚 PLUGIN POLLINATIONS CONNECTÉ 💚🍯\n\nBienvenue **{name}** dans le plugin Pollinations Agent !\n**Mode actuel** : `{mode}`",
356
+ "tools_intro": "### 🚀 Outils Multimédias Intégrés au Développement\n\nCe plugin vous permet de générer du code, des images, d'analyser des vidéos et d'interagir avec les meilleurs modèles IA. Accédez aux meilleurs LLMs.\n\n**Ce que ce plugin vous apporte :**\n\n**🛠️ Outils Libres Intégrés :**\n- `gen_qrcode` / `gen_diagram` / `gen_palette`\n- `remove_background`\n- `extract_frames` / `extract_audio`\n- `file_to_url`\n\n**💎 Outils Pollinations (Premium) :**\n- `polli_gen_image`\n- `polli_gen_video`\n- `polli_gen_audio`/`polli_stt`\n- `polli_gen_music`\n- `polli_web_search`",
357
+ "terminal_cmds": "### 💻 Commandes par Terminal\nUtilisez `/poll help` pour voir toutes les commandes. Essayez `/poll models` pour découvrir le catalogue ou `/poll usage` pour suivre votre pollen restant.",
358
+ "resources": "### 📚 Ressources\n* **Site Web:** [pollinations.ai](https://pollinations.ai)\n* **Discord:** [Rejoindre la communauté](https://discord.gg/8HqSRhJVmK)\n* **Recharger le Wallet:** [Top-Up Balance](https://pollinations.ai/topup)",
359
+ "free_models_success": "Modèles gratuits disponibles : {models}",
360
+ "free_models_error": "⚠️ Impossible de récupérer la liste des modèles gratuits.",
361
+ "onboarding": "## 🌸 Bienvenue dans le Plugin Pollinations\n\n**Accès gratuit immédiat — aucune clé requise**\nCe plugin offre un environnement complet de chat, de génération de code et de manipulation de médias (Génération Image, Vidéo, Audio, Outils d'extraction...).\n\nSélectionnez un modèle `pollinations/free/*` dans la liste et discutez pour commencer.\n{freeText}\n\n---\n\n## 🚀 Agents et Outils Multimédias Intégrés au Développement\n\nClaude Opus, GPT-5, Gemini 3, Génération Vidéo Veo & Wan, ElevenLabs Music... débloquez la puissance complète de l'API Pollinations !\n\nCe plugin adopte un modèle **BYOK** (Bring Your Own Key) : en utilisant votre propre clé API, l'Agent OpenCode gagne la capacité d'interagir directement avec des outils Premium en créant vos fichiers multimédias dans votre Espace de Travail.\n\n**Étape 1 — Créer un compte avec 10$ Gratuits !**\nSoutenez le plugin en passant par ce lien :\n👉 **https://enter.pollinations.ai/authorize?redirect_url=https://github.com/fkom13/opencode-pollinations-plugin**\n\n**Étape 2 — Générer votre clé API**\nDans la section **API Keys** sur `enter.pollinations.ai`, créez une clé **Secret** (`sk_...`).\n\n**Étape 3 — Connecter la clé**\n```bash\n/poll connect sk_votre_clé_ici\n```\n*(La clé s'enregistre immédiatement dans votre environnement OpenCode, débloquant les modèles Pro !)*\n\n---\n\n## 💰 Système de Pollen et Tiers\nChaque développeur reçoit une **Subvention quotidienne gratuite (Tier Grant)** pour utiliser ces services Premium :\n- 🦠 **Microbe** (0.1 pollen/jour) : Pour débloquer : S'inscrire\n- 🍄 **Spore** (1 pollen/jour) : Pour débloquer : Vérification automatique (Vérifié à l'inscription)\n- 🌱 **Seed** (3 pollen/jour) : Pour débloquer : 8+ points dev (Mise à niveau automatique hebdomadaire)\n- 🌸 **Flower** (10 pollen/jour) : Pour débloquer : Publier une application\n- 🍯 **Nectar** (20 pollen/jour) : Bientôt disponible 🔮\n\nUne fois le quota gratuit épuisé, vous consommez le Pollen de votre portefeuille ($1 ≈ 1 Pollen, pas d'abonnement, pas d'expiration).\n\n**Besoin d'aide ?**\n- Tapez `/poll help` pour la liste des commandes.\n- Discord Officiel : https://discord.gg/pollinations-ai-885844321461485618"
362
+ },
363
+ "cost_guard": {
364
+ "cost_validated_max": "💰 Coût validé (Max théorique: {maxCost})",
365
+ "cost_validated": "💰 Coût validé: {cost}",
366
+ "wallet_protected": "❌ **Wallet Protégé**\nModèle: {modelName} (payant)\nenablePaidTools: désactivé\nRésultat: REJETÉ, demandez à l'utilisateur d'activer le mode enablePaidTools via la commande pollinations appropriée si vous voulez utiliser ce modèle.",
367
+ "confirmation_req": "⚠️ **Confirmation de Coût Requise**\n{reasonText}\n💳 **Pour valider cette transaction et exécuter la requête**, \nPrésentez le cout à l'utilisateur et demandez explicitement sa validation !!! \n(S'il valide, appelez l'outil `polli_gen_confirm` avec l'ID : `{reqId}` et l'action `confirm`. S'il refuse, appelez l'outil avec l'action `cancel` pour purger la requête).",
368
+ "reason_token": "Le coût estimé moyen est de {cost} cependant ce modèle token-based peut vous coûter jusqu'à {maxCost} ce qui dépasse le seuil défini ({limit}).",
369
+ "reason_fixed": "Le coût estimé de cette action ({cost}) dépasse le seuil défini ({limit}).",
370
+ "estimated_max": "💰 Coût estimé moyen: {cost} (Max: {maxCost})",
371
+ "estimated": "💰 Coût estimé: {cost}"
372
+ }
373
+ }
@@ -0,0 +1 @@
1
+ export declare function t(keyPath: string, params?: Record<string, string | number>): string;
@@ -0,0 +1,37 @@
1
+ import en from './en.json' with { type: 'json' };
2
+ import fr from './fr.json' with { type: 'json' };
3
+ import es from './es.json' with { type: 'json' };
4
+ import de from './de.json' with { type: 'json' };
5
+ import it from './it.json' with { type: 'json' };
6
+ import { loadConfig } from '../server/config.js';
7
+ const dictionaries = {
8
+ en,
9
+ fr,
10
+ es,
11
+ de,
12
+ it
13
+ };
14
+ export function t(keyPath, params) {
15
+ const config = loadConfig();
16
+ const lang = config.lang || 'en';
17
+ // Fallback to English if the dictionary is missing
18
+ const dict = dictionaries[lang] || dictionaries['en'];
19
+ let result = getNestedValue(dict, keyPath);
20
+ // Fallback to English if the specific key is missing in the chosen language
21
+ if (result === keyPath && lang !== 'en') {
22
+ result = getNestedValue(dictionaries['en'], keyPath);
23
+ }
24
+ if (typeof result !== 'string') {
25
+ return keyPath; // Return the path itself if no string is found
26
+ }
27
+ if (params) {
28
+ for (const [key, value] of Object.entries(params)) {
29
+ const regex = new RegExp(`{${key}}`, 'g');
30
+ result = result.replace(regex, String(value));
31
+ }
32
+ }
33
+ return result;
34
+ }
35
+ function getNestedValue(obj, path) {
36
+ return path.split('.').reduce((acc, part) => (acc && acc[part] !== undefined) ? acc[part] : path, obj);
37
+ }