91 lines
2.7 KiB
Python
91 lines
2.7 KiB
Python
import importlib.util
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
|
|
ASSET = Path(__file__).parents[1] / "src/integration/assets/hermes/__init__.py"
|
|
|
|
|
|
def load_asset():
|
|
spec = importlib.util.spec_from_file_location("herdr_hermes_integration", ASSET)
|
|
if spec is None or spec.loader is None:
|
|
raise RuntimeError("could not load Hermes integration asset")
|
|
module = importlib.util.module_from_spec(spec)
|
|
spec.loader.exec_module(module)
|
|
return module
|
|
|
|
|
|
class FakeContext:
|
|
def __init__(self):
|
|
self.hooks = {}
|
|
|
|
def register_hook(self, name, callback):
|
|
self.hooks[name] = callback
|
|
|
|
|
|
class HermesIntegrationAssetTests(unittest.TestCase):
|
|
def test_reports_only_root_session_identity(self):
|
|
module = load_asset()
|
|
calls = []
|
|
module._send = lambda method, params: calls.append((method, params))
|
|
context = FakeContext()
|
|
module.register(context)
|
|
|
|
self.assertEqual(
|
|
set(context.hooks),
|
|
{"on_session_start", "on_session_reset", "pre_llm_call"},
|
|
)
|
|
|
|
context.hooks["on_session_start"](session_id="root-1", platform="tui")
|
|
context.hooks["pre_llm_call"](session_id="root-1", platform="tui")
|
|
context.hooks["pre_llm_call"](session_id="child", platform="subagent")
|
|
context.hooks["on_session_reset"](session_id="root-2", platform="tui")
|
|
context.hooks["pre_llm_call"](
|
|
session_id="background", platform="tui"
|
|
)
|
|
|
|
self.assertEqual(
|
|
calls,
|
|
[
|
|
(
|
|
"pane.report_agent_session",
|
|
{
|
|
"agent_session_id": "root-1",
|
|
"session_start_source": "startup",
|
|
},
|
|
),
|
|
(
|
|
"pane.report_agent_session",
|
|
{
|
|
"agent_session_id": "root-2",
|
|
"session_start_source": "new",
|
|
},
|
|
),
|
|
],
|
|
)
|
|
|
|
def test_first_turn_recovers_resumed_session_identity(self):
|
|
module = load_asset()
|
|
calls = []
|
|
module._send = lambda method, params: calls.append((method, params))
|
|
context = FakeContext()
|
|
module.register(context)
|
|
|
|
context.hooks["pre_llm_call"](session_id="resumed", platform="cli")
|
|
|
|
self.assertEqual(
|
|
calls,
|
|
[
|
|
(
|
|
"pane.report_agent_session",
|
|
{
|
|
"agent_session_id": "resumed",
|
|
"session_start_source": "resume",
|
|
},
|
|
)
|
|
],
|
|
)
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|