{"id":32712450,"url":"https://github.com/vaitar/slack-event-manager","last_synced_at":"2026-04-17T05:02:14.936Z","repository":{"id":319157350,"uuid":"1073925506","full_name":"VaitaR/slack-event-manager","owner":"VaitaR","description":"AI-powered event extraction. Automatically processes Slack messages to extract structured events, deduplicate them, and publish daily digests.","archived":false,"fork":false,"pushed_at":"2026-03-30T17:23:29.000Z","size":1553,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-30T19:21:04.189Z","etag":null,"topics":["llm","openai","slack"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/VaitaR.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-10-10T20:52:25.000Z","updated_at":"2026-02-09T12:04:31.000Z","dependencies_parsed_at":"2025-10-18T08:35:10.572Z","dependency_job_id":null,"html_url":"https://github.com/VaitaR/slack-event-manager","commit_stats":null,"previous_names":["vaitar/slack-event-manager"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/VaitaR/slack-event-manager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VaitaR%2Fslack-event-manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VaitaR%2Fslack-event-manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VaitaR%2Fslack-event-manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VaitaR%2Fslack-event-manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VaitaR","download_url":"https://codeload.github.com/VaitaR/slack-event-manager/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VaitaR%2Fslack-event-manager/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31915900,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T18:22:33.417Z","status":"online","status_checked_at":"2026-04-17T02:00:06.879Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["llm","openai","slack"],"created_at":"2025-11-02T09:00:48.015Z","updated_at":"2026-04-17T05:02:14.931Z","avatar_url":"https://github.com/VaitaR.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Slack Event Manager\n\nMulti-source event extraction pipeline for **Slack** and **Telegram**.\n\nThe system ingests channel messages, scores candidates, extracts structured events with LLMs, deduplicates results, and optionally publishes a digest to Slack.\n\n## Current Architecture\n\n### Sources\n- Slack (`MessageSource.SLACK`)\n- Telegram (`MessageSource.TELEGRAM`)\n\n### Pipeline Modes\n1. **Direct orchestrator (recommended for local/dev):**\n   - `scripts/run_multi_source_pipeline.py`\n   - Runs ingest -\u003e candidates -\u003e LLM extraction -\u003e dedup in one process\n2. **Queue-based workers (recommended for production):**\n   - Scheduler + workers (`scripts/run_pipeline_scheduler.py`, `scripts/run_ingest_worker.py`, `scripts/run_extraction_worker.py`, `scripts/run_llm_worker.py`, `scripts/run_dedup_worker.py`)\n\n### Key Design Points\n- Source-aware domain model (`source_id` on messages/candidates/events)\n- Source-aware repository methods for ingestion, candidate selection, extraction, and dedup\n- Per-source prompt configuration (`config/prompts/slack.yaml`, `config/prompts/telegram.yaml`)\n- SQLite and PostgreSQL support through repository factory\n\n## Repository Layout\n\n```text\nsrc/\n  adapters/        # Slack/Telegram clients, repositories, factories\n  clients/         # Wrapped client interfaces\n  config/          # Settings + logging\n  domain/          # Models, protocols, business constants\n  observability/   # Metrics/tracing\n  ports/           # Task queue and job runner ports\n  presentation/    # Streamlit orchestration helpers\n  services/        # Scoring, dedup, normalization, object registry, etc.\n  use_cases/       # Ingest/extract/dedup/publish orchestration\n  workers/         # Task-queue workers\nscripts/           # CLI entry points and operational scripts\nconfig/defaults/   # Example YAML templates copied by setup script\n```\n\n## Requirements\n\n- Python `3.11+`\n- `uv`\n- Slack bot token (`SLACK_BOT_TOKEN`)\n- OpenAI API key (`OPENAI_API_KEY`)\n- Optional for Telegram:\n  - `TELEGRAM_API_ID`\n  - `TELEGRAM_API_HASH`\n\n## Quick Start\n\n### 1. Install\n\n```bash\ngit clone https://github.com/VaitaR/slack-event-manager.git\ncd slack-event-manager\npip install uv\nmake sync-dev\n```\n\n### 2. Generate Config Files\n\n```bash\n./scripts/setup_config.sh\n```\n\nThis creates local editable files from `config/defaults/*.example.yaml`:\n- `config/main.yaml`\n- `config/channels.yaml`\n- `config/object_registry.yaml`\n- `config/telegram_channels.yaml`\n- `.env`\n\n### 3. Fill Secrets\n\nEdit `.env`:\n\n```bash\nSLACK_BOT_TOKEN=xoxb-...\nOPENAI_API_KEY=sk-...\n\n# Optional Telegram\nTELEGRAM_API_ID=123456\nTELEGRAM_API_HASH=...\n\n# Optional PostgreSQL\nPOSTGRES_PASSWORD=...\n```\n\n## Configuration Model\n\nRuntime config is loaded from `config/main.yaml` + other `config/*.yaml` files and merged.\n\nImportant files:\n- `config/main.yaml` - global pipeline/db/llm/digest settings\n- `config/channels.yaml` - Slack scoring/channel config\n- `config/telegram_channels.yaml` - Telegram channel config\n- `config/object_registry.yaml` - canonical object mappings\n\nDetailed reference: [`docs/CONFIG.md`](docs/CONFIG.md)\n\n## Run Commands\n\n### Multi-source Pipeline\n\n```bash\n# Run all enabled sources once\npython scripts/run_multi_source_pipeline.py\n\n# Run only Slack\npython scripts/run_multi_source_pipeline.py --source slack\n\n# Run only Telegram\npython scripts/run_multi_source_pipeline.py --source telegram\n\n# Continuous mode\npython scripts/run_multi_source_pipeline.py --interval-seconds 3600\n\n# Publish digest\npython scripts/run_multi_source_pipeline.py --publish\n\n# Dry-run publish\npython scripts/run_multi_source_pipeline.py --publish --dry-run\n```\n\n### Legacy Slack-only Pipeline\n\n```bash\npython scripts/run_pipeline.py\n```\n\nUse this only if you need the older Slack-only flow. For two-source processing use `run_multi_source_pipeline.py`.\n\n### Queue-based Runtime\n\n```bash\n# Enqueue periodic iterations\npython scripts/run_pipeline_scheduler.py --interval-seconds 300\n\n# Workers\npython scripts/run_ingest_worker.py\npython scripts/run_extraction_worker.py\npython scripts/run_llm_worker.py\npython scripts/run_dedup_worker.py\n```\n\nNotes:\n- Current ingest worker composition is Slack-oriented (`create_slack_ingestion_handlers`).\n- Multi-source end-to-end processing is fully supported via `run_multi_source_pipeline.py`.\n\n## Docker\n\n```bash\ndocker compose build\ndocker compose up -d\n```\n\nServices include PostgreSQL, pipeline scheduler/workers, Telegram worker, metrics exporter, and Streamlit UI.\n\n## Testing \u0026 Quality\n\n```bash\n# Fast tests\nmake test-quick\n\n# Coverage\nmake test-cov\n\n# Lint + format + typecheck + tests\nmake ci\n\n# Fast local checks\nmake pre-commit\n```\n\nTooling:\n- Formatter/Linter: Ruff\n- Type checking: mypy\n- Tests: pytest\n\n## Streamlit UI\n\n```bash\nstreamlit run app.py\n```\n\nDefault URL: `http://127.0.0.1:8501`\n\n## Operations \u0026 Reference Docs\n\n- Docs index: [`docs/README.md`](docs/README.md)\n- Configuration: [`docs/CONFIG.md`](docs/CONFIG.md)\n- Metrics/health/observability: [`docs/OPERATIONS_OBSERVABILITY.md`](docs/OPERATIONS_OBSERVABILITY.md)\n- Pipeline workers: [`docs/pipeline_workers.md`](docs/pipeline_workers.md)\n\n## Development Notes\n\n- Keep secrets only in `.env`\n- Keep non-sensitive app config in `config/*.yaml`\n- Prefer `make` targets over manual tool invocations\n- Validate changes with `make ci` before pushing\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvaitar%2Fslack-event-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvaitar%2Fslack-event-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvaitar%2Fslack-event-manager/lists"}