Add packaging/ with entry scripts and build_exes.py: the CLI is frozen with
PyInstaller (one-file console) and the GUI with `flet pack` (PyInstaller plus
the bundled Flet desktop runtime). Both bundle settings.yaml as data so the
frozen binaries load their defaults via importlib.resources, and the script
zips the results into release/ for upload.
Bump version to 2.0.0a0, gitignore build artifacts (*.exe, *.zip, *.spec,
dist/build/release), add a `build` extra, and document pre-built binaries and
the build process in the README.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Surface a short "About"-style tagline at the top of the README and note the
optional GUI in the pyproject description.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add src/bnet_auth_tool/gui.py: an imperative Flet 0.85 desktop app behind a
new `gui` extra, exposed as the `bnet-auth-gui` entry point. It reuses the
same vault, crypto, settings, and TOTP modules as the CLI — lock screen,
authenticator list with live rotating codes, detail dialog (QR/copy/delete),
legacy import, and online attach/retrieve (kept labelled unverified).
Add RFC 6238 TOTP code generation to totp.py (current_code / seconds_remaining,
pure stdlib) with reference-vector tests, since the GUI displays live codes.
Update README/AGENTS.md and uv.lock for the GUI.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace the single-file v1.3.1 script with a proper src/bnet_auth_tool/
package: config (YAML settings + platformdirs), crypto (scrypt + AES-256-GCM
with a versioned header; legacy PBKDF2 100k/600k still decrypt), storage
(single encrypted vault), fileio (atomic 0600 writes), api, totp, migrate, and
a cli with an interactive menu plus argparse subcommands.
Security/audit fixes: drop catch-all excepts, stop leaking server bodies/tokens
in errors, atomic permission-hardened writes, explicit Ctrl-C handling,
versioned format header, best-effort passphrase scrubbing.
Add packaging (pyproject for uv, organized requirements.txt fallback, uv.lock),
.gitignore, settings.yaml, CLAUDE.md/AGENTS.md, 22 pytest tests, and ruff
config. Online attach/retrieve is preserved but kept labelled unverified.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>