@lcv-ideas-software/cross-review 4.2.1 → 4.2.2

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.
@@ -0,0 +1,769 @@
1
+ # Apresentação do cross-review
2
+
3
+ Data de referência desta apresentação: 2026-05-22.
4
+
5
+ Este documento apresenta o `cross-review` para dois públicos:
6
+
7
+ - pessoas que precisam entender o que ele é, por que existe e como funciona em
8
+ linguagem acessível;
9
+ - profissionais de TI e desenvolvimento que precisam instalar, configurar,
10
+ operar, auditar ou integrar o servidor MCP.
11
+
12
+ As informações abaixo foram conferidas no repositório local, no pacote npm
13
+ publicado e no runtime MCP carregado nesta sessão. Onde houver diferença entre
14
+ documentação histórica e estado atual, o estado atual do runtime e do
15
+ `package.json` prevalece.
16
+
17
+ ## Resumo executivo
18
+
19
+ `cross-review` é um servidor MCP, publicado como
20
+ `@lcv-ideas-software/cross-review`, que coordena revisões cruzadas entre modelos
21
+ de IA de provedores diferentes. Em vez de depender da opinião de um único modelo,
22
+ ele envia o mesmo artefato para um conjunto de pares independentes, registra as
23
+ respostas, exige uma decisão estruturada e só considera uma rodada convergida
24
+ quando as condições de unanimidade são satisfeitas.
25
+
26
+ Na prática, ele funciona como uma banca técnica automatizada:
27
+
28
+ 1. um agente, operador ou host MCP apresenta uma tarefa e um rascunho;
29
+ 2. o servidor chama pares como Codex/OpenAI, Claude/Anthropic, Gemini/Google,
30
+ DeepSeek, Grok/xAI e Perplexity;
31
+ 3. cada par devolve uma decisão em formato padronizado: `READY`, `NOT_READY` ou
32
+ `NEEDS_EVIDENCE`;
33
+ 4. o orquestrador verifica se há unanimidade, falhas, pedidos de evidência ou
34
+ bloqueios;
35
+ 5. os resultados ficam persistidos em sessões duráveis, logs, eventos e
36
+ relatórios.
37
+
38
+ O produto atual é estável. O runtime carregado nesta sessão reporta:
39
+
40
+ | Campo | Valor atual |
41
+ | -------------------------- | ----------------------------------- |
42
+ | Nome | `cross-review` |
43
+ | Publicador | `LCV Ideas & Software` |
44
+ | Versão runtime | `4.2.2` |
45
+ | Release date runtime | `2026-06-02` |
46
+ | Pacote npm | `@lcv-ideas-software/cross-review` |
47
+ | Versão npm publicada | `4.2.2` |
48
+ | Transporte MCP | `stdio` |
49
+ | Execução CLI por peers | desativada |
50
+ | Modo padrão | chamadas reais de API |
51
+ | Diretório de dados runtime | `C:\Users\leona\.cross-review\data` |
52
+
53
+ ## Explicação para não especialistas
54
+
55
+ Imagine que uma decisão técnica importante precisa ser revisada antes de ser
56
+ aceita: um plano, um relatório, um patch, uma configuração de segurança ou uma
57
+ análise operacional. Uma revisão feita por uma única pessoa ou por um único
58
+ modelo pode errar por excesso de confiança, falta de contexto ou viés do próprio
59
+ modelo.
60
+
61
+ O `cross-review` reduz esse risco fazendo uma revisão colegiada. Ele pergunta a
62
+ vários modelos independentes se o material está pronto, se ainda precisa de
63
+ correções ou se faltam evidências. Cada modelo precisa responder de forma
64
+ estruturada, e o sistema registra quem respondeu, qual foi a decisão, quais
65
+ evidências foram citadas e quais pendências restaram.
66
+
67
+ Ele não é um chat comum. Também não é um agente que sai lendo o computador,
68
+ rodando comandos ou corrigindo arquivos sozinho. O `cross-review` é um
69
+ orquestrador API-only: ele chama APIs de provedores de IA, mantém sessões
70
+ duráveis e controla o processo de deliberação. A coleta de evidências continua
71
+ sendo responsabilidade do agente ou operador que submete o caso.
72
+
73
+ ## O problema que ele resolve
74
+
75
+ Fluxos com IA costumam falhar em quatro pontos:
76
+
77
+ - uma resposta parece convincente, mas não tem evidência verificável;
78
+ - um modelo ignora um detalhe crítico que outro modelo perceberia;
79
+ - uma rodada longa se perde em histórico, sem saber qual pendência está aberta;
80
+ - um agente declara "pronto" sem que os demais tenham concordado.
81
+
82
+ O `cross-review` cria uma camada de governança sobre esse processo. Ele exige
83
+ estado estruturado, registra eventos e separa decisão de narrativa. Isso torna o
84
+ resultado mais auditável e mais adequado para gates de qualidade, segurança,
85
+ documentação, release ou mudanças operacionais.
86
+
87
+ ## Conceitos principais
88
+
89
+ | Conceito | Significado |
90
+ | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
91
+ | MCP | Model Context Protocol. É o protocolo usado para expor ferramentas a hosts como Codex, Claude Code e outros clientes compatíveis. |
92
+ | Caller | Quem submete a tarefa ao `cross-review`. Pode ser `operator` ou um dos agentes reconhecidos. |
93
+ | Peer | Modelo participante da revisão, por exemplo `codex`, `claude`, `gemini`, `deepseek`, `grok` ou `perplexity`. |
94
+ | Relator ou `lead_peer` | Par que sintetiza ou revisa o artefato em fluxos iterativos. Quando há relator, ele não deve ser confundido com voto comum. |
95
+ | Sessão | Registro durável de uma deliberação, com metadados, rodadas, eventos, anexos, custos e status final. |
96
+ | Rodada | Uma chamada de revisão feita aos peers dentro de uma sessão. |
97
+ | Convergência | Estado em que o caller está `READY`, os peers esperados também estão `READY` e não há falhas bloqueantes. |
98
+ | Evidência | Dif, log, saída de comando, referência de arquivo/linha, hash ou outro dado objetivo que sustenta uma afirmação. |
99
+ | Evidence Broker | Mecanismo que registra e acompanha pedidos de evidência gerados pelos peers. |
100
+ | Stub | Adaptador sintético usado em testes. Não deve validar decisões reais. |
101
+
102
+ ## Decisões de revisão
103
+
104
+ Cada peer deve terminar a avaliação com um status estruturado:
105
+
106
+ | Status | Quando usar |
107
+ | ---------------- | ------------------------------------------------------------------------------------------ |
108
+ | `READY` | O peer não vê bloqueio restante e aceita o material como pronto dentro do escopo revisado. |
109
+ | `NOT_READY` | O peer encontrou correções concretas que ainda precisam ser feitas. |
110
+ | `NEEDS_EVIDENCE` | O peer não consegue decidir sem evidência adicional. |
111
+
112
+ Esses status são propositalmente simples. O objetivo é evitar respostas
113
+ ambíguas como "parece bom" ou "talvez". O texto explicativo existe, mas a
114
+ decisão operacional precisa ser uma dessas três.
115
+
116
+ ## Como funciona uma rodada
117
+
118
+ O fluxo mais comum é:
119
+
120
+ 1. O host MCP chama uma ferramenta como `ask_peers`, `session_start_round`,
121
+ `run_until_unanimous` ou `session_start_unanimous`.
122
+ 2. O servidor valida identidade do caller, limites de entrada, configuração
123
+ financeira, conjunto de peers habilitados e, quando aplicável, preflight de
124
+ evidências.
125
+ 3. O orquestrador cria ou carrega uma sessão durável.
126
+ 4. Os adaptadores de peers chamam as APIs dos provedores configurados.
127
+ 5. Cada resposta é parseada para extrair o status estruturado.
128
+ 6. O orquestrador calcula a convergência.
129
+ 7. O runtime grava metadados de sessão, eventos NDJSON, custos, telemetria de
130
+ cache, anexos e relatórios.
131
+ 8. O host consulta o resultado diretamente ou acompanha o job de fundo por
132
+ `session_poll`, `session_events`, `session_metrics` e `session_report`.
133
+
134
+ Quando o fluxo é iterativo, o relator pode gerar uma versão revisada do artefato
135
+ e a sessão continua até unanimidade, limite de rodadas, cancelamento, orçamento
136
+ ou intervenção do operador.
137
+
138
+ ## Regra de unanimidade
139
+
140
+ Uma sessão converge quando:
141
+
142
+ - o caller declara `READY`;
143
+ - todos os peers esperados, exceto skips permitidos, retornam `READY`;
144
+ - não há peer rejeitado, ausente, com status não parseável ou em
145
+ `NEEDS_EVIDENCE`;
146
+ - não há bloqueio de orçamento, moderação, política, schema ou recuperação de
147
+ formato;
148
+ - se algum peer foi pulado por indisponibilidade real do modelo, ainda resta um
149
+ quorum mínimo significativo.
150
+
151
+ O runtime atual reporta `model_fallback: false`. Isso significa que o modelo
152
+ canônico de cada peer não deve ser substituído silenciosamente por um modelo
153
+ inferior. Quando um modelo fixado está indisponível, a sessão deve expor isso de
154
+ forma auditável em vez de degradar a qualidade sem aviso.
155
+
156
+ ## Arquitetura em alto nível
157
+
158
+ O `cross-review` é composto por camadas bem definidas:
159
+
160
+ | Camada | Responsabilidade |
161
+ | -------------------- | --------------------------------------------------------------------------------------- |
162
+ | Servidor MCP | Expõe ferramentas via `stdio` para hosts MCP. |
163
+ | Orquestrador | Cria sessões, chama peers, calcula unanimidade, controla jobs e rodadas. |
164
+ | Adaptadores de peers | Encapsulam chamadas para APIs de OpenAI, Anthropic, Google, DeepSeek, xAI e Perplexity. |
165
+ | Seleção de modelos | Valida e registra o modelo canônico ou override explícito usado por cada peer. |
166
+ | Session store | Persiste `meta.json`, eventos, anexos, relatórios e artefatos de sessão. |
167
+ | Observabilidade | Gera logs NDJSON por processo, métricas e relatórios de sessão. |
168
+ | Dashboard | Oferece UI HTTP local de leitura para sessões, eventos, probes, relatórios e métricas. |
169
+ | Camada de custos | Estima e bloqueia chamadas pagas sem orçamento e rate cards explícitos. |
170
+ | Cache de prompts | Usa prompt caching dos provedores quando suportado e registra telemetria uniforme. |
171
+
172
+ O desenho é API-only. O servidor não executa shell, não roda `git diff`, não lê
173
+ arquivos do repositório por conta própria e não coleta evidência automaticamente.
174
+ Esse limite é importante: ele evita que a ferramenta finja ter verificado algo
175
+ que não recebeu.
176
+
177
+ ## Peers suportados
178
+
179
+ O runtime atual tem seis peers habilitados:
180
+
181
+ | Peer | Provedor | Cliente/runtime |
182
+ | ------------ | ---------- | -------------------------------- |
183
+ | `codex` | OpenAI | pacote `openai`, Responses API |
184
+ | `claude` | Anthropic | pacote `@anthropic-ai/sdk` |
185
+ | `gemini` | Google | pacote `@google/genai` |
186
+ | `deepseek` | DeepSeek | API compatível com OpenAI |
187
+ | `grok` | xAI | superfície compatível com OpenAI |
188
+ | `perplexity` | Perplexity | Sonar API |
189
+
190
+ Os nomes dos peers são estáveis dentro do protocolo. A configuração de modelos
191
+ usa variáveis específicas por provedor, mas as sessões e respostas se referem
192
+ aos peers por esses IDs.
193
+
194
+ ## Modelos canônicos atuais
195
+
196
+ O projeto usa pinos canônicos para evitar downgrade silencioso. Os valores
197
+ documentados no repositório atual são:
198
+
199
+ | Peer | Modelo padrão | Override |
200
+ | ------------ | --------------------- | ------------------------------- |
201
+ | `codex` | `gpt-5.5` | `CROSS_REVIEW_OPENAI_MODEL` |
202
+ | `claude` | `claude-opus-4-8` | `CROSS_REVIEW_ANTHROPIC_MODEL` |
203
+ | `gemini` | `gemini-2.5-pro` | `CROSS_REVIEW_GEMINI_MODEL` |
204
+ | `deepseek` | `deepseek-v4-pro` | `CROSS_REVIEW_DEEPSEEK_MODEL` |
205
+ | `grok` | `grok-4.3` | `CROSS_REVIEW_GROK_MODEL` |
206
+ | `perplexity` | `sonar-reasoning-pro` | `CROSS_REVIEW_PERPLEXITY_MODEL` |
207
+
208
+ Overrides devem ser decisão explícita do operador. A proposta do sistema é
209
+ priorizar correção, rastreabilidade e profundidade de raciocínio, não custo ou
210
+ latência mínimos.
211
+
212
+ ## Ferramentas MCP
213
+
214
+ O runtime carregado expõe as seguintes ferramentas:
215
+
216
+ | Ferramenta | Uso principal |
217
+ | --------------------------------------- | ------------------------------------------------------------------------------------ |
218
+ | `server_info` | Inspeciona versão, diretório de dados, capacidades, budget, peers e segurança ativa. |
219
+ | `runtime_capabilities` | Retorna contrato de capacidades e lista de ferramentas. |
220
+ | `probe_peers` | Consulta provedores para verificar reachability e modelos disponíveis. |
221
+ | `session_init` | Cria uma sessão durável sem chamar reviewers. |
222
+ | `session_list` | Lista sessões de forma paginada e resumida. |
223
+ | `session_read` | Lê o `meta.json` completo de uma sessão. |
224
+ | `ask_peers` | Executa uma rodada real de revisão. |
225
+ | `session_start_round` | Inicia rodada em background e devolve `session_id`/`job_id`. |
226
+ | `run_until_unanimous` | Gera/revisa até unanimidade, limite de rodadas ou bloqueio. |
227
+ | `session_start_unanimous` | Versão background do fluxo até unanimidade. |
228
+ | `session_cancel_job` | Solicita cancelamento cooperativo de job em execução. |
229
+ | `session_recover_interrupted` | Recupera sessões interrompidas. |
230
+ | `session_poll` | Consulta progresso de job em background. |
231
+ | `session_events` | Lê eventos duráveis da sessão. |
232
+ | `session_metrics` | Retorna métricas agregadas ou de uma sessão. |
233
+ | `session_doctor` | Audita sessões abertas, travadas ou historicamente inconsistentes. |
234
+ | `session_report` | Gera relatório Markdown de uma sessão. |
235
+ | `session_check_convergence` | Retorna estado de convergência durável sem chamar provedores. |
236
+ | `session_attach_evidence` | Anexa evidência textual à sessão. |
237
+ | `session_evidence_checklist_update` | Atualiza status de itens de evidência. |
238
+ | `session_evidence_judge_pass` | Usa um peer como juiz de evidência em modo controlado. |
239
+ | `session_evidence_judge_consensus_pass` | Juízo de evidência por consenso entre peers. |
240
+ | `session_judgment_precision_report` | Mede precisão/recall/F1 dos julgamentos shadow. |
241
+ | `contest_verdict` | Contesta verdict final e abre novo ciclo com cadeia de custódia. |
242
+ | `escalate_to_operator` | Registra necessidade de julgamento humano. |
243
+ | `regenerate_caller_tokens` | Rotaciona tokens locais de identidade por host. |
244
+ | `session_sweep` | Finaliza sessões inativas e limpa históricos conforme política. |
245
+ | `session_finalize` | Marca sessão como `converged`, `aborted` ou `max-rounds`. |
246
+
247
+ ## Modos de trabalho
248
+
249
+ ### Revisão simples
250
+
251
+ Use `ask_peers` quando já existe um artefato e a intenção é obter o parecer dos
252
+ peers em uma rodada.
253
+
254
+ Exemplo de uso conceitual:
255
+
256
+ ```json
257
+ {
258
+ "caller": "codex",
259
+ "caller_status": "READY",
260
+ "task": "Revisar o documento de apresentação do cross-review.",
261
+ "review_focus": "Verifique clareza, precisão técnica, completude e riscos de afirmações sem evidência.",
262
+ "draft": "<conteúdo do documento>"
263
+ }
264
+ ```
265
+
266
+ ### Revisão em background
267
+
268
+ Use `session_start_round` quando a chamada pode demorar mais que o timeout do
269
+ host MCP. O servidor retorna um job e a sessão pode ser acompanhada com
270
+ `session_poll` e `session_events`.
271
+
272
+ ### Refinamento até unanimidade
273
+
274
+ Use `run_until_unanimous` quando o objetivo é gerar ou revisar iterativamente um
275
+ artefato até que todos concordem. Esse fluxo pode usar um relator e modos como:
276
+
277
+ - `ship`: o relator produz uma versão revisada pronta para entrega;
278
+ - `review`: o artefato é o objeto da análise, com foco em parecer;
279
+ - `circular`: custódia deliberativa serial, útil para textos e especificações.
280
+
281
+ ### Operação com evidências
282
+
283
+ Quando o material faz uma afirmação do tipo "teste passou", "build validado" ou
284
+ "diff aplicado", ele deve trazer evidência objetiva: saída de comando, hunks de
285
+ diff, referências `arquivo:linha`, hashes ou anexos. O preflight de evidência
286
+ existe para impedir que uma sessão paga avance com afirmações sem base.
287
+
288
+ ## Instalação
289
+
290
+ ### Pré-requisitos
291
+
292
+ - Node.js `>=22`. O CI do projeto usa Node.js 24.
293
+ - npm.
294
+ - Um host MCP capaz de iniciar servidores via `stdio`.
295
+ - Chaves de API dos provedores que serão usados.
296
+ - Orçamento e rate cards configurados antes de chamadas pagas.
297
+
298
+ ### Instalação global via npm
299
+
300
+ ```bash
301
+ npm install -g @lcv-ideas-software/cross-review
302
+ ```
303
+
304
+ ### Instalação via GitHub Packages
305
+
306
+ ```bash
307
+ npm install -g @lcv-ideas-software/cross-review --registry=https://npm.pkg.github.com
308
+ ```
309
+
310
+ Dependendo do ambiente, GitHub Packages pode exigir autenticação npm
311
+ configurada para o escopo `@lcv-ideas-software`.
312
+
313
+ ### Instalação local para desenvolvimento
314
+
315
+ ```bash
316
+ npm install
317
+ npm --registry=https://registry.npmjs.org run build
318
+ node dist/src/mcp/server.js
319
+ ```
320
+
321
+ ### Smoke tests locais sem custo
322
+
323
+ ```powershell
324
+ $env:CROSS_REVIEW_STUB = "1"
325
+ $env:CROSS_REVIEW_STUB_CONFIRMED = "1"
326
+ npm --registry=https://registry.npmjs.org test
327
+ ```
328
+
329
+ Stubs só devem ser usados em desenvolvimento, CI e smoke tests. O contrato atual
330
+ falha rápido quando `CROSS_REVIEW_STUB=1` está ativo sem confirmação explícita,
331
+ porque tanto o stub silencioso quanto a queda silenciosa para chamadas pagas
332
+ seriam perigosos.
333
+
334
+ ## Configuração mínima
335
+
336
+ As credenciais de runtime devem vir de variáveis de ambiente do Windows. O
337
+ projeto não usa `.env` com segredos reais.
338
+
339
+ ```powershell
340
+ [Environment]::SetEnvironmentVariable("OPENAI_API_KEY", "<OPENAI_API_KEY>", "User")
341
+ [Environment]::SetEnvironmentVariable("ANTHROPIC_API_KEY", "<ANTHROPIC_API_KEY>", "User")
342
+ [Environment]::SetEnvironmentVariable("GEMINI_API_KEY", "<GEMINI_API_KEY>", "User")
343
+ [Environment]::SetEnvironmentVariable("DEEPSEEK_API_KEY", "<DEEPSEEK_API_KEY>", "User")
344
+ [Environment]::SetEnvironmentVariable("GROK_API_KEY", "<GROK_API_KEY>", "User")
345
+ [Environment]::SetEnvironmentVariable("PERPLEXITY_API_KEY", "<PERPLEXITY_API_KEY>", "User")
346
+ ```
347
+
348
+ Depois de alterar variáveis de ambiente, reinicie terminal, editor ou host MCP.
349
+
350
+ ## Configuração de custos
351
+
352
+ Chamadas reais podem gerar custo nos provedores. O `cross-review` bloqueia
353
+ chamadas pagas quando faltam tetos de orçamento ou rate cards por peer.
354
+
355
+ Variáveis de orçamento:
356
+
357
+ ```powershell
358
+ [Environment]::SetEnvironmentVariable("CROSS_REVIEW_MAX_SESSION_COST_USD", "20", "User")
359
+ [Environment]::SetEnvironmentVariable("CROSS_REVIEW_PREFLIGHT_MAX_ROUND_COST_USD", "20", "User")
360
+ [Environment]::SetEnvironmentVariable("CROSS_REVIEW_UNTIL_STOPPED_MAX_COST_USD", "30", "User")
361
+ ```
362
+
363
+ Rate cards devem ser informados em USD por milhão de tokens para cada provedor,
364
+ usando a precificação oficial vigente no momento da configuração:
365
+
366
+ ```powershell
367
+ [Environment]::SetEnvironmentVariable("CROSS_REVIEW_OPENAI_INPUT_USD_PER_MILLION", "<rate>", "User")
368
+ [Environment]::SetEnvironmentVariable("CROSS_REVIEW_OPENAI_OUTPUT_USD_PER_MILLION", "<rate>", "User")
369
+ [Environment]::SetEnvironmentVariable("CROSS_REVIEW_ANTHROPIC_INPUT_USD_PER_MILLION", "<rate>", "User")
370
+ [Environment]::SetEnvironmentVariable("CROSS_REVIEW_ANTHROPIC_OUTPUT_USD_PER_MILLION", "<rate>", "User")
371
+ [Environment]::SetEnvironmentVariable("CROSS_REVIEW_GEMINI_INPUT_USD_PER_MILLION", "<rate>", "User")
372
+ [Environment]::SetEnvironmentVariable("CROSS_REVIEW_GEMINI_OUTPUT_USD_PER_MILLION", "<rate>", "User")
373
+ [Environment]::SetEnvironmentVariable("CROSS_REVIEW_DEEPSEEK_INPUT_USD_PER_MILLION", "<rate>", "User")
374
+ [Environment]::SetEnvironmentVariable("CROSS_REVIEW_DEEPSEEK_OUTPUT_USD_PER_MILLION", "<rate>", "User")
375
+ [Environment]::SetEnvironmentVariable("CROSS_REVIEW_GROK_INPUT_USD_PER_MILLION", "<rate>", "User")
376
+ [Environment]::SetEnvironmentVariable("CROSS_REVIEW_GROK_OUTPUT_USD_PER_MILLION", "<rate>", "User")
377
+ [Environment]::SetEnvironmentVariable("CROSS_REVIEW_PERPLEXITY_INPUT_USD_PER_MILLION", "<rate>", "User")
378
+ [Environment]::SetEnvironmentVariable("CROSS_REVIEW_PERPLEXITY_OUTPUT_USD_PER_MILLION", "<rate>", "User")
379
+ ```
380
+
381
+ Perplexity também pode exigir taxas por requisição conforme tamanho de contexto
382
+ de busca; nesses casos, configure os campos
383
+ `CROSS_REVIEW_PERPLEXITY_REQUEST_FEE_*_USD_PER_1000_REQUESTS`.
384
+
385
+ O runtime consultado nesta sessão indicou `paid_calls_ready: true`, sem variáveis
386
+ financeiras faltantes, para a configuração local carregada.
387
+
388
+ ## Configuração em host MCP
389
+
390
+ Um host MCP precisa iniciar o servidor via `stdio`. Em instalação global, a forma
391
+ mais simples é chamar o binário `cross-review`. Em ambientes que preferem caminho
392
+ absoluto, a entrada pode apontar para `dist/src/mcp/server.js` do pacote
393
+ instalado.
394
+
395
+ Exemplo conceitual:
396
+
397
+ ```json
398
+ {
399
+ "mcpServers": {
400
+ "cross-review": {
401
+ "command": "cross-review",
402
+ "env": {
403
+ "CROSS_REVIEW_CALLER_TOKEN": "<token-do-host>",
404
+ "CROSS_REVIEW_REQUIRE_TOKEN": "true",
405
+ "CROSS_REVIEW_MAX_SESSION_COST_USD": "20",
406
+ "CROSS_REVIEW_PREFLIGHT_MAX_ROUND_COST_USD": "20",
407
+ "CROSS_REVIEW_UNTIL_STOPPED_MAX_COST_USD": "30"
408
+ }
409
+ }
410
+ }
411
+ }
412
+ ```
413
+
414
+ Nunca copie tokens reais para documentação, issues, chats ou screenshots. O
415
+ campo acima é apenas um placeholder.
416
+
417
+ ## Arquivo central de configuração
418
+
419
+ Além de variáveis de ambiente, o projeto suporta um arquivo central
420
+ `config.json`. Por padrão ele fica em:
421
+
422
+ ```text
423
+ <data_dir>/config.json
424
+ ```
425
+
426
+ O caminho pode ser alterado por `CROSS_REVIEW_CONFIG_FILE`. A precedência é:
427
+
428
+ 1. variáveis do processo ou host MCP;
429
+ 2. variáveis do registro do Windows;
430
+ 3. arquivo central `config.json`;
431
+ 4. defaults internos do `loadConfig()`.
432
+
433
+ O arquivo central não contém chaves de API e não substitui o token de identidade
434
+ do host. Esses itens continuam separados por desenho.
435
+
436
+ ## Variáveis operacionais importantes
437
+
438
+ | Variável | Finalidade |
439
+ | ------------------------------------------ | ----------------------------------------------------------- |
440
+ | `CROSS_REVIEW_DATA_DIR` | Define o diretório de dados. |
441
+ | `CROSS_REVIEW_CONFIG_FILE` | Define caminho alternativo para o `config.json`. |
442
+ | `CROSS_REVIEW_LOG_LEVEL` | Controla verbosidade dos logs. |
443
+ | `CROSS_REVIEW_DASHBOARD_PORT` | Porta do dashboard local, padrão `4588`. |
444
+ | `CROSS_REVIEW_TIMEOUT_MS` | Timeout HTTP por chamada de provedor, padrão 30 minutos. |
445
+ | `CROSS_REVIEW_MAX_OUTPUT_TOKENS` | Limite de saída solicitado aos provedores, padrão `20000`. |
446
+ | `CROSS_REVIEW_MAX_TASK_CHARS` | Limite de caracteres do campo `task`, padrão `8000`. |
447
+ | `CROSS_REVIEW_MAX_DRAFT_CHARS` | Limite do rascunho, padrão `40000`. |
448
+ | `CROSS_REVIEW_MAX_ATTACHED_EVIDENCE_CHARS` | Orçamento para evidências anexadas, padrão `200000`. |
449
+ | `CROSS_REVIEW_STREAM_EVENTS` | Habilita eventos de workflow. |
450
+ | `CROSS_REVIEW_STREAM_TOKENS` | Habilita eventos de progresso de tokens. |
451
+ | `CROSS_REVIEW_STREAM_TEXT` | Inclui texto redigido nos eventos, opt-in. |
452
+ | `CROSS_REVIEW_EVIDENCE_PREFLIGHT` | Liga/desliga preflight textual de evidência, padrão ligado. |
453
+ | `CROSS_REVIEW_PEER_<NAME>` | Habilita ou desabilita peer específico com `on`/`off`. |
454
+ | `CROSS_REVIEW_STUB` | Ativa stubs quando combinado com confirmação explícita. |
455
+ | `CROSS_REVIEW_STUB_CONFIRMED` | Confirma uso deliberado de stubs. |
456
+ | `CROSS_REVIEW_CALLER_TOKEN` | Token de identidade do host caller. |
457
+ | `CROSS_REVIEW_REQUIRE_TOKEN` | Exige token de caller quando ativo. |
458
+
459
+ ## Dependências
460
+
461
+ ### Runtime
462
+
463
+ Dependências diretas de runtime declaradas no `package.json` atual:
464
+
465
+ | Pacote | Versão declarada | Uso |
466
+ | --------------------------- | ---------------- | --------------------------------- |
467
+ | `@anthropic-ai/sdk` | `^0.97.1` | Cliente Anthropic/Claude. |
468
+ | `@google/genai` | `^2.5.0` | Cliente Google Gemini. |
469
+ | `@modelcontextprotocol/sdk` | `^1.29.0` | Implementação MCP. |
470
+ | `openai` | `^6.38.0` | OpenAI e APIs compatíveis. |
471
+ | `pino` | `^10.3.1` | Logging estruturado. |
472
+ | `proper-lockfile` | `^4.1.2` | Locking de sessão multi-processo. |
473
+ | `zod` | `^4.4.3` | Validação de schemas. |
474
+
475
+ ### Desenvolvimento
476
+
477
+ Dependências diretas de desenvolvimento:
478
+
479
+ | Pacote | Versão declarada | Uso |
480
+ | ------------------------ | ---------------- | ----------------------------------- |
481
+ | `@biomejs/biome` | `^2.4.15` | Lint/format complementar. |
482
+ | `@eslint/js` | `^10.0.1` | ESLint base. |
483
+ | `@types/node` | `^25.9.1` | Tipos Node.js. |
484
+ | `@types/proper-lockfile` | `^4.1.4` | Tipos do `proper-lockfile`. |
485
+ | `eslint` | `^10.4.0` | Lint. |
486
+ | `eslint-config-prettier` | `^10.1.8` | Integração ESLint/Prettier. |
487
+ | `prettier` | `^3.8.3` | Formatação. |
488
+ | `tsx` | `^4.22.3` | Execução TypeScript em scripts/dev. |
489
+ | `typescript` | `^6.0.3` | Build e typecheck. |
490
+ | `typescript-eslint` | `^8.59.4` | Regras TypeScript para ESLint. |
491
+
492
+ ## Scripts do projeto
493
+
494
+ Os scripts principais são `build`, `dev`, `dashboard`, `smoke`,
495
+ `runtime-smoke`, `api-streaming-smoke`, `test`, `lint`, `format:check`,
496
+ `typecheck`, `biome` e `check`. O script `check` reúne formatação, lint, Biome e
497
+ typecheck; `test` executa build, smoke e runtime smoke.
498
+
499
+ ## Persistência e observabilidade
500
+
501
+ O runtime grava estado fora do repositório, no `data_dir` configurado. Nesta
502
+ máquina, o runtime carregado reportou:
503
+
504
+ ```text
505
+ C:\Users\leona\.cross-review\data
506
+ ```
507
+
508
+ Esse diretório contém sessões, eventos, logs, tokens locais de host e relatórios.
509
+ O `server_info` também informa o arquivo de log NDJSON ativo por processo.
510
+
511
+ Arquivos típicos por sessão:
512
+
513
+ - `meta.json`: estado durável da sessão;
514
+ - `events.ndjson`: eventos incrementais;
515
+ - evidências anexadas via `session_attach_evidence`;
516
+ - `session-report.md`, quando gerado por `session_report`;
517
+ - manifestos de cache, quando aplicável.
518
+
519
+ ## Segurança
520
+
521
+ O desenho de segurança atual combina controles de identidade, segredo, orçamento
522
+ e cadeia de custódia:
523
+
524
+ - o servidor é API-only e não executa comandos arbitrários;
525
+ - chaves de API devem vir de variáveis de ambiente do Windows;
526
+ - `.env` com segredos reais é explicitamente desaconselhado;
527
+ - `server_info` expõe readiness, peers habilitados e estado de tokens sem expor
528
+ segredos;
529
+ - capability tokens por caller podem vincular um host a uma identidade de agente;
530
+ - `operator` não deve ser forjado por um host que carrega token de agente;
531
+ - raw chain-of-thought não é persistido;
532
+ - eventos de token registram contagens por padrão, não texto bruto;
533
+ - texto de streaming só aparece com opt-in explícito;
534
+ - respostas e logs passam por redaction;
535
+ - chamadas pagas são bloqueadas sem orçamento e rate cards;
536
+ - GitHub Actions usam ações pinadas por SHA;
537
+ - CI cobre formatação, lint, Biome, typecheck e smoke tests;
538
+ - CodeQL e workflows de supply chain fazem parte do baseline do repositório.
539
+
540
+ ## Cache de prompts
541
+
542
+ O `cross-review` usa prompt caching quando o provedor oferece suporte:
543
+
544
+ | Provider | Modo |
545
+ | --------- | ---------- |
546
+ | OpenAI | automático |
547
+ | Anthropic | explícito |
548
+ | Gemini | implícito |
549
+ | DeepSeek | automático |
550
+ | Grok | automático |
551
+
552
+ A telemetria é normalizada em eventos `provider.cache.usage` e manifestos por
553
+ sessão. Operadores podem desligar o cache globalmente:
554
+
555
+ ```powershell
556
+ [Environment]::SetEnvironmentVariable("CROSS_REVIEW_DISABLE_CACHE", "true", "User")
557
+ ```
558
+
559
+ Também há controles de TTL e versionamento de schema de cache, incluindo
560
+ `CROSS_REVIEW_CACHE_SCHEMA_VERSION`,
561
+ `CROSS_REVIEW_CACHE_TTL_ANTHROPIC` e `CROSS_REVIEW_CACHE_TTL_OPENAI`.
562
+
563
+ ## Limites e cuidados
564
+
565
+ O `cross-review` aumenta rigor, mas não substitui julgamento técnico humano.
566
+ Pontos importantes:
567
+
568
+ - ele não coleta evidência sozinho;
569
+ - ele não garante que provedores externos estejam disponíveis;
570
+ - ele pode gerar custo financeiro em chamadas reais;
571
+ - revisões profundas podem demorar;
572
+ - modelos podem divergir, pedir evidência ou bloquear por política;
573
+ - uma sessão convergida ainda deve ser lida por um operador quando o impacto for
574
+ alto;
575
+ - documentação histórica pode conter nomes antigos como `cross-review-v2`,
576
+ preservados por rastreabilidade.
577
+
578
+ ## Quando usar
579
+
580
+ Use `cross-review` quando a decisão precisa de mais rigor que uma resposta
581
+ isolada:
582
+
583
+ - revisão de patch relevante;
584
+ - parecer de segurança;
585
+ - validação de release;
586
+ - análise de incidente;
587
+ - decisão operacional com custo ou risco;
588
+ - documentação técnica que será usada como referência;
589
+ - gates de qualidade antes de merge, publicação ou deploy.
590
+
591
+ Evite usar para consultas simples, tarefas triviais ou verificações locais que
592
+ podem ser respondidas por um comando direto. Nesses casos, o custo operacional
593
+ de uma revisão multi-peer costuma ser desproporcional.
594
+
595
+ ## Seção técnica para TI e desenvolvedores
596
+
597
+ ### Contrato de entrada
598
+
599
+ Os campos essenciais de uma revisão são:
600
+
601
+ - `task`: descreve a tarefa ou objetivo;
602
+ - `review_focus`: restringe escopo e evita achados fora do pedido;
603
+ - `draft` ou `initial_draft`: artefato a ser revisado;
604
+ - `caller`: identidade que submete a revisão;
605
+ - `caller_status`: estado do caller para convergência;
606
+ - `evidence`: evidência estruturada opcional em fluxos até unanimidade;
607
+ - `reasoning_effort_overrides`: ajuste pontual por peer quando necessário.
608
+
609
+ O campo `review_focus` é importante para reduzir ruído. Ele deve dizer
610
+ explicitamente o que revisar, o que não revisar e qual tipo de achado é
611
+ bloqueante.
612
+
613
+ ### Identidade e anti-self-review
614
+
615
+ O runtime protege contra autoavaliação indevida. Um agente não deve atuar ao
616
+ mesmo tempo como caller, relator e peer votante na mesma sessão. O conjunto de
617
+ peers é controlado pelo servidor e pode ser travado por configuração para evitar
618
+ que o caller escolha uma banca conveniente.
619
+
620
+ Tokens de caller reforçam essa separação. Quando `CROSS_REVIEW_REQUIRE_TOKEN`
621
+ está ativo, hosts precisam apresentar `CROSS_REVIEW_CALLER_TOKEN` válido. A
622
+ rotação é feita por `regenerate_caller_tokens`, mas a redistribuição dos tokens
623
+ é uma operação sensível e deve ser tratada como segredo operacional.
624
+
625
+ ### Evidência e preflight
626
+
627
+ O preflight textual procura um caso específico: texto que afirma trabalho
628
+ concluído sem apresentar qualquer marcador de evidência. Ele não decide mérito,
629
+ apenas evita gastar API em uma submissão evidentemente subevidenciada.
630
+
631
+ Evidências aceitáveis incluem:
632
+
633
+ - trechos de `git diff`;
634
+ - saída de `npm test`, `npm run check`, `git diff --check` ou comando
635
+ equivalente;
636
+ - referências `arquivo:linha`;
637
+ - hashes;
638
+ - anexos persistidos por `session_attach_evidence`;
639
+ - logs relevantes.
640
+
641
+ Para revisões sérias, empacote evidência antes de chamar peers. O servidor não
642
+ deve ser tratado como coletor de repo, shell ou CI.
643
+
644
+ ### Jobs assíncronos e timeouts
645
+
646
+ Chamadas reais podem superar timeouts comuns de hosts MCP. Para isso, prefira
647
+ ferramentas background:
648
+
649
+ - `session_start_round`;
650
+ - `session_start_unanimous`.
651
+
652
+ Depois consulte:
653
+
654
+ - `session_poll` para progresso;
655
+ - `session_events` para stream durável;
656
+ - `session_metrics` para custo e contadores;
657
+ - `session_report` para relatório final.
658
+
659
+ O timeout HTTP padrão por provedor é 30 minutos. O host MCP deve ter timeout
660
+ suficiente ou usar jobs assíncronos.
661
+
662
+ ### Estados finais
663
+
664
+ Uma sessão pode terminar como:
665
+
666
+ - `converged`: convergiu;
667
+ - `aborted`: abortada por erro, cancelamento, evidência insuficiente ou ação
668
+ operacional;
669
+ - `max-rounds`: atingiu limite de rodadas ou orçamento.
670
+
671
+ O campo `convergence_health` complementa o outcome. Ele não deve ser confundido
672
+ com a decisão final; sessões antigas ou inconsistentes podem exigir
673
+ `session_doctor`.
674
+
675
+ ### Dashboard
676
+
677
+ O pacote também expõe `cross-review-dashboard`, uma UI HTTP local de leitura.
678
+ Ela é útil para navegar sessões, eventos, relatórios, probes e métricas sem
679
+ abrir manualmente arquivos NDJSON.
680
+
681
+ Comandos típicos:
682
+
683
+ ```bash
684
+ cross-review-dashboard
685
+ ```
686
+
687
+ ou, em desenvolvimento:
688
+
689
+ ```bash
690
+ npm run dashboard
691
+ ```
692
+
693
+ ### CI e publicação
694
+
695
+ O repositório usa workflows para:
696
+
697
+ - CI em push e pull request para `main`;
698
+ - CodeQL em push, PR, agendamento e workflow manual;
699
+ - publicação em tag `v*` ou dispatch manual;
700
+ - Pages, Scorecard, Socket, dependency review e automerge de Dependabot.
701
+
702
+ O gate de CI executa:
703
+
704
+ - Prettier;
705
+ - ESLint;
706
+ - Biome;
707
+ - TypeScript typecheck;
708
+ - smoke tests com stub confirmado.
709
+
710
+ O gate de publicação executa `npm run check`, `npm test`, valida metadata e
711
+ publica com provenance quando aplicável.
712
+
713
+ ## Changelog breve
714
+
715
+ | Versão | Data | Destaque |
716
+ | ---------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------ |
717
+ | `v04.02.02` | 2026-06-02 | Atualiza pins Claude/Grok, corrige probe Perplexity e refresca rate cards conforme documentação oficial dos providers. |
718
+ | `v04.02.01` | 2026-05-21 | Publica cleanup de hard-gate como pacote `4.2.1`, com ajustes de strict TypeScript, dependências e `tsconfig.base.json` local. |
719
+ | `v04.02.00` | 2026-05-17 | Lista de sessões paginada, cancelamento sem abortar sessão indevidamente e resposta Markdown de `session_init`. |
720
+ | `v04.01.00` | 2026-05-17 | Hardening de concorrência do session-store, redaction de chaves privadas truncadas e remoção de busy-wait. |
721
+ | `v04.00.00` | 2026-05-15 | Renomeia o projeto para `cross-review`; o antigo `cross-review-v2` vira histórico. |
722
+ | `v03.07.x` | 2026-05-14/15 | Série de auditorias operacionais, logs/sessions study, política sem fallback silencioso e correções de runtime. |
723
+ | `v03.03.00` | 2026-05-12 | Trava seleção de peers pelo caller; todos os peers configurados participam conforme diretiva do operador. |
724
+ | `v03.01.00` | 2026-05-12 | Introduz `config.json` central para reduzir centenas de variáveis duplicadas em hosts MCP. |
725
+ | `v03.00.00` | 2026-05-12 | Perplexity entra como sexto peer. |
726
+ | `v02.28.00` | 2026-05-12 | Cache de lookup de variáveis do registro do Windows para reduzir cold start. |
727
+ | `v02.25.00` | 2026-05-10 | Adiciona modo deliberativo `circular`. |
728
+ | `v02.21.00` | 2026-05-09 | Prompt caching cross-provider. |
729
+ | `v02.18.00` | 2026-05-05 | Caller capability tokens. |
730
+ | `v02.17.00` | 2026-05-05 | Rejeição de identity forgery como hard gate. |
731
+ | `v02.11.00` | 2026-05-04 | Relator lottery e auto-wire shadow. |
732
+ | `v02.08.00` | 2026-05-03 | Health por peer e ciclo do Evidence Broker. |
733
+ | `v02.03.00` | 2026-05-01 | `review_focus` provider-neutral. |
734
+ | `v02.02.00` | 2026-04-30 | Streaming de tokens dos provedores. |
735
+ | `v02.01.00` | 2026-04-30 | Primeira release estável. |
736
+ | `v2.0.0-alpha.0` | 2026-04 | Implementação inicial API/SDK-only do servidor MCP. |
737
+
738
+ ## Checklist operacional recomendado
739
+
740
+ Antes de usar uma revisão como gate:
741
+
742
+ - confirmar `server_info` no runtime carregado;
743
+ - confirmar `paid_calls_ready`;
744
+ - confirmar peers habilitados;
745
+ - anexar evidência objetiva;
746
+ - definir `review_focus` com escopo claro;
747
+ - usar `session_start_*` para trabalhos longos;
748
+ - ler `session_check_convergence` ou `session_report` antes de declarar pronto;
749
+ - preservar `session_id` no registro de decisão.
750
+
751
+ ## Fontes verificadas para esta apresentação
752
+
753
+ - Runtime MCP `server_info` e `runtime_capabilities` carregados em 2026-05-22.
754
+ - `package.json` do repositório local.
755
+ - `README.md`.
756
+ - `CHANGELOG.md`.
757
+ - `docs/architecture.md`.
758
+ - `docs/api-keys.md`.
759
+ - `docs/costs.md`.
760
+ - `docs/evidence-preflight.md`.
761
+ - `docs/model-selection.md`.
762
+ - `docs/caching.md`.
763
+ - `src/core/config.ts`.
764
+ - `src/core/file-config.ts`.
765
+ - `src/core/convergence.ts`.
766
+ - `src/mcp/server.ts`.
767
+ - `src/peers/registry.ts`.
768
+ - `src/core/status.ts`.
769
+ - `npm view @lcv-ideas-software/cross-review` no registry público npm.