(event_json: &str)
| 465 | } |
| 466 | |
| 467 | async fn codex_post_compact(event_json: &str) { |
| 468 | let work = async { |
| 469 | let Some(project_root) = codex_project_root_from_event(event_json) else { |
| 470 | return; |
| 471 | }; |
| 472 | if !crate::tracedecay::TraceDecay::has_initialized_store(&project_root).await { |
| 473 | return; |
| 474 | } |
| 475 | let Some(db) = crate::sessions::cursor::open_project_session_db(&project_root).await else { |
| 476 | return; |
| 477 | }; |
| 478 | if let Some(source) = crate::sessions::codex::CodexSource::new() { |
| 479 | let _ = crate::sessions::source::ingest_source(&db, &source, &project_root, None).await; |
| 480 | } |
| 481 | let session_id = serde_json::from_str::<Value>(event_json) |
| 482 | .ok() |
| 483 | .and_then(|parsed| event_session_id(&parsed)); |
| 484 | let Ok(mut pending) = db |
| 485 | .pending_codex_compaction_summary_requests(session_id.as_deref(), 1) |
| 486 | .await |
| 487 | else { |
| 488 | return; |
| 489 | }; |
| 490 | let Some(pending) = pending.pop() else { |
| 491 | return; |
| 492 | }; |
| 493 | let config = crate::sessions::codex_app_server::CodexAppServerSummaryConfig::from_env(); |
| 494 | let summary = match crate::sessions::codex_app_server::summarize_with_codex_app_server( |
| 495 | &pending.request, |
| 496 | &config, |
| 497 | ) { |
| 498 | Ok(summary) => summary, |
| 499 | Err(err) => { |
| 500 | eprintln!("tracedecay Codex PostCompact summary failed: {err}"); |
| 501 | return; |
| 502 | } |
| 503 | }; |
| 504 | if let Err(err) = db |
| 505 | .replace_codex_compaction_summary( |
| 506 | &pending.node_id, |
| 507 | &summary.text, |
| 508 | "codex_app_server", |
| 509 | summary.model.as_deref().or(config.model.as_deref()), |
| 510 | ) |
| 511 | .await |
| 512 | { |
| 513 | eprintln!("tracedecay Codex PostCompact summary replacement failed: {err}"); |
| 514 | } |
| 515 | }; |
| 516 | let _ = tokio::time::timeout(CODEX_POST_COMPACT_BUDGET, work).await; |
| 517 | } |
| 518 | |
| 519 | async fn reset_counter_for_codex_event(event_json: &str) { |
| 520 | let Some(project_root) = codex_project_root_from_event(event_json) else { |
no test coverage detected