Skip to main content

agent_sdk_toolkit/resources/
resolver.rs

1//! Resource-reader helpers layered over explicit URI resolvers and core content refs.
2//! Use these modules when a host wants toolkit tools to read approved resources.
3//! Resolver implementations own any backing-store or network side effects. This file
4//! contains the resolver portion of that contract.
5//!
6use std::sync::Arc;
7
8use agent_sdk_core::{
9    AgentError, PolicyRef, ResourceReadRequest, ResourceResolution, ResourceResolver,
10    ResourceScheme, RetentionClass, domain::ContentRef,
11};
12
13#[derive(Clone)]
14/// Resource in memory resource resolver request or result value.
15/// Creating the value does not fetch content; resource executors document resolver and content-store effects.
16pub struct InMemoryResourceResolver {
17    scheme: ResourceScheme,
18    content_ref: ContentRef,
19    source: agent_sdk_core::SourceRef,
20    policy_ref: PolicyRef,
21}
22
23impl InMemoryResourceResolver {
24    /// Creates a new resources::resolver value with explicit
25    /// caller-provided inputs. This constructor is data-only and
26    /// performs no I/O or external side effects.
27    pub fn new(
28        scheme: &str,
29        content_ref: ContentRef,
30        source: agent_sdk_core::SourceRef,
31        policy_ref: PolicyRef,
32    ) -> Arc<Self> {
33        Arc::new(Self {
34            scheme: ResourceScheme::new(scheme),
35            content_ref,
36            source,
37            policy_ref,
38        })
39    }
40}
41
42impl ResourceResolver for InMemoryResourceResolver {
43    fn scheme(&self) -> &ResourceScheme {
44        &self.scheme
45    }
46
47    fn resolve(&self, request: &ResourceReadRequest) -> Result<ResourceResolution, AgentError> {
48        Ok(ResourceResolution {
49            uri: request.uri.clone(),
50            scheme: self.scheme.clone(),
51            content_ref: self.content_ref.clone(),
52            source: self.source.clone(),
53            policy_refs: vec![self.policy_ref.clone()],
54            byte_len: 0,
55            truncated: false,
56            parser_version: "toolkit.in_memory_resource.v1".to_string(),
57            privacy: agent_sdk_core::PrivacyClass::ContentRefsOnly,
58            retention: RetentionClass::RunScoped,
59            redacted_summary: "in-memory resource resolved to content ref".to_string(),
60        })
61    }
62}