fix: v0.4.0-gitea.3 — claude/channel capability + notify echo filter + README (closes Reno-Stars feedback P0+P1+P2) #8
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "fix/v040-gitea3-channel-capability-and-notify-filter"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Reno-Stars (airenostars) verified install end-to-end against v0.4.0-gitea.2 ONLY after applying a local patch. This ships the same patch upstream.
experimental.claude/channel+claude/channel/permissionon the Server constructor. Without it, the Claude Code host silently drops everynotifications/claude/channelevent.method=notifyrows inpollWorkspace. The activity feed returns our own /notify calls alongside inbound A2A; emitting them would echo replies back as fake user turns.claude --channels plugin:…one-liner (silently no-ops on 2.1.129); documentallowedChannelPluginsschema ({plugin, marketplace}OBJECTS, not strings) + LOCATION (managed-settings.json, NOT user settings).Version:
0.4.0-gitea.2→0.4.0-gitea.3across package.json, plugin.json, marketplace.json, and the Server() literal.Test plan
bun test— 27 pass / 0 fail (was 18; +9 new inchannel-capabilities-and-filter.test.ts)bun build server.ts— bundle contains 3 references toclaude/channelv0.4.0-gitea.3Note: the channel repo has the same Gitea CI flake as other repos today; tests verified locally. Force-merging once approved.
Reno-Stars (airenostars) verified install end-to-end against v0.4.0-gitea.2 ONLY after applying a local patch. This ships the same patch upstream so fresh self-hosters get a working install out-of-the-box, no per-host workaround required. P0 (CRITICAL) — declare experimental.claude/channel capability The Server constructor previously declared `{ capabilities: { tools: {} } }`. Without `experimental['claude/channel']` (and the companion `claude/channel/permission` flag), Claude Code's MCP host treats the server as tool-only and silently drops every `notifications/claude/channel` event we emit. Symptom: poll loop runs cleanly, cursor advances, stderr says "delivered", message never reaches the conversation. Mirrors the shape used by the official telegram channel plugin's MCP server. P1 — filter outbound `method=notify` rows in pollWorkspace The activity feed under `?type=a2a_receive` ALSO returns the agent's own outbound /notify calls (recorded with method='notify' and source_id=null on the same workspace_id). emitNotification would classify them as canvas_user inbound and the reply would echo back as a fake user turn one poll later — the model would see its own answer as a new user prompt and try to "respond" to it. Filtered at the per-row layer via a new pure helper `shouldEmitActivity` so the cursor still advances past the skipped rows. P2 — README accuracy - Drop the `claude --channels plugin:…` one-liner instruction (silently no-ops on Claude Code 2.1.129; only the marketplace flow works). - Document `allowedChannelPlugins` schema: it's an array of OBJECTS `{ plugin, marketplace }`, not strings — the host's Zod validator silently ignores string entries, which is the most common cause of "plugin installed but no notifications" reports. - Document `allowedChannelPlugins` LOCATION: only takes effect from the managed-settings file (/Library/Application Support/ClaudeCode/ managed-settings.json on macOS, /etc/claude-code/managed-settings.json on Linux), NOT from `~/.claude/settings.json`. Most self-hosters try user settings first. Tests Added channel-capabilities-and-filter.test.ts (9 cases) that pin both regressions via two small exported surfaces (`SERVER_CAPABILITIES`, `shouldEmitActivity`). Verified the new tests fail when each fix is reverted: removing the experimental block makes 2 tests fail; removing the notify-method filter makes 2 tests fail. 27 pass / 0 fail (was 18). Version bump (all four manifests + the Server() literal): 0.4.0-gitea.2 → 0.4.0-gitea.3. Closes Reno-Stars feedback P0+P1+P2. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>