96915d31ab
- app.md Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.1 KiB
4.1 KiB
name, lang, domain, version, description, tags, uses_functions, uses_types, framework, entry_point, dir_path, service
| name | lang | domain | version | description | tags | uses_functions | uses_types | framework | entry_point | dir_path | service | |||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sqlite_api | go | infra | 0.1.0 | API REST HTTP read-only sobre registry.db y operations.db de cada app. Permite consultas SQL (solo SELECT/PRAGMA), busqueda FTS5, exploracion de tablas y schema. Bind por defecto a localhost:8484. |
|
|
net/http | main.go | projects/fn_monitoring/apps/sqlite_api |
|
Uso
# Arrancar (default: 127.0.0.1:8484)
cd apps/sqlite_api && go run -tags fts5 .
# Bind personalizado
go run -tags fts5 . --bind 0.0.0.0:8484
Endpoints
| Metodo | Path | Descripcion |
|---|---|---|
| GET | /health |
Health check |
| GET | /api/databases |
Lista DBs disponibles (registry + ops:*) |
| GET | /api/databases/:db/tables |
Tablas y vistas de una DB |
| GET | /api/databases/:db/schema |
Schema SQL completo |
| POST | /api/databases/:db/query |
Ejecuta query SQL read-only |
| GET | /api/databases/:db/fts?q=...&table=... |
Busqueda FTS5 directa |
| GET | /api/projects |
Lista proyectos con conteos nested + orphans [v0.2] |
| GET | /api/projects/{id} |
Detalle apps/analyses/vaults; id="orphans" para huerfanas [v0.2] |
| POST | /api/reindex |
Ejecuta fn index server-side, devuelve {ok, output} [v0.2] |
| POST | /api/add/app |
Body {name, lang, domain, project, description} → scaffold + reindex [v0.2] |
| POST | /api/add/analysis |
Body {name, project, packages[], description} → invoca fn run init_jupyter_analysis [v0.2] |
| POST | /api/add/vault |
Body {name, project, path, description} → crea dir/symlink + entry en vault.yaml [v0.2] |
Seguridad
- Solo queries SELECT, PRAGMA, WITH y EXPLAIN
- SQLite abierto con
?mode=ro(read-only a nivel driver) - Timeout de 5 segundos por query
- Bind a localhost por defecto
- CORS habilitado para acceso desde frontends
Bases de datos
registry— registry.db de la raizops:{app}— operations.db de apps/{app}/ y projects/*/apps/{app}/
Auto-descubre operations.db al arrancar escaneando apps/ y projects/*/apps/.
Health check
curl http://localhost:8484/health
# {"status":"ok"}
Puerto
8484 (no colisiona con Metabase 3000, Jupyter 8888, deploy_server 9090).
Estado actual
v0.2 — projects view + mutaciones [done 2026-04-25]
El servicio pasa de read-only puro a soportar mutaciones. Split de handlers:
handlers.go: read-only sobre BDs SQLite (queries SELECT/PRAGMA). Sin cambios.handlers_projects.go(nuevo):GET /api/projectsyGET /api/projects/{id}. Subqueries conLEFT JOINporproject_idpara conteos nested. HelperscanAll()generico para devolver rows como[][]any.handlers_mutations.go(nuevo):POST /api/reindex+POST /api/add/{app,analysis,vault}. Ejecuta el CLIfnviaexec.CommandContextdesdeServer.registryRoot(timeout 60 s). El binario debe existir en{registryRoot}/fn(build local). Validacion denamecon regex implicito a-z0-9_.
Server gana campo registryRoot string. NewServer(pool, root) en lugar de NewServer(pool). El root se resuelve en main.go con findRegistryRoot() (env FN_REGISTRY_ROOT o cwd).
Lo siguiente que pega
- Permisos/auth: ahora cualquier cliente local puede escribir. Para deploy a un VPS habria que anadir token header (similar a
X-Registry-Tokendelregistry_api). Por ahora bind 127.0.0.1 mitiga. /api/add/functiony/api/add/type(kinds que hoy no se exponen via HTTP). El CLI ya lo soporta; el endpoint seria casi paralelo a/api/add/app.
Capability growth log
Una linea por bump SemVer. Bump-type segun .claude/commands/version.md:
-
major: breaking observable (CLI args, schema BBDD propia, formato wire). -
minor: feature aditiva (nuevo panel, endpoint, opcion). -
patch: bugfix sin cambio observable. -
v0.1.0 (2026-05-18) — baseline.