Volver a la wiki

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

ArtefactoRuta
Handlerfunctions/api/mcp/handlers/wiki.ts → función wikiLintContradictions
Declaración MCPfunctions/api/mcp/tools.ts → entrada wiki_lint_contradictions
Workflow CI.github/workflows/wiki-lint-consolidation.yml

Parámetros de entrada

ParámetroTipoDefaultDescripción
mode"incremental" | "full""incremental"incremental solo procesa pares con página reciente; full construye todos los pares globalmente
recent_daysnumber7En modo incremental, días para considerar una página “reciente”
max_pairs_per_communitynumber15Límite de pares por comunidad (controla coste Haiku)
max_total_pairsnumber100Batch 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.
offsetnumber0Índice del primer par a procesar dentro del array global. Usar junto con next_offset del response anterior para paginar.
dry_runbooleantrueSi 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": [...]
}
CampoDescripción
total_pairs_availableTotal de pares en el array global (estable entre batches)
next_offsetPróximo offset a pasar en la siguiente llamada. null cuando se han procesado todos los pares
batch_sizeTamaño real del batch procesado en esta invocación
offsetOffset 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

Véase también

Subir