Skip to content

v0.8.9

Choose a tag to compare

@panyam panyam released this 24 Oct 21:18
· 75 commits to main since this release

v0.8.9

The room bridge moves to massrelay v0.3.1, whose wire format changed, and Bridge.Notify now sends
one message per room instead of one per tab. Two 2026-07-28 wire fixes come along with it. This is
also the first release where @panyam/mcpkit-rooms reaches npm since 0.8.7, because v0.8.8's
publish failed (below).

Changed (room bridge)

  • massrelay v0.3.1 and servicekit v0.1.12. massrelay v0.3.0 renamed AppMessage.to_client_id
    to a repeated to_client_ids. It kept the field number, so binary protobuf still matches, but
    the page's CollabClient speaks protojson, where the name changes from toClientId to
    toClientIds. A page on @panyam/mcpkit-rooms 0.8.7 or earlier, talking to a relay on massrelay
    v0.3, sends replies the relay can't address, and the agent's call times out with no error saying
    why. The page client now depends on @panyam/massrelay ^0.3.1 and
    @panyam/servicekit-client ^0.1.12. (PR 1629)
  • Room.SendEach(ctx, to, kind, payload) delivers one message to several peers. A partial
    delivery returns *rooms.NotMembersError naming the peers that weren't in the room, and the rest
    still get the message. memroom and both massrelay transports implement it. Anything else that
    implements Room has to add the method. (PR 1629)
  • Bridge.Notify sends one message per room. A big notify used to queue one message per tab
    behind the dialled transport's 25-a-second pacer. A tab the relay reports gone lands in
    rep.Failed on its own. Fan-out tool calls still go one per tab, since each tab answers its own
    call. (PR 1629)

Fixed

  • @panyam/mcpkit-rooms publishes from a release tag again. v0.8.8's publish-npm-rooms run
    failed with a missing go.sum entry, because the tagged tree has no in-repo replace lines and
    the workflow never put them back. It restores them first now, and
    check-release-workflows-selftest fails any tag workflow that sets up Go without doing that.
    0.8.8 was never published to npm, so go from 0.8.7 straight to 0.8.9. (PR 1626)
  • 2026-07-28 always gets ttlMs and cacheScope. That schema makes both required on every
    cacheable result. WithoutListCacheControl, WithoutReadResourceCacheControl and a negative TTL
    dropped them, and so did agents/list and agents/get without Config.TTLMs. On 2026-07-28 an
    opted-out hint now goes out as ttlMs: 0 with cacheScope public for lists and private for
    reads. 2025-11-25 and earlier still omit them. (issue 1546)
  • The stateless tools/list strips x-mcp-file for clients without fileInputs.
    core.HasFileInputs read session capabilities only, so it answered false for every stateless
    client, and the stateless list didn't strip anyway. It reads the request's _meta too now, and
    both wires build tools/list through one helper, which also gives the stateless list the session
    wire's pagination. (issue 1515)

Upgrading downstream

  • agni:
    • Go: experimental/ext/rooms, …/rooms/massrelay and …/integrations/roomsevents at
      v0.8.9, plus github.com/panyam/massrelay v0.3.1 if you require it directly.
    • Browser: @panyam/mcpkit-rooms@0.8.9, in the same change as the Go side. npm users get the
      matching massrelay through ^0.3.1, but an embedder that bumps only the Go module, or keeps
      serving a page bundle built before the bump, gets the silent timeout above.
    • Your own Room implementations, if any, need SendEach.
  • Anyone relying on WithoutListCacheControl to keep ttlMs off the wire: on 2026-07-28 it
    now sends ttlMs: 0, which a client reads the same as an absent field.