Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions docs/features/Tauri_UI_spike.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,9 +113,18 @@ The `Flows` tab now supports:
- separate checked-flow selection state for batch-oriented workflows
- user-facing 1-based flow numbering while keeping stable backend `flow_index`
- address family and fragmentation state from shared flow DTOs
- compact visible `Endpoint A` / `Endpoint B` columns in the flow table instead of separate address/port columns
- endpoint formatting aligned with Qt:
- IPv4 with port: `address : port`
- IPv4 without port: `address`
- IPv6 with port: `[address] : port`
- IPv6 without port: `address`
- missing/zero/invalid port: address only
- endpoint address/port are treated as key identifiers and should stay visible in the table rather than relying on tooltip-only display
- conservative shared Wireshark display filter text plus copy
- selected-flow packet loading over the existing backend `offset / limit` API with bounded append-only `Load More`
- the initial selected-flow packet batch is intentionally small and bounded for responsiveness
- the lower selected-flow `Packets` / `Stream` controls, packet-count status, and `Load More` action now sit in one compact toolbar-style row
- packet list columns now align more closely with Qt:
- `#`
- `Direction`
Expand All @@ -132,6 +141,7 @@ The `Flows` tab now supports:
- `Payload`
- `Protocol`
- the `Summary` tab now follows Qt more closely with a compact text-style packet summary block instead of metadata cards
- the top-shell `Open Capture...` action now uses a lighter desktop-style treatment closer to the Qt shell instead of a heavy filled primary button
- Raw/Payload tabs now show the full available selected-packet byte text on demand rather than a preview-only display
- Packet Details and Stream Item Details mode selectors now use compact tab styling instead of button styling
- byte-backed packet details can recover after a valid source-capture attach
Expand Down
5 changes: 3 additions & 2 deletions docs/ui/frontend_dto_mapping.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ For the current repository-level protocol support matrix and known protocol limi
| port A | `FlowRow.port_a`; `FlowListModel.PortARole` | `FrontendFlowDto.port_a` | `FlowDto.port_a`; used for display/filter/Wireshark generation | aligned | frontend-neutral DTO | High |
| address B | `FlowRow.address_b`; `FlowListModel.AddressBRole` | `FrontendFlowDto.address_b` | `FlowDto.address_b`; used for filter and Wireshark generation | aligned | frontend-neutral DTO | High |
| port B | `FlowRow.port_b`; `FlowListModel.PortBRole` | `FrontendFlowDto.port_b` | `FlowDto.port_b`; used for display/filter/Wireshark generation | aligned | frontend-neutral DTO | High |
| combined endpoint text | `FlowRow.endpoint_a`, `endpoint_b`; `FlowListModel` filter uses them | `FrontendFlowDto.endpoint_a`, `endpoint_b` | `FlowDto.endpoint_a`, `endpoint_b`; used in Tauri filter but not shown in table | aligned at data level, not in visible columns | frontend-neutral DTO | Medium |
| combined endpoint text | `FlowRow.endpoint_a`, `endpoint_b`; `FlowListModel` filter uses them and Qt now renders them directly in compact `Endpoint A` / `Endpoint B` columns | `FrontendFlowDto.endpoint_a`, `endpoint_b` | `FlowDto.endpoint_a`, `endpoint_b`; Tauri now also renders endpoint-style columns and still reuses these fields for filtering | aligned at data and visible-column level; frontend formatting remains responsible for the final endpoint string shape | frontend-neutral DTO | Improved |
| fragmentation indicator/count | `has_fragmented_packets`, `fragmented_packet_count`; `Frag` column in Qt | `FrontendFlowDto.has_fragmented_packets`, `fragmented_packet_count` | `FlowDto.has_fragmented_packets`, `fragmented_packet_count`; now surfaced as compact `Frag` marker text in Tauri | aligned enough for compact table | frontend-neutral DTO | Resolved |
| packet count | `FlowRow.packet_count`; `FlowListModel.PacketsRole` | `FrontendFlowDto.packet_count` | `FlowDto.packet_count`; shown and filterable in Tauri | aligned | frontend-neutral DTO | High |
| byte count | `FlowRow.total_bytes`; `FlowListModel.BytesRole` | `FrontendFlowDto.total_bytes` | `FlowDto.total_bytes`; shown and filterable in Tauri | aligned | frontend-neutral DTO | High |
Expand All @@ -138,7 +138,7 @@ For the current repository-level protocol support matrix and known protocol limi
| TCP flags | `PacketRow.tcp_flags_text`; `TcpFlagsTextRole` | `FrontendPacketDto.tcp_flags_text` | `PacketDto.tcp_flags_text` | aligned | frontend-neutral DTO | High |
| IP fragmentation marker | `PacketRow.is_ip_fragmented`; `IsIpFragmentedRole` | `FrontendPacketDto.is_ip_fragmented` | `PacketDto.is_ip_fragmented`; now shown in a compact Tauri marker column | aligned enough for current scope | frontend-neutral DTO | Resolved |
| suspected retransmission marker | `PacketRow.suspected_tcp_retransmission`; `SuspectedTcpRetransmissionRole`; `hasVisibleMarkers` in Qt model | `FrontendPacketDto.suspected_tcp_retransmission`; adapter derives via `suspected_tcp_retransmission_packet_indices(...)` | `PacketDto.suspected_tcp_retransmission`; now shown in a compact Tauri marker column | aligned enough for current scope | frontend-neutral DTO already sufficient | Resolved |
| packet pagination / offset / limit / total | Qt controller exposes `loadedPacketRowCount`, `totalPacketRowCount`, `canLoadMorePackets`; load-more semantics | `FrontendSelectedFlowPacketsResult.offset`, `limit`, `total_count`; adapter uses offset/limit query | Tauri `SelectedFlowPacketsDto` and `main.js` page state with `packetOffset`, fixed page size, prev/next | semantic mismatch: Qt load-more vs Tauri page stepping | app/session facts + frontend controller/model | High |
| packet pagination / offset / limit / total | Qt controller exposes `loadedPacketRowCount`, `totalPacketRowCount`, `canLoadMorePackets`; load-more semantics | `FrontendSelectedFlowPacketsResult.offset`, `limit`, `total_count`; adapter uses offset/limit query | Tauri `SelectedFlowPacketsDto` and `main.js` now use the same bounded append-only `Load More` shape with visible `Showing N of Total packets` status | the remaining gap is presentation density, not pagination semantics | app/session facts + frontend controller/model | Improved |
| packet loading state | `MainController.packetsLoading` | none explicit in result DTO | Tauri `packetState = idle/loading/loaded/error` | shell/controller-state mismatch, not DTO gap | frontend controller/model | Medium |
| packet error state | Qt largely controller-driven; packet list can be cleared/reset | result DTO has no packet-list `error_text` field | Tauri uses invoke exception path and local `packetErrorText` | no explicit packet-list error DTO | frontend controller/model or future list-state DTO | Low |
| packet unavailable state | Qt uses source-availability and selected-flow state | no explicit packet-list unavailable text field | Tauri currently infers from shell/open/selection state | acceptable for now | app/session facts + frontend controller/model | Low |
Expand All @@ -150,6 +150,7 @@ For the current repository-level protocol support matrix and known protocol limi
| details title / header fields | `PacketDetailsViewModel.detailsTitle`, `headerPrimaryText`, `headerSecondaryText`, `badgeText` | `FrontendPacketDetailsDto.details_title` now carries the shared packet-details title; header/badge fields are still absent | Tauri now consumes shared `details_title`; summary labels remain local | title is partially aligned, header/badge remain Qt-specific today | frontend-neutral DTO for shared title, deferred for header/badge | Improved |
| summary text | `PacketDetailsViewModel.summaryText`; built in `MainController::buildPacketSummary(...)` | `FrontendPacketDetailsDto.summary_text` still carries the legacy shared text summary block built from existing packet/session facts | Qt and Tauri now keep this text as a fallback when structured layered summary data is absent | fallback path remains intentionally text-first for unavailable/older cases | frontend-neutral DTO fallback | Improved |
| structured summary layers | Qt previously kept summary mostly text-first with local formatting | `FrontendPacketDetailsDto.summary_layers` now carries a shared layered packet-summary tree with generic `layer -> fields -> children` structure | Qt Summary and Tauri Summary now both render collapsible shared layers first and fall back to `summary_text` only when layers are unavailable | shared layer model now covers Frame/Ethernet/VLAN/IPv4/IPv6/TCP/UDP/ARP plus a conservative final higher-level layer for already-recognized TLS/QUIC/DNS/HTTP/ICMP/ICMPv6 packets; base layers now include file/flow packet numbering, Ethernet MACs, and conservative IPv4/IPv6 header fields derived only during selected-packet/on-demand decoding | frontend-neutral DTO | Improved |
| Qt Summary text selection | `PacketDetailsPane.qml` now renders Summary layer titles/fields/warnings through read-only selectable text controls | no DTO change; behavior is purely frontend presentation over existing summary-layer / text fields | not applicable in current Tauri shell | this PR changes usability only; backend/session contracts are unchanged | Qt frontend presentation only | Improved |
| raw preview text | `PacketDetailsViewModel.hexText` | `FrontendPacketDetailsDto.raw_preview_text` | `PacketDetailsDto.raw_preview_text` | aligned | frontend-neutral DTO | High |
| raw preview truncated metadata | Qt text and UI state imply it, but not clearly as a standalone property | `FrontendPacketDetailsDto.raw_preview_truncated`, `raw_preview_available`, `raw_preview_unavailable_text` | Tauri uses them explicitly | Tauri/frontend-neutral shape is cleaner than Qt VM surface here | frontend-neutral DTO | High |
| payload preview text | `PacketDetailsViewModel.payloadText` | `FrontendPacketDetailsDto.payload_preview_text` | `PacketDetailsDto.payload_preview_text` | aligned | frontend-neutral DTO | High |
Expand Down
16 changes: 12 additions & 4 deletions docs/ui/presentation_contract.md
Original file line number Diff line number Diff line change
Expand Up @@ -267,10 +267,8 @@ Each flow row should expose at least the following user-facing fields:
- protocol;
- protocol hint;
- service;
- address A;
- port A;
- address B;
- port B;
- endpoint A;
- endpoint B;
- fragmentation indicator;
- packet count;
- byte count.
Expand All @@ -279,6 +277,14 @@ Each flow row should expose at least the following user-facing fields:

- Flow index is displayed as a 1-based row identifier tied to the session flow index.
- Address family is shown as `IPv4` or `IPv6`.
- The visible flow table now uses compact `Endpoint A` / `Endpoint B` columns rather than separate address/port columns.
- Endpoint formatting rules are:
- IPv4 with port: `address : port`;
- IPv4 without port: `address`;
- IPv6 with port: `[address] : port`;
- IPv6 without port: `address`;
- missing/zero/invalid port: address only.
- Endpoint address/port are treated as key identifiers and should remain fully visible through adequate column width and horizontal scrolling rather than endpoint overlap as the normal display path.
- Protocol hint is presentation-formatted:
- `possible_tls` -> `Possible TLS`;
- `possible_quic` -> `Possible QUIC`;
Expand Down Expand Up @@ -423,6 +429,7 @@ Shared expectations:
- all packets loaded;
- load more available.
- load-more is tied to the selected flow only.
- frontends may present the lower selected-flow `Packets` / `Stream` controls as one compact toolbar-style row as long as packet/stream switching, packet-count status, and `Load More` remain visible and consistent.

### Selected packet behavior

Expand Down Expand Up @@ -491,6 +498,7 @@ Qt currently uses formatted summary text rather than a purely structured field g
Current direction note:

- packet details Summary now has a first shared structured decoded-layer list for selected-packet/on-demand rendering;
- Qt Summary text inside the structured inspector is selectable/copyable via read-only text controls; this is presentation-only and does not change packet/session semantics;
- the current narrow layer model covers already-decoded facts such as Frame, Ethernet, VLAN, MPLS, ARP, IGMP, IPv4, IPv6, TCP, and UDP;
- the Frame layer should show packet index in file and, when selected-flow context is available, packet index within the selected flow;
- the Ethernet layer should expose source/destination MAC addresses and decoded EtherType text;
Expand Down
6 changes: 3 additions & 3 deletions docs/ui/tauri_qt_parity_audit.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,10 @@ This audit is based on static inspection of:
| Export unselected flows | Qt exports the inverse of checked flows over the loaded set when source bytes are available. | Same inverse-of-checked-flow export is implemented. | Low gap. | Low | Keep as-is. |
| Smart Export | Qt has a richer dialog plus explicit progress/cancel UI during long-running export. | Tauri mirrors scope/base/output options and folder mode, but uses a simpler custom dialog and lighter status reporting. | Missing richer Qt progress/cancel UX parity and some dialog-level copy/layout fidelity. | Medium | Small UI polish pass: align labels/help text first, then consider richer progress/cancel parity. |
| Settings | Qt `View -> Settings` is implemented and currently exposes the shared runtime-safe settings slice directly through QML/controller properties. | Tauri `View -> Settings` supports the same currently wired settings slice. | Core working slice matches, but persistence remains deferred and the dialog is still lighter-weight. | Medium | Keep settings scope stable; defer persistence until broader settings strategy is agreed. |
| Flows table | Qt uses a dense list-based table with checked-flow boxes, sort buttons, filter, Wireshark filter row, and `Send flow to Analysis`. | Tauri has filtering, sorting, checked-flow state, Wireshark filter row toggle, and frontend virtualization/windowing. | Tauri is closer functionally, but row styling, per-column density, and exact workflow affordances still differ. | Medium | UI polish pass focused on row density, spacing, and top-of-flows controls. |
| Flows table | Qt uses a dense list-based table with checked-flow boxes, sort buttons, filter, Wireshark filter row, `Send flow to Analysis`, compact `Endpoint A` / `Endpoint B` columns, and horizontal scrolling for wide endpoint-heavy layouts. | Tauri has filtering, sorting, checked-flow state, Wireshark filter row toggle, frontend virtualization/windowing, and matching endpoint-style columns with the same address/port formatting rules. | Tauri is closer functionally; the remaining gap is mostly row styling and compactness polish rather than column semantics. | Medium | UI polish pass focused on row density, spacing, and top-of-flows controls. |
| Checked-flow selection and selection status | Qt shows checked-flow state in-table and a bottom selection status bar when any flows are checked. | Tauri keeps checked-flow state across sorting/filtering and shows a compact checked-flow status bar. | Small presentation gap only. | Low | Keep behavior; only match wording/styling if needed. |
| Packet list | Qt packet list is bounded, supports `Load more`, and emphasizes direction/flags with compact visual treatment plus packet markers such as `Suspected retransmission`. | Tauri packet list is bounded with append-only `Load More`, Qt-like visible columns, direction chips, TCP flag highlighting, and shared packet marker display including suspected retransmission. | Main remaining gap is row-density and lower-workspace polish rather than column semantics. | Medium | Keep the bounded `Load More` model and continue with compact row styling and lower-workspace visual polish. |
| Packet details | Qt packet/stream details pane is richer: warnings block extraction, dynamic header for stream items, better text panes, and tighter tab behavior. | Tauri supports `Summary / Raw / Payload / Protocol`, full on-demand Raw/Payload text for the selected packet, checksum setting, and now consumes the same shared layered packet-summary tree as Qt for the Summary tab, with text fallback when layers are unavailable. | The main gap is now inspector polish and deeper protocol-specific presentation, not the lack of a shared Summary structure. | Medium | Keep packet-details follow-ups focused on expanding structured decoded-layer presentation carefully rather than broad workflow changes. |
| Packet list | Qt packet list is bounded, supports `Load more`, and emphasizes direction/flags with compact visual treatment plus packet markers such as `Suspected retransmission`. The lower `Packets` / `Stream` controls now sit in one compact toolbar row with status text and `Load More`. | Tauri packet list is bounded with append-only `Load More`, Qt-like visible columns, direction chips, TCP flag highlighting, shared packet marker display including suspected retransmission, and the same compact lower toolbar-style row. | Main remaining gap is row-density and lower-workspace polish rather than column semantics. | Medium | Keep the bounded `Load More` model and continue with compact row styling and lower-workspace visual polish. |
| Packet details | Qt packet/stream details pane is richer: warnings block extraction, dynamic header for stream items, better text panes, tighter tab behavior, and selectable/copyable Summary text in the Qt inspector. | Tauri supports `Summary / Raw / Payload / Protocol`, full on-demand Raw/Payload text for the selected packet, checksum setting, and now consumes the same shared layered packet-summary tree as Qt for the Summary tab, with text fallback when layers are unavailable. | The main gap is now inspector polish and deeper protocol-specific presentation, not the lack of a shared Summary structure. Qt currently retains the better copy/select story in the inspector. | Medium | Keep packet-details follow-ups focused on expanding structured decoded-layer presentation carefully rather than broad workflow changes. |
| Stream view | Qt stream view is selected-flow-only, bounded, lazy, and uses directional bubble/card presentation plus constricted badges and `Load more`. | Tauri stream view is now selected-flow-only, bounded, lazy, selectable, and uses directional cards with left/right alignment by direction. | Main remaining gap is detail richness and contextual polish, not the basic presentation model. | Medium | Keep backend loading semantics unchanged and continue with stream-item-detail polish only. |
| Stream item details | Qt has a dedicated stream-item detail presentation through the packet-details pane, with contextual headers, summary text, payload/protocol tabs, and source-packet summaries. | Tauri now shows a compact header block plus `Summary / Payload / Protocol` tabs driven by shared stream-item DTO fields and bounded fallback text. | The major workflow gap is closed; remaining differences are mostly protocol-specific formatting and the lack of stream-to-packet navigation. | Medium | Keep future work narrow: protocol-specific formatting polish and optional stream-to-packet navigation only. |
| Statistics overview | Qt uses summary cards plus denser percentage-heavy protocol/family tables and conditional top-talker sections. | Tauri provides overview cards, transport/family/protocol-hint summaries, QUIC/TLS blocks, and top endpoints/ports. | Capability is mostly present, but percentage formatting and some conditional presentation are still simpler. | Medium | Statistics polish pass focused on percentages, compactness, and drill-down affordances. |
Expand Down
Loading