CLI do uzgadniania faktur z KSeF, Gmaila i SaldeoSMART. Agent-friendly: komendy nieinteraktywne, JSON na stdout, logi na stderr.
git clone https://github.com/wydrox/lab.git
cd lab
cargo build --release
cp target/release/lab-cli ~/.local/bin/labWymagane: pdftotext (poppler) do lekkiego wyciągania tekstu z PDF. Dla przefiltrowanych kandydatów LAB opcjonalnie wzbogaca brakujące pola lokalnym modelem gemma-4-e4b przez ppmlx.
brew install poppler
ppmlx pull gemma-4-e4bOpcjonalne ustawienia LLM:
LAB_LLM_MODEL=gemma-4-e4b PPMLX_BASE_URL=http://127.0.0.1:6767 lab sync --maillab onboardUruchamia interaktywne menu TUI z jednym widokiem wszystkich parametrów (Gmail, Saldeo, KSeF, katalog danych i DB). Opcjonalnie można przekazać ścieżkę do client secret:
lab onboard --gmail-client-secret /path/to/google-oauth-client.jsonSam test (bez kreatora):
lab onboard --checkPobranie auth do Saldeo przez Playwright: wybierz SALDEO_AUTH_SCRIPT w lab onboard, albo uruchom ręcznie. Używa Helium Browser (/Applications/Helium.app/Contents/MacOS/Helium); można nadpisać HELIUM_EXECUTABLE=/ścieżka/do/Helium. Skrypt automatycznie zapisuje auth po poprawnym sprawdzeniu cookies (bez ręcznego Enter); timeout można zmienić przez SALDEO_AUTH_TIMEOUT_MS.
./scripts/saldeo-auth.sh
# opcjonalnie inna ścieżka storage state:
./scripts/saldeo-auth.sh ~/.config/lab/saldeo-storage-state.jsonlab # interaktywna tabela faktur: akcje upload / zatwierdź KSeF / odrzuć KSeF
lab sync # synchronizuje wszystkie trzy źródła
lab sync --ksef # tylko KSeF online; zapisuje metadane także do lokalnej SQLite
lab sync --mail # tylko Gmail/PDF (pobiera, parsuje, filtruje)
lab sync --amazon-mail # tylko Amazon.it / Amazon.es z osobnym cache
lab sync --saldeo # tylko Saldeo
lab reconcile # odświeża KSeF/Saldeo i porównuje domyślne wyniki dla roku 2026
lab reconcile \
--mail ./data/mail-all-pdf-2026-pdfs/records.jsonl \
--ksef ./data/ksef-2026/records.jsonl \
--saldeo ./data/saldeo-2026/records.jsonl \
--output ./out/tri-reconcile-2026.json \
--csv ./out/tri-reconcile-2026.csv \
--store --year 2026
lab reconcile --status --year 2026 # ostatni raport z bazy
lab upload # plan brakujących załączników Gmail → Saldeo
lab upload --confirm # faktyczny upload brakujących załączników; po nim LAB odświeża Saldeo cachePuste lab otwiera interaktywną tabelę faktur z tri-reconcile. Skróty: j/k lub strzałki — ruch, u — upload do Saldeo, a — zatwierdź KSeF, r — odrzuć KSeF, n — wyczyść, f — filtr pozycji z możliwymi akcjami, e — lokalna poprawka Saldeo, c — wykonaj, q — wyjdź. Zmiana roku w menu uruchamia pełny sync dla tego roku. Akceptuj wykonuje wybrane operacje bez wychodzenia z tabeli i odświeża status/tabelę na bieżąco. Poprawione rekordy Saldeo mają * w kolumnie źródeł.
Auto-sync/reconcile/upload przy logowaniu i cyklicznie przez launchd:
scripts/install-launchd.shDomyślnie uruchamia się przy logowaniu i co 4h, robiąc: sync, reconcile --store, upload --confirm, sync --saldeo, finalne reconcile --store.
Logi: ~/Library/Logs/lab/automation.log.
Konfiguracja instalacji:
LAB_INTERVAL_SECONDS=86400 LAB_YEAR=2026 scripts/install-launchd.sh
scripts/uninstall-launchd.shStatusy raportu: in_all_three, gmail_ksef_missing_saldeo, gmail_saldeo_missing_ksef, gmail_only, ksef_saldeo_missing_gmail, ksef_only, saldeo_only.
Domyślna baza: ./lab.sqlite. Tabele: invoices, tri_reconcile_runs, tri_reconcile_rows.
lab --db ./data/full-2026.sqlite db stats
lab --db ./data/full-2026.sqlite db tri-runs --limit 10lab --db ./data/full-2026.sqlite mcpNarzędzia: sync, reconcile, reconcile_status, upload, db_stats, tri_runs.
Konfiguracja w mcp/lab-mcp.example.json.
lab db— init, stats, list, tri-runslab doctor— diagnostyka Gmail, Saldeo, KSeF online, DB i domyślnych źródeł reconcile
- numer faktury exact: +45, partial: +25
- zgodny NIP: +20, seller NIP ta sama pozycja: +5
- kwota brutto exact: +20, prawie exact (±2 gr): +17
- data exact: +10, ±7 dni: +4
- waluta: +5
lab reconcile --review-score 50 ...- Tokeny/auth nie są zapisywane w repo. Na macOS LAB zapisuje Gmail token i Saldeo storage state w Keychain; pliki
~/.config/lab/gmail_token.json/~/.config/lab/saldeo-storage-state.jsonsą fallbackiem lub wejściem migracyjnym. - KSeF: domyślnie online API v2 (
KSEF_TOKEN, opcjonalnieKSEF_CONTEXT_NIP/KSEF_ENV/KSEF_BASE_URL); metadane są cache’owane wdata/ksef-<rok>/alboKSEF_DATA_DIR. - Upload do Saldeo:
generate-urls-for-upload→PUTsigned URL →confirm