dsh-live-voice-debugger 0.7.2 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/ARCHITECTURE.md CHANGED
@@ -1,18 +1,24 @@
1
1
  # Live Voice Debugger
2
2
 
3
- This public, optional client plugin builds separately from Live Voice. It contributes an optional Developer tab inside the existing Live Voice Settings and opens a separate browser window containing the React inspector only after explicit activation. Its runtime boundaries are the versioned read-only diagnostic source and the recording service published by the main plugin, not coordinator imports. The Recordings tab is primary; the live state inspector remains a secondary tab. A conditional Runtimes tab appears after a browser ASR model load is attempted and retains failed/released attempts for diagnosis. It reads the same versioned source, never imports the manager or controls inference. It shows pinned model/precision/provider metadata, worker/protocol versions, bounded 100-entry lifecycle events, load/inference timings, counters and scoped memory/storage accounting. Cached file sizes are not model RAM/VRAM; page JS heap is optional/non-standard and excludes full workers/WASM/GPU memory. No raw ONNX console, audio or transcript is retained in runtime events. It supports either plugin load order and source replacement/removal.
3
+ This public, optional client plugin builds separately from Live Voice. It contributes an optional Developer tab inside the existing Live Voice Settings and opens a separate browser window containing the React inspector only after explicit activation. Its runtime boundaries are the versioned read-only diagnostic source and the recording service published by the main plugin, not coordinator imports. The Recordings tab is primary; the live state inspector remains a secondary tab. A conditional Runtimes tab appears after a browser ASR model load is attempted and retains failed/released attempts for diagnosis. It reads the same versioned source, never imports the manager or controls inference. It shows pinned model/precision/provider metadata, worker/protocol versions, bounded 100-entry lifecycle events, load/inference timings, counters and scoped memory/storage accounting. Cached file sizes are not model RAM/VRAM; page JS heap is optional/non-standard and excludes full workers/WASM/GPU memory. No raw ONNX console, audio or transcript is retained in runtime events. It supports either plugin load order and source replacement/removal. Its optional developer extension `open({ recordingId })` launches or focuses the existing popup synchronously from a user gesture. A source-bar request selects the exact current recording ID, clears conflicting source filters and opens Session layout once the record is available; repeated requests navigate an already-open popup. Settings retains generic opening. An older extension without open remains Settings-only.
4
4
 
5
5
  The panel samples current state at a selectable 1, 2, 5, 10 or 20 Hz (default 10). State and event panes scroll independently. Event recording can be paused independently from live state sampling and the entire event history can be cleared. Resuming recording starts from the current baseline without replaying changes that occurred while paused. Changing the sampling rate preserves the history. While connected, coordinator notifications produce a bounded 200-entry state-difference history filterable by module. This is an initial inspector, not a complete semantic event logger: changes hidden inside an adapter can only be sampled, and native recognition internals remain unavailable. The generic diagnostic history retains no audio. Free-form diagnostic text is hidden by default and can be inspected explicitly in memory, never persisted by this inspector. The separate Recordings view reads opt-in archived sessions from the main recorder, including their transcript history, and exposes explicit playback, export, star protection, starred-session naming and confirmed deletion actions. Optional additive name support keeps older v1 recording services inspectable. A separate event table and timeline markers show persisted assistant playback and capture events, retaining actual time when multiple events share the final captured boundary. A starred recording is excluded from automatic cleanup and retention counts, but may still be deleted manually; the star is not browser persistence permission or backup protection. Opening/inspecting never deletes or exports. Session playback URLs and subscriptions are released on replacement, closing or page hiding. Closing the panel releases subscriptions and timers.
6
6
 
7
- EventTimeline uses five labeled semantic lanes (waiting, playback, capture/listening, voice command, interruptions/issues) and distinct action glyphs. Nearby events in the same category group into viewport-width buckets with a count; every original timestamp remains in the list. Immediate hover/focus tooltips use a manual top-layer popover, clamp to the owning viewport, ignore all pointer events, reposition on scroll and dismiss on Escape/resize/blur/page hide, and preview up to five originals. Activation highlights all group rows and focuses the first; no tooltip control intercepts neighboring markers. Recognized-command speech is an orange view annotation based on exact segment IDs, never a VAD pin or an inferred legacy classification.
7
+ EventTimeline uses six labeled semantic lanes (waiting, playback, capture/listening, voice command, ignored while muted, interruptions/issues) and distinct action glyphs. Only categories containing markers in the current window render a lane; the full legend remains visible. Internal Segments/Events/Boundary pins tabs default to Segments and retain the three lists while hiding inactive panels. Boundary pins is not a shared disclosure below the lists. Marker activation opens Events before focusing its row. Nearby events in the same category group into viewport-width buckets with a count; every original timestamp remains in the list. Immediate hover/focus tooltips use a manual top-layer popover, clamp to the owning viewport, ignore all pointer events, reposition on scroll and dismiss on Escape/resize/blur/page hide, and preview up to five originals. Activation highlights all group rows and focuses the first; no tooltip control intercepts neighboring markers. Recognized-command speech is an orange view annotation based on exact segment IDs, never a VAD pin or an inferred legacy classification. Muted non-command finals use a distinct crossed/striped pink Ignored annotation in the sample timeline and segment/event lists, based on their persisted original segment IDs, never inferred from historical silence. Commands take presentation precedence if one segment contains both kinds of attempts. Ordinary speech rows have a green marker.
8
8
 
9
9
  A separate event-marker track and accessible timestamped event table display assistant waiting, changing wait reasons, playback requests, input-stop request/completion/failure, confirmed engine playback, cancellations and errors. It never turns these into speech/silence pins or collapses events sharing the final capture boundary into one event. Typed numeric/reason details contain no transcript.
10
10
 
11
11
  Attempt details show measured HTTP WAV request bytes, input/output samples/rates, encoded versus expected duration, preparation time, language and response status. Missing legacy metadata is unavailable, never reconstructed as if measured. The UI explicitly distinguishes prepared browser-to-DSH bodies from server receipt/model consumption.
12
12
 
13
+ The Segments heading offers explicit Copy transcripts for the current window/search-filtered list. It copies one latest successful nonempty attempt per segment in displayed order, separated by blank lines, including ignored speech without historical retries or event metadata. A partially overlapping segment contributes its complete transcript; there is no word-level clipping. Clipboard access uses the popup owner window and reports denial/unavailability visibly without changing capture or the Composer.
14
+
13
15
  Segment rows provide localized icon-only play, exact-range WAV download, and optional speech retranscription. Retranscription uses the currently selected `qwen-http`, `whisper-http`, browser-local `whisper-browser` / `qwen-browser`, or native Browser SpeechRecognition engine with boundary context (minimum 800 ms). Browser-local models must be downloaded in Settings first; retry never downloads models or falls back to HTTP. Native retry is available only when safe external-audio-track support is verified, processes existing saved segments under the selected local/remote-processing and language-pack requirements, and never falls back to microphone capture. Native Browser live capture still does not record original speech. Retranscription requires finished capture and adds audit attempts without editing the composer or executing commands; older v1 services simply omit it. Selecting speech or silence in the timeline loads that exact segment in the shared player without autoplay; zoom never changes the selected audio range.
14
16
 
15
- The recording timeline has a single sample-clock track with two accessible slider handles and a draggable selected band for a non-destructive zoom window. Pointer capture supports mouse/touch/pen; keyboard arrows, Page Up/Down and Home/End resize or pan with clamped bounds. The icon-only reset has a localized title and accessible name; rendered segments and pins are clipped/remapped without changing stored ranges or playback. The end follows live growth until narrowed. Switching sessions resets the window. The segment list uses the same overlapping sample ranges as the visible timeline, including partially visible segments; transcript search applies within that window and ranks normalized exact text/phrases, whole and partial words, then bounded typo matches; only successful nonempty transcripts appear while a query is active, and clearing restores chronological segments. A prominent storage card always summarizes the full unfiltered list, session count and encoded-audio size. Unknown/invalid legacy counts produce an explicit measured lower bound, not zero or a discarded total. Loading/failure is not a known empty archive. Confirmed bulk removal snapshots eligible IDs across all sources (including stars), rechecks each before the existing service remove call, preserves active/pending sessions and reports removed/skipped/failed counts without claiming transaction-wide atomicity. New sessions never join a confirmed batch; service replacement, unmount or page hide stop future calls, not an already-dispatched removal. Cancel receives initial focus, Escape cancels before execution, and the result receives focus after completion. Detail playback/retries are released while clearing; invalid source filters reset after removal. No DSH conversation, exported file or future-capture setting is deleted.
17
+ The horizontal summary preserves speech/silence bands and uses the same speech/command palette as the icon legend. Thin purple waiting and blue playback strips overlay paired event intervals on the captured sample clock without covering speech. Equal-sample event pairs remain point markers in the event track, never invented duration during speaker-gated capture gaps. The single icon legend uses Capture/listening for the green captured-speech presentation, without a duplicate Speech entry; Silence remains separately identified.
18
+
19
+ The detail timeline omits a redundant heading and the text-only underlined legend; the icon category legend and marker help remain. Visible window bounds use short Start/End labels while sliders retain explicit accessible names. The audio player follows the event markers and immediately precedes the internal list tabs.
20
+
21
+ The recording timeline has a single sample-clock track with two accessible slider handles and a draggable selected band for a non-destructive zoom window. Pointer capture supports mouse/touch/pen; keyboard arrows, Page Up/Down and Home/End resize or pan with clamped bounds. The icon-only reset has a localized title and accessible name; rendered segments and pins are clipped/remapped without changing stored ranges or playback. The end follows live growth until narrowed. Switching sessions resets the window. The timestamped event table filters event sample positions inclusively to the same visible window as event markers; reset restores every original event, including the live right-edge boundary. The segment list uses the same overlapping sample ranges as the visible timeline, including partially visible segments; transcript search applies within that window and ranks normalized exact text/phrases, whole and partial words, then bounded typo matches; only successful nonempty transcripts appear while a query is active, and clearing restores chronological segments. A dedicated Storage tab summarizes the full unfiltered list, session count and encoded-audio size; its tab label includes the same locale-formatted total (or a measured lower bound), independent of the source filter. The navigation row places tabs on the left and source filter/refresh on the right, wrapping on narrow screens. Its View selector chooses List, Split or Session. With no visible selection, List uses the full width and session-only modes are disabled; explicitly selecting a recording opens Split. List/Session hide the other panel without unmounting details or resetting zoom, search or playback. Returning to List uses the same selector in the existing toolbar. RecordingPanel stays mounted across tab changes and portals its controls and storage into stable parent-owned destinations, preserving selection, zoom, search and audio state. Bulk deletion still releases detail playback through the existing busy gate. Detail title and primary actions share one wrapping horizontal header. Session metadata uses semantic dt/dd pairs grouped in wrapping flex items, rather than one vertical grid row per fact; attempt request metadata keeps its separate grid. Unknown/invalid legacy counts produce an explicit measured lower bound, not zero or a discarded total. Loading/failure is not a known empty archive. Confirmed bulk removal snapshots eligible IDs across all sources (including stars), rechecks each before the existing service remove call, preserves active/pending sessions and reports removed/skipped/failed counts without claiming transaction-wide atomicity. New sessions never join a confirmed batch; service replacement, unmount or page hide stop future calls, not an already-dispatched removal. Cancel receives initial focus, Escape cancels before execution, and the result receives focus after completion. Detail playback/retries are released while clearing; invalid source filters reset after removal. No DSH conversation, exported file or future-capture setting is deleted.
16
22
 
17
23
  Totals, per-session sizes and deletion previews share one decimal-SI formatter (1 KB = 1,000 bytes), automatically selecting B/KB/MB/GB/TB and capping units at TB. It shows at most one fractional digit, no thousands grouping, and uses the explicit DSH UI locale (Portuguese decimal comma), not browser or speech language. Values rounding to 1000 promote to the next unit where available. Encoded audio size is not origin quota, JS memory or WAV export size; older services without byte counts show unavailable rather than zero.
18
24