Commit Graph

41 Commits

Author SHA1 Message Date
MythEclipse
d50ce8698f feat: implement media echo fix and YouTube screenshare design
- Introduced a new `ScreenShareController` to manage YouTube screenshare functionality.
- Updated `DiscordPlayer` to track ownership of audio streams, preventing conflicts between music playback and screenshare.
- Added error handling for various states including voice connection checks and media busy states.
- Created unit tests for `ScreenShareController` and `DiscordPlayer` ownership rules to ensure correct functionality.
- Added documentation for the new media echo fix and screenshare design.
2026-05-16 15:48:28 +07:00
MythEclipse
e32e092596 feat: enhance media handling and audio processing logic 2026-05-15 22:23:29 +07:00
MythEclipse
ff2792d403 style: format media music implementation 2026-05-15 18:04:39 +07:00
MythEclipse
06b6db703c feat: wire media playback into webserver
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 17:52:16 +07:00
MythEclipse
ed438e6fc0 feat: split text and voice channel selection
Separate text moderation and voice recording guild/channel state so each workflow can persist and operate independently.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 15:58:38 +07:00
MythEclipse
235c1120c2 feat: enhance moderation functionality with type improvements and global broadcaster integration 2026-05-15 07:13:37 +07:00
MythEclipse
29fcde69e4 fix: adapt code to modernized libraries
- Migrate validation.ts from class-transformer/class-validator to Zod
- Apply Biome auto-fixes (import sorting, nodejs protocol)
- Fix duplicate type identifier in validation.ts

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 04:25:06 +07:00
MythEclipse
196ca1b784 feat: serve React dashboard from public/app when available
Check for public/app/index.html before falling back to the old
public/index.html so the React moderation dashboard is served at
the root in production while preserving the legacy frontend during
the transition period.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 21:16:03 +07:00
MythEclipse
44368e646f fix: reanalyze edited messages 2026-05-14 20:10:16 +07:00
MythEclipse
d8aeefb739 fix: preserve ui state broadcasts in routes 2026-05-14 19:58:37 +07:00
MythEclipse
08cd515d8a fix: preserve ui state broadcasts in routes 2026-05-14 19:55:26 +07:00
MythEclipse
c81a499535 refactor: split api routes by concern 2026-05-14 19:46:47 +07:00
MythEclipse
b600dad011 fix: correct import ordering and update tests for drizzle-orm migration 2026-05-14 15:47:03 +07:00
MythEclipse
9ff0f0bede feat: update application initialization for drizzle 2026-05-14 15:43:16 +07:00
MythEclipse
1c4b0afbce refactor: migrate messageStore to drizzle-orm
- Replace all raw SQL queries in messageStore.ts with Drizzle ORM queries
- Remove DatabaseAdapter dependency from messageStore functions
- Update all function signatures to be async and remove db parameter
- Functions now use getDatabase() internally for database access
- Update all call sites in messageCapture.ts, attachmentUploader.ts, aiAnalyzer.ts, webserver.ts, and index.ts
- All functions remain backward compatible in behavior
- TypeScript typecheck passes with no errors
- All tests pass (11 passed)
2026-05-14 15:41:11 +07:00
MythEclipse
d1282f2f57 fix: organize imports and apply linting fixes 2026-05-14 15:02:23 +07:00
MythEclipse
94a3acf12e refactor: update muxer-queue to use database adapter
- Replace direct better-sqlite3 imports with DatabaseAdapter pattern
- Make all muxer-queue functions async to support both SQLite and PostgreSQL
- Update database initialization to use adapter's getDatabase()
- Export DatabaseAdapter as SqliteDatabase for backward compatibility
- Update index.ts to handle async database initialization
- Update webserver.ts to await async database operations
- All functions now work with both SQLite and PostgreSQL backends
- Tests pass, no TypeScript errors
2026-05-14 14:55:21 +07:00
MythEclipse
5aa57f884f feat: add API endpoint for syncing selected channel backlog 2026-05-14 04:02:25 +07:00
MythEclipse
0a5cedfed1 fix: resolve UI state reset and backlog sync hang
- Fix client startup order: fetch/apply server UI state BEFORE loadGuilds() to prevent overwriting persisted state with default guild
- Remove auto-post of first guild in loadGuilds() — let server state drive selection
- Refactor collectWatchableChannels() to collect text channels fast first, then discover threads in parallel with 5s per-channel timeout and 30s overall timeout to prevent blocking message sync
- Ignore /favicon.ico 404 in error logging to reduce noise

Fixes:
- UI state now persists across restart (was being overwritten by client startup race)
- Backlog sync no longer hangs on thread discovery (was blocking before message sync)
- Cleaner logs without favicon 404 errors

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 03:45:51 +07:00
MythEclipse
d4a4f737a8 feat: enhance backlog sync logging and implement UI state persistence 2026-05-14 03:17:07 +07:00
MythEclipse
be6c9f8132 feat: add AI analysis integration with moderation and LLM processing 2026-05-14 02:31:16 +07:00
MythEclipse
b36d038eba feat: implement shared UI state management with API endpoints for state retrieval and updates 2026-05-14 01:45:27 +07:00
MythEclipse
a02d1fb7c0 chore: add pnpm workspace configuration with only built dependencies 2026-05-14 01:07:50 +07:00
MythEclipse
0bdab3b446 Refactor dashboard page: replace React component with static HTML, remove unused dashboardPage.tsx, and update webserver to serve new index.html 2026-05-14 00:14:25 +07:00
MythEclipse
0f30a4aa67 revert: simplify listen to PCM-only, remove WebCodecs complexity
- Remove broadcastOpusToWeb from types and webserver
- Revert recorder to PCM-only broadcast path
- Remove WebCodecs AudioDecoder from dashboard.js
- Simplify WebSocket handler to just play PCM frames
- Remove Howler.js and Tone.js dependencies
- Keep simple AudioContext playback that works reliably
2026-05-13 22:26:59 +07:00
MythEclipse
25dbd8413b feat: implement WebCodecs Opus decode for browser listen
- Add broadcastOpusToWeb to PcmBroadcaster interface for raw Opus packets
- Server broadcasts Opus frames with mode byte (1) + user hash + packet data
- Browser detects packet mode: mode=1 for Opus, mode=0 for legacy PCM
- Implement WebCodecs AudioDecoder for Opus decoding in browser
- Keep existing PCM playback as fallback for compatibility
- Show error if WebCodecs unsupported
- Fixes listen feature under Bun where native Opus decode unavailable
2026-05-13 22:13:03 +07:00
MythEclipse
95cb8b837a feat(thread-discovery): implement separate endpoint for fetching threads and update channel loading logic 2026-05-13 21:22:05 +07:00
MythEclipse
d55b56c897 feat(moderation): enhance message capture and storage with thread support
- Added functions to retrieve message location, sticker metadata, and display content in messageCapture.ts.
- Updated captureMessage function to store thread information and sticker metadata in the database.
- Modified messageStore.ts to support querying messages and attachments by thread ID.
- Updated types.ts to include thread_id in AttachmentRecord.
- Altered database schema in muxer-queue.ts to add thread_id column to attachments.
- Introduced ChannelSummary interface and listWatchableChannels method in voiceController.ts to fetch watchable channels.
- Added API endpoint in webserver.ts to retrieve channels for a given guild.
2026-05-13 20:52:37 +07:00
MythEclipse
692962408f feat: add REST API and WebSocket events for moderation
- Add /api/messages endpoint for querying text and image data
- Add WebSocket broadcast functions for real-time updates
- Support message_created, message_updated, message_deleted events
- Support attachment_uploaded event for real-time image updates
2026-05-13 19:34:15 +07:00
MythEclipse
220c3b93d2 feat: implement Opus decoder runtime checks and add tests for decoder functionality 2026-05-13 18:56:44 +07:00
MythEclipse
4dadcf3871 feat: implement web-driven voice connection with guild/channel selection and API integration 2026-05-13 18:23:20 +07:00
MythEclipse
0e056732bc feat: implement one-port WebSocket server with updated connection handling and configuration 2026-05-13 17:49:33 +07:00
MythEclipse
f9a4b4a92d feat: add muxer job queue with SQLite integration and metrics tracking 2026-05-13 17:06:22 +07:00
MythEclipse
978c2c468d feat: enhance configuration management and add error handling 2026-05-13 16:57:07 +07:00
MythEclipse
3ae28157a3 feat: implement logging and retry mechanism with pino and p-retry 2026-05-13 16:25:01 +07:00
MythEclipse
138aa397e2 chore: add code quality tooling 2026-05-13 15:28:25 +07:00
baharsah
aa85dd9beb refactor: implement robust Opus decoding with error-resilient streams and transition to pull-based audio transmission for Discord output 2026-05-13 02:58:11 +07:00
baharsah
ad7dcde47c feat: redesign UI and overhaul audio processing for Discord Gateway v4 2026-05-13 02:30:09 +07:00
baharsah
44ac346c21 refactor: modularize CRC mocking and implement a persistent Ogg stream for web audio playback 2026-05-13 01:12:11 +07:00
baharsah
c911b06b95 feat: implement Opus demuxing for browser streams, cache headers for playback, and enable microphone input in recorder 2026-05-13 01:03:46 +07:00
baharsah
18cf941da0 feat: add web interface and WebSocket server for real-time audio transmission to Discord 2026-05-13 00:32:27 +07:00