Agents need a way to exercise multiple peers without launching the Tauri GUI.
Add `lanspread-peer-cli` as a workspace crate that starts the core peer runtime,
reads JSON commands from stdin, and writes result, event, and error records as
JSONL on stdout.
The harness supports status, peer listing, game listing, direct connect,
set-game-dir, download, install, uninstall, wait-peers, and shutdown commands.
It can seed tiny fixture archives that use a fixture unpacker, or delegate real
archives to an external `unrar` program when one is supplied.
Add a Dockerfile, `.dockerignore`, and `just` recipes for building the binary,
building the image, and running named harness containers with state and games
mounted under `target/peer-cli/`. The documentation now lists the crate and the
new test harness commands in the project map, with a crate-local README for the
JSONL protocol.
This commit depends on the non-GUI peer hooks introduced in the previous commit:
startup options, local-ready events, direct connects, snapshots, and explicit
post-download install policy. It does not add old-peer compatibility paths.
Test Plan:
- `git diff --check`
- `just fmt`
- `just clippy`
- `just test`
- `just peer-cli-build`
- Not run: `just peer-cli-image` requires a Docker daemon and base image access.
Depends-on: e711cf3454
Refs: crates/lanspread-peer-cli/README.md
2.1 KiB
lanspread
Peer-to-peer game library sharing for LAN parties. Peers discover each other on the local network via mDNS, exchange library metadata over QUIC, and let users browse and download games from each other. Ships as a Tauri desktop app.
Workspace layout
Cargo workspace under crates/:
lanspread-peer— core peer: networking, library, downloads, services. Start here for behavior changes. Seecrates/lanspread-peer/ARCHITECTURE.md.lanspread-proto— wire protocol types shared across peers.lanspread-mdns— mDNS-SD discovery wrapper.lanspread-db— database/schema types (sqlx + sqlite).lanspread-compat— compatibility/migration glue between db and other crates.lanspread-utils— small shared helpers.lanspread-peer-cli— JSONL peer harness for scripted and containerized tests.lanspread-tauri-deno-ts/— frontend (Vite + Deno + TS insrc/) and Tauri shell (src-tauri/). This is the GUI client.
Top-level Cargo.toml pins workspace dependency versions; per-crate Cargo.tomls set lints (pedantic clippy, unsafe_code = forbid on most).
Commands (justfile)
Never use normal cargo ... commands, use the just ... commands instead.
just run— run the GUI in dev mode.just build— build the GUI without bundling (also dev mode).just fmt— format the workspace.just clippy— lint the workspace.just test— run the workspace unit tests.just fix— auto-apply cargo/clippy fixes, then format.just clean— wipe the build cache.just peer-cli-build— build the scripted peer harness.just peer-cli-image— build the peer harness Docker image.just peer-cli-run NAME— run one named harness container with persistent state undertarget/peer-cli/NAME/.
Protocol policy
There is only one wire version — the current one. No legacy peers, no compatibility shims, no fallback paths for older builds. Anyone who wants to interop must run the current build; everyone else is out. Do not add backward-compat code, #[serde(other)] escape hatches, or "what if an old peer sends X" defenses.
General info
See README.md.