mirror of
https://github.com/block/buzz.git
synced 2026-08-18 06:50:31 +02:00
The keyring crate uses SecKeychainAddGenericPassword with a null ACL, which creates items requiring user confirmation on every access — even by the same app. This causes ~20 prompts on migration launch and 7 on every subsequent launch. Switch the macOS backend to the modern SecItem API with kSecUseDataProtectionKeychain=true via security-framework's PasswordOptions::use_protected_keychain(). Items stored this way use kSecAttrAccessible instead of ACLs and never prompt after the first device unlock. Migration path: load() tries DPK first; on a miss it falls back to the old keychain, writes the value to DPK, and deletes the old entry. First launch after this fix prompts once per key (7 total), then zero forever. Unsigned dev builds (tauri dev / cargo run) lack the hardened-runtime entitlement required by DPK and fall back to the legacy keyring path automatically (errSecMissingEntitlement, -34018). Windows and Linux paths are unchanged. Co-authored-by: Will Pfleger <pfleger.will@gmail.com> Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Buzz
Desktop chat shell with:
- Tauri + React + TypeScript + Vite
- Tailwind CSS
- shadcn/ui-ready shared components
- Biome (lint/format/check)
- Feature-driven frontend structure
Scripts
pnpm dev- run the web frontendpnpm tauri dev- run the desktop apppnpm build- typecheck and build frontendpnpm typecheck- TypeScript checkspnpm lint- Biome lintpnpm format- Biome format (write)pnpm check- Biome check
Structure
src/shared- reusable app-wide code (ui,lib,styles)src/features- feature modules (vertical slices)src/app- top-level app composition