fix: livrable tickets #70 #100 #102 — UX surface scoping

- #70: implémentation suppression modèles locaux téléchargés
- #100: correction scroll OpenCode
- #102: correction fit TUI après switch/layout
- memory note scoping UX
This commit is contained in:
2026-07-26 19:42:06 +02:00
parent 4321d048ac
commit 02603441c1
31 changed files with 1589 additions and 152 deletions

View File

@ -8,8 +8,8 @@ use domain::model_server::{
LocalModelServerKind, ModelPath, ModelServerEndpoint, ModelSource, StopPolicy,
};
use domain::ports::{
FileSystem, ModelArtifactCancel, ModelArtifactDownloader, ModelServerRegistry,
ModelServerRuntime, RemotePath,
FileSystem, ModelArtifactCancel, ModelArtifactDownloader, ModelArtifactState,
ModelServerRegistry, ModelServerRuntime, RemotePath,
};
use domain::LocalModelServerId;
use infrastructure::{
@ -227,3 +227,41 @@ async fn hf_model_artifact_downloader_resolves_deterministic_local_cache_hit_wit
std::path::Path::new("Qwen--Qwen3-Coder").join("Q4_K_M.gguf")
);
}
#[tokio::test]
async fn hf_model_artifact_downloader_reports_downloaded_cache_state() {
let tmp = TempDir::new();
let downloader = HfModelArtifactDownloader::new(tmp.path());
let repo = HfModelRef::new("Qwen/Qwen3-Coder:Q4_K_M").unwrap();
let path = downloader.cache_path_for(&repo);
std::fs::create_dir_all(path.parent().unwrap()).unwrap();
std::fs::write(&path, b"gguf").unwrap();
let state = downloader.hf_model_state(&repo).await.unwrap();
assert_eq!(
state,
ModelArtifactState::Downloaded {
path: ModelPath::new(path.to_string_lossy()).unwrap(),
size_bytes: Some(4),
}
);
}
#[tokio::test]
async fn hf_model_artifact_downloader_deletes_merged_cache_without_config_side_effects() {
let tmp = TempDir::new();
let downloader = HfModelArtifactDownloader::new(tmp.path());
let repo = HfModelRef::new("Qwen/Qwen3-Coder:Q4_K_M").unwrap();
let path = downloader.cache_path_for(&repo);
std::fs::create_dir_all(path.parent().unwrap()).unwrap();
std::fs::write(&path, b"gguf").unwrap();
downloader.delete_hf_model(&repo).await.unwrap();
assert!(!path.exists());
assert_eq!(
downloader.hf_model_state(&repo).await.unwrap(),
ModelArtifactState::Missing
);
}