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

@ -229,6 +229,9 @@ export class HttpModelServerGateway implements ModelServerGateway {
async deleteModelServer(serverId: string): Promise<void> {
await this.http.invoke("delete_model_server", { serverId });
}
async deleteModelArtifact(serverId: string): Promise<void> {
await this.http.invoke("delete_model_artifact", { serverId });
}
previewModelServerCommand(config: LocalModelServerConfig): Promise<ModelServerCommandPreview> {
return this.http.invoke<ModelServerCommandPreview>("preview_model_server_command", { config });
}

View File

@ -1525,6 +1525,36 @@ export class MockModelServerGateway implements ModelServerGateway {
this.servers = this.servers.filter((s) => s.id !== serverId);
}
async deleteModelArtifact(serverId: string): Promise<void> {
const i = this.servers.findIndex((s) => s.id === serverId);
if (i < 0) {
const err: GatewayError = {
code: "not_configured",
message: "model server is not configured",
};
throw err;
}
const server = this.servers[i];
if (server.modelSource?.type !== "huggingFace") {
const err: GatewayError = {
code: "invalid",
message: "only managed Hugging Face model artifacts can be deleted",
};
throw err;
}
if (server.artifact?.state === "downloading" || this.inUse.has(serverId)) {
const err: GatewayError = {
code: "model_server_in_use",
message: "model artifact cannot be deleted while in use",
};
throw err;
}
this.servers[i] = {
...server,
artifact: { state: "missing" },
};
}
async previewModelServerCommand(
config: LocalModelServerConfig,
): Promise<ModelServerCommandPreview> {

View File

@ -32,6 +32,10 @@ export class TauriModelServerGateway implements ModelServerGateway {
await invoke("delete_model_server", { serverId });
}
async deleteModelArtifact(serverId: string): Promise<void> {
await invoke("delete_model_artifact", { serverId });
}
previewModelServerCommand(
config: LocalModelServerConfig,
): Promise<ModelServerCommandPreview> {