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.
Files changed (171) hide show
  1. veu-0.4.0/.claude-plugin/marketplace.json +19 -0
  2. veu-0.4.0/.dockerignore +12 -0
  3. veu-0.4.0/.gitattributes +4 -0
  4. veu-0.4.0/.gitignore +30 -0
  5. veu-0.4.0/.pre-commit-hooks.yaml +6 -0
  6. veu-0.4.0/AGENTS.md +46 -0
  7. veu-0.4.0/CHANGELOG.md +150 -0
  8. veu-0.4.0/CLAUDE.md +1 -0
  9. veu-0.4.0/CONTRIBUTING.md +92 -0
  10. veu-0.4.0/Dockerfile +26 -0
  11. veu-0.4.0/LICENSE +21 -0
  12. veu-0.4.0/PKG-INFO +413 -0
  13. veu-0.4.0/README.md +334 -0
  14. veu-0.4.0/SECURITY.md +51 -0
  15. veu-0.4.0/action.yml +80 -0
  16. veu-0.4.0/deploy/.env.exemplo +9 -0
  17. veu-0.4.0/deploy/docker-compose.yml +30 -0
  18. veu-0.4.0/deploy/helm/veu/Chart.yaml +10 -0
  19. veu-0.4.0/deploy/helm/veu/templates/NOTES.txt +9 -0
  20. veu-0.4.0/deploy/helm/veu/templates/_helpers.tpl +24 -0
  21. veu-0.4.0/deploy/helm/veu/templates/configmap.yaml +9 -0
  22. veu-0.4.0/deploy/helm/veu/templates/deployment.yaml +85 -0
  23. veu-0.4.0/deploy/helm/veu/templates/extras.yaml +92 -0
  24. veu-0.4.0/deploy/helm/veu/templates/service.yaml +14 -0
  25. veu-0.4.0/deploy/helm/veu/values.yaml +99 -0
  26. veu-0.4.0/deploy/veu-empresa.toml +42 -0
  27. veu-0.4.0/docs/banner.png +0 -0
  28. veu-0.4.0/docs/benchmark.md +32 -0
  29. veu-0.4.0/docs/empresas.md +234 -0
  30. veu-0.4.0/docs/extensao.md +45 -0
  31. veu-0.4.0/docs/integracoes.md +694 -0
  32. veu-0.4.0/docs/playground.png +0 -0
  33. veu-0.4.0/examples/anthropic_sdk.py +22 -0
  34. veu-0.4.0/examples/cursor-hooks.json +11 -0
  35. veu-0.4.0/examples/dados.py +25 -0
  36. veu-0.4.0/examples/decorador.py +24 -0
  37. veu-0.4.0/examples/github-action.yml +24 -0
  38. veu-0.4.0/examples/langchain_chat.py +25 -0
  39. veu-0.4.0/examples/logs.py +21 -0
  40. veu-0.4.0/examples/meu_detector.py +28 -0
  41. veu-0.4.0/examples/n8n.md +52 -0
  42. veu-0.4.0/examples/node.mjs +15 -0
  43. veu-0.4.0/examples/observabilidade.py +28 -0
  44. veu-0.4.0/examples/openai_sdk.py +26 -0
  45. veu-0.4.0/examples/proxy.sh +28 -0
  46. veu-0.4.0/examples/veu.toml +108 -0
  47. veu-0.4.0/extensao/conteudo.js +302 -0
  48. veu-0.4.0/extensao/fundo.js +104 -0
  49. veu-0.4.0/extensao/icones/128.png +0 -0
  50. veu-0.4.0/extensao/icones/16.png +0 -0
  51. veu-0.4.0/extensao/icones/32.png +0 -0
  52. veu-0.4.0/extensao/icones/48.png +0 -0
  53. veu-0.4.0/extensao/manifest.json +58 -0
  54. veu-0.4.0/extensao/politica.json +48 -0
  55. veu-0.4.0/extensao/popup.css +28 -0
  56. veu-0.4.0/extensao/popup.html +46 -0
  57. veu-0.4.0/extensao/popup.js +56 -0
  58. veu-0.4.0/extensao/teste/e2e.mjs +210 -0
  59. veu-0.4.0/js/README.md +114 -0
  60. veu-0.4.0/js/package-lock.json +1158 -0
  61. veu-0.4.0/js/package.json +70 -0
  62. veu-0.4.0/js/scripts/empacotar.mjs +15 -0
  63. veu-0.4.0/js/scripts/gerar-dados.mjs +36 -0
  64. veu-0.4.0/js/src/addresses.ts +55 -0
  65. veu-0.4.0/js/src/analyzer.ts +105 -0
  66. veu-0.4.0/js/src/anonymizer.ts +194 -0
  67. veu-0.4.0/js/src/entities.ts +57 -0
  68. veu-0.4.0/js/src/gateway.ts +683 -0
  69. veu-0.4.0/js/src/index.ts +207 -0
  70. veu-0.4.0/js/src/integrations/ai-sdk.ts +199 -0
  71. veu-0.4.0/js/src/integrations/fetch.ts +118 -0
  72. veu-0.4.0/js/src/navegador.ts +4 -0
  73. veu-0.4.0/js/src/patterns.ts +204 -0
  74. veu-0.4.0/js/src/persons.ts +228 -0
  75. veu-0.4.0/js/src/secrets.ts +155 -0
  76. veu-0.4.0/js/src/sha256.ts +64 -0
  77. veu-0.4.0/js/src/text.ts +131 -0
  78. veu-0.4.0/js/src/validators.ts +264 -0
  79. veu-0.4.0/js/src/vault.ts +222 -0
  80. veu-0.4.0/js/test/conformidade.json +4441 -0
  81. veu-0.4.0/js/test/conformidade.test.ts +35 -0
  82. veu-0.4.0/js/test/core.test.ts +123 -0
  83. veu-0.4.0/js/test/integrations.test.ts +147 -0
  84. veu-0.4.0/js/tsconfig.build.json +10 -0
  85. veu-0.4.0/js/tsconfig.json +18 -0
  86. veu-0.4.0/plugin/.claude-plugin/icon.png +0 -0
  87. veu-0.4.0/plugin/.claude-plugin/plugin.json +13 -0
  88. veu-0.4.0/plugin/.mcp.json +8 -0
  89. veu-0.4.0/plugin/hooks/hooks.json +20 -0
  90. veu-0.4.0/plugin/skills/protecao-de-dados/SKILL.md +55 -0
  91. veu-0.4.0/pyproject.toml +80 -0
  92. veu-0.4.0/scripts/empacotar_navegador.py +42 -0
  93. veu-0.4.0/scripts/gerar_conformidade.py +58 -0
  94. veu-0.4.0/scripts/gerar_icones.py +70 -0
  95. veu-0.4.0/src/veu/__init__.py +78 -0
  96. veu-0.4.0/src/veu/__main__.py +3 -0
  97. veu-0.4.0/src/veu/_text.py +31 -0
  98. veu-0.4.0/src/veu/analyzer.py +121 -0
  99. veu-0.4.0/src/veu/anonymizer.py +209 -0
  100. veu-0.4.0/src/veu/bench/__init__.py +1 -0
  101. veu-0.4.0/src/veu/bench/evaluate.py +140 -0
  102. veu-0.4.0/src/veu/bench/generator.py +241 -0
  103. veu-0.4.0/src/veu/bench/hard.py +50 -0
  104. veu-0.4.0/src/veu/cli.py +429 -0
  105. veu-0.4.0/src/veu/config.py +357 -0
  106. veu-0.4.0/src/veu/core.py +136 -0
  107. veu-0.4.0/src/veu/data/ambiguous.txt +27 -0
  108. veu-0.4.0/src/veu/data/first_names.txt +561 -0
  109. veu-0.4.0/src/veu/data/organizations.txt +89 -0
  110. veu-0.4.0/src/veu/data/places.txt +197 -0
  111. veu-0.4.0/src/veu/data/segredos.json +83 -0
  112. veu-0.4.0/src/veu/data/stopwords.txt +226 -0
  113. veu-0.4.0/src/veu/data/surnames.txt +210 -0
  114. veu-0.4.0/src/veu/demo.py +85 -0
  115. veu-0.4.0/src/veu/documents.py +292 -0
  116. veu-0.4.0/src/veu/entities.py +64 -0
  117. veu-0.4.0/src/veu/files.py +180 -0
  118. veu-0.4.0/src/veu/gateway/__init__.py +21 -0
  119. veu-0.4.0/src/veu/gateway/adapters.py +652 -0
  120. veu-0.4.0/src/veu/gateway/pipeline.py +99 -0
  121. veu-0.4.0/src/veu/gateway/sse.py +130 -0
  122. veu-0.4.0/src/veu/hooks.py +117 -0
  123. veu-0.4.0/src/veu/integrations/__init__.py +1 -0
  124. veu-0.4.0/src/veu/integrations/_transport.py +160 -0
  125. veu-0.4.0/src/veu/integrations/decorator.py +137 -0
  126. veu-0.4.0/src/veu/integrations/httpx.py +23 -0
  127. veu-0.4.0/src/veu/integrations/httpx2.py +20 -0
  128. veu-0.4.0/src/veu/integrations/langchain.py +201 -0
  129. veu-0.4.0/src/veu/integrations/litellm.py +204 -0
  130. veu-0.4.0/src/veu/integrations/logging.py +44 -0
  131. veu-0.4.0/src/veu/integrations/loguru.py +30 -0
  132. veu-0.4.0/src/veu/integrations/mcp.py +246 -0
  133. veu-0.4.0/src/veu/integrations/pandas.py +58 -0
  134. veu-0.4.0/src/veu/integrations/sdk.py +49 -0
  135. veu-0.4.0/src/veu/integrations/sentry.py +70 -0
  136. veu-0.4.0/src/veu/integrations/structlog.py +52 -0
  137. veu-0.4.0/src/veu/recognizers/__init__.py +23 -0
  138. veu-0.4.0/src/veu/recognizers/addresses.py +65 -0
  139. veu-0.4.0/src/veu/recognizers/base.py +71 -0
  140. veu-0.4.0/src/veu/recognizers/optional.py +110 -0
  141. veu-0.4.0/src/veu/recognizers/patterns.py +238 -0
  142. veu-0.4.0/src/veu/recognizers/persons.py +224 -0
  143. veu-0.4.0/src/veu/recognizers/secrets.py +185 -0
  144. veu-0.4.0/src/veu/reporting.py +122 -0
  145. veu-0.4.0/src/veu/server/__init__.py +5 -0
  146. veu-0.4.0/src/veu/server/app.py +482 -0
  147. veu-0.4.0/src/veu/server/state.py +316 -0
  148. veu-0.4.0/src/veu/server/static/playground.html +218 -0
  149. veu-0.4.0/src/veu/sessions.py +77 -0
  150. veu-0.4.0/src/veu/sources.py +460 -0
  151. veu-0.4.0/src/veu/surrogates.py +319 -0
  152. veu-0.4.0/src/veu/validators.py +293 -0
  153. veu-0.4.0/src/veu/vault.py +285 -0
  154. veu-0.4.0/tests/test_anonymizer.py +142 -0
  155. veu-0.4.0/tests/test_config_cli_bench.py +131 -0
  156. veu-0.4.0/tests/test_detection.py +129 -0
  157. veu-0.4.0/tests/test_empresa.py +184 -0
  158. veu-0.4.0/tests/test_flexibility.py +263 -0
  159. veu-0.4.0/tests/test_gateway.py +205 -0
  160. veu-0.4.0/tests/test_hooks.py +114 -0
  161. veu-0.4.0/tests/test_integrations.py +136 -0
  162. veu-0.4.0/tests/test_integrations_extra.py +234 -0
  163. veu-0.4.0/tests/test_litellm.py +86 -0
  164. veu-0.4.0/tests/test_secrets.py +165 -0
  165. veu-0.4.0/tests/test_security.py +174 -0
  166. veu-0.4.0/tests/test_server.py +186 -0
  167. veu-0.4.0/tests/test_sources.py +351 -0
  168. veu-0.4.0/tests/test_validators.py +84 -0
  169. veu-0.4.0/web/app.js +186 -0
  170. veu-0.4.0/web/estilo.css +98 -0
  171. 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
+ }
@@ -0,0 +1,12 @@
1
+ .venv
2
+ .git
3
+ .github
4
+ **/__pycache__
5
+ .pytest_cache
6
+ .ruff_cache
7
+ dist
8
+ build
9
+ docs
10
+ tests
11
+ *.jsonl
12
+ cofre*.json
@@ -0,0 +1,4 @@
1
+ * text=auto eol=lf
2
+ *.bat text eol=crlf
3
+ *.ps1 text eol=crlf
4
+ *.png binary
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
@@ -0,0 +1,6 @@
1
+ - id: veu
2
+ name: Véu (dados pessoais)
3
+ description: Falha se algum arquivo tiver dados pessoais brasileiros (CPF, CNPJ, e-mails, nomes...).
4
+ entry: veu verificar
5
+ language: python
6
+ types: [text]
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.