360 Commits

Author SHA1 Message Date
ae594135f9 Enhance export tests to assert content type for Markdown format
- Added assertions to verify that the exported content from the ExportService is of type string for Markdown format in multiple test cases.
- Ensured consistency in testing the output of the export functionality across different formats.
2025-12-25 23:43:03 -05:00
758145e556 Update client submodule reference to latest commit c44cc19 for improved integration and feature alignment. 2025-12-25 23:40:15 -05:00
88f843c835 Add PDF export functionality using WeasyPrint
- Introduced `PdfExporter` class for exporting meeting transcripts to PDF format.
- Updated `ExportService` to support PDF as a new export format.
- Enhanced `proto_to_export_format` to handle PDF format.
- Added WeasyPrint as a dependency in `pyproject.toml` and `uv.lock`.
- Updated documentation to reflect the new PDF export capabilities and resolved issues from Sprint 3.
- Implemented tests for PDF export functionality, ensuring valid PDF output and proper handling of meeting data.
2025-12-25 23:39:56 -05:00
ee06c0f836 Update client submodule reference to latest commit 89fe624 for improved integration and feature alignment. 2025-12-25 23:21:13 -05:00
d285da3d36 Enhance mypy configuration and update roadmap documentation
- Updated `pyproject.toml` to include additional mypy exclusions and plugins for improved type checking.
- Added mypy overrides for specific modules to handle complex type parameters and untyped calls.
- Revised roadmap documentation to reflect changes in the Diarization Application Service, renaming it to "Diarization Enhancements" and updating feature descriptions for clarity.
- Adjusted architectural decisions to clarify the application service layer requirements for upcoming sprints.
2025-12-25 23:21:07 -05:00
58ad140f48 Complete Sprint 0: Proto & Schema Foundation
Sprint 0 consolidates all proto schema changes and database migrations
for Sprints 1-6 into a coordinated release.

Infrastructure:
- Add named_entities table migration with updated_at trigger
- Add webhook_configs and webhook_deliveries migrations
- Add httpx dependency for webhooks
- Multi-stage Docker build with NER support (with-ner target)
- Enable depends_on for db service in compose.yaml

Proto schema:
- Add SummarizationOptions message (Sprint 1)
- Add EXPORT_FORMAT_PDF enum value (Sprint 3)
- Add ExtractEntities RPC and messages (Sprint 4)
- Add Calendar RPCs and messages (Sprint 5)
- Proto regeneration script at scripts/regenerate_proto.sh

Tests:
- Add proto compilation tests verifying Sprint 0 messages
- Add feature flag tests with env var parsing
- Add migration structure and trigger tests

Documentation:
- Fix PROTO_CHANGELOG.md CalendarProvider field names
- Update COMPLETION_PLAN.md status to 100%

Client submodule updated with Sprint 0 TypeScript types.
2025-12-26 00:35:14 +00:00
ee12bcd89e Sprint 0: Proto & Schema Foundation
Consolidate proto/DB changes for Sprints 1-6 into coordinated release:

Proto Schema (Increment 0a):
- Add SummarizationOptions message with tone/format/verbosity fields
- Add EXPORT_FORMAT_PDF = 3 to ExportFormat enum
- Add NER messages: ExtractEntitiesRequest/Response, ExtractedEntity
- Add Calendar messages: CalendarEvent, ListCalendarEvents, CalendarProvider
- Add RPCs: ExtractEntities, ListCalendarEvents, GetCalendarProviders,
  InitiateCalendarAuth, CompleteCalendarAuth
- Regenerate Python proto stubs

Database Schema (Increment 0b):
- Add named_entities table for NER storage
- Add webhook_configs and webhook_deliveries tables

Migrations & ORM (Increment 0c):
- Create migration h2c3d4e5f6g7 for named_entities
- Create migration i3d4e5f6g7h8 for webhook tables
- Add NamedEntityModel, WebhookConfigModel, WebhookDeliveryModel
- Update MeetingModel and WorkspaceModel relationships

Dependencies & Config (Increment 0d):
- Add optional deps: pdf (weasyprint), ner (spacy), calendar (google-api)
- Add FeatureFlags class with NOTEFLOW_FEATURE_ env prefix
- Add models CLI for ML model downloads (spacy)
- Update CLI dispatcher for retention/models subcommands
- Create PROTO_CHANGELOG.md

Quality Fixes:
- Add ORM model names to ALLOWED_STRINGS in test_magic_values.py
- Add assertion messages to fix assertion roulette tests

Updates client submodule to c1783f8.
2025-12-25 14:48:37 -05:00
6fa792990b Enhance summarization model attributes and database schema
- Updated the Summary entity to include provider and model names, along with tokens used and latency metrics for better tracking of summarization performance.
- Modified the ORM converters and repository methods to accommodate new attributes, ensuring backward compatibility.
- Introduced word timing position indexing to maintain order within summaries.
- Added a new SQLAlchemy model structure for improved organization of persistence layers, including core, identity, and integration models.
- Removed deprecated models and files to streamline the codebase.
2025-12-25 13:46:00 -05:00
038f63866e Update client submodule reference and enhance Docker Compose configuration
- Updated client submodule to the latest commit af9dfce.
- Added a new frontend service in `compose.yaml` for development with Node.js, including necessary configurations for ports, volumes, and environment variables.
- Updated `example.env` to include default values for audio test parameters, improving clarity for device integration testing.
2025-12-24 13:01:17 -05:00
5df60507ea Refactor gRPC client architecture and add code quality testing
Backend:
- Extract gRPC client into modular mixins (_client_mixins/)
- Add StreamingSession class for audio streaming lifecycle
- Add gRPC config and type modules
- Fix test smells across test suite

Frontend (submodule update):
- Fix code quality issues and eliminate lint warnings
- Centralize CSS class constants
- Extract Settings.tsx sections into components
- Add code quality test suite

Quality:
- Add tests/quality/ suite for code smell detection
- Add QA report and correction plan documentation
2025-12-24 17:41:01 +00:00
95cb58aae7 Update client submodule reference and enhance README documentation for submodule usage 2025-12-23 22:26:11 +00:00
e30271175a Update submodule reference in client directory to latest commit c1b3342 2025-12-23 17:23:04 -05:00
6b335e4f1f Update submodule reference in client directory to latest commit 2025-12-23 17:10:29 -05:00
4e1921b939 Enhance documentation and configuration for NoteFlow
- Added a comprehensive MCP Tools Reference section in `CLAUDE.md`, detailing various tools and their use cases for web scraping, reasoning, library documentation, semantic code tools, and more.
- Updated `example.env` to reflect new configuration options for retention, diarization, encryption, and desktop client settings, improving clarity and usability.
- Introduced a new `roadmap.md` file outlining the feature gap analysis and development roadmap for NoteFlow, focusing on core pipeline completion and future enhancements.
- Updated submodule reference in the `client` directory to the latest commit.
2025-12-23 21:34:06 +00:00
9308583842 Add submodule for client repository
- Introduced a new submodule for the client located at `client`, pointing to the GitHub repository `https://github.com/vasceannie/noteflow-ai.git`.
- Updated `.gitmodules` to include the new submodule configuration.
2025-12-23 10:21:22 +00:00
3ea953c677 Add API specification and remove deprecated client files
- Introduced a new API specification file `noteflow-api-spec.json` detailing the real-time audio-to-text functionality.
- Removed obsolete client configuration files, including `.prettierrc.json`, `biome.json`, `index.html`, and various TypeScript configuration files.
- Deleted unused components and tests from the client directory to streamline the project structure.
2025-12-23 10:20:45 +00:00
4567d5a03c Update project documentation and configuration files
- Expanded `.gitignore` to include temporary files and scratch documents.
- Enhanced `AGENTS.md` with guidelines on using Conventional Commits and PR descriptions.
- Added configuration notes to `README.md` for environment variable usage.
- Updated `pyproject.toml` to reflect changes in dependencies and comments.
- Introduced new files for client configuration and testing, including Prettier settings and Playwright tests.
- Removed deprecated client components and adjusted related documentation accordingly.
- Added new tests for various components and functionalities to improve coverage.
2025-12-22 02:25:38 +00:00
f5c53d1319 Merge pull request #1 from vasceannie/claude/migrate-to-tauri-gKFhz
Migrate app client to Tauri framework
2025-12-21 02:03:00 -05:00
Claude
6a9fa7ec0d Update exists() for LRU and stats consistency
- Refresh last_access time via touch() for existing non-expired keys
- Track hits/misses in exists() for accurate cache statistics
- Use get_mut() to enable in-place modification of entries
2025-12-21 06:56:24 +00:00
Claude
4eda5ca638 Address code review feedback for robustness and security
Security:
- Sanitize export dialog inputs to prevent path injection (export.rs)
- Recover from corrupted encryption keys instead of failing startup (crypto)

State Consistency:
- Rollback connection state if get_server_info fails (grpc/client.rs)
- Use local clamped/duration values in seek response (playback.rs)
- Clear trigger_decision when snoozing triggers (triggers.rs)

Resource Cleanup:
- Clean up orphaned meetings on start_streaming failure (recording.rs)
- Use delimiter-terminated prefix for cache invalidation (tauri.ts)

Error Handling:
- Handle startup errors explicitly with error message (main.rs)
2025-12-21 05:57:26 +00:00
Claude
468ecc072d Add comprehensive test suite for Tauri client
Unit Tests (TypeScript):
- Store slices: connection, recording, meetings, playback, transcript, triggers
- Lib utilities: cache, utils, constants
- Hooks: useTauriEvents
- Components: ConnectionPanel, VuMeter

Unit Tests (Rust):
- Commands: playback, recording state management
- State: PlaybackState, TriggerSource/Action/Decision
- gRPC types: MeetingInfo, Segment, ServerInfo, etc.

E2E Tests (Playwright):
- Core application navigation
- Connection panel behavior
- View switching (Recording/Review/Library)
- Accessibility checks

Testing Infrastructure:
- vitest.config.ts with jsdom and coverage
- Test setup with Tauri API mocks
- Mock factories for test data
- Playwright config for web testing
- Updated package.json with test scripts
- Cargo.toml dev-dependencies (tokio-test, tempfile, mockall)
2025-12-21 05:53:11 +00:00
Claude
9bf3614e7c Fix borrow checker, error handling, and robustness issues
- Fix mutable/immutable borrow conflict in exists() by separating check from removal
- Reset recording state on gRPC stop_meeting failure to prevent stuck UI
- Clean up orphaned meetings on start_streaming failure (best-effort)
- Return consistent state snapshots from seek/get_playback_state
- Replace expect() with proper error handling in CryptoBox::new()
- Use CommonJS format for PostCSS config for build tool compatibility
- Use deleteByPrefix for cache invalidation in stop() and delete()
- Move blocking file dialog to spawn_blocking to avoid UI freezes
- Prevent connection race conditions with attempt ID tracking
- Guard against missing root element with explicit check
2025-12-21 05:37:42 +00:00
Claude
bb5a28695d Improve cache cleanup, state handling, and error robustness
- Delete corrupt cached values on JSON parse failure (cache.ts)
- Preserve trigger_pending state on streaming failure for retry
- Construct IPC payload dynamically to omit undefined device_id
- Return PlaybackInfo from seek command for immediate UI updates
- Replace unwrap() with format! in hex_encode to avoid panic paths
2025-12-21 05:28:12 +00:00
Claude
e246676621 Address code review feedback for cache and event handling
- Prevent stuck recording state if no meeting exists on stop_recording
- Cache non-serializable values in memory fallback (RedisCache)
- Remove expired entries on exists() check in Rust MemoryCache
- Validate snooze duration inputs with bounds checking
- Clear stale server_address on gRPC disconnect
- Handle invalid (non-finite/negative) duration values in format_duration
2025-12-21 05:07:16 +00:00
Claude
7397180c0c Address code review: robustness and state consistency
Cache improvements (cache.ts):
- Handle JSON.parse errors in RedisCache.get as cache miss, not backend failure
- Pre-serialize in RedisCache.set to catch errors before triggering fallback
- Collect keys before deleting in deleteByPrefix to avoid mutation during iteration
- Skip caching null/undefined results in withCache and cached helpers

Event listener safety (useTauriEvents.ts):
- Use Promise.allSettled to handle individual listener failures gracefully
- Log failures but continue with successfully registered listeners

Config validation (config.ts):
- Route setSection through mergeConfig for consistent validation

Command safety (Rust):
- accept_trigger: Add guards for disconnected/already-recording states
- stop_recording: Update local state only after server acknowledges
- seek: Validate position is finite, clamp to valid range, clear highlight if no match
2025-12-21 05:00:37 +00:00
Claude
90d655b590 Fix invoke parameter names to use snake_case
Tauri does not translate between camelCase and snake_case parameter
names. All invoke calls must use snake_case to match Rust command
signatures. Fixed all 16 affected invoke calls:

- MeetingService: list (sort_desc), get, delete, select
- AnnotationService: add, get, list, update, delete
- SummaryService: generate
- ExportService: transcript, saveFile
- DiarizationService: refine, getJobStatus, renameSpeaker
- AudioService: selectDevice
2025-12-21 04:56:36 +00:00
Claude
42517d5178 Fix NoOpCache signatures and binary search overflow
- Add proper parameter names to NoOpCache method signatures for
  better code clarity and IDE support
- Use overflow-safe midpoint calculation in binary search:
  `left + (right - left) / 2` instead of `(left + right) / 2`
2025-12-21 04:51:30 +00:00
Claude
e4a5a16eef Fix bugs and improve robustness from code review
Bug fixes:
- Prevent infinite loop in MemoryCache.set when maxItems <= 0
- Fix keyring error handling to only generate new key on NoEntry error,
  propagating other errors to prevent accidental data loss
- Fix annotation list_annotations default end_time (0.0 -> f64::MAX)
  to correctly handle unbounded time ranges
- Move cache invalidation after successful delete to ensure atomicity

React improvements:
- Add mounted flag to App.tsx useEffect to prevent state updates on
  unmounted component
2025-12-21 04:46:47 +00:00
Claude
8fecb9950a Address code review feedback for cache and event handling
Cache fixes:
- Add deleteByPrefix to Cache interface for targeted invalidation
- Fix MeetingService.delete to properly invalidate parameterized list caches
- Fix invalidateCache to not clear unrelated entries (was using cache.clear())
- DRY up RedisCache with withFallback helper method
- Extract eviction logic into *_locked helpers in memory.rs

Event handling fix:
- Fix race condition in useTauriEvents where listeners registered after
  unmount would never be cleaned up. Now uses Promise.all with cancelled
  flag to handle cleanup atomically.
2025-12-21 04:39:31 +00:00
Claude
682757f2ac Fix security and robustness issues from code review
- Remove sensitive error logging in Redis fallback (avoid exposing credentials)
- Add try/catch to stats() JSON.stringify to handle circular references
- Add comprehensive config validation with type checking and bounds:
  - Server: timeout limits, retry bounds
  - Audio: sample rate and channel limits
  - UI: valid theme values, duration limits
  - Cache: valid backends, TTL and item limits
  - Security: redisUrl never loaded from localStorage
2025-12-21 04:34:28 +00:00
Claude
d1f9e4ea6b Remove legacy exports and migrate to api facade pattern
- Migrate all components to use api.* facade instead of individual function imports
- Remove 77 lines of backwards-compatibility function aliases from tauri.ts
- Components now use: api.connection, api.recording, api.meetings, api.playback,
  api.summary, api.export, api.triggers
2025-12-21 03:23:24 +00:00
Claude
c21b52a2d4 Fix bugs, race conditions, and improve thread safety
Rust fixes:
- memory.rs: Fix TOCTOU race condition in get() - use single write lock
- memory.rs: Fix race in set() - single lock for evict+insert+cleanup
- config.rs: Add validation for auto_start_threshold (clamp 0.0-1.0)
- config.rs: Add minimum bounds for poll_interval and snooze_duration
- helpers.rs: Fix division by zero in normalize_db_level when range is 0
- helpers.rs: Add test for zero-range edge case

TypeScript fixes:
- cache.ts: Fix race condition in RedisCache fallback switching
- cache.ts: Use atomic switchToFallback() with promise serialization
2025-12-21 03:14:01 +00:00
Claude
d9b139e7df Add centralized config and cache abstraction layer
Rust backend:
- Add config.rs with env-based configuration (server, audio, storage, triggers, cache)
- Add cache/ module with trait-based abstraction
- Implement MemoryCache with LRU eviction and TTL support
- Add CacheKey builder for consistent key formatting
- Add comprehensive tests for all modules

TypeScript frontend:
- Add config.ts with localStorage persistence and change subscriptions
- Add cache.ts with in-memory, Redis, and no-op backends
- Redis backend auto-fallbacks to memory if unavailable
- Add withCache() helper for transparent function caching
- Integrate caching into API services (meetings, connection)
- Automatic cache invalidation on mutations
2025-12-21 03:07:59 +00:00
Claude
4edbcce24a Centralize constants and extract utility helpers
- Add constants.rs for event names, gRPC settings, audio/crypto constants
- Add helpers.rs with now_timestamp(), new_id(), format_duration(), etc.
- Add constants.ts for frontend event names and type-safe constants
- Update all files to use centralized constants instead of hardcoded values
- Add comprehensive tests for helpers and constants
- Remove duplicate timestamp/UUID generation patterns
2025-12-21 02:54:21 +00:00
Claude
31b95848ef Improve thread safety and eliminate state duplication
Thread Safety & Race Conditions:
- GrpcClient: Group related state into ConnectionState and StreamingState
  structs with single RwLock each for atomic updates
- Connect/disconnect now update all connection fields in single lock
- Streaming state (meeting_id, active) updated atomically

State Duplication Eliminated:
- Remove connected and server_address from AppState (were duplicated)
- GrpcClient is now single source of truth for connection state
- AppState.get_status() reads from grpc_client.is_connected()
- Commands use grpc_client.is_connected() for connection checks

Lock Contention Optimization:
- Reduced from 5 individual locks in GrpcClient to 2 grouped locks
- ConnectionState: channel + server_address + connected
- StreamingState: meeting_id + active
2025-12-21 02:35:13 +00:00
Claude
f3f78de102 Fix bugs and improve code quality in Tauri client
Bug fixes:
- crypto/mod.rs: Rename base64_encode/decode to hex_encode/decode
  (they were actually hex encoding, not base64). Add validation for
  odd-length hex strings.
- app_state.rs: Fix tilde expansion in fallback meetings_dir path.
  Now properly uses BaseDirs::home_dir() or falls back to /tmp.
- recording.rs: Add atomic state checks and proper cleanup on error.
  If start_streaming fails after create_meeting, state is now cleaned up.
- useTauriEvents.ts: Fix event listener cleanup race condition.
  Use ref pattern to avoid re-subscribing, await all listeners before
  pushing to array, add mounted flag to prevent updates after unmount.
2025-12-21 02:26:17 +00:00
Claude
38ae0c5977 Add Tauri client build artifacts to gitignore 2025-12-21 01:41:40 +00:00
Claude
58b4a1ad8f Refactor Tauri client for DRY principles and type safety
- Rust gRPC client: Add proper error enum (GrpcError) with thiserror,
  add require_connection() helper to reduce duplication, rename
  ClientState for clarity
- Rust types: Add constructor methods (MeetingInfo::new/stopped,
  MeetingDetails::empty, AnnotationInfo::new, ExportResult::empty)
- TypeScript API: Refactor to facade pattern with service classes
  (ConnectionService, RecordingService, MeetingService, etc.) while
  maintaining backward-compatible function exports
- Zustand store: Split monolithic store into domain slices
  (connection, recording, transcript, playback, meetings, triggers, view)
- Fix unused variable warnings in PlaybackControls and SummaryPanel
2025-12-21 01:40:40 +00:00
Claude
8eefef3d23 Add Tauri client scaffolding for migration from Flet
This commit introduces the new Tauri-based client directory structure per
the migration specification in docs/ui.md. The migration replaces the
Python/Flet client with a Rust/Tauri + React/TypeScript architecture.

Rust Backend (src-tauri/):
- Tauri v2 configuration with plugins (dialog, fs, notification, global-shortcut)
- gRPC client implementation using tonic for server communication
- AppState management with thread-safe access patterns (parking_lot, tokio)
- Tauri commands for: connection, recording, meetings, annotations, summary,
  export, diarization, playback, triggers, and audio devices
- Audio capture/playback scaffolding using cpal/rodio
- AES-256-GCM encryption module for audio files
- Trigger detection service for auto-start functionality
- Event emitter helpers for frontend communication

React Frontend (src/):
- Vite + TypeScript + Tailwind CSS + shadcn/ui setup
- Complete TypeScript type definitions mirroring Rust types
- Zustand store with immer for state management
- Tauri API wrapper for all backend commands
- Tauri event listeners hook for real-time updates
- Core UI components:
  - ConnectionPanel: Server connection management
  - RecordingPanel: Start/stop recording controls
  - VuMeter: Real-time audio level visualization
  - PlaybackControls: Audio playback with seek
  - TranscriptView: Live transcript display with segment highlighting
  - SummaryPanel: AI summary generation and display
  - MeetingLibrary: Browse, select, export, delete meetings
  - TriggerDialog: Auto-start prompt with snooze options

The client connects to the existing Python gRPC server. All server-side logic
(ASR, diarization, summarization, persistence) remains unchanged.

Key dependencies:
- Rust: tauri 2.0, tonic, cpal, rodio, aes-gcm, keyring
- Frontend: react 18, zustand, tailwindcss, lucide-react, radix-ui
2025-12-21 01:21:54 +00:00
a10b393090 Remove repomix-output.md file to declutter project structure and improve organization 2025-12-21 01:02:25 +00:00
703a9f2670 Refactor Repomix configuration and update documentation
- Removed the `support/` and `tests/` directories from the Repomix configuration to streamline included files.
- Updated `repomix-output.md` to reflect the new file structure and clarify included patterns.
- Deleted the outdated `triage.md` document to reduce clutter and improve project organization.
- Introduced a new `ui.md` document detailing the migration plan for transitioning to a Rust/Tauri application, including architecture overview and feature parity checklist.
2025-12-21 01:02:11 +00:00
6b693ec9f6 Refactor Docker configuration and enhance database migration handling
- Commented out environment variables and dependencies in `compose.yaml` for clarity.
- Updated `ensure_schema_ready` function to check for existing database schema before running migrations.
- Added new integration tests for various components, including summarization, streaming, and error handling.
- Improved error handling and logging in the `RecoveryService` and `DiarizationJob` workflows.
- Enhanced the `SqlAlchemyUnitOfWork` to support advanced scenarios and edge cases in database operations.
2025-12-20 23:41:02 +00:00
e7ecea2be8 Refactor recording stop logic in NoteFlowClientApp
- Improved the `_stop_recording` method to stop the timer immediately for better visual feedback.
- Consolidated button state updates to ensure recording status is accurately reflected after stopping.
- Removed redundant timer stop logic from the end of the recording process, streamlining the code.
2025-12-20 17:34:33 -05:00
9ca144f2b5 Enhance audio recording control in NoteFlowClientApp
- Added guard against multiple stop attempts in the `_stop_recording` method to prevent erroneous state changes.
- Updated state management to immediately reflect recording status and disable the stop button accordingly.
- Removed redundant state reset logic after recording ends, streamlining the process.
2025-12-20 17:29:50 -05:00
cc9a7df54d Update Docker configuration, enhance dependencies, and improve migration handling
- Added environment file support and a command for the server in `compose.yaml`.
- Updated the database image in `compose.yaml` to use `pgvector/pgvector:pg15`.
- Modified `pyproject.toml` to include additional dependencies for enhanced functionality.
- Updated `uv.lock` to reflect new package versions and added new packages for improved features.
- Enhanced migration scripts to ensure the `noteflow` schema exists before running migrations.
- Improved error handling in the `OllamaSummarizer` to include a new exception type.
- Refactored the `calendar` trigger to streamline imports and improve code clarity.
- Added module-level mocks in test configurations to handle missing dependencies gracefully.
2025-12-20 16:49:47 -05:00
7f82e5f944 Update Docker configuration and enhance project dependencies
- Updated .dockerignore to include additional cache and environment files, improving build efficiency.
- Changed the Dockerfile reference in compose.yaml to point to the new server-specific Dockerfile.
- Added `diart` as a dependency in pyproject.toml and uv.lock to support enhanced diarization features.
- Created a new server.Dockerfile for a streamlined development environment setup with necessary dependencies.
2025-12-20 16:01:30 -05:00
d66aa6b958 Update configuration and enhance transcript component functionality
- Added `repomix-output.md` to `.gitignore` to exclude output files from version control.
- Updated `repomix.config.json` to include the `support/` directory in the include paths.
- Enhanced `TranscriptComponent` to improve search functionality with a debounce mechanism for input.
- Refactored search logic to filter visible segments based on the search query, ensuring better user experience.
- Updated `Meeting` and `Annotation` entities to use `utc_now()` for consistent UTC-aware timestamps.
- Introduced new repository protocols for `DiarizationJob` and `Preferences` to support additional functionalities.
- Implemented in-memory persistence for repositories to facilitate testing and development without a database.
- Added error handling and utility functions to streamline gRPC service responses and improve code maintainability.
2025-12-20 20:45:58 +00:00
a1fc7edeea Enhance recovery and summarization services with asset path management
- Added `asset_path` to the `Meeting` entity for audio asset storage.
- Implemented `AudioValidationResult` for audio integrity checks during recovery.
- Updated `RecoveryService` to validate audio file integrity for crashed meetings.
- Enhanced `SummarizationService` to include consent persistence callbacks.
- Introduced new database migrations for `diarization_jobs` and `user_preferences` tables.
- Refactored various components to support the new asset path and audio validation features.
- Improved documentation in `CLAUDE.md` to reflect changes in recovery and summarization functionalities.
2025-12-19 10:40:21 +00:00
b333ea5b23 Add initial Docker and development environment setup
- Created .dockerignore to exclude unnecessary files from Docker builds.
- Added .repomixignore for managing ignored patterns in Repomix.
- Introduced Dockerfile.dev for development environment setup with Python 3.12.
- Configured docker-compose.yaml to define services, including a PostgreSQL database.
- Established a devcontainer.json for Visual Studio Code integration.
- Implemented postCreate.sh for automatic dependency installation in the dev container.
- Added constants.py to centralize configuration constants for the project.
- Updated pyproject.toml to include new development dependencies.
- Created initial documentation files for project overview and style conventions.
- Added tests for new functionalities to ensure reliability and correctness.
2025-12-19 05:02:16 +00:00
b9297d9160 Add speaker diarization support and related configurations
- Introduced speaker diarization functionality using pyannote.audio and diart for both streaming and offline processing.
- Updated `pyproject.toml` to include new dependencies for diarization.
- Enhanced `TranscriptComponent` to handle speaker identification and color coding for speakers.
- Added new settings in `Settings` class for enabling and configuring diarization features.
- Updated `Segment` and gRPC models to include speaker ID and confidence metrics.
- Implemented a `DiarizationEngine` for managing diarization processes and speaker assignments.
- Created necessary database migrations to accommodate new speaker fields in segments.
- Added tests for audio reading and diarization functionalities to ensure reliability and correctness.
- Updated documentation to reflect new features and usage instructions for diarization.
2025-12-18 18:51:09 +00:00