chati-dev 4.5.9 → 4.5.10
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.
- package/framework/config.yaml +2 -2
- package/framework/context/root.md +1 -1
- package/framework/data/entity-registry.yaml +1 -1
- package/framework/i18n/en.yaml +51 -0
- package/framework/i18n/es.yaml +51 -0
- package/framework/i18n/fr.yaml +51 -0
- package/framework/i18n/pt.yaml +51 -0
- package/framework/manifest.json +16 -16
- package/framework/manifest.sig +1 -1
- package/package.json +1 -1
- package/src/wizard/feedback.js +3 -2
- package/src/wizard/i18n.js +42 -0
- package/src/wizard/index.js +29 -28
- package/src/wizard/questions.js +28 -26
package/framework/config.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Chati.dev System Context
|
|
2
2
|
|
|
3
3
|
## Framework
|
|
4
|
-
- **Version**: 4.5.
|
|
4
|
+
- **Version**: 4.5.10
|
|
5
5
|
- **Agents**: Specialized discovery and planning agents feeding provider-neutral RAIL execution and a sealed release lane
|
|
6
6
|
- **Constitution**: 25 Articles + Preamble
|
|
7
7
|
- **Quality**: 5 pipeline gates + 3-tier verdicts + Fault Vector Protocol (Article XXII)
|
package/framework/i18n/en.yaml
CHANGED
|
@@ -22,6 +22,12 @@ installer:
|
|
|
22
22
|
llm_provider_not_installed: "(CLI not detected)"
|
|
23
23
|
llm_provider_label: "AI Provider"
|
|
24
24
|
ide_selection_title: "Select your IDEs / CLIs (multiple allowed):"
|
|
25
|
+
provider_selection_title: "Which AI providers will you use?"
|
|
26
|
+
editor_selection_title: "Which editor IDEs should get rules files? (optional)"
|
|
27
|
+
provider_claude_hint: "Anthropic official CLI"
|
|
28
|
+
provider_gemini_hint: "Google AI terminal agent"
|
|
29
|
+
provider_codex_hint: "OpenAI Codex terminal agent"
|
|
30
|
+
provider_grok_hint: "xAI terminal agent"
|
|
25
31
|
installation_mode_title: "Select the installation mode"
|
|
26
32
|
installation_mode_open: "Open"
|
|
27
33
|
installation_mode_open_hint: "Public framework"
|
|
@@ -31,6 +37,19 @@ installer:
|
|
|
31
37
|
back: "Back"
|
|
32
38
|
back_hint: "Return to the previous step"
|
|
33
39
|
install: "Install"
|
|
40
|
+
cancelled: "Installation cancelled."
|
|
41
|
+
multiselect_hint: "(space to select, enter to confirm)"
|
|
42
|
+
greenfield_label: "Greenfield"
|
|
43
|
+
brownfield_label: "Brownfield"
|
|
44
|
+
none: "None"
|
|
45
|
+
auto_installed: "auto-installed"
|
|
46
|
+
connected_via: "Connected via {providers}"
|
|
47
|
+
target: "Target"
|
|
48
|
+
yes: "Yes"
|
|
49
|
+
no: "No"
|
|
50
|
+
auto_detection_title: "Auto-detection"
|
|
51
|
+
documentation_label: "Documentation"
|
|
52
|
+
session_label: "Session"
|
|
34
53
|
model_routing_label: "Model routing"
|
|
35
54
|
model_routing_automatic: "Automatic per task across all enabled models"
|
|
36
55
|
providers_label: "Providers"
|
|
@@ -56,6 +75,7 @@ installer:
|
|
|
56
75
|
agents_valid: "All agents implement 8 protocols"
|
|
57
76
|
handoff_ok: "Handoff protocol: OK"
|
|
58
77
|
validation_ok: "Self-validation criteria: OK"
|
|
78
|
+
validation_failed_count: "{count} validation check(s) did not pass. Run 'npx chati-dev health' for details."
|
|
59
79
|
constitution_ok: "Constitution: 25 articles verified"
|
|
60
80
|
created_memories: "Created .chati/memories/ (Memory Layer)"
|
|
61
81
|
installed_intelligence: "Installed Intelligence Layer (Context Engine, Memory, Registry)"
|
|
@@ -68,6 +88,37 @@ installer:
|
|
|
68
88
|
quick_start_1: "Open your IDE"
|
|
69
89
|
quick_start_2: "Type: /chati"
|
|
70
90
|
quick_start_3: "The orchestrator will guide you through the process"
|
|
91
|
+
tos_title: "Terms of Use"
|
|
92
|
+
tos_summary: "By continuing, you accept the Chati.dev Terms of Use (see TERMS_OF_USE.md in the package)."
|
|
93
|
+
tos_telemetry_what: "Chati.dev collects anonymous usage data: agents used, pipeline duration, gate scores. No code, files, or personal data is collected."
|
|
94
|
+
tos_telemetry_optout: "You can disable telemetry anytime with: npx chati-dev telemetry disable"
|
|
95
|
+
tos_accept: "Do you accept the Terms of Use?"
|
|
96
|
+
tos_declined: "Terms of Use declined. Installation cancelled."
|
|
97
|
+
tos_telemetry_enabled: "Telemetry: enabled (anonymous, opt-out, disable with: npx chati-dev telemetry disable)"
|
|
98
|
+
tos_telemetry_disabled: "Telemetry: disabled"
|
|
99
|
+
clickup_required: "Internal mode requires an authorized ClickUp MCP connection in at least one selected CLI. Configure ClickUp in Claude, Codex or Grok, then retry."
|
|
100
|
+
system_prerequisites_failed: "System prerequisites not met:"
|
|
101
|
+
fix_prerequisites: "Fix the issues above and try again."
|
|
102
|
+
system_check: "System check:"
|
|
103
|
+
created_provider_claude: "Created .claude/commands/ (thin router)"
|
|
104
|
+
created_provider_gemini: "Created .gemini/commands/ (TOML command)"
|
|
105
|
+
created_provider_codex: "Created .agents/skills/chati/ (Codex skill)"
|
|
106
|
+
created_provider_grok: "Created .grok/commands/ (native markdown command)"
|
|
107
|
+
validation_phase: "Validation"
|
|
108
|
+
installation_phase: "Installation"
|
|
109
|
+
phase_failed: "{phase} failed: {error}"
|
|
110
|
+
license_activation_title: "License Activation"
|
|
111
|
+
license_activation_info: "Your license key works across all projects on this machine."
|
|
112
|
+
license_trial_info: "Get a free 14-day trial at: https://chati.dev/pricing"
|
|
113
|
+
license_prompt: "Enter your license key (press Enter to skip, activate later with: npx chati-dev activate):"
|
|
114
|
+
license_placeholder: "CHATI-XXXX-XXXX-XXXX"
|
|
115
|
+
license_skipped: "Skipped. Run: npx chati-dev activate --key=YOUR-KEY when ready."
|
|
116
|
+
license_activating: "Activating license..."
|
|
117
|
+
license_activated: "License activated! Plan: {plan}, {days} day(s) remaining."
|
|
118
|
+
license_activation_failed: "Activation failed: {error}"
|
|
119
|
+
license_retry: "Run: npx chati-dev activate --key=YOUR-KEY to try again."
|
|
120
|
+
license_saved_invalid: "Saved license is not valid on this machine: {reason}"
|
|
121
|
+
license_verify_failed: "Could not verify the saved license: {error}"
|
|
71
122
|
|
|
72
123
|
agents:
|
|
73
124
|
starting: "Starting agent: {agent}"
|
package/framework/i18n/es.yaml
CHANGED
|
@@ -22,6 +22,12 @@ installer:
|
|
|
22
22
|
llm_provider_not_installed: "(CLI no detectada)"
|
|
23
23
|
llm_provider_label: "Proveedor de IA"
|
|
24
24
|
ide_selection_title: "Seleccione sus IDEs / CLIs (multiples permitidos):"
|
|
25
|
+
provider_selection_title: "Que proveedores de IA utilizara?"
|
|
26
|
+
editor_selection_title: "Que editores deben recibir los archivos de reglas? (opcional)"
|
|
27
|
+
provider_claude_hint: "CLI oficial de Anthropic"
|
|
28
|
+
provider_gemini_hint: "Agente de terminal de Google AI"
|
|
29
|
+
provider_codex_hint: "CLI Codex de OpenAI"
|
|
30
|
+
provider_grok_hint: "Agente de terminal de xAI"
|
|
25
31
|
installation_mode_title: "Seleccione el modo de instalacion"
|
|
26
32
|
installation_mode_open: "Open"
|
|
27
33
|
installation_mode_open_hint: "Framework publico"
|
|
@@ -31,6 +37,19 @@ installer:
|
|
|
31
37
|
back: "Volver"
|
|
32
38
|
back_hint: "Regresar al paso anterior"
|
|
33
39
|
install: "Instalar"
|
|
40
|
+
cancelled: "Instalacion cancelada."
|
|
41
|
+
multiselect_hint: "(espacio para seleccionar, enter para confirmar)"
|
|
42
|
+
greenfield_label: "Greenfield"
|
|
43
|
+
brownfield_label: "Brownfield"
|
|
44
|
+
none: "Ninguno"
|
|
45
|
+
auto_installed: "instalado automaticamente"
|
|
46
|
+
connected_via: "Conectado mediante {providers}"
|
|
47
|
+
target: "Destino"
|
|
48
|
+
yes: "Si"
|
|
49
|
+
no: "No"
|
|
50
|
+
auto_detection_title: "Deteccion automatica"
|
|
51
|
+
documentation_label: "Documentacion"
|
|
52
|
+
session_label: "Sesion"
|
|
34
53
|
model_routing_label: "Enrutamiento de modelos"
|
|
35
54
|
model_routing_automatic: "Automatico por tarea entre todos los modelos habilitados"
|
|
36
55
|
providers_label: "Proveedores"
|
|
@@ -56,6 +75,7 @@ installer:
|
|
|
56
75
|
agents_valid: "Todos los agentes implementan 8 protocolos"
|
|
57
76
|
handoff_ok: "Protocolo de handoff: OK"
|
|
58
77
|
validation_ok: "Criterios de auto-validacion: OK"
|
|
78
|
+
validation_failed_count: "{count} verificacion(es) de validacion no pasaron. Ejecute 'npx chati-dev health' para ver los detalles."
|
|
59
79
|
constitution_ok: "Constitucion: 25 articulos verificados"
|
|
60
80
|
created_memories: "Creado .chati/memories/ (Memory Layer)"
|
|
61
81
|
installed_intelligence: "Instalada Intelligence Layer (Context Engine, Memory, Registry)"
|
|
@@ -68,6 +88,37 @@ installer:
|
|
|
68
88
|
quick_start_1: "Abra su IDE"
|
|
69
89
|
quick_start_2: "Escriba: /chati"
|
|
70
90
|
quick_start_3: "El orquestador le guiara por el proceso"
|
|
91
|
+
tos_title: "Terminos de Uso"
|
|
92
|
+
tos_summary: "Al continuar, acepta los Terminos de Uso de Chati.dev (consulte TERMS_OF_USE.md en el paquete)."
|
|
93
|
+
tos_telemetry_what: "Chati.dev recopila datos anonimos de uso: agentes utilizados, duracion del pipeline y scores de los gates. No se recopila codigo, archivos ni datos personales."
|
|
94
|
+
tos_telemetry_optout: "Puede desactivar la telemetria en cualquier momento con: npx chati-dev telemetry disable"
|
|
95
|
+
tos_accept: "Acepta los Terminos de Uso?"
|
|
96
|
+
tos_declined: "Terminos de Uso rechazados. Instalacion cancelada."
|
|
97
|
+
tos_telemetry_enabled: "Telemetria: activada (anonima y opcional, desactive con: npx chati-dev telemetry disable)"
|
|
98
|
+
tos_telemetry_disabled: "Telemetria: desactivada"
|
|
99
|
+
clickup_required: "El modo Internal requiere una conexion MCP autorizada con ClickUp en al menos una CLI seleccionada. Configure ClickUp en Claude, Codex o Grok e intentelo de nuevo."
|
|
100
|
+
system_prerequisites_failed: "No se cumplen los requisitos previos del sistema:"
|
|
101
|
+
fix_prerequisites: "Corrija los problemas anteriores e intentelo de nuevo."
|
|
102
|
+
system_check: "Verificacion del sistema:"
|
|
103
|
+
created_provider_claude: "Creado .claude/commands/ (enrutador ligero)"
|
|
104
|
+
created_provider_gemini: "Creado .gemini/commands/ (comando TOML)"
|
|
105
|
+
created_provider_codex: "Creado .agents/skills/chati/ (skill de Codex)"
|
|
106
|
+
created_provider_grok: "Creado .grok/commands/ (comando markdown nativo)"
|
|
107
|
+
validation_phase: "Validacion"
|
|
108
|
+
installation_phase: "Instalacion"
|
|
109
|
+
phase_failed: "Fallo en la etapa {phase}: {error}"
|
|
110
|
+
license_activation_title: "Activacion de Licencia"
|
|
111
|
+
license_activation_info: "Su clave de licencia funciona en todos los proyectos de esta maquina."
|
|
112
|
+
license_trial_info: "Obtenga una prueba gratuita de 14 dias en: https://chati.dev/pricing"
|
|
113
|
+
license_prompt: "Introduzca su clave de licencia (pulse Enter para omitir y activar despues con: npx chati-dev activate):"
|
|
114
|
+
license_placeholder: "CHATI-XXXX-XXXX-XXXX"
|
|
115
|
+
license_skipped: "Paso omitido. Cuando quiera, ejecute: npx chati-dev activate --key=SU-CLAVE."
|
|
116
|
+
license_activating: "Activando la licencia..."
|
|
117
|
+
license_activated: "Licencia activada! Plan: {plan}, {days} dia(s) restante(s)."
|
|
118
|
+
license_activation_failed: "Fallo de activacion: {error}"
|
|
119
|
+
license_retry: "Ejecute: npx chati-dev activate --key=SU-CLAVE para intentarlo de nuevo."
|
|
120
|
+
license_saved_invalid: "La licencia guardada no es valida en esta maquina: {reason}"
|
|
121
|
+
license_verify_failed: "No se pudo verificar la licencia guardada: {error}"
|
|
71
122
|
|
|
72
123
|
agents:
|
|
73
124
|
starting: "Iniciando agente: {agent}"
|
package/framework/i18n/fr.yaml
CHANGED
|
@@ -22,6 +22,12 @@ installer:
|
|
|
22
22
|
llm_provider_not_installed: "(CLI non detecte)"
|
|
23
23
|
llm_provider_label: "Fournisseur IA"
|
|
24
24
|
ide_selection_title: "Selectionnez vos IDEs / CLIs (multiples autorises):"
|
|
25
|
+
provider_selection_title: "Quels fournisseurs IA utiliserez-vous?"
|
|
26
|
+
editor_selection_title: "Quels editeurs doivent recevoir les fichiers de regles? (facultatif)"
|
|
27
|
+
provider_claude_hint: "CLI officielle d'Anthropic"
|
|
28
|
+
provider_gemini_hint: "Agent de terminal Google AI"
|
|
29
|
+
provider_codex_hint: "CLI Codex d'OpenAI"
|
|
30
|
+
provider_grok_hint: "Agent de terminal xAI"
|
|
25
31
|
installation_mode_title: "Selectionnez le mode d'installation"
|
|
26
32
|
installation_mode_open: "Open"
|
|
27
33
|
installation_mode_open_hint: "Framework public"
|
|
@@ -31,6 +37,19 @@ installer:
|
|
|
31
37
|
back: "Retour"
|
|
32
38
|
back_hint: "Revenir a l'etape precedente"
|
|
33
39
|
install: "Installer"
|
|
40
|
+
cancelled: "Installation annulee."
|
|
41
|
+
multiselect_hint: "(espace pour selectionner, entree pour confirmer)"
|
|
42
|
+
greenfield_label: "Greenfield"
|
|
43
|
+
brownfield_label: "Brownfield"
|
|
44
|
+
none: "Aucun"
|
|
45
|
+
auto_installed: "installe automatiquement"
|
|
46
|
+
connected_via: "Connecte via {providers}"
|
|
47
|
+
target: "Destination"
|
|
48
|
+
yes: "Oui"
|
|
49
|
+
no: "Non"
|
|
50
|
+
auto_detection_title: "Detection automatique"
|
|
51
|
+
documentation_label: "Documentation"
|
|
52
|
+
session_label: "Session"
|
|
34
53
|
model_routing_label: "Routage des modeles"
|
|
35
54
|
model_routing_automatic: "Automatique par tache entre tous les modeles actives"
|
|
36
55
|
providers_label: "Fournisseurs"
|
|
@@ -56,6 +75,7 @@ installer:
|
|
|
56
75
|
agents_valid: "Tous les agents implementent 8 protocoles"
|
|
57
76
|
handoff_ok: "Protocole de passation: OK"
|
|
58
77
|
validation_ok: "Criteres d'auto-validation: OK"
|
|
78
|
+
validation_failed_count: "{count} verification(s) de validation ont echoue. Executez 'npx chati-dev health' pour les details."
|
|
59
79
|
constitution_ok: "Constitution: 25 articles verifies"
|
|
60
80
|
created_memories: "Cree .chati/memories/ (Memory Layer)"
|
|
61
81
|
installed_intelligence: "Installee Intelligence Layer (Context Engine, Memory, Registry)"
|
|
@@ -68,6 +88,37 @@ installer:
|
|
|
68
88
|
quick_start_1: "Ouvrez votre IDE"
|
|
69
89
|
quick_start_2: "Tapez: /chati"
|
|
70
90
|
quick_start_3: "L'orchestrateur vous guidera a travers le processus"
|
|
91
|
+
tos_title: "Conditions d'Utilisation"
|
|
92
|
+
tos_summary: "En continuant, vous acceptez les Conditions d'Utilisation de Chati.dev (consultez TERMS_OF_USE.md dans le paquet)."
|
|
93
|
+
tos_telemetry_what: "Chati.dev collecte des donnees d'utilisation anonymes: agents utilises, duree du pipeline et scores des gates. Aucun code, fichier ou donnee personnelle n'est collecte."
|
|
94
|
+
tos_telemetry_optout: "Vous pouvez desactiver la telemetrie a tout moment avec: npx chati-dev telemetry disable"
|
|
95
|
+
tos_accept: "Acceptez-vous les Conditions d'Utilisation?"
|
|
96
|
+
tos_declined: "Conditions d'Utilisation refusees. Installation annulee."
|
|
97
|
+
tos_telemetry_enabled: "Telemetrie: activee (anonyme et facultative, desactivez avec: npx chati-dev telemetry disable)"
|
|
98
|
+
tos_telemetry_disabled: "Telemetrie: desactivee"
|
|
99
|
+
clickup_required: "Le mode Internal necessite une connexion MCP ClickUp autorisee dans au moins une CLI selectionnee. Configurez ClickUp dans Claude, Codex ou Grok, puis reessayez."
|
|
100
|
+
system_prerequisites_failed: "Les prerequis systeme ne sont pas satisfaits:"
|
|
101
|
+
fix_prerequisites: "Corrigez les problemes ci-dessus et reessayez."
|
|
102
|
+
system_check: "Verification du systeme:"
|
|
103
|
+
created_provider_claude: "Cree .claude/commands/ (routeur leger)"
|
|
104
|
+
created_provider_gemini: "Cree .gemini/commands/ (commande TOML)"
|
|
105
|
+
created_provider_codex: "Cree .agents/skills/chati/ (skill Codex)"
|
|
106
|
+
created_provider_grok: "Cree .grok/commands/ (commande markdown native)"
|
|
107
|
+
validation_phase: "Validation"
|
|
108
|
+
installation_phase: "Installation"
|
|
109
|
+
phase_failed: "Echec de l'etape {phase}: {error}"
|
|
110
|
+
license_activation_title: "Activation de la Licence"
|
|
111
|
+
license_activation_info: "Votre cle de licence fonctionne pour tous les projets de cette machine."
|
|
112
|
+
license_trial_info: "Obtenez un essai gratuit de 14 jours sur: https://chati.dev/pricing"
|
|
113
|
+
license_prompt: "Saisissez votre cle de licence (appuyez sur Entree pour ignorer et activer plus tard avec: npx chati-dev activate):"
|
|
114
|
+
license_placeholder: "CHATI-XXXX-XXXX-XXXX"
|
|
115
|
+
license_skipped: "Etape ignoree. Lorsque vous le souhaitez, executez: npx chati-dev activate --key=VOTRE-CLE."
|
|
116
|
+
license_activating: "Activation de la licence..."
|
|
117
|
+
license_activated: "Licence activee! Offre: {plan}, {days} jour(s) restant(s)."
|
|
118
|
+
license_activation_failed: "Echec de l'activation: {error}"
|
|
119
|
+
license_retry: "Executez: npx chati-dev activate --key=VOTRE-CLE pour reessayer."
|
|
120
|
+
license_saved_invalid: "La licence enregistree n'est pas valide sur cette machine: {reason}"
|
|
121
|
+
license_verify_failed: "Impossible de verifier la licence enregistree: {error}"
|
|
71
122
|
|
|
72
123
|
agents:
|
|
73
124
|
starting: "Demarrage de l'agent: {agent}"
|
package/framework/i18n/pt.yaml
CHANGED
|
@@ -22,6 +22,12 @@ installer:
|
|
|
22
22
|
llm_provider_not_installed: "(CLI nao detectada)"
|
|
23
23
|
llm_provider_label: "Provedor de IA"
|
|
24
24
|
ide_selection_title: "Selecione suas IDEs / CLIs (multiplos permitidos):"
|
|
25
|
+
provider_selection_title: "Quais provedores de IA voce vai utilizar?"
|
|
26
|
+
editor_selection_title: "Quais editores devem receber os arquivos de regras? (opcional)"
|
|
27
|
+
provider_claude_hint: "CLI oficial da Anthropic"
|
|
28
|
+
provider_gemini_hint: "Agente de terminal da Google AI"
|
|
29
|
+
provider_codex_hint: "CLI Codex da OpenAI"
|
|
30
|
+
provider_grok_hint: "Agente de terminal da xAI"
|
|
25
31
|
installation_mode_title: "Selecione o modo de instalacao"
|
|
26
32
|
installation_mode_open: "Open"
|
|
27
33
|
installation_mode_open_hint: "Framework publico"
|
|
@@ -31,6 +37,19 @@ installer:
|
|
|
31
37
|
back: "Voltar"
|
|
32
38
|
back_hint: "Retornar a etapa anterior"
|
|
33
39
|
install: "Instalar"
|
|
40
|
+
cancelled: "Instalacao cancelada."
|
|
41
|
+
multiselect_hint: "(espaco para selecionar, enter para confirmar)"
|
|
42
|
+
greenfield_label: "Greenfield"
|
|
43
|
+
brownfield_label: "Brownfield"
|
|
44
|
+
none: "Nenhum"
|
|
45
|
+
auto_installed: "instalado automaticamente"
|
|
46
|
+
connected_via: "Conectado via {providers}"
|
|
47
|
+
target: "Destino"
|
|
48
|
+
yes: "Sim"
|
|
49
|
+
no: "Nao"
|
|
50
|
+
auto_detection_title: "Deteccao automatica"
|
|
51
|
+
documentation_label: "Documentacao"
|
|
52
|
+
session_label: "Sessao"
|
|
34
53
|
model_routing_label: "Roteamento de modelos"
|
|
35
54
|
model_routing_automatic: "Automatico por task entre todos os modelos habilitados"
|
|
36
55
|
providers_label: "Provedores"
|
|
@@ -56,6 +75,7 @@ installer:
|
|
|
56
75
|
agents_valid: "Todos os agentes implementam 8 protocolos"
|
|
57
76
|
handoff_ok: "Protocolo de handoff: OK"
|
|
58
77
|
validation_ok: "Criterios de auto-validacao: OK"
|
|
78
|
+
validation_failed_count: "{count} verificacao(oes) de validacao nao passaram. Execute 'npx chati-dev health' para ver os detalhes."
|
|
59
79
|
constitution_ok: "Constituicao: 25 artigos verificados"
|
|
60
80
|
created_memories: "Criado .chati/memories/ (Memory Layer)"
|
|
61
81
|
installed_intelligence: "Instalada Intelligence Layer (Context Engine, Memory, Registry)"
|
|
@@ -68,6 +88,37 @@ installer:
|
|
|
68
88
|
quick_start_1: "Abra sua IDE"
|
|
69
89
|
quick_start_2: "Digite: /chati"
|
|
70
90
|
quick_start_3: "O orquestrador ira guia-lo pelo processo"
|
|
91
|
+
tos_title: "Termos de Uso"
|
|
92
|
+
tos_summary: "Ao continuar, voce aceita os Termos de Uso do Chati.dev (consulte TERMS_OF_USE.md no pacote)."
|
|
93
|
+
tos_telemetry_what: "O Chati.dev coleta dados anonimos de uso: agentes utilizados, duracao do pipeline e scores dos gates. Nenhum codigo, arquivo ou dado pessoal e coletado."
|
|
94
|
+
tos_telemetry_optout: "Voce pode desativar a telemetria a qualquer momento com: npx chati-dev telemetry disable"
|
|
95
|
+
tos_accept: "Voce aceita os Termos de Uso?"
|
|
96
|
+
tos_declined: "Termos de Uso recusados. Instalacao cancelada."
|
|
97
|
+
tos_telemetry_enabled: "Telemetria: ativada (anonima e opcional, desative com: npx chati-dev telemetry disable)"
|
|
98
|
+
tos_telemetry_disabled: "Telemetria: desativada"
|
|
99
|
+
clickup_required: "O modo Internal exige uma conexao MCP autorizada com o ClickUp em pelo menos uma CLI selecionada. Configure o ClickUp no Claude, Codex ou Grok e tente novamente."
|
|
100
|
+
system_prerequisites_failed: "Os pre-requisitos do sistema nao foram atendidos:"
|
|
101
|
+
fix_prerequisites: "Corrija os problemas acima e tente novamente."
|
|
102
|
+
system_check: "Verificacao do sistema:"
|
|
103
|
+
created_provider_claude: "Criado .claude/commands/ (roteador leve)"
|
|
104
|
+
created_provider_gemini: "Criado .gemini/commands/ (comando TOML)"
|
|
105
|
+
created_provider_codex: "Criado .agents/skills/chati/ (skill do Codex)"
|
|
106
|
+
created_provider_grok: "Criado .grok/commands/ (comando markdown nativo)"
|
|
107
|
+
validation_phase: "Validacao"
|
|
108
|
+
installation_phase: "Instalacao"
|
|
109
|
+
phase_failed: "Falha na etapa {phase}: {error}"
|
|
110
|
+
license_activation_title: "Ativacao da Licenca"
|
|
111
|
+
license_activation_info: "Sua chave de licenca funciona em todos os projetos desta maquina."
|
|
112
|
+
license_trial_info: "Obtenha um teste gratuito de 14 dias em: https://chati.dev/pricing"
|
|
113
|
+
license_prompt: "Digite sua chave de licenca (pressione Enter para pular e ativar depois com: npx chati-dev activate):"
|
|
114
|
+
license_placeholder: "CHATI-XXXX-XXXX-XXXX"
|
|
115
|
+
license_skipped: "Etapa ignorada. Quando quiser, execute: npx chati-dev activate --key=SUA-CHAVE."
|
|
116
|
+
license_activating: "Ativando a licenca..."
|
|
117
|
+
license_activated: "Licenca ativada! Plano: {plan}, {days} dia(s) restante(s)."
|
|
118
|
+
license_activation_failed: "Falha na ativacao: {error}"
|
|
119
|
+
license_retry: "Execute: npx chati-dev activate --key=SUA-CHAVE para tentar novamente."
|
|
120
|
+
license_saved_invalid: "A licenca salva nao e valida nesta maquina: {reason}"
|
|
121
|
+
license_verify_failed: "Nao foi possivel verificar a licenca salva: {error}"
|
|
71
122
|
|
|
72
123
|
agents:
|
|
73
124
|
starting: "Iniciando agente: {agent}"
|
package/framework/manifest.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"createdAt": "2026-08-
|
|
2
|
+
"createdAt": "2026-08-27T13:25:29.560Z",
|
|
3
3
|
"files": {
|
|
4
4
|
"agents/build/dev.md": {
|
|
5
5
|
"hash": "13c2b3855c1f815154a2f4020b99fd8ee71e701b41783f5f26696222720a1466",
|
|
@@ -97,8 +97,8 @@
|
|
|
97
97
|
"type": "md"
|
|
98
98
|
},
|
|
99
99
|
"config.yaml": {
|
|
100
|
-
"hash": "
|
|
101
|
-
"size":
|
|
100
|
+
"hash": "8a10ab3b6db7806591d7168f6aee6332f417c612671177310d3ce6aefb2f51de",
|
|
101
|
+
"size": 2671,
|
|
102
102
|
"type": "yaml"
|
|
103
103
|
},
|
|
104
104
|
"constitution.md": {
|
|
@@ -122,13 +122,13 @@
|
|
|
122
122
|
"type": "md"
|
|
123
123
|
},
|
|
124
124
|
"context/root.md": {
|
|
125
|
-
"hash": "
|
|
126
|
-
"size":
|
|
125
|
+
"hash": "6bd0257d5c92c10733782ac68c0d1438571b68e2b162243c9494b0a912f6fe73",
|
|
126
|
+
"size": 1218,
|
|
127
127
|
"type": "md"
|
|
128
128
|
},
|
|
129
129
|
"data/entity-registry.yaml": {
|
|
130
|
-
"hash": "
|
|
131
|
-
"size":
|
|
130
|
+
"hash": "e56261884e29b046f3c4b5f4d0a22b4fa27bceba17d669d0606ea0a25d3c8237",
|
|
131
|
+
"size": 34606,
|
|
132
132
|
"type": "yaml"
|
|
133
133
|
},
|
|
134
134
|
"data/model-limits.json": {
|
|
@@ -377,23 +377,23 @@
|
|
|
377
377
|
"type": "js"
|
|
378
378
|
},
|
|
379
379
|
"i18n/en.yaml": {
|
|
380
|
-
"hash": "
|
|
381
|
-
"size":
|
|
380
|
+
"hash": "6b1ede4a442a86194d561d4a7a2fc5bf2259d23b23ae48eeaa973cf8fce79f33",
|
|
381
|
+
"size": 8046,
|
|
382
382
|
"type": "yaml"
|
|
383
383
|
},
|
|
384
384
|
"i18n/es.yaml": {
|
|
385
|
-
"hash": "
|
|
386
|
-
"size":
|
|
385
|
+
"hash": "2542bf4a6b68883cea81021ed5ea84f5f05368be3a47b79d1b797753966a18ed",
|
|
386
|
+
"size": 8632,
|
|
387
387
|
"type": "yaml"
|
|
388
388
|
},
|
|
389
389
|
"i18n/fr.yaml": {
|
|
390
|
-
"hash": "
|
|
391
|
-
"size":
|
|
390
|
+
"hash": "58c8d34b1d752592dbd6beb32b240475fdf297847558e8589174d713bae439c8",
|
|
391
|
+
"size": 8777,
|
|
392
392
|
"type": "yaml"
|
|
393
393
|
},
|
|
394
394
|
"i18n/pt.yaml": {
|
|
395
|
-
"hash": "
|
|
396
|
-
"size":
|
|
395
|
+
"hash": "fba6466fc35f464344d9a40d1172100d65c5e42d406285e3653c9bbad59b5607",
|
|
396
|
+
"size": 8516,
|
|
397
397
|
"type": "yaml"
|
|
398
398
|
},
|
|
399
399
|
"intelligence/confidence.yaml": {
|
|
@@ -1352,5 +1352,5 @@
|
|
|
1352
1352
|
"type": "yaml"
|
|
1353
1353
|
}
|
|
1354
1354
|
},
|
|
1355
|
-
"version": "4.5.
|
|
1355
|
+
"version": "4.5.10"
|
|
1356
1356
|
}
|
package/framework/manifest.sig
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
IEfPaGbjqj36vXbd2ODiFxMhP6C9zd7GCMIkHitsiRCQ4nht3ymf69h9kXqnyGqMgrpiiFKs1Kn3/K0UzxJqAw==
|
package/package.json
CHANGED
package/src/wizard/feedback.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import ora from 'ora';
|
|
2
2
|
import { brand, success, dim } from '../utils/colors.js';
|
|
3
|
+
import { t } from './i18n.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Create a spinner with chati.dev branding
|
|
@@ -50,8 +51,8 @@ export function showQuickStart(title, steps) {
|
|
|
50
51
|
console.log(` ${dim(`${i + 1}.`)} ${step}`);
|
|
51
52
|
});
|
|
52
53
|
console.log();
|
|
53
|
-
console.log(`${dim('
|
|
54
|
-
console.log(`${dim('
|
|
54
|
+
console.log(`${dim(`${t('installer.documentation_label')}:`)} .chati.dev/constitution.md`);
|
|
55
|
+
console.log(`${dim(`${t('installer.session_label')}:`)} .chati/session.yaml`);
|
|
55
56
|
}
|
|
56
57
|
|
|
57
58
|
/**
|
package/src/wizard/i18n.js
CHANGED
|
@@ -30,6 +30,10 @@ const FALLBACK_EN = {
|
|
|
30
30
|
ide_selection_title: 'Select your IDEs / CLIs (multiple allowed):',
|
|
31
31
|
provider_selection_title: 'Which AI providers will you use?',
|
|
32
32
|
editor_selection_title: 'Which editor IDEs should get rules files? (optional)',
|
|
33
|
+
provider_claude_hint: 'Anthropic official CLI',
|
|
34
|
+
provider_gemini_hint: 'Google AI terminal agent',
|
|
35
|
+
provider_codex_hint: 'OpenAI Codex terminal agent',
|
|
36
|
+
provider_grok_hint: 'xAI terminal agent',
|
|
33
37
|
installation_mode_title: 'Select the installation mode',
|
|
34
38
|
installation_mode_open: 'Open',
|
|
35
39
|
installation_mode_open_hint: 'Public framework',
|
|
@@ -39,6 +43,19 @@ const FALLBACK_EN = {
|
|
|
39
43
|
back: 'Back',
|
|
40
44
|
back_hint: 'Return to the previous step',
|
|
41
45
|
install: 'Install',
|
|
46
|
+
cancelled: 'Installation cancelled.',
|
|
47
|
+
multiselect_hint: '(space to select, enter to confirm)',
|
|
48
|
+
greenfield_label: 'Greenfield',
|
|
49
|
+
brownfield_label: 'Brownfield',
|
|
50
|
+
none: 'None',
|
|
51
|
+
auto_installed: 'auto-installed',
|
|
52
|
+
connected_via: 'Connected via {providers}',
|
|
53
|
+
target: 'Target',
|
|
54
|
+
yes: 'Yes',
|
|
55
|
+
no: 'No',
|
|
56
|
+
auto_detection_title: 'Auto-detection',
|
|
57
|
+
documentation_label: 'Documentation',
|
|
58
|
+
session_label: 'Session',
|
|
42
59
|
model_routing_label: 'Model routing',
|
|
43
60
|
model_routing_automatic: 'Automatic per task across all enabled models',
|
|
44
61
|
providers_label: 'Providers',
|
|
@@ -64,6 +81,7 @@ const FALLBACK_EN = {
|
|
|
64
81
|
agents_valid: 'All agents implement 8 protocols',
|
|
65
82
|
handoff_ok: 'Handoff protocol: OK',
|
|
66
83
|
validation_ok: 'Self-validation criteria: OK',
|
|
84
|
+
validation_failed_count: "{count} validation check(s) did not pass. Run 'npx chati-dev health' for details.",
|
|
67
85
|
constitution_ok: 'Constitution: 25 articles verified',
|
|
68
86
|
created_memories: 'Created .chati/memories/ (Memory Layer)',
|
|
69
87
|
installed_intelligence: 'Installed Intelligence Layer (Context Engine, Memory, Registry)',
|
|
@@ -84,6 +102,29 @@ const FALLBACK_EN = {
|
|
|
84
102
|
tos_declined: 'Terms of Use declined. Installation cancelled.',
|
|
85
103
|
tos_telemetry_enabled: 'Telemetry: enabled (anonymous, opt-out — disable with: npx chati-dev telemetry disable)',
|
|
86
104
|
tos_telemetry_disabled: 'Telemetry: disabled',
|
|
105
|
+
clickup_required: 'Internal mode requires an authorized ClickUp MCP connection in at least one selected CLI. Configure ClickUp in Claude, Codex or Grok, then retry.',
|
|
106
|
+
system_prerequisites_failed: 'System prerequisites not met:',
|
|
107
|
+
fix_prerequisites: 'Fix the issues above and try again.',
|
|
108
|
+
system_check: 'System check:',
|
|
109
|
+
created_provider_claude: 'Created .claude/commands/ (thin router)',
|
|
110
|
+
created_provider_gemini: 'Created .gemini/commands/ (TOML command)',
|
|
111
|
+
created_provider_codex: 'Created .agents/skills/chati/ (Codex skill)',
|
|
112
|
+
created_provider_grok: 'Created .grok/commands/ (native markdown command)',
|
|
113
|
+
validation_phase: 'Validation',
|
|
114
|
+
installation_phase: 'Installation',
|
|
115
|
+
phase_failed: '{phase} failed: {error}',
|
|
116
|
+
license_activation_title: 'License Activation',
|
|
117
|
+
license_activation_info: 'Your license key works across all projects on this machine.',
|
|
118
|
+
license_trial_info: 'Get a free 14-day trial at: https://chati.dev/pricing',
|
|
119
|
+
license_prompt: 'Enter your license key (press Enter to skip, activate later with: npx chati-dev activate):',
|
|
120
|
+
license_placeholder: 'CHATI-XXXX-XXXX-XXXX',
|
|
121
|
+
license_skipped: 'Skipped. Run: npx chati-dev activate --key=YOUR-KEY when ready.',
|
|
122
|
+
license_activating: 'Activating license...',
|
|
123
|
+
license_activated: 'License activated! Plan: {plan}, {days} day(s) remaining.',
|
|
124
|
+
license_activation_failed: 'Activation failed: {error}',
|
|
125
|
+
license_retry: 'Run: npx chati-dev activate --key=YOUR-KEY to try again.',
|
|
126
|
+
license_saved_invalid: 'Saved license is not valid on this machine: {reason}',
|
|
127
|
+
license_verify_failed: 'Could not verify the saved license: {error}',
|
|
87
128
|
},
|
|
88
129
|
agents: {
|
|
89
130
|
starting: 'Starting agent: {agent}',
|
|
@@ -137,6 +178,7 @@ export function loadLanguage(lang, targetDir = null) {
|
|
|
137
178
|
// Try to load from installed project i18n
|
|
138
179
|
const paths = [
|
|
139
180
|
targetDir && join(targetDir, resolveFrameworkDir(targetDir), 'i18n', `${lang}.yaml`),
|
|
181
|
+
join(__dirname, '..', '..', 'framework', 'i18n', `${lang}.yaml`),
|
|
140
182
|
join(__dirname, '..', '..', 'assets', 'i18n', `${lang}.yaml`),
|
|
141
183
|
].filter(Boolean);
|
|
142
184
|
|
package/src/wizard/index.js
CHANGED
|
@@ -14,7 +14,7 @@ import { validateInstallation } from '../installer/validator.js';
|
|
|
14
14
|
import { initCollector, track as telemetryTrack, flush as telemetryFlush } from '../telemetry/collector.js';
|
|
15
15
|
import { sendEvents } from '../telemetry/sender.js';
|
|
16
16
|
import { getTelemetryConfig } from '../telemetry/config.js';
|
|
17
|
-
import { t } from './i18n.js';
|
|
17
|
+
import { loadLanguage, t } from './i18n.js';
|
|
18
18
|
import { getLicenseKey, activateLicense, ensureCurrentMachineLicense, requireLicenseEntitlement } from '../license/client.js';
|
|
19
19
|
import { DEFAULT_MCPS } from '../config/mcp-configs.js';
|
|
20
20
|
import { IDE_CONFIGS } from '../config/ide-configs.js';
|
|
@@ -40,6 +40,10 @@ export async function runWizard(targetDir, options = {}) {
|
|
|
40
40
|
|
|
41
41
|
p.intro('Setting up chati.dev');
|
|
42
42
|
|
|
43
|
+
// Language is the first question and controls every subsequent wizard step.
|
|
44
|
+
let language = options.language || await stepLanguage();
|
|
45
|
+
loadLanguage(language);
|
|
46
|
+
|
|
43
47
|
await runLicenseActivationStep();
|
|
44
48
|
|
|
45
49
|
// Preflight: validate system prerequisites (Node >= 20, npm, Git, Playwright)
|
|
@@ -50,14 +54,11 @@ export async function runWizard(targetDir, options = {}) {
|
|
|
50
54
|
return ` ${icon} ${c.message}`;
|
|
51
55
|
}).join('\n');
|
|
52
56
|
if (!preflight.passed) {
|
|
53
|
-
p.log.error(
|
|
54
|
-
p.cancel('
|
|
57
|
+
p.log.error(`${t('installer.system_prerequisites_failed')}\n${preflightFmt}`);
|
|
58
|
+
p.cancel(t('installer.fix_prerequisites'));
|
|
55
59
|
process.exit(1);
|
|
56
60
|
}
|
|
57
|
-
p.log.success(
|
|
58
|
-
|
|
59
|
-
// Step 2: Language Selection
|
|
60
|
-
let language = options.language || await stepLanguage();
|
|
61
|
+
p.log.success(`${t('installer.system_check')}\n${preflightFmt}`);
|
|
61
62
|
|
|
62
63
|
// Step 2: Terms of Use (must accept to continue)
|
|
63
64
|
if (options.telemetry === undefined) {
|
|
@@ -156,7 +157,7 @@ export async function runWizard(targetDir, options = {}) {
|
|
|
156
157
|
}
|
|
157
158
|
clickupPreflight = options.clickupPreflight || checkClickUpMcp(selectedProviders);
|
|
158
159
|
if (!clickupPreflight.passed) {
|
|
159
|
-
p.log.error('
|
|
160
|
+
p.log.error(t('installer.clickup_required'));
|
|
160
161
|
continue;
|
|
161
162
|
}
|
|
162
163
|
}
|
|
@@ -229,10 +230,10 @@ export async function runWizard(targetDir, options = {}) {
|
|
|
229
230
|
|
|
230
231
|
// Show provider-specific command creation
|
|
231
232
|
const commandStepMap = {
|
|
232
|
-
'claude-code': '
|
|
233
|
-
'gemini-cli': '
|
|
234
|
-
'codex-cli': '
|
|
235
|
-
'grok-cli': '
|
|
233
|
+
'claude-code': t('installer.created_provider_claude'),
|
|
234
|
+
'gemini-cli': t('installer.created_provider_gemini'),
|
|
235
|
+
'codex-cli': t('installer.created_provider_codex'),
|
|
236
|
+
'grok-cli': t('installer.created_provider_grok'),
|
|
236
237
|
};
|
|
237
238
|
for (const cliIDE of selectedCLIIDEs) {
|
|
238
239
|
showStep(commandStepMap[cliIDE] || t('installer.created_commands'));
|
|
@@ -275,7 +276,7 @@ export async function runWizard(targetDir, options = {}) {
|
|
|
275
276
|
// Warn if any checks failed
|
|
276
277
|
if (validation.passed < validation.total) {
|
|
277
278
|
const failed = validation.total - validation.passed;
|
|
278
|
-
p.log.warn(
|
|
279
|
+
p.log.warn(t('installer.validation_failed_count', { count: failed }));
|
|
279
280
|
}
|
|
280
281
|
|
|
281
282
|
console.log();
|
|
@@ -316,8 +317,8 @@ export async function runWizard(targetDir, options = {}) {
|
|
|
316
317
|
return { success: true, config, validation };
|
|
317
318
|
} catch (err) {
|
|
318
319
|
installSpinner.stop();
|
|
319
|
-
const phase = err.message?.includes('validat') ? '
|
|
320
|
-
p.cancel(
|
|
320
|
+
const phase = err.message?.includes('validat') ? t('installer.validation_phase') : t('installer.installation_phase');
|
|
321
|
+
p.cancel(t('installer.phase_failed', { phase, error: err.message }));
|
|
321
322
|
return { success: false, error: err.message };
|
|
322
323
|
}
|
|
323
324
|
}
|
|
@@ -328,38 +329,38 @@ async function runLicenseActivationStep() {
|
|
|
328
329
|
try {
|
|
329
330
|
const status = await ensureCurrentMachineLicense({ key: existingKey });
|
|
330
331
|
if (status.status === 'VALID') return;
|
|
331
|
-
p.log.warn(
|
|
332
|
+
p.log.warn(t('installer.license_saved_invalid', { reason: status.reason || status.status }));
|
|
332
333
|
} catch (error) {
|
|
333
|
-
p.log.warn(
|
|
334
|
+
p.log.warn(t('installer.license_verify_failed', { error: error.message }));
|
|
334
335
|
}
|
|
335
336
|
}
|
|
336
337
|
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
338
|
+
p.note(
|
|
339
|
+
`${t('installer.license_activation_info')}\n${t('installer.license_trial_info')}`,
|
|
340
|
+
t('installer.license_activation_title'),
|
|
341
|
+
);
|
|
341
342
|
|
|
342
343
|
const keyInput = await p.text({
|
|
343
|
-
message: '
|
|
344
|
-
placeholder: '
|
|
344
|
+
message: t('installer.license_prompt'),
|
|
345
|
+
placeholder: t('installer.license_placeholder'),
|
|
345
346
|
});
|
|
346
347
|
|
|
347
348
|
if (p.isCancel(keyInput) || !keyInput?.trim()) {
|
|
348
|
-
console.log('
|
|
349
|
+
console.log(` ${t('installer.license_skipped')}\n`);
|
|
349
350
|
return;
|
|
350
351
|
}
|
|
351
352
|
|
|
352
|
-
const activateSpinner = createSpinner('
|
|
353
|
+
const activateSpinner = createSpinner(t('installer.license_activating'));
|
|
353
354
|
activateSpinner.start();
|
|
354
355
|
try {
|
|
355
356
|
const result = await activateLicense(null, keyInput.trim());
|
|
356
357
|
activateSpinner.stop();
|
|
357
358
|
const plan = result.plan ?? 'trial';
|
|
358
359
|
const days = result.days_remaining ?? '?';
|
|
359
|
-
console.log(` ✓
|
|
360
|
+
console.log(` ✓ ${t('installer.license_activated', { plan, days })}\n`);
|
|
360
361
|
} catch (err) {
|
|
361
362
|
activateSpinner.stop();
|
|
362
|
-
console.log(` ✗
|
|
363
|
-
console.log(
|
|
363
|
+
console.log(` ✗ ${t('installer.license_activation_failed', { error: err.message })}`);
|
|
364
|
+
console.log(` ${t('installer.license_retry')}\n`);
|
|
364
365
|
}
|
|
365
366
|
}
|
package/src/wizard/questions.js
CHANGED
|
@@ -9,6 +9,11 @@ import { supportedV2WizardProviders, wizardModelSuggestions } from '../installer
|
|
|
9
9
|
|
|
10
10
|
export const WIZARD_BACK = '__chati_wizard_back__';
|
|
11
11
|
|
|
12
|
+
function cancelInstallation() {
|
|
13
|
+
p.cancel(t('installer.cancelled'));
|
|
14
|
+
process.exit(0);
|
|
15
|
+
}
|
|
16
|
+
|
|
12
17
|
function backOption() {
|
|
13
18
|
return { value: WIZARD_BACK, label: `← ${t('installer.back')}`, hint: t('installer.back_hint') };
|
|
14
19
|
}
|
|
@@ -26,8 +31,7 @@ export async function stepLanguage() {
|
|
|
26
31
|
});
|
|
27
32
|
|
|
28
33
|
if (p.isCancel(language)) {
|
|
29
|
-
|
|
30
|
-
process.exit(0);
|
|
34
|
+
cancelInstallation();
|
|
31
35
|
}
|
|
32
36
|
|
|
33
37
|
// Load i18n strings from this point forward
|
|
@@ -45,7 +49,7 @@ export async function stepProjectType(targetDir, { allowBack = false } = {}) {
|
|
|
45
49
|
if (detection.suggestion === 'brownfield' && detection.confidence !== 'low') {
|
|
46
50
|
p.note(
|
|
47
51
|
`${success('✓')} ${t('installer.detected_brownfield')}\n${t('installer.suggestion_brownfield')}`,
|
|
48
|
-
dim('
|
|
52
|
+
dim(t('installer.auto_detection_title'))
|
|
49
53
|
);
|
|
50
54
|
}
|
|
51
55
|
|
|
@@ -60,8 +64,7 @@ export async function stepProjectType(targetDir, { allowBack = false } = {}) {
|
|
|
60
64
|
});
|
|
61
65
|
|
|
62
66
|
if (p.isCancel(projectType)) {
|
|
63
|
-
|
|
64
|
-
process.exit(0);
|
|
67
|
+
cancelInstallation();
|
|
65
68
|
}
|
|
66
69
|
|
|
67
70
|
return projectType;
|
|
@@ -101,19 +104,18 @@ export async function stepProviderSelection({ allowBack = false } = {}) {
|
|
|
101
104
|
options.push({
|
|
102
105
|
value: provider,
|
|
103
106
|
label: `${providerName}${suffix}`,
|
|
104
|
-
hint:
|
|
107
|
+
hint: t(`installer.provider_${provider}_hint`),
|
|
105
108
|
});
|
|
106
109
|
}
|
|
107
110
|
|
|
108
111
|
const selected = await p.multiselect({
|
|
109
|
-
message: `${t('installer.provider_selection_title')} ${dim(
|
|
112
|
+
message: `${t('installer.provider_selection_title')} ${dim(t('installer.multiselect_hint'))}`,
|
|
110
113
|
options: allowBack ? [...options, backOption()] : options,
|
|
111
114
|
required: true,
|
|
112
115
|
});
|
|
113
116
|
|
|
114
117
|
if (p.isCancel(selected)) {
|
|
115
|
-
|
|
116
|
-
process.exit(0);
|
|
118
|
+
cancelInstallation();
|
|
117
119
|
}
|
|
118
120
|
|
|
119
121
|
return selected.includes(WIZARD_BACK) ? WIZARD_BACK : selected;
|
|
@@ -134,8 +136,7 @@ export async function stepInstallationMode({ allowBack = false } = {}) {
|
|
|
134
136
|
initialValue: 'open',
|
|
135
137
|
});
|
|
136
138
|
if (p.isCancel(mode)) {
|
|
137
|
-
|
|
138
|
-
process.exit(0);
|
|
139
|
+
cancelInstallation();
|
|
139
140
|
}
|
|
140
141
|
return mode;
|
|
141
142
|
}
|
|
@@ -162,14 +163,13 @@ export async function stepEditorSelection({ allowBack = false } = {}) {
|
|
|
162
163
|
}));
|
|
163
164
|
|
|
164
165
|
const selected = await p.multiselect({
|
|
165
|
-
message: `${t('installer.editor_selection_title')} ${dim(
|
|
166
|
+
message: `${t('installer.editor_selection_title')} ${dim(t('installer.multiselect_hint'))}`,
|
|
166
167
|
options: allowBack ? [...options, backOption()] : options,
|
|
167
168
|
required: false,
|
|
168
169
|
});
|
|
169
170
|
|
|
170
171
|
if (p.isCancel(selected)) {
|
|
171
|
-
|
|
172
|
-
process.exit(0);
|
|
172
|
+
cancelInstallation();
|
|
173
173
|
}
|
|
174
174
|
|
|
175
175
|
return selected.includes(WIZARD_BACK) ? WIZARD_BACK : selected;
|
|
@@ -223,14 +223,13 @@ export async function stepIDESelection() {
|
|
|
223
223
|
}
|
|
224
224
|
|
|
225
225
|
const selectedIDEs = await p.multiselect({
|
|
226
|
-
message: `${t('installer.ide_selection_title')} ${dim(
|
|
226
|
+
message: `${t('installer.ide_selection_title')} ${dim(t('installer.multiselect_hint'))}`,
|
|
227
227
|
options,
|
|
228
228
|
required: true,
|
|
229
229
|
});
|
|
230
230
|
|
|
231
231
|
if (p.isCancel(selectedIDEs)) {
|
|
232
|
-
|
|
233
|
-
process.exit(0);
|
|
232
|
+
cancelInstallation();
|
|
234
233
|
}
|
|
235
234
|
|
|
236
235
|
// Filter out separator headers
|
|
@@ -269,13 +268,13 @@ export async function stepConfirmation(config, { allowBack = false } = {}) {
|
|
|
269
268
|
const editorIDEs = (selectedIDEs || []).filter(id => IDE_CONFIGS[id]?.group === 'editor');
|
|
270
269
|
const editorNames = editorIDEs.length > 0
|
|
271
270
|
? editorIDEs.map(id => IDE_CONFIGS[id]?.name || id).join(', ')
|
|
272
|
-
: '
|
|
271
|
+
: t('installer.none');
|
|
273
272
|
const mcpNames = selectedMCPs.length > 0
|
|
274
|
-
? `${selectedMCPs.join(', ')} (
|
|
275
|
-
: '
|
|
273
|
+
? `${selectedMCPs.join(', ')} (${t('installer.auto_installed')})`
|
|
274
|
+
: t('installer.none');
|
|
276
275
|
|
|
277
276
|
const summaryData = {
|
|
278
|
-
[t('installer.project_label')]: `${projectName} (${projectType === 'greenfield' ? '
|
|
277
|
+
[t('installer.project_label')]: `${projectName} (${projectType === 'greenfield' ? t('installer.greenfield_label') : t('installer.brownfield_label')})`,
|
|
279
278
|
[t('installer.language_label')]: langName,
|
|
280
279
|
[t('installer.providers_label')]: providersDisplay,
|
|
281
280
|
[t('installer.installation_mode_label')]: installationMode === 'internal'
|
|
@@ -289,7 +288,7 @@ export async function stepConfirmation(config, { allowBack = false } = {}) {
|
|
|
289
288
|
}
|
|
290
289
|
|
|
291
290
|
if (installationMode === 'internal') {
|
|
292
|
-
summaryData.ClickUp =
|
|
291
|
+
summaryData.ClickUp = t('installer.connected_via', { providers: (clickupPreflight?.connected_providers || []).join(', ') });
|
|
293
292
|
}
|
|
294
293
|
|
|
295
294
|
summaryData[t('installer.mcps_label')] = mcpNames;
|
|
@@ -299,7 +298,7 @@ export async function stepConfirmation(config, { allowBack = false } = {}) {
|
|
|
299
298
|
showSummary(summaryData);
|
|
300
299
|
|
|
301
300
|
console.log();
|
|
302
|
-
console.log(` ${t('installer.will_install')}
|
|
301
|
+
console.log(` ${t('installer.will_install')}`);
|
|
303
302
|
showChecklist([
|
|
304
303
|
t('installer.agents_count'),
|
|
305
304
|
t('installer.workflows_count'),
|
|
@@ -310,7 +309,7 @@ export async function stepConfirmation(config, { allowBack = false } = {}) {
|
|
|
310
309
|
]);
|
|
311
310
|
|
|
312
311
|
console.log();
|
|
313
|
-
console.log(` ${dim('
|
|
312
|
+
console.log(` ${dim(`${t('installer.target')}:`)} ${config.targetDir}`);
|
|
314
313
|
|
|
315
314
|
const proceed = allowBack
|
|
316
315
|
? await p.select({
|
|
@@ -324,13 +323,14 @@ export async function stepConfirmation(config, { allowBack = false } = {}) {
|
|
|
324
323
|
: await p.confirm({
|
|
325
324
|
message: t('installer.proceed'),
|
|
326
325
|
initialValue: true,
|
|
326
|
+
active: t('installer.yes'),
|
|
327
|
+
inactive: t('installer.no'),
|
|
327
328
|
});
|
|
328
329
|
|
|
329
330
|
if (proceed === WIZARD_BACK) return WIZARD_BACK;
|
|
330
331
|
|
|
331
332
|
if (p.isCancel(proceed) || !proceed) {
|
|
332
|
-
|
|
333
|
-
process.exit(0);
|
|
333
|
+
cancelInstallation();
|
|
334
334
|
}
|
|
335
335
|
|
|
336
336
|
return true;
|
|
@@ -354,6 +354,8 @@ export async function stepTermsOfUse() {
|
|
|
354
354
|
const accepted = await p.confirm({
|
|
355
355
|
message: t('installer.tos_accept'),
|
|
356
356
|
initialValue: true,
|
|
357
|
+
active: t('installer.yes'),
|
|
358
|
+
inactive: t('installer.no'),
|
|
357
359
|
});
|
|
358
360
|
|
|
359
361
|
if (p.isCancel(accepted) || !accepted) {
|