From 46b2cb67612fc8c53c18b9855b9146521e06ab34 Mon Sep 17 00:00:00 2001 From: Graeme Foster <80714+GraemeF@users.noreply.github.com> Date: Thu, 8 Oct 2026 14:15:23 +0100 Subject: [PATCH 1/2] commy plugin: release 0.25.2 --- RELEASE-NOTES/0.25.2.md | 34 +++++++++++++++++++ bun.lock | 4 +-- .../claude-code/.claude-plugin/plugin.json | 2 +- clients/claude-code/.mcp.json | 2 +- clients/claude-code/package.json | 2 +- clients/hermes/commy/plugin.yaml | 2 +- clients/hermes/pyproject.toml | 2 +- clients/hermes/uv.lock | 2 +- packages/mcp/mcp-server.ts | 2 +- packages/mcp/package.json | 2 +- 10 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 RELEASE-NOTES/0.25.2.md diff --git a/RELEASE-NOTES/0.25.2.md b/RELEASE-NOTES/0.25.2.md new file mode 100644 index 0000000..e5cadb5 --- /dev/null +++ b/RELEASE-NOTES/0.25.2.md @@ -0,0 +1,34 @@ +commy plugin: release 0.25.2 + +Patch release of the commy plugin, **0.25.1 → 0.25.2**. + +This release keeps a seat with a fixed bot name from losing commy when the +realm is briefly unreachable at startup, and makes message links open for +everyone who can read the channel. + +## Highlights + +- **A seat with `COMMY_BOT_NAME` set rides out a short realm outage at + startup.** Until now, any failure to sign in at startup ended the server. + Claude Code remembers a failed MCP server for the rest of the session, so the + seat had no commy until it was restarted. The server now retries when the + realm cannot be reached, is rate-limiting, or is behind a proxy reporting it + down. It keeps trying for up to 20 seconds, which fits inside Claude Code's + default startup timeout. Rejected credentials and other refusals still stop + the server at once, with the same message as before. +- **Message links open for viewers who were not subscribed when the message + was sent.** A link commy handed out used to show an empty view to those + viewers. Links now name the channel and topic, as Zulip's own "Copy link to + message" does, and still find a message whose topic was renamed or resolved. + +No action required beyond updating the plugin. + +## Maintenance + +- Publish to npm from a dedicated GitHub environment. +- Dependency updates: `@modelcontextprotocol/sdk` 1.31.0, `hono`, `ws`, + `turbo`, `@biomejs/biome`, and lockfile maintenance. + +--- + +Eight-way version parity bumped in lockstep (enforced by `manifests.test.ts`). diff --git a/bun.lock b/bun.lock index f6db62c..1139f72 100644 --- a/bun.lock +++ b/bun.lock @@ -25,7 +25,7 @@ }, "clients/claude-code": { "name": "commy-plugin", - "version": "0.25.1", + "version": "0.25.2", "dependencies": { "@commy/mcp": "workspace:*", }, @@ -40,7 +40,7 @@ }, "packages/mcp": { "name": "@commy/mcp", - "version": "0.25.1", + "version": "0.25.2", "dependencies": { "@commy/core": "workspace:*", "@commy/zulip": "workspace:*", diff --git a/clients/claude-code/.claude-plugin/plugin.json b/clients/claude-code/.claude-plugin/plugin.json index bdeb2bd..5db45c9 100644 --- a/clients/claude-code/.claude-plugin/plugin.json +++ b/clients/claude-code/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "commy", "description": "Hexagonal MCP plugin exposing commy ports to Claude Code sessions. V1 hard-wired to the Zulip driven adapter.", - "version": "0.25.1", + "version": "0.25.2", "author": { "name": "Code For Breakfast", "email": "info@codeforbreakfast.co" diff --git a/clients/claude-code/.mcp.json b/clients/claude-code/.mcp.json index 6dec089..488cb87 100644 --- a/clients/claude-code/.mcp.json +++ b/clients/claude-code/.mcp.json @@ -2,7 +2,7 @@ "mcpServers": { "commy": { "command": "npx", - "args": ["-y", "@codeforbreakfast/commy-mcp@0.25.1"], + "args": ["-y", "@codeforbreakfast/commy-mcp@0.25.2"], "cwd": "${CLAUDE_PLUGIN_ROOT}", "env": { "ZULIP_SITE": "${user_config.ZULIP_SITE}", diff --git a/clients/claude-code/package.json b/clients/claude-code/package.json index bf5fe5d..8bbb756 100644 --- a/clients/claude-code/package.json +++ b/clients/claude-code/package.json @@ -1,6 +1,6 @@ { "name": "commy-plugin", - "version": "0.25.1", + "version": "0.25.2", "license": "Apache-2.0", "type": "module", "scripts": { diff --git a/clients/hermes/commy/plugin.yaml b/clients/hermes/commy/plugin.yaml index bf4683b..f2c31de 100644 --- a/clients/hermes/commy/plugin.yaml +++ b/clients/hermes/commy/plugin.yaml @@ -1,6 +1,6 @@ name: commy-platform kind: platform -version: 0.25.1 +version: 0.25.2 description: > commy gateway adapter for Hermes Agent (pattern B: inbound-axis consumer for non-Claude-Code hosts). Registers the `commy` platform. diff --git a/clients/hermes/pyproject.toml b/clients/hermes/pyproject.toml index 4116895..4ea62f9 100644 --- a/clients/hermes/pyproject.toml +++ b/clients/hermes/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "commy-hermes" -version = "0.25.1" +version = "0.25.2" description = "commy platform adapter for Hermes Agent (pattern B inbound-axis consumer)" readme = "README.md" license = "Apache-2.0" diff --git a/clients/hermes/uv.lock b/clients/hermes/uv.lock index ed3dd1c..f3508fd 100644 --- a/clients/hermes/uv.lock +++ b/clients/hermes/uv.lock @@ -170,7 +170,7 @@ wheels = [ [[package]] name = "commy-hermes" -version = "0.25.1" +version = "0.25.2" source = { editable = "." } [package.dev-dependencies] diff --git a/packages/mcp/mcp-server.ts b/packages/mcp/mcp-server.ts index 0409633..0952cd3 100644 --- a/packages/mcp/mcp-server.ts +++ b/packages/mcp/mcp-server.ts @@ -6,7 +6,7 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js' * enforced by manifests.test.ts. Update only via the `release-plugin` * skill, which edits all three sites and tags the result. */ -export const PLUGIN_VERSION = '0.25.1' +export const PLUGIN_VERSION = '0.25.2' /** * Echoed to every connected MCP client via the server `instructions:` diff --git a/packages/mcp/package.json b/packages/mcp/package.json index f150834..15ecf73 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -1,6 +1,6 @@ { "name": "@commy/mcp", - "version": "0.25.1", + "version": "0.25.2", "license": "Apache-2.0", "type": "module", "exports": { From 93b4a04f8e357b78151455f15e2c01f931e02c5e Mon Sep 17 00:00:00 2001 From: Graeme Foster <80714+GraemeF@users.noreply.github.com> Date: Thu, 8 Oct 2026 14:46:50 +0100 Subject: [PATCH 2/2] Describe the sign-in after the handshake in the 0.25.2 notes --- RELEASE-NOTES/0.25.2.md | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/RELEASE-NOTES/0.25.2.md b/RELEASE-NOTES/0.25.2.md index e5cadb5..b6927aa 100644 --- a/RELEASE-NOTES/0.25.2.md +++ b/RELEASE-NOTES/0.25.2.md @@ -3,19 +3,20 @@ commy plugin: release 0.25.2 Patch release of the commy plugin, **0.25.1 → 0.25.2**. This release keeps a seat with a fixed bot name from losing commy when the -realm is briefly unreachable at startup, and makes message links open for -everyone who can read the channel. +realm is unreachable at startup, and makes message links open for everyone who +can read the channel. ## Highlights -- **A seat with `COMMY_BOT_NAME` set rides out a short realm outage at - startup.** Until now, any failure to sign in at startup ended the server. - Claude Code remembers a failed MCP server for the rest of the session, so the - seat had no commy until it was restarted. The server now retries when the - realm cannot be reached, is rate-limiting, or is behind a proxy reporting it - down. It keeps trying for up to 20 seconds, which fits inside Claude Code's - default startup timeout. Rejected credentials and other refusals still stop - the server at once, with the same message as before. +- **A seat with `COMMY_BOT_NAME` set rides out a realm outage at startup.** + Until now, the server signed in before it answered Claude Code, and any + failure to sign in ended it. Claude Code remembers a failed MCP server for the + rest of the session, so the seat had no commy until it was restarted. The + server now answers Claude Code first and signs in afterwards. It keeps + retrying for as long as the realm cannot be reached, is rate-limiting, or is + behind a proxy reporting it down. Once it signs in, it picks up its + subscriptions and catches up as before. Rejected credentials and other + refusals still stop the server at once, with the same message as before. - **Message links open for viewers who were not subscribed when the message was sent.** A link commy handed out used to show an empty view to those viewers. Links now name the channel and topic, as Zulip's own "Copy link to