25.9 KB · updated 2026-07-31 · md

feature-map.es.md

docs/i18n/feature-map.es.md

Mapa de funciones

<!-- translations:start -->

English · 한국어 · 中文 · 日本語 · Русский · Español · Français · Deutsch

<!-- translations:end --> Este documento resume las funciones actualmente implementadas en Tesserae, con estado, archivos fuente y dónde están documentadas.

Tesserae es un motor de contexto que corre sobre tres pilares: (1) monitorización de sesiones, (2) ingesta de conocimiento autónoma y proactiva, y (3) docs/contexto bajo demanda. El grafo tipado, el vault y el sitio estático son proyecciones de la base de conocimiento. Las funciones de abajo están agrupadas según el pilar al que sirven; el hito v0.5.0 (junio 2026) entregó la espina dorsal del engine y la función estrella del Pilar 3, el compilador de contexto bajo demanda.

Leyenda de estado: ✅ entregado · ⚠ en progreso / parcial.

Cross-project y UX — v0.11.0 (junio 2026)

FunciónEstadoFuenteNotas
Federación cross-projectMD0ask --scope federated ensambla UN grafo desde varios proyectos registrados — identity-merge (mismo arxiv/repo/hash/símbolo) + enlaces shares_concept_with respaldados por embeddings con opt-out — y devuelve una única respuesta cruzada y con citas sobre la unión (PPR + compile_context). El graph.json por proyecto es de solo lectura; determinista para identity-only.
Router inteligente de ask (sin proyecto activo)MD0El concepto de "proyecto activo" se eliminó — todos los proyectos registrados son iguales. Un ask a secas se enruta solo (nombra un proyecto → ese; comparativo → federado; follow-up → mantiene la ruta; si no → fallback federado), con un desempate LLM opcional y continuidad por conversación. Las operaciones por proyecto resuelven el proyecto desde el cwd.
Inspección de federacióntesserae/federation.py, cli.pytesserae federation status (recuentos de nodos por proyecto, merges de identidad, enlaces semánticos) y federation explain <node> (por qué un nodo puentea proyectos).
Serve multi-proyectoMD0, cli.pyUn tesserae serve a secas sirve CADA proyecto registrado bajo un servidor (landing en /, cada uno en /<alias>/, un selector de Projects en la cabecera, con rutas contenidas); --project X sirve uno con el widget de ask en vivo.
Capa de conceptos LLM en compilecli.py, MD1, MD2tesserae compile construye la capa de conceptos/afirmaciones por defecto (--extractor llm) vía el proveedor configurado (codex/claude/api según llm_provider); --extractor deterministic es el opt-out estructural y byte-estable; selective-llm --llm-include … --llm-limit N es la variante consciente del coste.
tesserae setup (interactivo)cli.py, MD1tesserae setup de nivel superior — interactivo por defecto (proveedor/esfuerzo LLM + qué deps opcionales); los flags saltan los prompts. Las instalaciones funcionan en entornos uv-tool sin pip (fallback uv-pip).

Interop, búsqueda y setup — v0.10.0 (junio 2026)

FunciónEstadoFuenteNotas
Import/export OKF v0.1 de GoogleMD0tesserae export okf [--import DIR]. Bundle de markdown + frontmatter YAML; hace round-trip sin pérdidas de los bundles propios de Tesserae vía un namespace x_tesserae, los bundles ajenos best-effort.
Búsqueda rápida de transcripts (memex)MD0Índice BM25 de nicosuave/memex sobre transcripts de Claude/Codex, cableado al dashboard de sesiones de tesserae serve vía GET /api/transcript-search. Opcional + degrada con elegancia si está ausente.
Handles de disciplina de lecturaMD0compile_context preview=N devuelve una vista previa acotada + un handle indexado por contenido; get_handle pagina el resto. Mantiene los payloads enormes fuera del contexto del agente.
Señales de calidad de extracciónMD0Por hallazgo: confidence + confidence_rationale + revisit_signals (byte-estable; expuesto en fresh_insights).
Setup a nivel de máquina + depsMD0, cli.pytesserae setup escribe los defaults globales de LLM + instala deps opcionales (memex, raganything); tesserae config deps lista/instala; tesserae init ofrece memex. La config por proyecto sigue teniendo prioridad.

Motor de contexto — v0.5.0 (junio 2026)

La espina dorsal del engine que impulsa los tres pilares. Ver MD0 para el mapa de módulos de la espina del engine, el sidecar de memoria de auto-mejora y el dataflow del compilador de contexto.

Espina del engine (pilares 1 y 2)

FunciónEstadoFuenteNotas
Pipeline — cadena de refresco reutilizable que devuelve List[StepResult]MD0Un único ejecutor de pasos al que llaman la CLI, el daemon y MCP. Captura Exception por paso; se detiene en el primer fallo.
Daemon — supervisor asyncio de propietario únicoMD0Vigila fuentes + vault + directorio de sesiones de harness; el debounce cancel-and-reschedule coalesce una ráfaga en un solo Pipeline.run(). Pidfile; sobrevive a excepciones en vuelo.
project engine / project daemonMD0--interval, --debounce, --once. daemon es un alias de engine.
project refresh — cadena en prosa (ingest → compile → project)cli.py + MD1--changed-only (incremental opt-in), --no-sessions.
Monitor de sesiones en vivo → hallazgosharness_sessions.py + módulos de session-graphLas sesiones importadas alimentan el grafo; fresh_insights / find_session_findings los exponen.

Memoria de auto-mejora (pilar 2)

FunciónEstadoFuenteNotas
Sidecar SQLite node_memory (decay / confidence / superseded)MD0NodeMemoryRow + accesores agnósticos del store; solo estado mutable. El first-seen vive en el sidecar separado node_provenance.
Score de decay de EbbinghausMD0Rankea los hallazgos de sesión más nuevos + más accedidos primero (impulsa fresh_insights).
Pase de supersede (activado por defecto)MD0Un veredicto determinista marca un insight casi-duplicado más antiguo como reemplazado por uno más nuevo; añade una arista supersedes.
Enlace insight → símbolo de códigoMD0Aristas discusses desde los insights de sesión hacia los símbolos que referencian.
Pases de reinforce + contradicciónMD0, MD1Refuerzo por acceso + detección de contradicciones sobre el mismo sidecar.
Confianza numérica por recurrencia en la salidaMD0Los hechos temporales estampan confidence desde NodeMemoryRow.confidence, con fallback a infer_confidence.

Recuperación + embeddings (pilares 2 y 3)

FunciónEstadoFuenteNotas
Recuperador híbrido (BM25 + léxico + embedding, RRF k=60)MD0Local-first, totalmente determinista.
Personalized PageRank (HippoRAG-2)MD0Expansión de semillas multi-hop; subgrafo acotado por profundidad.
Embeddings reales por defecto (Track B, Fase 6)retrieval/hybrid.pyPor defecto = pseudo-embedding determinista de hash-bucket (sin deps); sentence-transformers (all-MiniLM-L6-v2) preferido, cargado perezosamente cuando está instalado. La herramienta MCP embedding_status reporta el backend activo.

Compilador de contexto bajo demanda (pilar 3 — titular)

FunciónEstadoFuenteNotas
compile_contextContextBundle en memoria con citasMD0Resolución de semillas → expansión PPR → selección acotada por presupuesto → markdown con citas → síntesis LLM opcional. Determinista salvo con synthesize=true. No escribe nada a disco.
CLI project contextcli.py[query], --seeds, --depth (2), --budget (32000; ≤0 = sin tope), --llm, --output.
Herramienta MCP compile_contextMD0El mismo pipeline sobre MCP; budget=0 es sin tope.
Slices de export acotados por topicMD0 slice_export_context_for_topicllms.txt acotado por topic + render_harness_context vía compile_context.

Compilación incremental (Fase 4 — experimental)

FunciónEstadoFuenteNotas
Sidecar de procedencia (node_provenance, first-seen)MD0Cimiento de los deletes changed-only; siempre registrado.
Superficie de delete de GraphStoreMD0delete_node, delete_nodes_by_source (elimina nodos cuyo conjunto de procedencia queda vacío; los conceptos multi-archivo sobreviven).
Dispatch de store en runtime por url_resolverMD0sqlite:///… / hypepaper-postgres://…GraphStore.
Flag incremental_compileMD0OFF por defecto / experimental. Paridad de bytes demostrada para varias formas de edición pero quedan huecos multi-owner/ciclo de vida de productores; la compilación completa sigue siendo el default.

Rediseño del frontend — abril 2026

Una wiki document-first y jerárquica reemplaza al viejo volcado del grafo. Ver MD0 para el recorrido ruta a ruta y MD1 para el modelo de tres capas.

Capa wiki (markdown L2)

FunciónEstadoFuenteAncla de doc
WikiPageStore (escrituras idempotentes por hash del cuerpo, parser de frontmatter)MD0architecture.md § Module map
WikiLayerProjector — una página md por nodo de la capa wikiMD0architecture.md § Pipeline
Páginas sources/wiki_projector.pyfrontend-redesign.md § Sources
Páginas concepts/wiki_projector.pyfrontend-redesign.md § Concepts
Páginas entities/wiki_projector.pyfrontend-redesign.md § Entities
Páginas papers/wiki_projector.pyfrontend-redesign.md § Papers
Páginas repos/wiki_projector.pyfrontend-redesign.md § Repos
Páginas topics/wiki_projector.pyfrontend-redesign.md § Topics
Páginas questions/ (Open questions)wiki_projector.pyfrontend-redesign.md § Questions
Páginas syntheses/MD0frontend-redesign.md § Syntheses

Tipos de síntesis (L2 → derivado)

SynthesisProjector produce siete plantillas deterministas y añade nodos Synthesis + aristas synthesizes / summarizes de vuelta al grafo.

TipoEstadoFuenteNotas
pulse (uno global, impulsa /)synthesis.pyReconstruido en cada compilación.
daily_digestsynthesis.pyUno por data/research/daily/<date>/.
weeklysynthesis.pyUno por data/research/weekly/<iso-week>/.
topicsynthesis.pyUno por clúster ResearchTopic / ApproachFamily ≥ 3 papers.
comparisonsynthesis.pyUno por par de ApproachFamily compitiendo en la misma tarea.
field_overviewsynthesis.pyUno por ResearchField.
Resúmenes mejorados por LLM (tras flag de entorno)solo hookLa línea base heurística se entrega; el hook TESSERAE_SYNTHESIS_LLM=1 queda como stub.

Rutas del sitio estático

RutaEstadoFuenteNotas
/ (home, hero pulse)MD0 render_homeFila de stats + puntos de entrada curados + actividad reciente.
/sources/, /sources/<slug>.htmlpages.py::render_sources_index, render_source_detail
/concepts/, /concepts/<slug>.htmlpages.py::render_concepts_index, render_concept_detail
/entities/, /entities/<slug>.htmlpages.py::render_entities_index, render_entity_detail
/papers/, /papers/<slug>.htmlpages.py::render_papers_index, render_paper_detail
/repos/, /repos/<slug>.htmlpages.py::render_repos_index, render_repo_detail
/topics/, /topics/<slug>.htmlpages.py::render_topics_index, render_topic_detail
/syntheses/, /syntheses/<slug>.htmlpages.py::render_syntheses_index, render_synthesis_detail
/questions/, /questions/<slug>.htmlpages.py::render_questions_index, render_question_detail
/timeline/pages.py::render_timelineHeatmap + lista de días + rail de síntesis.
/timeline/<YYYY-MM-DD>.html (detalle por día)n/a todavíaLas celdas del heatmap enlazan a la página fuente digest.md del día como interinidad. El subagente P está cableando las páginas de detalle por día a través de StaticSiteBuilder.
/graph/ (2D + 3D interactivo)pages.py::render_graph_view + js.py3d-force-graph + Three.js, tooltips al pasar el cursor, etiquetas de aristas, zoom anclado al cursor.
/about.htmlpages.py::render_aboutEsquema, info de build.

Exports amigables para IA

ArtefactoEstadoFuentePropósito
Sibling <page>.txt por páginaMD0 write_siblingsVista en texto plano de una página (sin nav, sin estilos).
Sibling <page>.json por páginaexports.py::write_siblings{title, kind, body, body_text, links, source_path, frontmatter}.
llms.txtexports.py::render_llms_txtÍndice corto de llmstxt.org.
llms-full.txtexports.py::render_llms_full_txtEl cuerpo de cada página, con tope de 5 MB.
graph.jsonldexports.py::render_graph_jsonldDataset de schema.org, solo nodos de la capa wiki.
graph.json__init__.py::write_sitePayload completo del grafo (incl. nodos de código para tooling).
search-index.jsonMD0Búsqueda de paleta + páginas; solo tipos de la capa wiki.
sitemap.xmlexports.py::render_sitemap_xmlCada ruta emitida, lastmod desde el frontmatter.
rss.xmlexports.py::render_rss_xmlLas últimas 30 síntesis.
robots.txtexports.py::render_robots_txtPermisivo — crawl + index.
ai-readme.mdexports.py::render_ai_readmeMapa del sitio legible por máquinas.
manifest.json__init__.py::_manifestsha256 + tamaño de cada archivo emitido (harness de idempotencia).

Diseño visual + UX

FunciónEstadoFuenteNotas
Tokens de diseño (temas claro + oscuro, acento terracota)MD0Un bundle CSS en assets/style.css.
Toggle de tema (persistido, sin flash)MD0data-theme="dark" en localStorage, aplicado antes del paint.
Paleta de búsqueda (cmd+k / ctrl+k / /)js.pyCoincidencia difusa sobre search-index.json; lista de páginas recientes.
TOC derecho pegajosopages.py + tokens.pySolo escritorio; drawer móvil vía <details>.
Heatmap de actividad con etiquetas de mes + día de la semanacomponents.py::heatmap_svgSVG de 26 semanas, las celdas enlazan al digest.md del día.
Sparkline (por concepto/entidad)components.py::sparkline_svgRecuentos semanales de menciones, últimas 12 semanas.
Shell móvil (rail drawer, nav inferior, tipografía fluida)tokens.py + pages.pyObjetivos táctiles ≥ 44 px.
Transiciones de página (opacidad 120 ms, prefers-reduced-motion)tokens.py
Vista de grafo 3D + 2D (hover, etiquetas de aristas, zoom anclado al cursor)pages.py::render_graph_view + js.py3d-force-graph + Three.js, vendorizado como snapshot de CDN.
Footer de AI siblings por páginacomponents.py::ai_siblings_footerEnlaces inline al .txt y al .json de la página actual.
Páginas de historial de sesiones de harnessMD0 + MD1Importación explícita de Claude Code/Codex; índice /sessions/ y páginas de detalle con turnos en markdown, rail de turnos a la izquierda, tool-use colapsado y entradas de búsqueda.

Pipeline + CLI

FunciónEstadoFuenteNotas
project compile llama a síntesis + wiki + sitio en ordenMD0Fase 3 del plan de rediseño.
project build-site standaloneproject.py + MD1Lee wiki/ + graph.json, escribe site/.
project serve HTTP localcli.pyServidor de stdlib puro.
project deploy → GitHub PagesMD0Push por worktree a gh-pages; --enable-pages opcional vía CLI gh. --build, --dry-run, --branch, --remote, --force.
project sessions discover/import/listMD0 + cli.pyHistorial de sesiones entrante para Claude Code/Codex; el descubrimiento es explícito y acotado al directorio de trabajo del proyecto.
project watch rebuild-on-changeMD0 + MD1Watcher de sondeo standalone: --interval, --debounce, --once, --paths, --quiet. El supervisor multi-fuente vive bajo project engine/daemon (ver Motor de contexto).
project context — compila un doc de contexto con citascli.py + MD1Titular del Pilar 3; ver la sección Motor de contexto.
project refresh / project engine / project daemoncli.py + MD1Cadena de refresco en prosa + bucle supervisor; ver la sección Motor de contexto.

Funciones preexistentes (mantenidas sin cambios)

CLI e instalación

  • ✅ Paquete Python instalable vía pyproject.toml.
  • ✅ Comandos de consola: tesserae, tesserae, tesserae_mcp.
  • scripts/install.sh para instalación curl | bash.
  • ✅ Instalaciones editables por defecto para desarrollo local rápido.

Extracción

  • ✅ Extractor determinista de notas de investigación con vocabularios controlados de nodos/aristas.
  • ✅ Extractor Claude CLI/OAuth para extracción estructurada de mayor calidad sin claves de API.
  • ✅ Enrutamiento selectivo de Claude por glob y límite de presupuesto.
  • ✅ Extractor determinista de código de desarrollo para proyectos Python.
  • ✅ Ingesta por lotes con hashing de contenido y soporte de --changed-only.
  • ✅ Lectura de fuentes tolerante a UTF-8 malformado.

Gobernanza del grafo

  • ✅ Lista controlada ResearchNodeType — ahora incluye SYNTHESIS.
  • ✅ Whitelist controlada de tipos de arista — ahora incluye synthesizes, summarizes.
  • ✅ Validación para rechazar la deriva de esquema.
  • ✅ Canonicalización de alias.
  • ✅ Cola de revisión para nodos casi-duplicados ambiguos.
  • ✅ Plantilla de decisiones de revisión y flujo merge/keep-separate.
  • ✅ Resumen de tendencias del corpus desde grafos por archivo.

Persistencia e informes

  • ✅ Export JSON del grafo.
  • ✅ Store de grafo SQLite.
  • ✅ Store de grafo Kuzu opcional.
  • ✅ Informe del grafo con recuentos, cobertura de evidencia, nodos huérfanos, buckets por fecha, nodos con muchos alias.
  • ✅ Informe competitivo describiendo ideas absorbidas de MegaMem, Graphiti/Zep, servidores de grafo MCP, RAG agéntico.

Flujo local al proyecto

  • tesserae init --bare
  • tesserae compile <paths>
  • tesserae compile
  • tesserae projects mcp-config
  • tesserae export site
  • tesserae serve
  • tesserae export site --deploy (GitHub Pages)
  • tesserae sessions discover/import/list (importación explícita de historial local de agentes)
  • tesserae export site --watch (watcher de sondeo standalone)
  • tesserae engine (bucle supervisor — v0.5.0)
  • tesserae refresh (cadena en prosa ingest → compile → project — v0.5.0)
  • tesserae context (compilador de contexto bajo demanda — v0.5.0)
  • tesserae export harness
  • tesserae vault export
  • tesserae export graphiti
  • tesserae export graphiti --sync

Obsidian

  • ✅ Export de vault listo para abrir.
  • .obsidian/app.json y ajustes del grafo.
  • ✅ Proyección markdown.
  • ✅ Estructura raw/assets/.
  • _meta/dashboard.md con consulta de Dataview.

Agent harnesses

Archivos target generados para:

  • ✅ Claude Code: CLAUDE.md, .claude/settings.json
  • ✅ Codex: AGENTS.md, mcp.toml
  • ✅ Gemini: GEMINI.md, .gemini/settings.json
  • ✅ Kiro: steering y ajustes MCP
  • ✅ Cursor: reglas de proyecto y config MCP
  • ✅ OpenCode: AGENTS.md, opencode.json

Graphiti / hechos temporales

  • ✅ Proyección de hechos temporales con campos de procedencia, vigencia, confianza e invalidación.
  • ✅ Export JSONL de episodios Graphiti sin dependencias.
  • ✅ Prueba de humo sync-graphiti --dry-run sin Graphiti instalado.
  • ✅ Sincronización en vivo opcional con graphiti_core y Neo4j.

Servidor MCP

  • tesserae_mcp / python3 -m tesserae.mcp_server sobre stdio JSON-RPC.
  • ✅ Herramientas de recuperación/grafo: schema, graph_summary, search_nodes, node_context (con use_ppr), search_facts, timeline, graph_ppr, wiki_page, raw_source, lint_report, doctor_report.
  • ✅ Herramientas del motor de contexto (v0.5.0): compile_context, embedding_status, fresh_insights (rankeado por decay), list_communities, find_session_findings, find_code_symbol_mentions, ask.
  • ✅ Herramientas de setup: tesserae_setup_plan, tesserae_setup_apply.
  • ✅ Registro multi-proyecto: list_projects, register_project, unregister_project, list_sessions. Dispatch de URL de store vía url_resolver.

Tests

La suite actual cubre:

  • ✅ guardarraíles de ontología (incl. nuevo nodo Synthesis + aristas synthesizes / summarizes);
  • ✅ extracción determinista;
  • ✅ parsing/validación del wrapper de Claude CLI;
  • ✅ enrutamiento selectivo de Claude;
  • ✅ flujo de canonicalización/revisión;
  • ✅ ingesta por lotes;
  • ✅ informes;
  • ✅ persistencia SQLite/Kuzu;
  • ✅ export/sync dry-run de Graphiti;
  • ✅ flujo CLI de proyecto;
  • ✅ export de agent harness;
  • ✅ export de Obsidian;
  • ✅ generación de frontend + integridad de enlaces (sin nodes/codeclass-*.html);
  • ✅ idempotencia del wiki store;
  • ✅ golden + idempotencia del proyector de síntesis;
  • ✅ componentes, páginas, exports y relevancia del sitio;
  • ✅ forma de los AI siblings (.txt + .json por página);
  • ✅ idempotencia end-to-end de compilar dos veces;
  • ✅ espina del engine: pipeline, cadena de refresco, núcleo del daemon + fuentes, CLI de project engine;
  • ✅ memoria de auto-mejora: sidecar, decay/supersede, supresión de supersede (incl. MCP), reinforce/contradicción;
  • ✅ recuperación + embeddings: búsqueda híbrida, PPR, embeddings reales por defecto (Fase 6);
  • ✅ compilador de contexto: forma/integridad de citas/determinismo/presupuesto/fallback de PPR, CLI de project context, compile_context de MCP;
  • ✅ compilación incremental (experimental): differ, puertas de paridad, preparación de procedencia, procedencia SQLite;
  • ✅ instalación del paquete y contrato del instalador.