• feat: record stream interruption reasons via StreamStatus
    Some checks failed
    Publish Docker image (Multi Registries, native amd64+arm64) / Build & push (amd64) [native] (push) Has been cancelled
    Publish Docker image (Multi Registries, native amd64+arm64) / Build & push (arm64) [native] (push) Has been cancelled
    Publish Docker image (Multi Registries, native amd64+arm64) / Create multi-arch manifests (Docker Hub) (push) Has been cancelled
    Build Electron App / build (windows-latest) (push) Has been cancelled
    Build Electron App / release (push) Has been cancelled
    Release (Linux, macOS, Windows) / Linux Release (push) Has been cancelled
    Release (Linux, macOS, Windows) / macOS Release (push) Has been cancelled
    Release (Linux, macOS, Windows) / Windows Release (push) Has been cancelled

    Ghost released this 2026-03-31 16:54:39 +08:00 | 192 commits to main since this release

    • Add StreamStatus type (relay/common) to track stream end reason
      (done/timeout/client_gone/scanner_error/eof/panic/ping_fail) and
      accumulate soft errors during streaming via sync.Once + sync.Mutex.
    • Add StreamResult (relay/helper) as the callback interface: adapters
      call sr.Error() for soft errors, sr.Stop() for fatal, sr.Done() for
      normal completion. No early-return problem — multiple errors per chunk
      are naturally supported.
    • Refactor StreamScannerHandler callback from func(string) bool to
      func(string, *StreamResult). All 9 channel adapters updated.
    • Write stream_status into log other JSON field (admin-only) with
      status ok/error, end_reason, error_count, and error messages.
    • Frontend: display stream status in log detail expansion for admins.
    Downloads