Skip to main content

relay_knowledge/env/
overrides.rs

1//! Typed relay-specific environment overrides.
2
3use super::PlatformEnvironment;
4
5/// Relay-specific path overrides read from environment variables.
6#[derive(Debug, Clone, Default, PartialEq, Eq)]
7pub struct PathEnvOverrides {
8    pub home: Option<std::path::PathBuf>,
9    pub config_dir: Option<std::path::PathBuf>,
10    pub data_dir: Option<std::path::PathBuf>,
11    pub state_dir: Option<std::path::PathBuf>,
12    pub cache_dir: Option<std::path::PathBuf>,
13    pub log_dir: Option<std::path::PathBuf>,
14    pub temp_dir: Option<std::path::PathBuf>,
15    pub runtime_dir: Option<std::path::PathBuf>,
16    pub service_dir: Option<std::path::PathBuf>,
17}
18
19/// Network settings read from relay-specific and generic environment variables.
20#[derive(Debug, Clone, Default, PartialEq, Eq)]
21pub struct NetworkEnvOverrides {
22    pub http_bind: Option<String>,
23    pub http_request_timeout_ms: Option<u64>,
24    pub http_shutdown_timeout_ms: Option<u64>,
25    pub http_max_body_bytes: Option<u64>,
26    pub proxy: Option<String>,
27    pub no_proxy: Option<String>,
28    pub ssl_verify: Option<bool>,
29    pub qos_max_connections: Option<usize>,
30    pub qos_max_in_flight_requests: Option<usize>,
31    pub qos_max_queue_depth: Option<usize>,
32}
33
34/// Remote service settings read from relay-specific environment variables.
35#[derive(Debug, Clone, Default, PartialEq, Eq)]
36pub struct RemoteCliEnvOverrides {
37    pub base_url: Option<String>,
38}
39
40/// Agent protocol settings read from relay-specific environment variables.
41#[derive(Debug, Clone, Default, PartialEq, Eq)]
42pub struct AgentEnvOverrides {
43    pub mcp_streamable_http_enabled: Option<bool>,
44    pub mcp_endpoint: Option<String>,
45    pub mcp_allowed_origins: Option<String>,
46    pub mcp_allowed_scopes: Option<String>,
47    pub mcp_allow_unspecified_scope: Option<bool>,
48    pub mcp_max_limit: Option<usize>,
49    pub mcp_max_context_bytes: Option<usize>,
50    pub mcp_allow_remote_clients: Option<bool>,
51    pub audit_sink_enabled: Option<bool>,
52    pub audit_queue_depth: Option<usize>,
53}
54
55/// Retrieval backend settings read from relay-specific environment variables.
56#[derive(Debug, Clone, Default, PartialEq, Eq)]
57pub struct RetrievalEnvOverrides {
58    pub semantic_backend: Option<String>,
59    pub vector_backend: Option<String>,
60    pub llm_provider: Option<String>,
61    pub embedding_base_url: Option<String>,
62    pub embedding_api_key: Option<String>,
63    pub text_embedding_model: Option<String>,
64    pub image_embedding_model: Option<String>,
65    pub embedding_dimension: Option<usize>,
66    pub embedding_batch_size: Option<usize>,
67    pub embedding_timeout_ms: Option<u64>,
68    pub embedding_max_concurrency: Option<usize>,
69    pub rerank_backend: Option<String>,
70    pub rerank_model: Option<String>,
71    pub rerank_timeout_ms: Option<u64>,
72    pub rerank_candidate_multiplier: Option<usize>,
73    pub rerank_max_candidates: Option<usize>,
74}
75
76/// Worker and service-operator settings read from relay-specific environment variables.
77#[derive(Debug, Clone, Default, PartialEq, Eq)]
78pub struct WorkerEnvOverrides {
79    pub embedding_endpoint: Option<String>,
80    pub ocr_endpoint: Option<String>,
81    pub vision_endpoint: Option<String>,
82    pub extractor_endpoint: Option<String>,
83    pub max_in_flight: Option<usize>,
84    pub code_index_max_in_flight: Option<usize>,
85    pub silent_updates_enabled: Option<bool>,
86}
87
88/// Local file index settings read from relay-specific environment variables.
89#[derive(Debug, Clone, Default, PartialEq, Eq)]
90pub struct FileIndexEnvOverrides {
91    pub enabled: Option<bool>,
92    pub roots: Option<String>,
93    pub excludes: Option<String>,
94    pub max_depth: Option<usize>,
95    pub max_file_bytes: Option<u64>,
96    pub scan_interval_ms: Option<u64>,
97    pub scan_timeout_ms: Option<u64>,
98    pub max_files_per_root: Option<usize>,
99    pub query_timeout_ms: Option<u64>,
100}
101
102/// Release update-check settings read from relay-specific environment variables.
103#[derive(Debug, Clone, Default, PartialEq, Eq)]
104pub struct UpdateEnvOverrides {
105    pub enabled: Option<bool>,
106    pub sources: Option<String>,
107    pub check_interval_ms: Option<u64>,
108    pub github_repo: Option<String>,
109}
110
111/// Telemetry exporter settings read from relay-specific environment variables.
112#[derive(Debug, Clone, Default, PartialEq, Eq)]
113pub struct TelemetryEnvOverrides {
114    pub otel_endpoint: Option<String>,
115    pub otel_traces: Option<bool>,
116    pub otel_metrics: Option<bool>,
117    pub export_timeout_ms: Option<u64>,
118    pub service_environment: Option<String>,
119}
120
121/// File watcher settings read from relay-specific environment variables.
122#[derive(Debug, Clone, Default, PartialEq, Eq)]
123pub struct WatcherEnvOverrides {
124    pub enabled: Option<bool>,
125    pub debounce_ms: Option<u64>,
126    pub max_watch_dirs: Option<usize>,
127    pub hash_cache_capacity: Option<usize>,
128}
129
130/// Fully parsed process environment relevant to relay-knowledge.
131#[derive(Debug, Clone, PartialEq, Eq)]
132pub struct EnvironmentConfig {
133    pub platform: PlatformEnvironment,
134    pub paths: PathEnvOverrides,
135    pub network: NetworkEnvOverrides,
136    pub remote_cli: RemoteCliEnvOverrides,
137    pub agent: AgentEnvOverrides,
138    pub retrieval: RetrievalEnvOverrides,
139    pub workers: WorkerEnvOverrides,
140    pub file_index: FileIndexEnvOverrides,
141    pub updates: UpdateEnvOverrides,
142    pub telemetry: TelemetryEnvOverrides,
143    pub watcher: WatcherEnvOverrides,
144    pub storage_topology: Option<String>,
145}
146
147/// Environment subset needed before a remote CLI command can dispatch over HTTP.
148#[derive(Debug, Clone, PartialEq, Eq)]
149pub struct RemoteCliEnvironmentConfig {
150    pub network: NetworkEnvOverrides,
151    pub remote_cli: RemoteCliEnvOverrides,
152}