10 Commits
Author SHA1 Message Date
codex 5e7c9f64d0 Merge remote-tracking branch 'origin/renovate/naudio-3.x' into renovate/microsoft.entityframeworkcore.sqlite-10.x
PR and Push Build/Test / build-and-test (push) Successful in 11m33s
PR and Push Build/Test / build-and-test (pull_request) Successful in 11m55s
# Conflicts:
#	MeetingAssistant/MeetingAssistant.csproj
2026-09-17 13:36:21 +02:00
codex fbd5a0852f Merge remote-tracking branch 'origin/renovate/naudio-2.x' into renovate/naudio-3.x
PR and Push Build/Test / build-and-test (push) Successful in 14m14s
PR and Push Build/Test / build-and-test (pull_request) Successful in 12m36s
# Conflicts:
#	MeetingAssistant/MeetingAssistant.csproj
2026-09-17 13:34:55 +02:00
codex 568bedb77a fix: isolate Windows sample playback for NAudio 3 2026-09-17 13:34:47 +02:00
codex f21c56b1c7 Merge remote-tracking branch 'origin/main' into renovate/naudio-3.x
# Conflicts:
#	MeetingAssistant/MeetingAssistant.csproj
2026-09-17 13:30:47 +02:00
codex 40d10d634a fix: reference WinMM explicitly for shared sample playback
PR and Push Build/Test / build-and-test (push) Successful in 11m36s
PR and Push Build/Test / build-and-test (pull_request) Successful in 12m9s
2026-09-17 13:27:49 +02:00
codex 264a3a823f Merge remote-tracking branch 'origin/main' into renovate/naudio-2.x
# Conflicts:
#	MeetingAssistant/MeetingAssistant.csproj
2026-09-17 13:26:04 +02:00
Manuel d93d758a8f Merge branch 'main' into renovate/naudio-3.x
PR and Push Build/Test / build-and-test (push) Failing after 6m58s
PR and Push Build/Test / build-and-test (pull_request) Failing after 7m56s
2026-09-15 09:51:19 +02:00
Manuel 336d940acd Merge branch 'main' into renovate/naudio-2.x
PR and Push Build/Test / build-and-test (push) Failing after 7m28s
PR and Push Build/Test / build-and-test (pull_request) Failing after 7m17s
2026-09-15 09:50:03 +02:00
renovate-bot e23d04a38c chore(deps): update dependency naudio to v3
PR and Push Build/Test / build-and-test (push) Failing after 1m48s
PR and Push Build/Test / build-and-test (pull_request) Failing after 1m48s
2026-09-12 02:46:02 +00:00
renovate-bot c6a50d307e chore(deps): update dependency naudio to 2.4.0
PR and Push Build/Test / build-and-test (push) Failing after 1m48s
PR and Push Build/Test / build-and-test (pull_request) Failing after 1m48s
2026-09-12 02:45:52 +00:00
6 changed files with 38 additions and 1 deletions
@@ -1,6 +1,7 @@
using System.Net;
using System.Net.Http.Json;
using MeetingAssistant.Recording;
using MeetingAssistant.Workflow;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.AspNetCore.TestHost;
@@ -41,6 +42,17 @@ public sealed class HealthEndpointTests : IClassFixture<WebApplicationFactory<Pr
Assert.Equal("ok", body?.Status);
}
[Fact]
public async Task NeutralBuildReportsSpeakerPlaybackUnavailable()
{
var playback = factory.Services.GetRequiredService<IWorkflowRulesEditorSamplePlaybackQueue>();
var result = await playback.QueueAsync(1, [1, 2]);
Assert.Contains("Windows build", result);
Assert.DoesNotContain("Queued", result);
}
[Fact]
public async Task ApplicationStartupDeletesStaleTemporaryRecordings()
{
+1 -1
View File
@@ -25,7 +25,7 @@
<PackageReference Include="Microsoft.CognitiveServices.Speech" Version="$(MicrosoftSpeechVersion)" />
<PackageReference Include="Microsoft.CognitiveServices.Speech.Extension.MAS" Version="$(MicrosoftSpeechVersion)" ExcludeAssets="build" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.12" />
<PackageReference Include="NAudio" Version="2.3.0" />
<PackageReference Include="NAudio" Version="3.1.0" />
<PackageReference Include="NCalcSync" Version="7.2.0" />
<PackageReference Include="RazorLight" Version="2.3.1" />
<PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="3.0.5" />
+4
View File
@@ -132,7 +132,11 @@ builder.Services.AddSingleton<IMeetingSummaryRetryRunner, MeetingSummaryRetryRun
builder.Services.AddSingleton<IMeetingWorkflowRulesProvider, FileMeetingWorkflowRulesProvider>();
builder.Services.AddSingleton<IMeetingWorkflowEngine, MeetingWorkflowEngine>();
builder.Services.AddSingleton<IWorkflowRulesEditorInstructionBuilder, WorkflowRulesEditorInstructionBuilder>();
#if WINDOWS
builder.Services.AddSingleton<IWorkflowRulesEditorSamplePlaybackQueue, WorkflowRulesEditorSamplePlaybackQueue>();
#else
builder.Services.AddSingleton<IWorkflowRulesEditorSamplePlaybackQueue, UnavailableWorkflowRulesEditorSamplePlaybackQueue>();
#endif
builder.Services.AddSingleton<IWorkflowRulesEditorChatPipeline, WorkflowRulesEditorChatPipeline>();
builder.Services.AddTransient<WorkflowRulesEditorChatViewModel>();
#if WINDOWS
@@ -8,6 +8,7 @@ public interface IWorkflowRulesEditorSamplePlaybackQueue
Task<string> QueueAsync(int sampleId, byte[] wavBytes, CancellationToken cancellationToken = default);
}
#if WINDOWS
public sealed class WorkflowRulesEditorSamplePlaybackQueue : IWorkflowRulesEditorSamplePlaybackQueue, IDisposable
{
private readonly Channel<QueuedSample> channel = Channel.CreateUnbounded<QueuedSample>();
@@ -98,3 +99,13 @@ public sealed class WorkflowRulesEditorSamplePlaybackQueue : IWorkflowRulesEdito
private sealed record QueuedSample(int SampleId, byte[] WavBytes);
}
#else
public sealed class UnavailableWorkflowRulesEditorSamplePlaybackQueue : IWorkflowRulesEditorSamplePlaybackQueue
{
public Task<string> QueueAsync(int sampleId, byte[] wavBytes, CancellationToken cancellationToken = default)
{
cancellationToken.ThrowIfCancellationRequested();
return Task.FromResult("Speaker sample playback requires the Windows build of Meeting Assistant.");
}
}
#endif
+2
View File
@@ -1,5 +1,7 @@
# Meeting Workflow Engine
The interactive rules and identities editor can queue speaker samples for playback in the Windows build. The neutral build reports that playback requires the Windows build; it does not enqueue audio or initialize Windows audio devices.
Meeting Assistant has a small local workflow engine for meeting-specific automation. It is intended for rules that are too personal or environment-specific to hard-code, such as adding default attendees, cleaning meeting titles, binding projects, or adding context notes when known speakers are detected.
The workflow engine is deliberately narrow. It runs from a local YAML file, evaluates rules against the current meeting note read from disk, and applies a small set of meeting-safe mutations.
+8
View File
@@ -285,6 +285,8 @@ The rules and identities editor agent SHALL receive speaker identity tools to se
The rules and identities editor agent SHALL receive speaker sample tools to list, read, delete, and queue playback of samples linked to identities. The delete sample tool SHALL refuse to delete the last remaining sample for an identity.
Speaker sample playback SHALL use the Windows audio implementation only in the Windows-targeted build. The neutral build SHALL return an actionable unavailable response instead of reporting a sample as queued for playback.
The first model request caused by each user-submitted chat turn SHALL send the `X-Initiator: user` header, while follow-up model requests within that same turn, such as tool-call continuations, SHALL send `X-Initiator: agent`.
Meeting Assistant SHALL provide a diagnostic endpoint that opens the workflow rules editor through the same window service used by the tray menu.
@@ -337,6 +339,12 @@ Meeting Assistant SHALL provide a diagnostic endpoint that opens the workflow ru
- **AND** it can list, read, delete, and queue playback of identity samples
- **AND** deleting the last sample for an identity is refused
#### Scenario: Neutral build refuses speaker playback
- **GIVEN** Meeting Assistant runs from its neutral target build
- **WHEN** an agent requests playback of a speaker sample
- **THEN** the application reports that playback requires the Windows build
- **AND** does not report that the sample was queued
#### Scenario: User sends a rules-editing chat turn
- **GIVEN** the rules editor chat window is open
- **WHEN** the user types a prompt and presses Enter