coop-cli 0.1.1

Fire remote jobs down a private ssh channel nothing else can contend with.
Documentation
[package]
# `coop` is taken on crates.io, so the package takes the conventional `-cli`
# suffix. Both targets below are still named `coop`, so nothing a user types
# changes.
name = "coop-cli"
version = "0.1.1"
edition = "2024"
description = "Fire remote jobs down a private ssh channel nothing else can contend with."
license = "MIT"
repository = "https://github.com/martintrojer/coop"
homepage = "https://github.com/martintrojer/coop"
documentation = "https://github.com/martintrojer/coop"
readme = "README.md"
keywords = ["ssh", "remote", "jobs", "tmux", "cli"]
categories = ["command-line-utilities", "development-tools"]
# Edition 2024 needs 1.85, and the code uses let-chains and
# `u64::is_multiple_of`. Stated so a build failure names the cause.
rust-version = "1.85"
# Ship only what builds and explains the tool. `tests/` is excluded because
# layers 2 and 3 need tmux and a local sshd, so they cannot run from a
# published tarball -- the repository is where they belong.
include = ["src/**/*.rs", "README.md", "SPEC.md", "LICENSE", "CHANGELOG.md"]

# The library keeps the short name too, so `coop::cli` and the 91 `coop::`
# paths across src/ and tests/ are unaffected by the crate rename. Without
# this, renaming the package renames the lib target and nothing compiles.
[lib]
name = "coop"
path = "src/lib.rs"

# The binary keeps the short name: `coop run`, `coop poll`, `coop tail`.
[[bin]]
name = "coop"
path = "src/main.rs"

[dependencies]
# CLI parsing
clap = { version = "4", features = ["derive"] }

# Commands cross several shell parsers encoded; use the strict standard codec
# at this injection boundary rather than maintaining complementary halves.
base64 = "0.22"

# Config: hand-edited TOML, so serde + toml only. No state database.
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
toml = "0.8"

# Errors: anyhow at the boundary, thiserror for the classified ssh failures
# that callers switch on.
anyhow = "1.0"
thiserror = "2.0"

# `~` expansion for socket paths, and the XDG state/config dirs.
directories = "6.0"