Public Access
feat: detect host operating system at startup and provide platform-specific guidance
This commit is contained in:
@@ -41,6 +41,19 @@ public sealed class HealthEndpointTests : IClassFixture<WebApplicationFactory<Pr
|
||||
Assert.Equal("ok", body?.Status);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ApplicationStartupRegistersDetectedHostOperatingSystemOnce()
|
||||
{
|
||||
using var client = factory.CreateClient();
|
||||
using var response = await client.GetAsync("/health");
|
||||
var first = factory.Services.GetRequiredService<HostOperatingSystem>();
|
||||
var second = factory.Services.GetRequiredService<HostOperatingSystem>();
|
||||
|
||||
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
|
||||
Assert.Same(first, second);
|
||||
Assert.Equal(HostOperatingSystem.DetectCurrent(), first);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ApplicationStartupDeletesStaleTemporaryRecordings()
|
||||
{
|
||||
|
||||
@@ -732,6 +732,7 @@ public sealed class WorkflowRulesEditorTests
|
||||
var root = Path.Combine(Path.GetTempPath(), "meeting-assistant-tests", Guid.NewGuid().ToString("N"));
|
||||
var rulesPath = Path.Combine(root, "rules.yaml");
|
||||
var builder = new WorkflowRulesEditorInstructionBuilder(
|
||||
HostOperatingSystem.DetectCurrent(),
|
||||
NullLogger<WorkflowRulesEditorInstructionBuilder>.Instance);
|
||||
|
||||
var instructions = await builder.BuildAsync(new MeetingAssistantOptions
|
||||
@@ -749,10 +750,61 @@ public sealed class WorkflowRulesEditorTests
|
||||
Assert.Contains("list_recent_summaries", instructions);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task InstructionBuilderUsesWindowsCommandsAndConceptsOnWindows()
|
||||
{
|
||||
var builder = new WorkflowRulesEditorInstructionBuilder(
|
||||
new HostOperatingSystem(HostOperatingSystemKind.Windows),
|
||||
NullLogger<WorkflowRulesEditorInstructionBuilder>.Instance);
|
||||
|
||||
var instructions = await builder.BuildAsync(new MeetingAssistantOptions(), CancellationToken.None);
|
||||
|
||||
Assert.Contains("Detected host operating system: Windows", instructions);
|
||||
Assert.Contains("PowerShell", instructions);
|
||||
Assert.Contains("Windows-style paths", instructions);
|
||||
Assert.Contains("Windows services", instructions);
|
||||
Assert.Contains("Task Manager", instructions);
|
||||
Assert.Contains("Do not use macOS-only commands or concepts", instructions);
|
||||
Assert.Contains("does not make unavailable integrations available", instructions);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task InstructionBuilderUsesMacOSCommandsAndConceptsOnMacOS()
|
||||
{
|
||||
var builder = new WorkflowRulesEditorInstructionBuilder(
|
||||
new HostOperatingSystem(HostOperatingSystemKind.MacOS),
|
||||
NullLogger<WorkflowRulesEditorInstructionBuilder>.Instance);
|
||||
|
||||
var instructions = await builder.BuildAsync(new MeetingAssistantOptions(), CancellationToken.None);
|
||||
|
||||
Assert.Contains("Detected host operating system: macOS", instructions);
|
||||
Assert.Contains("zsh", instructions);
|
||||
Assert.Contains("POSIX-style paths", instructions);
|
||||
Assert.Contains("launchd and LaunchAgents", instructions);
|
||||
Assert.Contains("Activity Monitor", instructions);
|
||||
Assert.Contains("Do not use Windows-only commands or concepts", instructions);
|
||||
Assert.Contains("does not make unavailable integrations available", instructions);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task InstructionBuilderUsesPortableConceptsOnUnsupportedHosts()
|
||||
{
|
||||
var builder = new WorkflowRulesEditorInstructionBuilder(
|
||||
new HostOperatingSystem(HostOperatingSystemKind.Unsupported),
|
||||
NullLogger<WorkflowRulesEditorInstructionBuilder>.Instance);
|
||||
|
||||
var instructions = await builder.BuildAsync(new MeetingAssistantOptions(), CancellationToken.None);
|
||||
|
||||
Assert.Contains("Detected host operating system: unsupported", instructions);
|
||||
Assert.Contains("portable .NET concepts", instructions);
|
||||
Assert.Contains("Do not assume Windows or macOS", instructions);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task InstructionBuilderIncludesProjectSyncGuidanceForCorrectedMeetingNotes()
|
||||
{
|
||||
var builder = new WorkflowRulesEditorInstructionBuilder(
|
||||
HostOperatingSystem.DetectCurrent(),
|
||||
NullLogger<WorkflowRulesEditorInstructionBuilder>.Instance);
|
||||
|
||||
var instructions = await builder.BuildAsync(new MeetingAssistantOptions(), CancellationToken.None);
|
||||
@@ -767,6 +819,7 @@ public sealed class WorkflowRulesEditorTests
|
||||
public async Task InstructionBuilderTreatsAssistantContextAsMeetingMemoryDuringRepairs()
|
||||
{
|
||||
var builder = new WorkflowRulesEditorInstructionBuilder(
|
||||
new HostOperatingSystem(HostOperatingSystemKind.MacOS),
|
||||
NullLogger<WorkflowRulesEditorInstructionBuilder>.Instance);
|
||||
var options = new MeetingAssistantOptions
|
||||
{
|
||||
@@ -784,6 +837,8 @@ public sealed class WorkflowRulesEditorTests
|
||||
Assert.Contains("read the matching assistant context", instructions);
|
||||
Assert.Contains("problems, missing information, assumptions, prior fixes, and conclusions", instructions);
|
||||
Assert.Contains("append a concise record of your fixes and conclusions", instructions);
|
||||
Assert.Contains("Detected host operating system: macOS", instructions);
|
||||
Assert.Contains("zsh", instructions);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
||||
Reference in New Issue
Block a user