Addresses code review feedback from Greptile:
1. In child_initial_input, clarify that subagents authorized to report findings
should file confirmed vulnerabilities via create_vulnerability_report (or ensure
their reporting specialist has filed them) before calling agent_finish, preserving
specialist delegation roles.
2. In agent_finish and completion report, soften wording to a structured notice/advisory
so that clean assessments with negative observations (e.g. findings=['ruled out X'])
do not produce false alarms while still alerting parents to unfiled vulnerabilities.
In multi-agent pentests (e.g. Issue #1439 against DVWA), subagents frequently
discover exploitable vulnerabilities and supply them as narrative strings in
agent_finish(findings=[...]) without first calling create_vulnerability_report.
Because parent agents strictly rely on filed_report_ids from authoritative state
and avoid refiling from narrative text, these findings are silently dropped,
causing scans of vulnerable targets to complete with 0 findings.
1. In child_initial_input, explicitly instruct subagents to file confirmed
vulnerabilities via create_vulnerability_report before calling agent_finish,
clarifying that passing findings to agent_finish does not persist reports.
2. In agent_finish, when findings is non-empty but filed_report_ids is empty,
attach an explicit warning to the tool response payload and the rendered
completion report delivered to the parent inbox.
3. Add regression tests in test_agent_graph_coordination.py and test_inputs.py.
A non-interactive agent's loop returns after its terminal state, yet
send_message_to_agent kept reporting messages to it as delivered and the
parent then waited out wait_for_agents on a reply that could never come.
- AgentRuntime.resumable records whether the loop parks for wake-ups after a
terminal state; run_agent_loop / _start_child_runner set it from interactive.
- AgentCoordinator.send returns False (nothing queued) for a terminal agent
that is not resumable; send_message_to_agent surfaces target_status and
delivery_status=not_delivered with a pointer to list_reports / get_report.
- wait_for_agents returns wait_outcome=no_active_agents at once when no other
agent is running or waiting in a non-interactive run.
- agent_finish reads the reports the finishing agent filed from the report
state and puts their ids in the completion report, the parent message
(filed_report_ids) and its own return payload, so parents no longer have to
infer what was filed from prose.