syntax = "proto3";

package host;

import "cline/common.proto";

option go_package = "github.com/cline/grpc-go/host";
option java_multiple_files = true;
option java_package = "bot.cline.host.proto";

// Provides methods for working with the user's environment.
service EnvService {
  // Writes text to the system clipboard.
  rpc clipboardWriteText(cline.StringRequest) returns (cline.Empty);

  // Reads text from the system clipboard.
  rpc clipboardReadText(cline.EmptyRequest) returns (cline.String);

  // Returns the name and version of the host IDE or environment.
  rpc getHostVersion(cline.EmptyRequest) returns (GetHostVersionResponse);

  // Returns a URI that will redirect to the host environment.
  // e.g. vscode://saoudrizwan.claude-dev, idea://, pycharm://, etc.
  // If the host does not support URIs it should return empty.
  rpc getIdeRedirectUri(cline.EmptyRequest) returns (cline.String);

  // Returns the telemetry settings of the host environment. This may return UNSUPPORTED
  // if the host does not specify telemetry settings for the plugin.
  rpc getTelemetrySettings(cline.EmptyRequest) returns (GetTelemetrySettingsResponse);

  // Returns events when the telemetry settings change.
  rpc subscribeToTelemetrySettings(cline.EmptyRequest) returns (stream TelemetrySettingsEvent);

  // Initiates a graceful shutdown of the host bridge service.
  rpc shutdown(cline.EmptyRequest) returns (cline.Empty);
}

message GetHostVersionResponse {
  // The name of the host platform, e.g VSCode, IntelliJ Ultimate Edition, etc.
  optional string platform = 1;
  // The version of the host platform, e.g. 1.103.0 for VSCode, or 2025.1.1.1 for JetBrains IDEs.
  optional string version = 2;
  // The type of the cline host environment, e.g. 'VSCode Extension', 'Cline for JetBrains', 'CLI'
  // This is different from the platform because there are many JetBrains IDEs, but they all use the same
  // plugin.
  optional string cline_type = 3;
  // The version of the cline host environment, e.g. 33.2.10 for extension, or 1.0.6 for JetBrains.
  optional string cline_version = 4;
}

enum Setting {
  UNSUPPORTED = 0; // This host does not support this setting.
  ENABLED = 1;
  DISABLED = 2;
}
message GetTelemetrySettingsResponse {
  Setting is_enabled = 1;
  optional string error_level = 2;
}

message TelemetrySettingsEvent {
  Setting is_enabled = 1;
  optional string error_level = 2;
}
