3.8 KiB
3.8 KiB
Test Plan: RequestContext
Feature description
RequestContext is the per-request mutable state container. It holds
the active model, role, session, agent, RAG, tool scope, and agent
runtime. It provides methods for scope transitions, state queries,
and chat completion lifecycle.
Behaviors to test
State management
- info() returns formatted system info (requires model provider config)
- state() returns correct StateFlags combination
- current_model() returns active model (tested implicitly via extract_role)
- role_info() errors when no role, succeeds with role
- session_info() format (requires filesystem for sessions)
- rag_info() errors when no rag
- agent_info() errors when no agent
- sysinfo() returns system details (requires model provider config)
- working_mode correctly distinguishes Repl vs Cmd
Scope transitions
- use_role changes role (via use_role_obj)
- use_session creates/loads session, rebuilds tool scope (async + filesystem)
- use_agent initializes agent with all subsystems (via exit_agent test)
- exit_role clears role
- exit_session saves and clears session
- exit_agent clears agent, supervisor, rag, session
- exit_rag clears rag
- bootstrap_tools rebuilds tool scope with global MCP (async + MCP servers)
Chat completion lifecycle
- before_chat_completion sets up for API call
- after_chat_completion saves messages, updates state (async + client)
- discontinuous_last_message marks last message as non-continuous
ToolScope management
- rebuild_tool_scope creates fresh Functions
- rebuild_tool_scope acquires MCP servers via factory (requires live MCP)
- rebuild_tool_scope appends user interaction functions in REPL mode
- rebuild_tool_scope appends MCP meta functions for started servers (requires live MCP)
- Tool tracker preserved across scope rebuilds
AgentRuntime management
- agent_runtime populated by use_agent (via exit_agent test)
- agent_runtime cleared by exit_agent
- Accessor methods (current_depth, supervisor, inbox, etc.) return correct values when agent active
- Accessor methods return defaults when no agent
Settings update
- update() handles all .set keys correctly (requires REPL command infra)
- update_app_config() clones and replaces Arc properly
- delete() handles all delete subcommands (requires REPL command infra)
Session helpers
- list_sessions() returns session names (requires filesystem)
- list_autoname_sessions() returns auto-named sessions (requires filesystem)
- session_file() returns correct path
- save_session() persists session (requires filesystem)
- empty_session() clears messages
Context switching scenarios
- No state → use_role → exit_role → no state
- No state → use_agent → exit_agent → no state
- Agent active → use_role_obj errors
- Agent → exit_agent → use_role (clean transition) (async)
Additional behaviors tested (not in original plan)
- state() empty context returns empty flags
- state() role only → ROLE flag
- state() empty session → SESSION_EMPTY flag
- state() role + session flags combine
- discontinuous_last_message noop when no last_message
- before_chat_completion creates LastMessage with empty output and continuous=true
- role_like_mut returns None when no active scope
- role_like_mut returns role when only role active
- role_like_mut prefers session over role
- session_file handles subdir/name format
- is_compressing_session false with no session
- is_compressing_session false with default session
Old code reference
src/config/request_context.rs— all methodssrc/config/mod.rs— original Config methods (for parity)