Public Access
Add meeting assistant speech and summary automation
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
using MeetingAssistant;
|
||||
using MeetingAssistant.MeetingNotes;
|
||||
using MeetingAssistant.Summary;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
namespace MeetingAssistant.Tests;
|
||||
|
||||
public sealed class MeetingSummaryInstructionBuilderTests
|
||||
{
|
||||
[Fact]
|
||||
public async Task BuilderUsesDefaultPromptWhenConfiguredPromptIsBlank()
|
||||
{
|
||||
var root = Path.Combine(Path.GetTempPath(), "meeting-assistant-tests", Guid.NewGuid().ToString("N"));
|
||||
var artifacts = CreateArtifacts(root);
|
||||
await WriteMeetingNoteAsync(artifacts.MeetingNotePath, []);
|
||||
var builder = new MeetingSummaryInstructionBuilder(Options.Create(new MeetingAssistantOptions
|
||||
{
|
||||
Agent = new AgentOptions { InitialPrompt = " " },
|
||||
Vault = new VaultOptions { ProjectsFolder = Path.Combine(root, "Projects") }
|
||||
}));
|
||||
|
||||
var instructions = await builder.BuildAsync(artifacts, CancellationToken.None);
|
||||
|
||||
Assert.Contains("You are the Meeting Assistant summary agent.", instructions);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task BuilderUsesConfiguredPrompt()
|
||||
{
|
||||
var root = Path.Combine(Path.GetTempPath(), "meeting-assistant-tests", Guid.NewGuid().ToString("N"));
|
||||
var artifacts = CreateArtifacts(root);
|
||||
await WriteMeetingNoteAsync(artifacts.MeetingNotePath, []);
|
||||
var builder = new MeetingSummaryInstructionBuilder(Options.Create(new MeetingAssistantOptions
|
||||
{
|
||||
Agent = new AgentOptions { InitialPrompt = "Custom summarizer instructions." },
|
||||
Vault = new VaultOptions { ProjectsFolder = Path.Combine(root, "Projects") }
|
||||
}));
|
||||
|
||||
var instructions = await builder.BuildAsync(artifacts, CancellationToken.None);
|
||||
|
||||
Assert.Equal("Custom summarizer instructions.", instructions);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task BuilderAppendsAgentsFilesForBoundProjects()
|
||||
{
|
||||
var root = Path.Combine(Path.GetTempPath(), "meeting-assistant-tests", Guid.NewGuid().ToString("N"));
|
||||
var projectsRoot = Path.Combine(root, "Projects");
|
||||
var artifacts = CreateArtifacts(root);
|
||||
await WriteMeetingNoteAsync(artifacts.MeetingNotePath, ["Beta", "Alpha", "Missing"]);
|
||||
await WriteProjectAgentsAsync(projectsRoot, "Alpha", "Alpha instructions.");
|
||||
await WriteProjectAgentsAsync(projectsRoot, "Beta", "Beta instructions.");
|
||||
Directory.CreateDirectory(Path.Combine(projectsRoot, "Missing"));
|
||||
var builder = new MeetingSummaryInstructionBuilder(Options.Create(new MeetingAssistantOptions
|
||||
{
|
||||
Agent = new AgentOptions { InitialPrompt = "Base." },
|
||||
Vault = new VaultOptions { ProjectsFolder = projectsRoot }
|
||||
}));
|
||||
|
||||
var instructions = await builder.BuildAsync(artifacts, CancellationToken.None);
|
||||
|
||||
Assert.Equal(
|
||||
"""
|
||||
Base.
|
||||
|
||||
---
|
||||
projects:
|
||||
|
||||
# Alpha
|
||||
|
||||
Alpha instructions.
|
||||
|
||||
# Beta
|
||||
|
||||
Beta instructions.
|
||||
""",
|
||||
instructions);
|
||||
}
|
||||
|
||||
private static MeetingSessionArtifacts CreateArtifacts(string root)
|
||||
{
|
||||
return new MeetingSessionArtifacts(
|
||||
Path.Combine(root, "Meetings", "Notes", "meeting.md"),
|
||||
Path.Combine(root, "Meetings", "Transcripts", "transcript.md"),
|
||||
Path.Combine(root, "Meetings", "Assistant Context", "context.md"),
|
||||
Path.Combine(root, "Meetings", "Summaries", "summary.md"));
|
||||
}
|
||||
|
||||
private static async Task WriteMeetingNoteAsync(string path, IReadOnlyList<string> projects)
|
||||
{
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(path)!);
|
||||
var projectLines = projects.Count == 0
|
||||
? "projects: []"
|
||||
: "projects:\n" + string.Join('\n', projects.Select(project => $"- {project}"));
|
||||
await File.WriteAllTextAsync(
|
||||
path,
|
||||
$"""
|
||||
---
|
||||
title: Meeting
|
||||
{projectLines}
|
||||
---
|
||||
""");
|
||||
}
|
||||
|
||||
private static async Task WriteProjectAgentsAsync(string projectsRoot, string project, string content)
|
||||
{
|
||||
var folder = Path.Combine(projectsRoot, project);
|
||||
Directory.CreateDirectory(folder);
|
||||
await File.WriteAllTextAsync(Path.Combine(folder, "AGENTS.md"), content);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user