uxsentinel 1.0.0__tar.gz
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.
- uxsentinel-1.0.0/PKG-INFO +367 -0
- uxsentinel-1.0.0/README.md +338 -0
- uxsentinel-1.0.0/pyproject.toml +89 -0
- uxsentinel-1.0.0/setup.cfg +4 -0
- uxsentinel-1.0.0/tests/test_engine.py +86 -0
- uxsentinel-1.0.0/uxsentinel/__init__.py +5 -0
- uxsentinel-1.0.0/uxsentinel/browser/drivers/base_driver.py +118 -0
- uxsentinel-1.0.0/uxsentinel/browser/drivers/generic_driver.py +39 -0
- uxsentinel-1.0.0/uxsentinel/browser/drivers/odoo_driver.py +65 -0
- uxsentinel-1.0.0/uxsentinel/browser/session.py +72 -0
- uxsentinel-1.0.0/uxsentinel/browser/visual_overlay.py +60 -0
- uxsentinel-1.0.0/uxsentinel/cli.py +210 -0
- uxsentinel-1.0.0/uxsentinel/core/agent.py +209 -0
- uxsentinel-1.0.0/uxsentinel/core/config.py +151 -0
- uxsentinel-1.0.0/uxsentinel/core/models.py +107 -0
- uxsentinel-1.0.0/uxsentinel/reporter/html_builder.py +276 -0
- uxsentinel-1.0.0/uxsentinel/reporter/json_builder.py +15 -0
- uxsentinel-1.0.0/uxsentinel/scenarios/parser.py +78 -0
- uxsentinel-1.0.0/uxsentinel/vision/client.py +217 -0
- uxsentinel-1.0.0/uxsentinel/vision/inspector.py +146 -0
- uxsentinel-1.0.0/uxsentinel/vision/prompts.py +74 -0
- uxsentinel-1.0.0/uxsentinel.egg-info/PKG-INFO +367 -0
- uxsentinel-1.0.0/uxsentinel.egg-info/SOURCES.txt +25 -0
- uxsentinel-1.0.0/uxsentinel.egg-info/dependency_links.txt +1 -0
- uxsentinel-1.0.0/uxsentinel.egg-info/entry_points.txt +2 -0
- uxsentinel-1.0.0/uxsentinel.egg-info/requires.txt +11 -0
- uxsentinel-1.0.0/uxsentinel.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: uxsentinel
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Agente Universal de QA Visual, UX e Proteção de Regras de Negócio com IA Multimodal
|
|
5
|
+
Author-email: Equipe UXSentinel <contato@gotryx.com.br>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/Defendi/UXSentinel
|
|
8
|
+
Project-URL: Documentation, https://github.com/Defendi/UXSentinel/tree/main/docs
|
|
9
|
+
Keywords: qa,ux,playwright,visual-testing,multimodal-ai,odoo,test-automation,pypi
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
16
|
+
Classifier: Topic :: Software Development :: Testing
|
|
17
|
+
Requires-Python: >=3.12
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
Requires-Dist: playwright>=1.47.0
|
|
20
|
+
Requires-Dist: pydantic>=2.7.0
|
|
21
|
+
Requires-Dist: pyyaml>=6.0.1
|
|
22
|
+
Requires-Dist: httpx>=0.27.0
|
|
23
|
+
Requires-Dist: jinja2>=3.1.4
|
|
24
|
+
Requires-Dist: rich>=13.7.0
|
|
25
|
+
Requires-Dist: python-dotenv>=1.0.1
|
|
26
|
+
Provides-Extra: dev
|
|
27
|
+
Requires-Dist: ruff>=0.5.0; extra == "dev"
|
|
28
|
+
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
29
|
+
|
|
30
|
+
# UXSentinel 🛡️👁️
|
|
31
|
+
### Agente Universal de QA Visual, Auditoria de UX e Proteção de Regras de Negócio
|
|
32
|
+
|
|
33
|
+
O **UXSentinel** é um agente autônomo e inteligente projetado para auditar **qualquer aplicação web** (Odoo, React, Vue, Angular, Django, SaaS e portais corporativos). Ele opera abrindo o navegador em **modo visível na sua tela**, navegando como um usuário humano rigoroso com velocidade cadenciada e inspecionando visualmente cada tela com **Modelos Multimodais de IA (Visão Computacional)**.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 🌟 Principais Recursos
|
|
38
|
+
|
|
39
|
+
- **Acompanhamento Visual ao Vivo (Human-in-the-Loop)**: O navegador abre na sua tela (`headless: false`) com ritmo humano (`slow_mo`) e efeitos visuais animados (cursor virtual e halo luminoso no elemento clicado ou focado).
|
|
40
|
+
- **Universalidade Real com Perfis de Framework**:
|
|
41
|
+
- Perfil **`generic`**: Opera sobre qualquer aplicação web baseada em HTML5 padrão.
|
|
42
|
+
- Perfil **`odoo`**: Especializado em ecossistemas Odoo (versões 16 a 19 e OWL Framework), com sincronização inteligente com o loader `.o_loading`, detecção de modais `.o_dialog` e captura de erros silenciosos.
|
|
43
|
+
- **Navegação Declarativa em YAML**: Escreva cenários de teste e proteja regras de negócio críticas sem precisar programar em código Playwright complexo.
|
|
44
|
+
- **Auditoria Rigorosa por IA (Validação Reversa e Ceticismo Metódico)**:
|
|
45
|
+
- 🌐 **Internacionalização (i18n)**: Detecta botões, mensagens, abas e labels em inglês em telas brasileiras.
|
|
46
|
+
- 🚫 **Vazamento Técnico**: Identifica identificadores de banco em `snake_case` (ex: `user_id`, `created_at`), IDs crus, prefixos de framework (`x_studio_`) e stacktraces.
|
|
47
|
+
- 📐 **Geometria de Modais**: Avalia centralização, botões de ação cortados no rodapé e quebras de viewport.
|
|
48
|
+
- 📋 **Regras de Negócio**: Compara o comportamento esperado descrito no teste com o que está sendo exibido na tela.
|
|
49
|
+
- ♿ **Ergonomia e Anti-Patterns**: Alerta sobre contrastes deficientes (WCAG 4.5:1), sobreposições e botões sem rótulos.
|
|
50
|
+
- **Inteligência Artificial Flexível**: Alternância transparente via `config/config.yaml` entre:
|
|
51
|
+
- **APIs Cloud**: Anthropic Claude, OpenAI GPT-4o, Google Gemini.
|
|
52
|
+
- **Modelos Locais (On-Premise)**: Ollama com Qwen2-VL ou LLaVA (privacidade total sem envio para nuvens externas).
|
|
53
|
+
- **Gateways Corporativos com SSO**: Proxies com tokens corporativos e headers customizados.
|
|
54
|
+
- **Relatórios Visuais Ricos**: Gera um dashboard HTML moderno e responsivo com screenshots em alta resolução, badges de severidade e sugestões acionáveis de correção.
|
|
55
|
+
- **Padrão PyPI & PEPs**: Estruturado conforme PEP 517/518/621 no `pyproject.toml`, utilizando Python 3.12 nativo e formatado via Ruff.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## 📋 Requisitos do Sistema
|
|
60
|
+
|
|
61
|
+
- **Sistema Operacional**: Linux, macOS ou Windows.
|
|
62
|
+
- **Python**: Versão **3.12 ou superior** (com ambiente virtual dedicado).
|
|
63
|
+
- **Navegadores**: Chromium (gerenciado automaticamente pelo Playwright).
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 🚀 Instalação Passo a Passo
|
|
68
|
+
|
|
69
|
+
O projeto utiliza o ambiente virtual configurado na pasta **`ambiente/`**:
|
|
70
|
+
|
|
71
|
+
### 1. Clonar e Acessar o Repositório
|
|
72
|
+
```bash
|
|
73
|
+
git clone <url-do-repositorio> UXSentinel
|
|
74
|
+
cd UXSentinel
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 2. Criar e Ativar o Ambiente Virtual (Python 3.12)
|
|
78
|
+
Caso a pasta `ambiente/` ainda não exista:
|
|
79
|
+
```bash
|
|
80
|
+
python3.12 -m venv ambiente
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Ative o ambiente (ou execute os binários diretamente via `ambiente/bin/python3`):
|
|
84
|
+
```bash
|
|
85
|
+
source ambiente/bin/activate
|
|
86
|
+
# No Windows: ambiente\Scripts\activate
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### 3. Instalar as Dependências do Projeto
|
|
90
|
+
```bash
|
|
91
|
+
ambiente/bin/pip install -r requirements.txt
|
|
92
|
+
ambiente/bin/pip install -e .
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 4. Instalar o Navegador Chromium do Playwright
|
|
96
|
+
```bash
|
|
97
|
+
ambiente/bin/playwright install chromium
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## 🐳 Execução em Container com Ubuntu Desktop (noVNC)
|
|
103
|
+
|
|
104
|
+
Se você preferir executar o **UXSentinel** de forma 100% isolada em container Docker sem instalar dependências no host, incluímos um ambiente completo com **Ubuntu 24.04 Desktop (XFCE4 + noVNC)**:
|
|
105
|
+
|
|
106
|
+
### 1. Iniciar o Container
|
|
107
|
+
```bash
|
|
108
|
+
docker compose up -d
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### 2. Acompanhar a Interface Gráfica no Navegador
|
|
112
|
+
Abra no seu navegador web:
|
|
113
|
+
👉 **`http://localhost:6080/vnc.html`** (clique em *Connect*)
|
|
114
|
+
*(Ou utilize um cliente VNC nativo em `localhost:5901`)*
|
|
115
|
+
|
|
116
|
+
### 3. Disparar Cenários pelo Terminal do Container
|
|
117
|
+
```bash
|
|
118
|
+
# Executa o agente abrindo o Chromium na tela do Desktop virtual:
|
|
119
|
+
docker exec -it uxsentinel_desktop uxsentinel --scenario scenarios/exemplo_web_geral.yaml --slowmo 350
|
|
120
|
+
```
|
|
121
|
+
Os relatórios e capturas gerados dentro do container serão salvos automaticamente na pasta `./report` do seu computador.
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## ⚙️ Configuração
|
|
126
|
+
|
|
127
|
+
### 1. Arquivo Global de Configuração (`config/config.yaml`)
|
|
128
|
+
Copie o modelo de exemplo para criar a sua configuração local:
|
|
129
|
+
```bash
|
|
130
|
+
cp config/config.example.yaml config/config.yaml
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
No `config/config.yaml`, você pode definir o provedor de IA ativo, opções de viewport e delay visual:
|
|
134
|
+
```yaml
|
|
135
|
+
# Provedor ativo: anthropic_cloud, openai_cloud, gemini_cloud, ollama_local ou corporate_gateway
|
|
136
|
+
active_provider: "anthropic_cloud"
|
|
137
|
+
fallback_provider: "ollama_local"
|
|
138
|
+
|
|
139
|
+
browser:
|
|
140
|
+
headless: false # 'false' para acompanhar o browser abrindo na tela
|
|
141
|
+
slow_mo_ms: 350 # Delay em milissegundos entre passos (ritmo humano)
|
|
142
|
+
viewport:
|
|
143
|
+
width: 1440
|
|
144
|
+
height: 900
|
|
145
|
+
highlight_clicks: true # Efeito visual no ponto do clique
|
|
146
|
+
|
|
147
|
+
reporting:
|
|
148
|
+
output_dir: "report"
|
|
149
|
+
generate_html: true
|
|
150
|
+
generate_json: true
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### 2. Variáveis de Ambiente (`.env`)
|
|
154
|
+
Crie um arquivo `.env` na raiz do projeto com as chaves do provedor que desejar utilizar:
|
|
155
|
+
```env
|
|
156
|
+
# Provedores Cloud (opcional, dependendo de qual você ativar)
|
|
157
|
+
ANTHROPIC_API_KEY=sk-ant-api03-...
|
|
158
|
+
OPENAI_API_KEY=sk-proj-...
|
|
159
|
+
GEMINI_API_KEY=AIzaSy...
|
|
160
|
+
|
|
161
|
+
# Aplicação Alvo de Teste (opcional)
|
|
162
|
+
APP_BASE_URL=https://meu-ambiente-de-teste.com
|
|
163
|
+
QA_BASE_URL=http://localhost:8069
|
|
164
|
+
QA_USER=admin
|
|
165
|
+
QA_PASSWORD=senha_segura
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
> [!TIP]
|
|
169
|
+
> **Privacidade Total com Ollama**: Se você configurar `active_provider: "ollama_local"`, nenhuma chave de API externa é necessária! O agente fará a inferência visual 100% no seu hardware local usando modelos como `qwen2-vl:7b`.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## 🕹️ Como Usar
|
|
174
|
+
|
|
175
|
+
Você pode executar o agente via `ambiente/bin/python3 main.py` ou diretamente através do comando de pacote `ambiente/bin/uxsentinel`.
|
|
176
|
+
|
|
177
|
+
### 🏢 Executando o UXSentinel a Partir de Qualquer Projeto Cliente
|
|
178
|
+
O UXSentinel foi projetado para **analisar aplicações a partir da própria pasta do projeto alvo** (por exemplo, na pasta de módulos do Odoo da Gotryx, ou no repositório de um portal React/Django):
|
|
179
|
+
|
|
180
|
+
1. **Disponibilização do comando global (`uxsentinel`)**:
|
|
181
|
+
Ao instalar o pacote no sistema ou ambiente com `pip install -e .`, o comando binário `uxsentinel` é criado. Com `~/.local/bin` no seu `$PATH`, você pode chamá-lo globalmente de qualquer diretório:
|
|
182
|
+
```bash
|
|
183
|
+
# Link simbólico para uso global rápido:
|
|
184
|
+
ln -sf /mnt/home/alexandre/Projetos/UXSentinel/ambiente/bin/uxsentinel ~/.local/bin/uxsentinel
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
2. **Coloque os cenários dentro do projeto cliente**:
|
|
188
|
+
Crie uma pasta `scenarios/` na raiz do projeto alvo (ex: `/caminho/meu-projeto/scenarios/fluxo_vendas.yaml`).
|
|
189
|
+
|
|
190
|
+
3. **Execute o comando diretamente de dentro da pasta do projeto alvo**:
|
|
191
|
+
```bash
|
|
192
|
+
cd /caminho/do/meu-projeto
|
|
193
|
+
|
|
194
|
+
# Auto-detecta os cenários da pasta scenarios/ local:
|
|
195
|
+
uxsentinel
|
|
196
|
+
|
|
197
|
+
# Ou especifique um cenário específico daquele projeto:
|
|
198
|
+
uxsentinel --scenario scenarios/fluxo_vendas.yaml --slowmo 400
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
4. **Isolamento de Credenciais e Relatórios**:
|
|
202
|
+
- O UXSentinel lê o `.env` local presente na pasta do projeto cliente (carregando URLs, logins e tokens daquele projeto).
|
|
203
|
+
- O dashboard visual e as capturas são salvos automaticamente dentro da pasta `report/` do próprio projeto cliente!
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
### 1. Listar os Cenários Disponíveis
|
|
208
|
+
Exibe os cenários do projeto local onde você está e os cenários da biblioteca interna:
|
|
209
|
+
```bash
|
|
210
|
+
ambiente/bin/uxsentinel --list-scenarios
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### 2. Executar um Cenário no Navegador Visível (Padrão)
|
|
214
|
+
A janela do Chromium se abrirá na tela e você acompanhará cada ação:
|
|
215
|
+
```bash
|
|
216
|
+
ambiente/bin/uxsentinel --scenario scenarios/meu_cenario.yaml
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### 3. Executar Cenário Especializado para Odoo
|
|
220
|
+
Aguardando estabilização do loader `.o_loading` e modais OWL:
|
|
221
|
+
```bash
|
|
222
|
+
ambiente/bin/uxsentinel --scenario scenarios/cenario_odoo.yaml --profile odoo
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### 4. Ajustar a Velocidade do Acompanhamento Visual (`--slowmo`)
|
|
226
|
+
Para apresentações ou auditorias minuciosas, aumente o delay (ex: 500ms):
|
|
227
|
+
```bash
|
|
228
|
+
ambiente/bin/uxsentinel --scenario scenarios/meu_cenario.yaml --slowmo 500
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### 5. Alternar o Provedor de IA via Linha de Comando
|
|
232
|
+
Substitua o provedor na hora da execução sem mexer no arquivo de configuração:
|
|
233
|
+
```bash
|
|
234
|
+
# Usar OpenAI GPT-4o
|
|
235
|
+
ambiente/bin/uxsentinel --scenario scenarios/meu_cenario.yaml --provider openai_cloud
|
|
236
|
+
|
|
237
|
+
# Usar Google Gemini 1.5
|
|
238
|
+
ambiente/bin/uxsentinel --scenario scenarios/meu_cenario.yaml --provider gemini_cloud
|
|
239
|
+
|
|
240
|
+
# Usar inferência local com Ollama (100% privado)
|
|
241
|
+
ambiente/bin/uxsentinel --scenario scenarios/meu_cenario.yaml --provider ollama_local
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### 6. Executar em Background / Modo Headless (Esteiras CI/CD)
|
|
245
|
+
```bash
|
|
246
|
+
ambiente/bin/uxsentinel --scenario scenarios/meu_cenario.yaml --headless
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## 📝 Como Criar um Novo Cenário de Teste (YAML)
|
|
252
|
+
|
|
253
|
+
Crie um arquivo `.yaml` dentro de `uxsentinel/scenarios/library/meu_fluxo.yaml`:
|
|
254
|
+
|
|
255
|
+
```yaml
|
|
256
|
+
version: "1.0"
|
|
257
|
+
id: "emissao_fatura_cliente"
|
|
258
|
+
title: "Fluxo de Emissão de Fatura e Verificação de Modal"
|
|
259
|
+
profile: "generic" # 'generic' ou 'odoo'
|
|
260
|
+
tags: ["financeiro", "faturamento"]
|
|
261
|
+
|
|
262
|
+
env:
|
|
263
|
+
base_url: "${APP_BASE_URL:-http://localhost:8000}"
|
|
264
|
+
|
|
265
|
+
steps:
|
|
266
|
+
- action: "goto"
|
|
267
|
+
url: "${base_url}/invoices/new"
|
|
268
|
+
description: "Navega para a tela de nova fatura"
|
|
269
|
+
|
|
270
|
+
- action: "fill"
|
|
271
|
+
selector: "input#cliente_nome"
|
|
272
|
+
value: "Empresa de Demonstração Ltda"
|
|
273
|
+
description: "Informa o cliente"
|
|
274
|
+
|
|
275
|
+
- action: "click"
|
|
276
|
+
selector: "button#btn-emitir"
|
|
277
|
+
description: "Clica para emitir"
|
|
278
|
+
|
|
279
|
+
- action: "wait_modal"
|
|
280
|
+
timeout: 8000
|
|
281
|
+
description: "Aguarda abertura do modal de confirmação"
|
|
282
|
+
|
|
283
|
+
# Checkpoint onde o agente para, fotografa e audita com IA
|
|
284
|
+
- action: "checkpoint"
|
|
285
|
+
name: "modal_confirmacao_emissao"
|
|
286
|
+
description: "Auditoria do modal de confirmação de fatura"
|
|
287
|
+
expected_behavior: >
|
|
288
|
+
O modal de confirmação deve abrir centralizado, sem sobreposição de campos.
|
|
289
|
+
O valor total da fatura e os botões 'Confirmar Envio' e 'Cancelar' devem estar
|
|
290
|
+
visíveis no rodapé. Nenhum texto em inglês deve ser exibido.
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### Ações Suportadas no Roteiro:
|
|
294
|
+
- `goto`: Navega até a URL especificada.
|
|
295
|
+
- `click`: Clica em um seletor CSS com efeito luminoso.
|
|
296
|
+
- `fill`: Preenche texto em um input ou textarea.
|
|
297
|
+
- `select`: Seleciona opção em listas dropdown (`<select>`).
|
|
298
|
+
- `press`: Dispara tecla física (ex: `Enter`, `Escape`, `Tab`).
|
|
299
|
+
- `hover`: Passa o mouse sobre um elemento para abrir tooltips ou menus.
|
|
300
|
+
- `scroll`: Rola a página (`direction: "down"` ou `"up"`).
|
|
301
|
+
- `wait_until_ready`: Aguarda o término de requisições ativas e loaders.
|
|
302
|
+
- `wait_modal`: Aguarda a renderização de diálogos/modais.
|
|
303
|
+
- `wait_modal_close`: Aguarda o fechamento completo do modal.
|
|
304
|
+
- `pause`: Pausa temporária em segundos para visualização.
|
|
305
|
+
- `checkpoint`: Ponto de inspeção visual, captura de tela e julgamento pela IA.
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## 📊 Relatórios de Execução
|
|
310
|
+
|
|
311
|
+
Ao término de cada execução, os resultados são salvos no diretório configurado (`report/`):
|
|
312
|
+
|
|
313
|
+
1. **Dashboard Visual HTML (`report/<id>_report.html`)**:
|
|
314
|
+
- Página interativa e independente com galeria de capturas de tela.
|
|
315
|
+
- Detalhamento de cada checkpoint com descrição do comportamento esperado.
|
|
316
|
+
- Lista categorizada de inconformidades visuais com badges de severidade (**Bloqueante**, **Alta**, **Média**, **Baixa**).
|
|
317
|
+
- Recomendações acionáveis de correção para o time de desenvolvimento.
|
|
318
|
+
2. **Relatório Estruturado JSON (`report/<id>_report.json`)**:
|
|
319
|
+
- Contém métricas brutas, timestamps, contagem de falhas e logs para fácil integração com esteiras de CI/CD (GitHub Actions, GitLab CI, Jenkins).
|
|
320
|
+
3. **Screenshots em Alta Resolução (`report/<id>_<checkpoint>.png`)**:
|
|
321
|
+
- Imagens completas capturadas no momento exato de cada checkpoint.
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
## 🛡️ Qualidade de Código, PEPs e Linter Ruff
|
|
326
|
+
|
|
327
|
+
O projeto segue estritamente as convenções das **PEPs do Python 3.12** e utiliza o **Ruff** com configuração dedicada no arquivo [`ruff.toml`](ruff.toml):
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
# Verificar regras de linting (PEP 8, isort, pyupgrade, bugbear)
|
|
331
|
+
ambiente/bin/ruff check .
|
|
332
|
+
|
|
333
|
+
# Aplicar correções automáticas
|
|
334
|
+
ambiente/bin/ruff check --fix .
|
|
335
|
+
|
|
336
|
+
# Aplicar formatação de código no padrão PEP 8
|
|
337
|
+
ambiente/bin/ruff format .
|
|
338
|
+
|
|
339
|
+
# Validar se o código já está perfeitamente formatado
|
|
340
|
+
ambiente/bin/ruff format --check .
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
---
|
|
344
|
+
|
|
345
|
+
## 🧪 Executar Testes Internos do Motor
|
|
346
|
+
|
|
347
|
+
Para validar todos os componentes (configurações, parsers, geradores de relatórios e Playwright) com o interpretador do venv:
|
|
348
|
+
|
|
349
|
+
```bash
|
|
350
|
+
ambiente/bin/python3 tests/test_engine.py
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
## 📚 Documentação Técnica Completa
|
|
356
|
+
|
|
357
|
+
Para aprofundar na arquitetura e especificações do projeto, consulte a pasta [`docs/`](docs/README.md):
|
|
358
|
+
|
|
359
|
+
| Documento | Assunto |
|
|
360
|
+
| :--- | :--- |
|
|
361
|
+
| 📖 [**01. Visão Geral e Arquitetura Universal**](docs/01_visao_e_arquitetura.md) | Arquitetura em camadas, fluxo de orquestração e neutralidade de frameworks. |
|
|
362
|
+
| 🔍 [**02. Heurísticas Universais de QA e UX**](docs/02_heuristicas_de_inspecao.md) | Critérios de i18n, prevenção de jargões técnicos, geometria de modais e severidades. |
|
|
363
|
+
| 🕹️ [**03. Motor do Agente: Navegação e Visão**](docs/03_agente_navegador_e_visao.md) | Modo visível, highlights em tela, estabilização assíncrona e loop de IA. |
|
|
364
|
+
| 📝 [**04. Especificação de Cenários (YAML)**](docs/04_especificacao_cenarios_yaml.md) | Sintaxe dos arquivos de teste e definição de checkpoints de regras de negócio. |
|
|
365
|
+
| 🤖 [**05. Configuração de LLMs e Provedores**](docs/05_configuracao_llm_e_provedores.md) | Especificação do `config.yaml` para alternar entre Cloud, Local (Ollama) e SSO/Gateway. |
|
|
366
|
+
| 🔌 [**06. Perfis e Plugins de Frameworks**](docs/06_plugins_e_perfis_frameworks.md) | Detalhes do perfil universal e do plugin especializado para Odoo (OWL). |
|
|
367
|
+
| 🤖 [**Skill do Projeto (.gemini/skills)**](.gemini/skills/uxsentinel-guide/SKILL.md) | Skill interna para agentes de IA atuarem com máxima consistência no repositório. |
|