In Produktion lag eine Sprachnachricht unbearbeitet in der Warteschlange des
OPs-Agenten: aufgenommen wurde ueber seine Figur, abgeholt wird aber nur von
der Maschine, auf der whisper.cpp laeuft. Die Agent-Zuweisung hat eine
Zustaendigkeit vorgetaeuscht, die es nicht gibt - welches Ticket in welchem
Repo entsteht, entscheidet der abholende Bot anhand des Transkripts.
- Migration 007: voice_recordings ohne agent_id. Bestehende Aufnahmen behalten
ihren Status, die haengengebliebene wandert damit in die globale Warteschlange.
- Migration 008: neue Agenten-Rolle "voice" fuer den Voice-Bot.
- Endpunkte ohne Agent im Pfad: POST/GET /api/v1/recordings,
GET /api/v1/recordings/{id}/audio, PATCH /api/v1/recordings/{id} - und ohne
Ownership-Check, an dem die Abholung mit fremdem Key bisher scheiterte.
- GET /api/v1/agents traegt pending_recordings jetzt neben der Liste statt an
jedem Agenten.
- Frontend: nur noch die Figur des Voice-Bots verlinkt auf record.html (ohne
?agent=), Zaehler und Mikrofon-Deko sitzen an seinem Schreibtisch. Die
Aufnahmeseite nennt den abholenden Bot und bittet darum, das Projekt am
Anfang der Aufnahme zu nennen.
Die Bot-Seite (bin/voice-recording-agent.sh) folgt in fds2610/Agent.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
39 lines
1.7 KiB
HTML
39 lines
1.7 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="de">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<link rel="icon" type="image/png" href="/favicon.png">
|
||
<title>Sprachaufnahme</title>
|
||
<link rel="stylesheet" href="css/record.css">
|
||
</head>
|
||
<body>
|
||
<header class="record-header">
|
||
<h1>Sprachaufnahme</h1>
|
||
<p>Wird abgeholt von: <strong id="record-target">…</strong></p>
|
||
<p class="record-hint">Nenne das Projekt am Anfang der Aufnahme – daraus entsteht ein Ticket im passenden Repo.</p>
|
||
</header>
|
||
|
||
<main class="record-main">
|
||
<p id="status" class="record-status" role="status"></p>
|
||
|
||
<div class="record-controls">
|
||
<button id="start-button" type="button" class="record-button record-button-start">Aufnahme starten</button>
|
||
<button id="stop-button" type="button" class="record-button record-button-stop" hidden>Aufnahme beenden</button>
|
||
</div>
|
||
|
||
<audio id="audio-preview" class="record-preview" controls hidden></audio>
|
||
|
||
<div class="record-controls">
|
||
<button id="upload-button" type="button" class="record-button record-button-upload" hidden>Hochladen</button>
|
||
<button id="discard-button" type="button" class="record-button record-button-discard" hidden>Verwerfen</button>
|
||
</div>
|
||
</main>
|
||
|
||
<!-- Laufzeit-Konfiguration (API-Basis-URL): wird vom Webserver aus MONITOR_API_BASE
|
||
erzeugt, siehe docker/nginx/default.conf.template - dieselbe Datei wie office.html
|
||
nutzt, damit record.js ueber office-api.js dieselbe API erreicht. -->
|
||
<script src="/config.js"></script>
|
||
<script type="module" src="js/record.js"></script>
|
||
</body>
|
||
</html>
|