Files

11 KiB

MODIFIED Requirements

Requirement: Workflow rules and speaker identities can be edited through a tray-launched assistant

Meeting Assistant SHALL expose a Settings and logs item from the tray icon menu.

The tray icon SHALL be implemented through the Uno notification icon stack.

The tray icon menu SHALL show every configured launch profile when recording can be started and SHALL include each profile's configured toggle hotkey in the corresponding start or switch menu item.

When the user selects Settings and logs, Meeting Assistant SHALL open a basic WPF chat window for editing the configured workflow rules file, managing speaker identities, inspecting configuration, and reading logs.

The chat window SHALL be titled Settings and logs, SHALL display user and assistant messages as visually distinct cards, SHALL render message text with selectable rich text, SHALL display basic markdown emphasis including bold, italic, bold-italic, and strikethrough text, clickable markdown links and autolinks with URL tooltips, clickable markdown image embeds with URL tooltips and a small preview or placeholder, boxed inline code, fenced code blocks, blockquotes, level-one and level-two headings with modestly larger text, markdown task checkboxes as aligned Unicode checkbox glyphs, pipe tables rendered as grid views, and line breaks in agent responses, SHALL display a plain Thinking... line while the agent is working, SHALL provide a multiline text input at the bottom with placeholder text ask me what I can do for you, SHALL send on Enter, SHALL insert a newline on Shift+Enter, and SHALL provide an explicit Send button.

When a new chat message or thinking state is appended, the chat window SHALL scroll to the bottom of the newly rendered content if the conversation was already near the bottom or did not need scrolling before the append.

The Windows executable and settings/logs editor window SHALL use the Meeting Assistant application icon so the editor has a taskbar icon.

The settings/logs agent SHALL be configured from the summarizer agent settings by default, while allowing workflow-rules-editor-specific endpoint, key, model, reasoning, reconnection, output, and compaction settings to override those defaults.

The settings/logs agent SHALL include the workflow engine documentation in its system prompt and SHALL receive read, write, and search tools scoped to the configured workflow rules file.

The rules editor write_rules tool SHALL append to the configured workflow rules file by default and SHALL validate the complete resulting YAML document as supported workflow rules before writing it.

The rules editor write_rules tool SHALL replace the whole configured workflow rules file only when replace_file is true.

The rules editor write_rules tool SHALL refuse invalid YAML, unsupported workflow rule shape, or workflow step Razor templates that fail against the workflow template model without changing the configured workflow rules file and SHALL return enough detail for the agent to fix and retry.

The settings/logs agent SHALL receive speaker identity tools to search/list, read, update, delete, and merge identities in the local speaker identity database, and a create tool that refuses sampleless identity creation with an actionable response.

The settings/logs 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.

The settings/logs agent SHALL receive tools to read the local appsettings configuration file, write a complete valid JSON replacement for that file, read Meeting Assistant configuration documentation, read current or rotated application log files by tail or 1-based line range, search current or rotated application log files, search copied OpenSpec specification files, and read copied OpenSpec specification files by relative path and optional 1-based line range.

The settings/logs agent SHALL receive in-process diagnostic tools for health, recording status, current meeting metadata lookup, recent speaker identity merging, workflow configuration reload, ASR file transcription, and ASR file diarization so those diagnostics do not require HTTP calls.

Meeting Assistant SHALL copy specification markdown files from openspec/specs into build and publish output through a recursive include so future spec folders are included automatically.

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 settings/logs editor through the same window service used by the tray menu.

Scenario: Tray menu opens the editor

  • WHEN the user opens the tray icon menu
  • THEN the menu includes Settings and logs
  • WHEN the user selects Settings and logs
  • THEN Meeting Assistant opens the settings/logs editor chat window

Scenario: Tray menu shows configured profile hotkeys

  • GIVEN the default launch profile uses Ctrl+Alt+M
  • AND the english launch profile uses Ctrl+Alt+E
  • WHEN the user opens the tray icon menu while Meeting Assistant is idle
  • THEN the menu includes a start item for default showing Ctrl+Alt+M
  • AND the menu includes a start item for english showing Ctrl+Alt+E

Scenario: Settings and logs editor can be opened diagnostically

  • WHEN a diagnostic caller requests the settings/logs editor to open
  • THEN Meeting Assistant invokes the settings/logs editor window service

Scenario: Rules editor is scoped to the configured rules file

  • GIVEN a configured workflow rules file
  • WHEN the settings/logs agent runs
  • THEN its read, write, and search tools can access only that configured workflow rules file
  • AND its system prompt includes the workflow engine documentation

Scenario: Settings and logs assistant reads and writes configuration

  • GIVEN a local appsettings JSON file
  • WHEN the settings/logs agent reads configuration
  • THEN it receives the file content or requested clamped line range
  • WHEN it writes a valid JSON replacement
  • THEN Meeting Assistant replaces the configuration file
  • WHEN it writes invalid JSON
  • THEN Meeting Assistant refuses the write and preserves the existing file

Scenario: Settings and logs assistant reads configuration docs

  • WHEN the settings/logs agent requests configuration documentation
  • THEN Meeting Assistant returns the dedicated configuration documentation markdown

Scenario: Settings and logs assistant reads and searches logs

  • GIVEN Meeting Assistant has written application-owned logs under the temp log folder
  • WHEN the settings/logs agent reads logs with a tail count or line range
  • THEN it receives matching log lines from the selected log file
  • WHEN the settings/logs agent searches logs
  • THEN it receives matching filename:line text entries from current and rotated log files

Scenario: Settings and logs assistant reads and searches copied specs

  • GIVEN OpenSpec specification markdown files are copied into the application output
  • WHEN the settings/logs agent searches specs
  • THEN it receives matching relative/spec.md:line text entries scoped to openspec/specs
  • WHEN the settings/logs agent reads a spec file by relative path
  • THEN it receives the requested file content or clamped 1-based line range
  • AND paths outside the copied specs tree are refused

Scenario: Settings and logs assistant runs diagnostics without HTTP

  • WHEN the settings/logs agent requests health, recording status, current meeting metadata, speaker identity merge, workflow reload, or ASR file diagnostics
  • THEN Meeting Assistant runs the same in-process services used by the local diagnostic endpoints
  • AND returns the diagnostic result to the agent

Scenario: New spec folders are included in output

  • WHEN a new markdown spec file is added under openspec/specs
  • THEN the application build includes it in the output under openspec/specs
  • AND publish includes it in the published output under openspec/specs

Scenario: Application keeps its own rotating log files

  • WHEN Meeting Assistant starts
  • THEN it writes application logs to the configured temp log folder independently from stdout and stderr redirection
  • AND it preserves at most four older rotated log files

Scenario: Rules editor appends by default

  • GIVEN a configured workflow rules file with existing valid rules
  • WHEN the rules editor writes an additional valid rule without replace_file
  • THEN Meeting Assistant appends the new rule
  • AND preserves the existing rules

Scenario: Rules editor replaces only when requested

  • GIVEN a configured workflow rules file with existing rules
  • WHEN the rules editor writes valid YAML with replace_file set to true
  • THEN Meeting Assistant replaces the complete rules file with the supplied YAML

Scenario: Rules editor refuses invalid workflow rules

  • GIVEN a configured workflow rules file with valid existing rules
  • WHEN the rules editor writes YAML that would make the file invalid, unsupported by the workflow engine, or contain a malformed step value Razor template
  • THEN Meeting Assistant refuses the write
  • AND keeps the existing rules file unchanged
  • AND returns the invalid rule or field plus supported values when available

Scenario: Rules editor can manage speaker identities

  • GIVEN the speaker identity database contains speaker identities and samples
  • WHEN the rules editor agent runs
  • THEN it can search, read, update, delete, and merge speaker identities
  • AND sampleless identity creation is refused with an actionable response
  • AND it can list, read, delete, and queue playback of identity samples
  • AND deleting the last sample for an identity is refused

Scenario: User sends a rules-editing chat turn

  • GIVEN the settings/logs editor chat window is open
  • WHEN the user types a prompt and presses Enter
  • THEN the user message appears in the conversation
  • AND a plain Thinking... line appears while the agent is running
  • AND the first model request for that turn is marked as user-initiated
  • AND the final assistant response replaces the thinking line

Scenario: Chat auto-scrolls after appended content

  • GIVEN the rules editor chat window content fits without scrolling or is already near the bottom
  • WHEN a new user or assistant message is appended
  • THEN the conversation scrolls to the bottom of the newly rendered message content