CreaRack-SL

MCP Tool · wiki_archive_answer

Entidadactivecreado Wed Apr 22#mcp-tool#wiki#supercontext#fase-4#bib-ask

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ámetroTipoRequeridoDescripción
questionstring✅Pregunta original de bib_ask
answerstring✅Respuesta sintetizada
sourcesobject[]—Fuentes del bib_ask (title/path/relevance)
areastring—Área temática para slug. Default: "general"
suggested_slugstring—Slug explícito kebab-case. Override del derivado
suggested_titlestring—Título explícito (máx 200 chars). Default: la pregunta
tagsstring[]—Tags extra además de "archived-from-query"
actorstring—Quién archiva. Default: "agent-query-closure"
skip_triageboolean—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

CallerCondiciónactor
handleAsk en archivo.tsAuto, tras síntesis Gemini si pasa pre-filtro"agent-query-closure"
Skill /bib-archive-last-answerManual, skip_triage: true"edu" / "dani"

Prerrequisitos de entorno

  • ANTHROPIC_API_KEY — requerida para triage (a menos que skip_triage: true)
  • GH_PAT — requerida para escribir el .md al 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ón wikiArchiveAnswer, 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]]