pub mod chat;
pub mod client;
pub mod compact;
pub mod embed;
pub mod error;
pub mod perception;
pub mod react;
pub mod task;
pub mod tokent;
pub mod tool;
pub use task::TaskService;
pub use tokent::{TokenUsage, resolve_usage};
pub use perception::{PerceptionService, SkillContext, SkillEntry, ToolCallEvent};

use async_openai::Client;
use async_openai::config::OpenAIConfig;
pub use chat::{
    AiContextSenderType, AiRequest, AiStreamChunk, ChatService, Mention, RoomMessageContext,
    StreamCallback,
};
pub use client::{AiCallResponse, AiClientConfig, call_with_params, call_with_retry};
pub use compact::{CompactConfig, CompactLevel, CompactService, CompactSummary, MessageSummary};
pub use embed::{EmbedClient, EmbedService, QdrantClient, SearchResult};
pub use error::{AgentError, Result};
pub use react::{
    Hook, HookAction, NoopHook, ReactAgent, ReactConfig, ReactStep, ToolCallAction, TracingHook,
    DEFAULT_SYSTEM_PROMPT,
};
pub use tool::{
    ToolCall, ToolCallResult, ToolContext, ToolDefinition, ToolError, ToolExecutor, ToolHandler, ToolParam,
    ToolRegistry, ToolResult, ToolSchema,
};

#[derive(Clone)]
pub struct AgentService {
    pub client: Client<OpenAIConfig>,
}
