Skip to content

accountpilot 0.1.1 — Signed FDA helper

Choose a tag to compare

@aren13 aren13 released this 03 May 23:27
· 39 commits to main since this release

⚠️ 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 setup

accountpilot 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 accountpilot

Distribution 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