Files
fn_registry/.claude/rules/sources.md
T
egutierrez 462c1b7a66 chore: dependencias Python, sources manifest, reglas de extracción y comando extract-source
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>
2026-04-05 17:12:05 +02:00

2.9 KiB

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
  • 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: impure con error_type apropiado.
  • 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.yaml con 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