sig
  type t
  val with_engine :
    configuration:Ketrew.Configuration.engine ->
    (engine:Ketrew.Engine.t ->
     (unit,
      [> `Database of Trakeva.Error.t
       | `Database_unavailable of Ketrew_pure.Target.id
       | `Dyn_plugin of
           [> `Dynlink_error of Dynlink.error | `Findlib of exn ]
       | `Failure of string
       | `Missing_data of bytes
       | `Target of [> `Deserilization of bytes ] ]
      as 'merge_error)
     Unix_io.Deferred_result.t) ->
    (unit, 'merge_error) Unix_io.Deferred_result.t
  val load :
    configuration:Ketrew.Configuration.engine ->
    (Ketrew.Engine.t,
     [> `Database of Trakeva.Error.t
      | `Dyn_plugin of [> `Dynlink_error of Dynlink.error | `Findlib of exn ]
      | `Failure of string
      | `Missing_data of bytes
      | `Target of [> `Deserilization of bytes ] ])
    Unix_io.Deferred_result.t
  val unload :
    Ketrew.Engine.t ->
    (unit,
     [> `Database of Trakeva.Error.t
      | `Database_unavailable of Ketrew_pure.Target.id ])
    Unix_io.Deferred_result.t
  val configuration : Ketrew.Engine.t -> Ketrew.Configuration.engine
  val add_targets :
    Ketrew.Engine.t ->
    Ketrew_pure.Target.t list ->
    (unit,
     [> `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 get_target :
    Ketrew.Engine.t ->
    Ketrew_pure.Internal_pervasives.Unique_id.t ->
    (Ketrew_pure.Target.t,
     [> `Database of Trakeva.Error.t
      | `Missing_data of string
      | `Target of [> `Deserilization of string ] ])
    Unix_io.Deferred_result.t
  val all_targets :
    Ketrew.Engine.t ->
    (Ketrew_pure.Target.t list,
     [> `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.Engine.t ->
    Ketrew_pure.Protocol.Up_message.target_query ->
    (Ketrew_pure.Target.id list,
     [> `Database of Trakeva.Error.t
      | `Missing_data of string
      | `Target of [> `Deserilization of string ] ])
    Unix_io.Deferred_result.t
  module Run_automaton :
    sig
      val step :
        Ketrew.Engine.t ->
        (bool,
         [> `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 fix_point :
        Ketrew.Engine.t ->
        ([ `Steps of int ],
         [> `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
    end
  val get_status :
    Ketrew.Engine.t ->
    Ketrew_pure.Target.id ->
    (Ketrew_pure.Target.State.t,
     [> `Database of Trakeva.Error.t
      | `IO of
          [> `Read_file_exn of string * exn | `Write_file_exn of string * exn ]
      | `Missing_data of string
      | `System of [> `File_info of string ] * [> `Exn of exn ]
      | `Target of [> `Deserilization of string ] ])
    Unix_io.Deferred_result.t
  val kill :
    Ketrew.Engine.t ->
    id:string ->
    (unit,
     [> `Database of [> `Act of Trakeva.Action.t | `Load of string ] * string
      | `Database_unavailable of string ])
    Unix_io.Deferred_result.t
  val restart_target :
    Ketrew.Engine.t ->
    Ketrew_pure.Target.id ->
    (Ketrew_pure.Target.id,
     [> `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
end