trading/services/meet_kevin_watcher
Viktor Barzin 8f5ee8f1c3 feat(meet-kevin): pipeline orchestrator + service main loop
Implements Task 8 of the Meet Kevin revival plan.

- pipeline.py: PipelineDeps dataclass (frozen, DI-friendly), process_one_video
  state machine (discovered→captioned→analyzed with retry/cost-cap logic),
  and daily_cost_used() SQL helper.
- main.py: async run() entry point with RSS poll loop, per-video pipeline
  processing, OTEL counters, SIGTERM/SIGINT shutdown, httpx client lifecycle,
  and clean Anthropic/DB teardown.
- tests: 5 pipeline unit tests (happy path, no captions, cost cap, retry
  increment, failed-after-3-retries) all passing; full watcher suite 56/56.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 19:48:43 +00:00
..
__init__.py feat: scaffold meet_kevin_watcher service + config 2026-05-21 19:33:04 +00:00
caption_extractor.py feat(meet-kevin): caption extractor via yt-dlp 2026-05-21 19:40:52 +00:00
config.py feat: scaffold meet_kevin_watcher service + config 2026-05-21 19:33:04 +00:00
llm_analyzer.py feat(meet-kevin): Claude Sonnet 4.6 LLM analyzer (tool-use forcing + prompt cache) 2026-05-21 19:44:57 +00:00
main.py feat(meet-kevin): pipeline orchestrator + service main loop 2026-05-21 19:48:43 +00:00
pipeline.py feat(meet-kevin): pipeline orchestrator + service main loop 2026-05-21 19:48:43 +00:00
rss_poller.py feat(meet-kevin): RSS poller for YouTube uploads 2026-05-21 19:36:22 +00:00