slab: iMessage attachments send headlessly again — stage the file where the transfer agent can read it master
Sending a file by AppleScript looked like it worked: osascript exited 0 and a message row appeared. The row landed error=25 with the attachment stuck at transfer_state=6. IMTransferAgent is sandboxed to the Messages attachment store, so a file in /tmp, ~/Desktop, or a repo path is unreadable to it and the upload dies after the row is already written. sendMedia() now copies into ~/Library/Messages/Attachments/<xx>/<yy>/<UUID>/ first — where a manual drag also puts it — and the identical send lands at transfer_state=5. No window, no clipboard, no keystrokes. The receipt is read back out of chat.db, because a failed transfer exits 0 too. Two bugs fell out along the way: imsg.mjs send had no --media flag at all, so dm-mcp's '--media <path> --media-transport auto --expected-title …' was joined into the message body. osascript then parsed the leading dash as its own option and died with 'illegal option -- -'. Every send now routes through a helper that passes -- before its arguments. The text path printed nothing, and dm-mcp parses stdout as JSON, so a delivered message reported 'Unexpected end of JSON input'. Every branch now prints a receipt. mediaTransport/visibleTitle are gone from dm_send: the UI fallback they selected never worked, and the backend path now does.