Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .pylintrc
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ clear-cache-post-run=no
# A comma-separated list of package or module names from where C extensions may
# be loaded. Extensions are loading into the active Python interpreter and may
# run arbitrary code.
extension-pkg-allow-list=
extension-pkg-allow-list=google,jira

# A comma-separated list of package or module names from where C extensions may
# be loaded. Extensions are loading into the active Python interpreter and may
Expand Down Expand Up @@ -64,7 +64,7 @@ ignore-patterns=^\.#
# manipulated during runtime and thus existing member attributes cannot be
# deduced by static analysis). It supports qualified module names, as well as
# Unix pattern matching.
ignored-modules=
ignored-modules=google,google.auth,google.auth.transport,google.oauth2,jira,jira.resources

# Python code to execute, usually for sys.path manipulation such as
# pygtk.require().
Expand Down
18 changes: 9 additions & 9 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,11 @@ help:
# Start MCP servers
start-google-mcp:
@echo "Starting Google MCP server..."
UVICORN_PORT=8100 python -m src.mcp.google_tools_mcp
UVICORN_PORT=8100 python -m src.services.mcp.google_tools_mcp

start-jira-mcp:
@echo "Starting JIRA MCP server..."
UVICORN_PORT=8101 python -m src.mcp.jira_tools_mcp
UVICORN_PORT=8101 python -m src.services.mcp.jira_tools_mcp

# Start agent servers
start-google-agent:
Expand All @@ -63,17 +63,17 @@ start-workflow:
# Start registry service
start-registry:
@echo "Starting agent registry service..."
UVICORN_PORT=8003 python -m src.services.registry_service
UVICORN_PORT=8003 python -m src.services.registry.registry_service

# Start all servers
start-all:
@echo "Starting all servers..."
@echo "Starting agent registry service..."
python -m src.services.registry_service &
python -m src.services.registry.registry_service &
@echo "Starting Google MCP server..."
python -m src.mcp.google_tools_mcp &
python -m src.services.mcp.google_tools_mcp &
@echo "Starting JIRA MCP server..."
python -m src.mcp.jira_tools_mcp &
python -m src.services.mcp.jira_tools_mcp &
@echo "Starting Jira agent..."
UVICORN_PORT=8000 python -m src.core.agents.jira_agent &
@echo "Starting Google agent..."
Expand All @@ -85,12 +85,12 @@ start-all:
# Stop all servers
stop-all:
@echo "Stopping all servers..."
pkill -f "python -m src.services.registry_service" || true
pkill -f "python -m src.services.registry.registry_service" || true
pkill -f "python -m src.core.agents.jira_agent" || true
pkill -f "python -m src.core.agents.google_agent" || true
pkill -f "python -m src.core.workflow_servers.action_items_server" || true
pkill -f "python -m src.mcp.google_tools_mcp" || true
pkill -f "python -m src.mcp.jira_tools_mcp" || true
pkill -f "python -m src.services.mcp.google_tools_mcp" || true
pkill -f "python -m src.services.mcp.jira_tools_mcp" || true
@echo "All servers stopped!"

# Installation and Setup
Expand Down
148 changes: 86 additions & 62 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,24 +71,28 @@ MeetingActions follows a microservices architecture with specialized agents and
- Agent discovery and dynamic dispatch via service registry
- Human review and approval workflow support

### 4. **Agent Registry Service** (`src/services/registry_service.py`)
### 4. **Agent Registry Service** (`src/services/registry/`)
- **Purpose**: Service discovery and health monitoring
- **Port**: 8003
- **Components**:
- `registry_service.py`: Standalone registry server
- `registry_client.py`: Client library for service discovery
- `agent_registry.py`: Registry data models and in-memory store
- **Features**:
- Agent registration and discovery
- Health check monitoring
- Load balancing support
- Service metadata management

### 5. **Google MCP Server** (`src/mcp/google_tools_mcp.py`)
### 5. **Google MCP Server** (`src/services/mcp/google_tools_mcp.py`)
- **Purpose**: Model Context Protocol server for Google tools
- **Port**: 8100
- **Features**:
- Google API tool exposure via MCP
- Standardized tool interface
- Authentication management

### 6. **JIRA MCP Server** (`src/mcp/jira_tools_mcp.py`)
### 6. **JIRA MCP Server** (`src/services/mcp/jira_tools_mcp.py`)
- **Purpose**: Model Context Protocol server for JIRA tools
- **Port**: 8101
- **Features**:
Expand Down Expand Up @@ -229,81 +233,91 @@ python -m src.clients.meeting_actions_client --url http://localhost:8002
src/
├── clients/ # Client applications
│ └── meeting_actions_client.py # Interactive CLI client
├── common/ # Shared utilities and patterns
│ └── singleton_meta.py # Singleton metaclass implementation
├── core/ # Business logic and agents
│ ├── agents/ # Individual agent implementations
│ │ ├── jira_agent.py # Jira integration agent
│ │ ├── google_agent.py # Google Workspace agent
│ │ └── utils.py # Agent utility functions
│ ├── base/ # Base classes and utilities
│ │ ├── base_server.py # Base server for all services
│ │ ├── base_agent_server.py # Base for agent servers
│ │ └── base_workflow_server.py # Base for workflow servers
│ ├── schemas/ # Pydantic models and schemas
│ │ ├── __init__.py # Centralized schema exports
├── core/ # Business logic and domain
│ ├── agents/ # Individual agent implementations
│ │ ├── jira_agent.py # Jira integration agent
│ │ └── google_agent.py # Google Workspace agent
│ ├── error_handler.py # Centralized error handling and resilience
│ ├── schemas/ # Pydantic models and schemas
│ │ ├── __init__.py # Centralized schema exports
│ │ ├── agent_response.py # Unified AgentResponse model
│ │ └── workflow_models.py # Workflow data models
│ ├── workflows/ # Event-driven workflow definitions
│ ├── workflows/ # Event-driven workflow definitions
│ │ ├── meeting_notes_and_generation_orchestrator.py
│ │ ├── action_items_dispatch_orchestrator.py
│ │ └── sub_workflows/ # Focused sub-workflow components
│ │ ├── meeting_notes_workflow.py
│ │ ├── action_items_generation_workflow.py
│ │ └── agent_dispatch_workflow.py
│ └── workflow_servers/ # Workflow execution servers
│ └── workflow_servers/ # Workflow execution servers
│ └── action_items_server.py # Action items server
├── infrastructure/ # Platform infrastructure
│ ├── cache/ # Redis caching with singleton pattern
├── shared/ # Shared components and utilities
│ ├── agents/ # Agent utilities
│ │ └── utils.py # Agent utility functions
│ ├── base/ # Base classes for servers
│ │ ├── base_server.py # Base server for all services
│ │ ├── base_agent_server.py # Base for agent servers
│ │ └── base_workflow_server.py # Base for workflow servers
│ ├── common/ # Common patterns and utilities
│ │ └── singleton_meta.py # Singleton metaclass implementation
│ ├── llm/ # LLM-related utilities
│ │ ├── summarization/ # Summarization tools
│ │ │ └── progressive.py # Multi-pass summarization engine
│ │ └── token_utils.py # Token counting and management
│ └── resilience/ # Resilience patterns
│ ├── circuit_breaker.py # Circuit breaker implementation
│ ├── exceptions.py # Custom exception hierarchy
│ └── retry.py # Retry logic and decorators
├── infrastructure/ # Platform infrastructure
│ ├── cache/ # Redis caching with singleton pattern
│ │ ├── redis_cache.py # Redis cache implementation
│ │ └── document_cache.py # Document-specific caching
│ ├── config/ # Configuration management
│ │ ├── read_config.py # Configuration reader (with progressive_summarization config)
│ │ └── models.py # Configuration models
│ ├── prompts/ # System prompts (organized by category)
│ │ ├── prompts.py # Prompt loader and management
│ │ ├── action_items/ # Action items generation prompts
│ ├── config/ # Configuration management
│ │ ├── read_config.py # Configuration reader
│ │ └── models.py # Configuration models
│ ├── prompts/ # System prompts (organized by category)
│ │ ├── prompts.py # Prompt loader and management
│ │ ├── action_items/ # Action items generation prompts
│ │ │ ├── generation.txt
│ │ │ ├── refinement.txt
│ │ │ └── review.txt
│ │ ├── agents/ # Agent-specific prompts
│ │ ├── agents/ # Agent-specific prompts
│ │ │ ├── agent_query.txt
│ │ │ ├── google_context.txt
│ │ │ ├── jira_context.txt
│ │ │ └── tool_dispatcher_prompt.txt
│ │ ├── summarization/ # Progressive summarization prompts
│ │ ├── summarization/ # Progressive summarization prompts
│ │ │ ├── basic.txt
│ │ │ ├── progressive_pass1.txt
│ │ │ ├── progressive_pass2.txt
│ │ │ └── progressive_pass3.txt
│ │ ├── meeting_notes/ # Meeting notes processing
│ │ ├── meeting_notes/ # Meeting notes processing
│ │ │ └── identify_file.txt
│ │ └── legacy/ # Deprecated prompts (backward compatibility)
│ │ └── legacy/ # Deprecated prompts (backward compatibility)
│ │ └── ...
│ ├── utils/ # Utility functions
│ │ ├── progressive_summarization.py # Multi-pass summarization engine
│ │ └── token_utils.py # Token counting and management
│ ├── logging/ # Structured logging
│ ├── logging/ # Structured logging
│ │ └── logging_config.py # Logging configuration
│ ├── observability/ # Langfuse integration
│ │ └── observability.py # Monitoring and tracing
│ └── registry/ # Service registry
│ ├── agent_registry.py # Agent registration
│ └── registry_client.py # Registry client
├── integrations/ # External service integrations
│ ├── google_tools/ # Google Workspace APIs
│ │ ├── google_tools.py # Google API tools
│ │ └── auth_utils.py # Authentication utilities
│ ├── jira_tools/ # Jira API integration
│ │ ├── jira_tools.py # Jira API tools
│ │ └── jira_formatter.py # Jira data formatting
│ └── general_tools/ # Utility tools
│ └── date_tools.py # Date/time utilities
├── mcp/ # Model Context Protocol servers
│ ├── google_tools_mcp.py # Google tools MCP server
│ └── jira_tools_mcp.py # JIRA tools MCP server
└── services/ # Standalone services
└── registry_service.py # Agent registry service
│ └── observability/ # Langfuse integration
│ └── observability.py # Monitoring and tracing
├── integrations/ # External service integrations
│ ├── common/ # Common integration utilities
│ │ └── date_tools.py # Date/time utilities
│ ├── google/ # Google Workspace APIs
│ │ ├── auth.py # Authentication utilities
│ │ ├── tools.py # Google API tools
│ │ └── gmail_tools.py # Gmail-specific tools
│ ├── jira/ # Jira API integration
│ │ ├── formatter.py # Jira data formatting
│ │ └── tools.py # Jira API tools
│ └── general_tools/ # Legacy general tools
└── services/ # Standalone services
├── mcp/ # Model Context Protocol servers
│ ├── google_tools_mcp.py # Google tools MCP server (Port 8100)
│ └── jira_tools_mcp.py # JIRA tools MCP server (Port 8101)
└── registry/ # Agent registry service
├── registry_service.py # Registry server (Port 8003)
├── registry_client.py # Registry client
└── agent_registry.py # Registry data models
tests/ # Test suite
├── unit/ # Unit tests
│ ├── utils/
Expand All @@ -330,20 +344,29 @@ docs/ # Documentation
- **Factory Pattern**: Dynamic model and configuration creation
- **Observer Pattern**: Event-driven workflow orchestration
- **Repository Pattern**: Clean data access abstraction
- **Separation of Concerns**: Clear boundaries between agents, workflows, and infrastructure
- **Separation of Concerns**: Clear boundaries between core domain, shared utilities, and infrastructure
- **Resilience Patterns**: Circuit breakers, retry logic, and error handling in `src/shared/resilience/`

### Key Architectural Improvements

1. **Unified AgentResponse Schema**: Single, consistent response model for all agents and workflows
2. **Separated Base Classes**: `BaseAgentServer` for agents, `BaseWorkflowServer` for workflows
2. **Separated Base Classes**: `BaseAgentServer` for agents, `BaseWorkflowServer` for workflows in `src/shared/base/`
3. **Centralized Schemas**: All Pydantic models organized in `src/core/schemas/`
4. **Enhanced Execution Results**: Full action item tracking in dispatch results
5. **Modular Workflows**: Composable orchestrators for better maintainability
6. **Progressive Summarization**: Multi-pass reduction system with semantic chunking
6. **Shared Utilities Layer**: Common components in `src/shared/` for cross-cutting concerns
- Agent utilities in `src/shared/agents/`
- LLM tools in `src/shared/llm/`
- Resilience patterns in `src/shared/resilience/` (circuit breakers, retry, exceptions)
7. **Progressive Summarization**: Multi-pass reduction system with semantic chunking
- New workflow step separation: `prepare_meeting_notes` → `generate_action_items`
- Event-based communication via `NotesReadyEvent`
- 26 comprehensive unit tests with full coverage
7. **Organized Prompts Structure**: Category-based prompt organization
8. **Organized Integrations**: Clean separation by service provider
- `src/integrations/google/` for Google Workspace
- `src/integrations/jira/` for Jira
- `src/integrations/common/` for shared utilities
9. **Organized Prompts Structure**: Category-based prompt organization
- `action_items/`, `agents/`, `summarization/`, `meeting_notes/`, `legacy/`
- Easier prompt management and maintenance
- Clear separation by feature domain
Expand Down Expand Up @@ -705,8 +728,9 @@ open http://localhost:8002/docs
### Model Context Protocol (MCP)

**Extensible Tool Framework:**
- **Google Tools MCP**: Calendar, Docs, Drive, Gmail integration
- **JIRA Tools MCP**: Issue management, project coordination, ticket operations
Located in `src/services/mcp/` - standalone MCP server implementations:
- **Google Tools MCP** (Port 8100): Calendar, Docs, Drive, Gmail integration
- **JIRA Tools MCP** (Port 8101): Issue management, project coordination, ticket operations
- **Custom Protocols**: Build domain-specific tool integrations
- **Agent Enhancement**: Extend capabilities through external tools

Expand Down Expand Up @@ -762,7 +786,7 @@ print(cache.get_cache_stats())

1. **Create Agent Class**: Extend `BaseAgentServer`
```python
from src.core.base.base_agent_server import BaseAgentServer
from src.shared.base.base_agent_server import BaseAgentServer
from src.core.schemas.agent_response import AgentResponse

class MyAgent(BaseAgentServer):
Expand All @@ -784,7 +808,7 @@ print(cache.get_cache_stats())

1. **Define Workflow Class**: Extend `BaseWorkflowServer`
```python
from src.core.base.base_workflow_server import BaseWorkflowServer
from src.shared.base.base_workflow_server import BaseWorkflowServer

class MyWorkflowServer(BaseWorkflowServer):
def additional_routes(self):
Expand Down Expand Up @@ -819,7 +843,7 @@ from src.core.schemas import (
Use the progressive summarization engine for handling long documents:

```python
from src.infrastructure.utils.progressive_summarization import (
from src.shared.llm.summarization.progressive import (
progressive_summarize,
SummarizationStrategy,
ProgressiveSummaryResult,
Expand Down
2 changes: 1 addition & 1 deletion containers/Dockerfile.google-mcp
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,4 @@ EXPOSE 8100
ENV PYTHONPATH=/app

# Default command for Google MCP server
CMD ["python", "-m", "src.mcp.google_tools_mcp"]
CMD ["python", "-m", "src.services.mcp.google_tools_mcp"]
2 changes: 1 addition & 1 deletion containers/Dockerfile.jira-mcp
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,4 @@ EXPOSE 8101
ENV PYTHONPATH=/app

# Default command for JIRA MCP server
CMD ["python", "-m", "src.mcp.jira_tools_mcp"]
CMD ["python", "-m", "src.services.mcp.jira_tools_mcp"]
2 changes: 1 addition & 1 deletion containers/Dockerfile.registry-service
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,4 @@ EXPOSE 8003
ENV PYTHONPATH=/app

# Default command for registry service
CMD ["uvicorn", "src.services.registry_service:app", "--host", "0.0.0.0"]
CMD ["uvicorn", "src.services.registry.registry_service:app", "--host", "0.0.0.0"]
Loading