Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
172 changes: 169 additions & 3 deletions proto/bottles.proto
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,187 @@ syntax = "proto3";

package bottles;

service Bottles {
// --- Services ---

service Management {
// Lifecycle
rpc CreateBottle (CreateBottleRequest) returns (Bottle);
rpc DeleteBottle (DeleteBottleRequest) returns (ResultResponse);
rpc ListBottles (ListBottlesRequest) returns (ListBottlesResponse);
rpc GetBottle (GetBottleRequest) returns (Bottle);

// Power Management (Agent Lifecycle)
rpc StartBottle (BottleRequest) returns (ResultResponse);
rpc StopBottle (BottleRequest) returns (ResultResponse);
rpc RestartBottle (BottleRequest) returns (ResultResponse);
}

service Configuration {
rpc GetConfig (BottleRequest) returns (BottleConfig);
rpc UpdateConfig (UpdateConfigRequest) returns (BottleConfig);
rpc GetEnvironmentVariables (BottleRequest) returns (EnvironmentVariables);
rpc SetEnvironmentVariables (SetEnvironmentVariablesRequest) returns (ResultResponse);
}

service Installer {
rpc InstallComponent (InstallComponentRequest) returns (stream InstallProgress);
rpc ListComponents (ListComponentsRequest) returns (ListComponentsResponse);
rpc UninstallComponent (ComponentRequest) returns (ResultResponse);
}

service Runtime {
rpc LaunchProgram (LaunchProgramRequest) returns (LaunchProgramResponse);
rpc TerminateProgram (TerminateProgramRequest) returns (ResultResponse);
rpc ListRunningProcesses (BottleRequest) returns (ProcessList);
}

service System {
rpc Health (HealthRequest) returns (HealthResponse);
rpc Notify (NotifyRequest) returns (NotifyResponse);
}

message HealthRequest {}
// --- Enums ---

enum BottleType {
Custom = 0;
Gaming = 1;
Software = 2;
}

// --- Messages ---

message ResultResponse {
bool success = 1;
string error_message = 2; // Optional, set if success is false
}

// Requests
message CreateBottleRequest {
string name = 1;
BottleType type = 2;
string runner = 3; // Optional implementation/runner override
}

message DeleteBottleRequest {
string name = 1;
}

message ListBottlesRequest {}

message ListBottlesResponse {
repeated Bottle bottles = 1;
}

message GetBottleRequest {
string name = 1;
}

message BottleRequest {
string name = 1;
}

// Entities
message Bottle {
string name = 1;
string path = 2;
BottleType type = 3;
bool active = 4; // True if the Agent is running for this bottle
BottleConfig config = 5;
}

message BottleConfig {
string runner = 1;
map<string, string> settings = 2;
}

message EnvironmentVariables {
map<string, string> variables = 1;
}

message SetEnvironmentVariablesRequest {
string bottle_name = 1;
map<string, string> variables = 2;
}

message UpdateConfigRequest {
string bottle_name = 1;
BottleConfig config = 2;
}

// Components
message InstallComponentRequest {
string bottle_name = 1;
string component_id = 2; // e.g., "dxvk", "dotnet48"
string version = 3; // Optional, uses 'latest' if empty
}

message InstallProgress {
int32 percentage = 1;
string status_message = 2;
bool data_complete = 3;
}

message ListComponentsRequest {
string filter_type = 1; // Optional: "runner", "dependency", "layer"
}

message ListComponentsResponse {
repeated Component components = 1;
}

message ComponentRequest {
string bottle_name = 1;
string component_id = 2;
}

message Component {
string id = 1;
string name = 2;
string version = 3;
string type = 4;
}

// Runtime
message LaunchProgramRequest {
string bottle_name = 1;
string program_path = 2; // Path inside the bottle or mapped absolute path
repeated string arguments = 3;
string work_dir = 4;
map<string, string> env_overrides = 5;
bool run_in_terminal = 6;
}

message LaunchProgramResponse {
uint32 pid = 1;
bool success = 2;
}

message TerminateProgramRequest {
string bottle_name = 1;
uint32 pid = 2;
}

message ProcessList {
repeated ProcessInfo processes = 1;
}

message ProcessInfo {
uint32 pid = 1;
string name = 2;
uint32 threads = 3;
// Memory, CPU could be added here
}

// System
message HealthRequest {}
message HealthResponse {
bool ok = 1;
string version = 2;
}

message NotifyRequest {
string message = 1;
}

message NotifyResponse {
bool success = 1;
}
132 changes: 107 additions & 25 deletions proto/winebridge.proto
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,108 @@ syntax = "proto3";
package winebridge;

service WineBridge {
// Basic Communication
rpc Message (MessageRequest) returns (MessageResponse);

// Process Management
rpc RunningProcesses (RunningProcessesRequest) returns (RunningProcessesResponse);
rpc CreateProcess (CreateProcessRequest) returns (CreateProcessResponse);
rpc KillProcess (KillProcessRequest) returns (KillProcessResponse);

// Registry Management
rpc CreateRegistryKey (CreateRegistryKeyRequest) returns (MessageResponse);
rpc DeleteRegistryKey (DeleteRegistryKeyRequest) returns (MessageResponse);
rpc GetRegistryKey (GetRegistryKeyRequest) returns (RegistryKey);
rpc GetRegistryKeyValue (RegistryKeyRequest) returns (RegistryValue);
rpc SetRegistryKeyValue (SetRegistryKeyValueRequest) returns (MessageResponse);
rpc DeleteRegistryKeyValue (RegistryKeyRequest) returns (MessageResponse);

// File System Access (In-Prefix)
rpc CreateDirectory (FileOperationRequest) returns (FileOperationResponse);
rpc DeleteFile (FileOperationRequest) returns (FileOperationResponse);
rpc CopyFile (CopyMoveRequest) returns (FileOperationResponse);
rpc MoveFile (CopyMoveRequest) returns (FileOperationResponse);
rpc Exists (FileOperationRequest) returns (ExistsResponse);
rpc ListDirectory (FileOperationRequest) returns (ListDirectoryResponse);

// System / Lifecycle
rpc Shutdown (ShutdownRequest) returns (MessageResponse); // Terminates the Agent
rpc Wineboot (WinebootRequest) returns (MessageResponse); // Simulates wineboot
rpc GetDriveInfo (DriveInfoRequest) returns (DriveInfoResponse);
}

// --- Messages ---

// General
message MessageRequest {
string message = 1;
}

message MessageResponse {
bool success = 1;
optional string error = 2;
}

// System
message ShutdownRequest {}

enum WinebootMode {
NORMAL = 0;
SHUTDOWN = 1;
KILL = 2;
}

message WinebootRequest {
WinebootMode mode = 1;
}

message DriveInfoRequest {}

message DriveInfoResponse {
repeated Drive drives = 1;
}

message Drive {
string letter = 1; // "C", "Z"
string label = 2;
uint64 total_space = 3;
uint64 free_space = 4;
}

// Process
message Process {
uint32 pid = 1;
string name = 2;
uint32 threads = 3;
}

message RunningProcessesRequest {}

message RunningProcessesResponse {
repeated Process processes = 1;
}

message CreateProcessRequest {
string command = 1;
repeated string args = 2;
string work_dir = 3; // Optional working directory
map<string, string> env = 4; // Environment variables
bool run_elevated = 5; // Simulates "Run as Admin" behavior if possible
}

message CreateProcessResponse {
uint32 pid = 1;
}

message KillProcessRequest {
uint32 pid = 1;
}

message KillProcessResponse {
bool success = 1;
}

// Registry
enum RegistryValueType {
REG_NONE = 0;
REG_BINARY = 1;
Expand Down Expand Up @@ -68,39 +157,32 @@ message DeleteRegistryKeyRequest {
string subkey = 2;
}

message MessageRequest {
string message = 1;
// File System
message FileOperationRequest {
string path = 1;
}

message MessageResponse {
bool success = 1;
message CopyMoveRequest {
string source = 1;
string destination = 2;
}

message Process {
uint32 pid = 1;
string name = 2;
uint32 threads = 3;
}

message RunningProcessesRequest {
}

message RunningProcessesResponse {
repeated Process processes = 1;
}

message CreateProcessRequest {
string command = 1;
repeated string args = 2;
message FileOperationResponse {
bool success = 1;
string error = 2;
}

message CreateProcessResponse {
uint32 pid = 1;
message ExistsResponse {
bool exists = 1;
bool is_dir = 2;
}

message KillProcessRequest {
uint32 pid = 1;
message ListDirectoryResponse {
repeated FileInfo files = 1;
}

message KillProcessResponse {
message FileInfo {
string name = 1;
bool is_dir = 2;
uint64 size = 3;
}
Loading