Commit graph

3 commits

Author SHA1 Message Date
MuchoRio
95587d3855 refactor(agents): refine subagent filing directive and observation notice
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.
2026-10-10 19:55:32 +07:00
MuchoRio
b60224b662 fix(agents): prevent lost subagent findings and warn on unfiled reports
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.
2026-10-10 19:51:21 +07:00
Ahmed Allam
1edafd3e80 fix(agents): stop parents waiting on finished non-interactive children
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.
2026-09-02 22:11:12 +03:00