2#include "absl/time/clock.h"
4#if defined(YAZE_BUILD_AGENT_UI)
19 ProposalDrawer* proposal_drawer,
20 RightPanelManager* right_panel_manager,
21 PanelManager* panel_manager) {
22 toast_manager_ = toast_manager;
23 right_panel_manager_ = right_panel_manager;
26 session_manager_.CreateSession(
"Agent 1");
30 EditorDependencies deps;
31 deps.panel_manager = panel_manager;
32 deps.toast_manager = toast_manager;
33 agent_editor_.SetDependencies(deps);
37 agent_editor_.Initialize();
38 agent_editor_.InitializeWithDependencies(toast_manager, proposal_drawer,
42 if (right_panel_manager_) {
43 right_panel_manager_->SetAgentChat(agent_editor_.GetAgentChat());
44 right_panel_manager_->SetProposalDrawer(proposal_drawer);
45 right_panel_manager_->SetToastManager(toast_manager);
50 InitializeKnowledge();
53 agent_editor_.SetKnowledgePanelCallback([
this, toast_manager]() {
54 AgentKnowledgePanel::Callbacks callbacks;
55 callbacks.set_preference = [
this](
const std::string&
key,
56 const std::string& value) {
57 if (knowledge_initialized_) {
58 learned_knowledge_.SetPreference(key, value);
59 learned_knowledge_.SaveAll();
60 SyncKnowledgeToContext();
63 callbacks.remove_preference = [
this](
const std::string&
key) {
64 if (knowledge_initialized_) {
65 learned_knowledge_.RemovePreference(key);
66 learned_knowledge_.SaveAll();
67 SyncKnowledgeToContext();
70 callbacks.clear_all_knowledge = [
this]() {
71 if (knowledge_initialized_) {
72 learned_knowledge_.ClearAll();
73 SyncKnowledgeToContext();
76 callbacks.export_knowledge = [
this, toast_manager]() {
77 if (knowledge_initialized_) {
78 auto json_or = learned_knowledge_.ExportToJSON();
87 callbacks.refresh_knowledge = [
this]() {
88 SyncKnowledgeToContext();
91 knowledge_panel_.Draw(GetContext(), GetKnowledgeService(), callbacks,
97 SyncStateFromEditor();
101 agent_editor_.SetRomContext(rom);
102 agent_ui_context_.SetRom(rom);
106 agent_ui_context_.SetProject(project);
109 if (AgentSession* session = session_manager_.GetActiveSession()) {
110 session->context.SetProject(project);
115 agent_ui_context_.SetAsarWrapper(asar_wrapper);
118 if (AgentSession* session = session_manager_.GetActiveSession()) {
119 session->context.SetAsarWrapper(asar_wrapper);
125 SyncStateFromEditor();
128 auto status = agent_editor_.Update();
133void AgentUiController::SyncStateFromEditor() {
135 const auto& profile = agent_editor_.GetCurrentProfile();
136 auto& ctx_config = agent_ui_context_.agent_config();
139 bool changed =
false;
140 if (ctx_config.ai_provider != profile.provider)
142 if (ctx_config.ai_model != profile.model)
147 ctx_config.ai_provider = profile.provider;
148 ctx_config.ai_model = profile.model;
149 ctx_config.ollama_host = profile.ollama_host;
150 ctx_config.gemini_api_key = profile.gemini_api_key;
153 last_synced_config_ = ctx_config;
155 SyncStateToComponents();
159void AgentUiController::SyncStateToComponents() {
162 if (
auto* chat = agent_editor_.GetAgentChat()) {
163 chat->SetContext(&agent_ui_context_);
168 agent_editor_.set_active(
true);
185 return &agent_editor_;
188AgentUIContext* AgentUiController::GetContext() {
190 if (AgentSession* session = session_manager_.GetActiveSession()) {
194 return &agent_ui_context_;
197const AgentUIContext* AgentUiController::GetContext()
const {
199 if (
const AgentSession* session = session_manager_.GetActiveSession()) {
200 return &session->context;
203 return &agent_ui_context_;
207cli::agent::LearnedKnowledgeService* AgentUiController::GetKnowledgeService() {
208 if (!knowledge_initialized_) {
211 return &learned_knowledge_;
214bool AgentUiController::IsKnowledgeServiceAvailable()
const {
215 return knowledge_initialized_;
218void AgentUiController::InitializeKnowledge() {
219 if (knowledge_initialized_) {
223 auto status = learned_knowledge_.Initialize();
225 knowledge_initialized_ =
true;
226 SyncKnowledgeToContext();
228 "LearnedKnowledgeService initialized successfully");
231 "Failed to initialize LearnedKnowledgeService: %s",
232 status.message().data());
236void AgentUiController::SyncKnowledgeToContext() {
237 if (!knowledge_initialized_) {
242 auto stats = learned_knowledge_.GetStats();
243 auto& knowledge_state = agent_ui_context_.knowledge_state();
245 knowledge_state.initialized =
true;
246 knowledge_state.preference_count = stats.preference_count;
247 knowledge_state.pattern_count = stats.pattern_count;
248 knowledge_state.project_count = stats.project_count;
249 knowledge_state.memory_count = stats.memory_count;
250 knowledge_state.last_refresh = absl::Now();
253 if (AgentSession* session = session_manager_.GetActiveSession()) {
254 session->context.knowledge_state() = knowledge_state;
void SetRomContext(Rom *rom)
void SetProjectContext(project::YazeProject *project)
AgentEditor * GetAgentEditor()
void SetAsarWrapperContext(core::AsarWrapper *asar_wrapper)
void Initialize(ToastManager *toast_manager, ProposalDrawer *proposal_drawer, RightPanelManager *right_panel_manager, PanelManager *panel_manager)
EditorContext context() const
#define LOG_ERROR(category, format,...)
#define LOG_INFO(category, format,...)