Commit Graph

32 Commits

Author SHA1 Message Date
MythEclipse
9ff1261239 feat: merge warn and flagged messages into one review panel
Combine the right-side Warned and Flagged panels into a single Needs Review panel. Keep ordering by the existing newest-first message list.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 04:33:48 +07:00
MythEclipse
93eb2303c7 feat: add warn category for minor rule violations
- Add "warn" status between "clean" and "flagged" for minor violations
- Update AI analyzer system prompt with community rules and warn category
- Warn: profanity, OOT, tone issues - requires warning but not deletion
- Flagged: NSFW, illegal, hacking, scam, harassment, violence, SARA - requires review/deletion
- Update types to support warn status in MessageRecord and AIAnalysisUpdate
- Update client UI to show three panels: All Messages, Warned, Flagged
- Warned messages show in right-top panel for quick review
- Flagged messages show in right-bottom panel for moderation action

This resolves:
- Need to distinguish between minor and severe violations
- Moderators can now warn users before taking action
- Better moderation workflow with three-tier system

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 04:23:11 +07:00
MythEclipse
54a4096323 feat: add two-column text tab layout with flagged messages panel
- Split text tab into two columns: All Messages (left) and Flagged (right)
- Left panel shows all captured messages
- Right panel shows only AI-flagged messages for quick review
- Flagged panel auto-populates when messages are analyzed
- Improves moderation workflow by separating flagged content

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 04:16:53 +07:00
MythEclipse
1c945b9cac fix: trigger backlog sync when text channel is selected
- Call POST /api/backlog-sync when user selects a text channel
- Backlog sync now runs automatically on channel selection
- Fetches messages from last 24 hours for selected channel only
- Prevents empty message list on first channel selection

This resolves:
- Empty message list when selecting channel
- Backlog sync not being triggered
- Messages not loading until manual refresh

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 04:12:33 +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
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
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
cbfb99f755 debug: add listen path logging
- Log binary packet receipt and listen state
- Log listen toggle and AudioContext creation
- Log playPcm calls, packet size, user hash, and playback timing
- Helps trace why listen produces no audio
2026-05-13 23:04:56 +07:00
MythEclipse
bac42b1d53 fix: match listen logic exactly from aa85dd9
- Add CHANNELS constant (1 for mono)
- Use audioBuffer.length for loop instead of float32Array.length
- Use getChannelData(0) assignment pattern from aa85dd9
- Proper buffer frame calculation with CHANNELS divisor
2026-05-13 23:01:42 +07:00
MythEclipse
ff83e34b77 fix: restore working transmit and listen logic from aa85dd9
- Use createScriptProcessor instead of Tone.UserMedia for transmit
- Use analyser.getByteFrequencyData() for proper visualizer
- Keep per-user timing with userTimelines Map for listen
- Remove Tone.js dependencies from transmit
- Restore proper AudioContext usage
2026-05-13 22:58:59 +07:00
MythEclipse
94dc460fc7 fix: implement proper audio timing for listen with per-user timelines
- Add audioContextListen and userTimelines to state
- Create AudioContext on listen toggle
- Parse user ID hash from PCM packet header
- Track playback timing per user to prevent audio gaps
- Use proper AudioContext timing instead of Tone.now()
- Clear timelines when toggling listen off
2026-05-13 22:53:17 +07:00
MythEclipse
65dc73e903 fix: use Tone.js global object from CDN instead of ES module import
- Remove ES module import statement from dashboard.js
- Use global Tone object loaded via CDN
- Remove type=module from script tag
- Fixes module resolution error
2026-05-13 22:48:03 +07:00
MythEclipse
bc212333d8 feat: implement Tone.js for professional audio transmit and listen
- Replace AudioWorkletNode with Tone.UserMedia for microphone capture
- Use Tone.Analyser for waveform analysis and Tone.Meter for level detection
- Implement proper stereo audio capture with real-time PCM transmission
- Use Tone.context for audio playback with proper buffer handling
- Add Tone.js CDN to HTML template
- Convert dashboard.js to ES module for Tone.js import
- Improve audio quality and reliability with battle-tested library
2026-05-13 22:46:24 +07:00
MythEclipse
bd8e5b78d8 feat: replace ScriptProcessorNode with AudioWorkletNode for transmit
- Create audio-worklet.js with MicrophoneProcessor for audio capture
- Implement noise gate and RMS calculation in worklet
- Send PCM data via MessagePort to main thread
- Update startStreaming to use AudioWorkletNode instead of deprecated ScriptProcessorNode
- Remove WebCodecs decoder complexity from listen
- Keep simple PCM playback for listen feature
2026-05-13 22:40:39 +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
3dbe3105af fix: simplify AudioData playback with direct copyTo approach
- Rename playAudioData to playAudioDataDirect for clarity
- Remove duplicate playAudioData function with debug logging
- Use direct copyTo into temp Float32Array per channel
- Check isListening state in output callback
2026-05-13 22:20:15 +07:00
MythEclipse
638d5fc005 debug: add logging to AudioData playback
- Log frame count, channels, sample rate from AudioData
- Log destination channel size before copyTo
- Identify frame count mismatch issue
2026-05-13 22:19:25 +07:00
MythEclipse
9066e5b1f2 fix: use Float32Array intermediate for AudioData.copyTo
- AudioData.copyTo requires destination Float32Array, not AudioBuffer channel
- Create temp Float32Array per channel, copyTo into it, then set into AudioBuffer
- Properly handle 48kHz stereo Opus output to AudioContext
2026-05-13 22:17:43 +07:00
MythEclipse
26efaa9e4d fix: correct WebCodecs AudioData.copyTo API and decoder lifecycle
- AudioData.copyTo requires planeIndex parameter per channel
- Check isListening state before decode to prevent closed decoder errors
- Properly close decoder when leaving listen mode
- Queue packets if decoder not ready yet
2026-05-13 22:15:30 +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
251a176b2b feat: remove image handling and update related UI elements for streamlined moderation experience 2026-05-13 21:28:45 +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
0b8111de81 feat(moderation): implement backlog message synchronization and enhance message metadata handling 2026-05-13 21:04:45 +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
6d353c1753 feat: add moderation dashboard UI
- Create responsive dashboard with dark theme
- Implement three tabs: Text Messages, Images, Voice
- Add channel/thread filtering
- Real-time WebSocket updates with polling fallback
- Display message metadata (author, timestamp, edits, deletions)
- Show image previews with upload status and URLs
2026-05-13 19:34:39 +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
a5a794c590 feat: implement RMS noise gate and enhance microphone capture settings for improved audio quality 2026-05-13 17:56:08 +07:00
MythEclipse
0e056732bc feat: implement one-port WebSocket server with updated connection handling and configuration 2026-05-13 17:49:33 +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
18cf941da0 feat: add web interface and WebSocket server for real-time audio transmission to Discord 2026-05-13 00:32:27 +07:00