--- name: process_explorer lang: cpp domain: tools version: 0.1.0 description: "Process explorer cross-PC: CPU/RAM/disk/net/GPU + procesos en tiempo real" tags: [monitor, dashboard, cross-pc, imgui] icon: phosphor: cpu accent: "#0d9488" uses_functions: - line_plot_cpp_viz - kpi_card_cpp_viz - data_table_cpp_viz - viz_render_cpp_viz - compute_stage_cpp_core - compute_pipeline_cpp_core - compute_column_stats_cpp_core - auto_detect_type_cpp_core - tql_emit_cpp_core - tql_apply_cpp_core - lua_engine_cpp_core - join_tables_cpp_core uses_types: [] framework: "imgui" entry_point: "main.cpp" dir_path: "apps/process_explorer" repo_url: "https://gitea.organic-machine.com/dataforge/process_explorer" e2e_checks: - id: build cmd: "cmake --build cpp/build --target process_explorer -j" timeout_s: 300 - id: self_test cmd: "./cpp/build/apps/process_explorer/process_explorer --self-test" timeout_s: 30 severity: warning --- # process_explorer Process explorer cross-PC: CPU/RAM/disk/net/GPU + procesos en tiempo real. ## Arquitectura - **Explorer (esta app)**: ImGui C++. UI con 5 panels (Overview, Processes, Network, Devices, Services). - **Agente HTTP por PC** (issue 0111): daemon Go ligero instalable en cada PC (Win+Linux) que expone: - `GET /api/processes` — lista de procesos con CPU%/RAM/PID/usuario. - `GET /api/stats` — snapshot global CPU/RAM/Disk/Net/GPU. - `GET /api/devices` — discos, GPUs, USB, sensores. - `GET /api/services` — systemctl (Linux) / sc query (Win). - Auth: `Authorization: Bearer ` con token por PC. - **Local Linux**: lectura directa de `/proc/*` cuando el host es local (sin red). - **Remote**: SIEMPRE via HTTP agent + token. ## Panels 1. **Overview** (Ctrl+1) — KPIs globales con `kpi_card`: CPU%, RAM, Disk I/O, Net I/O, GPU. Sparklines historicos via `line_plot`. 2. **Processes** (Ctrl+2) — Tabla TQL (`data_table::render`) con todos los procesos. Filtros, sort, group-by. 3. **Network** (Ctrl+3) — Tabla de sockets/conexiones con PID, local, remote, estado. 4. **Devices** (Ctrl+4) — Enumeracion de discos, GPUs, USB, sensores. 5. **Services** (Ctrl+5) — systemctl (Linux) + `sc query` (Win). Diferente de `services_monitor` (que monitoriza apps DECLARADAS del registry); aqui se ven TODOS. ## Persistencia (local_files/) - `hosts.db` — inventario PCs (url, token, os, last_seen). - `operations.db` — entities=hosts, executions=samples (bucle reactivo). - `process_samples.db` — time-series CPU/RAM/IO para graficar ventanas >1h. ## Build ```bash cd cpp && cmake --build build --target process_explorer -j ``` ## Run ```bash ./cpp/build/apps/process_explorer/process_explorer ``` ## Notas de implementacion - HTTP cliente: hoy stub local en `http_client.cpp`. Migrar a `fn_http::request` cuando cierre el issue 0110. - Agente Go: issue 0111 (separado). - Self-test: `--self-test` valida que `hosts.db` + `samples.db` se crean en `local_files/` y que el GL loader carga. ## 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.