Full prompt/completion content for one llm.call, captured and
credential-scrubbed at the agent-loop boundary so the OTel exporter can emit
gen_ai.input.messages / gen_ai.output.messages / gen_ai.system_instructions.
A single conversation message captured for OTel GenAI semconv export.
Structurally mirrors crate::model_provider::ChatMessage but is defined
independently to keep the observability API decoupled from the model-provider
API and to signal that content has been credential-scrubbed at capture time.