daemon: verbose pool logging, DAEMON_POOL for run_job

Store resource pool in OnceLock so run_job can pass it to
Daemon::run_job for pool state logging. Verbose logging enabled
via POC_MEMORY_VERBOSE=1 env var.

LLM backend selection and spawn-site pool state now use verbose
log level to keep daemon.log clean in production.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kent Overstreet 2026-03-19 11:21:30 -04:00
parent 49f72cdac3
commit 0944ecc43f
2 changed files with 21 additions and 5 deletions

View file

@ -37,11 +37,19 @@ pub fn log_event_pub(job: &str, event: &str, detail: &str) {
log_event(job, event, detail);
}
/// Verbose log — only written if verbose logging is enabled.
pub fn log_verbose(job: &str, event: &str, detail: &str) {
jobkit::daemon::event_log::verbose(&crate::config::get().data_dir, job, event, detail);
}
// --- Job functions (direct, no subprocess) ---
static DAEMON_POOL: std::sync::OnceLock<Arc<jobkit::ResourcePool>> = std::sync::OnceLock::new();
/// Run a named job with logging, progress reporting, and error mapping.
fn run_job(ctx: &ExecutionContext, name: &str, f: impl FnOnce() -> Result<(), String>) -> Result<(), TaskError> {
jobkit::daemon::Daemon::run_job(&crate::config::get().data_dir, ctx, name, f)
let pool = DAEMON_POOL.get().map(|p| p.as_ref());
jobkit::daemon::Daemon::run_job(&crate::config::get().data_dir, ctx, name, pool, f)
}
// experience_mine and fact_mine removed — observation.agent handles all transcript mining
@ -635,9 +643,15 @@ pub fn run_daemon() -> Result<(), String> {
let choir = Arc::clone(&daemon.choir);
let llm = Arc::clone(&daemon.resource);
let _ = DAEMON_POOL.set(Arc::clone(&llm));
let task_log_dir = config.data_dir.join("logs");
let _ = fs::create_dir_all(&task_log_dir);
// Enable verbose logging if POC_MEMORY_VERBOSE is set
if std::env::var("POC_MEMORY_VERBOSE").is_ok() {
jobkit::daemon::event_log::set_level(jobkit::daemon::event_log::LogLevel::Verbose);
}
// Recover last_daily from previous status file
let last_daily: Arc<Mutex<Option<chrono::NaiveDate>>> = Arc::new(Mutex::new(
jobkit::daemon::status::load::<DaemonStatus>(&config.data_dir)
@ -1107,8 +1121,10 @@ pub fn run_daemon() -> Result<(), String> {
let agent = agent_type.to_string();
let key = key.clone();
let task_name = format!("c-{}-{}:{}", agent, key.chars().take(30).collect::<String>(), today);
log_event("daemon", "spawn-targeted",
&format!("{} (available slots: {})", task_name, llm_rpc.available()));
if jobkit::daemon::event_log::enabled(jobkit::daemon::event_log::LogLevel::Verbose) {
log_event("daemon", "spawn-targeted",
&format!("{} (pool: {}/{})", task_name, llm_rpc.available(), llm_rpc.capacity()));
}
choir_rpc.spawn(task_name)
.resource(&llm_rpc)
.log_dir(&log_dir_rpc)