MCP Tool · wiki_archive_answer
Descripción
Archiva una respuesta de bib_ask como concept_page con status:draft en la wiki Supercontexto. Introducido en Supercontexto Fase 4 (PR #5, 2026-04-22).
Es el tool de escritura del ciclo de cierre de queries: convierte conocimiento efímero (respuestas conversacionales) en conocimiento persistente (páginas wiki).
Firma
export async function wikiArchiveAnswer(
db: D1Database,
args: Record<string, unknown>,
env: Env,
): Promise<string>
Registrado en LOGGED_TOOLS como { action: 'archive', entity_type: 'wiki_page' }.
Parámetros
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
question | string | ✅ | Pregunta original de bib_ask |
answer | string | ✅ | Respuesta sintetizada |
sources | object[] | — | Fuentes del bib_ask (title/path/relevance) |
area | string | — | Área temática para slug. Default: "general" |
suggested_slug | string | — | Slug explícito kebab-case. Override del derivado |
suggested_title | string | — | Título explícito (máx 200 chars). Default: la pregunta |
tags | string[] | — | Tags extra además de "archived-from-query" |
actor | string | — | Quién archiva. Default: "agent-query-closure" |
skip_triage | boolean | — | true salta el Haiku triage. Solo para uso manual confirmado |
Respuesta JSON
Archivado con éxito:
{
"archived": true,
"slug": "concept--saas--multi-tenancy",
"path": "src/content/wiki/concept--saas--multi-tenancy.md",
"filesystem": "committed",
"commit_sha": "abc123",
"page_id": 42,
"status": "draft",
"triage_tokens": 350
}
No archivado (varios motivos):
{ "archived": false, "skipped_reason": "duplicate_slug", "slug": "concept--..." }
{ "archived": false, "skipped_reason": "triage:pregunta trivial" }
{ "archived": false, "skipped_reason": "pre-filter:answer-too-short-or-sparse" }
{ "archived": false, "skipped_reason": "ANTHROPIC_API_KEY not configured — cannot triage" }
Lógica interna
1. Validar question + answer (requeridos)
2. Derivar slug: concept--<area>--<slugify(title|question, 50)>
3. SELECT slug FROM D1 → si existe: return { archived: false, skipped_reason: "duplicate_slug" }
4. Si !skip_triage:
Haiku triage → { archive: true|false, reason }
Si archive: false → INSERT bib_wiki_log + return skipped
5. Armar FrontMatter + markdown content
6. ghPutFile (si GH_PAT disponible)
7. INSERT bib_wiki_pages (status: 'draft')
8. INSERT bib_wiki_log (operation: 'create')
9. Return { archived: true, slug, path, ... }
Derivación de slug
slug = `concept--${slugify(area, 20)}--${slugify(suggestedTitle || question, 50)}`
slugify normaliza NFD, elimina diacríticos, convierte espacios a guiones, elimina caracteres no alfanuméricos.
Invocadores
| Caller | Condición | actor |
|---|---|---|
handleAsk en archivo.ts | Auto, tras síntesis Gemini si pasa pre-filtro | "agent-query-closure" |
Skill /bib-archive-last-answer | Manual, skip_triage: true | "edu" / "dani" |
Prerrequisitos de entorno
ANTHROPIC_API_KEY— requerida para triage (a menos queskip_triage: true)GH_PAT— requerida para escribir el.mdal repo; sin ella,filesystem: "skipped"pero D1 sí se escribe
Ubicación en el código
- Implementación:
functions/api/mcp/handlers/wiki.ts(funciónwikiArchiveAnswer, exportada) - Importación:
functions/api/mcp/handlers/archivo.ts(línea ~18) - Registro tool:
functions/api/mcp/tools.ts - LOGGED_TOOLS:
functions/api/mcp/index.ts
Véase también
- [[feature—supercontext—fase-4-query-con-cierre]]
- [[entity—mcp—tool—wiki-curator-review]]