Terminal capture, signature triage, and edge-triggered alerts #193
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "terminal-capture-and-alerts"
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?
What
Adds the terminal-capture + signature-triage half of Glasspane — the complement to its event-state model. Ports the brain of the clawdie-ai
tmux-screenshotskill (not the PNG) into the Rust core and wires it into the daemon as an autonomous poll loop with edge-triggered alerts.colibri-glasspane (new modules)
terminal.rs—strip_ansi, content-hash frame ids (sha256[:12]),CapturedFrame, andTerminalRecorder: a deduped ring buffer that drops frames identical to the previous one (so polling a near-static pane collapses into a compact log of real transitions) with edge-triggered alerting (a failure fires once on its rising edge; re-fires only after it clears).capture_tmux_paneis a thin seam so the dedup/triage core is testable without a terminal.signatures.rs— data-drivenSeverity/Signature/Detection/SignatureSetmatcher + a high-valuelinux_default()set (systemd/oom/disk/docker/forwarding). The per-OS set is the hook into capability-routing.colibri-daemon (wiring)
DaemonState.terminalmap of per-pane recorders; poll tick inrun_loopgated onCOLIBRI_TERMINAL_CAPTURE, seeded fromCOLIBRI_TERMINAL_WATCH.capture_and_record()shares the blocking tmux capture (onspawn_blocking) + brief-lock fold between the loop and the socket; env-gated Telegram alert routing that no-ops cleanly when unconfigured.terminal-watch/terminal-unwatch/terminal-list/terminal-history/terminal-poll.env_boolhelper: forgiving truthy parsing (1/true/yes/on) soCOLIBRI_TERMINAL_CAPTURE=1is not silentlyfalse(Rust'sbool::from_stronly acceptstrue/false).Testing
active_alerts.Notes / follow-ups (not in this PR)
linux_default()signatures exist so far — a FreeBSD set is the next per-OS addition.COLIBRI_CACHE_WARMING,COLIBRI_HEADROOM_ENABLED) share thebool::from_strfootgun; left as-is (out of scope).🤖 Generated with Claude Code