Ctrl K
ComunidadGuías…

butler/blackboard/audit.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""Audit 查询:班次↔任务追溯。"""

from __future__ import annotations

from butler.blackboard.shift_io import list_shift_cards
from butler.blackboard.task_io import load_claim


def audit_task(task_id: str) -> str:
    """输出 task_id 相关的所有班次卡(按时间序)。"""
    safe = task_id.replace("#", "%23").replace("/", "_")
    relevant_cards = [
        c for c in list_shift_cards()
        if c.claim_ref and safe in c.claim_ref
    ]
    relevant_cards.sort(key=lambda c: c.shift_id)

    claim_note = ""
    try:
        c = load_claim(task_id)
        claim_note = f"claim.status={c.status.value}, shift_refs={c.shift_refs}"
    except FileNotFoundError:
        claim_note = "(no claim file)"

    lines = [f"# Audit: {task_id}", "", f"## Claim: {claim_note}", "", "## Shifts:"]
    for card in relevant_cards:
        lines.append(f"- {card.shift_id} ({card.agent.value}): {card.intent}")
        for p in card.produced:
            lines.append(f"  - produced: {p.type} {p.ref} {p.summary or ''}")
        if card.next_shift_recommendation:
            lines.append(
                f"\n## Next shift recommendation: agent={card.next_shift_recommendation.agent} "
                f"reason={card.next_shift_recommendation.reason}"
            )
    return "\n".join(lines) + "\n"