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
       | `Fetching_node of Persistent_data.Error.fetching_node
       | `Target of [> `Deserilization of string ] ]
      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
      | `Database_unavailable of string
      | `Dyn_plugin of [> `Dynlink_error of Dynlink.error | `Findlib of exn ]
      | `Failure of string
      | `Fetching_node of Persistent_data.Error.fetching_node
      | `Target of [> `Deserilization of string ] ])
    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
      | `Fetching_node of Persistent_data.Error.fetching_node
      | `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
      | `Database_unavailable of string
      | `Fetching_node of Persistent_data.Error.fetching_node
      | `Target of [> `Deserilization of string ] ])
    Unix_io.Deferred_result.t
  val all_visible_targets :
    Ketrew.Engine.t ->
    (Ketrew_pure.Target.t list,
     [> `Database of Trakeva.Error.t
      | `Database_unavailable of string
      | `Fetching_node of Persistent_data.Error.fetching_node
      | `IO of
          [> `Read_file_exn of string * exn | `Write_file_exn of string * exn ]
      | `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
      | `Database_unavailable of string
      | `Fetching_node of Persistent_data.Error.fetching_node
      | `Target of [> `Deserilization of string ] ])
    Unix_io.Deferred_result.t
  val next_changes :
    Ketrew.Engine.t ->
    (Persistent_data.Change.t list, 'a) Unix_io.Deferred_result.t
  module Run_automaton :
    sig
      type step_allowed_errors =
          [ `Database of Trakeva.Error.t
          | `Database_unavailable of string
          | `Fetching_node of Persistent_data.Error.fetching_node
          | `List of Ketrew.Engine.Run_automaton.step_allowed_errors list
          | `Target of [ `Deserilization of string ] ]
      val step :
        Ketrew.Engine.t ->
        (bool, Ketrew.Engine.Run_automaton.step_allowed_errors)
        Unix_io.Deferred_result.t
      val fix_point :
        Ketrew.Engine.t ->
        ([ `Steps of int ], Ketrew.Engine.Run_automaton.step_allowed_errors)
        Unix_io.Deferred_result.t
      val try_to_fix_step_error :
        Ketrew.Engine.t ->
        info:string ->
        Ketrew.Engine.Run_automaton.step_allowed_errors ->
        (unit,
         [> `Database of
              [> `Act of Trakeva.Action.t | `Load of string ] * string
          | `Database_unavailable of string
          | `Not_fixable of Ketrew.Engine.Run_automaton.step_allowed_errors ])
        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
      | `Database_unavailable of string
      | `Fetching_node of Persistent_data.Error.fetching_node
      | `IO of
          [> `Read_file_exn of string * exn | `Write_file_exn of string * exn ]
      | `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:Ketrew_pure.Internal_pervasives.Unique_id.t ->
    (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
      | `Fetching_node of Persistent_data.Error.fetching_node
      | `Target of [> `Deserilization of string ] ])
    Unix_io.Deferred_result.t
  val host_io : Ketrew.Engine.t -> Host_io.t
end