accountpilot 0.1.1 — Signed FDA helper
⚠️ Migration heads-up for existing 0.1.0 users
This release moves the iMessage plugin from direct chat.db reads to a
Developer-ID-signed Swift helper (accountpilot-fda-helper,
team P2R7PD8VGY). The grant macOS Full Disk Access keys to the
helper's stable code-directory hash, so it survives every future
`brew upgrade python@3.13`.
The cost of the architectural change: anyone who currently has FDA
granted to their old Python interpreter (/opt/homebrew/bin/python3.13,
`/opt/anaconda3/bin/python`, etc.) will see
`HelperPermissionError: Full Disk Access not granted` on the next
iMessage sync after upgrading. This is expected and one-time.
Migration steps
brew upgrade aren13/tap/accountpilot
accountpilot setupaccountpilot setup probes FDA, detects the missing grant, and
deep-links into System Settings → Privacy & Security → Full Disk
Access. Look for accountpilot-fda-helper in the list and toggle it
on. Done.
If the entry is not auto-populated (rare; depends on TCC timing), click
+ and navigate to:
/opt/homebrew/Cellar/accountpilot/0.1.1/bin/accountpilot-fda-helper
After this one-time grant, future upgrades won't need it again —
that's the whole point of the architecture change.
See `docs/imessage-fda.md`
for the rationale and `helpers/fda-helper/PROTOCOL.md`
for the IPC contract.
What's new
Added
- Signed FDA helper at
helpers/fda-helper/(Swift, ~137 KB binary,
hardened runtime, notarized via Apple). accountpilot.plugins.imessage.helper_client— subprocess client and
dict→`IMessageMessage` converter for helper records.- Dual-mode `scripts/release-helper.sh` — works locally with
App-Specific Password keychain profile, and in CI with App Store
Connect API keys. - `accountpilot setup` probes FDA on iMessage-enabled configs and
deep-links into the Privacy pane on `EACCES`. - `.github/workflows/publish-pypi.yml` — OIDC Trusted Publishing.
- `.github/workflows/release-helper.yml` — automated build + sign
- notarize on `fda-helper-v*` tag push.
- `docs/ci-setup.md` — one-time setup guide for maintainers.
- `docs/imessage-fda.md` — end-user FDA explainer.
Changed
- `ChatDbReader` is now a thin façade over `helper_client`. The
legacy direct `sqlite3.connect(chat.db)` reader is removed (hard
cutover). - iMessage tests use an autouse `patch_helper_client` fixture so the
existing synthetic-chat.db suite runs without needing the Swift
toolchain.
Removed
- `accountpilot.plugins.imessage.attachments` module —
`AttachmentReader` and `load_attachments_for_message` are
obsolete; the helper now reads attachment bytes and inlines them
base64 in JSON-Lines records.
Install / upgrade
# Homebrew (recommended on macOS — bundles the signed helper)
brew install aren13/tap/accountpilot # fresh
brew upgrade aren13/tap/accountpilot # existing
# pip / pipx (no helper; iMessage will not work)
pip install --upgrade accountpilotDistribution matrix
| Channel | accountpilot | helper |
|---|---|---|
| PyPI | 0.1.1 | n/a |
| Homebrew (`aren13/tap`, Apple Silicon) | 0.1.1 | 0.1.0 (signed, notarized) |
| Homebrew (Linux / Intel Mac) | 0.1.1 | not bundled — Mail-only support |
Full diff: v0.1.0...v0.1.1