103 lines
3.5 KiB
Markdown
103 lines
3.5 KiB
Markdown
# Notification daemon
|
|
|
|
`poc-daemon` routes messages from communication modules and internal
|
|
events through a hierarchical, activity-aware delivery system.
|
|
|
|
## Architecture
|
|
|
|
```
|
|
Communication modules Hooks
|
|
+-----------------+ +-------------+
|
|
| IRC (native) |--+ | poc-hook |
|
|
| Telegram | | mpsc | (all events|
|
|
+-----------------+ +------+ +------+------+
|
|
| | |
|
|
v | capnp-rpc
|
|
+----------+ |
|
|
| poc-daemon |
|
|
| |
|
|
| NotifyState <---------+
|
|
| +-- type registry
|
|
| +-- pending queue
|
|
| +-- threshold lookup
|
|
| +-- activity-aware delivery
|
|
|
|
|
| idle::State
|
|
| +-- presence detection
|
|
| +-- sleep/wake/dream modes
|
|
| +-- tmux prompt injection
|
|
+--------------------------
|
|
```
|
|
|
|
## Notification types and urgency
|
|
|
|
Types are free-form hierarchical strings: `irc.mention.nick`,
|
|
`irc.channel.bcachefs`, `telegram.kent`. Each has an urgency level:
|
|
|
|
| Level | Name | Meaning |
|
|
|-------|---------|--------------------------------------|
|
|
| 0 | ambient | Include in idle context only |
|
|
| 1 | low | Deliver on next check |
|
|
| 2 | normal | Deliver on next user interaction |
|
|
| 3 | urgent | Interrupt immediately |
|
|
|
|
Per-type thresholds walk up the hierarchy: `irc.channel.bcachefs-ai`
|
|
-> `irc.channel` -> `irc` -> default. Effective thresholds adjust by
|
|
activity state: raised when focused, lowered when idle, only urgent
|
|
when sleeping.
|
|
|
|
## Communication modules
|
|
|
|
**IRC** — native async TLS connection (tokio-rustls). Connects,
|
|
joins channels, parses messages, generates notifications. Runtime
|
|
commands: join, leave, send, status, log, nick. Per-channel logs
|
|
at `~/.consciousness/irc/logs/`.
|
|
|
|
**Telegram** — native async HTTP long-polling (reqwest). Downloads
|
|
media (photos, voice, documents). Chat ID filtering for security.
|
|
Runtime commands: send, status, log.
|
|
|
|
Both modules persist config changes to `~/.consciousness/daemon.toml` —
|
|
channel joins and nick changes survive restarts.
|
|
|
|
## Commands
|
|
|
|
```bash
|
|
poc-daemon # Start daemon
|
|
poc-daemon status # State summary
|
|
poc-daemon irc status # IRC module status
|
|
poc-daemon irc send TARGET MSG # Send IRC message
|
|
poc-daemon irc join CHANNEL # Join (persists to config)
|
|
poc-daemon irc leave CHANNEL # Leave
|
|
poc-daemon irc log [N] # Last N messages
|
|
poc-daemon telegram status # Telegram module status
|
|
poc-daemon telegram send MSG # Send Telegram message
|
|
poc-daemon telegram log [N] # Last N messages
|
|
poc-daemon notify TYPE URG MSG # Submit notification
|
|
poc-daemon notifications [URG] # Get + drain pending
|
|
poc-daemon notify-types # List all types
|
|
poc-daemon notify-threshold T L # Set per-type threshold
|
|
poc-daemon sleep / wake / quiet # Session management
|
|
poc-daemon stop # Shut down
|
|
```
|
|
|
|
## Configuration
|
|
|
|
Config: `~/.consciousness/daemon.toml`
|
|
|
|
```toml
|
|
[irc]
|
|
enabled = true
|
|
server = "irc.oftc.net"
|
|
port = 6697
|
|
tls = true
|
|
nick = "MyBot"
|
|
user = "bot"
|
|
realname = "My Bot"
|
|
channels = ["#mychannel"]
|
|
|
|
[telegram]
|
|
enabled = true
|
|
token = "bot-token-here"
|
|
chat_id = 123456789
|
|
```
|