-
improve readme, add screenshots
-
publish to homebrew
-
add example Swift script that consumes the library
-
improve permissions prompt, use https://github.com/zats/permiso
-
replace SQLite w https://github.com/pointfreeco/sqlite-data and benchmark
-
remove
.paritywhen no longer needed -
consider folding callback from
PlatformAPI.onThreadSelectedintosubscribeToEvents -
bridgev2 version for self hosting support
-
add cross-process coordination when more than one process is driving Messages.app at the same time (e.g. Beeper Desktop + a separate CLI process, or two CLIs w secondary instance off)
-
separate
UserDefaultssomehow so that CLI and other consumers don't share the prefs -
user manually killing the messages.app causes cli to not detect that ("Domain=NSOSStatusErrorDomain Code=-600 "procNotFound: no eligible process with specified descriptor"")
-
when scheduled messages are actually sent, send a message update event
-
surface terminal-failure attachment state so a failed/rejected download clears the loading spinner. Today
loading = transferState != .finished(MessageMapper+Attachments.swift:26), so error/recoverableError/rejected (states 6/7/8,Attachment.swift:31-33) read asloading: trueforever;PlatformSDK.Attachment(PlatformSDKAttachment.swift:26) has no failed flag. After the EventWatcher hydration path stops polling failed transfers, the last emitted state still says loading, so the consumer spins indefinitely. Needs: a failed/error field on the attachment type + mapper wiring + EventWatcher emitting it on terminal failure + consumer-side rendering. The EventWatcher hydration path already drops terminally-failed candidates viaIMFileTransferState.isTerminalFailure. -
perhaps move PlatformSDK to https://github.com/TextsHQ/platform-sdk
-
concurrency
- review for races,
PlatformAPI.messagesControlleris mutated without isolation - kill
PassivelyAwareDispatchQueue
- review for races,
-
improve misfire prevention and robustness
-
DatabaseTickWaits.{sentMessageIDs,sentThreadIDs} shouldn't exist, we get ServerEvents for new messages, use that. wip
-
cli
- command to watch chat that prints new activity for just that chat, json new-line separated
- use better library for repl?
- autocomplete
- tests
-
parity
- add delete message for me command
- add add/remove group participant command
- add rename group title command
- add update group image command
- add schedule message command
- add draft message command
- add leave group command
- support rich text sending
- support sending multipart messages (image(s) with caption)
- fix parsing for multi-part messages w inline stickers
- fix real time sync of message deletions (for self, undo send already works)
- publish to gh releases
- publish to spm
- transpile to pure Swift with TypeScript/Electron bindings
- add support for spinning up a discrete instance of Messages.app
- remove event-watching side effect from
PlatformAPI.getThreads(...). It currently bootstraps event watching from the first chat fetch (cursor == nil) viaEventWatcherLifecycle.shared.startBootstrapIfNecessary(...); a fetch function should only perform a single read and return data. Starting event watching from inside it makes calls non-idempotent. Fix by moving event-watcher bootstrap ownership to the caller/lifecycle layer, e.g. the existing explicitstartEventWatchingFromCurrentState/IMessageHost.startEventWatchingFromCurrentStatepath. - fix receiving typing indicators on tahoe
- fix graphic for old school tapback reactions (👍, ❤️) – should not be same as emoji reactions (like, heart)
- cli messages/chats command: add pagination
- add undo send CLI command
- fix notify anyway on tahoe
- fix unmute chat on tahoe
- instead of
thread_messages_refresh- new incoming messages should be state sync message upserts
- new added/removed reactions should be state sync message upserts/deletes (for the hidden reaction message) and a state sync message update (for the og message)
- messages edited should be state sync message updates
- messages getting read should be state sync message updates
- when the user sends a message w tweets/links, when the link/tweet preview resolves, send a message update event
- https://github.com/SwiftPackageIndex/PackageList/issues/new?template=add_package.yml
- cli
- resolve chat id as email/phone # if
any;-;prefix isn't passed - notarize before gh release and do universal binary/x86 target
- w system contacts, resolve phone #s and emails and populate
Thread.title,User.fullName,User.imgURL - format flag for yaml readable output
- one off command to print presence (dnd / dnd w notify) and typing status
- syntax highlight
- resolve chat id as email/phone # if
- fix sending emoji reactions (🎉)
- add download attachment command
- map all message edits
- add example JS script that consumes the library
-
run with node instead of electron kabiroberai/node-swift#4