systemprompt_models/mcp/
deployment.rs1use crate::ai::ToolModelConfig;
2use crate::auth::{JwtAudience, Permission};
3use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6#[derive(Debug, Clone, Serialize, Deserialize, Default)]
7pub struct ToolUiConfig {
8 #[serde(default = "default_resource_uri_template")]
9 pub resource_uri_template: String,
10 #[serde(default = "default_visibility")]
11 pub visibility: Vec<String>,
12}
13
14fn default_resource_uri_template() -> String {
15 "ui://systemprompt/{artifact_id}".to_string()
16}
17
18fn default_visibility() -> Vec<String> {
19 vec!["model".to_string()]
20}
21
22impl ToolUiConfig {
23 pub fn to_meta_json(&self) -> serde_json::Value {
24 serde_json::json!({
25 "ui": {
26 "resourceUri": self.resource_uri_template,
27 "visibility": self.visibility
28 }
29 })
30 }
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize, Default)]
34pub struct ToolMetadata {
35 #[serde(default)]
36 pub terminal_on_success: bool,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 pub model_config: Option<ToolModelConfig>,
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub ui: Option<ToolUiConfig>,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct DeploymentConfig {
45 pub deployments: HashMap<String, Deployment>,
46 pub settings: Settings,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize)]
50pub struct Deployment {
51 pub binary: String,
52 pub package: Option<String>,
53 pub port: u16,
54 pub endpoint: String,
55 pub enabled: bool,
56 pub display_in_web: bool,
57 #[serde(default)]
58 pub dev_only: bool,
59 #[serde(default)]
60 pub schemas: Vec<SchemaDefinition>,
61 pub oauth: OAuthRequirement,
62 #[serde(default)]
63 pub tools: HashMap<String, ToolMetadata>,
64 #[serde(skip_serializing_if = "Option::is_none")]
65 pub model_config: Option<ToolModelConfig>,
66 #[serde(default)]
67 pub env_vars: Vec<String>,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize)]
71pub struct SchemaDefinition {
72 pub file: String,
73 pub table: String,
74 pub required_columns: Vec<String>,
75}
76
77#[derive(Debug, Clone, Serialize, Deserialize)]
78pub struct OAuthRequirement {
79 pub required: bool,
80 pub scopes: Vec<Permission>,
81 pub audience: JwtAudience,
82 pub client_id: Option<String>,
83}
84
85#[derive(Debug, Clone, Serialize, Deserialize)]
86pub struct Settings {
87 pub auto_build: bool,
88 pub build_timeout: u64,
89 pub health_check_timeout: u64,
90 #[serde(default = "default_base_port")]
91 pub base_port: u16,
92 #[serde(default = "default_working_dir")]
93 pub working_dir: String,
94}
95
96const fn default_base_port() -> u16 {
97 5000
98}
99
100fn default_working_dir() -> String {
101 "/app".to_string()
102}