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
impl Agent
pub fn new() -> Self
Sourcepub fn with_session_store(self, store: Arc<dyn SessionStore>) -> Self
pub fn with_session_store(self, store: Arc<dyn SessionStore>) -> Self
Sourcepub fn session_store(&self) -> Option<&Arc<dyn SessionStore>>
pub fn session_store(&self) -> Option<&Arc<dyn SessionStore>>
获取当前的 session 存储引用
Sourcepub fn with_identity(self, identity: AgentIdentity) -> Self
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);Sourcepub async fn set_identity(&self, identity: AgentIdentity)
pub async fn set_identity(&self, identity: AgentIdentity)
设置 Agent 身份(异步方法)
用于在 Agent 创建后动态修改身份配置。 这是在异步上下文中设置身份的推荐方式。
Sourcepub fn with_tool_config(config: ToolRegistrationConfig) -> Self
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
Sourcepub fn tool_registry(&self) -> &Arc<RwLock<ToolRegistry>>
pub fn tool_registry(&self) -> &Arc<RwLock<ToolRegistry>>
Get a reference to the tool registry
Requirements: 11.3
Sourcepub fn file_read_history(&self) -> &SharedFileReadHistory
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.
Sourcepub async fn register_mcp_tool(
&self,
name: String,
description: String,
input_schema: Value,
server_name: String,
)
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 namedescription- Tool descriptioninput_schema- JSON schema for tool inputserver_name- Name of the MCP server providing this tool
Requirements: 11.4, 11.5
Sourcepub async fn reset_retry_attempts(&self)
pub async fn reset_retry_attempts(&self)
Reset the retry attempts counter to 0
Sourcepub async fn increment_retry_attempts(&self) -> u32
pub async fn increment_retry_attempts(&self) -> u32
Increment the retry attempts counter and return the new value
Sourcepub async fn get_retry_attempts(&self) -> u32
pub async fn get_retry_attempts(&self) -> u32
Get the current retry attempts count
pub async fn set_scheduler(&self, scheduler: Arc<dyn SchedulerTrait>)
Sourcepub async fn provider(&self) -> Result<Arc<dyn Provider>, Error>
pub async fn provider(&self) -> Result<Arc<dyn Provider>, Error>
Get a reference count clone to the provider
Sourcepub async fn is_frontend_tool(&self, name: &str) -> bool
pub async fn is_frontend_tool(&self, name: &str) -> bool
Check if a tool is a frontend tool
Sourcepub async fn get_frontend_tool(&self, name: &str) -> Option<FrontendTool>
pub async fn get_frontend_tool(&self, name: &str) -> Option<FrontendTool>
Get a reference to a frontend tool
pub async fn add_final_output_tool(&self, response: Response)
pub async fn add_sub_recipes(&self, sub_recipes_to_add: Vec<SubRecipe>)
pub async fn apply_recipe_components( &self, sub_recipes: Option<Vec<SubRecipe>>, response: Option<Response>, include_final_output: bool, )
Sourcepub async fn dispatch_tool_call(
&self,
tool_call: CallToolRequestParam,
request_id: String,
cancellation_token: Option<CancellationToken>,
session: &Session,
) -> (String, Result<ToolCallResult, ErrorData>)
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
Sourcepub async fn save_extension_state(&self, session: &SessionConfig) -> Result<()>
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
pub async fn add_extension( &self, extension: ExtensionConfig, ) -> ExtensionResult<()>
pub async fn subagents_enabled(&self) -> bool
pub async fn list_tools(&self, extension_name: Option<String>) -> Vec<Tool>
pub async fn remove_extension(&self, name: &str) -> Result<()>
pub async fn list_extensions(&self) -> Vec<String>
pub async fn get_extension_configs(&self) -> Vec<ExtensionConfig>
Sourcepub async fn handle_confirmation(
&self,
request_id: String,
confirmation: PermissionConfirmation,
)
pub async fn handle_confirmation( &self, request_id: String, confirmation: PermissionConfirmation, )
Handle a confirmation response for a tool request
pub async fn reply( &self, user_message: Message, session_config: SessionConfig, cancel_token: Option<CancellationToken>, ) -> Result<BoxStream<'_, Result<AgentEvent>>>
pub async fn extend_system_prompt(&self, instruction: String)
pub async fn update_provider( &self, provider: Arc<dyn Provider>, session_id: &str, ) -> Result<()>
Sourcepub async fn override_system_prompt(&self, template: String)
pub async fn override_system_prompt(&self, template: String)
Override the system prompt with a custom template
pub async fn list_extension_prompts(&self) -> HashMap<String, Vec<Prompt>>
pub async fn get_prompt( &self, name: &str, arguments: Value, ) -> Result<GetPromptResult>
pub async fn get_plan_prompt(&self) -> Result<String>
pub async fn handle_tool_result( &self, id: String, result: ToolResult<CallToolResult>, )
pub async fn create_recipe(&self, messages: Conversation) -> Result<Recipe>
Source§impl Agent
impl Agent
Sourcepub async fn handle_schedule_management(
&self,
arguments: Value,
_request_id: String,
) -> ToolResult<Vec<Content>>
pub async fn handle_schedule_management( &self, arguments: Value, _request_id: String, ) -> ToolResult<Vec<Content>>
Handle schedule management tool calls
Source§impl Agent
impl Agent
Sourcepub fn create_tool_context(
session: &Session,
cancellation_token: Option<CancellationToken>,
) -> ToolContext
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
Sourcepub fn create_permission_context(session: &Session) -> PermissionContext
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
Sourcepub 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>
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 toolstool_name- Name of the tool to executeparams- Tool parameters as JSONsession- Current sessioncancellation_token- Optional cancellation tokenon_permission_request- Optional callback for permission requests
§Returns
Ok(ToolResult)- The tool execution resultErr(ToolError)- If permission denied or execution fails
Requirements: 8.1, 8.2, 8.3, 8.4, 8.5
Sourcepub fn log_tool_execution(
audit_logger: &AuditLogger,
tool_name: &str,
params: &Value,
session: &Session,
success: bool,
duration: Duration,
error_message: Option<&str>,
)
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
Sourcepub fn log_permission_denied(
audit_logger: &AuditLogger,
tool_name: &str,
params: &Value,
session: &Session,
reason: &str,
)
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
Sourcepub fn check_tool_permission(
permission_manager: &ToolPermissionManager,
tool_name: &str,
params: &Value,
session: &Session,
) -> Result<(), String>
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 usetool_name- Name of the tool to checkparams- Tool parameters as JSONsession- Current session
§Returns
Ok(())- If permission is grantedErr(reason)- If permission is denied, with the denial reason
Requirements: 8.1, 8.2, 8.3
Sourcepub 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>
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 toolspermission_manager- Optional ToolPermissionManager for permission checksaudit_logger- Optional AuditLogger for loggingtool_name- Name of the tool to executeparams- Tool parameters as JSONsession- Current sessioncancellation_token- Optional cancellation token
§Returns
Ok(ToolResult)- The tool execution resultErr(String)- Error message if permission denied or execution fails
Requirements: 8.1, 8.2, 8.3, 8.4, 8.5
Sourcepub 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>
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 toolspermission_manager- Optional ToolPermissionManager for permission checksaudit_logger- Optional AuditLogger for loggingtool_name- Name of the tool to executeparams- Tool parameters as JSONsession- Current sessioncancellation_token- Optional cancellation tokenon_permission_request- Callback for handling ‘ask’ permission behavior
§Returns
Ok(ToolResult)- The tool execution resultErr(String)- Error message if permission denied or execution fails
Requirements: 8.1, 8.2, 8.3, 8.4
Sourcepub fn create_permission_callback(
request_id: String,
_confirmation_tx: Sender<(String, PermissionConfirmation)>,
) -> PermissionRequestCallback
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 trackingconfirmation_tx- The confirmation sender channel
§Returns
A callback that sends permission requests and waits for user confirmation
Requirements: 8.2, 8.3
Sourcepub fn log_permission_check(
audit_logger: &AuditLogger,
tool_name: &str,
params: &Value,
session: &Session,
allowed: bool,
reason: Option<&str>,
)
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§
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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.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
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.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
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.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
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.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
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.