sig
  type time_constraint =
      [ `All
      | `Created_after of float
      | `Not_finished_before of float
      | `Status_changed_since of float ]
  type string_predicate = [ `Equals of string | `Matches of string ]
  type filter =
      [ `And of Ketrew_pure.Protocol.Up_message.filter list
      | `False
      | `Has_tag of Ketrew_pure.Protocol.Up_message.string_predicate
      | `Id of Ketrew_pure.Protocol.Up_message.string_predicate
      | `Name of Ketrew_pure.Protocol.Up_message.string_predicate
      | `Not of Ketrew_pure.Protocol.Up_message.filter
      | `Or of Ketrew_pure.Protocol.Up_message.filter list
      | `Status of
          [ `Activated_by_user
          | `Dead_because_of_dependencies
          | `Failed_from_condition
          | `Failed_from_running
          | `Failed_from_starting
          | `Killable
          | `Killed_from_passive
          | `Really_running
          | `Simple of Target.State.simple ]
      | `True ]
  type target_query = {
    time_constraint : Ketrew_pure.Protocol.Up_message.time_constraint;
    filter : Ketrew_pure.Protocol.Up_message.filter;
  }
  val pp_target_query :
    Format.formatter ->
    Ketrew_pure.Protocol.Up_message.target_query -> Ppx_deriving_runtime.unit
  val show_target_query :
    Ketrew_pure.Protocol.Up_message.target_query ->
    Ppx_deriving_runtime.string
  type query_option = [ `Block_if_empty_at_most of float ]
  type t =
      [ `Call_query of string * string
      | `Get_available_queries of string
      | `Get_deferred of string * int * int
      | `Get_notifications of float option
      | `Get_server_status
      | `Get_target_flat_states of
          [ `All | `Since of float ] * string list *
          Ketrew_pure.Protocol.Up_message.query_option list
      | `Get_target_ids of
          Ketrew_pure.Protocol.Up_message.target_query *
          Ketrew_pure.Protocol.Up_message.query_option list
      | `Get_target_summaries of string list
      | `Get_targets of string list
      | `Kill_targets of string list
      | `Process of Ketrew_pure.Protocol.Process_sub_protocol.up
      | `Restart_targets of string list
      | `Submit_targets of Target.t list ]
  val to_json : t -> Yojson.Safe.json
  val of_json_exn : Yojson.Safe.json -> t
  val serialize : t -> string
  val deserialize_exn : string -> t
  val target_query_markup :
    Ketrew_pure.Protocol.Up_message.target_query ->
    Internal_pervasives.Display_markup.t
end