Introduced a new command "/compress" to the CLI, allowing users to manually trigger context compression on the current conversation. The method checks for sufficient conversation history and active agent status before performing compression, providing feedback on the number of messages and tokens before and after the operation. Updated command documentation accordingly.
51 lines
1.9 KiB
Python
51 lines
1.9 KiB
Python
"""Slash command definitions and autocomplete for the Hermes CLI.
|
|
|
|
Contains the COMMANDS dict and the SlashCommandCompleter class.
|
|
These are pure data/UI with no HermesCLI state dependency.
|
|
"""
|
|
|
|
from prompt_toolkit.completion import Completer, Completion
|
|
|
|
|
|
COMMANDS = {
|
|
"/help": "Show this help message",
|
|
"/tools": "List available tools",
|
|
"/toolsets": "List available toolsets",
|
|
"/model": "Show or change the current model",
|
|
"/prompt": "View/set custom system prompt",
|
|
"/personality": "Set a predefined personality",
|
|
"/clear": "Clear screen and reset conversation (fresh start)",
|
|
"/history": "Show conversation history",
|
|
"/new": "Start a new conversation (reset history)",
|
|
"/reset": "Reset conversation only (keep screen)",
|
|
"/retry": "Retry the last message (resend to agent)",
|
|
"/undo": "Remove the last user/assistant exchange",
|
|
"/save": "Save the current conversation",
|
|
"/config": "Show current configuration",
|
|
"/cron": "Manage scheduled tasks (list, add, remove)",
|
|
"/skills": "Search, install, inspect, or manage skills from online registries",
|
|
"/platforms": "Show gateway/messaging platform status",
|
|
"/verbose": "Cycle tool progress display: off → new → all → verbose",
|
|
"/compress": "Manually compress conversation context (flush memories + summarize)",
|
|
"/quit": "Exit the CLI (also: /exit, /q)",
|
|
}
|
|
|
|
|
|
class SlashCommandCompleter(Completer):
|
|
"""Autocomplete for /commands in the input area."""
|
|
|
|
def get_completions(self, document, complete_event):
|
|
text = document.text_before_cursor
|
|
if not text.startswith("/"):
|
|
return
|
|
word = text[1:]
|
|
for cmd, desc in COMMANDS.items():
|
|
cmd_name = cmd[1:]
|
|
if cmd_name.startswith(word):
|
|
yield Completion(
|
|
cmd_name,
|
|
start_position=-len(word),
|
|
display=cmd,
|
|
display_meta=desc,
|
|
)
|