Something went wrong. Try again.
vibescrobble! every agent, live on stage. vibescrobble.com
atproto agent llm did
Something went wrong. Try again.
vibescrobble.com Cargo.toml
7.9 kB · 154 lines
TOML
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155# Virtual workspace. Every crate shares one version, because they are one# product released together rather than independently useful libraries; see# release.toml, which relies on that.[workspace]resolver = "3"members = ["crates/*"]
[workspace.package]version = "0.3.1"edition = "2021"rust-version = "1.90"license = "MIT"repository = "https://tangled.org/permadeath.com/vibescrobble.com"publish = false
[workspace.dependencies]vibescrobble-index = { version = "0.3.1", path = "crates/vibescrobble-index" }vibescrobble-query = { version = "0.3.1", path = "crates/vibescrobble-query" }# DID syntax, DID documents and handle validation are protocol. They were# taken from didbot, which is not the protocol — it is one server that happens# to implement it, and an indexer compiled against a producer can only ever# read that producer. This is somebody else's reading of the specification,# which is the point.## Default features off: `hickory-dns` is for resolving handles over DNS and# `lru` for a cache this crate does not use. What is wanted here is the syntax# and the document model.atproto-identity = { version = "0.14", default-features = false }# The system's resolver, for a handle's `_atproto` TXT record.hickory-resolver = { version = "0.26", default-features = false, features = ["system-config", "tokio"] }# The same release `atproto-identity` builds on, for DAG-CBOR and CAR: what a# `com.atproto.sync.subscribeRepos` frame is made of.atproto-dasl = { version = "0.14", default-features = false }
# Readers are served a copy of the view swapped in whole after each change,# so a reader never waits on the lock ingest writes under.arc-swap = "1"# Maps that share their nodes with their copies: taking that copy costs a# pointer per map rather than the whole population.imbl = "7"# `ws` is what a replay serves `subscribeRepos` on.axum = { version = "0.8", features = ["ws"] }base64 = "0.22"# An account's avatar and banner are decoded, cut to the size they are drawn# at and encoded again before anyone is served them. Only the formats an# atproto profile picture comes in.image = { version = "0.25", default-features = false, features = ["jpeg", "png", "webp"] }# DPoP proofs are ES256, which is P-256: the curve this workspace's server# side verifies and the one every atproto authorization server accepts.p256 = { version = "0.13", features = ["ecdsa"] }sha2 = "0.10"# Share cards are drawn in the query service, as SVG rasterised in-process:# no browser on a 2 GB box. Text and raster pictures only; the faces are the# page's own, handed over by the service rather than read off the system.resvg = { version = "0.48", default-features = false, features = ["text", "memmap-fonts", "raster-images"] }# The page's faces are WOFF2, which a font database does not read. Brotli# only: WOFF2 is all this decodes.wuff = { version = "0.2", default-features = false, features = ["brotli"] }# A card's lines are wrapped by the advances of the face they are set in.# The release usvg already builds on, with what it turns on.skrifa = { version = "0.44", default-features = false, features = ["std"] }url = "2"# Finds URLs and bare domains in prose, for the index's clustering to read as# one host each.linkify = "0.11"# Snowball stemming, so the index counts `deploy` and `deploying` as one word.rust-stemmers = "1.2"# Only for the `Stream` trait axum's server-sent events want; axum does not# re-export it.futures-core = "0.3"# Networks, for `--trusted-proxy`. Already in the graph through reqwest.ipnet = "2"# Finding `"usage"` in a transcript line before parsing it. Already in the# graph through serde_json and regex.memchr = "2"# `SinkExt`, to send a WebSocket ping; `StreamExt::buffer_unordered`, to read# accounts a few at a time.futures-util = { version = "0.3", default-features = false, features = ["sink", "alloc"] }# `stream` is what lets a client read a server-sent-event body as it# arrives rather than waiting for a response that never ends.reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls", "stream"] }serde = { version = "1", features = ["derive"] }serde_json = "1"thiserror = "2"# RFC 3339 timestamps, formatted and compared.time = { version = "0.3", features = ["formatting", "parsing", "macros"] }# The weekly ledgers on disk, one row per account and week. Bundled, so the# image needs no system SQLite and every build links the same one.rusqlite = { version = "0.40", features = ["bundled"] }# Both streams this reads -- a server's `com.atproto.sync.subscribeRepos` and a# Jetstream -- are WebSockets. The version is the one axum's `ws` feature# builds on, so the graph carries one copy. rustls rather than native TLS, to# match reqwest and keep one TLS stack in the binary.tokio-tungstenite = { version = "0.29", default-features = false, features = ["connect", "rustls-tls-webpki-roots"] }# Only to hand tokio-tungstenite a config with DIDBOT_EXTRA_CA_CERTS added to# the webpki roots it would otherwise use. ring, the provider reqwest uses.rustls = { version = "0.23", default-features = false, features = ["ring", "std", "tls12"] }webpki-roots = "1"tokio = { version = "1", features = ["rt-multi-thread", "macros", "net", "signal", "time", "sync"] }tower = { version = "0.5", features = ["util"] }tower-http = { version = "0.6", features = ["trace", "cors"] }tracing = "0.1"# Grapheme counting, for the lexicon's `maxGraphemes` limits.unicode-segmentation = "1"tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt", "time"] }
# Debug information is off in development and test builds. It is most of what# a build of this workspace writes, and almost none of it is read: nothing here# is debugged by stepping, and a backtrace still names each frame's function# from the symbol table. What a backtrace loses is each frame's file and line.## Measured against line tables by building `vibescrobble-index` and then its# tests from cold into a fresh target directory under each setting, twice, at# this workspace's two jobs: 2.5 GB of target down to 1.5 GB, the binary# 105 MB down to 57 MB, and the peak memory of the largest single process# 790 MB down to 770 MB. Wall time moved less than the run-to-run noise.# Several worktrees building at once is what fills this machine's swap and# disk, and a full disk mid-link reads as the linker crashing.## The saving arrives on the next `cargo clean`. Cargo leaves artefacts it has# superseded, so an older target directory holds both shapes and briefly grows.## To get file and line back for one command without editing this file, set# `CARGO_PROFILE_DEV_DEBUG=line-tables-only` for `cargo build` or `cargo run`,# and `CARGO_PROFILE_TEST_DEBUG=line-tables-only` for `cargo test`. Either# rebuilds every crate, once when set and again when unset, so a worktree that# needs them for a while is better off changing the lines below in its own# copy. `true` in place of `line-tables-only` is what a stepping debugger needs.[profile.dev]debug = false
# Set separately because the test profile is what `cargo test` builds every# crate under, and its binaries are the largest in the tree.[profile.test]debug = false
# The card rasteriser is optimised even in a debug build: unoptimised, one# swarm card takes over ten seconds to draw, and the tests draw a dozen.[profile.dev.package.tiny-skia]opt-level = 3[profile.dev.package.tiny-skia-path]opt-level = 3[profile.dev.package.resvg]opt-level = 3[profile.dev.package.usvg]opt-level = 3
[workspace.lints.rust]missing_docs = "warn"
# clippy::doc_markdown is deliberately NOT enabled. Doc comments use proper# nouns like PreToolUse, SessionStart, ATProto, and other protocol terminology# that belong in prose without backticks. Backticking a proper noun to satisfy# a lint makes the sentence worse.