Voice Feature Restoration: - Implemented full Redis pub/sub pipeline for real-time voice data - Added VOICE_PCM and VOICE_ACTIVE_USER Redis channels - Implemented EventBroadcaster.voicePcmData() and voiceActiveUser() methods - Extended backend redis-bridge to subscribe to voice channels - Updated backend WebSocket server for binary PCM broadcast - Replaced globalThis PcmBroadcaster pattern with proper EventBroadcaster DI - Fixed root cause: PcmBroadcaster functions were never initialized Bug Fixes: - Fixed prism-media version conflict (2.0.0-alpha.0 → 1.3.5) - Fixed type inconsistency in commandHandler.ts (AudioPlayerStatus → string) Critical Optimizations: - P1.1: Fixed unbounded memory growth in aiAnalyzer (added LRU caching, max 10K entries) - P1.2: Converted sync file I/O to async in audio hot paths (recorder, sessionRecording) - P1.3: Replaced process.exit(1) with proper error handling (bootstrap, aiAnalysisWorker) Code Quality: - Removed unused logger field in EventBroadcaster - Replaced console.* with structured logger.* calls (player, decoder) - Fixed typos and removed commented debug code - Added DatabaseError class for better error handling Files Modified: 18 (discord-gateway: 14, backend: 3, root: 1) Architecture: Discord → EventBroadcaster → Redis → Backend WebSocket → Frontend Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
54 lines
1.4 KiB
JSON
54 lines
1.4 KiB
JSON
{
|
|
"name": "@bete/discord-gateway",
|
|
"version": "1.0.0",
|
|
"description": "Discord Gateway service - handles message capture, voice recording, and AI moderation",
|
|
"type": "module",
|
|
"main": "dist/index.js",
|
|
"packageManager": "pnpm@11.1.3",
|
|
"scripts": {
|
|
"dev": "tsx watch src/index.ts",
|
|
"start": "node dist/index.js",
|
|
"build": "tsc",
|
|
"typecheck": "tsc --noEmit",
|
|
"lint": "biome check --diagnostic-level=error .",
|
|
"format": "biome format --write .",
|
|
"test": "vitest run"
|
|
},
|
|
"dependencies": {
|
|
"@bete/shared": "workspace:*",
|
|
"@discordjs/opus": "^0.10.0",
|
|
"@discordjs/voice": "^0.19.2",
|
|
"@snazzah/davey": "^0.1.11",
|
|
"axios": "^1.16.1",
|
|
"discord.js-selfbot-v13": "workspace:*",
|
|
"dotenv": "^17.4.2",
|
|
"drizzle-orm": "^0.45.2",
|
|
"imghash": "^1.1.4",
|
|
"ioredis": "^5.11.0",
|
|
"libsodium-wrappers": "^0.8.4",
|
|
"lru-cache": "^11.5.1",
|
|
"openai": "^6.38.0",
|
|
"opusscript": "^0.0.8",
|
|
"p-limit": "^7.3.0",
|
|
"p-retry": "^8.0.0",
|
|
"pg": "^8.21.0",
|
|
"pino": "^9.6.0",
|
|
"piscina": "^5.1.4",
|
|
"prism-media": "^1.3.5",
|
|
"sharp": "^0.34.5",
|
|
"tiktoken": "^1.0.22",
|
|
"ws": "^8.20.1",
|
|
"zod": "^4.4.3"
|
|
},
|
|
"devDependencies": {
|
|
"@biomejs/biome": "latest",
|
|
"@types/node": "^25.9.0",
|
|
"@types/pg": "^8.20.0",
|
|
"@types/ws": "^8.18.1",
|
|
"drizzle-kit": "^0.31.10",
|
|
"tsx": "^4.22.2",
|
|
"typescript": "^5.9.3",
|
|
"vitest": "latest"
|
|
}
|
|
}
|