Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
c4e8594
Add design doc for qsoripper-cathub multi-client CAT hub (#467)
Treit May 28, 2026
187d2f3
docs: extend CAT hub design for ARCP-590, WSJT-X, and multi-client br…
rtreit May 28, 2026
67915bf
docs: make CAT hub rig-agnostic with a multi-strategy backend model (…
rtreit May 28, 2026
7b492ac
Add qsoripper-cathub phase 1: single-radio CAT hub skeleton (#471)
Treit May 28, 2026
e25f261
Revert "Add qsoripper-cathub phase 1: single-radio CAT hub skeleton (…
rtreit May 29, 2026
0de009e
qsoripper-cathub: multi-client CAT hub daemon (#476)
rtreit May 30, 2026
d65c14e
Support Hamlib Extended Response Protocol for Log4OM (#480)
rtreit May 30, 2026
fbd1bc5
Add CAT hub daemon checkbox to launcher TUI (#481)
rtreit May 30, 2026
36985b0
Track active TS-590 VFO in cathub (#488)
Treit Jun 1, 2026
ee3c221
Restart stale engines after launcher rebuild (#487)
rtreit Jun 1, 2026
7d6afc9
Make publish copy resilient to in-use binaries (#485)
rtreit Jun 1, 2026
20b8ad9
Add CAT hub setup-wizard management to engine setup (#482)
rtreit Jun 1, 2026
fd63ccf
cathub: auto-reconnect the radio transport with backoff (#490)
rtreit Jun 3, 2026
25fd539
Fix cathub VFO tracking (#491)
Treit Jun 3, 2026
2a2b8d2
Fix HDSDR active VFO B readback (#492)
Treit Jun 4, 2026
e272186
Harden cathub against multi-client failure modes (#493)
rtreit Jun 4, 2026
3c8b659
cathub: virtualize operating VFO as VFO A for single-VFO faces (N1MM …
rtreit Jun 4, 2026
2e14231
cathub: extend single_vfo virtualization to hamlib_net faces (WSJT-X,…
rtreit Jun 4, 2026
b8d31ee
cathub: track real TS-590 split and TX VFO and reflect to attached pr…
rtreit Jun 4, 2026
b7e025a
Speed up rig status polling (#497)
Treit Jun 4, 2026
27a20af
Fix HDSDR FB click-to-tune path (#504)
rtreit Jun 29, 2026
5f40a9f
Display fractional frequency digits across UIs (#508)
Treit Jul 1, 2026
c0aaf58
Improve logger and lookup display (#514)
Treit Jul 9, 2026
56437fb
Fix WSJT-X TS-590 band mode recall (#516)
rtreit Jul 10, 2026
1eba1ef
Add a multi-client WinKeyer broker to CatHub (#518)
rtreit Jul 12, 2026
5d44a35
Add CatHub architecture report (#521)
rtreit Jul 13, 2026
e6caa5d
Explain CatHub client identity (#522)
rtreit Jul 13, 2026
d432bb5
Log split frequency and transmit power from rigs (#524)
rtreit Jul 13, 2026
8fc648f
Replace CatHub face terminology with endpoints and sessions
rtreit Jul 13, 2026
ac79aa4
Refactor CatHub report as an architecture note
rtreit Jul 14, 2026
0defd5e
Merge standalone CatHub repository history
rtreit Jul 15, 2026
a179cea
Extract CatHub into standalone project
rtreit Jul 15, 2026
299b3d7
Vendor protoc for portable builds
rtreit Jul 15, 2026
bba9cdb
Fix cross-platform CI setup
rtreit Jul 15, 2026
dd55cbc
Satisfy current stable Clippy
rtreit Jul 15, 2026
89e802e
Preserve Hamlib wire fixture line endings
rtreit Jul 15, 2026
eeff1c8
Require warning-free Node 24 CI actions
rtreit Jul 15, 2026
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
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
crates/cathub/src/hamlib_dump_state.txt text eol=lf
36 changes: 36 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: CI

on:
push:
branches: [main]
pull_request:

jobs:
rust:
strategy:
matrix:
os: [windows-latest, ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v7.0.0
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- uses: bufbuild/buf-action@v1.4.0
with:
version: 1.50.0
github_token: ${{ github.token }}
setup_only: true
- run: cargo fmt --all -- --check
- run: cargo clippy --workspace --all-targets -- -D warnings
- run: cargo test --workspace
- run: buf lint

dotnet-protocol:
runs-on: windows-latest
steps:
- uses: actions/checkout@v7.0.0
- uses: actions/setup-dotnet@v5.4.0
with:
dotnet-version: 10.0.x
- run: dotnet build CatHub.slnx -c Release
85 changes: 85 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
name: Release

on:
push:
tags:
- "v*"

permissions:
contents: write

jobs:
daemon:
strategy:
matrix:
include:
- os: windows-latest
rid: windows-x86_64
binary: cathub.exe
- os: ubuntu-latest
rid: linux-x86_64
binary: cathub
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo build --release -p cathub
- name: Assemble release archive
shell: pwsh
run: |
$name = "cathub-${{ github.ref_name }}-${{ matrix.rid }}"
New-Item -ItemType Directory -Path "artifacts/release/$name" -Force | Out-Null
Copy-Item "target/release/${{ matrix.binary }}" "artifacts/release/$name/"
Copy-Item README.md, LICENSE "artifacts/release/$name/"
Copy-Item config "artifacts/release/$name/config" -Recurse
if ('${{ runner.os }}' -eq 'Windows') {
Compress-Archive -Path "artifacts/release/$name" -DestinationPath "artifacts/release/$name.zip"
$archive = "artifacts/release/$name.zip"
} else {
& tar -C artifacts/release -czf "artifacts/release/$name.tar.gz" $name
$archive = "artifacts/release/$name.tar.gz"
}
$hash = (Get-FileHash -LiteralPath $archive -Algorithm SHA256).Hash.ToLowerInvariant()
"$hash $([System.IO.Path]::GetFileName($archive))" |
Set-Content -LiteralPath "$archive.sha256" -NoNewline
Remove-Item -LiteralPath "artifacts/release/$name" -Recurse
- uses: actions/upload-artifact@v4
with:
name: cathub-${{ matrix.rid }}
path: artifacts/release/*

protocols:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.0.x
- run: cargo package -p cathub-protocol
- run: dotnet pack src\dotnet\CatHub.Protocol\CatHub.Protocol.csproj -c Release -o artifacts\release
- name: Collect protocol packages and checksums
shell: pwsh
run: |
Copy-Item target\package\cathub-protocol-*.crate artifacts\release\
Get-ChildItem artifacts\release -File | ForEach-Object {
$hash = (Get-FileHash -LiteralPath $_.FullName -Algorithm SHA256).Hash.ToLowerInvariant()
"$hash $($_.Name)" | Set-Content -LiteralPath "$($_.FullName).sha256" -NoNewline
}
- uses: actions/upload-artifact@v4
with:
name: cathub-protocols
path: artifacts/release/*

publish:
needs: [daemon, protocols]
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
with:
path: release
merge-multiple: true
- uses: softprops/action-gh-release@v2
with:
generate_release_notes: true
files: release/*
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
# will have compiled files and executables
debug
target
artifacts
.vs
**/bin
**/obj

# These are backup files generated by rustfmt
**/*.rs.bk
Expand Down
16 changes: 16 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Contributing

Use a current stable Rust toolchain, the .NET 10 SDK, Buf, and PowerShell 7.

Run the complete local gate before opening a pull request:

```powershell
.\build.ps1 check
```

Changes to files under `crates\cathub-protocol\proto` are public wire-contract changes.
Keep protobuf 1-1-1 structure, use unique request and response envelopes, run `buf lint`,
and document compatibility. Do not rename the 0.1 `qsoripper.services` package in place.

Hardware transmission tests must be attended. Automated tests must not key a physical
transmitter.
Loading