diff --git a/agent-node/src/protos/agent_pb2.py b/agent-node/src/protos/agent_pb2.py index bea769c..981686e 100644 --- a/agent-node/src/protos/agent_pb2.py +++ b/agent-node/src/protos/agent_pb2.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! -# source: protos/agent.proto +# source: agent.proto # Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor @@ -14,83 +14,71 @@ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12protos/agent.proto\x12\x05\x61gent\"\xde\x01\n\x13RegistrationRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x12\n\nauth_token\x18\x03 \x01(\t\x12\x18\n\x10node_description\x18\x04 \x01(\t\x12\x42\n\x0c\x63\x61pabilities\x18\x05 \x03(\x0b\x32,.agent.RegistrationRequest.CapabilitiesEntry\x1a\x33\n\x11\x43\x61pabilitiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xe0\x01\n\rSandboxPolicy\x12\'\n\x04mode\x18\x01 \x01(\x0e\x32\x19.agent.SandboxPolicy.Mode\x12\x18\n\x10\x61llowed_commands\x18\x02 \x03(\t\x12\x17\n\x0f\x64\x65nied_commands\x18\x03 \x03(\t\x12\x1a\n\x12sensitive_commands\x18\x04 \x03(\t\x12\x18\n\x10working_dir_jail\x18\x05 \x01(\t\x12\x19\n\x11skill_config_json\x18\x06 \x01(\t\"\"\n\x04Mode\x12\n\n\x06STRICT\x10\x00\x12\x0e\n\nPERMISSIVE\x10\x01\"x\n\x14RegistrationResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x15\n\rerror_message\x18\x02 \x01(\t\x12\x12\n\nsession_id\x18\x03 \x01(\t\x12$\n\x06policy\x18\x04 \x01(\x0b\x32\x14.agent.SandboxPolicy\"\xa9\x02\n\x11\x43lientTaskMessage\x12,\n\rtask_response\x18\x01 \x01(\x0b\x32\x13.agent.TaskResponseH\x00\x12-\n\ntask_claim\x18\x02 \x01(\x0b\x32\x17.agent.TaskClaimRequestH\x00\x12,\n\rbrowser_event\x18\x03 \x01(\x0b\x32\x13.agent.BrowserEventH\x00\x12\'\n\x08\x61nnounce\x18\x04 \x01(\x0b\x32\x13.agent.NodeAnnounceH\x00\x12+\n\tfile_sync\x18\x05 \x01(\x0b\x32\x16.agent.FileSyncMessageH\x00\x12(\n\x0bskill_event\x18\x06 \x01(\x0b\x32\x11.agent.SkillEventH\x00\x42\t\n\x07payload\"y\n\nSkillEvent\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x0f\n\x07task_id\x18\x02 \x01(\t\x12\x16\n\x0cterminal_out\x18\x03 \x01(\tH\x00\x12\x10\n\x06prompt\x18\x04 \x01(\tH\x00\x12\x14\n\nkeep_alive\x18\x05 \x01(\x08H\x00\x42\x06\n\x04\x64\x61ta\"\x1f\n\x0cNodeAnnounce\x12\x0f\n\x07node_id\x18\x01 \x01(\t\"\x87\x01\n\x0c\x42rowserEvent\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12,\n\x0b\x63onsole_msg\x18\x02 \x01(\x0b\x32\x15.agent.ConsoleMessageH\x00\x12,\n\x0bnetwork_req\x18\x03 \x01(\x0b\x32\x15.agent.NetworkRequestH\x00\x42\x07\n\x05\x65vent\"\xbc\x02\n\x11ServerTaskMessage\x12*\n\x0ctask_request\x18\x01 \x01(\x0b\x32\x12.agent.TaskRequestH\x00\x12\x31\n\x10work_pool_update\x18\x02 \x01(\x0b\x32\x15.agent.WorkPoolUpdateH\x00\x12\x30\n\x0c\x63laim_status\x18\x03 \x01(\x0b\x32\x18.agent.TaskClaimResponseH\x00\x12/\n\x0btask_cancel\x18\x04 \x01(\x0b\x32\x18.agent.TaskCancelRequestH\x00\x12+\n\tfile_sync\x18\x05 \x01(\x0b\x32\x16.agent.FileSyncMessageH\x00\x12-\n\rpolicy_update\x18\x06 \x01(\x0b\x32\x14.agent.SandboxPolicyH\x00\x42\t\n\x07payload\"$\n\x11TaskCancelRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\"\xd1\x01\n\x0bTaskRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x11\n\ttask_type\x18\x02 \x01(\t\x12\x16\n\x0cpayload_json\x18\x03 \x01(\tH\x00\x12.\n\x0e\x62rowser_action\x18\x07 \x01(\x0b\x32\x14.agent.BrowserActionH\x00\x12\x12\n\ntimeout_ms\x18\x04 \x01(\x05\x12\x10\n\x08trace_id\x18\x05 \x01(\t\x12\x11\n\tsignature\x18\x06 \x01(\t\x12\x12\n\nsession_id\x18\x08 \x01(\tB\t\n\x07payload\"\xa0\x02\n\rBrowserAction\x12/\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x1f.agent.BrowserAction.ActionType\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\x10\n\x08selector\x18\x03 \x01(\t\x12\x0c\n\x04text\x18\x04 \x01(\t\x12\x12\n\nsession_id\x18\x05 \x01(\t\x12\t\n\x01x\x18\x06 \x01(\x05\x12\t\n\x01y\x18\x07 \x01(\x05\"\x86\x01\n\nActionType\x12\x0c\n\x08NAVIGATE\x10\x00\x12\t\n\x05\x43LICK\x10\x01\x12\x08\n\x04TYPE\x10\x02\x12\x0e\n\nSCREENSHOT\x10\x03\x12\x0b\n\x07GET_DOM\x10\x04\x12\t\n\x05HOVER\x10\x05\x12\n\n\x06SCROLL\x10\x06\x12\t\n\x05\x43LOSE\x10\x07\x12\x08\n\x04\x45VAL\x10\x08\x12\x0c\n\x08GET_A11Y\x10\t\"\xe0\x02\n\x0cTaskResponse\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12*\n\x06status\x18\x02 \x01(\x0e\x32\x1a.agent.TaskResponse.Status\x12\x0e\n\x06stdout\x18\x03 \x01(\t\x12\x0e\n\x06stderr\x18\x04 \x01(\t\x12\x10\n\x08trace_id\x18\x05 \x01(\t\x12\x35\n\tartifacts\x18\x06 \x03(\x0b\x32\".agent.TaskResponse.ArtifactsEntry\x12\x30\n\x0e\x62rowser_result\x18\x07 \x01(\x0b\x32\x16.agent.BrowserResponseH\x00\x1a\x30\n\x0e\x41rtifactsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"<\n\x06Status\x12\x0b\n\x07SUCCESS\x10\x00\x12\t\n\x05\x45RROR\x10\x01\x12\x0b\n\x07TIMEOUT\x10\x02\x12\r\n\tCANCELLED\x10\x03\x42\x08\n\x06result\"\xef\x01\n\x0f\x42rowserResponse\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\r\n\x05title\x18\x02 \x01(\t\x12\x10\n\x08snapshot\x18\x03 \x01(\x0c\x12\x13\n\x0b\x64om_content\x18\x04 \x01(\t\x12\x11\n\ta11y_tree\x18\x05 \x01(\t\x12\x13\n\x0b\x65val_result\x18\x06 \x01(\t\x12.\n\x0f\x63onsole_history\x18\x07 \x03(\x0b\x32\x15.agent.ConsoleMessage\x12.\n\x0fnetwork_history\x18\x08 \x03(\x0b\x32\x15.agent.NetworkRequest\x12\x11\n\toffloaded\x18\t \x01(\x08\"C\n\x0e\x43onsoleMessage\x12\r\n\x05level\x18\x01 \x01(\t\x12\x0c\n\x04text\x18\x02 \x01(\t\x12\x14\n\x0ctimestamp_ms\x18\x03 \x01(\x03\"h\n\x0eNetworkRequest\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\x05\x12\x15\n\rresource_type\x18\x04 \x01(\t\x12\x12\n\nlatency_ms\x18\x05 \x01(\x03\",\n\x0eWorkPoolUpdate\x12\x1a\n\x12\x61vailable_task_ids\x18\x01 \x03(\t\"4\n\x10TaskClaimRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07node_id\x18\x02 \x01(\t\"E\n\x11TaskClaimResponse\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07granted\x18\x02 \x01(\x08\x12\x0e\n\x06reason\x18\x03 \x01(\t\"\xe6\x02\n\tHeartbeat\x12\x0f\n\x07node_id\x18\x01 \x01(\t\x12\x19\n\x11\x63pu_usage_percent\x18\x02 \x01(\x02\x12\x1c\n\x14memory_usage_percent\x18\x03 \x01(\x02\x12\x1b\n\x13\x61\x63tive_worker_count\x18\x04 \x01(\x05\x12\x1b\n\x13max_worker_capacity\x18\x05 \x01(\x05\x12\x16\n\x0estatus_message\x18\x06 \x01(\t\x12\x18\n\x10running_task_ids\x18\x07 \x03(\t\x12\x11\n\tcpu_count\x18\x08 \x01(\x05\x12\x16\n\x0ememory_used_gb\x18\t \x01(\x02\x12\x17\n\x0fmemory_total_gb\x18\n \x01(\x02\x12\x1a\n\x12\x63pu_usage_per_core\x18\x0b \x03(\x02\x12\x14\n\x0c\x63pu_freq_mhz\x18\x0c \x01(\x02\x12\x1b\n\x13memory_available_gb\x18\r \x01(\x02\x12\x10\n\x08load_avg\x18\x0e \x03(\x02\"-\n\x13HealthCheckResponse\x12\x16\n\x0eserver_time_ms\x18\x01 \x01(\x03\"\xe4\x01\n\x0f\x46ileSyncMessage\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12,\n\x08manifest\x18\x02 \x01(\x0b\x32\x18.agent.DirectoryManifestH\x00\x12\'\n\tfile_data\x18\x03 \x01(\x0b\x32\x12.agent.FilePayloadH\x00\x12#\n\x06status\x18\x04 \x01(\x0b\x32\x11.agent.SyncStatusH\x00\x12%\n\x07\x63ontrol\x18\x05 \x01(\x0b\x32\x12.agent.SyncControlH\x00\x12\x0f\n\x07task_id\x18\x06 \x01(\tB\t\n\x07payload\"\xab\x02\n\x0bSyncControl\x12)\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x19.agent.SyncControl.Action\x12\x0c\n\x04path\x18\x02 \x01(\t\x12\x15\n\rrequest_paths\x18\x03 \x03(\t\x12\x0f\n\x07\x63ontent\x18\x04 \x01(\x0c\x12\x0e\n\x06is_dir\x18\x05 \x01(\x08\"\xaa\x01\n\x06\x41\x63tion\x12\x12\n\x0eSTART_WATCHING\x10\x00\x12\x11\n\rSTOP_WATCHING\x10\x01\x12\x08\n\x04LOCK\x10\x02\x12\n\n\x06UNLOCK\x10\x03\x12\x14\n\x10REFRESH_MANIFEST\x10\x04\x12\n\n\x06RESYNC\x10\x05\x12\x08\n\x04LIST\x10\x06\x12\x08\n\x04READ\x10\x07\x12\t\n\x05WRITE\x10\x08\x12\n\n\x06\x44\x45LETE\x10\t\x12\t\n\x05PURGE\x10\n\x12\x0b\n\x07\x43LEANUP\x10\x0b\"F\n\x11\x44irectoryManifest\x12\x11\n\troot_path\x18\x01 \x01(\t\x12\x1e\n\x05\x66iles\x18\x02 \x03(\x0b\x32\x0f.agent.FileInfo\"D\n\x08\x46ileInfo\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0c\n\x04size\x18\x02 \x01(\x03\x12\x0c\n\x04hash\x18\x03 \x01(\t\x12\x0e\n\x06is_dir\x18\x04 \x01(\x08\"\x83\x01\n\x0b\x46ilePayload\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\r\n\x05\x63hunk\x18\x02 \x01(\x0c\x12\x13\n\x0b\x63hunk_index\x18\x03 \x01(\x05\x12\x10\n\x08is_final\x18\x04 \x01(\x08\x12\x0c\n\x04hash\x18\x05 \x01(\t\x12\x0e\n\x06offset\x18\x06 \x01(\x03\x12\x12\n\ncompressed\x18\x07 \x01(\x08\"\xa0\x01\n\nSyncStatus\x12$\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x16.agent.SyncStatus.Code\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x17\n\x0freconcile_paths\x18\x03 \x03(\t\"B\n\x04\x43ode\x12\x06\n\x02OK\x10\x00\x12\t\n\x05\x45RROR\x10\x01\x12\x16\n\x12RECONCILE_REQUIRED\x10\x02\x12\x0f\n\x0bIN_PROGRESS\x10\x03\x32\xe9\x01\n\x11\x41gentOrchestrator\x12L\n\x11SyncConfiguration\x12\x1a.agent.RegistrationRequest\x1a\x1b.agent.RegistrationResponse\x12\x44\n\nTaskStream\x12\x18.agent.ClientTaskMessage\x1a\x18.agent.ServerTaskMessage(\x01\x30\x01\x12@\n\x0cReportHealth\x12\x10.agent.Heartbeat\x1a\x1a.agent.HealthCheckResponse(\x01\x30\x01\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0b\x61gent.proto\x12\x05\x61gent\"\xde\x01\n\x13RegistrationRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x12\n\nauth_token\x18\x03 \x01(\t\x12\x18\n\x10node_description\x18\x04 \x01(\t\x12\x42\n\x0c\x63\x61pabilities\x18\x05 \x03(\x0b\x32,.agent.RegistrationRequest.CapabilitiesEntry\x1a\x33\n\x11\x43\x61pabilitiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xe0\x01\n\rSandboxPolicy\x12\'\n\x04mode\x18\x01 \x01(\x0e\x32\x19.agent.SandboxPolicy.Mode\x12\x18\n\x10\x61llowed_commands\x18\x02 \x03(\t\x12\x17\n\x0f\x64\x65nied_commands\x18\x03 \x03(\t\x12\x1a\n\x12sensitive_commands\x18\x04 \x03(\t\x12\x18\n\x10working_dir_jail\x18\x05 \x01(\t\x12\x19\n\x11skill_config_json\x18\x06 \x01(\t\"\"\n\x04Mode\x12\n\n\x06STRICT\x10\x00\x12\x0e\n\nPERMISSIVE\x10\x01\"x\n\x14RegistrationResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x15\n\rerror_message\x18\x02 \x01(\t\x12\x12\n\nsession_id\x18\x03 \x01(\t\x12$\n\x06policy\x18\x04 \x01(\x0b\x32\x14.agent.SandboxPolicy\"\xfb\x01\n\x11\x43lientTaskMessage\x12,\n\rtask_response\x18\x01 \x01(\x0b\x32\x13.agent.TaskResponseH\x00\x12-\n\ntask_claim\x18\x02 \x01(\x0b\x32\x17.agent.TaskClaimRequestH\x00\x12\'\n\x08\x61nnounce\x18\x04 \x01(\x0b\x32\x13.agent.NodeAnnounceH\x00\x12+\n\tfile_sync\x18\x05 \x01(\x0b\x32\x16.agent.FileSyncMessageH\x00\x12(\n\x0bskill_event\x18\x06 \x01(\x0b\x32\x11.agent.SkillEventH\x00\x42\t\n\x07payload\"y\n\nSkillEvent\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x0f\n\x07task_id\x18\x02 \x01(\t\x12\x16\n\x0cterminal_out\x18\x03 \x01(\tH\x00\x12\x10\n\x06prompt\x18\x04 \x01(\tH\x00\x12\x14\n\nkeep_alive\x18\x05 \x01(\x08H\x00\x42\x06\n\x04\x64\x61ta\"\x1f\n\x0cNodeAnnounce\x12\x0f\n\x07node_id\x18\x01 \x01(\t\"\xbc\x02\n\x11ServerTaskMessage\x12*\n\x0ctask_request\x18\x01 \x01(\x0b\x32\x12.agent.TaskRequestH\x00\x12\x31\n\x10work_pool_update\x18\x02 \x01(\x0b\x32\x15.agent.WorkPoolUpdateH\x00\x12\x30\n\x0c\x63laim_status\x18\x03 \x01(\x0b\x32\x18.agent.TaskClaimResponseH\x00\x12/\n\x0btask_cancel\x18\x04 \x01(\x0b\x32\x18.agent.TaskCancelRequestH\x00\x12+\n\tfile_sync\x18\x05 \x01(\x0b\x32\x16.agent.FileSyncMessageH\x00\x12-\n\rpolicy_update\x18\x06 \x01(\x0b\x32\x14.agent.SandboxPolicyH\x00\x42\t\n\x07payload\"$\n\x11TaskCancelRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\"\xa1\x01\n\x0bTaskRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x11\n\ttask_type\x18\x02 \x01(\t\x12\x16\n\x0cpayload_json\x18\x03 \x01(\tH\x00\x12\x12\n\ntimeout_ms\x18\x04 \x01(\x05\x12\x10\n\x08trace_id\x18\x05 \x01(\t\x12\x11\n\tsignature\x18\x06 \x01(\t\x12\x12\n\nsession_id\x18\x08 \x01(\tB\t\n\x07payload\"\xa4\x02\n\x0cTaskResponse\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12*\n\x06status\x18\x02 \x01(\x0e\x32\x1a.agent.TaskResponse.Status\x12\x0e\n\x06stdout\x18\x03 \x01(\t\x12\x0e\n\x06stderr\x18\x04 \x01(\t\x12\x10\n\x08trace_id\x18\x05 \x01(\t\x12\x35\n\tartifacts\x18\x06 \x03(\x0b\x32\".agent.TaskResponse.ArtifactsEntry\x1a\x30\n\x0e\x41rtifactsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"<\n\x06Status\x12\x0b\n\x07SUCCESS\x10\x00\x12\t\n\x05\x45RROR\x10\x01\x12\x0b\n\x07TIMEOUT\x10\x02\x12\r\n\tCANCELLED\x10\x03\",\n\x0eWorkPoolUpdate\x12\x1a\n\x12\x61vailable_task_ids\x18\x01 \x03(\t\"4\n\x10TaskClaimRequest\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07node_id\x18\x02 \x01(\t\"E\n\x11TaskClaimResponse\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0f\n\x07granted\x18\x02 \x01(\x08\x12\x0e\n\x06reason\x18\x03 \x01(\t\"\xe6\x02\n\tHeartbeat\x12\x0f\n\x07node_id\x18\x01 \x01(\t\x12\x19\n\x11\x63pu_usage_percent\x18\x02 \x01(\x02\x12\x1c\n\x14memory_usage_percent\x18\x03 \x01(\x02\x12\x1b\n\x13\x61\x63tive_worker_count\x18\x04 \x01(\x05\x12\x1b\n\x13max_worker_capacity\x18\x05 \x01(\x05\x12\x16\n\x0estatus_message\x18\x06 \x01(\t\x12\x18\n\x10running_task_ids\x18\x07 \x03(\t\x12\x11\n\tcpu_count\x18\x08 \x01(\x05\x12\x16\n\x0ememory_used_gb\x18\t \x01(\x02\x12\x17\n\x0fmemory_total_gb\x18\n \x01(\x02\x12\x1a\n\x12\x63pu_usage_per_core\x18\x0b \x03(\x02\x12\x14\n\x0c\x63pu_freq_mhz\x18\x0c \x01(\x02\x12\x1b\n\x13memory_available_gb\x18\r \x01(\x02\x12\x10\n\x08load_avg\x18\x0e \x03(\x02\"-\n\x13HealthCheckResponse\x12\x16\n\x0eserver_time_ms\x18\x01 \x01(\x03\"\xe4\x01\n\x0f\x46ileSyncMessage\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12,\n\x08manifest\x18\x02 \x01(\x0b\x32\x18.agent.DirectoryManifestH\x00\x12\'\n\tfile_data\x18\x03 \x01(\x0b\x32\x12.agent.FilePayloadH\x00\x12#\n\x06status\x18\x04 \x01(\x0b\x32\x11.agent.SyncStatusH\x00\x12%\n\x07\x63ontrol\x18\x05 \x01(\x0b\x32\x12.agent.SyncControlH\x00\x12\x0f\n\x07task_id\x18\x06 \x01(\tB\t\n\x07payload\"\xab\x02\n\x0bSyncControl\x12)\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x19.agent.SyncControl.Action\x12\x0c\n\x04path\x18\x02 \x01(\t\x12\x15\n\rrequest_paths\x18\x03 \x03(\t\x12\x0f\n\x07\x63ontent\x18\x04 \x01(\x0c\x12\x0e\n\x06is_dir\x18\x05 \x01(\x08\"\xaa\x01\n\x06\x41\x63tion\x12\x12\n\x0eSTART_WATCHING\x10\x00\x12\x11\n\rSTOP_WATCHING\x10\x01\x12\x08\n\x04LOCK\x10\x02\x12\n\n\x06UNLOCK\x10\x03\x12\x14\n\x10REFRESH_MANIFEST\x10\x04\x12\n\n\x06RESYNC\x10\x05\x12\x08\n\x04LIST\x10\x06\x12\x08\n\x04READ\x10\x07\x12\t\n\x05WRITE\x10\x08\x12\n\n\x06\x44\x45LETE\x10\t\x12\t\n\x05PURGE\x10\n\x12\x0b\n\x07\x43LEANUP\x10\x0b\"F\n\x11\x44irectoryManifest\x12\x11\n\troot_path\x18\x01 \x01(\t\x12\x1e\n\x05\x66iles\x18\x02 \x03(\x0b\x32\x0f.agent.FileInfo\"D\n\x08\x46ileInfo\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0c\n\x04size\x18\x02 \x01(\x03\x12\x0c\n\x04hash\x18\x03 \x01(\t\x12\x0e\n\x06is_dir\x18\x04 \x01(\x08\"\xad\x01\n\x0b\x46ilePayload\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\r\n\x05\x63hunk\x18\x02 \x01(\x0c\x12\x13\n\x0b\x63hunk_index\x18\x03 \x01(\x05\x12\x10\n\x08is_final\x18\x04 \x01(\x08\x12\x0c\n\x04hash\x18\x05 \x01(\t\x12\x0e\n\x06offset\x18\x06 \x01(\x03\x12\x12\n\ncompressed\x18\x07 \x01(\x08\x12\x14\n\x0ctotal_chunks\x18\x08 \x01(\x05\x12\x12\n\ntotal_size\x18\t \x01(\x03\"\xa0\x01\n\nSyncStatus\x12$\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x16.agent.SyncStatus.Code\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x17\n\x0freconcile_paths\x18\x03 \x03(\t\"B\n\x04\x43ode\x12\x06\n\x02OK\x10\x00\x12\t\n\x05\x45RROR\x10\x01\x12\x16\n\x12RECONCILE_REQUIRED\x10\x02\x12\x0f\n\x0bIN_PROGRESS\x10\x03\x32\xe9\x01\n\x11\x41gentOrchestrator\x12L\n\x11SyncConfiguration\x12\x1a.agent.RegistrationRequest\x1a\x1b.agent.RegistrationResponse\x12\x44\n\nTaskStream\x12\x18.agent.ClientTaskMessage\x1a\x18.agent.ServerTaskMessage(\x01\x30\x01\x12@\n\x0cReportHealth\x12\x10.agent.Heartbeat\x1a\x1a.agent.HealthCheckResponse(\x01\x30\x01\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'protos.agent_pb2', _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'agent_pb2', _globals) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _globals['_REGISTRATIONREQUEST_CAPABILITIESENTRY']._options = None _globals['_REGISTRATIONREQUEST_CAPABILITIESENTRY']._serialized_options = b'8\001' _globals['_TASKRESPONSE_ARTIFACTSENTRY']._options = None _globals['_TASKRESPONSE_ARTIFACTSENTRY']._serialized_options = b'8\001' - _globals['_REGISTRATIONREQUEST']._serialized_start=30 - _globals['_REGISTRATIONREQUEST']._serialized_end=252 - _globals['_REGISTRATIONREQUEST_CAPABILITIESENTRY']._serialized_start=201 - _globals['_REGISTRATIONREQUEST_CAPABILITIESENTRY']._serialized_end=252 - _globals['_SANDBOXPOLICY']._serialized_start=255 - _globals['_SANDBOXPOLICY']._serialized_end=479 - _globals['_SANDBOXPOLICY_MODE']._serialized_start=445 - _globals['_SANDBOXPOLICY_MODE']._serialized_end=479 - _globals['_REGISTRATIONRESPONSE']._serialized_start=481 - _globals['_REGISTRATIONRESPONSE']._serialized_end=601 - _globals['_CLIENTTASKMESSAGE']._serialized_start=604 - _globals['_CLIENTTASKMESSAGE']._serialized_end=901 - _globals['_SKILLEVENT']._serialized_start=903 - _globals['_SKILLEVENT']._serialized_end=1024 - _globals['_NODEANNOUNCE']._serialized_start=1026 - _globals['_NODEANNOUNCE']._serialized_end=1057 - _globals['_BROWSEREVENT']._serialized_start=1060 - _globals['_BROWSEREVENT']._serialized_end=1195 - _globals['_SERVERTASKMESSAGE']._serialized_start=1198 - _globals['_SERVERTASKMESSAGE']._serialized_end=1514 - _globals['_TASKCANCELREQUEST']._serialized_start=1516 - _globals['_TASKCANCELREQUEST']._serialized_end=1552 - _globals['_TASKREQUEST']._serialized_start=1555 - _globals['_TASKREQUEST']._serialized_end=1764 - _globals['_BROWSERACTION']._serialized_start=1767 - _globals['_BROWSERACTION']._serialized_end=2055 - _globals['_BROWSERACTION_ACTIONTYPE']._serialized_start=1921 - _globals['_BROWSERACTION_ACTIONTYPE']._serialized_end=2055 - _globals['_TASKRESPONSE']._serialized_start=2058 - _globals['_TASKRESPONSE']._serialized_end=2410 - _globals['_TASKRESPONSE_ARTIFACTSENTRY']._serialized_start=2290 - _globals['_TASKRESPONSE_ARTIFACTSENTRY']._serialized_end=2338 - _globals['_TASKRESPONSE_STATUS']._serialized_start=2340 - _globals['_TASKRESPONSE_STATUS']._serialized_end=2400 - _globals['_BROWSERRESPONSE']._serialized_start=2413 - _globals['_BROWSERRESPONSE']._serialized_end=2652 - _globals['_CONSOLEMESSAGE']._serialized_start=2654 - _globals['_CONSOLEMESSAGE']._serialized_end=2721 - _globals['_NETWORKREQUEST']._serialized_start=2723 - _globals['_NETWORKREQUEST']._serialized_end=2827 - _globals['_WORKPOOLUPDATE']._serialized_start=2829 - _globals['_WORKPOOLUPDATE']._serialized_end=2873 - _globals['_TASKCLAIMREQUEST']._serialized_start=2875 - _globals['_TASKCLAIMREQUEST']._serialized_end=2927 - _globals['_TASKCLAIMRESPONSE']._serialized_start=2929 - _globals['_TASKCLAIMRESPONSE']._serialized_end=2998 - _globals['_HEARTBEAT']._serialized_start=3001 - _globals['_HEARTBEAT']._serialized_end=3359 - _globals['_HEALTHCHECKRESPONSE']._serialized_start=3361 - _globals['_HEALTHCHECKRESPONSE']._serialized_end=3406 - _globals['_FILESYNCMESSAGE']._serialized_start=3409 - _globals['_FILESYNCMESSAGE']._serialized_end=3637 - _globals['_SYNCCONTROL']._serialized_start=3640 - _globals['_SYNCCONTROL']._serialized_end=3939 - _globals['_SYNCCONTROL_ACTION']._serialized_start=3769 - _globals['_SYNCCONTROL_ACTION']._serialized_end=3939 - _globals['_DIRECTORYMANIFEST']._serialized_start=3941 - _globals['_DIRECTORYMANIFEST']._serialized_end=4011 - _globals['_FILEINFO']._serialized_start=4013 - _globals['_FILEINFO']._serialized_end=4081 - _globals['_FILEPAYLOAD']._serialized_start=4084 - _globals['_FILEPAYLOAD']._serialized_end=4215 - _globals['_SYNCSTATUS']._serialized_start=4218 - _globals['_SYNCSTATUS']._serialized_end=4378 - _globals['_SYNCSTATUS_CODE']._serialized_start=4312 - _globals['_SYNCSTATUS_CODE']._serialized_end=4378 - _globals['_AGENTORCHESTRATOR']._serialized_start=4381 - _globals['_AGENTORCHESTRATOR']._serialized_end=4614 + _globals['_REGISTRATIONREQUEST']._serialized_start=23 + _globals['_REGISTRATIONREQUEST']._serialized_end=245 + _globals['_REGISTRATIONREQUEST_CAPABILITIESENTRY']._serialized_start=194 + _globals['_REGISTRATIONREQUEST_CAPABILITIESENTRY']._serialized_end=245 + _globals['_SANDBOXPOLICY']._serialized_start=248 + _globals['_SANDBOXPOLICY']._serialized_end=472 + _globals['_SANDBOXPOLICY_MODE']._serialized_start=438 + _globals['_SANDBOXPOLICY_MODE']._serialized_end=472 + _globals['_REGISTRATIONRESPONSE']._serialized_start=474 + _globals['_REGISTRATIONRESPONSE']._serialized_end=594 + _globals['_CLIENTTASKMESSAGE']._serialized_start=597 + _globals['_CLIENTTASKMESSAGE']._serialized_end=848 + _globals['_SKILLEVENT']._serialized_start=850 + _globals['_SKILLEVENT']._serialized_end=971 + _globals['_NODEANNOUNCE']._serialized_start=973 + _globals['_NODEANNOUNCE']._serialized_end=1004 + _globals['_SERVERTASKMESSAGE']._serialized_start=1007 + _globals['_SERVERTASKMESSAGE']._serialized_end=1323 + _globals['_TASKCANCELREQUEST']._serialized_start=1325 + _globals['_TASKCANCELREQUEST']._serialized_end=1361 + _globals['_TASKREQUEST']._serialized_start=1364 + _globals['_TASKREQUEST']._serialized_end=1525 + _globals['_TASKRESPONSE']._serialized_start=1528 + _globals['_TASKRESPONSE']._serialized_end=1820 + _globals['_TASKRESPONSE_ARTIFACTSENTRY']._serialized_start=1710 + _globals['_TASKRESPONSE_ARTIFACTSENTRY']._serialized_end=1758 + _globals['_TASKRESPONSE_STATUS']._serialized_start=1760 + _globals['_TASKRESPONSE_STATUS']._serialized_end=1820 + _globals['_WORKPOOLUPDATE']._serialized_start=1822 + _globals['_WORKPOOLUPDATE']._serialized_end=1866 + _globals['_TASKCLAIMREQUEST']._serialized_start=1868 + _globals['_TASKCLAIMREQUEST']._serialized_end=1920 + _globals['_TASKCLAIMRESPONSE']._serialized_start=1922 + _globals['_TASKCLAIMRESPONSE']._serialized_end=1991 + _globals['_HEARTBEAT']._serialized_start=1994 + _globals['_HEARTBEAT']._serialized_end=2352 + _globals['_HEALTHCHECKRESPONSE']._serialized_start=2354 + _globals['_HEALTHCHECKRESPONSE']._serialized_end=2399 + _globals['_FILESYNCMESSAGE']._serialized_start=2402 + _globals['_FILESYNCMESSAGE']._serialized_end=2630 + _globals['_SYNCCONTROL']._serialized_start=2633 + _globals['_SYNCCONTROL']._serialized_end=2932 + _globals['_SYNCCONTROL_ACTION']._serialized_start=2762 + _globals['_SYNCCONTROL_ACTION']._serialized_end=2932 + _globals['_DIRECTORYMANIFEST']._serialized_start=2934 + _globals['_DIRECTORYMANIFEST']._serialized_end=3004 + _globals['_FILEINFO']._serialized_start=3006 + _globals['_FILEINFO']._serialized_end=3074 + _globals['_FILEPAYLOAD']._serialized_start=3077 + _globals['_FILEPAYLOAD']._serialized_end=3250 + _globals['_SYNCSTATUS']._serialized_start=3253 + _globals['_SYNCSTATUS']._serialized_end=3413 + _globals['_SYNCSTATUS_CODE']._serialized_start=3347 + _globals['_SYNCSTATUS_CODE']._serialized_end=3413 + _globals['_AGENTORCHESTRATOR']._serialized_start=3416 + _globals['_AGENTORCHESTRATOR']._serialized_end=3649 # @@protoc_insertion_point(module_scope) diff --git a/agent-node/src/protos/agent_pb2_grpc.py b/agent-node/src/protos/agent_pb2_grpc.py index f551b0b..1e19ad3 100644 --- a/agent-node/src/protos/agent_pb2_grpc.py +++ b/agent-node/src/protos/agent_pb2_grpc.py @@ -2,7 +2,7 @@ """Client and server classes corresponding to protobuf-defined services.""" import grpc -from protos import agent_pb2 as protos_dot_agent__pb2 +from protos import agent_pb2 as agent__pb2 class AgentOrchestratorStub(object): @@ -17,18 +17,18 @@ """ self.SyncConfiguration = channel.unary_unary( '/agent.AgentOrchestrator/SyncConfiguration', - request_serializer=protos_dot_agent__pb2.RegistrationRequest.SerializeToString, - response_deserializer=protos_dot_agent__pb2.RegistrationResponse.FromString, + request_serializer=agent__pb2.RegistrationRequest.SerializeToString, + response_deserializer=agent__pb2.RegistrationResponse.FromString, ) self.TaskStream = channel.stream_stream( '/agent.AgentOrchestrator/TaskStream', - request_serializer=protos_dot_agent__pb2.ClientTaskMessage.SerializeToString, - response_deserializer=protos_dot_agent__pb2.ServerTaskMessage.FromString, + request_serializer=agent__pb2.ClientTaskMessage.SerializeToString, + response_deserializer=agent__pb2.ServerTaskMessage.FromString, ) self.ReportHealth = channel.stream_stream( '/agent.AgentOrchestrator/ReportHealth', - request_serializer=protos_dot_agent__pb2.Heartbeat.SerializeToString, - response_deserializer=protos_dot_agent__pb2.HealthCheckResponse.FromString, + request_serializer=agent__pb2.Heartbeat.SerializeToString, + response_deserializer=agent__pb2.HealthCheckResponse.FromString, ) @@ -62,18 +62,18 @@ rpc_method_handlers = { 'SyncConfiguration': grpc.unary_unary_rpc_method_handler( servicer.SyncConfiguration, - request_deserializer=protos_dot_agent__pb2.RegistrationRequest.FromString, - response_serializer=protos_dot_agent__pb2.RegistrationResponse.SerializeToString, + request_deserializer=agent__pb2.RegistrationRequest.FromString, + response_serializer=agent__pb2.RegistrationResponse.SerializeToString, ), 'TaskStream': grpc.stream_stream_rpc_method_handler( servicer.TaskStream, - request_deserializer=protos_dot_agent__pb2.ClientTaskMessage.FromString, - response_serializer=protos_dot_agent__pb2.ServerTaskMessage.SerializeToString, + request_deserializer=agent__pb2.ClientTaskMessage.FromString, + response_serializer=agent__pb2.ServerTaskMessage.SerializeToString, ), 'ReportHealth': grpc.stream_stream_rpc_method_handler( servicer.ReportHealth, - request_deserializer=protos_dot_agent__pb2.Heartbeat.FromString, - response_serializer=protos_dot_agent__pb2.HealthCheckResponse.SerializeToString, + request_deserializer=agent__pb2.Heartbeat.FromString, + response_serializer=agent__pb2.HealthCheckResponse.SerializeToString, ), } generic_handler = grpc.method_handlers_generic_handler( @@ -98,8 +98,8 @@ timeout=None, metadata=None): return grpc.experimental.unary_unary(request, target, '/agent.AgentOrchestrator/SyncConfiguration', - protos_dot_agent__pb2.RegistrationRequest.SerializeToString, - protos_dot_agent__pb2.RegistrationResponse.FromString, + agent__pb2.RegistrationRequest.SerializeToString, + agent__pb2.RegistrationResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @@ -115,8 +115,8 @@ timeout=None, metadata=None): return grpc.experimental.stream_stream(request_iterator, target, '/agent.AgentOrchestrator/TaskStream', - protos_dot_agent__pb2.ClientTaskMessage.SerializeToString, - protos_dot_agent__pb2.ServerTaskMessage.FromString, + agent__pb2.ClientTaskMessage.SerializeToString, + agent__pb2.ServerTaskMessage.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @@ -132,7 +132,7 @@ timeout=None, metadata=None): return grpc.experimental.stream_stream(request_iterator, target, '/agent.AgentOrchestrator/ReportHealth', - protos_dot_agent__pb2.Heartbeat.SerializeToString, - protos_dot_agent__pb2.HealthCheckResponse.FromString, + agent__pb2.Heartbeat.SerializeToString, + agent__pb2.HealthCheckResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/agent-node/src/protos/browser_pb2.py b/agent-node/src/protos/browser_pb2.py new file mode 100644 index 0000000..d528e2c --- /dev/null +++ b/agent-node/src/protos/browser_pb2.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: browser.proto +# Protobuf Python Version: 4.25.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rbrowser.proto\x12\x07\x62rowser\"K\n\x0fNavigateRequest\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x12\n\nsession_id\x18\x02 \x01(\t\x12\x17\n\x0fwait_until_idle\x18\x03 \x01(\x08\"J\n\x0c\x43lickRequest\x12\x10\n\x08selector\x18\x01 \x01(\t\x12\x12\n\nsession_id\x18\x02 \x01(\t\x12\t\n\x01x\x18\x03 \x01(\x05\x12\t\n\x01y\x18\x04 \x01(\x05\"V\n\x0bTypeRequest\x12\x10\n\x08selector\x18\x01 \x01(\t\x12\x0c\n\x04text\x18\x02 \x01(\t\x12\x12\n\nsession_id\x18\x03 \x01(\t\x12\x13\n\x0bpress_enter\x18\x04 \x01(\x08\"4\n\x0cHoverRequest\x12\x10\n\x08selector\x18\x01 \x01(\t\x12\x12\n\nsession_id\x18\x02 \x01(\t\"W\n\rScrollRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x0f\n\x07\x64\x65lta_x\x18\x02 \x01(\x05\x12\x0f\n\x07\x64\x65lta_y\x18\x03 \x01(\x05\x12\x10\n\x08selector\x18\x04 \x01(\t\"1\n\x0b\x45valRequest\x12\x0e\n\x06script\x18\x01 \x01(\t\x12\x12\n\nsession_id\x18\x02 \x01(\t\"l\n\x0fSnapshotRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12include_screenshot\x18\x02 \x01(\x08\x12\x13\n\x0binclude_dom\x18\x03 \x01(\x08\x12\x14\n\x0cinclude_a11y\x18\x04 \x01(\x08\"\"\n\x0c\x43loseRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\" \n\rCloseResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"j\n\x14ParallelFetchRequest\x12\x0c\n\x04urls\x18\x01 \x03(\t\x12\x12\n\nsession_id\x18\x02 \x01(\t\x12\x16\n\x0emax_concurrent\x18\x03 \x01(\x05\x12\x18\n\x10\x65xtract_markdown\x18\x04 \x01(\x08\"\xb9\x01\n\x15ParallelFetchResponse\x12;\n\x07results\x18\x01 \x03(\x0b\x32*.browser.ParallelFetchResponse.FetchResult\x1a\x63\n\x0b\x46\x65tchResult\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\r\n\x05title\x18\x02 \x01(\t\x12\x18\n\x10\x63ontent_markdown\x18\x03 \x01(\t\x12\x0f\n\x07success\x18\x04 \x01(\x08\x12\r\n\x05\x65rror\x18\x05 \x01(\t\"\xbb\x01\n\x0f\x42rowserResponse\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\r\n\x05title\x18\x03 \x01(\t\x12\x0e\n\x06status\x18\x04 \x01(\t\x12\x15\n\rerror_message\x18\x05 \x01(\t\x12\x10\n\x08\x64om_path\x18\x06 \x01(\t\x12\x17\n\x0fscreenshot_path\x18\x07 \x01(\t\x12\x11\n\ta11y_path\x18\x08 \x01(\t\x12\x13\n\x0b\x65val_result\x18\t \x01(\t2\xc6\x04\n\x0e\x42rowserService\x12>\n\x08Navigate\x12\x18.browser.NavigateRequest\x1a\x18.browser.BrowserResponse\x12\x38\n\x05\x43lick\x12\x15.browser.ClickRequest\x1a\x18.browser.BrowserResponse\x12\x36\n\x04Type\x12\x14.browser.TypeRequest\x1a\x18.browser.BrowserResponse\x12\x38\n\x05Hover\x12\x15.browser.HoverRequest\x1a\x18.browser.BrowserResponse\x12:\n\x06Scroll\x12\x16.browser.ScrollRequest\x1a\x18.browser.BrowserResponse\x12:\n\x08\x45valuate\x12\x14.browser.EvalRequest\x1a\x18.browser.BrowserResponse\x12\x41\n\x0bGetSnapshot\x12\x18.browser.SnapshotRequest\x1a\x18.browser.BrowserResponse\x12=\n\x0c\x43loseSession\x12\x15.browser.CloseRequest\x1a\x16.browser.CloseResponse\x12N\n\rParallelFetch\x12\x1d.browser.ParallelFetchRequest\x1a\x1e.browser.ParallelFetchResponseb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'browser_pb2', _globals) +if _descriptor._USE_C_DESCRIPTORS == False: + DESCRIPTOR._options = None + _globals['_NAVIGATEREQUEST']._serialized_start=26 + _globals['_NAVIGATEREQUEST']._serialized_end=101 + _globals['_CLICKREQUEST']._serialized_start=103 + _globals['_CLICKREQUEST']._serialized_end=177 + _globals['_TYPEREQUEST']._serialized_start=179 + _globals['_TYPEREQUEST']._serialized_end=265 + _globals['_HOVERREQUEST']._serialized_start=267 + _globals['_HOVERREQUEST']._serialized_end=319 + _globals['_SCROLLREQUEST']._serialized_start=321 + _globals['_SCROLLREQUEST']._serialized_end=408 + _globals['_EVALREQUEST']._serialized_start=410 + _globals['_EVALREQUEST']._serialized_end=459 + _globals['_SNAPSHOTREQUEST']._serialized_start=461 + _globals['_SNAPSHOTREQUEST']._serialized_end=569 + _globals['_CLOSEREQUEST']._serialized_start=571 + _globals['_CLOSEREQUEST']._serialized_end=605 + _globals['_CLOSERESPONSE']._serialized_start=607 + _globals['_CLOSERESPONSE']._serialized_end=639 + _globals['_PARALLELFETCHREQUEST']._serialized_start=641 + _globals['_PARALLELFETCHREQUEST']._serialized_end=747 + _globals['_PARALLELFETCHRESPONSE']._serialized_start=750 + _globals['_PARALLELFETCHRESPONSE']._serialized_end=935 + _globals['_PARALLELFETCHRESPONSE_FETCHRESULT']._serialized_start=836 + _globals['_PARALLELFETCHRESPONSE_FETCHRESULT']._serialized_end=935 + _globals['_BROWSERRESPONSE']._serialized_start=938 + _globals['_BROWSERRESPONSE']._serialized_end=1125 + _globals['_BROWSERSERVICE']._serialized_start=1128 + _globals['_BROWSERSERVICE']._serialized_end=1710 +# @@protoc_insertion_point(module_scope) diff --git a/agent-node/src/protos/browser_pb2_grpc.py b/agent-node/src/protos/browser_pb2_grpc.py new file mode 100644 index 0000000..e592ce5 --- /dev/null +++ b/agent-node/src/protos/browser_pb2_grpc.py @@ -0,0 +1,330 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc + +from protos import browser_pb2 as browser__pb2 + + +class BrowserServiceStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.Navigate = channel.unary_unary( + '/browser.BrowserService/Navigate', + request_serializer=browser__pb2.NavigateRequest.SerializeToString, + response_deserializer=browser__pb2.BrowserResponse.FromString, + ) + self.Click = channel.unary_unary( + '/browser.BrowserService/Click', + request_serializer=browser__pb2.ClickRequest.SerializeToString, + response_deserializer=browser__pb2.BrowserResponse.FromString, + ) + self.Type = channel.unary_unary( + '/browser.BrowserService/Type', + request_serializer=browser__pb2.TypeRequest.SerializeToString, + response_deserializer=browser__pb2.BrowserResponse.FromString, + ) + self.Hover = channel.unary_unary( + '/browser.BrowserService/Hover', + request_serializer=browser__pb2.HoverRequest.SerializeToString, + response_deserializer=browser__pb2.BrowserResponse.FromString, + ) + self.Scroll = channel.unary_unary( + '/browser.BrowserService/Scroll', + request_serializer=browser__pb2.ScrollRequest.SerializeToString, + response_deserializer=browser__pb2.BrowserResponse.FromString, + ) + self.Evaluate = channel.unary_unary( + '/browser.BrowserService/Evaluate', + request_serializer=browser__pb2.EvalRequest.SerializeToString, + response_deserializer=browser__pb2.BrowserResponse.FromString, + ) + self.GetSnapshot = channel.unary_unary( + '/browser.BrowserService/GetSnapshot', + request_serializer=browser__pb2.SnapshotRequest.SerializeToString, + response_deserializer=browser__pb2.BrowserResponse.FromString, + ) + self.CloseSession = channel.unary_unary( + '/browser.BrowserService/CloseSession', + request_serializer=browser__pb2.CloseRequest.SerializeToString, + response_deserializer=browser__pb2.CloseResponse.FromString, + ) + self.ParallelFetch = channel.unary_unary( + '/browser.BrowserService/ParallelFetch', + request_serializer=browser__pb2.ParallelFetchRequest.SerializeToString, + response_deserializer=browser__pb2.ParallelFetchResponse.FromString, + ) + + +class BrowserServiceServicer(object): + """Missing associated documentation comment in .proto file.""" + + def Navigate(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Click(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Type(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Hover(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Scroll(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Evaluate(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetSnapshot(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CloseSession(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ParallelFetch(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_BrowserServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'Navigate': grpc.unary_unary_rpc_method_handler( + servicer.Navigate, + request_deserializer=browser__pb2.NavigateRequest.FromString, + response_serializer=browser__pb2.BrowserResponse.SerializeToString, + ), + 'Click': grpc.unary_unary_rpc_method_handler( + servicer.Click, + request_deserializer=browser__pb2.ClickRequest.FromString, + response_serializer=browser__pb2.BrowserResponse.SerializeToString, + ), + 'Type': grpc.unary_unary_rpc_method_handler( + servicer.Type, + request_deserializer=browser__pb2.TypeRequest.FromString, + response_serializer=browser__pb2.BrowserResponse.SerializeToString, + ), + 'Hover': grpc.unary_unary_rpc_method_handler( + servicer.Hover, + request_deserializer=browser__pb2.HoverRequest.FromString, + response_serializer=browser__pb2.BrowserResponse.SerializeToString, + ), + 'Scroll': grpc.unary_unary_rpc_method_handler( + servicer.Scroll, + request_deserializer=browser__pb2.ScrollRequest.FromString, + response_serializer=browser__pb2.BrowserResponse.SerializeToString, + ), + 'Evaluate': grpc.unary_unary_rpc_method_handler( + servicer.Evaluate, + request_deserializer=browser__pb2.EvalRequest.FromString, + response_serializer=browser__pb2.BrowserResponse.SerializeToString, + ), + 'GetSnapshot': grpc.unary_unary_rpc_method_handler( + servicer.GetSnapshot, + request_deserializer=browser__pb2.SnapshotRequest.FromString, + response_serializer=browser__pb2.BrowserResponse.SerializeToString, + ), + 'CloseSession': grpc.unary_unary_rpc_method_handler( + servicer.CloseSession, + request_deserializer=browser__pb2.CloseRequest.FromString, + response_serializer=browser__pb2.CloseResponse.SerializeToString, + ), + 'ParallelFetch': grpc.unary_unary_rpc_method_handler( + servicer.ParallelFetch, + request_deserializer=browser__pb2.ParallelFetchRequest.FromString, + response_serializer=browser__pb2.ParallelFetchResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'browser.BrowserService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class BrowserService(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def Navigate(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/browser.BrowserService/Navigate', + browser__pb2.NavigateRequest.SerializeToString, + browser__pb2.BrowserResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def Click(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/browser.BrowserService/Click', + browser__pb2.ClickRequest.SerializeToString, + browser__pb2.BrowserResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def Type(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/browser.BrowserService/Type', + browser__pb2.TypeRequest.SerializeToString, + browser__pb2.BrowserResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def Hover(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/browser.BrowserService/Hover', + browser__pb2.HoverRequest.SerializeToString, + browser__pb2.BrowserResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def Scroll(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/browser.BrowserService/Scroll', + browser__pb2.ScrollRequest.SerializeToString, + browser__pb2.BrowserResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def Evaluate(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/browser.BrowserService/Evaluate', + browser__pb2.EvalRequest.SerializeToString, + browser__pb2.BrowserResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def GetSnapshot(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/browser.BrowserService/GetSnapshot', + browser__pb2.SnapshotRequest.SerializeToString, + browser__pb2.BrowserResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def CloseSession(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/browser.BrowserService/CloseSession', + browser__pb2.CloseRequest.SerializeToString, + browser__pb2.CloseResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def ParallelFetch(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/browser.BrowserService/ParallelFetch', + browser__pb2.ParallelFetchRequest.SerializeToString, + browser__pb2.ParallelFetchResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/ai-hub/app/api/routes/sessions.py b/ai-hub/app/api/routes/sessions.py index 3fcbc60..9b04867 100644 --- a/ai-hub/app/api/routes/sessions.py +++ b/ai-hub/app/api/routes/sessions.py @@ -212,8 +212,37 @@ session = db.query(models.Session).filter(models.Session.id == session_id).first() if not session: raise HTTPException(status_code=404, detail="Session not found.") + session.is_archived = True + sync_workspace_id = session.sync_workspace_id db.commit() + + # M6: Immediately broadcast PURGE to all connected nodes + if sync_workspace_id: + try: + orchestrator = getattr(services, "orchestrator", None) + if orchestrator: + import app.protos.agent_pb2 as agent_pb2 + live_nodes = orchestrator.registry.list_nodes() + for node in live_nodes: + node.send_message(agent_pb2.ServerTaskMessage( + file_sync=agent_pb2.FileSyncMessage( + session_id=sync_workspace_id, + control=agent_pb2.SyncControl( + action=agent_pb2.SyncControl.PURGE, + path="" + ) + ) + ), priority=0) + + # Hub local purge + mirror_path = os.path.join("/app/data/mirrors", sync_workspace_id) + if os.path.exists(mirror_path): + shutil.rmtree(mirror_path) + except Exception as e: + import logging + logging.exception(f"[📁⚠️] Fast local purge failed for {sync_workspace_id}: {e}") + return {"message": "Session deleted successfully."} except HTTPException: raise @@ -225,11 +254,46 @@ try: sessions = db.query(models.Session).filter( models.Session.user_id == user_id, - models.Session.feature_name == feature_name + models.Session.feature_name == feature_name, + models.Session.is_archived == False ).all() + + workspaces_to_purge = [] for session in sessions: session.is_archived = True + if session.sync_workspace_id: + workspaces_to_purge.append(session.sync_workspace_id) + db.commit() + + # M6: Immediately broadcast PURGE to all connected nodes + if workspaces_to_purge: + try: + orchestrator = getattr(services, "orchestrator", None) + if orchestrator: + import app.protos.agent_pb2 as agent_pb2 + live_nodes = orchestrator.registry.list_nodes() + for node in live_nodes: + for wid in workspaces_to_purge: + node.send_message(agent_pb2.ServerTaskMessage( + file_sync=agent_pb2.FileSyncMessage( + session_id=wid, + control=agent_pb2.SyncControl( + action=agent_pb2.SyncControl.PURGE, + path="" + ) + ) + ), priority=0) + + # Hub local purge + for wid in workspaces_to_purge: + mirror_path = os.path.join("/app/data/mirrors", wid) + if os.path.exists(mirror_path): + shutil.rmtree(mirror_path) + except Exception as e: + import logging + logging.exception(f"[📁⚠️] Fast local bulk purge failed: {e}") + return {"message": "All sessions deleted successfully."} except Exception as e: raise HTTPException(status_code=500, detail=f"Failed to delete all sessions: {e}") diff --git a/ai-hub/app/core/grpc/services/grpc_server.py b/ai-hub/app/core/grpc/services/grpc_server.py index abdc8cb..e741fbc 100644 --- a/ai-hub/app/core/grpc/services/grpc_server.py +++ b/ai-hub/app/core/grpc/services/grpc_server.py @@ -62,11 +62,9 @@ def _mirror_cleanup_loop(self): """Periodically purges ghost mirrors for archived sessions.""" + time.sleep(10) # Initial quick cleanup shortly after boot while True: try: - # Run every 10 minutes to avoid high disk I/O - time.sleep(600) - from app.db.session import get_db_session from app.db.models import Session @@ -85,9 +83,26 @@ # M6: Distributed Lock Scavenging for sid in active_ids: self.mirror.purge_stale_locks(sid, ttl=60) # 1-minute TTL + + # M6: Broadcast CLEANUP to all connected nodes to do local cleanup + live_nodes = self.registry.list_nodes() + for _node in live_nodes: + try: + _node.send_message(agent_pb2.ServerTaskMessage( + file_sync=agent_pb2.FileSyncMessage( + session_id="system", + control=agent_pb2.SyncControl( + action=agent_pb2.SyncControl.CLEANUP, + request_paths=active_ids + ) + ) + ), priority=0) + except Exception as e: + print(f"[📁⚠️] Failed to broadcast CLEANUP to {_node.node_id}: {e}") except Exception as e: print(f"[📁⚠️] Mirror Cleanup Thread Error: {e}") + time.sleep(600) def _broadcast_work(self, _): """Pushes work notifications to all active nodes.""" diff --git a/frontend/src/features/skills/components/SkillsPageContent.js b/frontend/src/features/skills/components/SkillsPageContent.js index 17c2332..be24b0f 100644 --- a/frontend/src/features/skills/components/SkillsPageContent.js +++ b/frontend/src/features/skills/components/SkillsPageContent.js @@ -11,6 +11,8 @@ setSearchQuery, activeFilter, setActiveFilter, + showSystemSkills, + setShowSystemSkills, viewingDoc, setViewingDoc, showRawDoc, @@ -90,6 +92,15 @@ className="w-full bg-gray-100/50 dark:bg-gray-700/50 border-none rounded-2xl py-3 pl-12 pr-4 focus:ring-2 focus:ring-indigo-500 outline-none transition-all placeholder-gray-400 text-sm" /> +
+ +
{/* --- Skill Grid --- */} diff --git a/frontend/src/features/skills/pages/SkillsPage.js b/frontend/src/features/skills/pages/SkillsPage.js index ee315b6..e4ef876 100644 --- a/frontend/src/features/skills/pages/SkillsPage.js +++ b/frontend/src/features/skills/pages/SkillsPage.js @@ -8,6 +8,7 @@ const [error, setError] = useState(null); const [searchQuery, setSearchQuery] = useState(''); const [activeFilter, setActiveFilter] = useState('all'); // all, system, mine, group + const [showSystemSkills, setShowSystemSkills] = useState(false); const [viewingDoc, setViewingDoc] = useState(null); const [showRawDoc, setShowRawDoc] = useState(false); @@ -51,21 +52,23 @@ (skill.description || '').toLowerCase().includes(searchQuery.toLowerCase()); if (!matchesSearch) return false; + if (!showSystemSkills && skill.is_system && activeFilter !== 'system') return false; + if (activeFilter === 'all') return true; if (activeFilter === 'system') return skill.is_system; if (activeFilter === 'mine') return !skill.is_system && skill.owner_id === user?.id; if (activeFilter === 'group') return skill.group_id && !skill.is_system; return true; }); - }, [skills, searchQuery, activeFilter, user]); + }, [skills, searchQuery, activeFilter, user, showSystemSkills]); const stats = useMemo(() => ({ - total: skills.length, + total: skills.filter(s => showSystemSkills || activeFilter === 'system' || !s.is_system).length, system: skills.filter(s => s.is_system).length, mine: skills.filter(s => !s.is_system && s.owner_id === user?.id).length, group: skills.filter(s => s.group_id).length, enabled: skills.filter(s => s.is_enabled).length - }), [skills, user]); + }), [skills, user, showSystemSkills, activeFilter]); const openModal = (skill = null) => { if (skill) { @@ -172,6 +175,8 @@ setSearchQuery, activeFilter, setActiveFilter, + showSystemSkills, + setShowSystemSkills, viewingDoc, setViewingDoc, showRawDoc,