 
 extension Session {
   struct Model {
-    enum FetchInterval {
-        case minimum
-        case some(TimeInterval)
-        case never
-    }
-    struct BackgroundTask {
-        let name: String
-        let expiration: ((Void) -> Void)?
-    }
-    struct ActionInternal {
-      let action: Selector
-      let target: Any?
-      let sender: Any?
-      let event: UIEvent?
-    }
     var isIgnoringUserEvents: Bool
     var isIdleTimerDisabled: Bool
     var openingURL: URL?
     var sendingEvent: UIEvent?
-    var sendingAction: ActionInternal?
+    var sendingAction: TargetAction?
     var isNetworkActivityIndicatorVisible: Bool
     var iconBadgeNumber: Int
     var supportsShakeToEdit: Bool

    && left.restorationViewControllers == right.restorationViewControllers  }
}

extension Session.Model.ActionInternal: Equatable {
  static func ==(
    left: Session.Model.ActionInternal,
    right: Session.Model.ActionInternal
  ) -> Bool { return
    left.action == right.action
    && left.event === right.event

    var supportedInterfaceOrientations: [UIWindow: UIInterfaceOrientationMask]
    var restorationViewControllers: [String: UIViewController]
    
    enum FetchInterval {
      case minimum
      case some(TimeInterval)
      case never
    }
    struct BackgroundTask {
      let name: String
      let expiration: ((Void) -> Void)?
    }
    struct TargetAction {
      let action: Selector
      let target: Any?
      let sender: Any?
      let event: UIEvent?
    }
    enum State {
      enum External {
        enum Query {
