Expand settings and logs agent tools
PR and Push Build/Test / build-and-test (push) Successful in 9m36s

This commit is contained in:
2026-06-01 21:07:08 +02:00
parent abac46c691
commit 11c65ce669
12 changed files with 1160 additions and 45 deletions
@@ -1,7 +1,12 @@
using MeetingAssistant.LaunchProfiles;
using MeetingAssistant.MeetingNotes;
using MeetingAssistant.Recording;
using MeetingAssistant.Summary;
using MeetingAssistant.Speakers;
using MeetingAssistant.Transcription;
using Microsoft.Extensions.AI;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Options;
namespace MeetingAssistant.Workflow;
@@ -15,6 +20,12 @@ public sealed class WorkflowRulesEditorChatPipeline : IWorkflowRulesEditorChatPi
private readonly IWorkflowRulesEditorInstructionBuilder instructionBuilder;
private readonly IDbContextFactory<SpeakerIdentityDbContext> speakerIdentityDbContextFactory;
private readonly IWorkflowRulesEditorSamplePlaybackQueue samplePlaybackQueue;
private readonly MeetingRecordingCoordinator recordingCoordinator;
private readonly IMeetingMetadataProvider meetingMetadataProvider;
private readonly ILaunchProfileOptionsProvider launchProfiles;
private readonly ISpeakerIdentityMergeService identityMergeService;
private readonly AsrDiagnosticService asrDiagnosticService;
private readonly IConfiguration configuration;
public WorkflowRulesEditorChatPipeline(
IOptions<MeetingAssistantOptions> options,
@@ -22,7 +33,13 @@ public sealed class WorkflowRulesEditorChatPipeline : IWorkflowRulesEditorChatPi
ILogger<WorkflowRulesEditorChatPipeline> logger,
IWorkflowRulesEditorInstructionBuilder instructionBuilder,
IDbContextFactory<SpeakerIdentityDbContext> speakerIdentityDbContextFactory,
IWorkflowRulesEditorSamplePlaybackQueue samplePlaybackQueue)
IWorkflowRulesEditorSamplePlaybackQueue samplePlaybackQueue,
MeetingRecordingCoordinator recordingCoordinator,
IMeetingMetadataProvider meetingMetadataProvider,
ILaunchProfileOptionsProvider launchProfiles,
ISpeakerIdentityMergeService identityMergeService,
AsrDiagnosticService asrDiagnosticService,
IConfiguration configuration)
{
this.options = options.Value;
this.loggerFactory = loggerFactory;
@@ -30,6 +47,12 @@ public sealed class WorkflowRulesEditorChatPipeline : IWorkflowRulesEditorChatPi
this.instructionBuilder = instructionBuilder;
this.speakerIdentityDbContextFactory = speakerIdentityDbContextFactory;
this.samplePlaybackQueue = samplePlaybackQueue;
this.recordingCoordinator = recordingCoordinator;
this.meetingMetadataProvider = meetingMetadataProvider;
this.launchProfiles = launchProfiles;
this.identityMergeService = identityMergeService;
this.asrDiagnosticService = asrDiagnosticService;
this.configuration = configuration;
}
public async Task<WorkflowRulesEditorChatResult> SendAsync(
@@ -47,7 +70,13 @@ public sealed class WorkflowRulesEditorChatPipeline : IWorkflowRulesEditorChatPi
var tools = new WorkflowRulesEditorTools(
options,
speakerIdentityDbContextFactory,
samplePlaybackQueue);
samplePlaybackQueue,
recordingCoordinator,
meetingMetadataProvider,
launchProfiles,
identityMergeService,
asrDiagnosticService,
configuration);
var messages = conversation
.Select(ToChatMessage)
.Append(new ChatMessage(ChatRole.User, userMessage.Trim()))
@@ -181,6 +210,102 @@ public sealed class WorkflowRulesEditorChatPipeline : IWorkflowRulesEditorChatPi
tools.SearchProjects,
"search_projects",
"Search files in all existing projects with .NET regular expression syntax. Use file_pattern to limit searched files by glob, for example *.md or **/*.md."),
AIFunctionFactory.Create(
tools.ListRecentSummaries,
"list_recent_summaries",
"List recent meeting summary notes from the configured summaries folder, newest first. Returns summary, meeting note, transcript, and assistant context paths to pass to the read tools."),
AIFunctionFactory.Create(
tools.ReadSummary,
"read_summary",
"Read one meeting summary file by path relative to the configured summaries folder. Supports from/to or tail."),
AIFunctionFactory.Create(
tools.ReadTranscript,
"read_transcript",
"Read one transcript file by path relative to the configured transcripts folder. Supports from/to or tail."),
AIFunctionFactory.Create(
tools.ReadMeetingNote,
"read_meeting_note",
"Read one meeting note file by path relative to the configured meeting notes folder. Supports from/to or tail."),
AIFunctionFactory.Create(
tools.ReadContext,
"read_context",
"Read one assistant context file by path relative to the configured assistant context folder. Supports from/to or tail."),
AIFunctionFactory.Create(
tools.WriteSummary,
"write_summary",
"Create or update a meeting summary file by path relative to the configured summaries folder. Appends by default, supports from/to replacement, insert, and replace_file for whole-file replacement."),
AIFunctionFactory.Create(
tools.WriteTranscript,
"write_transcript",
"Create or update a transcript file by path relative to the configured transcripts folder. Appends by default, supports from/to replacement, insert, and replace_file for whole-file replacement."),
AIFunctionFactory.Create(
tools.WriteMeetingNote,
"write_meeting_note",
"Create or update a meeting note file by path relative to the configured meeting notes folder. Appends by default, supports from/to replacement, insert, and replace_file for whole-file replacement."),
AIFunctionFactory.Create(
tools.WriteContext,
"write_context",
"Create or update an assistant context file by path relative to the configured assistant context folder. Appends by default, supports from/to replacement, insert, and replace_file for whole-file replacement."),
AIFunctionFactory.Create(
tools.WriteSummaryFrontmatter,
"write_summary_frontmatter",
"Replace only the YAML frontmatter of a meeting summary file while preserving the body. The path is relative to the configured summaries folder."),
AIFunctionFactory.Create(
tools.WriteTranscriptFrontmatter,
"write_transcript_frontmatter",
"Replace only the YAML frontmatter of a transcript file while preserving the body. The path is relative to the configured transcripts folder."),
AIFunctionFactory.Create(
tools.WriteMeetingNoteFrontmatter,
"write_meeting_note_frontmatter",
"Replace only the YAML frontmatter of a meeting note file while preserving the body. The path is relative to the configured meeting notes folder."),
AIFunctionFactory.Create(
tools.WriteContextFrontmatter,
"write_context_frontmatter",
"Replace only the YAML frontmatter of an assistant context file while preserving the body. The path is relative to the configured assistant context folder."),
AIFunctionFactory.Create(
tools.SearchSummaries,
"search_summaries",
"Search meeting summary files with .NET regular expression syntax. Supports an optional file_pattern glob."),
AIFunctionFactory.Create(
tools.SearchTranscripts,
"search_transcripts",
"Search transcript files with .NET regular expression syntax. Supports an optional file_pattern glob."),
AIFunctionFactory.Create(
tools.SearchMeetingNotes,
"search_meeting_notes",
"Search meeting note files with .NET regular expression syntax. Supports an optional file_pattern glob."),
AIFunctionFactory.Create(
tools.SearchContext,
"search_context",
"Search assistant context files with .NET regular expression syntax. Supports an optional file_pattern glob."),
AIFunctionFactory.Create(
tools.GetHealth,
"get_health",
"Return the same basic health information as the local /health endpoint."),
AIFunctionFactory.Create(
tools.GetRecordingStatus,
"get_recording_status",
"Return the current recording, artifact, process, and launch profile status without making an HTTP call."),
AIFunctionFactory.Create(
tools.DiagnoseCurrentMeeting,
"diagnose_current_meeting",
"Run the current meeting metadata diagnostic. Optional launch_profile selects a configured profile, started_at is a date/time, and timeout_seconds overrides the metadata lookup timeout."),
AIFunctionFactory.Create(
tools.MergeRecentSpeakerIdentities,
"merge_recent_speaker_identities",
"Run the recent speaker identity merge diagnostic. Optional recent_days overrides the configured merge age window; optional launch_profile selects profile options."),
AIFunctionFactory.Create(
tools.ReloadWorkflowConfiguration,
"reload_workflow_configuration",
"Reload application configuration in-process and return the currently bound workflow rules path."),
AIFunctionFactory.Create(
tools.DiagnoseAsrTranscribeFile,
"diagnose_asr_transcribe_file",
"Run ASR diagnostics on a local WAV file and return live transcription segments. Optional launch_profile selects a configured ASR profile."),
AIFunctionFactory.Create(
tools.DiagnoseAsrDiarizeFile,
"diagnose_asr_diarize_file",
"Run ASR diarization diagnostics on a local WAV file and return finished segments. Optional num_speakers and launch_profile mirror the HTTP diagnostic endpoint."),
AIFunctionFactory.Create(
tools.SearchIdentities,
"search_identities",