Files
khadhroony-bot3/kb-app-demo-desktop/frontend/demo_decode_replay.html
2026-08-01 19:44:13 +02:00

176 lines
13 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- file: kb-app-demo-desktop/frontend/demo_decode_replay.html -->
<!-- version: 8 -->
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<link rel="icon" href="imgs/logo.png">
<link rel="stylesheet" href="sass/main.scss">
<title>Khadhroony Bot3 — Décodage et matérialisation</title>
</head>
<body>
<header class="app-header">
<nav class="navbar navbar-expand-lg h-100 py-0 bg-light text-dark">
<div class="container-fluid px-4 my-0">
<div class="navbar-brand d-flex align-items-center">
<img alt="Logo" src="imgs/logo.png" class="app-logo">
<span class="ps-2 fs-4 fw-bold text-primary font-logo">Bot3 — <span class="badge text-bg-primary">Décodage contextualisé</span></span>
</div>
<div class="ms-auto 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 justify-content-center">
<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" list="decodeReplayProgramIdOptions" placeholder="Vide = tous les programmes des décodeurs sélectionnés" />
<datalist id="decodeReplayProgramIdOptions"></datalist>
</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 data-json-viewer="true">{"status":"idle","message":"Aucun résultat."}</textarea>
<h2 class="h5">Diagnostics</h2>
<textarea id="decodeReplayDiagnosticsOutput" class="form-control font-monospace" rows="18" readonly data-json-viewer="true">{"status":"idle","message":"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 id="annotationJournalTable" class="table table-sm table-hover align-middle mb-0 w-100">
<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">
<div class="row flex-grow-1 align-items-center">
<div class="col-12 text-center text-small my-1 my-md-0">&copy; 2026 SASEDEV</div>
</div>
</div>
</footer>
<script type="module" src="ts/demo_decode_replay.ts" defer></script>
</body>
</html>