Add taskbar controls and summary oneliner

This commit is contained in:
2026-05-27 23:31:40 +02:00
parent 7777b349a5
commit 71f1e6a0b8
22 changed files with 720 additions and 9 deletions
@@ -48,12 +48,13 @@ public sealed class MeetingSummaryToolTests
Assert.Equal("", await tools.ReadGlossary());
Assert.False(tools.SummaryWasWritten);
var result = await tools.WriteSummary("# Summary\n\n- Done.");
var result = await tools.WriteSummary("# Summary\n\n- Done.", "Done items");
Assert.Equal(artifacts.SummaryPath, result);
Assert.True(tools.SummaryWasWritten);
var summary = await File.ReadAllTextAsync(artifacts.SummaryPath);
Assert.Contains("title: Meeting", summary);
Assert.Contains("oneliner: Done items", summary);
Assert.Contains("start_time: \"2026-05-20T10:00:00.0000000+02:00\"", summary);
Assert.Contains("end_time: \"2026-05-20T10:30:00.0000000+02:00\"", summary);
Assert.Contains("attendees:", summary);
@@ -101,7 +102,7 @@ public sealed class MeetingSummaryToolTests
""");
var tools = new MeetingSummaryTools(artifacts);
await tools.WriteSummary("# Summary");
await tools.WriteSummary("# Summary", "Preserved attendee summary");
var summary = await File.ReadAllTextAsync(artifacts.SummaryPath);
Assert.Contains("attendees:", summary);
@@ -144,7 +145,7 @@ public sealed class MeetingSummaryToolTests
""");
var tools = new MeetingSummaryTools(artifacts);
await tools.WriteSummary("# Summary");
await tools.WriteSummary("# Summary", "Current project summary");
var summary = await File.ReadAllTextAsync(artifacts.SummaryPath);
Assert.Contains("projects:", summary);
@@ -612,7 +613,7 @@ public sealed class MeetingSummaryToolTests
audit);
await tools.WriteContext("owned context");
await tools.WriteSummary("owned summary");
await tools.WriteSummary("owned summary", "Owned summary");
await tools.WriteProjectFile("MeetingAssistant", "notes.md", "TWO", from: 2, to: 2);
await tools.AddDictationWord("PBI");
await audit.AppendToAssistantContextAsync(CancellationToken.None);
@@ -627,4 +628,30 @@ public sealed class MeetingSummaryToolTests
Assert.DoesNotContain("owned summary", context);
Assert.DoesNotContain("- Context before.", context);
}
[Fact]
public async Task WriteSummaryRefusesOneLinerWithLineBreaks()
{
var root = Path.Combine(Path.GetTempPath(), "meeting-assistant-tests", Guid.NewGuid().ToString("N"));
var artifacts = new MeetingSessionArtifacts(
MeetingNotePath: Path.Combine(root, "Meetings", "Notes", "meeting.md"),
TranscriptPath: Path.Combine(root, "Meetings", "Transcripts", "transcript.md"),
AssistantContextPath: Path.Combine(root, "Meetings", "Assistant Context", "context.md"),
SummaryPath: Path.Combine(root, "Meetings", "Summaries", "summary.md"));
Directory.CreateDirectory(Path.GetDirectoryName(artifacts.MeetingNotePath)!);
await File.WriteAllTextAsync(
artifacts.MeetingNotePath,
"""
---
title: Meeting
---
""");
var tools = new MeetingSummaryTools(artifacts);
var result = await tools.WriteSummary("# Summary", "First line\nsecond line");
Assert.Equal("Refused: oneliner must be a single line.", result);
Assert.False(tools.SummaryWasWritten);
Assert.False(File.Exists(artifacts.SummaryPath));
}
}