Commit Graph

25 Commits

Author SHA1 Message Date
egutierrez 0da3e530dd feat: add params_schema column for function composability
Nueva columna params_schema en functions con migración 009. Almacena JSON
con descripción semántica de inputs/outputs para que agentes razonen sobre
composabilidad de funciones. Incluye: campo en modelo Go, parsing de params/output
del frontmatter YAML, serialización a JSON, FTS5 rebuild con nueva columna,
hash de contenido actualizado, y warning en indexer cuando faltan params.
2026-04-05 18:45:01 +02:00
egutierrez e6228ea8c0 feat: fn index extrae unit_tests automáticamente
El indexer lee test_file_path de funciones testeadas, parsea los test cases y los inserta en unit_tests. El output de fn index ahora muestra el conteo de unit_tests extraídos.
2026-04-05 18:19:21 +02:00
egutierrez 384a87f8a7 feat: parser automático de test files Go/Python/Bash
Extrae test cases individuales con su código desde archivos _test. Go detecta func TestXxx, Python detecta def test_xxx, Bash soporta tres convenciones: test_xxx(){}, secciones === nombre ===, y comentarios # Test:.
2026-04-05 18:19:17 +02:00
egutierrez fea8fed75d feat: modelos y CRUD para unit_tests y e2e_tests
UnitTest en registry con Insert, GetByFunction, Search FTS5, Purge. E2ETest en fn_operations con Insert, Get, List, UpdateResult, Delete. Ambos con scan helpers y serialización JSON.
2026-04-05 18:19:10 +02:00
egutierrez 512eebf7f4 feat: tablas unit_tests y e2e_tests
Migración 008 en registry.db para unit_tests con FTS5 (tests individuales extraídos de archivos de test). Migración 004 en operations.db para e2e_tests con FTS5 (tests de integración entre funciones dentro de apps).
2026-04-05 18:19:05 +02:00
egutierrez 619a56c567 feat: warnings en indexer para file_path inexistentes en disco
Valida post-insert que file_path y test_file_path de funciones y tipos apunten a archivos reales. Reporta warnings sin bloquear el indexado.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 03:23:25 +02:00
egutierrez bf1efb2099 feat: externalize apps/analysis to Gitea repos, add analysis table
- Migration 007: repo_url on apps table + analysis table with FTS5
- Analysis struct, parser, CRUD, validation, hash computation
- Selective purge: remote-only apps/analysis preserved across fn index
- CLI: fn app list/clone/pull, fn analysis list/clone/pull
- search/show/list now include analysis results
- Apps removed from git tracking (content lives in Gitea repos)
- .gitkeep for apps/ and analysis/ dirs
- Bash functions: jupyter analysis pipeline, shell utilities
- Browser domain: CDP functions moved from infra to browser

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 04:23:51 +02:00
egutierrez ef86aae8fb 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>
2026-03-30 14:23:53 +02:00
egutierrez e349a06ad4 feat: content hash y timestamps inteligentes en registry
Agrega content_hash a functions, types y apps para detectar cambios reales
entre reindexaciones. Los timestamps created_at se preservan si el contenido
no cambió, y updated_at solo se actualiza cuando hay cambios efectivos.
Incluye migración 005, hash.go con SHA256 determinístico, y ajustes en
store/indexer/models para el nuevo flujo de timestamps.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 14:23:45 +02:00
egutierrez f570e783fe feat: tabla apps en registry — modelo, parser, indexer y CLI
Agrega soporte completo para indexar aplicaciones del directorio apps/.
Cada app tiene un descriptor app.md con frontmatter YAML que el indexer
recoge automaticamente. Incluye migracion 004, modelo App, ParseAppMD,
ValidateApp, store CRUD con FTS5, y soporte en fn list/search/show.
Crea descriptores app.md para docker_tui, pipeline_launcher y metabase_registry.
2026-03-29 00:13:57 +01:00
egutierrez a4b5651e8c feat: pyrunner mejorado para fn run Python
Refactoriza la ejecucion de funciones Python en fn run. Extrae la logica
a pyrunner.go con soporte para importar dependencias del registry y
ejecutar con el venv del proyecto. Agrega WalCheckpoint en db.go para
que lectores externos vean datos actualizados tras fn index.
2026-03-29 00:13:46 +01:00
egutierrez ebbc3bfdab feat: fn run — ejecución multi-lenguaje de funciones y pipelines desde CLI
Nuevo comando que despacha automáticamente según lenguaje: Go pipelines con
go run, Go functions con go test/vet, Python con venv y -m para imports
relativos, Bash directo, TypeScript con tsx del frontend. Resolución por
nombre con desambiguación. Añadido GetFunctionsByName al store y tsx al frontend.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 23:23:12 +01:00
egutierrez 49eecd0c87 feat: campos documentation, notes y code en registry
Añade campos documentation, notes y code a functions y types.
El parser extrae el contenido del .md y el código fuente del archivo
referenciado en file_path. El indexer los almacena en SQLite y los
incluye en FTS5 para búsqueda sobre código y documentación.
Nueva migración 003_documentation.sql para añadir las columnas.
2026-03-28 20:32:15 +01:00
egutierrez 8d98faccd9 feat: proposals en registry
Añade sistema de proposals al registry: modelos (ProposalKind, ProposalStatus),
CRUD completo (Insert/Get/Update/Delete/List/Search con FTS), validación,
migración 002_proposals.sql y subcomando CLI fn proposal (add/list/show/update).
Motor de migraciones con embed.FS reemplaza schema estático.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 17:13:24 +01:00
egutierrez 5ac4c52e67 feat: WAL mode explícito con PRAGMA para acceso concurrente
Cambia de _journal_mode=WAL en connection string a PRAGMA journal_mode=WAL
explícito. Esto persiste en el archivo y cualquier cliente externo (sqlite3
CLI, DuckDB) hereda WAL automáticamente sin configuración adicional.
Permite leer mientras el agente escribe simultáneamente sin bloqueos.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 02:22:58 +01:00
egutierrez 2d87d6affc feat: indexer con validacion en dos pasadas y CLI con output de errores
Reescribe el indexer con estrategia de dos pasadas:
1. Parsea todos los .md y construye sets de IDs conocidos
2. Valida integridad contra IDs conocidos, inserta solo los validos

El CLI ahora muestra INVALID para errores de validacion y ERROR
para errores de insercion, separando claramente ambos.
Añade test de integracion que verifica que entradas invalidas
se rechazan sin afectar a las validas.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 02:13:44 +01:00
egutierrez 08d141ea1b test: 15 tests para reglas de integridad
Cubre cada regla de integridad:
- Funciones validas pasan
- Pipeline puro rechazado, pipeline sin uses_functions rechazado
- Pura con returns_optional o error_type rechazada
- Impura sin error_type rechazada
- Coherencia tested/tests/test_file_path
- Referencias huerfanas detectadas (4 tipos de referencia)
- Component: framework, returns, has_state+purity
- file_path absoluta rechazada
- Types: algebraic invalido, auto-referencia, refs huerfanas

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 02:13:41 +01:00
egutierrez df7e4a15cf feat: validacion de integridad para funciones y tipos
Implementa todas las reglas de docs/integrity.md:
- Pipeline: siempre impuro, uses_functions no vacio
- Pura: sin returns_optional, sin error_type
- Impura: error_type obligatorio
- Tested: coherencia entre tested, tests y test_file_path
- Component: framework obligatorio, returns vacio, has_state->impure
- file_path siempre relativa
- Referencias cruzadas: uses_functions, uses_types, returns, error_type
  deben apuntar a IDs existentes
- Types: algebraic valido, sin auto-referencias, refs validadas

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 02:13:37 +01:00
egutierrez a34e4109a8 test: tests para parser de frontmatter e indexer completo
5 tests nuevos que validan:
- Parseo de function con extraccion de ejemplo del body
- Parseo de type algebraico con definition multilinea
- Parseo de component con props, emits, has_state, framework
- Error en archivos sin frontmatter valido
- Ciclo completo: escribir .md -> indexar -> buscar por FTS

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 02:07:10 +01:00
egutierrez bf4b71653f feat: indexer que regenera registry.db desde los .md
Index() recorre functions/ y types/, parsea cada .md con frontmatter,
purga la BD existente e inserta todas las entradas. Devuelve conteos
y errores sin abortar ante fallos individuales.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 02:07:08 +01:00
egutierrez 94a1a81297 feat: parser de frontmatter YAML para .md de funciones y tipos
Implementa ParseFunctionMD y ParseTypeMD que extraen frontmatter YAML
de archivos .md y construyen los structs del registry. Soporta los tres
kinds (function, pipeline, component) con sus campos especificos.
Extrae automaticamente el ejemplo del body si existe seccion ## Ejemplo.

Dependencia: gopkg.in/yaml.v3

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 02:07:06 +01:00
egutierrez d9f5f432e8 test: tests para insert, get, FTS search, purge y drop
5 tests que validan el flujo completo del registry:
- Insert y Get de funciones con tags y campos correctos
- Insert y Get de tipos algebraicos
- Busqueda FTS con filtros combinados (purity, domain)
- Purge limpia ambas tablas
- Drop elimina el archivo de BD

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 02:04:21 +01:00
egutierrez e7b4e3eb81 feat: operaciones CRUD y busqueda FTS del registry
Implementa el acceso a datos completo:
- InsertFunction/InsertType con generacion automatica de ID y timestamps
- GetFunction/GetType por ID
- SearchFunctions con FTS + filtros por kind, purity, lang, domain
- SearchTypes con FTS + filtros por lang, domain
- DeleteFunction/DeleteType por ID
- Purge para limpiar antes de re-indexar
- Serialization JSON para campos array (tags, uses_functions, props, etc)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 02:04:19 +01:00
egutierrez 11d1dea6e0 feat: schema SQLite con FTS5 y triggers de sync
Crea la base de datos del registry con:
- Tabla functions con todos los campos del schema v1.0 incluyendo component
- Tabla types con campos algebraicos
- Tablas virtuales FTS5 para busqueda full-text sobre nombre, descripcion, tags, signature y domain
- Triggers AFTER INSERT/UPDATE/DELETE para mantener FTS sincronizado
- Open con WAL mode y foreign keys habilitadas
- Drop y Purge para regeneracion del indice

Dependencia: github.com/mattn/go-sqlite3 (requiere CGO_ENABLED=1 -tags fts5)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 02:04:16 +01:00
egutierrez f750418239 feat: modelos Go para Function y Type
Define los structs que reflejan el schema de docs/:
- Function con campos base + campos de component (props, emits, has_state, framework, variant)
- Type con campos algebraicos (product/sum)
- Enums Kind, Purity, Algebraic como tipos string
- GenerateID para construir IDs canonicos {name}_{lang}_{domain}

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 02:04:11 +01:00