59af21f71c
- app.md - appicon.ico Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
85 lines
3.7 KiB
Markdown
85 lines
3.7 KiB
Markdown
---
|
|
name: odr_console
|
|
lang: cpp
|
|
domain: tools
|
|
version: 0.1.0
|
|
description: "Lanzador GUI de funciones del registry para recolectar datos online. Panel de busqueda FTS5, jobs queue async (workers concurrentes), pipeline builder DAG, browser DuckDB, assertions/proposals. Aplica bucle reactivo de 5 pasos sobre operations.db propia."
|
|
tags: [imgui, data-collection, scraping, duckdb, jobs, cdp]
|
|
uses_functions: []
|
|
uses_types: []
|
|
uses_modules: [data_table_cpp]
|
|
framework: "imgui"
|
|
entry_point: "main.cpp"
|
|
dir_path: "projects/online_data_recopilation/apps/odr_console"
|
|
repo_url: ""
|
|
icon:
|
|
phosphor: "terminal-window"
|
|
accent: "#52525b"
|
|
---
|
|
|
|
## Notas
|
|
|
|
App C++ ImGui que orquesta:
|
|
|
|
1. **Launcher panel** — busqueda FTS5 sobre `registry.db`. Lanza cualquier funcion/pipeline con form auto-generado desde `params_schema`.
|
|
2. **Pipeline builder** — DAG visual con `imgui_node_editor`. Compone collectors validando composabilidad (`returns` ↔ `uses_types`). Persiste en `operations.relations` con status `designed`.
|
|
3. **Jobs queue** — Pool de N workers (default 4). Cada job = subprocess Python collector. Live progress por panel (`PROGRESS:` en stderr). Reusa `jobs_pool_cpp_core` (extraido de osint_graph en issue 0065).
|
|
4. **Datasets browser** — Panel DuckDB embebido. Query editor + tabla preview + ImPlot para charts. Lee parquet de `vaults/odr_data/`.
|
|
5. **Entities + assertions** — Vista de `operations.entities` por dataset. Editor SQL para assertions. Boton "Eval --react" lanza paso 4 del bucle.
|
|
6. **Proposals inbox** — Lista pending de `registry.proposals` originadas por assertions fallidas.
|
|
|
|
### Estructura
|
|
|
|
```
|
|
odr_console/
|
|
main.cpp # fn::run_app + render() + paneles
|
|
views_launcher.cpp # Panel 1
|
|
views_pipelines.cpp # Panel 2
|
|
views_jobs.cpp # Panel 3
|
|
views_datasets.cpp # Panel 4
|
|
views_assertions.cpp # Panel 5
|
|
views_proposals.cpp # Panel 6
|
|
data_registry.cpp # Lee registry.db (FTS5, funcs, types)
|
|
data_operations.cpp # CRUD operations.db (relations/executions/entities/assertions)
|
|
data_duck.cpp # DuckDB connector + ingest
|
|
collectors/ # Mismo schema que enrichers de graph_explorer
|
|
api_hn_top/ # MVP: HackerNews top stories via API
|
|
manifest.yaml
|
|
run.py
|
|
migrations/ # operations.db migrations (esquema 5-pasos)
|
|
CMakeLists.txt
|
|
```
|
|
|
|
### Local files (regla cpp_apps §7)
|
|
|
|
- `local_files/odr_console.ini` — settings persistidas
|
|
- `local_files/imgui.ini` — layout
|
|
- `local_files/odr.duckdb` — DuckDB embebido (datos crudos pequeños)
|
|
- `local_files/cache/<sha[0:2]>/<sha>.{html,json,parquet}` — cache addressable
|
|
- `operations.db` queda en el dir del exe (consultable por `fn ops`)
|
|
|
|
### Decisiones tomadas
|
|
|
|
| Tema | Decision |
|
|
|---|---|
|
|
| Workers default | 4 (mas que graph_explorer porque crawls esperan red) |
|
|
| operations.db | Una unica por la app |
|
|
| DuckDB | Embebido (linkar libduckdb), no subprocess |
|
|
| Collectors lang inicial | Python (espejo graph_explorer enrichers) |
|
|
| Browser | CDP via `cdp-cli` Go (issue 0038) cuando aplica |
|
|
|
|
### Decisiones pendientes
|
|
|
|
- Refactor jobs system: en paralelo a MVP. Ver issue 0065.
|
|
- Schema operations.db: requiere migracion 001 con relations/executions/entities/types_snapshot/assertions/assertion_results (ver `fn_operations/migrations/`).
|
|
|
|
|
|
## 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.
|