Files
codex/codex-rs/ext/queue/src/lib.rs
Eric Traut eeb82a156d Dispatch queued messages written by other processes (#39034)
## Why

Durable thread queues can be updated through another SQLite connection, but loaded idle threads need to notice those updates before they can dispatch the new messages.

## What changed

- Track a durable revision for each thread queue, including backfilling existing queues and updating revisions on inserts, updates, and deletes.
- Poll SQLite's data version and query revisions to find changed queues for loaded threads.
- Wake idle threads with pending external messages, discover queued work when threads are loaded or resumed, and retry each thread independently so one blocked queue does not stall others.

## Testing

- Cover cross-runtime queue writes, edits, independent dispatch, wake retries, and resumed threads.
- Cover migration backfills and revision tracking for queue updates and deletes.

GitOrigin-RevId: 906d902bbf6a760be206a1b2c08fd71427b63c46
2026-08-17 17:19:46 +00:00

22 lines
637 B
Rust

//! Durable, storage-neutral user-message queue and idle dispatch.
use std::sync::Arc;
use codex_extension_api::ExtensionRegistryBuilder;
mod service;
pub use service::QueueServiceError;
pub use service::QueuedItem;
pub use service::QueuedItemService;
/// Registers the caller-owned queue before lower-priority idle contributors.
pub fn install<C>(registry: &mut ExtensionRegistryBuilder<C>, service: Arc<QueuedItemService>)
where
C: Send + Sync + 'static,
{
let watcher = Arc::downgrade(&service);
registry.thread_lifecycle_contributor(service);
tokio::spawn(QueuedItemService::watch_external_messages(watcher));
}