[workspace] resolver = "3" # Every crate lives under `crates/`, one directory per package. members = ["crates/*"] # `worktrees/` holds `git worktree` checkouts of this repository, which would # otherwise be walked as duplicate packages. exclude = ["worktrees"] # Shared package metadata. A member inherits a field with `field.workspace = # true`. [workspace.package] version = "0.1.0" edition = "2024" # Raised to 1.96 for OpenHuman, which no crate here builds any more. It stays # until a build on an older toolchain shows it can come down. rust-version = "1.96" license = "GPL-3.0-only" repository = "https://github.com/tinyhumansai/supermath" # Lints apply to every member that opts in with `[lints] workspace = true`. CI # runs clippy with `-D warnings`, so anything set to "warn" fails the build. [workspace.lints.rust] unsafe_code = "forbid" missing_docs = "warn" missing_debug_implementations = "warn" unreachable_pub = "warn" rust_2018_idioms = { level = "warn", priority = -1 } [workspace.lints.clippy] all = { level = "warn", priority = -1 } pedantic = { level = "warn", priority = -1 } # Library code must not panic on its own; tests and examples may. unwrap_used = "warn" expect_used = "warn" panic = "warn" todo = "warn" unimplemented = "warn" # Public fallible/panicking APIs must document their failure modes. missing_errors_doc = "warn" missing_panics_doc = "warn" doc_markdown = "warn" must_use_candidate = "warn" [workspace.lints.rustdoc] broken_intra_doc_links = "warn" private_intra_doc_links = "warn" # Dependencies shared by more than one crate, declared once so the graph holds # one version of each. A member takes one with `{ workspace = true }` and adds # only the features it needs. [workspace.dependencies] # Async methods on the `Tool` trait and on ports (`CallLog`, backends), which # must stay object-safe so tools live in a `ToolRegistry` as `dyn Tool`. async-trait = "0.1" # The envelope, argument, and payload types' wire forms. serde = { version = "1", features = ["derive"] } # Tool arguments and `Envelope::data`, which are untyped JSON at the boundary. serde_json = "1" # Each crate's error enum (`src/error/mod.rs`). thiserror = "2" # The async runtime; each crate enables the features it uses (`sync` for # cancellation, `time` for timeouts, `macros` and `rt` for tests). tokio = "1" # Backend HTTP clients (Lean, Python, literature, web, ledger). Rustls avoids a # system OpenSSL dependency. reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] } # File digests: the `if_sha256` write guard and the Lean provenance digest. sha2 = "0.10" # Hex-encodes those digests for the wire. hex = "0.4" # Scratch project workspaces in tests of the file, Lean, and Python crates. tempfile = "3" # Parses and validates source URLs in the literature and web crates. url = "2" # The MCP SDK: `supermath-mcp` serves the toolkit with it. No default # features; the crate enables the roles and transports it uses. rmcp = { version = "3", default-features = false } [profile.release] # Thin LTO with 16 codegen units and stripped debug info. lto = "thin" codegen-units = 16 strip = "debuginfo"