Expand description
Event Bus — universal message ingestion for agent sessions.
Any external system (Discord, Slack, Uptime Kuma, cron, CLI, other agents) can push events into a running session. Events are formatted as system messages with source metadata, allowing the agent to respond through the appropriate channel.
Modules§
- format
- ingest
- Inbox watcher — uses inotify (via the
notifycrate) to instantly react to dropped event JSON files in the inbox directory. Falls back to polling. - queue
- registry
- socket
- types
Structs§
Enums§
Functions§
- find_
session_ registration - Resolve a query to a registration. Resolution order:
- format_
event_ for_ agent - Format an event as a system message the agent can understand.
Wrapped in XML tags to prevent prompt injection — the model should treat
content inside
tags as DATA, not instructions. Example: <event id="abc" type="alert" severity="high" source="uptime-kuma" channel="alerts">Jellyfin is DOWN.</event> - list_
active_ sessions - Read all registration files, prune stale ones (dead PID), return live set.
- register_
session - Write
{session_id}.jsonatomically (tmp + rename). Chmod 0600 on Unix. - registry_
dir - Returns the session runtime directory, creating it mode 0700 if needed.
- sanitize_
session_ id - Sanitize a session ID for safe use in filenames and socket paths.
Rejects path separators,
.., and non-printable characters. Returns the sanitized string (replaces unsafe chars with_). - socket_
path_ for_ session - Returns the Unix domain socket path for a session.
Sockets live in the registry dir —
$SYNAPS_RUNTIME_DIRwhen set (e.g./run/user/<uid>/synaps), otherwise$SYNAPS_BASE_DIR/run(default~/.synaps-cli/run/) — which is user-owned and mode 0700, avoiding /tmp symlink squatting and TOCTOU races. - unregister_
session - Remove the registration file. Best-effort — never panics.
Also removes the socket file at
socket_pathif it exists. - watch_
inbox