diff --git a/README.md b/README.md index cf024c9..955c7a7 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ - + # PowerOn PORTA -- Dokumentation @@ -59,6 +59,7 @@ b-reference/ │ ├── workflow.md Workflow-Engine, Methoden, Aktionen │ ├── automation.md Automation v1 + v2 │ ├── billing.md Billing, Subscriptions +│ ├── voice-google.md Google STT/TTS (VoiceObjects, Streaming-WS, Feature-Mapping) │ └── features/ trustee.md, commcoach.md, chatbot.md, ... ├── frontend-nyla/ Frontend-Komponente │ └── architecture.md Seiten, Komponenten, Hooks, Routing diff --git a/TOPICS.md b/TOPICS.md index f34941b..a1b5f03 100644 --- a/TOPICS.md +++ b/TOPICS.md @@ -1,5 +1,5 @@  - + # Themen-Index für AI-Kontext @@ -24,10 +24,11 @@ Lade immer zuerst diese Datei. Dann gezielt die passende(n) Referenz-Datei(en). | Workflow-Engine | b-reference/gateway/workflow.md | Methoden, Aktionen, WorkflowManager | | Automation | b-reference/gateway/automation.md | Graphical Editor, Scheduler, System-Automatisierung (`/automations`, `/api/system/workflow-runs/*`) | | Billing & Subscriptions | b-reference/gateway/billing.md | Abrechnung, Prepaid, State Machine | +| Google Voice (STT/TTS) | b-reference/gateway/voice-google.md | VoiceObjects, ConnectorGoogleSpeech, `/voice-google/stt/*`, CommCoach vs Teamsbot vs Agent | | Frontend Nyla | b-reference/frontend-nyla/architecture.md | UI-Seiten, Komponenten, Hooks, Routing | | FormGenerator (Table, Form, Tree, Report) | b-reference/frontend-nyla/formgenerator.md | Generische UI-Komponenten, Provider-Pattern, API-Anbindung | | Private LLM | b-reference/private-llm/architecture.md | Internes LLM, Neutralisierung | -| Teams Bot | b-reference/teams-bot/architecture.md | Meeting-Bot, WebSocket, Director Prompts (Hybrid Agent-Routing) | +| Teams Bot | b-reference/teams-bot/architecture.md | Meeting-Bot, Browser-Bot WebSocket, Director Prompts (Hybrid Agent-Routing), MeetingModule + 5-Tab-UI, Dashboard-SSE, Live-Session-SSE + MFA | ## Cross-Cutting (repo-übergreifend) diff --git a/b-reference/frontend-nyla/architecture.md b/b-reference/frontend-nyla/architecture.md index 3575ab3..583c96e 100644 --- a/b-reference/frontend-nyla/architecture.md +++ b/b-reference/frontend-nyla/architecture.md @@ -1,6 +1,6 @@ - - + + # Frontend Nyla -- Architektur @@ -16,7 +16,7 @@ Technologie-Stack (Stand UI-Doku): React 19.x, Vite 5.x, TypeScript 5.8.x, React |--------|--------| | `pages/` | Seiten: `admin/`, `basedata/`, `billing/`, `settings/`, `views/` (workspace, commcoach, chatbot, trustee, graphicalEditor, realestate, neutralization, teamsbot) | | `components/` | Wiederverwendbar: FormGenerator (Table, Form, Tree, List, Report), Navigation, UnifiedDataBar, FlowEditor (Graphical Editor), OnboardingAssistant | -| `hooks/` | useApiRequest (useApi.ts), useFiles, useNavigation, useConfirm, usePrompt, useResizablePanels, etc. | +| `hooks/` | useApiRequest (useApi.ts), useFiles, useNavigation, useConfirm, usePrompt, useResizablePanels, `useSpeechAudioCapture` (`useVoiceStream`: Mic + WebSocket `/voice-google/stt/stream`, optionale STT-`open`-Parameter), etc. | | `contexts/` | FileContext, PekContext, ToastContext, WorkflowSelectionContext | | `api/` | API-Client (`api.ts`) und Feature-spezifische API-Module | | `core/` | PageManager | @@ -43,6 +43,7 @@ Ergänzend typische Root-Dateien und Bereiche im Repo: `main.tsx`, `App.tsx`, `a | `TemplatePicker` | Modal zur Auswahl von Workflow-Vorlagen beim Erstellen neuer Workflows | | `WorkspacePage` | AI-Workspace mit Chat, UDB, Agent-Streaming | | `TrusteeDataTablesView` | Konsolidierte Daten-Tabellen-Seite (Treuhand): 13 Tabs (Stammdaten, Lokale Daten, Konfiguration, Buchhaltungs-Daten) ueber generischen `TrusteeDataTab`-Wrapper, Lazy-Mount pro Tab, URL-State `?tab=`, read-only fuer Sync-Tabellen | +| Teams Bot Views (`pages/views/teamsbot/`) | Dashboard (KPI + SSE), Assistent (Wizard), Module (CRUD + `?moduleId`), Live-Session (SSE + MFA), Settings — API `api/teamsbotApi.ts`; Architektur [teams-bot/architecture.md](../teams-bot/architecture.md) | ## Routing @@ -50,6 +51,7 @@ Ergänzend typische Root-Dateien und Bereiche im Repo: `main.tsx`, `App.tsx`, `a - **Geschützte Bereiche:** Route-Guards (z. B. `ProtectedRoute`) prüfen Authentifizierung; Redirect bei fehlender Session. - **Haupt-App:** Nach Login **`MainLayout.tsx`** mit **`MandateNavigation`** (Sidebar) und `` (React Router). - **Seiten-Mapping:** `pageRegistry.tsx` definiert `PAGE_REGISTRY` und `FEATURE_REGISTRY`; Seiten werden lazy geladen. `core/PageManager/` enthält ergänzende Infrastruktur (State Preservation, Lifecycle-Hooks). +- **Teams Bot:** `pages/views/teamsbot/` — fünf Tabs (Dashboard, Assistent, Module, Live-Session, Einstellungen). Dashboard: `teamsbotApi.createDashboardStream` (SSE). Live-Session: `createSessionStream`. Module-Liste: URL `?moduleId=` klappt ein Modul auf. Detail: [teams-bot/architecture.md](../teams-bot/architecture.md). - **i18n:** DB-backed via `LanguageContext` (`t()`-Hook). Sprachsets werden dynamisch via public API geladen (`GET /api/i18n/sets/{code}`). Key-Konvention: **Deutscher Klartext = Key**. Jeder neue/geaenderte UI-Text MUSS mit `t('Deutscher Klartext')` getaggt werden. **`t()` darf NUR String-Literale enthalten** — `t(variable)` ist verboten. Werte vom Backend (Labels, Descriptions) sind bereits uebersetzt und werden direkt gerendert. Variable Interpolation: `t('Text {var}', {var: 'Wert'})`. Fallback: Ziel-Set → `de`-Set → `[key]` (eckige Klammern machen fehlende Uebersetzungen sichtbar). Keine statischen Locale-Files. Fuer statische Frontend-Maps (z.B. Wochentage, Monatsnamen, Status-Labels) wird `t()` per `switch`/Funktion mit Literalen aufgerufen, nicht ueber Map-Lookup. - **TextMultilingual:** Felder vom Typ `TextMultilingual` rendern dynamisch Eingabefelder fuer alle verfuegbaren Sprachen (aus `availableLanguages`). `xx` ist das Pflichtfeld (Quelltext). Keine hardcodierten Sprach-Codes. Sprachcodes folgen ISO 639-1 (en, de, fr, it, …). - **Theme:** global über Context; API-Requests mit Auth-Header (Interceptor in zentralem API-Client). @@ -68,6 +70,7 @@ Ergänzend typische Root-Dateien und Bereiche im Repo: `main.tsx`, `App.tsx`, `a | `main.tsx` | Application Entry Point | | `App.tsx` | Root-Komponente, Router-Setup, Provider | | `api.ts` (Root) | Axios-Instanz, Base URL, Token-Interceptor, 401-Handling | +| `hooks/useSpeechAudioCapture.ts` | `useVoiceStream`: STT-Streaming; `start(language, sttOpenOptions?)`; CommCoach setzt `model`/`lightweight`/`singleUtterance`, Workspace nutzt Defaults | | `layouts/MainLayout.tsx` | Haupt-Shell mit MandateNavigation + Outlet | | `config/pageRegistry.tsx` | PAGE_REGISTRY, FEATURE_REGISTRY, Lazy Imports | | `core/PageManager/` | State Preservation, Lifecycle, Caching | diff --git a/b-reference/gateway/ai-agent.md b/b-reference/gateway/ai-agent.md index 76bfe89..633ed82 100644 --- a/b-reference/gateway/ai-agent.md +++ b/b-reference/gateway/ai-agent.md @@ -1,6 +1,6 @@ - - + + # AI Agent & Knowledge Store @@ -143,7 +143,7 @@ Zusätzlich zu den unten genannten **Kern-Tools** existieren **dynamische Tools* | `readUrl` | Inhalt einer bekannten URL laden | | `translateText` | Übersetzung (Voice/Translation-Pipeline) | | `textToSpeech` | TTS | -| `speechToText` | Transkription Audio-Datei | +| `speechToText` | Transkription Audio-Datei (Gateway: `VoiceObjects.speechToText`; optionale Connector-Parameter `model`/`lightweight`/`audioFormat` — Agent-Tool nutzt Defaults) | | `detectLanguage` | Spracherkennung für Text | **Externe Datenquellen / Mail** diff --git a/b-reference/gateway/architecture.md b/b-reference/gateway/architecture.md index 06b8707..6132c85 100644 --- a/b-reference/gateway/architecture.md +++ b/b-reference/gateway/architecture.md @@ -1,6 +1,6 @@ - - + + # Gateway -- Architektur @@ -99,6 +99,13 @@ Weitere Interface-Dateien im Ordner (z. B. Voice, Tickets, Messaging, Bootstrap) | `gateway/modules/workflows/automation2/executionEngine.py` | Graph-Execution-Engine: topoSort, Transit-Routing, `_normalizeToSchema` nach Execute, `flow.merge`-Wait, Resume-Schema-Validierung | | `gateway/modules/workflows/scheduler/mainScheduler.py` | Konsolidierter Workflow-Scheduler | | `gateway/modules/interfaces/interfaceBootstrap.py` | System-Bootstrap (Templates, Billing, Stripe) | +| `gateway/modules/interfaces/interfaceVoiceObjects.py` | Fassade Google STT/TTS, Billing-Callback Streaming | +| `gateway/modules/connectors/connectorVoiceGoogle.py` | Google Speech v1 + Translation + TTS-Client | +| `gateway/modules/routes/routeVoiceGoogle.py` | `/voice-google/*` inkl. STT-Streaming-WebSocket | + +## Google Voice (STT / TTS) + +Siehe Kanon-Seite **[voice-google.md](voice-google.md)** (Batch- vs Streaming-Pfad, WS-Protokoll `open`/`end_of_single_utterance`, Parameter `model` / `lightweight` / `audioFormat`, Zuordnung CommCoach / Teamsbot / Workspace / Agent-Tools). ## i18n (Mehrsprachigkeit) diff --git a/b-reference/gateway/voice-google.md b/b-reference/gateway/voice-google.md new file mode 100644 index 0000000..645ad4f --- /dev/null +++ b/b-reference/gateway/voice-google.md @@ -0,0 +1,44 @@ + + + + +# Google Voice (STT / TTS) + +Zentrale Sprach-Pipeline im Gateway: **Google Cloud Speech-to-Text (v1)** und **Text-to-Speech** über die Fassade `VoiceObjects` (`interfaceVoiceObjects.py`) und den Connector `ConnectorGoogleSpeech` (`connectorVoiceGoogle.py`). Kein direkter Feature-Code soll den Connector umgehen; Billing-Hooks hängen an der Interface-Schicht (u. a. Streaming-STT bei finalen Segmenten). + +## Batch-Erkennung (`speechToText`) + +- **API:** `SpeechClient.recognize` (ein Request pro Audioclip). +- **Parameter (optional, abwaertskompatibel):** + - **`model`:** z. B. `latest_long` (Default), `latest_short`. + - **`lightweight`:** `True` schaltet u. a. ab: Word-Timestamps, Word-Confidence, `max_alternatives>1`, `use_enhanced`. Ziel: geringere Latenz/Kosten bei Kurzäusserungen. + - **`audioFormat`:** z. B. `webm_opus`, `linear16`, `mp3`, `flac`, `wav` — wenn gesetzt, entfällt `validateAudioFormat()` (Fast-Path); fehlende Sample-Rate wird formattypisch defaulted (z. B. `webm_opus` → 48 kHz). +- **Fallbacks:** Bei leeren Ergebnissen (wenn nicht `skipFallbacks`) weiterhin Encoding-/Modell-Matrix; erstes Fallback-Modell ist der vom Caller gewählte `model`-Wert. + +## Streaming-Erkennung + +- **Route:** `POST /voice-google/stt/token` (kurzlebiges `wsToken`), WebSocket **`/voice-google/stt/stream?wsToken=...`** (`routeVoiceGoogle.py`). +- **Client-Protokoll (JSON):** + - `open`: `language`, optional `model`, `lightweight`, `singleUtterance` (Booleans). + - `audio`: `chunk` (Base64), typisch WebM/Opus-Fragmente vom `MediaRecorder`. + - `close` / `ping` / `pong` unveraendert. +- **Server-Antworten:** `interim`, `final`, optional **`end_of_single_utterance`** (mit `audioDurationSec`) wenn Google Single-Utterance-Modus endet — Client sendet daraufhin erneut `open` mit denselben STT-Optionen (Recorder laeuft weiter). +- **Connector:** `streamingRecognize` — `StreamingRecognitionConfig.single_utterance` steuerbar; **Abrechnungs-Dauer** fuer Finals bevorzugt aus `result_end_time` der Streaming-Results (Fallback: Byte-Heuristik). + +## Feature-Zuordnung (Ist-Stand) + +| Bereich | STT-Pfad | Konfiguration (Kurz) | +|---------|----------|----------------------| +| **CommCoach Live** | Streaming WS → Text → Coach | Frontend (`useVoiceStream`): `latest_short`, `lightweight`, `singleUtterance: true` (`useVoiceController`). | +| **CommCoach Batch** | `processAudioMessage` → `speechToText` | `latest_short`, `lightweight: true` (Format weiterhin Auto-Detect wenn kein `audioFormat`). | +| **Workspace** | Gleicher generischer WS | `start(language)` ohne Extra-Optionen → Defaults wie frueher (`latest_long`, kein Single-Utterance). | +| **Teamsbot** | Pro Audio-Chunk `speechToText` (Batch) | Gemeinsamer Connector; **`audioFormat: linear16`** (bekannte PCM-Chunks); Modell/Default wie bisher `latest_long` + volle Features (`lightweight: false`). | +| **Agent-Tool** `_mediaTools.speechToText` | Batch | Keine zusaetzlichen Argumente → Default-Verhalten. | + +## TTS + +Unveraendert ueber `textToSpeech` / Gemini-TTS-Pfad im Connector; diese Seite fokussiert STT. + +## Weiterfuehrung + +- Evaluation **Speech-to-Text v2 / Chirp:** [`wiki/c-work/1-plan/stt-chirp-v2-evaluation.md`](../../c-work/1-plan/stt-chirp-v2-evaluation.md). diff --git a/b-reference/teams-bot/architecture.md b/b-reference/teams-bot/architecture.md index 82ede8f..05b7631 100644 --- a/b-reference/teams-bot/architecture.md +++ b/b-reference/teams-bot/architecture.md @@ -1,6 +1,6 @@ - - + + # Teams Meeting Bot -- Architektur @@ -22,7 +22,21 @@ AI-gesteuerter Meeting-Bot für Microsoft Teams. Tritt Meetings als regulärer T |------------|----------|-------| | Gateway ↔ Bot | WebSocket | Echtzeit: Transkripte, Chat, Audio, Status | | Gateway → Bot | HTTP | Session-Steuerung (join, leave, status) | -| Frontend ← Gateway | SSE | Live-Transkript-Stream für UI | +| Frontend ← Gateway | SSE | Live-Transkript-Stream für UI; Dashboard-Push (`dashboard/stream`) | + +## Nyla UI (MeetingModule-IA) + +Die Feature-Oberfläche ist in **fünf Tabs** strukturiert (siehe auch `wiki/c-work/2-build/2026-04-teamsbot-greenfield-ia-and-live-update.md`): + +| Tab | Route-Segment | Zweck | +|-----|----------------|--------| +| Dashboard | `dashboard` | KPIs, Modul-Aktivität, Quick-Actions; Daten per **SSE** `GET /api/teamsbot/{instanceId}/dashboard/stream` (Snapshots `sessions` + `modules`, Intervall 3 s bei aktiver eigener Sitzung, sonst 20 s) | +| Assistent | `assistant` | Wizard: Modul wählen/anlegen, Meeting-Link, Join-Modus (Systembot / Gast / Mein Account), optional Sitzungskontext → startet Session und navigiert zur Live-Ansicht | +| Module | `modules` | CRUD `TeamsbotMeetingModule`, aufklappbare Session-Liste pro Modul; **Deep-Link** `?moduleId=` klappt das Modul auf und scrollt es ins Sichtfeld | +| Live-Session | `sessions` | Regie-Panel, UDB, Transkript, SSE `sessions/{id}/stream`; **MFA** (`mfaChallenge` / `mfaResolved`) wird hier über dieselbe SSE-Verbindung abgewickelt | +| Einstellungen | `settings` | Bot-Stimme, User-Settings, System-Bots (SysAdmin) | + +**Datenmodell:** `TeamsbotMeetingModule` gruppiert Reihen; `TeamsbotSession.moduleId` verknüpft optional (Adhoc ohne Modul). Standard-Meeting-Link und Standard-Bot-Name pro Modul für Prefill im Assistenten. ## Kernfähigkeiten @@ -50,12 +64,15 @@ Der Gateway (Feature `teamsbot`) verwaltet Sessions und stellt die AI-Pipeline b - WebSocket-Verbindung pro Session - AI-Analyse der Transkript-Segmente via `serviceAi` - TTS-Generierung für Voice-Responses +- **Dashboard-SSE:** `GET /api/teamsbot/{instanceId}/dashboard/stream` — wiederholte JSON-Events `{ "type": "dashboardState", "sessions": [...], "modules": [...] }` mit gleicher Sichtbarkeit wie `GET /sessions` (eigene Sessions, ausser Platform-Admin sieht alle). ## Schlüssel-Dateien | Datei / Bereich | Rolle | |-----------------|-------| -| `gateway/modules/features/teamsbot/` | Gateway-seitiges Feature-Modul | +| `gateway/modules/features/teamsbot/` | Gateway-seitiges Feature-Modul (inkl. `dashboard/stream`, Session-SSE, Module-CRUD) | +| `frontend_nyla/src/pages/views/teamsbot/` | Dashboard (SSE), Assistent, Module, Live-Session, Einstellungen | +| `frontend_nyla/src/api/teamsbotApi.ts` | u.a. `createDashboardStream`, `createSessionStream`, Module-API | | `service-teams-browser-bot/` | Eigenständiger Bot-Service (separates Repository) | ## Regeln / Invarianten @@ -65,6 +82,8 @@ Der Gateway (Feature `teamsbot`) verwaltet Sessions und stellt die AI-Pipeline b - Authentifizierter Join (mit Microsoft-Account) oder Anonymous Guest -- je nach Konfiguration - Gateway ist die **einzige** Schnittstelle für AI-Aufrufe und TTS -- der Bot-Service selbst hat keine AI-Logik +**STT auf dem Gateway:** Meeting-Audio-Chunks (WebSocket `audioChunk`, PCM) werden pro Chunk mit `VoiceObjects.speechToText` transkribiert (Batch `recognize`, gemeinsamer Connector mit CommCoach). Konfiguration u. a. `audioFormat=linear16`, `skipFallbacks=True`; Details und Modell-Defaults: [voice-google.md](../gateway/voice-google.md). + ## Hybrid-Routing: SPEECH_TEAMS + Agent Der Teamsbot läuft auf zwei kooperierenden Pfaden: diff --git a/c-work/1-plan/stt-chirp-v2-evaluation.md b/c-work/1-plan/stt-chirp-v2-evaluation.md new file mode 100644 index 0000000..020fca3 --- /dev/null +++ b/c-work/1-plan/stt-chirp-v2-evaluation.md @@ -0,0 +1,22 @@ +# STT: Google Speech-to-Text v2 / Chirp Evaluation (follow-up) + +Status: planned (not implemented). Related: gateway `connectorVoiceGoogle.py` uses Speech v1 `SpeechClient` only. + +## Goal + +Benchmark STT v2 (e.g. Chirp / Chirp 2) for `de-DE` vs current v1 `latest_short` / `latest_long` on: + +- Latency (time-to-first-token, final latency) +- WER / subjective quality in meeting + coaching scenarios +- Cost and quota + +## Steps + +1. Add optional v2 client path (`google.cloud.speech_v2` or REST) behind a feature flag. +2. Run A/B on CommCoach streaming and Teamsbot batch paths with identical audio fixtures. +3. Document decision in `wiki/b-reference/` and remove flag or make v2 default. + +## Notes + +- Streaming and batch config differ between v1 and v2; keep `VoiceObjects` as the single facade. +- Billing hooks (`calculateSttCostCHF`) must use measured duration (see streaming `result_end_time`), not compressed byte heuristics. diff --git a/c-work/_CHANGELOG.md b/c-work/_CHANGELOG.md index bb42edd..e1c87fb 100644 --- a/c-work/_CHANGELOG.md +++ b/c-work/_CHANGELOG.md @@ -12,8 +12,16 @@ type: `feat` `fix` `refactor` `docs` `test` `chore` `build` · scope: `gateway Skip: reine Refactors, Formatting, Lint, Dep-Bumps, Test-only, Wiki-Tippfehler. +## 2026-05-11 + +- 2026-05-11 | feat | gateway, frontend-nyla, wiki | TeamsBot: `GET /api/teamsbot/{instanceId}/dashboard/stream` (SSE dashboardState 3s/20s); dashboard consumes EventSource + reconnect; module tiles navigate to `modules?moduleId=` with expand + scroll highlight; canonical `b-reference/teams-bot/architecture.md`, TOPICS, `b-reference/frontend-nyla/architecture.md` (Teams Bot UI row). (c-work: 2-build/2026-04-teamsbot-greenfield-ia-and-live-update.md) + ## 2026-05-10 +- 2026-05-10 | feat | frontend-nyla | TeamsBot UI aligned to greenfield IA: dashboard as KPI + module-activity + quick actions (no duplicate start form); MFA on live session SSE; assistant step adds join mode, MS account block, session context; modules header `Modul anlegen` dialog + `Meeting starten`; nav icons for assistant/modules; `FEATURE_REGISTRY` tab label Dashboard. (c-work: 2-build/2026-04-teamsbot-greenfield-ia-and-live-update.md) +- 2026-05-10 | feat, fix | gateway, frontend-nyla, teams-bot | TeamsBot: `startSession` binds `moduleId` with validation; DB migration M2 `TeamsbotMeetingModule.defaultMeetingLink` / `defaultBotName`; assistant prefill + searchable multi-row module list; modules edit saves defaults; session view polls while pending/joining even with SSE and syncs switcher row; browser bot chat compose marker + safe `AudioContext.close`. (c-work: 2-build/2026-04-teamsbot-greenfield-ia-and-live-update.md) +- 2026-05-10 | docs | wiki | Kanon: `b-reference/gateway/voice-google.md`; TOPICS + README Ordnerbaum; Querverweise in gateway/architecture, teams-bot/architecture, frontend-nyla/architecture, ai-agent. +- 2026-05-10 | feat | gateway, frontend-nyla | STT: configurable model/lightweight/audioFormat on batch `speechToText`; streaming supports model/lightweight/singleUtterance; duration from `result_end_time`; WS `open` + `end_of_single_utterance` replumbing. CommCoach uses `latest_short` + lightweight + single-utterance; Teamsbot passes `audioFormat=linear16`. Chirp/v2 evaluation tracked in `wiki/c-work/1-plan/stt-chirp-v2-evaluation.md`. - 2026-05-10 | fix | gateway | CommCoach: conversational turns use `operationType=DATA_QUERY` + `priority=SPEED` for faster model selection (gpt-5.4-mini instead of gpt-5.5); model selector speed priority weight scaled from `/10` to `*100` to be meaningful. - 2026-05-10 | fix | gateway | CommCoach: persona sessions now distinguish first vs follow-up; opening prompt references prior sessions instead of re-introducing persona every time. - 2026-05-10 | feat | gateway | Document generation: unified `documentTitle` style separate from `headings.h1`; BASE/renderer converts independently; HTML/CSS, PDF title block, Markdown/Text heading offsets updated; DEFAULT_STYLE h1 lowered vs title. diff --git a/d-guides/deployment/poweron-sec.kdbx b/d-guides/deployment/poweron-sec.kdbx index 77642e3..e514c2f 100644 Binary files a/d-guides/deployment/poweron-sec.kdbx and b/d-guides/deployment/poweron-sec.kdbx differ