агенты: добавить поиск инструментов по каталогу
This commit is contained in:
@@ -43,7 +43,7 @@ use crate::{
|
||||
DEFAULT_PROTOCOL_VERSION, is_notification, is_request, is_response, jsonrpc_error,
|
||||
jsonrpc_result, method_name, negotiated_protocol_version, params, request_id,
|
||||
},
|
||||
manifest::tool_definitions,
|
||||
manifest::catalog_tool_definitions,
|
||||
rate_limit::{
|
||||
enforce_post_rate_limit, enforce_transport_rate_limit, rate_limited_jsonrpc_response,
|
||||
rate_limited_status_response,
|
||||
@@ -53,6 +53,7 @@ use crate::{
|
||||
ToolErrorContract, generic_tool_error_contract, runtime_error_code,
|
||||
tool_error_contract_from_runtime, tool_error_text, tool_error_value,
|
||||
},
|
||||
tool_search::handle_catalog_tool_call,
|
||||
transport::{
|
||||
AllowedOrigins, HEADER_MCP_SESSION_ID, ResponseMode, json_response,
|
||||
negotiate_post_response_mode, protocol_version_from_headers, resolve_request_id,
|
||||
@@ -98,7 +99,7 @@ struct ApprovalDecisionPayload {
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
struct ResolvedToolCall {
|
||||
pub(super) struct ResolvedToolCall {
|
||||
tool: PublishedAgentTool,
|
||||
}
|
||||
|
||||
@@ -679,11 +680,11 @@ async fn mcp_post(
|
||||
|
||||
match state
|
||||
.catalog
|
||||
.list_tools(&session.workspace_slug, &session.agent_slug)
|
||||
.get_catalog(&session.workspace_slug, &session.agent_slug)
|
||||
.await
|
||||
{
|
||||
Ok(tools) => {
|
||||
let definitions = tools.iter().flat_map(tool_definitions).collect::<Vec<_>>();
|
||||
Ok(catalog) => {
|
||||
let definitions = catalog_tool_definitions(&catalog);
|
||||
|
||||
transport_response(
|
||||
StatusCode::OK,
|
||||
@@ -715,45 +716,31 @@ async fn mcp_post(
|
||||
}
|
||||
};
|
||||
|
||||
let mut arguments = if tool_call_params.arguments.is_null() {
|
||||
let arguments = if tool_call_params.arguments.is_null() {
|
||||
json!({})
|
||||
} else {
|
||||
tool_call_params.arguments
|
||||
};
|
||||
let confirmation_token = take_confirmation_token(&mut arguments);
|
||||
|
||||
match state
|
||||
.catalog
|
||||
.list_tools(&session.workspace_slug, &session.agent_slug)
|
||||
.get_catalog(&session.workspace_slug, &session.agent_slug)
|
||||
.await
|
||||
{
|
||||
Ok(tools) => match resolve_generated_tool(&tools, &tool_call_params.name) {
|
||||
Some(resolved) => {
|
||||
handle_tool_call(
|
||||
state.clone(),
|
||||
&session,
|
||||
&message,
|
||||
response_mode,
|
||||
&credential,
|
||||
resolved,
|
||||
arguments,
|
||||
confirmation_token,
|
||||
&transport_request_id,
|
||||
)
|
||||
.await
|
||||
}
|
||||
None => transport_response(
|
||||
StatusCode::OK,
|
||||
jsonrpc_error(
|
||||
request_id(&message),
|
||||
-32602,
|
||||
format!("tool {} was not found", tool_call_params.name),
|
||||
),
|
||||
Ok(catalog) => {
|
||||
handle_catalog_tool_call(
|
||||
state.clone(),
|
||||
&session,
|
||||
&message,
|
||||
response_mode,
|
||||
None,
|
||||
Some(&session.protocol_version),
|
||||
),
|
||||
},
|
||||
&credential,
|
||||
&catalog,
|
||||
&tool_call_params.name,
|
||||
arguments,
|
||||
&transport_request_id,
|
||||
)
|
||||
.await
|
||||
}
|
||||
Err(error) => internal_jsonrpc_error(&message, error),
|
||||
}
|
||||
}
|
||||
@@ -785,7 +772,7 @@ async fn mcp_post(
|
||||
}
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
async fn handle_tool_call(
|
||||
pub(super) async fn handle_tool_call(
|
||||
state: Arc<AppState>,
|
||||
session: &SessionState,
|
||||
message: &Value,
|
||||
@@ -1381,7 +1368,7 @@ fn internal_jsonrpc_error(message: &Value, error: impl std::fmt::Display) -> Res
|
||||
)
|
||||
}
|
||||
|
||||
fn take_confirmation_token(arguments: &mut Value) -> Option<String> {
|
||||
pub(super) fn take_confirmation_token(arguments: &mut Value) -> Option<String> {
|
||||
let Value::Object(object) = arguments else {
|
||||
return None;
|
||||
};
|
||||
@@ -1479,7 +1466,7 @@ fn success_tool_response(
|
||||
)
|
||||
}
|
||||
|
||||
fn tool_error_response(
|
||||
pub(super) fn tool_error_response(
|
||||
message: &Value,
|
||||
response_mode: ResponseMode,
|
||||
protocol_version: &str,
|
||||
@@ -1517,7 +1504,7 @@ fn add_millis(timestamp: OffsetDateTime, millis: u64) -> OffsetDateTime {
|
||||
timestamp + delta
|
||||
}
|
||||
|
||||
fn resolve_generated_tool(
|
||||
pub(super) fn resolve_generated_tool(
|
||||
tools: &[PublishedAgentTool],
|
||||
tool_name: &str,
|
||||
) -> Option<ResolvedToolCall> {
|
||||
|
||||
Reference in New Issue
Block a user