@jaimevalasek/aioson 1.5.1 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/docs/design-previews/aurora-command-ui-website.html +884 -0
- package/docs/design-previews/aurora-command-ui.html +682 -0
- package/docs/design-previews/bold-editorial-ui-website.html +658 -0
- package/docs/design-previews/bold-editorial-ui.html +717 -0
- package/docs/design-previews/clean-saas-ui-website.html +1202 -0
- package/docs/design-previews/clean-saas-ui.html +549 -0
- package/docs/design-previews/cognitive-core-ui-website.html +1009 -0
- package/docs/design-previews/cognitive-core-ui.html +463 -0
- package/docs/design-previews/glassmorphism-ui-website.html +572 -0
- package/docs/design-previews/glassmorphism-ui.html +886 -0
- package/docs/design-previews/index.html +699 -0
- package/docs/design-previews/interface-design-website.html +1187 -0
- package/docs/design-previews/interface-design.html +513 -0
- package/docs/design-previews/neo-brutalist-ui-website.html +621 -0
- package/docs/design-previews/neo-brutalist-ui.html +797 -0
- package/docs/design-previews/premium-command-center-ui-website.html +1217 -0
- package/docs/design-previews/premium-command-center-ui.html +552 -0
- package/docs/design-previews/warm-craft-ui-website.html +684 -0
- package/docs/design-previews/warm-craft-ui.html +739 -0
- package/docs/en/cli-reference.md +20 -9
- package/docs/pt/README.md +7 -0
- package/docs/pt/agent-sharding.md +132 -0
- package/docs/pt/agentes.md +8 -2
- package/docs/pt/busca-de-contexto.md +129 -0
- package/docs/pt/cache-de-contexto.md +156 -0
- package/docs/pt/comandos-cli.md +28 -0
- package/docs/pt/design-hybrid-forge.md +107 -0
- package/docs/pt/inicio-rapido.md +54 -3
- package/docs/pt/inteligencia-adaptativa.md +324 -0
- package/docs/pt/monitor-de-contexto.md +104 -0
- package/docs/pt/recuperacao-de-sessao.md +125 -0
- package/docs/pt/sandbox.md +125 -0
- package/docs/pt/skills.md +98 -6
- package/package.json +1 -1
- package/src/agent-loader.js +280 -0
- package/src/cli.js +94 -0
- package/src/commands/agent-loader.js +85 -0
- package/src/commands/context-cache.js +90 -0
- package/src/commands/context-monitor.js +92 -0
- package/src/commands/context-search.js +66 -0
- package/src/commands/design-hybrid-options.js +385 -0
- package/src/commands/health.js +214 -0
- package/src/commands/init.js +54 -13
- package/src/commands/install.js +52 -13
- package/src/commands/learning-evolve.js +355 -0
- package/src/commands/live.js +34 -0
- package/src/commands/recovery.js +43 -0
- package/src/commands/sandbox.js +37 -0
- package/src/commands/setup-context.js +22 -2
- package/src/commands/setup.js +178 -0
- package/src/commands/skill.js +79 -32
- package/src/commands/tool-registry-cmd.js +232 -0
- package/src/commands/update.js +7 -0
- package/src/constants.js +9 -0
- package/src/context-cache.js +159 -0
- package/src/context-search.js +326 -0
- package/src/design-variation-catalog.js +503 -0
- package/src/i18n/messages/en.js +32 -2
- package/src/i18n/messages/es.js +30 -2
- package/src/i18n/messages/fr.js +30 -2
- package/src/i18n/messages/pt-BR.js +32 -2
- package/src/install-animation.js +260 -0
- package/src/install-profile.js +143 -0
- package/src/install-wizard.js +474 -0
- package/src/installer.js +38 -10
- package/src/parser.js +7 -1
- package/src/recovery-context-session.js +154 -0
- package/src/runtime-store.js +97 -1
- package/src/sandbox.js +177 -0
- package/src/tool-executor.js +94 -0
- package/src/updater.js +11 -3
- package/template/.aioson/agents/analyst.md +58 -3
- package/template/.aioson/agents/architect.md +38 -0
- package/template/.aioson/agents/design-hybrid-forge.md +127 -0
- package/template/.aioson/agents/dev.md +103 -0
- package/template/.aioson/agents/deyvin.md +57 -0
- package/template/.aioson/agents/pm.md +58 -0
- package/template/.aioson/agents/product.md +28 -0
- package/template/.aioson/agents/qa.md +79 -0
- package/template/.aioson/agents/setup.md +65 -3
- package/template/.aioson/agents/sheldon.md +107 -6
- package/template/.aioson/agents/tester.md +156 -0
- package/template/.aioson/config.md +15 -0
- package/template/.aioson/context/forensics/.gitkeep +0 -0
- package/template/.aioson/context/seeds/seed-example.md +27 -0
- package/template/.aioson/context/user-profile.md +42 -0
- package/template/.aioson/locales/en/agents/setup.md +33 -1
- package/template/.aioson/locales/es/agents/setup.md +33 -1
- package/template/.aioson/locales/fr/agents/setup.md +33 -1
- package/template/.aioson/locales/pt-BR/agents/setup.md +33 -1
- package/template/.aioson/skills/design/aurora-command-ui/SKILL.md +243 -0
- package/template/.aioson/skills/design/aurora-command-ui/references/art-direction.md +293 -0
- package/template/.aioson/skills/design/aurora-command-ui/references/components.md +827 -0
- package/template/.aioson/skills/design/aurora-command-ui/references/dashboards.md +250 -0
- package/template/.aioson/skills/design/aurora-command-ui/references/design-tokens.md +585 -0
- package/template/.aioson/skills/design/aurora-command-ui/references/motion.md +365 -0
- package/template/.aioson/skills/design/aurora-command-ui/references/patterns.md +482 -0
- package/template/.aioson/skills/design/aurora-command-ui/references/websites.md +387 -0
- package/template/.aioson/skills/design/glassmorphism-ui/SKILL.md +222 -0
- package/template/.aioson/skills/design/glassmorphism-ui/references/art-direction.md +159 -0
- package/template/.aioson/skills/design/glassmorphism-ui/references/components.md +498 -0
- package/template/.aioson/skills/design/glassmorphism-ui/references/dashboards.md +236 -0
- package/template/.aioson/skills/design/glassmorphism-ui/references/design-tokens.md +274 -0
- package/template/.aioson/skills/design/glassmorphism-ui/references/motion.md +355 -0
- package/template/.aioson/skills/design/glassmorphism-ui/references/patterns.md +198 -0
- package/template/.aioson/skills/design/glassmorphism-ui/references/websites.md +307 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/SKILL.md +213 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/references/art-direction.md +228 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/references/components.md +855 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/references/dashboards.md +334 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/references/design-tokens.md +342 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/references/motion.md +286 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/references/patterns.md +458 -0
- package/template/.aioson/skills/design/neo-brutalist-ui/references/websites.md +723 -0
- package/template/.aioson/skills/process/aioson-spec-driven/SKILL.md +45 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/approval-gates.md +109 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/artifact-map.md +44 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/classification-map.md +37 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/hardening-lane.md +49 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/maintenance-and-state.md +66 -0
- package/template/.aioson/skills/process/aioson-spec-driven/references/ui-language.md +75 -0
- package/template/.aioson/skills/process/design-hybrid-forge/SKILL.md +144 -0
- package/template/.aioson/skills/process/design-hybrid-forge/references/crossover-protocol.md +221 -0
- package/template/.aioson/skills/process/design-hybrid-forge/references/naming-registry.md +88 -0
- package/template/.aioson/skills/process/design-hybrid-forge/references/output-contract.md +291 -0
- package/template/.aioson/skills/process/design-hybrid-forge/references/pair-compatibility.md +117 -0
- package/template/.aioson/skills/process/design-hybrid-forge/references/quality-gates.md +188 -0
- package/template/.aioson/skills/process/design-hybrid-forge/references/variation-library.md +125 -0
- package/template/AGENTS.md +23 -1
- package/template/CLAUDE.md +1 -0
|
@@ -0,0 +1,503 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
function pickText(value, locale) {
|
|
4
|
+
if (!value || typeof value !== 'object') return String(value || '');
|
|
5
|
+
if (locale === 'pt-BR' && value['pt-BR']) return value['pt-BR'];
|
|
6
|
+
return value.en || Object.values(value)[0] || '';
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const DESIGN_VARIATION_GROUPS = [
|
|
10
|
+
{
|
|
11
|
+
id: 'style_modes',
|
|
12
|
+
title: {
|
|
13
|
+
en: 'Style modes',
|
|
14
|
+
'pt-BR': 'Modos de estilo'
|
|
15
|
+
},
|
|
16
|
+
guidance: {
|
|
17
|
+
en: 'Choose 1-3 overall visual attitudes.',
|
|
18
|
+
'pt-BR': 'Escolha de 1 a 3 atitudes visuais gerais.'
|
|
19
|
+
},
|
|
20
|
+
options: [
|
|
21
|
+
{
|
|
22
|
+
id: 'classic-editorial',
|
|
23
|
+
label: { en: 'Classic editorial', 'pt-BR': 'Clássico editorial' },
|
|
24
|
+
description: {
|
|
25
|
+
en: 'Measured hierarchy, serif authority, quieter luxury.',
|
|
26
|
+
'pt-BR': 'Hierarquia medida, autoridade com serifa, luxo mais contido.'
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
id: 'extravagant-maximalist',
|
|
31
|
+
label: { en: 'Extravagant / maximalist', 'pt-BR': 'Extravagante / maximalista' },
|
|
32
|
+
description: {
|
|
33
|
+
en: 'Dense layers, bold color, deliberate visual abundance.',
|
|
34
|
+
'pt-BR': 'Camadas densas, cor forte, abundância visual deliberada.'
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: 'cinematic-immersive',
|
|
39
|
+
label: { en: 'Cinematic / immersive', 'pt-BR': 'Cinematográfico / imersivo' },
|
|
40
|
+
description: {
|
|
41
|
+
en: 'Atmospheric storytelling, dramatic contrast, scene-based sections.',
|
|
42
|
+
'pt-BR': 'Narrativa atmosférica, contraste dramático, seções como cenas.'
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
id: 'playful-dopamine',
|
|
47
|
+
label: { en: 'Playful / dopamine', 'pt-BR': 'Lúdico / dopamina' },
|
|
48
|
+
description: {
|
|
49
|
+
en: 'Vibrant palettes, optimistic energy, expressive details.',
|
|
50
|
+
'pt-BR': 'Paletas vibrantes, energia otimista, detalhes expressivos.'
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
id: 'neo-brutalist',
|
|
55
|
+
label: { en: 'Neo-brutalist / anti-design', 'pt-BR': 'Neo-brutalista / anti-design' },
|
|
56
|
+
description: {
|
|
57
|
+
en: 'Hard edges, visible structure, refusal of polished sameness.',
|
|
58
|
+
'pt-BR': 'Arestas duras, estrutura visível, rejeição da polidez genérica.'
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
id: 'retrofuturist',
|
|
63
|
+
label: { en: 'Retrofuturist', 'pt-BR': 'Retrofuturista' },
|
|
64
|
+
description: {
|
|
65
|
+
en: 'Chrome, sci-fi nostalgia, arcade optimism, future-through-past mood.',
|
|
66
|
+
'pt-BR': 'Cromado, nostalgia sci-fi, otimismo arcade, futuro visto pelo passado.'
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
id: 'luxury-modern',
|
|
71
|
+
label: { en: 'Luxury modern', 'pt-BR': 'Luxo moderno' },
|
|
72
|
+
description: {
|
|
73
|
+
en: 'High restraint, premium spacing, selective ornament, strong finish.',
|
|
74
|
+
'pt-BR': 'Alto refinamento, respiro premium, ornamento seletivo, acabamento forte.'
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
id: 'collage-handmade',
|
|
79
|
+
label: { en: 'Collage / handmade', 'pt-BR': 'Colagem / artesanal' },
|
|
80
|
+
description: {
|
|
81
|
+
en: 'Cutout rhythm, mixed media, imperfect but intentional craft.',
|
|
82
|
+
'pt-BR': 'Ritmo de recorte, mixed media, imperfeição intencional.'
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
id: 'layout_moves',
|
|
89
|
+
title: { en: 'Layout moves', 'pt-BR': 'Movimentos de layout' },
|
|
90
|
+
guidance: {
|
|
91
|
+
en: 'Choose 1-3 layout signatures.',
|
|
92
|
+
'pt-BR': 'Escolha de 1 a 3 assinaturas de layout.'
|
|
93
|
+
},
|
|
94
|
+
options: [
|
|
95
|
+
{
|
|
96
|
+
id: 'asymmetric-composition',
|
|
97
|
+
label: { en: 'Asymmetric composition', 'pt-BR': 'Composição assimétrica' },
|
|
98
|
+
description: {
|
|
99
|
+
en: 'Uneven weight, offset blocks, tension instead of centered sameness.',
|
|
100
|
+
'pt-BR': 'Peso desigual, blocos deslocados, tensão no lugar da simetria genérica.'
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
id: 'narrative-scroll',
|
|
105
|
+
label: { en: 'Narrative scroll scenes', 'pt-BR': 'Scroll narrativo em cenas' },
|
|
106
|
+
description: {
|
|
107
|
+
en: 'Sections behave like chapters rather than stacked cards.',
|
|
108
|
+
'pt-BR': 'As seções se comportam como capítulos, não como pilhas de cards.'
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
id: 'experimental-navigation',
|
|
113
|
+
label: { en: 'Experimental navigation', 'pt-BR': 'Navegação experimental' },
|
|
114
|
+
description: {
|
|
115
|
+
en: 'Hidden drawers, radial ideas, map-like exploration, non-standard entry points.',
|
|
116
|
+
'pt-BR': 'Gavetas ocultas, ideias radiais, exploração em mapa, entradas não convencionais.'
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
id: 'dense-mosaic',
|
|
121
|
+
label: { en: 'Dense mosaic', 'pt-BR': 'Mosaico denso' },
|
|
122
|
+
description: {
|
|
123
|
+
en: 'Many surfaces, varied card sizes, information collage.',
|
|
124
|
+
'pt-BR': 'Muitas superfícies, tamanhos variados de cards, colagem de informação.'
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
id: 'split-screen',
|
|
129
|
+
label: { en: 'Split-screen contrast', 'pt-BR': 'Contraste em tela dividida' },
|
|
130
|
+
description: {
|
|
131
|
+
en: 'Persistent tension between two visual zones.',
|
|
132
|
+
'pt-BR': 'Tensão persistente entre duas zonas visuais.'
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
id: 'hero-signature',
|
|
137
|
+
label: { en: 'Signature hero structure', 'pt-BR': 'Hero com assinatura estrutural' },
|
|
138
|
+
description: {
|
|
139
|
+
en: 'Unmistakable opening composition that defines the whole system.',
|
|
140
|
+
'pt-BR': 'Composição de abertura marcante que define o sistema inteiro.'
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
]
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
id: 'motion_system',
|
|
147
|
+
title: { en: 'Motion system', 'pt-BR': 'Sistema de motion' },
|
|
148
|
+
guidance: {
|
|
149
|
+
en: 'Choose 0-3 motion directions.',
|
|
150
|
+
'pt-BR': 'Escolha de 0 a 3 direções de motion.'
|
|
151
|
+
},
|
|
152
|
+
options: [
|
|
153
|
+
{
|
|
154
|
+
id: 'restrained-microinteractions',
|
|
155
|
+
label: { en: 'Restrained microinteractions', 'pt-BR': 'Microinterações contidas' },
|
|
156
|
+
description: {
|
|
157
|
+
en: 'Tight, functional feedback without spectacle.',
|
|
158
|
+
'pt-BR': 'Feedback preciso e funcional, sem espetáculo gratuito.'
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
id: 'kinetic-typography',
|
|
163
|
+
label: { en: 'Kinetic typography', 'pt-BR': 'Tipografia cinética' },
|
|
164
|
+
description: {
|
|
165
|
+
en: 'Animated type as a primary storytelling layer.',
|
|
166
|
+
'pt-BR': 'Tipografia animada como camada principal de narrativa.'
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
id: 'scroll-driven-scenes',
|
|
171
|
+
label: { en: 'Scroll-driven scenes', 'pt-BR': 'Cenas guiadas por scroll' },
|
|
172
|
+
description: {
|
|
173
|
+
en: 'Sections animate from scroll progress instead of generic reveal-once effects.',
|
|
174
|
+
'pt-BR': 'Seções animam pelo progresso do scroll, não por reveals genéricos.'
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
id: 'view-transitions',
|
|
179
|
+
label: { en: 'View transitions', 'pt-BR': 'Transições entre views' },
|
|
180
|
+
description: {
|
|
181
|
+
en: 'Navigation carries continuity across screens and states.',
|
|
182
|
+
'pt-BR': 'A navegação carrega continuidade entre telas e estados.'
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
id: 'cursor-reactive',
|
|
187
|
+
label: { en: 'Cursor-reactive motion', 'pt-BR': 'Motion reativo ao cursor' },
|
|
188
|
+
description: {
|
|
189
|
+
en: 'Pointer proximity, hover depth, reactive highlights.',
|
|
190
|
+
'pt-BR': 'Proximidade do ponteiro, profundidade no hover, highlights reativos.'
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
id: 'gamified-feedback',
|
|
195
|
+
label: { en: 'Gamified feedback', 'pt-BR': 'Feedback gamificado' },
|
|
196
|
+
description: {
|
|
197
|
+
en: 'Playful state changes, reward loops, delight moments.',
|
|
198
|
+
'pt-BR': 'Mudanças de estado lúdicas, loops de recompensa, momentos de delight.'
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
]
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
id: 'materials_textures',
|
|
205
|
+
title: { en: 'Materials and textures', 'pt-BR': 'Materiais e texturas' },
|
|
206
|
+
guidance: {
|
|
207
|
+
en: 'Choose 0-3 surface languages.',
|
|
208
|
+
'pt-BR': 'Escolha de 0 a 3 linguagens de superfície.'
|
|
209
|
+
},
|
|
210
|
+
options: [
|
|
211
|
+
{
|
|
212
|
+
id: 'glass-layers',
|
|
213
|
+
label: { en: 'Glass layers', 'pt-BR': 'Camadas de vidro' },
|
|
214
|
+
description: {
|
|
215
|
+
en: 'Blur, translucency, luminous edges, depth through substrate.',
|
|
216
|
+
'pt-BR': 'Blur, translucidez, bordas luminosas, profundidade via substrato.'
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
id: 'grain-noise',
|
|
221
|
+
label: { en: 'Grain / noise', 'pt-BR': 'Grão / ruído' },
|
|
222
|
+
description: {
|
|
223
|
+
en: 'Controlled texture to break digital smoothness.',
|
|
224
|
+
'pt-BR': 'Textura controlada para quebrar a suavidade digital.'
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
id: 'paper-editorial',
|
|
229
|
+
label: { en: 'Paper / editorial tactility', 'pt-BR': 'Papel / tato editorial' },
|
|
230
|
+
description: {
|
|
231
|
+
en: 'Warm surfaces, print-like rhythm, subtle shadow and fiber cues.',
|
|
232
|
+
'pt-BR': 'Superfícies quentes, ritmo de impresso, sombras e fibras sutis.'
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
id: 'chrome-metallic',
|
|
237
|
+
label: { en: 'Chrome / metallic', 'pt-BR': 'Chrome / metálico' },
|
|
238
|
+
description: {
|
|
239
|
+
en: 'Specular highlights, future-luxury finish, reflective details.',
|
|
240
|
+
'pt-BR': 'Highlights especulares, acabamento de luxo futurista, reflexos.'
|
|
241
|
+
}
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
id: 'soft-neumorphic',
|
|
245
|
+
label: { en: 'Soft neumorphic tactility', 'pt-BR': 'Tatilidade neumórfica suave' },
|
|
246
|
+
description: {
|
|
247
|
+
en: 'Raised/inset touchable controls used with restraint.',
|
|
248
|
+
'pt-BR': 'Controles elevados/escavados com sensação tátil usados com moderação.'
|
|
249
|
+
}
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
id: 'collage-cutout',
|
|
253
|
+
label: { en: 'Collage / cutout', 'pt-BR': 'Colagem / recorte' },
|
|
254
|
+
description: {
|
|
255
|
+
en: 'Layered fragments, taped edges, mixed media feeling.',
|
|
256
|
+
'pt-BR': 'Fragmentos em camadas, bordas coladas, sensação de mixed media.'
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
]
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
id: 'typography_moves',
|
|
263
|
+
title: { en: 'Typography moves', 'pt-BR': 'Movimentos tipográficos' },
|
|
264
|
+
guidance: {
|
|
265
|
+
en: 'Choose 1-3 type directions.',
|
|
266
|
+
'pt-BR': 'Escolha de 1 a 3 direções tipográficas.'
|
|
267
|
+
},
|
|
268
|
+
options: [
|
|
269
|
+
{
|
|
270
|
+
id: 'bold-display',
|
|
271
|
+
label: { en: 'Bold display type', 'pt-BR': 'Display tipográfico forte' },
|
|
272
|
+
description: {
|
|
273
|
+
en: 'Oversized headlines with strong personality.',
|
|
274
|
+
'pt-BR': 'Títulos grandes com personalidade forte.'
|
|
275
|
+
}
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
id: 'variable-font-axes',
|
|
279
|
+
label: { en: 'Variable font axes', 'pt-BR': 'Eixos de fonte variável' },
|
|
280
|
+
description: {
|
|
281
|
+
en: 'Weight/width/optical-size variation used as design material.',
|
|
282
|
+
'pt-BR': 'Variação de peso/largura/tamanho óptico usada como material de design.'
|
|
283
|
+
}
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
id: 'serif-revival',
|
|
287
|
+
label: { en: 'Serif revival', 'pt-BR': 'Retorno das serifas' },
|
|
288
|
+
description: {
|
|
289
|
+
en: 'Warmth, authority, or cultural depth against digital fatigue.',
|
|
290
|
+
'pt-BR': 'Calor, autoridade ou profundidade cultural contra a fadiga digital.'
|
|
291
|
+
}
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
id: 'mono-rails',
|
|
295
|
+
label: { en: 'Mono rails', 'pt-BR': 'Trilhos mono' },
|
|
296
|
+
description: {
|
|
297
|
+
en: 'Technical labels and metadata rhythm as a structural device.',
|
|
298
|
+
'pt-BR': 'Labels técnicos e ritmo de metadata como dispositivo estrutural.'
|
|
299
|
+
}
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
id: 'compressed-headlines',
|
|
303
|
+
label: { en: 'Compressed headlines', 'pt-BR': 'Headlines comprimidos' },
|
|
304
|
+
description: {
|
|
305
|
+
en: 'Tall or condensed drama for cinematic or editorial systems.',
|
|
306
|
+
'pt-BR': 'Drama alto ou condensado para sistemas cinematográficos ou editoriais.'
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
id: 'mixed-type-system',
|
|
311
|
+
label: { en: 'Mixed type system', 'pt-BR': 'Sistema tipográfico misto' },
|
|
312
|
+
description: {
|
|
313
|
+
en: 'Two or more families with clear role separation.',
|
|
314
|
+
'pt-BR': 'Duas ou mais famílias com papéis bem separados.'
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
]
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
id: 'advanced_css',
|
|
321
|
+
title: { en: 'Advanced CSS', 'pt-BR': 'CSS avançado' },
|
|
322
|
+
guidance: {
|
|
323
|
+
en: 'Choose 0-4 implementation techniques.',
|
|
324
|
+
'pt-BR': 'Escolha de 0 a 4 técnicas de implementação.'
|
|
325
|
+
},
|
|
326
|
+
options: [
|
|
327
|
+
{
|
|
328
|
+
id: 'scroll-driven-animations',
|
|
329
|
+
label: { en: 'Scroll-driven animations', 'pt-BR': 'Animações guiadas por scroll' },
|
|
330
|
+
description: {
|
|
331
|
+
en: 'Use CSS scroll/view timelines for scene logic.',
|
|
332
|
+
'pt-BR': 'Use timelines de scroll/view em CSS para lógica de cenas.'
|
|
333
|
+
}
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
id: 'view-transition-api',
|
|
337
|
+
label: { en: 'View Transition API', 'pt-BR': 'View Transition API' },
|
|
338
|
+
description: {
|
|
339
|
+
en: 'Carry continuity between routes or UI states.',
|
|
340
|
+
'pt-BR': 'Carrega continuidade entre rotas ou estados da UI.'
|
|
341
|
+
}
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
id: 'mask-clip-path',
|
|
345
|
+
label: { en: 'Masks / clip-path', 'pt-BR': 'Masks / clip-path' },
|
|
346
|
+
description: {
|
|
347
|
+
en: 'Non-rectangular reveals, image windows, ornamental cuts.',
|
|
348
|
+
'pt-BR': 'Revelações não retangulares, janelas de imagem, cortes ornamentais.'
|
|
349
|
+
}
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
id: 'svg-filters-noise',
|
|
353
|
+
label: { en: 'SVG filters / noise', 'pt-BR': 'SVG filters / ruído' },
|
|
354
|
+
description: {
|
|
355
|
+
en: 'Distortion, grain, displacement, tactile imperfection.',
|
|
356
|
+
'pt-BR': 'Distorção, grão, displacement, imperfeição tátil.'
|
|
357
|
+
}
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
id: 'backdrop-filter',
|
|
361
|
+
label: { en: 'Backdrop filters', 'pt-BR': 'Backdrop filters' },
|
|
362
|
+
description: {
|
|
363
|
+
en: 'Glass depth and layered translucency.',
|
|
364
|
+
'pt-BR': 'Profundidade de vidro e translucidez em camadas.'
|
|
365
|
+
}
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
id: '3d-transforms',
|
|
369
|
+
label: { en: '3D transforms', 'pt-BR': 'Transforms 3D' },
|
|
370
|
+
description: {
|
|
371
|
+
en: 'Perspective cards, depth stacks, immersive hero moments.',
|
|
372
|
+
'pt-BR': 'Cards em perspectiva, pilhas com profundidade, momentos de hero imersivos.'
|
|
373
|
+
}
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
id: 'sticky-storytelling',
|
|
377
|
+
label: { en: 'Sticky storytelling', 'pt-BR': 'Storytelling com sticky' },
|
|
378
|
+
description: {
|
|
379
|
+
en: 'Pinned chapters, progressive reveals, staged narrative.',
|
|
380
|
+
'pt-BR': 'Capítulos fixados, revelações progressivas, narrativa encenada.'
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
]
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
id: 'anti_sameness',
|
|
387
|
+
title: { en: 'Anti-sameness guardrails', 'pt-BR': 'Guardrails anti-mesmice' },
|
|
388
|
+
guidance: {
|
|
389
|
+
en: 'Choose 2-4 traits that must be visible in the final result.',
|
|
390
|
+
'pt-BR': 'Escolha de 2 a 4 traços que devem aparecer no resultado final.'
|
|
391
|
+
},
|
|
392
|
+
options: [
|
|
393
|
+
{
|
|
394
|
+
id: 'avoid-generic-hero',
|
|
395
|
+
label: { en: 'No generic hero', 'pt-BR': 'Sem hero genérico' },
|
|
396
|
+
description: {
|
|
397
|
+
en: 'The opening section must have a distinctive structural move.',
|
|
398
|
+
'pt-BR': 'A seção de abertura precisa ter um movimento estrutural distintivo.'
|
|
399
|
+
}
|
|
400
|
+
},
|
|
401
|
+
{
|
|
402
|
+
id: 'uneven-rhythm',
|
|
403
|
+
label: { en: 'Uneven rhythm on purpose', 'pt-BR': 'Ritmo desigual de propósito' },
|
|
404
|
+
description: {
|
|
405
|
+
en: 'Break repetitive card-grid monotony with controlled variation.',
|
|
406
|
+
'pt-BR': 'Quebre a monotonia da grade repetitiva com variação controlada.'
|
|
407
|
+
}
|
|
408
|
+
},
|
|
409
|
+
{
|
|
410
|
+
id: 'domain-specific-ornament',
|
|
411
|
+
label: { en: 'Domain-specific ornament', 'pt-BR': 'Ornamento específico de domínio' },
|
|
412
|
+
description: {
|
|
413
|
+
en: 'Visual language should come from the product domain, not default SaaS clichés.',
|
|
414
|
+
'pt-BR': 'A linguagem visual deve vir do domínio do produto, não do clichê SaaS.'
|
|
415
|
+
}
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
id: 'signature-surface',
|
|
419
|
+
label: { en: 'Signature surface treatment', 'pt-BR': 'Tratamento de superfície assinatura' },
|
|
420
|
+
description: {
|
|
421
|
+
en: 'At least one surface treatment should be unmistakable.',
|
|
422
|
+
'pt-BR': 'Pelo menos um tratamento de superfície deve ser inconfundível.'
|
|
423
|
+
}
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
id: 'color-courage',
|
|
427
|
+
label: { en: 'Color courage', 'pt-BR': 'Corajoso nas cores' },
|
|
428
|
+
description: {
|
|
429
|
+
en: 'Permit stronger contrast or richer palette when it serves identity.',
|
|
430
|
+
'pt-BR': 'Permita contraste mais forte ou paleta mais rica quando servir à identidade.'
|
|
431
|
+
}
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
id: 'motion-with-purpose',
|
|
435
|
+
label: { en: 'Motion with purpose', 'pt-BR': 'Motion com propósito' },
|
|
436
|
+
description: {
|
|
437
|
+
en: 'Motion must communicate hierarchy or feel, not act as filler.',
|
|
438
|
+
'pt-BR': 'Motion precisa comunicar hierarquia ou sensação, não preencher espaço.'
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
]
|
|
442
|
+
}
|
|
443
|
+
];
|
|
444
|
+
|
|
445
|
+
const DESIGN_VARIATION_SOURCES = [
|
|
446
|
+
{
|
|
447
|
+
label: {
|
|
448
|
+
en: 'Figma: Top Web Design Trends for 2026',
|
|
449
|
+
'pt-BR': 'Figma: tendências de web design para 2026'
|
|
450
|
+
},
|
|
451
|
+
url: 'https://www.figma.com/resource-library/web-design-trends/'
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
label: {
|
|
455
|
+
en: 'Webflow: Variable fonts',
|
|
456
|
+
'pt-BR': 'Webflow: variable fonts'
|
|
457
|
+
},
|
|
458
|
+
url: 'https://help.webflow.com/hc/en-us/articles/33961307448979-Variable-fonts'
|
|
459
|
+
},
|
|
460
|
+
{
|
|
461
|
+
label: {
|
|
462
|
+
en: 'web.dev: Same-document view transitions Baseline (Oct 16, 2025)',
|
|
463
|
+
'pt-BR': 'web.dev: same-document view transitions em Baseline (16 out 2025)'
|
|
464
|
+
},
|
|
465
|
+
url: 'https://web.dev/blog/same-document-view-transitions-are-now-baseline-newly-available'
|
|
466
|
+
},
|
|
467
|
+
{
|
|
468
|
+
label: {
|
|
469
|
+
en: 'web.dev: Interop 2026 and scroll-driven animations',
|
|
470
|
+
'pt-BR': 'web.dev: Interop 2026 e animações guiadas por scroll'
|
|
471
|
+
},
|
|
472
|
+
url: 'https://web.dev/blog/interop-2026?hl=en'
|
|
473
|
+
}
|
|
474
|
+
];
|
|
475
|
+
|
|
476
|
+
function localizeOption(option, locale) {
|
|
477
|
+
return {
|
|
478
|
+
id: option.id,
|
|
479
|
+
label: pickText(option.label, locale),
|
|
480
|
+
description: pickText(option.description, locale)
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
function getDesignVariationCatalog(locale = 'en') {
|
|
485
|
+
return DESIGN_VARIATION_GROUPS.map((group) => ({
|
|
486
|
+
id: group.id,
|
|
487
|
+
title: pickText(group.title, locale),
|
|
488
|
+
guidance: pickText(group.guidance, locale),
|
|
489
|
+
options: group.options.map((option) => localizeOption(option, locale))
|
|
490
|
+
}));
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
function getDesignVariationSources(locale = 'en') {
|
|
494
|
+
return DESIGN_VARIATION_SOURCES.map((source) => ({
|
|
495
|
+
label: pickText(source.label, locale),
|
|
496
|
+
url: source.url
|
|
497
|
+
}));
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
module.exports = {
|
|
501
|
+
getDesignVariationCatalog,
|
|
502
|
+
getDesignVariationSources
|
|
503
|
+
};
|
package/src/i18n/messages/en.js
CHANGED
|
@@ -7,9 +7,11 @@ module.exports = {
|
|
|
7
7
|
usage: 'Usage:',
|
|
8
8
|
help_item_line: ' {text}',
|
|
9
9
|
help_init:
|
|
10
|
-
'aioson init <project-name> [--force] [--dry-run] [--lang=en|pt-BR|es|fr] [--tool=codex|claude|gemini|opencode] [--locale=en]',
|
|
10
|
+
'aioson init <project-name> [--force] [--dry-run] [--all] [--lang=en|pt-BR|es|fr] [--tool=codex|claude|gemini|opencode] [--locale=en]',
|
|
11
11
|
help_install:
|
|
12
12
|
'aioson install [path] [--force] [--dry-run] [--lang=en|pt-BR|es|fr] [--tool=codex|claude|gemini|opencode] [--locale=en]',
|
|
13
|
+
help_setup:
|
|
14
|
+
'aioson setup [path] [--defaults] [--framework=<name>] [--lang=en|pt-BR|es|fr] [--project-name=<name>] [--force] [--dry-run] [--tool=codex|claude|gemini|opencode] [--locale=en]',
|
|
13
15
|
help_update: 'aioson update [path] [--dry-run] [--lang=en|pt-BR|es|fr] [--locale=en]',
|
|
14
16
|
help_info: 'aioson info [path] [--json] [--locale=en]',
|
|
15
17
|
help_doctor: 'aioson doctor [path] [--fix] [--dry-run] [--json] [--locale=en]',
|
|
@@ -157,6 +159,8 @@ module.exports = {
|
|
|
157
159
|
'aioson skill:list [path] [--json] [--locale=en]',
|
|
158
160
|
help_skill_remove:
|
|
159
161
|
'aioson skill:remove [path] --slug=<name> [--json] [--locale=en]',
|
|
162
|
+
help_design_hybrid_options:
|
|
163
|
+
'aioson design-hybrid:options [path] [--advanced] [--json] [--locale=en]',
|
|
160
164
|
help_cloud_import_squad:
|
|
161
165
|
'aioson cloud:import:squad [path] --url=<snapshot-url> [--force] [--snapshots-only] [--dry-run] [--json] [--locale=en]',
|
|
162
166
|
help_cloud_import_genome:
|
|
@@ -197,6 +201,9 @@ module.exports = {
|
|
|
197
201
|
step_agents: '3. If no visual picker appears, run: aioson agents',
|
|
198
202
|
step_agent_prompt: '4. Generate setup prompt for your tool: aioson agent:prompt setup --tool={tool}'
|
|
199
203
|
},
|
|
204
|
+
init_all: {
|
|
205
|
+
installing_full: 'Installing complete (all tools + squads) — wizard skipped via --all'
|
|
206
|
+
},
|
|
200
207
|
install: {
|
|
201
208
|
framework_detected: 'Framework detected: {framework} ({evidence})',
|
|
202
209
|
framework_not_detected: 'No framework detected. Installing in generic mode.',
|
|
@@ -211,11 +218,18 @@ module.exports = {
|
|
|
211
218
|
existing_project_scan_hint:
|
|
212
219
|
' aioson scan:project . --folder=src --with-llm --provider=<provider> (generates discovery.md + skeleton-system.md; omit --with-llm for local maps only)'
|
|
213
220
|
},
|
|
221
|
+
install_wizard: {
|
|
222
|
+
ready_to_install: 'Ready to install:',
|
|
223
|
+
press_enter_to_install: 'Press enter to install or q to cancel.',
|
|
224
|
+
deselected_warning: '⚠ Deselected items will NOT be removed automatically.',
|
|
225
|
+
deselected_hint: ' Remove them manually if needed.'
|
|
226
|
+
},
|
|
214
227
|
update: {
|
|
215
228
|
not_installed: 'No AIOSON installation found in {targetDir}.',
|
|
216
229
|
done_at: 'Update completed at: {targetDir}',
|
|
217
230
|
files_updated: 'Files updated: {count}',
|
|
218
|
-
backups_created: 'Backups created: {count}'
|
|
231
|
+
backups_created: 'Backups created: {count}',
|
|
232
|
+
reconfigure_hint: 'New options may be available. Run: aioson install --reconfigure'
|
|
219
233
|
},
|
|
220
234
|
info: {
|
|
221
235
|
cli_version: 'AIOSON CLI: v{version}',
|
|
@@ -338,6 +352,22 @@ module.exports = {
|
|
|
338
352
|
selected_line: ' {index}. {path} — {reason}',
|
|
339
353
|
hint_use: 'Use {path} as the minimum starting context in your AI session.'
|
|
340
354
|
},
|
|
355
|
+
setup: {
|
|
356
|
+
installing: 'Installing AIOSON template...',
|
|
357
|
+
installed: 'Template installed ({count} files).',
|
|
358
|
+
no_framework_detected: 'No framework detected in this directory (greenfield project).',
|
|
359
|
+
framework_detected: 'Detected framework: {framework} (installed={installed})',
|
|
360
|
+
writing_context: 'Writing project context...',
|
|
361
|
+
done: 'Setup complete.',
|
|
362
|
+
step_agents: ' Next: open your AI client and activate @setup to confirm or refine the context.',
|
|
363
|
+
step_agent_prompt: ' Or run: aioson agent:prompt setup . --tool={tool}',
|
|
364
|
+
q_project_name: 'Project name',
|
|
365
|
+
q_framework: 'Main framework / stack (e.g. Python, Node, Laravel, Django)',
|
|
366
|
+
q_lang: 'Language for agent responses (e.g. en, pt-BR, es, fr)',
|
|
367
|
+
q_confirm_framework: 'Use detected framework? (true/false)',
|
|
368
|
+
q_override_framework: 'Framework',
|
|
369
|
+
q_framework_installed: 'Framework installed? (true/false)'
|
|
370
|
+
},
|
|
341
371
|
setup_context: {
|
|
342
372
|
detected: 'Detected framework: {framework} (installed={installed})',
|
|
343
373
|
q_project_name: 'Project name',
|
package/src/i18n/messages/es.js
CHANGED
|
@@ -10,6 +10,8 @@ module.exports = {
|
|
|
10
10
|
'aioson init <project-name> [--force] [--dry-run] [--lang=en|pt-BR|es|fr] [--tool=codex|claude|gemini|opencode] [--locale=es]',
|
|
11
11
|
help_install:
|
|
12
12
|
'aioson install [path] [--force] [--dry-run] [--lang=en|pt-BR|es|fr] [--tool=codex|claude|gemini|opencode] [--locale=es]',
|
|
13
|
+
help_setup:
|
|
14
|
+
'aioson setup [path] [--defaults] [--framework=<nombre>] [--lang=en|pt-BR|es|fr] [--project-name=<nombre>] [--force] [--dry-run] [--tool=codex|claude|gemini|opencode] [--locale=es]',
|
|
13
15
|
help_update:
|
|
14
16
|
'aioson update [path] [--dry-run] [--lang=en|pt-BR|es|fr] [--locale=es]',
|
|
15
17
|
help_info: 'aioson info [path] [--json] [--locale=es]',
|
|
@@ -103,7 +105,7 @@ module.exports = {
|
|
|
103
105
|
},
|
|
104
106
|
init: {
|
|
105
107
|
usage_error:
|
|
106
|
-
'Uso: aioson init <project-name> [--force] [--dry-run] [--lang=en|pt-BR|es|fr] [--tool=codex|claude|gemini|opencode] [--locale=es]',
|
|
108
|
+
'Uso: aioson init <project-name> [--force] [--dry-run] [--all] [--lang=en|pt-BR|es|fr] [--tool=codex|claude|gemini|opencode] [--locale=es]',
|
|
107
109
|
non_empty_dir: 'El directorio no esta vacio: {targetDir}. Usa --force para continuar.',
|
|
108
110
|
created_at: 'Proyecto creado en: {targetDir}',
|
|
109
111
|
files_copied: 'Archivos copiados: {count}',
|
|
@@ -115,6 +117,9 @@ module.exports = {
|
|
|
115
117
|
step_agent_prompt:
|
|
116
118
|
'4. Genera el prompt de setup para tu herramienta: aioson agent:prompt setup --tool={tool}'
|
|
117
119
|
},
|
|
120
|
+
init_all: {
|
|
121
|
+
installing_full: 'Instalacion completa (todas las herramientas + squads) — wizard ignorado via --all'
|
|
122
|
+
},
|
|
118
123
|
install: {
|
|
119
124
|
framework_detected: 'Framework detectado: {framework} ({evidence})',
|
|
120
125
|
framework_not_detected: 'No se detecto framework. Instalando en modo generico.',
|
|
@@ -132,11 +137,18 @@ module.exports = {
|
|
|
132
137
|
existing_project_scan_hint:
|
|
133
138
|
' aioson scan:project . --folder=src --with-llm --provider=<provider> (genera discovery.md + skeleton-system.md; sin --with-llm genera solo mapas locales)'
|
|
134
139
|
},
|
|
140
|
+
install_wizard: {
|
|
141
|
+
ready_to_install: 'Listo para instalar:',
|
|
142
|
+
press_enter_to_install: 'Presiona enter para instalar o q para cancelar.',
|
|
143
|
+
deselected_warning: '⚠ Los elementos deseleccionados NO se eliminaran automaticamente.',
|
|
144
|
+
deselected_hint: ' Eliminalos manualmente si lo necesitas.'
|
|
145
|
+
},
|
|
135
146
|
update: {
|
|
136
147
|
not_installed: 'No se encontro instalacion de AIOSON en {targetDir}.',
|
|
137
148
|
done_at: 'Actualizacion completada en: {targetDir}',
|
|
138
149
|
files_updated: 'Archivos actualizados: {count}',
|
|
139
|
-
backups_created: 'Backups creados: {count}'
|
|
150
|
+
backups_created: 'Backups creados: {count}',
|
|
151
|
+
reconfigure_hint: 'Nuevas opciones pueden estar disponibles. Ejecuta: aioson install --reconfigure'
|
|
140
152
|
},
|
|
141
153
|
info: {
|
|
142
154
|
cli_version: 'AIOSON CLI: v{version}',
|
|
@@ -265,6 +277,22 @@ module.exports = {
|
|
|
265
277
|
selected_line: ' {index}. {path} — {reason}',
|
|
266
278
|
hint_use: 'Usa {path} como contexto minimo inicial en tu sesion de IA.'
|
|
267
279
|
},
|
|
280
|
+
setup: {
|
|
281
|
+
installing: 'Instalando plantilla AIOSON...',
|
|
282
|
+
installed: 'Plantilla instalada ({count} archivos).',
|
|
283
|
+
no_framework_detected: 'No se detecto ningun framework en este directorio (proyecto nuevo).',
|
|
284
|
+
framework_detected: 'Framework detectado: {framework} (instalado={installed})',
|
|
285
|
+
writing_context: 'Escribiendo contexto del proyecto...',
|
|
286
|
+
done: 'Setup completado.',
|
|
287
|
+
step_agents: ' Siguiente: abre tu cliente de IA y activa @setup para confirmar o ajustar el contexto.',
|
|
288
|
+
step_agent_prompt: ' O ejecuta: aioson agent:prompt setup . --tool={tool}',
|
|
289
|
+
q_project_name: 'Nombre del proyecto',
|
|
290
|
+
q_framework: 'Framework / stack principal (ej: Python, Node, Laravel, Django)',
|
|
291
|
+
q_lang: 'Idioma para respuestas de los agentes (ej: en, pt-BR, es, fr)',
|
|
292
|
+
q_confirm_framework: 'Usar framework detectado? (true/false)',
|
|
293
|
+
q_override_framework: 'Framework',
|
|
294
|
+
q_framework_installed: 'Framework instalado? (true/false)'
|
|
295
|
+
},
|
|
268
296
|
setup_context: {
|
|
269
297
|
detected: 'Framework detectado: {framework} (installed={installed})',
|
|
270
298
|
q_project_name: 'Nombre del proyecto',
|