@diegosouzacdv/jev-browser-mcp 0.2.0 → 0.3.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 CHANGED
@@ -1635,97 +1635,101 @@ proxies publicam exclusivamente a allowlist read-only e reaplicam sanitização
1635
1635
  Prompt Guard em cada resultado. Portanto, ferramentas novas ou mutantes que o
1636
1636
  21st venha a publicar não ficam automaticamente acessíveis ao executor.
1637
1637
 
1638
- ### MCP de navegador com Jev e Playwright
1639
-
1640
- O pacote independente `@diegosouzacdv/jev-browser-mcp` conecta qualquer harness
1641
- compatível com MCP por `stdio` ao Jev e ao Playwright. Requer Node.js 22 ou mais
1642
- recente. Instale o navegador do Playwright uma vez para execuções no modo
1643
- `harness`:
1644
-
1645
- ```sh
1646
- npx --yes @diegosouzacdv/jev-browser-mcp --install-browser
1647
- ```
1648
-
1649
- Registre o servidor MCP no formato aceito pelo seu harness. Exemplo de
1650
- configuração comum:
1651
-
1652
- ```json
1653
- {
1654
- "mcpServers": {
1655
- "jev-browser": {
1656
- "command": "npx",
1657
- "args": ["--yes", "@diegosouzacdv/jev-browser-mcp"],
1658
- "env": {
1659
- "OPENROUTER_API_KEY": "${OPENROUTER_API_KEY}",
1660
- "JEV_BROWSER_MODE": "harness"
1661
- }
1662
- }
1663
- }
1664
- }
1665
- ```
1666
-
1667
- Configure `OPENROUTER_API_KEY` no secret manager ou no ambiente do processo
1668
- que inicia o harness. Não coloque a chave no JSON. O endpoint e o modelo
1669
- Decisions têm valores padrão no pacote; `JEV_PROVIDER_URL` e `JEV_MODEL` podem
1670
- substituí-los.
1671
-
1672
- Escolha o navegador por variáveis de ambiente:
1673
-
1674
- - `JEV_BROWSER_MODE=harness` inicia um navegador isolado e sem interface,
1675
- adequado para testes automatizados e CI.
1676
- - `JEV_BROWSER_MODE=computer` abre o Chrome ou Edge instalado. O MCP usa um
1677
- perfil persistente próprio; faça login nele uma vez. Não configure o perfil
1678
- pessoal que já está aberto no computador.
1679
- - `JEV_BROWSER_CHANNEL=chrome` ou `msedge` escolhe o navegador.
1680
- - `JEV_BROWSER_PROFILE` define o caminho absoluto do perfil persistente no
1681
- modo `computer`.
1682
-
1683
- Para um fluxo conhecido, o agente do harness consulta o cenário e os critérios
1684
- de aceitação no projeto e chama `run_browser_flow` uma vez. Informe o objetivo,
1685
- a URL inicial, o resultado esperado e planos candidatos declarativos. O Jev
1686
- escolhe um dos planos com base no snapshot acessível da página; o MCP executa
1687
- os passos e confere se o resultado esperado apareceu. Exemplo resumido:
1688
-
1689
- ```json
1690
- {
1691
- "flow": "Adicionar o produto ao carrinho",
1692
- "initial_url": "http://127.0.0.1:4173/products/coffee",
1693
- "expected_outcome": "Coffee added to cart",
1694
- "candidate_plans": {
1695
- "add_product": {
1696
- "description": "Adicionar o produto visível ao carrinho",
1697
- "steps": [
1698
- {"action": "click", "role": "button", "name": "Add to cart"},
1699
- {"action": "wait_for_text", "text": "Coffee added to cart"}
1700
- ]
1701
- }
1702
- }
1703
- }
1704
- ```
1705
-
1706
- O servidor também oferece `choose_next_action` para exploração passo a passo;
1707
- esse modo exige chamadas separadas do harness e costuma ser mais lento. Os
1708
- planos aceitam ações limitadas como clique por papel e nome acessível,
1709
- preenchimento, espera por texto, rolagem e reação idempotente a um comentário
1710
- único. Não aceitam JavaScript arbitrário, coordenadas nem seletores livres.
1711
- Valores digitados ficam no Playwright e são removidos do conteúdo enviado ao
1712
- Jev. Não coloque senhas, tokens ou outros segredos na descrição do fluxo ou
1713
- nos critérios.
1714
-
1715
- O contrato também oferece `select_option`, `hover`, teclas `Enter`/`Escape`/`Tab`,
1716
- asserções por elemento (`assert_text`, `assert_value`, `assert_visible`,
1717
- `assert_hidden`) e alvos nomeados em iframes. `upload_file` aceita inputs,
1718
- botões que abrem o seletor nativo e dropzones; configure `JEV_BROWSER_UPLOAD_ROOT`
1719
- para limitar os arquivos locais que o MCP pode ler. Um único plano usa o
1720
- fast-path por padrão e não chama a API Decisions. `options` pode limitar o
1721
- snapshot a `main` ou `dialog`, bloquear rastreadores, capturar erros de console
1722
- e rede e salvar screenshot/trace local em falhas. Os caminhos e limites estão
1723
- descritos no [guia completo](docs/jev-browser-mcp.md).
1724
-
1725
- A resposta informa o status, o plano escolhido, as ações executadas, a captura
1726
- final e se o resultado esperado foi confirmado. Consulte o [guia completo do
1727
- MCP Jev Browser](docs/jev-browser-mcp.md) para schemas, limites, tempos e
1728
- detalhes de segurança.
1638
+ ### MCP de navegador com Jev e Playwright
1639
+
1640
+ O pacote independente `@diegosouzacdv/jev-browser-mcp` conecta qualquer harness
1641
+ compatível com MCP por `stdio` ao Jev e ao Playwright. Requer Node.js 22 ou mais
1642
+ recente. Instale o navegador do Playwright uma vez para execuções no modo
1643
+ `harness`:
1644
+
1645
+ ```sh
1646
+ npx --yes @diegosouzacdv/jev-browser-mcp --install-browser
1647
+ ```
1648
+
1649
+ Registre o servidor MCP no formato aceito pelo seu harness. Exemplo de
1650
+ configuração comum:
1651
+
1652
+ ```json
1653
+ {
1654
+ "mcpServers": {
1655
+ "jev-browser": {
1656
+ "command": "npx",
1657
+ "args": ["--yes", "@diegosouzacdv/jev-browser-mcp"],
1658
+ "env": {
1659
+ "OPENROUTER_API_KEY": "${OPENROUTER_API_KEY}",
1660
+ "JEV_BROWSER_MODE": "harness"
1661
+ }
1662
+ }
1663
+ }
1664
+ }
1665
+ ```
1666
+
1667
+ Configure `OPENROUTER_API_KEY` no secret manager ou no ambiente do processo
1668
+ que inicia o harness. Não coloque a chave no JSON. O endpoint e o modelo
1669
+ Decisions têm valores padrão no pacote; `JEV_PROVIDER_URL` e `JEV_MODEL` podem
1670
+ substituí-los.
1671
+
1672
+ Escolha o navegador por variáveis de ambiente:
1673
+
1674
+ - `JEV_BROWSER_MODE=harness` inicia um navegador isolado e sem interface,
1675
+ adequado para testes automatizados e CI.
1676
+ - `JEV_BROWSER_MODE=computer` abre o Chrome ou Edge instalado. O MCP usa um
1677
+ perfil persistente próprio; faça login nele uma vez. Não configure o perfil
1678
+ pessoal que já está aberto no computador.
1679
+ - `JEV_BROWSER_CHANNEL=chrome` ou `msedge` escolhe o navegador.
1680
+ - `JEV_BROWSER_PROFILE` define o caminho absoluto do perfil persistente no
1681
+ modo `computer`.
1682
+
1683
+ Para um fluxo conhecido, o agente do harness consulta o cenário e os critérios
1684
+ de aceitação no projeto e chama `run_browser_flow` uma vez. Informe o objetivo,
1685
+ a URL inicial, o resultado esperado e planos candidatos declarativos. O Jev
1686
+ escolhe um dos planos com base no snapshot acessível da página; o MCP executa
1687
+ os passos e confere se o resultado esperado apareceu. Exemplo resumido:
1688
+
1689
+ ```json
1690
+ {
1691
+ "flow": "Adicionar o produto ao carrinho",
1692
+ "initial_url": "http://127.0.0.1:4173/products/coffee",
1693
+ "expected_outcome": "Coffee added to cart",
1694
+ "candidate_plans": {
1695
+ "add_product": {
1696
+ "description": "Adicionar o produto visível ao carrinho",
1697
+ "steps": [
1698
+ {"action": "click", "role": "button", "name": "Add to cart"},
1699
+ {"action": "wait_for_text", "text": "Coffee added to cart"}
1700
+ ]
1701
+ }
1702
+ }
1703
+ }
1704
+ ```
1705
+
1706
+ O servidor também oferece `choose_next_action` para exploração passo a passo;
1707
+ esse modo exige chamadas separadas do harness e costuma ser mais lento. Os
1708
+ planos aceitam ações limitadas como clique por papel e nome acessível,
1709
+ preenchimento, espera por texto, rolagem e reação idempotente a um comentário
1710
+ único. Não aceitam JavaScript arbitrário, coordenadas nem seletores livres.
1711
+ Valores digitados ficam no Playwright e são removidos do conteúdo enviado ao
1712
+ Jev. Não coloque senhas, tokens ou outros segredos na descrição do fluxo ou
1713
+ nos critérios.
1714
+
1715
+ O contrato também oferece `select_option`, `hover`, teclas `Enter`/`Escape`/`Tab`,
1716
+ asserções por elemento (`assert_text`, `assert_value`, `assert_visible`,
1717
+ `assert_hidden`), escopo de alvo por `within` e índice zero-based com `index`,
1718
+ além de alvos nomeados em iframes. `upload_file` aceita inputs, botões que abrem
1719
+ o seletor nativo e dropzones; configure `JEV_BROWSER_UPLOAD_ROOT` para limitar
1720
+ os arquivos locais que o MCP pode ler. `click` com `expect_download: true`
1721
+ captura arquivos na pasta de artefatos dentro dos limites configurados, e
1722
+ `audit_accessibility` roda axe nas tags WCAG 2.0/2.1 A/AA. A análise automatizada
1723
+ não substitui auditoria manual. Um único plano usa o fast-path por padrão e não
1724
+ chama a API Decisions. `options` pode limitar o
1725
+ snapshot a `main` ou `dialog`, bloquear rastreadores, capturar erros de console
1726
+ e rede e salvar screenshot/trace local em falhas. Os caminhos e limites estão
1727
+ descritos no [guia completo](docs/jev-browser-mcp.md).
1728
+
1729
+ A resposta informa o status, o plano escolhido, as ações executadas, a captura
1730
+ final e se o resultado esperado foi confirmado. Consulte o [guia completo do
1731
+ MCP Jev Browser](docs/jev-browser-mcp.md) para schemas, limites, tempos e
1732
+ detalhes de segurança.
1729
1733
 
1730
1734
  O sidecar PostgreSQL de teste pode ser validado localmente com:
1731
1735
 
@@ -5,9 +5,9 @@
5
5
  "harness_browser": "chrome",
6
6
  "playwright_mcp_package": "@playwright/mcp@0.0.79",
7
7
  "computer_browser": "chrome",
8
- "computer_user_data_dir": "~/.cache/orquestrador/jev-browser-{browser}",
9
- "max_flow_steps": 24,
10
- "max_text_entry_chars": 2000
8
+ "computer_user_data_dir": "~/.cache/orquestrador/jev-browser-{browser}",
9
+ "max_flow_steps": 24,
10
+ "max_text_entry_chars": 2000
11
11
  },
12
12
  "jev": {
13
13
  "provider_url": "https://openrouter.ai/api/alpha/decisions",
@@ -16,40 +16,45 @@
16
16
  "request_timeout_seconds": 30,
17
17
  "max_flow_chars": 12000,
18
18
  "max_snapshot_chars": 12000,
19
- "max_action_count": 32,
20
- "max_action_description_chars": 300,
21
- "max_response_bytes": 65536
22
- },
23
- "jev_browser_mcp": {
24
- "browser": {
25
- "max_action_timeout_seconds": 8,
26
- "max_upload_files": 5,
27
- "max_upload_path_chars": 4096,
28
- "max_upload_file_bytes": 10485760,
29
- "max_upload_total_bytes": 26214400,
30
- "upload_root_env": "JEV_BROWSER_UPLOAD_ROOT",
31
- "artifact_directory": "~/.cache/orquestrador/jev-browser-artifacts",
32
- "artifact_directory_env": "JEV_BROWSER_ARTIFACT_DIR",
33
- "max_frame_snapshots": 5,
34
- "fast_path_single_plan_default": true,
35
- "screenshot_on_failure_default": true,
36
- "trace_on_failure_default": false,
37
- "capture_console_errors_default": true,
38
- "capture_network_errors_default": false,
39
- "block_trackers_default": false,
40
- "snapshot_scope_default": "body",
41
- "tracker_host_suffixes": [
42
- "google-analytics.com",
43
- "googletagmanager.com",
44
- "hotjar.com",
45
- "fonts.googleapis.com",
46
- "fonts.gstatic.com"
47
- ],
48
- "blocked_resource_types": ["font", "media"]
49
- },
50
- "jev": {
51
- "max_diagnostic_items": 50,
52
- "max_diagnostic_chars": 500
53
- }
54
- }
55
- }
19
+ "max_action_count": 32,
20
+ "max_action_description_chars": 300,
21
+ "max_response_bytes": 65536
22
+ },
23
+ "jev_browser_mcp": {
24
+ "browser": {
25
+ "max_action_timeout_seconds": 8,
26
+ "max_upload_files": 5,
27
+ "max_upload_path_chars": 4096,
28
+ "max_upload_file_bytes": 10485760,
29
+ "max_upload_total_bytes": 26214400,
30
+ "max_download_files": 5,
31
+ "max_download_file_bytes": 10485760,
32
+ "max_download_total_bytes": 26214400,
33
+ "max_download_timeout_seconds": 30,
34
+ "upload_root_env": "JEV_BROWSER_UPLOAD_ROOT",
35
+ "artifact_directory": "~/.cache/orquestrador/jev-browser-artifacts",
36
+ "artifact_directory_env": "JEV_BROWSER_ARTIFACT_DIR",
37
+ "max_frame_snapshots": 5,
38
+ "fast_path_single_plan_default": true,
39
+ "screenshot_on_failure_default": true,
40
+ "trace_on_failure_default": false,
41
+ "capture_console_errors_default": true,
42
+ "capture_network_errors_default": false,
43
+ "block_trackers_default": false,
44
+ "snapshot_scope_default": "body",
45
+ "tracker_host_suffixes": [
46
+ "google-analytics.com",
47
+ "googletagmanager.com",
48
+ "hotjar.com",
49
+ "fonts.googleapis.com",
50
+ "fonts.gstatic.com"
51
+ ],
52
+ "blocked_resource_types": ["font", "media"]
53
+ },
54
+ "jev": {
55
+ "max_diagnostic_items": 50,
56
+ "max_diagnostic_chars": 500,
57
+ "max_accessibility_violations": 50
58
+ }
59
+ }
60
+ }