The Slack integration provides seamless communication between Piper Morgan and Slack workspaces, enabling spatial metaphor-based interactions and intelligent message consolidation.
The primary component responsible for processing spatial events and generating Slack responses with intelligent message consolidation.
Message Consolidation (PM-079-SUB)
Consolidation Logic
# Messages are buffered by channel+thread combination
consolidation_key = f"{channel_id}:{thread_ts}"
# Consolidation triggers when 2+ messages within 5 seconds
if len(recent_messages) >= 2:
send_consolidated_response()
Example Consolidation Before (3 separate messages):
🔔 Workflow completed successfully
✅ Task completed successfully
📊 Analysis complete
After (1 consolidated message):
🤖 ✅ Task completed successfully
📋 2 additional actions completed
💬 Reply with 'details' for full breakdown
_get_consolidation_key() - Generate unique keys for message grouping_add_to_consolidation_buffer() - Buffer messages for potential consolidation_should_consolidate_messages() - Determine if consolidation should occur_format_consolidated_message() - Format multiple messages into single response_send_consolidated_response() - Send consolidated response to Slackget_detailed_message_breakdown() - Provide detailed message breakdownMaps spatial events to Slack context, maintaining spatial metaphor purity.
Handles direct communication with Slack API.
CONSOLIDATION_TIMEOUT = 5.0 # seconds
CONSOLIDATION_MAX_MESSAGES = 5 # per buffer
MAX_WORKFLOWS_PER_MINUTE = 3 # per user
Comprehensive test suite available in tests/integration/test_slack_message_consolidation.py:
python -m pytest tests/integration/test_slack_message_consolidation.py -v
Handler statistics include consolidation metrics:
stats = await response_handler.get_handler_stats()
consolidation_stats = stats["consolidation_stats"]
# {
# "active_buffers": 2,
# "total_buffered_messages": 6,
# "consolidation_timeout": 5.0,
# "max_messages_per_buffer": 5
# }
Messages Not Consolidating
Consolidation Buffer Issues
Slack API Errors