MCP Tool: wiki_lint_contradictions
MCP Tool: wiki_lint_contradictions
Tool MCP de la Biblioteca (supercontext) que detecta contradicciones entre pares de páginas wiki. Compara fragmentos de contenido usando Claude Haiku y, opcionalmente, inserta los conflictos detectados en D1 para revisión posterior.
Localización
| Artefacto | Ruta |
|---|---|
| Handler | functions/api/mcp/handlers/wiki.ts → función wikiLintContradictions |
| Declaración MCP | functions/api/mcp/tools.ts → entrada wiki_lint_contradictions |
| Workflow CI | .github/workflows/wiki-lint-consolidation.yml |
Parámetros de entrada
| Parámetro | Tipo | Default | Descripción |
|---|---|---|---|
mode | "incremental" | "full" | "incremental" | incremental solo procesa pares con página reciente; full construye todos los pares globalmente |
recent_days | number | 7 | En modo incremental, días para considerar una página “reciente” |
max_pairs_per_community | number | 15 | Límite de pares por comunidad (controla coste Haiku) |
max_total_pairs | number | 100 | Batch size por invocación. El handler construye todos los pares globalmente y procesa el slice [offset, offset + max_total_pairs]. ⚠️ A partir del commit de47c6f, este parámetro pasó de ser un límite global a un tamaño de batch. |
offset | number | 0 | Índice del primer par a procesar dentro del array global. Usar junto con next_offset del response anterior para paginar. |
dry_run | boolean | true | Si false, inserta contradicciones detectadas en D1 |
Respuesta (JSON)
{
"mode": "full",
"pairs_checked": 30,
"contradictions_found": 3,
"contradictions_inserted": 0,
"total_tokens": 12400,
"dry_run": true,
"offset": 0,
"batch_size": 30,
"total_pairs_available": 77,
"next_offset": 30,
"results": [...]
}
| Campo | Descripción |
|---|---|
total_pairs_available | Total de pares en el array global (estable entre batches) |
next_offset | Próximo offset a pasar en la siguiente llamada. null cuando se han procesado todos los pares |
batch_size | Tamaño real del batch procesado en esta invocación |
offset | Offset de entrada usado en esta invocación |
Arquitectura interna (tres fases)
Fase 1 — Construir allPairs (global, sin cortar)
└─ Para cada community con ≥2 páginas:
genera candidatePairs combinatorios
toma slice[:max_pairs_per_community]
añade a allPairs sin límite global
Fase 2 — Paginar el slice
└─ pageSlice = allPairs[offset : offset + batchSize]
nextOffset = offset + len(pageSlice) < total ? offset + len : null
Fase 3 — Pre-fetch snippets del slice (concurrency=10, chunked)
└─ fetchSnippet cachea por slug → duplicados baratos
Fase 4 — Comparación Haiku (serial)
└─ Para cada par: clasificar como contradiction / complementary / ok
Si contradiction y !dry_run → INSERT en D1
Límite CF Workers: en el plan free hay un máximo de 50 subrequests por invocación (1000 en paid). Con 77 pares, el lint completo excede este budget si se ejecuta en una sola invocación. La paginación resuelve esto procesando ~30 pares por llamada y acumulando resultados en el workflow.
Contrato de paginación
call 1: offset=0 → next_offset=30
call 2: offset=30 → next_offset=60
call 3: offset=60 → next_offset=null ← fin
El array allPairs se reconstruye en cada invocación (sin estado persistido entre llamadas). El orden es determinista mientras no cambie el conjunto de páginas entre batches.
Workflow CI asociado
Ver [[feature—biblioteca—wiki-lint-contradictions-pagination]] para detalles del loop bash paginado en .github/workflows/wiki-lint-consolidation.yml.
Historial relevante
- 2026-04-23 (
de47c6f): Introducción de paginación. Run24832185988reveló que 77/77 pares fallaban con “Too many subrequests by single Worker invocation”.max_total_pairsreinterpretado como batch size. Nuevo parámetrooffset. Response ampliado contotal_pairs_availableynext_offset.
Véase también
- [[feature—biblioteca—wiki-lint-contradictions-pagination]]