Skip to main content

aion_server/config/
mod.rs

1//! Runtime configuration loading and validation for `aion-server`.
2//!
3//! The config surface is split across cohesive submodules and re-exported here
4//! in full, so every `crate::config::X` path resolves identically to the old
5//! single-file layout:
6//!
7//! - [`assistant`] — the optional `[assistant]` section: harness accounts.
8//! - [`defaults`] — default values and operator-facing validation messages.
9//! - [`sections`] — the typed `[section]` sub-configurations and their defaults.
10//! - [`runtime`] — the [`RuntimeConfig`] runtime view and [`CliOverrides`].
11//! - [`load`] — [`ServerConfig`], its load/merge/validate pipeline, and the
12//!   workflow-package discovery helpers.
13//! - [`heal`] — the boot-side config self-heal: the standard pass that checks
14//!   every required field and inserts its declared default when absent.
15//! - [`env`] / [`file`] — the environment-variable and TOML-file loaders.
16//! - [`home`] — the single typed Aion-home resolver.
17
18/// Environment variable configuration loader.
19pub mod env;
20/// File-based configuration loader.
21pub mod file;
22
23mod assistant;
24mod defaults;
25mod error;
26mod heal;
27mod home;
28mod load;
29mod resolution;
30mod runtime;
31mod scaffold;
32mod sections;
33mod worker_supervision;
34
35pub use assistant::{
36    AssistantAccountConfig, AssistantConfig, AssistantHarnessConfig, ResolvedAssistantAccount,
37    ResolvedAssistantConfig, ResolvedAssistantHarness,
38};
39pub(crate) use defaults::{
40    AUTHORING_GLEAM_PATH_EMPTY, AUTHORING_PROJECT_ROOT_REQUIRED,
41    CLUSTER_BROADCAST_CAPACITY_REQUIRED, CORS_ALLOWED_ORIGIN_INVALID,
42    DEPLOY_MAX_ARCHIVE_BYTES_REQUIRED, DEPLOY_MAX_INFLATED_BYTES_REQUIRED,
43    EVENT_BROADCAST_CAPACITY_REQUIRED, LEGACY_AUTHORING_WORKSPACE_DIR, LEGACY_HAEMATITE_DATA_DIR,
44    OUTBOX_BACKOFF_BASE_REQUIRED, OUTBOX_BACKOFF_MAX_REQUIRED, OUTBOX_BACKOFF_MULTIPLIER_REQUIRED,
45    OUTBOX_BATCH_SIZE_REQUIRED, OUTBOX_MAX_ATTEMPTS_REQUIRED, OUTBOX_POLL_INTERVAL_REQUIRED,
46    OUTBOX_RECONCILE_INTERVAL_REQUIRED, OUTBOX_RECONCILE_STALE_AFTER_REQUIRED,
47    QUERY_TIMEOUT_REQUIRED, STOP_DRAIN_TIMEOUT_REQUIRED, WORKLOOP_SWEEP_INTERVAL_REQUIRED,
48};
49pub use defaults::{
50    DEFAULT_AUTHORING_WORKSPACE_DIR, DEFAULT_CLUSTER_BROADCAST_CAPACITY,
51    DEFAULT_DEPLOY_MAX_ARCHIVE_BYTES, DEFAULT_DEPLOY_MAX_INFLATED_BYTES,
52    DEFAULT_EVENT_BROADCAST_CAPACITY, DEFAULT_FAILOVER_CONFIRMATIONS,
53    DEFAULT_FAILOVER_POLL_INTERVAL_MS, DEFAULT_HAEMATITE_DATA_DIR, DEFAULT_HTTP_ADDRESS,
54    DEFAULT_MAX_IN_FLIGHT_ACTIVITIES, DEFAULT_MCP_DISCOVER_TTL_MS,
55    DEFAULT_MCP_TASK_POLL_INTERVAL_MS, DEFAULT_MCP_TOOLS_LIST_TTL_MS,
56    DEFAULT_OBSERVABILITY_MAX_EVENT_BYTES, DEFAULT_OBSERVABILITY_MAX_STREAM_EVENTS,
57    DEFAULT_OUTBOX_BACKOFF_BASE_MS, DEFAULT_OUTBOX_BACKOFF_MAX_MS,
58    DEFAULT_OUTBOX_BACKOFF_MULTIPLIER, DEFAULT_OUTBOX_BATCH_SIZE, DEFAULT_OUTBOX_MAX_ATTEMPTS,
59    DEFAULT_OUTBOX_POLL_INTERVAL_MS, DEFAULT_QUERY_TIMEOUT_MS, DEFAULT_STOP_DRAIN_TIMEOUT_MS,
60    DEFAULT_WORKLOOP_SWEEP_INTERVAL_MS, MAX_TRANSCRIPT_WINDOW_LIMIT,
61    OBSERVABILITY_MAX_BATCH_EVENTS_REQUIRED, OBSERVABILITY_MAX_BATCH_HOLD_MS_REQUIRED,
62    STORE_NODE_CACHE_BUDGET_REQUIRED,
63};
64pub(crate) use error::config_error;
65pub(crate) use heal::HealOutcome;
66pub use home::{AionHome, HomeSource, aion_home};
67pub use load::ServerConfig;
68pub(crate) use resolution::{ConfigResolution, ConfigSource};
69pub use runtime::{CliOverrides, RuntimeConfig};
70pub use scaffold::FIRST_RUN_CONFIG;
71pub(crate) use scaffold::load_or_scaffold;
72pub use sections::{
73    AuthConfig, AuthoringConfig, AutoCreate, ClusterConfig, ClusterPeer, DeployConfig, DevConfig,
74    DrainConfig, ListenConfig, McpConfig, MetricsConfig, NamespaceConfig, NamespaceMode,
75    NamespacesConfig, ObservabilityConfig, OpsConsoleAssetSource, OpsConsoleConfig, OutboxConfig,
76    OutboxTransport, ResolvedMcpConfig, RuntimeSection, ServerSection, StoreBackend, StoreConfig,
77    TlsConfig, WebSocketConfig, WorkerConfig,
78};
79pub use worker_supervision::WorkerSupervisionConfig;