Add PUT /sessions/{id} for legacy conversation updates in tkmind compat.
Portal direct-chat mirror and tool-history repair expect this route. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -3,12 +3,14 @@ use std::sync::Arc;
|
||||
use axum::{
|
||||
extract::{Path, State},
|
||||
http::StatusCode,
|
||||
routing::{delete, get},
|
||||
routing::{delete, get, put},
|
||||
Json, Router,
|
||||
};
|
||||
|
||||
use crate::agents::ExtensionConfig;
|
||||
use crate::config::Config;
|
||||
use crate::conversation::message::Message;
|
||||
use crate::conversation::Conversation;
|
||||
use crate::session::{EnabledExtensionsState, Session};
|
||||
|
||||
use super::state::AppState;
|
||||
@@ -92,11 +94,42 @@ async fn get_session(
|
||||
.map_err(|_| StatusCode::NOT_FOUND)
|
||||
}
|
||||
|
||||
#[derive(serde::Deserialize)]
|
||||
struct UpdateLegacySessionRequest {
|
||||
conversation: Option<Vec<Message>>,
|
||||
}
|
||||
|
||||
async fn update_session(
|
||||
State(state): State<Arc<AppState>>,
|
||||
Path(session_id): Path<String>,
|
||||
Json(payload): Json<UpdateLegacySessionRequest>,
|
||||
) -> Result<StatusCode, StatusCode> {
|
||||
state
|
||||
.session_manager()
|
||||
.get_session(&session_id, false)
|
||||
.await
|
||||
.map_err(|_| StatusCode::NOT_FOUND)?;
|
||||
|
||||
let Some(messages) = payload.conversation else {
|
||||
return Ok(StatusCode::OK);
|
||||
};
|
||||
|
||||
let conversation = Conversation::new_unvalidated(messages);
|
||||
state
|
||||
.session_manager()
|
||||
.replace_conversation(&session_id, &conversation)
|
||||
.await
|
||||
.map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?;
|
||||
|
||||
Ok(StatusCode::OK)
|
||||
}
|
||||
|
||||
pub fn routes(state: Arc<AppState>) -> Router {
|
||||
Router::new()
|
||||
.route("/sessions", get(list_sessions))
|
||||
.route("/sessions/{session_id}", get(get_session))
|
||||
.route("/sessions/{session_id}/extensions", get(get_session_extensions))
|
||||
.route("/sessions/{session_id}", put(update_session))
|
||||
.route("/sessions/{session_id}", delete(delete_session))
|
||||
.with_state(state)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user