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.
@@ -1,8 +1,8 @@
1
1
  # chati.dev Configuration
2
- version: "4.5.9"
2
+ version: "4.5.10"
3
3
  installed_at: "2026-02-07T10:00:00Z"
4
4
  updated_at: "2026-08-27T00:00:00Z"
5
- installer_version: "4.5.9"
5
+ installer_version: "4.5.10"
6
6
  project_type: greenfield
7
7
  language: en
8
8
  ides: []
@@ -1,7 +1,7 @@
1
1
  # Chati.dev System Context
2
2
 
3
3
  ## Framework
4
- - **Version**: 4.5.9
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)
@@ -3,7 +3,7 @@
3
3
  # and by the Health Check for system integrity validation.
4
4
 
5
5
  metadata:
6
- version: "4.5.9"
6
+ version: "4.5.10"
7
7
  last_updated: "2026-08-27T00:00:00Z"
8
8
  entity_count: 109
9
9
  checksum_algorithm: sha256
@@ -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}"
@@ -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}"
@@ -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}"
@@ -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}"
@@ -1,5 +1,5 @@
1
1
  {
2
- "createdAt": "2026-08-27T12:53:59.633Z",
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": "2a0de0eae5e361cc23b1777573b3dadf4676ce8c231a3022dd14ebac385eb89f",
101
- "size": 2669,
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": "b76681d1bdd7c75e79733a520fc0c929858dc9399348dbb8ba30380e77c32849",
126
- "size": 1217,
125
+ "hash": "6bd0257d5c92c10733782ac68c0d1438571b68e2b162243c9494b0a912f6fe73",
126
+ "size": 1218,
127
127
  "type": "md"
128
128
  },
129
129
  "data/entity-registry.yaml": {
130
- "hash": "c4b2005f61055a6f1d04c674ba369dbb997dda8d7f81991d6012f25b5a89210f",
131
- "size": 34605,
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": "b5e9bf16c930a61543b17088a7267caea0c94eb32bfe0ae2e874ba15f5cdb4aa",
381
- "size": 4929,
380
+ "hash": "6b1ede4a442a86194d561d4a7a2fc5bf2259d23b23ae48eeaa973cf8fce79f33",
381
+ "size": 8046,
382
382
  "type": "yaml"
383
383
  },
384
384
  "i18n/es.yaml": {
385
- "hash": "5407e4c6adba697da8bf2e2dbdf39f1fd32935326166852d5b488487148320f1",
386
- "size": 5204,
385
+ "hash": "2542bf4a6b68883cea81021ed5ea84f5f05368be3a47b79d1b797753966a18ed",
386
+ "size": 8632,
387
387
  "type": "yaml"
388
388
  },
389
389
  "i18n/fr.yaml": {
390
- "hash": "2e3b50c56ee5f05f81c4e48fd048c679baae2280e3a9c03c589f8f82989eded4",
391
- "size": 5276,
390
+ "hash": "58c8d34b1d752592dbd6beb32b240475fdf297847558e8589174d713bae439c8",
391
+ "size": 8777,
392
392
  "type": "yaml"
393
393
  },
394
394
  "i18n/pt.yaml": {
395
- "hash": "da65aff46c8f16b1c6fd6be10b89b566253eec71fea0a42094878dcc9e4671fa",
396
- "size": 5147,
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.9"
1355
+ "version": "4.5.10"
1356
1356
  }
@@ -1 +1 @@
1
- Hb7c+de1wUKAcc4qkLRzsVYqMzP02CNhfXf+bcp5ezJLqsH+KyZ7sOvQUpRf89mWC57jrLu/dscvchEyVdxQBQ==
1
+ IEfPaGbjqj36vXbd2ODiFxMhP6C9zd7GCMIkHitsiRCQ4nht3ymf69h9kXqnyGqMgrpiiFKs1Kn3/K0UzxJqAw==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chati-dev",
3
- "version": "4.5.9",
3
+ "version": "4.5.10",
4
4
  "description": "AI-Powered Multi-Agent Orchestration System - Structured vibe coding for Full Stack Development",
5
5
  "type": "module",
6
6
  "bin": {
@@ -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('Documentation:')} .chati.dev/constitution.md`);
54
- console.log(`${dim('Session:')} .chati/session.yaml`);
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
  /**
@@ -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
 
@@ -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(`System prerequisites not met:\n${preflightFmt}`);
54
- p.cancel('Fix the issues above and try again.');
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(`System check:\n${preflightFmt}`);
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('Internal mode requires an authorized ClickUp MCP connection in at least one selected CLI. Configure ClickUp in Claude, Codex or Grok, then retry.');
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': 'Created .claude/commands/ (thin router)',
233
- 'gemini-cli': 'Created .gemini/commands/ (TOML command)',
234
- 'codex-cli': 'Created .agents/skills/chati/ (Codex skill)',
235
- 'grok-cli': 'Created .grok/commands/ (native markdown command)',
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(`${failed} validation check(s) did not pass. Run 'npx chati-dev health' for details.`);
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') ? 'Validation' : 'Installation';
320
- p.cancel(`${phase} failed: ${err.message}`);
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(`Saved license is not valid on this machine: ${status.reason || status.status}`);
332
+ p.log.warn(t('installer.license_saved_invalid', { reason: status.reason || status.status }));
332
333
  } catch (error) {
333
- p.log.warn(`Could not verify the saved license: ${error.message}`);
334
+ p.log.warn(t('installer.license_verify_failed', { error: error.message }));
334
335
  }
335
336
  }
336
337
 
337
- console.log('\n ┌─ License Activation ─────────────────────────────────────────┐');
338
- console.log(' │ Your license key works across ALL projects on this machine.');
339
- console.log(' │ Get a free 14-day trial at: https://chati.dev/pricing │');
340
- console.log(' └──────────────────────────────────────────────────────────────┘\n');
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: 'Enter your license key (press Enter to skip — activate later with: npx chati-dev activate):',
344
- placeholder: 'CHATI-XXXX-XXXX-XXXX',
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(' Skipped. Run: npx chati-dev activate --key=YOUR-KEY when ready.\n');
349
+ console.log(` ${t('installer.license_skipped')}\n`);
349
350
  return;
350
351
  }
351
352
 
352
- const activateSpinner = createSpinner('Activating license...');
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(` ✓ License activated! Plan: ${plan} ${days} day(s) remaining.\n`);
360
+ console.log(` ✓ ${t('installer.license_activated', { plan, days })}\n`);
360
361
  } catch (err) {
361
362
  activateSpinner.stop();
362
- console.log(` ✗ Activation failed: ${err.message}`);
363
- console.log(' Run: npx chati-dev activate --key=YOUR-KEY to try again.\n');
363
+ console.log(` ✗ ${t('installer.license_activation_failed', { error: err.message })}`);
364
+ console.log(` ${t('installer.license_retry')}\n`);
364
365
  }
365
366
  }
@@ -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
- p.cancel('Installation cancelled.');
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('Auto-detection')
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
- p.cancel('Installation cancelled.');
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: config.description,
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('(space to select, enter to confirm)')}`,
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
- p.cancel('Installation cancelled.');
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
- p.cancel('Installation cancelled.');
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('(space to select, enter to confirm)')}`,
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
- p.cancel('Installation cancelled.');
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('(space to select, enter to confirm)')}`,
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
- p.cancel('Installation cancelled.');
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
- : 'None';
271
+ : t('installer.none');
273
272
  const mcpNames = selectedMCPs.length > 0
274
- ? `${selectedMCPs.join(', ')} (auto-installed)`
275
- : 'None';
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' ? 'Greenfield' : 'Brownfield'})`,
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 = `Connected via ${(clickupPreflight?.connected_providers || []).join(', ')}`;
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('Target:')} ${config.targetDir}`);
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
- p.cancel('Installation cancelled.');
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) {