Skip to main content

atomr_agents_tool/
toolset.rs

1use atomr_agents_core::ToolSetId;
2use semver::Version;
3use serde::{Deserialize, Serialize};
4
5use crate::permission::PermissionSpec;
6use crate::r#trait::DynTool;
7
8/// Free-form metadata attached to a tool set.
9#[derive(Debug, Clone, Default, Serialize, Deserialize)]
10pub struct ToolSetMeta {
11    #[serde(default)]
12    pub description: String,
13    #[serde(default)]
14    pub author: Option<String>,
15}
16
17/// Versioned bundle. Lives behind an `Arc` in the registry.
18#[derive(Clone)]
19pub struct ToolSet {
20    pub id: ToolSetId,
21    pub version: Version,
22    pub tools: Vec<DynTool>,
23    pub metadata: ToolSetMeta,
24    pub dependencies: Vec<ToolSetId>,
25    pub permissions: PermissionSpec,
26}
27
28impl ToolSet {
29    pub fn new(id: impl Into<ToolSetId>, version: Version, tools: Vec<DynTool>) -> Self {
30        Self {
31            id: id.into(),
32            version,
33            tools,
34            metadata: ToolSetMeta::default(),
35            dependencies: vec![],
36            permissions: PermissionSpec::default(),
37        }
38    }
39}