fix: Zulip attachment handling — event attachments + all file types
hermes-zulip-plugin (Tanko/Mumuni):
- Add _extract_event_attachments() to handle message.attachments from
Zulip UI file uploads (previously only inline markdown links worked)
- Add shared _cache_attachment() method for images/audio/documents
- Refactor _extract_inline_media() to use _cache_attachment()
- Fix connect() signature for hermes-agent 0.18.0 compat (add is_reconnect)
pi-zulip-extension (Abiba):
- Extend attachment handling beyond images only: text files (decoded
inline), PDFs (pdftotext extraction), binary files (metadata)
- 50K char cap on text/PDF extraction to prevent context flooding
- Classify attachments by extension (image/text/pdf/binary)
pi-mcp-extension (Abiba):
- Detect bridge-side text truncation (… ellipsis marker)
- Rebuild relay message display from structuredContent when truncated
- Add rebuildRelayTextFromStructuredContent() helper
Config:
- Add ZULIP_ROLE=router to ecosystem.abiba.config.cjs (was missing)
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
name: zulip-platform
|
||||
label: Zulip
|
||||
kind: platform
|
||||
manifest_version: 1
|
||||
version: 1.0.0
|
||||
description: >
|
||||
Zulip gateway adapter for Hermes Agent. Connects to a self-hosted or cloud
|
||||
Zulip realm via the REST API — an event queue (register + long-poll) for
|
||||
receiving and POST /messages for sending — relaying messages between Zulip
|
||||
channels (streams)/topics and direct messages and the Hermes agent.
|
||||
Supports topic-aware replies, native file uploads, channel-scoped
|
||||
allowlists, @mention gating via message flags, and home-channel cron
|
||||
delivery. No Zulip SDK required — uses aiohttp.
|
||||
author: wachtelhund
|
||||
requires_env:
|
||||
- name: ZULIP_SITE
|
||||
description: "Zulip realm URL (e.g. https://example.zulipchat.com)"
|
||||
prompt: "Zulip site URL"
|
||||
password: false
|
||||
url: "https://zulip.com/api/api-keys"
|
||||
- name: ZULIP_EMAIL
|
||||
description: "Bot email address"
|
||||
prompt: "Bot email"
|
||||
password: false
|
||||
- name: ZULIP_API_KEY
|
||||
description: "Bot API key"
|
||||
prompt: "Zulip bot API key"
|
||||
password: true
|
||||
optional_env:
|
||||
- name: ZULIP_ALLOWED_USERS
|
||||
description: "Comma-separated sender emails/ids allowed to talk to the bot"
|
||||
prompt: "Allowed users (comma-separated)"
|
||||
password: false
|
||||
- name: ZULIP_ALLOW_ALL_USERS
|
||||
description: "Allow any Zulip user to trigger the bot (dev only)"
|
||||
prompt: "Allow all users? (true/false)"
|
||||
password: false
|
||||
- name: ZULIP_HOME_CHANNEL
|
||||
description: "Default target for cron / notification delivery (e.g. general/hermes)"
|
||||
prompt: "Home channel (stream/topic)"
|
||||
password: false
|
||||
- name: ZULIP_REQUIRE_MENTION
|
||||
description: "Require @bot mention in channels (default true). Set false for free-response everywhere."
|
||||
prompt: "Require @mention? (true/false)"
|
||||
password: false
|
||||
- name: ZULIP_FREE_RESPONSE_CHANNELS
|
||||
description: "Comma-separated stream ids/names where @mention is not required."
|
||||
prompt: "Free-response streams (comma-separated)"
|
||||
password: false
|
||||
- name: ZULIP_ALLOWED_CHANNELS
|
||||
description: "If set, the bot only responds in these stream ids/names (whitelist)."
|
||||
prompt: "Allowed streams (comma-separated)"
|
||||
password: false
|
||||
- name: ZULIP_ALL_PUBLIC_STREAMS
|
||||
description: "Subscribe the event queue to all public streams (default false)."
|
||||
prompt: "Listen to all public streams? (true/false)"
|
||||
password: false
|
||||
- name: ZULIP_DEFAULT_TOPIC
|
||||
description: "Topic used when a target has none (default 'general')."
|
||||
prompt: "Default topic"
|
||||
password: false
|
||||
Reference in New Issue
Block a user