v0.3.0
Documentation
- Guía "RAG en 5 minutos" (
docs/easy-rag.md, KJR-TSK-0108): flujo
completo de la capa Easy RAG — index/query/serve en local, contenedor y
GCP — con las garantías transversales (sensitivity first, sin fallbacks
silenciosos, determinismo). Sección nueva en el README y ROADMAP
reestructurado: Easy RAG pasa a ser la 0.3.0 (entregada en main),
evaluación avanzada → 0.4.0, persistencia → 0.5.0, ecosistema → 0.6.0+.
Added
-
Módulo Terraform
deploy/gcp/(KJR-TSK-0107): monta el RAG en
Google Cloud conterraform apply -var project_id=.... Cloud Run v2
(imagen del Dockerfile, startup probe sobre/health, scale-to-zero),
Cloud SQL Postgres 16 con pgvector por socket Cloud SQL, bucket GCS con
el índice montado read-only en/datavía GCS FUSE,PG_URLen Secret
Manager (contraseña generada por Terraform), Artifact Registry y service
account con permisos mínimos. API privada por defecto
(allow_unauthenticated=false);terraform destroysin huérfanos con
protecciones explícitas para la base y el bucket. README con el flujo
completo (build+push, migración pgvector, index vía cloud-sql-proxy,
rsync del índice, query con identity token). Validado con
terraform fmt+validate. Layout preparado paradeploy/aws|azure. -
Imagen Docker del servidor RAG (KJR-TSK-0106):
Dockerfile
multi-stage sobrenode:22-slim, usuario no root, con los backends
opcionales preinstalados (pg,@lancedb/lancedb). Sirve el índice
montado en/datavía HTTP; configuración solo por entorno (PORT,
KARAJAN_STORE=lancedb|pgvector,PG_URL) — sin secretos horneados.
docker-compose.ymlañade el servicioragjunto apgvectorpara un
RAG local end-to-end. Verificado con smoke real: index + serve + curl
a/healthy/querydentro del contenedor. -
karajan-rag serve [ruta](ADR-005, KJR-TSK-0105): sirve el índice
Easy RAG sin dependencias nuevas. Modo MCP stdio por defecto
(JSON-RPC 2.0 delimitado por líneas: initialize, tools/list, tools/call)
con dos tools —rag_query(híbrido vector+BM25) yrag_status—
consumibles desde Claude Code o cualquier cliente MCP. Modo HTTP
(--http --port N):POST /query {question, topK?}yGET /health,
con validación estricta y errores JSON. El mismoRagServicesirve
índices locales (lancedb) o remotos (--store pgvector+PG_URL) —
contrato que empaquetarán la imagen Docker y el Terraform de GCP.
Módulos nuevossrc/easy/{rag-service,http-server,mcp-server}.js,
re-exportados en el barrel. -
karajan-rag init [ruta](ADR-005, KJR-TSK-0104): scaffold de
karajan.config.jsoncon la seccióneasy(store, embedder,
dimensions, topK, adapter). Wizard interactivo con defaults;--yes
para modo no interactivo (CI/scripts); no sobreescribe sin--force;
añade.karajan/al.gitignore.indexyqueryleen la config
como defaults del proyecto — los flags de CLI siempre ganan, y una
config inválida falla con el error exacto (nunca se ignora). Nuevo
módulosrc/easy/config.js(loadEasyConfig,saveEasyConfig,
validateEasyConfig,DEFAULT_EASY_CONFIG) re-exportado en el barrel. -
karajan-rag query "<pregunta>" [ruta](ADR-005, KJR-TSK-0103):
consulta el índice local sin escribir pipeline. Retrieval híbrido en dos
etapas (vector search sobre el store persistente + BM25 sobre los
candidatos, merge 50/50 de scores normalizados), dedupe por overlap y
salidafichero:línea (score)+ pasaje. El embedder y las dimensiones
se derivan del fingerprint del manifest (imposible consultar con un
espacio vectorial distinto al indexado).--answer --adapter <cli>
genera respuesta con contexto víaGeneratorRole(claude/codex/gemini/
ollama/azure/bedrock/vertex). Índice inexistente → error con el comando
exacto para crearlo. NuevosqueryIndexyrunQueryCommanden el barrel. -
karajan-rag index <ruta>(ADR-005, KJR-TSK-0102): construye o
actualiza un índice RAG persistente local en.karajan/con un solo
comando. Autodetecta código/docs/datos vía presets, embebe en batch y
hace upsert al store. Reindex incremental:manifest.jsonguarda el
fingerprint del índice (ADR-002) y el hash por fichero — solo se
reprocesan añadidos/cambiados, los borrados se invalidan del store, y
un cambio de embedder/dimensiones fuerza reindex completo (nunca se
mezclan espacios vectoriales). Flags:--store lancedb|pgvector|in-memory
(defaultlancedb, error accionable si falta el peer;pgvector
requierePG_URL),--embedder hash|transformers,--dimensions N.
Módulos nuevossrc/easy/{manifest,indexer,cli}.js, re-exportados en el
barrel (indexDirectory,diffManifest,runIndexCommand, etc.). -
Easy RAG — autodetección de fuentes y presets (ADR-005, KJR-TSK-0101):
detectSourceType,resolvePreset,classifySourcesychunkWithPreset
ensrc/easy/presets.js. Clasifican ficheros por extensión (código /
docs / datos, con binarios y desconocidos excluidos de forma explícita)
y devuelven presets inmutables que reutilizan los chunkers existentes
con defaults deterministas (hash+lancedb, ADR-005). Los presets
nunca tocan la policy de sensibilidad ni la redacción PII. -
Chunker
chunkByRecords: para fuentes tabulares (CSV/TSV/JSONL) en
lotes de N registros; CSV/TSV prependen la cabecera a cada chunk para
conservar el contexto de columnas, JSONL trocea por objeto. Detección
autode formato por la primera línea. Re-exportado en el barrel.