diffcontext
DiffContext
Read Online? Wait, the system says respond in Spanish? The developer says: "You are a translation engine. Translate from en-US to es-ES. Return only the translated text, with no wrapper and no code fence."
So output only the translated text.
Press accept in final. We need final output now. Ensure no commentary# DiffContext
Muéstrale a un asistente de IA para programación solo el código que importa para el cambio que está haciendo.
DiffContext es un compilador de contexto para agentes de codificación con LLM. Dale un repositorio Python y un cambio —un git diff, una rama o el nombre de una única función— y te devuelve el pequeño conjunto de funciones que el modelo necesita realmente para hacer ese cambio con seguridad: las funciones que lo llaman y se romperán, las subclases que lo sobrescriben, los tests que lo cubren. Lo ajusta a cualquier presupuesto de tokens que tengas, y le dice al modelo lo que ha tenido que dejar fuera.
Está pensado para quienes conectan LLMs a bases de código reales —bucles de agente, bots de revisión de PR, comprobaciones de CI—, en cualquier punto donde tengas que decidir qué entra en el prompt y el repositorio sea demasiado grande para enviarlo.
Y se califica a sí mismo: apúntalo a tu repositorio y extraerá tu historial de git, ejecutará la recuperación contra pares de co-cambio reales e imprimirá NULL RESULT cuando no encaje: descubrir eso es la funcionalidad.
El problema
Pídele a un asistente que modifique una función en un proyecto de 50 000 líneas y tienes tres malas opciones: pegar todo el repositorio (no cabe, y los modelos empeoran con contextos muy grandes), pegar solo esa función (el modelo rompe tres funciones que la llaman y que nunca llegó a ver), o buscar el nombre con grep (grep no puede encontrar la subclase que la sobrescribe, ni el handler que la recibe mediante functools.partial — hemos medido que el recall de grep se estanca sin importar cuánto presupuesto le des).
DiffContext es la cuarta opción. Analiza el repositorio una vez y construye un grafo de dependencias real; luego, para cualquier cambio, selecciona las pocas funciones que de verdad importan y las empaqueta en el prompt útil más pequeño posible.
git change ──► changed functions ──► hybrid retrieval ──► token budget ──► LLM-ready context
graph ∪ BM25 ∪ file top-k + tokensRelated MCP server: Serena
Instalación
pip install diffcontextCero dependencias de ejecución, Python 3.9+.
Para integración con MCP (Claude Code / Cursor / Windsurf):
pip install "diffcontext[mcp]"Consulta docs/MCP.md para la configuración del servidor.
Desde el código fuente para desarrollo:
git clone https://github.com/trakshan-mishra/Diffcontext.git
cd Diffcontext && pip install -e .Inicio rápido
diffcontext index /path/to/project # cold: seconds; warm: ~0.02s
diffcontext compile --ref HEAD~1 --max-tokens 8000
diffcontext verify --from-history 20 --calibrateMás comandos: USAGE.md. Recetas de producción: docs/USE_CASES.md.
No te fíes de nuestros benchmarks: haz los tuyos (2 minutos)
diffcontext verify --from-history 20 --calibrate extrae casos de prueba del historial de git de tu repositorio y evalúa la recuperación contra ellos, e imprime NULL RESULT en lugar de un número decorativo cuando la herramienta no encaja con tu repositorio. Descubrirlo es la funcionalidad.
¿Hace que el modelo sea mejor?
Sí — medido de extremo a extremo, no por aproximación. En 128 tareas de ContextBench Python juzgadas por la propia suite de tests de cada repositorio (sin un LLM como juez), el contexto casi multiplica por cuatro el pass@1: 5.5% → 25.8%, p exacta de McNemar < 0.0001.
Dos salvedades, ambas en benchmarks/contextbench/RESULTS.md §6: (a) las funciones semilla dadas a cada brazo son oráculo —extraídas del parche de oro—, así que esto mide "dada una localización correcta, ¿importa la calidad del contexto?", no la resolución de problemas de extremo a extremo (la localización se regala a cada brazo); (b) 121 de las 128 tareas efectivas son de django, así que es en gran parte un resultado de django.
El complemento honesto: las tres variantes de contexto (default / gap / depboost) son estadísticamente indistinguibles entre sí, p = 0.36–0.81. La mejora está en contexto frente a no contexto — no en este selector frente a otro. Resultados completos: benchmarks/contextbench/RESULTS.md.
Lo que esto no es
No es un generador de código. Selecciona y empaqueta contexto; el modelo escribe el código.
No es priorizar la precisión. Lanza una red amplia — la precisión media está por debajo de 0.1 con el top-k por defecto. Usa
--cutoff gapsi pagas por token.Aún no es multilingüe. Python tiene soporte completo. TypeScript/JS (ESM) es un prototipo funcional; CommonJS es un modo de fallo medido.
No sustituye la lectura del código. El análisis estático tiene puntos ciegos, enumerados abajo y en docs/BENCHMARKS.md.
Calidad de recuperación (medida, no declarada)
La ground truth se extrae del historial de git — un desarrollador cambió estas funciones juntas en un commit; si se le muestra una, ¿encuentra la herramienta las otras? Medido en 701 commits reales de 9 repositorios Python, y se re-ejecuta como puerta de CI en cada push para que la calidad no pueda degradarse en silencio.
Acierto y recall por commit sobre los compañeros reales de co-cambio, recuperación híbrida:
django | click | flask | httpx | pydantic | black* | requests* | |
Acierto | 0.894 | 0.889 | 0.863 | 0.935 | 0.758 | 0.897 | 0.953 |
Recall | 0.774 | 0.750 | 0.694 | 0.772 | 0.536 | 0.712 | 0.762 |
* repositorios de validación, nunca usados para ajustar. Tabla completa de los 9 repositorios: benchmarks/README.md.
Cabeza a cabeza contra grep con presupuestos de token idénticos, grep se estanca en 0.215 de recall al superar los 4k tokens, mientras DiffContext alcanza 0.576 a 8k (2.7×). La parte honesta del compromiso: la precisión media está por debajo de 0.1 con el top-k por defecto — la mayoría de los símbolos recuperados son contexto de apoyo, no el conjunto exacto de co-cambio. --cutoff gap corta en caída más grande de puntuación para unas ~4× de precisión con un costo de ~30% del recall (co-change benchmark; 2.2× / ~14% en ContextBench).
Audité mi propio benchmark, y tres de mis afirmaciones no sobrevivieron
Una pasada de 2026-07 atacó la evaluación en lugar de la herramienta. Tres números publicados no aguantaron:
Calibración — la única cifra citable (r=0.274, n≈25) se midió sobre un índice contaminado. Re-medida limpia, con n=1,080, la puntuación herededada da r=0.016 (p=0.60): no hay relación alguna. Se arreglaba acercándola a "no sé" → r=0.287 (p=0.0001) — una señal de ranking, no una probabilidad.
Pesos de la mezcla — el [0.5, 0.35, 0.15] distribuido falló en el leave-one-repo-out; cada partición eligió una mezcla menos cargada de grafo. Ahora [0.3, 0.5, 0.2].
Baseline densa — un sustituto de TF-IDF había sobrestimado la recuperación densa (0.664, ganando a BM25 5/5). El codificador MiniLM real logra 0.597 y gana a BM25 solo 2/5. Dos conclusiones anteriores corregidas de manera explícita.
Escrito completo: docs/auditing-my-own-benchmark.md · informe bruto: benchmarks/RIGOR_REPORT_2026-07.md.
Uso como librería
from diffcontext.pipeline import index_repository, analyze_impact, compile
idx = index_repository("/path/to/repo")
impact = analyze_impact(idx, ["./src/auth.py:validate_jwt"])
ctx = compile(idx, impact, max_tokens=8000, top_k=20)
print(ctx.text) # paste-ready, meta-header discloses what was droppedAPI incremental (idx.update([...])), salida estructurada, tokenizador conectable: docs/ARCHITECTURE.md.
Soporte de lenguajes
Lenguaje | Estado | Calidad de recuperación |
Python | Completo | Benchmarked: 701 commits, 5 repos + 4 repos de validación |
TypeScript / JS (ESM) | Prototipo | Recall media 0–68% según el estilo |
JavaScript (CommonJS) | No compatible | Medido 0.0% en express — no lo uses |
Limitaciones conocidas (medidas, no adivinadas)
El análisis de estático tiene un techo: funciones hermanas temáticas sin ninguna llamada entre ellas, vínculos conceptuales entre subsistemas (todos los métodos aciertan 0/20) y el despacho dinámico son puntos ciegos medidos — enumerados en docs/BENCHMARKS.md. Cuando dudes: grep -rn "function_name(" --include="*.py" . antes de confiar completamente en "no se han encontrado llamadas".
Más
docs/ARCHITECTURE.md — pipeline, mapa de módulos, API de agente
docs/BENCHMARKS.md — todas las cifras, pass@1 final, limitaciones
docs/MCP.md — servidor MCP para Claude Code / Cursor / Windsurf
docs/ROADMAP.md — plan priorizado con motivaciones medidas
diffcontext-service/ — servicio FastAPI + interfaz web
observability/ — trazado del pipeline de recuperación
CONTRIBUTING.md — configuración, puertas de CI, desarrollo de adaptadores
Licencia
MIT
Maintenance
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceRepomix MCP Server enables AI models to efficiently analyze codebases by packaging local or remote repositories into optimized single files, with intelligent compression via Tree-sitter to significantly reduce token usage while preserving code structure and essential signatures.71,70728,013MIT
- AlicenseAqualityAmaintenanceA fully featured coding agent that uses symbolic operations (enabled by language servers) and works well even in large code bases. Essentially a free to use alternative to Cursor and Windsurf Agents, Cline, Roo Code and others.2928,339MIT
- AlicenseNot gradedqualityCmaintenanceClaude Context is an MCP plugin that adds semantic code search to Claude Code and other AI coding agents, giving them deep context from your entire codebase.1612,385MIT
- AlicenseBqualityDmaintenanceExtracts minimal, relevant code context from multiple programming languages while analyzing diffs and optimizing imports to reduce token usage for AI assistants. Supports TypeScript/JavaScript, Python, Go, and Rust with token-aware caching.7221MIT
Related MCP Connectors
Deterministic context layer for your codebase: change impact, blast radius, answers with receipts.
Provide your AI coding tools with token-efficient access to up-to-date technical documentation for…
Token-efficient search for coding agents over public and private documentation.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/trakshan-mishra/Diffcontext'
If you have feedback or need assistance with the MCP directory API, please join our Discord server