veu 0.4.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.
- veu-0.4.0/.claude-plugin/marketplace.json +19 -0
- veu-0.4.0/.dockerignore +12 -0
- veu-0.4.0/.gitattributes +4 -0
- veu-0.4.0/.gitignore +30 -0
- veu-0.4.0/.pre-commit-hooks.yaml +6 -0
- veu-0.4.0/AGENTS.md +46 -0
- veu-0.4.0/CHANGELOG.md +150 -0
- veu-0.4.0/CLAUDE.md +1 -0
- veu-0.4.0/CONTRIBUTING.md +92 -0
- veu-0.4.0/Dockerfile +26 -0
- veu-0.4.0/LICENSE +21 -0
- veu-0.4.0/PKG-INFO +413 -0
- veu-0.4.0/README.md +334 -0
- veu-0.4.0/SECURITY.md +51 -0
- veu-0.4.0/action.yml +80 -0
- veu-0.4.0/deploy/.env.exemplo +9 -0
- veu-0.4.0/deploy/docker-compose.yml +30 -0
- veu-0.4.0/deploy/helm/veu/Chart.yaml +10 -0
- veu-0.4.0/deploy/helm/veu/templates/NOTES.txt +9 -0
- veu-0.4.0/deploy/helm/veu/templates/_helpers.tpl +24 -0
- veu-0.4.0/deploy/helm/veu/templates/configmap.yaml +9 -0
- veu-0.4.0/deploy/helm/veu/templates/deployment.yaml +85 -0
- veu-0.4.0/deploy/helm/veu/templates/extras.yaml +92 -0
- veu-0.4.0/deploy/helm/veu/templates/service.yaml +14 -0
- veu-0.4.0/deploy/helm/veu/values.yaml +99 -0
- veu-0.4.0/deploy/veu-empresa.toml +42 -0
- veu-0.4.0/docs/banner.png +0 -0
- veu-0.4.0/docs/benchmark.md +32 -0
- veu-0.4.0/docs/empresas.md +234 -0
- veu-0.4.0/docs/extensao.md +45 -0
- veu-0.4.0/docs/integracoes.md +694 -0
- veu-0.4.0/docs/playground.png +0 -0
- veu-0.4.0/examples/anthropic_sdk.py +22 -0
- veu-0.4.0/examples/cursor-hooks.json +11 -0
- veu-0.4.0/examples/dados.py +25 -0
- veu-0.4.0/examples/decorador.py +24 -0
- veu-0.4.0/examples/github-action.yml +24 -0
- veu-0.4.0/examples/langchain_chat.py +25 -0
- veu-0.4.0/examples/logs.py +21 -0
- veu-0.4.0/examples/meu_detector.py +28 -0
- veu-0.4.0/examples/n8n.md +52 -0
- veu-0.4.0/examples/node.mjs +15 -0
- veu-0.4.0/examples/observabilidade.py +28 -0
- veu-0.4.0/examples/openai_sdk.py +26 -0
- veu-0.4.0/examples/proxy.sh +28 -0
- veu-0.4.0/examples/veu.toml +108 -0
- veu-0.4.0/extensao/conteudo.js +302 -0
- veu-0.4.0/extensao/fundo.js +104 -0
- veu-0.4.0/extensao/icones/128.png +0 -0
- veu-0.4.0/extensao/icones/16.png +0 -0
- veu-0.4.0/extensao/icones/32.png +0 -0
- veu-0.4.0/extensao/icones/48.png +0 -0
- veu-0.4.0/extensao/manifest.json +58 -0
- veu-0.4.0/extensao/politica.json +48 -0
- veu-0.4.0/extensao/popup.css +28 -0
- veu-0.4.0/extensao/popup.html +46 -0
- veu-0.4.0/extensao/popup.js +56 -0
- veu-0.4.0/extensao/teste/e2e.mjs +210 -0
- veu-0.4.0/js/README.md +114 -0
- veu-0.4.0/js/package-lock.json +1158 -0
- veu-0.4.0/js/package.json +70 -0
- veu-0.4.0/js/scripts/empacotar.mjs +15 -0
- veu-0.4.0/js/scripts/gerar-dados.mjs +36 -0
- veu-0.4.0/js/src/addresses.ts +55 -0
- veu-0.4.0/js/src/analyzer.ts +105 -0
- veu-0.4.0/js/src/anonymizer.ts +194 -0
- veu-0.4.0/js/src/entities.ts +57 -0
- veu-0.4.0/js/src/gateway.ts +683 -0
- veu-0.4.0/js/src/index.ts +207 -0
- veu-0.4.0/js/src/integrations/ai-sdk.ts +199 -0
- veu-0.4.0/js/src/integrations/fetch.ts +118 -0
- veu-0.4.0/js/src/navegador.ts +4 -0
- veu-0.4.0/js/src/patterns.ts +204 -0
- veu-0.4.0/js/src/persons.ts +228 -0
- veu-0.4.0/js/src/secrets.ts +155 -0
- veu-0.4.0/js/src/sha256.ts +64 -0
- veu-0.4.0/js/src/text.ts +131 -0
- veu-0.4.0/js/src/validators.ts +264 -0
- veu-0.4.0/js/src/vault.ts +222 -0
- veu-0.4.0/js/test/conformidade.json +4441 -0
- veu-0.4.0/js/test/conformidade.test.ts +35 -0
- veu-0.4.0/js/test/core.test.ts +123 -0
- veu-0.4.0/js/test/integrations.test.ts +147 -0
- veu-0.4.0/js/tsconfig.build.json +10 -0
- veu-0.4.0/js/tsconfig.json +18 -0
- veu-0.4.0/plugin/.claude-plugin/icon.png +0 -0
- veu-0.4.0/plugin/.claude-plugin/plugin.json +13 -0
- veu-0.4.0/plugin/.mcp.json +8 -0
- veu-0.4.0/plugin/hooks/hooks.json +20 -0
- veu-0.4.0/plugin/skills/protecao-de-dados/SKILL.md +55 -0
- veu-0.4.0/pyproject.toml +80 -0
- veu-0.4.0/scripts/empacotar_navegador.py +42 -0
- veu-0.4.0/scripts/gerar_conformidade.py +58 -0
- veu-0.4.0/scripts/gerar_icones.py +70 -0
- veu-0.4.0/src/veu/__init__.py +78 -0
- veu-0.4.0/src/veu/__main__.py +3 -0
- veu-0.4.0/src/veu/_text.py +31 -0
- veu-0.4.0/src/veu/analyzer.py +121 -0
- veu-0.4.0/src/veu/anonymizer.py +209 -0
- veu-0.4.0/src/veu/bench/__init__.py +1 -0
- veu-0.4.0/src/veu/bench/evaluate.py +140 -0
- veu-0.4.0/src/veu/bench/generator.py +241 -0
- veu-0.4.0/src/veu/bench/hard.py +50 -0
- veu-0.4.0/src/veu/cli.py +429 -0
- veu-0.4.0/src/veu/config.py +357 -0
- veu-0.4.0/src/veu/core.py +136 -0
- veu-0.4.0/src/veu/data/ambiguous.txt +27 -0
- veu-0.4.0/src/veu/data/first_names.txt +561 -0
- veu-0.4.0/src/veu/data/organizations.txt +89 -0
- veu-0.4.0/src/veu/data/places.txt +197 -0
- veu-0.4.0/src/veu/data/segredos.json +83 -0
- veu-0.4.0/src/veu/data/stopwords.txt +226 -0
- veu-0.4.0/src/veu/data/surnames.txt +210 -0
- veu-0.4.0/src/veu/demo.py +85 -0
- veu-0.4.0/src/veu/documents.py +292 -0
- veu-0.4.0/src/veu/entities.py +64 -0
- veu-0.4.0/src/veu/files.py +180 -0
- veu-0.4.0/src/veu/gateway/__init__.py +21 -0
- veu-0.4.0/src/veu/gateway/adapters.py +652 -0
- veu-0.4.0/src/veu/gateway/pipeline.py +99 -0
- veu-0.4.0/src/veu/gateway/sse.py +130 -0
- veu-0.4.0/src/veu/hooks.py +117 -0
- veu-0.4.0/src/veu/integrations/__init__.py +1 -0
- veu-0.4.0/src/veu/integrations/_transport.py +160 -0
- veu-0.4.0/src/veu/integrations/decorator.py +137 -0
- veu-0.4.0/src/veu/integrations/httpx.py +23 -0
- veu-0.4.0/src/veu/integrations/httpx2.py +20 -0
- veu-0.4.0/src/veu/integrations/langchain.py +201 -0
- veu-0.4.0/src/veu/integrations/litellm.py +204 -0
- veu-0.4.0/src/veu/integrations/logging.py +44 -0
- veu-0.4.0/src/veu/integrations/loguru.py +30 -0
- veu-0.4.0/src/veu/integrations/mcp.py +246 -0
- veu-0.4.0/src/veu/integrations/pandas.py +58 -0
- veu-0.4.0/src/veu/integrations/sdk.py +49 -0
- veu-0.4.0/src/veu/integrations/sentry.py +70 -0
- veu-0.4.0/src/veu/integrations/structlog.py +52 -0
- veu-0.4.0/src/veu/recognizers/__init__.py +23 -0
- veu-0.4.0/src/veu/recognizers/addresses.py +65 -0
- veu-0.4.0/src/veu/recognizers/base.py +71 -0
- veu-0.4.0/src/veu/recognizers/optional.py +110 -0
- veu-0.4.0/src/veu/recognizers/patterns.py +238 -0
- veu-0.4.0/src/veu/recognizers/persons.py +224 -0
- veu-0.4.0/src/veu/recognizers/secrets.py +185 -0
- veu-0.4.0/src/veu/reporting.py +122 -0
- veu-0.4.0/src/veu/server/__init__.py +5 -0
- veu-0.4.0/src/veu/server/app.py +482 -0
- veu-0.4.0/src/veu/server/state.py +316 -0
- veu-0.4.0/src/veu/server/static/playground.html +218 -0
- veu-0.4.0/src/veu/sessions.py +77 -0
- veu-0.4.0/src/veu/sources.py +460 -0
- veu-0.4.0/src/veu/surrogates.py +319 -0
- veu-0.4.0/src/veu/validators.py +293 -0
- veu-0.4.0/src/veu/vault.py +285 -0
- veu-0.4.0/tests/test_anonymizer.py +142 -0
- veu-0.4.0/tests/test_config_cli_bench.py +131 -0
- veu-0.4.0/tests/test_detection.py +129 -0
- veu-0.4.0/tests/test_empresa.py +184 -0
- veu-0.4.0/tests/test_flexibility.py +263 -0
- veu-0.4.0/tests/test_gateway.py +205 -0
- veu-0.4.0/tests/test_hooks.py +114 -0
- veu-0.4.0/tests/test_integrations.py +136 -0
- veu-0.4.0/tests/test_integrations_extra.py +234 -0
- veu-0.4.0/tests/test_litellm.py +86 -0
- veu-0.4.0/tests/test_secrets.py +165 -0
- veu-0.4.0/tests/test_security.py +174 -0
- veu-0.4.0/tests/test_server.py +186 -0
- veu-0.4.0/tests/test_sources.py +351 -0
- veu-0.4.0/tests/test_validators.py +84 -0
- veu-0.4.0/web/app.js +186 -0
- veu-0.4.0/web/estilo.css +98 -0
- veu-0.4.0/web/index.html +92 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "veu",
|
|
3
|
+
"owner": {
|
|
4
|
+
"name": "guhttps",
|
|
5
|
+
"url": "https://github.com/guhttps"
|
|
6
|
+
},
|
|
7
|
+
"metadata": {
|
|
8
|
+
"description": "Plugins do Véu: proteção de dados pessoais e segredos para agentes de IA."
|
|
9
|
+
},
|
|
10
|
+
"plugins": [
|
|
11
|
+
{
|
|
12
|
+
"name": "veu",
|
|
13
|
+
"source": "./plugin",
|
|
14
|
+
"description": "Bloqueia segredos em prompts e arquivos e lê Notion, planilhas e documentos com os dados trocados por marcadores.",
|
|
15
|
+
"version": "0.4.0",
|
|
16
|
+
"category": "security"
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
}
|
veu-0.4.0/.dockerignore
ADDED
veu-0.4.0/.gitattributes
ADDED
veu-0.4.0/.gitignore
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
.venv/
|
|
5
|
+
venv/
|
|
6
|
+
build/
|
|
7
|
+
dist/
|
|
8
|
+
*.egg-info/
|
|
9
|
+
.pytest_cache/
|
|
10
|
+
.ruff_cache/
|
|
11
|
+
|
|
12
|
+
# Dados locais do Véu: podem conter dados pessoais reais
|
|
13
|
+
/veu.toml
|
|
14
|
+
cofre*.json
|
|
15
|
+
*-auditoria.jsonl
|
|
16
|
+
veu-auditoria.jsonl
|
|
17
|
+
|
|
18
|
+
# Sistema e editores
|
|
19
|
+
.DS_Store
|
|
20
|
+
Thumbs.db
|
|
21
|
+
.vscode/
|
|
22
|
+
.idea/
|
|
23
|
+
|
|
24
|
+
# JavaScript
|
|
25
|
+
js/node_modules/
|
|
26
|
+
js/dist/
|
|
27
|
+
js/src/data.ts
|
|
28
|
+
js/build-test/
|
|
29
|
+
extensao/veu.global.js
|
|
30
|
+
web/veu.global.js
|
veu-0.4.0/AGENTS.md
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Instruções para agentes de código (Codex, Claude Code e outros)
|
|
2
|
+
|
|
3
|
+
O Véu esconde dados pessoais brasileiros e segredos antes de textos irem para modelos de IA e restaura as respostas. Leia o README para a visão geral.
|
|
4
|
+
|
|
5
|
+
## Comandos
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install -e ".[dev]" # ambiente (Python 3.11+)
|
|
9
|
+
pytest # todos os testes; precisam passar
|
|
10
|
+
ruff check . # lint; precisa passar
|
|
11
|
+
veu avaliar # benchmark; o vazamento da validação não pode piorar
|
|
12
|
+
python scripts/gerar_conformidade.py # depois de mudar um detector: atualiza js/test/conformidade.json
|
|
13
|
+
cd js && npm ci && npm test # versão JavaScript (precisa dar o mesmo resultado que a Python)
|
|
14
|
+
node extensao/teste/e2e.mjs # extensão e página num Chrome de verdade
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
No Windows, o ambiente virtual fica em `.venv/Scripts/`.
|
|
18
|
+
|
|
19
|
+
## Estrutura
|
|
20
|
+
|
|
21
|
+
- `src/veu/recognizers/`: detectores (padrões, nomes, endereços, segredos, spaCy, LLM local). Os formatos de chaves com prefixo ficam em `src/veu/data/segredos.json`, usado também pelo JavaScript.
|
|
22
|
+
- `src/veu/analyzer.py`: junta detectores e resolve sobreposições.
|
|
23
|
+
- `src/veu/anonymizer.py` e `vault.py`: operadores, cofre e restauração (inclusive em streaming).
|
|
24
|
+
- `src/veu/gateway/`: formatos das APIs de IA (adaptadores e SSE), compartilhados pelo proxy e pelos transportes.
|
|
25
|
+
- `src/veu/server/`: proxy Starlette, API REST e playground.
|
|
26
|
+
- `src/veu/integrations/`: transportes httpx/httpx2, atalhos de SDK, LangChain, MCP, decorador, pandas, logging, structlog, loguru e Sentry.
|
|
27
|
+
- `src/veu/sessions.py`: cofre compartilhado por várias chamadas (base do decorador, LangChain e MCP).
|
|
28
|
+
- `src/veu/files.py`, `documents.py` e `sources.py`: arquivos (CSV, JSON, Word, Excel, PowerPoint, PDF) e fontes (Notion, Google, links).
|
|
29
|
+
- `src/veu/reporting.py`: relatórios (texto, GitHub, SARIF, JSON). `src/veu/hooks.py`: ganchos para Claude Code e Cursor. `src/veu/demo.py`: `veu demonstrar`.
|
|
30
|
+
- `src/veu/integrations/litellm.py`: guardrail do LiteLLM. `src/veu/server/state.py`: sessões (memória e Redis), auditoria encadeada e métricas.
|
|
31
|
+
- `js/`: biblioteca `veu-js` (TypeScript), com `createFetch` e o middleware do AI SDK. Porte fiel do Python; `scripts/gerar-dados.mjs` copia as listas de `src/veu/data`.
|
|
32
|
+
- `web/`: página do GitHub Pages. `extensao/`: extensão para Chrome e Edge. `plugin/` e `.claude-plugin/`: plugin do Claude Code com skill.
|
|
33
|
+
- `deploy/`: chart Helm e docker-compose.
|
|
34
|
+
- `action.yml`: GitHub Action composta (verifica dados pessoais no repositório).
|
|
35
|
+
- `src/veu/bench/`: gerador de dados anotados e avaliação.
|
|
36
|
+
|
|
37
|
+
## Regras
|
|
38
|
+
|
|
39
|
+
- Nunca use dados pessoais reais em código, testes, exemplos ou commits. Gere valores com `veu.surrogates`.
|
|
40
|
+
- Não ajuste o detector olhando `VALIDATION_TEMPLATES` em `bench/generator.py`: esse conjunto mede a generalização.
|
|
41
|
+
- Toda correção de detecção vem com um teste que falharia sem ela.
|
|
42
|
+
- Identificadores em inglês; textos para o usuário, chaves do `veu.toml` e comandos da CLI em português do Brasil.
|
|
43
|
+
- O núcleo (`veu` sem extras) não pode ganhar dependências. Servidor e integrações usam extras opcionais, importados só dentro do módulo da integração. A biblioteca JavaScript também não tem dependências de execução.
|
|
44
|
+
- Nunca escreva chaves de API com formato real em testes ou exemplos: monte os valores em pedaços (`"sk-" + "proj-" + ...`), para os scanners de segredos não confundirem com chaves reais.
|
|
45
|
+
- Uma mudança de detecção em Python precisa ir também para `js/src/` (o teste de conformidade falha se as duas versões divergirem).
|
|
46
|
+
- Commits em inglês, no imperativo. Registre mudanças visíveis no `CHANGELOG.md`.
|
veu-0.4.0/CHANGELOG.md
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Todas as mudanças relevantes ficam registradas aqui.
|
|
4
|
+
O formato segue o [Keep a Changelog](https://keepachangelog.com/pt-BR/1.1.0/) e o projeto usa [versionamento semântico](https://semver.org/lang/pt-BR/).
|
|
5
|
+
|
|
6
|
+
## [Unreleased]
|
|
7
|
+
|
|
8
|
+
## [0.4.0] - 2026-11-06
|
|
9
|
+
|
|
10
|
+
Além do proxy e além dos dados brasileiros: segredos, navegador, JavaScript, Notion e documentos, empresas e agentes.
|
|
11
|
+
|
|
12
|
+
### Detecção
|
|
13
|
+
- **Segredos:**
|
|
14
|
+
- chaves de API de mais de 30 serviços (OpenAI, Anthropic, AWS, Google, GitHub, GitLab, Stripe, Slack, Hugging Face, Groq, Notion, Mercado Pago, Asaas...);
|
|
15
|
+
- JWT, tokens Bearer e Basic;
|
|
16
|
+
- senhas em configuração e em prosa;
|
|
17
|
+
- chaves privadas, inclusive dentro de JSON;
|
|
18
|
+
- URLs de conexão com senha;
|
|
19
|
+
- campos como `api_key: ...`.
|
|
20
|
+
- Novo detector `segredos`, ligado por padrão. As regras com prefixo ficam em `data/segredos.json`, compartilhadas com a versão em JavaScript.
|
|
21
|
+
- IBAN (módulo 97) e telefones internacionais.
|
|
22
|
+
- Operadores `sintetico` (chave falsa no mesmo formato) e `mascara` (`sk-proj-****`) para segredos.
|
|
23
|
+
|
|
24
|
+
### Navegador e JavaScript
|
|
25
|
+
- **Página web** (GitHub Pages): proteger, copiar e restaurar sem instalar nada. A detecção roda no navegador e a página bloqueia conexões.
|
|
26
|
+
- **Extensão para Chrome e Edge:**
|
|
27
|
+
- funciona em ChatGPT, Claude, Gemini, Copilot, Perplexity, DeepSeek e outros;
|
|
28
|
+
- modos avisar, proteger e bloquear;
|
|
29
|
+
- protege ao colar e ao enviar e restaura as respostas na tela;
|
|
30
|
+
- menu do botão direito em qualquer site;
|
|
31
|
+
- política gerenciada para empresas.
|
|
32
|
+
- **`veu-js`**, a biblioteca JavaScript e TypeScript:
|
|
33
|
+
- a mesma detecção da versão em Python, garantida por um teste de conformidade;
|
|
34
|
+
- `createFetch()` para os SDKs da OpenAI e da Anthropic;
|
|
35
|
+
- middleware para o AI SDK da Vercel;
|
|
36
|
+
- pacote para o navegador.
|
|
37
|
+
- Teste de ponta a ponta num Chrome de verdade.
|
|
38
|
+
|
|
39
|
+
### Notion, Google e documentos
|
|
40
|
+
- `veu ler` lê páginas e bases do Notion, Google Docs, Sheets e Slides, links, Word, Excel, PowerPoint e PDF, já protegidos.
|
|
41
|
+
- `veu anonimizar` e `veu restaurar` tratam Word, Excel e PowerPoint no próprio formato, mantendo a formatação, as fórmulas, os cabeçalhos e os metadados. PDF sai como texto.
|
|
42
|
+
- Ferramenta MCP `ler_protegido`. `verificar_arquivo` e `anonimizar_arquivo` aceitam documentos.
|
|
43
|
+
- `expandir_links` no proxy: links do Notion e do Google viram o conteúdo protegido, só para domínios permitidos.
|
|
44
|
+
|
|
45
|
+
### Empresas
|
|
46
|
+
- Equipes com token e política próprios (`[equipes.NOME]`), com a equipe na auditoria e nas métricas.
|
|
47
|
+
- Auditoria encadeada (hash da linha anterior e HMAC opcional) e `veu auditoria verificar`.
|
|
48
|
+
- Sessões no Redis (`sessoes = "redis://..."`) com trava por sessão, para várias réplicas.
|
|
49
|
+
- Desvio de requisições com dados sensíveis para um modelo interno (`desviar_para`, `modelo_desvio`, `desviar_tipos`).
|
|
50
|
+
- Prontidão em `/veu/pronto`.
|
|
51
|
+
- Guardrail para o LiteLLM Proxy (`veu.integrations.litellm.VeuGuardrail`).
|
|
52
|
+
- Chart Helm (HPA, PodDisruptionBudget, NetworkPolicy, ServiceMonitor, contêiner sem root e só leitura) e docker-compose com Redis.
|
|
53
|
+
- A imagem Docker passa a ser publicada em `ghcr.io/guhttps/veu` a cada release.
|
|
54
|
+
|
|
55
|
+
### Agentes
|
|
56
|
+
- `veu gancho prompt` e `veu gancho arquivo` para Claude Code e Cursor:
|
|
57
|
+
- prompts com segredos são bloqueados;
|
|
58
|
+
- o agente não lê arquivos com segredos e recebe a sugestão de usar `ler_protegido`.
|
|
59
|
+
- Plugin do Claude Code com skill, ganchos e servidor MCP, instalável pelo marketplace deste repositório.
|
|
60
|
+
|
|
61
|
+
### Corrigido
|
|
62
|
+
- Linhas de bases de dados do Notion saíam sem a coluna de título.
|
|
63
|
+
- Documentos do Word podiam deixar parágrafos sem proteção quando o lxml reaproveitava endereços de memória (`id()` trocado pelo próprio elemento).
|
|
64
|
+
|
|
65
|
+
### Outros
|
|
66
|
+
- `veu demonstrar` mostra, sem chave de API, o que chegaria ao provedor com e sem o Véu.
|
|
67
|
+
- Novos extras: `documentos`, `litellm` e `redis`.
|
|
68
|
+
|
|
69
|
+
## [0.3.0] - 2026-11-05
|
|
70
|
+
|
|
71
|
+
Muitas integrações novas e mais flexibilidade.
|
|
72
|
+
|
|
73
|
+
### Integrações
|
|
74
|
+
- **LangChain nativo:** `protect_model()` protege qualquer modelo ou cadeia (invoke, stream, async, argumentos de ferramentas) e `VeuDocumentTransformer` anonimiza documentos para RAG com um único cofre.
|
|
75
|
+
- **Servidor MCP** (`veu mcp`) para Claude Code, Claude Desktop e Cursor, com ferramentas que auditam e anonimizam arquivos sem trazer os dados para a conversa.
|
|
76
|
+
- **Decorador `@protect`** para qualquer função que chama um modelo, inclusive `async` e geradoras (streaming).
|
|
77
|
+
- **`veu.session()`:** um cofre compartilhado por várias chamadas, com `anonymize_data` para dicts e listas e `restore_stream`.
|
|
78
|
+
- **API nativa do Ollama** (`/api/chat`, `/api/generate`, `/api/embed`) com streaming em JSON por linha.
|
|
79
|
+
- **10 provedores novos:** xAI, Perplexity, Fireworks, Cerebras, Hugging Face, Cohere, NVIDIA, SambaNova, vLLM e llama.cpp. Guia para o Azure OpenAI.
|
|
80
|
+
- **Arquivos de dados:** `veu anonimizar` e `veu restaurar` entendem CSV, TSV, JSON e JSONL, com `--campos` e `--forcar campo=TIPO`, e o mesmo marcador em todas as linhas.
|
|
81
|
+
- **pandas:** `anonymize_dataframe()` e `restore_dataframe()`.
|
|
82
|
+
- **Observabilidade:** integrações com Sentry (`before_send`), structlog e loguru, e métricas Prometheus em `/veu/metricas`.
|
|
83
|
+
- **CI:** GitHub Action (`uses: guhttps/veu@v0.3.0`) com anotações no PR, e `veu verificar --formato github|sarif|json` (SARIF para a aba Security).
|
|
84
|
+
|
|
85
|
+
### Flexibilidade
|
|
86
|
+
- Detectores próprios por `Veu(extra_recognizers=[...])`, por caminho de importação no `veu.toml` ou como plugin (entry point `veu.detectores`).
|
|
87
|
+
- `ignorar_padroes`: exceções por expressão regular.
|
|
88
|
+
- Regras por provedor: `anonimizar`, `operador` e `bloquear`, inclusive para os provedores prontos.
|
|
89
|
+
- Cabeçalho `X-Veu-Operador` para escolher o operador por requisição (`operador_por_requisicao`).
|
|
90
|
+
|
|
91
|
+
### Corrigido
|
|
92
|
+
- Caminhos `/veu/...` desconhecidos (como `/veu/metricas` com as métricas desligadas) respondem 404 em vez de serem repassados ao provedor.
|
|
93
|
+
- Tuplas dentro de listas e dicts agora também são anonimizadas.
|
|
94
|
+
|
|
95
|
+
## [0.2.0] - 2026-11-04
|
|
96
|
+
|
|
97
|
+
Revisão de segurança.
|
|
98
|
+
|
|
99
|
+
### Segurança
|
|
100
|
+
- Sessões do proxy separadas pela credencial do cliente: com outra chave de API, não dá mais para reutilizar o identificador de sessão de alguém e pedir ao modelo que repita os marcadores dela.
|
|
101
|
+
- A API REST só continua sessões que ela mesma criou (identificadores aleatórios), e as sessões da API e do proxy ficam em cofres separados.
|
|
102
|
+
- No localhost, o servidor só aceita o Host `localhost`/`127.0.0.1` e recusa requisições com `Origin` de outro site, contra DNS rebinding e CSRF vindos de páginas abertas no navegador.
|
|
103
|
+
- Fora do localhost, o servidor não inicia sem `VEU_TOKEN`, a menos que `VEU_PERMITIR_SEM_TOKEN=1`.
|
|
104
|
+
- Log de acesso do servidor HTTP desligado, porque a URL pode trazer a chave da API (`?key=` do Gemini).
|
|
105
|
+
- Cookies, `Referer` e `Origin` do cliente não são repassados ao provedor, e o `Set-Cookie` do provedor não volta ao cliente.
|
|
106
|
+
- Limite de tamanho do corpo (`limite_corpo_mb`, padrão de 20 MB) e processamento fora do laço principal do servidor.
|
|
107
|
+
- Erros de conexão com o provedor não repetem mais detalhes internos (como a URL com a chave).
|
|
108
|
+
- Cabeçalhos de segurança no playground (CSP, `frame-ancestors 'none'`) e escape de todos os rótulos exibidos.
|
|
109
|
+
- O cofre salvo pela CLI é criado com permissão só para o dono (Linux e macOS).
|
|
110
|
+
- E-mails do modo sintético e dos exemplos usam domínios reservados (`example.com`), para nunca inventar o endereço de alguém de verdade.
|
|
111
|
+
|
|
112
|
+
### Corrigido
|
|
113
|
+
- A ligação de nomes parciais tinha custo quadrático: um texto de 1 MB levava cerca de 40 segundos e agora leva cerca de 3.
|
|
114
|
+
- Condição de corrida: duas requisições simultâneas na mesma sessão podiam receber o mesmo marcador para valores diferentes.
|
|
115
|
+
- JSON aninhado demais agora é recusado com erro 400 em vez de erro interno.
|
|
116
|
+
|
|
117
|
+
### Alterado
|
|
118
|
+
- `POST /veu/v1/anonimizar` com uma `sessao` que não existe responde 404 em vez de criar a sessão.
|
|
119
|
+
- Requisições `OPTIONS` não são mais repassadas ao provedor.
|
|
120
|
+
|
|
121
|
+
## [0.1.0] - 2026-11-04
|
|
122
|
+
|
|
123
|
+
Primeira versão.
|
|
124
|
+
|
|
125
|
+
### Detecção
|
|
126
|
+
- 21 tipos de dados brasileiros, com validação de dígitos verificadores de CPF, CNPJ (numérico e alfanumérico), PIS, CNS, CNH, título de eleitor, RENAVAM, processo CNJ e cartões (Luhn).
|
|
127
|
+
- Nomes de pessoas por listas de nomes brasileiros, capitalização e contexto, sem modelo de linguagem; detectores opcionais com spaCy e com um modelo local compatível com OpenAI.
|
|
128
|
+
- Endereços com logradouro, nome, número e complemento.
|
|
129
|
+
- Limiar de pontuação, lista de valores permitidos e padrões personalizados.
|
|
130
|
+
|
|
131
|
+
### Anonimização
|
|
132
|
+
- Operadores `token`, `sintetico`, `mascara`, `remover` e `hash`, configuráveis por tipo de dado.
|
|
133
|
+
- Cofre reversível, com o mesmo marcador para grafias diferentes do mesmo valor e ligação de nomes parciais ao nome completo.
|
|
134
|
+
- Restauração tolerante a marcadores reescritos pelo modelo e restauração em streaming.
|
|
135
|
+
|
|
136
|
+
### Integrações
|
|
137
|
+
- Proxy para OpenAI (Chat Completions, Responses, Embeddings e Completions), Anthropic (Messages) e Gemini (generateContent e streamGenerateContent), com e sem streaming.
|
|
138
|
+
- Atalhos para Groq, OpenRouter, DeepSeek, Mistral, Together, Maritaca, Ollama, LM Studio e o Gemini compatível com OpenAI, além de provedores próprios.
|
|
139
|
+
- Transportes para `httpx` e `httpx2` e atalhos `openai_client()` e `anthropic_client()`.
|
|
140
|
+
- API REST, playground, filtro de `logging`, hook de pre-commit, CLI e Dockerfile.
|
|
141
|
+
- Política de bloqueio por tipo de dado, sessões, token de acesso, estatísticas e log de auditoria só com contagens.
|
|
142
|
+
|
|
143
|
+
### Benchmark
|
|
144
|
+
- Gerador de textos anotados com dados falsos, conjuntos de desenvolvimento, validação e casos difíceis, e o comando `veu avaliar`.
|
|
145
|
+
|
|
146
|
+
[Unreleased]: https://github.com/guhttps/veu/compare/v0.4.0...HEAD
|
|
147
|
+
[0.4.0]: https://github.com/guhttps/veu/compare/v0.3.0...v0.4.0
|
|
148
|
+
[0.3.0]: https://github.com/guhttps/veu/compare/v0.2.0...v0.3.0
|
|
149
|
+
[0.2.0]: https://github.com/guhttps/veu/compare/v0.1.0...v0.2.0
|
|
150
|
+
[0.1.0]: https://github.com/guhttps/veu/releases/tag/v0.1.0
|
veu-0.4.0/CLAUDE.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@AGENTS.md
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Como contribuir
|
|
2
|
+
|
|
3
|
+
Obrigado pelo interesse! Bugs, ideias, nomes que faltam e casos difíceis para o benchmark são muito bem-vindos.
|
|
4
|
+
|
|
5
|
+
> [!IMPORTANT]
|
|
6
|
+
> **Nunca use dados pessoais reais** em issues, testes ou exemplos. Gere valores falsos com `veu gerar-dataset` ou com as funções de `veu.surrogates`.
|
|
7
|
+
|
|
8
|
+
## Ambiente
|
|
9
|
+
|
|
10
|
+
Requer Python 3.11 ou mais recente.
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
git clone https://github.com/guhttps/veu && cd veu
|
|
14
|
+
python -m venv .venv
|
|
15
|
+
.venv/Scripts/activate # Linux/macOS: source .venv/bin/activate
|
|
16
|
+
pip install -e ".[dev]"
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Antes de abrir um pull request
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pytest # testes
|
|
23
|
+
ruff check . # lint
|
|
24
|
+
veu avaliar # o vazamento na validação não pode piorar
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Se mexeu num detector, mude também a versão JavaScript e confira que as duas continuam iguais:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
python scripts/gerar_conformidade.py
|
|
31
|
+
cd js && npm ci && npm test
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Se mexeu na extensão ou na página: `cd js && npm run build && cd .. && python scripts/empacotar_navegador.py && node extensao/teste/e2e.mjs`.
|
|
35
|
+
|
|
36
|
+
O CI roda:
|
|
37
|
+
|
|
38
|
+
- os testes no Linux e no Windows, com Python 3.11 a 3.14;
|
|
39
|
+
- a versão JavaScript no Node 22, 24 e 26;
|
|
40
|
+
- a extensão num Chrome de verdade;
|
|
41
|
+
- o chart Helm e o guardrail do LiteLLM.
|
|
42
|
+
|
|
43
|
+
Ele falha se o vazamento do benchmark passar de 5%.
|
|
44
|
+
|
|
45
|
+
## Onde mexer
|
|
46
|
+
|
|
47
|
+
| Quero... | Arquivo |
|
|
48
|
+
|---|---|
|
|
49
|
+
| Adicionar ou ajustar um documento (formato, contexto, pontuação) | `src/veu/recognizers/patterns.py` (e `js/src/patterns.ts`) |
|
|
50
|
+
| Adicionar o formato de chave de um serviço | `src/veu/data/segredos.json` (vale para Python e JavaScript) |
|
|
51
|
+
| Senhas e segredos por nome de campo | `src/veu/recognizers/secrets.py` (e `js/src/secrets.ts`) |
|
|
52
|
+
| Melhorar a detecção de nomes | `src/veu/recognizers/persons.py` e as listas em `src/veu/data/` |
|
|
53
|
+
| Adicionar nomes, sobrenomes, cidades ou empresas | `src/veu/data/*.txt` (um por linha) |
|
|
54
|
+
| Melhorar endereços | `src/veu/recognizers/addresses.py` |
|
|
55
|
+
| Validar um novo documento | `src/veu/validators.py` (e um gerador em `surrogates.py`) |
|
|
56
|
+
| Suportar outra API de IA | `src/veu/gateway/adapters.py` (e um provedor em `config.py`) |
|
|
57
|
+
| Integrar com uma biblioteca (LangChain, Sentry, pandas...) | `src/veu/integrations/` |
|
|
58
|
+
| Ferramentas do servidor MCP | `src/veu/integrations/mcp.py` |
|
|
59
|
+
| Arquivos de dados e relatórios (SARIF, GitHub) | `src/veu/files.py` e `src/veu/reporting.py` |
|
|
60
|
+
| Word, Excel, PowerPoint e PDF | `src/veu/documents.py` |
|
|
61
|
+
| Notion, Google e links | `src/veu/sources.py` |
|
|
62
|
+
| Biblioteca JavaScript, `createFetch`, AI SDK | `js/src/` |
|
|
63
|
+
| Extensão, página web e plugin do Claude Code | `extensao/`, `web/`, `plugin/` |
|
|
64
|
+
| Gateway para empresas, Helm e LiteLLM | `src/veu/server/`, `deploy/`, `src/veu/integrations/litellm.py` |
|
|
65
|
+
| Mudar o proxy ou a API REST | `src/veu/server/app.py` |
|
|
66
|
+
| Adicionar casos ao benchmark | `src/veu/bench/hard.py` (escritos à mão) ou `generator.py` |
|
|
67
|
+
|
|
68
|
+
## Regras do benchmark
|
|
69
|
+
|
|
70
|
+
- Casos difíceis novos vão para `bench/hard.py`.
|
|
71
|
+
- **Não ajuste o detector olhando o conjunto de validação** (`VALIDATION_TEMPLATES`). Se precisar de mais modelos para ajustar, acrescente ao conjunto de desenvolvimento. Assim o número da validação continua honesto.
|
|
72
|
+
- Toda correção de detecção vem com um teste que falharia sem ela.
|
|
73
|
+
|
|
74
|
+
## Convenções
|
|
75
|
+
|
|
76
|
+
- Código e identificadores em inglês; textos para quem usa (mensagens, documentação, chaves do `veu.toml`, comandos da CLI) em português do Brasil.
|
|
77
|
+
- Mensagens de commit em inglês, no imperativo: `Add`, `Fix`, `Detect`...
|
|
78
|
+
- Registre mudanças visíveis no `CHANGELOG.md`, na seção `[Unreleased]`.
|
|
79
|
+
|
|
80
|
+
## Publicar uma versão (mantenedores)
|
|
81
|
+
|
|
82
|
+
1. Atualize a versão em todos estes lugares (o teste `test_plugin_files_are_consistent` confere os três primeiros):
|
|
83
|
+
- `__version__` em `src/veu/__init__.py`;
|
|
84
|
+
- `plugin/.claude-plugin/plugin.json` e `.claude-plugin/marketplace.json`;
|
|
85
|
+
- `js/package.json` e `VERSION` em `js/src/index.ts`;
|
|
86
|
+
- `extensao/manifest.json`;
|
|
87
|
+
- `deploy/helm/veu/Chart.yaml`.
|
|
88
|
+
2. No `CHANGELOG.md`, renomeie `[Unreleased]` para `[X.Y.Z] - AAAA-MM-DD`.
|
|
89
|
+
3. Crie a tag `vX.Y.Z` e envie. O workflow de release:
|
|
90
|
+
- publica a release no GitHub, com o pacote Python, o pacote npm e o `.zip` da extensão;
|
|
91
|
+
- publica a imagem em `ghcr.io/guhttps/veu`;
|
|
92
|
+
- publica no PyPI e no npm, se as variáveis `PYPI_PUBLICAR` e `NPM_PUBLICAR` estiverem ligadas.
|
veu-0.4.0/Dockerfile
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
FROM python:3.13-slim
|
|
2
|
+
|
|
3
|
+
LABEL org.opencontainers.image.title="Véu" \
|
|
4
|
+
org.opencontainers.image.description="Gateway que esconde dados pessoais e segredos antes de enviar textos para modelos de IA" \
|
|
5
|
+
org.opencontainers.image.source="https://github.com/guhttps/veu" \
|
|
6
|
+
org.opencontainers.image.licenses="MIT"
|
|
7
|
+
|
|
8
|
+
ENV PYTHONDONTWRITEBYTECODE=1 \
|
|
9
|
+
PYTHONUNBUFFERED=1 \
|
|
10
|
+
PIP_NO_CACHE_DIR=1 \
|
|
11
|
+
PIP_DISABLE_PIP_VERSION_CHECK=1 \
|
|
12
|
+
VEU_HOST=0.0.0.0 \
|
|
13
|
+
VEU_PORTA=8787
|
|
14
|
+
|
|
15
|
+
WORKDIR /app
|
|
16
|
+
COPY pyproject.toml README.md LICENSE ./
|
|
17
|
+
COPY src ./src
|
|
18
|
+
RUN pip install ".[servidor,redis,documentos]" && useradd --create-home --uid 10001 veu
|
|
19
|
+
|
|
20
|
+
USER veu
|
|
21
|
+
EXPOSE 8787
|
|
22
|
+
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s \
|
|
23
|
+
CMD python -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8787/veu/saude', timeout=4)"
|
|
24
|
+
|
|
25
|
+
# O Véu não inicia fora do localhost sem VEU_TOKEN (ou VEU_PERMITIR_SEM_TOKEN=1): veja docs/integracoes.md#docker
|
|
26
|
+
CMD ["veu", "servir"]
|
veu-0.4.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 guhttps
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|