v1.0.0
🎉 BarKeeper v1.0.0
The first major release of BarKeeper. This version ships three features and squashes a notable bug in the Settings dialog.
✨ New Features
📋 Feed Resource Type
A new read-only resource type that runs a script, parses its JSON output, and displays results as an expandable list directly in your menu bar popup.
- Click the refresh button to run the script on demand (feed resources are manual-refresh only — they don't participate in the automatic polling loop)
- A green badge shows how many items are new (
isNew: true) - Supports an optional title, timestamp (
checkedAt), and item subtitles/details (shown as tooltips on hover) - Renders up to 20 items; overflow is summarised as "… + N more"
- Tolerates noisy login-shell output (Homebrew nags, nvm, direnv) — BarKeeper extracts the last top-level
{…}block from stdout, so your script doesn't need to suppress shell chatter - Includes a full FeedPayload JSON schema and a sample script in
docs/sample-feed-script.sh
Built-in highlight: includes a new embedded foundry-check CLI tool (by @LaetitiaMa1410) that reports Microsoft Foundry model availability by region — ready to use as a Feed resource out of the box.
⚠️ Critical Actions
Button resources can now be marked as Critical. When enabled, clicking the button shows a system-level macOS confirmation dialog before the script runs — perfect for destructive or irreversible operations like deleting resources or force-pushing.
- Toggle the "Critical Action" option per-resource in the Settings editor
- Uses a native
NSAlertthat appears centered on screen, independent of the menu bar popover - Defaults to
false; existing configs are unaffected
🔔 macOS Notification Center Integration
BarKeeper now sends native macOS notification banners when actions complete or fail — so you always know the outcome even if you've switched to another app.
- Notifications fire on toggle on/off, button actions, and feed refreshes (success ✅ and error ❌)
- Per-user opt-out: a new "Enable Notification Center alerts" toggle in Settings → Notifications persists your preference to disk
- Existing configs automatically opt-in on upgrade (no migration needed)
- Implemented via a clean, injectable
NotificationServiceclass — documented indocs/notification-service.md
🐛 Bug Fixes
Settings Dialog Stability (#16)
Fixed two related bugs in the Settings dialog:
- Editing a resource while a task was in-flight caused UI flicker and orphaned async tasks — because
updateResource()was replacing the entireResourceStateobject, resettingisLoading/lastErrorand losing the reference held by running tasks. Now theresourceproperty is updated in-place, preserving all runtime state. - Switching resources in the sidebar did not refresh the editor panel — SwiftUI reused the same view and
.onAppeardid not re-fire. Fixed by adding.id(state.id)to force a proper view refresh on selection change.
👥 Contributors
- @LaetitiaMa1410 — Feed resource type & foundry-check CLI integration (first contribution! 🎉)
- @abeckDev — Critical Actions, resource state bug fix
- @Copilot — Notification Center integration
📦 Installation
Download BarKeeper.dmg from this release, open it, and drag BarKeeper.app into your Applications folder. The app is signed and notarized — Gatekeeper will allow it without extra steps.
Full Changelog: v0.1.2...v1.0.0
Checksums (SHA256)
- DMG:
3b2510a24b29b48ec54528d11372eb9a92e7bebe727a958c0fdc651efcb778a9 - ZIP:
1993018fab23c95352ed28cc2adf8b44f5008ce4b13b8b293a313c74d613f0d6
New Contributors
- @LaetitiaMa1410 made their first contribution in #14
Full Changelog: v0.1.2...v1.0.0