Created the mosaic-bridge module to enable Discord integration for chat-based control of Mosaic Stack. This module provides the foundation for receiving commands via Discord and forwarding them to the stitcher for job orchestration. Key Features: - Discord bot connection and authentication - Command parsing (@mosaic fix, status, cancel, verbose, quiet, help) - Thread management for job updates - Chat provider interface for future platform extensibility - Noise management (low/medium/high verbosity levels) Implementation Details: - Created IChatProvider interface for platform abstraction - Implemented DiscordService with Discord.js - Basic command parsing (detailed parsing in #171) - Thread creation for job-specific updates - Configuration via environment variables Commands Supported: - @mosaic fix <issue> - Start job for issue - @mosaic status <job> - Get job status (placeholder) - @mosaic cancel <job> - Cancel running job (placeholder) - @mosaic verbose <job> - Stream full logs (placeholder) - @mosaic quiet - Reduce notifications (placeholder) - @mosaic help - Show available commands Testing: - 23/23 tests passing (TDD approach) - Unit tests for Discord service - Module integration tests - 100% coverage of critical paths Quality Gates: - Typecheck: PASSED - Lint: PASSED - Build: PASSED - Tests: PASSED (23/23) Environment Variables: - DISCORD_BOT_TOKEN - Bot authentication token - DISCORD_GUILD_ID - Server/Guild ID (optional) - DISCORD_CONTROL_CHANNEL_ID - Channel for commands Files Created: - apps/api/src/bridge/bridge.module.ts - apps/api/src/bridge/discord/discord.service.ts - apps/api/src/bridge/interfaces/chat-provider.interface.ts - apps/api/src/bridge/index.ts - Full test coverage Dependencies Added: - discord.js@latest Next Steps: - Issue #171: Implement detailed command parsing - Issue #172: Add Herald integration for job updates - Future: Add Slack, Matrix support via IChatProvider Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2.4 KiB
2.4 KiB
Issue #170: Implement mosaic-bridge module for Discord
Objective
Create the mosaic-bridge module to enable Discord integration. This module will:
- Connect to Discord via bot token
- Listen for commands in designated channels
- Forward commands to stitcher
- Receive status updates from herald
- Post updates to threads with appropriate verbosity
Prerequisites
- Issue #166 (Stitcher module) must be complete - StitcherService available
Approach
- Create bridge module structure
- Define chat provider interface for extensibility
- Implement Discord service using Discord.js
- Add command parsing (basic implementation)
- Implement thread management for job updates
- Add configuration management
- Follow TDD: Write tests before implementation
Commands to Implement
@mosaic fix <issue>- Start job for issue@mosaic status <job>- Get job status@mosaic cancel <job>- Cancel running job@mosaic verbose <job>- Stream full logs to thread@mosaic quiet- Reduce notifications@mosaic help- Show commands
Noise Management Strategy
- Main channel: Low verbosity (milestones only)
- Job threads: Medium verbosity (step completions)
- DMs: Configurable per user
Progress
- Install discord.js dependency
- Create bridge module structure
- Define ChatProvider interface
- Write tests for Discord service (RED phase)
- Implement Discord service (GREEN phase)
- Implement command parsing
- Implement thread management
- Add configuration
- Refactor and optimize (REFACTOR phase)
- Run quality gates (typecheck, lint, build, test)
- Commit changes
Results
- Tests: 23/23 passing (20 Discord service + 3 module tests)
- Typecheck: PASSED
- Lint: PASSED
- Build: PASSED
- Coverage: High (all critical paths tested)
Testing Strategy
- Unit tests for command parsing
- Unit tests for thread management
- Mock Discord.js client for testing
- Test stitcher integration
- Verify configuration loading
Environment Variables
DISCORD_BOT_TOKEN- Bot authentication tokenDISCORD_GUILD_ID- Server/Guild IDDISCORD_CONTROL_CHANNEL_ID- Channel for commands
Notes
- Keep Discord.js interactions isolated in discord.service.ts
- Use ChatProvider interface to allow future platform additions (Slack, Matrix, etc.)
- Basic command parsing in this issue; detailed parsing comes in #171
- DO NOT push to remote, just commit locally