Skip to main content

relay_knowledge/domain/code/repository/
repository_status.rs

1use serde::{Deserialize, Serialize};
2
3use super::super::CodeParseStatusCounts;
4use super::CodeQueryKind;
5
6/// Repository index status and diagnostics summary.
7#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
8pub struct CodeRepositoryStatus {
9    pub repository_id: String,
10    pub alias: String,
11    pub root_path: String,
12    pub path_filters: Vec<String>,
13    pub language_filters: Vec<String>,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub last_indexed_scope_id: Option<String>,
16    pub last_indexed_commit: Option<String>,
17    pub tree_hash: Option<String>,
18    pub state: String,
19    pub indexed_file_count: usize,
20    pub symbol_count: usize,
21    pub reference_count: usize,
22    pub chunk_count: usize,
23    pub stale: bool,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub degraded_reason: Option<String>,
26}
27
28/// Counts and aliases removed when a registered repository is deleted.
29#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
30pub struct CodeRepositoryRemovalSummary {
31    pub repository_id: String,
32    pub aliases_removed: Vec<String>,
33    pub removed_scope_count: usize,
34    pub removed_index_task_count: usize,
35    pub removed_repository_set_member_count: usize,
36    pub invalidated_repository_set_count: usize,
37}
38
39/// Language bucket in a repository scope preview.
40#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
41pub struct CodeRepositoryLanguagePreview {
42    pub language_id: String,
43    pub file_count: usize,
44    pub byte_count: usize,
45}
46
47/// Large file surfaced before a full repository index starts.
48#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
49pub struct CodeRepositoryLargestFile {
50    pub path: String,
51    pub byte_count: usize,
52}
53
54/// Path excluded from indexing by preset, ignore file, or request scope.
55#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
56pub struct CodeRepositoryExcludedPath {
57    pub path: String,
58    pub reason: String,
59}
60
61/// Non-mutating preview of the effective repository indexing scope.
62#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
63pub struct CodeRepositoryScopePreview {
64    pub repository_id: String,
65    pub alias: String,
66    pub requested_ref: String,
67    pub resolved_commit_sha: String,
68    pub tree_hash: String,
69    pub selected_file_count: usize,
70    pub selected_byte_count: usize,
71    pub unsupported_file_count: usize,
72    pub generated_or_heavy_file_count: usize,
73    pub expected_degraded_file_count: usize,
74    pub language_distribution: Vec<CodeRepositoryLanguagePreview>,
75    pub largest_files: Vec<CodeRepositoryLargestFile>,
76    pub excluded_paths: Vec<CodeRepositoryExcludedPath>,
77}
78
79/// Aggregated totals for repository indexes separate from graph-evidence code rows.
80#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
81pub struct CodeRepositoryTotals {
82    pub repository_count: usize,
83    pub indexed_file_count: usize,
84    pub symbol_count: usize,
85    #[serde(default)]
86    pub handwritten_symbol_count: usize,
87    #[serde(default)]
88    pub generated_symbol_count: usize,
89    pub reference_count: usize,
90    pub chunk_count: usize,
91    pub degraded_file_count: usize,
92    pub parse_status_counts: CodeParseStatusCounts,
93}
94
95/// Generated/handwritten split for symbols in one code index scope.
96#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
97pub struct CodeSymbolGenerationCounts {
98    #[serde(default)]
99    pub handwritten_symbol_count: usize,
100    #[serde(default)]
101    pub generated_symbol_count: usize,
102}
103
104/// Representative query latency captured for an operations report.
105#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
106pub struct CodeRepositoryLatencySample {
107    pub query: String,
108    pub kind: CodeQueryKind,
109    pub result_count: usize,
110    pub duration_ms: u64,
111}
112
113/// Reusable repository operations report.
114#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
115pub struct CodeRepositoryReport {
116    pub repository_id: String,
117    pub alias: String,
118    pub root_path: String,
119    pub path_filters: Vec<String>,
120    pub language_filters: Vec<String>,
121    pub resolved_commit_sha: Option<String>,
122    pub tree_hash: Option<String>,
123    pub indexed_file_count: usize,
124    pub symbol_count: usize,
125    #[serde(default)]
126    pub handwritten_symbol_count: usize,
127    #[serde(default)]
128    pub generated_symbol_count: usize,
129    pub reference_count: usize,
130    pub chunk_count: usize,
131    pub degraded_file_count: usize,
132    pub resolved_edge_count: usize,
133    pub ambiguous_edge_count: usize,
134    pub unresolved_edge_count: usize,
135    pub degradation_summary: Vec<String>,
136    pub representative_queries: Vec<String>,
137    pub latency_samples: Vec<CodeRepositoryLatencySample>,
138    pub freshness_state: String,
139}
140
141#[cfg(test)]
142#[path = "repository_status_tests.rs"]
143mod tests;