P3-C: dashboard worktree-first + acceptance P3 (MVP complet)
Vue racine consolidée : repos → worktrees avec état git ET état de session corrélé. Complète le MVP (P2 découverte/reprise + P3-A worktrees + P3-B états fins). - web/lib/ws-client: abonnement multi-topics (sessions + worktrees), subscribeWorktrees. - web/stores/worktrees: repos + worktrees, CRUD, temps réel (repo_update/worktree_*). - web/views/DashboardView (route racine /), components RepoSection + WorktreeCard ; SessionStateBadge réutilisé pour l'état des sessions corrélées. - router: / = dashboard, /sessions = liste à plat (sessions hors worktree), nav croisée. - i18n EN/FR (dashboard/repos/worktrees). - fix: @xterm/headless est CommonJS → chargé via createRequire (l'import nommé ESM échouait sous Node natif, masqué par esbuild en test) ; détecté par l'acceptation. - scripts/acceptance-p3.mjs: repo git tmp → enregistrement, worktree + hook, broadcast WS worktree_update, corrélation session bash, suppression (409 sans force, 200 avec). Vérifs : typecheck, 159 tests, build (vue-tsc), acceptations P1/P2/P3 ALL GREEN.
This commit is contained in:
@@ -1,10 +1,16 @@
|
||||
// Reconstruction d'écran via @xterm/headless : terminal headless PERSISTANT par session, alimenté
|
||||
// incrémentalement par le flux PTY. Remplace le strip ANSI naïf (qui « mange les espaces » et casse
|
||||
// la détection des dialogues — verdict S1/S3). Aucune dépendance DOM (usage Node).
|
||||
import { Terminal } from '@xterm/headless';
|
||||
import { createRequire } from 'node:module';
|
||||
import type { Terminal as XtermTerminal } from '@xterm/headless';
|
||||
|
||||
// @xterm/headless est publié en CommonJS : sous Node ESM natif l'import nommé échoue
|
||||
// (cjs-module-lexer ne détecte pas l'export). On charge via require, typé par l'import type.
|
||||
const require = createRequire(import.meta.url);
|
||||
const { Terminal } = require('@xterm/headless') as { Terminal: typeof XtermTerminal };
|
||||
|
||||
export class ScreenReader {
|
||||
private readonly term: Terminal;
|
||||
private readonly term: XtermTerminal;
|
||||
|
||||
constructor(cols = 120, rows = 40) {
|
||||
this.term = new Terminal({ cols, rows, scrollback: 0, allowProposedApi: true });
|
||||
|
||||
Reference in New Issue
Block a user