Implement session continuation feature in CLI
- Added a new command-line argument `--continue` to allow users to resume the most recent CLI session easily. - Introduced a helper function to retrieve the last session ID from the database. - Updated command handling to integrate the new session continuation functionality.
This commit is contained in:
parent
d2c932d3ac
commit
3c1e31de3e
1 changed files with 41 additions and 2 deletions
|
|
@ -28,6 +28,7 @@ import argparse
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
# Add project root to path
|
# Add project root to path
|
||||||
PROJECT_ROOT = Path(__file__).parent.parent.resolve()
|
PROJECT_ROOT = Path(__file__).parent.parent.resolve()
|
||||||
|
|
@ -90,8 +91,31 @@ def _has_any_provider_configured() -> bool:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def _resolve_last_cli_session() -> Optional[str]:
|
||||||
|
"""Look up the most recent CLI session ID from SQLite. Returns None if unavailable."""
|
||||||
|
try:
|
||||||
|
from hermes_state import SessionDB
|
||||||
|
db = SessionDB()
|
||||||
|
sessions = db.search_sessions(source="cli", limit=1)
|
||||||
|
db.close()
|
||||||
|
if sessions:
|
||||||
|
return sessions[0]["id"]
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def cmd_chat(args):
|
def cmd_chat(args):
|
||||||
"""Run interactive chat CLI."""
|
"""Run interactive chat CLI."""
|
||||||
|
# Resolve --continue into --resume with the latest CLI session
|
||||||
|
if getattr(args, "continue_last", False) and not getattr(args, "resume", None):
|
||||||
|
last_id = _resolve_last_cli_session()
|
||||||
|
if last_id:
|
||||||
|
args.resume = last_id
|
||||||
|
else:
|
||||||
|
print("No previous CLI session found to continue.")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
# First-run guard: check if any provider is configured before launching
|
# First-run guard: check if any provider is configured before launching
|
||||||
if not _has_any_provider_configured():
|
if not _has_any_provider_configured():
|
||||||
print()
|
print()
|
||||||
|
|
@ -770,6 +794,13 @@ For more help on a command:
|
||||||
default=None,
|
default=None,
|
||||||
help="Resume a previous session by ID (shortcut for: hermes chat --resume ID)"
|
help="Resume a previous session by ID (shortcut for: hermes chat --resume ID)"
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--continue", "-c",
|
||||||
|
dest="continue_last",
|
||||||
|
action="store_true",
|
||||||
|
default=False,
|
||||||
|
help="Resume the most recent CLI session"
|
||||||
|
)
|
||||||
|
|
||||||
subparsers = parser.add_subparsers(dest="command", help="Command to run")
|
subparsers = parser.add_subparsers(dest="command", help="Command to run")
|
||||||
|
|
||||||
|
|
@ -809,6 +840,13 @@ For more help on a command:
|
||||||
metavar="SESSION_ID",
|
metavar="SESSION_ID",
|
||||||
help="Resume a previous session by ID (shown on exit)"
|
help="Resume a previous session by ID (shown on exit)"
|
||||||
)
|
)
|
||||||
|
chat_parser.add_argument(
|
||||||
|
"--continue", "-c",
|
||||||
|
dest="continue_last",
|
||||||
|
action="store_true",
|
||||||
|
default=False,
|
||||||
|
help="Resume the most recent CLI session"
|
||||||
|
)
|
||||||
chat_parser.set_defaults(func=cmd_chat)
|
chat_parser.set_defaults(func=cmd_chat)
|
||||||
|
|
||||||
# =========================================================================
|
# =========================================================================
|
||||||
|
|
@ -1315,8 +1353,8 @@ For more help on a command:
|
||||||
cmd_version(args)
|
cmd_version(args)
|
||||||
return
|
return
|
||||||
|
|
||||||
# Handle top-level --resume as shortcut to chat --resume
|
# Handle top-level --resume / --continue as shortcut to chat
|
||||||
if args.resume and args.command is None:
|
if (args.resume or args.continue_last) and args.command is None:
|
||||||
args.command = "chat"
|
args.command = "chat"
|
||||||
args.query = None
|
args.query = None
|
||||||
args.model = None
|
args.model = None
|
||||||
|
|
@ -1334,6 +1372,7 @@ For more help on a command:
|
||||||
args.toolsets = None
|
args.toolsets = None
|
||||||
args.verbose = False
|
args.verbose = False
|
||||||
args.resume = None
|
args.resume = None
|
||||||
|
args.continue_last = False
|
||||||
cmd_chat(args)
|
cmd_chat(args)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue