Skip to main content

relay_knowledge/domain/graph/retrieval/
context_pack.rs

1use serde::{Deserialize, Serialize};
2
3use super::super::{EvidenceSpan, GraphVersion};
4use super::{
5    CodeGraphArtifact, ContextEntity, ContextGraphFact, ContextGraphPath, FreshnessPolicy,
6    RankingSignal, RerankSignal, RetrievalBackendStatus, RetrieverSource, TraversalProvenanceTrace,
7};
8
9/// A compact, auditable context pack for agent and UI adapters.
10#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
11pub struct RetrievedContextPack {
12    pub graph_version: GraphVersion,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub source_scope: Option<String>,
15    pub freshness: FreshnessPolicy,
16    pub truncated: bool,
17    #[serde(default, skip_serializing_if = "Vec::is_empty")]
18    pub backend_statuses: Vec<RetrievalBackendStatus>,
19    #[serde(default, skip_serializing_if = "Option::is_none")]
20    pub provenance_trace: Option<TraversalProvenanceTrace>,
21    pub items: Vec<ContextPackItem>,
22}
23
24/// Context-pack item tied to a retrieval hit.
25#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
26pub struct ContextPackItem {
27    pub result_id: String,
28    pub source_scope: String,
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub source_path: Option<String>,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub source_span: Option<EvidenceSpan>,
33    #[serde(default, skip_serializing_if = "Vec::is_empty")]
34    pub entities: Vec<ContextEntity>,
35    #[serde(default, skip_serializing_if = "Vec::is_empty")]
36    pub graph_facts: Vec<ContextGraphFact>,
37    #[serde(default, skip_serializing_if = "Vec::is_empty")]
38    pub graph_paths: Vec<ContextGraphPath>,
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub code_artifact: Option<CodeGraphArtifact>,
41    pub retriever_sources: Vec<RetrieverSource>,
42    pub ranking: Vec<RankingSignal>,
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub rerank: Option<RerankSignal>,
45}