diff --git a/crates/vfs_cli_app/src/plugin_payload.rs b/crates/vfs_cli_app/src/plugin_payload.rs index 74c07915..adde434a 100644 --- a/crates/vfs_cli_app/src/plugin_payload.rs +++ b/crates/vfs_cli_app/src/plugin_payload.rs @@ -76,6 +76,11 @@ pub const CLAUDE_PLUGIN_FILES: &[PayloadFile] = &[ ]; pub const HERMES_PLUGIN_FILES: &[PayloadFile] = &[ + PayloadFile { + path: "__init__.py", + content: include_str!("../../../plugins/hermes/__init__.py"), + executable: false, + }, PayloadFile { path: "plugin.yaml", content: include_str!("../../../plugins/hermes/plugin.yaml"), diff --git a/plugins/hermes/__init__.py b/plugins/hermes/__init__.py new file mode 100644 index 00000000..55cd1671 --- /dev/null +++ b/plugins/hermes/__init__.py @@ -0,0 +1,8 @@ +"""Where: plugins/hermes/__init__.py +What: Hermes plugin entrypoint shim for the Kinic adapter package. +Why: Hermes loads register(ctx) from the plugin root __init__.py. +""" + +from .kinic_hermes import register + +__all__ = ["register"] diff --git a/plugins/hermes/kinic_hermes/__init__.py b/plugins/hermes/kinic_hermes/__init__.py index ee1bbcf6..10d2e09e 100644 --- a/plugins/hermes/kinic_hermes/__init__.py +++ b/plugins/hermes/kinic_hermes/__init__.py @@ -36,7 +36,8 @@ def post_tool_call(self, tool_name: str, args: Any = None, result: Any = None, d if skill_id: self.buffer.skill_candidates.add(skill_id) - def transform_llm_output(self, output: str, **_: Any) -> str: + def transform_llm_output(self, response_text: str = "", **kwargs: Any) -> str: + output = response_text or str(kwargs.get("output", "")) self.buffer.final_response = output return output diff --git a/plugins/hermes/tests/test_plugin.py b/plugins/hermes/tests/test_plugin.py index 1954f420..91ca6f76 100644 --- a/plugins/hermes/tests/test_plugin.py +++ b/plugins/hermes/tests/test_plugin.py @@ -272,6 +272,13 @@ def test_skill_view_and_usage_diff_record_one_run(self) -> None: self.assertEqual(records[0][1]["agent_outcome"], "unknown") plugin.client.create_ready_jobs.assert_not_called() + def test_transform_llm_output_accepts_hermes_response_text_keyword(self) -> None: + import kinic_hermes as plugin_module + + plugin = plugin_module.KinicPlugin() + self.assertEqual(plugin.transform_llm_output(response_text="done"), "done") + self.assertEqual(plugin.buffer.final_response, "done") + def test_register_tool_uses_hermes_keyword_api(self) -> None: import kinic_hermes as plugin_module