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 schemas(&self) -> Vec<SchemaDefinition> {
16        vec![
17            SchemaDefinition::new("user_contexts", include_str!("../schema/user_contexts.sql"))
18                .with_required_columns(vec![
19                    "context_id".into(),
20                    "user_id".into(),
21                    "created_at".into(),
22                ]),
23            SchemaDefinition::new("agent_tasks", include_str!("../schema/agent_tasks.sql"))
24                .with_required_columns(vec![
25                    "task_id".into(),
26                    "context_id".into(),
27                    "status".into(),
28                    "created_at".into(),
29                ]),
30            SchemaDefinition::new("task_messages", include_str!("../schema/task_messages.sql"))
31                .with_required_columns(vec![
32                    "id".into(),
33                    "task_id".into(),
34                    "role".into(),
35                    "created_at".into(),
36                ]),
37            SchemaDefinition::new("message_parts", include_str!("../schema/message_parts.sql"))
38                .with_required_columns(vec!["id".into(), "message_id".into(), "part_kind".into()]),
39            SchemaDefinition::new(
40                "task_artifacts",
41                include_str!("../schema/task_artifacts.sql"),
42            )
43            .with_required_columns(vec![
44                "id".into(),
45                "task_id".into(),
46                "artifact_id".into(),
47            ]),
48            SchemaDefinition::new(
49                "artifact_parts",
50                include_str!("../schema/artifact_parts.sql"),
51            )
52            .with_required_columns(vec![
53                "id".into(),
54                "artifact_id".into(),
55                "part_kind".into(),
56            ]),
57            SchemaDefinition::new(
58                "context_agents",
59                include_str!("../schema/context_agents.sql"),
60            )
61            .with_required_columns(vec![
62                "id".into(),
63                "context_id".into(),
64                "agent_name".into(),
65            ]),
66            SchemaDefinition::new(
67                "context_notifications",
68                include_str!("../schema/context_notifications.sql"),
69            )
70            .with_required_columns(vec![
71                "id".into(),
72                "context_id".into(),
73                "notification_type".into(),
74            ]),
75            SchemaDefinition::new(
76                "task_push_notification_configs",
77                include_str!("../schema/task_push_notification_configs.sql"),
78            )
79            .with_required_columns(vec!["id".into(), "task_id".into()]),
80            SchemaDefinition::new(
81                "task_execution_steps",
82                include_str!("../schema/task_execution_steps.sql"),
83            )
84            .with_required_columns(vec![
85                "step_id".into(),
86                "task_id".into(),
87                "step_type".into(),
88            ]),
89            SchemaDefinition::new("services", include_str!("../schema/services.sql"))
90                .with_required_columns(vec!["name".into(), "module_name".into(), "status".into()]),
91            SchemaDefinition::new(
92                "user_session_analytics",
93                include_str!("../schema/user_session_analytics.sql"),
94            ),
95        ]
96    }
97
98    fn dependencies(&self) -> Vec<&'static str> {
99        vec!["users", "oauth", "mcp", "ai"]
100    }
101
102    fn migrations(&self) -> Vec<Migration> {
103        extension_migrations!()
104    }
105
106    fn cross_extension_tables(&self) -> Vec<&'static str> {
107        vec!["ai_requests"]
108    }
109}
110
111register_extension!(AgentExtension);