mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-11-12 14:00:35 +00:00
* fix(subagents): keep tests_passed evidence per call when a provider reuses its id Tool-call ids are unique per response, not per conversation. Some providers number calls per response, so two turns can both issue call_0. The bash evidence for tests_passed acceptance assumed one call per id in two places: - _harvest_bash_executions built one id -> command map over the whole conversation, so every result under a reused id was labelled with the last call's command. A passing subset run (pytest tests/unit) became evidence for the full suite when a later call_0 ran pytest tests and had no result yet. - update_bash_executions merged values chunks by tool_call_id. A dict keeps a key's first position, so a later run under a reused id overwrote the earlier entry in place. With call_0 failing, call_1 passing and call_0 failing again, the merged list ended on the stale pass and the leaf held. Pair results through pair_tool_call_results, which answers a call only from its own response, and merge chunks by result message id, keeping the call id for entries without one. Each run stays a separate entry in execution order, so the latest run decides the leaf again. * fix(subagents): key the summary cache per run and document id-less calls - Cache full-output test summaries by result message id (call id only without one), so reused call ids keep one cache slot per run. - Update the bash_executions field doc and the subagents guide to the result-id merge, and state that calls without an id record no evidence (the leaf stays UNVERIFIED). - Tests pin both: one classification per run under a reused id, and no evidence for a call with a missing or empty id. * chore(subagents): drop the stray empty deerflow/executor.py The previous commit added a 0-byte module at the package root by mistake. Nothing imports deerflow.executor; the real module is deerflow/subagents/executor.py.