feat(frontend): viewer humain fil-par-paire en lecture seule (LS7)

Frontend pur, lecture seule, consomme read_conversation_page (LS6) ; aucun changement backend.
- adapters : conversation.ts (gateway) + conversationNormalization.ts.
- features/conversations : useConversationThread, ConversationViewer, index.
- domain (types LS7), ports (port + Gateways.conversation), adapters/index, mock (+ clé inventaire).
- features/workstate : ProjectWorkStatePanel prop onOpenConversation.
- features/projects : ProjectsView swap viewer.
- tests (QA, verts) : conversationNormalization, mock/conversationGateway,
  useConversationThread, ConversationViewer, ProjectsView.ls7. tsc 0, vitest 443/443 (+36).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-22 17:30:51 +02:00
parent 40ca3e522f
commit c19e375849
17 changed files with 1552 additions and 5 deletions

View File

@ -26,6 +26,7 @@ import { TauriEmbedderGateway } from "./embedder";
import { TauriGitGateway } from "./git";
import { TauriPermissionGateway } from "./permission";
import { TauriWorkStateGateway } from "./workState";
import { TauriConversationGateway } from "./conversation";
function notImplemented(what: string): never {
const err: GatewayError = {
@ -59,6 +60,7 @@ export function createTauriGateways(): Gateways {
embedder: new TauriEmbedderGateway(),
permission: new TauriPermissionGateway(),
workState: new TauriWorkStateGateway(),
conversation: new TauriConversationGateway(),
};
}
@ -77,4 +79,5 @@ export {
TauriGitGateway,
TauriPermissionGateway,
TauriWorkStateGateway,
TauriConversationGateway,
};