syntax = "proto3";

import "action.proto";
import "event.proto";
import "file.proto";
import "command.proto";
import "message.proto";
import "resize.proto";
import "plugin_permission.proto";
import "input_mode.proto";
import "key.proto";

package api.plugin_command;

enum CommandName {
  Subscribe = 0;
  Unsubscribe = 1;
  SetSelectable = 2;
  GetPluginIds = 3;
  GetZellijVersion = 4;
  OpenFile = 5;
  OpenFileFloating = 6;
  OpenTerminal = 7;
  OpenTerminalFloating = 8;
  OpenCommandPane = 9;
  OpenCommandPaneFloating = 10;
  SwitchTabTo = 11;
  SetTimeout = 12;
  ExecCmd = 13;
  PostMessageTo = 14;
  PostMessageToPlugin = 15;
  HideSelf = 16;
  ShowSelf = 17;
  SwitchToMode = 18;
  NewTabsWithLayout = 19;
  NewTab = 20;
  GoToNextTab = 21;
  GoToPreviousTab = 22;
  Resize = 23;
  ResizeWithDirection = 24;
  FocusNextPane = 25;
  FocusPreviousPane = 26;
  MoveFocus = 27;
  MoveFocusOrTab = 28;
  Detach = 29;
  EditScrollback = 30;
  Write = 31;
  WriteChars = 32;
  ToggleTab = 33;
  MovePane = 34;
  MovePaneWithDirection = 35;
  ClearScreen = 36;
  ScrollUp = 37;
  ScrollDown = 38;
  ScrollToTop = 39;
  ScrollToBottom = 40;
  PageScrollUp = 41;
  PageScrollDown = 42;
  ToggleFocusFullscreen = 43;
  TogglePaneFrames = 44;
  TogglePaneEmbedOrEject = 45;
  UndoRenamePane = 46;
  CloseFocus = 47;
  ToggleActiveTabSync = 48;
  CloseFocusedTab = 49;
  UndoRenameTab = 50;
  QuitZellij = 51;
  PreviousSwapLayout = 52;
  NextSwapLayout = 53;
  GoToTabName = 54;
  FocusOrCreateTab = 55;
  GoToTab = 56;
  StartOrReloadPlugin = 57;
  CloseTerminalPane = 58;
  ClosePluginPane = 59;
  FocusTerminalPane = 60;
  FocusPluginPane = 61;
  RenameTerminalPane = 62;
  RenamePluginPane = 63;
  RenameTab = 64;
  ReportCrash = 65;
  RequestPluginPermissions = 66;
  SwitchSession = 67;
  OpenTerminalInPlace = 68;
  OpenCommandInPlace = 69;
  OpenFileInPlace = 70;
  RunCommand = 71;
  WebRequest = 72;
  DeleteDeadSession = 73;
  DeleteAllDeadSessions = 74;
  RenameSession = 75;
  UnblockCliPipeInput = 76;
  BlockCliPipeInput = 77;
  CliPipeOutput = 78;
  MessageToPlugin = 79;
  DisconnectOtherClients = 80;
  KillSessions = 81;
  ScanHostFolder = 82;
  WatchFilesystem = 83;
  DumpSessionLayout = 84;
  CloseSelf = 85;
  NewTabsWithLayoutInfo = 86;
  Reconfigure = 87;
  HidePaneWithId = 88;
  ShowPaneWithId = 89;
  OpenCommandPaneBackground = 90;
  RerunCommandPane = 91;
  ResizePaneIdWithDirection = 92;
  EditScrollbackForPaneWithId = 93;
  WriteToPaneId = 94;
  WriteCharsToPaneId = 95;
  MovePaneWithPaneId = 96;
  MovePaneWithPaneIdInDirection = 97;
  ClearScreenForPaneId = 98;
  ScrollUpInPaneId = 99;
  ScrollDownInPaneId = 100;
  ScrollToTopInPaneId = 101;
  ScrollToBottomInPaneId = 102;
  PageScrollUpInPaneId = 103;
  PageScrollDownInPaneId = 104;
  TogglePaneIdFullscreen = 105;
  TogglePaneEmbedOrEjectForPaneId = 106;
  CloseTabWithIndex = 107;
  BreakPanesToNewTab = 108;
  BreakPanesToTabWithIndex = 109;
  ReloadPlugin = 110;
  LoadNewPlugin = 111;
  RebindKeys = 112;
  ListClients = 113;
  ChangeHostFolder = 114;
  SetFloatingPanePinned = 115;
  StackPanes = 116;
  ChangeFloatingPanesCoordinates = 117;
  OpenCommandPaneNearPlugin = 118;
  OpenTerminalNearPlugin = 119;
  OpenTerminalFloatingNearPlugin = 120;
  OpenTerminalInPlaceOfPlugin = 121;
  OpenCommandPaneFloatingNearPlugin = 122;
  OpenCommandPaneInPlaceOfPlugin = 123;
  OpenFileNearPlugin = 124;
  OpenFileFloatingNearPlugin = 125;
  OpenFileInPlaceOfPlugin = 126;
  StartWebServer = 127;
  GroupAndUngroupPanes = 128;
  HighlightAndUnhighlightPanes = 129;
  CloseMultiplePanes = 130;
  FloatMultiplePanes = 131;
  EmbedMultiplePanes = 132;
  ShareCurrentSession = 133;
  StopSharingCurrentSession = 134;
  StopWebServer = 135;
  QueryWebServerStatus = 136;
  SetSelfMouseSelectionSupport = 137;
  GenerateWebLoginToken = 138;
  RevokeWebLoginToken = 139;
  ListWebLoginTokens = 140;
  RevokeAllWebLoginTokens = 141;
  RenameWebLoginToken = 142;
  InterceptKeyPresses = 143;
  ClearKeyPressesIntercepts = 144;
  ReplacePaneWithExistingPane = 155;
  GetPaneScrollback = 163;
  RunAction = 164;
  ShowCursor = 169;
  CopyToClipboard = 170;
  SendSigintToPaneId = 171;
  SendSigkillToPaneId = 172;
  GetPanePid = 173;
  OverrideLayout = 174;
  SaveLayout = 175;
  DeleteLayout = 176;
  EditLayout = 177;
  GenerateRandomName = 178;
  DumpLayout = 179;
  ParseLayout = 180;
  RenameLayout = 181;
  GetLayoutDir = 182;
  GetFocusedPaneInfo = 183;
  TogglePaneBorderless = 184;
  SetPaneBorderless = 185;
  SaveSession = 186;
  CurrentSessionLastSavedTime = 187;
  GetPaneInfo = 188;
  GetTabInfo = 189;
  GetPaneRunningCommand = 190;
  GetPaneCwd = 191;
  SwitchTabToId = 192;
  GoToTabWithId = 193;
  CloseTabWithId = 194;
  RenameTabWithId = 195;
  BreakPanesToTabWithId = 196;
  GetSessionEnvironmentVariables = 197;
  OpenCommandPaneInNewTab = 198;
  OpenPluginPaneInNewTab = 199;
  OpenEditorPaneInNewTab = 200;
  OpenCommandPaneInPlaceOfPaneId = 201;
  OpenTerminalPaneInPlaceOfPaneId = 202;
  OpenEditPaneInPlaceOfPaneId = 203;
  HideFloatingPanes = 204;
  ShowFloatingPanes = 205;
  SetPaneColor = 206;
  SetPaneRegexHighlights = 207;
  ClearPaneHighlights = 208;
  OpenPluginPaneFloating = 209;
  ListWindowsVolumes = 210;
  GetSessionList = 211;
}

message PluginCommand {
  CommandName name = 1;
  oneof payload {
    SubscribePayload subscribe_payload = 2;
    UnsubscribePayload unsubscribe_payload = 3;
    bool set_selectable_payload = 4;
    OpenFilePayload open_file_payload = 5;
    OpenFilePayload open_file_floating_payload = 6;
    OpenFilePayload open_terminal_payload = 7;
    OpenFilePayload open_terminal_floating_payload = 8;
    OpenCommandPanePayload open_command_pane_payload = 9;
    OpenCommandPanePayload open_command_pane_floating_payload = 10;
    SwitchTabToPayload switch_tab_to_payload = 11;
    SetTimeoutPayload set_timeout_payload = 12;
    ExecCmdPayload exec_cmd_payload = 13;
    PluginMessagePayload post_message_to_payload = 14;
    PluginMessagePayload post_message_to_plugin_payload = 15;
    bool show_self_payload = 16;
    action.SwitchToModePayload switch_to_mode_payload = 17;
    string new_tabs_with_layout_payload = 18;
    ResizePayload resize_payload = 19;
    ResizePayload resize_with_direction_payload = 20;
    MovePayload move_focus_payload = 21;
    MovePayload move_focus_or_tab_payload = 22;
    bytes write_payload = 23;
    string write_chars_payload = 24;
    MovePayload move_pane_with_direction_payload = 25;
    string go_to_tab_name_payload = 26;
    string focus_or_create_tab_payload = 27;
    uint32 go_to_tab_payload = 28;
    string start_or_reload_plugin_payload = 29;
    uint32 close_terminal_pane_payload = 30;
    uint32 close_plugin_pane_payload = 31;
    action.PaneIdAndShouldFloat focus_terminal_pane_payload = 32;
    action.PaneIdAndShouldFloat focus_plugin_pane_payload = 33;
    IdAndNewName rename_terminal_pane_payload = 34;
    IdAndNewName rename_plugin_pane_payload = 35;
    IdAndNewName rename_tab_payload = 36;
    string report_crash_payload = 37;
    RequestPluginPermissionPayload request_plugin_permission_payload = 38;
    SwitchSessionPayload switch_session_payload = 39;
    OpenFilePayload open_file_in_place_payload = 40;
    OpenFilePayload open_terminal_in_place_payload = 41;
    OpenCommandPanePayload open_command_pane_in_place_payload = 42;
    RunCommandPayload run_command_payload = 43;
    WebRequestPayload web_request_payload = 44;
    string delete_dead_session_payload = 45;
    string rename_session_payload = 46;
    string unblock_cli_pipe_input_payload = 47;
    string block_cli_pipe_input_payload = 48;
    CliPipeOutputPayload cli_pipe_output_payload = 49;
    MessageToPluginPayload message_to_plugin_payload = 50;
    KillSessionsPayload kill_sessions_payload = 60;
    string scan_host_folder_payload = 61;
    NewTabsWithLayoutInfoPayload new_tabs_with_layout_info_payload = 62;
    ReconfigurePayload reconfigure_payload = 63;
    HidePaneWithIdPayload hide_pane_with_id_payload = 64;
    ShowPaneWithIdPayload show_pane_with_id_payload = 65;
    OpenCommandPanePayload open_command_pane_background_payload = 66;
    RerunCommandPanePayload rerun_command_pane_payload = 67;
    ResizePaneIdWithDirectionPayload resize_pane_id_with_direction_payload = 68;
    EditScrollbackForPaneWithIdPayload edit_scrollback_for_pane_with_id_payload = 69;
    WriteToPaneIdPayload write_to_pane_id_payload = 70;
    WriteCharsToPaneIdPayload write_chars_to_pane_id_payload = 71;
    MovePaneWithPaneIdPayload move_pane_with_pane_id_payload = 72;
    MovePaneWithPaneIdInDirectionPayload move_pane_with_pane_id_in_direction_payload = 73;
    ClearScreenForPaneIdPayload clear_screen_for_pane_id_payload = 74;
    ScrollUpInPaneIdPayload scroll_up_in_pane_id_payload = 75;
    ScrollDownInPaneIdPayload scroll_down_in_pane_id_payload = 76;
    ScrollToTopInPaneIdPayload scroll_to_top_in_pane_id_payload = 77;
    ScrollToBottomInPaneIdPayload scroll_to_bottom_in_pane_id_payload = 78;
    PageScrollUpInPaneIdPayload page_scroll_up_in_pane_id_payload = 79;
    PageScrollDownInPaneIdPayload page_scroll_down_in_pane_id_payload = 80;
    TogglePaneIdFullscreenPayload toggle_pane_id_fullscreen_payload = 81;
    TogglePaneEmbedOrEjectForPaneIdPayload toggle_pane_embed_or_eject_for_pane_id_payload = 82;
    CloseTabWithIndexPayload close_tab_with_index_payload = 83;
    BreakPanesToNewTabPayload break_panes_to_new_tab_payload = 84;
    BreakPanesToTabWithIndexPayload break_panes_to_tab_with_index_payload = 85;
    ReloadPluginPayload reload_plugin_payload = 86;
    LoadNewPluginPayload load_new_plugin_payload = 87;
    RebindKeysPayload rebind_keys_payload = 88;
    ChangeHostFolderPayload change_host_folder_payload = 89;
    SetFloatingPanePinnedPayload set_floating_pane_pinned_payload = 90;
    StackPanesPayload stack_panes_payload = 91;
    ChangeFloatingPanesCoordinatesPayload change_floating_panes_coordinates_payload = 92;
    OpenCommandPaneNearPluginPayload open_command_pane_near_plugin_payload = 93;
    OpenTerminalNearPluginPayload open_terminal_near_plugin_payload = 94;
    OpenTerminalFloatingNearPluginPayload open_terminal_floating_near_plugin_payload = 95;
    OpenTerminalInPlaceOfPluginPayload open_terminal_in_place_of_plugin_payload = 96;
    OpenCommandPaneFloatingNearPluginPayload open_command_pane_floating_near_plugin_payload = 97;
    OpenCommandPaneInPlaceOfPluginPayload open_command_pane_in_place_of_plugin_payload = 98;
    OpenFileNearPluginPayload open_file_near_plugin_payload = 99;
    OpenFileFloatingNearPluginPayload open_file_floating_near_plugin_payload = 100;
    OpenFileInPlaceOfPluginPayload open_file_in_place_of_plugin_payload = 101;
    GroupAndUngroupPanesPayload group_and_ungroup_panes_payload = 102;
    HighlightAndUnhighlightPanesPayload highlight_and_unhighlight_panes_payload = 103;
    CloseMultiplePanesPayload close_multiple_panes_payload = 104;
    FloatMultiplePanesPayload float_multiple_panes_payload = 105;
    EmbedMultiplePanesPayload embed_multiple_panes_payload = 106;
    SetSelfMouseSelectionSupportPayload set_self_mouse_selection_support_payload = 107;
    GenerateWebLoginTokenPayload generate_web_login_token_payload = 108;
    RevokeWebLoginTokenPayload revoke_web_login_token_payload = 109;
    RenameWebLoginTokenPayload rename_web_login_token_payload = 110;
    ReplacePaneWithExistingPanePayload replace_pane_with_existing_pane_payload = 111;
    NewTabPayload new_tab_payload = 112;
    GetPaneScrollbackPayload get_pane_scrollback_payload = 113;
    RunActionPayload run_action_payload = 114;
    ShowCursorPayload show_cursor_payload = 119;
    CopyToClipboardPayload copy_to_clipboard_payload = 120;
    PaneId send_sigint_to_pane_id_payload = 121;
    PaneId send_sigkill_to_pane_id_payload = 122;
    GetPanePidPayload get_pane_pid_payload = 123;
    OverrideLayoutPayload override_layout_payload = 124;
    SaveLayoutPayload save_layout_payload = 125;
    DeleteLayoutPayload delete_layout_payload = 126;
    EditLayoutPayload edit_layout_payload = 127;
    GenerateRandomNamePayload generate_random_name_payload = 128;
    DumpLayoutPayload dump_layout_payload = 129;
    ParseLayoutPayload parse_layout_payload = 130;
    RenameLayoutPayload rename_layout_payload = 131;
    GetLayoutDirPayload get_layout_dir_payload = 132;
    DumpSessionLayoutPayload dump_session_layout_payload = 133;
    GetFocusedPaneInfoPayload get_focused_pane_info_payload = 134;
    TogglePaneBorderlessPayload toggle_pane_borderless_payload = 135;
    SetPaneBorderlessPayload set_pane_borderless_payload = 136;
    SaveSessionPayload save_session_payload = 137;
    CurrentSessionLastSavedTimePayload current_session_last_saved_time_payload = 138;
    GetPaneInfoPayload get_pane_info_payload = 139;
    GetTabInfoPayload get_tab_info_payload = 140;
    GetPaneRunningCommandPayload get_pane_running_command_payload = 141;
    GetPaneCwdPayload get_pane_cwd_payload = 142;
    SwitchTabToIdPayload switch_tab_to_id_payload = 143;
    GoToTabWithIdPayload go_to_tab_with_id_payload = 144;
    CloseTabWithIdPayload close_tab_with_id_payload = 145;
    RenameTabWithIdPayload rename_tab_with_id_payload = 146;
    BreakPanesToTabWithIdPayload break_panes_to_tab_with_id_payload = 147;
    GetSessionEnvironmentVariablesPayload get_session_environment_variables_payload = 148;
    OpenCommandPanePayload open_command_pane_in_new_tab_payload = 149;
    OpenPluginPaneInNewTabPayload open_plugin_pane_in_new_tab_payload = 150;
    OpenFilePayload open_editor_pane_in_new_tab_payload = 151;
    OpenCommandPaneInPlaceOfPaneIdPayload open_command_pane_in_place_of_pane_id_payload = 152;
    OpenTerminalPaneInPlaceOfPaneIdPayload open_terminal_pane_in_place_of_pane_id_payload = 153;
    OpenEditPaneInPlaceOfPaneIdPayload open_edit_pane_in_place_of_pane_id_payload = 154;
    HideFloatingPanesPayload hide_floating_panes_payload = 155;
    ShowFloatingPanesPayload show_floating_panes_payload = 156;
    SetPaneColorPayload set_pane_color_payload = 157;
    SetPaneRegexHighlightsPayload set_pane_regex_highlights_payload = 158;
    ClearPaneHighlightsPayload clear_pane_highlights_payload = 159;
    OpenPluginPaneFloatingPayload open_plugin_pane_floating_payload = 160;
    GetSessionListPayload get_session_list_payload = 161;
  }
}

message NewTabPayload {
  optional string name = 1;
  optional string cwd = 2;
}

message DumpSessionLayoutPayload {
  optional uint32 tab_index = 1;
}

message RunActionPayload {
  action.Action action = 1;
  repeated ContextItem context = 2;
}

message ReplacePaneWithExistingPanePayload {
  PaneId pane_id_to_replace = 1;
  PaneId existing_pane_id = 2;
  bool suppress_replaced_pane = 3;
}

message RenameWebLoginTokenPayload {
  string old_name = 1;
  string new_name = 2;
}

message RevokeWebLoginTokenPayload {
  string token_label = 1;
}

message GenerateWebLoginTokenPayload {
  optional string token_label = 1;
  optional bool read_only = 2;
}

message SetSelfMouseSelectionSupportPayload {
  bool support_mouse_selection = 1;
}

message EmbedMultiplePanesPayload {
  repeated PaneId pane_ids = 1;
}

message FloatMultiplePanesPayload {
  repeated PaneId pane_ids = 1;
}

message CloseMultiplePanesPayload {
  repeated PaneId pane_ids = 1;
}

message HighlightAndUnhighlightPanesPayload {
  repeated PaneId pane_ids_to_highlight = 1;
  repeated PaneId pane_ids_to_unhighlight = 2;
}

message GroupAndUngroupPanesPayload {
  repeated PaneId pane_ids_to_group = 1;
  repeated PaneId pane_ids_to_ungroup = 2;
  bool for_all_clients = 3;
}

message OpenFileInPlaceOfPluginPayload {
  file.File file_to_open = 1;
  optional FloatingPaneCoordinates floating_pane_coordinates = 2;
  repeated ContextItem context = 3;
  bool close_plugin_after_replace = 4;
}

message OpenFileFloatingNearPluginPayload {
  file.File file_to_open = 1;
  optional FloatingPaneCoordinates floating_pane_coordinates = 2;
  repeated ContextItem context = 3;
}

message OpenFileNearPluginPayload {
  file.File file_to_open = 1;
  optional FloatingPaneCoordinates floating_pane_coordinates = 2;
  repeated ContextItem context = 3;
}

message OpenCommandPaneInPlaceOfPluginPayload {
  command.Command command_to_run = 1;
  repeated ContextItem context = 3;
  bool close_plugin_after_replace = 4;
}

message OpenCommandPaneFloatingNearPluginPayload {
  command.Command command_to_run = 1;
  optional FloatingPaneCoordinates floating_pane_coordinates = 2;
  repeated ContextItem context = 3;
}

message OpenTerminalInPlaceOfPluginPayload {
  file.File file_to_open = 1;
  repeated ContextItem context = 3;
  bool close_plugin_after_replace = 4;
}

message OpenTerminalFloatingNearPluginPayload {
  file.File file_to_open = 1;
  optional FloatingPaneCoordinates floating_pane_coordinates = 2;
  repeated ContextItem context = 3;
}

message OpenTerminalNearPluginPayload {
  file.File file_to_open = 1;
  repeated ContextItem context = 3;
}

message OpenCommandPaneNearPluginPayload {
  command.Command command_to_run = 1;
  optional FloatingPaneCoordinates floating_pane_coordinates = 2;
  repeated ContextItem context = 3;
}

message ChangeFloatingPanesCoordinatesPayload {
  repeated PaneIdAndFloatingPaneCoordinates pane_ids_and_floating_panes_coordinates = 1;
}

message StackPanesPayload {
  repeated PaneId pane_ids = 1;
}

message SetFloatingPanePinnedPayload {
  PaneId pane_id = 1;
  bool should_be_pinned = 2;
}

message TogglePaneBorderlessPayload {
  PaneId pane_id = 1;
}

message SetPaneBorderlessPayload {
  PaneId pane_id = 1;
  bool borderless = 2;
}

message ChangeHostFolderPayload {
  string new_host_folder = 1;
}

message RebindKeysPayload {
  repeated KeyToRebind keys_to_rebind = 1;
  repeated KeyToUnbind keys_to_unbind = 2;
  bool write_config_to_disk = 3;
}

message KeyToRebind {
  input_mode.InputMode input_mode = 1;
  key.Key key = 2;
  repeated action.Action actions = 3;
}

message KeyToUnbind {
  input_mode.InputMode input_mode = 1;
  key.Key key = 2;
}

message LoadNewPluginPayload {
  string plugin_url = 1;
  repeated ContextItem plugin_config = 2;
  bool should_load_plugin_in_background = 3;
  bool should_skip_plugin_cache = 4;
}

message ReloadPluginPayload {
  uint32 plugin_id = 1;
}

message BreakPanesToTabWithIndexPayload {
  repeated PaneId pane_ids = 1;
  uint32 tab_index = 2;
  bool should_change_focus_to_target_tab = 3;
}

message BreakPanesToNewTabPayload {
  repeated PaneId pane_ids = 1;
  bool should_change_focus_to_new_tab = 2;
  optional string new_tab_name = 3;
}

message MovePaneWithPaneIdPayload {
  PaneId pane_id = 1;
}

message MovePaneWithPaneIdInDirectionPayload {
  PaneId pane_id = 1;
  resize.MoveDirection direction = 2;
}

message ClearScreenForPaneIdPayload {
  PaneId pane_id = 1;
}

message ScrollUpInPaneIdPayload {
  PaneId pane_id = 1;
}

message ScrollDownInPaneIdPayload {
  PaneId pane_id = 1;
}

message ScrollToTopInPaneIdPayload {
  PaneId pane_id = 1;
}

message ScrollToBottomInPaneIdPayload {
  PaneId pane_id = 1;
}

message PageScrollUpInPaneIdPayload {
  PaneId pane_id = 1;
}

message PageScrollDownInPaneIdPayload {
  PaneId pane_id = 1;
}

message TogglePaneIdFullscreenPayload {
  PaneId pane_id = 1;
}

message TogglePaneEmbedOrEjectForPaneIdPayload {
  PaneId pane_id = 1;
}

message CloseTabWithIndexPayload {
  uint32 tab_index = 1;
}

message WriteCharsToPaneIdPayload {
  string chars_to_write = 1;
  PaneId pane_id = 2;
}

message WriteToPaneIdPayload {
  bytes bytes_to_write = 1;
  PaneId pane_id = 2;
}

message EditScrollbackForPaneWithIdPayload {
  PaneId pane_id = 1;
}

message ResizePaneIdWithDirectionPayload {
  resize.Resize resize = 1;
  PaneId pane_id = 2;
}

message ReconfigurePayload {
  string config = 1;
  bool write_to_disk = 2;
}

message RerunCommandPanePayload {
  uint32 terminal_pane_id = 1;
}

message HidePaneWithIdPayload {
  PaneId pane_id = 1;
}

message ShowPaneWithIdPayload {
  PaneId pane_id = 1;
  bool should_float_if_hidden = 2;
  bool should_focus_pane = 3;
}

message NewTabsWithLayoutInfoPayload {
  event.LayoutInfo layout_info = 1;
}

message KillSessionsPayload {
  repeated string session_names = 1;
}

message CliPipeOutputPayload {
  string pipe_name = 1;
  string output = 2;
}

message MessageToPluginPayload {
  optional string plugin_url = 1;
  repeated ContextItem plugin_config = 2;
  string message_name = 3;
  optional string message_payload = 4;
  repeated ContextItem message_args = 5;
  optional NewPluginArgs new_plugin_args = 6;
  optional uint32 destination_plugin_id = 7;
  optional FloatingPaneCoordinates floating_pane_coordinates = 8;
}

message NewPluginArgs {
    optional bool should_float = 1;
    optional PaneId pane_id_to_replace = 2;
    optional string pane_title = 3;
    optional string cwd = 4;
    bool skip_cache = 5;
    optional bool should_focus = 6;
}

message PaneId {
  PaneType pane_type = 1;
  uint32 id = 2;
}

enum PaneType {
  Terminal = 0;
  Plugin = 1;
}

message SwitchSessionPayload {
  optional string name = 1;
  optional uint32 tab_position = 2;
  optional uint32 pane_id = 3;
  optional bool pane_id_is_plugin = 4;
  optional event.LayoutInfo layout = 5;
  optional string cwd = 6;
}

message RequestPluginPermissionPayload {
  repeated plugin_permission.PermissionType permissions = 1;
}

message SubscribePayload {
  event.EventNameList subscriptions = 1;
}

message UnsubscribePayload {
  event.EventNameList subscriptions = 1;
}

message OpenFilePayload {
  file.File file_to_open = 1;
  optional FloatingPaneCoordinates floating_pane_coordinates = 2;
  repeated ContextItem context = 3;
}

message OpenCommandPanePayload {
  command.Command command_to_run = 1;
  optional FloatingPaneCoordinates floating_pane_coordinates = 2;
  repeated ContextItem context = 3;
}

message SwitchTabToPayload {
  uint32 tab_index = 1;
}

message SetTimeoutPayload {
  double seconds = 1;
}

message ExecCmdPayload {
  repeated string command_line = 1;
}

message RunCommandPayload {
  repeated string command_line = 1;
  repeated EnvVariable env_variables = 2;
  string cwd = 3;
  repeated ContextItem context = 4;
}

message WebRequestPayload {
  string url = 1;
  HttpVerb verb = 2;
  repeated event.Header headers = 3;
  bytes body = 4;
  repeated ContextItem context = 5;
}

enum HttpVerb {
  Get = 0;
  Post = 1;
  Put = 2;
  Delete = 3;
}

message EnvVariable {
  string name = 1;
  string value = 2;
}

message ContextItem {
  string name = 1;
  string value = 2;
}

message PluginMessagePayload {
  api.message.Message message = 1;
}

message ResizePayload {
  resize.Resize resize = 1;
}

message MovePayload {
  resize.MoveDirection direction = 1;
}

message PaneIdAndFloatingPaneCoordinates {
  PaneId pane_id = 1;
  FloatingPaneCoordinates floating_pane_coordinates = 2;
}

message IdAndNewName {
  uint32 id = 1; // pane id or tab index
  string new_name = 2;
}

message FloatingPaneCoordinates {
  optional FixedOrPercentValue x = 1;
  optional FixedOrPercentValue y = 2;
  optional FixedOrPercentValue width = 3;
  optional FixedOrPercentValue height = 4;
  optional bool pinned = 5;
  optional bool borderless = 6;
}

message FixedOrPercentValue {
  FixedOrPercent type = 1;
  uint32 value = 2;
}

enum FixedOrPercent {
  Fixed = 0;
  Percent = 1;
}

message SwitchTabToIdPayload {
  uint64 tab_id = 1;
}

message GoToTabWithIdPayload {
  uint64 tab_id = 1;
}

message CloseTabWithIdPayload {
  uint64 tab_id = 1;
}

message RenameTabWithIdPayload {
  uint64 tab_id = 1;
  string new_name = 2;
}

message BreakPanesToTabWithIdPayload {
  repeated PaneId pane_ids = 1;
  uint64 tab_id = 2;
  bool should_change_focus_to_target_tab = 3;
}

message BreakPanesToTabWithIdResponse {
  oneof result {
    uint64 tab_id = 1;
    bool none = 2;
  }
}

message CreateTokenResponse {
  optional string token = 1;
  optional string token_label = 2;
  optional string error = 3;
}

message RevokeTokenResponse {
  bool successfully_revoked = 1;
  optional string error = 2;
}

message ListTokensResponse {
  // tokens/creation_times/read_only_flags should be synchronized
  repeated string tokens = 1;
  repeated string creation_times = 2;
  repeated bool read_only_flags = 3;
  optional string error = 4;
}

message RevokeAllWebTokensResponse {
  bool successfully_revoked = 1;
  optional string error = 2;
}

message RenameWebTokenResponse {
  bool successfully_renamed = 1;
  optional string error = 2;
}

message GetPaneScrollbackPayload {
  PaneId pane_id = 1;
  bool get_full_scrollback = 2;
}

message ShowCursorPayload {
  optional CursorPosition position = 1;
}

message CursorPosition {
  uint32 x = 1;
  uint32 y = 2;
}

message CopyToClipboardPayload {
  string text = 1;
}

message GetPanePidPayload {
  PaneId pane_id = 1;
}

message GetPanePidResponse {
  oneof result {
    int32 pid = 1;
    string error = 2;
  }
}

message GetPaneRunningCommandPayload {
  PaneId pane_id = 1;
}

message GetPaneRunningCommandResponse {
  oneof result {
    RunningCommand command = 1;
    string error = 2;
  }
}

message RunningCommand {
  repeated string args = 1;
}

message GetPaneCwdPayload {
  PaneId pane_id = 1;
}

message GetPaneCwdResponse {
  oneof result {
    string cwd = 1;
    string error = 2;
  }
}

message SaveLayoutResponse {
  oneof result {
    bool success = 1;
    string error = 2;
  }
}

message DeleteLayoutResponse {
  oneof result {
    bool success = 1;
    string error = 2;
  }
}

message EditLayoutResponse {
  oneof result {
    bool success = 1;
    string error = 2;
  }
}

message GenerateRandomNameResponse {
  string name = 1;
}

message OverrideLayoutPayload {
  event.LayoutInfo layout_info = 1;
  repeated ContextItem context = 2;
  bool retain_existing_terminal_panes = 3;
  bool retain_existing_plugin_panes = 4;
  bool apply_only_to_active_tab = 5;
}

message SaveLayoutPayload {
  string layout_name = 1;
  string layout_kdl = 2;
  bool overwrite = 3;
}

message DeleteLayoutPayload {
  string layout_name = 1;
}

message EditLayoutPayload {
  string layout_name = 1;
  repeated ContextItem context = 2;
}

message GenerateRandomNamePayload {}

message DumpLayoutPayload {
  string layout_name = 1;
}

message DumpLayoutResponse {
  oneof result {
    string layout_content = 1;
    string error = 2;
  }
}

message DumpSessionLayoutResponse {
  oneof result {
    string layout_content = 1;
    string error = 2;
  }
  optional api.event.LayoutMetadata metadata = 3;
}

message ParseLayoutPayload {
  string layout_string = 1;
}

message ParseLayoutResponse {
  oneof result {
    api.event.LayoutMetadata metadata = 1;
    api.event.LayoutParsingError error = 2;
  }
}

message RenameLayoutPayload {
  string old_layout_name = 1;
  string new_layout_name = 2;
}

message RenameLayoutResponse {
  oneof result {
    bool success = 1;
    string error = 2;
  }
}

message GetLayoutDirPayload {}

message GetLayoutDirResponse {
  string layout_dir = 1;
}

message GetFocusedPaneInfoPayload {}

message GetFocusedPaneInfoResponse {
  oneof result {
    FocusedPaneInfo focused_pane_info = 1;
    string error = 2;
  }
}

message FocusedPaneInfo {
  uint32 focused_tab_index = 1;
  PaneId focused_pane_id = 2;
}

message SaveSessionPayload {}

message SaveSessionResponse {
  oneof result {
    bool success = 1;
    string error = 2;
  }
}

message CurrentSessionLastSavedTimePayload {}

message CurrentSessionLastSavedTimeResponse {
  optional uint64 timestamp_millis = 1; // None if never saved, otherwise milliseconds elapsed since last save
}

message GetPaneInfoPayload {
  PaneId pane_id = 1;
}

message GetPaneInfoResponse {
  optional event.PaneInfo pane_info = 1; // None if pane not found
}

message GetTabInfoPayload {
  uint64 tab_id = 1;
}

message GetTabInfoResponse {
  optional event.TabInfo tab_info = 1; // None if tab not found
}

message NewTabResponse {
  oneof result {
    uint64 tab_id = 1;
    bool none = 2;  // Indicates None
  }
}

message NewTabsResponse {
  repeated uint64 tab_ids = 1;  // Only includes successfully created tabs
}

message FocusOrCreateTabResponse {
  oneof result {
    uint64 tab_id = 1;
    bool none = 2;  // Indicates None
  }
}

message BreakPanesToNewTabResponse {
  oneof result {
    uint64 tab_id = 1;
    bool none = 2;  // Indicates None
  }
}

message BreakPanesToTabWithIndexResponse {
  oneof result {
    uint64 tab_id = 1;
    bool none = 2;  // Indicates None
  }
}

message OpenFileResponse {
  optional PaneId pane_id = 1;
}

message OpenFileFloatingResponse {
  optional PaneId pane_id = 1;
}

message OpenFileInPlaceResponse {
  optional PaneId pane_id = 1;
}

message OpenFileNearPluginResponse {
  optional PaneId pane_id = 1;
}

message OpenFileFloatingNearPluginResponse {
  optional PaneId pane_id = 1;
}

message OpenFileInPlaceOfPluginResponse {
  optional PaneId pane_id = 1;
}

message OpenTerminalResponse {
  optional PaneId pane_id = 1;
}

message OpenTerminalFloatingResponse {
  optional PaneId pane_id = 1;
}

message OpenTerminalInPlaceResponse {
  optional PaneId pane_id = 1;
}

message OpenTerminalNearPluginResponse {
  optional PaneId pane_id = 1;
}

message OpenTerminalFloatingNearPluginResponse {
  optional PaneId pane_id = 1;
}

message OpenTerminalInPlaceOfPluginResponse {
  optional PaneId pane_id = 1;
}

message OpenCommandPaneResponse {
  optional PaneId pane_id = 1;
}

message OpenCommandPaneFloatingResponse {
  optional PaneId pane_id = 1;
}

message OpenCommandPaneInPlaceResponse {
  optional PaneId pane_id = 1;
}

message OpenCommandPaneNearPluginResponse {
  optional PaneId pane_id = 1;
}

message OpenCommandPaneFloatingNearPluginResponse {
  optional PaneId pane_id = 1;
}

message OpenCommandPaneInPlaceOfPluginResponse {
  optional PaneId pane_id = 1;
}

message OpenCommandPaneBackgroundResponse {
  optional PaneId pane_id = 1;
}

message GetSessionEnvironmentVariablesPayload {}

message GetSessionEnvironmentVariablesResponse {
  repeated EnvVariable env_vars = 1;
}

message OpenPluginPaneInNewTabPayload {
  string plugin_url = 1;
  map<string, string> configuration = 2;
  repeated ContextItem context = 3;
}

message OpenPaneInNewTabResponse {
  optional uint64 tab_id = 1;
  optional PaneId pane_id = 2;
}

message OpenCommandPaneInPlaceOfPaneIdPayload {
  PaneId pane_id_to_replace = 1;
  command.Command command_to_run = 2;
  bool close_replaced_pane = 3;
  repeated ContextItem context = 4;
}

message OpenTerminalPaneInPlaceOfPaneIdPayload {
  PaneId pane_id_to_replace = 1;
  optional file.File cwd = 2;
  bool close_replaced_pane = 3;
}

message OpenEditPaneInPlaceOfPaneIdPayload {
  PaneId pane_id_to_replace = 1;
  file.File file_to_open = 2;
  bool close_replaced_pane = 3;
  repeated ContextItem context = 4;
}

message OpenCommandPaneInPlaceOfPaneIdResponse {
  optional PaneId pane_id = 1;
}

message OpenTerminalPaneInPlaceOfPaneIdResponse {
  optional PaneId pane_id = 1;
}

message OpenEditPaneInPlaceOfPaneIdResponse {
  optional PaneId pane_id = 1;
}

message HideFloatingPanesPayload {
  optional uint32 tab_id = 1;
}

message ShowFloatingPanesPayload {
  optional uint32 tab_id = 1;
}

message ShowFloatingPanesResponse {
  oneof result {
    bool success = 1;
    string error = 2;
  }
}

message HideFloatingPanesResponse {
  oneof result {
    bool success = 1;
    string error = 2;
  }
}

message SetPaneColorPayload {
  PaneId pane_id = 1;
  optional string fg = 2;
  optional string bg = 3;
}

message HighlightStyle {
  oneof style {
    bool emphasis_0 = 1;
    bool emphasis_1 = 2;
    bool emphasis_2 = 3;
    bool emphasis_3 = 4;
    CustomRgbHighlight custom_rgb = 5;
    CustomIndexHighlight custom_index = 6;
    bool background_emphasis_0 = 7;
    bool background_emphasis_1 = 8;
    bool background_emphasis_2 = 9;
    bool background_emphasis_3 = 10;
    bool none = 11;
  }
}

message CustomRgbHighlight {
  optional uint32 fg_r = 1;
  optional uint32 fg_g = 2;
  optional uint32 fg_b = 3;
  optional uint32 bg_r = 4;
  optional uint32 bg_g = 5;
  optional uint32 bg_b = 6;
}

message CustomIndexHighlight {
  optional uint32 fg = 1;
  optional uint32 bg = 2;
}

enum HighlightLayer {
  Hint = 0;
  Tool = 1;
  ActionFeedback = 2;
}

message RegexHighlight {
  string pattern = 1;
  HighlightStyle style = 2;
  repeated ContextItem context = 3;
  bool on_hover = 4;
  bool bold = 5;
  bool italic = 6;
  bool underline = 7;
  optional string tooltip_text = 8;
  HighlightLayer layer = 9;
}

message SetPaneRegexHighlightsPayload {
  PaneId pane_id = 1;
  repeated RegexHighlight highlights = 2;
}

message ClearPaneHighlightsPayload {
  PaneId pane_id = 1;
}

message OpenPluginPaneFloatingPayload {
  string plugin_url = 1;
  map<string, string> configuration = 2;
  optional FloatingPaneCoordinates floating_pane_coordinates = 3;
  repeated ContextItem context = 4;
}

message OpenPluginPaneFloatingResponse {
  optional PaneId pane_id = 1;
}

message GetSessionListPayload {}

message SessionListSnapshot {
  repeated event.SessionManifest live_sessions = 1;
  repeated event.ResurrectableSession resurrectable_sessions = 2;
}

message GetSessionListResponse {
  oneof result {
    SessionListSnapshot snapshot = 1;
    string error = 2;
  }
}
