yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
agent_state.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_AGENT_AGENT_STATE_H_
2#define YAZE_APP_EDITOR_AGENT_AGENT_STATE_H_
3
4#include <filesystem>
5#include <functional>
6#include <map>
7#include <optional>
8#include <string>
9#include <vector>
10
11#include "absl/status/status.h"
12#include "absl/status/statusor.h"
13#include "absl/time/time.h"
16#include "core/asar_wrapper.h"
17#include "core/project.h"
18#include "imgui/imgui.h"
19
20namespace yaze {
21
22class Rom;
23
24namespace editor {
25
26// ============================================================================
27// Collaboration State
28// ============================================================================
29
34 kLocal = 0, // Filesystem-based collaboration
35 kNetwork = 1 // WebSocket-based collaboration
36};
37
42 bool active = false;
44 std::string session_id;
45 std::string session_name;
46 std::string server_url = "ws://localhost:8765";
47 bool server_connected = false;
48 std::vector<std::string> participants;
49 absl::Time last_synced = absl::InfinitePast();
50};
51
52// ============================================================================
53// Multimodal State
54// ============================================================================
55
59enum class CaptureMode {
60 kFullWindow = 0,
61 kActiveEditor = 1,
64};
65
70 void* texture_id = nullptr; // ImTextureID
71 int width = 0;
72 int height = 0;
73 bool loaded = false;
74 float preview_scale = 1.0f;
75 bool show_preview = true;
76};
77
82 bool active = false;
83 bool dragging = false;
84 ImVec2 start_pos;
85 ImVec2 end_pos;
88};
89
102
103// ============================================================================
104// Automation State
105// ============================================================================
106
111 std::string test_id;
112 std::string name;
113 std::string status;
114 std::string message;
115 absl::Time updated_at = absl::InfinitePast();
116};
117
122 std::vector<AutomationTelemetry> recent_tests;
123 bool harness_connected = false;
124 absl::Time last_poll = absl::InfinitePast();
127 float pulse_animation = 0.0f;
128 float scanline_offset = 0.0f;
130 absl::Time last_connection_attempt = absl::InfinitePast();
131 std::string grpc_server_address = "localhost:50052";
132 bool auto_run_plan = false;
133 bool auto_sync_rom = true;
135};
136
137// ============================================================================
138// Agent Configuration
139// ============================================================================
140
145 std::string name;
146 std::string model;
147 std::string provider;
148 std::string host;
149 std::vector<std::string> tags;
150 bool pinned = false;
151 absl::Time last_used = absl::InfinitePast();
152};
153
158 bool resources = true;
159 bool dungeon = true;
160 bool overworld = true;
161 bool dialogue = true;
162 bool messages = true;
163 bool gui = true;
164 bool music = true;
165 bool sprite = true;
166 bool emulator = true;
167 bool memory_inspector = true;
168};
172enum class ChainMode {
173 kDisabled = 0,
174 kRoundRobin = 1,
175 kConsensus = 2,
176};
177
182 std::vector<cli::ModelInfo> available_models;
183 std::vector<std::string> model_names;
184 std::vector<std::string> local_model_names;
185 absl::Time last_refresh = absl::InfinitePast();
186 bool loading = false;
188 std::string last_provider;
189 std::string last_openai_base;
190 std::string last_ollama_host;
191 char search_buffer[128] = {};
192 char new_preset_name[128] = {};
194};
195
201 std::string ai_model;
202 std::string ollama_host = "http://localhost:11434";
203 std::string gemini_api_key;
204 std::string anthropic_api_key;
205 std::string openai_api_key;
206 std::string openai_base_url = "https://api.openai.com";
207 std::string host_id;
208 bool verbose = false;
209 bool show_reasoning = true;
212 float temperature = 0.25f;
213 float top_p = 0.95f;
215 bool stream_responses = false;
216 std::vector<std::string> favorite_models;
217 std::vector<std::string> model_chain;
219 std::vector<ModelPreset> model_presets;
221
222 // Input buffers for UI
223 char provider_buffer[32] = "mock";
224 char model_buffer[128] = {};
225 char ollama_host_buffer[256] = "http://localhost:11434";
226 char gemini_key_buffer[256] = {};
227 char anthropic_key_buffer[256] = {};
228 char openai_key_buffer[256] = {};
229 char openai_base_url_buffer[256] = "https://api.openai.com";
230};
231
232// ============================================================================
233// ROM Sync State
234// ============================================================================
235
240 std::string current_rom_hash;
241 absl::Time last_sync_time = absl::InfinitePast();
242 bool auto_sync_enabled = false;
244 std::vector<std::string> pending_syncs;
245};
246
247// ============================================================================
248// Z3ED Command State
249// ============================================================================
250
255 std::string last_command;
256 std::string command_output;
257 bool command_running = false;
258 char command_input_buffer[512] = {};
259};
260
261// ============================================================================
262// Knowledge Base State
263// ============================================================================
264
269 bool initialized = false;
272 absl::Time last_refresh = absl::InfinitePast();
273
274 // Cached stats for display
279};
280
281// ============================================================================
282// Tool Execution State
283// ============================================================================
284
289 std::string tool_name;
290 std::string arguments;
291 std::string result_preview;
292 double duration_ms = 0.0;
293 bool success = true;
294 absl::Time executed_at = absl::InfinitePast();
295};
296
301 std::vector<ToolExecutionEntry> recent_executions;
302 bool show_timeline = false;
303 int max_entries = 50;
304};
305
306// ============================================================================
307// Persona Profile
308// ============================================================================
309
314 std::string notes;
315 std::vector<std::string> goals;
316 absl::Time applied_at = absl::InfinitePast();
317 bool active = false;
318};
319
320// ============================================================================
321// Chat State
322// ============================================================================
323
327struct ChatState {
328 char input_buffer[1024] = {};
329 bool active = false;
331 float thinking_animation = 0.0f;
332 std::string pending_message;
334 bool history_loaded = false;
335 bool history_dirty = false;
336 bool history_supported = true;
338 std::filesystem::path history_path;
340 absl::Time last_persist_time = absl::InfinitePast();
341
342 // Session management
343 std::string active_session_id;
344 absl::Time last_shared_history_poll = absl::InfinitePast();
346
347 // UI state
348 int active_tab = 0; // 0=Chat, 1=Config, 2=Commands, etc.
349 bool scroll_to_bottom = false;
350};
351
352// ============================================================================
353// Proposal State
354// ============================================================================
355
370
371// ============================================================================
372// Unified Agent Context (for UI components)
373// ============================================================================
374
383 public:
384 AgentUIContext() = default;
385
386 // State accessors (mutable for UI updates)
388 const ChatState& chat_state() const { return chat_state_; }
389
394
397
400
402 const AgentConfigState& agent_config() const { return agent_config_; }
403
405 const ModelCache& model_cache() const { return model_cache_; }
406
408 const RomSyncState& rom_sync_state() const { return rom_sync_state_; }
409
412 return z3ed_command_state_;
413 }
414
417
420
423
428
429 // ROM context
430 void SetRom(Rom* rom) { rom_ = rom; }
431 Rom* GetRom() const { return rom_; }
432 bool HasRom() const { return rom_ != nullptr; }
433
434 // Project context
435 void SetProject(project::YazeProject* project) { project_ = project; }
437 bool HasProject() const { return project_ != nullptr; }
438
439 // Asar wrapper context
440 void SetAsarWrapper(core::AsarWrapper* asar_wrapper) {
441 asar_wrapper_ = asar_wrapper;
442 }
444 bool HasAsarWrapper() const { return asar_wrapper_ != nullptr; }
445
446 // Backend-agnostic symbol table (works for Asar and z3dk). Preferred over
447 // reaching through GetAsarWrapper()->GetSymbolTable() in new code.
449 const std::map<std::string, core::AsarSymbol>* table) {
451 }
452 const std::map<std::string, core::AsarSymbol>* GetAssemblySymbolTable()
453 const {
455 }
456
457 // Change notification for observers
458 using ChangeCallback = std::function<void()>;
460 change_listeners_.push_back(std::move(callback));
461 }
463 for (auto& callback : change_listeners_) {
464 callback();
465 }
466 }
467
468 private:
481
482 Rom* rom_ = nullptr;
483 project::YazeProject* project_ = nullptr; // Project context
484 core::AsarWrapper* asar_wrapper_ = nullptr; // AsarWrapper context
485 const std::map<std::string, core::AsarSymbol>* assembly_symbol_table_ =
486 nullptr; // Backend-agnostic symbol source (Asar or z3dk)
487 std::vector<ChangeCallback> change_listeners_;
488};
489
490// ============================================================================
491// Callback Structures (for component communication)
492// ============================================================================
493
499 std::string session_id;
500 std::string session_name;
501 std::vector<std::string> participants;
502 };
503
504 std::function<absl::StatusOr<SessionContext>(const std::string&)>
506 std::function<absl::StatusOr<SessionContext>(const std::string&)>
508 std::function<absl::Status()> leave_session;
509 std::function<absl::StatusOr<SessionContext>()> refresh_session;
510};
511
516 std::function<absl::Status(std::filesystem::path*)> capture_snapshot;
517 std::function<absl::Status(const std::filesystem::path&, const std::string&)>
519};
520
525 std::function<void()> open_harness_dashboard;
526 std::function<void()> replay_last_plan;
527 std::function<void(const std::string&)> focus_proposal;
528 std::function<void()> show_active_tests;
529 std::function<void()> poll_status;
530};
531
536 std::function<absl::Status(const std::string&)> run_agent_task;
537 std::function<absl::StatusOr<std::string>(const std::string&)>
539 std::function<absl::StatusOr<std::string>(const std::string&)> diff_proposal;
540 std::function<absl::Status(const std::string&)> accept_proposal;
541 std::function<absl::Status(const std::string&)> reject_proposal;
542 std::function<absl::StatusOr<std::vector<std::string>>()> list_proposals;
543};
544
549 std::function<absl::StatusOr<std::string>()> generate_rom_diff;
550 std::function<absl::Status(const std::string&, const std::string&)>
552 std::function<std::string()> get_rom_hash;
553};
554
559 std::function<void(const std::string&)> focus_proposal;
560 std::function<absl::Status(const std::string&)> accept_proposal;
561 std::function<absl::Status(const std::string&)> reject_proposal;
562 std::function<void()> refresh_proposals;
563};
564
569 std::function<void(const std::string&)> send_message;
570 std::function<void()> clear_history;
571 std::function<void()> persist_history;
572 std::function<void(const std::string&)> switch_session;
573};
574
575} // namespace editor
576} // namespace yaze
577
578#endif // YAZE_APP_EDITOR_AGENT_AGENT_STATE_H_
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Definition rom.h:28
Modern C++ wrapper for Asar 65816 assembler integration.
Unified context for agent UI components.
const ProposalState & proposal_state() const
core::AsarWrapper * GetAsarWrapper() const
MultimodalState & multimodal_state()
Z3EDCommandState & z3ed_command_state()
project::YazeProject * GetProject() const
AutomationState & automation_state()
const MultimodalState & multimodal_state() const
AutomationState automation_state_
const Z3EDCommandState & z3ed_command_state() const
const std::map< std::string, core::AsarSymbol > * assembly_symbol_table_
void SetProject(project::YazeProject *project)
std::function< void()> ChangeCallback
const AutomationState & automation_state() const
const KnowledgeState & knowledge_state() const
ToolExecutionState & tool_execution_state()
KnowledgeState & knowledge_state()
AgentConfigState & agent_config()
const CollaborationState & collaboration_state() const
RomSyncState & rom_sync_state()
CollaborationState & collaboration_state()
void AddChangeListener(ChangeCallback callback)
const PersonaProfile & persona_profile() const
ToolExecutionState tool_execution_state_
const ToolExecutionState & tool_execution_state() const
const RomSyncState & rom_sync_state() const
void SetAsarWrapper(core::AsarWrapper *asar_wrapper)
CollaborationState collaboration_state_
Z3EDCommandState z3ed_command_state_
core::AsarWrapper * asar_wrapper_
const AgentConfigState & agent_config() const
const ModelCache & model_cache() const
PersonaProfile & persona_profile()
PersonaProfile persona_profile_
KnowledgeState knowledge_state_
void SetAssemblySymbolTable(const std::map< std::string, core::AsarSymbol > *table)
MultimodalState multimodal_state_
project::YazeProject * project_
std::vector< ChangeCallback > change_listeners_
AgentConfigState agent_config_
const std::map< std::string, core::AsarSymbol > * GetAssemblySymbolTable() const
const ChatState & chat_state() const
ProposalState & proposal_state()
constexpr char kProviderMock[]
Definition provider_ids.h:7
ChainMode
Model chain mode for multi-model responses.
CollaborationMode
Collaboration mode for multi-user sessions.
Definition agent_state.h:33
CaptureMode
Screenshot capture mode.
Definition agent_state.h:59
Agent configuration state.
std::vector< std::string > model_chain
std::vector< ModelPreset > model_presets
std::vector< std::string > favorite_models
Callbacks for automation operations.
std::function< void()> show_active_tests
std::function< void(const std::string &) focus_proposal)
std::function< void()> open_harness_dashboard
std::function< void()> replay_last_plan
std::function< void()> poll_status
State for automation/test harness integration.
std::vector< AutomationTelemetry > recent_tests
Telemetry from automation/test harness.
Callbacks for chat operations.
std::function< void(const std::string &) switch_session)
std::function< void(const std::string &) send_message)
std::function< void()> persist_history
std::function< void()> clear_history
State for chat UI and history.
std::string active_session_id
absl::Time last_shared_history_poll
std::filesystem::path history_path
std::string pending_message
Callbacks for collaboration operations.
std::function< absl::StatusOr< SessionContext >(const std::string &) join_session)
std::function< absl::Status()> leave_session
std::function< absl::StatusOr< SessionContext >(const std::string &) host_session)
std::function< absl::StatusOr< SessionContext >()> refresh_session
State for collaborative editing sessions.
Definition agent_state.h:41
std::vector< std::string > participants
Definition agent_state.h:48
State for learned knowledge management (CLI integration)
Cached model list + UI helpers.
std::vector< cli::ModelInfo > available_models
std::vector< std::string > local_model_names
std::vector< std::string > model_names
Model preset for quick switching.
std::vector< std::string > tags
Callbacks for multimodal/vision operations.
std::function< absl::Status(std::filesystem::path *) capture_snapshot)
std::function< absl::Status(const std::filesystem::path &, const std::string &) send_to_gemini)
State for multimodal/vision features.
Definition agent_state.h:93
ScreenshotPreviewState preview
Definition agent_state.h:99
std::optional< std::filesystem::path > last_capture_path
Definition agent_state.h:94
RegionSelectionState region_selection
User persona profile for personalized AI behavior.
std::vector< std::string > goals
Callbacks for proposal operations.
std::function< absl::Status(const std::string &) reject_proposal)
std::function< absl::Status(const std::string &) accept_proposal)
std::function< void(const std::string &) focus_proposal)
std::function< void()> refresh_proposals
State for proposal management.
std::string pending_focus_proposal_id
Region selection state for screenshot cropping.
Definition agent_state.h:81
Callbacks for ROM sync operations.
std::function< std::string()> get_rom_hash
std::function< absl::Status(const std::string &, const std::string &) apply_rom_diff)
std::function< absl::StatusOr< std::string >()> generate_rom_diff
State for ROM synchronization.
std::vector< std::string > pending_syncs
Preview state for captured screenshots.
Definition agent_state.h:69
Tool enablement configuration.
Single tool execution entry for timeline display.
State for tool execution timeline display.
std::vector< ToolExecutionEntry > recent_executions
Callbacks for Z3ED command operations.
std::function< absl::StatusOr< std::vector< std::string > >()> list_proposals
std::function< absl::Status(const std::string &) reject_proposal)
std::function< absl::Status(const std::string &) run_agent_task)
std::function< absl::Status(const std::string &) accept_proposal)
std::function< absl::StatusOr< std::string >(const std::string &) diff_proposal)
std::function< absl::StatusOr< std::string >(const std::string &) plan_agent_task)
State for Z3ED command palette.
Modern project structure with comprehensive settings consolidation.
Definition project.h:164