[feat](trx-rs): add FT4 decoder support
Reuse the existing ft8_lib C library (FTX_PROTOCOL_FT4) and FT8
decoder infrastructure to add FT4 decoding across the full stack.
Changes:
- trx-ft8: add protocol param to ft8_decoder_create; add Ft8Decoder::new_ft4()
- trx-core: DecodedMessage::Ft4 variant, AUDIO_MSG_FT4_DECODE (0x14),
ft4_decode_enabled/ft4_decode_reset_seq state, SetFt4DecodeEnabled/
ResetFt4Decoder commands, protocol mapping
- trx-server: DecoderHistories::ft4, run_ft4_decoder (7.5s slots via
now*2/15), run_background_ft4_decoder, history push/replay, decoder
task spawn
- trx-frontend-http: ft4_history in FrontendRuntimeContext,
toggle/clear endpoints, /ft4.js route, bookmark/scheduler/background
decode support, DecodeHistoryPayload ft4 field
- web: ft4.js plugin (7.5s period timer, reuses FT8 CSS/map infra),
FT4 subtab in index.html, app.js dispatch (onServerFt4/Batch,
restoreFt4History), decode-history-worker HISTORY_GROUP_KEYS
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Stanislaw Grams <stanislawgrams@gmail.com>