System prompt construction for the agent loop and channel subsystem.
These functions were originally in channels/mod.rs but live here to
break a circular dependency between the channels and agent modules.
Borrow-only Attributable holding an agent alias.
Used by entry points (loop_::run, process_message, cron dispatch)
that don’t construct a full Agent but still need to open an
attribution_span! carrying the agent’s role + alias.
Lightweight metadata for turn-level event emission.
Built at emission call sites from the turn’s borrows — not a cached duplicate.
The values are borrows from the turn mint site; the mint site stays the
single source of truth for the (channel, agent_alias, turn_id) triple.