aboutsummaryrefslogtreecommitdiff
path: root/src/integration/assets
diff options
context:
space:
mode:
Diffstat (limited to 'src/integration/assets')
-rw-r--r--src/integration/assets/hermes/__init__.py63
1 files changed, 23 insertions, 40 deletions
diff --git a/src/integration/assets/hermes/__init__.py b/src/integration/assets/hermes/__init__.py
index 5474e5e3..9b1d51e2 100644
--- a/src/integration/assets/hermes/__init__.py
+++ b/src/integration/assets/hermes/__init__.py
@@ -1,4 +1,4 @@
-"""Hermes plugin installed by Herdr to report agent lifecycle state."""
+"""Hermes plugin installed by Herdr to report resumable session identity."""
# HERDR_INTEGRATION_ID=hermes
# HERDR_INTEGRATION_VERSION=4
@@ -13,6 +13,7 @@ import time
_SOURCE = "herdr:hermes"
_AGENT = "hermes"
+_INTERACTIVE_PLATFORMS = {"cli", "tui", "desktop", "acp"}
def _base_params() -> tuple[str, str] | None:
@@ -56,53 +57,35 @@ def _send(method: str, params: dict) -> None:
pass
-def _session_id(kwargs: dict) -> str | None:
- value = kwargs.get("session_id")
- if isinstance(value, str) and value:
- return value
- return None
-
-
-def _report(state: str, **kwargs) -> None:
- params = {"state": state}
- session_id = _session_id(kwargs)
- if session_id:
- params["agent_session_id"] = session_id
- _send("pane.report_agent", params)
+def _report_session(start_source: str, **kwargs) -> None:
+ if kwargs.get("platform") not in _INTERACTIVE_PLATFORMS:
+ return
+ session_id = kwargs.get("session_id")
+ if not isinstance(session_id, str) or not session_id:
+ return
+ _send(
+ "pane.report_agent_session",
+ {
+ "agent_session_id": session_id,
+ "session_start_source": start_source,
+ },
+ )
def _session_started(**kwargs) -> None:
- session_id = _session_id(kwargs)
- if session_id:
- _send(
- "pane.report_agent_session",
- {
- "agent_session_id": session_id,
- "session_start_source": "startup",
- },
- )
- _idle(**kwargs)
-
-
-def _working(**kwargs) -> None:
- _report("working", **kwargs)
+ _report_session("startup", **kwargs)
-def _blocked(**kwargs) -> None:
- _report("blocked", **kwargs)
+def _session_reset(**kwargs) -> None:
+ _report_session("new", **kwargs)
-def _idle(**kwargs) -> None:
- _report("idle", **kwargs)
+def _session_observed(**kwargs) -> None:
+ if kwargs.get("platform") == "cli":
+ _report_session("resume", **kwargs)
def register(ctx):
ctx.register_hook("on_session_start", _session_started)
- ctx.register_hook("pre_llm_call", _working)
- ctx.register_hook("pre_api_request", _working)
- ctx.register_hook("pre_tool_call", _working)
- ctx.register_hook("post_tool_call", _working)
- ctx.register_hook("pre_approval_request", _blocked)
- ctx.register_hook("post_approval_response", _working)
- ctx.register_hook("post_llm_call", _idle)
- ctx.register_hook("on_session_end", _idle)
+ ctx.register_hook("on_session_reset", _session_reset)
+ ctx.register_hook("pre_llm_call", _session_observed)