79 lines
2.2 KiB
Python
79 lines
2.2 KiB
Python
#!/usr/bin/env python3
|
|
"""CLI helper to inspect and reset Hermes voice agent sessions."""
|
|
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
# Add VoiceAgent1 project root to sys.path
|
|
project_root = Path(__file__).resolve().parent.parent
|
|
if str(project_root) not in sys.path:
|
|
sys.path.insert(0, str(project_root))
|
|
|
|
SESSION_FILE_NAME = ".hermes-voice-session.json"
|
|
|
|
|
|
def get_session_file(app_dir: Path | None = None) -> Path:
|
|
base_dir = app_dir or project_root
|
|
return base_dir / SESSION_FILE_NAME
|
|
|
|
|
|
def get_active_session_id(app_dir: Path | None = None) -> str | None:
|
|
session_file = get_session_file(app_dir)
|
|
if session_file.exists():
|
|
try:
|
|
data = json.loads(session_file.read_text())
|
|
sid = data.get("session_id")
|
|
if sid and isinstance(sid, str):
|
|
return sid.strip()
|
|
except Exception:
|
|
pass
|
|
return None
|
|
|
|
|
|
def reset_session(app_dir: Path | None = None) -> tuple[bool, str]:
|
|
session_file = get_session_file(app_dir)
|
|
deleted = False
|
|
if session_file.exists():
|
|
try:
|
|
session_file.unlink()
|
|
deleted = True
|
|
except Exception as e:
|
|
return False, f"Could not remove session file: {e}"
|
|
|
|
msg = "Session reset successfully. A fresh Hermes session will start on the next turn."
|
|
if not deleted:
|
|
msg = "No active session file found. Next turn will start with a fresh session."
|
|
|
|
try:
|
|
import web_server
|
|
web_server.broadcast_event("session_reset", {"message": msg})
|
|
except Exception:
|
|
pass
|
|
|
|
return True, msg
|
|
|
|
|
|
def main():
|
|
app_dir = project_root
|
|
|
|
if len(sys.argv) < 2 or sys.argv[1] in ("get", "info", "current", "show"):
|
|
sid = get_active_session_id(app_dir)
|
|
if sid:
|
|
print(f"Active Session ID: {sid}")
|
|
else:
|
|
print("No active Hermes session (a new session will start on the next turn).")
|
|
return
|
|
|
|
action = sys.argv[1].lower()
|
|
if action in ("reset", "new", "clear"):
|
|
ok, msg = reset_session(app_dir)
|
|
print(msg)
|
|
else:
|
|
print(f"Unknown action: {sys.argv[1]}. Usage: python bin/session_tool.py [get|reset]")
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|