Skip to main content

a2a_agents/agents/reimbursement/
plugin.rs

1//! AgentPlugin implementation for ReimbursementHandler
2//!
3//! This module provides the AgentPlugin trait implementation, which enables
4//! automatic skill discovery and metadata provisioning.
5
6use crate::traits::{AgentPlugin, SkillDefinition};
7use async_trait::async_trait;
8
9use super::handler::ReimbursementHandler;
10
11/// Implement AgentPlugin for ReimbursementHandler with InMemoryTaskStorage
12#[async_trait]
13impl<T> AgentPlugin for ReimbursementHandler<T>
14where
15    T: a2a_rs::port::AsyncTaskManager + Clone + Send + Sync + 'static,
16{
17    fn name(&self) -> &str {
18        "Reimbursement Agent"
19    }
20
21    fn description(&self) -> &str {
22        "Intelligent expense reimbursement assistant that helps users submit and track reimbursement requests through natural conversation"
23    }
24
25    fn version(&self) -> &str {
26        env!("CARGO_PKG_VERSION")
27    }
28
29    fn skills(&self) -> Vec<SkillDefinition> {
30        vec![
31            SkillDefinition {
32                id: "submit_reimbursement".to_string(),
33                name: "Submit Reimbursement Request".to_string(),
34                description: "Guide users through submitting an expense reimbursement request"
35                    .to_string(),
36                keywords: vec![
37                    "reimburse".into(),
38                    "reimbursement".into(),
39                    "expense".into(),
40                    "receipt".into(),
41                    "refund".into(),
42                    "claim".into(),
43                    "submit".into(),
44                ],
45                examples: vec![
46                    "I need to submit a reimbursement".into(),
47                    "I want to get reimbursed for an expense".into(),
48                    "Submit expense claim".into(),
49                ],
50                input_formats: vec!["text".into(), "file".into()],
51                output_formats: vec!["text".into(), "data".into()],
52            },
53            SkillDefinition {
54                id: "track_request".to_string(),
55                name: "Track Request Status".to_string(),
56                description: "Check the status of existing reimbursement requests".to_string(),
57                keywords: vec![
58                    "status".into(),
59                    "track".into(),
60                    "check".into(),
61                    "where is".into(),
62                    "progress".into(),
63                ],
64                examples: vec![
65                    "What's the status of my request?".into(),
66                    "Check my reimbursement status".into(),
67                ],
68                input_formats: vec!["text".into()],
69                output_formats: vec!["text".into(), "data".into()],
70            },
71            SkillDefinition {
72                id: "help".to_string(),
73                name: "Get Help".to_string(),
74                description: "Provide information about the reimbursement process".to_string(),
75                keywords: vec![
76                    "help".into(),
77                    "how".into(),
78                    "what".into(),
79                    "info".into(),
80                    "information".into(),
81                ],
82                examples: vec![
83                    "How do I submit a reimbursement?".into(),
84                    "What information do I need?".into(),
85                ],
86                input_formats: vec!["text".into()],
87                output_formats: vec!["text".into()],
88            },
89        ]
90    }
91}