462c1b7a66
Actualiza pyproject.toml con nuevas dependencias (pdfplumber, python-docx, ebooklib, openpyxl, etc.). Actualiza sources.yaml con funciones extraídas de repos externos. Mejora reglas de extracción en sources.md. Añade comando Claude extract-source para workflow de extracción. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2.9 KiB
2.9 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
- 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.)
Clasificacion de pureza al extraer
Extraer tanto funciones puras como impuras. La clasificacion correcta es obligatoria:
- Pure: sin I/O, sin estado mutable, determinista. Extraer como
purity: pure. - Impure: hace I/O (red, disco, DB, HTTP), usa concurrencia, o depende de estado externo. Extraer como
purity: impureconerror_typeapropiado. - Pipeline: compone multiples funciones para un flujo completo. Extraer como
kind: pipeline, siempre impuro.
No descartar funciones utiles solo por ser impuras. Una funcion que hace HTTP requests, lee archivos, o interactua con bases de datos es valiosa si su firma es generica y reutilizable.
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}/)
- Funciones impuras (I/O, HTTP, DB) → Go o Python segun el dominio
- Scripts/utilidades sistema → Bash (bash/functions/{domain}/)
- UI/frontend → TypeScript (frontend/functions/{domain}/)
- Flujos multi-paso → Pipeline en el lenguaje mas natural
- C/Rust/otros → Traducir a Go o Python, manteniendo la semantica original