use std::path::PathBuf;
use std::time::Duration;
const DEFAULT_SQL_BUSY_TIMEOUT_MS: u64 = 5000;
const DEFAULT_SQL_QUERY_TIMEOUT_MS: u64 = 5000;
const DEFAULT_SQL_JOURNAL_MODE: &str = "WAL";
const DEFAULT_BUS_CAPACITY: usize = 64;
const DEFAULT_TASK_GRACE_MS: u64 = 1000;
pub fn base_dir() -> Result<PathBuf, String> {
if let Some(v) = std::env::var_os("AGENT_BLOCK_HOME") {
return Ok(PathBuf::from(v));
}
let home = std::env::var_os("HOME").ok_or_else(|| "HOME env var not set".to_string())?;
Ok(PathBuf::from(home).join(".agent-block"))
}
pub fn kv_path() -> Result<PathBuf, String> {
if let Some(v) = std::env::var_os("AGENT_BLOCK_KV_PATH") {
return Ok(PathBuf::from(v));
}
Ok(base_dir()?.join("kv.sqlite"))
}
pub fn sql_path() -> Result<PathBuf, String> {
if let Some(v) = std::env::var_os("AGENT_BLOCK_SQL_PATH") {
return Ok(PathBuf::from(v));
}
Ok(base_dir()?.join("db.sqlite"))
}
pub fn is_memory_sql(path: &std::path::Path) -> bool {
path.as_os_str() == ":memory:"
}
pub fn sql_busy_timeout() -> Duration {
let ms = std::env::var("AGENT_BLOCK_SQL_BUSY_TIMEOUT_MS")
.ok()
.and_then(|s| s.parse::<u64>().ok())
.unwrap_or(DEFAULT_SQL_BUSY_TIMEOUT_MS);
Duration::from_millis(ms)
}
pub fn sql_journal_mode() -> String {
std::env::var("AGENT_BLOCK_SQL_JOURNAL_MODE")
.unwrap_or_else(|_| DEFAULT_SQL_JOURNAL_MODE.to_string())
}
pub fn sql_query_timeout() -> Option<Duration> {
let ms = std::env::var("AGENT_BLOCK_SQL_QUERY_TIMEOUT_MS")
.ok()
.and_then(|s| s.parse::<u64>().ok())
.unwrap_or(DEFAULT_SQL_QUERY_TIMEOUT_MS);
if ms == 0 {
None
} else {
Some(Duration::from_millis(ms))
}
}
pub fn bus_capacity() -> usize {
match std::env::var("AGENT_BLOCK_BUS_CAPACITY") {
Ok(v) => v.parse::<usize>().unwrap_or_else(|e| {
tracing::warn!(
value = %v,
error = %e,
default = DEFAULT_BUS_CAPACITY,
"AGENT_BLOCK_BUS_CAPACITY parse failed, using default"
);
DEFAULT_BUS_CAPACITY
}),
Err(_) => DEFAULT_BUS_CAPACITY,
}
}
pub fn task_grace_ms() -> u64 {
match std::env::var("AGENT_BLOCK_TASK_GRACE_MS") {
Ok(v) => v.parse::<u64>().unwrap_or_else(|e| {
tracing::warn!(
value = %v,
error = %e,
default = DEFAULT_TASK_GRACE_MS,
"AGENT_BLOCK_TASK_GRACE_MS parse failed, using default"
);
DEFAULT_TASK_GRACE_MS
}),
Err(_) => DEFAULT_TASK_GRACE_MS,
}
}