use serde::{Deserialize, Serialize};
pub use crate::credentials::Source as KeySource;
pub use crate::team::TeamSettings;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Settings {
pub config_path: String,
pub index_dir: Option<String>,
pub index_effective: String,
pub author_name: Option<String>,
pub author_effective: Option<String>,
pub record_names: bool,
pub llm_model: String,
pub defaults: Defaults,
pub llm_key: KeySource,
pub cache_ttl_secs: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Defaults {
pub llm_model: String,
pub llm_base_url: String,
pub embed_model: String,
pub llm_concurrency: usize,
pub format: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct SettingsChange {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub index_dir: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub author_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub record_names: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cache_ttl_secs: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IndexDirRequest {
pub index_dir: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Team {
pub settings: TeamSettings,
pub key_source: KeySource,
pub version: Option<u64>,
pub changed_by: Option<String>,
pub changed_at: Option<String>,
pub defaults: Defaults,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TeamSave {
pub settings: TeamSettings,
pub version: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TeamsSave {
pub teams: Vec<crate::team::TeamDef>,
pub version: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RepoTeams {
pub repo: String,
pub teams: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MyTeams {
pub teams: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeyRequest {
pub key: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct JoinRequest {
pub index: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateTeam {
pub name: String,
pub index: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Prompts {
pub tasks: Vec<PromptTask>,
pub version: Option<u64>,
pub changed_by: Option<String>,
pub changed_at: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PromptTask {
pub task: crate::prompts::Task,
pub builtin: String,
pub format: String,
pub active: Option<u32>,
pub builtin_changed: Option<u32>,
pub sections: Vec<GuideSectionText>,
pub versions: Vec<crate::prompts::Version>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GuideSectionText {
pub title: String,
pub guidance: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PromptChange {
pub version: Option<u64>,
#[serde(flatten)]
pub action: PromptAction,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "action", rename_all = "lowercase")]
pub enum PromptAction {
Save {
task: crate::prompts::Task,
text: String,
#[serde(default)]
sections: std::collections::BTreeMap<String, String>,
#[serde(default)]
note: Option<String>,
},
Activate {
task: crate::prompts::Task,
n: u32,
},
Deactivate {
task: crate::prompts::Task,
},
Delete {
task: crate::prompts::Task,
n: u32,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PromptTry {
pub task: crate::prompts::Task,
pub text: String,
#[serde(default)]
pub sections: std::collections::BTreeMap<String, String>,
#[serde(default)]
pub sample: Option<String>,
#[serde(default)]
pub section: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PromptTried {
pub sample: String,
pub output: String,
pub current: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Logging {
pub access: bool,
pub tool: bool,
}