## Extraccion de funciones desde repos externos (`sources/`) ### Workflow 1. Clonar repo en `sources/` (gitignored, solo el manifest `sources/sources.yaml` se versiona) 2. El agente analiza el repo y propone funciones candidatas 3. Las funciones se **copian y adaptan** al formato del registry (.go/.py/.sh/.ts + .md con frontmatter) 4. `fn index` las 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.yaml` con la extraccion ### Campos de atribucion en frontmatter ```yaml 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: ```sql 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