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 <optional>
7#include <string>
8#include <vector>
9
10#include "absl/status/status.h"
11#include "absl/status/statusor.h"
12#include "absl/time/time.h"
14#include "imgui/imgui.h"
15#include "core/project.h"
16#include "core/asar_wrapper.h"
17
18namespace yaze {
19
20class Rom;
21
22namespace editor {
23
24// ============================================================================
25// Collaboration State
26// ============================================================================
27
32 kLocal = 0, // Filesystem-based collaboration
33 kNetwork = 1 // WebSocket-based collaboration
34};
35
40 bool active = false;
42 std::string session_id;
43 std::string session_name;
44 std::string server_url = "ws://localhost:8765";
45 bool server_connected = false;
46 std::vector<std::string> participants;
47 absl::Time last_synced = absl::InfinitePast();
48};
49
50// ============================================================================
51// Multimodal State
52// ============================================================================
53
57enum class CaptureMode {
58 kFullWindow = 0,
59 kActiveEditor = 1,
62};
63
68 void* texture_id = nullptr; // ImTextureID
69 int width = 0;
70 int height = 0;
71 bool loaded = false;
72 float preview_scale = 1.0f;
73 bool show_preview = true;
74};
75
80 bool active = false;
81 bool dragging = false;
82 ImVec2 start_pos;
83 ImVec2 end_pos;
86};
87
100
101// ============================================================================
102// Automation State
103// ============================================================================
104
109 std::string test_id;
110 std::string name;
111 std::string status;
112 std::string message;
113 absl::Time updated_at = absl::InfinitePast();
114};
115
120 std::vector<AutomationTelemetry> recent_tests;
121 bool harness_connected = false;
122 absl::Time last_poll = absl::InfinitePast();
125 float pulse_animation = 0.0f;
126 float scanline_offset = 0.0f;
128 absl::Time last_connection_attempt = absl::InfinitePast();
129 std::string grpc_server_address = "localhost:50052";
130 bool auto_run_plan = false;
131 bool auto_sync_rom = true;
133};
134
135// ============================================================================
136// Agent Configuration
137// ============================================================================
138
143 std::string name;
144 std::string model;
145 std::string provider;
146 std::string host;
147 std::vector<std::string> tags;
148 bool pinned = false;
149 absl::Time last_used = absl::InfinitePast();
150};
151
156 bool resources = true;
157 bool dungeon = true;
158 bool overworld = true;
159 bool dialogue = true;
160 bool messages = true;
161 bool gui = true;
162 bool music = true;
163 bool sprite = true;
164 bool emulator = true;
165 bool memory_inspector = true;
166 };
170enum class ChainMode {
171 kDisabled = 0,
172 kRoundRobin = 1,
173 kConsensus = 2,
174};
175
180 std::vector<cli::ModelInfo> available_models;
181 std::vector<std::string> model_names;
182 std::vector<std::string> local_model_names;
183 absl::Time last_refresh = absl::InfinitePast();
184 bool loading = false;
186 std::string last_provider;
187 std::string last_openai_base;
188 std::string last_ollama_host;
189 char search_buffer[128] = {};
190 char new_preset_name[128] = {};
192};
193
198 std::string ai_provider = "mock"; // mock, ollama, gemini, anthropic, openai
199 std::string ai_model;
200 std::string ollama_host = "http://localhost:11434";
201 std::string gemini_api_key;
202 std::string anthropic_api_key;
203 std::string openai_api_key;
204 std::string openai_base_url = "https://api.openai.com";
205 std::string host_id;
206 bool verbose = false;
207 bool show_reasoning = true;
210 float temperature = 0.25f;
211 float top_p = 0.95f;
213 bool stream_responses = false;
214 std::vector<std::string> favorite_models;
215 std::vector<std::string> model_chain;
217 std::vector<ModelPreset> model_presets;
219
220 // Input buffers for UI
221 char provider_buffer[32] = "mock";
222 char model_buffer[128] = {};
223 char ollama_host_buffer[256] = "http://localhost:11434";
224 char gemini_key_buffer[256] = {};
225 char anthropic_key_buffer[256] = {};
226 char openai_key_buffer[256] = {};
227 char openai_base_url_buffer[256] = "https://api.openai.com";
228};
229
230// ============================================================================
231// ROM Sync State
232// ============================================================================
233
238 std::string current_rom_hash;
239 absl::Time last_sync_time = absl::InfinitePast();
240 bool auto_sync_enabled = false;
242 std::vector<std::string> pending_syncs;
243};
244
245// ============================================================================
246// Z3ED Command State
247// ============================================================================
248
253 std::string last_command;
254 std::string command_output;
255 bool command_running = false;
256 char command_input_buffer[512] = {};
257};
258
259// ============================================================================
260// Knowledge Base State
261// ============================================================================
262
267 bool initialized = false;
270 absl::Time last_refresh = absl::InfinitePast();
271
272 // Cached stats for display
277};
278
279// ============================================================================
280// Tool Execution State
281// ============================================================================
282
287 std::string tool_name;
288 std::string arguments;
289 std::string result_preview;
290 double duration_ms = 0.0;
291 bool success = true;
292 absl::Time executed_at = absl::InfinitePast();
293};
294
299 std::vector<ToolExecutionEntry> recent_executions;
300 bool show_timeline = false;
301 int max_entries = 50;
302};
303
304// ============================================================================
305// Persona Profile
306// ============================================================================
307
312 std::string notes;
313 std::vector<std::string> goals;
314 absl::Time applied_at = absl::InfinitePast();
315 bool active = false;
316};
317
318// ============================================================================
319// Chat State
320// ============================================================================
321
325struct ChatState {
326 char input_buffer[1024] = {};
327 bool active = false;
329 float thinking_animation = 0.0f;
330 std::string pending_message;
332 bool history_loaded = false;
333 bool history_dirty = false;
334 bool history_supported = true;
336 std::filesystem::path history_path;
338 absl::Time last_persist_time = absl::InfinitePast();
339
340 // Session management
341 std::string active_session_id;
342 absl::Time last_shared_history_poll = absl::InfinitePast();
344
345 // UI state
346 int active_tab = 0; // 0=Chat, 1=Config, 2=Commands, etc.
347 bool scroll_to_bottom = false;
348};
349
350// ============================================================================
351// Proposal State
352// ============================================================================
353
368
369// ============================================================================
370// Unified Agent Context (for UI components)
371// ============================================================================
372
381 public:
382 AgentUIContext() = default;
383
384 // State accessors (mutable for UI updates)
386 const ChatState& chat_state() const { return chat_state_; }
387
392
395
398
400 const AgentConfigState& agent_config() const { return agent_config_; }
401
403 const ModelCache& model_cache() const { return model_cache_; }
404
406 const RomSyncState& rom_sync_state() const { return rom_sync_state_; }
407
410 return z3ed_command_state_;
411 }
412
415
418
421
426
427 // ROM context
428 void SetRom(Rom* rom) { rom_ = rom; }
429 Rom* GetRom() const { return rom_; }
430 bool HasRom() const { return rom_ != nullptr; }
431
432 // Project context
433 void SetProject(project::YazeProject* project) { project_ = project; }
435 bool HasProject() const { return project_ != nullptr; }
436
437 // Asar wrapper context
438 void SetAsarWrapper(core::AsarWrapper* asar_wrapper) { asar_wrapper_ = asar_wrapper; }
440 bool HasAsarWrapper() const { return asar_wrapper_ != nullptr; }
441
442 // Change notification for observers
443 using ChangeCallback = std::function<void()>;
445 change_listeners_.push_back(std::move(callback));
446 }
448 for (auto& callback : change_listeners_) {
449 callback();
450 }
451 }
452
453 private:
466
467 Rom* rom_ = nullptr;
468 project::YazeProject* project_ = nullptr; // Project context
469 core::AsarWrapper* asar_wrapper_ = nullptr; // AsarWrapper context
470 std::vector<ChangeCallback> change_listeners_;
471};
472
473// ============================================================================
474// Callback Structures (for component communication)
475// ============================================================================
476
482 std::string session_id;
483 std::string session_name;
484 std::vector<std::string> participants;
485 };
486
487 std::function<absl::StatusOr<SessionContext>(const std::string&)>
489 std::function<absl::StatusOr<SessionContext>(const std::string&)>
491 std::function<absl::Status()> leave_session;
492 std::function<absl::StatusOr<SessionContext>()> refresh_session;
493};
494
499 std::function<absl::Status(std::filesystem::path*)> capture_snapshot;
500 std::function<absl::Status(const std::filesystem::path&, const std::string&)>
502};
503
508 std::function<void()> open_harness_dashboard;
509 std::function<void()> replay_last_plan;
510 std::function<void(const std::string&)> focus_proposal;
511 std::function<void()> show_active_tests;
512 std::function<void()> poll_status;
513};
514
519 std::function<absl::Status(const std::string&)> run_agent_task;
520 std::function<absl::StatusOr<std::string>(const std::string&)>
522 std::function<absl::StatusOr<std::string>(const std::string&)> diff_proposal;
523 std::function<absl::Status(const std::string&)> accept_proposal;
524 std::function<absl::Status(const std::string&)> reject_proposal;
525 std::function<absl::StatusOr<std::vector<std::string>>()> list_proposals;
526};
527
532 std::function<absl::StatusOr<std::string>()> generate_rom_diff;
533 std::function<absl::Status(const std::string&, const std::string&)>
535 std::function<std::string()> get_rom_hash;
536};
537
542 std::function<void(const std::string&)> focus_proposal;
543 std::function<absl::Status(const std::string&)> accept_proposal;
544 std::function<absl::Status(const std::string&)> reject_proposal;
545 std::function<void()> refresh_proposals;
546};
547
552 std::function<void(const std::string&)> send_message;
553 std::function<void()> clear_history;
554 std::function<void()> persist_history;
555 std::function<void(const std::string&)> switch_session;
556};
557
558} // namespace editor
559} // namespace yaze
560
561#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
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_
MultimodalState multimodal_state_
project::YazeProject * project_
std::vector< ChangeCallback > change_listeners_
AgentConfigState agent_config_
const ChatState & chat_state() const
ProposalState & proposal_state()
ChainMode
Model chain mode for multi-model responses.
CollaborationMode
Collaboration mode for multi-user sessions.
Definition agent_state.h:31
CaptureMode
Screenshot capture mode.
Definition agent_state.h:57
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:39
std::vector< std::string > participants
Definition agent_state.h:46
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:91
ScreenshotPreviewState preview
Definition agent_state.h:97
std::optional< std::filesystem::path > last_capture_path
Definition agent_state.h:92
RegionSelectionState region_selection
Definition agent_state.h:98
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:79
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:67
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:120