CI / validate (push) Failing after 2s
Rewrite hermes-zulip-plugin as a proper Hermes platform plugin with
auto-discovery via plugin.yaml + __init__.py + register() pattern.
Features:
- Zulip event queue registration and polling for real-time messages
- DM-first architecture — private messages route into agent's session
- Placeholder→edit streaming UX (Thinking... → final response)
- Typing indicators via Zulip API
- Exponential backoff reconnection and queue re-registration
- Message deduplication with sliding window
- Config via config.yaml or env vars (ZULIP_EMAIL, ZULIP_API_KEY, ZULIP_SITE)
- Standalone sender for cron/notification delivery
- Plugin auto-discovery via @hermes_agent.plugins entry point
Architecture follows the proven ntfy adapter pattern:
plugins/platforms/{name}/plugin.yaml
plugins/platforms/{name}/__init__.py → exports register()
plugins/platforms/{name}/adapter.py → ZulipAdapter(BasePlatformAdapter)
Deployment: copy to ~/.hermes/plugins/platforms/zulip/ and restart gateway
Requirements: pip install zulip httpx
Closes issue #24
48 lines
1.7 KiB
YAML
48 lines
1.7 KiB
YAML
name: zulip-platform
|
|
label: Zulip
|
|
kind: platform
|
|
version: 1.0.0
|
|
description: >
|
|
Zulip messaging gateway adapter for Hermes Agent.
|
|
Connects to any Zulip server, registers an event queue, and polls for
|
|
incoming messages. Handles DMs first (ADR-001), with @mention support
|
|
planned. Uses the Zulip Python SDK for API access.
|
|
|
|
DM-first architecture: private messages route directly into the Hermes
|
|
agent's session, so the same personality and conversation continuity
|
|
is maintained between TUI, CLI, and Zulip.
|
|
|
|
Features: event queue polling, typing indicators, placeholder→edit
|
|
streaming, exponential backoff reconnection, health endpoint.
|
|
author: Syslog Solution LLC
|
|
requires_env:
|
|
- name: ZULIP_EMAIL
|
|
description: "Zulip bot email address (e.g. tanko-bot@chat.sysloggh.net)"
|
|
prompt: "Zulip bot email"
|
|
password: false
|
|
- name: ZULIP_API_KEY
|
|
description: "Zulip bot API key"
|
|
prompt: "Zulip API key"
|
|
password: true
|
|
- name: ZULIP_SITE
|
|
description: "Zulip server URL (e.g. https://chat.sysloggh.net)"
|
|
prompt: "Zulip server URL"
|
|
password: false
|
|
optional_env:
|
|
- name: ZULIP_ALLOWED_USERS
|
|
description: "Comma-separated Zulip user IDs or emails allowed to DM the agent"
|
|
prompt: "Allowed users (comma-separated emails or IDs)"
|
|
password: false
|
|
- name: ZULIP_ALLOW_ALL_USERS
|
|
description: "Allow any user to DM the bot (disables allowlist)"
|
|
prompt: "Allow all users? (true/false)"
|
|
password: false
|
|
- name: ZULIP_HOME_CHANNEL
|
|
description: "Default recipient for cron / notification delivery"
|
|
prompt: "Home channel user email (or empty)"
|
|
password: false
|
|
- name: ZULIP_HOME_CHANNEL_NAME
|
|
description: "Human label for the home channel"
|
|
prompt: "Home channel display name"
|
|
password: false
|