Fix historical DM packet length passing and fix up some docs

This commit is contained in:
Jack Kingsman
2026-03-08 17:12:36 -07:00
parent 523fe3e28e
commit 2732506f3c
4 changed files with 14 additions and 5 deletions

View File

@@ -20,7 +20,7 @@ app/
├── database.py # SQLite connection + base schema + migration runner
├── migrations.py # Schema migrations (SQLite user_version)
├── models.py # Pydantic request/response models
├── repository/ # Data access layer (contacts, channels, messages, raw_packets, settings)
├── repository/ # Data access layer (contacts, channels, messages, raw_packets, settings, fanout)
├── radio.py # RadioManager + auto-reconnect monitor
├── radio_sync.py # Polling, sync, periodic advertisement loop
├── decoder.py # Packet parsing/decryption
@@ -29,6 +29,7 @@ app/
├── websocket.py # WS manager + broadcast helpers
├── fanout/ # Fanout bus: MQTT, bots, webhooks, Apprise (see fanout/AGENTS_fanout.md)
├── dependencies.py # Shared FastAPI dependency providers
├── path_utils.py # Path hex rendering and hop-width helpers
├── keystore.py # Ephemeral private/public key storage for DM decryption
├── frontend_static.py # Mount/serve built frontend (production)
└── routers/
@@ -296,6 +297,10 @@ tests/
├── test_send_messages.py # Outgoing messages, bot triggers, concurrent sends
├── test_settings_router.py # Settings endpoints, advert validation
├── test_statistics.py # Statistics aggregation
├── test_channel_sender_backfill.py # Sender key backfill for channel messages
├── test_fanout_hitlist.py # Fanout-related hitlist regression tests
├── test_main_startup.py # App startup and lifespan
├── test_path_utils.py # Path hex rendering helpers
├── test_websocket.py # WS manager broadcast/cleanup
└── test_websocket_route.py # WS endpoint lifecycle
```

View File

@@ -71,6 +71,7 @@ async def _run_historical_channel_decryption(
timestamp=result.timestamp,
received_at=packet_timestamp,
path=path_hex,
path_len=packet_info.path_length if packet_info else None,
realtime=False, # Historical decryption should not trigger fanout
)

View File

@@ -694,7 +694,10 @@ export function App() {
</SheetContent>
</Sheet>
<main id="main-content" className="flex-1 flex flex-col bg-background min-w-0">
<main
id="main-content"
className="flex-1 flex flex-col bg-background min-w-0 min-h-0 overflow-hidden"
>
<div
className={cn(
'flex-1 flex flex-col min-h-0',
@@ -734,7 +737,7 @@ export function App() {
<h2 className="flex justify-between items-center px-4 py-2.5 border-b border-border font-semibold text-base">
Raw Packet Feed
</h2>
<div className="flex-1 overflow-hidden">
<div className="flex-1 min-h-0 overflow-hidden relative">
<RawPacketList packets={rawPackets} />
</div>
</>

View File

@@ -202,14 +202,14 @@ export function RawPacketList({ packets }: RawPacketListProps) {
if (packets.length === 0) {
return (
<div className="h-full overflow-y-auto p-5 text-center text-muted-foreground">
<div className="absolute inset-0 overflow-y-auto p-5 text-center text-muted-foreground">
No packets received yet. Packets will appear here in real-time.
</div>
);
}
return (
<div className="h-full overflow-y-auto p-4 flex flex-col gap-2" ref={listRef}>
<div className="absolute inset-0 overflow-y-auto p-4 flex flex-col gap-2" ref={listRef}>
{sortedPackets.map(({ packet, decoded }) => (
<div
key={getRawPacketObservationKey(packet)}