Project Planning
Milestone 4 - Basic Analysis & Enhanced Content
Summary
Add basic analysis capabilities and improve content generation with insights.
Timeline
Weeks 9-10
Goal
Build the plugin-based analysis system infrastructure and implement initial analysis plugins (sentiment and event/context). Enhance content generation to dynamically include insights from available analysis plugins.
Deliverables
Analysis Agent (Plugin System Foundation)
- ✅ Agent Versioning:
- Reads active version from
AgentVersionDeploymenttable during initialization - Includes
agentVersionfield in all outputs - Version information stored in
AgentVersiontable
- Reads active version from
- ✅ Agent Registration:
- Registers agent type metadata via Agent Registry API (
POST /api/registry/register/) - Registers instance via Agent Registry API (
POST /api/register/) when spawned by orchestrator - Reports heartbeat via Agent Registry API (
POST /api/heartbeat/) with current load and status
- Registers agent type metadata via Agent Registry API (
- ✅ Plugin System Infrastructure:
- Analysis plugin interface definition
- Plugin registry system (
AnalysisTypeRegistrytable) - stores plugin metadata in database - Dynamic plugin loading mechanism:
- Queries
AnalysisTypeRegistryfor enabled plugins - Maps registry IDs to code locations (convention:
plugins/{pluginId}/index.ts) - Dynamically imports plugin code from codebase (not from database)
- Validates plugin implements
AnalysisPlugininterface
- Queries
- Plugin configuration system (loaded from
AgentConfigtable) - Generic analysis result storage structure
- ✅ Initial Analysis Plugins (code in
apps/analysis-agent/src/plugins/):- Sentiment Analysis Plugin (
plugins/sentiment/):- AI-powered sentiment analysis of news articles
- Aggregate sentiment score (positive/negative/neutral)
- Simple sentiment trend (improving/declining/stable)
- Registered in
AnalysisTypeRegistrytable
- Basic Event/Context Analysis Plugin (
plugins/event/):- Identify external events mentioned in media (natural disasters, political changes, regulatory updates)
- Basic relevance scoring for events
- Simple impact assessment (high/medium/low)
- Registered in
AnalysisTypeRegistrytable
- Sentiment Analysis Plugin (
- ✅ Analysis result storage via Agent Data API:
- Writes analysis results via
POST /api/analysis-agent/endpoint - Generic storage structure supporting any plugin output
- Store analysis results in database with plugin metadata
- Link to source data
- Includes
agentVersionin all outputs
- Writes analysis results via
- ✅ Simple insight extraction:
- Cross-plugin insight identification
- Identify top 3 insights from all analysis plugins
- Priority scoring (basic - based on analysis confidence scores and cross-plugin relevance)
Content Generation Agent (Enhanced)
- ✅ Agent Versioning (already implemented in Milestone 2, enhanced here):
- Reads active version from
AgentVersionDeploymenttable - Includes
agentVersionfield in all outputs
- Reads active version from
- ✅ Agent Registration (already implemented in Milestone 2, enhanced here):
- Continues to register and report heartbeat
- ✅ Dynamic section generation system:
- Section mapping configuration for analysis plugins
- Dynamic section resolution based on available analysis results
- Conditional section rendering (only show sections with results)
- Fallback to basic content structure if no analysis results are available
- ✅ Enhanced newsletter structure:
- Executive summary (aggregates all analysis insights)
- Key insights section (from all analysis plugins)
- Dynamic analysis sections (sentiment, event/context based on available plugins)
- News summary with sentiment indicators
- ✅ Improved prompts:
- Include analysis results from all plugins in prompts
- Generate actionable insights across analysis types
- Plugin-aware prompt construction
- ✅ Better formatting:
- Structured sections with dynamic content
- Improved HTML template (basic styling)
- Basic template system for plugin-specific sections (simple string interpolation, advanced templating in later milestones)
- ✅ Writes newsletter via Agent Data API:
- Uses
POST /api/content-generation/endpoint (already implemented in Milestone 2) - Includes
agentVersionin all outputs
- Uses
Database Updates
- ✅ Add
AnalysisTypeRegistrytable for plugin registration:- Stores plugin metadata (id, name, version, enabled status, configSchema, outputSchema, sectionTemplate)
- Plugin implementation code must exist in codebase (
apps/analysis-agent/src/plugins/{pluginId}/) - Database registry controls which plugins are active, but does not store executable code
- ✅ Add generic analysis result storage (supports any plugin output structure):
- Stores analysis results with plugin type reference
- Links to source data via foreign keys
- Flexible JSON structure for plugin-specific results
- ✅ Link analysis results to newsletters:
- Many-to-many relationship between analysis results and newsletters
- Allows multiple analysis runs to contribute to a single newsletter
- ✅ Add plugin configuration storage in
AgentConfig:- Plugin-specific settings (e.g., sentiment thresholds, event relevance scores)
- Per-ticker plugin enablement flags
Hermes Orchestrator (Update)
- ✅ Newsletter pipeline enhancements:
- Checks data freshness before triggering analysis
- Can trigger immediate data collection if data is stale (> 4 hours old) via HTTP endpoint
- Invokes Analysis Agent HTTP endpoint after data freshness check
- Tracks job execution in
AgentJobExecutiontable
Task Timeline
Limitations (Acceptable for This Milestone)
- Plugin system supports basic plugin interface (advanced features in later milestones)
- Only two initial plugins: sentiment and basic event/context analysis
- No competitive analysis plugin yet
- Simple insight extraction (cross-plugin insights are basic)
- Basic event identification only
- Section templates are simple (advanced templating in later milestones)
Success Criteria
- ✅ Agent versioning is functional for Analysis Agent (agent reads active version, includes in outputs)
- ✅ Agent registration is functional for Analysis Agent (agent registers type and instance, reports heartbeat)
- ✅ Plugin system infrastructure is functional
- ✅ Analysis plugins can be registered in
AnalysisTypeRegistrytable and loaded dynamically from codebase - ✅ Plugin code exists in codebase (
apps/analysis-agent/src/plugins/) and is loaded by convention - ✅ Analysis agent processes collected data using registered plugins
- ✅ Sentiment analysis plugin calculates and stores sentiment scores via Agent Data API
- ✅ Event/context analysis plugin identifies and assesses events via Agent Data API
- ✅ All analysis outputs include
agentVersionfield - ✅ Content generation dynamically includes sections for available analysis plugins
- ✅ Newsletters show sentiment and event/context information
- ✅ Insights are relevant and actionable
- ✅ New analysis plugins can be added via database registration (infrastructure ready)
Next Steps
After this milestone, newsletters include basic analysis. Milestone 5 will add query strategy to improve data collection quality and discover entities.