M5: skills (SKILL.md and skill tool)

Adds harness-core::config::markdown to parse SKILL.md frontmatter/body, a skill tool in harness-tools to invoke them, and system-prompt wiring so available skills are advertised to the model. Includes the rustfmt pass over the M5 files touched by this and the preceding LSP/rmcp work.
This commit is contained in:
2026-07-10 16:20:22 +02:00
parent fe6d00ce6d
commit d6af65f494
11 changed files with 544 additions and 7 deletions
+4 -1
View File
@@ -162,7 +162,10 @@ impl DiagnosticsSource for LspPool {
let Some(client) = self.client_for(&server).await else {
return;
};
let ext = path.extension().and_then(|e| e.to_str()).unwrap_or_default();
let ext = path
.extension()
.and_then(|e| e.to_str())
.unwrap_or_default();
let language_id = language_id_for_ext(ext);
let existing_version = {
+5 -1
View File
@@ -19,7 +19,11 @@ async fn rust_analyzer_reports_a_type_error() {
.unwrap();
std::fs::create_dir_all(dir.path().join("src")).unwrap();
let main_rs = dir.path().join("src/main.rs");
std::fs::write(&main_rs, "fn main() {\n let x: i32 = \"not an integer\";\n let _ = x;\n}\n").unwrap();
std::fs::write(
&main_rs,
"fn main() {\n let x: i32 = \"not an integer\";\n let _ = x;\n}\n",
)
.unwrap();
let pool = LspPool::new(dir.path().to_path_buf(), vec![]);
pool.touch(&main_rs).await;