diff --git a/.github/scripts/windows_bazel_test_durations.tsv b/.github/scripts/windows_bazel_test_durations.tsv index 3cd4b4283a..b328c667cc 100644 --- a/.github/scripts/windows_bazel_test_durations.tsv +++ b/.github/scripts/windows_bazel_test_durations.tsv @@ -126,7 +126,7 @@ //codex-rs/exec:exec-all-test-windows-cross 331 //codex-rs/exec:exec-event_processor_with_json_output-test-windows-cross 1 //codex-rs/exec:exec-unit-tests 47 -//codex-rs/ext/agent-message-board:agent-message-board-local_board-test-windows-cross 46 +//codex-rs/message-board:message-board-local_board-test-windows-cross 46 //codex-rs/ext/agent-message-board:agent-message-board-unit-tests 30 //codex-rs/ext/agent:agent-agent_service-test-windows-cross 3 //codex-rs/ext/agent:agent-unit-tests 1 diff --git a/codex-rs/Cargo.lock b/codex-rs/Cargo.lock index fe0dc6f6a4..8f34c3fd70 100644 --- a/codex-rs/Cargo.lock +++ b/codex-rs/Cargo.lock @@ -1939,9 +1939,9 @@ version = "0.0.0" dependencies = [ "anyhow", "chrono", - "codex-agent-message-board-extension", "codex-extension-api", "codex-http-client", + "codex-message-board", "codex-protocol", "eventsource-stream", "futures", @@ -1960,24 +1960,14 @@ dependencies = [ name = "codex-agent-message-board-extension" version = "0.0.0" dependencies = [ - "base64 0.22.1", - "caseless", - "chrono", - "codex-attachment-store", "codex-extension-api", + "codex-message-board", "codex-protocol", "codex-state", "codex-tools", - "codex-utils-output-truncation", "futures", - "pretty_assertions", - "serde", "serde_json", - "sqlx", - "tempfile", "tokio", - "tracing", - "uuid", ] [[package]] @@ -2980,6 +2970,7 @@ dependencies = [ "codex-mcp", "codex-mcp-extension", "codex-memories-read", + "codex-message-board", "codex-model-provider", "codex-model-provider-info", "codex-models-manager", @@ -4063,6 +4054,29 @@ dependencies = [ "unicode-width 0.2.1", ] +[[package]] +name = "codex-message-board" +version = "0.0.0" +dependencies = [ + "base64 0.22.1", + "caseless", + "chrono", + "codex-attachment-store", + "codex-protocol", + "codex-state", + "codex-tools", + "codex-utils-output-truncation", + "futures", + "pretty_assertions", + "serde", + "serde_json", + "sqlx", + "tempfile", + "tokio", + "tracing", + "uuid", +] + [[package]] name = "codex-message-history" version = "0.0.0" diff --git a/codex-rs/Cargo.toml b/codex-rs/Cargo.toml index 33c12ad70d..d1cf32be45 100644 --- a/codex-rs/Cargo.toml +++ b/codex-rs/Cargo.toml @@ -87,6 +87,7 @@ members = [ "memories/read", "memories/write", "mermaid", + "message-board", "model-provider-info", "mxc-sandbox", "models-manager", @@ -213,6 +214,7 @@ codex-connectors = { path = "connectors" } codex-agent-extension = { path = "ext/agent" } codex-agent-message-board-client = { path = "agent-message-board-client" } codex-agent-message-board-extension = { path = "ext/agent-message-board" } +codex-message-board = { path = "message-board" } codex-connectors-extension = { path = "ext/connectors" } codex-context-fragments = { path = "context-fragments" } codex-core = { path = "core" } diff --git a/codex-rs/agent-message-board-client/Cargo.toml b/codex-rs/agent-message-board-client/Cargo.toml index 52a9c9c272..c9b361e3c4 100644 --- a/codex-rs/agent-message-board-client/Cargo.toml +++ b/codex-rs/agent-message-board-client/Cargo.toml @@ -14,7 +14,7 @@ workspace = true [dependencies] anyhow = { workspace = true } chrono = { workspace = true, features = ["serde"] } -codex-agent-message-board-extension = { workspace = true } +codex-message-board = { workspace = true } codex-extension-api = { workspace = true } codex-http-client = { workspace = true } codex-protocol = { workspace = true } diff --git a/codex-rs/agent-message-board-client/src/client.rs b/codex-rs/agent-message-board-client/src/client.rs index ef2d00b9ca..cdff62033a 100644 --- a/codex-rs/agent-message-board-client/src/client.rs +++ b/codex-rs/agent-message-board-client/src/client.rs @@ -15,27 +15,27 @@ use crate::protocol::Watch; use anyhow::Context; use chrono::DateTime; use chrono::Utc; -use codex_agent_message_board_extension::AgentMessageBoard; -use codex_agent_message_board_extension::ChannelPage; -use codex_agent_message_board_extension::ChannelQuery; -use codex_agent_message_board_extension::ChannelSummary; -use codex_agent_message_board_extension::CreateChannelRequest; -use codex_agent_message_board_extension::Page; -use codex_agent_message_board_extension::PermissionDenied; -use codex_agent_message_board_extension::PostContent; -use codex_agent_message_board_extension::PostMetadata; -use codex_agent_message_board_extension::PostPreview; -use codex_agent_message_board_extension::PostQuery; -use codex_agent_message_board_extension::PostRequest; -use codex_agent_message_board_extension::ReadPostRequest; -use codex_agent_message_board_extension::ReadThreadRequest; -use codex_agent_message_board_extension::SubscriptionRequest; -use codex_agent_message_board_extension::SubscriptionState; -use codex_agent_message_board_extension::ThreadPage; -use codex_agent_message_board_extension::ThreadQuery; -use codex_agent_message_board_extension::ThreadSummary; use codex_http_client::HttpClient; use codex_http_client::HttpResponse; +use codex_message_board::AgentMessageBoard; +use codex_message_board::ChannelPage; +use codex_message_board::ChannelQuery; +use codex_message_board::ChannelSummary; +use codex_message_board::CreateChannelRequest; +use codex_message_board::Page; +use codex_message_board::PermissionDenied; +use codex_message_board::PostContent; +use codex_message_board::PostMetadata; +use codex_message_board::PostPreview; +use codex_message_board::PostQuery; +use codex_message_board::PostRequest; +use codex_message_board::ReadPostRequest; +use codex_message_board::ReadThreadRequest; +use codex_message_board::SubscriptionRequest; +use codex_message_board::SubscriptionState; +use codex_message_board::ThreadPage; +use codex_message_board::ThreadQuery; +use codex_message_board::ThreadSummary; use codex_protocol::AgentPath; use codex_protocol::SessionId; use codex_protocol::ThreadId; diff --git a/codex-rs/agent-message-board-client/src/notifications.rs b/codex-rs/agent-message-board-client/src/notifications.rs index 0f80aa3d4f..e6e534559a 100644 --- a/codex-rs/agent-message-board-client/src/notifications.rs +++ b/codex-rs/agent-message-board-client/src/notifications.rs @@ -2,7 +2,6 @@ //! Provisioning and durable board ownership belong to the research host. use crate::RemoteAgentMessageBoard; -use codex_agent_message_board_extension::MessageBoardHost; use codex_extension_api::ExtensionData; use codex_extension_api::ExtensionFuture; use codex_extension_api::ExtensionRegistryBuilder; @@ -12,6 +11,7 @@ use codex_extension_api::TurnLifecycleContributor; use codex_extension_api::TurnStartInput; use codex_extension_api::TurnStartPhase; use codex_extension_api::TurnStopInput; +use codex_message_board::MessageBoardHost; use codex_protocol::ThreadId; use codex_protocol::error::CodexErrKind; use futures::channel::oneshot; diff --git a/codex-rs/agent-message-board-client/src/protocol.rs b/codex-rs/agent-message-board-client/src/protocol.rs index 888fc4f0e3..13f557b6d0 100644 --- a/codex-rs/agent-message-board-client/src/protocol.rs +++ b/codex-rs/agent-message-board-client/src/protocol.rs @@ -2,15 +2,15 @@ use chrono::DateTime; use chrono::Utc; -use codex_agent_message_board_extension::ChannelQuery; -use codex_agent_message_board_extension::CreateChannelRequest; -use codex_agent_message_board_extension::PostPreview; -use codex_agent_message_board_extension::PostQuery; -use codex_agent_message_board_extension::PostRequest; -use codex_agent_message_board_extension::ReadPostRequest; -use codex_agent_message_board_extension::ReadThreadRequest; -use codex_agent_message_board_extension::SubscriptionRequest; -use codex_agent_message_board_extension::ThreadQuery; +use codex_message_board::ChannelQuery; +use codex_message_board::CreateChannelRequest; +use codex_message_board::PostPreview; +use codex_message_board::PostQuery; +use codex_message_board::PostRequest; +use codex_message_board::ReadPostRequest; +use codex_message_board::ReadThreadRequest; +use codex_message_board::SubscriptionRequest; +use codex_message_board::ThreadQuery; use codex_protocol::AgentPath; use codex_protocol::ThreadId; use serde::Deserialize; diff --git a/codex-rs/agent-message-board-client/tests/remote_board.rs b/codex-rs/agent-message-board-client/tests/remote_board.rs index 21cc7e2fe4..d0ff25a52c 100644 --- a/codex-rs/agent-message-board-client/tests/remote_board.rs +++ b/codex-rs/agent-message-board-client/tests/remote_board.rs @@ -5,14 +5,14 @@ use chrono::Utc; use codex_agent_message_board_client::AccessToken; use codex_agent_message_board_client::BoardNotification; use codex_agent_message_board_client::RemoteAgentMessageBoard; -use codex_agent_message_board_extension::AgentMessageBoard; -use codex_agent_message_board_extension::PostContent; -use codex_agent_message_board_extension::PostDestination; -use codex_agent_message_board_extension::PostMetadata; -use codex_agent_message_board_extension::PostPreview; -use codex_agent_message_board_extension::PostRequest; -use codex_agent_message_board_extension::ReadPostRequest; use codex_http_client::HttpClientBuilder; +use codex_message_board::AgentMessageBoard; +use codex_message_board::PostContent; +use codex_message_board::PostDestination; +use codex_message_board::PostMetadata; +use codex_message_board::PostPreview; +use codex_message_board::PostRequest; +use codex_message_board::ReadPostRequest; use codex_protocol::AgentPath; use codex_protocol::SessionId; use codex_protocol::ThreadId; diff --git a/codex-rs/core/Cargo.toml b/codex-rs/core/Cargo.toml index 249f1436f6..245f417b18 100644 --- a/codex-rs/core/Cargo.toml +++ b/codex-rs/core/Cargo.toml @@ -69,6 +69,7 @@ codex-skills = { workspace = true } codex-skills-extension = { workspace = true } codex-state = { workspace = true } codex-agent-message-board-extension = { workspace = true } +codex-message-board = { workspace = true } codex-agent-message-board-client = { workspace = true } codex-terminal-detection = { workspace = true } codex-thread-store = { workspace = true } diff --git a/codex-rs/core/src/agent_message_board.rs b/codex-rs/core/src/agent_message_board.rs index 01bf01f2ee..2ea8b3b9c0 100644 --- a/codex-rs/core/src/agent_message_board.rs +++ b/codex-rs/core/src/agent_message_board.rs @@ -1,6 +1,6 @@ //! Bridges the board extension to the selected controller, clock and active-turn services. //! -//! The extension owns storage and tools. This adapter never starts or restores +//! The shared board library owns storage; the extension owns tools. This adapter never starts or restores //! recipients and never queues a notification for an idle agent. use crate::CodexThread; @@ -13,17 +13,17 @@ use chrono::DateTime; use chrono::Utc; use codex_agent_message_board_client::AccessToken; use codex_agent_message_board_client::RemoteAgentMessageBoard; -use codex_agent_message_board_extension::AgentMessageBoard; -use codex_agent_message_board_extension::InMemoryMessageBoards; -use codex_agent_message_board_extension::LocalAgentMessageBoard; -use codex_agent_message_board_extension::LocalBoardConnection; -use codex_agent_message_board_extension::MessageBoardHost; -use codex_agent_message_board_extension::NotificationDelivery; -use codex_agent_message_board_extension::PostPreview; use codex_extension_api::ExtensionRegistryBuilder; use codex_extension_api::ThreadStartInput; use codex_features::Feature; use codex_http_client::ClientRouteClass; +use codex_message_board::AgentMessageBoard; +use codex_message_board::InMemoryMessageBoards; +use codex_message_board::LocalAgentMessageBoard; +use codex_message_board::LocalBoardConnection; +use codex_message_board::MessageBoardHost; +use codex_message_board::NotificationDelivery; +use codex_message_board::PostPreview; use codex_protocol::AgentPath; use codex_protocol::SessionId; use codex_protocol::ThreadId; diff --git a/codex-rs/core/src/context/agent_message_board_notification.rs b/codex-rs/core/src/context/agent_message_board_notification.rs index b6b23d7531..b56ef296b9 100644 --- a/codex-rs/core/src/context/agent_message_board_notification.rs +++ b/codex-rs/core/src/context/agent_message_board_notification.rs @@ -1,7 +1,7 @@ //! Attributed discussion notices with bounded previews. use super::ContextualUserFragment; -use codex_agent_message_board_extension::PostPreview; +use codex_message_board::PostPreview; use codex_protocol::models::ContentItem; use codex_protocol::models::ContentItemKind; use codex_protocol::models::input_text; diff --git a/codex-rs/core/src/thread_manager.rs b/codex-rs/core/src/thread_manager.rs index de3c37d322..ef30f44137 100644 --- a/codex-rs/core/src/thread_manager.rs +++ b/codex-rs/core/src/thread_manager.rs @@ -39,7 +39,6 @@ use crate::tasks::interrupted_turn_history_marker; use crate::thread_startup_metadata::ThreadStartupMetadata; use codex_agent_graph_store::AgentGraphStore; use codex_agent_graph_store::LocalAgentGraphStore; -use codex_agent_message_board_extension::LocalAgentMessageBoard; use codex_analytics::AnalyticsEventsClient; use codex_app_server_protocol::ThreadHistoryBuilder; use codex_app_server_protocol::TurnStatus; @@ -66,6 +65,7 @@ use codex_login::AuthManager; use codex_login::CodexAuth; use codex_login::default_client::CODEX_INTERNAL_ORIGINATOR_OVERRIDE_ENV_VAR; use codex_login::default_client::originator; +use codex_message_board::LocalAgentMessageBoard; use codex_model_provider::create_model_provider; use codex_model_provider_info::ModelProviderInfo; use codex_model_provider_info::OPENAI_PROVIDER_ID; @@ -973,7 +973,7 @@ impl ThreadManager { pub(crate) async fn get_thread_for_board( &self, thread_id: ThreadId, - connection: &codex_agent_message_board_extension::LocalBoardConnection, + connection: &codex_message_board::LocalBoardConnection, ) -> CodexResult> { self.state .threads @@ -983,7 +983,7 @@ impl ThreadManager { .filter(|thread| { thread .thread_extension_data() - .get::() + .get::() .is_some_and(|other| connection.same_board(&other)) }) .cloned() diff --git a/codex-rs/core/tests/suite/agent_control_tests.rs b/codex-rs/core/tests/suite/agent_control_tests.rs index 3289979fb4..eb37ca5448 100644 --- a/codex-rs/core/tests/suite/agent_control_tests.rs +++ b/codex-rs/core/tests/suite/agent_control_tests.rs @@ -4,7 +4,6 @@ use std::collections::HashMap; use std::sync::Arc; use std::sync::Mutex; -use codex_agent_message_board_extension::PostMetadata; use codex_core::AgentConfigUpdate; use codex_core::AgentControl; use codex_core::AgentExecutionGuard; @@ -26,6 +25,7 @@ use codex_features::Feature; use codex_history::InitialHistory; use codex_history::ResumedHistory; use codex_history::RolloutItem; +use codex_message_board::PostMetadata; use codex_protocol::AgentPath; use codex_protocol::SessionId; use codex_protocol::ThreadId; diff --git a/codex-rs/core/tests/suite/scenarios_agent_message_board.rs b/codex-rs/core/tests/suite/scenarios_agent_message_board.rs index c857a313d7..c1bece7329 100644 --- a/codex-rs/core/tests/suite/scenarios_agent_message_board.rs +++ b/codex-rs/core/tests/suite/scenarios_agent_message_board.rs @@ -1,9 +1,9 @@ //! Exercises board tools through the runtime, including resume and active-only notices. use anyhow::Context; -use codex_agent_message_board_extension::PostMetadata; use codex_core::TurnInputRequest; use codex_features::Feature; +use codex_message_board::PostMetadata; use codex_protocol::items::TurnItem; use codex_protocol::protocol::EventMsg; use codex_protocol::protocol::MultiAgentVersion; @@ -934,11 +934,11 @@ async fn board_clock_failure_does_not_fall_back_or_create_a_channel() -> anyhow: #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn codex_instances_share_board_with_fixed_access() -> anyhow::Result<()> { - use codex_agent_message_board_extension::LocalBoard; use codex_extension_api::ExtensionRegistryBuilder; use codex_extension_api::IsolatedSessionExtensions; use codex_extension_api::SessionIsolation; use codex_extension_api::ToolName; + use codex_message_board::LocalBoard; use codex_protocol::protocol::InternalSessionSource; use codex_protocol::protocol::SessionSource; use codex_state::SqliteConfig; diff --git a/codex-rs/ext/agent-message-board/Cargo.toml b/codex-rs/ext/agent-message-board/Cargo.toml index ef9f602f7b..646993fdf7 100644 --- a/codex-rs/ext/agent-message-board/Cargo.toml +++ b/codex-rs/ext/agent-message-board/Cargo.toml @@ -7,30 +7,20 @@ version.workspace = true [lib] name = "codex_agent_message_board_extension" path = "src/lib.rs" +test = false doctest = false [lints] workspace = true [dependencies] -base64 = { workspace = true } -caseless = { workspace = true } -chrono = { workspace = true, features = ["serde"] } codex-extension-api = { workspace = true } +codex-message-board = { workspace = true } codex-protocol = { workspace = true } -codex-state = { workspace = true } codex-tools = { workspace = true } futures = { workspace = true } -serde = { workspace = true, features = ["derive"] } -serde_json = { workspace = true } -sqlx = { workspace = true } -tokio = { workspace = true, features = ["fs", "rt", "sync"] } -tracing = { workspace = true } -uuid = { workspace = true, features = ["serde", "v7"] } [dev-dependencies] -codex-attachment-store = { workspace = true } -codex-utils-output-truncation = { workspace = true } -pretty_assertions = { workspace = true } -tempfile = { workspace = true } -tokio = { workspace = true, features = ["macros", "rt-multi-thread"] } +codex-state = { workspace = true } +serde_json = { workspace = true } +tokio = { workspace = true, features = ["fs", "macros", "rt-multi-thread"] } diff --git a/codex-rs/ext/agent-message-board/examples/configure_board.rs b/codex-rs/ext/agent-message-board/examples/configure_board.rs index 5f042d420b..f3f5156bcc 100644 --- a/codex-rs/ext/agent-message-board/examples/configure_board.rs +++ b/codex-rs/ext/agent-message-board/examples/configure_board.rs @@ -1,7 +1,7 @@ //! Operator-only setup for local experiments; no administrative agent tools. -use codex_agent_message_board_extension::LocalBoardSetup; -use codex_agent_message_board_extension::configure_local_board; +use codex_message_board::LocalBoardSetup; +use codex_message_board::configure_local_board; use codex_protocol::SessionId; use codex_state::SqliteConfig; use std::path::PathBuf; diff --git a/codex-rs/ext/agent-message-board/src/extension.rs b/codex-rs/ext/agent-message-board/src/extension.rs index 9ca056bb4d..5ea7a67b60 100644 --- a/codex-rs/ext/agent-message-board/src/extension.rs +++ b/codex-rs/ext/agent-message-board/src/extension.rs @@ -4,9 +4,6 @@ //! and emit a warning; a disabled factory does not open storage. //! Tool namespaces follow the host's configuration at runtime startup. -use crate::AgentMessageBoard; -use crate::LocalBoardConnection; -use crate::tools::message_board_tools_with_descriptions; use codex_extension_api::ExtensionData; use codex_extension_api::ExtensionEventSink; use codex_extension_api::ExtensionFuture; @@ -15,6 +12,9 @@ use codex_extension_api::ExtensionWarning; use codex_extension_api::ThreadLifecycleContributor; use codex_extension_api::ThreadStartInput; use codex_extension_api::ToolContributor; +use codex_message_board::AgentMessageBoard; +use codex_message_board::LocalBoardConnection; +use codex_message_board::message_board_tools_with_descriptions; use codex_protocol::AgentPath; use codex_protocol::SessionId; use codex_protocol::ThreadId; diff --git a/codex-rs/ext/agent-message-board/src/lib.rs b/codex-rs/ext/agent-message-board/src/lib.rs index f32bf921de..601ac0f247 100644 --- a/codex-rs/ext/agent-message-board/src/lib.rs +++ b/codex-rs/ext/agent-message-board/src/lib.rs @@ -1,53 +1,6 @@ -//! Shared agent discussions with interchangeable local, in-memory and remote backends. -//! -//! Board identity and caller identity come from the host. Implementations own -//! storage and notification fanout; tools and feature registration are separate. +//! Installs agent message-board tools over the shared board interface. +//! Storage, backend behavior and tool implementations live in `codex-message-board`. -mod api; mod extension; -mod host; -mod in_memory; -mod local; -mod permissions; -mod tools; -mod types; -pub use api::AgentMessageBoard; -pub use api::ChannelDescription; -pub use api::ChannelQuery; -pub use api::CreateChannelRequest; -pub use api::PageRequest; -pub use api::PostDestination; -pub use api::PostQuery; -pub use api::PostRequest; -pub use api::ReadPostRequest; -pub use api::ReadThreadRequest; -pub use api::SortDirection; -pub use api::SubscriptionChange; -pub use api::SubscriptionRequest; -pub use api::SubscriptionTarget; -pub use api::ThreadQuery; -pub use api::ThreadSort; pub use extension::install; -pub use host::MessageBoardHost; -pub use host::NotificationDelivery; -pub use in_memory::InMemoryAgentMessageBoard; -pub use in_memory::InMemoryMessageBoards; -pub use local::LocalAgentMessageBoard; -pub use local::connection::LocalBoard; -pub use local::connection::LocalBoardConnection; -pub use local::setup::LocalBoardSetup; -pub use local::setup::configure_local_board; -pub use permissions::BoardPermissions; -pub use permissions::ChannelPermissions; -pub use permissions::PermissionDenied; -pub use tools::message_board_tools; -pub use types::ChannelPage; -pub use types::ChannelSummary; -pub use types::Page; -pub use types::PostContent; -pub use types::PostMetadata; -pub use types::PostPreview; -pub use types::SubscriptionState; -pub use types::ThreadPage; -pub use types::ThreadSummary; diff --git a/codex-rs/message-board/BUILD.bazel b/codex-rs/message-board/BUILD.bazel new file mode 100644 index 0000000000..a51e5a272c --- /dev/null +++ b/codex-rs/message-board/BUILD.bazel @@ -0,0 +1,6 @@ +load("//:defs.bzl", "codex_rust_crate") + +codex_rust_crate( + name = "message-board", + crate_name = "codex_message_board", +) diff --git a/codex-rs/message-board/Cargo.toml b/codex-rs/message-board/Cargo.toml new file mode 100644 index 0000000000..52f991c07d --- /dev/null +++ b/codex-rs/message-board/Cargo.toml @@ -0,0 +1,35 @@ +[package] +edition.workspace = true +license.workspace = true +name = "codex-message-board" +version.workspace = true + +[lib] +name = "codex_message_board" +path = "src/lib.rs" +doctest = false + +[lints] +workspace = true + +[dependencies] +base64 = { workspace = true } +caseless = { workspace = true } +chrono = { workspace = true, features = ["serde"] } +codex-protocol = { workspace = true } +codex-state = { workspace = true } +codex-tools = { workspace = true } +futures = { workspace = true } +serde = { workspace = true, features = ["derive"] } +serde_json = { workspace = true } +sqlx = { workspace = true } +tokio = { workspace = true, features = ["fs", "rt", "sync"] } +tracing = { workspace = true } +uuid = { workspace = true, features = ["serde", "v7"] } + +[dev-dependencies] +codex-attachment-store = { workspace = true } +codex-utils-output-truncation = { workspace = true } +pretty_assertions = { workspace = true } +tempfile = { workspace = true } +tokio = { workspace = true, features = ["macros", "rt-multi-thread"] } diff --git a/codex-rs/ext/agent-message-board/src/api.rs b/codex-rs/message-board/src/api.rs similarity index 100% rename from codex-rs/ext/agent-message-board/src/api.rs rename to codex-rs/message-board/src/api.rs diff --git a/codex-rs/ext/agent-message-board/src/host.rs b/codex-rs/message-board/src/host.rs similarity index 100% rename from codex-rs/ext/agent-message-board/src/host.rs rename to codex-rs/message-board/src/host.rs diff --git a/codex-rs/ext/agent-message-board/src/in_memory.rs b/codex-rs/message-board/src/in_memory.rs similarity index 100% rename from codex-rs/ext/agent-message-board/src/in_memory.rs rename to codex-rs/message-board/src/in_memory.rs diff --git a/codex-rs/ext/agent-message-board/src/in_memory/queries.rs b/codex-rs/message-board/src/in_memory/queries.rs similarity index 100% rename from codex-rs/ext/agent-message-board/src/in_memory/queries.rs rename to codex-rs/message-board/src/in_memory/queries.rs diff --git a/codex-rs/ext/agent-message-board/src/in_memory_tests.rs b/codex-rs/message-board/src/in_memory_tests.rs similarity index 100% rename from codex-rs/ext/agent-message-board/src/in_memory_tests.rs rename to codex-rs/message-board/src/in_memory_tests.rs diff --git a/codex-rs/message-board/src/lib.rs b/codex-rs/message-board/src/lib.rs new file mode 100644 index 0000000000..eb560a66e5 --- /dev/null +++ b/codex-rs/message-board/src/lib.rs @@ -0,0 +1,52 @@ +//! Shared message-board operations with interchangeable local, in-memory and remote backends. +//! +//! Board identity and caller identity come from the host. Implementations own +//! storage and notification fanout. Shared tools are registered by consumers. + +mod api; +mod host; +mod in_memory; +mod local; +mod permissions; +mod tools; +mod types; + +pub use api::AgentMessageBoard; +pub use api::ChannelDescription; +pub use api::ChannelQuery; +pub use api::CreateChannelRequest; +pub use api::PageRequest; +pub use api::PostDestination; +pub use api::PostQuery; +pub use api::PostRequest; +pub use api::ReadPostRequest; +pub use api::ReadThreadRequest; +pub use api::SortDirection; +pub use api::SubscriptionChange; +pub use api::SubscriptionRequest; +pub use api::SubscriptionTarget; +pub use api::ThreadQuery; +pub use api::ThreadSort; +pub use host::MessageBoardHost; +pub use host::NotificationDelivery; +pub use in_memory::InMemoryAgentMessageBoard; +pub use in_memory::InMemoryMessageBoards; +pub use local::LocalAgentMessageBoard; +pub use local::connection::LocalBoard; +pub use local::connection::LocalBoardConnection; +pub use local::setup::LocalBoardSetup; +pub use local::setup::configure_local_board; +pub use permissions::BoardPermissions; +pub use permissions::ChannelPermissions; +pub use permissions::PermissionDenied; +pub use tools::message_board_tools; +pub use tools::message_board_tools_with_descriptions; +pub use types::ChannelPage; +pub use types::ChannelSummary; +pub use types::Page; +pub use types::PostContent; +pub use types::PostMetadata; +pub use types::PostPreview; +pub use types::SubscriptionState; +pub use types::ThreadPage; +pub use types::ThreadSummary; diff --git a/codex-rs/ext/agent-message-board/src/local.rs b/codex-rs/message-board/src/local.rs similarity index 100% rename from codex-rs/ext/agent-message-board/src/local.rs rename to codex-rs/message-board/src/local.rs diff --git a/codex-rs/ext/agent-message-board/src/local/connection.rs b/codex-rs/message-board/src/local/connection.rs similarity index 100% rename from codex-rs/ext/agent-message-board/src/local/connection.rs rename to codex-rs/message-board/src/local/connection.rs diff --git a/codex-rs/ext/agent-message-board/src/local/lifecycle.rs b/codex-rs/message-board/src/local/lifecycle.rs similarity index 100% rename from codex-rs/ext/agent-message-board/src/local/lifecycle.rs rename to codex-rs/message-board/src/local/lifecycle.rs diff --git a/codex-rs/ext/agent-message-board/src/local/paging.rs b/codex-rs/message-board/src/local/paging.rs similarity index 100% rename from codex-rs/ext/agent-message-board/src/local/paging.rs rename to codex-rs/message-board/src/local/paging.rs diff --git a/codex-rs/ext/agent-message-board/src/local/pool.rs b/codex-rs/message-board/src/local/pool.rs similarity index 100% rename from codex-rs/ext/agent-message-board/src/local/pool.rs rename to codex-rs/message-board/src/local/pool.rs diff --git a/codex-rs/ext/agent-message-board/src/local/pools_tests.rs b/codex-rs/message-board/src/local/pools_tests.rs similarity index 100% rename from codex-rs/ext/agent-message-board/src/local/pools_tests.rs rename to codex-rs/message-board/src/local/pools_tests.rs diff --git a/codex-rs/ext/agent-message-board/src/local/queries.rs b/codex-rs/message-board/src/local/queries.rs similarity index 100% rename from codex-rs/ext/agent-message-board/src/local/queries.rs rename to codex-rs/message-board/src/local/queries.rs diff --git a/codex-rs/ext/agent-message-board/src/local/setup.rs b/codex-rs/message-board/src/local/setup.rs similarity index 100% rename from codex-rs/ext/agent-message-board/src/local/setup.rs rename to codex-rs/message-board/src/local/setup.rs diff --git a/codex-rs/ext/agent-message-board/src/permissions.rs b/codex-rs/message-board/src/permissions.rs similarity index 97% rename from codex-rs/ext/agent-message-board/src/permissions.rs rename to codex-rs/message-board/src/permissions.rs index a9019f5b69..61ffc2a8b1 100644 --- a/codex-rs/ext/agent-message-board/src/permissions.rs +++ b/codex-rs/message-board/src/permissions.rs @@ -1,4 +1,4 @@ -//! Backend-computed permissions and denials exposed by the board tools. +//! Backend-computed permissions and denials shared by board consumers. use codex_protocol::error::CodexErr; use codex_tools::FunctionCallError; diff --git a/codex-rs/ext/agent-message-board/src/tools.rs b/codex-rs/message-board/src/tools.rs similarity index 99% rename from codex-rs/ext/agent-message-board/src/tools.rs rename to codex-rs/message-board/src/tools.rs index 7537637a57..3399fb69ae 100644 --- a/codex-rs/ext/agent-message-board/src/tools.rs +++ b/codex-rs/message-board/src/tools.rs @@ -60,7 +60,7 @@ pub fn message_board_tools( ) } -pub(crate) fn message_board_tools_with_descriptions( +pub fn message_board_tools_with_descriptions( board: Arc, caller: ThreadId, caller_path: AgentPath, diff --git a/codex-rs/ext/agent-message-board/src/tools/arguments.rs b/codex-rs/message-board/src/tools/arguments.rs similarity index 100% rename from codex-rs/ext/agent-message-board/src/tools/arguments.rs rename to codex-rs/message-board/src/tools/arguments.rs diff --git a/codex-rs/ext/agent-message-board/src/tools/spec.rs b/codex-rs/message-board/src/tools/spec.rs similarity index 100% rename from codex-rs/ext/agent-message-board/src/tools/spec.rs rename to codex-rs/message-board/src/tools/spec.rs diff --git a/codex-rs/ext/agent-message-board/src/types.rs b/codex-rs/message-board/src/types.rs similarity index 100% rename from codex-rs/ext/agent-message-board/src/types.rs rename to codex-rs/message-board/src/types.rs diff --git a/codex-rs/ext/agent-message-board/tests/local_board.rs b/codex-rs/message-board/tests/local_board.rs similarity index 99% rename from codex-rs/ext/agent-message-board/tests/local_board.rs rename to codex-rs/message-board/tests/local_board.rs index 1ca929c1c5..b57ccbd169 100644 --- a/codex-rs/ext/agent-message-board/tests/local_board.rs +++ b/codex-rs/message-board/tests/local_board.rs @@ -16,7 +16,7 @@ use std::sync::atomic::Ordering; use chrono::DateTime; use chrono::Utc; -use codex_agent_message_board_extension::*; +use codex_message_board::*; use codex_protocol::AgentPath; use codex_protocol::SessionId; use codex_protocol::ThreadId;