use axum::{
routing::{delete, get, post},
Router,
};
use crate::AppState;
pub(crate) mod activity;
pub(crate) mod admin;
pub(crate) mod error;
pub(crate) mod health;
pub(crate) mod kg_routes;
pub(crate) mod palace_routes;
pub(crate) mod prompt_context;
pub(crate) mod recall_routes;
pub(crate) mod rpc;
pub(crate) mod static_assets;
pub(crate) use error::{open_handle, ApiError};
pub(crate) use kg_routes::DreamStatusPayload;
pub(crate) use palace_routes::{load_user_config, palace_info_from};
pub(crate) use rpc::creator_info_from_http;
pub(crate) const HEALTH_PROBE_PALACE: &str = "__health_probe__";
pub fn router() -> Router<AppState> {
let router = Router::new()
.route("/api/v1/status", get(palace_routes::status))
.route("/api/v1/config", get(palace_routes::config))
.route(
"/api/v1/palaces",
get(palace_routes::list_palaces).post(palace_routes::create_palace),
)
.route(
"/api/v1/palaces/{id}",
get(palace_routes::get_palace_handler)
.delete(palace_routes::delete_palace_handler)
.patch(palace_routes::update_palace_handler),
)
.route(
"/api/v1/palaces/{id}/drawers",
get(palace_routes::list_drawers).post(palace_routes::create_drawer),
)
.route(
"/api/v1/palaces/{id}/drawers/{drawer_id}",
delete(palace_routes::delete_drawer),
)
.route(
"/api/v1/palaces/{id}/memories",
get(palace_routes::list_drawers).post(palace_routes::create_drawer),
)
.route(
"/api/v1/palaces/{id}/memories/{drawer_id}",
delete(palace_routes::delete_drawer),
)
.route(
"/api/v1/palaces/{id}/recall",
get(recall_routes::recall_handler),
)
.route("/api/v1/recall", get(recall_routes::recall_all_handler))
.route(
"/api/v1/palaces/{id}/kg",
get(kg_routes::kg_query).post(kg_routes::kg_assert),
)
.route(
"/api/v1/palaces/{id}/kg/subjects",
get(kg_routes::kg_list_subjects),
)
.route(
"/api/v1/palaces/{id}/kg/subjects_with_counts",
get(kg_routes::kg_list_subjects_with_counts),
)
.route("/api/v1/palaces/{id}/kg/all", get(kg_routes::kg_list_all))
.route("/api/v1/palaces/{id}/kg/graph", get(kg_routes::kg_graph))
.route("/api/v1/palaces/{id}/kg/count", get(kg_routes::kg_count))
.route(
"/api/v1/palaces/{id}/kg/triples/{triple_id}",
delete(kg_routes::kg_delete_triple),
)
.route(
"/api/v1/palaces/{id}/dream/status",
get(kg_routes::palace_dream_status),
)
.route("/api/v1/dream/status", get(kg_routes::dream_status))
.route("/api/v1/dream/run", post(kg_routes::dream_run))
.route("/api/v1/kg/gaps", get(prompt_context::kg_gaps_handler))
.route(
"/api/v1/kg/prompt-context",
get(prompt_context::prompt_context_handler),
)
.route(
"/api/v1/kg/aliases",
post(prompt_context::add_alias_handler),
)
.route(
"/api/v1/kg/prompt-facts",
get(prompt_context::list_prompt_facts_handler)
.delete(prompt_context::remove_prompt_fact_handler),
)
.route("/api/v1/chat", post(crate::chat::chat_handler))
.route("/api/v1/chat/providers", get(crate::chat::list_providers))
.route(
"/api/v1/palaces/{id}/chat/sessions",
get(crate::chat::list_chat_sessions).post(crate::chat::create_chat_session),
)
.route(
"/api/v1/palaces/{id}/chat/sessions/{session_id}",
get(crate::chat::get_chat_session).delete(crate::chat::delete_chat_session),
)
.route(
"/api/v1/messages",
get(crate::chat::list_messages_handler).post(crate::chat::send_message_handler),
)
.route(
"/api/v1/messages/mark_read",
post(crate::chat::mark_message_read_handler),
)
.route("/health", get(health::health))
.route("/api/v1/logs/tail", get(admin::logs_tail))
.route("/api/v1/activity", get(activity::activity_handler))
.route(
"/api/v1/activity/hook",
post(activity::hook_activity_handler),
)
.route("/api/v1/admin/stop", post(admin::admin_stop))
.route("/api/v1/remember", post(admin::remember_async))
.route("/rpc", post(rpc::rpc_handler))
.fallback(static_assets::static_handler);
trusty_common::server::with_standard_middleware(router)
}
#[cfg(test)]
mod tests;