Files
afs/apps/studio/src/models/state.h
2025-12-30 11:56:31 -05:00

261 lines
6.7 KiB
C++

#pragma once
#include <string>
#include <vector>
#include <deque>
#include <filesystem>
#include <array>
#include <map>
#include <imgui.h>
namespace afs {
namespace viz {
enum class Workspace { Dashboard, Analysis, Optimization, Systems, Custom, Training, Context, Models };
enum class ThemeProfile { Cobalt, Amber, Emerald, Cyberpunk, Monochrome, Solarized, Nord, Dracula, Default = Cobalt };
enum class PlotKind {
None,
QualityTrends,
GeneratorEfficiency,
CoverageDensity,
TrainingLoss,
LossVsSamples,
DomainCoverage,
EmbeddingQuality,
AgentThroughput,
MissionQueue,
QualityDirection,
GeneratorMix,
EmbeddingDensity,
AgentUtilization,
MissionProgress,
EvalMetrics,
Rejections,
KnowledgeGraph,
LatentSpace,
Effectiveness,
Thresholds,
MountsStatus,
DatasetInventory,
};
enum class GraphViewMode { Single, Compare, Overview };
enum class GraphCategory {
Training,
Quality,
System,
Coverage,
Embedding,
Optimization,
All
};
struct MetricCard {
std::string label;
std::string value;
std::string sub_text;
ImVec4 color;
bool positive_trend = true;
};
struct AgentState {
std::string name;
std::string role;
std::string status;
bool enabled = true;
bool data_backed = false;
int queue_depth = 0;
int tasks_completed = 0;
float success_rate = 0.0f;
float avg_latency_ms = 0.0f;
float cpu_pct = 0.0f;
float mem_pct = 0.0f;
float activity_phase = 0.0f;
};
struct MissionState {
std::string name;
std::string owner;
std::string status;
bool data_backed = false;
int priority = 2;
float progress = 0.0f;
};
struct LogEntry {
std::string agent;
std::string message;
std::string kind;
};
struct FileEntry {
std::string name;
std::filesystem::path path;
bool is_directory;
uintmax_t size;
bool has_context = false;
};
struct ContextItem {
std::string name;
std::filesystem::path path;
std::string type;
bool enabled = true;
};
struct AppState {
// App-level flags
bool should_refresh = false;
bool show_demo_window = false;
bool auto_refresh = false;
bool simulate_activity = true;
bool verbose_logs = false;
bool compact_charts = false;
bool show_status_strip = true;
bool show_controls = true;
bool show_inspector = true;
bool show_dataset_panel = true;
bool show_systems_panel = true;
bool show_chat_panel = false;
bool show_quality_trends = false; // Default off, let layout init handle it
bool show_generator_efficiency = false;
bool show_coverage_density = false;
bool enable_viewports = true;
bool enable_docking = true;
bool reset_layout_on_workspace_change = false;
bool allow_workspace_scroll = false;
bool enable_plot_interaction = true;
bool plot_interaction_requires_modifier = true;
bool auto_chart_columns = true;
bool show_agent_details = true;
bool show_knowledge_graph = false;
// Visual/Grid Config
float refresh_interval_sec = 8.0f;
float chart_height = 170.0f;
float plot_height = 170.0f;
float agent_activity_scale = 1.0f;
float embedding_sample_rate = 0.6f;
float quality_threshold = 0.7f;
float mission_priority_bias = 1.0f;
int mission_concurrency = 4;
int chart_columns = 3;
int spawn_agent_count = 1;
int spawn_mission_count = 1;
int new_mission_priority = 3;
int log_agent_index = 0;
int selected_agent_index = -1;
int selected_run_index = -1;
std::string selected_run_id;
std::vector<std::string> compared_run_ids;
int selected_generator_index = -1;
std::string selected_generator_name;
int selected_dataset_index = -1;
PlotKind focus_plot = PlotKind::None;
std::map<std::string, bool> domain_visibility;
Workspace current_workspace = Workspace::Dashboard;
ThemeProfile current_theme = ThemeProfile::Cobalt;
bool force_reset_layout = false;
bool lock_layout = false;
double last_refresh_time = 0.0;
// Advanced Interaction
std::vector<PlotKind> active_floaters;
int layout_preset = 0; // 0: Default, 1: Analyst, 2: System
PlotKind inspector_context = PlotKind::None;
// Graph View System
GraphViewMode graph_view_mode = GraphViewMode::Single;
PlotKind active_graph = PlotKind::None;
std::vector<PlotKind> graph_history;
std::vector<PlotKind> graph_bookmarks;
int graph_history_index = -1;
bool show_graph_browser = true;
bool show_companion_panels = true;
GraphCategory browser_filter = GraphCategory::All;
std::string graph_search_query;
// Per-graph filter settings
struct GraphFilterSettings {
std::vector<std::string> active_domains;
std::string active_run_id;
float time_range_start = 0.0f;
float time_range_end = 1.0f;
};
std::map<PlotKind, GraphFilterSettings> graph_filters;
// Comparison State
int compare_run_a = -1;
int compare_run_b = -1;
bool show_comparison_view = false;
// Chart Styling
float line_weight = 2.4f;
// Data Collections
std::vector<AgentState> agents;
std::vector<MissionState> missions;
std::deque<LogEntry> logs;
std::vector<float> sparkline_data;
// Input Buffers
std::array<char, 64> new_agent_name{};
std::array<char, 64> new_agent_role{};
std::array<char, 96> new_mission_name{};
std::array<char, 64> new_mission_owner{};
std::array<char, 128> log_filter{};
std::array<char, 96> run_filter{};
std::array<char, 96> generator_filter{};
std::array<char, 96> dataset_filter{};
std::array<char, 256> chat_input{};
std::array<char, 1024> system_prompt{};
std::array<char, 1024> user_prompt{};
// Trainer Config
float trainer_lr = 0.0005f;
int trainer_epochs = 10;
int trainer_batch_size = 32;
float generator_temp = 0.7f;
float rejection_threshold = 0.65f;
// Context Browser
std::filesystem::path current_browser_path;
std::vector<FileEntry> browser_entries;
std::vector<ContextItem> selected_context;
std::string context_filter;
std::filesystem::path selected_file_path;
bool show_hidden_files = false;
// Editor State
std::vector<uint8_t> binary_data;
bool is_binary_view = false;
// UI State Components
bool show_advanced_tables = true;
bool show_sparklines = true;
bool use_pulse_animations = true;
bool show_plot_legends = true;
bool show_plot_markers = true;
bool data_scientist_mode = false;
bool show_all_charts = false;
float pulse_timer = 0.0f;
int custom_grid_rows = 2;
int custom_grid_columns = 2;
PlotKind focus_chart = PlotKind::None; // Preferred over expanded_plot for dash integration
PlotKind expanded_plot = PlotKind::None;
bool is_rendering_expanded_plot = false;
std::vector<PlotKind> custom_grid_slots;
// Context Graph
std::vector<std::string> knowledge_concepts;
std::vector<float> knowledge_nodes_x;
std::vector<float> knowledge_nodes_y;
struct Edge { int from, to; };
std::vector<Edge> knowledge_edges;
};
} // namespace viz
} // namespace afs