feat: AI based permission checks
This commit is contained in:
@@ -14,6 +14,7 @@ use crate::settings::{GenerationPreferences, RuntimePreferences};
|
||||
#[serde(default, deny_unknown_fields)]
|
||||
pub struct Config {
|
||||
pub model: ModelChoice,
|
||||
pub default_permission_mode: PermissionMode,
|
||||
pub idle_timeout_minutes: i32,
|
||||
pub a2ui_enabled: bool,
|
||||
pub dev_brain: DevBrainConfig,
|
||||
@@ -28,6 +29,7 @@ impl Default for Config {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
model: ModelChoice::default(),
|
||||
default_permission_mode: PermissionMode::default(),
|
||||
idle_timeout_minutes: 10,
|
||||
a2ui_enabled: true,
|
||||
dev_brain: DevBrainConfig::default(),
|
||||
@@ -40,6 +42,42 @@ impl Default for Config {
|
||||
}
|
||||
}
|
||||
|
||||
pub const PERMISSION_MODES: [PermissionMode; 2] = [PermissionMode::Heuristic, PermissionMode::Ai];
|
||||
|
||||
#[derive(Clone, Copy, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
pub enum PermissionMode {
|
||||
#[default]
|
||||
Heuristic,
|
||||
Ai,
|
||||
}
|
||||
|
||||
impl PermissionMode {
|
||||
pub(crate) fn as_id(self) -> &'static str {
|
||||
match self {
|
||||
Self::Heuristic => "heuristic",
|
||||
Self::Ai => "ai",
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn from_id(id: &str) -> Option<Self> {
|
||||
match id {
|
||||
"heuristic" => Some(Self::Heuristic),
|
||||
"ai" => Some(Self::Ai),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for PermissionMode {
|
||||
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
formatter.write_str(match self {
|
||||
Self::Heuristic => "Heuristic",
|
||||
Self::Ai => "AI based",
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
pub const GIT_DIFF_ALGORITHMS: [GitDiffAlgorithm; 3] = [
|
||||
GitDiffAlgorithm::Default,
|
||||
GitDiffAlgorithm::Patience,
|
||||
@@ -288,6 +326,7 @@ mod tests {
|
||||
let path = directory.join("config.yaml");
|
||||
let config = Config {
|
||||
model: ModelChoice::Glm52,
|
||||
default_permission_mode: PermissionMode::Ai,
|
||||
a2ui_enabled: false,
|
||||
generation: GenerationPreferences {
|
||||
context_tokens: 65_536,
|
||||
@@ -316,7 +355,7 @@ mod tests {
|
||||
let text = fs::read_to_string(&path).unwrap();
|
||||
assert_eq!(
|
||||
text,
|
||||
"model: glm-5.2\na2ui_enabled: false\n\
|
||||
"model: glm-5.2\ndefault_permission_mode: ai\na2ui_enabled: false\n\
|
||||
generation:\n context_tokens: 65536\n reasoning_mode: none\n\
|
||||
runtime:\n ssd:\n enabled: true\n cache: 64GB\n\
|
||||
git:\n diff_layout: split\n diff_algorithm: patience\n context_lines: 5\n whitespace: ignore-end-of-line\n"
|
||||
|
||||
Reference in New Issue
Block a user