MythEclipse and Claude
9af2d7d4dd
refactor(fe): DRY components, hooks, a11y fixes, and WS/client improvements
...
- Extract StatusBadge, SummaryList, ProfileDetail shared components (~300 lines deduplicated)
- Extract usePaginatedList<T>, useItemDetail<T> generic hooks (~170 lines deduplicated)
- Fix a11y: Badge (role=status, dark variants), Button (aria-disabled, motion-safe), Input (aria-invalid, errorId), Select (error variant), Skeleton (aria-hidden), MobileTabBar (full tab ARIA), Toast (timer leak fix, role=alert, keyboard dismiss), Card (role=region)
- Fix API client: buildSearchParams helper, request timeout, password caching, named types
- Fix WS: typed 24 event payloads (was all unknown), exponential backoff reconnect, max 20 attempts, msg.data guard
- Fix bug: listDashboardChannels cursor pagination was silently dropped
- Remove duplicate shimmer keyframes from tailwind.config.js
- Fix WaveformPlayer non-null assertion
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-14 15:22:29 +07:00
MythEclipse
41e67423b8
chore(services): update components based on recent changes
...
Changes:
services/frontend/src/features/dashboard/components/ChannelProfileDetail.tsx | 258 +++++++++++-----------------------------------------------------------------
services/frontend/src/features/dashboard/components/ChannelSummaryList.tsx | 171 ++++++++-------------------------------------------
services/frontend/src/features/dashboard/components/DashboardStats.tsx | 8 ++-
services/frontend/src/features/dashboard/components/UserProfileDetail.tsx | 297 +++++++++++++---------------------------------------------------------------------------
services/frontend/src/features/dashboard/components/UserSummaryList.tsx | 204 +++++++++++-------------------------------------------------
services/frontend/src/features/dashboard/hooks/useDashboard.ts | 203 +++++++++++++++---------------------------------------------
services/frontend/src/features/messages/components/MessageCard.tsx | 10 +--
services/frontend/src/shared/api/client.ts | 87 +++++++++++++++++++-------
services/frontend/src/shared/hooks/useItemDetail.ts | 58 +++++++++++++++++
services/frontend/src/shared/hooks/usePaginatedList.ts | 105 +++++++++++++++++++++++++++++++
2026-06-14 15:16:18 +07:00
MythEclipse
2b084b326f
a
2026-06-14 05:10:58 +07:00
MythEclipse and Claude
6733ea8f01
fix(db): add 0011_add_voice_transcription to drizzle journal
...
Migration SQL file existed but was never registered in _journal.json,
so Drizzle skipped it. Every voice recording insert failed with:
PG code 42703: column "transcription" does not exist
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-14 04:59:44 +07:00
MythEclipse and Claude
a2beda77c4
fix(db): surface PG error code/detail/cause in voice recording insert failures
...
Drizzle wraps PG errors — the previous log only showed the formatted query
text. Now extracts code, detail, schema, table, constraint, severity from
the error envelope and from .cause to make the actual Postgres error visible.
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-14 04:40:22 +07:00
MythEclipse and Claude
dbc2879e16
fix(voice): resolve Redis subscriber corruption, transmitter races, and DB error logging
...
Redis root cause: VoiceHandler passed redisPub to transmitter.start(),
which called .subscribe() on it — permanently converting the publish
connection to subscriber mode. Every subsequent command reply and status
update failed.
Fixes:
1. Transmitter now creates its own Redis client via new IORedis()
2. Mutual exclusion gate serialises start/stop to prevent null-deref races
3. PassThrough drain listeners cleaned up to stop MaxListenersExceeded
4. FFmpeg SIGTERM flagged as expected exit (no more false level-50 errors)
5. Voice recording repo captures PG error code/detail for diagnostics
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-14 04:23:04 +07:00
MythEclipse
32b0b20ca7
chore(services): update components based on recent changes
...
Changes:
services/discord-gateway/src/shared/database/voiceRecordingRepo.ts | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
2026-06-14 03:31:40 +07:00
MythEclipse
93634d129a
chore(services): update components based on recent changes
...
Changes:
services/discord-gateway/src/modules/command-handler/voice.handler.ts | 10 ++++----
services/discord-gateway/src/modules/voice-recording/transmitter.ts | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------
2 files changed, 72 insertions(+), 29 deletions(-)
2026-06-14 03:28:24 +07:00
MythEclipse and Claude
c317cfb420
fix(ci): resolve TS build errors across all services
...
- recordings.routes.ts: cast req.params.id to string (express 5 typed params)
- recordings.service.ts: cast Record<string,unknown>[] via unknown first
- guilds.routes.ts: cast req.params.guildId to string (2 sites)
- transmitter.ts: capture pcmStream ref locally + re-acquire in drain callback
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-14 01:17:18 +07:00
MythEclipse
92d73fe12d
chore(services): update components based on recent changes
...
Changes:
.env.example | 5 +++++
services/discord-gateway/src/modules/voice-recording/recorder.ts | 2 +-
2 files changed, 6 insertions(+), 1 deletion(-)
2026-06-14 00:57:08 +07:00
MythEclipse
b0422777ec
chore(services): update components based on recent changes
...
Changes:
services/backend/src/ws/server.ts | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------
1 file changed, 72 insertions(+), 16 deletions(-)
2026-06-14 00:52:04 +07:00
MythEclipse
7789aca620
chore(services): update components based on recent changes
...
Changes:
services/discord-gateway/src/app/shutdown.ts | 8 ++++++++
1 file changed, 8 insertions(+)
2026-06-14 00:45:59 +07:00
MythEclipse
ac661b64f4
chore(services): update components based on recent changes
...
Changes:
services/discord-gateway/src/app/bootstrap.ts | 24 ++++++++++++++++++++++++
services/discord-gateway/src/modules/voice-recording/recorder.ts | 10 ++++++++++
services/discord-gateway/src/modules/voice-recording/recorder/speakingHandler.ts | 9 ++++++++-
3 files changed, 42 insertions(+), 1 deletion(-)
2026-06-14 00:45:31 +07:00
MythEclipse
c886dfb184
chore(services): update components based on recent changes
...
Changes:
services/discord-gateway/src/modules/voice-pcm-ws/index.ts | 1 +
services/discord-gateway/src/modules/voice-pcm-ws/voicePcmWsClient.ts | 151 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 152 insertions(+)
2026-06-14 00:43:50 +07:00
MythEclipse
f22201381f
a
2026-06-13 23:58:29 +07:00
MythEclipse
9a896c7993
chore(services): update components based on recent changes
...
Changes:
services/frontend/src/widgets/Sidebar.tsx | 51 +++++++++++++++++++++++++-------------------------
1 file changed, 25 insertions(+), 26 deletions(-)
2026-06-13 19:47:06 +07:00
MythEclipse
23b45690ca
chore(services): update components based on recent changes
...
Changes:
services/backend/src/http/app.ts | 22 ++++++++--------
services/frontend/src/App.tsx | 81 ++++++++++++++++++++++++-----------------------------------
2 files changed, 43 insertions(+), 60 deletions(-)
2026-06-13 19:46:56 +07:00
MythEclipse
82c1658bab
chore(services): update components based on recent changes
...
Changes:
services/frontend/src/features/messages/index.tsx | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
2026-06-13 19:43:32 +07:00
MythEclipse
28baeda5ad
chore(services): update components based on recent changes
...
Changes:
packages/shared/src/config/index.ts | 7 +++
packages/shared/src/moderation-types.ts | 1 +
services/backend/src/modules/recordings/recordings.service.ts | 3 +-
services/discord-gateway/drizzle/migrations/0011_add_voice_transcription.sql | 1 +
services/discord-gateway/src/modules/voice-recording/recorder/segment.ts | 10 ++++
services/discord-gateway/src/modules/voice-recording/recorder/uploader.ts | 15 ++++++
services/discord-gateway/src/modules/voice-recording/voiceTranscriber.ts | 51 ++++++++++++++++++
services/discord-gateway/src/shared/database/schema.ts | 1 +
services/discord-gateway/src/shared/database/voiceRecordingRepo.ts | 17 ++++++
services/frontend/src/features/live/components/RecordingsSubPanel.tsx | 108 +++++++++++++++++++-------------------
2026-06-13 17:08:54 +07:00
MythEclipse
9bde518b71
chore(services): update components based on recent changes
...
Changes:
services/backend/src/ws/redis-bridge.ts | 31 ++++++++++++++++++++-
services/backend/src/ws/server.ts | 36 +++++++++++++++++++++++-
services/frontend/src/App.tsx | 12 ++++----
services/frontend/src/shared/hooks/useAudioPlayback.ts | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
services/frontend/src/shared/hooks/useAudioTransmit.ts | 21 +++++---------
5 files changed, 169 insertions(+), 22 deletions(-)
2026-06-13 17:00:02 +07:00
MythEclipse
1d06de5ce5
chore(services): update components based on recent changes
...
Changes:
services/frontend/src/features/live/components/RecordingsSubPanel.tsx | 45 ++------
services/frontend/src/features/live/components/WaveformPlayer.tsx | 253 +++++++++++++++++++++++++++++++++++++++++++++
services/frontend/src/features/live/components/index.ts | 1 +
3 files changed, 261 insertions(+), 38 deletions(-)
2026-06-13 16:56:17 +07:00
MythEclipse
5c8fa3d254
chore(services): update components based on recent changes
...
Changes:
services/frontend/src/App.tsx | 22 ++++++++++++++++++++++
services/frontend/src/features/live/components/VoiceConnectionCard.tsx | 5 ++++-
2 files changed, 26 insertions(+), 1 deletion(-)
2026-06-13 16:54:52 +07:00
MythEclipse
5459b13b03
chore(services): update components based on recent changes
...
Changes:
services/frontend/src/App.tsx | 37 +++++++++++++++++++++++++++++++------
1 file changed, 31 insertions(+), 6 deletions(-)
2026-06-13 16:54:29 +07:00
MythEclipse
e76a874f11
chore(services): update components based on recent changes
...
Changes:
services/frontend/src/shared/api/client.ts | 8 ++++++++
1 file changed, 8 insertions(+)
2026-06-13 16:53:30 +07:00
MythEclipse
d0d2c316cf
chore(auto): task completed - unknown
2026-06-13 15:11:06 +07:00
MythEclipse
265251233a
chore(auto): task completed - unknown
2026-06-13 15:03:21 +07:00
MythEclipse
9e9ce463cb
chore(auto): task completed - unknown
2026-06-13 14:59:00 +07:00
MythEclipse
fce24278f0
chore(auto): task completed - unknown
2026-06-13 14:49:47 +07:00
MythEclipse and Claude
3965ea79bc
fix(gateway): voice speaking handler, metadata cache, transmitter backpressure
...
- speakingHandler: check subscriptions.has() BEFORE voiceActiveUser broadcast
- segment.ts: add LRU metadata cache (200 entries, avoids Discord API in hotpath)
- transmitter.ts: add backpressure handling with drain queue/flush
(PassThrough.write() return value was ignored — potential OOM under load)
- cleanup backpressure queue on transmitter stop
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-13 14:38:06 +07:00
MythEclipse and Claude
29d4cb87b6
fix(gateway): voice module critical bugs
...
- shutdown ordering: DB pool closed AFTER voice disconnect (was before)
- muxer: amix (mix) -> concat (sequential) filter for OGG segments
- upload retries: 0->3 with proper backoff 1-10s
- teleUpload retry backoff: minTimeout 0->1000, maxTimeout 0->10000
- mediaSource: 64KB buffer bound on readFirstTwoLines, 1MB on extractMediaInfo
- ffmpegProcess: pipe stderr to structured logger instead of inherit
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-13 14:35:35 +07:00
MythEclipse
e6e34281ff
chore(auto): task completed - unknown
2026-06-13 14:24:09 +07:00
MythEclipse
1a195b737e
chore(auto): task completed - unknown
2026-06-13 14:12:09 +07:00
MythEclipse
6822cb0bd3
chore(auto): task completed - unknown
2026-06-13 14:10:34 +07:00
MythEclipse
277d982c51
chore(auto): task completed - unknown
2026-06-13 14:05:17 +07:00
MythEclipse and Claude
14c0081f01
feat(discord-gateway): implement voice & push improvements
...
- Voice disconnect broadcast on stopRecording
- Multi-guild voice support (VoiceController Map<guildId>)
- Session finalization + auto-enqueue muxer job
- Recordings API: duration field, channelId/userId filters
- Transmitter Redis connection reuse (shared conn)
- FFmpeg stderr memory cap (4KB limit)
- 10 new Redis event channels + Redis bridge subscriptions
- New DB tables: message_reactions, message_edits
- Webhook notification module
- Gateway metrics / Prometheus endpoint
- Multi-guild message capture (MONITOR_GUILD_IDS array)
- Thread tracking, presence, channel topic, guild member events
- Edit history snapshot on message update
- Muxer audio post-processing worker
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-13 13:51:21 +07:00
MythEclipse
111ba0a139
chore(auto): task completed - unknown
2026-06-13 13:36:13 +07:00
MythEclipse
942c33db7e
chore(auto): task completed - unknown
2026-06-13 13:35:56 +07:00
MythEclipse
eab8505889
chore(auto): task completed - unknown
2026-06-13 13:35:41 +07:00
MythEclipse
2e14b5e4ed
chore(auto): task completed - unknown
2026-06-13 13:35:11 +07:00
MythEclipse
d569ffa2db
chore(auto): task completed - unknown
2026-06-13 13:12:49 +07:00
MythEclipse
4097b23dc3
chore(auto): task completed - unknown
2026-06-13 13:12:41 +07:00
MythEclipse
e413cf9fca
chore(auto): task completed - unknown
2026-06-13 13:12:29 +07:00
MythEclipse
ff006980f8
chore(auto): task completed - unknown
2026-06-13 13:12:01 +07:00
MythEclipse
140a0ba46a
chore(auto): task completed - unknown
2026-06-13 13:11:49 +07:00
MythEclipse and Claude
4fcab6b003
refactor(frontend): reorder sidebar — messages first, voice below
...
Default tab is now 'messages'; Voice & Media moved below
Messages in both desktop sidebar and mobile tab bar.
Updated Header titles/subtitles to match new order.
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-13 12:50:13 +07:00
MythEclipse
615c23f061
chore(auto): task completed - unknown
2026-06-13 12:24:32 +07:00
MythEclipse
dcede1d676
chore(auto): task completed - unknown
2026-06-13 12:11:37 +07:00
MythEclipse
5b04a4637c
docs(frontend): add design tokens documentation
2026-06-13 11:54:20 +07:00
MythEclipse
1406ce3585
chore(auto): task completed - unknown
2026-06-13 11:46:15 +07:00
MythEclipse and Claude
30f8d7cce3
feat: replace corrections/tuner with dashboard module
...
Replace the corrections/adaptive-prompt-tuner feature with a new
dashboard module providing server stats and user profile overview.
Backend:
- Add dashboard module (routes, service, repository) with stats + user list + user detail endpoints
- Remove corrections module entirely
- Wire dashboard router in app.ts
Frontend:
- Add dashboard feature (DashboardStats, UserSummaryList, UserProfileDetail components + useDashboard hook)
- Remove tuner feature (CorrectionStats, CorrectionHistory, SubmitCorrection, useCorrections)
- Update API client from corrections → dashboard types/fns
- Rename tab 'tuner' → 'dashboard'
- Update MobileTabBar, Header, Sidebar links
Tests:
- Expand backend placeholder test with dashboard assertions
- Expand discord-gateway placeholder test with config/channel assertions
AI moderation:
- llmModerationClient: improve status/reply detection, expand safety categories, fix timer reset
- userProfileLearner: fix isReply refinement
- userProfileStore: add pending cache check
- messageMetadata: add crosspost type mapping
- migrate.ts: improve partial-index safety in schema push
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-13 11:24:42 +07:00