feat(settings): tambah mode ringkas opsional (concise_output)
Off by default, diaktifkan lewat settings.json (belum ada UI toggle — sama seperti review_enabled/session_archive_enabled/lsp_auto_provision yang juga cuma bisa diedit manual hari ini). Saat aktif, system prompt diberi instruksi menulis ringkas, dengan pengecualian eksplisit untuk konfirmasi operasi destruktif dan peringatan keamanan yang tetap harus detail penuh.
This commit is contained in:
@@ -50,6 +50,14 @@ pub struct Settings {
|
||||
/// entire hive-mind convergence forever.
|
||||
#[serde(default = "default_hive_mind_node_timeout_ms")]
|
||||
pub hive_mind_node_timeout_ms: u64,
|
||||
/// Off by default. When enabled, appends an instruction to the
|
||||
/// system prompt asking the model to write tersely — drop articles,
|
||||
/// filler words, hedging, and pleasantries; keep code, commands, and
|
||||
/// error text byte-exact — with an explicit exception for
|
||||
/// destructive-operation confirmations and security warnings, which
|
||||
/// always get full detail regardless of this setting.
|
||||
#[serde(default)]
|
||||
pub concise_output: bool,
|
||||
}
|
||||
|
||||
impl Default for Settings {
|
||||
@@ -71,6 +79,7 @@ impl Default for Settings {
|
||||
lsp_auto_provision: true,
|
||||
lsp_languages: Vec::new(),
|
||||
hive_mind_node_timeout_ms: default_hive_mind_node_timeout_ms(),
|
||||
concise_output: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -123,6 +132,38 @@ mod tests {
|
||||
assert_eq!(settings.hive_mind_node_timeout_ms, 600_000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn concise_output_defaults_to_false() {
|
||||
assert!(!Settings::default().concise_output);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn missing_concise_output_field_falls_back_to_default() {
|
||||
// Simulates loading a settings.json written before this field
|
||||
// existed — #[serde(default)] must fill it in rather than
|
||||
// failing the whole parse.
|
||||
let old_json = r#"{
|
||||
"internet_mode": "Off",
|
||||
"provider": "zen",
|
||||
"model": "deepseek-v4-flash-free",
|
||||
"api_keys": {},
|
||||
"max_tokens": null,
|
||||
"temperature": null,
|
||||
"review_enabled": true,
|
||||
"review_max_lessons_per_run": 5,
|
||||
"adaptive_review_max_skip": 3,
|
||||
"verify_command": null,
|
||||
"verify_timeout_ms": 30000,
|
||||
"workflow_max_concurrency": 5,
|
||||
"session_archive_enabled": true,
|
||||
"lsp_auto_provision": true,
|
||||
"lsp_languages": []
|
||||
}"#;
|
||||
let parsed: Settings = serde_json::from_str(old_json)
|
||||
.expect("must parse even without the new field present");
|
||||
assert!(!parsed.concise_output);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn missing_hive_mind_node_timeout_field_falls_back_to_default() {
|
||||
// Simulates loading a settings.json written before this field
|
||||
|
||||
Reference in New Issue
Block a user