2.4 KiB
2.4 KiB
Test Plan: Sessions
Feature description
Sessions persist conversation history across multiple turns. They store messages, role context, model info, and optional MCP config. Sessions can be temporary, named, or auto-named.
Behaviors to test
Session creation
- Temp session created with TEMP_SESSION_NAME
- Named session created at correct file path
- New session captures current role via extract_role
- New session captures save_session from AppConfig
- Session tracks model_id
Session loading
- Named session loads from YAML file
- Loaded session resolves model via Model::retrieve_model
- Loaded session restores role_prompt if role exists
- Auto-named sessions (prefixed
_/) handled correctly
Session saving
- Session saved to correct path
- Session file contains messages, model_id, role info
- save_session flag controls whether session is persisted
- set_save_session_this_time overrides for current turn
Session lifecycle
- use_session creates or loads session
- Already in session → error
- exit_session saves and clears
- empty_session clears messages but keeps session active
Session carry-over
- New empty session with last_message prompts "incorporate?"
- If accepted, last Q&A added to session
- If declined, session starts fresh
- Only prompts when continuous and output not empty
Session compression
- maybe_compress_session returns true when threshold exceeded
- compress_session reduces message count
- Compression message shown to user
- Session usable after compression
Session autoname
- maybe_autoname_session returns true for new sessions
- Auto-naming sets session name based on content
- Autoname only triggers once per session
Session info
- session_info returns formatted session details
- Shows message count, model, role, tokens
Context switching scenarios
- Session → role change: role updated within session
- Session → exit session: messages saved, state cleared
- Agent session → exit: agent session cleanup
- Session with MCP → exit: MCP servers handled
Old code reference
src/config/mod.rs—use_session,exit_session,empty_sessionsrc/config/session.rs—Sessionstruct, new, load, savesrc/config/request_context.rs—use_session,exit_session