8#include "absl/status/status.h"
9#include "absl/status/statusor.h"
10#include "absl/strings/str_format.h"
11#include "absl/time/clock.h"
34 return session_or.status();
48 absl::StrFormat(
"Hosting local session: %s", session_name),
56 if (!network_coordinator_) {
57 return absl::FailedPreconditionError(
58 "Network coordinator not initialized. Connect to a server first.");
61 const char* username = std::getenv(
"USER");
63 username = std::getenv(
"USERNAME");
69 auto session_or = network_coordinator_->HostSession(session_name, username);
71 return session_or.status();
85 absl::StrFormat(
"Hosting network session: %s", session_name),
93 return absl::InvalidArgumentError(
"Unsupported collaboration mode");
102 if (!session_or.ok())
103 return session_or.status();
117 absl::StrFormat(
"Joined local session: %s", session_code),
126 if (!network_coordinator_) {
127 return absl::FailedPreconditionError(
128 "Network coordinator not initialized. Connect to a server first.");
131 const char* username = std::getenv(
"USER");
133 username = std::getenv(
"USERNAME");
136 username =
"unknown";
139 auto session_or = network_coordinator_->JoinSession(session_code, username);
140 if (!session_or.ok())
141 return session_or.status();
155 absl::StrFormat(
"Joined network session: %s", session_code),
163 return absl::InvalidArgumentError(
"Unsupported collaboration mode");
168 return absl::FailedPreconditionError(
"Not in a session");
178 if (network_coordinator_) {
179 auto status = network_coordinator_->LeaveSession();
195 return absl::OkStatus();
200 return absl::FailedPreconditionError(
"Not in a session");
205 if (!session_or.ok())
206 return session_or.status();
226 using yaze::test::CaptureActiveWindow;
227 using yaze::test::CaptureHarnessScreenshot;
228 using yaze::test::CaptureWindowByName;
230 absl::StatusOr<yaze::test::ScreenshotArtifact> result;
231 switch (config.
mode) {
233 result = CaptureHarnessScreenshot(
"");
236 result = CaptureActiveWindow(
"");
238 result = CaptureHarnessScreenshot(
"");
245 result = CaptureActiveWindow(
"");
248 result = CaptureHarnessScreenshot(
"");
255 return result.status();
257 *output_path = result->file_path;
258 return absl::OkStatus();
262 return absl::UnimplementedError(
"Screenshot capture requires YAZE_WITH_GRPC");
267 const std::string& prompt) {
270 ? std::getenv(
"GEMINI_API_KEY")
272 if (!api_key || std::strlen(api_key) == 0) {
273 return absl::FailedPreconditionError(
274 "Gemini API key not configured (set GEMINI_API_KEY)");
286 if (!response.ok()) {
287 return response.status();
293 auto history = service->GetHistory();
296 agent_msg.
message = response->text_response;
298 history.push_back(agent_msg);
299 service->ReplaceHistory(history);
307 return absl::OkStatus();
311 return absl::UnimplementedError(
"Gemini integration requires YAZE_WITH_GRPC");
316absl::Status AgentEditor::ConnectToServer(
const std::string& server_url) {
318 network_coordinator_ =
319 std::make_unique<NetworkCollaborationCoordinator>(server_url);
323 absl::StrFormat(
"Connected to server: %s", server_url),
327 return absl::OkStatus();
328 }
catch (
const std::exception& e) {
329 return absl::InternalError(
330 absl::StrFormat(
"Failed to connect to server: %s", e.what()));
334void AgentEditor::DisconnectFromServer() {
338 network_coordinator_.reset();
345bool AgentEditor::IsConnectedToServer()
const {
346 return network_coordinator_ && network_coordinator_->IsConnected();
absl::StatusOr< AgentResponse > GenerateMultimodalResponse(const std::string &, const std::string &)
std::string current_session_id_
absl::StatusOr< SessionInfo > JoinSession(const std::string &session_code, CollaborationMode mode=CollaborationMode::kLocal)
void SetupAutomationCallbacks()
absl::StatusOr< SessionInfo > RefreshSession()
void SetupMultimodalCallbacks()
std::string current_session_name_
CollaborationMode GetCurrentMode() const
absl::Status SendToGemini(const std::filesystem::path &image_path, const std::string &prompt)
CollaborationMode current_mode_
ToastManager * toast_manager_
absl::StatusOr< SessionInfo > HostSession(const std::string &session_name, CollaborationMode mode=CollaborationMode::kLocal)
absl::Status LeaveSession()
std::unique_ptr< AgentCollaborationCoordinator > local_coordinator_
absl::Status CaptureSnapshot(std::filesystem::path *output_path, const CaptureConfig &config)
BotProfile current_profile_
std::vector< std::string > current_participants_
std::unique_ptr< AgentChat > agent_chat_
std::optional< SessionInfo > GetCurrentSession() const
void Show(const std::string &message, ToastType type=ToastType::kInfo, float ttl_seconds=3.0f)
std::string gemini_api_key
std::string specific_window_name
std::vector< std::string > participants