This commit is contained in:
2026-07-23 16:37:12 +02:00
parent 99c345f2f2
commit 0da75c1311
2159 changed files with 230833 additions and 0 deletions

View File

@@ -0,0 +1,166 @@
<!-- file: kb_app_demo/frontend/demo_decode_replay.html -->
<!-- version: 4 -->
<!doctype html>
<html lang="fr" data-bs-theme="light">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Décodage et matérialisation</title>
<link rel="icon" href="imgs/favicon.png" />
<link rel="stylesheet" href="sass/main.scss" />
</head>
<body class="bg-body-tertiary">
<header class="app-header">
<nav class="navbar h-100 py-0 bg-light text-dark">
<div class="container-fluid px-4">
<span class="navbar-brand fw-bold">Décodage contextualisé et matérialisation</span>
<div class="d-flex align-items-center gap-2">
<span id="decodeReplayVersionBadge" class="badge text-bg-secondary">Version</span>
<span id="decodeReplayStatusBadge" class="badge text-bg-success">Prêt</span>
<button id="cancelDecodeReplayButton" class="btn btn-sm btn-outline-danger" type="button" disabled>Arrêter</button>
</div>
</div>
</nav>
</header>
<main class="app-main">
<div class="osb-scrollable pt-1 pb-4" data-simplebar>
<div class="container-fluid px-4 py-4">
<div class="row g-4">
<div class="col-12 col-xl-7">
<div class="card shadow-sm border-0 mb-4">
<div class="card-body">
<h1 class="h4 mb-3">Sélection bornée</h1>
<div class="row g-3">
<div class="col-12 col-lg-6">
<label class="form-label" for="decodeReplayProgramIdInput">Program ID exact</label>
<input id="decodeReplayProgramIdInput" class="form-control font-monospace" placeholder="Vide = tous les programmes des décodeurs sélectionnés" />
</div>
<div class="col-12 col-lg-3">
<label class="form-label" for="decodeReplayStateSelect">État instruction</label>
<select id="decodeReplayStateSelect" class="form-select">
<option value="incomplete_signatures">signatures incomplètes (pending + failed + replay_requested + unsupported)</option>
<option value="actionable">pending + failed + replay_requested</option>
<option value="pending">pending</option>
<option value="failed">failed</option>
<option value="replay_requested">replay_requested</option>
<option value="decoded">decoded</option>
<option value="ignored">ignored</option>
<option value="materialized">materialized</option>
</select>
</div>
<div class="col-6 col-lg-3">
<label class="form-label" for="decodeReplayLimitInput">Limite</label>
<input id="decodeReplayLimitInput" class="form-control" type="number" min="1" />
</div>
<div class="col-12 col-lg-6">
<label class="form-label" for="decodeReplaySignaturesTextarea">Signatures explicites, une par ligne</label>
<textarea id="decodeReplaySignaturesTextarea" class="form-control font-monospace" rows="7" placeholder="Copier depuis demo_sql_replay_candidates"></textarea>
</div>
<div class="col-12 col-lg-6">
<label class="form-label" for="decodeReplayPathsTextarea">Instruction paths exacts, un par ligne</label>
<textarea id="decodeReplayPathsTextarea" class="form-control font-monospace" rows="7" placeholder="0&#10;1/0"></textarea>
</div>
</div>
</div>
</div>
<div class="card shadow-sm border-0">
<div class="card-body">
<h2 class="h5 mb-3">Dispatch et replay</h2>
<div id="decodeReplayDecoderList" class="mb-3"></div>
<div class="row g-3 align-items-end">
<div class="col-6 col-lg-3">
<label class="form-label" for="decodeReplayConcurrencyInput">Concurrence</label>
<input id="decodeReplayConcurrencyInput" class="form-control" type="number" min="1" />
</div>
<div class="col-12 col-lg-9">
<div class="form-check form-switch">
<input id="decodeReplayAllCompatibleInput" class="form-check-input" type="checkbox" role="switch" />
<label class="form-check-label" for="decodeReplayAllCompatibleInput">Exécuter tous les décodeurs compatibles</label>
</div>
<div class="form-check form-switch">
<input id="decodeReplayForceInput" class="form-check-input" type="checkbox" role="switch" disabled />
<label class="form-check-label" for="decodeReplayForceInput">Force replay du processor/version/input</label>
</div>
<div class="form-check form-switch">
<input id="decodeReplayAllSignaturesInput" class="form-check-input" type="checkbox" role="switch" />
<label class="form-check-label" for="decodeReplayAllSignaturesInput">Toutes les signatures correspondant aux filtres, dans la limite indiquée</label>
</div>
<div id="decodeReplayForceScopeHelp" class="form-text mb-2">Sans signatures explicites, cocher Toutes les signatures pour autoriser un force replay borné. Le filtre détat est alors ignoré, mais les programmes, paths et la limite restent appliqués.</div>
<div class="form-check form-switch">
<input id="decodeReplayMaterializeInput" class="form-check-input" type="checkbox" role="switch" disabled />
<label class="form-check-label" for="decodeReplayMaterializeInput">Appeler les matérialiseurs disponibles après persistance du décodage</label>
</div>
<div id="decodeReplayMaterializeHelp" class="form-text">Chargement de la disponibilité des matérialiseurs…</div>
</div>
<div class="col-12">
<button id="startDecodeReplayButton" class="btn btn-primary" type="button">Lancer le replay de décodage</button>
</div>
</div>
</div>
</div>
</div>
<div class="col-12 col-xl-5">
<div class="card shadow-sm border-0 mb-4">
<div class="card-body">
<div class="d-flex flex-wrap gap-2 mb-3">
<button id="openReplayCandidatesFromDecodeButton" class="btn btn-sm btn-outline-primary" type="button">Candidats replay</button>
<button id="openCoreDiagnosticsFromDecodeButton" class="btn btn-sm btn-outline-secondary" type="button">Diagnostic core</button>
<button id="loadDecodeDiagnosticsButton" class="btn btn-sm btn-outline-secondary" type="button">Decode / ledger / couverture</button>
</div>
<h2 class="h5">Journal</h2>
<textarea id="decodeReplayLogOutput" class="form-control font-monospace mb-3" rows="14" readonly>Aucune campagne exécutée.</textarea>
<h2 class="h5">Résumé</h2>
<textarea id="decodeReplaySummaryOutput" class="form-control font-monospace mb-3" rows="15" readonly>Aucun résultat.</textarea>
<h2 class="h5">Diagnostics</h2>
<textarea id="decodeReplayDiagnosticsOutput" class="form-control font-monospace" rows="18" readonly>Diagnostics non chargés.</textarea>
</div>
</div>
</div>
<div class="col-12">
<div class="card shadow-sm border-0">
<div class="card-body">
<div class="d-flex flex-wrap align-items-end gap-3 mb-3">
<div class="flex-grow-1">
<label class="form-label" for="annotationSignatureInput">Journal des annotations — signature contient</label>
<input id="annotationSignatureInput" class="form-control font-monospace" placeholder="Filtre facultatif" />
</div>
<div>
<label class="form-label" for="annotationLimitInput">Limite</label>
<input id="annotationLimitInput" class="form-control" type="number" min="1" max="500" value="100" />
</div>
<button id="loadAnnotationsButton" class="btn btn-outline-primary" type="button">Charger les annotations</button>
</div>
<p id="annotationJournalStatus" class="text-body-secondary mb-3">Annotations non chargées.</p>
<div class="table-responsive">
<table class="table table-sm table-hover align-middle mb-0">
<thead>
<tr>
<th>Slot</th>
<th>Signature</th>
<th>Path</th>
<th>Génération</th>
<th>Texte</th>
<th>Octets</th>
<th>Signataires vérifiés</th>
<th>SHA-256 / provenance</th>
</tr>
</thead>
<tbody id="annotationJournalBody"></tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
<footer class="app-footer bg-dark text-light">
<div class="container h-100 d-flex align-items-center justify-content-center">&copy; 2026 SASEDEV</div>
</footer>
<script type="module" src="ts/demo_decode_replay.ts" defer></script>
</body>
</html>