dashboard sync app

This commit is contained in:
Tim Bendt
2025-12-16 17:13:26 -05:00
parent 73079f743a
commit d7c82a0da0
25 changed files with 4181 additions and 69 deletions

323
luk.egg-info/PKG-INFO Normal file
View File

@@ -0,0 +1,323 @@
Metadata-Version: 2.4
Name: luk
Version: 0.1.0
Summary: A CLI tool for syncing Microsoft Outlook email, calendar, and tasks to local file-based formats. Look at your Outlook data locally.
Author-email: Timothy Bendt <timothy@example.com>
License: MIT
Project-URL: Homepage, https://github.com/timothybendt/luk
Project-URL: Repository, https://github.com/timothybendt/luk
Project-URL: Issues, https://github.com/timothybendt/luk/issues
Project-URL: Documentation, https://github.com/timothybendt/luk#readme
Keywords: email,calendar,tasks,sync,cli,microsoft-graph,outlook,maildir,vdir
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: End Users/Desktop
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Communications :: Email
Classifier: Topic :: Office/Business :: Scheduling
Classifier: Topic :: Utilities
Requires-Python: >=3.12
Description-Content-Type: text/markdown
Requires-Dist: aiohttp>=3.11.18
Requires-Dist: certifi>=2025.4.26
Requires-Dist: click>=8.1.0
Requires-Dist: html2text>=2025.4.15
Requires-Dist: mammoth>=1.9.0
Requires-Dist: markitdown[all]>=0.1.1
Requires-Dist: msal>=1.32.3
Requires-Dist: openai>=1.78.1
Requires-Dist: orjson>=3.10.18
Requires-Dist: pillow>=11.2.1
Requires-Dist: python-dateutil>=2.9.0.post0
Requires-Dist: python-docx>=1.1.2
Requires-Dist: requests>=2.31.0
Requires-Dist: rich>=14.0.0
Requires-Dist: textual>=3.2.0
Requires-Dist: textual-image>=0.8.2
Requires-Dist: ticktick-py>=2.0.0
# luk
> Pronounced "look" - as in "look at your Outlook data locally"
A CLI tool for syncing Microsoft Outlook email, calendar, and tasks to local file-based formats like Maildir and vdir. Use your favorite terminal tools to manage your email and calendar.
## Features
- **Email Synchronization**: Sync emails with Microsoft Graph API to local Maildir format
- **Calendar Management**: Two-way calendar sync with vdir/ICS support
- **Task Integration**: Sync with Godspeed and TickTick task managers
- **TUI Dashboard**: Interactive terminal dashboard for monitoring sync progress
- **Daemon Mode**: Background daemon with proper Unix logging
- **Cross-Platform**: Works on macOS, Linux, and Windows
## Quick Start
### Prerequisites
- Python 3.12 or higher
- `uv` package manager (recommended)
### Installation
```bash
# Clone the repository
git clone https://github.com/timothybendt/luk.git
cd luk
# Run the installation script
./install.sh
```
### Manual Installation
```bash
# Create virtual environment
python3 -m venv .venv
source .venv/bin/activate
# Install dependencies
pip install -e .
# Setup configuration directories
mkdir -p ~/.config/luk
mkdir -p ~/.local/share/luk
```
## Configuration
Create a configuration file at `~/.config/luk/config.env`:
```bash
# Microsoft Graph settings
MICROSOFT_CLIENT_ID=your_client_id
MICROSOFT_TENANT_ID=your_tenant_id
# Email settings
MAILDIR_PATH=~/Mail
NOTES_DIR=~/Documents/Notes
# Godspeed settings
GODSPEED_EMAIL=your_email@example.com
GODSPEED_PASSWORD=your_password
GODSPEED_TOKEN=your_token
GODSPEED_SYNC_DIR=~/Documents/Godspeed
# TickTick settings
TICKTICK_CLIENT_ID=your_client_id
TICKTICK_CLIENT_SECRET=your_client_secret
```
## Usage
### Basic Commands
```bash
# Show help
luk --help
# Run sync with default settings
luk sync run
# Run with TUI dashboard
luk sync run --dashboard
# Start daemon mode
luk sync run --daemon
# Stop daemon
luk sync stop
# Check daemon status
luk sync status
```
### Sync Options
```bash
# Dry run (no changes)
luk sync run --dry-run
# Specify organization
luk sync run --org mycompany
# Enable notifications
luk sync run --notify
# Download attachments
luk sync run --download-attachments
# Two-way calendar sync
luk sync run --two-way-calendar
# Custom calendar directory
luk sync run --vdir ~/Calendars
```
### Dashboard Mode
The TUI dashboard provides real-time monitoring of sync operations:
- **Status Display**: Current sync status and metrics
- **Progress Bars**: Visual progress for each sync component
- **Activity Log**: Scrollable log of all sync activities
- **Keyboard Shortcuts**:
- `q`: Quit dashboard
- `l`: Toggle log visibility
- `r`: Refresh status
### Daemon Mode
Run luk as a background daemon with proper Unix logging:
```bash
# Start daemon
luk sync run --daemon
# Check status
luk sync status
# View logs
cat ~/.local/share/luk/luk.log
# Stop daemon
luk sync stop
```
Daemon logs are stored at `~/.local/share/luk/luk.log` with automatic rotation.
## Architecture
### Core Components
- **Sync Engine**: Handles email, calendar, and task synchronization
- **TUI Dashboard**: Interactive monitoring interface using Textual
- **Daemon Service**: Background service with logging and process management
- **Configuration**: Environment-based configuration system
### Directory Structure
```
src/
├── cli/ # CLI commands and interfaces
│ ├── sync.py # Main sync command
│ ├── sync_dashboard.py # TUI dashboard
│ ├── sync_daemon.py # Daemon service
│ └── ...
├── services/ # External service integrations
│ ├── microsoft_graph/ # Microsoft Graph API
│ ├── godspeed/ # Godspeed task manager
│ ├── ticktick/ # TickTick API
│ └── ...
└── utils/ # Utility functions
```
## Development
### Setup Development Environment
```bash
# Clone repository
git clone https://github.com/timothybendt/luk.git
cd luk
# Install development dependencies
uv sync --dev
# Run tests
uv run pytest
# Run linting
uv run ruff check .
uv run ruff format .
# Type checking
uv run mypy src/
```
### Project Structure
- `pyproject.toml`: Project configuration and dependencies
- `src/cli/`: CLI commands and user interfaces
- `src/services/`: External service integrations
- `src/utils/`: Shared utilities and helpers
- `tests/`: Test suite
### Building for Distribution
```bash
# Build package
uv run build
# Check package
uv run twine check dist/*
# Upload to PyPI (for maintainers)
uv run twine upload dist/*
```
## Troubleshooting
### Common Issues
1. **Authentication Errors**: Ensure Microsoft Graph credentials are properly configured
2. **Permission Denied**: Check file permissions for Maildir and calendar directories
3. **Daemon Not Starting**: Verify log directory exists and is writable
4. **TUI Not Rendering**: Ensure terminal supports Textual requirements
### Debug Mode
Enable debug logging:
```bash
export LOG_LEVEL=DEBUG
luk sync run --dry-run
```
### Log Files
- **Daemon Logs**: `~/.local/share/luk/luk.log`
- **Sync State**: `~/.local/share/luk/sync_state.json`
- **Configuration**: `~/.config/luk/`
## Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests for new functionality
5. Run the test suite
6. Submit a pull request
### Code Style
This project uses:
- **Ruff** for linting and formatting
- **MyPy** for type checking
- **Black** for code formatting
- **Pre-commit** hooks for quality control
## License
MIT License - see LICENSE file for details.
## Support
- **Issues**: [GitHub Issues](https://github.com/timothybendt/luk/issues)
- **Documentation**: [GitHub Wiki](https://github.com/timothybendt/luk/wiki)
- **Discussions**: [GitHub Discussions](https://github.com/timothybendt/luk/discussions)
## Changelog
### v0.1.0
- Initial release
- Email synchronization with Microsoft Graph
- Calendar sync with vdir/ICS support
- Godspeed and TickTick integration
- TUI dashboard
- Daemon mode with logging
- Cross-platform support

76
luk.egg-info/SOURCES.txt Normal file
View File

@@ -0,0 +1,76 @@
README.md
pyproject.toml
luk.egg-info/PKG-INFO
luk.egg-info/SOURCES.txt
luk.egg-info/dependency_links.txt
luk.egg-info/entry_points.txt
luk.egg-info/requires.txt
luk.egg-info/top_level.txt
src/cli/__init__.py
src/cli/__main__.py
src/cli/calendar.py
src/cli/drive.py
src/cli/email.py
src/cli/gitlab_monitor.py
src/cli/godspeed.py
src/cli/sync.py
src/cli/sync_daemon.py
src/cli/sync_dashboard.py
src/cli/ticktick.py
src/maildir_gtd/__init__.py
src/maildir_gtd/app.py
src/maildir_gtd/email_viewer.tcss
src/maildir_gtd/message_store.py
src/maildir_gtd/utils.py
src/maildir_gtd/actions/__init__.py
src/maildir_gtd/actions/archive.py
src/maildir_gtd/actions/delete.py
src/maildir_gtd/actions/newest.py
src/maildir_gtd/actions/next.py
src/maildir_gtd/actions/oldest.py
src/maildir_gtd/actions/open.py
src/maildir_gtd/actions/previous.py
src/maildir_gtd/actions/show_message.py
src/maildir_gtd/actions/task.py
src/maildir_gtd/screens/CreateTask.py
src/maildir_gtd/screens/DocumentViewer.py
src/maildir_gtd/screens/OpenMessage.py
src/maildir_gtd/screens/__init__.py
src/maildir_gtd/widgets/ContentContainer.py
src/maildir_gtd/widgets/EnvelopeHeader.py
src/maildir_gtd/widgets/__init__.py
src/services/__init__.py
src/services/gitlab_monitor/__init__.py
src/services/gitlab_monitor/config.py
src/services/gitlab_monitor/daemon.py
src/services/gitlab_monitor/gitlab_client.py
src/services/gitlab_monitor/notifications.py
src/services/gitlab_monitor/openai_analyzer.py
src/services/godspeed/__init__.py
src/services/godspeed/client.py
src/services/godspeed/config.py
src/services/godspeed/sync.py
src/services/himalaya/__init__.py
src/services/himalaya/client.py
src/services/microsoft_graph/__init__.py
src/services/microsoft_graph/auth.py
src/services/microsoft_graph/calendar.py
src/services/microsoft_graph/client.py
src/services/microsoft_graph/mail.py
src/services/taskwarrior/__init__.py
src/services/taskwarrior/client.py
src/services/ticktick/__init__.py
src/services/ticktick/auth.py
src/services/ticktick/client.py
src/services/ticktick/direct_client.py
src/utils/calendar_utils.py
src/utils/file_icons.py
src/utils/notifications.py
src/utils/platform.py
src/utils/ticktick_utils.py
src/utils/mail_utils/__init__.py
src/utils/mail_utils/helpers.py
src/utils/mail_utils/maildir.py
tests/test_platform.py
tests/test_sync_daemon.py
tests/test_sync_dashboard.py

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,2 @@
[console_scripts]
luk = src.cli.__main__:main

17
luk.egg-info/requires.txt Normal file
View File

@@ -0,0 +1,17 @@
aiohttp>=3.11.18
certifi>=2025.4.26
click>=8.1.0
html2text>=2025.4.15
mammoth>=1.9.0
markitdown[all]>=0.1.1
msal>=1.32.3
openai>=1.78.1
orjson>=3.10.18
pillow>=11.2.1
python-dateutil>=2.9.0.post0
python-docx>=1.1.2
requests>=2.31.0
rich>=14.0.0
textual>=3.2.0
textual-image>=0.8.2
ticktick-py>=2.0.0

View File

@@ -0,0 +1 @@
src