use serde::Serialize;
#[derive(Debug, Clone, Serialize)]
pub struct RuntimeBinaryCatalogEntry {
pub binary: &'static str,
pub cargo_run: &'static str,
pub package: &'static str,
pub runtime_kind: &'static str,
pub workers: &'static [&'static str],
pub exposed_at_repo_root: bool,
pub bundled_with_api: bool,
pub notes: &'static str,
}
pub fn runtime_binary_catalog() -> Vec<RuntimeBinaryCatalogEntry> {
vec![
RuntimeBinaryCatalogEntry {
binary: "athena_rs",
cargo_run: "cargo run --bin athena_rs",
package: "athena_rs",
runtime_kind: "api",
workers: &[
"connection_monitor",
"outbox_relay_worker",
"registry_reconnect_worker",
"deferred_query_worker",
"backup_execution_worker",
"backup_schedule_worker",
"typesense_sync_worker",
],
exposed_at_repo_root: true,
bundled_with_api: true,
notes: "Main API server. Boots inline workers on a best-effort basis when their dependencies are available.",
},
RuntimeBinaryCatalogEntry {
binary: "athena_daemon_legacy_workers",
cargo_run: "cargo run --bin athena_daemon_legacy_workers",
package: "athena_rs",
runtime_kind: "athena_daemon_legacy_workers",
workers: &[
"connection_monitor",
"outbox_relay_worker",
"registry_reconnect_worker",
],
exposed_at_repo_root: true,
bundled_with_api: false,
notes: "Dedicated legacy background workers without the HTTP API process.",
},
RuntimeBinaryCatalogEntry {
binary: "athena_deferred_query_worker",
cargo_run: "cargo run --bin athena_deferred_query_worker",
package: "athena_rs",
runtime_kind: "athena_deferred_query_worker",
workers: &["deferred_query_worker"],
exposed_at_repo_root: true,
bundled_with_api: false,
notes: "Dedicated deferred gateway query worker.",
},
RuntimeBinaryCatalogEntry {
binary: "athena_backup_worker",
cargo_run: "cargo run --bin athena_backup_worker",
package: "athena_rs",
runtime_kind: "athena_backup_worker",
workers: &["backup_execution_worker", "backup_schedule_worker"],
exposed_at_repo_root: true,
bundled_with_api: false,
notes: "Dedicated backup scheduler and executor runtime. Requires pg_dump/pg_restore when backup work is enabled.",
},
RuntimeBinaryCatalogEntry {
binary: "athena_typesense_worker",
cargo_run: "cargo run --bin athena_typesense_worker",
package: "athena_rs",
runtime_kind: "athena_typesense_worker",
workers: &["typesense_sync_worker"],
exposed_at_repo_root: true,
bundled_with_api: false,
notes: "Dedicated Typesense sync worker runtime.",
},
RuntimeBinaryCatalogEntry {
binary: "athena_client_pressure_worker",
cargo_run: "cargo run --bin athena_client_pressure_worker",
package: "athena_rs",
runtime_kind: "athena_client_pressure_worker",
workers: &["client_pressure_worker"],
exposed_at_repo_root: true,
bundled_with_api: false,
notes: "Dedicated low-priority client pressure planner and recorder.",
},
RuntimeBinaryCatalogEntry {
binary: "athena_cdc_websocket",
cargo_run: "cargo run --bin athena_cdc_websocket",
package: "athena_rs",
runtime_kind: "athena_cdc_websocket",
workers: &["cdc_websocket_server"],
exposed_at_repo_root: true,
bundled_with_api: false,
notes: "Dedicated CDC websocket transport server on port 4053 using the shared Athena config bootstrap.",
},
RuntimeBinaryCatalogEntry {
binary: "athena_clone_worker",
cargo_run: "cargo run -p athena-daemon --bin athena_clone_worker",
package: "athena-daemon",
runtime_kind: "athena_clone_worker",
workers: &["clone_worker"],
exposed_at_repo_root: false,
bundled_with_api: false,
notes: "Dedicated clone worker still lives in the athena-daemon package because the clone engine depends on daemon-side crate wiring.",
},
RuntimeBinaryCatalogEntry {
binary: "athena_daemon",
cargo_run: "cargo run -p athena-daemon --bin athena_daemon",
package: "athena-daemon",
runtime_kind: "athena_daemon",
workers: &[
"connection_monitor",
"outbox_relay_worker",
"registry_reconnect_worker",
"deferred_query_worker",
"backup_execution_worker",
"backup_schedule_worker",
"typesense_sync_worker",
"clone_worker",
],
exposed_at_repo_root: false,
bundled_with_api: false,
notes: "Bundled dedicated daemon runtime for background workers, including clone execution.",
},
]
}