yidaconnector 2026.6.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 (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +383 -0
  3. package/bin/yida.js +670 -0
  4. package/lib/app/form-navigation.js +58 -0
  5. package/lib/app/get-schema.js +538 -0
  6. package/lib/auth/auth.js +294 -0
  7. package/lib/auth/cdp-browser-login.js +390 -0
  8. package/lib/auth/codex-login.js +71 -0
  9. package/lib/auth/login.js +475 -0
  10. package/lib/auth/org.js +363 -0
  11. package/lib/auth/qr-login.js +1563 -0
  12. package/lib/core/chalk.js +384 -0
  13. package/lib/core/check-update.js +82 -0
  14. package/lib/core/cli-error.js +39 -0
  15. package/lib/core/command-manifest.js +106 -0
  16. package/lib/core/env-cmd.js +545 -0
  17. package/lib/core/env-manager.js +601 -0
  18. package/lib/core/env.js +287 -0
  19. package/lib/core/i18n.js +177 -0
  20. package/lib/core/locales/ar.js +805 -0
  21. package/lib/core/locales/de.js +805 -0
  22. package/lib/core/locales/en.js +1623 -0
  23. package/lib/core/locales/es.js +805 -0
  24. package/lib/core/locales/fr.js +805 -0
  25. package/lib/core/locales/hi.js +805 -0
  26. package/lib/core/locales/ja.js +1197 -0
  27. package/lib/core/locales/ko.js +807 -0
  28. package/lib/core/locales/pt.js +805 -0
  29. package/lib/core/locales/vi.js +805 -0
  30. package/lib/core/locales/zh-HK.js +1233 -0
  31. package/lib/core/locales/zh.js +1584 -0
  32. package/lib/core/query-data.js +781 -0
  33. package/lib/core/redact.js +100 -0
  34. package/lib/core/utils.js +799 -0
  35. package/lib/core/yida-client.js +117 -0
  36. package/package.json +94 -0
  37. package/project/config.json +4 -0
  38. package/project/pages/src/demo-birthday-game.oyd.jsx +832 -0
  39. package/project/pages/src/demo-chip-insight.oyd.jsx +983 -0
  40. package/project/pages/src/demo-compat-smoke.oyd.jsx +58 -0
  41. package/project/pages/src/demo-crm-batch-entry.oyd.jsx +805 -0
  42. package/project/pages/src/demo-crm-dashboard.oyd.jsx +677 -0
  43. package/project/pages/src/demo-future-vision-2026.oyd.jsx +1102 -0
  44. package/project/pages/src/demo-ppt.oyd.jsx +1192 -0
  45. package/project/pages/src/demo-salary-calculator.oyd.jsx +904 -0
  46. package/project/pages/src/yidaconnector-knowledge-doc.oyd.jsx +1714 -0
  47. package/project/prd/demo-birthday-game.md +39 -0
  48. package/project/prd/demo-crm.md +463 -0
  49. package/project/prd/demo-dingtalk-ai-solution-center.md +425 -0
  50. package/project/prd/demo-future-vision-2026.md +78 -0
  51. package/project/prd/demo-salary-calculator.md +101 -0
  52. package/scripts/build-skills-package.js +406 -0
  53. package/scripts/check-syntax.js +59 -0
  54. package/scripts/demo-dws.sh +106 -0
  55. package/scripts/e2e-real/cleanup.js +67 -0
  56. package/scripts/e2e-real/fixtures/form-fields.json +18 -0
  57. package/scripts/e2e-real/full-runner.js +1566 -0
  58. package/scripts/e2e-real/runner.js +293 -0
  59. package/scripts/e2e-real/skill-coverage.js +115 -0
  60. package/scripts/generate-command-docs.js +109 -0
  61. package/scripts/nightly-smoke.js +134 -0
  62. package/scripts/postinstall.js +545 -0
  63. package/scripts/solution-center-runner.js +368 -0
  64. package/scripts/validate-ci.sh +50 -0
  65. package/scripts/validate-command-manifest.js +119 -0
  66. package/scripts/validate-package-size.js +78 -0
  67. package/scripts/validate-skills.js +247 -0
  68. package/scripts/validate-structure.js +66 -0
  69. package/yida-skills/SKILL.md +163 -0
  70. package/yida-skills/references/yida-api.md +1309 -0
  71. package/yida-skills/skills/large-file-write/SKILL.md +91 -0
  72. package/yida-skills/skills/large-file-write/references/write-patterns.md +149 -0
  73. package/yida-skills/skills/large-file-write/scripts/write.js +157 -0
  74. package/yida-skills/skills/yida-data-management/SKILL.md +252 -0
  75. package/yida-skills/skills/yida-data-management/references/api-matrix.md +49 -0
  76. package/yida-skills/skills/yida-data-management/references/data-format-guide.md +159 -0
  77. package/yida-skills/skills/yida-data-management/references/verified-endpoints.md +62 -0
  78. package/yida-skills/skills/yida-login/SKILL.md +159 -0
  79. package/yida-skills/skills/yida-logout/SKILL.md +67 -0
@@ -0,0 +1,805 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Pack de langue français (French)
5
+ */
6
+ module.exports = {
7
+ // ── bin/yida.js printHelp() ────────────────────────
8
+ help: {
9
+ subtitle: 'Outil de développement IA low-code pour Yida',
10
+ usage: 'Utilisation :',
11
+ alias: 'Alias :',
12
+ group_auth: 'Environnement & Authentification',
13
+ cmd_login: 'Connexion (cache prioritaire, --browser ou --agent-qr si nécessaire)',
14
+ cmd_logout: 'Déconnexion / changer de compte',
15
+ cmd_auth: 'Gestion de l\'état de connexion',
16
+ cmd_org: 'Gestion des organisations (lister / changer)',
17
+ cmd_env: 'Détecter l\'environnement IA et l\'état de connexion',
18
+ cmd_env_management: 'Gérer les profils d\'environnement public/privé',
19
+ group_app: 'Gestion des applications',
20
+ cmd_app_list: 'Lister mes applications Yida',
21
+ cmd_corp_efficiency: 'Consulter l\'aperçu de l\'efficacité entreprise et les rapports détaillés',
22
+ cmd_create_app: 'Créer une application Yida',
23
+ cmd_update_app: 'Mettre à jour les infos de l\'application',
24
+ cmd_nav_group: 'Gérer les groupes de navigation latérale de l\'application',
25
+ cmd_app_permission: 'Gérer les admins principaux, données et développement de l\'app',
26
+ cmd_i18n: 'Gérer les textes multilingues et langues de l\'app',
27
+ cmd_export: 'Exporter l\'application (package de migration)',
28
+ cmd_import: 'Importer un package de migration',
29
+ group_form: 'Formulaires & Pages',
30
+ cmd_create_form: 'Créer une page de formulaire',
31
+ cmd_update_form: 'Mettre à jour une page de formulaire',
32
+ cmd_list_forms: 'Lister les formulaires/pages d\'une app',
33
+ cmd_aggregate_table: 'Manage aggregate tables (virtualView)',
34
+ cmd_get_schema: 'Obtenir le Schema du formulaire',
35
+ cmd_create_page: 'Créer une page d\'affichage personnalisée',
36
+ cmd_generate_page: 'Generate page from curated template',
37
+ cmd_check_page: 'Check custom page standards',
38
+ cmd_compile: 'Compiler la page personnalisée en local',
39
+ cmd_publish: 'Compiler et publier une page personnalisée',
40
+ cmd_update_form_config: 'Mettre à jour la configuration du formulaire',
41
+ group_data: 'Données & Permissions',
42
+ cmd_data: 'Gestion unifiée des données (formulaire/processus/tâche/sous-formulaire)',
43
+ cmd_task_center: 'Centre de tâches global (à faire/traité/CC etc.)',
44
+ cmd_basic_info: "Consulter les infos d'organisation, capacités, quotas et domaine",
45
+ cmd_get_permission: 'Consulter la configuration des permissions',
46
+ cmd_save_permission: 'Enregistrer la configuration des permissions',
47
+ cmd_corp_manager: 'Gérer les permissions de plateforme',
48
+ cmd_agent_center: 'Gérer les délégations de processus et départs',
49
+ group_process: 'Processus',
50
+ cmd_configure_process: 'Configurer et publier les règles de processus',
51
+ cmd_create_process: 'Créer un formulaire de processus (tout-en-un)',
52
+ cmd_ai_form_setting: 'Manage process form AI approval prompts',
53
+ cmd_process_preview: 'Aperçu de l\'instance de processus (organigramme)',
54
+ group_share: 'Configuration & Partage de page',
55
+ cmd_verify_url: 'Vérifier l\'URL courte',
56
+ cmd_save_share: 'Enregistrer la configuration d\'accès public / partage',
57
+ cmd_get_page_config: 'Consulter la configuration d\'accès public',
58
+ cmd_externalize_form: 'Plan external access-safe mirror fields',
59
+ group_report: 'Rapports',
60
+ cmd_create_report: 'Créer un rapport Yida',
61
+ cmd_append_chart: 'Ajouter un graphique à un rapport existant',
62
+ group_connector: 'Connecteurs',
63
+ cmd_connector_list: 'Lister les connecteurs HTTP',
64
+ cmd_connector_create: 'Créer un connecteur',
65
+ cmd_connector_detail: 'Voir les détails du connecteur',
66
+ cmd_connector_delete: 'Supprimer un connecteur',
67
+ cmd_connector_add_action: 'Ajouter une action',
68
+ cmd_connector_list_actions: 'Lister les actions',
69
+ cmd_connector_delete_action: 'Supprimer une action',
70
+ cmd_connector_test: 'Tester une action',
71
+ cmd_connector_list_connections: 'Lister les connexions d\'authentification',
72
+ cmd_connector_create_connection: 'Créer une connexion d\'authentification',
73
+ cmd_connector_smart: 'Création intelligente (depuis cURL)',
74
+ cmd_connector_parse_api: 'Analyser les informations API',
75
+ cmd_connector_gen_template: 'Générer le modèle de document API',
76
+ cmd_connector_more: 'Voir plus de sous-commandes',
77
+ group_integration: 'Intégration & DingTalk',
78
+ cmd_integration: 'Créer un flux d\'automatisation',
79
+ cmd_integration_list: 'Lister les flux d\'automatisation',
80
+ cmd_integration_enable: 'Activer un flux d\'automatisation',
81
+ cmd_integration_disable: 'Désactiver un flux d\'automatisation',
82
+ cmd_integration_check: 'Check abnormal integration automation run logs',
83
+ cmd_dws: 'DingTalk CLI (contacts/calendrier/tâches/approbation etc.)',
84
+ cmd_dingtalk_link: 'Générer des liens DingTalk AppLink / dingtalk:// historiques',
85
+ group_utility: 'Utilitaires',
86
+ cmd_commands: 'Afficher le manifeste des commandes lisible par machine',
87
+ cmd_a2a: 'Démarrer l’adaptateur A2A local en lecture seule ou afficher l’Agent Card',
88
+ cmd_bridge: 'Démarrer le service web bridge local YidaConnector',
89
+ cmd_db_seq_fix: 'Detect and repair PostgreSQL sequence drift',
90
+ cmd_copy: 'Copier le répertoire de travail project',
91
+ cmd_sample: 'Exporter des exemples/modèles de code',
92
+ cmd_doctor: 'Diagnostic d\'environnement et réparation auto',
93
+ cmd_update: 'Vérifier et mettre à jour vers la dernière version',
94
+ cmd_export_conversation: 'Exporter les enregistrements de conversation IA',
95
+ cmd_feedback: 'Configurer le formulaire de retour et les rappels locaux',
96
+ cmd_batch: 'Exécuter des commandes YidaConnector en lot',
97
+ cmd_flash_to_prd: 'Convertir des notes flash ou de réunion en prompt PRD',
98
+ cmd_ai: 'Call Yida AI text and image recognition APIs',
99
+ cmd_cdn: 'Gestion d\'images CDN (config/upload/rafraîchir)',
100
+ cmd_cdn_config: 'Configurer l\'upload CDN / OSS',
101
+ cmd_cdn_upload: 'Uploader une image vers le CDN',
102
+ cmd_cdn_refresh: 'Rafraîchir le cache CDN',
103
+ quickstart_title: 'Démarrage rapide',
104
+ quickstart_app_name: 'Gestion des présences',
105
+ quickstart_form_name: 'Info employé',
106
+ docs: '📚 Docs :',
107
+ },
108
+
109
+ // ── bin/yida.js ────────────────────────────────────
110
+ cli: {
111
+ integration_help: 'Utilisation : yidaconnector integration <create|list|enable|disable> ...',
112
+ integration_unknown: 'Sous-commande integration inconnue : {0}',
113
+ integration_help_hint: 'Utilisez yidaconnector integration --help pour voir les sous-commandes disponibles',
114
+ integration_list_usage: 'Utilisation : yidaconnector integration list <appType> [--form-uuid <uuid>] [--status y|n] [--key <kw>] [--page <n>] [--size <n>] [--json]',
115
+ integration_list_example: 'Exemple : yidaconnector integration list APP_XXX --form-uuid FORM-XXX --json',
116
+ integration_enable_usage: 'Utilisation : yidaconnector integration enable <appType> <formUuid> <processCode>',
117
+ integration_enable_example: 'Exemple : yidaconnector integration enable APP_XXX FORM-XXX LPROC-XXX',
118
+ integration_disable_usage: 'Utilisation : yidaconnector integration disable <appType> <formUuid> <processCode>',
119
+ integration_disable_example: 'Exemple : yidaconnector integration disable APP_XXX FORM-XXX LPROC-XXX',
120
+ compile_usage: 'Utilisation : yidaconnector compile <sourceFile>',
121
+ compile_example: 'Exemple : yidaconnector compile pages/src/home.oyd.jsx',
122
+ check_page_usage: 'Usage: yidaconnector check-page <sourceFile> [--compat] [--json]',
123
+ check_page_example: 'Example: yidaconnector check-page pages/src/home.oyd.jsx --json',
124
+ generate_page_usage: 'Usage: yidaconnector generate-page <template> --output pages/src/home.oyd.jsx [--spec .cache/yidaconnector/page-specs/home.json] [--compile]',
125
+ generate_page_example: 'Example: yidaconnector generate-page product-homepage --brand-name OpenKuma --brand-initials OK --output pages/src/home.oyd.jsx --compile',
126
+ },
127
+
128
+ // ── lib/integration/integration-check.js ─────────
129
+ integration_check: {
130
+ result_sheet: 'Result',
131
+ header_app: 'App',
132
+ header_form_title: 'Form name',
133
+ header_form_uuid: 'Form ID',
134
+ header_flow_name: 'Automation name',
135
+ header_process_code: 'Automation ID',
136
+ header_flow_status: 'Automation status',
137
+ header_event_name: 'Trigger event',
138
+ header_last_action: 'Last action',
139
+ header_modifier: 'Modifier',
140
+ header_modified_time: 'Modified time',
141
+ header_abnormal_log_count: 'Abnormal log count',
142
+ header_proc_inst_id: 'Run instance ID',
143
+ header_form_inst_id: 'Form instance ID',
144
+ header_execution_status: 'Execution status',
145
+ header_exception: 'Exception',
146
+ header_diagnosis: 'Diagnosis',
147
+ header_recommendation: 'Recommendation',
148
+ header_start_time: 'Start time',
149
+ header_finish_time: 'Finish time',
150
+ header_elapsed_ms: 'Elapsed (ms)',
151
+ no_abnormal: 'No abnormal execution logs found',
152
+ app_failed: 'App check failed: {0}',
153
+ summary: 'Check complete: {0} apps, {1} automations, {2} with abnormal logs',
154
+ apps_failed: '{0} app(s) failed to check. See JSON output or error summary for details.',
155
+ no_logs: 'No abnormal execution logs found.',
156
+ usage: 'yidaconnector integration check <appType...> [--json] [--output result.xlsx] [--no-progress] [--flow-types 1,2,3,5,6] [--log-page-size 10] [--max-log-pages 1]',
157
+ example: 'yidaconnector integration check APP_XXX --output project/output/automation-errors.xlsx',
158
+ missing_app: 'Missing appType. Usage: yidaconnector integration check <appType...>',
159
+ banner_title: 'Check integration automation abnormal logs',
160
+ status_filter: 'Execution status filter: {0}',
161
+ checking_app: 'Checking app: {0}',
162
+ progress: 'Progress {0}{1}',
163
+ current: ', current: {0}',
164
+ excel_exported: 'Excel exported: {0}',
165
+ },
166
+
167
+ // ── lib/env.js ─────────────────────────────────────
168
+ env: {
169
+ title: " yidaconnector env - Détection de l'environnement IA",
170
+ detecting: " Détection de l'environnement IA...",
171
+ tool_label: ' Outil IA : {0}',
172
+ login_label: ' Connexion : {0}',
173
+ logged_in: 'Connecté',
174
+ not_logged_in: 'Non connecté',
175
+ corp_label: ' Organisation : {0}',
176
+ version_label: ' Version : {0}',
177
+ },
178
+
179
+ // ── lib/login.js ────────────────────────────────────
180
+ login: {
181
+ title: '🔐 Connexion Yida',
182
+ cache_found: ' Informations de connexion en cache trouvées, validation en cours...',
183
+ cache_valid: '✅ Les informations de connexion en cache sont valides !',
184
+ cache_invalid: ' Les informations de connexion en cache ont expiré. Reconnexion requise.',
185
+ starting_qr: ' Démarrage de la connexion par QR code...',
186
+ success: '✅ Connexion réussie !',
187
+ failed: '❌ Échec de la connexion : {0}',
188
+ usage: 'Utilisation : yidaconnector login',
189
+ },
190
+
191
+ // ── lib/logout.js ───────────────────────────────────
192
+ logout: {
193
+ title: '🚪 Déconnexion Yida',
194
+ success: '✅ Déconnexion réussie ! Les informations de connexion ont été supprimées.',
195
+ no_cache: ' Aucune information de connexion trouvée. Déjà déconnecté.',
196
+ failed: '❌ Échec de la déconnexion : {0}',
197
+ },
198
+
199
+ // ── lib/create-app.js ───────────────────────────────
200
+ create_app: {
201
+ usage: 'Utilisation : yidaconnector create-app "<nom app>" ou yidaconnector create-app --name "<nom app>" [--desc "..."] [--theme deepBlue]',
202
+ example: 'Exemple : yidaconnector create-app --name "Mon App" --desc "Description app" --theme deepBlue',
203
+ title: " create-app - Outil de création d'application Yida",
204
+ app_name: "\n Nom de l'app : {0}",
205
+ app_desc: ' Description : {0}',
206
+ app_icon: ' Icône : {0} ({1})',
207
+ app_theme: ' Thème : colour={0} navTheme={1} layout={2}',
208
+ step_create: "\n🚀 Création de l'application...",
209
+ sending_request: ' Envoi de la requête createApp...',
210
+ success: ' ✅ Application créée avec succès !',
211
+ app_id: " ID de l'app : {0}",
212
+ failed: ' ❌ Échec de la création : {0}',
213
+ error: '\n❌ Erreur de création : {0}',
214
+ },
215
+
216
+ // ── lib/create-form.js ──────────────────────────────
217
+ create_form: {
218
+ usage: 'Utilisation : yidaconnector create-form <appType> <nom de la page> [JSON du schéma]',
219
+ title: ' create-form - Outil de création/mise à jour de formulaire Yida',
220
+ app_id: "\n ID de l'app : {0}",
221
+ page_name: ' Nom de la page : {0}',
222
+ step_create: '\n📝 Création de la page de formulaire...',
223
+ sending_request: ' Envoi de la requête saveFormSchema...',
224
+ success: ' ✅ Page de formulaire créée avec succès !',
225
+ form_uuid: ' UUID du formulaire : {0}',
226
+ failed: ' ❌ Échec de la création : {0}',
227
+ error: '\n❌ Erreur de création : {0}',
228
+ step_check_data: '\n🔍 Étape {0} : Vérifier si le formulaire contient des données',
229
+ data_exists_warning: ' ⚠️ Ce formulaire contient déjà {0} enregistrements ! La modification de la structure peut entraîner :',
230
+ data_exists_impact: ' - Perte ou corruption des données historiques\n - Anomalies de statut de processus\n - Incohérence des données',
231
+ data_exists_abort: ' ❌ Modification annulée. Ajoutez --force pour continuer.',
232
+ data_exists_confirm_message: 'Ce formulaire contient {0} enregistrements existants. La modification de la structure peut affecter les données existantes. Ajoutez --force pour confirmer.',
233
+ data_exists_force_hint: 'Utilisation : yidaconnector create-form update <appType> <formUuid> <changesJson> --force',
234
+ data_exists_force_proceed: ' ⚠️ Mode --force : confirmation ignorée, modification forcée de la structure avec {0} enregistrements existants',
235
+ data_check_empty: ' ✅ Le formulaire ne contient aucune donnée, modification sûre',
236
+ data_check_failed: ' ⚠️ Échec de la vérification des données, poursuite de la modification',
237
+ },
238
+
239
+ // ── lib/create-page.js ──────────────────────────────
240
+ create_page: {
241
+ usage: 'Utilisation : yidaconnector create-page <appType> <nom de la page> [--mode dashboard]',
242
+ example: 'Exemple : yidaconnector create-page APP_XXX "Dashboard" --mode dashboard',
243
+ title: ' create-page - Outil de création de page personnalisée Yida',
244
+ app_id: "\n ID de l'app : {0}",
245
+ page_name: ' Nom de la page : {0}',
246
+ step_create: '\n📄 Création de la page personnalisée...',
247
+ success: ' ✅ Page personnalisée créée avec succès !',
248
+ step_dashboard_config: '\n🖥️ Step 3: Configure dashboard fullscreen mode',
249
+ dashboard_config_ok: ' ✅ Dashboard mode configured: top nav hidden, chromeless custom URL enabled',
250
+ dashboard_config_failed: ' ⚠️ Dashboard mode config failed: {0}',
251
+ err_mode_invalid: 'Unsupported page mode: {0}',
252
+ mode_hint: 'Available modes: default, dashboard',
253
+ form_uuid: ' UUID de la page : {0}',
254
+ failed: ' ❌ Échec de la création : {0}',
255
+ error: '\n❌ Erreur de création : {0}',
256
+ },
257
+
258
+ // ── lib/get-schema.js ───────────────────────────────
259
+ get_schema: {
260
+ usage: 'Utilisation : yidaconnector get-schema <appType> <formUuid>',
261
+ title: ' get-schema - Outil de récupération du schéma Yida',
262
+ app_id: "\n ID de l'app : {0}",
263
+ form_uuid: ' UUID du formulaire : {0}',
264
+ step_get: '\n📋 Récupération du schéma...',
265
+ success: ' ✅ Schéma récupéré avec succès !',
266
+ failed: ' ❌ Échec de la récupération : {0}',
267
+ error: '\n❌ Erreur de récupération : {0}',
268
+ },
269
+
270
+ // ── lib/check-update.js ─────────────────────────────
271
+ check_update: {
272
+ new_version: '\n🎉 Nouvelle version disponible : {0} → {1}',
273
+ update_cmd: ' Mise à jour : npm install -g yidaconnector',
274
+ check_failed: 'Échec de la vérification de version : {0}',
275
+ },
276
+
277
+ // ── lib/update.js ──────────────────────────────────
278
+ update: {
279
+ checking: 'Vérification de la dernière version...',
280
+ fetch_failed: 'Impossible de récupérer la dernière version. Vérifiez votre connexion réseau',
281
+ already_latest: 'Déjà à jour ({0}), aucune mise à jour nécessaire',
282
+ found_new_version: 'Nouvelle version disponible : {0} (actuelle : {1})',
283
+ installing: 'Installation de yidaconnector@latest...',
284
+ success: 'Mise à jour réussie ! Version actuelle : {0}',
285
+ install_failed: 'Échec de la mise à jour : {0}',
286
+ manual_hint: 'Essayez manuellement : npm install -g yidaconnector@latest',
287
+ available: 'mise à jour disponible',
288
+ up_to_date: 'à jour',
289
+ label_install: 'Install',
290
+ label_channel: 'Channel',
291
+ label_version: 'Version',
292
+ label_update: 'Update',
293
+ done: 'Mise à jour terminée !',
294
+ done_hint: 'Exécutez yidaconnector --version pour confirmer la nouvelle version',
295
+ },
296
+
297
+ // ── lib/export-app.js ───────────────────────────────
298
+ export_app: {
299
+ usage: 'Utilisation : yidaconnector export-app <appType>',
300
+ title: " export-app - Outil d'exportation d'application Yida",
301
+ app_id: "\n ID de l'app : {0}",
302
+ step_export: "\n📦 Exportation de l'application...",
303
+ success: ' ✅ Application exportée avec succès !',
304
+ failed: " ❌ Échec de l'exportation : {0}",
305
+ error: "\n❌ Erreur d'exportation : {0}",
306
+ },
307
+
308
+ // ── lib/import-app.js ───────────────────────────────
309
+ import_app: {
310
+ usage: 'Utilisation : yidaconnector import-app <chemin du fichier>',
311
+ title: " import-app - Outil d'importation d'application Yida",
312
+ file_path: '\n Chemin du fichier : {0}',
313
+ step_import: "\n📥 Importation de l'application...",
314
+ success: ' ✅ Application importée avec succès !',
315
+ failed: " ❌ Échec de l'importation : {0}",
316
+ error: "\n❌ Erreur d'importation : {0}",
317
+ },
318
+
319
+ // ── lib/get-page-config.js ──────────────────────────
320
+ get_page_config: {
321
+ usage: 'Utilisation : yidaconnector get-page-config <appType> <formUuid>',
322
+ title: ' get-page-config - Outil de récupération de configuration de page Yida',
323
+ app_id: "\n ID de l'app : {0}",
324
+ form_uuid: ' UUID du formulaire : {0}',
325
+ step_get: '\n🔍 Récupération de la configuration...',
326
+ success: ' ✅ Configuration récupérée avec succès !',
327
+ failed: ' ❌ Échec de la récupération : {0}',
328
+ error: '\n❌ Erreur de récupération : {0}',
329
+ },
330
+
331
+ // ── lib/save-share-config.js ────────────────────────
332
+ save_share_config: {
333
+ usage: 'Utilisation : yidaconnector save-share-config <appType> <formUuid> <openUrl> <isOpen> [openAuth]',
334
+ title: " save-share-config - Outil de sauvegarde de configuration d'accès public Yida",
335
+ app_id: "\n ID de l'app : {0}",
336
+ form_uuid: ' UUID du formulaire : {0}',
337
+ open_url: ' URL publique : {0}',
338
+ is_open: ' Accès public : {0}',
339
+ open_auth: ' Auth requise : {0}',
340
+ step_validate: '\n📋 Step 0 : Validation des paramètres',
341
+ validate_ok: ' ✅ Validation réussie',
342
+ validate_failed: ' ❌ Validation échouée : {0}',
343
+ step_save: "\n💾 Step 2 : Sauvegarde de la configuration d'accès public",
344
+ sending_request: ' Envoi de la requête saveShareConfig...',
345
+ save_ok: ' ✅ Configuration sauvegardée avec succès !',
346
+ save_ok_msg: "Configuration d'accès public sauvegardée",
347
+ save_failed: ' ❌ Échec de la sauvegarde : {0}',
348
+ save_failed_msg: 'Échec de la sauvegarde',
349
+ err_is_open_invalid: 'isOpen doit être y ou n. Valeur actuelle : {0}',
350
+ err_open_auth_invalid: 'openAuth doit être y ou n. Valeur actuelle : {0}',
351
+ err_open_url_required: "openUrl est requis pour activer l'accès public",
352
+ err_open_url_prefix: 'openUrl doit commencer par /o/. Valeur actuelle : {0}',
353
+ err_open_url_chars: 'Le chemin openUrl ne supporte que a-z A-Z 0-9 _ - et / comme séparateur de segment. Valeur actuelle : {0}',
354
+ err_open_url_empty: 'Le chemin openUrl ne peut pas être vide : {0}',
355
+ },
356
+
357
+ // ── lib/update-form-config.js ──────────────────────
358
+ update_form_config: {
359
+ usage: 'Utilisation : yidaconnector update-form-config <appType> <formUuid> <isRenderNav> <title>',
360
+ title: ' update-form-config - Outil de mise à jour de configuration de formulaire Yida',
361
+ app_id: "\n ID de l'app : {0}",
362
+ form_uuid: ' UUID du formulaire : {0}',
363
+ is_render_nav: ' Afficher nav : {0}',
364
+ page_title: ' Titre de la page : {0}',
365
+ step_update: '\n💾 Step 2 : Mise à jour de la configuration',
366
+ sending_request: ' Envoi de la requête updateFormSchemaInfo...',
367
+ update_ok: ' ✅ Configuration mise à jour avec succès !',
368
+ nav_shown: 'Navigation supérieure affichée',
369
+ nav_hidden: 'Navigation supérieure masquée',
370
+ update_failed: ' ❌ Échec de la mise à jour : {0}',
371
+ update_failed_msg: 'Échec de la mise à jour',
372
+ },
373
+
374
+ // ── lib/verify-short-url.js ────────────────────────
375
+ verify_short_url: {
376
+ usage: 'Utilisation : yidaconnector verify-short-url <appType> <formUuid> <url>',
377
+ title: " verify-short-url - Outil de vérification d'URL Yida",
378
+ app_id: "\n ID de l'app : {0}",
379
+ form_uuid: ' UUID du formulaire : {0}',
380
+ step_validate: "\n📋 Step 0 : Validation du format d'URL",
381
+ validate_ok: ' ✅ Format validé',
382
+ validate_failed: ' ❌ Validation échouée : {0}',
383
+ step_verify: "\n🔍 Step 2 : Vérification de l'URL",
384
+ sending_request: ' Envoi de la requête verifyShortUrl...',
385
+ url_available: " ✅ L'URL est disponible !",
386
+ open_available_msg: "Cette URL d'accès public est disponible",
387
+ share_available_msg: 'Cette URL de partage interne est disponible',
388
+ url_taken: " ❌ L'URL est déjà utilisée",
389
+ url_taken_msg: 'Cette URL courte est déjà prise',
390
+ verify_failed: ' ❌ Échec de la requête de vérification',
391
+ err_url_prefix: "L'URL doit commencer par /o/ ou /s/. Valeur actuelle : {0}",
392
+ err_url_chars: 'Le chemin URL ne supporte que a-z A-Z 0-9 _ - et / comme séparateur de segment. Valeur actuelle : {0}',
393
+ err_url_empty: 'Le chemin URL ne peut pas être vide : {0}',
394
+ },
395
+
396
+ // ── lib/copy.js ────────────────────────────────────
397
+ copy: {
398
+ title: ' yidaconnector copy - Initialisation du répertoire de travail Yida',
399
+ package_root: '\n📦 Racine du package : {0}',
400
+ dest_root: '🤖 Répertoire cible : {0}',
401
+ dest_empty_flatten: '📂 Le répertoire cible est vide, les contenus de project/ seront copiés directement (sans créer de sous-répertoire project/)',
402
+ force_mode: '⚠️ Mode --force : le répertoire cible sera vidé avant la copie',
403
+ no_package: '\n❌ Répertoire du package yidaconnector introuvable',
404
+ no_package_hint1: " Vérifiez qu'yidaconnector est installé globalement :",
405
+ no_package_hint2: ' npm install -g yidaconnector',
406
+ no_active_tool: "\n❌ Aucun environnement d'outil IA actif détecté",
407
+ supported_tools: ' Outils supportés : Wukong, Codex, OpenCode, Claude Code, Aone Copilot, Cursor, Qoder',
408
+ current_result: '\n Résultats de détection actuels :',
409
+ force_hint: '\n Pour forcer la copie dans le répertoire actuel :\n yidaconnector copy --force',
410
+ force_cmd: ' yidaconnector copy --force',
411
+ copying_label: '\n📂 Copie de {0}...',
412
+ creating_symlink: '\n📂 Création du lien symbolique yida-skills/...',
413
+ file_copied: ' Copié : {0}',
414
+ cleared: ' 🗑️ Vidé : {0}',
415
+ symlink_removed: ' 🗑️ Ancien lien symbolique supprimé : {0}',
416
+ dir_deleted: ' 🗑️ Répertoire supprimé : {0}',
417
+ removed: ' 🗑️ Supprimé : {0}',
418
+ symlink_created: ' 🔗 Lien symbolique : {0} -> {1}',
419
+ symlink_label: 'lien symbolique',
420
+ done: '✅ Terminé !',
421
+ files_copied: ' Fichiers copiés : {0}',
422
+ files_count: '{0} fichiers',
423
+ symlinks_created: ' Liens symboliques créés : {0}',
424
+ result_symlink: ' {0} → {1} (lien symbolique)',
425
+ result_copy: ' {0} → {1} ({2} fichiers)',
426
+ wukong_skills_cleanup: '\n🗑️ Env Wukong : Nettoyage du lien symbolique yida-skills/...',
427
+ wukong_skills_cleaned: 'nettoyé',
428
+ wukong_skills_not_found: ' ℹ️ Lien symbolique ou répertoire yida-skills/ introuvable : {0}',
429
+ remove_failed: ' ❌ Échec de la suppression : {0} ({1})',
430
+ symlink_fallback_copy: ' ⚠️ Création du lien symbolique Windows échouée (droits admin requis), copie de répertoire utilisée : {0}',
431
+ symlink_failed: ' ❌ Échec de la création du lien symbolique : {0} ({1})',
432
+ },
433
+
434
+ // ── lib/publish.js ─────────────────────────────────
435
+ generate_page: {
436
+ spec_not_found: 'Spec file not found: {0}',
437
+ spec_invalid: 'Failed to parse spec JSON: {0}',
438
+ unknown_template: 'Unknown page template: {0}',
439
+ available_templates: 'Available templates: {0}',
440
+ template_not_found: 'Template file not found: {0}',
441
+ done: 'Page generated: {0}',
442
+ hint: 'Next run yidaconnector compile <file>, or pass --compile to compile immediately.',
443
+ success: 'Page generation complete',
444
+ },
445
+ page_size: {
446
+ large_source: 'Source de page volumineuse détectée : {0} ({1}, environ {2} lignes)',
447
+ long_line_hint: 'Ligne très longue détectée (environ {0} caractères), souvent du code vendor minifié ou du base64 ; externalisez-la.',
448
+ base64_hint: 'Contenu base64 inline volumineux détecté ; chargez-le sur CDN/OSS et référencez une URL.',
449
+ memory_hint: 'publish/compile garde en mémoire la source, le build, le minifié et le schema ; séparez vendor/base64 ou chargez via this.utils.loadScript.',
450
+ windows_hint: 'Sous Windows, n’écrivez pas de gros JSX avec PowerShell Get-Content -Raw + ConvertTo-Json ; utilisez Node fs.writeFileSync/appendFileSync par segments.',
451
+ },
452
+ publish: {
453
+ title: ' yida-publish - Outil de publication de page Yida',
454
+ platform: ' Plateforme : {0}',
455
+ app_id: " ID de l'app : {0}",
456
+ form_uuid: ' ID du formulaire : {0}',
457
+ source_file: ' Source : {0}',
458
+ compiled_file: ' Sortie : {0}',
459
+ step_lint: '\n🔍 Step 0 : Pré-vérification des normes de codage Yida\n',
460
+ lint_title: '⚠️ Yida page code check:',
461
+ lint_error_line: ' ❌ Ligne {0} : {1}',
462
+ lint_warning_line: ' ⚠️ Ligne {0} : {1}',
463
+ lint_event_function: 'La liaison d\'événement utilise function, utilisez plutôt une fonction fléchée (e) => { this.xxx() }',
464
+ lint_missing_render_jsx: 'Missing export function renderJsx(); Yida custom pages must export renderJsx',
465
+ lint_import_require: 'Found import/require. Yida custom pages cannot import modules; load third-party scripts with this.utils.loadScript',
466
+ lint_react_hooks: 'Found React Hooks. Yida runtime uses React 16 class-component style and does not support useState/useEffect hooks',
467
+ lint_export_default: 'Found export default. Yida needs named exports such as export function renderJsx/didMount',
468
+ lint_jsx_extension: 'This .js file contains JSX; prefer .jsx for source files. The compiled output is still .js',
469
+ lint_event_direct_method: 'Event binding passes this.xxx directly and will lose this; use (e) => { this.xxx(e); }',
470
+ lint_event_bind_this: 'Event binding uses .bind(this); use (e) => { this.xxx(e); } instead',
471
+ lint_lifecycle_case: 'Detected lifecycle export {0}; Yida only recognizes {1} (case-sensitive)',
472
+ lint_react_lifecycle_method: 'Detected React lifecycle {0}; export {1} for Yida custom pages',
473
+ lint_event_lowercase: 'Detected lowercase event prop {0}; React/Yida will not bind it. Use {1}',
474
+ lint_event_call_result: 'Event binding invokes a function or is not an expression handler; use (e) => { self.xxx(e); }',
475
+ lint_event_noop_arrow: 'Event arrow function references a handler without calling it; use (e) => { self.xxx(e); }',
476
+ lint_button_missing_handler: 'Visible <button> has no onClick/onMouseDown/onKeyDown or disabled state; bind an event handler or use span/div for static labels',
477
+ lint_array_callback_function: '.{0}(function ...) may lose this in callbacks; use .{0}((item) => ...) instead',
478
+ lint_foreach_callback_function: '.forEach(function ...) may lose this in callbacks; prefer .forEach((item) => ...)',
479
+ lint_controlled_input: 'input uses controlled value mode. Yida pages should use defaultValue + onChange to update _customState',
480
+ lint_native_select_ui: 'Found a native select. User-facing custom page dropdowns should use a Tailwind-styled custom dropdown component for consistent visual quality',
481
+ lint_iframe_self_navigation: 'Yida custom pages run in an iframe. Use target="_top"/target="_blank" or window.top.location for Yida page navigation to avoid nested pages.',
482
+ lint_page_size_limit: 'pageSize={0} exceeds the Yida API limit of 100; use 100 or less',
483
+ lint_yida_api_catch: 'this.utils.yida API call has no detected .catch(); add error handling and toast the user',
484
+ lint_echarts_legacy_map_china: 'ECharts 5 no longer supports echarts/map/js/china.js. Load DataV GeoJSON and call echarts.registerMap("china", geoJson) instead',
485
+ lint_echarts_rich_label_formatter: 'ECharts label.formatter returning rich text templates is unstable in Yida custom pages; prefer plain formatter strings or precomputed label text',
486
+ lint_const_let: 'Utilisation de const/let, il est recommandé de changer en var (compatibilité runtime Yida)',
487
+ lint_computed_property: 'Utilise le nom de propriété calculé ES6 { [key]: value }, non supporté par le moteur JS Yida, provoque un échec silencieux. Utilisez var obj = {}; obj[key] = value;',
488
+ lint_pad_method: 'Utilise String.{0}(), non supporté par le moteur JS Yida, provoque l\'interruption silencieuse des callbacks Promise. Utilisez l\'opérateur ternaire : x < 10 ? "0" + x : "" + x',
489
+ lint_large_then_callback: 'Le callback Promise .then() est trop volumineux ({0} lignes, maximum recommandé {1} lignes), peut provoquer une troncature silencieuse. Extrayez la logique dans une fonction export séparée',
490
+ lint_fix_errors: '❌ Veuillez corriger les erreurs ci-dessus avant de publier',
491
+ lint_skip_hint: '💡 Ajoutez --skip-lint pour ignorer la vérification',
492
+ lint_passed: ' ✅ Vérification du code réussie\n',
493
+ lint_skipped: '\n⏭️ Pré-vérification du code ignorée (--skip-lint)\n',
494
+ duplicate_source_mismatch: ' ⚠️ Found another copy with the same file name but different content. Publishing: {0}; other copy: {1}',
495
+ data_source_fetching: ' Reading existing page data sources...',
496
+ data_source_preserved: ' ✅ Preserved existing page data sources: {0}',
497
+ data_source_none: ' No custom page data sources to preserve',
498
+ data_source_fetch_failed: 'Could not read the existing page Schema, so publishing stopped to avoid clearing existing data sources: {0}',
499
+ target_checking: ' Checking publish target type...',
500
+ target_check_forced: ' ⚠️ Skipped publish target type check (--force)',
501
+ target_check_ok: ' ✅ Publish target confirmed: {0} ({1})',
502
+ target_check_failed: 'Could not verify publish target: {0}',
503
+ target_not_found: 'Publish target was not found in app navigation: {0}',
504
+ target_type_invalid: 'Publish target is not a custom display page: {0} current type is {1}',
505
+ target_type_hint: 'The current target "{0}" does not look like a custom page (type: {1}). Do not publish JSX to data forms or process forms.',
506
+ target_list_hint: 'Run yidaconnector list-forms {0} --keyword <page name>, then choose a custom page formUuid with formType=display.',
507
+ target_force_hint: 'Append --force only when you intentionally bypass this guard; it overwrites the target Schema and should be used only for a known custom page.',
508
+ step_compile: '\n📦 Step 1 : Compilation et construction du schéma\n',
509
+ reading_source: '[1/4] Lecture de la source {0}...',
510
+ compiling: '[2/4] Compilation Babel de {0}...',
511
+ compile_failed: ' ❌ Échec de la compilation : {0}',
512
+ compile_location: '\n Emplacement : ligne {0}, colonne {1}',
513
+ compile_error_code: " Code d'erreur : {0}",
514
+ minifying: '[3/4] Minification UglifyJS → {0}...',
515
+ minify_failed: ' Échec de la minification : {0}',
516
+ compile_done: ' ✅ Compilation terminée : {0}',
517
+ building_schema: '[4/4] Construction du schéma...',
518
+ schema_built: ' ✅ Schéma construit avec succès !',
519
+ step_login: '\n🔑 Step 2 : Lecture des identifiants',
520
+ step_publish: '\n📤 Step 3 : Publication du schéma\n',
521
+ publish_failed: '\n❌ Échec de la publication : {0}',
522
+ schema_published: ' ✅ Schéma publié avec succès !',
523
+ step_config: '\n⚙️ Step 4 : Mise à jour de la configuration\n',
524
+ success: ' ✅ Publication réussie !',
525
+ config_failed: ' ⚠️ Échec de la mise à jour de la configuration : {0}',
526
+ schema_ok_config_failed: 'Schema published, but config update failed',
527
+ step_health_check: '\n🩺 Step 5: Health check published page\n',
528
+ health_check_ok: ' ✅ Health check passed: HTTP {0}',
529
+ health_check_failed: ' ⚠️ Health check failed: HTTP {0} {1}',
530
+ exception: '\n❌ Erreur de publication : {0}',
531
+ source_not_found: '❌ Fichier source introuvable : {0}',
532
+ usage: 'Utilisation : yidaconnector publish <fichierSource> <appType> <formUuid> [--health-check]',
533
+ example: 'Exemple : yidaconnector publish pages/src/xxx.js APP_XXX FORM-XXX --health-check',
534
+ },
535
+
536
+ // ── lib/qr-login.js ────────────────────────────────
537
+ qr_login: {
538
+ title: '🔐 Connexion Yida par QR code terminal',
539
+ step_init: ' Step 1 : Initialisation de la session...',
540
+ step_get_qr: ' Step 2 : Récupération du QR code...',
541
+ scan_hint: ' 📱 Scannez le QR code ci-dessous avec DingTalk :',
542
+ qr_url_label: ' URL du QR code : {0}',
543
+ waiting_scan: " ⏳ En attente du scan (jusqu'à 2 minutes)...",
544
+ scanned_confirm: ' ✅ QR code scanné ! Confirmez la connexion sur votre téléphone...',
545
+ scan_success: ' ✅ Scan confirmé !',
546
+ step_exchange: ' Step 4 : Échange des identifiants...',
547
+ step_get_corps: ' Step 5 : Récupération de la liste des organisations...',
548
+ step_switch_corp: " Step 7 : Changement d'organisation...",
549
+ only_one_corp: ' ✅ Une seule organisation détectée : {0}, sélection automatique',
550
+ select_corp_prompt: ' 🏢 Plusieurs organisations trouvées, veuillez en sélectionner une :',
551
+ select_corp_input: ' Entrez le numéro (1-{0}) : ',
552
+ select_corp_invalid: ' ❌ Entrée invalide, entrez un nombre entre 1 et {0}',
553
+ target_corp_not_found: 'Le corpId indiqué est introuvable dans les organisations accessibles : {0}',
554
+ corp_selected: ' ✅ Organisation sélectionnée : {0}',
555
+ login_success: '✅ Connexion réussie !',
556
+ qrcode_fallback: " ⚠️ Package qrcode non installé, visitez l'URL ci-dessous manuellement :",
557
+ qrcode_render_failed: " ⚠️ Échec du rendu du QR code ({0}), visitez l'URL ci-dessous :",
558
+ qr_expired: 'QR code expiré, veuillez vous reconnecter',
559
+ poll_timeout: "Délai d'attente du scan (2 minutes), veuillez vous reconnecter",
560
+ no_corp_available: 'Aucune organisation accessible trouvée',
561
+ no_csrf_in_cookie: 'Connexion réussie mais csrf_token introuvable, réessayez',
562
+ stdin_closed: "Flux d'entrée fermé, impossible de sélectionner une organisation",
563
+ },
564
+
565
+ // ── scripts/postinstall.js ─────────────────────────
566
+ postinstall: {
567
+ welcome_title: ' 🎉 Bienvenue sur YidaConnector ! ',
568
+ install_success: " ✅ Installation terminée ! {0} L'outil de développement IA Yida est prêt.",
569
+ update_success: ' ✅ Mise à jour terminée ! {0} YidaConnector a été mis à jour vers la dernière version.',
570
+ ai_mode_title: ' 🚀 Mode conversation IA',
571
+ ai_mode_desc: ' Dans Codex / Claude Code / Aone Copilot / Cursor, discutez directement :',
572
+ prompt1: ' 📋 « Crée-moi un système de gestion des présences avec Yida »',
573
+ prompt2: ' 💰 « Construis une application de calcul de salaire »',
574
+ prompt3: ' 🏢 « Crée un système CRM de gestion client »',
575
+ prompt4: " 🎂 « Fais une mini-app d'anniversaire »",
576
+ steps_title: ' 📖 Démarrage',
577
+ step1: ' {0}Step 1{1} Ouvrez votre outil IA (Codex / Claude Code / Cursor, etc.)',
578
+ step2: " {0}Step 2{1} Décrivez l'app souhaitée en langage naturel",
579
+ step3: " {0}Step 3{1} L'IA exécute automatiquement les commandes yidaconnector",
580
+ step4: ' {0}Step 4{1} Obtenez le lien de votre app Yida 🎉',
581
+ commands_title: ' ⚡ Commandes rapides',
582
+ cmd_env: " {0}yidaconnector env{1} {2}# Détecter l'environnement et le statut de connexion{3}",
583
+ cmd_login: ' {0}yidaconnector login{1} {2}# Se connecter à Yida{3}',
584
+ cmd_help: ' {0}yidaconnector --help{1} {2}# Afficher toutes les commandes{3}',
585
+ footer1: ' 📚 Docs : https://github.com/bunnyrui/yidaconnector',
586
+ footer2: ' 💬 Communauté : Rejoignez la communauté YidaConnector sur DingTalk',
587
+ },
588
+
589
+ // ── lib/cdn-*.js ───────────────────────────────────
590
+ cdn: {
591
+ config_load_error: 'Échec du chargement de la configuration CDN : {0}',
592
+ config_saved: '✅ Configuration CDN sauvegardée dans : {0}',
593
+ config_usage: 'Utilisation : yidaconnector cdn-config [options]',
594
+ config_file_path: '📄 Fichier de configuration : {0}',
595
+ config_section_aliyun: '🔐 Identifiants Alibaba Cloud',
596
+ config_section_cdn: '🌐 Configuration CDN',
597
+ config_section_oss: '📦 Configuration OSS',
598
+ config_section_upload: "📤 Configuration d'upload",
599
+ config_cdn_domain: 'Domaine CDN',
600
+ config_oss_region: 'Région OSS',
601
+ config_oss_bucket: 'Bucket OSS',
602
+ config_oss_endpoint: 'Endpoint OSS',
603
+ config_upload_path: "Chemin d'upload",
604
+ config_compress: "Compression d'image",
605
+ config_max_width: 'Largeur maximale',
606
+ config_quality: "Qualité d'image",
607
+ config_not_set: 'Non défini',
608
+ config_enabled: 'Activé',
609
+ config_disabled: 'Désactivé',
610
+ config_status_valid: "✅ Configuration complète, prête à l'emploi",
611
+ config_status_invalid: '⚠️ Configuration incomplète',
612
+ config_missing: ' Champs manquants : {0}',
613
+ config_updated: '✅ Configuration mise à jour !',
614
+ config_init_title: "🔧 Assistant d'initialisation CDN",
615
+ config_init_desc: "Pour utiliser l'upload d'images CDN, configurez les éléments suivants :",
616
+ upload_no_files: '❌ Veuillez spécifier les fichiers image à uploader',
617
+ config_incomplete: '❌ Configuration CDN incomplète',
618
+ missing_fields: ' Champs manquants : {0}',
619
+ run_config_init: " Exécutez d'abord : yidaconnector cdn-config --init",
620
+ no_config: '❌ Configuration CDN introuvable',
621
+ oss_sdk_required: '❌ SDK ali-oss manquant',
622
+ run_npm_install: ' Exécutez : npm install {0}',
623
+ no_images_found: '❌ Aucun fichier image supporté trouvé',
624
+ uploading_images: '📤 Upload de {0} images...',
625
+ uploading_file: ' Upload : {0}',
626
+ upload_success: ' ✅ {0}',
627
+ upload_failed: " ❌ {0} échec de l'upload : {1}",
628
+ upload_summary: "\n📊 Résumé de l'upload",
629
+ upload_success_count: ' Succès : {0}',
630
+ upload_fail_count: ' Échecs : {0}',
631
+ cdn_urls: '\n🔗 URLs CDN :',
632
+ upload_error: "❌ Échec de l'upload : {0}",
633
+ refresh_no_targets: '❌ Veuillez spécifier des URLs ou répertoires à rafraîchir',
634
+ cdn_sdk_required: '❌ SDK CDN Alibaba Cloud manquant',
635
+ querying_quota: '📊 Interrogation du quota de rafraîchissement...',
636
+ quota_info: ' Rafraîchissement URL : {0}/jour, {1} restants | Répertoires : {2}/jour, {3} restants',
637
+ refreshing_urls: '🔄 Rafraîchissement de {0} URLs...',
638
+ refreshing_paths: '🔄 Rafraîchissement de {0} répertoires...',
639
+ refresh_task_id: ' ✅ ID de tâche : {0}',
640
+ refresh_urls_failed: ' ❌ Échec du rafraîchissement des URLs : {0}',
641
+ refresh_paths_failed: ' ❌ Échec du rafraîchissement des répertoires : {0}',
642
+ refresh_summary: '\n📊 Résumé du rafraîchissement',
643
+ url_refresh_success: ' ✅ Rafraîchissement URL réussi, ID de tâche : {0}',
644
+ path_refresh_success: ' ✅ Rafraîchissement répertoire réussi, ID de tâche : {0}',
645
+ refresh_error: '❌ Échec du rafraîchissement : {0}',
646
+ file_not_found: '❌ Fichier introuvable : {0}',
647
+ },
648
+
649
+ // ── src/flash-note/flash-to-prd.ts ──────────────
650
+ flashNote: {
651
+ toPrd: {
652
+ title: '📋 Note Flash DingTalk vers PRD',
653
+ help_usage: 'Utilisation : yidaconnector flash-to-prd --file <chemin> [--name <nom-projet>]',
654
+ help_usage2: ' yidaconnector flash-to-prd --name <nom-projet> (lire depuis stdin)',
655
+ help_args_title: 'Arguments :',
656
+ help_arg_file: ' --file, -f <chemin> Chemin du fichier note flash (.txt / .md)',
657
+ help_arg_name: ' --name, -n <nom> Nom du projet (optionnel, extrait automatiquement)',
658
+ help_arg_max_tokens: ' --max-tokens <nombre> Tokens max de sortie AI (defaut 8000)',
659
+ help_examples_title: 'Exemples :',
660
+ help_example1: ' yidaconnector flash-to-prd --file ./meeting-notes.txt --name "Inspection equipement"',
661
+ help_example2: ' cat meeting.txt | yidaconnector flash-to-prd --name "Inspection equipement"',
662
+ step_read: '[Etape 1] Lecture du contenu de la note flash...',
663
+ file_not_found: 'Fichier introuvable : {0}',
664
+ no_input: 'Aucun contenu fourni. Utilisez --file ou redirigez le contenu via stdin.',
665
+ stdin_empty: 'L entree standard est vide',
666
+ read_success: '✅ Lecture reussie, {0} caracteres',
667
+ step_load_module: '[Etape 2] Chargement du module de construction de prompt...',
668
+ module_loaded_builtin: '✅ Module de prompt integre charge',
669
+ module_loaded_local: '✅ Module de prompt local charge : {0}',
670
+ module_not_found: '❌ Module build-flash-note-prompt.js introuvable',
671
+ module_path_tried: ' Chemin essaye {0} : {1}',
672
+ step_preprocess: '[Etape 3] Pretraitement + reconnaissance de reunion...',
673
+ preprocess_result: ' Pretraitement : {0} car. -> {1} car.',
674
+ meeting_meta: ' Metadonnees de reunion : {0} champs{1}',
675
+ a1_sections: ' Sections resume A1 : {0}{1}',
676
+ speakers: ' Intervenants identifies : {0}{1}',
677
+ speakers_with_role: ' (dont {0} avec role)',
678
+ step_login: '[Etape 4] Verification de la connexion...',
679
+ no_login: ' Aucune session trouvee, connexion en cours...',
680
+ login_ready: '✅ Connexion prete ({0})',
681
+ step_ai: '[Etape 5] Appel AI pour generer le PRD...',
682
+ single_segment: ' Mode segment unique, longueur du prompt : {0} car.',
683
+ multi_segment: ' Mode multi-segments, {0} segments au total',
684
+ extracting_segment: ' Extraction du segment {0}/{1} ({2} car.)...',
685
+ merging_segments: ' Fusion des resultats des segments...',
686
+ ai_success: '✅ PRD genere avec succes',
687
+ ai_error: 'Echec de l appel API AI : {0}',
688
+ done: '✅ Conversion note flash vers PRD terminee',
689
+ done_project: ' Nom du projet : {0}',
690
+ done_file: ' Fichier de sortie : {0}',
691
+ done_size: ' Taille du fichier : {0} caracteres',
692
+ done_meeting: ' Reconnaissance reunion : {0} metadonnees, {1} sections A1, {2} intervenants',
693
+ },
694
+ },
695
+ update_app: {
696
+ layout_notice: 'Note: layoutDirection is consumed by the Yida app shell during creation/refresh. If the top action bar does not recover immediately after a backend switch, reopen the workbench or recreate the app with the target layout.',
697
+ },
698
+ aggregate_table: {
699
+ usage: 'Usage: yidaconnector aggregate-table <list|create-empty|inspect|preview|save|publish|status> <appType> ...',
700
+ commands_title: 'Subcommands:',
701
+ cmd_list: 'list <appType> [--keyword <text>] [--json] List aggregate tables in an app',
702
+ cmd_create_empty: 'create-empty <appType> "<name>" [--open|--no-open] Create a blank aggregate table and return the designer URL',
703
+ cmd_inspect: 'inspect <appType> <formUuid> [--json] Read aggregate table design config',
704
+ cmd_preview: 'preview <appType> <formUuid> <design.json> [--json] Preview config without saving',
705
+ cmd_save: 'save <appType> <formUuid> <design.json> [--json] Save an aggregate table draft',
706
+ cmd_publish: 'publish <appType> <formUuid> <design.json> [--json] Publish aggregate table config',
707
+ cmd_status: 'status <appType> <formUuid> [--json] Query aggregate table build status',
708
+ examples_title: 'Examples:',
709
+ example_list: 'yidaconnector aggregate-table list APP_XXX',
710
+ example_create_empty: 'yidaconnector aggregate-table create-empty APP_XXX "Customer Contract Aggregate" --open',
711
+ example_inspect: 'yidaconnector aggregate-table inspect APP_XXX FORM_XXX --json',
712
+ example_preview: 'yidaconnector aggregate-table preview APP_XXX FORM_XXX .cache/yidaconnector/aggregate/design.json',
713
+ example_save: 'yidaconnector aggregate-table save APP_XXX FORM_XXX .cache/yidaconnector/aggregate/design.json',
714
+ example_publish: 'yidaconnector aggregate-table publish APP_XXX FORM_XXX .cache/yidaconnector/aggregate/design.json',
715
+ example_status: 'yidaconnector aggregate-table status APP_XXX FORM_XXX',
716
+ list_usage: 'Usage: yidaconnector aggregate-table list <appType> [--keyword <text>] [--json]',
717
+ create_empty_usage: 'Usage: yidaconnector aggregate-table create-empty <appType> "<name>" [--locale zh_CN|en_US|ja_JP] [--open|--no-open]',
718
+ inspect_usage: 'Usage: yidaconnector aggregate-table inspect <appType> <formUuid> [--json]',
719
+ preview_usage: 'Usage: yidaconnector aggregate-table preview <appType> <formUuid> <design.json> [--json]',
720
+ save_usage: 'Usage: yidaconnector aggregate-table save <appType> <formUuid> <design.json> [--json]',
721
+ publish_usage: 'Usage: yidaconnector aggregate-table publish <appType> <formUuid> <design.json> [--json]',
722
+ status_usage: 'Usage: yidaconnector aggregate-table status <appType> <formUuid> [--json]',
723
+ no_login: 'No login state found. Run yidaconnector login first.',
724
+ unsupported_locale: 'Unsupported locale: {0}',
725
+ unknown_subcommand: 'Unknown aggregate-table subcommand: {0}',
726
+ design_required: 'Missing aggregate table design JSON or file path',
727
+ invalid_json: 'Aggregate table design config is not valid JSON: {0}',
728
+ design_object_required: 'Aggregate table design config must be a JSON object',
729
+ check_feature: 'Check aggregate table capability',
730
+ feature_disabled: 'Aggregate table is not enabled for this app/org, or the edition quota has been reached',
731
+ create_empty: 'Create blank aggregate table',
732
+ inspect: 'Read aggregate table config',
733
+ preview: 'Preview aggregate table config',
734
+ save: 'Save aggregate table draft',
735
+ publish: 'Publish aggregate table config',
736
+ status: 'Query aggregate table build status',
737
+ publish_requires_source: 'Publishing requires at least one data source. Configure relationForms first.',
738
+ list_success: 'Aggregate table list',
739
+ create_empty_success: 'Aggregate table created',
740
+ inspect_success: 'Aggregate table config loaded',
741
+ preview_success: 'Aggregate table preview succeeded',
742
+ save_success: 'Aggregate table draft saved',
743
+ publish_success: 'Aggregate table published',
744
+ status_success: 'Aggregate table status loaded',
745
+ },
746
+ ai_form_setting: {
747
+ usage: 'Usage: yidaconnector ai-form-setting <get|fields|models|enable|disable|save> <appType> ...',
748
+ commands_title: 'Subcommands:',
749
+ cmd_get: 'get <appType> <formUuid> [--raw] [--json] Query AI approval prompt config',
750
+ cmd_fields: 'fields <appType> <formUuid> [--type TEXT|IMAGE|ATTACHMENT] List insertable fields',
751
+ cmd_models: 'models <appType> [--type TEXT|IMAGE|ATTACHMENT] List available models',
752
+ cmd_enable: 'enable <appType> <formUuid> [--json] Enable AI approval prompts',
753
+ cmd_disable: 'disable <appType> <formUuid> [--json] Disable AI approval prompts',
754
+ cmd_save: 'save <appType> <formUuid> <config.json> [--enable] Save prompts and model config',
755
+ examples_title: 'Examples:',
756
+ example_get: 'yidaconnector ai-form-setting get APP_XXX FORM_XXX --json',
757
+ example_fields: 'yidaconnector ai-form-setting fields APP_XXX FORM_XXX --type ATTACHMENT',
758
+ example_models: 'yidaconnector ai-form-setting models APP_XXX --type IMAGE',
759
+ example_enable: 'yidaconnector ai-form-setting enable APP_XXX FORM_XXX',
760
+ example_save: 'yidaconnector ai-form-setting save APP_XXX FORM_XXX .cache/yidaconnector/ai-form-setting/config.json --enable',
761
+ enable_disable_conflict: '--enable and --disable cannot be used together',
762
+ invalid_type: 'Invalid prompt type: {0}. Valid values: {1}',
763
+ invalid_status: 'Invalid AI approval prompt status: {0}',
764
+ config_required: 'Missing AI approval prompt JSON config or file path',
765
+ invalid_json: 'AI approval prompt config is not valid JSON: {0}',
766
+ invalid_variable: 'Variable #{0} must be an object',
767
+ variable_required: 'Variable #{0} must contain varName and fieldId',
768
+ prompt_required: 'Prompt {0} is missing prompt/content',
769
+ variables_array_required: 'variables must be an array',
770
+ invalid_item: 'Prompt config #{0} must be an object',
771
+ model_required: 'Prompt {0} is missing modelId',
772
+ invalid_config_part: '{0} must be a JSON object or a valid JSON string',
773
+ config_object_required: 'AI approval prompt config must be a JSON object or array',
774
+ items_array_required: 'AI approval prompt config must contain an items array',
775
+ too_many_items: 'AI approval prompts support up to {0} items',
776
+ duplicate_item_id: 'Duplicate itemId: {0}',
777
+ no_login: 'No login state found. Run yidaconnector login first.',
778
+ get_usage: 'Usage: yidaconnector ai-form-setting get <appType> <formUuid> [--raw] [--json]',
779
+ fields_usage: 'Usage: yidaconnector ai-form-setting fields <appType> <formUuid> [--type TEXT|IMAGE|ATTACHMENT] [--json]',
780
+ models_usage: 'Usage: yidaconnector ai-form-setting models <appType> [--type TEXT|IMAGE|ATTACHMENT] [--json]',
781
+ status_usage: 'Usage: yidaconnector ai-form-setting <enable|disable> <appType> <formUuid> [--json]',
782
+ save_usage: 'Usage: yidaconnector ai-form-setting save <appType> <formUuid> <config.json> [--enable|--disable] [--json]',
783
+ get_action: 'Query AI approval prompt config',
784
+ fields_action: 'Query AI approval prompt fields',
785
+ models_action: 'Query AI approval prompt models',
786
+ status_action: 'Update AI approval prompt status',
787
+ save_action: 'Save AI approval prompt config',
788
+ get_success: 'AI approval prompt config',
789
+ fields_success: 'AI approval prompt fields',
790
+ models_success: 'AI approval prompt models',
791
+ save_success: 'AI approval prompt config saved',
792
+ enabled: 'AI approval prompts enabled',
793
+ disabled: 'AI approval prompts disabled',
794
+ unknown_subcommand: 'Unknown ai-form-setting subcommand: {0}',
795
+ },
796
+ codex_login: {
797
+ title: ' yidaconnector login {0} - {1} Login Mode',
798
+ not_codex: 'Current environment is not detected as Codex / Qoder / Wukong; returning an in-app browser login handoff only.',
799
+ no_playwright: '{0} mode does not require Playwright or a separate Chromium install.',
800
+ using_browser: '{0} in-app Browser is only suitable for unauthenticated page previews; use yidaconnector login --browser for Yida login cookies.',
801
+ browser_handoff_hint: '{0} in-app Browser does not support authentication Cookie export. Use yidaconnector login --browser when CLI cookies are required.',
802
+ handoff_message: '{0} in-app Browser cannot export Yida login cookies. Run fallback_command when CLI cookies are required.',
803
+ cache_available: 'Existing CLI Cookie cache is available; no browser login needed.',
804
+ },
805
+ };