167 lines
13 KiB
HTML
167 lines
13 KiB
HTML
<!-- 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">
|
||
<div class="navbar-brand d-flex align-items-center" aria-label="Khadhroony Bot3"><img alt="Logo Khadhroony" src="imgs/logo.png" class="app-logo" /><span class="ps-2 fs-4 fw-bold text-primary font-logo">Décodage contextualisé</span></div>
|
||
<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 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 data-json-viewer="true">Aucun résultat.</textarea>
|
||
<h2 class="h5">Diagnostics</h2>
|
||
<textarea id="decodeReplayDiagnosticsOutput" class="form-control font-monospace" rows="18" readonly data-json-viewer="true">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">© 2026 SASEDEV</div>
|
||
</footer>
|
||
<script type="module" src="ts/demo_decode_replay.ts" defer></script>
|
||
</body>
|
||
|
||
</html>
|