               ;; rest of the query.
               (parser {:state (atom adapted)} (mapv om-next/ast->query (:children ast))))))))
 
+   :project/workflow-runs
+   (fn [env ast]
+     (-> (api-promise
+          api/get-project-workflows
+          (vcs-url/vcs-url (:organization/vcs-type env)
+                           (:organization/name env)
+                           (:project/name env))
+          {:offset (:connection/offset (:params ast))
+           :limit (:connection/limit (:params ast))})
+
+         (p/then
+          (fn [response]
+            (let [adapted {:connection/total-count (:total-count response)
+                           :connection/edges (->> (:results response)
+                                                  (map adapt-to-run)
+                                                  (mapv #(hash-map :edge/node %)))}]
+              ;; Run the adapted structure through a parser to match it to the
+              ;; rest of the query.
+              (parser {:state (atom adapted)} (mapv om-next/ast->query (:children ast))))))))
+
    :app/current-user
    (fn [env ast]
      (-> (api-promise api/get-orgs :include-user? true)

                                           :project/parallelism
                                           :project/oss?]}
                  {:organization/plan [*]}]
                (:query ast))))))

(defmulti send* key)


        (let [[expr cb] (de-alias-expression expr cb)
              ast (om-parser/expr->ast expr)]
          (cond
            ;; :route/run
            (let [{:keys [key children]} ast]
              (and (= :circleci/run key)
