Skip to content

Releases: openclaw/imsg

v0.13.1

Choose a tag to compare

@steipete steipete released this 17 Jul 17:20
v0.13.1
6918867

Highlights

  • Attachment conversion now times out safely and kills stalled converter process trees instead of blocking metadata resolution indefinitely.
  • Linux read-only builds work again after the converter hardening, with current Commander and phone-number metadata dependencies.

Attachments

  • fix: bound external attachment converters (ffmpeg) to a 60-second monotonic timeout with full process-tree cleanup so hung conversions cannot block metadata resolution forever (#176, thanks @SebTardif).

Linux

  • fix: restore Linux builds by importing Glibc instead of Darwin on supported Linux hosts (#182, thanks @omarshahine).

Dependencies

  • chore: update Commander to 0.2.4 and PhoneNumberKit to 5.0.5, including metadata/9.0.35 (#183).

v0.13.0

Choose a tag to compare

@steipete steipete released this 11 Jul 21:49
v0.13.0
fa2f82d

Read Commands

  • feat: expose per-chat unread counts and inbound message read timestamps across JSON, JSON-RPC, search, history, and watch, with an unread-only chat filter (#160, #170, thanks @chiedo).
  • feat: add snapshot-consistent logical message statistics through imsg stats and messages.stats, with strict chat scoping, timezone-aware date buckets, and deduplicated optional media totals (#161, thanks @omarshahine).
  • feat: inspect future Send Later rows read-only through imsg scheduled list and messages.scheduled, without requiring the private IMCore bridge (#163, thanks @omarshahine).
  • feat: inspect local chat-background metadata, cache presence, and newest set/clear event through imsg chat-background status, without mutating the chat or requiring the private bridge (#167, thanks @omarshahine).
  • fix: coalesce consecutive link-preview rows from one text send so history and unread chat counts expose one logical message.

Packaging

  • fix: isolate universal builds per architecture and consume SwiftPM's reported product paths so stale slices cannot silently ship older CLI code.

Native Polls

  • fix: match native poll vote envelopes, participant handles, and summary metadata so votes render participant markers and correct notifications (#162, thanks @omarshahine).
  • feat: add selective native poll unvoting through CLI and JSON-RPC while preserving the sender's other selected options (#162, thanks @omarshahine).

Advanced IMCore

  • feat: inspect and explicitly share Apple Messages Name & Photo through imsg name-photo and compatible contact RPC methods, while fixing bridge nickname lookup to use the current controller and handle APIs (thanks @omarshahine).
  • feat: add bridge-backed Apple URL preview sends through send-rich --url and send.rich, with an eight-second out-of-process preparation deadline, capped image decode/staging, and metadata-only fallback (#165, thanks @omarshahine).
  • feat: send standalone or message-attached native stickers through imsg send-sticker and send.sticker, with bounded image validation and secure staging (#164, thanks @omarshahine).
  • fix: canonicalize securely staged attachment paths when Messages attachments are relocated through a symlink, and find nested threaded-reply items for edit, unsend, delete, and notify operations.

JSON-RPC

  • fix: atomically claim bridge RPC inbox files before dispatch so multiple injected consumers cannot deliver one logical send twice (#158).

v0.12.3

Choose a tag to compare

@steipete steipete released this 06 Jul 15:29
v0.12.3
dea78a9

Native Polls

  • fix: show native poll questions by sending a plain caption after created polls and backfilling empty inbound questions from clean native caption rows (#155, thanks @omarshahine).

Packaging

  • fix: include and validate an arm64e slice in the injected bridge helper for macOS 26 Messages compatibility (#156, thanks @omarshahine).

v0.12.2

Choose a tag to compare

@github-actions github-actions released this 04 Jul 05:25
v0.12.2
9fe0d92

Native Polls

  • fix: resolve native poll vote option text from Add Choice update rows when votes still reference the original poll message (#152, #153, thanks @veteranbv).
  • fix: restore native poll vote delivery on macOS 26.4 by persisting the Polls balloon and payload across the responding message objects (#150, thanks @omarshahine).

v0.12.1

Choose a tag to compare

@steipete steipete released this 02 Jul 05:41
v0.12.1
2c1021a

Packaging

  • fix: make Linux release archives standalone by statically linking the Swift runtime.
  • fix: preserve the bridge helper's Developer ID signature through Homebrew installation by using a stable relocatable install name.

v0.12.0

Choose a tag to compare

@steipete steipete released this 01 Jul 23:39
v0.12.0
c72aa0b

Send

  • fix: thread attributed-text formatting through the RPC send bridge path, not just send-rich, so direct/handle sends render bold/italic/etc. on macOS 15+. handleSend now forwards format ranges to the bridge, accepting formatting (the key OpenClaw's message tool emits) alongside text_formatting/textFormatting (#143, thanks @omarshahine).
  • fix: honor reply_to aliases on RPC send for text and captioned attachments, and fail closed instead of silently delivering an unthreaded AppleScript message when the bridge is unavailable (#144, #145, thanks @TurboTheTurtle and @dkattan).

Native Polls

  • feat: add bridge-backed native poll voting through imsg poll vote, poll.vote, and messages.poll.vote (#148, thanks @omarshahine).

Local Lookups

  • fix: include the Contacts usage description in packaged binaries and distinguish unavailable Contacts access from a local address with no match (#147, thanks @cloopadoop).

Advanced IMCore

  • fix: restore chat-delete on macOS 26 by falling back from deleteChat: to IMChatRegistry._chat_remove:, while failing closed when neither selector is available (#146, #149, thanks @alexzhues).

v0.11.1

Choose a tag to compare

@steipete steipete released this 10 Jun 09:43
v0.11.1
f97a116

Read Commands

  • fix: let chats and history run without prompting for Contacts when permission is still undecided, while preserving Contacts prompts for explicit name-resolution flows (#135, thanks @cemendes).

JSON Output

  • feat: expose raw Messages balloon_bundle_id in message JSON/RPC payloads so consumers can recognize URL-preview rows without parsing text (#137, thanks @omarshahine).
  • fix: coalesce Apple URL-preview split-send rows into one logical message across history, search, and watch, with url_preview metadata when the preview row is folded into the text row (#141, thanks @omarshahine).

Advanced IMCore

  • fix: defer injected bridge bootstrap until after Messages startup so macOS 26 dyld constructor ordering cannot touch ObjC/Foundation/IMCore before the process is ready (#138, thanks @omarshahine).
  • fix: let bridge-backed sends and initial chat creation wait longer for slow Messages private-send completions while keeping short timeouts for probe and mutation calls (#139, thanks @omarshahine).

v0.11.0

Choose a tag to compare

@steipete steipete released this 31 May 17:39
v0.11.0
c3205e1

Send

  • feat: add SIP-free local iMessage/SMS service detection for direct send --service auto, with text-only iMessage-to-SMS fallback that never overrides explicit --service choices (#132, thanks @ranaroussi).
  • fix: keep direct send --service auto usable without Full Disk Access by treating local Messages history lookup as best-effort for direct recipients.

Local Lookups

  • feat: add --local modes for account, whois, and nickname so common introspection can read local history or Contacts without launching the IMCore bridge (#132, thanks @ranaroussi).

v0.10.0

Choose a tag to compare

@steipete steipete released this 28 May 21:46
v0.10.0
8d22a2a

Watch

  • fix: re-arm watch/RPC filesystem sources after SQLite rotates chat.db-wal or chat.db-shm, so busy iCloud-synced databases keep emitting inbound rows (#126).
  • fix: retry live watch rows whose chat metadata has not resolved yet, then drop them fail-closed instead of emitting chat_id=0 direct-message-shaped payloads (#118).

Native Polls

  • feat: add native Apple Messages poll decoding and bridge-backed imsg poll send / poll.send support, including threaded poll replies and vote readback (#125, thanks @veteranbv).

JSON-RPC

  • fix: return chat GUID, message GUID, and service identity from JSON-RPC send/create responses when observable (#119, thanks @svetly).
  • feat: expose handles.check for bridge-backed iMessage handle availability checks (#120, thanks @svetly).
  • feat: expose message.send_status to query outbound message delivery state by GUID (#121, thanks @svetly).

v0.9.0

Choose a tag to compare

@steipete steipete released this 16 May 15:20
v0.9.0
b85e701

JSON Output

  • feat: include reply_to_text and reply_to_sender on message payloads
    emitted by history, search, watch, and rpc so consumers can quote
    the parent of a threaded reply (or non-reaction association) without a
    follow-up chat.db lookup. The parent is resolved by joining
    thread_originator_guid or the non-reaction associated_message_guid
    back to the message table; absent parents leave the fields nil (#115, thanks
    @omarshahine).

JSON-RPC

  • feat: expose bridge-backed message RPC methods for rich sends, attachments, tapbacks, edits, unsends, deletes, and notify-anyways; include the CLI version in imsg status --json so callers can gate newer RPC action surfaces.

Private API Bridge

  • fix: support threaded attachment replies via send-rich --file and
    send-attachment --reply-to, including the macOS 26 attachment staging
    fallback (#113, #114, thanks @omarshahine).
  • fix: edit now applies on macOS 14+ instead of silently no-opping by passing
    the backing IMMessageItem and attributed compatibility text to IMCore (#116,
    thanks @zshawauxlol).

Attachments

  • fix: avoid hanging attachment metadata conversion when ffmpeg emits enough output to fill stdout or stderr pipes.