ef86aae8fb
Sistema de extracción de funciones desde repos externos. Agrega campos source_repo, source_license y source_file en functions y types (migración 006). Incluye manifest sources/sources.yaml, regla sources.md, parser con campos de atribución, y template actualizado con los nuevos campos. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2.2 KiB
2.2 KiB
Extraccion de funciones desde repos externos (sources/)
Workflow
- Clonar repo en
sources/<nombre>(gitignored, solo el manifestsources/sources.yamlse versiona) - El agente analiza el repo y propone funciones candidatas
- Las funciones se copian y adaptan al formato del registry (.go/.py/.sh/.ts + .md con frontmatter)
fn indexlas registra. El manifest se actualiza con las funciones extraidas.
Filtro de calidad (obligatorio antes de extraer)
Una funcion externa solo se extrae si cumple TODOS estos criterios:
- Firma generica: no depende de tipos internos del repo origen ni de config hardcodeada
- Sin estado global: no usa variables globales, singletons, ni init() con side effects
- Dependencias minimas: solo stdlib o dependencias ya presentes en fn_registry
- Pura si es posible: si la funcion puede ser pura, debe extraerse como pura
- Sin credenciales: no contiene secrets, API keys, ni paths absolutos
- Testeable: la logica debe poder validarse con tests unitarios
- No duplicada: consultar registry.db con FTS5 antes de extraer para evitar duplicados
- Licencia compatible: el repo debe tener licencia permisiva (MIT, Apache 2.0, BSD, etc.)
Adaptacion al extraer
- Renombrar a snake_case siguiendo la convencion del registry
- Adaptar firma para usar tipos nativos (no tipos internos del repo)
- Crear .md con frontmatter completo incluyendo
source_repo,source_license,source_file - Actualizar
sources/sources.yamlcon la extraccion
Campos de atribucion en frontmatter
source_repo: "https://github.com/user/project"
source_license: "MIT"
source_file: "pkg/original_file.go"
Estos campos se indexan en registry.db y permiten consultar:
SELECT id, source_repo, source_license FROM functions WHERE source_repo != '';
Lenguajes soportados para extraccion
Cualquier lenguaje puede analizarse como fuente. El destino depende de la naturaleza de la funcion:
- Algoritmos/logica pura → Go (functions/{domain}/) o Python (python/functions/{domain}/)
- Scripts/utilidades sistema → Bash (bash/functions/{domain}/)
- UI/frontend → TypeScript (frontend/functions/{domain}/)
- C/Rust/otros → Traducir a Go o Python, manteniendo la semantica original