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_kind".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_kind".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_name".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("agents", include_str!("../schema/agents.sql"))
85 .with_required_columns(vec!["agent_id".into(), "name".into(), "enabled".into()]),
86 SchemaDefinition::inline("agent_skills", include_str!("../schema/agent_skills.sql"))
87 .with_required_columns(vec!["skill_id".into(), "name".into()]),
88 SchemaDefinition::inline(
89 "task_execution_steps",
90 include_str!("../schema/task_execution_steps.sql"),
91 )
92 .with_required_columns(vec![
93 "step_id".into(),
94 "task_id".into(),
95 "step_type".into(),
96 ]),
97 SchemaDefinition::inline("services", include_str!("../schema/services.sql"))
98 .with_required_columns(vec!["name".into(), "module_name".into(), "status".into()]),
99 SchemaDefinition::inline(
100 "user_session_analytics",
101 include_str!("../schema/user_session_analytics.sql"),
102 ),
103 ]
104 }
105
106 fn dependencies(&self) -> Vec<&'static str> {
107 vec!["users", "oauth", "mcp", "ai"]
108 }
109
110 fn migrations(&self) -> Vec<Migration> {
111 vec![
112 Migration::new(
113 1,
114 "drop_playbooks_table",
115 include_str!("../schema/migrations/001_drop_playbooks.sql"),
116 ),
117 Migration::new(
118 2,
119 "add_server_type_column",
120 include_str!("../schema/migrations/002_add_server_type.sql"),
121 ),
122 Migration::new(
123 3,
124 "a2a_v1_task_states",
125 include_str!("../schema/migrations/003_a2a_v1_task_states.sql"),
126 ),
127 Migration::new(
128 4,
129 "ai_requests_task_fk",
130 include_str!("../schema/migrations/004_ai_requests_task_fk.sql"),
131 ),
132 ]
133 }
134}
135
136register_extension!(AgentExtension);