a2a_agents/agents/reimbursement/
plugin.rs1use crate::traits::{AgentPlugin, SkillDefinition};
7use async_trait::async_trait;
8
9use super::handler::ReimbursementHandler;
10
11#[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}