feat(elicitation): add support URL elicitation. SEP-1036 (#605)
This commit is contained in:
parent
edd5b1d7e9
commit
187597bf7e
2 changed files with 1533 additions and 271 deletions
|
|
@ -179,7 +179,27 @@ impl TasksCapability {
|
|||
}
|
||||
|
||||
/// Capability for handling elicitation requests from servers.
|
||||
/// Elicitation allows servers to request interactive input from users during tool execution.
|
||||
/// This capability indicates that a client can handle elicitation requests and present
|
||||
/// appropriate UI to users for collecting the requested information.
|
||||
///
|
||||
/// Capability for form mode elicitation.
|
||||
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
|
||||
pub struct FormElicitationCapability {
|
||||
/// Whether the client supports JSON Schema validation for elicitation responses.
|
||||
/// When true, the client will validate user input against the requested_schema
|
||||
/// before sending the response back to the server.
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub schema_validation: Option<bool>,
|
||||
}
|
||||
|
||||
/// Capability for URL mode elicitation.
|
||||
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
|
||||
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
|
||||
pub struct UrlElicitationCapability {}
|
||||
|
||||
/// Elicitation allows servers to request interactive input from users during tool execution.
|
||||
/// This capability indicates that a client can handle elicitation requests and present
|
||||
/// appropriate UI to users for collecting the requested information.
|
||||
|
|
@ -187,11 +207,12 @@ impl TasksCapability {
|
|||
#[serde(rename_all = "camelCase")]
|
||||
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
|
||||
pub struct ElicitationCapability {
|
||||
/// Whether the client supports JSON Schema validation for elicitation responses.
|
||||
/// When true, the client will validate user input against the requested_schema
|
||||
/// before sending the response back to the server.
|
||||
/// Whether client supports form-based elicitation.
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub schema_validation: Option<bool>,
|
||||
pub form: Option<FormElicitationCapability>,
|
||||
/// Whether client supports URL-based elicitation.
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub url: Option<UrlElicitationCapability>,
|
||||
}
|
||||
|
||||
/// Sampling capability with optional sub-capabilities (SEP-1577).
|
||||
|
|
@ -504,12 +525,14 @@ impl<const E: bool, const EXT: bool, const R: bool, const EL: bool, const TASKS:
|
|||
impl<const E: bool, const EXT: bool, const R: bool, const S: bool, const TASKS: bool>
|
||||
ClientCapabilitiesBuilder<ClientCapabilitiesBuilderState<E, EXT, R, S, true, TASKS>>
|
||||
{
|
||||
/// Enable JSON Schema validation for elicitation responses.
|
||||
/// Enable JSON Schema validation for elicitation responses in form mode.
|
||||
/// When enabled, the client will validate user input against the requested_schema
|
||||
/// before sending responses back to the server.
|
||||
pub fn enable_elicitation_schema_validation(mut self) -> Self {
|
||||
if let Some(c) = self.elicitation.as_mut() {
|
||||
c.schema_validation = Some(true);
|
||||
c.form = Some(FormElicitationCapability {
|
||||
schema_validation: Some(true),
|
||||
});
|
||||
}
|
||||
self
|
||||
}
|
||||
|
|
|
|||
|
|
@ -188,6 +188,7 @@ variant_extension! {
|
|||
ResourceListChangedNotification
|
||||
ToolListChangedNotification
|
||||
PromptListChangedNotification
|
||||
ElicitationCompletionNotification
|
||||
CustomNotification
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue