mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-26 06:01:49 +00:00
fix(acp): replay native todo plans
This commit is contained in:
parent
4444d5fe4f
commit
bd3a5873e1
4 changed files with 99 additions and 9 deletions
|
|
@ -12,6 +12,7 @@ import acp
|
|||
from acp.schema import AgentPlanUpdate, ToolCallStart, ToolCallProgress, AgentThoughtChunk, AgentMessageChunk
|
||||
|
||||
from acp_adapter.events import (
|
||||
_build_plan_update_from_todo_result,
|
||||
_send_update,
|
||||
make_message_cb,
|
||||
make_step_cb,
|
||||
|
|
@ -296,7 +297,7 @@ class TestStepCallback:
|
|||
}
|
||||
mock_send.assert_called_once()
|
||||
|
||||
def test_todo_completion_emits_native_plan_update(self, mock_conn, event_loop_fixture):
|
||||
def test_todo_completion_emits_native_plan_update_after_tool_completion(self, mock_conn, event_loop_fixture):
|
||||
from collections import deque
|
||||
|
||||
tool_call_ids = {"todo": deque(["tc-todo"])}
|
||||
|
|
@ -314,9 +315,11 @@ class TestStepCallback:
|
|||
cb(1, [{"name": "todo", "result": todo_result}])
|
||||
|
||||
updates = [call.args[3] for call in mock_send.call_args_list]
|
||||
plan_updates = [u for u in updates if getattr(u, "session_update", None) == "plan"]
|
||||
assert len(plan_updates) == 1
|
||||
plan = plan_updates[0]
|
||||
assert [getattr(update, "session_update", None) for update in updates] == [
|
||||
"tool_call_update",
|
||||
"plan",
|
||||
]
|
||||
plan = updates[1]
|
||||
assert isinstance(plan, AgentPlanUpdate)
|
||||
assert [entry.content for entry in plan.entries] == [
|
||||
"Inspect ACP",
|
||||
|
|
@ -326,6 +329,22 @@ class TestStepCallback:
|
|||
assert [entry.status for entry in plan.entries] == ["completed", "in_progress", "completed"]
|
||||
assert [entry.priority for entry in plan.entries] == ["medium", "medium", "medium"]
|
||||
|
||||
def test_todo_plan_update_parses_json_with_trailing_hint(self):
|
||||
result = '{"todos":[{"id":"ship","content":"Ship ACP plan","status":"pending"}]}\n\n[Hint: persisted]'
|
||||
|
||||
update = _build_plan_update_from_todo_result(result)
|
||||
|
||||
assert isinstance(update, AgentPlanUpdate)
|
||||
assert [entry.content for entry in update.entries] == ["Ship ACP plan"]
|
||||
assert [entry.status for entry in update.entries] == ["pending"]
|
||||
|
||||
def test_todo_plan_update_with_empty_todos_clears_plan(self):
|
||||
update = _build_plan_update_from_todo_result('{"todos":[],"summary":{"total":0}}')
|
||||
|
||||
assert isinstance(update, AgentPlanUpdate)
|
||||
assert update.session_update == "plan"
|
||||
assert update.entries == []
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Message callback
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue