mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-15 14:22:43 +00:00
fix(desktop): register /compress command in TUI gateway dispatch so Desktop can invoke it
This commit is contained in:
parent
65372395eb
commit
c0fbee990e
1 changed files with 66 additions and 0 deletions
|
|
@ -12196,6 +12196,72 @@ def _(rid, params: dict) -> dict:
|
|||
},
|
||||
)
|
||||
|
||||
if name in {"compress", "compact"}:
|
||||
if not session:
|
||||
return _err(rid, 4001, "no active session to compress")
|
||||
if session.get("running"):
|
||||
return _err(
|
||||
rid, 4009, "session busy — /interrupt the current turn before /compress"
|
||||
)
|
||||
sid = params.get("session_id", "")
|
||||
try:
|
||||
from agent.manual_compression_feedback import summarize_manual_compression
|
||||
from agent.model_metadata import estimate_request_tokens_rough
|
||||
|
||||
with session["history_lock"]:
|
||||
before_messages = list(session.get("history", []))
|
||||
history_version = int(session.get("history_version", 0))
|
||||
before_count = len(before_messages)
|
||||
_agent = session["agent"]
|
||||
_sys_prompt = getattr(_agent, "_cached_system_prompt", "") or ""
|
||||
_tools = getattr(_agent, "tools", None) or None
|
||||
before_tokens = (
|
||||
estimate_request_tokens_rough(
|
||||
before_messages, system_prompt=_sys_prompt, tools=_tools
|
||||
)
|
||||
if before_count
|
||||
else 0
|
||||
)
|
||||
removed, usage = _compress_session_history(
|
||||
session,
|
||||
arg.strip() or None,
|
||||
approx_tokens=before_tokens,
|
||||
before_messages=before_messages,
|
||||
history_version=history_version,
|
||||
)
|
||||
with session["history_lock"]:
|
||||
after_messages = list(session.get("history", []))
|
||||
after_count = len(after_messages)
|
||||
_sys_prompt_after = (
|
||||
getattr(_agent, "_cached_system_prompt", "") or _sys_prompt
|
||||
)
|
||||
_tools_after = getattr(_agent, "tools", None) or _tools
|
||||
after_tokens = (
|
||||
estimate_request_tokens_rough(
|
||||
after_messages,
|
||||
system_prompt=_sys_prompt_after,
|
||||
tools=_tools_after,
|
||||
)
|
||||
if after_count
|
||||
else 0
|
||||
)
|
||||
_sync_session_key_after_compress(sid, session)
|
||||
summary = summarize_manual_compression(
|
||||
before_messages, after_messages, before_tokens, after_tokens
|
||||
)
|
||||
_emit("session.info", sid, _session_info(session.get("agent"), session))
|
||||
return _ok(
|
||||
rid,
|
||||
{
|
||||
"type": "exec",
|
||||
"output": "\n".join(
|
||||
filter(None, [summary["headline"], summary["token_line"], summary.get("note")])
|
||||
),
|
||||
},
|
||||
)
|
||||
except Exception as exc:
|
||||
return _err(rid, 5009, f"compress failed: {exc}")
|
||||
|
||||
return _err(rid, 4018, f"not a quick/plugin/skill command: {name}")
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue