Scope sessions to workspace with legacy fallback
This commit is contained in:
parent
3411035447
commit
8f49b52079
@ -42,8 +42,30 @@ class Session:
|
||||
self.updated_at = datetime.now()
|
||||
|
||||
def get_history(self, max_messages: int = 500) -> list[dict[str, Any]]:
|
||||
"""Get recent messages in LLM format (role + content only)."""
|
||||
return [{"role": m["role"], "content": m["content"]} for m in self.messages[-max_messages:]]
|
||||
"""
|
||||
Get recent messages in LLM format.
|
||||
|
||||
Preserves tool metadata for replay/debugging fidelity.
|
||||
"""
|
||||
history: list[dict[str, Any]] = []
|
||||
for msg in self.messages[-max_messages:]:
|
||||
llm_msg: dict[str, Any] = {
|
||||
"role": msg["role"],
|
||||
"content": msg.get("content", ""),
|
||||
}
|
||||
|
||||
if msg["role"] == "assistant" and "tool_calls" in msg:
|
||||
llm_msg["tool_calls"] = msg["tool_calls"]
|
||||
|
||||
if msg["role"] == "tool":
|
||||
if "tool_call_id" in msg:
|
||||
llm_msg["tool_call_id"] = msg["tool_call_id"]
|
||||
if "name" in msg:
|
||||
llm_msg["name"] = msg["name"]
|
||||
|
||||
history.append(llm_msg)
|
||||
|
||||
return history
|
||||
|
||||
def clear(self) -> None:
|
||||
"""Clear all messages and reset session to initial state."""
|
||||
@ -61,13 +83,19 @@ class SessionManager:
|
||||
|
||||
def __init__(self, workspace: Path):
|
||||
self.workspace = workspace
|
||||
self.sessions_dir = ensure_dir(Path.home() / ".nanobot" / "sessions")
|
||||
self.sessions_dir = ensure_dir(self.workspace / "sessions")
|
||||
self.legacy_sessions_dir = Path.home() / ".nanobot" / "sessions"
|
||||
self._cache: dict[str, Session] = {}
|
||||
|
||||
def _get_session_path(self, key: str) -> Path:
|
||||
"""Get the file path for a session."""
|
||||
safe_key = safe_filename(key.replace(":", "_"))
|
||||
return self.sessions_dir / f"{safe_key}.jsonl"
|
||||
|
||||
def _get_legacy_session_path(self, key: str) -> Path:
|
||||
"""Get the legacy global session path for backward compatibility."""
|
||||
safe_key = safe_filename(key.replace(":", "_"))
|
||||
return self.legacy_sessions_dir / f"{safe_key}.jsonl"
|
||||
|
||||
def get_or_create(self, key: str) -> Session:
|
||||
"""
|
||||
@ -92,6 +120,10 @@ class SessionManager:
|
||||
def _load(self, key: str) -> Session | None:
|
||||
"""Load a session from disk."""
|
||||
path = self._get_session_path(key)
|
||||
if not path.exists():
|
||||
legacy_path = self._get_legacy_session_path(key)
|
||||
if legacy_path.exists():
|
||||
path = legacy_path
|
||||
|
||||
if not path.exists():
|
||||
return None
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user