Go rewrite of GengoWatcher with a clean monitor API and parity-focused RSS/WebSocket behavior.
- Phase 1 complete: core public types and monitor contract.
- Phase 2 complete: RSS and WebSocket monitors implemented with hardening/reliability follow-ups.
- Phase 3 in progress: TUI baseline (Jobs + Stats) and CLI launch path.
- Command-input, log-viewer, and state persistence are intentionally deferred until post-baseline phase work.
- Remaining phases (planned): full TUI scope, state persistence, notifications, Email monitor, Website monitor.
See go-rewrite-plan.md for full design and roadmap.
- Public API types in
pkg/gengo(Job,JobEvent,Monitor). - Config loader in
internal/config(defaults + env override + validation). - RSS monitor in
internal/monitor/rsswith:- startup priming (no initial burst),
- deduplication and min-reward filtering,
- timeout and in-flight guard,
- pause-file support,
- exponential backoff and error events.
- WebSocket monitor in
internal/monitor/websocketwith:- post-connect auth payload,
job_publishedandavailable_collectionparsing,- reconnect loop with bounded backoff,
- handshake fallback when custom headers are rejected,
- read timeout protection and error events.
- Runtime watcher pipeline in
internal/app+internal/pipelinewith:- canonical first-seen routing,
- non-blocking reaction dispatch,
- bounded telemetry writes with error hooks.
- Bubble Tea baseline UI in
internal/uiwith:- Jobs and Stats tabs,
- live first-seen job updates from watcher runtime,
- aggregated dropped-event telemetry and join-timeout observability for the TUI event bridge.
- CLI entrypoint in
cmd/gengowatcher:- config loading/validation,
- monitor enablement guard,
- signal-aware TUI startup.
Important env vars currently used by implemented monitors:
GENGO_USER_IDGENGO_USER_SESSIONGENGO_USER_KEY(optional)GENGO_RSS_PAUSE_FILEGENGO_RSS_PAUSE_SLEEPGENGO_RSS_MAX_BACKOFF
Run all tests:
go test ./...Run monitor-focused tests:
go test ./internal/monitor/rss ./internal/monitor/websocket -v