mirror of
https://github.com/AstrBotDevs/AstrBot
synced 2026-07-16 09:40:30 +08:00
Introduce session-level state management for tools that need to maintain state across conversation turns within the same session (UMO). - Add ToolSessionManager class for central per-(UMO, tool_name) state - Add ToolSessionState with set_persistent(key) support - Add is_stateful flag to FunctionTool base class - Wire session_manager through run_context in all agent runners - Update ExecuteShellTool to use framework session manager - Update CLAUDE.md with stateful tool documentation BREAKING: Tools that were manually managing session state via _sessions dict should migrate to use the framework's ToolSessionManager for proper lifecycle management and persistence support.
29 lines
919 B
Python
29 lines
919 B
Python
from typing import Any, Generic
|
|
|
|
from pydantic import Field
|
|
from pydantic.dataclasses import dataclass
|
|
from typing_extensions import TypeVar
|
|
|
|
from .message import Message
|
|
|
|
TContext = TypeVar("TContext", default=Any)
|
|
|
|
|
|
@dataclass
|
|
class ContextWrapper(Generic[TContext]):
|
|
"""A context for running an agent, which can be used to pass additional data or state."""
|
|
|
|
context: TContext
|
|
messages: list[Message] = Field(default_factory=list)
|
|
"""This field stores the llm message context for the agent run, agent runners will maintain this field automatically."""
|
|
tool_call_timeout: int = 120 # Default tool call timeout in seconds
|
|
session_manager: Any = None
|
|
"""
|
|
Optional session manager (ToolSessionManager) for stateful tool execution.
|
|
When provided, stateful tools can maintain state across
|
|
conversation turns within the same session (UMO).
|
|
"""
|
|
|
|
|
|
NoContext = ContextWrapper[None]
|