feat: source attribution para funciones externas
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>
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
## Extraccion de funciones desde repos externos (`sources/`)
|
||||
|
||||
### Workflow
|
||||
|
||||
1. Clonar repo en `sources/<nombre>` (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
|
||||
Reference in New Issue
Block a user