260c7c0f96
feat: add Settings tab with IMAP account GUI + connection test
...
- ⚙️ Settings tab: add/edit/remove accounts without touching YAML
- Per-account: name, host, port, SSL, username, password (masked), folder, days back
- Test connection button: connect → login → select folder → report message count
- Save writes config/label_tool.yaml; Reload discards unsaved changes
- _sync_settings_to_state() prevents index-key drift on add/remove
- _test_imap_connection() helper shared with fetch tab indirectly
- CLAUDE.md: document new tab, Settings UI design notes
2026-02-27 14:18:51 -08:00
bd4911fe58
feat: add manage.sh with port collision detection
...
start/stop/restart/status/logs/open for the label tool UI;
benchmark/list-models/score/compare shortcuts for the harness.
Port scan: checks lsof → ss → /dev/tcp fallback, increments from
8503 until a free port is found. PID tracked in .avocet.pid,
assigned port persisted in .avocet.port.
2026-02-27 14:10:24 -08:00
d68754d432
feat: initial avocet repo — email classifier training tool
...
Scrape → Store → Process pipeline for building email classifier
benchmark data across the CircuitForge menagerie.
- app/label_tool.py — Streamlit card-stack UI, multi-account IMAP fetch,
6-bucket labeling, undo/skip, keyboard shortcuts (1-6/S/U)
- scripts/classifier_adapters.py — ZeroShotAdapter (+ two_pass),
GLiClassAdapter, RerankerAdapter; ABC with lazy model loading
- scripts/benchmark_classifier.py — 13-model registry, --score,
--compare, --list-models, --export-db; uses label_tool.yaml for IMAP
- tests/ — 20 tests, all passing, zero model downloads required
- config/label_tool.yaml.example — multi-account IMAP template
- data/email_score.jsonl.example — sample labeled data for CI
Labels: interview_scheduled, offer_received, rejected,
positive_response, survey_received, neutral
2026-02-27 14:07:38 -08:00