@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.
- package/CHANGELOG.md +27 -0
- package/README.md +12 -9
- package/dist/scripts/provider-refresh-smoke.d.ts +1 -0
- package/dist/scripts/provider-refresh-smoke.js +49 -0
- package/dist/scripts/provider-refresh-smoke.js.map +1 -0
- package/dist/scripts/smoke.js +123 -14
- package/dist/scripts/smoke.js.map +1 -1
- package/dist/src/core/config.d.ts +2 -2
- package/dist/src/core/config.js +13 -12
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/orchestrator.d.ts +24 -0
- package/dist/src/core/orchestrator.js +200 -1
- package/dist/src/core/orchestrator.js.map +1 -1
- package/dist/src/core/status.js +13 -0
- package/dist/src/core/status.js.map +1 -1
- package/dist/src/core/types.d.ts +2 -1
- package/dist/src/core/types.js +3 -3
- package/dist/src/core/types.js.map +1 -1
- package/dist/src/peers/errors.js +3 -3
- package/dist/src/peers/errors.js.map +1 -1
- package/dist/src/peers/grok.js +5 -5
- package/dist/src/peers/grok.js.map +1 -1
- package/dist/src/peers/model-selection.js +5 -7
- package/dist/src/peers/model-selection.js.map +1 -1
- package/dist/src/peers/perplexity.js +3 -3
- package/dist/src/peers/perplexity.js.map +1 -1
- package/docs/api-keys.md +2 -2
- package/docs/apresentacao-cross-review.md +769 -0
- package/docs/apresentacao.md +571 -0
- package/docs/architecture.md +2 -0
- package/docs/caching.md +9 -8
- package/docs/costs.md +11 -0
- package/docs/model-selection.md +19 -14
- package/package.json +6 -3
|
@@ -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.
|