sig
  module Error :
    sig
      type t =
          [ `Http of
              [ `Call of [ `GET | `POST ] * Uri.t
              | `Target_query of
                  Ketrew_pure.Internal_pervasives.Unique_id.t * string
              | `Targets ] *
              [ `Exn of exn
              | `Json_parsing of string * [ `Exn of exn ]
              | `Unexpected_message of Ketrew_pure.Protocol.Down_message.t
              | `Wrong_json of Yojson.Safe.json
              | `Wrong_response of Cohttp.Response.t * string ]
          | `Server_error_response of
              [ `Call of [ `GET | `POST ] * Uri.t ] * string ]
      val log :
        Ketrew.Client.Error.t -> Ketrew_pure.Internal_pervasives.Log.t
    end
  type t
  val as_client :
    configuration:Configuration.t ->
    f:(client:Ketrew.Client.t ->
       (unit,
        [> `Database of Trakeva.Error.t
         | `Database_unavailable of bytes
         | `Dyn_plugin of
             [> `Dynlink_error of Dynlink.error | `Findlib of exn ]
         | `Failure of bytes
         | `Missing_data of bytes
         | `Target of [> `Deserilization of bytes ]
         | `Wrong_configuration of [> `Found of bytes ] * [> `Exn of exn ] ]
        as 'a)
       Unix_io.Deferred_result.t) ->
    (unit, 'a) Unix_io.Deferred_result.t
  val configuration : Ketrew.Client.t -> Configuration.t
  val get_local_engine : Ketrew.Client.t -> Engine.t option
  val all_targets :
    Ketrew.Client.t ->
    (Ketrew_pure.Target.t list,
     [> `Client of Ketrew.Client.Error.t
      | `Database of Trakeva.Error.t
      | `IO of
          [> `Read_file_exn of string * exn | `Write_file_exn of string * exn ]
      | `Missing_data of Ketrew_pure.Target.id
      | `System of [> `File_info of string ] * [> `Exn of exn ]
      | `Target of [> `Deserilization of string ] ])
    Unix_io.Deferred_result.t
  val get_list_of_target_ids :
    Ketrew.Client.t ->
    query:Ketrew_pure.Protocol.Up_message.target_query ->
    (Ketrew_pure.Target.id list,
     [> `Client of Ketrew.Client.Error.t
      | `Database of Trakeva.Error.t
      | `Missing_data of string
      | `Target of [> `Deserilization of string ] ])
    Unix_io.Deferred_result.t
  val get_target :
    Ketrew.Client.t ->
    id:Ketrew_pure.Target.id ->
    (Ketrew_pure.Target.t,
     [> `Client of Ketrew.Client.Error.t
      | `Database of Trakeva.Error.t
      | `Missing_data of string
      | `Target of [> `Deserilization of string ] ])
    Unix_io.Deferred_result.t
  val get_targets :
    Ketrew.Client.t ->
    id_list:Ketrew_pure.Target.id list ->
    (Ketrew_pure.Target.t list,
     [> `Client of Ketrew.Client.Error.t
      | `Database of Trakeva.Error.t
      | `Missing_data of string
      | `Target of [> `Deserilization of string ] ])
    Unix_io.Deferred_result.t
  val call_query :
    Ketrew.Client.t ->
    target:Ketrew_pure.Target.t ->
    string ->
    (string, Ketrew_pure.Internal_pervasives.Log.t) Unix_io.Deferred_result.t
  val kill :
    Ketrew.Client.t ->
    Ketrew_pure.Target.id list ->
    (unit,
     [> `Client of Ketrew.Client.Error.t
      | `Database of Trakeva.Error.t
      | `Database_unavailable of Ketrew_pure.Target.id
      | `Missing_data of Ketrew_pure.Target.id
      | `Target of [> `Deserilization of string ] ])
    Unix_io.Deferred_result.t
  val restart :
    Ketrew.Client.t ->
    Ketrew_pure.Target.id list ->
    (unit,
     [> `Client of Ketrew.Client.Error.t
      | `Database of Trakeva.Error.t
      | `Database_unavailable of Ketrew_pure.Target.id
      | `Missing_data of Ketrew_pure.Target.id
      | `Target of [> `Deserilization of string ] ])
    Unix_io.Deferred_result.t
  val submit :
    ?override_configuration:Configuration.t ->
    ?add_tags:string list -> EDSL.user_target -> unit
end