feat: AI based permission checks

This commit is contained in:
Georg Bauer
2026-07-30 09:47:54 +02:00
parent c101ca1380
commit 73d7c8af27
14 changed files with 413 additions and 28 deletions

View File

@@ -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"