summaryrefslogtreecommitdiff
path: root/makima/src/server/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'makima/src/server/mod.rs')
-rw-r--r--makima/src/server/mod.rs59
1 files changed, 58 insertions, 1 deletions
diff --git a/makima/src/server/mod.rs b/makima/src/server/mod.rs
index ee5e9bd..a096a5c 100644
--- a/makima/src/server/mod.rs
+++ b/makima/src/server/mod.rs
@@ -1,5 +1,6 @@
//! Web server module for the makima audio API.
+pub mod auth;
pub mod handlers;
pub mod messages;
pub mod openapi;
@@ -17,7 +18,7 @@ use tower_http::trace::TraceLayer;
use utoipa::OpenApi;
use utoipa_swagger_ui::SwaggerUi;
-use crate::server::handlers::{chat, file_ws, files, listen, versions};
+use crate::server::handlers::{api_keys, chat, file_ws, files, listen, mesh, mesh_chat, mesh_daemon, mesh_merge, mesh_ws, users, versions};
use crate::server::openapi::ApiDoc;
use crate::server::state::SharedState;
@@ -56,6 +57,62 @@ pub fn make_router(state: SharedState) -> Router {
.route("/files/{id}/versions", get(versions::list_versions))
.route("/files/{id}/versions/{version}", get(versions::get_version))
.route("/files/{id}/versions/restore", post(versions::restore_version))
+ // Mesh/task orchestration endpoints
+ .route(
+ "/mesh/tasks",
+ get(mesh::list_tasks).post(mesh::create_task),
+ )
+ .route(
+ "/mesh/tasks/{id}",
+ get(mesh::get_task)
+ .put(mesh::update_task)
+ .delete(mesh::delete_task),
+ )
+ .route("/mesh/tasks/{id}/subtasks", get(mesh::list_subtasks))
+ .route("/mesh/tasks/{id}/events", get(mesh::list_task_events))
+ .route("/mesh/tasks/{id}/output", get(mesh::get_task_output))
+ .route("/mesh/tasks/{id}/start", post(mesh::start_task))
+ .route("/mesh/tasks/{id}/stop", post(mesh::stop_task))
+ .route("/mesh/tasks/{id}/message", post(mesh::send_message))
+ .route("/mesh/tasks/{id}/retry-completion", post(mesh::retry_completion_action))
+ .route("/mesh/tasks/{id}/clone", post(mesh::clone_worktree))
+ .route("/mesh/tasks/{id}/check-target", post(mesh::check_target_exists))
+ .route("/mesh/chat", post(mesh_chat::mesh_toplevel_chat_handler))
+ .route(
+ "/mesh/chat/history",
+ get(mesh_chat::get_chat_history).delete(mesh_chat::clear_chat_history),
+ )
+ .route("/mesh/tasks/{id}/chat", post(mesh_chat::mesh_chat_handler))
+ .route("/mesh/daemons", get(mesh::list_daemons))
+ .route("/mesh/daemons/directories", get(mesh::get_daemon_directories))
+ .route("/mesh/daemons/{id}", get(mesh::get_daemon))
+ // Merge endpoints for orchestrators
+ .route("/mesh/tasks/{id}/branches", get(mesh_merge::list_branches))
+ .route("/mesh/tasks/{id}/merge/start", post(mesh_merge::merge_start))
+ .route("/mesh/tasks/{id}/merge/status", get(mesh_merge::merge_status))
+ .route("/mesh/tasks/{id}/merge/resolve", post(mesh_merge::merge_resolve))
+ .route("/mesh/tasks/{id}/merge/commit", post(mesh_merge::merge_commit))
+ .route("/mesh/tasks/{id}/merge/abort", post(mesh_merge::merge_abort))
+ .route("/mesh/tasks/{id}/merge/skip", post(mesh_merge::merge_skip))
+ .route("/mesh/tasks/{id}/merge/check", get(mesh_merge::merge_check))
+ // Mesh WebSocket endpoints
+ .route("/mesh/tasks/subscribe", get(mesh_ws::task_subscription_handler))
+ .route("/mesh/daemons/connect", get(mesh_daemon::daemon_handler))
+ // API key management endpoints
+ .route(
+ "/auth/api-keys",
+ post(api_keys::create_api_key_handler)
+ .get(api_keys::get_api_key_handler)
+ .delete(api_keys::revoke_api_key_handler),
+ )
+ .route("/auth/api-keys/refresh", post(api_keys::refresh_api_key_handler))
+ // User account management endpoints
+ .route(
+ "/users/me",
+ axum::routing::delete(users::delete_account_handler),
+ )
+ .route("/users/me/password", axum::routing::put(users::change_password_handler))
+ .route("/users/me/email", axum::routing::put(users::change_email_handler))
.with_state(state);
let swagger = SwaggerUi::new("/swagger-ui")