Skip to main content

systemprompt_agent/
extension.rs

1use systemprompt_extension::prelude::*;
2
3#[derive(Debug, Clone, Copy, Default)]
4pub struct AgentExtension;
5
6impl Extension for AgentExtension {
7    fn metadata(&self) -> ExtensionMetadata {
8        ExtensionMetadata {
9            id: "agent",
10            name: "Agent",
11            version: env!("CARGO_PKG_VERSION"),
12        }
13    }
14
15    fn migration_weight(&self) -> u32 {
16        40
17    }
18
19    fn schemas(&self) -> Vec<SchemaDefinition> {
20        vec![
21            SchemaDefinition::inline("user_contexts", include_str!("../schema/user_contexts.sql"))
22                .with_required_columns(vec![
23                    "context_id".into(),
24                    "user_id".into(),
25                    "created_at".into(),
26                ]),
27            SchemaDefinition::inline("agent_tasks", include_str!("../schema/agent_tasks.sql"))
28                .with_required_columns(vec![
29                    "task_id".into(),
30                    "context_id".into(),
31                    "status".into(),
32                    "created_at".into(),
33                ]),
34            SchemaDefinition::inline("task_messages", include_str!("../schema/task_messages.sql"))
35                .with_required_columns(vec![
36                    "id".into(),
37                    "task_id".into(),
38                    "role".into(),
39                    "created_at".into(),
40                ]),
41            SchemaDefinition::inline("message_parts", include_str!("../schema/message_parts.sql"))
42                .with_required_columns(vec!["id".into(), "message_id".into(), "part_type".into()]),
43            SchemaDefinition::inline(
44                "task_artifacts",
45                include_str!("../schema/task_artifacts.sql"),
46            )
47            .with_required_columns(vec![
48                "id".into(),
49                "task_id".into(),
50                "artifact_id".into(),
51            ]),
52            SchemaDefinition::inline(
53                "artifact_parts",
54                include_str!("../schema/artifact_parts.sql"),
55            )
56            .with_required_columns(vec![
57                "id".into(),
58                "artifact_id".into(),
59                "part_type".into(),
60            ]),
61            SchemaDefinition::inline(
62                "context_agents",
63                include_str!("../schema/context_agents.sql"),
64            )
65            .with_required_columns(vec![
66                "id".into(),
67                "context_id".into(),
68                "agent_id".into(),
69            ]),
70            SchemaDefinition::inline(
71                "context_notifications",
72                include_str!("../schema/context_notifications.sql"),
73            )
74            .with_required_columns(vec![
75                "id".into(),
76                "context_id".into(),
77                "notification_type".into(),
78            ]),
79            SchemaDefinition::inline(
80                "task_push_notification_configs",
81                include_str!("../schema/task_push_notification_configs.sql"),
82            )
83            .with_required_columns(vec!["id".into(), "task_id".into()]),
84            SchemaDefinition::inline("agent_skills", include_str!("../schema/agent_skills.sql"))
85                .with_required_columns(vec!["skill_id".into(), "name".into()]),
86            SchemaDefinition::inline(
87                "agent_playbooks",
88                include_str!("../schema/agent_playbooks.sql"),
89            )
90            .with_required_columns(vec!["playbook_id".into(), "name".into()]),
91            SchemaDefinition::inline(
92                "task_execution_steps",
93                include_str!("../schema/task_execution_steps.sql"),
94            )
95            .with_required_columns(vec![
96                "step_id".into(),
97                "task_id".into(),
98                "step_type".into(),
99            ]),
100            SchemaDefinition::inline("services", include_str!("../schema/services.sql"))
101                .with_required_columns(vec!["name".into(), "module_name".into(), "status".into()]),
102            SchemaDefinition::inline(
103                "user_session_analytics",
104                include_str!("../schema/user_session_analytics.sql"),
105            ),
106        ]
107    }
108
109    fn dependencies(&self) -> Vec<&'static str> {
110        vec!["users", "oauth", "mcp"]
111    }
112}
113
114register_extension!(AgentExtension);