fix: show session friendly name in resume message and status bar
/history/{session_id} now returns a 'name' field alongside messages.
resumeSession() uses data.name first, then the sessionNames map, then
raw ID as fallback — so named sessions display correctly even on page
load before the sessions panel has been opened.
'Resumed session X' message also now shows the friendly name.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -8,7 +8,7 @@ from pydantic import BaseModel
|
|||||||
from context_loader import load_context
|
from context_loader import load_context
|
||||||
from llm_client import complete
|
from llm_client import complete
|
||||||
from session_logger import log_turn
|
from session_logger import log_turn
|
||||||
from session_store import load as load_session, save as save_session, list_all, generate_session_id, delete as delete_session, rename as rename_session
|
from session_store import load as load_session, save as save_session, list_all, generate_session_id, delete as delete_session, rename as rename_session, get_name as get_session_name
|
||||||
from config import settings
|
from config import settings
|
||||||
from persona import set_context, validate as validate_persona
|
from persona import set_context, validate as validate_persona
|
||||||
from auth_utils import COOKIE_NAME, decode_token
|
from auth_utils import COOKIE_NAME, decode_token
|
||||||
@@ -264,7 +264,8 @@ async def get_history(
|
|||||||
persona: str = Query("inara"),
|
persona: str = Query("inara"),
|
||||||
) -> dict:
|
) -> dict:
|
||||||
_set_ctx(user, persona)
|
_set_ctx(user, persona)
|
||||||
return {"session_id": session_id, "messages": load_session(session_id)}
|
name = get_session_name(session_id)
|
||||||
|
return {"session_id": session_id, "name": name, "messages": load_session(session_id)}
|
||||||
|
|
||||||
|
|
||||||
@router.get("/sessions")
|
@router.get("/sessions")
|
||||||
|
|||||||
@@ -73,6 +73,17 @@ def save(session_id: str, messages: list[dict]) -> None:
|
|||||||
path.write_text(json.dumps(data, indent=2))
|
path.write_text(json.dumps(data, indent=2))
|
||||||
|
|
||||||
|
|
||||||
|
def get_name(session_id: str) -> str:
|
||||||
|
"""Return the friendly name for a session, or '' if none set."""
|
||||||
|
path = _path(session_id)
|
||||||
|
if not path.exists():
|
||||||
|
return ""
|
||||||
|
try:
|
||||||
|
return json.loads(path.read_text()).get("name", "")
|
||||||
|
except Exception:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
def rename(session_id: str, name: str) -> bool:
|
def rename(session_id: str, name: str) -> bool:
|
||||||
"""Set (or clear) the friendly name on a session. Returns False if not found."""
|
"""Set (or clear) the friendly name on a session. Returns False if not found."""
|
||||||
path = _path(session_id)
|
path = _path(session_id)
|
||||||
|
|||||||
@@ -642,9 +642,13 @@
|
|||||||
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
||||||
const data = await res.json();
|
const data = await res.json();
|
||||||
|
|
||||||
|
// Prefer name from API response, fall back to sessionNames map, then raw ID
|
||||||
|
const displayName = data.name || sessionNames.get(id) || id;
|
||||||
|
sessionNames.set(id, displayName);
|
||||||
|
|
||||||
messagesEl.innerHTML = '';
|
messagesEl.innerHTML = '';
|
||||||
sessionId = id;
|
sessionId = id;
|
||||||
sessionEl.textContent = `session: ${sessionNames.get(id) || id}`;
|
sessionEl.textContent = `session: ${displayName}`;
|
||||||
currentHistory = [];
|
currentHistory = [];
|
||||||
|
|
||||||
for (let i = 0; i < data.messages.length; i++) {
|
for (let i = 0; i < data.messages.length; i++) {
|
||||||
@@ -662,7 +666,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!silent) addMessage('system', `Resumed session ${id}`);
|
if (!silent) addMessage('system', `Resumed session: ${displayName}`);
|
||||||
scrollToBottom();
|
scrollToBottom();
|
||||||
sessionsPanel.classList.remove('open');
|
sessionsPanel.classList.remove('open');
|
||||||
sessionsBackdrop.classList.remove('open');
|
sessionsBackdrop.classList.remove('open');
|
||||||
|
|||||||
Reference in New Issue
Block a user