feat(tasks): add skill-templated task graph execution

This commit is contained in:
2026-06-23 10:22:58 +08:00
parent 6843d89b2c
commit 53b13e8eac
53 changed files with 4773 additions and 756 deletions

View File

@ -3,7 +3,65 @@ from __future__ import annotations
from pathlib import Path
from beaver.engine.session.manager import SessionManager
from beaver.tasks.evidence import EvidenceBuilder, RunEvidence, TaskEvidencePacket, ToolEvidence, render_task_evidence
from beaver.tasks.evidence import (
EvidenceBuilder,
RunEvidence,
TaskEvidencePacket,
ToolEvidence,
evaluate_node_evidence,
render_task_evidence,
)
def _run_evidence(*, tool_results: list[ToolEvidence] | None = None) -> RunEvidence:
return RunEvidence(
run_id="run-1",
session_id="session-1",
output_text="",
finish_reason="stop",
tool_results=list(tool_results or []),
)
def test_evaluate_node_evidence_requires_successful_tool_result() -> None:
evidence = _run_evidence(
tool_results=[
ToolEvidence(
tool_name="web_fetch",
tool_call_id="call-1",
content="failed",
event_payload={"success": False},
)
]
)
assert evaluate_node_evidence(evidence, ["tool_result"], "done") == [
"missing required evidence: tool_result"
]
def test_evaluate_node_evidence_accepts_url_in_successful_tool_content() -> None:
evidence = _run_evidence(
tool_results=[
ToolEvidence(
tool_name="web_fetch",
tool_call_id="call-1",
content="Source: https://example.test/report",
event_payload={"success": True},
)
]
)
assert evaluate_node_evidence(evidence, ["tool_result", "url"], "done") == []
def test_evaluate_node_evidence_checks_output_and_unknown_requirements() -> None:
evidence = _run_evidence()
assert evaluate_node_evidence(evidence, ["output", "unknown_type"], " ") == [
"missing required evidence: output",
"unsupported evidence requirement: unknown_type",
]
def test_evidence_builder_preserves_full_tool_result(tmp_path: Path) -> None: