1.6.0 — 88 operations across ten tools
65 operations across seven tools became 88 across ten, and a send can now be
made to show what it would send before it sends it. Nothing was removed and no
spelling changed; every existing call means what it meant.
43 read, 35 write, 3 draft, 7 send. PYAPPLE_READ_ONLY=1 now leaves 43
operations rather than 30.
Three new tools
shortcuts— the user's own automation library, through/usr/bin/shortcuts. Measured against the binary: noapple-eventsentitlement, no AppleEvents framework, so it costs no Automation grant and launches nothing.runis classifiedsend, because macOS exposes no way to read what a shortcut does and anything less would letPYAPPLE_READ_ONLY=1execute arbitrary user code that can email a stranger.presence— Focus, frontmost app, idle seconds, screen state. Read-only, and there is no setter: that half needs Accessibility, the broadest grant macOS has. Focus costs Full Disk Access and its format is undocumented, so the values carry their provenance on the wire.doctor— why a tool just failed and which grant is missing.permsreports the policy; this reports the machine. No probe launches an app or can raise a prompt; where an answer would need one, the finding isundeterminedwith the reason.
Two-phase sends
PYAPPLE_CONFIRM_SENDS=1 (or --confirm-sends) makes any send-class operation
return what would go plus a single-use ticket, having sent nothing — exit 0,
because being asked to confirm is not a failure. The ticket binds a digest of the
resolved payload, so changing any part of the message invalidates it. The ticket
file never contains the message.
Twelve new operations
Mail thread, attachments, forward, forwardDraft, move, delete;
messages attachments, sendAttachment; reminders uncomplete, listCreate,
listDelete; notes move.
Also
tools/list annotations are now derived from the policy in force, so under
PYAPPLE_READ_ONLY=1 every tool honestly reports readOnlyHint: true.
This release also carries the mail reply fixes previously written up as an
unreleased 1.6.0: every reply this package composed was missing the caller's
text, and every reply it sent was also missing the thread it was answering. Both
reported success. Upgrade if you have ever used mail reply or
mail reply-draft.
Full detail, including the silent wrong answers found on the way, is in
CHANGELOG.md.