Public Access
Archive settings and logs agent change
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
# Generalize settings and logs assistant
|
||||
|
||||
## Why
|
||||
The tray-launched rules and identities chat is becoming the local operational assistant for Meeting Assistant. It should be presented as a broader settings and logs window and should be able to inspect and edit local configuration, explain configuration from docs, and inspect runtime logs without relying on external stdout redirection.
|
||||
|
||||
## What Changes
|
||||
- Rename the tray/menu/window surface from `Edit rules and identities` to `Settings and logs` and generalize its placeholder text.
|
||||
- Add agent tools to read and edit the local appsettings configuration file, read configuration documentation, tail/read logs, and search logs.
|
||||
- Move detailed configuration documentation out of `README.md` into a dedicated docs file that is copied with the application.
|
||||
- Add application-owned file logging under the temp folder with four rotated older files.
|
||||
- Update repository agent instructions with concise Meeting Assistant context for future agents.
|
||||
|
||||
## Impact
|
||||
- Existing rules and speaker identity tools remain available.
|
||||
- The local chat assistant can now help with configuration and logs in addition to rules and identities.
|
||||
- Runtime logs are available even when stdout/stderr redirection changes.
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
## MODIFIED Requirements
|
||||
### Requirement: Agents can use project context tools
|
||||
Meeting Assistant SHALL expose tools that allow agents to look up project information, retrieve keyword-relevant context, and inspect meeting-derived knowledge.
|
||||
|
||||
Project tools SHALL treat each direct subfolder of the configured projects folder as one project. A meeting note binds projects by listing those subfolder names in the `projects` frontmatter field.
|
||||
|
||||
The summary agent SHALL expose these project tools:
|
||||
|
||||
- `list_projects`
|
||||
- `list_projectfiles`
|
||||
- `read_projectfile`
|
||||
- `write_projectfile`
|
||||
- `list_past_project_meetings`
|
||||
- `read_past_project_meeting_summary`
|
||||
- `search`
|
||||
|
||||
The settings/logs agent SHALL expose project tools that operate across all existing project folders under the configured projects folder:
|
||||
|
||||
- `list_projects`
|
||||
- `list_projectfiles`
|
||||
- `read_projectfile`
|
||||
- `write_projectfile`
|
||||
- `search_projects`
|
||||
- `create_project`
|
||||
|
||||
The settings/logs `create_project` tool SHALL create one new direct project subfolder by project name.
|
||||
|
||||
The settings/logs `create_project` tool SHALL support a recommended seed that writes `AGENTS.md` from the bundled `Project-AGENTS.md` content file and creates starter `PROJECT.md`, `JOURNAL.md`, and `DECISIONS.md` files.
|
||||
|
||||
The settings/logs `create_project` tool SHALL support writing caller-supplied `AGENTS.md` content directly instead of the recommended seed.
|
||||
|
||||
The settings/logs project read/write/search tools SHALL refuse project names that do not already exist, except for `create_project`.
|
||||
|
||||
The `search` and `search_projects` tools SHALL support an optional glob file pattern that limits searched project files.
|
||||
|
||||
#### Scenario: Settings/logs agent creates a recommended project
|
||||
- **WHEN** the settings/logs agent creates project `Alpha` with the recommended seed
|
||||
- **THEN** Meeting Assistant creates the `Alpha` project folder
|
||||
- **AND** writes `AGENTS.md` from the bundled `Project-AGENTS.md`
|
||||
- **AND** writes starter `PROJECT.md`, `JOURNAL.md`, and `DECISIONS.md` files
|
||||
|
||||
#### Scenario: Settings/logs agent writes direct project instructions
|
||||
- **WHEN** the settings/logs agent creates project `Beta` with direct `AGENTS.md` content
|
||||
- **THEN** Meeting Assistant creates the `Beta` project folder
|
||||
- **AND** writes that content to `AGENTS.md`
|
||||
|
||||
#### Scenario: Settings/logs agent searches existing projects by file glob
|
||||
- **GIVEN** existing projects contain markdown and non-markdown files
|
||||
- **WHEN** the settings/logs agent searches projects with file pattern `*.md`
|
||||
- **THEN** Meeting Assistant returns matches from matching markdown files
|
||||
- **AND** excludes non-matching files
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
## MODIFIED Requirements
|
||||
### Requirement: Recording mode is controlled by a configurable hotkey
|
||||
Meeting Assistant SHALL let the user start and stop recording mode through a configurable global hotkey.
|
||||
|
||||
Meeting Assistant SHALL treat recordings stopped before the configured `Recording:MinimumCompletedMeetingDuration` as aborted runs, deleting run artifacts and skipping summary generation.
|
||||
|
||||
Meeting Assistant SHALL name generated summary and assistant-context artifacts with minute precision so routine completed meetings do not include seconds or sub-second randomness in those filenames.
|
||||
|
||||
#### Scenario: Same-minute run is treated as abort
|
||||
- **GIVEN** `Recording:MinimumCompletedMeetingDuration` is `00:01:00`
|
||||
- **WHEN** a recording is started and stopped before one minute has elapsed
|
||||
- **THEN** Meeting Assistant deletes the run artifacts
|
||||
- **AND** skips summary generation
|
||||
|
||||
#### Scenario: Summary artifact names use minute precision
|
||||
- **WHEN** a recording starts at `2026-05-30T09:30:30`
|
||||
- **THEN** Meeting Assistant uses `20260530-0930-summary.md` for the summary artifact filename
|
||||
- **AND** uses `20260530-0930-assistant-context.md` for the assistant context artifact filename
|
||||
+144
@@ -0,0 +1,144 @@
|
||||
## 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
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
## MODIFIED Requirements
|
||||
### Requirement: Meeting Assistant generates meeting outputs
|
||||
Meeting Assistant SHALL generate a summary, decisions, and next steps from the meeting transcript, metadata, user notes, and assistant-discovered context.
|
||||
|
||||
All summary-agent read tools that return file-like content SHALL support reading the whole file, reading a clamped inclusive 1-based line range when `from` and `to` are supplied, or reading the last `tail` lines when `tail` is supplied without a line range.
|
||||
|
||||
The `write_summary` tool SHALL return the written summary filename after writing the summary note.
|
||||
|
||||
The summary-agent `search` tool SHALL support an optional glob file pattern that limits searched project files.
|
||||
|
||||
The settings/logs agent SHALL be able to list recent meeting summary notes from the configured summaries folder ordered newest first by meeting start time, falling back to file modification time when summary frontmatter has no parseable start time.
|
||||
|
||||
The settings/logs agent SHALL be able to read and search meeting summaries, transcripts, meeting notes, and assistant context files from their configured vault folders so it can help post-process notes for the user.
|
||||
|
||||
The settings/logs agent SHALL be able to create and update meeting summaries, transcripts, meeting notes, and assistant context files inside their configured vault folders.
|
||||
|
||||
The settings/logs agent SHALL provide frontmatter-specific write tools for meeting summaries, transcripts, meeting notes, and assistant context files that replace YAML frontmatter while preserving the markdown body.
|
||||
|
||||
Settings/logs meeting artifact read tools SHALL support reading the whole file, reading a clamped inclusive 1-based line range when `from` and `to` are supplied, or reading the last `tail` lines when `tail` is supplied without a line range.
|
||||
|
||||
Settings/logs meeting artifact search tools SHALL support an optional glob file pattern that limits searched markdown files.
|
||||
|
||||
#### Scenario: Summary read tools support tail
|
||||
- **WHEN** the summary agent reads a transcript with `tail` set to `2`
|
||||
- **THEN** Meeting Assistant returns the last two transcript lines
|
||||
|
||||
#### Scenario: Summary write returns filename
|
||||
- **WHEN** the summary agent writes the current meeting summary
|
||||
- **THEN** Meeting Assistant returns the written summary filename
|
||||
|
||||
#### Scenario: Summary search is limited by file pattern
|
||||
- **GIVEN** a bound project has `PROJECT.md` and `scratch.txt`
|
||||
- **WHEN** the summary agent searches with file pattern `*.md`
|
||||
- **THEN** Meeting Assistant searches `PROJECT.md`
|
||||
- **AND** excludes `scratch.txt`
|
||||
|
||||
#### Scenario: Settings/logs agent lists and reads recent meeting artifacts
|
||||
- **GIVEN** the configured summary folder contains multiple summary notes with start times
|
||||
- **WHEN** the settings/logs agent lists recent summaries
|
||||
- **THEN** Meeting Assistant returns the summary notes newest first
|
||||
- **AND** includes relative paths for the linked meeting note, transcript, and assistant context when those links resolve to configured artifact folders
|
||||
- **WHEN** the settings/logs agent reads one of those artifact paths with `tail`
|
||||
- **THEN** Meeting Assistant returns only the requested last lines
|
||||
|
||||
#### Scenario: Settings/logs agent searches meeting artifacts
|
||||
- **GIVEN** meeting summaries, transcripts, notes, and assistant context files contain searchable text
|
||||
- **WHEN** the settings/logs agent searches the relevant artifact class
|
||||
- **THEN** Meeting Assistant returns relative `path:line` matches from that configured artifact folder
|
||||
- **AND** refuses read paths that escape their configured artifact folder
|
||||
|
||||
#### Scenario: Settings/logs agent repairs meeting artifact files
|
||||
- **GIVEN** an existing meeting note with YAML frontmatter and a markdown body
|
||||
- **WHEN** the settings/logs agent writes replacement frontmatter for that note
|
||||
- **THEN** Meeting Assistant validates the supplied frontmatter YAML
|
||||
- **AND** replaces only the frontmatter while preserving the body
|
||||
- **WHEN** the settings/logs agent writes a summary, transcript, meeting note, or assistant context path outside the configured folder
|
||||
- **THEN** Meeting Assistant refuses the write
|
||||
@@ -0,0 +1,28 @@
|
||||
## 1. Specification
|
||||
- [x] 1.1 Add OpenSpec scenarios for the generalized settings/logs assistant.
|
||||
- [x] 1.2 Move configuration docs into `docs/meeting-assistant-configuration.md` and keep README as an overview.
|
||||
- [x] 1.3 Update AGENTS.md with application context for future agents.
|
||||
|
||||
## 2. Tests
|
||||
- [x] 2.1 Cover user-facing tray/window/placeholder rename behavior.
|
||||
- [x] 2.2 Cover config read/write validation tools.
|
||||
- [x] 2.3 Cover config docs tool.
|
||||
- [x] 2.4 Cover log tail/range/search tools and file logging rotation.
|
||||
- [x] 2.5 Cover copied spec read/search tools and scoped path handling.
|
||||
- [x] 2.6 Cover project creation, project read/write/search, read tail, search glob, summary filename return, and short-run abort behavior.
|
||||
- [x] 2.7 Cover settings/logs recent-summary listing and meeting artifact read/search tools.
|
||||
- [x] 2.8 Cover settings/logs meeting artifact write/frontmatter repair tools and in-process diagnostic tool availability.
|
||||
- [x] 2.9 Cover summary frontmatter copying clean, distinct meeting projects.
|
||||
- [x] 2.10 Cover speaker identity tools refusing sampleless identity creation and last-sample deletion.
|
||||
|
||||
## 3. Implementation
|
||||
- [x] 3.1 Add app-owned temp-file logging with four older rotated files.
|
||||
- [x] 3.2 Add settings/logs tools to the editor agent pipeline.
|
||||
- [x] 3.3 Update instructions, UI title/menu text, and docs copy settings.
|
||||
- [x] 3.4 Add recursive spec markdown copy to build and publish output.
|
||||
- [x] 3.5 Run focused tests and strict OpenSpec validation.
|
||||
- [x] 3.6 Add settings/logs project tools, bundled Project-AGENTS.md seed content, summary filename return, minute-level summary/context names, and configurable short-run abort.
|
||||
- [x] 3.7 Add settings/logs tools for recent summaries and summary/transcript/note/context read/search.
|
||||
- [x] 3.8 Add settings/logs tools for summary/transcript/note/context writes, frontmatter repair, and diagnostics that previously required HTTP.
|
||||
- [x] 3.9 Normalize copied meeting projects when writing summary frontmatter.
|
||||
- [x] 3.10 Harden speaker identity writes so overrides, creation tools, and sample deletion cannot leave sampleless identities.
|
||||
Reference in New Issue
Block a user