Skip to content

v0.10.1

Choose a tag to compare

@saulmc saulmc released this 19 May 21:22
· 49 commits to main since this release
bcaaf6c

Added: Thinking content type

New silent codec for ambient agent thinking-status indicators, anchored to
a specific message (like read receipts):

  • convos.org/thinking:1.0 — JSON payload {state, targetMessageId, content, resultMessageId?}.
    state is "start" or "stop" — agents pair a start with a matching stop
    on the same targetMessageId. content is a 3–5 word human-readable label
    shown alongside the indicator (e.g. "Designing your cycling guide").
    resultMessageId is optional and only meaningful on stop — the agent's own
    reply message that closed the thought, so receivers can link "thought about X"
    to "replied with Y".
  • Silent (shouldPush: false), no fallback. Filtered from the chat stream by
    isDisplayableMessage.
  • agent serve event surface: receive path emits a thinking event; live and
    catchup both surface, deduped by message id. Stdin command {"type":"thinking","state":"start|stop","targetMessageId":"...","content":"...","resultMessageId":"..."} sends a Thinking message. resultMessageId only valid with state: "stop".

Exports: ThinkingCodec, ContentTypeThinking, isThinkingMessage,
getThinkingContent, Thinking, ThinkingState.

Added: Remote-attachment decode helpers

agent serve's message event now carries structured attachment metadata
when the content type is one of XMTP's native remote-attachment types:

  • xmtp.org/remoteStaticAttachment:1.0 — emits a remoteAttachment
    object alongside content.
  • xmtp.org/multiRemoteStaticAttachment:1.0 — emits a
    multiRemoteAttachment: { attachments: [...] } object.

Each entry has url, contentDigest, scheme, secret/salt/nonce
(base64-encoded), and optional contentLength/filename — enough for
an agent to fetch and decrypt the bytes with decryptAttachment. Bytes
were previously Uint8Array on message.content, which doesn't
serialize to JSON cleanly. Encoding matches the agent serve remote-attach
stdin command so agents send and receive attachments through one mental
model. Live and catchup message paths both populate the new fields.

New exports: extractRemoteAttachment, extractMultiRemoteAttachment,
RemoteAttachmentJson, RemoteAttachmentInfoJson, MultiRemoteAttachmentJson.

Full Changelog: v0.9.1...v0.10.1