Skip to main content

Agent

Struct Agent 

Source
pub struct Agent {
    pub extension_manager: Arc<ExtensionManager>,
    /* private fields */
}
Expand description

The main aster Agent

Fields§

§extension_manager: Arc<ExtensionManager>

Implementations§

Source§

impl Agent

Source

pub fn new() -> Self

Source

pub fn with_session_store(self, store: Arc<dyn SessionStore>) -> Self

设置自定义 session 存储

允许应用层注入自己的存储实现,而不是使用默认的 SQLite 存储。 如果设置为 None,会回退到全局 SessionManager。

§Example
let store = Arc::new(MyCustomStore::new());
let agent = Agent::new().with_session_store(store);
Source

pub fn session_store(&self) -> Option<&Arc<dyn SessionStore>>

获取当前的 session 存储引用

Source

pub fn with_identity(self, identity: AgentIdentity) -> Self

设置 Agent 身份配置(Builder 模式)

允许应用层完全控制 Agent 的身份,包括名称、语言、描述等。 这会替换默认的 “aster by Block” 身份。

注意:此方法使用 try_lock,如果锁被占用会静默失败。 建议在 Agent 创建后立即调用,或使用异步版本 set_identity()

§Example
use aster::agents::{Agent, AgentIdentity};

let identity = AgentIdentity::new("ProxyCast 助手")
    .with_language("Chinese")
    .with_description("一个专业的 AI 代理服务助手");

let agent = Agent::new().with_identity(identity);
Source

pub async fn set_identity(&self, identity: AgentIdentity)

设置 Agent 身份(异步方法)

用于在 Agent 创建后动态修改身份配置。 这是在异步上下文中设置身份的推荐方式。

Source

pub fn with_tool_config(config: ToolRegistrationConfig) -> Self

Create a new Agent with custom tool registration configuration

This allows customizing which tools are registered and their configuration.

§Arguments
  • config - Configuration for tool registration

Requirements: 11.3, 11.4

Source

pub fn tool_registry(&self) -> &Arc<RwLock<ToolRegistry>>

Get a reference to the tool registry

Requirements: 11.3

Source

pub fn file_read_history(&self) -> &SharedFileReadHistory

Get a reference to the shared file read history

This is useful for tools that need to track file reads.

Source

pub async fn register_mcp_tool( &self, name: String, description: String, input_schema: Value, server_name: String, )

Register an MCP tool with the registry

This method allows registering MCP tools from extensions into the native tool registry. Native tools have priority over MCP tools with the same name.

§Arguments
  • name - The tool name
  • description - Tool description
  • input_schema - JSON schema for tool input
  • server_name - Name of the MCP server providing this tool

Requirements: 11.4, 11.5

Source

pub async fn reset_retry_attempts(&self)

Reset the retry attempts counter to 0

Source

pub async fn increment_retry_attempts(&self) -> u32

Increment the retry attempts counter and return the new value

Source

pub async fn get_retry_attempts(&self) -> u32

Get the current retry attempts count

Source

pub async fn set_scheduler(&self, scheduler: Arc<dyn SchedulerTrait>)

Source

pub async fn provider(&self) -> Result<Arc<dyn Provider>, Error>

Get a reference count clone to the provider

Source

pub async fn is_frontend_tool(&self, name: &str) -> bool

Check if a tool is a frontend tool

Source

pub async fn get_frontend_tool(&self, name: &str) -> Option<FrontendTool>

Get a reference to a frontend tool

Source

pub async fn add_final_output_tool(&self, response: Response)

Source

pub async fn add_sub_recipes(&self, sub_recipes_to_add: Vec<SubRecipe>)

Source

pub async fn apply_recipe_components( &self, sub_recipes: Option<Vec<SubRecipe>>, response: Option<Response>, include_final_output: bool, )

Source

pub async fn dispatch_tool_call( &self, tool_call: CallToolRequestParam, request_id: String, cancellation_token: Option<CancellationToken>, session: &Session, ) -> (String, Result<ToolCallResult, ErrorData>)

Dispatch a single tool call to the appropriate client

Source

pub async fn save_extension_state(&self, session: &SessionConfig) -> Result<()>

Save current extension state to session metadata Should be called after any extension add/remove operation

Source

pub async fn add_extension( &self, extension: ExtensionConfig, ) -> ExtensionResult<()>

Source

pub async fn subagents_enabled(&self) -> bool

Source

pub async fn list_tools(&self, extension_name: Option<String>) -> Vec<Tool>

Source

pub async fn remove_extension(&self, name: &str) -> Result<()>

Source

pub async fn list_extensions(&self) -> Vec<String>

Source

pub async fn get_extension_configs(&self) -> Vec<ExtensionConfig>

Source

pub async fn handle_confirmation( &self, request_id: String, confirmation: PermissionConfirmation, )

Handle a confirmation response for a tool request

Source

pub async fn reply( &self, user_message: Message, session_config: SessionConfig, cancel_token: Option<CancellationToken>, ) -> Result<BoxStream<'_, Result<AgentEvent>>>

Source

pub async fn extend_system_prompt(&self, instruction: String)

Source

pub async fn update_provider( &self, provider: Arc<dyn Provider>, session_id: &str, ) -> Result<()>

Source

pub async fn override_system_prompt(&self, template: String)

Override the system prompt with a custom template

Source

pub async fn list_extension_prompts(&self) -> HashMap<String, Vec<Prompt>>

Source

pub async fn get_prompt( &self, name: &str, arguments: Value, ) -> Result<GetPromptResult>

Source

pub async fn get_plan_prompt(&self) -> Result<String>

Source

pub async fn handle_tool_result( &self, id: String, result: ToolResult<CallToolResult>, )

Source

pub async fn create_recipe(&self, messages: Conversation) -> Result<Recipe>

Source§

impl Agent

Source

pub async fn execute_command( &self, message_text: &str, session_id: &str, ) -> Result<Option<Message>>

Source§

impl Agent

Source

pub async fn prepare_tools_and_prompt( &self, working_dir: &Path, session_prompt: Option<&str>, ) -> Result<(Vec<Tool>, Vec<Tool>, String)>

Source§

impl Agent

Source

pub async fn handle_schedule_management( &self, arguments: Value, _request_id: String, ) -> ToolResult<Vec<Content>>

Handle schedule management tool calls

Source§

impl Agent

Source

pub fn create_tool_context( session: &Session, cancellation_token: Option<CancellationToken>, ) -> ToolContext

Create a ToolContext from a Session

This helper function creates a ToolContext suitable for use with the ToolRegistry from the current session information.

Requirements: 8.4

Source

pub fn create_permission_context(session: &Session) -> PermissionContext

Create a PermissionContext from a Session

This helper function creates a PermissionContext suitable for use with the ToolPermissionManager from the current session information.

Requirements: 8.1, 8.2

Source

pub async fn execute_tool_with_registry( registry: &ToolRegistry, tool_name: &str, params: Value, session: &Session, cancellation_token: Option<CancellationToken>, on_permission_request: Option<PermissionRequestCallback>, ) -> Result<ToolResult, ToolError>

Execute a tool through the ToolRegistry with permission checking and audit logging

This method provides a unified interface for executing tools through the ToolRegistry, integrating:

  • Permission checking via ToolPermissionManager
  • Audit logging via AuditLogger
  • User confirmation handling for ‘ask’ permission behavior
§Arguments
  • registry - The ToolRegistry containing registered tools
  • tool_name - Name of the tool to execute
  • params - Tool parameters as JSON
  • session - Current session
  • cancellation_token - Optional cancellation token
  • on_permission_request - Optional callback for permission requests
§Returns
  • Ok(ToolResult) - The tool execution result
  • Err(ToolError) - If permission denied or execution fails

Requirements: 8.1, 8.2, 8.3, 8.4, 8.5

Source

pub fn log_tool_execution( audit_logger: &AuditLogger, tool_name: &str, params: &Value, session: &Session, success: bool, duration: Duration, error_message: Option<&str>, )

Log a tool execution to the audit logger

This helper function logs tool execution events to the audit logger, including success/failure status, duration, and relevant metadata.

Requirements: 8.5

Source

pub fn log_permission_denied( audit_logger: &AuditLogger, tool_name: &str, params: &Value, session: &Session, reason: &str, )

Log a permission denial to the audit logger

This helper function logs permission denial events to the audit logger.

Requirements: 8.5

Source

pub fn check_tool_permission( permission_manager: &ToolPermissionManager, tool_name: &str, params: &Value, session: &Session, ) -> Result<(), String>

Check tool permissions using ToolPermissionManager

This method checks if a tool execution is allowed based on the configured permission rules.

§Arguments
  • permission_manager - The ToolPermissionManager to use
  • tool_name - Name of the tool to check
  • params - Tool parameters as JSON
  • session - Current session
§Returns
  • Ok(()) - If permission is granted
  • Err(reason) - If permission is denied, with the denial reason

Requirements: 8.1, 8.2, 8.3

Source

pub async fn execute_tool_with_checks( registry: &ToolRegistry, permission_manager: Option<&ToolPermissionManager>, audit_logger: Option<&AuditLogger>, tool_name: &str, params: Value, session: &Session, cancellation_token: Option<CancellationToken>, ) -> Result<ToolResult, String>

Execute a tool call with integrated permission checking and audit logging

This is a higher-level wrapper that combines permission checking, tool execution, and audit logging into a single operation.

§Arguments
  • registry - The ToolRegistry containing registered tools
  • permission_manager - Optional ToolPermissionManager for permission checks
  • audit_logger - Optional AuditLogger for logging
  • tool_name - Name of the tool to execute
  • params - Tool parameters as JSON
  • session - Current session
  • cancellation_token - Optional cancellation token
§Returns
  • Ok(ToolResult) - The tool execution result
  • Err(String) - Error message if permission denied or execution fails

Requirements: 8.1, 8.2, 8.3, 8.4, 8.5

Source

pub async fn execute_tool_with_user_confirmation( registry: &ToolRegistry, permission_manager: Option<&ToolPermissionManager>, audit_logger: Option<&AuditLogger>, tool_name: &str, params: Value, session: &Session, cancellation_token: Option<CancellationToken>, on_permission_request: Option<PermissionRequestCallback>, ) -> Result<ToolResult, String>

Execute a tool call with user confirmation support for ‘ask’ permission behavior

This method extends execute_tool_with_checks to support the ‘ask’ permission behavior, where the user is prompted to confirm tool execution.

§Arguments
  • registry - The ToolRegistry containing registered tools
  • permission_manager - Optional ToolPermissionManager for permission checks
  • audit_logger - Optional AuditLogger for logging
  • tool_name - Name of the tool to execute
  • params - Tool parameters as JSON
  • session - Current session
  • cancellation_token - Optional cancellation token
  • on_permission_request - Callback for handling ‘ask’ permission behavior
§Returns
  • Ok(ToolResult) - The tool execution result
  • Err(String) - Error message if permission denied or execution fails

Requirements: 8.1, 8.2, 8.3, 8.4

Source

pub fn create_permission_callback( request_id: String, _confirmation_tx: Sender<(String, PermissionConfirmation)>, ) -> PermissionRequestCallback

Create a permission request callback that uses the Agent’s confirmation channel

This method creates a callback that can be used with execute_tool_with_user_confirmation to handle ‘ask’ permission behavior by sending confirmation requests through the Agent’s existing confirmation channel.

§Arguments
  • request_id - The tool request ID for tracking
  • confirmation_tx - The confirmation sender channel
§Returns

A callback that sends permission requests and waits for user confirmation

Requirements: 8.2, 8.3

Source

pub fn log_permission_check( audit_logger: &AuditLogger, tool_name: &str, params: &Value, session: &Session, allowed: bool, reason: Option<&str>, )

Log a permission check result to the audit logger

This helper function logs permission check events to the audit logger, including the result and any relevant metadata.

Requirements: 8.5

Trait Implementations§

Source§

impl Default for Agent

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl !Freeze for Agent

§

impl !RefUnwindSafe for Agent

§

impl Send for Agent

§

impl Sync for Agent

§

impl Unpin for Agent

§

impl UnsafeUnpin for Agent

§

impl !UnwindSafe for Agent

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

Source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,