Make meeting lifecycle stateful

This commit is contained in:
2026-05-27 12:55:17 +02:00
parent d607b957bb
commit e85274829a
91 changed files with 4076 additions and 479 deletions
@@ -0,0 +1,15 @@
## Why
Meeting Assistant currently has one global configuration, one hotkey, and one implicit ASR/runtime setup. In practice, the user needs to start meetings with different speech-recognition settings, such as German-only versus English-only recognition, without editing configuration and restarting between meetings.
## What Changes
- Add named launch profiles to configuration.
- Treat the root `MeetingAssistant` configuration as the `default` launch profile.
- Resolve non-default launch profiles by copying the default settings and binding the named profile override onto that copy.
- Add profile-aware endpoint routes while preserving the existing default-profile URLs.
- Register one global hotkey per launch profile, requiring distinct hotkey definitions.
- Add an `english` launch profile that keeps the current default settings except for English Azure Speech recognition and its own hotkey.
## Impact
- Existing URLs and the existing hotkey continue to operate the default profile.
- Named profiles are addressed through profile URLs, allowing diagnostics and recording commands to select the desired backend/language profile.
- Speech pipeline creation becomes profile-aware.
@@ -0,0 +1,33 @@
## ADDED Requirements
### Requirement: Recording can be launched through named profiles
Meeting Assistant SHALL treat the root `MeetingAssistant` configuration as a launch profile named `default`.
Meeting Assistant SHALL allow additional named launch profiles to be configured as overrides of the default profile. A named profile SHALL be resolved by binding the default profile first, then binding the named profile override onto the same option object.
Meeting Assistant SHALL preserve existing recording endpoint URLs as default-profile URLs and SHALL provide equivalent named-profile URLs that include the profile name.
Each launch profile SHALL have a distinct global hotkey. Pressing a profile hotkey SHALL toggle recording using that profile's resolved configuration.
Meeting Assistant SHALL use the selected launch profile's vault and recording storage settings when it creates meeting notes, transcripts, assistant context notes, summary notes, temporary recordings, and dictation-word inputs for that meeting.
Meeting Assistant SHALL use the selected launch profile's summary-agent settings when it runs the summary pipeline for that meeting.
#### Scenario: Default profile keeps existing recording URL
- **WHEN** the user calls the existing recording start URL without a profile name
- **THEN** Meeting Assistant starts recording with the `default` launch profile
#### Scenario: Named profile starts recording
- **WHEN** the user calls the named-profile recording start URL for profile `english`
- **THEN** Meeting Assistant starts recording using the resolved `english` launch profile configuration
#### Scenario: Named profile stores meeting artifacts in profile folders
- **GIVEN** launch profile `english` overrides vault folders and summary-agent settings
- **WHEN** the user starts and stops a recording with launch profile `english`
- **THEN** Meeting Assistant creates the meeting note, transcript, assistant context note, and summary note using the resolved `english` vault folders
- **AND** Meeting Assistant runs the summary pipeline using the resolved `english` summary-agent settings
#### Scenario: Profile hotkeys must be distinct
- **GIVEN** two launch profiles configure the same toggle hotkey
- **WHEN** Meeting Assistant resolves launch profiles
- **THEN** Meeting Assistant rejects the configuration before registering global hotkeys
@@ -0,0 +1,16 @@
## ADDED Requirements
### Requirement: Speech recognition diagnostics are launch-profile aware
Meeting Assistant SHALL preserve existing ASR diagnostic endpoint URLs as default-profile URLs.
Meeting Assistant SHALL provide equivalent named-profile ASR diagnostic endpoint URLs that include the profile name.
When a named-profile ASR diagnostic endpoint is used, Meeting Assistant SHALL create the speech recognition pipeline from the resolved profile configuration.
#### Scenario: Default ASR diagnostic URL uses default profile
- **WHEN** the user submits a WAV file to the existing ASR diagnostic endpoint URL
- **THEN** Meeting Assistant streams the WAV through the default launch profile's configured speech recognition pipeline
#### Scenario: Named ASR diagnostic URL uses named profile
- **WHEN** the user submits a WAV file to the ASR diagnostic endpoint URL for profile `english`
- **THEN** Meeting Assistant streams the WAV through the resolved `english` launch profile's configured speech recognition pipeline
@@ -0,0 +1,18 @@
## 1. Specification
- [x] 1.1 Define launch profile requirements for recording control and endpoint routing.
- [x] 1.2 Define launch profile requirements for profile-aware ASR pipeline selection.
## 2. Implementation
- [x] 2.1 Add launch profile option resolution with default-plus-override merge behavior.
- [x] 2.2 Preserve existing default endpoint URLs and add named profile URL variants.
- [x] 2.3 Pass selected launch profiles into recording and ASR diagnostics pipeline creation.
- [x] 2.4 Register distinct hotkeys for all launch profiles.
- [x] 2.5 Add an `english` launch profile override to appsettings.
- [x] 2.6 Use the selected launch profile for meeting artifact storage paths, dictation words, and summary-agent settings.
## 3. Validation
- [x] 3.1 Add tests for default and named launch profile option resolution.
- [x] 3.2 Add tests for profile-aware diagnostic endpoint routing.
- [x] 3.3 Add tests for distinct profile hotkey planning.
- [x] 3.4 Add tests for profile-scoped meeting artifact paths and summary-agent settings.
- [x] 3.5 Run focused tests.