Files
noteflow/example.env
Travis Vasceannie 0a18f2d23d chore: update linting artifacts
- Updated basedpyright linting results (705 files analyzed, analysis time reduced from 22.928s to 13.105s).
- Updated biome linting artifact with warning about unnecessary hook dependency (preferencesVersion) in MeetingDetail.tsx.
2026-01-08 21:45:05 -05:00

589 lines
20 KiB
Bash

# ============================================================================
# NoteFlow Configuration
# ============================================================================
# Copy this file to .env and customize as needed.
# All NOTEFLOW_* variables are used by both backend and client where applicable.
# VITE_* variables are used by the frontend build process.
# ============================================================================
# Backend (Python) - Database
# ============================================================================
# PostgreSQL connection URL with asyncpg driver
# Format: postgresql+asyncpg://user:password@host:port/database
NOTEFLOW_DATABASE_URL=postgresql+asyncpg://user:pass@localhost:5432/noteflow
# Database connection pool size
# Range: 1-50, Default: 5
NOTEFLOW_DB_POOL_SIZE=5
# Echo SQL statements to log (for debugging)
# Values: true|false, Default: false
NOTEFLOW_DB_ECHO=false
# ============================================================================
# Backend (Python) - ASR (Automatic Speech Recognition)
# ============================================================================
# Whisper model size (larger = more accurate but slower)
# Values: tiny|tiny.en|base|base.en|small|small.en|medium|medium.en|large-v1|large-v2|large-v3
# Default: base
NOTEFLOW_ASR_MODEL_SIZE=base
# ASR device for inference
# Values: cpu|cuda, Default: cpu
NOTEFLOW_ASR_DEVICE=cpu
# ASR compute precision (int8 = fastest, float32 = most accurate)
# Values: int8|float16|float32, Default: int8
NOTEFLOW_ASR_COMPUTE_TYPE=int8
# ============================================================================
# Backend (Python) - Server / Storage
# ============================================================================
# gRPC server port
# Range: 1-65535, Default: 50051
NOTEFLOW_GRPC_PORT=50051
# Directory for meeting audio and metadata storage
# Default: ~/.noteflow/meetings
NOTEFLOW_MEETINGS_DIR=~/.noteflow/meetings
# Server logging level
# Values: DEBUG|INFO|WARNING|ERROR, Default: INFO
NOTEFLOW_LOG_LEVEL=INFO
# Server log format
# Values: auto|json|text, Default: auto
NOTEFLOW_LOG_FORMAT=auto
# ============================================================================
# Backend (Python) - gRPC Streaming
# ============================================================================
# Maximum gRPC chunk size in megabytes
# Range: 1-100 MB, Default: 1
NOTEFLOW_GRPC_MAX_CHUNK_SIZE_MB=1
# Timeout for receiving audio chunks (seconds)
# Range: 0.01-10.0, Default: 0.1
NOTEFLOW_GRPC_CHUNK_TIMEOUT_SECONDS=0.1
# Maximum audio queue size (number of chunks)
# Range: 100-10000, Default: 1000
NOTEFLOW_GRPC_QUEUE_MAX_SIZE=1000
# Interval for emitting partial transcripts (seconds)
# Range: 0.5-10.0, Default: 2.0
NOTEFLOW_GRPC_PARTIAL_CADENCE_SECONDS=2.0
# Minimum audio duration before partial inference (seconds)
# Range: 0.1-5.0, Default: 0.5
NOTEFLOW_GRPC_MIN_PARTIAL_AUDIO_SECONDS=0.5
# ============================================================================
# Backend (Python) - Retention
# ============================================================================
# Enable automatic retention policy for completed meetings
# Values: true|false, Default: false
NOTEFLOW_RETENTION_ENABLED=false
# Days to retain completed meetings before deletion
# Range: 1-3650 (10 years), Default: 90
NOTEFLOW_RETENTION_DAYS=90
# Hours between retention policy checks
# Range: 1-168 (1 week), Default: 24
NOTEFLOW_RETENTION_CHECK_INTERVAL_HOURS=24
# ============================================================================
# Backend (Python) - Diarization
# ============================================================================
# Enable speaker diarization (identify who spoke when)
# Values: true|false, Default: false
NOTEFLOW_DIARIZATION_ENABLED=false
# HuggingFace token for accessing pyannote.audio models
# Required if diarization is enabled, Default: (empty)
NOTEFLOW_DIARIZATION_HF_TOKEN=
# Device for diarization inference
# Values: auto|cpu|cuda|mps, Default: auto
NOTEFLOW_DIARIZATION_DEVICE=auto
# Streaming diarization latency in seconds (lower = faster but less accurate)
# Range: 0.1-5.0, Default: 0.5
NOTEFLOW_DIARIZATION_STREAMING_LATENCY=0.5
# Minimum expected number of speakers
# Range: 1-20, Default: 1
NOTEFLOW_DIARIZATION_MIN_SPEAKERS=1
# Maximum expected number of speakers
# Range: 1-50, Default: 10
NOTEFLOW_DIARIZATION_MAX_SPEAKERS=10
# Enable post-meeting diarization refinement (higher quality, slower)
# Values: true|false, Default: true
NOTEFLOW_DIARIZATION_REFINEMENT_ENABLED=true
# Hours to retain diarization job records in database
# Range: 1-168 (1 week), Default: 1
NOTEFLOW_DIARIZATION_JOB_TTL_HOURS=1
# ============================================================================
# Backend (Python) - Encryption
# ============================================================================
# Master encryption key for headless deployments (base64-encoded 32-byte key)
# If not set, uses system keyring for key storage
# Format: base64-encoded 32 bytes (256 bits)
NOTEFLOW_MASTER_KEY=
# ============================================================================
# Backend (Python) - Trigger Detection
# ============================================================================
# Enable smart recording triggers (opt-in feature)
# Values: true|false, Default: false
NOTEFLOW_TRIGGER_ENABLED=false
# Auto-start recording on high confidence trigger (without prompt)
# Values: true|false, Default: false
NOTEFLOW_TRIGGER_AUTO_START=false
# Minimum minutes between trigger prompts (rate limiting)
# Range: 1-60, Default: 10
NOTEFLOW_TRIGGER_RATE_LIMIT_MINUTES=10
# Default snooze duration in minutes
# Range: 5-480 (8 hours), Default: 30
NOTEFLOW_TRIGGER_SNOOZE_MINUTES=30
# Trigger polling interval in seconds
# Range: 0.5-30.0, Default: 2.0
NOTEFLOW_TRIGGER_POLL_INTERVAL_SECONDS=2.0
# Confidence threshold below which triggers are ignored (0.0-1.0)
# Range: 0.0-1.0, Default: 0.4
NOTEFLOW_TRIGGER_CONFIDENCE_IGNORE=0.4
# Confidence threshold for auto-start recording (0.0-1.0)
# Range: 0.0-1.0, Default: 0.8
NOTEFLOW_TRIGGER_CONFIDENCE_AUTO=0.8
# Audio signal configuration
# Enable app audio activity detection
# Values: true|false, Default: true
NOTEFLOW_TRIGGER_AUDIO_ENABLED=true
# Audio activity threshold in decibels
# Range: -60.0 to 0.0 dB, Default: -40.0
NOTEFLOW_TRIGGER_AUDIO_THRESHOLD_DB=-40.0
# Audio activity analysis window in seconds
# Range: 1.0-30.0, Default: 5.0
NOTEFLOW_TRIGGER_AUDIO_WINDOW_SECONDS=5.0
# Minimum active ratio in window to trigger (0.0-1.0)
# Range: 0.0-1.0, Default: 0.6
NOTEFLOW_TRIGGER_AUDIO_MIN_ACTIVE_RATIO=0.6
# Minimum samples before evaluating audio trigger
# Range: 1-200, Default: 10
NOTEFLOW_TRIGGER_AUDIO_MIN_SAMPLES=10
# Maximum audio activity samples to retain in history
# Range: 10-1000, Default: 50
NOTEFLOW_TRIGGER_AUDIO_MAX_HISTORY=50
# Calendar signal configuration
# Enable calendar-based trigger detection
# Values: true|false, Default: false
NOTEFLOW_TRIGGER_CALENDAR_ENABLED=false
# Minutes before event start to trigger
# Range: 0-60, Default: 5
NOTEFLOW_TRIGGER_CALENDAR_LOOKAHEAD_MINUTES=5
# Minutes after event start to keep triggering
# Range: 0-60, Default: 5
NOTEFLOW_TRIGGER_CALENDAR_LOOKBEHIND_MINUTES=5
# Calendar events as JSON list (for testing without OAuth)
# Format: JSON array of {start, end, title} objects, Default: []
NOTEFLOW_TRIGGER_CALENDAR_EVENTS=[]
# Foreground-app signal configuration
# Enable foreground app detection
# Values: true|false, Default: true
NOTEFLOW_TRIGGER_FOREGROUND_ENABLED=true
# Meeting app name substrings to detect (comma-separated, case-insensitive)
# Default: zoom,teams,microsoft teams,meet,google meet,slack,webex,discord,skype,gotomeeting,facetime,webinar,ringcentral
NOTEFLOW_TRIGGER_MEETING_APPS=zoom,teams,microsoft teams,meet,google meet,slack,webex,discord,skype,gotomeeting,facetime,webinar,ringcentral
# Meeting app substrings to ignore (comma-separated)
# Default: (empty)
NOTEFLOW_TRIGGER_SUPPRESSED_APPS=
# Signal weights (must sum to ~1.0 for meaningful confidence scores)
# Audio signal confidence weight (0.0-1.0)
# Range: 0.0-1.0, Default: 0.30
NOTEFLOW_TRIGGER_WEIGHT_AUDIO=0.30
# Foreground app signal confidence weight (0.0-1.0)
# Range: 0.0-1.0, Default: 0.40
NOTEFLOW_TRIGGER_WEIGHT_FOREGROUND=0.40
# Calendar signal confidence weight (0.0-1.0)
# Range: 0.0-1.0, Default: 0.30
NOTEFLOW_TRIGGER_WEIGHT_CALENDAR=0.30
# ============================================================================
# Backend (Python) - Webhooks
# ============================================================================
# Webhook HTTP request timeout in seconds
# Range: 1.0-60.0, Default: 10.0
NOTEFLOW_WEBHOOK_TIMEOUT_SECONDS=10.0
# Maximum webhook delivery attempts (retries)
# Range: 0-10, Default: 3
NOTEFLOW_WEBHOOK_MAX_RETRIES=3
# Exponential backoff multiplier for webhook retries
# Range: 1.1-5.0, Default: 2.0
NOTEFLOW_WEBHOOK_BACKOFF_BASE=2.0
# Maximum response body length to log (characters)
# Range: 100-10000, Default: 500
NOTEFLOW_WEBHOOK_MAX_RESPONSE_LENGTH=500
# ============================================================================
# Backend (Python) - LLM / Summarization
# ============================================================================
# Temperature for LLM inference (higher = more creative, lower = more focused)
# Range: 0.0-2.0, Default: 0.3
NOTEFLOW_LLM_TEMPERATURE=0.3
# Default OpenAI model for summarization
# Examples: gpt-4o-mini, gpt-4o, gpt-4-turbo, Default: gpt-4o-mini
NOTEFLOW_LLM_DEFAULT_OPENAI_MODEL=gpt-4o-mini
# Default Anthropic model for summarization
# Examples: claude-3-haiku-20240307, claude-3-5-sonnet-20241022, Default: claude-3-haiku-20240307
NOTEFLOW_LLM_DEFAULT_ANTHROPIC_MODEL=claude-3-haiku-20240307
# Timeout for LLM requests in seconds
# Range: 10.0-300.0, Default: 60.0
NOTEFLOW_LLM_TIMEOUT_SECONDS=60.0
# ============================================================================
# Backend (Python) - Ollama (Local LLM)
# ============================================================================
# Ollama server host URL
# Default: http://localhost:11434
OLLAMA_HOST=http://localhost:11434
# Ollama model name
# Examples: llama3.2, llama3.1, mistral, Default: llama3.2
OLLAMA_MODEL=llama3.2
# Timeout for Ollama requests in seconds
# Range: 10.0-600.0, Default: 120.0
NOTEFLOW_OLLAMA_TIMEOUT_SECONDS=120.0
# ============================================================================
# Backend (Python) - Feature Flags
# ============================================================================
# Enable AI summarization templates feature
# Values: true|false, Default: true
NOTEFLOW_FEATURE_TEMPLATES_ENABLED=true
# Enable PDF export format (requires WeasyPrint)
# Values: true|false, Default: true
NOTEFLOW_FEATURE_PDF_EXPORT_ENABLED=true
# Enable named entity recognition (requires spaCy model download)
# Values: true|false, Default: false
NOTEFLOW_FEATURE_NER_ENABLED=false
# Enable calendar integration (requires OAuth setup)
# Values: true|false, Default: false
NOTEFLOW_FEATURE_CALENDAR_ENABLED=false
# Enable webhook notifications
# Values: true|false, Default: true
NOTEFLOW_FEATURE_WEBHOOKS_ENABLED=true
# ============================================================================
# Backend (Python) - Calendar Integration
# ============================================================================
# Google OAuth client ID (from Google Cloud Console)
# Default: (empty)
NOTEFLOW_CALENDAR_GOOGLE_CLIENT_ID=
# Google OAuth client secret (from Google Cloud Console)
# Default: (empty)
NOTEFLOW_CALENDAR_GOOGLE_CLIENT_SECRET=
# Microsoft OAuth client ID (from Azure Portal)
# Default: (empty)
NOTEFLOW_CALENDAR_OUTLOOK_CLIENT_ID=
# Microsoft OAuth client secret (from Azure Portal)
# Default: (empty)
NOTEFLOW_CALENDAR_OUTLOOK_CLIENT_SECRET=
# OAuth callback URI (must match redirect URI in OAuth provider)
# Production: noteflow://oauth/callback (deep link for Tauri desktop app)
# Testing: http://localhost:8080/oauth/callback (requires manual code extraction)
# Default: noteflow://oauth/callback
NOTEFLOW_CALENDAR_REDIRECT_URI=noteflow://oauth/callback
# Hours to look ahead for calendar events
# Range: 1-168 (1 week), Default: 24
NOTEFLOW_CALENDAR_SYNC_HOURS_AHEAD=24
# Maximum events to fetch per sync
# Range: 1-100, Default: 20
NOTEFLOW_CALENDAR_MAX_EVENTS=20
# Calendar sync interval in minutes
# Range: 1-1440 (24 hours), Default: 15
NOTEFLOW_CALENDAR_SYNC_INTERVAL_MINUTES=15
# ============================================================================
# Client (Tauri/Rust) - Server Connection
# ============================================================================
# Default server address (host:port)
# Default: localhost:50051
NOTEFLOW_SERVER_ADDRESS=localhost:50051
# Server URL override (overrides NOTEFLOW_SERVER_ADDRESS if set)
# Format: http://host:port or https://host:port
# Default: (empty)
NOTEFLOW_SERVER_URL=
# Connection timeout in seconds
# Default: 5
NOTEFLOW_CONNECT_TIMEOUT_SECS=5
# Request timeout in seconds
# Default: 30
NOTEFLOW_REQUEST_TIMEOUT_SECS=30
# Keep-alive interval for gRPC connections in seconds
# Default: 30
NOTEFLOW_KEEP_ALIVE_SECS=30
# Maximum retry attempts for failed requests
# Default: 3
NOTEFLOW_MAX_RETRIES=3
# Retry backoff base delay in milliseconds
# Default: 1000
NOTEFLOW_RETRY_BACKOFF_MS=1000
# ============================================================================
# Client (Tauri/Rust) - UI
# ============================================================================
# Remote UI URL override (loads remote frontend in webview)
# Example: https://app.example.com
# Default: (empty)
NOTEFLOW_UI_URL=
# ============================================================================
# Client (Tauri/Rust) - Audio Capture
# ============================================================================
# Audio sample rate in Hz
# Default: 16000
NOTEFLOW_SAMPLE_RATE=16000
# Number of audio channels (1 = mono, 2 = stereo)
# Default: 1
NOTEFLOW_AUDIO_CHANNELS=1
# Audio buffer size in frames
# Default: 1024
NOTEFLOW_AUDIO_BUFFER_SIZE=1024
# Audio capture poll interval in milliseconds
# Default: 200
NOTEFLOW_CAPTURE_POLL_MS=200
# Audio channel buffer capacity (number of chunks)
# Default: 128
NOTEFLOW_CHANNEL_BUFFER_CAPACITY=128
# Minimum dB level for audio visualization (silence threshold)
# Range: -60.0 to 0.0 dB, Default: -60.0
NOTEFLOW_MIN_DB_LEVEL=-60.0
# Maximum dB level for audio visualization
# Range: -60.0 to 0.0 dB, Default: 0.0
NOTEFLOW_MAX_DB_LEVEL=0.0
# VU meter update rate in Hz (updates per second)
# Default: 20
NOTEFLOW_VU_UPDATE_RATE=20
# Disable native audio monitoring (app audio activity detection)
# Values: 1|true to disable, Default: (empty)
NOTEFLOW_DISABLE_AUDIO_MONITOR=
# Disable audio device listing/selection
# Values: 1|true to disable, Default: (empty)
NOTEFLOW_DISABLE_AUDIO_DEVICES=
# Disable native audio capture
# Values: 1|true to disable, Default: (empty)
NOTEFLOW_DISABLE_AUDIO_CAPTURE=
# Disable audio tests
# Values: 1|true to disable, Default: (empty)
NOTEFLOW_DISABLE_AUDIO_TESTS=
# ============================================================================
# Client (Tauri/Rust) - Storage
# ============================================================================
# Enable audio encryption (AES-GCM)
# Values: true|false, Default: true
NOTEFLOW_ENCRYPT_AUDIO=true
# Maximum audio file size in bytes
# Default: 524288000 (500 MB)
NOTEFLOW_MAX_AUDIO_SIZE=524288000
# ============================================================================
# Client (Tauri/Rust) - Trigger Detection
# ============================================================================
# Enable trigger detection
# Values: true|false|1|0, Default: false
NOTEFLOW_TRIGGERS_ENABLED=false
# Trigger polling interval in seconds (minimum 1)
# Default: 5
NOTEFLOW_TRIGGER_POLL_SECS=5
# Default snooze duration in seconds (minimum 1)
# Default: 300 (5 minutes)
NOTEFLOW_SNOOZE_DURATION_SECS=300
# Auto-start threshold (confidence 0.0-1.0)
# Range: 0.0-1.0, Default: 0.8
NOTEFLOW_AUTO_START_THRESHOLD=0.8
# Meeting app name substrings to detect (comma-separated, case-insensitive)
# Default: zoom,teams,microsoft teams,meet,google meet,slack,webex,discord,skype,gotomeeting,facetime,ringcentral
NOTEFLOW_MEETING_APPS=zoom,teams,microsoft teams,meet,google meet,slack,webex,discord,skype,gotomeeting,facetime,ringcentral
# Maximum dismissed triggers to track (LRU eviction)
# Default: 100
NOTEFLOW_MAX_DISMISSED_TRIGGERS=100
# Foreground app trigger confidence weight (0.0-1.0)
# Range: 0.0-1.0, Default: 0.6
NOTEFLOW_FOREGROUND_APP_WEIGHT=0.6
# ============================================================================
# Client (Tauri/Rust) - Cache
# ============================================================================
# Cache backend type
# Values: memory|redis|none|disabled, Default: memory
NOTEFLOW_CACHE_BACKEND=memory
# Redis URL (required if cache backend is redis)
# Format: redis://host:port/db, Default: redis://localhost:6379/0
NOTEFLOW_REDIS_URL=redis://localhost:6379/0
# Default TTL for cached items in seconds
# Default: 300 (5 minutes)
NOTEFLOW_CACHE_TTL_SECS=300
# Maximum memory cache items
# Default: 1000
NOTEFLOW_CACHE_MAX_ITEMS=1000
# ============================================================================
# Frontend (Vite/React)
# ============================================================================
# Note: Vite automatically exposes import.meta.env.MODE (development/production)
# and import.meta.env.BASE_URL, but these don't need to be configured here.
# Development mode flag (controls developer-only UI)
# Values: true|false, Default: (auto via Vite mode)
VITE_DEV_MODE=
# E2E mode flag (enables test-only UI behaviors)
# Values: true|false|1|0, Default: false
VITE_E2E_MODE=false
# Application version string (displayed in Settings)
# Default: dev
VITE_APP_VERSION=dev
# Ollama API endpoint URL (override default)
# Default: http://localhost:11434/api
VITE_OLLAMA_ENDPOINT=http://localhost:11434/api
# ============================================================================
# Optional LLM Provider API Keys
# ============================================================================
OPENAI_API_KEY=
OPENAI_BASE_URL=https://api.openai.com/v1
ANTHROPIC_API_KEY=
# ============================================================================
# Device Test Harness (Desktop)
# ============================================================================
# Enable device integration tests
# Values: 1|true|0|false, Default: 0
NOTEFLOW_DEVICE_TESTS=0
# Test input device name (leave empty to use system default)
# Find device names:
# macOS: system_profiler SPAudioDataType | grep "Manufacturer\|_name"
# Linux: arecord -l (input) / aplay -l (output)
# Windows: Check Sound settings > Device properties
# Default: (empty, uses system default)
NOTEFLOW_TEST_INPUT_DEVICE=
# Test output device name (leave empty to use system default)
# Default: (empty, uses system default)
NOTEFLOW_TEST_OUTPUT_DEVICE=
# Test sample rate in Hz (typically matches NOTEFLOW_SAMPLE_RATE)
# Default: 16000
NOTEFLOW_TEST_SAMPLE_RATE=16000
# Test channels (typically matches NOTEFLOW_AUDIO_CHANNELS)
# Default: 1 (mono)
NOTEFLOW_TEST_CHANNELS=1
# ============================================================================
# E2E / Integration Testing
# ============================================================================
# Enable web E2E tests
# Values: 1|true|0|false, Default: 0
NOTEFLOW_E2E=0
# Base URL for Playwright E2E tests
# Default: http://localhost:1420
NOTEFLOW_E2E_BASE_URL=http://localhost:1420
# Skip starting the Playwright web server
# Values: 1|true to skip, Default: (empty)
NOTEFLOW_E2E_NO_SERVER=
# Enable native E2E mode (Tauri) for extended timeouts
# Values: 1|true|0|false, Default: 0
NOTEFLOW_E2E_NATIVE=0
# Enable Rust gRPC integration tests
# Values: 1|true|0|false, Default: 0
NOTEFLOW_INTEGRATION=0
# gRPC URL for Rust integration tests
# Default: http://localhost:50051
NOTEFLOW_GRPC_URL=http://localhost:50051
# Workspace ID for webhook integration tests
# Default: (empty)
NOTEFLOW_WORKSPACE_ID=