How sirius-5107/sentinel works
Sentinel is a financial intelligence platform: it collects market articles, enriches and deduplicates them, then synthesises signals into market events and daily briefs. Its persistence layer stores articles and domain records; shared domain models and protocols define cross-stage contracts. The README also describes knowledge, research, publishing, API and CLI capabilities, but these are roadmap or package placeholders in the supplied tree. Edges for the documented pipeline use the README; implementation edges cite the source index or excerpts, so unsampled behavior is not assumed.
Main entry points: processor.py Article processor · models Domain models · collection.py Collection service · synthesiser.py Event synthesiser
Components 32
Collection
- Collection service
sentinel/services/collection.py - RSS ingestion
sentinel/services/ingestion.py - Collector factory
sentinel/collector/factory.py - RSS collector
sentinel/collector/rss.py - Web scraper
sentinel/collector/scraper.py - Source configuration
sentinel/config/loaders.py
Processing
- Article processor
sentinel/processing/processor.py - Classifier
sentinel/processing/classifier.py - Importance scorer
sentinel/processing/scorer.py - Entity extractor
sentinel/processing/extractor.py - Deduplicator
sentinel/processing/dedup.py
Intelligence
- Analyst
sentinel/intelligence/analyst.py - Event synthesiser
sentinel/intelligence/synthesiser.py - Daily brief
sentinel/intelligence/daily_brief.py - Knowledge base
sentinel/knowledge - Research documents
sentinel/research - Publishing channels
sentinel/publish - REST API
sentinel/api - Operations CLI
sentinel/cli - Scheduler
sentinel/scheduler - Analysis prompts
sentinel/intelligence/prompts/analysis.py - Event prompts
sentinel/intelligence/prompts/event_synthesis.py
Persistence
- Domain repositories
sentinel/db/repository.py - Database mappings
sentinel/db/models.py - Database session
sentinel/db/session.py - PostgreSQL + pgvector
Shared domain
- Domain models
sentinel_core/models - Value objects
sentinel_core/types/value_objects.py - Domain enums
sentinel_core/enums - Stage protocols
sentinel_core/interfaces/protocols.py - Domain exceptions
sentinel_core/exceptions/base.py
Other components
- Investor / operator
Connections 37
- Investor / operator → Collection service: initiates collection
README.md - Collection service → Collector factory: selects collector
sentinel/services/collection.py - Collection service → Source configuration: loads sources
sentinel/services/collection.py - Collection service → Domain repositories: persists run data
sentinel/services/collection.py - Collector factory → RSS collector: creates
sentinel/collector/factory.py - Collector factory → Web scraper: creates
sentinel/collector/factory.py - RSS ingestion → RSS collector: collects with
sentinel/services/ingestion.py - RSS ingestion → Domain repositories: saves articles
sentinel/services/ingestion.py - RSS collector → Domain models: yields articles
sentinel/collector/rss.py - RSS collector → Stage protocols: implements collector contract
sentinel/collector/rss.py - Collection service → Article processor: passes collected articles
README.md - Article processor → Classifier: classifies
sentinel/processing/processor.py - Article processor → Importance scorer: scores
sentinel/processing/processor.py - Article processor → Entity extractor: extracts entities
sentinel/processing/processor.py - Article processor → Deduplicator: deduplicates
sentinel/processing/processor.py - Article processor → Domain models: enriches articles
sentinel/processing/processor.py - Article processor → Stage protocols: implements processor contract
sentinel/processing/processor.py - Article processor → Event synthesiser: passes processed signals
README.md - Event synthesiser → Event prompts: uses prompts
sentinel/intelligence/synthesiser.py - Event synthesiser → Domain models: creates market events
sentinel/intelligence/synthesiser.py - Event synthesiser → Stage protocols: uses provider contract
sentinel/intelligence/synthesiser.py - Analyst → Analysis prompts: uses prompts
sentinel/intelligence/analyst.py - Investor / operator → Daily brief: requests brief
README.md - Daily brief → Publishing channels: publishes brief
README.md - Event synthesiser → Knowledge base: maintains event knowledge
README.md - Knowledge base → Research documents: supports research
README.md - Investor / operator → REST API: queries insights
README.md - Investor / operator → Operations CLI: operates pipeline
README.md - Scheduler → Collection service: triggers runs
README.md - Domain repositories → Database mappings: maps domain records
sentinel/db/repository.py - Database session → Database mappings: configures mappings
sentinel/db/session.py - Database session → PostgreSQL + pgvector: opens sessions
- Domain repositories → PostgreSQL + pgvector: persists records
- Database mappings → Domain models: maps domain models
sentinel/db/models.py - Domain models → Value objects: uses validated types
sentinel_core/models/article.py - Domain models → Domain enums: uses classifications
sentinel_core/models/article.py - Domain models → Domain exceptions: validates domain rules