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:
john
2026-09-08 22:03:52 +08:00
parent df7150b687
commit 30dd3a4d2b
+34 -1
View File
@@ -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)
}