Skip to main content

Crate motosan_agent_loop

Crate motosan_agent_loop 

Source
Expand description

§motosan-agent-loop

Standalone ReAct agent loop — LlmClient + Engine with no platform dependencies.

This crate provides the core loop that drives an LLM through iterative reasoning and tool execution, producing a final answer.

Extensions are registered via EngineBuilder::extension (errors fall back to default) or EngineBuilder::extension_with_policy (opt in to ErrorPolicy::Abort for fail-loud semantics). With the motosan-ai feature, wrap a motosan_ai::Client in MotosanAiClient to forward a max_tokens budget end-to-end (required for the token-budget extension to observe StopReason::MaxTokens).

Re-exports§

pub use context::ContextProvider;
pub use core::engine::AgentMode;
pub use core::engine::AgentOp;
pub use core::engine::AgentResult;
pub use core::engine::AskUserOption;
pub use core::engine::AskUserQuestion;
pub use core::engine::BackpressurePolicy;
pub use core::engine::ChannelConfig;
pub use core::engine::Engine;
pub use core::engine::EngineBuilder;
pub use core::engine::NextStepSchedule;
pub use core::event::AgentEvent;
pub use core::event::CoreEvent;
pub use core::event::ExtensionEvent;
pub use delegate::DelegateAgentTool;
pub use error::AgentError;
pub use error::Result;
pub use extensions::ask_user::AskUserConfig;
pub use extensions::autocompact::compute_compaction_plan;
pub use extensions::autocompact::compute_compaction_plan_with_estimator;
pub use extensions::autocompact::ApproxCharsTokenEstimator;
pub use extensions::autocompact::AutocompactConfig;
pub use extensions::autocompact::AutocompactEvent;
pub use extensions::autocompact::AutocompactExtension;
pub use extensions::autocompact::ChainedCompactionPolicy;
pub use extensions::autocompact::CompactionPlan;
pub use extensions::autocompact::EvictOldImagesPolicy;
pub use extensions::autocompact::EvictOldReasoningPolicy;
pub use extensions::autocompact::EvictOldToolResultsPolicy;
pub use extensions::autocompact::NoopCompactionPolicy;
pub use extensions::autocompact::ReplayLastUserPolicy;
pub use extensions::autocompact::RequestCompactionPolicy;
pub use extensions::autocompact::TokenEstimator;
pub use extensions::config::build_extension_set;
pub use extensions::config::DelegationConfig;
pub use extensions::config::ExtensionBuildError;
pub use extensions::config::ExtensionWiring;
pub use extensions::config::ExtensionsConfig;
pub use extensions::config::PlanningConfig;
pub use extensions::follow_up::FollowUpEvent;
pub use extensions::follow_up::FollowUpExtension;
pub use extensions::follow_up::FollowUpFn;
pub use extensions::stuck_detection::StuckDetectionConfig;
pub use extensions::token_budget::TokenBudgetConfig;
pub use llm::ChatOutput;
pub use llm::LlmClient;
pub use llm::LlmResponse;
pub use llm::LlmResponseMeta;
pub use llm::StopReason;
pub use llm::StreamChunk;
pub use llm::TokenUsage;
pub use llm::ToolCallItem;
pub use message::find_cut_points;
pub use message::is_safe_cut;
pub use message::new_message_id;
pub use message::AssistantContent;
pub use message::ContentPart;
pub use message::DocumentSource;
pub use message::Message;
pub use message::MessageId;
pub use message::MessageMeta;
pub use message::Role;
pub use message::ToolCallRef;
pub use message::DOCUMENT_APPROX_CHAR_EQUIVALENT;
pub use message::IMAGE_APPROX_CHAR_EQUIVALENT;
pub use planning::Plan;
pub use planning::PlanStep;
pub use planning::PlanningEvent;
pub use planning::PlanningTool;
pub use planning::StepStatus;
pub use session::catalog::SessionCatalog;
pub use session::compaction::CompactionResult;
pub use session::compaction::CompactionStrategy;
pub use session::compaction::ThresholdStrategy;
pub use session::entry::EntryId;
pub use session::entry::SessionEntry;
pub use session::meta::SessionMeta;
pub use session::projection::default_projection;
pub use session::projection::DefaultProjection;
pub use session::projection::MessageProjection;
pub use session::session::AgentSession;
pub use session::session::TurnHandle;
pub use session::store::FileSessionStore;
pub use session::store::MemorySessionStore;
pub use session::store::SessionStore;
pub use stream::AgentStreamItem;
pub use stream::AgentTerminal;
pub use streaming_executor::StreamingToolExecutor;

Modules§

context
core
Mechanism layer: the agent loop engine.
delegate
Delegation tool — wraps an Engine as a callable Tool so a main agent can delegate subtasks to a sub-agent (browser agent, SWE agent, etc.) via normal tool calling.
error
extensions
Policy layer: self-contained feature modules that plug into the core via the Extension trait (added in Phase 1).
llm
message
Conversation messages — the unit exchanged between the agent loop and the LLM.
planning
Built-in PlanningTool — lets agents create, manage, and track execution plans autonomously via tool calling.
session
Session layer: long-lived conversation state, persistence, and orchestration. See each submodule for its specific role.
stream
Stream item types for the Engine::run API.
streaming_executor
Streaming tool executor — starts executing tools as LLM streams tool_use blocks.