ddf8e76ad6
- Pie charts (Purity, Kind) ahora reciben plot_h explicito para que respeten el panel contenedor y no desborden cuando la ventana se reduce. - Nueva pestana "Explorer": split layout con lista filtrable a la izquierda (search por nombre/descripcion + combos lang/domain) y panel de detalle a la derecha con tabs Code (read-only multiline), Documentation (selectable text), Tests (con dropdown si la funcion tiene varios tests, muestra lang + file_path + codigo) y Metadata (id, version, file_path, returns, uses_functions, uses_types, params_schema, example, notes). - Reorganizacion de navegacion: TabBar movido arriba, justo debajo de la toolbar. Tabs: Dashboard | Explorer | Projects | Apps | Analysis | Types. Cada tab ocupa toda la zona de contenido. Dashboard incluye KPIs + charts + tabla de Recent Functions. - Cache del Explorer (lista de funciones) invalidado en trigger_reload. - Nuevas funciones HTTP: load_function_detail_http, load_all_functions_http, load_unit_tests_http (todas usan /api/databases/registry/query con escape defensivo de comilla simple en IDs). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
173 lines
3.9 KiB
C++
173 lines
3.9 KiB
C++
#pragma once
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
#include <cstdint>
|
|
|
|
struct RegistryStats {
|
|
int total_functions = 0;
|
|
int total_types = 0;
|
|
int total_apps = 0;
|
|
int total_analysis = 0;
|
|
int total_unit_tests = 0;
|
|
int total_proposals = 0;
|
|
int tested_functions = 0;
|
|
int pure_functions = 0;
|
|
int impure_functions = 0;
|
|
};
|
|
|
|
struct LangCount {
|
|
std::string lang;
|
|
int count = 0;
|
|
};
|
|
|
|
struct DomainCount {
|
|
std::string domain;
|
|
int count = 0;
|
|
};
|
|
|
|
struct KindCount {
|
|
std::string kind;
|
|
int count = 0;
|
|
};
|
|
|
|
struct DateCount {
|
|
std::string date; // YYYY-MM-DD
|
|
int count = 0;
|
|
};
|
|
|
|
struct FunctionRow {
|
|
std::string id;
|
|
std::string name;
|
|
std::string lang;
|
|
std::string domain;
|
|
std::string kind;
|
|
std::string purity;
|
|
std::string description;
|
|
std::string created_at;
|
|
bool tested = false;
|
|
};
|
|
|
|
struct AppRow {
|
|
std::string id;
|
|
std::string name;
|
|
std::string lang;
|
|
std::string domain;
|
|
std::string description;
|
|
std::string framework;
|
|
std::string repo_url;
|
|
std::string dir_path;
|
|
};
|
|
|
|
struct AnalysisRow {
|
|
std::string id;
|
|
std::string name;
|
|
std::string lang;
|
|
std::string domain;
|
|
std::string description;
|
|
};
|
|
|
|
struct TypeRow {
|
|
std::string id;
|
|
std::string name;
|
|
std::string lang;
|
|
std::string domain;
|
|
std::string algebraic;
|
|
std::string description;
|
|
};
|
|
|
|
struct VaultRow {
|
|
std::string id;
|
|
std::string name;
|
|
std::string path;
|
|
std::string description;
|
|
bool symlink = false;
|
|
};
|
|
|
|
struct ProjectRow {
|
|
std::string id;
|
|
std::string name;
|
|
std::string description;
|
|
int apps_count = 0;
|
|
int analyses_count = 0;
|
|
int vaults_count = 0;
|
|
};
|
|
|
|
// Test unitario asociado a una funcion (1:N — una funcion puede tener varios).
|
|
struct UnitTestRow {
|
|
std::string id;
|
|
std::string function_id;
|
|
std::string name;
|
|
std::string lang;
|
|
std::string file_path;
|
|
std::string code;
|
|
std::string created_at;
|
|
};
|
|
|
|
// Detalle completo de una funcion (codigo + documentacion).
|
|
// Cargado on-demand cuando el usuario selecciona una funcion en Explorer.
|
|
struct FunctionDetail {
|
|
std::string id;
|
|
std::string name;
|
|
std::string lang;
|
|
std::string domain;
|
|
std::string kind;
|
|
std::string purity;
|
|
std::string version;
|
|
std::string signature;
|
|
std::string description;
|
|
std::string code;
|
|
std::string documentation;
|
|
std::string notes;
|
|
std::string example;
|
|
std::string params_schema;
|
|
std::string uses_functions;
|
|
std::string uses_types;
|
|
std::string returns;
|
|
std::string error_type;
|
|
std::string file_path;
|
|
std::string created_at;
|
|
bool tested = false;
|
|
};
|
|
|
|
struct ProjectDetail {
|
|
std::string id; // "" si no hay seleccion; "orphans" para huerfanas
|
|
std::string name;
|
|
std::string description;
|
|
std::vector<AppRow> apps;
|
|
std::vector<AnalysisRow> analyses;
|
|
std::vector<VaultRow> vaults;
|
|
};
|
|
|
|
// All data loaded from registry.db in one shot
|
|
struct RegistryData {
|
|
RegistryStats stats;
|
|
std::vector<LangCount> by_lang;
|
|
std::vector<DomainCount> by_domain;
|
|
std::vector<KindCount> by_kind;
|
|
std::vector<DateCount> by_date; // last 30 days
|
|
std::vector<FunctionRow> recent_funcs; // last 20
|
|
std::vector<AppRow> apps;
|
|
std::vector<AnalysisRow> analyses;
|
|
std::vector<TypeRow> types;
|
|
std::vector<ProjectRow> projects;
|
|
int orphan_apps = 0;
|
|
int orphan_analyses = 0;
|
|
int orphan_vaults = 0;
|
|
|
|
// For chart data (populated by prepare_chart_data)
|
|
std::vector<std::string> lang_labels;
|
|
std::vector<float> lang_values;
|
|
std::vector<std::string> domain_labels;
|
|
std::vector<float> domain_values;
|
|
std::vector<std::string> kind_labels;
|
|
std::vector<float> kind_values;
|
|
std::vector<std::string> date_labels;
|
|
std::vector<float> date_values;
|
|
|
|
void prepare_chart_data();
|
|
};
|
|
|
|
// Load all data from registry.db. Returns true on success.
|
|
bool load_registry_data(const char* db_path, RegistryData& out);
|